]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
all: avoid duplicated write errors on FreeBSD
authorPádraig Brady <P@draigBrady.com>
Sun, 27 Aug 2023 15:01:27 +0000 (16:01 +0100)
committerPádraig Brady <P@draigBrady.com>
Sun, 27 Aug 2023 16:32:07 +0000 (17:32 +0100)
* 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.

bootstrap.conf
src/head.c
src/system.h

index d758a9ff63c295297f773483f1b10a5b89ca9cc1..f968269def4fa19a689abb9cd278a52641ba7e6e 100644 (file)
@@ -104,6 +104,7 @@ gnulib_modules="
   fnmatch-gnu
   fopen-safer
   fprintftime
+  fpurge
   free-posix
   freopen
   freopen-safer
index 7bba1420c4290d3c82b4daa17d5c54baa9b7372b..da32c886f944108a5f27cd3097660f9bf851f679 100644 (file)
@@ -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"));
     }
index 7b736604b00c76a9c323d7666e7c8d42b17ef331..7ba43bd21309e1c27f260278d6d3962331c3196b 100644 (file)
@@ -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"));
 }