X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fsys-file-reader.c;h=9ec176f09f494f9562548918db80b61b31fa36f1;hb=7235f7f42b61c2b111174c3ee5ca72aac8815cd5;hp=ee0bfb13ea4e214a599b3d111dd0e51bffd7897f;hpb=b9a5b6889648f6888b8796a54f03a6f7e60cd728;p=pspp diff --git a/src/data/sys-file-reader.c b/src/data/sys-file-reader.c index ee0bfb13ea..9ec176f09f 100644 --- a/src/data/sys-file-reader.c +++ b/src/data/sys-file-reader.c @@ -500,7 +500,7 @@ sfm_open_reader (struct file_handle *fh, struct dictionary **dictp, if (claimed_oct_cnt != -1 && claimed_oct_cnt != n_vars && info->version_major != 13) sys_warn (r, -1, _("File header claims %d variable positions but " - "%d were read from file."), + "%zu were read from file."), claimed_oct_cnt, n_vars); /* Create an index of dictionary variable widths for @@ -779,7 +779,7 @@ read_value_label_record (struct sfm_reader *r, record->n_vars = read_int (r); if (record->n_vars < 1 || record->n_vars > n_vars) sys_error (r, r->pos - 4, - _("Number of variables associated with a value label (%d) " + _("Number of variables associated with a value label (%zu) " "is not between 1 and the number of variables (%zu)."), record->n_vars, n_vars); record->vars = pool_nmalloc (r->pool, record->n_vars, sizeof *record->vars); @@ -1052,16 +1052,15 @@ parse_format_spec (struct sfm_reader *r, off_t pos, unsigned int format, uint8_t w = format >> 8; uint8_t d = format; struct fmt_spec f; - bool ok; - if (!fmt_from_io (raw_type, &f.type)) - sys_error (r, pos, _("Unknown variable format %"PRIu8"."), raw_type); f.w = w; f.d = d; msg_disable (); - ok = fmt_check_output (&f) && fmt_check_width_compat (&f, var_get_width (v)); + ok = (fmt_from_io (raw_type, &f.type) + && fmt_check_output (&f) + && fmt_check_width_compat (&f, var_get_width (v))); msg_enable (); if (ok) @@ -1071,14 +1070,20 @@ parse_format_spec (struct sfm_reader *r, off_t pos, unsigned int format, else var_set_write_format (v, &f); } + else if (format == 0) + { + /* Actually observed in the wild. No point in warning about it. */ + } else if (++*n_warnings <= max_warnings) { - char fmt_string[FMT_STRING_LEN_MAX + 1]; - sys_warn (r, pos, _("%s variable %s has invalid %s format %s."), - var_is_numeric (v) ? _("Numeric") : _("String"), - var_get_name (v), - which == PRINT_FORMAT ? _("print") : _("write"), - fmt_to_string (&f, fmt_string)); + if (which == PRINT_FORMAT) + sys_warn (r, pos, _("Variable %s with width %d has invalid print " + "format 0x%x."), + var_get_name (v), var_get_width (v), format); + else + sys_warn (r, pos, _("Variable %s with width %d has invalid write " + "format 0x%x."), + var_get_name (v), var_get_width (v), format); if (*n_warnings == max_warnings) sys_warn (r, -1, _("Suppressing further invalid format warnings.")); @@ -1167,6 +1172,7 @@ choose_encoding (struct sfm_reader *r, if (ext_integer) { int codepage = parse_int (r, ext_integer->data, 7 * 4); + const char *encoding; switch (codepage) { @@ -1184,14 +1190,11 @@ choose_encoding (struct sfm_reader *r, case 4: return "MS_KANJI"; - case 65000: - return "UTF-7"; - - case 65001: - return "UTF-8"; - default: - return pool_asprintf (r->pool, "CP%d", codepage); + encoding = sys_get_encoding_from_codepage (codepage); + if (encoding != NULL) + return encoding; + break; } } @@ -1729,7 +1732,7 @@ lookup_var_by_index (struct sfm_reader *r, off_t offset, if (idx < 1 || idx > n_var_recs) { sys_error (r, offset, - _("Variable index %d not in valid range 1...%d."), + _("Variable index %d not in valid range 1...%zu."), idx, n_var_recs); return NULL; }