w32: Fix locating gpgconf on 64 bit systems.
authorWerner Koch <wk@gnupg.org>
Fri, 4 Nov 2016 07:10:34 +0000 (08:10 +0100)
committerWerner Koch <wk@gnupg.org>
Fri, 4 Nov 2016 07:12:44 +0000 (08:12 +0100)
* src/w32-util.c (find_program_at_standard_place): Use access to check
whether the binary is at CSIDL_PROGRAM_FILES before testing
CSIDL_PROGRAM_FILESX86.
--

Suggested-by: ticho
Fixes-commit: a82e9b182f62966207cad0972be6fa284329a5a1
GnuPG-bug-id: 2814
Signed-off-by: Werner Koch <wk@gnupg.org>
src/w32-util.c

index 21de6dc..0dc1288 100644 (file)
@@ -415,8 +415,17 @@ find_program_at_standard_place (const char *name)
      We First try the generic place and then fallback to the x86
      (i.e. 32 bit) place.  This will prefer a 64 bit of the program
      over a 32 bit version on 64 bit Windows if installed.  */
-  if (SHGetSpecialFolderPathA (NULL, path, CSIDL_PROGRAM_FILES, 0)
-      || SHGetSpecialFolderPathA (NULL, path, CSIDL_PROGRAM_FILESX86, 0))
+  if (SHGetSpecialFolderPathA (NULL, path, CSIDL_PROGRAM_FILES, 0))
+    {
+      result = _gpgme_strconcat (path, "\\", name, NULL);
+      if (result && access (result, F_OK))
+        {
+          free (result);
+          result = NULL;
+        }
+    }
+  if (!result
+      && SHGetSpecialFolderPathA (NULL, path, CSIDL_PROGRAM_FILESX86, 0))
     {
       result = _gpgme_strconcat (path, "\\", name, NULL);
       if (result && access (result, F_OK))