skalibs

Mirror/fork of https://skarnet.org/software/skalibs/
git clone https://ccx.te2000.cz/git/skalibs
Log | Files | Refs | README | LICENSE

commit beed5320348ffe615e974684d166c17992c98144
parent 83bcd1e5ed5eb5c4abc5154dae4dc6e133c8ddb4
Author: Laurent Bercot <ska-skaware@skarnet.org>
Date:   Tue, 30 Jan 2024 02:22:27 +0000

 bugfix: getlnmax must return 1 when the line just fits the out buffer

Signed-off-by: Laurent Bercot <ska@appnovation.com>

Diffstat:
Msrc/libstddjb/getlnmax.c | 7++++---
1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/libstddjb/getlnmax.c b/src/libstddjb/getlnmax.c @@ -2,17 +2,18 @@ #include <sys/uio.h> #include <errno.h> + #include <skalibs/buffer.h> #include <skalibs/siovec.h> #include <skalibs/skamisc.h> int getlnmax (buffer *b, char *d, size_t max, size_t *w, char sep) { - if (max < *w) return (errno = EINVAL, -1) ; + if (*w > max) return (errno = EINVAL, -1) ; for (;;) { - struct iovec v[2] ; size_t len = buffer_len(b) ; + struct iovec v[2] ; size_t pos ; ssize_t r ; buffer_rpeek(b, v) ; @@ -21,8 +22,8 @@ int getlnmax (buffer *b, char *d, size_t max, size_t *w, char sep) if (pos > len) pos = len ; r = pos < len ; pos += r ; buffer_getnofill(b, d + *w, pos) ; *w += pos ; - if (*w >= max) return (errno = ERANGE, -1) ; if (r) return 1 ; + if (*w >= max) return (errno = ERANGE, -1) ; r = buffer_fill(b) ; if (r <= 0) return r ; }