On Thu, Nov 17, 2016 at 05:41:16PM +0100, Eric Faurot wrote:
> 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.
>
yay, ok gilles@
please tell me the next diff removes iobuf_* :-p
> 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 *
>
--
Gilles Chehade
https://www.poolp.org @poolpOrg