From: Martin Matuska Date: Thu, 18 Apr 2019 13:28:49 +0000 (+0200) Subject: RAR5 reader: change constant ARCHIVE_FORMAT_RAR_V5 to 0x100000 X-Git-Tag: v3.4.0~69 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7b3068c4bf7a217a1838db280072653197d30012;p=thirdparty%2Flibarchive.git RAR5 reader: change constant ARCHIVE_FORMAT_RAR_V5 to 0x100000 Rar5 is implemented as an individual format and not a variant of rar Makes the following functions usable with ARCHIVE_FORMAT_RAR_V5: archive_read_set_format() archive_read_support_format_by_code() --- diff --git a/libarchive/archive.h b/libarchive/archive.h index 3633a5807..daaaf783a 100644 --- a/libarchive/archive.h +++ b/libarchive/archive.h @@ -338,9 +338,9 @@ typedef const char *archive_passphrase_callback(struct archive *, #define ARCHIVE_FORMAT_LHA 0xB0000 #define ARCHIVE_FORMAT_CAB 0xC0000 #define ARCHIVE_FORMAT_RAR 0xD0000 -#define ARCHIVE_FORMAT_RAR_V5 (ARCHIVE_FORMAT_RAR | 1) #define ARCHIVE_FORMAT_7ZIP 0xE0000 #define ARCHIVE_FORMAT_WARC 0xF0000 +#define ARCHIVE_FORMAT_RAR_V5 0x100000 /* * Codes returned by archive_read_format_capabilities(). diff --git a/libarchive/archive_read_set_format.c b/libarchive/archive_read_set_format.c index 190f4369d..1d3e49d16 100644 --- a/libarchive/archive_read_set_format.c +++ b/libarchive/archive_read_set_format.c @@ -73,6 +73,9 @@ archive_read_set_format(struct archive *_a, int code) case ARCHIVE_FORMAT_RAR: strcpy(str, "rar"); break; + case ARCHIVE_FORMAT_RAR_V5: + strcpy(str, "rar5"); + break; case ARCHIVE_FORMAT_TAR: strcpy(str, "tar"); break; diff --git a/libarchive/test/test_read_format_rar.c b/libarchive/test/test_read_format_rar.c index 6392d8f50..9b9d6bda4 100644 --- a/libarchive/test/test_read_format_rar.c +++ b/libarchive/test/test_read_format_rar.c @@ -28,6 +28,22 @@ #include +DEFINE_TEST(test_read_format_rar_set_format) +{ + struct archive *a; + struct archive_entry *ae; + const char reffile[] = "test_read_format_rar.rar"; + + extract_reference_file(reffile); + assert((a = archive_read_new()) != NULL); + assertA(0 == archive_read_support_filter_all(a)); + assertA(0 == archive_read_set_format(a, ARCHIVE_FORMAT_RAR)); + assertA(0 == archive_read_open_filename(a, reffile, 10240)); + assertA(0 == archive_read_next_header(a, &ae)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_free(a)); +} + DEFINE_TEST(test_read_format_rar_basic) { char buff[64]; diff --git a/libarchive/test/test_read_format_rar5.c b/libarchive/test/test_read_format_rar5.c index e87e278f0..b76fcf69a 100644 --- a/libarchive/test/test_read_format_rar5.c +++ b/libarchive/test/test_read_format_rar5.c @@ -116,6 +116,21 @@ fn_exit: return ret; } +DEFINE_TEST(test_read_format_rar5_set_format) +{ + struct archive *a; + struct archive_entry *ae; + const char reffile[] = "test_read_format_rar5_stored.rar"; + + extract_reference_file(reffile); + assert((a = archive_read_new()) != NULL); + assertA(0 == archive_read_support_filter_all(a)); + assertA(0 == archive_read_set_format(a, ARCHIVE_FORMAT_RAR_V5)); + assertA(0 == archive_read_open_filename(a, reffile, 10240)); + assertA(0 == archive_read_next_header(a, &ae)); + EPILOGUE(); +} + DEFINE_TEST(test_read_format_rar5_stored) { const char helloworld_txt[] = "hello libarchive test suite!\n";