On Mon, Dec 5, 2016 at 6:55 AM, Michael Forney <mfor...@mforney.org> wrote: > writeall makes successive write calls to write an entire buffer to the > output file descriptor. It returns the number of bytes written, or -1 on > the first error. > --- > Makefile | 3 ++- > libutil/writeall.c | 21 +++++++++++++++++++++ > util.h | 3 +++ > 3 files changed, 26 insertions(+), 1 deletion(-) > create mode 100644 libutil/writeall.c
LGTM Cheers, Silvan > diff --git a/Makefile b/Makefile > index 25bab70..a337ead 100644 > --- a/Makefile > +++ b/Makefile > @@ -79,7 +79,8 @@ LIBUTILSRC =\ > libutil/strlcpy.c\ > libutil/strsep.c\ > libutil/strtonum.c\ > - libutil/unescape.c > + libutil/unescape.c\ > + libutil/writeall.c > > LIB = $(LIBUTF) $(LIBUTIL) > > diff --git a/libutil/writeall.c b/libutil/writeall.c > new file mode 100644 > index 0000000..4725ced > --- /dev/null > +++ b/libutil/writeall.c > @@ -0,0 +1,21 @@ > +/* See LICENSE file for copyright and license details. */ > +#include <unistd.h> > + > +#include "../util.h" > + > +ssize_t > +writeall(int fd, const void *buf, size_t len) > +{ > + const char *p = buf; > + ssize_t n; > + > + while (len) { > + n = write(fd, p, len); > + if (n <= 0) > + return n; > + p += n; > + len -= n; > + } > + > + return p - (const char *)buf; > +} > diff --git a/util.h b/util.h > index b5860dc..eaad3ce 100644 > --- a/util.h > +++ b/util.h > @@ -62,6 +62,9 @@ char *strsep(char **, const char *); > int enregcomp(int, regex_t *, const char *, int); > int eregcomp(regex_t *, const char *, int); > > +/* io */ > +ssize_t writeall(int, const void *, size_t); > + > /* misc */ > void enmasse(int, char **, int (*)(const char *, const char *, int)); > void fnck(const char *, const char *, int (*)(const char *, const char *, > int), int); > -- > 2.11.0 > >