projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Gnumeric Reader: Fix memory leak
[pspp]
/
src
/
data
/
gnumeric-reader.c
diff --git
a/src/data/gnumeric-reader.c
b/src/data/gnumeric-reader.c
index 07c1814f8e4c2c7b349332b3abf021477824464e..0783e10f7c1b33452222b82238d95d51ae582004 100644
(file)
--- a/
src/data/gnumeric-reader.c
+++ b/
src/data/gnumeric-reader.c
@@
-28,7
+28,7
@@
#include "spreadsheet-reader.h"
#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)
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;
struct gnumeric_reader
{
struct spreadsheet spreadsheet;
- int ref_cnt;
struct state_data rsd;
struct state_data msd;
struct state_data rsd;
struct state_data msd;
@@
-174,11
+173,11
@@
struct gnumeric_reader
void
void
-gnumeric_
destroy
(struct spreadsheet *s)
+gnumeric_
unref
(struct spreadsheet *s)
{
struct gnumeric_reader *r = (struct gnumeric_reader *) s;
{
struct gnumeric_reader *r = (struct gnumeric_reader *) s;
- if (0 == --
r
->ref_cnt)
+ if (0 == --
s
->ref_cnt)
{
int i;
{
int i;
@@
-190,6
+189,8
@@
gnumeric_destroy (struct spreadsheet *s)
free (r->sheets);
state_data_destroy (&r->msd);
free (r->sheets);
state_data_destroy (&r->msd);
+ free (s->file_name);
+
free (r);
}
}
free (r);
}
}
@@
-250,7
+251,7
@@
gnm_file_casereader_destroy (struct casereader *reader UNUSED, void *r_)
if (r->proto)
caseproto_unref (r->proto);
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 = xzalloc (sizeof *r);
r->spreadsheet.n_sheets = -1;
- r->spreadsheet.file_name =
filename
;
+ r->spreadsheet.file_name =
strdup (filename)
;
sd = &r->msd;
}
else
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;
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
/* 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 */
if ( ret != 1)
{
/* Does not seem to be a gnumeric file */
- xmlFreeTextReader (sd->xtr);
- free (r);
+ gnumeric_unref (&r->spreadsheet);
return NULL;
}
return NULL;
}
@@
-953,4
+954,4
@@
gnm_file_casereader_read (struct casereader *reader UNUSED, void *r_)
}
}
-#endif /* GNM_SUPPORT */
+#endif /* GNM_
READ_
SUPPORT */