diff options
Diffstat (limited to 'backend')
-rw-r--r-- | backend/ev-document-factory.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/backend/ev-document-factory.c b/backend/ev-document-factory.c index 23364a2..278a21a 100644 --- a/backend/ev-document-factory.c +++ b/backend/ev-document-factory.c @@ -287,27 +287,48 @@ EvDocument * ev_document_factory_get_document (const char *uri, GError **error) { EvDocument *document; + int result; document = get_document_from_uri (uri, FALSE, error); - if (*error == NULL) { - ev_document_load (document, uri, error); + if (*error != NULL) { + return NULL; } + + result = ev_document_load (document, uri, error); - if (*error) { - g_error_free (*error); - *error = NULL; + if (result == FALSE || *error) { + if (document) + g_object_unref (document); + document = NULL; } else { return document; } + if (*error) + g_error_free (*error); + *error = NULL; + document = get_document_from_uri (uri, TRUE, error); if (*error != NULL) { return NULL; } - ev_document_load (document, uri, error); + result = ev_document_load (document, uri, error); + + if (result == FALSE || *error) { + if (document) + g_object_unref (document); + document = NULL; + } + + if (result == FALSE && *error == NULL) { + g_set_error (error, + EV_DOCUMENT_ERROR, + 0, + _("Unknown MIME Type")); + } return document; } |