]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
Add bulletproofing in case stdin is closed.
authorJim Meyering <jim@meyering.net>
Fri, 12 Aug 2005 08:06:28 +0000 (08:06 +0000)
committerJim Meyering <jim@meyering.net>
Fri, 12 Aug 2005 08:06:28 +0000 (08:06 +0000)
(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

index 3598c79d65d5f801becfecd538f97e323a6a5c27..02d82bf8994da279f2e606f442c366e4297b443a 100644 (file)
@@ -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);
 }