From: Jim Meyering Date: Sun, 29 Jan 2012 11:50:32 +0000 (+0100) Subject: do not ignore errors like ENOSPC,EIO when writing to stdout X-Git-Tag: v2.5.1_rc2~114 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/e187b40d317f2bcff21779a774a767f51c0fe276 do not ignore errors like ENOSPC,EIO when writing to stdout 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 --- diff --git a/bootstrap.conf b/bootstrap.conf index 90ba6e56..7d6f3fbd 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -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 diff --git a/lib/.gitignore b/lib/.gitignore index 54edced3..365b84d0 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -259,3 +259,9 @@ /strerror-override.h /strerror_r.c /xalloc-oversized.h +/close-stream.c +/close-stream.h +/closeout.c +/closeout.h +/fpending.c +/fpending.h diff --git a/m4/.gitignore b/m4/.gitignore index f46e1646..01e5f645 100644 --- a/m4/.gitignore +++ b/m4/.gitignore @@ -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 @@ -28,10 +29,12 @@ /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 @@ -78,10 +83,13 @@ /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 @@ -95,6 +103,7 @@ /progtest.m4 /quote.m4 /quotearg.m4 +/raise.m4 /rawmemchr.m4 /realloc.m4 /sched_h.m4 @@ -112,6 +121,7 @@ /spawn-pipe.m4 /spawn_h.m4 /sprintf-posix.m4 +/ssize_t.m4 /stat.m4 /stdbool.m4 /stddef_h.m4 @@ -124,6 +134,7 @@ /strchrnul.m4 /strdup.m4 /strerror.m4 +/strerror_r.m4 /string_h.m4 /strndup.m4 /strnlen.m4 @@ -156,14 +167,3 @@ /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 diff --git a/src/main.c b/src/main.c index e777ca04..3dbac3a9 100644 --- a/src/main.c +++ b/src/main.c @@ -28,6 +28,7 @@ #include #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 ();