diff options
author | Werner Koch <wk@gnupg.org> | 2004-01-24 20:46:28 +0000 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2004-01-24 20:46:28 +0000 |
commit | b208c86a6a3f24264e34151ab1c981f3b22ef89f (patch) | |
tree | 65e811b50b54038692b971087866b1dd1c73ede7 | |
parent | 498be7bfa621513f2dccc36b1ad35efb50634b25 (diff) | |
download | libassuan-b208c86a6a3f24264e34151ab1c981f3b22ef89f.tar.gz |
(assuan_pipe_connect2): New as an
extension of assuan_pipe_connect. Made the latter call this one.
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | src/ChangeLog | 5 | ||||
-rw-r--r-- | src/assuan-pipe-connect.c | 36 | ||||
-rw-r--r-- | src/assuan.h | 6 |
4 files changed, 34 insertions, 16 deletions
@@ -3,6 +3,9 @@ Noteworthy changes in version 0.6.3 (unreleased) * Fixed a data corruption bug in assuan_get_data_fp. + * New function assuan_pipe_connect2. + + Noteworthy changes in version 0.6.2 (2003-12-18) ------------------------------------------------ diff --git a/src/ChangeLog b/src/ChangeLog index e31da5c..a5c58f4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2004-01-24 Werner Koch <wk@gnupg.org> + + * assuan-pipe-connect.c (assuan_pipe_connect2): New as an + extension of assuan_pipe_connect. Made the latter call this one. + 2004-01-14 Werner Koch <wk@gnupg.org> * assuan-buffer.c (_assuan_cookie_write_data): Return the diff --git a/src/assuan-pipe-connect.c b/src/assuan-pipe-connect.c index d30c106..9c41aa9 100644 --- a/src/assuan-pipe-connect.c +++ b/src/assuan-pipe-connect.c @@ -97,10 +97,15 @@ do_deinit (ASSUAN_CONTEXT ctx) /* Connect to a server over a pipe, creating the assuan context and returning it in CTX. The server filename is NAME, the argument vector in ARGV. FD_CHILD_LIST is a -1 terminated list of file - descriptors not to close in the child. */ + descriptors not to close in the child. ATFORK is called in the + child right after the fork; ATFORKVALUE is passed as the first + argument and 0 is passed as the second argument. The ATFORK + function should only act if the second value is 0. */ AssuanError -assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name, char *const argv[], - int *fd_child_list) +assuan_pipe_connect2 (ASSUAN_CONTEXT *ctx, const char *name, char *const argv[], + int *fd_child_list, + void (*atfork) (void *opaque, int reserved), + void *atforkvalue) { static int fixed_signals = 0; AssuanError err; @@ -168,6 +173,9 @@ assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name, char *const argv[], char errbuf[512]; int *fdp; + if (atfork) + atfork (atforkvalue, 0); + /* Dup handles to stdin/stdout. */ if (rp[1] != STDOUT_FILENO) { @@ -267,15 +275,13 @@ assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name, char *const argv[], } - - - - - - - - - - - - +/* Connect to a server over a pipe, creating the assuan context and + returning it in CTX. The server filename is NAME, the argument + vector in ARGV. FD_CHILD_LIST is a -1 terminated list of file + descriptors not to close in the child. */ +AssuanError +assuan_pipe_connect (ASSUAN_CONTEXT *ctx, const char *name, char *const argv[], + int *fd_child_list) +{ + return assuan_pipe_connect2 (ctx, name, argv, fd_child_list, NULL, NULL); +} diff --git a/src/assuan.h b/src/assuan.h index 3da9b31..2b5637e 100644 --- a/src/assuan.h +++ b/src/assuan.h @@ -198,9 +198,13 @@ int assuan_init_connected_socket_server (assuan_context_t *r_ctx, int fd); /*-- assuan-pipe-connect.c --*/ assuan_error_t assuan_pipe_connect (assuan_context_t *ctx, const char *name, char *const argv[], int *fd_child_list); +assuan_error_t assuan_pipe_connect2 (assuan_context_t *ctx, const char *name, + char *const argv[], int *fd_child_list, + void (*atfork) (void*, int), + void *atforkvalue); /*-- assuan-socket-connect.c --*/ assuan_error_t assuan_socket_connect (assuan_context_t *ctx, const char *name, - pid_t server_pid); + pid_t server_pid); /*-- assuan-domain-connect.c --*/ |