[file-roller] libarchive: Add support for Zstandard compressed tar archives
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [file-roller] libarchive: Add support for Zstandard compressed tar archives
- Date: Sat, 12 Oct 2019 15:08:41 +0000 (UTC)
commit 5f009cc3ee2f2ec16aa668fe1337c1fd0f72c2ec
Author: Felix Riemann <friemann gnome org>
Date: Sat Feb 2 20:53:03 2019 +0100
libarchive: Add support for Zstandard compressed tar archives
This requires at least libarchive 3.3.3.
src/fr-archive-libarchive.c | 61 +++++++++++++++++++++++++++++++++++----------
1 file changed, 48 insertions(+), 13 deletions(-)
---
diff --git a/src/fr-archive-libarchive.c b/src/fr-archive-libarchive.c
index 1d451648..b1178f71 100644
--- a/src/fr-archive-libarchive.c
+++ b/src/fr-archive-libarchive.c
@@ -90,6 +90,9 @@ const char *libarchiver_mime_types[] = {
"application/x-tarz",
"application/x-xar",
"application/x-xz-compressed-tar",
+#if (ARCHIVE_VERSION_NUMBER >= 3003003)
+ "application/x-zstd-compressed-tar",
+#endif
"application/zip",
NULL
};
@@ -1171,6 +1174,12 @@ _archive_write_set_format_from_context (struct archive *a,
archive_write_set_format_pax_restricted (a);
archive_filter = ARCHIVE_FILTER_XZ;
}
+#if (ARCHIVE_VERSION_NUMBER >= 3003003)
+ else if (_g_str_equal (mime_type, "application/x-zstd-compressed-tar")) {
+ archive_write_set_format_pax_restricted (a);
+ archive_filter = ARCHIVE_FILTER_ZSTD;
+ }
+#endif
else if (_g_str_equal (mime_type, "application/x-tar")) {
archive_write_add_filter_none (a);
archive_write_set_format_pax_restricted (a);
@@ -1225,6 +1234,11 @@ _archive_write_set_format_from_context (struct archive *a,
case ARCHIVE_FILTER_XZ:
archive_write_add_filter_xz (a);
break;
+#if (ARCHIVE_VERSION_NUMBER >= 3003003)
+ case ARCHIVE_FILTER_ZSTD:
+ archive_write_add_filter_zstd (a);
+ break;
+#endif
default:
break;
}
@@ -1232,19 +1246,40 @@ _archive_write_set_format_from_context (struct archive *a,
/* set the compression level */
compression_level = NULL;
- switch (save_data->compression) {
- case FR_COMPRESSION_VERY_FAST:
- compression_level = "1";
- break;
- case FR_COMPRESSION_FAST:
- compression_level = "3";
- break;
- case FR_COMPRESSION_NORMAL:
- compression_level = "6";
- break;
- case FR_COMPRESSION_MAXIMUM:
- compression_level = "9";
- break;
+#if (ARCHIVE_VERSION_NUMBER >= 3003003)
+ if (archive_filter == ARCHIVE_FILTER_ZSTD) {
+ switch (save_data->compression) {
+ case FR_COMPRESSION_VERY_FAST:
+ compression_level = "1";
+ break;
+ case FR_COMPRESSION_FAST:
+ compression_level = "2";
+ break;
+ case FR_COMPRESSION_NORMAL:
+ compression_level = "3";
+ break;
+ case FR_COMPRESSION_MAXIMUM:
+ compression_level = "22";
+ break;
+ }
+ }
+ else
+#endif
+ {
+ switch (save_data->compression) {
+ case FR_COMPRESSION_VERY_FAST:
+ compression_level = "1";
+ break;
+ case FR_COMPRESSION_FAST:
+ compression_level = "3";
+ break;
+ case FR_COMPRESSION_NORMAL:
+ compression_level = "6";
+ break;
+ case FR_COMPRESSION_MAXIMUM:
+ compression_level = "9";
+ break;
+ }
}
if (compression_level != NULL)
archive_write_set_filter_option (a, NULL, "compression-level", compression_level);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]