diff options
Diffstat (limited to 'lib/libarchive/test/test_entry.c')
-rw-r--r-- | lib/libarchive/test/test_entry.c | 105 |
1 files changed, 102 insertions, 3 deletions
diff --git a/lib/libarchive/test/test_entry.c b/lib/libarchive/test/test_entry.c index 6cc96eebdd4ba..e829b2589906b 100644 --- a/lib/libarchive/test/test_entry.c +++ b/lib/libarchive/test/test_entry.c @@ -49,6 +49,7 @@ DEFINE_TEST(test_entry) const char *xname; /* For xattr tests. */ const void *xval; /* For xattr tests. */ size_t xsize; /* For xattr tests. */ + int c; assert((e = archive_entry_new()) != NULL); @@ -72,13 +73,21 @@ DEFINE_TEST(test_entry) archive_entry_set_ctime(e, 13580, 24681); assertEqualInt(archive_entry_ctime(e), 13580); assertEqualInt(archive_entry_ctime_nsec(e), 24681); +#if ARCHIVE_VERSION_STAMP >= 1009000 /* dev */ archive_entry_set_dev(e, 235); assertEqualInt(archive_entry_dev(e), 235); +#else + skipping("archive_entry_dev()"); +#endif /* devmajor/devminor are tested specially below. */ +#if ARCHIVE_VERSION_STAMP >= 1009000 /* filetype */ archive_entry_set_filetype(e, AE_IFREG); assertEqualInt(archive_entry_filetype(e), AE_IFREG); +#else + skipping("archive_entry_filetype()"); +#endif /* fflags are tested specially below */ /* gid */ archive_entry_set_gid(e, 204); @@ -104,9 +113,13 @@ DEFINE_TEST(test_entry) assertEqualWString(archive_entry_hardlink_w(e), L"whardlink"); memset(wbuff, 0, sizeof(wbuff)); assertEqualWString(archive_entry_hardlink_w(e), L"whardlink"); +#if ARCHIVE_VERSION_STAMP >= 1009000 /* ino */ archive_entry_set_ino(e, 8593); assertEqualInt(archive_entry_ino(e), 8593); +#else + skipping("archive_entry_ino()"); +#endif /* link */ /* TODO: implement these tests. */ /* mode */ @@ -116,9 +129,13 @@ DEFINE_TEST(test_entry) archive_entry_set_mtime(e, 13581, 24682); assertEqualInt(archive_entry_mtime(e), 13581); assertEqualInt(archive_entry_mtime_nsec(e), 24682); +#if ARCHIVE_VERSION_STAMP >= 1009000 /* nlink */ archive_entry_set_nlink(e, 736); assertEqualInt(archive_entry_nlink(e), 736); +#else + skipping("archive_entry_nlink()"); +#endif /* pathname */ archive_entry_set_pathname(e, "path"); assertEqualString(archive_entry_pathname(e), "path"); @@ -134,9 +151,13 @@ DEFINE_TEST(test_entry) assertEqualWString(archive_entry_pathname_w(e), L"wpath"); memset(wbuff, 0, sizeof(wbuff)); assertEqualWString(archive_entry_pathname_w(e), L"wpath"); +#if ARCHIVE_VERSION_STAMP >= 1009000 /* rdev */ archive_entry_set_rdev(e, 532); assertEqualInt(archive_entry_rdev(e), 532); +#else + skipping("archive_entry_rdev()"); +#endif /* rdevmajor/rdevminor are tested specially below. */ /* size */ archive_entry_set_size(e, 987654321); @@ -144,11 +165,13 @@ DEFINE_TEST(test_entry) /* symlink */ archive_entry_set_symlink(e, "symlinkname"); assertEqualString(archive_entry_symlink(e), "symlinkname"); +#if ARCHIVE_VERSION_STAMP >= 1009000 strcpy(buff, "symlinkname2"); archive_entry_copy_symlink(e, buff); assertEqualString(archive_entry_symlink(e), "symlinkname2"); memset(buff, 0, sizeof(buff)); assertEqualString(archive_entry_symlink(e), "symlinkname2"); +#endif archive_entry_copy_symlink_w(e, L"wsymlink"); assertEqualWString(archive_entry_symlink_w(e), L"wsymlink"); /* uid */ @@ -212,17 +235,25 @@ DEFINE_TEST(test_entry) archive_entry_clear(e); archive_entry_set_atime(e, 13579, 24680); archive_entry_set_ctime(e, 13580, 24681); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_dev(e, 235); +#endif archive_entry_set_fflags(e, 0x55, 0xAA); archive_entry_set_gid(e, 204); archive_entry_set_gname(e, "group"); archive_entry_set_hardlink(e, "hardlinkname"); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_ino(e, 8593); +#endif archive_entry_set_mode(e, 0123456); archive_entry_set_mtime(e, 13581, 24682); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_nlink(e, 736); +#endif archive_entry_set_pathname(e, "path"); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_rdev(e, 532); +#endif archive_entry_set_size(e, 987654321); archive_entry_set_symlink(e, "symlinkname"); archive_entry_set_uid(e, 83); @@ -241,26 +272,37 @@ DEFINE_TEST(test_entry) assertEqualInt(archive_entry_atime_nsec(e2), 24680); assertEqualInt(archive_entry_ctime(e2), 13580); assertEqualInt(archive_entry_ctime_nsec(e2), 24681); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(archive_entry_dev(e2), 235); +#endif archive_entry_fflags(e, &set, &clear); assertEqualInt(clear, 0xAA); assertEqualInt(set, 0x55); assertEqualInt(archive_entry_gid(e2), 204); assertEqualString(archive_entry_gname(e2), "group"); assertEqualString(archive_entry_hardlink(e2), "hardlinkname"); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(archive_entry_ino(e2), 8593); +#endif assertEqualInt(archive_entry_mode(e2), 0123456); assertEqualInt(archive_entry_mtime(e2), 13581); assertEqualInt(archive_entry_mtime_nsec(e2), 24682); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(archive_entry_nlink(e2), 736); +#endif assertEqualString(archive_entry_pathname(e2), "path"); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(archive_entry_rdev(e2), 532); +#endif assertEqualInt(archive_entry_size(e2), 987654321); assertEqualString(archive_entry_symlink(e2), "symlinkname"); assertEqualInt(archive_entry_uid(e2), 83); assertEqualString(archive_entry_uname(e2), "user"); +#if ARCHIVE_VERSION_STAMP < 1009000 + skipping("ACL preserved by archive_entry_clone()"); +#else /* Verify ACL was copied. */ - assertEqualInt(4, archive_entry_acl_reset(e2, + assertEqualInt(4, c = archive_entry_acl_reset(e2, ARCHIVE_ENTRY_ACL_TYPE_ACCESS)); /* First three are standard permission bits. */ assertEqualInt(0, archive_entry_acl_next(e2, @@ -296,28 +338,43 @@ DEFINE_TEST(test_entry) assertEqualInt(tag, ARCHIVE_ENTRY_ACL_USER); assertEqualInt(qual, 77); assertEqualString(name, "user77"); +#endif +#if ARCHIVE_VERSION_STAMP < 1009000 + skipping("xattr data preserved by archive_entry_clone"); +#else /* Verify xattr was copied. */ - assertEqualInt(1, archive_entry_xattr_reset(e2)); + assertEqualInt(1, c = archive_entry_xattr_reset(e2)); assertEqualInt(0, archive_entry_xattr_next(e2, &xname, &xval, &xsize)); assertEqualString(xname, "xattr1"); assertEqualString(xval, "xattrvalue"); assertEqualInt(xsize, 11); +#endif /* Change the original */ archive_entry_set_atime(e, 13580, 24690); archive_entry_set_ctime(e, 13590, 24691); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_dev(e, 245); +#endif archive_entry_set_fflags(e, 0x85, 0xDA); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_filetype(e, AE_IFLNK); +#endif archive_entry_set_gid(e, 214); archive_entry_set_gname(e, "grouper"); archive_entry_set_hardlink(e, "hardlinkpath"); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_ino(e, 8763); +#endif archive_entry_set_mode(e, 0123654); archive_entry_set_mtime(e, 18351, 28642); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_nlink(e, 73); +#endif archive_entry_set_pathname(e, "pathest"); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_rdev(e, 132); +#endif archive_entry_set_size(e, 987456321); archive_entry_set_symlink(e, "symlinkpath"); archive_entry_set_uid(e, 93); @@ -330,26 +387,37 @@ DEFINE_TEST(test_entry) assertEqualInt(archive_entry_atime_nsec(e2), 24680); assertEqualInt(archive_entry_ctime(e2), 13580); assertEqualInt(archive_entry_ctime_nsec(e2), 24681); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(archive_entry_dev(e2), 235); +#endif archive_entry_fflags(e2, &set, &clear); assertEqualInt(clear, 0xAA); assertEqualInt(set, 0x55); assertEqualInt(archive_entry_gid(e2), 204); assertEqualString(archive_entry_gname(e2), "group"); assertEqualString(archive_entry_hardlink(e2), "hardlinkname"); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(archive_entry_ino(e2), 8593); +#endif assertEqualInt(archive_entry_mode(e2), 0123456); assertEqualInt(archive_entry_mtime(e2), 13581); assertEqualInt(archive_entry_mtime_nsec(e2), 24682); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(archive_entry_nlink(e2), 736); +#endif assertEqualString(archive_entry_pathname(e2), "path"); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(archive_entry_rdev(e2), 532); +#endif assertEqualInt(archive_entry_size(e2), 987654321); assertEqualString(archive_entry_symlink(e2), "symlinkname"); assertEqualInt(archive_entry_uid(e2), 83); assertEqualString(archive_entry_uname(e2), "user"); +#if ARCHIVE_VERSION_STAMP < 1009000 + skipping("ACL held by clone of archive_entry"); +#else /* Verify ACL was unchanged. */ - assertEqualInt(4, archive_entry_acl_reset(e2, + assertEqualInt(4, c = archive_entry_acl_reset(e2, ARCHIVE_ENTRY_ACL_TYPE_ACCESS)); /* First three are standard permission bits. */ assertEqualInt(0, archive_entry_acl_next(e2, @@ -385,8 +453,13 @@ DEFINE_TEST(test_entry) assertEqualInt(tag, ARCHIVE_ENTRY_ACL_USER); assertEqualInt(qual, 77); assertEqualString(name, "user77"); +#endif +#if ARCHIVE_VERSION_STAMP < 1009000 + skipping("xattr preserved in archive_entry copy"); +#else /* Verify xattr was unchanged. */ assertEqualInt(1, archive_entry_xattr_reset(e2)); +#endif /* Release clone. */ archive_entry_free(e2); @@ -403,7 +476,9 @@ DEFINE_TEST(test_entry) archive_entry_fflags(e, &set, &clear); assertEqualInt(clear, 0); assertEqualInt(set, 0); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(archive_entry_filetype(e), 0); +#endif assertEqualInt(archive_entry_gid(e), 0); assertEqualString(archive_entry_gname(e), NULL); assertEqualString(archive_entry_hardlink(e), NULL); @@ -411,7 +486,9 @@ DEFINE_TEST(test_entry) assertEqualInt(archive_entry_mode(e), 0); assertEqualInt(archive_entry_mtime(e), 0); assertEqualInt(archive_entry_mtime_nsec(e), 0); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(archive_entry_nlink(e), 0); +#endif assertEqualString(archive_entry_pathname(e), NULL); assertEqualInt(archive_entry_rdev(e), 0); assertEqualInt(archive_entry_size(e), 0); @@ -455,7 +532,9 @@ DEFINE_TEST(test_entry) assertEqualInt(archive_entry_ino(e), 234); assertEqualInt(archive_entry_mode(e), 077777); assertEqualInt(archive_entry_mtime(e), 234567); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(archive_entry_nlink(e), 345); +#endif assertEqualInt(archive_entry_size(e), 123456789); assertEqualInt(archive_entry_uid(e), 23); #if __FreeBSD__ @@ -474,13 +553,19 @@ DEFINE_TEST(test_entry) /* Set a bunch of fields individually. */ archive_entry_set_atime(e, 456789, 321); archive_entry_set_ctime(e, 345678, 432); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_dev(e, 123); +#endif archive_entry_set_gid(e, 34); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_ino(e, 234); +#endif archive_entry_set_mode(e, 012345); archive_entry_set_mode(e, 012345); archive_entry_set_mtime(e, 234567, 543); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_nlink(e, 345); +#endif archive_entry_set_size(e, 123456789); archive_entry_set_uid(e, 23); /* Retrieve a stat structure. */ @@ -488,12 +573,18 @@ DEFINE_TEST(test_entry) /* Check that the values match. */ assertEqualInt(pst->st_atime, 456789); assertEqualInt(pst->st_ctime, 345678); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(pst->st_dev, 123); +#endif assertEqualInt(pst->st_gid, 34); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(pst->st_ino, 234); +#endif assertEqualInt(pst->st_mode, 012345); assertEqualInt(pst->st_mtime, 234567); +#if ARCHIVE_VERSION_STAMP >= 1009000 assertEqualInt(pst->st_nlink, 345); +#endif assertEqualInt(pst->st_size, 123456789); assertEqualInt(pst->st_uid, 23); #ifdef __FreeBSD__ @@ -510,24 +601,30 @@ DEFINE_TEST(test_entry) archive_entry_set_ctime(e, 345677, 431); assert((pst = archive_entry_stat(e)) != NULL); assertEqualInt(pst->st_ctime, 345677); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_dev(e, 122); assert((pst = archive_entry_stat(e)) != NULL); assertEqualInt(pst->st_dev, 122); +#endif archive_entry_set_gid(e, 33); assert((pst = archive_entry_stat(e)) != NULL); assertEqualInt(pst->st_gid, 33); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_ino(e, 233); assert((pst = archive_entry_stat(e)) != NULL); assertEqualInt(pst->st_ino, 233); +#endif archive_entry_set_mode(e, 012344); assert((pst = archive_entry_stat(e)) != NULL); assertEqualInt(pst->st_mode, 012344); archive_entry_set_mtime(e, 234566, 542); assert((pst = archive_entry_stat(e)) != NULL); assertEqualInt(pst->st_mtime, 234566); +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_nlink(e, 344); assert((pst = archive_entry_stat(e)) != NULL); assertEqualInt(pst->st_nlink, 344); +#endif archive_entry_set_size(e, 123456788); assert((pst = archive_entry_stat(e)) != NULL); assertEqualInt(pst->st_size, 123456788); @@ -551,6 +648,7 @@ DEFINE_TEST(test_entry) * the necessary definitions on every platform. */ #if __FreeBSD__ +#if ARCHIVE_VERSION_STAMP >= 1009000 archive_entry_set_dev(e, 0x12345678); assertEqualInt(archive_entry_devmajor(e), major(0x12345678)); assertEqualInt(archive_entry_devminor(e), minor(0x12345678)); @@ -570,6 +668,7 @@ DEFINE_TEST(test_entry) assertEqualInt(archive_entry_rdevminor(e), 0xdcba98); assertEqualInt(archive_entry_rdev(e), makedev(0xfe, 0xdcba98)); #endif +#endif /* Release the experimental entry. */ archive_entry_free(e); |