1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-07-26 02:30:35 +02:00

(close_stdout_wrapper): New, kludgey, function and file-scoped global.

(main): Register it with atexit.
Close STDOUT_FILENO, to avoid a problem when writing to
/dev/audio on at least Solaris 2.7 and 2.8 systems.
This commit is contained in:
Jim Meyering
2002-08-26 07:23:37 +00:00
parent 6d1c743816
commit 234cd4e3fe
+21 -2
View File
@@ -482,6 +482,17 @@ cat (
}
}
/* This is gross, but necessary, because of the way close_stdout
works and because this program closes STDOUT_FILENO directly. */
static void (*closeout_func) (void) = close_stdout;
static void
close_stdout_wrapper (void)
{
if (closeout_func)
(*closeout_func) ();
}
int
main (int argc, char **argv)
{
@@ -554,7 +565,9 @@ main (int argc, char **argv)
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
atexit (close_stdout);
/* Arrange to close stdout if we exit via the
case_GETOPT_HELP_CHAR or case_GETOPT_VERSION_CHAR code. */
atexit (close_stdout_wrapper);
/* Parse command line options. */
@@ -641,6 +654,9 @@ main (int argc, char **argv)
}
}
/* Don't close stdout on exit from here on. */
closeout_func = NULL;
/* Get device, i-node number, and optimal blocksize of output. */
if (fstat (STDOUT_FILENO, &stat_buf) < 0)
@@ -833,7 +849,10 @@ main (int argc, char **argv)
while (++argind < argc);
if (have_read_stdin && close (STDIN_FILENO) < 0)
error (EXIT_FAILURE, errno, "-");
error (EXIT_FAILURE, errno, _("closing standard input"));
if (close (STDOUT_FILENO) < 0)
error (EXIT_FAILURE, errno, _("closing standard output"));
exit (exit_status == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}