Formerly read.c.~71~
authorRoland McGrath <roland@redhat.com>
Tue, 14 Dec 1993 20:09:51 +0000 (20:09 +0000)
committerRoland McGrath <roland@redhat.com>
Tue, 14 Dec 1993 20:09:51 +0000 (20:09 +0000)
read.c

diff --git a/read.c b/read.c
index 3488f08..0ad6c5b 100644 (file)
--- 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;
 }
 \f