[evince] comics: Add error reporting to comics_document_list()
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince] comics: Add error reporting to comics_document_list()
- Date: Sat, 22 Jul 2017 13:03:49 +0000 (UTC)
commit 2efa1318e2dbbd63a08319762c09db79b05545ff
Author: Bastien Nocera <hadess hadess net>
Date: Tue Jul 18 11:35:23 2017 +0200
comics: Add error reporting to comics_document_list()
So that we can know whether a NULL return value is due to an empty file
or a broken file.
https://bugzilla.gnome.org/show_bug.cgi?id=784963
backend/comics/comics-document.c | 45 ++++++++++++++++++++++++++-----------
1 files changed, 31 insertions(+), 14 deletions(-)
---
diff --git a/backend/comics/comics-document.c b/backend/comics/comics-document.c
index acbdeb3..611d752 100644
--- a/backend/comics/comics-document.c
+++ b/backend/comics/comics-document.c
@@ -59,24 +59,42 @@ static GSList* get_supported_image_extensions (void);
EV_BACKEND_REGISTER (ComicsDocument, comics_document)
static char **
-comics_document_list (ComicsDocument *comics_document)
+comics_document_list (ComicsDocument *comics_document,
+ GError **error)
{
char **ret = NULL;
GPtrArray *array;
- if (!ev_archive_open_filename (comics_document->archive, comics_document->archive_path, NULL))
+ if (!ev_archive_open_filename (comics_document->archive, comics_document->archive_path, error)) {
+ if (*error != NULL) {
+ g_debug ("Fatal error handling archive: %s", (*error)->message);
+ g_clear_error (error);
+ }
+
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("File is corrupted"));
goto out;
+ }
array = g_ptr_array_new ();
while (1) {
const char *name;
- GError *error = NULL;
- if (!ev_archive_read_next_header (comics_document->archive, &error)) {
- if (error != NULL) {
- g_warning ("Fatal error handling archive: %s", error->message);
- g_error_free (error);
+ if (!ev_archive_read_next_header (comics_document->archive, error)) {
+ if (*error != NULL) {
+ g_debug ("Fatal error handling archive: %s", (*error)->message);
+ g_clear_error (error);
+
+ g_ptr_array_free (array, TRUE);
+
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("File is corrupted"));
+ goto out;
}
break;
}
@@ -89,6 +107,10 @@ comics_document_list (ComicsDocument *comics_document)
if (array->len == 0) {
g_ptr_array_free (array, TRUE);
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("No files in archive"));
} else {
g_ptr_array_add (array, NULL);
ret = (char **) g_ptr_array_free (array, FALSE);
@@ -194,14 +216,9 @@ comics_document_load (EvDocument *document,
g_free (mime_type);
/* Get list of files in archive */
- cb_files = comics_document_list (comics_document);
- if (!cb_files) {
- g_set_error_literal (error,
- EV_DOCUMENT_ERROR,
- EV_DOCUMENT_ERROR_INVALID,
- _("File corrupted or no files in archive"));
+ cb_files = comics_document_list (comics_document, error);
+ if (!cb_files)
return FALSE;
- }
comics_document->page_names = g_ptr_array_sized_new (64);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]