X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdata-io%2Fdata-list.c;h=754341ccac3a120c8dc840e4d261894db54e9ba1;hb=3b54533821614d17afc61f1cd3b87d3a06fbf4da;hp=834a2f8d7f7a1fe72b9970ba99c470c1b64a443b;hpb=c91f650b47f33cfbd4b7ed45dbfa7eb012c7e6fb;p=pspp diff --git a/src/language/data-io/data-list.c b/src/language/data-io/data-list.c index 834a2f8d7f..754341ccac 100644 --- a/src/language/data-io/data-list.c +++ b/src/language/data-io/data-list.c @@ -122,7 +122,14 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds) lex_match (lexer, T_LPAREN); if (!lex_force_int (lexer)) goto error; - data_parser_set_records (parser, lex_integer (lexer)); + + int records = lex_integer (lexer); + if (records < 0) + { + msg (SE, _("The %s value must be non-negative."), "RECORDS"); + goto error; + } + data_parser_set_records (parser, records); lex_get (lexer); lex_match (lexer, T_RPAREN); } @@ -131,20 +138,25 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds) lex_match (lexer, T_EQUALS); if (!lex_force_int (lexer)) goto error; - data_parser_set_skip (parser, lex_integer (lexer)); + int skip = lex_integer (lexer); + if (skip < 0) + { + msg (SE, _("The %s value must be non-negative."), "SKIP"); + goto error; + } + data_parser_set_skip (parser, skip); lex_get (lexer); } else if (lex_match_id (lexer, "END")) { if (!in_input_program ()) { - msg (SE, _("The END subcommand may only be used within " - "INPUT PROGRAM.")); + msg (SE, _("The %s subcommand may only be used within %s."), "END", "INPUT PROGRAM"); goto error; } if (end) { - msg (SE, _("The END subcommand may only be specified once.")); + msg (SE, _("The %s subcommand may only be specified once."), "END"); goto error; } @@ -230,7 +242,9 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds) data_parser_set_quotes (parser, ss_cstr ("'\"")); data_parser_set_soft_delimiters (parser, ss_cstr (CC_SPACES)); - data_parser_set_hard_delimiters (parser, ss_cstr (",")); + const char decimal = settings_get_decimal_char (FMT_F); + data_parser_set_hard_delimiters (parser, + ss_buffer (",", (decimal == '.') ? 1 : 0)); } } } @@ -252,7 +266,7 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds) if (type != DP_FIXED && end != NULL) { - msg (SE, _("The END subcommand may be used only with DATA LIST FIXED.")); + msg (SE, _("The %s subcommand may be used only with %s."), "END", "DATA LIST FIXED"); goto error; } @@ -292,7 +306,7 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds) add_transformation (ds, data_list_trns_proc, data_list_trns_free, trns); } else - 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); @@ -302,7 +316,7 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds) error: data_parser_destroy (parser); if (!in_input_program ()) - dict_destroy (dict); + dict_unref (dict); fh_unref (fh); free (encoding); return CMD_CASCADING_FAILURE;