#define _(msgid) gettext (msgid)
#define N_(msgid) (msgid)
-
-#ifdef ODF_READ_SUPPORT
-static const bool odf_read_support = true;
-#else
-static const bool odf_read_support = false;
-struct spreadsheet *ods_probe (const char *filename, bool report_errors){}
-struct casereader * ods_make_reader (struct spreadsheet *spreadsheet,
- const struct spreadsheet_read_options *opts){}
-void ods_unref (struct spreadsheet *r){}
-#endif
-
-#ifdef GNM_READ_SUPPORT
-static const bool gnm_read_support = true;
-#else
-static const bool gnm_read_support = false;
-struct spreadsheet *gnumeric_probe (const char *filename, bool report_errors){}
-struct casereader * gnumeric_make_reader (struct spreadsheet *spreadsheet,
- const struct spreadsheet_read_options *opts){}
-void gnumeric_unref (struct spreadsheet *r){}
-
-#endif
-
static bool parse_spreadsheet (struct lexer *lexer, char **filename,
struct spreadsheet_read_options *opts);
{
char *tok = NULL;
struct spreadsheet_read_options opts;
-
+
opts.sheet_name = NULL;
opts.sheet_index = -1;
opts.cell_range = NULL;
if (s)
tok = strdup (s);
-
+
if (lex_match_id (lexer, "TXT"))
{
free (tok);
free (tok);
return parse_get_psql (lexer, ds);
}
- else if (lex_match_id (lexer, "GNM") ||
+ else if (lex_match_id (lexer, "GNM") ||
lex_match_id (lexer, "ODS"))
{
char *filename = NULL;
goto error;
struct spreadsheet *spreadsheet = NULL;
- if ( gnm_read_support && 0 == strncasecmp (tok, "GNM", 3))
+ if ( 0 == strncasecmp (tok, "GNM", 3))
spreadsheet = gnumeric_probe (filename, true);
- else if ( odf_read_support && 0 == strncasecmp (tok, "ODS", 3))
+ else if ( 0 == strncasecmp (tok, "ODS", 3))
spreadsheet = ods_probe (filename, true);
- free (filename);
if (spreadsheet == NULL)
- goto error;
+ {
+ msg (SE, _("error reading file `%s'"), filename);
+ free (filename);
+ goto error;
+ }
+ free (filename);
struct casereader *reader = spreadsheet_make_reader (spreadsheet, &opts);
if (reader)
}
static bool
-parse_spreadsheet (struct lexer *lexer, char **filename,
+parse_spreadsheet (struct lexer *lexer, char **filename,
struct spreadsheet_read_options *opts)
{
opts->sheet_index = 1;
lex_get (lexer);
}
- name = xstrdup (lex_tokcstr (lexer));
+ const char * tstr = lex_tokcstr (lexer);
+ if (tstr == NULL)
+ {
+ lex_error (lexer, NULL);
+ goto error;
+ }
+ name = xstrdup (tstr);
if (!lex_force_id (lexer)
|| !dict_id_is_valid (dict, name, true))
{
if (reader == NULL)
goto error;
- data_parser_make_active_file (parser, ds, reader, dict);
+ data_parser_make_active_file (parser, ds, reader, dict, NULL, NULL);
fh_unref (fh);
free (encoding);
return CMD_SUCCESS;
error:
data_parser_destroy (parser);
- dict_destroy (dict);
+ dict_unref (dict);
fh_unref (fh);
free (name);
free (encoding);
}
-static void
+static void
destroy_spreadsheet_read_info (struct spreadsheet_read_options *opts)
{
free (opts->cell_range);