X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fsys-file-reader.c;h=35f40d3dbc4755f3365b8549fd2966f121f1f259;hb=a0454ef2df24d238bdfd68553462c82daf6776ae;hp=2b6fa98ad775ef83117194a3bdb49e6f8cfd1052;hpb=4e0b5360aebcaff9e9659ed7243ca5ace2ea219a;p=pspp diff --git a/src/data/sys-file-reader.c b/src/data/sys-file-reader.c index 2b6fa98ad7..35f40d3dbc 100644 --- a/src/data/sys-file-reader.c +++ b/src/data/sys-file-reader.c @@ -50,6 +50,7 @@ #include "libpspp/str.h" #include "libpspp/stringi-set.h" +#include "gl/c-strtod.h" #include "gl/c-ctype.h" #include "gl/inttostr.h" #include "gl/localcharset.h" @@ -547,7 +548,10 @@ sfm_open_reader (struct file_handle *fh, const char *volatile encoding, *dictp = dict; if (infop != info) - sfm_read_info_destroy (info); + { + sfm_read_info_destroy (info); + free (info); + } return casereader_create_sequential (NULL, r->proto, @@ -555,7 +559,12 @@ sfm_open_reader (struct file_handle *fh, const char *volatile encoding, &sys_file_casereader_class, r); error: - sfm_read_info_destroy (info); + if (infop != info) + { + sfm_read_info_destroy (info); + free (info); + } + close_reader (r); dict_destroy (dict); *dictp = NULL; @@ -1429,7 +1438,7 @@ parse_mrsets (struct sfm_reader *r, const struct sfm_extension_record *record, mrset->width = width; value_init (&mrset->counted, width); if (width == 0) - mrset->counted.f = strtod (counted, NULL); + mrset->counted.f = c_strtod (counted, NULL); else value_copy_str_rpad (&mrset->counted, width, (const uint8_t *) counted, ' '); @@ -1564,7 +1573,8 @@ parse_long_var_name_map (struct sfm_reader *r, if (record == NULL) { - /* Convert variable names to lowercase. */ + /* There are no long variable names. Use the short variable names, + converted to lowercase, as the long variable names. */ size_t i; for (i = 0; i < dict_get_var_cnt (dict); i++) @@ -1572,11 +1582,8 @@ parse_long_var_name_map (struct sfm_reader *r, struct variable *var = dict_get_var (dict, i); char *new_name; - new_name = xstrdup (var_get_name (var)); - str_lowercase (new_name); - + new_name = utf8_to_lower (var_get_name (var)); rename_var_and_save_short_names (dict, var, new_name); - free (new_name); } @@ -1601,7 +1608,7 @@ parse_long_var_name_map (struct sfm_reader *r, } /* Identify any duplicates. */ - if (strcasecmp (var_get_short_name (var, 0), long_name) + if (utf8_strcasecmp (var_get_short_name (var, 0), long_name) && dict_lookup_var (dict, long_name) != NULL) { sys_warn (r, record->pos,