w32: Add extra diagnostic about possible missing gpgme-w32spawn.exe.
authorWerner Koch <wk@gnupg.org>
Wed, 28 Oct 2015 15:27:49 +0000 (16:27 +0100)
committerWerner Koch <wk@gnupg.org>
Wed, 28 Oct 2015 15:28:48 +0000 (16:28 +0100)
* src/w32-io.c (_gpgme_io_spawn): Add a new diagnostic.

Signed-off-by: Werner Koch <wk@gnupg.org>
src/w32-io.c

index 42961e3..a6d5238 100644 (file)
@@ -1550,6 +1550,7 @@ _gpgme_io_spawn (const char *path, char *const argv[], unsigned int flags,
   int debug_me = 0;
   int tmp_fd;
   char *tmp_name;
   int debug_me = 0;
   int tmp_fd;
   char *tmp_name;
+  const char *spawnhelper;
 
   TRACE_BEG1 (DEBUG_SYSIO, "_gpgme_io_spawn", path,
              "path=%s", path);
 
   TRACE_BEG1 (DEBUG_SYSIO, "_gpgme_io_spawn", path,
              "path=%s", path);
@@ -1603,7 +1604,8 @@ _gpgme_io_spawn (const char *path, char *const argv[], unsigned int flags,
   if ((flags & IOSPAWN_FLAG_DETACHED))
     cr_flags |= DETACHED_PROCESS;
   cr_flags |= GetPriorityClass (GetCurrentProcess ());
   if ((flags & IOSPAWN_FLAG_DETACHED))
     cr_flags |= DETACHED_PROCESS;
   cr_flags |= GetPriorityClass (GetCurrentProcess ());
-  if (!CreateProcessA (_gpgme_get_w32spawn_path (),
+  spawnhelper = _gpgme_get_w32spawn_path ();
+  if (!CreateProcessA (spawnhelper,
                       arg_string,
                       &sec_attr,     /* process security attributes */
                       &sec_attr,     /* thread security attributes */
                       arg_string,
                       &sec_attr,     /* process security attributes */
                       &sec_attr,     /* thread security attributes */
@@ -1614,7 +1616,10 @@ _gpgme_io_spawn (const char *path, char *const argv[], unsigned int flags,
                       &si,           /* startup information */
                       &pi))          /* returns process information */
     {
                       &si,           /* startup information */
                       &pi))          /* returns process information */
     {
-      TRACE_LOG1 ("CreateProcess failed: ec=%d", (int) GetLastError ());
+      int lasterr = (int)GetLastError ();
+      TRACE_LOG1 ("CreateProcess failed: ec=%d", lasterr);
+      if (lasterr == ERROR_INVALID_PARAMETER)
+        TRACE_LOG1 ("(is '%s' correctly installed?)", spawnhelper);
       free (arg_string);
       close (tmp_fd);
       DeleteFileA (tmp_name);
       free (arg_string);
       close (tmp_fd);
       DeleteFileA (tmp_name);