[gpgme] change work dir

Marcus Brinkmann marcus.brinkmann at ruhr-uni-bochum.de
Tue Dec 7 19:36:02 CET 2004

At Mon, 6 Dec 2004 09:48:42 +0100,
micron <micron at madlab.it> wrote:
> How can I make gpgme to store/read data from a different dir instead of 
> ~/.gpg?
> I've seen something into context's key listining mode but I haven't understand 
> how to use it.

Ok, here is a deal.  I have committed changes to GPGME that should do
that.  That's my part of the deal.  Your part is to actually try them
out :)

I have only run the included test suite.  I did not try to actually
change the home dir.  This is up to you.

The changes are in CVS HEAD (see below for the ChangeLog entry).

The way to change the default is to call:

gpgme_set_engine_info (GPGME_PROTOCOL_OpenPGP, NULL, "/home/foo/other/gpgrc");

or on a per-context basis:

gpgme_ctx_set_engine_info (ctx, GPGME_PROTOCOL_OpenPGP,
			   NULL, "/home/foo/other/gpgrc");

Easy, isn't it?

You can also change the binary:

gpgme_set_engine_info (GPGME_PROTOCOL_OpenPGP, "/home/foo/bin/gpg2", NULL);

Or both.

Try it out, and tell me if it works for you.  When they do, I can
document them and then they'll be part of GPGME 1.1.


2004-12-07  Marcus Brinkmann  <marcus at g10code.de>

	* libgpgme.vers (GPGME_1.1): New version.
	* engine-backend.h (struct engine_ops): Add argument FILE_NAME to
	member get_version().  Add arguments FILE_NAME and HOME_DIR to
	member new().  Change return type of get_file_name and get_version
	to char *.
	* engine-gpgsm.c (gpgsm_get_version): Change return type to char
	pointer.  Do not cache result.
	(gpgsm_new): Add file_name and home_dir argument, and use them
	instead of the defaults, if set.
	* rungpg.c (struct engine_gpg): New member file_name.
	(gpg_get_version): Change return type to char pointer, and do not
	cache result.
	(gpg_release): Free gpg->file_name.
	(gpg_new): Take new arguments file_name and home_dir.  Set the
	--homedir argument if HOME_DIR is not NULL.  Set gpg->file_name.
	(start): Use gpg->file_name instead _gpgme_get_gpg_path, if set.
	* engine.h (_gpgme_engine_info_copy, _gpgme_engine_info_release):
	New prototypes.
	(_gpgme_engine_new): Change first argument to gpgme_engine_info_t
	* engine.c: Include <assert.h>.
	(gpgme_get_engine_info): Set *INFO within the lock.  Move
	(engine_info, engine_info_lock): ... here.  New static variables.
	(engine_get_version): Add file_name argument to
	get_version invocation.  Change return type to char pointer.
	(gpgme_engine_check_version): Rewritten to free() the return value
	of engine_get_version after using it.
	(_gpgme_engine_info_release): New function.
	(gpgme_get_engine_info): Rewritten.
	(_gpgme_engine_info_copy): New function.
	(_gpgme_set_engine_info): New function.
	(gpgme_set_engine_info): New function.
	(_gpgme_engine_new): Change first argument to gpgme_engine_info_t
	info, and use that.
	* gpgme.h (struct _gpgme_engine_info): Change type of file_name
	and version to char * (remove the const).  New member home_dir.
	(gpgme_set_engine_info, gpgme_ctx_get_engine_info,
	gpgme_ctx_set_engine_info): New prototypes.
	* context.h (struct gpgme_context): New member engine_info.
	* gpgme.c (gpgme_new): Allocate CTX->engine_info.
	(gpgme_release): Deallocate CTX->engine_info.
	(gpgme_ctx_get_engine_info, gpgme_ctx_set_engine_info): New
	* op-support.c (_gpgme_op_reset): Look for correct engine info and
	pass it to _gpgme_engine_new.
	* version.c (gpgme_check_version): Adjust to
	_gpgme_compare_versions returning an int.
	(_gpgme_compare_versions): Return an int value, not a const char
	* ops.h (_gpgme_compare_versions): Same for prototype.

More information about the Gnupg-devel mailing list