[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pspp-cvs] Changes to pspp/src/sfm-read.c
From: |
John Darrington |
Subject: |
[Pspp-cvs] Changes to pspp/src/sfm-read.c |
Date: |
Mon, 23 May 2005 00:07:23 -0400 |
Index: pspp/src/sfm-read.c
diff -u pspp/src/sfm-read.c:1.21 pspp/src/sfm-read.c:1.22
--- pspp/src/sfm-read.c:1.21 Sat May 21 05:14:32 2005
+++ pspp/src/sfm-read.c Mon May 23 04:07:23 2005
@@ -59,7 +59,6 @@
/* Variables. */
struct sfm_var *vars; /* Variables. */
- size_t var_cnt; /* Number of variables. */
/* File's special constants. */
flt64 sysmis;
@@ -221,7 +220,6 @@
r->weight_idx = -1;
r->vars = NULL;
- r->var_cnt = 0;
r->sysmis = -FLT64_MAX;
r->highest = FLT64_MAX;
@@ -244,6 +242,7 @@
if (!read_header (r, *dict, info) || !read_variables (r, *dict, &var_by_idx))
goto error;
+
/* Handle weighting. */
if (r->weight_idx != -1)
{
@@ -740,7 +739,6 @@
int long_string_count = 0; /* # of long string continuation
records still expected. */
int next_value = 0; /* Index to next `value' structure. */
- size_t var_cap = 0;
assert(r);
@@ -748,7 +746,10 @@
/* Pre-allocate variables. */
if ( r->value_cnt != -1 )
- *var_by_idx = xmalloc(r->value_cnt * sizeof (**var_by_idx));
+ {
+ *var_by_idx = xmalloc(r->value_cnt * sizeof (**var_by_idx));
+ r->vars = xmalloc( r->value_cnt * sizeof (*r->vars) );
+ }
/* Read in the entry for each variable and use the info to
@@ -756,7 +757,7 @@
for (i = 0; ; ++i)
{
struct variable *vv;
- char name[9];
+ char name[SHORT_NAME_LEN + 1];
int nv;
int j;
@@ -779,11 +780,15 @@
if (sv.rec_type != 2)
{
buf_unread(r, sizeof sv);
+ r->value_cnt = i;
break;
}
if ( -1 == r->value_cnt )
- *var_by_idx = xrealloc (*var_by_idx, sizeof **var_by_idx * (i+1) );
+ {
+ *var_by_idx = xrealloc (*var_by_idx, sizeof **var_by_idx * (i + 1));
+ r->vars = xrealloc(r->vars, (i + 1) * sizeof (*r->vars) );
+ }
/* If there was a long string previously, make sure that the
continuations are present; otherwise make sure there aren't
@@ -795,6 +800,8 @@
"proper number of continuation records."),
handle_get_filename (r->fh), i));
+
+ r->vars[i].width = -1;
(*var_by_idx)[i] = NULL;
long_string_count--;
continue;
@@ -962,15 +969,9 @@
|| !parse_format_spec (r, sv.write, &vv->write, vv))
goto error;
- /* Add variable to list. */
- if (var_cap >= r->var_cnt)
- {
- var_cap = 2 + r->var_cnt * 2;
- r->vars = xrealloc (r->vars, var_cap * sizeof *r->vars);
- }
- r->vars[r->var_cnt].width = vv->width;
- r->vars[r->var_cnt].fv = vv->fv;
- r->var_cnt++;
+ r->vars[i].width = vv->width;
+ r->vars[i].fv = vv->fv;
+
}
/* Some consistency checks. */
@@ -984,6 +985,7 @@
"%d were read from file."),
handle_get_filename (r->fh), r->value_cnt, next_value);
+
return 1;
error:
@@ -1328,7 +1330,7 @@
for (;;)
{
- for (; p < p_end; p++)
+ for (; p < p_end; p++){
switch (*p)
{
case 0:
@@ -1382,7 +1384,7 @@
goto success;
break;
}
-
+ }
/* We have reached the end of this instruction octet. Read
another. */
if (r->ptr == NULL || r->ptr >= r->end)
@@ -1433,7 +1435,7 @@
{
int i;
- for (i = 0; i < r->var_cnt; i++)
+ for (i = 0; i < r->value_cnt; i++)
if (r->vars[i].width == 0)
bswap_flt64 (&case_data_rw (c, r->vars[i].fv)->f);
}
@@ -1445,7 +1447,7 @@
{
int i;
- for (i = 0; i < r->var_cnt; i++)
+ for (i = 0; i < r->value_cnt; i++)
if (r->vars[i].width == 0 && case_num (c, i) == r->sysmis)
case_data_rw (c, r->vars[i].fv)->f = SYSMIS;
}
@@ -1473,7 +1475,7 @@
return 0;
}
- for (i = 0; i < r->var_cnt; i++)
+ for (i = 0; i < r->value_cnt; i++)
{
struct sfm_var *v = &r->vars[i];
@@ -1482,9 +1484,9 @@
flt64 f = *bounce_cur++;
if (r->reverse_endian)
bswap_flt64 (&f);
- case_data_rw (c, i)->f = f == r->sysmis ? SYSMIS : f;
+ case_data_rw (c, v->fv)->f = f == r->sysmis ? SYSMIS : f;
}
- else
+ else if (v->width != -1)
{
memcpy (case_data_rw (c, v->fv)->s, bounce_cur, v->width);
bounce_cur += DIV_RND_UP (v->width, sizeof (flt64));