From: Jim Meyering <meyering@redhat.com> Date: Sat, 24 Sep 2011 09:22:06 +0000 (+0200) Subject: do not ignore write error for any output size X-Git-Tag: emacs-pretest-24.0.90~28 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=b260039d4257fae4594fbf13bc116ed154dec111;p=emacs.git do not ignore write error for any output size The previous change was incomplete. While it makes emacs --batch detect the vast majority of stdout write failures, errors were still ignored whenever the output size is k * (BUFSIZ+1) - 4. E.g., on a system with BUFSIZ of 4096, $ emacs --batch --eval '(print (format "%4093d" 0))' > /dev/full \ && echo FAIL: ignored write error FAIL: ignored write error $ emacs --batch --eval '(print (format "%20481d" 0))' > /dev/full \ && echo FAIL: ignored write error FAIL: ignored write error * emacs.c (Fkill_emacs): Also test ferror. (Bug#9574) --- diff --git a/src/ChangeLog b/src/ChangeLog index 44a76068313..7435254b490 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,18 @@ +2011-09-24 Jim Meyering <meyering@redhat.com> + + do not ignore write error for any output size + The previous change was incomplete. + While it makes emacs --batch detect the vast majority of stdout + write failures, errors were still ignored whenever the output size is + k * (BUFSIZ+1) - 4. E.g., on a system with BUFSIZ of 4096, + $ emacs --batch --eval '(print (format "%4093d" 0))' > /dev/full \ + && echo FAIL: ignored write error + FAIL: ignored write error + $ emacs --batch --eval '(print (format "%20481d" 0))' > /dev/full \ + && echo FAIL: ignored write error + FAIL: ignored write error + * emacs.c (Fkill_emacs): Also test ferror. (Bug#9574) + 2011-09-23 Andreas Schwab <schwab@linux-m68k.org> * emacs.c (Fkill_emacs): In noninteractive mode exit diff --git a/src/emacs.c b/src/emacs.c index 0a684d4423c..073156bb0c9 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -2019,7 +2019,7 @@ all of which are called before Emacs is actually killed. */) unlink (SSDATA (Vauto_save_list_file_name)); exit_code = EXIT_SUCCESS; - if (noninteractive && fflush (stdout)) + if (noninteractive && (fflush (stdout) || ferror (stdout))) exit_code = EXIT_FAILURE; exit (INTEGERP (arg) ? XINT (arg) : exit_code); }