X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fods-reader.c;h=fa364090c4564b583d5f4b3bee982ea63772a24b;hb=41a628f070c7a0d2e9468308cb1bf4ff77de9900;hp=5883395d0d7e4b7042bac7dbb32485ee51059552;hpb=c81025c3b79323fcec83fa848b682c551158c3f0;p=pspp diff --git a/src/data/ods-reader.c b/src/data/ods-reader.c index 5883395d0d..fa364090c4 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) { @@ -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);