+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.
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)
char *p = linebuffer->buffer;
char *end = buffer + linebuffer->size; /* Sentinel. */
- if (feof (stream) || ferror (stream))
+ if (feof (stream))
return NULL;
do
c = getc (stream);
if (c == EOF)
{
- if (p == buffer)
+ if (p == buffer || ferror (stream))
return NULL;
if (p[-1] == '\n')
break;