diff options
author | 2016-11-17 17:34:55 +0000 | |
---|---|---|
committer | 2016-11-17 17:34:55 +0000 | |
commit | 66802da196b9596ac693c414c63d7151bac6bdb0 (patch) | |
tree | 4de0243e8d510a5e477e7323388f308a5e103126 | |
parent | Put all make targets in a loop and print a little more what each (diff) | |
download | wireguard-openbsd-66802da196b9596ac693c414c63d7151bac6bdb0.tar.xz wireguard-openbsd-66802da196b9596ac693c414c63d7151bac6bdb0.zip |
Add io api functions for dealing with buffered data, as wrapper around
their iobuf counterparts.
ok gilles@ sunil@
-rw-r--r-- | usr.sbin/smtpd/ioev.c | 94 | ||||
-rw-r--r-- | usr.sbin/smtpd/ioev.h | 16 | ||||
-rw-r--r-- | usr.sbin/smtpd/smtpd.h | 4 | ||||
-rw-r--r-- | usr.sbin/smtpd/util.c | 29 |
4 files changed, 133 insertions, 10 deletions
diff --git a/usr.sbin/smtpd/ioev.c b/usr.sbin/smtpd/ioev.c index 53308599f40..06bc35f2bf5 100644 --- a/usr.sbin/smtpd/ioev.c +++ b/usr.sbin/smtpd/ioev.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ioev.c,v 1.28 2016/11/17 07:33:06 eric Exp $ */ +/* $OpenBSD: ioev.c,v 1.29 2016/11/17 17:34:55 eric Exp $ */ /* * Copyright (c) 2012 Eric Faurot <eric@openbsd.org> * @@ -354,6 +354,92 @@ io_set_write(struct io *io) io_reload(io); } +/* + * Buffered output functions + */ + +int +io_write(struct io *io, const void *buf, size_t len) +{ + return iobuf_queue(io->iobuf, buf, len); +} + +int +io_writev(struct io *io, const struct iovec *iov, int iovcount) +{ + return iobuf_queuev(io->iobuf, iov, iovcount); +} + +int +io_print(struct io *io, const char *s) +{ + return io_write(io, s, strlen(s)); +} + +int +io_printf(struct io *io, const char *fmt, ...) +{ + va_list ap; + int r; + + va_start(ap, fmt); + r = io_vprintf(io, fmt, ap); + va_end(ap); + + return r; +} + +int +io_vprintf(struct io *io, const char *fmt, va_list ap) +{ + + char *buf; + int len; + + len = vasprintf(&buf, fmt, ap); + if (len == -1) + return -1; + len = io_write(io, buf, len); + free(buf); + + return len; +} + +size_t +io_queued(struct io *io) +{ + return iobuf_queued(io->iobuf); +} + +/* + * Buffered input functions + */ + +void * +io_data(struct io *io) +{ + return iobuf_data(io->iobuf); +} + +size_t +io_datalen(struct io *io) +{ + return iobuf_len(io->iobuf); +} + +char * +io_getline(struct io *io, size_t *sz) +{ + return iobuf_getline(io->iobuf, sz); +} + +void +io_drop(struct io *io, size_t sz) +{ + return iobuf_drop(io->iobuf, sz); +} + + #define IO_READING(io) (((io)->flags & IO_RW) != IO_WRITE) #define IO_WRITING(io) (((io)->flags & IO_RW) != IO_READ) @@ -430,12 +516,6 @@ io_pending(struct io *io) return iobuf_len(io->iobuf); } -size_t -io_queued(struct io *io) -{ - return iobuf_queued(io->iobuf); -} - const char* io_strflags(int flags) { diff --git a/usr.sbin/smtpd/ioev.h b/usr.sbin/smtpd/ioev.h index aacbf800b6f..dad320459a1 100644 --- a/usr.sbin/smtpd/ioev.h +++ b/usr.sbin/smtpd/ioev.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ioev.h,v 1.8 2016/11/17 07:33:06 eric Exp $ */ +/* $OpenBSD: ioev.h,v 1.9 2016/11/17 17:34:55 eric Exp $ */ /* * Copyright (c) 2012 Eric Faurot <eric@openbsd.org> * @@ -68,3 +68,17 @@ int io_connect(struct io *, const struct sockaddr *, const struct sockaddr *); int io_start_tls(struct io *, void *); const char* io_strio(struct io *); const char* io_strevent(int); + +/* Buffered output functions */ +int io_write(struct io *, const void *, size_t); +int io_writev(struct io *, const struct iovec *, int); +int io_print(struct io *, const char *); +int io_printf(struct io *, const char *, ...); +int io_vprintf(struct io *, const char *, va_list); +size_t io_queued(struct io *); + +/* Buffered input functions */ +void* io_data(struct io *); +size_t io_datalen(struct io *); +char* io_getline(struct io *, size_t *); +void io_drop(struct io *, size_t); diff --git a/usr.sbin/smtpd/smtpd.h b/usr.sbin/smtpd/smtpd.h index 10083bc3a33..ed308198545 100644 --- a/usr.sbin/smtpd/smtpd.h +++ b/usr.sbin/smtpd/smtpd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: smtpd.h,v 1.523 2016/09/04 09:33:49 eric Exp $ */ +/* $OpenBSD: smtpd.h,v 1.524 2016/11/17 17:34:55 eric Exp $ */ /* * Copyright (c) 2008 Gilles Chehade <gilles@poolp.org> @@ -1494,6 +1494,8 @@ void *xmemdup(const void *, size_t, const char *); char *strip(char *); void iobuf_xinit(struct iobuf *, size_t, size_t, const char *); void iobuf_xfqueue(struct iobuf *, const char *, const char *, ...); +int io_xprint(struct io *, const char *); +int io_xprintf(struct io *, const char *, ...); void log_envelope(const struct envelope *, const char *, const char *, const char *); int session_socket_error(int); diff --git a/usr.sbin/smtpd/util.c b/usr.sbin/smtpd/util.c index bf2b86f3061..7c87019d7ad 100644 --- a/usr.sbin/smtpd/util.c +++ b/usr.sbin/smtpd/util.c @@ -1,4 +1,4 @@ -/* $OpenBSD: util.c,v 1.128 2016/08/31 10:18:08 gilles Exp $ */ +/* $OpenBSD: util.c,v 1.129 2016/11/17 17:34:55 eric Exp $ */ /* * Copyright (c) 2000,2001 Markus Friedl. All rights reserved. @@ -133,6 +133,33 @@ iobuf_xfqueue(struct iobuf *io, const char *where, const char *fmt, ...) fatalx("exiting"); } } + +int +io_xprintf(struct io *io, const char *fmt, ...) +{ + va_list ap; + int len; + + va_start(ap, fmt); + len = io_vprintf(io, fmt, ap); + va_end(ap); + if (len == -1) + fatal("io_xprintf(%p, %s, ...)", io, fmt); + + return len; +} + +int +io_xprint(struct io *io, const char *str) +{ + int len; + + len = io_print(io, str); + if (len == -1) + fatal("io_xprint(%p, %s, ...)", io, str); + + return len; +} #endif char * |