/* 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;
}
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);
}
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);
*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);
}
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
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))
{
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. */
};
}
/* 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;
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;
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;
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))
{