diff options
-rw-r--r-- | src/ChangeLog | 15 | ||||
-rw-r--r-- | src/emacs.c | 2 |
2 files changed, 16 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 44a7606831..7435254b49 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,18 @@ +2011-09-24 Jim Meyering <[email protected]> + + 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 <[email protected]> * emacs.c (Fkill_emacs): In noninteractive mode exit diff --git a/src/emacs.c b/src/emacs.c index 0a684d4423..073156bb0c 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); } |