common: Correctly handle modules relying on npth.
[gnupg.git] / common / exechelp-w32ce.c
index 1bc2d6c..9e72cef 100644 (file)
@@ -4,12 +4,22 @@
  *
  * This file is part of GnuPG.
  *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of either
  *
- * GnuPG is distributed in the hope that it will be useful,
+ *   - the GNU Lesser General Public License as published by the Free
+ *     Software Foundation; either version 3 of the License, or (at
+ *     your option) any later version.
+ *
+ * or
+ *
+ *   - the GNU General Public License as published by the Free
+ *     Software Foundation; either version 2 of the License, or (at
+ *     your option) any later version.
+ *
+ * or both in parallel, as here.
+ *
+ * This file 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 General Public License for more details.
 #include <unistd.h>
 #include <fcntl.h>
 
-#ifdef WITHOUT_GNU_PTH /* Give the Makefile a chance to build without Pth.  */
-#undef HAVE_PTH
-#undef USE_GNU_PTH
+#ifdef WITHOUT_NPTH /* Give the Makefile a chance to build without Pth.  */
+#undef HAVE_NPTH
+#undef USE_NPTH
 #endif
 
-#ifdef USE_GNU_PTH
-#include <pth.h>
+#ifdef HAVE_NPTH
+#include <npth.h>
 #endif
 
 #ifdef HAVE_STAT
@@ -73,7 +83,7 @@
 #define handle_to_pid(a) ((int)(a))
 
 \f
-#ifdef USE_GNU_PTH
+#ifdef USE_NPTH
 /* The data passed to the feeder_thread.  */
 struct feeder_thread_parms
 {
@@ -171,9 +181,9 @@ leave:
   xfree (parm);
   return NULL;
 }
-#endif /*USE_GNU_PTH*/
+#endif /*USE_NPTH*/
 
-#ifdef USE_GNU_PTH
+#ifdef USE_NPTH
 static void
 feeder_onclose_notification (estream_t stream, void *opaque)
 {
@@ -182,7 +192,7 @@ feeder_onclose_notification (estream_t stream, void *opaque)
   log_debug ("feeder(%p): received onclose note\n", parm->hd);
   parm->stream_valid = 0;
 }
-#endif /*USE_GNU_PTH*/
+#endif /*USE_NPTH*/
 
 /* Fire up a thread to copy data between STREAM and a pipe's
    descriptor FD.  With DIRECTION set to true the copy takes place
@@ -191,7 +201,7 @@ feeder_onclose_notification (estream_t stream, void *opaque)
 static gpg_error_t
 start_feeder (estream_t stream, HANDLE hd, int direction)
 {
-#ifdef USE_GNU_PTH
+#ifdef USE_NPTH
   gpg_error_t err;
   struct feeder_thread_parms *parm;
   pth_attr_t tattr;
@@ -440,18 +450,33 @@ create_inheritable_pipe (int filedes[2], int inherit_idx)
 /* Portable function to create a pipe.  Under Windows the write end is
    inheritable (i.e. an rendezvous id).  */
 gpg_error_t
-gnupg_create_inbound_pipe (int filedes[2])
+gnupg_create_inbound_pipe (int filedes[2], estream_t *r_fp, int nonblock)
 {
-  return create_inheritable_pipe (filedes, 1);
+  if (r_fp)
+    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+  else
+    return create_inheritable_pipe (filedes, 1);
 }
 
 
 /* Portable function to create a pipe.  Under Windows the read end is
    inheritable (i.e. an rendezvous id).  */
 gpg_error_t
-gnupg_create_outbound_pipe (int filedes[2])
+gnupg_create_outbound_pipe (int filedes[2], estream_t *r_fp, int nonblock)
 {
-  return create_inheritable_pipe (filedes, 0);
+  if (r_fp)
+    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+  else
+    return create_inheritable_pipe (filedes, 0);
+}
+
+
+/* Portable function to create a pipe.  Under Windows both ends are
+   inheritable.  */
+gpg_error_t
+gnupg_create_pipe (int filedes[2])
+{
+  return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
 }
 
 
@@ -490,9 +515,8 @@ create_process (const char *pgmname, const char *cmdline,
 /* Fork and exec the PGMNAME, see exechelp.h for details.  */
 gpg_error_t
 gnupg_spawn_process (const char *pgmname, const char *argv[],
-                     gpg_err_source_t errsource,
-                     void (*preexec)(void), unsigned int flags,
-                     estream_t infp,
+                     int *except, void (*preexec)(void), unsigned int flags,
+                     estream_t *r_infp,
                      estream_t *r_outfp,
                      estream_t *r_errfp,
                      pid_t *pid)
@@ -515,7 +539,9 @@ gnupg_spawn_process (const char *pgmname, const char *argv[],
   } errpipe = {INVALID_HANDLE_VALUE, 0};
   estream_t outfp = NULL;
   estream_t errfp = NULL;
+  gpg_err_source_t errsource = default_errsource;
 
+  (void)except; /* Not yet used.  */
   (void)preexec;
   (void)flags;
 
@@ -626,7 +652,7 @@ gnupg_spawn_process (const char *pgmname, const char *argv[],
       return err;
     }
 
-  log_debug ("CreateProcess, path=`%s' cmdline=`%s'\n", pgmname, cmdline);
+  log_debug ("CreateProcess, path='%s' cmdline='%s'\n", pgmname, cmdline);
   if (!create_process (pgmname, cmdline, &pi))
     {
       log_error ("CreateProcess failed: %s\n", w32_strerror (-1));
@@ -688,7 +714,7 @@ gnupg_spawn_process_fd (const char *pgmname, const char *argv[],
   if (err)
     return err;
 
-  log_debug ("CreateProcess, path=`%s' cmdline=`%s'\n", pgmname, cmdline);
+  log_debug ("CreateProcess, path='%s' cmdline='%s'\n", pgmname, cmdline);
   if (!create_process (pgmname, cmdline, &pi))
     {
       log_error ("CreateProcess(fd) failed: %s\n", w32_strerror (-1));
@@ -752,7 +778,7 @@ gnupg_wait_process (const char *pgmname, pid_t pid, int hang, int *exitcode)
           }
       else if (exc)
         {
-          log_error (_("error running `%s': exit status %d\n"),
+          log_error (_("error running '%s': exit status %d\n"),
                        pgmname, (int)exc );
           if (exitcode)
             *exitcode = (int)exc;
@@ -777,6 +803,15 @@ gnupg_wait_process (const char *pgmname, pid_t pid, int hang, int *exitcode)
 }
 
 
+/* See exechelp.h for a description.  */
+gpg_error_t
+gnupg_wait_processes (const char **pgmnames, pid_t *pids, size_t count,
+                      int hang, int *r_exitcodes)
+{
+  return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+}
+
+
 void
 gnupg_release_process (pid_t pid)
 {
@@ -789,7 +824,7 @@ gnupg_release_process (pid_t pid)
 }
 
 
-/* Spawn a new process and immediatley detach from it.  The name of
+/* Spawn a new process and immediately detach from it.  The name of
    the program to exec is PGMNAME and its arguments are in ARGV (the
    programname is automatically passed as first argument).
    Environment strings in ENVP are set.  An error is returned if
@@ -812,7 +847,7 @@ gnupg_spawn_process_detached (const char *pgmname, const char *argv[],
     return err;
 
   /* Note: There is no detached flag under CE.  */
-  log_debug ("CreateProcess, path=`%s' cmdline=`%s'\n", pgmname, cmdline);
+  log_debug ("CreateProcess, path='%s' cmdline='%s'\n", pgmname, cmdline);
   if (!create_process (pgmname, cmdline, &pi))
     {
       log_error ("CreateProcess(detached) failed: %s\n", w32_strerror (-1));