terminal UI: Fix circumstances when errors should be logged to stdout.
[pspp] / src / ui / terminal / terminal-opts.c
index 886bcdc2fe86bafcb7b602d0fcef3e0bdbdd4ffc..d1296a36252ac449734bb6bd15875a23febd3e3f 100644 (file)
@@ -38,6 +38,7 @@
 #include "libpspp/version.h"
 #include "output/driver.h"
 #include "output/driver-provider.h"
+#include "output/msglog.h"
 #include "ui/terminal/msg-ui.h"
 #include "ui/terminal/read-line.h"
 
@@ -57,6 +58,7 @@ struct terminal_opts
     struct string_map options;  /* Output driver options. */
     bool has_output_driver;
     bool has_terminal_driver;
+    bool has_error_file;
     bool process_statrc;
   };
 
@@ -121,7 +123,7 @@ parse_output_option (struct terminal_opts *to, const char *option)
   key = xmemdup0 (option, equals - option);
   if (string_map_contains (&to->options, key))
     {
-      error (0, 0, _("%s: output option %s specified more than twice"), key);
+      error (0, 0, _("%s: output option specified more than once"), key);
       free (key);
       return;
     }
@@ -234,7 +236,8 @@ terminal_option_callback (int id, void *to_)
       break;
 
     case OPT_ERROR_FILE:
-      msg_ui_set_error_file (optarg);
+      if (!strcmp (optarg, "none") || msglog_create (optarg))
+        to->has_error_file = true;
       break;
 
     case OPT_OUTPUT:
@@ -279,6 +282,7 @@ terminal_opts_init (struct argv_parser *ap, struct source_stream *ss)
   to->syntax_mode = GETL_BATCH;
   string_map_init (&to->options);
   to->has_output_driver = false;
+  to->has_error_file = false;
   to->process_statrc = true;
 
   argv_parser_add_options (ap, terminal_argv_options, N_TERMINAL_OPTIONS,
@@ -331,6 +335,9 @@ terminal_opts_done (struct terminal_opts *to, int argc, char *argv[])
       register_output_driver (to);
     }
 
+  if (!to->has_terminal_driver && !to->has_error_file)
+    msglog_create ("-");
+
   string_map_destroy (&to->options);
   free (to);
 }