X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Flanguage%2Fstats%2Fflip.c;h=e39e85fd5fe490aa5da7f9797c58d1c67552c93e;hb=6b6718a372daeaa66d69e126f9ee4a9bf46bf059;hp=68152b1b190b4c90d8754205279f45e623ab75c3;hpb=eb06da6a334bc37108cdce9bfc7f26cfcb2003ee;p=pspp diff --git a/src/language/stats/flip.c b/src/language/stats/flip.c index 68152b1b19..e39e85fd5f 100644 --- a/src/language/stats/flip.c +++ b/src/language/stats/flip.c @@ -144,6 +144,8 @@ cmd_flip (struct lexer *lexer, struct dataset *ds) break; } } + if (flip->n_vars <= 0) + goto error; flip->file = pool_create_temp_file (flip->pool); if (flip->file == NULL) @@ -229,7 +231,7 @@ cmd_flip (struct lexer *lexer, struct dataset *ds) return CMD_SUCCESS; error: - dict_destroy (new_dict); + dict_unref (new_dict); destroy_flip_pgm (flip); return CMD_CASCADING_FAILURE; } @@ -269,9 +271,15 @@ make_new_var (struct dictionary *dict, const char *name_) } *cp = '\0'; + if (strlen (name) == 0) + { + free (name); + name = xstrdup ("v"); + } + /* Use the mangled name, if it is available, or add numeric extensions until we find one that is. */ - if (!dict_create_var (dict, name, 0)) + if (!id_is_plausible (name, false) || !dict_create_var (dict, name, 0)) { int len = strlen (name); int i; @@ -282,7 +290,7 @@ make_new_var (struct dictionary *dict, const char *name_) strncpy (n, name, ofs); sprintf (&n[ofs], "%d", i); - if (dict_create_var (dict, n, 0)) + if (id_is_plausible (n, false) && dict_create_var (dict, n, 0)) break; } } @@ -341,7 +349,7 @@ flip_file (struct flip_pgm *flip) return false; } - for (case_idx = 0; case_idx < flip->n_cases; ) + for (case_idx = 0; case_idx < flip->n_cases;) { unsigned long read_cases = MIN (flip->n_cases - case_idx, case_capacity); @@ -443,7 +451,7 @@ flip_casereader_read (struct casereader *reader, void *flip_) Returns true if successful read, false if an I/O occurred during destruction or previously. */ static void -flip_casereader_destroy (struct casereader *reader UNUSED, void *flip_) +flip_casereader_destroy (struct casereader *reader, void *flip_) { struct flip_pgm *flip = flip_; if (flip->error)