do not ignore errors like ENOSPC,EIO when writing to stdout
authorJim Meyering <meyering@redhat.com>
Sun, 29 Jan 2012 11:50:32 +0000 (12:50 +0100)
committerAkim Demaille <demaille@gostai.com>
Tue, 31 Jan 2012 08:26:08 +0000 (09:26 +0100)
Standard output was never explicitly closed, so we could not
detect failure.  Thus, bison would ignore the errors of writing
to a full file system and getting an I/O error on write, but only
for standard output, e.g., for --print-localedir, --print-datadir,
--help and some verbose output.
Now, "bison --print-datadir > /dev/full" reports the write failure:
bison: write error: No space left on device
Before, it would exit 0 with no diagnostic, implying success.
This is not an issue for "--output=-" or the other FILE-accepting
command-line options, because unlike most other GNU programs,
an output file argument of "-" is treated as the literal "./-",
rather than standard output.
* bootstrap.conf (gnulib_modules): Add closeout.
* src/main.c: Include "closeout.h".
Use atexit to ensure we close stdout.
* .gitignore: Ignore new files pulled in via gnulib-tool.
(cherry picked from commit acb5895680611f8beb497b41694d9686f2932c50)

Conflicts:

m4/.gitignore

bootstrap.conf
lib/.gitignore
m4/.gitignore
src/main.c

index 90ba6e5..7d6f3fb 100644 (file)
@@ -17,7 +17,7 @@
 
 # gnulib modules used by this package.
 gnulib_modules='
-  announce-gen argmatch assert calloc-posix close config-h c-strcase
+  announce-gen argmatch assert calloc-posix close closeout config-h c-strcase
   configmake dirname error extensions fdl fopen-safer gendocs getopt-gnu
   gettext git-version-gen gitlog-to-changelog
   gpl-3.0 hash inttypes isnan javacomp-script
index 54edced..365b84d 100644 (file)
 /strerror-override.h
 /strerror_r.c
 /xalloc-oversized.h
+/close-stream.c
+/close-stream.h
+/closeout.c
+/closeout.h
+/fpending.c
+/fpending.h
index f46e164..01e5f64 100644 (file)
@@ -1,4 +1,3 @@
-
 /00gnulib.m4
 /alloca.m4
 /argmatch.m4
@@ -6,7 +5,9 @@
 /assert.m4
 /calloc.m4
 /cloexec.m4
+/close-stream.m4
 /close.m4
+/closeout.m4
 /codeset.m4
 /config-h.m4
 /configmake.m4
 /fcntl_h.m4
 /float_h.m4
 /fopen.m4
+/fpending.m4
 /fpieee.m4
 /fprintf-posix.m4
 /frexp.m4
 /frexpl.m4
+/fstat.m4
 /getdtablesize.m4
 /getopt.m4
 /gettext.m4
@@ -57,6 +60,8 @@
 /iswblank.m4
 /javacomp.m4
 /javaexec.m4
+/largefile.m4
+/ldexp.m4
 /ldexpl.m4
 /lib-ld.m4
 /lib-link.m4
 /memchr.m4
 /mmap-anon.m4
 /mode_t.m4
+/msvc-inval.m4
+/msvc-nothrow.m4
 /multiarch.m4
 /nls.m4
 /nocrash.m4
 /open.m4
+/pathmax.m4
 /perror.m4
 /pipe.m4
 /pipe2.m4
 /progtest.m4
 /quote.m4
 /quotearg.m4
+/raise.m4
 /rawmemchr.m4
 /realloc.m4
 /sched_h.m4
 /spawn-pipe.m4
 /spawn_h.m4
 /sprintf-posix.m4
+/ssize_t.m4
 /stat.m4
 /stdbool.m4
 /stddef_h.m4
 /strchrnul.m4
 /strdup.m4
 /strerror.m4
+/strerror_r.m4
 /string_h.m4
 /strndup.m4
 /strnlen.m4
 /xalloc.m4
 /xsize.m4
 /xstrndup.m4
-
-/fstat.m4
-/largefile.m4
-/ldexp.m4
-/msvc-inval.m4
-/msvc-nothrow.m4
-/pathmax.m4
-/raise.m4
-/ssize_t.m4
-/strerror_r.m4
-/gnulib-comp.m4
index e777ca0..3dbac3a 100644 (file)
@@ -28,6 +28,7 @@
 #include <timevar.h>
 
 #include "LR0.h"
+#include "closeout.h"
 #include "complain.h"
 #include "conflicts.h"
 #include "derives.h"
@@ -62,6 +63,8 @@ main (int argc, char *argv[])
   (void) bindtextdomain ("bison-runtime", LOCALEDIR);
   (void) textdomain (PACKAGE);
 
+  atexit (close_stdout);
+
   uniqstrs_new ();
   muscle_init ();