Hi,

Next step towards hiding the struct io internals.

This diff adds new io_*() api functions for dealing with buffered data.
They are simple wrappers around their iobuf_*() counterpart, with better
names in some cases.

The point is of course to be able remove the use of iobuf_*() in the rest
of the daemon.

Eric.

Index: ioev.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/ioev.c,v
retrieving revision 1.28
diff -u -p -r1.28 ioev.c
--- ioev.c      17 Nov 2016 07:33:06 -0000      1.28
+++ ioev.c      17 Nov 2016 14:01:28 -0000
@@ -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)
 
@@ -428,12 +514,6 @@ size_t
 io_pending(struct io *io)
 {
        return iobuf_len(io->iobuf);
-}
-
-size_t
-io_queued(struct io *io)
-{
-       return iobuf_queued(io->iobuf);
 }
 
 const char*
Index: ioev.h
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/ioev.h,v
retrieving revision 1.8
diff -u -p -r1.8 ioev.h
--- ioev.h      17 Nov 2016 07:33:06 -0000      1.8
+++ ioev.h      17 Nov 2016 14:01:28 -0000
@@ -68,3 +68,17 @@ int io_connect(struct io *, const struct
 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);
Index: smtpd.h
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/smtpd.h,v
retrieving revision 1.523
diff -u -p -r1.523 smtpd.h
--- smtpd.h     4 Sep 2016 09:33:49 -0000       1.523
+++ smtpd.h     17 Nov 2016 14:01:28 -0000
@@ -1494,6 +1494,8 @@ void *xmemdup(const void *, size_t, cons
 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);
Index: util.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/util.c,v
retrieving revision 1.128
diff -u -p -r1.128 util.c
--- util.c      31 Aug 2016 10:18:08 -0000      1.128
+++ util.c      17 Nov 2016 14:01:28 -0000
@@ -133,6 +133,33 @@ iobuf_xfqueue(struct iobuf *io, const ch
                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 *

Reply via email to