diff lib/linebuffer.c @ 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 f3ad8f03546c
children 9c493e421b7f
line wrap: on
line diff
--- 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;