X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fsys-file-reader.c;h=705fb015639a00ac74efab8ccb39d3119148624c;hb=8cc788667db16517f96ba15979da3e3b9638dd3b;hp=1882943003572ef8b9b28a1d2c73a7a94bd7a776;hpb=317ba3232cb1361259bba6aa8444b141068dd0d3;p=pspp-builds.git diff --git a/src/data/sys-file-reader.c b/src/data/sys-file-reader.c index 18829430..705fb015 100644 --- a/src/data/sys-file-reader.c +++ b/src/data/sys-file-reader.c @@ -88,7 +88,7 @@ struct sfm_reader size_t opcode_idx; /* Next opcode to interpret, 8 if none left. */ }; -static struct casereader_class sys_file_casereader_class; +static const struct casereader_class sys_file_casereader_class; static bool close_reader (struct sfm_reader *); @@ -549,11 +549,14 @@ read_variable_record (struct sfm_reader *r, struct dictionary *dict, for (i = 0; i < missing_value_code; i++) mv_add_num (&mv, read_float (r)); } - else if (var_get_width (var) <= MAX_SHORT_STRING) + else { if (missing_value_code < 1 || missing_value_code > 3) sys_error (r, _("String missing value indicator field is not " "0, 1, 2, or 3.")); + if (var_is_long_string (var)) + sys_warn (r, _("Ignoring missing values on long string variable " + "%s, which PSPP does not yet support."), name); for (i = 0; i < missing_value_code; i++) { char string[9]; @@ -561,10 +564,8 @@ read_variable_record (struct sfm_reader *r, struct dictionary *dict, mv_add_str (&mv, string); } } - else - sys_error (r, _("Long string variable %s may not have missing " - "values."), name); - var_set_missing_values (var, &mv); + if (!var_is_long_string (var)) + var_set_missing_values (var, &mv); } /* Set formats. */ @@ -752,6 +753,18 @@ read_extension_record (struct sfm_reader *r, struct dictionary *dict, SPSS 14. */ break; + case 20: + /* New in SPSS 16. Contains a single string that describes + the character encoding, e.g. "windows-1252". */ + break; + + case 21: + /* New in SPSS 16. Encodes value labels for long string + variables. */ + sys_warn (r, _("Ignoring value labels for long string variables, " + "which PSPP does not yet support.")); + break; + default: sys_warn (r, _("Unrecognized record type 7, subtype %d."), subtype); break; @@ -811,7 +824,7 @@ read_machine_integer_info (struct sfm_reader *r, size_t size, size_t count, NOT_REACHED (); if (integer_representation != expected_integer_format) { - static const char *endian[] = {N_("little-endian"), N_("big-endian")}; + static const char *const endian[] = {N_("little-endian"), N_("big-endian")}; sys_warn (r, _("Integer format indicated by system file (%s) " "differs from expected (%s)."), gettext (endian[integer_representation == 1]), @@ -1716,7 +1729,7 @@ skip_bytes (struct sfm_reader *r, size_t bytes) } } -static struct casereader_class sys_file_casereader_class = +static const struct casereader_class sys_file_casereader_class = { sys_file_casereader_read, sys_file_casereader_destroy,