X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdata-io%2Fget-data.c;h=a37e3f0326119808e49075542f89afbe6241ba9e;hb=510cc9dd9baf3108ba55cfb7893384517c9930b4;hp=a0608f6dd3724ae172b6298b9cefda89f8316956;hpb=cc0b5800fcdde6126c4fc65b656f39c1459bf17c;p=pspp diff --git a/src/language/data-io/get-data.c b/src/language/data-io/get-data.c index a0608f6dd3..a37e3f0326 100644 --- a/src/language/data-io/get-data.c +++ b/src/language/data-io/get-data.c @@ -98,9 +98,9 @@ cmd_get_data (struct lexer *lexer, struct dataset *ds) goto error; struct spreadsheet *spreadsheet = NULL; - if ( 0 == strncasecmp (tok, "GNM", 3)) + if (0 == strncasecmp (tok, "GNM", 3)) spreadsheet = gnumeric_probe (filename, true); - else if ( 0 == strncasecmp (tok, "ODS", 3)) + else if (0 == strncasecmp (tok, "ODS", 3)) spreadsheet = ods_probe (filename, true); if (spreadsheet == NULL) @@ -159,34 +159,34 @@ parse_get_psql (struct lexer *lexer, struct dataset *ds) lex_get (lexer); - while (lex_match (lexer, T_SLASH) ) + while (lex_match (lexer, T_SLASH)) { - if ( lex_match_id (lexer, "ASSUMEDSTRWIDTH")) + if (lex_match_id (lexer, "ASSUMEDSTRWIDTH")) { lex_match (lexer, T_EQUALS); - if (lex_force_int (lexer)) + if (lex_force_int_range (lexer, "ASSUMEDSTRWIDTH", 1, 32767)) { psql.str_width = lex_integer (lexer); lex_get (lexer); } } - else if ( lex_match_id (lexer, "BSIZE")) + else if (lex_match_id (lexer, "BSIZE")) { lex_match (lexer, T_EQUALS); - if (lex_force_int (lexer)) + if (lex_force_int_range (lexer, "BSIZE", 1, INT_MAX)) { psql.bsize = lex_integer (lexer); lex_get (lexer); } } - else if ( lex_match_id (lexer, "UNENCRYPTED")) + else if (lex_match_id (lexer, "UNENCRYPTED")) { psql.allow_clear = true; } else if (lex_match_id (lexer, "SQL")) { lex_match (lexer, T_EQUALS); - if ( ! lex_force_string (lexer) ) + if (! lex_force_string (lexer)) goto error; ds_put_substring (&psql.sql, lex_tokss (lexer)); @@ -197,7 +197,7 @@ parse_get_psql (struct lexer *lexer, struct dataset *ds) struct dictionary *dict = NULL; struct casereader *reader = psql_open_reader (&psql, &dict); - if ( reader ) + if (reader) { dataset_set_dict (ds, dict); dataset_set_source (ds, reader); @@ -243,12 +243,12 @@ parse_spreadsheet (struct lexer *lexer, char **filename, lex_get (lexer); - while (lex_match (lexer, T_SLASH) ) + while (lex_match (lexer, T_SLASH)) { - if ( lex_match_id (lexer, "ASSUMEDSTRWIDTH")) + if (lex_match_id (lexer, "ASSUMEDSTRWIDTH")) { lex_match (lexer, T_EQUALS); - if (lex_force_int (lexer)) + if (lex_force_int_range (lexer, "ASSUMEDSTRWIDTH", 1, 32767)) { opts->asw = lex_integer (lexer); lex_get (lexer); @@ -259,7 +259,7 @@ parse_spreadsheet (struct lexer *lexer, char **filename, lex_match (lexer, T_EQUALS); if (lex_match_id (lexer, "NAME")) { - if ( ! lex_force_string (lexer) ) + if (! lex_force_string (lexer)) goto error; opts->sheet_name = ss_xstrdup (lex_tokss (lexer)); @@ -269,15 +269,9 @@ parse_spreadsheet (struct lexer *lexer, char **filename, } else if (lex_match_id (lexer, "INDEX")) { - if (!lex_force_int (lexer)) + if (!lex_force_int_range (lexer, "INDEX", 1, INT_MAX)) goto error; - opts->sheet_index = lex_integer (lexer); - if (opts->sheet_index <= 0) - { - msg (SE, _("The sheet index must be greater than or equal to 1")); - goto error; - } lex_get (lexer); } else @@ -297,7 +291,7 @@ parse_spreadsheet (struct lexer *lexer, char **filename, } else if (lex_match_id (lexer, "RANGE")) { - if ( ! lex_force_string (lexer) ) + if (! lex_force_string (lexer)) goto error; opts->cell_range = ss_xstrdup (lex_tokss (lexer)); @@ -314,7 +308,7 @@ parse_spreadsheet (struct lexer *lexer, char **filename, { lex_match (lexer, T_EQUALS); - if ( lex_match_id (lexer, "ON")) + if (lex_match_id (lexer, "ON")) { opts->read_names = true; } @@ -425,7 +419,7 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds) DP_DELIMITED, &has_type); else { - lex_error_expecting (lexer, "FIXED", "DELIMITED", NULL_SENTINEL); + lex_error_expecting (lexer, "FIXED", "DELIMITED"); goto error; } if (!ok) @@ -434,13 +428,8 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds) else if (lex_match_id (lexer, "FIRSTCASE")) { lex_match (lexer, T_EQUALS); - if (!lex_force_int (lexer)) + if (!lex_force_int_range (lexer, "FIRSTCASE", 1, INT_MAX)) goto error; - if (lex_integer (lexer) < 1) - { - msg (SE, _("Value of %s must be 1 or greater."), "FIRSTCASE"); - goto error; - } data_parser_set_skip (parser, lex_integer (lexer) - 1); lex_get (lexer); } @@ -463,7 +452,7 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds) } else { - lex_error_expecting (lexer, "LINE", "VARIABLES", NULL_SENTINEL); + lex_error_expecting (lexer, "LINE", "VARIABLES"); goto error; } } @@ -472,13 +461,8 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds) if (!set_type (parser, "FIXCASE", DP_FIXED, &has_type)) goto error; lex_match (lexer, T_EQUALS); - if (!lex_force_int (lexer)) + if (!lex_force_int_range (lexer, "FIXCASE", 1, INT_MAX)) goto error; - if (lex_integer (lexer) < 1) - { - msg (SE, _("Value of %s must be 1 or greater."), "FIXCASE"); - goto error; - } data_parser_set_records (parser, lex_integer (lexer)); lex_get (lexer); } @@ -560,7 +544,7 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds) break; else { - lex_error_expecting (lexer, "VARIABLES", NULL_SENTINEL); + lex_error_expecting (lexer, "VARIABLES"); goto error; } } @@ -576,30 +560,20 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds) while (type == DP_FIXED && lex_match (lexer, T_SLASH)) { - if (!lex_force_int (lexer)) + if (!lex_force_int_range (lexer, NULL, record, + data_parser_get_records (parser))) goto error; - if (lex_integer (lexer) < record) - { - msg (SE, _("The record number specified, %ld, is at or " - "before the previous record, %d. Data " - "fields must be listed in order of " - "increasing record number."), - lex_integer (lexer), record); - goto error; - } - if (lex_integer (lexer) > data_parser_get_records (parser)) - { - msg (SE, _("The record number specified, %ld, exceeds " - "the number of records per case specified " - "on FIXCASE, %d."), - lex_integer (lexer), data_parser_get_records (parser)); - goto error; - } record = lex_integer (lexer); 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)) { @@ -613,13 +587,15 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds) { goto error; } - output = fmt_for_output_from_input (&input); + output = fmt_for_output_from_input (&input, + settings_get_fmt_settings ()); } else { char fmt_type_name[FMT_TYPE_LEN_MAX + 1]; enum fmt_type fmt_type; - int w, d; + uint16_t w; + uint8_t d; if (!parse_column_range (lexer, 0, &fc, &lc, NULL)) goto error; @@ -648,7 +624,8 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds) goto error; } else - output = fmt_for_output_from_input (&input); + output = fmt_for_output_from_input (&input, + settings_get_fmt_settings ()); } v = dict_create_var (dict, name, fmt_var_width (&input)); if (v == NULL) @@ -680,7 +657,7 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds) error: data_parser_destroy (parser); - dict_destroy (dict); + dict_unref (dict); fh_unref (fh); free (name); free (encoding);