X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fgnumeric-reader.c;h=0783e10f7c1b33452222b82238d95d51ae582004;hb=df2866a475d36298a14cc1e97c6118e088ac85da;hp=07c1814f8e4c2c7b349332b3abf021477824464e;hpb=bc5b04777c2489da4d84847934d1c2c963930d1a;p=pspp diff --git a/src/data/gnumeric-reader.c b/src/data/gnumeric-reader.c index 07c1814f8e..0783e10f7c 100644 --- a/src/data/gnumeric-reader.c +++ b/src/data/gnumeric-reader.c @@ -28,7 +28,7 @@ #include "spreadsheet-reader.h" -#if !GNM_SUPPORT +#if !GNM_READ_SUPPORT struct casereader * gnumeric_open_reader (const struct spreadsheet_read_options *opts, struct dictionary **dict) @@ -149,7 +149,6 @@ state_data_destroy (struct state_data *sd) struct gnumeric_reader { struct spreadsheet spreadsheet; - int ref_cnt; struct state_data rsd; struct state_data msd; @@ -174,11 +173,11 @@ struct gnumeric_reader void -gnumeric_destroy (struct spreadsheet *s) +gnumeric_unref (struct spreadsheet *s) { struct gnumeric_reader *r = (struct gnumeric_reader *) s; - if (0 == --r->ref_cnt) + if (0 == --s->ref_cnt) { int i; @@ -190,6 +189,8 @@ gnumeric_destroy (struct spreadsheet *s) free (r->sheets); state_data_destroy (&r->msd); + free (s->file_name); + free (r); } } @@ -250,7 +251,7 @@ gnm_file_casereader_destroy (struct casereader *reader UNUSED, void *r_) if (r->proto) caseproto_unref (r->proto); - gnumeric_destroy (&r->spreadsheet); + gnumeric_unref (&r->spreadsheet); } @@ -556,7 +557,7 @@ gnumeric_reopen (struct gnumeric_reader *r, const char *filename, bool show_erro { r = xzalloc (sizeof *r); r->spreadsheet.n_sheets = -1; - r->spreadsheet.file_name = filename; + r->spreadsheet.file_name = strdup (filename); sd = &r->msd; } else @@ -573,7 +574,8 @@ gnumeric_reopen (struct gnumeric_reader *r, const char *filename, bool show_erro sd->row = sd->col = -1; sd->state = STATE_PRE_INIT; sd->xtr = xtr; - r->ref_cnt++; + r->spreadsheet.ref_cnt++; + /* Advance to the start of the workbook. This gives us some confidence that we are actually dealing with a gnumeric @@ -589,8 +591,7 @@ gnumeric_reopen (struct gnumeric_reader *r, const char *filename, bool show_erro if ( ret != 1) { /* Does not seem to be a gnumeric file */ - xmlFreeTextReader (sd->xtr); - free (r); + gnumeric_unref (&r->spreadsheet); return NULL; } @@ -953,4 +954,4 @@ gnm_file_casereader_read (struct casereader *reader UNUSED, void *r_) } -#endif /* GNM_SUPPORT */ +#endif /* GNM_READ_SUPPORT */