diff options
Diffstat (limited to 'misc/subr.c')
| -rw-r--r-- | misc/subr.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/misc/subr.c b/misc/subr.c index 729d588..e16a7dc 100644 --- a/misc/subr.c +++ b/misc/subr.c @@ -174,3 +174,35 @@ rand_between(long min, long max) { return min + (long)rint((double)random() * (max - min) / RAND_MAX); } + +int +write_fully(int fd, const void *buf, size_t len) +{ + ssize_t nw; + size_t off = 0; + + while (off < len) { + nw = write(fd, buf + off, len - off); + if (nw == -1) + return errno; + off += nw; + } + return 0; +} + +int +read_fully(int fd, void *buf, size_t len) +{ + ssize_t nread; + size_t off = 0; + + while (off < len) { + nread = read(fd, buf + off, len - off); + if (nread == 0) + return ECONNRESET; + else if (nread == -1) + return errno; + off += nread; + } + return 0; +} |