summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreric <eric@openbsd.org>2016-11-17 17:34:55 +0000
committereric <eric@openbsd.org>2016-11-17 17:34:55 +0000
commit66802da196b9596ac693c414c63d7151bac6bdb0 (patch)
tree4de0243e8d510a5e477e7323388f308a5e103126
parentPut all make targets in a loop and print a little more what each (diff)
downloadwireguard-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.c94
-rw-r--r--usr.sbin/smtpd/ioev.h16
-rw-r--r--usr.sbin/smtpd/smtpd.h4
-rw-r--r--usr.sbin/smtpd/util.c29
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 *