From: Pádraig Brady
Date: Sun, 27 Aug 2023 15:01:27 +0000 (+0100) Subject: all: avoid duplicated write errors on FreeBSD X-Git-Tag: v9.4~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5e44ad4e6d9e792a53655383f07565e252656e43;p=thirdparty%2Fcoreutils.git all: avoid duplicated write errors on FreeBSD * src/system.h (write_error): Also call fpurge(), which was seen to be needed on FreeBSD 13.1 to avoid duplicated write errors. * src/head.c (xwrite_stdout): Likewise. * bootstrap.conf: Depend on fpurge. Reported by Bruno Haible. --- diff --git a/bootstrap.conf b/bootstrap.conf index d758a9ff63..f968269def 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -104,6 +104,7 @@ gnulib_modules=" fnmatch-gnu fopen-safer fprintftime + fpurge free-posix freopen freopen-safer diff --git a/src/head.c b/src/head.c index 7bba1420c4..da32c886f9 100644 --- a/src/head.c +++ b/src/head.c @@ -181,6 +181,7 @@ xwrite_stdout (char const *buffer, size_t n_bytes) if (n_bytes > 0 && fwrite (buffer, 1, n_bytes, stdout) < n_bytes) { clearerr (stdout); /* To avoid redundant close_stdout diagnostic. */ + fpurge (stdout); error (EXIT_FAILURE, errno, _("error writing %s"), quoteaf ("standard output")); } diff --git a/src/system.h b/src/system.h index 7b736604b0..7ba43bd213 100644 --- a/src/system.h +++ b/src/system.h @@ -769,8 +769,9 @@ static inline void write_error (void) { int saved_errno = errno; - fflush (stdout); /* Ensure nothing buffered that might induce an error. */ - clearerr (stdout); /* To avoid extraneous diagnostic from close_stdout. */ + fflush (stdout); /* Last attempt to write any buffered data. */ + fpurge (stdout); /* Ensure nothing buffered that might induce an error. */ + clearerr (stdout); /* Avoid extraneous diagnostic from close_stdout. */ error (EXIT_FAILURE, saved_errno, _("write error")); }