From ce5e995921e770bfcda25e42fe090aeccdbf1291 Mon Sep 17 00:00:00 2001 From: Jim Warner Date: Tue, 25 Jun 2013 00:00:00 -0500 Subject: [PATCH] library: for atexit() support, fix fileutils for EPIPE 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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fileutils.c b/lib/fileutils.c index a9ef2ff5..1ade3d80 100644 --- a/lib/fileutils.c +++ b/lib/fileutils.c @@ -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; }