From 6131fb6283cff87333db14b9b32e92be6139c3d6 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 30 Oct 2018 00:38:01 -0700 Subject: [PATCH] [util] Don't close stdin/stdout --- util/options.cc | 6 ++++++ util/options.hh | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/util/options.cc b/util/options.cc index 5661cd059..4815770f5 100644 --- a/util/options.cc +++ b/util/options.cc @@ -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); diff --git a/util/options.hh b/util/options.hh index dd628590e..6f35ea3f4 100644 --- a/util/options.hh +++ b/util/options.hh @@ -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