X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fgnumeric-reader.c;h=1b7a646a83ebe5d3bbf2ec89cf10e471e346824c;hb=8870ca57b746c93b91fb740927fcda45643499d2;hp=7dbc63a9d681fbea37e205ab761917d9904765de;hpb=45e451f87ff06ec753ed9e860f2b1dd953ce5eed;p=pspp diff --git a/src/data/gnumeric-reader.c b/src/data/gnumeric-reader.c index 7dbc63a9d6..1b7a646a83 100644 --- a/src/data/gnumeric-reader.c +++ b/src/data/gnumeric-reader.c @@ -104,6 +104,7 @@ struct sheet_detail struct gnumeric_reader { struct spreadsheet spreadsheet; + int ref_cnt; /* The libxml reader for this instance */ xmlTextReaderPtr xtr; @@ -137,17 +138,21 @@ struct gnumeric_reader void gnumeric_destroy (struct spreadsheet *s) { - struct gnumeric_reader *r = s; - int i; + struct gnumeric_reader *r = (struct gnumeric_reader *) s; - for (i = 0; i < s->n_sheets; ++i) + if (0 == --r->ref_cnt) { - xmlFree (r->sheets[i].name); - } + int i; + + for (i = 0; i < s->n_sheets; ++i) + { + xmlFree (r->sheets[i].name); + } - free (r->sheets); + free (r->sheets); - free (r); + free (r); + } } @@ -206,7 +211,7 @@ gnm_file_casereader_destroy (struct casereader *reader UNUSED, void *r_) caseproto_unref (r->proto); - gnumeric_destroy (r); + gnumeric_destroy (&r->spreadsheet); } @@ -496,6 +501,7 @@ gnumeric_reopen (struct gnumeric_reader *r, const char *filename, bool show_erro r->row = r->col = -1; r->state = STATE_PRE_INIT; r->xtr = xtr; + r->ref_cnt++; /* Advance to the start of the workbook. This gives us some confidence that we are actually dealing with a gnumeric @@ -565,6 +571,8 @@ gnumeric_make_reader (struct spreadsheet *spreadsheet, if (r->row != -1) r = gnumeric_reopen (r, NULL, true); + + if ( opts->cell_range ) { if ( ! convert_cell_ref (opts->cell_range,