X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdata-io%2Fdata-list.c;h=d07eae5c554f7cb19b665175e2a45f9146e08102;hb=9a331fe64eb814ae5c1322e21717a04fb254bf65;hp=ecb87d4a61a779a98af86cc63ae8b896a1bf5ec1;hpb=9b94efd7513afdb12a6023024e00e50801532fee;p=pspp-builds.git diff --git a/src/language/data-io/data-list.c b/src/language/data-io/data-list.c index ecb87d4a..d07eae5c 100644 --- a/src/language/data-io/data-list.c +++ b/src/language/data-io/data-list.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2006, 2007, 2009 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -282,7 +282,8 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds) error: data_parser_destroy (parser); - dict_destroy (dict); + if (!in_input_program ()) + dict_destroy (dict); fh_unref (fh); return CMD_CASCADING_FAILURE; } @@ -404,7 +405,7 @@ parse_free (struct lexer *lexer, struct dictionary *dict, if (!parse_DATA_LIST_vars_pool (lexer, tmp_pool, &name, &name_cnt, PV_NONE)) - return 0; + return false; if (lex_match (lexer, '(')) { @@ -435,7 +436,7 @@ parse_free (struct lexer *lexer, struct dictionary *dict, if (v == NULL) { msg (SE, _("%s is a duplicate variable name."), name[i]); - return 0; + return false; } var_set_both_formats (v, &output); @@ -462,14 +463,15 @@ data_list_trns_free (void *trns_) return true; } -/* Handle DATA LIST transformation TRNS, parsing data into C. */ +/* Handle DATA LIST transformation TRNS, parsing data into *C. */ static int -data_list_trns_proc (void *trns_, struct ccase *c, casenumber case_num UNUSED) +data_list_trns_proc (void *trns_, struct ccase **c, casenumber case_num UNUSED) { struct data_list_trns *trns = trns_; int retval; - if (data_parser_parse (trns->parser, trns->reader, c)) + *c = case_unshare (*c); + if (data_parser_parse (trns->parser, trns->reader, *c)) retval = TRNS_CONTINUE; else if (dfm_reader_error (trns->reader) || dfm_eof (trns->reader) > 1) { @@ -483,7 +485,7 @@ data_list_trns_proc (void *trns_, struct ccase *c, casenumber case_num UNUSED) /* If there was an END subcommand handle it. */ if (trns->end != NULL) { - double *end = &case_data_rw (c, trns->end)->f; + double *end = &case_data_rw (*c, trns->end)->f; if (retval == TRNS_END_FILE) { *end = 1.0;