From df08a0ca3f029b06b7e3a6bd63330df5cb96585a Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 4 Nov 2016 08:10:34 +0100 Subject: [PATCH] w32: Fix locating gpgconf on 64 bit systems. * 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 --- src/w32-util.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/w32-util.c b/src/w32-util.c index 21de6dcf..0dc12881 100644 --- a/src/w32-util.c +++ b/src/w32-util.c @@ -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))