aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2009-11-05 02:39:31 +0000
committerMarcus Brinkmann <[email protected]>2009-11-05 02:39:31 +0000
commit59dc98545a2cbd2a6d057b3ec7fe25ebff25f8a4 (patch)
treeed2281c4be062cf971948a9d154e7bbcf4dd3e4d
parent2009-11-05 Marcus Brinkmann <[email protected]> (diff)
downloadgpgme-59dc98545a2cbd2a6d057b3ec7fe25ebff25f8a4.tar.gz
gpgme-59dc98545a2cbd2a6d057b3ec7fe25ebff25f8a4.zip
2009-11-05 Marcus Brinkmann <[email protected]>
* priv-io.h (IOSPAWN_FLAG_NOCLOSE): New flag. * w32-io.c (_gpgme_io_spawn): Implement this flag. * posix-io.c (_gpgme_io_spawn): Likewise. * w32-glib-io.c (_gpgme_io_spawn): Likewise. * assuan-support.c (my_spawn): Set this flag.
-rw-r--r--src/ChangeLog6
-rw-r--r--src/assuan-support.c2
-rw-r--r--src/posix-io.c3
-rw-r--r--src/priv-io.h2
-rw-r--r--src/w32-glib-io.c7
-rw-r--r--src/w32-io.c7
6 files changed, 21 insertions, 6 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index d5aebe3e..0ea3a1c3 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,11 @@
2009-11-05 Marcus Brinkmann <[email protected]>
+ * priv-io.h (IOSPAWN_FLAG_NOCLOSE): New flag.
+ * w32-io.c (_gpgme_io_spawn): Implement this flag.
+ * posix-io.c (_gpgme_io_spawn): Likewise.
+ * w32-glib-io.c (_gpgme_io_spawn): Likewise.
+ * assuan-support.c (my_spawn): Set this flag.
+
* decrypt.c (gpgme_op_decrypt_start): Fix use of debug macro.
* decrypt-verify.c (gpgme_op_decrypt_verify_start): Likewise.
* delete.c (gpgme_op_delete_start): Likewise.
diff --git a/src/assuan-support.c b/src/assuan-support.c
index b5d2548a..4646416f 100644
--- a/src/assuan-support.c
+++ b/src/assuan-support.c
@@ -152,7 +152,7 @@ my_spawn (assuan_context_t ctx, pid_t *r_pid, const char *name,
fd_items[i].fd = -1;
fd_items[i].dup_to = -1;
- err = _gpgme_io_spawn (name, argv, 0, fd_items, r_pid);
+ err = _gpgme_io_spawn (name, argv, IOSPAWN_FLAG_NOCLOSE, fd_items, r_pid);
if (! err)
{
i = 0;
diff --git a/src/posix-io.c b/src/posix-io.c
index 1025268e..b173f58e 100644
--- a/src/posix-io.c
+++ b/src/posix-io.c
@@ -454,7 +454,8 @@ _gpgme_io_spawn (const char *path, char *const argv[], unsigned int flags,
for (i = 0; fd_list[i].fd != -1; i++)
{
- _gpgme_io_close (fd_list[i].fd);
+ if (! (flags & IOSPAWN_FLAG_NOCLOSE))
+ _gpgme_io_close (fd_list[i].fd);
/* No handle translation. */
fd_list[i].peer_name = fd_list[i].fd;
}
diff --git a/src/priv-io.h b/src/priv-io.h
index 4eb2e362..a9fb02ae 100644
--- a/src/priv-io.h
+++ b/src/priv-io.h
@@ -68,6 +68,8 @@ int _gpgme_io_set_nonblocking (int fd);
/* A flag to tell the spawn function to allow the child process to set
the foreground window. */
#define IOSPAWN_FLAG_ALLOW_SET_FG 1
+/* Don't close any child FDs. */
+#define IOSPAWN_FLAG_NOCLOSE 2
/* Spawn the executable PATH with ARGV as arguments. After forking
close all fds except for those in FD_LIST in the child, then
diff --git a/src/w32-glib-io.c b/src/w32-glib-io.c
index c1542cc0..17d60fc0 100644
--- a/src/w32-glib-io.c
+++ b/src/w32-glib-io.c
@@ -777,8 +777,11 @@ _gpgme_io_spawn (const char *path, char * const argv[], unsigned int flags,
TRACE_LOG1 ("CloseHandle of process failed: ec=%d",
(int) GetLastError ());
- for (i = 0; fd_list[i].fd != -1; i++)
- _gpgme_io_close (fd_list[i].fd);
+ if (! (flags & IOSPAWN_FLAG_NOCLOSE))
+ {
+ for (i = 0; fd_list[i].fd != -1; i++)
+ _gpgme_io_close (fd_list[i].fd);
+ }
for (i = 0; fd_list[i].fd != -1; i++)
if (fd_list[i].dup_to == -1)
diff --git a/src/w32-io.c b/src/w32-io.c
index f87db121..e83aa0b9 100644
--- a/src/w32-io.c
+++ b/src/w32-io.c
@@ -1234,8 +1234,11 @@ _gpgme_io_spawn (const char *path, char *const argv[], unsigned int flags,
TRACE_LOG1 ("CloseHandle of process failed: ec=%d",
(int) GetLastError ());
- for (i = 0; fd_list[i].fd != -1; i++)
- _gpgme_io_close (fd_list[i].fd);
+ if (! (flags & IOSPAWN_FLAG_NOCLOSE))
+ {
+ for (i = 0; fd_list[i].fd != -1; i++)
+ _gpgme_io_close (fd_list[i].fd);
+ }
for (i = 0; fd_list[i].fd != -1; i++)
if (fd_list[i].dup_to == -1)