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

Reply via email to