diff options
author | Jim Meyering <jim@meyering.net> | 2003-09-17 18:45:24 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2003-09-17 18:45:24 +0000 |
commit | 21158aed3acf8f6e925c2e3902b0c494aa7bf63b (patch) | |
tree | 6dda21d7ce6a231f1edae516d63d863ac72c5a72 | |
parent | 7620cc92c20ec5c372891eac4a4051b45c3447e0 (diff) | |
download | coreutils-21158aed3acf8f6e925c2e3902b0c494aa7bf63b.tar.xz |
(readlinebuffer): Return NULL immediately upon
input error, instead of returning NULL the next time we are called
(and therefore losing track of errno).
-rw-r--r-- | lib/linebuffer.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/linebuffer.c b/lib/linebuffer.c index e169a989d..434d6d858 100644 --- a/lib/linebuffer.c +++ b/lib/linebuffer.c @@ -45,7 +45,9 @@ initbuffer (struct linebuffer *linebuffer) 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 @@ readlinebuffer (struct linebuffer *linebuffer, FILE *stream) 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 @@ readlinebuffer (struct linebuffer *linebuffer, FILE *stream) c = getc (stream); if (c == EOF) { - if (p == buffer) + if (p == buffer || ferror (stream)) return NULL; if (p[-1] == '\n') break; |