projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
psppire-data-sheet: Implement primary selection.
[pspp]
/
src
/
data
/
gnumeric-reader.c
diff --git
a/src/data/gnumeric-reader.c
b/src/data/gnumeric-reader.c
index 7dbc63a9d681fbea37e205ab761917d9904765de..1b7a646a83ebe5d3bbf2ec89cf10e471e346824c 100644
(file)
--- 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;
struct gnumeric_reader
{
struct spreadsheet spreadsheet;
+ int ref_cnt;
/* The libxml reader for this instance */
xmlTextReaderPtr xtr;
/* The libxml reader for this instance */
xmlTextReaderPtr xtr;
@@
-137,17
+138,21
@@
struct gnumeric_reader
void
gnumeric_destroy (struct spreadsheet *s)
{
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);
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->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
/* 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 (r->row != -1)
r = gnumeric_reopen (r, NULL, true);
+
+
if ( opts->cell_range )
{
if ( ! convert_cell_ref (opts->cell_range,
if ( opts->cell_range )
{
if ( ! convert_cell_ref (opts->cell_range,