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.7.90~546 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/acb5895680611f8beb497b41694d9686f2932c50?ds=sidebyside 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. --- diff --git a/bootstrap.conf b/bootstrap.conf index 599b778f..757111ce 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 c50ed39a..901724d0 100644 --- a/m4/.gitignore +++ b/m4/.gitignore @@ -166,3 +166,6 @@ /raise.m4 /ssize_t.m4 /strerror_r.m4 +/close-stream.m4 +/closeout.m4 +/fpending.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 ();