2007-11-28 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Wed, 28 Nov 2007 16:31:05 +0000 (16:31 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Wed, 28 Nov 2007 16:31:05 +0000 (16:31 +0000)
* w32-util.c (_gpgme_get_gpg_path, _gpgme_get_gpgsm_path): Search
for installation directory.  Remove old fallback default.
(find_program_in_inst_dir): New function.

trunk/gpgme/ChangeLog
trunk/gpgme/w32-util.c

index 38ad0dd07d7c8bb52a460f9689f3479af30b9bf2..f942d83c16a1dcccdcedc41dd7da7bd0c658888c 100644 (file)
@@ -1,3 +1,9 @@
+2007-11-28  Marcus Brinkmann  <marcus@g10code.de>
+
+       * w32-util.c (_gpgme_get_gpg_path, _gpgme_get_gpgsm_path): Search
+       for installation directory.  Remove old fallback default.
+       (find_program_in_inst_dir): New function.
+
 2007-11-26  Werner Koch  <wk@g10code.com>
 
        * engine-gpgsm.c (struct engine_gpgsm): Add field INLINE_DATA and
index 50a3c92d766925aebd1e8a00f3e4376deaade747..60c8396d0cf5d4febf44f98934ff14dd556ab538 100644 (file)
@@ -244,6 +244,36 @@ find_program_in_registry (const char *name)
 }
 
 
+static char *
+find_program_in_inst_dir (const char *name)
+{
+  char *result = NULL;
+  char *tmp;
+
+  tmp = read_w32_registry_string ("HKEY_LOCAL_MACHINE",
+                                       "Software\\GNU\\GnuPG",
+                                       "Install Directory");
+  if (!tmp)
+    return NULL;
+
+  result = malloc (strlen (tmp) + 1 + strlen (name) + 1);
+  if (!result)
+    {
+      free (tmp);
+      return NULL;
+    }
+
+  strcpy (stpcpy (stpcpy (result, tmp), "\\"), name);
+  free (tmp);
+  if (access (result, F_OK))
+    {
+      free (result);
+      return NULL;
+    }
+
+  return result;
+}
+
 static char *
 find_program_at_standard_place (const char *name)
 {
@@ -266,6 +296,7 @@ find_program_at_standard_place (const char *name)
   return result;
 }
 
+
 const char *
 _gpgme_get_gpg_path (void)
 {
@@ -275,11 +306,9 @@ _gpgme_get_gpg_path (void)
   if (!gpg_program)
     gpg_program = find_program_in_registry ("gpgProgram");
   if (!gpg_program)
-    gpg_program = find_program_at_standard_place ("GNU\\GnuPG\\gpg.exe");
-#ifdef GPG_PATH
+    gpg_program = find_program_in_inst_dir ("gpg.exe");
   if (!gpg_program)
-    gpg_program = GPG_PATH;
-#endif
+    gpg_program = find_program_at_standard_place ("GNU\\GnuPG\\gpg.exe");
   UNLOCK (get_path_lock);
   return gpg_program;
 }
@@ -293,11 +322,9 @@ _gpgme_get_gpgsm_path (void)
   if (!gpgsm_program)
     gpgsm_program = find_program_in_registry ("gpgsmProgram");
   if (!gpgsm_program)
-    gpgsm_program = find_program_at_standard_place ("GNU\\GnuPG\\gpgsm.exe");
-#ifdef GPGSM_PATH
+    gpgsm_program = find_program_in_inst_dir ("gpgsm.exe");
   if (!gpgsm_program)
-    gpgsm_program = GPGSM_PATH;
-#endif
+    gpgsm_program = find_program_at_standard_place ("GNU\\GnuPG\\gpgsm.exe");
   UNLOCK (get_path_lock);
   return gpgsm_program;
 }