* fakemail.c: Include <ignore-value.h>.
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 26 Feb 2011 05:36:51 +0000 (21:36 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 26 Feb 2011 05:36:51 +0000 (21:36 -0800)
(put_line): Explicitly ignore fwrite return value, for benefit of
recent glibc + gcc.
(close_the_streams): Diagnose output errors instead of merely
exiting with nonzero status.
(my_fclose, main): Diagnose input errors, and exit with nonzero status.
Formerly, input errors were silently ignored.

lib-src/ChangeLog
lib-src/fakemail.c

index ed6162b..c57ee2f 100644 (file)
@@ -1,5 +1,13 @@
 2011-02-26  Paul Eggert  <eggert@cs.ucla.edu>
 
+       * fakemail.c: Include <ignore-value.h>.
+       (put_line): Explicitly ignore fwrite return value, for benefit of
+       recent glibc + gcc.
+       (close_the_streams): Diagnose output errors instead of merely
+       exiting with nonzero status.
+       (my_fclose, main): Diagnose input errors, and exit with nonzero status.
+       Formerly, input errors were silently ignored.
+
        * ebrowse.c (putstr): Rename from PUTSTR and turn into a function.
        All callers changed.  This is cleaner, and avoids GCC warnings about
        passing NULL to fputs.
index 26375a6..780a104 100644 (file)
@@ -62,6 +62,8 @@ main ()
 
 /* This is to declare cuserid.  */
 #include <unistd.h>
+
+#include <ignore-value.h>
 \f
 /* Type definitions */
 
@@ -405,8 +407,8 @@ close_the_streams (void)
   for (rem = the_streams;
        rem != ((stream_list) NULL);
        rem = rem->rest_streams)
-    no_problems = (no_problems &&
-                  ((*rem->action) (rem->handle) == 0));
+    if (no_problems && (*rem->action) (rem->handle) != 0)
+      error ("output error", NULL);
   the_streams = ((stream_list) NULL);
   return (no_problems ? EXIT_SUCCESS : EXIT_FAILURE);
 }
@@ -427,6 +429,8 @@ my_fclose (FILE *the_file)
 {
   putc ('\n', the_file);
   fflush (the_file);
+  if (ferror (the_file))
+    return EOF;
   return fclose (the_file);
 }
 
@@ -496,7 +500,7 @@ put_line (const char *string)
                }
            }
          /* Output that much, then break the line.  */
-         fwrite (s, 1, breakpos - s, rem->handle);
+         ignore_value (fwrite (s, 1, breakpos - s, rem->handle));
          column = 8;
 
          /* Skip whitespace and prepare to print more addresses.  */
@@ -729,6 +733,9 @@ main (int argc, char **argv)
       put_string (buf);
     }
 
+  if (no_problems && (ferror (stdin) || fclose (stdin) != 0))
+    error ("input error", NULL);
+
   exit (close_the_streams ());
 }