[evince/wip/hadess/unrar-libarchive: 1/2] comics: Use libarchive for RAR support
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince/wip/hadess/unrar-libarchive: 1/2] comics: Use libarchive for RAR support
- Date: Wed, 12 Jan 2022 15:20:05 +0000 (UTC)
commit 1d25872bc82f54422b39519ad99cdc6d40d0b54e
Author: Bastien Nocera <hadess hadess net>
Date: Wed Jan 12 16:18:00 2022 +0100
comics: Use libarchive for RAR support
As new in version XXX.
backend/comics/ev-archive.c | 56 ++++-----------------------------------------
backend/comics/meson.build | 1 -
meson.build | 2 +-
3 files changed, 6 insertions(+), 53 deletions(-)
---
diff --git a/backend/comics/ev-archive.c b/backend/comics/ev-archive.c
index 0ee31a619..795c8109a 100644
--- a/backend/comics/ev-archive.c
+++ b/backend/comics/ev-archive.c
@@ -22,7 +22,6 @@
#include <archive.h>
#include <archive_entry.h>
-#include <unarr/unarr.h>
#include <gio/gio.h>
#define BUFFER_SIZE (64 * 1024)
@@ -34,10 +33,6 @@ struct _EvArchive {
/* libarchive */
struct archive *libar;
struct archive_entry *libar_entry;
-
- /* unarr */
- ar_stream *unarr_stream;
- ar_archive *unarr;
};
G_DEFINE_TYPE(EvArchive, ev_archive, G_TYPE_OBJECT);
@@ -49,9 +44,6 @@ ev_archive_finalize (GObject *object)
switch (archive->type) {
case EV_ARCHIVE_TYPE_RAR:
- g_clear_pointer (&archive->unarr, ar_close_archive);
- g_clear_pointer (&archive->unarr_stream, ar_close);
- break;
case EV_ARCHIVE_TYPE_ZIP:
case EV_ARCHIVE_TYPE_7Z:
case EV_ARCHIVE_TYPE_TAR:
@@ -94,6 +86,8 @@ libarchive_set_archive_type (EvArchive *archive,
archive_read_support_format_tar (archive->libar);
else if (archive_type == EV_ARCHIVE_TYPE_RAR5)
archive_read_support_format_rar5 (archive->libar);
+ else if (archive_type == EV_ARCHIVE_TYPE_RAR)
+ archive_read_support_format_rar (archive->libar);
else
g_assert_not_reached ();
}
@@ -115,8 +109,6 @@ ev_archive_set_archive_type (EvArchive *archive,
switch (archive_type) {
case EV_ARCHIVE_TYPE_RAR:
- archive->type = archive_type;
- break;
case EV_ARCHIVE_TYPE_ZIP:
case EV_ARCHIVE_TYPE_7Z:
case EV_ARCHIVE_TYPE_TAR:
@@ -145,25 +137,6 @@ ev_archive_open_filename (EvArchive *archive,
switch (archive->type) {
case EV_ARCHIVE_TYPE_NONE:
g_assert_not_reached ();
- case EV_ARCHIVE_TYPE_RAR:
- archive->unarr_stream = ar_open_file (path);
- if (archive->unarr_stream == NULL) {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Error opening archive");
- return FALSE;
- }
- archive->unarr = ar_open_rar_archive_with_error (archive->unarr_stream, &code);
- if (archive->unarr == NULL) {
- g_clear_pointer (&archive->unarr_stream, ar_close);
- if (code == AR_ARCHIVE_ERROR_RAR5) {
- libarchive_set_archive_type (archive, EV_ARCHIVE_TYPE_RAR5);
- return ev_archive_open_filename (archive, path, error);
- }
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Error opening RAR archive");
- return FALSE;
- }
- return TRUE;
case EV_ARCHIVE_TYPE_ZIP:
case EV_ARCHIVE_TYPE_7Z:
case EV_ARCHIVE_TYPE_TAR:
@@ -220,7 +193,6 @@ ev_archive_read_next_header (EvArchive *archive,
case EV_ARCHIVE_TYPE_NONE:
g_assert_not_reached ();
case EV_ARCHIVE_TYPE_RAR:
- return ar_parse_entry (archive->unarr);
case EV_ARCHIVE_TYPE_ZIP:
case EV_ARCHIVE_TYPE_7Z:
case EV_ARCHIVE_TYPE_TAR:
@@ -241,8 +213,6 @@ ev_archive_get_entry_pathname (EvArchive *archive)
case EV_ARCHIVE_TYPE_NONE:
g_assert_not_reached ();
case EV_ARCHIVE_TYPE_RAR:
- g_return_val_if_fail (archive->unarr != NULL, NULL);
- return ar_entry_get_name (archive->unarr);
case EV_ARCHIVE_TYPE_ZIP:
case EV_ARCHIVE_TYPE_7Z:
case EV_ARCHIVE_TYPE_TAR:
@@ -261,11 +231,9 @@ ev_archive_get_entry_size (EvArchive *archive)
g_return_val_if_fail (archive->type != EV_ARCHIVE_TYPE_NONE, -1);
switch (archive->type) {
- case EV_ARCHIVE_TYPE_RAR:
- g_return_val_if_fail (archive->unarr != NULL, -1);
- return ar_entry_get_size (archive->unarr);
case EV_ARCHIVE_TYPE_NONE:
g_assert_not_reached ();
+ case EV_ARCHIVE_TYPE_RAR:
case EV_ARCHIVE_TYPE_ZIP:
case EV_ARCHIVE_TYPE_7Z:
case EV_ARCHIVE_TYPE_TAR:
@@ -284,12 +252,9 @@ ev_archive_get_entry_is_encrypted (EvArchive *archive)
g_return_val_if_fail (archive->type != EV_ARCHIVE_TYPE_NONE, FALSE);
switch (archive->type) {
- case EV_ARCHIVE_TYPE_RAR:
- g_return_val_if_fail (archive->unarr != NULL, FALSE);
- /* password-protected RAR is not even detected right now */
- return FALSE;
case EV_ARCHIVE_TYPE_NONE:
g_assert_not_reached ();
+ case EV_ARCHIVE_TYPE_RAR:
case EV_ARCHIVE_TYPE_ZIP:
case EV_ARCHIVE_TYPE_7Z:
case EV_ARCHIVE_TYPE_TAR:
@@ -313,17 +278,9 @@ ev_archive_read_data (EvArchive *archive,
g_return_val_if_fail (archive->type != EV_ARCHIVE_TYPE_NONE, -1);
switch (archive->type) {
- case EV_ARCHIVE_TYPE_RAR:
- g_return_val_if_fail (archive->unarr != NULL, -1);
- if (!ar_entry_uncompress (archive->unarr, buf, count)) {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Failed to decompress RAR data");
- return -1;
- }
- r = count;
- break;
case EV_ARCHIVE_TYPE_NONE:
g_assert_not_reached ();
+ case EV_ARCHIVE_TYPE_RAR:
case EV_ARCHIVE_TYPE_ZIP:
case EV_ARCHIVE_TYPE_7Z:
case EV_ARCHIVE_TYPE_TAR:
@@ -348,9 +305,6 @@ ev_archive_reset (EvArchive *archive)
switch (archive->type) {
case EV_ARCHIVE_TYPE_RAR:
- g_clear_pointer (&archive->unarr, ar_close_archive);
- g_clear_pointer (&archive->unarr_stream, ar_close);
- break;
case EV_ARCHIVE_TYPE_ZIP:
case EV_ARCHIVE_TYPE_7Z:
case EV_ARCHIVE_TYPE_TAR:
diff --git a/backend/comics/meson.build b/backend/comics/meson.build
index 1e740194b..c245b1ba7 100644
--- a/backend/comics/meson.build
+++ b/backend/comics/meson.build
@@ -7,7 +7,6 @@ incs = backends_incs + [cut_n_paste_inc]
deps = backends_deps + [
libarchive_dep,
- libunarr_dep,
]
shared_module(
diff --git a/meson.build b/meson.build
index 410f70f65..e56bce2f3 100644
--- a/meson.build
+++ b/meson.build
@@ -349,7 +349,7 @@ else
endif
# *** Comic Book ***
-libarchive_req_version = '>= 3.2.0'
+libarchive_req_version = '>= 3.2.0' # FIXME needs a newer version
libarchive_dep = dependency('libarchive', version: libarchive_req_version, required: get_option('comics'))
enable_comics = libarchive_dep.found()
if enable_comics
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]