]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
RAR5 reader: change constant ARCHIVE_FORMAT_RAR_V5 to 0x100000
authorMartin Matuska <martin@matuska.org>
Thu, 18 Apr 2019 13:28:49 +0000 (15:28 +0200)
committerMartin Matuska <martin@matuska.org>
Thu, 18 Apr 2019 13:52:14 +0000 (15:52 +0200)
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()

libarchive/archive.h
libarchive/archive_read_set_format.c
libarchive/test/test_read_format_rar.c
libarchive/test/test_read_format_rar5.c

index 3633a5807c79490a156c90c26bf796afa6f305f8..daaaf783a0017a8b3230463663a044c0cc707ecd 100644 (file)
@@ -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().
index 190f4369d2484917895e1a5694f5fead0b1814cc..1d3e49d16477ea2b8721ecaee8be0fc020e76ac0 100644 (file)
@@ -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;
index 6392d8f50ff801c65cba5d222dac34a49eb560bb..9b9d6bda4d68f3afe9167641d92abfabce787db5 100644 (file)
 
 #include <locale.h>
 
+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];
index e87e278f02a6f84d3a0696a445eb2fcb1f89dfb5..b76fcf69a24dccb87df1d566712d672c9c44d3d6 100644 (file)
@@ -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";