struct gnumeric_reader
{
struct spreadsheet spreadsheet;
- int ref_cnt;
struct state_data rsd;
struct state_data msd;
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;
free (r->sheets);
state_data_destroy (&r->msd);
+ free (s->file_name);
+
free (r);
}
}
if (r->proto)
caseproto_unref (r->proto);
- gnumeric_destroy (&r->spreadsheet);
+ gnumeric_unref (&r->spreadsheet);
}
{
r = xzalloc (sizeof *r);
r->spreadsheet.n_sheets = -1;
- r->spreadsheet.file_name = filename;
+ r->spreadsheet.file_name = strdup (filename);
sd = &r->msd;
}
else
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
if ( ret != 1)
{
/* Does not seem to be a gnumeric file */
- xmlFreeTextReader (sd->xtr);
- free (r);
+ gnumeric_unref (&r->spreadsheet);
return NULL;
}