From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Jim Meyering Newsgroups: gmane.emacs.bugs Subject: bug#9574: data-loss with --batch: ignored write failure Date: Sat, 24 Sep 2011 11:23:26 +0200 Message-ID: <877h4yb8fl.fsf_-_@rho.meyering.net> References: <87mxdwd4l3.fsf@rho.meyering.net> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: dough.gmane.org 1316856221 1445 80.91.229.12 (24 Sep 2011 09:23:41 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sat, 24 Sep 2011 09:23:41 +0000 (UTC) To: 9574@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Sep 24 11:23:38 2011 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1R7OSP-0004jk-Iu for geb-bug-gnu-emacs@m.gmane.org; Sat, 24 Sep 2011 11:23:37 +0200 Original-Received: from localhost ([::1]:42694 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R7OSO-0003Xh-Ip for geb-bug-gnu-emacs@m.gmane.org; Sat, 24 Sep 2011 05:23:36 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]:59059) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R7OSL-0003XQ-22 for bug-gnu-emacs@gnu.org; Sat, 24 Sep 2011 05:23:33 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R7OSJ-0007ju-QM for bug-gnu-emacs@gnu.org; Sat, 24 Sep 2011 05:23:33 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:51255) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R7OSJ-0007jq-NU for bug-gnu-emacs@gnu.org; Sat, 24 Sep 2011 05:23:31 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1R7OSo-0000uv-JH for bug-gnu-emacs@gnu.org; Sat, 24 Sep 2011 05:24:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Jim Meyering Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 24 Sep 2011 09:24:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 9574 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 9574-submit@debbugs.gnu.org id=B9574.13168562413518 (code B ref 9574); Sat, 24 Sep 2011 09:24:02 +0000 Original-Received: (at 9574) by debbugs.gnu.org; 24 Sep 2011 09:24:01 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1R7OSn-0000uh-4Z for submit@debbugs.gnu.org; Sat, 24 Sep 2011 05:24:01 -0400 Original-Received: from mx.meyering.net ([88.168.87.75]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1R7OSk-0000uZ-G1 for 9574@debbugs.gnu.org; Sat, 24 Sep 2011 05:23:59 -0400 Original-Received: from rho.meyering.net (localhost.localdomain [127.0.0.1]) by rho.meyering.net (Acme Bit-Twister) with ESMTP id 70C3B60079 for <9574@debbugs.gnu.org>; Sat, 24 Sep 2011 11:23:26 +0200 (CEST) In-Reply-To: (GNU bug Tracking System's message of "Fri, 23 Sep 2011 10:00:02 +0000") Original-Lines: 47 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Sat, 24 Sep 2011 05:24:02 -0400 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 1) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:51765 Archived-At: > Subject: Re: bug#9574: data-loss with --batch: ignored write failure > > Fixed. Thanks, but even with your fix, emacs --batch would still ignore some write errors. I've just committed a change to fix that part properly. Included below. A clean fix for the entire problem (including --help and --version and anything else that may write to stdout) would be to ensure that no other code path explicitly closes stdout and to add this line in main: atexit (close_stdout); However, that would require gnulib's closeout module and would probably end up being too invasive a change to make during a code freeze. 2011-09-24 Jim Meyering 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) === modified file 'src/emacs.c' --- src/emacs.c 2011-09-23 09:56:55 +0000 +++ src/emacs.c 2011-09-24 08:28:32 +0000 @@ -2019,7 +2019,7 @@ 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); }