[util] Don't close stdin/stdout
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 30 Oct 2018 07:38:01 +0000 (00:38 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Tue, 30 Oct 2018 07:52:22 +0000 (00:52 -0700)
util/options.cc
util/options.hh

index 5661cd0..4815770 100644 (file)
@@ -758,7 +758,10 @@ text_options_t::get_line (unsigned int *len)
       fail (true, "At least one of text or text-file must be set");
 
     if (0 != strcmp (text_file, "-"))
+    {
       fp = fopen (text_file, "r");
+      close_fp = true;
+    }
     else
       fp = stdin;
 
@@ -795,7 +798,10 @@ output_options_t::get_file_handle (void)
     return fp;
 
   if (output_file)
+  {
     fp = fopen (output_file, "wb");
+    close_fp = true;
+  }
   else {
 #if defined(_WIN32) || defined(__CYGWIN__)
     setmode (fileno (stdout), O_BINARY);
index dd62859..6f35ea3 100644 (file)
@@ -510,6 +510,7 @@ struct text_options_t : option_group_t
     text_file = nullptr;
 
     fp = nullptr;
+    close_fp = false;
     gs = nullptr;
     line = nullptr;
     line_len = (unsigned int) -1;
@@ -524,7 +525,7 @@ struct text_options_t : option_group_t
     g_free (text_file);
     if (gs)
       g_string_free (gs, true);
-    if (fp)
+    if (close_fp)
       fclose (fp);
   }
 
@@ -547,6 +548,7 @@ struct text_options_t : option_group_t
 
   private:
   FILE *fp;
+  bool close_fp;
   GString *gs;
   char *line;
   unsigned int line_len;
@@ -563,6 +565,7 @@ struct output_options_t : option_group_t
     explicit_output_format = false;
 
     fp = nullptr;
+    close_fp = false;
 
     add_options (parser);
   }
@@ -570,7 +573,7 @@ struct output_options_t : option_group_t
   {
     g_free (output_file);
     g_free (output_format);
-    if (fp)
+    if (close_fp)
       fclose (fp);
   }
 
@@ -602,6 +605,7 @@ struct output_options_t : option_group_t
   bool explicit_output_format;
 
   mutable FILE *fp;
+  bool close_fp;
 };
 
 struct format_options_t : option_group_t