diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ChangeLog | 4 | ||||
-rw-r--r-- | src/assuan-pipe-connect.c | 7 | ||||
-rw-r--r-- | src/assuan.h | 1 |
3 files changed, 11 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 0636391..d22f869 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2009-12-08 Marcus Brinkmann <[email protected]> + * assuan.h (ASSUAN_SPAWN_DETACHED): New macro. + * assuan-pipe-connect.c (pipe_connect): Calculate spawn_flags from + flags. + * assuan.h (assuan_fd_from_posix_fd): Handle invalid fd early. * assuan-socket.c (get_nonce): Cast buffer to unsigned. diff --git a/src/assuan-pipe-connect.c b/src/assuan-pipe-connect.c index 2b8b264..690d810 100644 --- a/src/assuan-pipe-connect.c +++ b/src/assuan-pipe-connect.c @@ -154,6 +154,7 @@ pipe_connect (assuan_context_t ctx, pid_t pid; int res; struct at_pipe_fork atp; + unsigned int spawn_flags; atp.user_atfork = atfork; atp.user_atforkvalue = atforkvalue; @@ -173,10 +174,14 @@ pipe_connect (assuan_context_t ctx, _assuan_close (ctx, rp[1]); return _assuan_error (ctx, gpg_err_code_from_syserror ()); } + + spawn_flags = 0; + if (flags & ASSUAN_PIPE_CONNECT_DETACHED) + spawn_flags |= ASSUAN_SPAWN_DETACHED; /* FIXME: Use atfork handler that closes child fds on Unix. */ res = _assuan_spawn (ctx, &pid, name, argv, wp[0], rp[1], - fd_child_list, at_pipe_fork_cb, &atp, flags); + fd_child_list, at_pipe_fork_cb, &atp, spawn_flags); if (res < 0) { rc = gpg_err_code_from_syserror (); diff --git a/src/assuan.h b/src/assuan.h index 7f78c0c..4886608 100644 --- a/src/assuan.h +++ b/src/assuan.h @@ -253,6 +253,7 @@ void assuan_set_io_monitor (assuan_context_t ctx, #define ASSUAN_SYSTEM_HOOKS_VERSION 1 +#define ASSUAN_SPAWN_DETACHED 128 struct assuan_system_hooks { /* Always set to ASSUAN_SYTEM_HOOKS_VERSION. */ |