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