]> granicus.if.org Git - procps-ng/commitdiff
library: for atexit() support, fix fileutils for EPIPE
authorJim Warner <james.warner@comcast.net>
Tue, 25 Jun 2013 05:00:00 +0000 (00:00 -0500)
committerJaromir Capik <jcapik@redhat.com>
Wed, 26 Jun 2013 15:58:56 +0000 (17:58 +0200)
When fileutils with stream error checking was borrowed
from GNU lib, an omission was also propagated where an
errno of EPIPE wouldn't be preserved in close_stream()
making a test for EPIPE in close_stdout() meaningless.

This patch corrects such oversight so that an errno of
EPIPE no longer produces 'write error' at program end.

( gnulib provides for optionally ignoring EPIPE, but )
( if a program chooses to ignore it, then their code )
( appears to suffer from this close_stream oversight )

Reference(s):
. original fileutilis addition
commit c7cf98b0e03780f78abe5275c6fb282f71a2369f
. bugzilla report
https://bugzilla.redhat.com/show_bug.cgi?id=976199

lib/fileutils.c

index a9ef2ff5fa7b909fbd1293363d54a122b78462ca..1ade3d80fda552b6de877abbe47053a4e8e10ef1 100644 (file)
@@ -24,7 +24,7 @@ int close_stream(FILE * stream)
        const int prev_fail = (ferror(stream) != 0);
        const int fclose_fail = (fclose(stream) != 0);
        if (prev_fail || (fclose_fail && (some_pending || errno != EBADF))) {
-               if (!fclose_fail)
+               if (!fclose_fail && errno != EPIPE)
                        errno = 0;
                return EOF;
        }