From f6ab92093a0e199da1fa0085829a2427709ed79d Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Fri, 12 Aug 2005 08:06:28 +0000 Subject: Add bulletproofing in case stdin is closed. (have_read_stdin): Remove global variable. (dc_parse_stream): Always use stdin (freopen, if needed) rather than sometimes using fopen to get a new file descriptor. Call fclose unconditionally. (main): Don't close stdin here. If needed, now it's already done by dc_parse_stream. --- src/dircolors.c | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/src/dircolors.c b/src/dircolors.c index 3598c79d6..02d82bf89 100644 --- a/src/dircolors.c +++ b/src/dircolors.c @@ -61,9 +61,6 @@ enum Shell_syntax variable. */ static struct obstack lsc_obstack; -/* True if the input file was the standard input. */ -static bool have_read_stdin; - /* FIXME: associate with ls_codes? */ static const char *const slack_codes[] = { @@ -373,28 +370,17 @@ dc_parse_stream (FILE *fp, const char *filename) static bool dc_parse_file (const char *filename) { - FILE *fp; bool ok; - bool is_stdin = STREQ (filename, "-"); - if (is_stdin) + if (! STREQ (filename, "-") && freopen (filename, "r", stdin) == NULL) { - have_read_stdin = true; - fp = stdin; - } - else - { - fp = fopen (filename, "r"); - if (fp == NULL) - { - error (0, errno, "%s", quote (filename)); - return false; - } + error (0, errno, "%s", filename); + return false; } - ok = dc_parse_stream (fp, filename); + ok = dc_parse_stream (stdin, filename); - if (!is_stdin && fclose (fp) != 0) + if (fclose (stdin) != 0) { error (0, errno, "%s", quote (filename)); return false; @@ -516,9 +502,5 @@ to select a shell syntax are mutually exclusive")); } } - - if (have_read_stdin && fclose (stdin) == EOF) - error (EXIT_FAILURE, errno, _("standard input")); - exit (ok ? EXIT_SUCCESS : EXIT_FAILURE); } -- cgit v1.2.3-70-g09d2