From beed5320348ffe615e974684d166c17992c98144 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Tue, 30 Jan 2024 02:22:27 +0000 Subject: bugfix: getlnmax must return 1 when the line just fits the out buffer Signed-off-by: Laurent Bercot --- src/libstddjb/getlnmax.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libstddjb/getlnmax.c b/src/libstddjb/getlnmax.c index a9e6146..700fd0d 100644 --- a/src/libstddjb/getlnmax.c +++ b/src/libstddjb/getlnmax.c @@ -2,17 +2,18 @@ #include #include + #include #include #include 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 ; } -- cgit v1.2.3