Some basic tests.
[pspp] / src / language / data-io / save-translate.c
index e68b4133bb6419f466c3aadc9745e86868b52453..a565f4471c3aeef45f34db40c44641b34a620ec9 100644 (file)
@@ -33,7 +33,6 @@
 #include "language/lexer/lexer.h"
 #include "libpspp/message.h"
 
-#include "xalloc.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
@@ -50,8 +49,6 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
   struct casewriter *writer;
   struct file_handle *handle;
 
-  struct csv_writer_options csv_opts;
-
   bool replace;
 
   bool retain_unselected;
@@ -80,7 +77,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
   include_var_names = false;
   use_value_labels = false;
   use_print_formats = false;
-  decimal = settings_get_decimal_char (FMT_F);
+  decimal = settings_get_fmt_settings ()->decimal;
   delimiter = 0;
   qualifier = '"';
 
@@ -121,7 +118,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
             type = TAB_FILE;
           else
             {
-              lex_error_expecting (lexer, "CSV", "TAB", NULL_SENTINEL);
+              lex_error_expecting (lexer, "CSV", "TAB");
               goto error;
             }
         }
@@ -138,7 +135,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
             recode_user_missing = true;
           else
             {
-              lex_error_expecting (lexer, "IGNORE", "RECODE", NULL_SENTINEL);
+              lex_error_expecting (lexer, "IGNORE", "RECODE");
               goto error;
             }
         }
@@ -151,7 +148,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
             use_value_labels = true;
           else
             {
-              lex_error_expecting (lexer, "VALUES", "LABELS", NULL_SENTINEL);
+              lex_error_expecting (lexer, "VALUES", "LABELS");
               goto error;
             }
         }
@@ -199,8 +196,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
                     decimal = ',';
                   else
                     {
-                      lex_error_expecting (lexer, "DOT", "COMMA",
-                                           NULL_SENTINEL);
+                      lex_error_expecting (lexer, "DOT", "COMMA");
                       goto error;
                     }
                 }
@@ -213,8 +209,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
                     use_print_formats = true;
                   else
                     {
-                      lex_error_expecting (lexer, "PLAIN", "VARIABLE",
-                                           NULL_SENTINEL);
+                      lex_error_expecting (lexer, "PLAIN", "VARIABLE");
                       goto error;
                     }
                 }
@@ -231,11 +226,11 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
             retain_unselected = false;
           else
             {
-              lex_error_expecting (lexer, "RETAIN", "DELETE", NULL_SENTINEL);
+              lex_error_expecting (lexer, "RETAIN", "DELETE");
               goto error;
             }
         }
-      else if (!parse_dict_trim (lexer, dict))
+      else if (!parse_dict_trim (lexer, dict, true))
         goto error;
     }
 
@@ -259,17 +254,18 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
   dict_delete_scratch_vars (dict);
   dict_compact_values (dict);
 
-  csv_opts.recode_user_missing = recode_user_missing;
-  csv_opts.include_var_names = include_var_names;
-  csv_opts.use_value_labels = use_value_labels;
-  csv_opts.use_print_formats = use_print_formats;
-  csv_opts.decimal = decimal;
-  csv_opts.delimiter = (delimiter ? delimiter
-                        : type == TAB_FILE ? '\t'
-                        : decimal == '.' ? ','
-                        : ';');
-  csv_opts.qualifier = qualifier;
-
+  struct csv_writer_options csv_opts = {
+    .recode_user_missing = recode_user_missing,
+    .include_var_names = include_var_names,
+    .use_value_labels = use_value_labels,
+    .use_print_formats = use_print_formats,
+    .decimal = decimal,
+    .delimiter = (delimiter ? delimiter
+                  : type == TAB_FILE ? '\t'
+                  : decimal == '.' ? ','
+                  : ';'),
+    .qualifier = qualifier,
+  };
   writer = csv_writer_open (handle, dict, &csv_opts);
   if (writer == NULL)
     goto error;
@@ -279,7 +275,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
   case_map_stage_destroy (stage);
   if (map != NULL)
     writer = case_map_create_output_translator (map, writer);
-  dict_destroy (dict);
+  dict_unref (dict);
 
   casereader_transfer (proc_open_filtering (ds, !retain_unselected), writer);
   ok = casewriter_destroy (writer);
@@ -290,7 +286,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
 error:
   case_map_stage_destroy (stage);
   fh_unref (handle);
-  dict_destroy (dict);
+  dict_unref (dict);
   case_map_destroy (map);
   return CMD_FAILURE;
 }