X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Flanguage%2Fdata-io%2Fget.c;h=651d222af9745684a337c7c29d7bc242660f6753;hb=e9aa6e433b846849da90550f6800095d569fb549;hp=5dfe29b3c28b7f75107f82d3689897259a3f1697;hpb=505d1c592469ea99da7723c2770f13f5dc965046;p=pspp diff --git a/src/language/data-io/get.c b/src/language/data-io/get.c index 5dfe29b3c2..651d222af9 100644 --- a/src/language/data-io/get.c +++ b/src/language/data-io/get.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -38,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -779,7 +781,7 @@ struct mtf_proc char first[LONG_NAME_LEN + 1], last[LONG_NAME_LEN + 1]; struct dictionary *dict; /* Dictionary of output file. */ - struct case_sink *sink; /* Sink to receive output. */ + struct casefile *output; /* MATCH FILES output. */ struct ccase mtf_case; /* Case used for output. */ unsigned seq_num; /* Have we initialized this variable? */ @@ -819,7 +821,7 @@ cmd_match_files (void) mtf.first[0] = '\0'; mtf.last[0] = '\0'; mtf.dict = dict_create (); - mtf.sink = NULL; + mtf.output = NULL; case_nullify (&mtf.mtf_case); mtf.seq_num = 0; mtf.seq_nums = NULL; @@ -1121,10 +1123,7 @@ cmd_match_files (void) discard_variables (); dict_compact_values (mtf.dict); - mtf.sink = create_case_sink (&storage_sink_class, mtf.dict, NULL); - if (mtf.sink->class->open != NULL) - mtf.sink->class->open (mtf.sink); - + mtf.output = casefile_create (dict_get_next_value_idx (mtf.dict)); mtf.seq_nums = xcalloc (dict_get_var_cnt (mtf.dict), sizeof *mtf.seq_nums); case_create (&mtf.mtf_case, dict_get_next_value_idx (mtf.dict)); @@ -1141,10 +1140,11 @@ cmd_match_files (void) discard_variables (); + dict_destroy (default_dict); default_dict = mtf.dict; mtf.dict = NULL; - proc_set_source (mtf.sink->class->make_source (mtf.sink)); - free_case_sink (mtf.sink); + proc_set_source (storage_source_create (mtf.output)); + mtf.output = NULL; if (!mtf_free (&mtf)) ok = false; @@ -1467,7 +1467,7 @@ mtf_processing (const struct ccase *c, void *mtf_) } /* 5. Write the output record. */ - mtf->sink->class->write (mtf->sink, &mtf->mtf_case); + casefile_append (mtf->output, &mtf->mtf_case); /* 6. Read another record from each input file FILE and TABLE that we stored values from above. If we come to the end of @@ -1542,8 +1542,11 @@ mtf_merge_dictionary (struct dictionary *const m, struct mtf_file *f) if (dv->width == mv->width) { if (val_labs_count (dv->val_labs) - && !val_labs_count (mv->val_labs)) - mv->val_labs = val_labs_copy (dv->val_labs); + && !val_labs_count (mv->val_labs)) + { + val_labs_destroy (mv->val_labs); + mv->val_labs = val_labs_copy (dv->val_labs); + } if (!mv_is_empty (&dv->miss) && mv_is_empty (&mv->miss)) mv_copy (&mv->miss, &dv->miss); }