X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fsfm-read.c;h=109c9a1a5a2ca171fa6dfb7a29db1c8581b000c6;hb=b9799cdd10b30ea96d9178b7a0d48504d052228c;hp=0c07150eac3097b2c15bc3f9c98c922d4bee6443;hpb=4de79b34b329d1da6cdeb145993d3efd911e2967;p=pspp-builds.git diff --git a/src/sfm-read.c b/src/sfm-read.c index 0c07150e..109c9a1a 100644 --- a/src/sfm-read.c +++ b/src/sfm-read.c @@ -89,9 +89,9 @@ struct sfm_var /* Swap bytes *A and *B. */ static inline void -bswap (unsigned char *a, unsigned char *b) +bswap (char *a, char *b) { - unsigned char t = *a; + char t = *a; *a = *b; *b = t; } @@ -100,7 +100,7 @@ bswap (unsigned char *a, unsigned char *b) static inline void bswap_int32 (int32 *x_) { - unsigned char *x = (unsigned char *) x_; + char *x = (char *) x_; bswap (x + 0, x + 3); bswap (x + 1, x + 2); } @@ -109,7 +109,7 @@ bswap_int32 (int32 *x_) static inline void bswap_flt64 (flt64 *x_) { - unsigned char *x = (unsigned char *) x_; + char *x = (char *) x_; bswap (x + 0, x + 7); bswap (x + 1, x + 6); bswap (x + 2, x + 5); @@ -758,10 +758,10 @@ read_variables (struct sfm_reader *r, *var_by_idx = 0; /* Pre-allocate variables. */ - if ( r->value_cnt != -1 ) + if (r->value_cnt != -1) { - *var_by_idx = xmalloc(r->value_cnt * sizeof (**var_by_idx)); - r->vars = xmalloc( r->value_cnt * sizeof (*r->vars) ); + *var_by_idx = xnmalloc (r->value_cnt, sizeof **var_by_idx); + r->vars = xnmalloc (r->value_cnt, sizeof *r->vars); } @@ -799,8 +799,8 @@ read_variables (struct sfm_reader *r, if ( -1 == r->value_cnt ) { - *var_by_idx = xrealloc (*var_by_idx, sizeof **var_by_idx * (i + 1)); - r->vars = xrealloc(r->vars, (i + 1) * sizeof (*r->vars) ); + *var_by_idx = xnrealloc (*var_by_idx, i + 1, sizeof **var_by_idx); + r->vars = xnrealloc (r->vars, i + 1, sizeof *r->vars); } /* If there was a long string previously, make sure that the @@ -926,63 +926,45 @@ read_variables (struct sfm_reader *r, if (sv.n_missing_values != 0) { flt64 mv[3]; + int mv_cnt = abs (sv.n_missing_values); if (vv->width > MAX_SHORT_STRING) lose ((ME, _("%s: Long string variable %s may not have missing " "values."), handle_get_filename (r->fh), vv->name)); - assertive_buf_read (r, mv, sizeof *mv * abs (sv.n_missing_values), 0); + assertive_buf_read (r, mv, sizeof *mv * mv_cnt, 0); if (r->reverse_endian && vv->type == NUMERIC) - for (j = 0; j < abs (sv.n_missing_values); j++) + for (j = 0; j < mv_cnt; j++) bswap_flt64 (&mv[j]); if (sv.n_missing_values > 0) { - vv->miss_type = sv.n_missing_values; - if (vv->type == NUMERIC) - for (j = 0; j < sv.n_missing_values; j++) - vv->missing[j].f = mv[j]; - else - for (j = 0; j < sv.n_missing_values; j++) - memcpy (vv->missing[j].s, &mv[j], vv->width); + for (j = 0; j < sv.n_missing_values; j++) + if (vv->type == NUMERIC) + mv_add_num (&vv->miss, mv[j]); + else + mv_add_str (&vv->miss, (char *) &mv[j]); } else { - int x = 0; - if (vv->type == ALPHA) lose ((ME, _("%s: String variable %s may not have missing " "values specified as a range."), handle_get_filename (r->fh), vv->name)); if (mv[0] == r->lowest) - { - vv->miss_type = MISSING_LOW; - vv->missing[x++].f = mv[1]; - } + mv_add_num_range (&vv->miss, LOWEST, mv[1]); else if (mv[1] == r->highest) - { - vv->miss_type = MISSING_HIGH; - vv->missing[x++].f = mv[0]; - } + mv_add_num_range (&vv->miss, mv[0], HIGHEST); else - { - vv->miss_type = MISSING_RANGE; - vv->missing[x++].f = mv[0]; - vv->missing[x++].f = mv[1]; - } + mv_add_num_range (&vv->miss, mv[0], mv[1]); if (sv.n_missing_values == -3) - { - vv->miss_type += 3; - vv->missing[x++].f = mv[2]; - } + mv_add_num (&vv->miss, mv[2]); } } - else - vv->miss_type = MISSING_NONE; if (!parse_format_spec (r, sv.print, &vv->print, vv) || !parse_format_spec (r, sv.write, &vv->write, vv)) @@ -1054,7 +1036,7 @@ read_value_labels (struct sfm_reader *r, { struct label { - unsigned char raw_value[8]; /* Value as uninterpreted bytes. */ + char raw_value[8]; /* Value as uninterpreted bytes. */ union value value; /* Value. */ char *label; /* Null-terminated label string. */ }; @@ -1084,7 +1066,7 @@ read_value_labels (struct sfm_reader *r, } /* Allocate memory. */ - labels = xcalloc (n_labels , sizeof *labels); + labels = xcalloc (n_labels, sizeof *labels); for (i = 0; i < n_labels; i++) labels[i].label = NULL; @@ -1136,7 +1118,7 @@ read_value_labels (struct sfm_reader *r, handle_get_filename (r->fh), n_vars, dict_get_var_cnt (dict))); /* Read the list of variables. */ - var = xmalloc (n_vars * sizeof *var); + var = xnmalloc (n_vars, sizeof *var); for (i = 0; i < n_vars; i++) { int32 var_idx; @@ -1184,8 +1166,8 @@ read_value_labels (struct sfm_reader *r, if (var[0]->type == ALPHA) { - const int copy_len = min (sizeof (label->raw_value), - sizeof (label->label)); + const int copy_len = min (sizeof label->raw_value, + sizeof label->label); memcpy (label->value.s, label->raw_value, copy_len); } else { flt64 f; @@ -1324,7 +1306,7 @@ buffer_input (struct sfm_reader *r) size_t amt; if (r->buf == NULL) - r->buf = xmalloc (sizeof *r->buf * 128); + r->buf = xnmalloc (128, sizeof *r->buf); amt = fread (r->buf, sizeof *r->buf, 128, r->file); if (ferror (r->file)) {