libutil: Add writeall utility function
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.
This commit is contained in:
parent
529e50a7ad
commit
5cb3a1eba1
3
Makefile
3
Makefile
|
@ -79,7 +79,8 @@ LIBUTILSRC =\
|
||||||
libutil/strlcpy.c\
|
libutil/strlcpy.c\
|
||||||
libutil/strsep.c\
|
libutil/strsep.c\
|
||||||
libutil/strtonum.c\
|
libutil/strtonum.c\
|
||||||
libutil/unescape.c
|
libutil/unescape.c\
|
||||||
|
libutil/writeall.c
|
||||||
|
|
||||||
LIB = $(LIBUTF) $(LIBUTIL)
|
LIB = $(LIBUTF) $(LIBUTIL)
|
||||||
|
|
||||||
|
|
21
libutil/writeall.c
Normal file
21
libutil/writeall.c
Normal file
|
@ -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;
|
||||||
|
}
|
3
util.h
3
util.h
|
@ -62,6 +62,9 @@ char *strsep(char **, const char *);
|
||||||
int enregcomp(int, regex_t *, const char *, int);
|
int enregcomp(int, regex_t *, const char *, int);
|
||||||
int eregcomp(regex_t *, const char *, int);
|
int eregcomp(regex_t *, const char *, int);
|
||||||
|
|
||||||
|
/* io */
|
||||||
|
ssize_t writeall(int, const void *, size_t);
|
||||||
|
|
||||||
/* misc */
|
/* misc */
|
||||||
void enmasse(int, char **, int (*)(const char *, const char *, int));
|
void enmasse(int, char **, int (*)(const char *, const char *, int));
|
||||||
void fnck(const char *, const char *, int (*)(const char *, const char *, int), int);
|
void fnck(const char *, const char *, int (*)(const char *, const char *, int), int);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user