X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fsys-file-reader.c;h=8a747b7a57fc32fbd73465e70548aa48c1df9d47;hb=26d835f97534b20825b3121e326c288e994753f8;hp=8718a5f940ba9d96acca418c4b2fbbeb787a9048;hpb=26f3ffbb107db482e1f1f83dbea913462c56ba81;p=pspp diff --git a/src/data/sys-file-reader.c b/src/data/sys-file-reader.c index 8718a5f940..8a747b7a57 100644 --- a/src/data/sys-file-reader.c +++ b/src/data/sys-file-reader.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-2000, 2006-2007, 2009-2015 Free Software Foundation, Inc. + Copyright (C) 1997-2000, 2006-2007, 2009-2016 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -408,7 +408,7 @@ sfm_open (struct file_handle *fh) if (r->lock == NULL) goto error; - r->file = fn_open (fh_get_file_name (fh), "rb"); + r->file = fn_open (fh, "rb"); if (r->file == NULL) { msg (ME, _("Error opening `%s' for reading as a system file: %s."), @@ -537,7 +537,7 @@ read_record (struct sfm_reader *r, int type, /* Returns the character encoding obtained from R, or a null pointer if R doesn't have an indication of its character encoding. */ -const char * +static const char * sfm_get_encoding (const struct sfm_reader *r) { /* The EXT_ENCODING record is the best way to determine dictionary @@ -894,7 +894,7 @@ sfm_close (struct any_reader *r_) if (r->file) { - if (fn_close (fh_get_file_name (r->fh), r->file) == EOF) + if (fn_close (r->fh, r->file) == EOF) { msg (ME, _("Error closing system file `%s': %s."), fh_get_file_name (r->fh), strerror (errno)); @@ -921,9 +921,8 @@ sys_file_casereader_destroy (struct casereader *reader UNUSED, void *r_) sfm_close (&r->any_reader); } -/* Returns 1 if FILE is an SPSS system file, - 0 if it is not, - otherwise a negative errno value. */ +/* Detects whether FILE is an SPSS system file. Returns 1 if so, 0 if not, and + a negative errno value if there is an error reading FILE. */ static int sfm_detect (FILE *file) { @@ -932,7 +931,7 @@ sfm_detect (FILE *file) if (fseek (file, 0, SEEK_SET) != 0) return -errno; if (fread (magic, 4, 1, file) != 1) - return feof (file) ? 0 : -errno; + return ferror (file) ? -errno : 0; magic[4] = '\0'; return (!strcmp (ASCII_MAGIC, magic) @@ -2047,7 +2046,8 @@ parse_long_var_name_map (struct sfm_reader *r, while (read_variable_to_value_pair (r, dict, text, &var, &long_name)) { /* Validate long name. */ - if (!dict_id_is_valid (dict, long_name, false)) + if (!dict_id_is_valid (dict, long_name, false) + || long_name[0] == '$' || long_name[0] == '#') { sys_warn (r, record->pos, _("Long variable mapping from %s to invalid "