projects
/
pspp
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
6e29a48
)
Show errors on reading badly formed gnumeric files
author
John Darrington
<john@darrington.wattle.id.au>
Sat, 16 Feb 2013 14:09:35 +0000
(15:09 +0100)
committer
John Darrington
<john@darrington.wattle.id.au>
Sat, 16 Feb 2013 14:09:35 +0000
(15:09 +0100)
src/data/gnumeric-reader.c
patch
|
blob
|
history
src/data/gnumeric-reader.h
patch
|
blob
|
history
src/data/ods-reader.c
patch
|
blob
|
history
src/data/ods-reader.h
patch
|
blob
|
history
src/data/spreadsheet-reader.c
patch
|
blob
|
history
src/language/data-io/get-data.c
patch
|
blob
|
history
src/ui/gui/page-assistant.c
patch
|
blob
|
history
src/ui/gui/page-file.c
patch
|
blob
|
history
src/ui/gui/sheet-test.c
patch
|
blob
|
history
diff --git
a/src/data/gnumeric-reader.c
b/src/data/gnumeric-reader.c
index 07b88163398f7df9a4b6aa7380b5fe6f0e607369..201ef599a16f7466fd589caa6340b75b46c97a4a 100644
(file)
--- a/
src/data/gnumeric-reader.c
+++ b/
src/data/gnumeric-reader.c
@@
-433,8
+433,20
@@
gnumeric_destroy (struct spreadsheet *s)
}
}
+static void
+gnumeric_error_handler (void *ctx, const char *mesg,
+ UNUSED xmlParserSeverities sev, xmlTextReaderLocatorPtr loc)
+{
+ struct gnumeric_reader *r = ctx;
+
+ msg (MW, _("There was a problem whilst reading the Gnumeric file `%s' (near line %d): `%s'"),
+ r->spreadsheet.file_name,
+ xmlTextReaderLocatorLineNumber (loc),
+ mesg);
+}
+
static struct gnumeric_reader *
static struct gnumeric_reader *
-gnumeric_reopen (struct gnumeric_reader *r, const char *filename)
+gnumeric_reopen (struct gnumeric_reader *r, const char *filename
, bool show_errors
)
{
int ret;
{
int ret;
@@
-454,9
+466,11
@@
gnumeric_reopen (struct gnumeric_reader *r, const char *filename)
if (NULL == gz)
return NULL;
if (NULL == gz)
return NULL;
+
xtr = xmlReaderForIO ((xmlInputReadCallback) gzread,
xtr = xmlReaderForIO ((xmlInputReadCallback) gzread,
- (xmlInputCloseCallback) gzclose, gz,
- NULL, NULL, 0);
+ (xmlInputCloseCallback) gzclose, gz,
+ NULL, NULL,
+ show_errors ? 0 : (XML_PARSE_NOERROR | XML_PARSE_NOWARNING) );
if (xtr == NULL)
{
if (xtr == NULL)
{
@@
-470,6
+484,9
@@
gnumeric_reopen (struct gnumeric_reader *r, const char *filename)
r->spreadsheet.n_sheets = -1;
r->spreadsheet.file_name = filename;
}
r->spreadsheet.n_sheets = -1;
r->spreadsheet.file_name = filename;
}
+
+ if (show_errors)
+ xmlTextReaderSetErrorHandler (xtr, gnumeric_error_handler, r);
r->target_sheet = NULL;
r->target_sheet_index = -1;
r->target_sheet = NULL;
r->target_sheet_index = -1;
@@
-503,9
+520,9
@@
gnumeric_reopen (struct gnumeric_reader *r, const char *filename)
struct spreadsheet *
struct spreadsheet *
-gnumeric_probe (const char *filename)
+gnumeric_probe (const char *filename
, bool report_errors
)
{
{
- struct gnumeric_reader *r = gnumeric_reopen (NULL, filename);
+ struct gnumeric_reader *r = gnumeric_reopen (NULL, filename
, report_errors
);
return &r->spreadsheet;
}
return &r->spreadsheet;
}
@@
-527,7
+544,7
@@
gnumeric_make_reader (struct spreadsheet *spreadsheet,
r = (struct gnumeric_reader *) (spreadsheet);
if (r->row != -1)
r = (struct gnumeric_reader *) (spreadsheet);
if (r->row != -1)
- r = gnumeric_reopen (r, NULL);
+ r = gnumeric_reopen (r, NULL
, true
);
if ( opts->cell_range )
{
if ( opts->cell_range )
{
diff --git
a/src/data/gnumeric-reader.h
b/src/data/gnumeric-reader.h
index 8c7518f808037b92b69f64d7eca0934546bb9764..a2aaabf7bce612b65b852d62ffd418963a82a635 100644
(file)
--- a/
src/data/gnumeric-reader.h
+++ b/
src/data/gnumeric-reader.h
@@
-24,7
+24,7
@@
struct dictionary;
struct spreadsheet_read_info;
struct spreadsheet_read_options;
struct spreadsheet_read_info;
struct spreadsheet_read_options;
-struct spreadsheet *gnumeric_probe (const char *filename);
+struct spreadsheet *gnumeric_probe (const char *filename
, bool report_errors
);
const char * gnumeric_get_sheet_name (struct spreadsheet *s, int n);
const char * gnumeric_get_sheet_name (struct spreadsheet *s, int n);
diff --git
a/src/data/ods-reader.c
b/src/data/ods-reader.c
index d6ed43e8f64257db79ad48bd7fbc0ad451bfb523..dd19898c539ce569271600056ddba5db6058c985 100644
(file)
--- a/
src/data/ods-reader.c
+++ b/
src/data/ods-reader.c
@@
-368,7
+368,7
@@
get_sheet_count (struct zip_reader *zreader)
return -1;
}
return -1;
}
-struct spreadsheet *ods_probe (const char *filename)
+struct spreadsheet *ods_probe (const char *filename
, bool report_errors
)
{
struct ods_reader *r;
struct string errs;
{
struct ods_reader *r;
struct string errs;
diff --git
a/src/data/ods-reader.h
b/src/data/ods-reader.h
index 18eb65bc90f279ff0565bcd5c2f3dec447fe3d51..f068aa39d7b2eae68e73ac671213ccc5f5111074 100644
(file)
--- a/
src/data/ods-reader.h
+++ b/
src/data/ods-reader.h
@@
-23,7
+23,7
@@
struct spreadsheet_read_info;
struct spreadsheet_read_options;
struct spreadsheet_read_options;
-struct spreadsheet *ods_probe (const char *filename);
+struct spreadsheet *ods_probe (const char *filename
, bool report_errors
);
struct casereader * ods_make_reader (struct spreadsheet *spreadsheet,
const struct spreadsheet_read_info *gri,
struct casereader * ods_make_reader (struct spreadsheet *spreadsheet,
const struct spreadsheet_read_info *gri,
diff --git
a/src/data/spreadsheet-reader.c
b/src/data/spreadsheet-reader.c
index b010999c1f55701a2036a8d52632fd3da08a9a9f..29e84e63402dbba49222ba5594ad27d9cd640262 100644
(file)
--- a/
src/data/spreadsheet-reader.c
+++ b/
src/data/spreadsheet-reader.c
@@
-32,7
+32,7
@@
spreadsheet_open (const char *filename)
{
struct spreadsheet *ss = NULL;
{
struct spreadsheet *ss = NULL;
- ss = gnumeric_probe (filename);
+ ss = gnumeric_probe (filename
, true
);
return ss;
}
return ss;
}
diff --git
a/src/language/data-io/get-data.c
b/src/language/data-io/get-data.c
index 7b1d2882a2c9a26646783f67464f1a5bfba5620b..f12261a10f117db4328d105b428296ab1db01a83 100644
(file)
--- a/
src/language/data-io/get-data.c
+++ b/
src/language/data-io/get-data.c
@@
-88,13
+88,13
@@
cmd_get_data (struct lexer *lexer, struct dataset *ds)
if ( 0 == strncasecmp (tok, "GNM", 3))
{
if ( 0 == strncasecmp (tok, "GNM", 3))
{
- struct spreadsheet *spreadsheet = gnumeric_probe (filename);
+ struct spreadsheet *spreadsheet = gnumeric_probe (filename
, true
);
reader = gnumeric_make_reader (spreadsheet, &sri, &opts);
dict = spreadsheet->dict;
}
else if (0 == strncasecmp (tok, "ODS", 3))
{
reader = gnumeric_make_reader (spreadsheet, &sri, &opts);
dict = spreadsheet->dict;
}
else if (0 == strncasecmp (tok, "ODS", 3))
{
- struct spreadsheet *spreadsheet = ods_probe (filename);
+ struct spreadsheet *spreadsheet = ods_probe (filename
, true
);
reader = ods_make_reader (spreadsheet, &sri, &opts);
dict = spreadsheet->dict;
}
reader = ods_make_reader (spreadsheet, &sri, &opts);
dict = spreadsheet->dict;
}
diff --git
a/src/ui/gui/page-assistant.c
b/src/ui/gui/page-assistant.c
index b0b616e2654ac47f448a7b6ade3fc7d9ee5d8c75..f1c95f71fd249ddfeec615176f8e9eee384fa486 100644
(file)
--- a/
src/ui/gui/page-assistant.c
+++ b/
src/ui/gui/page-assistant.c
@@
-180,16
+180,12
@@
on_prepare (GtkAssistant *assistant, GtkWidget *page,
else
gtk_widget_grab_focus (assistant->forward);
else
gtk_widget_grab_focus (assistant->forward);
-
-
-
#if 0
gtk_widget_show (ia->asst.reset_button);
if (page == ia->formats->page)
gtk_widget_show (ia->asst.paste_button);
else
gtk_widget_hide (ia->asst.paste_button);
#if 0
gtk_widget_show (ia->asst.reset_button);
if (page == ia->formats->page)
gtk_widget_show (ia->asst.paste_button);
else
gtk_widget_hide (ia->asst.paste_button);
-
#endif
}
#endif
}
diff --git
a/src/ui/gui/page-file.c
b/src/ui/gui/page-file.c
index a781fcad2edddde6f7226d1773b9d51476a2ee4b..0e0a496de60c5579d6b4c31784ccb916a043f40f 100644
(file)
--- a/
src/ui/gui/page-file.c
+++ b/
src/ui/gui/page-file.c
@@
-99,12
+99,12
@@
init_file (struct import_assistant *ia, GtkWindow *parent_window)
printf ("%s:%d %p\n", __FILE__, __LINE__, ia->spreadsheet);
if (ia->spreadsheet == NULL)
printf ("%s:%d %p\n", __FILE__, __LINE__, ia->spreadsheet);
if (ia->spreadsheet == NULL)
- ia->spreadsheet = gnumeric_probe (file->file_name);
+ ia->spreadsheet = gnumeric_probe (file->file_name
, false
);
printf ("%s:%d %p\n", __FILE__, __LINE__, ia->spreadsheet);
if (ia->spreadsheet == NULL)
printf ("%s:%d %p\n", __FILE__, __LINE__, ia->spreadsheet);
if (ia->spreadsheet == NULL)
- ia->spreadsheet = ods_probe (file->file_name);
+ ia->spreadsheet = ods_probe (file->file_name
, false
);
printf ("%s:%d %p\n", __FILE__, __LINE__, ia->spreadsheet);
printf ("%s:%d %p\n", __FILE__, __LINE__, ia->spreadsheet);
diff --git
a/src/ui/gui/sheet-test.c
b/src/ui/gui/sheet-test.c
index 8f38e90f061a89e08a3bfde3bbaab649727c5407..dc903eb7e97a37d250efb2264fb8c7008f673019 100644
(file)
--- a/
src/ui/gui/sheet-test.c
+++ b/
src/ui/gui/sheet-test.c
@@
-80,7
+80,7
@@
main (int argc, char *argv[] )
if ( argc < 2)
g_error ("Usage: prog file\n");
if ( argc < 2)
g_error ("Usage: prog file\n");
- sp = gnumeric_probe (argv[1]);
+ sp = gnumeric_probe (argv[1]
, true
);
if (sp == NULL)
{
if (sp == NULL)
{