common: Extend gnupg_create_inbound_pipe et al.
authorWerner Koch <wk@gnupg.org>
Fri, 27 May 2016 13:41:55 +0000 (15:41 +0200)
committerWerner Koch <wk@gnupg.org>
Fri, 27 May 2016 13:41:55 +0000 (15:41 +0200)
* common/exechelp-posix.c (gnupg_create_inbound_pipe): Add args 'r_fp'
and 'nonblock'.
(gnupg_create_outbound_pipe): Ditto.
* common/exechelp-w32.c (gnupg_create_inbound_pipe): Add non yet
functional args 'r_fp' and 'nonblock'.
(gnupg_create_outbound_pipe): Ditto.
* common/exechelp-w32ce.c (gnupg_create_inbound_pipe): Ditto.
(gnupg_create_outbound_pipe): Ditto.
--

Signed-off-by: Werner Koch <wk@gnupg.org>
common/call-gpg.c
common/exechelp-posix.c
common/exechelp-w32.c
common/exechelp-w32ce.c
common/exechelp.h
dirmngr/ldap-wrapper.c
g13/be-encfs.c

index f5a62ec..0bda1d3 100644 (file)
@@ -430,9 +430,9 @@ _gpg_encrypt (ctrl_t ctrl,
   assert ((reader_mb == NULL) != (cipher_stream == NULL));
 
   /* Create two pipes.  */
-  err = gnupg_create_outbound_pipe (outbound_fds);
+  err = gnupg_create_outbound_pipe (outbound_fds, NULL, 0);
   if (!err)
-    err = gnupg_create_inbound_pipe (inbound_fds);
+    err = gnupg_create_inbound_pipe (inbound_fds, NULL, 0);
   if (err)
     {
       log_error (_("error creating a pipe: %s\n"), gpg_strerror (err));
@@ -614,9 +614,9 @@ _gpg_decrypt (ctrl_t ctrl,
   assert ((reader_mb == NULL) != (plain_stream == NULL));
 
   /* Create two pipes.  */
-  err = gnupg_create_outbound_pipe (outbound_fds);
+  err = gnupg_create_outbound_pipe (outbound_fds, NULL, 0);
   if (!err)
-    err = gnupg_create_inbound_pipe (inbound_fds);
+    err = gnupg_create_inbound_pipe (inbound_fds, NULL, 0);
   if (err)
     {
       log_error (_("error creating a pipe: %s\n"), gpg_strerror (err));
index 069b07a..87c6e55 100644 (file)
@@ -341,20 +341,28 @@ create_pipe_and_estream (int filedes[2], estream_t *r_fp,
 
 
 /* Portable function to create a pipe.  Under Windows the write end is
-   inheritable.  */
+   inheritable.  If R_FP is not NULL, an estream is created for the
+   read end and stored at R_FP.  */
 gpg_error_t
-gnupg_create_inbound_pipe (int filedes[2])
+gnupg_create_inbound_pipe (int filedes[2], estream_t *r_fp, int nonblock)
 {
-  return do_create_pipe (filedes);
+  if (r_fp)
+    return create_pipe_and_estream (filedes, r_fp, 0, nonblock);
+  else
+    return do_create_pipe (filedes);
 }
 
 
 /* Portable function to create a pipe.  Under Windows the read end is
-   inheritable.  */
+   inheritable.  If R_FP is not NULL, an estream is created for the
+   write end and stored at R_FP.  */
 gpg_error_t
-gnupg_create_outbound_pipe (int filedes[2])
+gnupg_create_outbound_pipe (int filedes[2], estream_t *r_fp, int nonblock)
 {
-  return do_create_pipe (filedes);
+  if (r_fp)
+    return create_pipe_and_estream (filedes, r_fp, 1, nonblock);
+  else
+    return do_create_pipe (filedes);
 }
 
 
index 0aa2020..a8a8b45 100644 (file)
@@ -320,20 +320,28 @@ do_create_pipe (int filedes[2], int flags)
 }
 
 /* Portable function to create a pipe.  Under Windows the write end is
-   inheritable.  */
+   inheritable.  If R_FP is not NULL, an estream is created for the
+   read end and stored at R_FP.  */
 gpg_error_t
-gnupg_create_inbound_pipe (int filedes[2])
+gnupg_create_inbound_pipe (int filedes[2], estream_t *r_fp, int nonblock)
 {
-  return do_create_pipe (filedes, INHERIT_WRITE);
+  if (r_fp)
+    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+  else
+    return do_create_pipe (filedes, INHERIT_WRITE);
 }
 
 
 /* Portable function to create a pipe.  Under Windows the read end is
-   inheritable.  */
+   inheritable.  If R_FP is not NULL, an estream is created for the
+   write end and stored at R_FP.  */
 gpg_error_t
-gnupg_create_outbound_pipe (int filedes[2])
+gnupg_create_outbound_pipe (int filedes[2], estream_t *r_fp, int nonblock)
 {
-  return do_create_pipe (filedes, INHERIT_READ);
+  if (r_fp)
+    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+  else
+    return do_create_pipe (filedes, INHERIT_READ);
 }
 
 
index 57ecaf3..06aa6bc 100644 (file)
@@ -450,18 +450,24 @@ 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);
 }
 
 
index 3454cd6..d6ef5f0 100644 (file)
@@ -52,12 +52,16 @@ int *get_all_open_fds (void);
 
 
 /* Portable function to create a pipe.  Under Windows the write end is
-   inheritable.  */
-gpg_error_t gnupg_create_inbound_pipe (int filedes[2]);
+   inheritable.  If R_FP is not NULL, an estream is created for the
+   write end and stored at R_FP.  */
+gpg_error_t gnupg_create_inbound_pipe (int filedes[2],
+                                       estream_t *r_fp, int nonblock);
 
 /* Portable function to create a pipe.  Under Windows the read end is
-   inheritable.  */
-gpg_error_t gnupg_create_outbound_pipe (int filedes[2]);
+   inheritable.  If R_FP is not NULL, an estream is created for the
+   write end and stored at R_FP.  */
+gpg_error_t gnupg_create_outbound_pipe (int filedes[2],
+                                        estream_t *r_fp, int nonblock);
 
 /* Portable function to create a pipe.  Under Windows both ends are
    inheritable.  */
index c073f17..55fcd8b 100644 (file)
@@ -695,10 +695,10 @@ ldap_wrapper (ctrl_t ctrl, ksba_reader_t *reader, const char *argv[])
       return err;
     }
 
-  err = gnupg_create_inbound_pipe (outpipe);
+  err = gnupg_create_inbound_pipe (outpipe, NULL, 0);
   if (!err)
     {
-      err = gnupg_create_inbound_pipe (errpipe);
+      err = gnupg_create_inbound_pipe (errpipe, NULL, 0);
       if (err)
         {
           close (outpipe[0]);
index f59f4d9..a873541 100644 (file)
@@ -246,9 +246,9 @@ run_encfs_tool (ctrl_t ctrl, enum encfs_cmds cmd,
   if (err)
     goto leave;
 
-  err = gnupg_create_inbound_pipe (inbound);
+  err = gnupg_create_inbound_pipe (inbound, NULL, 0);
   if (!err)
-    err = gnupg_create_outbound_pipe (outbound);
+    err = gnupg_create_outbound_pipe (outbound, NULL, 0);
   if (err)
     {
       log_error (_("error creating a pipe: %s\n"), gpg_strerror (err));