X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fflip.c;h=204982357b043ddb45eddec19502b43c9bbf79f0;hb=bf71a28cc57afd259bb086ac5dfde5b685ba7995;hp=128c1a9742dec543e506ea7626d08628bfbc6a27;hpb=4fdeb2145d081ff1b84e3f6c99f9d1c048c0d64a;p=pspp-builds.git diff --git a/src/flip.c b/src/flip.c index 128c1a97..20498235 100644 --- a/src/flip.c +++ b/src/flip.c @@ -38,6 +38,12 @@ #include "var.h" #include "vfm.h" +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +#include "gettext.h" +#define _(msgid) gettext (msgid) /* List of variable names. */ struct varname @@ -51,7 +57,7 @@ struct flip_pgm { struct variable **var; /* Variables to transpose. */ int *idx_to_fv; /* var[]->index to compacted sink case fv. */ - int var_cnt; /* Number of elements in `var'. */ + size_t var_cnt; /* Number of elements in `var'. */ int case_cnt; /* Pre-flip case count. */ size_t case_size; /* Post-flip bytes per case. */ @@ -118,7 +124,7 @@ cmd_flip (void) if (flip->new_names) { - int i; + size_t i; for (i = 0; i < flip->var_cnt; i++) if (flip->var[i] == flip->new_names) @@ -181,25 +187,27 @@ destroy_flip_pgm (struct flip_pgm *flip) static int make_new_var (char name[]) { + char *cp; + + /* Trim trailing spaces. */ + cp = strchr (name, '\0'); + while (cp > name && isspace ((unsigned char) cp[-1])) + *--cp = '\0'; + /* Fix invalid characters. */ - { - char *cp; - - for (cp = name; *cp && !isspace (*cp); cp++) + for (cp = name; *cp && cp < name + SHORT_NAME_LEN; cp++) + if (cp == name) { - *cp = toupper ((unsigned char) *cp); - if (!isalpha (*cp) && *cp != '@' && *cp != '#' - && (cp == name || (*cp != '.' && *cp != '$' && *cp != '_' - && !isdigit (*cp)))) - { - if (cp == name) - *cp = 'V'; /* _ not valid in first position. */ - else - *cp = '_'; - } + if (!CHAR_IS_ID1 (*cp) || *cp == '$') + *cp = 'V'; } - *cp = 0; - } + else + { + if (!CHAR_IS_IDN (*cp)) + *cp = '_'; + } + *cp = '\0'; + str_uppercase (name); if (dict_create_var (default_dict, name, 0)) return 1; @@ -274,10 +282,10 @@ static struct case_sink * flip_sink_create (struct flip_pgm *flip) { struct flip_sink_info *info = xmalloc (sizeof *info); - int i; + size_t i; info->flip = flip; - info->output_buf = xmalloc (sizeof *info->output_buf * flip->var_cnt); + info->output_buf = xnmalloc (flip->var_cnt, sizeof *info->output_buf); flip->file = tmpfile (); if (!flip->file) @@ -285,7 +293,8 @@ flip_sink_create (struct flip_pgm *flip) /* Write variable names as first case. */ for (i = 0; i < flip->var_cnt; i++) - st_bare_pad_copy (info->output_buf[i].s, flip->var[i]->name, MAX_SHORT_STRING); + buf_copy_str_rpad (info->output_buf[i].s, MAX_SHORT_STRING, + flip->var[i]->name); if (fwrite (info->output_buf, sizeof *info->output_buf, flip->var_cnt, flip->file) != (size_t) flip->var_cnt) msg (FE, _("Error writing FLIP file: %s."), strerror (errno)); @@ -301,13 +310,13 @@ flip_sink_write (struct case_sink *sink, const struct ccase *c) { struct flip_sink_info *info = sink->aux; struct flip_pgm *flip = info->flip; - int i; + size_t i; flip->case_cnt++; if (flip->new_names != NULL) { - struct varname *v = xmalloc (sizeof (struct varname)); + struct varname *v = xmalloc (sizeof *v); v->next = NULL; if (flip->new_names->type == NUMERIC) { @@ -323,8 +332,7 @@ flip_sink_write (struct case_sink *sink, const struct ccase *c) { char name[INT_DIGITS + 2]; sprintf (name, "V%d", (int) f); - strncpy (v->name, name, SHORT_NAME_LEN); - name[SHORT_NAME_LEN] = 0; + str_copy_trunc (v->name, sizeof v->name, name); } } else @@ -371,7 +379,7 @@ flip_file (struct flip_pgm *flip) /* Allocate memory for many cases. */ case_bytes = flip->var_cnt * sizeof *input_buf; - case_capacity = get_max_workspace() / case_bytes; + case_capacity = get_workspace () / case_bytes; if (case_capacity > flip->case_cnt * 2) case_capacity = flip->case_cnt * 2; if (case_capacity < 2) @@ -408,7 +416,7 @@ flip_file (struct flip_pgm *flip) { unsigned long read_cases = min (flip->case_cnt - case_idx, case_capacity); - int i; + size_t i; if (read_cases != fread (input_buf, case_bytes, read_cases, input_file)) msg (FE, _("Error reading FLIP file: %s."), strerror (errno)); @@ -489,9 +497,9 @@ flip_source_read (struct case_source *source, { struct flip_pgm *flip = source->aux; union value *input_buf; - int i; + size_t i; - input_buf = xmalloc (sizeof *input_buf * flip->case_cnt); + input_buf = xnmalloc (flip->case_cnt, sizeof *input_buf); for (i = 0; i < flip->var_cnt; i++) { size_t j;