From 05e0e301e3efbeb399b9f3d96fab63aac18e601a Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Sat, 4 Apr 2015 11:27:06 +0000 Subject: fix getdelim to set the error indicator on all failures --- src/stdio/getdelim.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/stdio/getdelim.c') diff --git a/src/stdio/getdelim.c b/src/stdio/getdelim.c index 26093a6c..a88c3933 100644 --- a/src/stdio/getdelim.c +++ b/src/stdio/getdelim.c @@ -13,15 +13,17 @@ ssize_t getdelim(char **restrict s, size_t *restrict n, int delim, FILE *restric size_t i=0; int c; + FLOCK(f); + if (!n || !s) { + f->flags |= F_ERR; + FUNLOCK(f); errno = EINVAL; return -1; } if (!*s) *n=0; - FLOCK(f); - for (;;) { z = memchr(f->rpos, delim, f->rend - f->rpos); k = z ? z - f->rpos + 1 : f->rend - f->rpos; @@ -56,6 +58,7 @@ ssize_t getdelim(char **restrict s, size_t *restrict n, int delim, FILE *restric return i; oom: + f->flags |= F_ERR; FUNLOCK(f); errno = ENOMEM; return -1; -- cgit v1.2.1