Fix left over use of jnlib on some platforms
[gnupg.git] / common / exechelp.h
index 3a5b9e2..4d8e0fd 100644 (file)
@@ -3,12 +3,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.
@@ -52,15 +62,24 @@ gpg_error_t gnupg_create_inbound_pipe (int filedes[2]);
 gpg_error_t gnupg_create_outbound_pipe (int filedes[2]);
 
 
-/* Fork and exec the PGMNAME, connect the file descriptor of INFILE to
-   stdin, write the output to OUTFILE.  INFILE or PUTFILE may be NULL
-   to connect thenm to /dev/null.  Returns a new stream in STATUSFILE
-   for stderr and the pid of the process in PID. The arguments for the
-   process are expected in the NULL terminated array ARGV.  The
-   program name itself should not be included there.  If PREEXEC is
-   not NULL, that function will be called right before the exec.
-   Calling gnupg_wait_process and gnupg_release_process is required.
-   Returns 0 on success or an error code.
+/* Fork and exec the PGMNAME.  If INFP is NULL connect /dev/null to
+   stdin of the new process; if it is not NULL connect the file
+   descriptor retrieved from INFP to stdin.  If R_OUTFP is NULL
+   connect stdout of the new process to /dev/null; if it is not NULL
+   store the address of a pointer to a new estream there.  If R_ERRFP
+   is NULL connect stderr of the new process to /dev/null; if it is
+   not NULL store the address of a pointer to a new estream there.  On
+   success the pid of the new process is stored at PID.  On error -1
+   is stored at PID and if R_OUTFP or R_ERRFP are not NULL, NULL is
+   stored there.
+
+   The arguments for the process are expected in the NULL terminated
+   array ARGV.  The program name itself should not be included there.
+   If PREEXEC is not NULL, the given function will be called right
+   before the exec.
+
+   Returns 0 on success or an error code.  Calling gnupg_wait_process
+   and gnupg_release_process is required if the function succeeded.
 
    FLAGS is a bit vector:
 
@@ -68,16 +87,20 @@ gpg_error_t gnupg_create_outbound_pipe (int filedes[2]);
           This flag is only useful under W32 (but not W32CE) systems,
           so that no new console is created and pops up a console
           window when starting the server.  Does not work on W32CE.
+
    Bit 6: On W32 (but not on W32CE) run AllowSetForegroundWindow for
           the child.  Note that due to unknown problems this actually
           allows SetForegroundWindow for all childs of this process.
 
  */
-gpg_error_t gnupg_spawn_process (const char *pgmname, const char *argv[],
-                                 estream_t infile, estream_t outfile,
-                                 void (*preexec)(void), unsigned int flags,
-                                 estream_t *statusfile, pid_t *pid);
+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,
+                     estream_t *r_outfp,
+                     estream_t *r_errfp,
+                     pid_t *pid);
 
 
 /* Simplified version of gnupg_spawn_process.  This function forks and
@@ -88,7 +111,7 @@ gpg_error_t gnupg_spawn_process (const char *pgmname, const char *argv[],
    included there.  Calling gnupg_wait_process and
    gnupg_release_process is required.  Returns 0 on success or an
    error code. */
-gpg_error_t gnupg_spawn_process_fd (const char *pgmname, 
+gpg_error_t gnupg_spawn_process_fd (const char *pgmname,
                                     const char *argv[],
                                     int infd, int outfd, int errfd,
                                     pid_t *pid);
@@ -107,11 +130,11 @@ gpg_error_t gnupg_spawn_process_fd (const char *pgmname,
        is then stored at R_EXITCODE.  An exit code of -1 indicates
        that the process terminated abnormally (e.g. due to a signal).
 
-   GPG_ERR_TIMEOUT 
+   GPG_ERR_TIMEOUT
        The process is still running (returned only if HANG is false).
 
-   GPG_ERR_INV_VALUE 
-       An invalid PID has been specified.  
+   GPG_ERR_INV_VALUE
+       An invalid PID has been specified.
 
    Other error codes may be returned as well.  Unless otherwise noted,
    -1 will be stored at R_EXITCODE.  R_EXITCODE may be passed as NULL