diff options
author | Tim Kientzle <kientzle@acm.org> | 2016-03-13 20:10:24 -0700 |
---|---|---|
committer | Tim Kientzle <kientzle@acm.org> | 2016-03-13 20:10:24 -0700 |
commit | df2b46bf40d073bc9547c4c96f486a1fa05bd4cc (patch) | |
tree | 8c6137e137ddf8617e9634bbe2cae12a0f472ab4 | |
parent | 3933e100461d2251305b2fc0db10c6adb4c762e4 (diff) | |
download | libarchive-df2b46bf40d073bc9547c4c96f486a1fa05bd4cc.tar.gz |
Update MSDOS file attribute test
-rw-r--r-- | libarchive/test/test_read_format_zip_msdos.c | 28 | ||||
-rw-r--r-- | libarchive/test/test_read_format_zip_msdos.zip.uu | 4 |
2 files changed, 26 insertions, 6 deletions
diff --git a/libarchive/test/test_read_format_zip_msdos.c b/libarchive/test/test_read_format_zip_msdos.c index 66da77c2..fe287e1a 100644 --- a/libarchive/test/test_read_format_zip_msdos.c +++ b/libarchive/test/test_read_format_zip_msdos.c @@ -30,6 +30,8 @@ DEFINE_TEST(test_read_format_zip_msdos) const char *refname = "test_read_format_zip_msdos.zip"; struct archive *a; struct archive_entry *ae; + char *p; + size_t s; extract_reference_file(refname); @@ -39,8 +41,10 @@ DEFINE_TEST(test_read_format_zip_msdos) assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 17)); + /* 'ab' is marked as a directory in the central dir + * with MSDOS attribute info */ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); - assertEqualString("a/", archive_entry_pathname(ae)); + assertEqualString("ab/", archive_entry_pathname(ae)); assertEqualInt(AE_IFDIR | 0775, archive_entry_mode(ae)); assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); @@ -52,12 +56,28 @@ DEFINE_TEST(test_read_format_zip_msdos) assertEqualInt(ARCHIVE_OK, archive_read_free(a)); /* Verify with streaming reader. */ -#if 0 p = slurpfile(&s, refname); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); assertEqualIntA(a, ARCHIVE_OK, read_open_memory(a, p, s, 31)); - verify_basic(a, 0); -#endif + + /* + * 'ab' is not marked as a directory in the local file header + * (local file headers lack external attribute info), so the + * streaming reader can only determine if something is a directory + * by whether the name ends in '/'. + */ + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("ab", archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG | 0664, archive_entry_mode(ae)); + + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("a/gru\xCC\x88n.png", archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG | 0664, archive_entry_mode(ae)); + + assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_free(a)); + free(p); } diff --git a/libarchive/test/test_read_format_zip_msdos.zip.uu b/libarchive/test/test_read_format_zip_msdos.zip.uu index 6e9fd9a6..1691ca97 100644 --- a/libarchive/test/test_read_format_zip_msdos.zip.uu +++ b/libarchive/test/test_read_format_zip_msdos.zip.uu @@ -1,7 +1,7 @@ begin 644 test_read_format_zip_msdos.zip -M4$L#!!0``````&9A3D,````````````````"````82]02P,$"@``````M)QO +M4$L#!!0``````&9A3D,````````````````"````86)02P,$"@``````M)QO M/-&'5C4&````!@````P```!A+V=R=<R(;BYP;F=03D=%3D102P$"/P`4```` -M``!F84Y#`````````````````@`D`````````!``````````82\*`"`````` +M``!F84Y#`````````````````@`D`````````!``````````86(*`"`````` M``$`&`"N2J&TQ<C.`:Y*H;3%R,X!C?R@M,7(S@%02P$"/P`*``````"TG&\\ MT8=6-08````&````#````````````(`````@````82]G<G7,B&XN<&YG4$L% 3!@`````"``(`C@```%`````````` |