Mercurial > hg > octave-lojdl > gnulib-hg
changeset 4713:c3e2b42bdca3
linebuffer.c (readlinebuffer): Return NULL immediately upon input error.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Tue, 16 Sep 2003 20:00:38 +0000 |
parents | 39841d2009ed |
children | a45b0a615e08 |
files | lib/ChangeLog lib/linebuffer.c |
diffstat | 2 files changed, 12 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,6 +1,12 @@ +2003-09-16 Paul Eggert <eggert@twinsun.com> + + * linebuffer.c (readlinebuffer): Return NULL immediately upon + input error, instead of returning NULL the next time we are called + (and therefore losing track of errno). + 2003-09-15 Paul Eggert <eggert@twinsun.com> - * lib/getndelim2.c (getndelim2): Don't trash errno when a read + * getndelim2.c (getndelim2): Don't trash errno when a read fails, so that the caller gets the proper errno. * readutmp.c (read_utmp): Likewise.
--- a/lib/linebuffer.c +++ b/lib/linebuffer.c @@ -45,7 +45,9 @@ that ends in a non-newline character. Do not null terminate. Therefore the stream can contain NUL bytes, and the length (including the newline) is returned in linebuffer->length. - Return NULL upon error, or when STREAM is empty. + Return NULL when stream is empty. Return NULL and set errno upon + error; callers can distinguish this case from the empty case by + invoking ferror (stream). Otherwise, return LINEBUFFER. */ struct linebuffer * readlinebuffer (struct linebuffer *linebuffer, FILE *stream) @@ -55,7 +57,7 @@ char *p = linebuffer->buffer; char *end = buffer + linebuffer->size; /* Sentinel. */ - if (feof (stream) || ferror (stream)) + if (feof (stream)) return NULL; do @@ -63,7 +65,7 @@ c = getc (stream); if (c == EOF) { - if (p == buffer) + if (p == buffer || ferror (stream)) return NULL; if (p[-1] == '\n') break;