diff options
Diffstat (limited to 'src/libstddjb')
-rw-r--r-- | src/libstddjb/allreadwrite.c | 7 | ||||
-rw-r--r-- | src/libstddjb/fd_catn.c | 4 | ||||
-rw-r--r-- | src/libstddjb/openreadfileclose.c | 8 |
3 files changed, 11 insertions, 8 deletions
diff --git a/src/libstddjb/allreadwrite.c b/src/libstddjb/allreadwrite.c index 0e9351a..19e4c1c 100644 --- a/src/libstddjb/allreadwrite.c +++ b/src/libstddjb/allreadwrite.c @@ -1,6 +1,5 @@ /* ISC license. */ -#include <errno.h> #include <skalibs/allreadwrite.h> size_t allreadwrite (io_func_ref op, int fd, char *buf, size_t len) @@ -9,11 +8,7 @@ size_t allreadwrite (io_func_ref op, int fd, char *buf, size_t len) while (len) { ssize_t w = (*op)(fd, buf, len) ; - if (w <= 0) - { - if (!w) errno = 0 ; - break ; - } + if (w <= 0) break ; written += w ; buf += w ; len -= w ; diff --git a/src/libstddjb/fd_catn.c b/src/libstddjb/fd_catn.c index 182a054..4f1016e 100644 --- a/src/libstddjb/fd_catn.c +++ b/src/libstddjb/fd_catn.c @@ -14,10 +14,12 @@ off_t fd_catn (int from, int to, off_t n) char buf[BSIZE] ; while (n >= BSIZE) { + size_t v ; ssize_t r = fd_read(from, buf, BSIZE) ; if (r == -1) return w ; if (!r) return (errno = EPIPE, w) ; - if (allwrite(to, buf, r) < r) return w ; + v = allwrite(to, buf, r) ; + if (v < r) return w + v ; n -= r ; w += r ; } diff --git a/src/libstddjb/openreadfileclose.c b/src/libstddjb/openreadfileclose.c index afa895a..144f264 100644 --- a/src/libstddjb/openreadfileclose.c +++ b/src/libstddjb/openreadfileclose.c @@ -1,6 +1,8 @@ /* ISC license. */ #include <sys/stat.h> +#include <errno.h> + #include <skalibs/allreadwrite.h> #include <skalibs/stralloc.h> #include <skalibs/djbunix.h> @@ -8,6 +10,7 @@ int openreadfileclose (char const *file, stralloc *sa, size_t limit) { size_t n ; + int e = errno ; int fd = openbc_read(file) ; if (fd < 0) return 0 ; { @@ -18,11 +21,14 @@ int openreadfileclose (char const *file, stralloc *sa, size_t limit) if (limit && (limit < n)) n = limit ; if (!stralloc_ready_tuned(sa, sa->len + n, 0, 0, 1)) goto err ; { - size_t r = allread(fd, sa->s + sa->len, n) ; + size_t r ; + errno = EPIPE ; + r = allread(fd, sa->s + sa->len, n) ; sa->len += r ; if (r < n) goto err ; } fd_close(fd) ; + errno = e ; return 1 ; err: |