python: Fix error handling.
[gpgme.git] / src / gpgme-w32spawn.c
index ccf88a9..b510ba3 100644 (file)
@@ -2,17 +2,17 @@
    Copyright (C) 2008 g10 Code GmbH
 
    This file is part of GPGME.
+
    GPGME is free software; you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as
    published by the Free Software Foundation; either version 2.1 of
    the License, or (at your option) any later version.
-   
+
    GPGME is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.
-   
+
    You should have received a copy of the GNU Lesser General Public
    License along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 #endif
 #include <stdint.h>
 #include <process.h>
-#include <windows.h>
 
-/* Flag values as used by gpgme.  */
-#define IOSPAWN_FLAG_ALLOW_SET_FG 1
+#include "priv-io.h"
 
 
 /* Name of this program.  */
 
 
 \f
-struct spawn_fd_item_s
-{
-  int handle;
-  int dup_to;
-  int peer_name;
-  int arg_loc;
-};
-
-
 static char *
 build_commandline (char **argv)
 {
@@ -63,7 +52,7 @@ build_commandline (char **argv)
   int n = 0;
   char *buf;
   char *p;
-  
+
   /* We have to quote some things because under Windows the program
      parses the commandline and does some unquoting.  We enclose the
      whole argument in double-quotes, and escape literal double-quotes
@@ -145,7 +134,7 @@ my_spawn (char **argv, struct spawn_fd_item_s *fd_list, unsigned int flags)
   memset (&sec_attr, 0, sizeof sec_attr);
   sec_attr.nLength = sizeof sec_attr;
   sec_attr.bInheritHandle = FALSE;
-  
+
   arg_string = build_commandline (argv);
   if (!arg_string)
     return -1;
@@ -160,7 +149,7 @@ my_spawn (char **argv, struct spawn_fd_item_s *fd_list, unsigned int flags)
 
   fprintf (stderr, PGM": spawning: %s\n", arg_string);
 
-  for (i = 0; fd_list[i].handle != -1; i++)
+  for (i = 0; fd_list[i].fd != -1; i++)
     {
       /* The handle already is inheritable.  */
       if (fd_list[i].dup_to == 0)
@@ -182,11 +171,11 @@ my_spawn (char **argv, struct spawn_fd_item_s *fd_list, unsigned int flags)
          fprintf (stderr, PGM":dup 0x%x to stderr\n", fd_list[i].peer_name);
         }
     }
-  
+
   if (!duped_stdin || !duped_stdout || !duped_stderr)
     {
       SECURITY_ATTRIBUTES sa;
-      
+
       memset (&sa, 0, sizeof sa);
       sa.nLength = sizeof sa;
       sa.bInheritHandle = TRUE;
@@ -214,8 +203,8 @@ my_spawn (char **argv, struct spawn_fd_item_s *fd_list, unsigned int flags)
       if (!duped_stderr)
        si.hStdError = hnul;
     }
-  
-  cr_flags |= CREATE_SUSPENDED; 
+
+  cr_flags |= CREATE_SUSPENDED;
   cr_flags |= DETACHED_PROCESS;
   if (!CreateProcessA (argv[0],
                       arg_string,
@@ -239,16 +228,16 @@ my_spawn (char **argv, struct spawn_fd_item_s *fd_list, unsigned int flags)
   /* Close the /dev/nul handle if used.  */
   if (hnul != INVALID_HANDLE_VALUE)
     CloseHandle (hnul);
-  
-  for (i = 0; fd_list[i].handle != -1; i++)
-    CloseHandle ((HANDLE) fd_list[i].handle);
+
+  for (i = 0; fd_list[i].fd != -1; i++)
+    CloseHandle ((HANDLE) fd_list[i].fd);
 
   if (flags & IOSPAWN_FLAG_ALLOW_SET_FG)
     {
       static int initialized;
       static BOOL (WINAPI * func)(DWORD);
       void *handle;
-  
+
       if (!initialized)
         {
           /* Available since W2000; thus we dynload it.  */
@@ -261,7 +250,7 @@ my_spawn (char **argv, struct spawn_fd_item_s *fd_list, unsigned int flags)
                 FreeLibrary (handle);
             }
         }
-      
+
       if (func)
         {
           int rc = func (pi.dwProcessId);
@@ -269,7 +258,7 @@ my_spawn (char **argv, struct spawn_fd_item_s *fd_list, unsigned int flags)
                    (int)pi.dwProcessId, rc);
         }
     }
-  
+
   ResumeThread (pi.hThread);
   CloseHandle (pi.hThread);
   CloseHandle (pi.hProcess);
@@ -281,8 +270,8 @@ my_spawn (char **argv, struct spawn_fd_item_s *fd_list, unsigned int flags)
 #define MAX_TRANS 10
 
 int
-translate_get_from_file (const char *trans_file, 
-                        struct spawn_fd_item_s *fd_list, 
+translate_get_from_file (const char *trans_file,
+                        struct spawn_fd_item_s *fd_list,
                          unsigned int *r_flags)
 {
   /* Hold roughly MAX_TRANS triplets of 64 bit numbers in hex
@@ -340,7 +329,7 @@ translate_get_from_file (const char *trans_file,
           if (tail == NULL || ! (*tail == '\0' || isspace (*tail)))
             break;
           linep = tail;
-          
+
           while (isspace (*((unsigned char *)linep)))
             linep++;
           if (*linep == '\0')
@@ -379,12 +368,12 @@ translate_get_from_file (const char *trans_file,
        break;
       linep = tail;
 
-      fd_list[idx].handle = from;
+      fd_list[idx].fd = from;
       fd_list[idx].dup_to = dup_to;
       fd_list[idx].peer_name = to;
       fd_list[idx].arg_loc = loc;
     }
-  fd_list[idx].handle = -1;
+  fd_list[idx].fd = -1;
   fd_list[idx].dup_to = -1;
   fd_list[idx].peer_name = -1;
   fd_list[idx].arg_loc = 0;
@@ -420,7 +409,7 @@ translate_handles (const char *trans_file, const char * const *argv,
   args[idx] = NULL;
   n_args = idx;
 
-  for (idx = 0; fd_list[idx].handle != -1; idx++)
+  for (idx = 0; fd_list[idx].fd != -1; idx++)
     {
       char buf[25];
       int aidx;