[Pkg-gnupg-commit] [libassuan] 57/437: 2002-11-20 Neal H. Walfield <neal at g10code.de>
Eric Dorland
eric at moszumanska.debian.org
Fri May 22 05:33:23 UTC 2015
This is an automated email from the git hooks/post-receive script.
eric pushed a commit to branch master
in repository libassuan.
commit d9a1391a0d233fee49a9d21626754ec8c8575713
Author: Neal Walfield <neal at walfield.org>
Date: Thu Nov 21 03:08:50 2002 +0000
2002-11-20 Neal H. Walfield <neal at g10code.de>
* assuan-defs.h (struct assuan_io): New structure.
(struct assuan_context_s): New field, io.
(_assuan_read): Depreciated.
(_assuan_write): Likewise.
* assuan-pipe-server.c: Include <unistd.h>.
(pipe_reader): New function.
(pipe_writer): Likewise.
(_assuan_new_context.IO): New local static. Set to pipe_reader
and pipe_writer. Use it to initialize new context.
* assuan-socket-connect.c (socket_reader): New function.
(socket_writer): New function.
(assuan_socket_connect.IO): New local static. Set to socket_reader
and socket_writer. Use it to initialize new context.
* assuan-buffer.c (writen): Take an ASSUAN_CONTEXT rather than a
file descriptor. Do not use _assuan_write but the write method
in the supplied context.
(readline): Likewise for _assuan_read.
(assuan_write_line): When calling writen, pass CTX; not the file
descriptor directly.
(_assuan_cookie_write_data): Likewise.
(_assuan_cookie_write_flush): Likewise.
(_assuan_read_line): Likewise for readline.
* Makefile.am (libassuan_a_SOURCES): Remove assuan-io.c.
* assuan-io.c: Removed.
---
src/ChangeLog | 27 ++++++++++++++++++++
src/Makefile.am | 3 +--
src/assuan-buffer.c | 25 ++++++++++---------
src/assuan-defs.h | 20 +++++++++------
src/assuan-io.c | 60 ---------------------------------------------
src/assuan-pipe-server.c | 28 +++++++++++++++++++--
src/assuan-socket-connect.c | 25 ++++++++++++++++++-
src/assuan-socket-server.c | 2 +-
8 files changed, 104 insertions(+), 86 deletions(-)
diff --git a/src/ChangeLog b/src/ChangeLog
index 85dc5ef..ebf1764 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,30 @@
+2002-11-20 Neal H. Walfield <neal at g10code.de>
+
+ * assuan-defs.h (struct assuan_io): New structure.
+ (struct assuan_context_s): New field, io.
+ (_assuan_read): Depreciated.
+ (_assuan_write): Likewise.
+ * assuan-pipe-server.c: Include <unistd.h>.
+ (pipe_reader): New function.
+ (pipe_writer): Likewise.
+ (_assuan_new_context.IO): New local static. Set to pipe_reader
+ and pipe_writer. Use it to initialize new context.
+ * assuan-socket-connect.c (socket_reader): New function.
+ (socket_writer): New function.
+ (assuan_socket_connect.IO): New local static. Set to socket_reader
+ and socket_writer. Use it to initialize new context.
+ * assuan-buffer.c (writen): Take an ASSUAN_CONTEXT rather than a
+ file descriptor. Do not use _assuan_write but the write method
+ in the supplied context.
+ (readline): Likewise for _assuan_read.
+ (assuan_write_line): When calling writen, pass CTX; not the file
+ descriptor directly.
+ (_assuan_cookie_write_data): Likewise.
+ (_assuan_cookie_write_flush): Likewise.
+ (_assuan_read_line): Likewise for readline.
+ * Makefile.am (libassuan_a_SOURCES): Remove assuan-io.c.
+ * assuan-io.c: Removed.
+
2002-11-10 Werner Koch <wk at gnupg.org>
* assuan-pipe-connect.c (assuan_pipe_connect): Changed the order
diff --git a/src/Makefile.am b/src/Makefile.am
index 2207145..a97352d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -42,8 +42,7 @@ libassuan_a_SOURCES = \
assuan-pipe-server.c \
assuan-socket-server.c \
assuan-pipe-connect.c \
- assuan-socket-connect.c \
- assuan-io.c
+ assuan-socket-connect.c
assuan-errors.c : assuan.h
diff --git a/src/assuan-buffer.c b/src/assuan-buffer.c
index 8017183..515dbf9 100644
--- a/src/assuan-buffer.c
+++ b/src/assuan-buffer.c
@@ -44,11 +44,11 @@ my_log_prefix (void)
static int
-writen ( int fd, const char *buffer, size_t length )
+writen (ASSUAN_CONTEXT ctx, const char *buffer, size_t length)
{
while (length)
{
- ssize_t nwritten = _assuan_write (fd, buffer, length);
+ ssize_t nwritten = ctx->io->write (ctx, buffer, length);
if (nwritten < 0)
{
@@ -62,9 +62,10 @@ writen ( int fd, const char *buffer, size_t length )
return 0; /* okay */
}
-/* read an entire line */
+/* Read an entire line. */
static int
-readline (int fd, char *buf, size_t buflen, int *r_nread, int *eof)
+readline (ASSUAN_CONTEXT ctx, char *buf, size_t buflen,
+ int *r_nread, int *eof)
{
size_t nleft = buflen;
char *p;
@@ -73,7 +74,7 @@ readline (int fd, char *buf, size_t buflen, int *r_nread, int *eof)
*r_nread = 0;
while (nleft > 0)
{
- ssize_t n = _assuan_read (fd, buf, nleft);
+ ssize_t n = ctx->io->read (ctx, buf, nleft);
if (n < 0)
{
@@ -127,12 +128,12 @@ _assuan_read_line (ASSUAN_CONTEXT ctx)
else
{ /* read the rest */
assert (atticlen < LINELENGTH);
- rc = readline (ctx->inbound.fd, line + atticlen,
+ rc = readline (ctx, line + atticlen,
LINELENGTH - atticlen, &nread, &ctx->inbound.eof);
}
}
else
- rc = readline (ctx->inbound.fd, line, LINELENGTH,
+ rc = readline (ctx, line, LINELENGTH,
&nread, &ctx->inbound.eof);
if (rc)
{
@@ -233,7 +234,7 @@ assuan_pending_line (ASSUAN_CONTEXT ctx)
AssuanError
-assuan_write_line (ASSUAN_CONTEXT ctx, const char *line )
+assuan_write_line (ASSUAN_CONTEXT ctx, const char *line)
{
int rc;
size_t len;
@@ -260,12 +261,12 @@ assuan_write_line (ASSUAN_CONTEXT ctx, const char *line )
putc ('\n', ctx->log_fp);
}
- rc = writen (ctx->outbound.fd, line, len);
+ rc = writen (ctx, line, len);
if (rc)
rc = ASSUAN_Write_Error;
if (!rc)
{
- rc = writen (ctx->outbound.fd, "\n", 1);
+ rc = writen (ctx, "\n", 1);
if (rc)
rc = ASSUAN_Write_Error;
}
@@ -333,7 +334,7 @@ _assuan_cookie_write_data (void *cookie, const char *buffer, size_t size)
}
*line++ = '\n';
linelen++;
- if (writen (ctx->outbound.fd, ctx->outbound.data.line, linelen))
+ if (writen (ctx, ctx->outbound.data.line, linelen))
{
ctx->outbound.data.error = ASSUAN_Write_Error;
return 0;
@@ -378,7 +379,7 @@ _assuan_cookie_write_flush (void *cookie)
}
*line++ = '\n';
linelen++;
- if (writen (ctx->outbound.fd, ctx->outbound.data.line, linelen))
+ if (writen (ctx, ctx->outbound.data.line, linelen))
{
ctx->outbound.data.error = ASSUAN_Write_Error;
return 0;
diff --git a/src/assuan-defs.h b/src/assuan-defs.h
index f885869..a5cd64c 100644
--- a/src/assuan-defs.h
+++ b/src/assuan-defs.h
@@ -32,7 +32,16 @@ struct cmdtbl_s {
int (*handler)(ASSUAN_CONTEXT, char *line);
};
-struct assuan_context_s {
+struct assuan_io
+{
+ /* Routine to read from input_fd. */
+ ssize_t (*read) (ASSUAN_CONTEXT, void *, size_t);
+ /* Routine to write to output_fd. */
+ ssize_t (*write) (ASSUAN_CONTEXT, const void *, size_t);
+};
+
+struct assuan_context_s
+{
AssuanError err_no;
const char *err_str;
int os_errno; /* last system error number used with certain error codes*/
@@ -99,6 +108,8 @@ struct assuan_context_s {
int input_fd; /* set by INPUT command */
int output_fd; /* set by OUTPUT command */
+ /* io routines. */
+ struct assuan_io *io;
};
@@ -136,12 +147,5 @@ void _assuan_free (void *p);
void _assuan_log_print_buffer (FILE *fp, const void *buffer, size_t length);
void _assuan_log_sanitized_string (const char *string);
-/*-- assuan-io.c --*/
-
-/* Wraps the standard read and write functions to do the Right
- Thing depending on our linkage. */
-ssize_t _assuan_read (int fd, void *buffer, size_t size);
-ssize_t _assuan_write (int fd, const void *buffer, size_t size);
-
#endif /*ASSUAN_DEFS_H*/
diff --git a/src/assuan-io.c b/src/assuan-io.c
deleted file mode 100644
index 135cb02..0000000
--- a/src/assuan-io.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* assuan-buffer.c - Wraps the read and write functions.
- * Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <sys/types.h>
-#include <unistd.h>
-
-extern ssize_t pth_read (int fd, void *buffer, size_t size);
-extern ssize_t pth_write (int fd, const void *buffer, size_t size);
-
-#pragma weak pth_read
-#pragma weak pth_write
-
-ssize_t
-_assuan_read (int fd, void *buffer, size_t size)
-{
- static ssize_t (*reader) (int, void *, size_t);
-
- if (! reader)
- {
- if (pth_read)
- reader = pth_read;
- else
- reader = read;
- }
-
- return reader (fd, buffer, size);
-}
-
-ssize_t
-_assuan_write (int fd, const void *buffer, size_t size)
-{
- static ssize_t (*writer) (int, const void *, size_t);
-
- if (! writer)
- {
- if (pth_write)
- writer = pth_write;
- else
- writer = write;
- }
-
- return writer (fd, buffer, size);
-}
diff --git a/src/assuan-pipe-server.c b/src/assuan-pipe-server.c
index 82bb322..73d9de2 100644
--- a/src/assuan-pipe-server.c
+++ b/src/assuan-pipe-server.c
@@ -21,6 +21,7 @@
#include <config.h>
#include <stdlib.h>
#include <stdio.h>
+#include <unistd.h>
#include "assuan-defs.h"
@@ -44,12 +45,34 @@ finish_connection (ASSUAN_CONTEXT ctx)
return 0;
}
+/* Read from the pipe server. */
+static ssize_t
+pipe_reader (ASSUAN_CONTEXT ctx, void *buf, size_t buflen)
+{
+#pragma weak pth_read
+ extern ssize_t pth_read (int, void *, size_t);
+
+ return (pth_read ? pth_read : read) (ctx->inbound.fd, buf, buflen);
+}
+
+/* Write to the pipe server. */
+static ssize_t
+pipe_writer (ASSUAN_CONTEXT ctx, const void *buf, size_t buflen)
+{
+#pragma weak pth_write
+
+ extern ssize_t pth_write (int, const void *, size_t);
+
+ return (pth_write ? pth_write : write) (ctx->outbound.fd, buf, buflen);
+}
/* Create a new context. Note that the handlers are set up for a pipe
server/client - this way we don't need extra dummy functions */
int
_assuan_new_context (ASSUAN_CONTEXT *r_ctx)
{
+ static struct assuan_io io = { pipe_reader, pipe_writer };
+
ASSUAN_CONTEXT ctx;
int rc;
@@ -62,10 +85,11 @@ _assuan_new_context (ASSUAN_CONTEXT *r_ctx)
ctx->inbound.fd = -1;
ctx->outbound.fd = -1;
+ ctx->io = &io;
ctx->listen_fd = -1;
ctx->client_pid = (pid_t)-1;
- /* use the pipe server handler as a default */
+ /* Use the pipe server handler as a default. */
ctx->deinit_handler = deinit_pipe_server;
ctx->accept_handler = accept_connection;
ctx->finish_handler = finish_connection;
@@ -116,7 +140,7 @@ assuan_deinit_server (ASSUAN_CONTEXT ctx)
if (ctx)
{
/* We use this function pointer to avoid linking other server
- when not needed but still allow for a generic deinit function */
+ when not needed but still allow for a generic deinit function. */
ctx->deinit_handler (ctx);
ctx->deinit_handler = NULL;
_assuan_release_context (ctx);
diff --git a/src/assuan-socket-connect.c b/src/assuan-socket-connect.c
index 64a22bf..c27c351 100644
--- a/src/assuan-socket-connect.c
+++ b/src/assuan-socket-connect.c
@@ -63,14 +63,36 @@ do_deinit (ASSUAN_CONTEXT ctx)
}
+/* Read from the socket server. */
+static ssize_t
+socket_reader (ASSUAN_CONTEXT ctx, void *buf, size_t buflen)
+{
+#pragma weak pth_read
+ extern ssize_t pth_read (int, void *, size_t);
+
+ return (pth_read ? pth_read : read) (ctx->inbound.fd, buf, buflen);
+}
+
+/* Write to the pipe server. */
+static ssize_t
+socket_writer (ASSUAN_CONTEXT ctx, const void *buf, size_t buflen)
+{
+#pragma weak pth_write
+
+ extern ssize_t pth_write (int, const void *, size_t);
+
+ return (pth_write ? pth_write : write) (ctx->outbound.fd, buf, buflen);
+}
/* Make a connection to the Unix domain socket NAME and return a new
Assuan context in CTX. SERVER_PID is currently not used but may
- become handy in the future. */
+ become handy in the future. */
AssuanError
assuan_socket_connect (ASSUAN_CONTEXT *r_ctx,
const char *name, pid_t server_pid)
{
+ static struct assuan_io io = { socket_reader, socket_writer };
+
AssuanError err;
ASSUAN_CONTEXT ctx;
int fd;
@@ -119,6 +141,7 @@ assuan_socket_connect (ASSUAN_CONTEXT *r_ctx,
ctx->inbound.fd = fd;
ctx->outbound.fd = fd;
+ ctx->io = &io;
/* initial handshake */
{
diff --git a/src/assuan-socket-server.c b/src/assuan-socket-server.c
index bfa9cfa..c0a9a25 100644
--- a/src/assuan-socket-server.c
+++ b/src/assuan-socket-server.c
@@ -145,7 +145,7 @@ assuan_init_connected_socket_server (ASSUAN_CONTEXT *r_ctx, int fd)
if (!ctx)
return ASSUAN_Out_Of_Core;
ctx->is_server = 1;
- ctx->pipe_mode = 1; /* we wan't a second accept to indicate EOF */
+ ctx->pipe_mode = 1; /* we want a second accept to indicate EOF */
ctx->input_fd = -1;
ctx->output_fd = -1;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/libassuan.git
More information about the Pkg-gnupg-commit
mailing list