Reference count struct dictionary.
[pspp] / src / language / data-io / get-data.c
index 061fde1c03a0a4628873d58be10041a8c7cce38f..8a58be434c71a6b61de8497bb255458fd3d3daf5 100644 (file)
@@ -59,7 +59,7 @@ cmd_get_data (struct lexer *lexer, struct dataset *ds)
 {
   char *tok = NULL;
   struct spreadsheet_read_options opts;
-  
+
   opts.sheet_name = NULL;
   opts.sheet_index = -1;
   opts.cell_range = NULL;
@@ -79,7 +79,7 @@ cmd_get_data (struct lexer *lexer, struct dataset *ds)
 
   if (s)
     tok = strdup (s);
-  
+
   if (lex_match_id (lexer, "TXT"))
     {
       free (tok);
@@ -90,7 +90,7 @@ cmd_get_data (struct lexer *lexer, struct dataset *ds)
       free (tok);
       return parse_get_psql (lexer, ds);
     }
-  else if (lex_match_id (lexer, "GNM") || 
+  else if (lex_match_id (lexer, "GNM") ||
       lex_match_id (lexer, "ODS"))
     {
       char *filename = NULL;
@@ -218,7 +218,7 @@ parse_get_psql (struct lexer *lexer, struct dataset *ds)
 }
 
 static bool
-parse_spreadsheet (struct lexer *lexer, char **filename, 
+parse_spreadsheet (struct lexer *lexer, char **filename,
                   struct spreadsheet_read_options *opts)
 {
   opts->sheet_index = 1;
@@ -599,7 +599,13 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds)
           lex_get (lexer);
         }
 
-      name = xstrdup (lex_tokcstr (lexer));
+      const char * tstr = lex_tokcstr (lexer);
+      if (tstr == NULL)
+       {
+         lex_error (lexer, NULL);
+         goto error;
+       }
+      name = xstrdup (tstr);
       if (!lex_force_id (lexer)
           || !dict_id_is_valid (dict, name, true))
        {
@@ -673,14 +679,14 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds)
   if (reader == NULL)
     goto error;
 
-  data_parser_make_active_file (parser, ds, reader, dict);
+  data_parser_make_active_file (parser, ds, reader, dict, NULL, NULL);
   fh_unref (fh);
   free (encoding);
   return CMD_SUCCESS;
 
  error:
   data_parser_destroy (parser);
-  dict_destroy (dict);
+  dict_unref (dict);
   fh_unref (fh);
   free (name);
   free (encoding);
@@ -688,7 +694,7 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds)
 }
 
 
-static void 
+static void
 destroy_spreadsheet_read_info (struct spreadsheet_read_options *opts)
 {
   free (opts->cell_range);