auto updated version number.
[gpgme.git] / gpgme / w32-io.c
index bfa0ad6..602be1f 100644 (file)
@@ -1,5 +1,6 @@
 /* w32-io.c - W32 API I/O functions
  *     Copyright (C) 2000 Werner Koch (dd9jn)
+ *      Copyright (C) 2001, 2002 g10 Code GmbH
  *
  * This file is part of GPGME.
  *
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
  */
 
+#ifdef HAVE_CONFIG_H
 #include <config.h>
-#ifdef HAVE_DOSISH_SYSTEM
-
+#endif
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
 #include <errno.h>
-#include <sys/time.h>
-#include <sys/types.h>
 #include <signal.h>
 #include <fcntl.h>
+#include <sys/time.h>
+#include <sys/types.h>
 #include <windows.h>
-#include "syshdr.h"
+#include <io.h>
 
 #include "util.h"
 #include "sema.h"
@@ -769,15 +770,19 @@ build_commandline ( char **argv )
     /* FIXME: we have to quote some things because under Windows the 
      * program parses the commandline and does some unquoting */
     for (i=0; argv[i]; i++)
-        n += strlen (argv[i]) + 1;
+        n += strlen (argv[i]) + 2 + 1; /* 2 extra bytes for possible quoting */
     buf = p = xtrymalloc (n);
     if ( !buf )
         return NULL;
     *buf = 0;
     if ( argv[0] )
         p = stpcpy (p, argv[0]);
-    for (i = 1; argv[i]; i++)
-        p = stpcpy (stpcpy (p, " "), argv[i]);
+    for (i = 1; argv[i]; i++) {
+        if (!*argv[i])
+            p = stpcpy (p, " \"\"");
+        else
+            p = stpcpy (stpcpy (p, " "), argv[i]);
+    }
 
     return buf;
 }
@@ -1032,11 +1037,18 @@ _gpgme_io_select ( struct io_select_fd_s *fds, size_t nfds )
                         DEBUG0 ("Too many objects for WFMO!" );
                         return -1;
                     }
-                    waitidx[nwait]   = i;
-                    waitbuf[nwait++] = c->is_empty;
+                    LOCK (c->mutex);
+                    if ( !c->nbytes ) {
+                        waitidx[nwait]   = i;
+                        waitbuf[nwait++] = c->is_empty;
+                        DEBUG_ADD1 (dbg_help, "w%d ", fds[i].fd );
+                        any = 1;
+                    }
+                    else {
+                        DEBUG_ADD1 (dbg_help, "w%d(ignored) ", fds[i].fd );
+                    }
+                    UNLOCK (c->mutex);
                 }
-                DEBUG_ADD1 (dbg_help, "w%d ", fds[i].fd );
-                any = 1;
             }
         }
     }
@@ -1108,14 +1120,3 @@ _gpgme_io_select ( struct io_select_fd_s *fds, size_t nfds )
     
     return count;
 }
-
-#endif /*HAVE_DOSISH_SYSTEM*/
-
-
-
-
-
-
-
-
-