projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
spreadsheet: Avoid sharing a dictionary between spreadsheet and client.
[pspp]
/
src
/
language
/
data-io
/
get-data.c
diff --git
a/src/language/data-io/get-data.c
b/src/language/data-io/get-data.c
index 2bf419659d18e52ae99a91455c05dcd8a5b698df..995be8e7ce896212cd9775af4789c1aa1441360a 100644
(file)
--- a/
src/language/data-io/get-data.c
+++ b/
src/language/data-io/get-data.c
@@
-110,41
+110,30
@@
cmd_get_data (struct lexer *lexer, struct dataset *ds)
lex_match_id (lexer, "ODS"))
{
char *filename = NULL;
lex_match_id (lexer, "ODS"))
{
char *filename = NULL;
- struct casereader *reader = NULL;
- struct dictionary *dict = NULL;
-
if (!parse_spreadsheet (lexer, &filename, &opts))
goto error;
if (!parse_spreadsheet (lexer, &filename, &opts))
goto error;
+ struct spreadsheet *spreadsheet = NULL;
if ( gnm_read_support && 0 == strncasecmp (tok, "GNM", 3))
if ( gnm_read_support && 0 == strncasecmp (tok, "GNM", 3))
- {
- struct spreadsheet *spreadsheet = gnumeric_probe (filename, true);
- if (spreadsheet == NULL)
- goto error;
- reader = gnumeric_make_reader (spreadsheet, &opts);
- dict = spreadsheet->dict;
- gnumeric_unref (spreadsheet);
- }
+ spreadsheet = gnumeric_probe (filename, true);
else if ( odf_read_support && 0 == strncasecmp (tok, "ODS", 3))
else if ( odf_read_support && 0 == strncasecmp (tok, "ODS", 3))
- {
- struct spreadsheet *spreadsheet = ods_probe (filename, true);
- if (spreadsheet == NULL)
- goto error;
- reader = ods_make_reader (spreadsheet, &opts);
- dict = spreadsheet->dict;
- ods_unref (spreadsheet);
- }
+ spreadsheet = ods_probe (filename, true);
free (filename);
free (filename);
+ if (spreadsheet == NULL)
+ goto error;
+ struct casereader *reader = spreadsheet_make_reader (spreadsheet, &opts);
if (reader)
{
if (reader)
{
- dataset_set_dict (ds, dict);
+ dataset_set_dict (ds, dict
_clone (spreadsheet->dict)
);
dataset_set_source (ds, reader);
free (tok);
destroy_spreadsheet_read_info (&opts);
dataset_set_source (ds, reader);
free (tok);
destroy_spreadsheet_read_info (&opts);
+ spreadsheet_unref (spreadsheet);
return CMD_SUCCESS;
}
return CMD_SUCCESS;
}
+ spreadsheet_unref (spreadsheet);
}
else
msg (SE, _("Unsupported TYPE %s."), tok);
}
else
msg (SE, _("Unsupported TYPE %s."), tok);