X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fods-reader.c;h=39e82e5caea953dbe35e491e70098513a7e2494b;hb=19cf39ef8802208ca67fc3e1cf12ce4b239aaabf;hp=5883395d0d7e4b7042bac7dbb32485ee51059552;hpb=c81025c3b79323fcec83fa848b682c551158c3f0;p=pspp diff --git a/src/data/ods-reader.c b/src/data/ods-reader.c index 5883395d0d..39e82e5cae 100644 --- a/src/data/ods-reader.c +++ b/src/data/ods-reader.c @@ -117,7 +117,10 @@ static void state_data_destroy (struct state_data *sd) { xmlFree (sd->current_sheet_name); + sd->current_sheet_name = NULL; + xmlFreeTextReader (sd->xtr); + sd->xtr = NULL; } struct ods_reader @@ -260,12 +263,16 @@ ods_file_casereader_destroy (struct casereader *reader UNUSED, void *r_) ds_destroy (&r->ods_errs); - if ( ! r->used_first_case ) + if ( r->first_case && ! r->used_first_case ) case_unref (r->first_case); + caseproto_unref (r->proto); + r->proto = NULL; xmlFree (r->target_sheet_name); + r->target_sheet_name = NULL; + ods_destroy (&r->spreadsheet); } @@ -669,6 +676,8 @@ ods_make_reader (struct spreadsheet *spreadsheet, r->rsd.current_sheet = 0; r->rsd.state = STATE_INIT; + r->used_first_case = false; + r->first_case = NULL; if (opts->cell_range) { @@ -711,7 +720,7 @@ ods_make_reader (struct spreadsheet *spreadsheet, if ( opts->read_names) { - while (1 == (ret = xmlTextReaderRead (r->rsd.xtr))) + while (1 == xmlTextReaderRead (r->rsd.xtr)) { int idx; @@ -835,9 +844,6 @@ ods_make_reader (struct spreadsheet *spreadsheet, var_set_both_formats (var, &fmt); } - /* Create the first case, and cache it */ - r->used_first_case = false; - if ( n_var_specs == 0 ) { msg (MW, _("Selected sheet or range of spreadsheet `%s' is empty."), @@ -845,6 +851,7 @@ ods_make_reader (struct spreadsheet *spreadsheet, goto error; } + /* Create the first case, and cache it */ r->proto = caseproto_ref (dict_get_proto (r->dict)); r->first_case = case_create (r->proto); case_set_missing (r->first_case); @@ -911,6 +918,9 @@ ods_file_casereader_read (struct casereader *reader UNUSED, void *r_) struct ccase *c = NULL; struct ods_reader *r = r_; + xmlChar *val_string = NULL; + xmlChar *type = NULL; + if (!r->used_first_case) { r->used_first_case = true; @@ -938,9 +948,6 @@ ods_file_casereader_read (struct casereader *reader UNUSED, void *r_) c = case_create (r->proto); case_set_missing (c); - xmlChar *val_string = NULL; - xmlChar *type = NULL; - while (1 == xmlTextReaderRead (r->rsd.xtr)) { process_node (r, &r->rsd);