aboutsummaryrefslogtreecommitdiffstats
path: root/src/posix-util.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2014-01-06 16:16:52 +0000
committerWerner Koch <[email protected]>2014-01-06 16:16:52 +0000
commit6564e5e78e8c6e5a120675a5699b5b75248cfbc7 (patch)
treef60419297debdcd94c12f9c05dc7918b759c2200 /src/posix-util.c
parentLocate engine names only at runtime and prefer GnuPG-2. (diff)
downloadgpgme-6564e5e78e8c6e5a120675a5699b5b75248cfbc7.tar.gz
gpgme-6564e5e78e8c6e5a120675a5699b5b75248cfbc7.zip
Add global flags disable-gpgconf, gpgconf-name, and gpg-name.
* src/gpgme.c (gpgme_set_global_flag): Add names "disable-gpgconf", "gpgconf-name", and "gpg-name". * src/dirinfo.c (_gpgme_dirinfo_disable_gpgconf): New. (get_gpgconf_item): Minor debug info change. * src/posix-util.c (default_gpg_name, default_gpgconf_name): Add vars. (_gpgme_set_default_gpg_name): New. (_gpgme_set_default_gpgconf_name): New. (_gpgme_get_gpg_path, _gpgme_get_gpgconf_path): Use new vars. (walk_path): Add debug output on failure. * src/w32-util.c (default_gpg_name, default_gpgconf_name): Add vars. (replace_slashes): New. (get_basename): New. (_gpgme_set_default_gpg_name): New. (_gpgme_set_default_gpgconf_name): New. (_gpgme_get_gpg_path, _gpgme_get_gpgconf_path): Use new vars. * tests/t-engine-info.c (main): Add --verbose and --set-global-flag options. -- Note that the Windows part has not been tested.
Diffstat (limited to 'src/posix-util.c')
-rw-r--r--src/posix-util.c47
1 files changed, 45 insertions, 2 deletions
diff --git a/src/posix-util.c b/src/posix-util.c
index d4e4e3f4..5bfc4865 100644
--- a/src/posix-util.c
+++ b/src/posix-util.c
@@ -29,6 +29,46 @@
#include "util.h"
#include "sys-util.h"
+#include "debug.h"
+
+/* These variables store the malloced name of alternative default
+ binaries. The are set only once by gpgme_set_global_flag. */
+static char *default_gpg_name;
+static char *default_gpgconf_name;
+
+/* Set the default name for the gpg binary. This function may only be
+ called by gpgme_set_global_flag. Returns 0 on success. Leading
+ directories are removed from NAME. */
+int
+_gpgme_set_default_gpg_name (const char *name)
+{
+ const char *s;
+
+ s = strrchr (name, '/');
+ if (s)
+ name = s + 1;
+
+ if (!default_gpg_name)
+ default_gpg_name = strdup (name);
+ return !default_gpg_name;
+}
+
+/* Set the default name for the gpgconf binary. This function may
+ only be called by gpgme_set_global_flag. Returns 0 on success.
+ Leading directories are removed from NAME. */
+int
+_gpgme_set_default_gpgconf_name (const char *name)
+{
+ const char *s;
+
+ s = strrchr (name, '/');
+ if (s)
+ name = s + 1;
+
+ if (!default_gpgconf_name)
+ default_gpgconf_name = strdup (name);
+ return !default_gpgconf_name;
+}
/* Find an executable program PGM along the envvar PATH. */
@@ -60,6 +100,9 @@ walk_path (const char *pgm)
path = s + 1;
}
+ _gpgme_debug (DEBUG_ENGINE, "gpgme-walk_path: '%s' not found in '%s'",
+ pgm, path);
+
free (fname);
return NULL;
}
@@ -72,7 +115,7 @@ walk_path (const char *pgm)
char *
_gpgme_get_gpg_path (void)
{
- return walk_path ("gpg");
+ return walk_path (default_gpg_name? default_gpg_name : "gpg");
}
@@ -81,7 +124,7 @@ _gpgme_get_gpg_path (void)
char *
_gpgme_get_gpgconf_path (void)
{
- return walk_path ("gpgconf");
+ return walk_path (default_gpgconf_name? default_gpgconf_name : "gpgconf");
}
/* See w32-util.c */