summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2004-01-24 20:46:28 +0000
committerWerner Koch <wk@gnupg.org>2004-01-24 20:46:28 +0000
commitb208c86a6a3f24264e34151ab1c981f3b22ef89f (patch)
tree65e811b50b54038692b971087866b1dd1c73ede7
parent498be7bfa621513f2dccc36b1ad35efb50634b25 (diff)
downloadlibassuan-b208c86a6a3f24264e34151ab1c981f3b22ef89f.tar.gz
(assuan_pipe_connect2): New as an
extension of assuan_pipe_connect. Made the latter call this one.
-rw-r--r--NEWS3
-rw-r--r--src/ChangeLog5
-rw-r--r--src/assuan-pipe-connect.c36
-rw-r--r--src/assuan.h6
4 files changed, 34 insertions, 16 deletions
diff --git a/NEWS b/NEWS
index 550ca2b..26ba0ab 100644
--- a/NEWS
+++ b/NEWS
@@ -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 --*/