summaryrefslogtreecommitdiff
path: root/read.c
diff options
context:
space:
mode:
Diffstat (limited to 'read.c')
-rw-r--r--read.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/read.c b/read.c
index 3488f08..0ad6c5b 100644
--- a/read.c
+++ b/read.c
@@ -1648,18 +1648,21 @@ readline (linebuffer, stream, filename, lineno)
*p = '\0';
- while (1)
+ while (fgets (p, end - p, stream) != 0)
{
- if (fgets (p, end - p, stream) == 0)
- if (feof (stream))
- break;
- else
- pfatal_with_name (filename);
-
len = strlen (p);
if (len == 0)
- /* This only happens when the first thing on the line is a '\0'. */
- makefile_fatal (filename, lineno, "NUL not allowed in makefile");
+ {
+ /* This only happens when the first thing on the line is a '\0'.
+ It is a pretty hopeless case, but (wonder of wonders) Athena
+ lossage strikes again! (xmkmf puts NULs in its makefiles.)
+ There is nothing really to be done; we synthesize a newline so
+ the following line doesn't appear to be part of this line. */
+ makefile_error (filename, lineno,
+ "warning: NUL character seen; rest of line ignored");
+ p[0] = '\n';
+ len = 1;
+ }
p += len;
if (p[-1] != '\n')
@@ -1715,6 +1718,9 @@ readline (linebuffer, stream, filename, lineno)
}
}
+ if (ferror (stream))
+ pfatal_with_name (filename);
+
return nlines;
}