]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
tar: test_option_fflags adjustments
authorMartin Matuska <martin@matuska.org>
Thu, 2 Mar 2017 22:28:40 +0000 (23:28 +0100)
committerMartin Matuska <martin@matuska.org>
Thu, 2 Mar 2017 22:32:52 +0000 (23:32 +0100)
  - Clear fflags on created directories
  - FreeBSD ZFS workaround - ZFS sets uarch on all touched files

tar/test/test_option_fflags.c

index 72fc7ce85644141f998b34e7155c081627830939..77a4e3e19f0fa33dde1b1408d77bac509437bb67 100644 (file)
 #include "test.h"
 __FBSDID("$FreeBSD$");
 
+static void
+clear_fflags(const char *pathname)
+{
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS)
+       chflags(pathname, 0);
+#elif (defined(FS_IOC_GETFLAGS) && defined(HAVE_WORKING_FS_IOC_GETFLAGS)) || \
+      (defined(EXT2_IOC_GETFLAGS) && defined(HAVE_WORKING_EXT2_IOC_GETFLAGS))
+       int fd;
+
+       fd = open(pathname, O_RDONLY | O_NONBLOCK);
+       if (fd < 0)
+               return;
+       ioctl(fd,
+#ifdef FS_IOC_GETFLAGS
+           FS_IOC_GETFLAGS,
+#else
+           EXT2_IOC_GETFLAGS,
+#endif
+           0);
+#else
+       (void)pathname; /* UNUSED */
+#endif
+       return;
+}
+
 DEFINE_TEST(test_option_fflags)
 {
        int r;
@@ -40,6 +65,9 @@ DEFINE_TEST(test_option_fflags)
        /* Set nodump flag on the file */
        assertSetNodump("f");
 
+       /* FreeBSD ZFS workaround: ZFS sets uarch on all touched files and dirs */
+       chmod("f", 0644);
+
        /* Archive it with fflags */
        r = systemf("%s -c --fflags -f fflags.tar f >fflags.out 2>fflags.err", testprog);
        assertEqualInt(r, 0);
@@ -50,24 +78,28 @@ DEFINE_TEST(test_option_fflags)
 
        /* Extract fflags with fflags */
        assertMakeDir("fflags_fflags", 0755);
+       clear_fflags("fflags_fflags");
        r = systemf("%s -x -C fflags_fflags --no-same-permissions --fflags -f fflags.tar >fflags_fflags.out 2>fflags_fflags.err", testprog);
        assertEqualInt(r, 0);
        assertEqualFflags("f", "fflags_fflags/f");
 
        /* Extract fflags without fflags */
        assertMakeDir("fflags_nofflags", 0755);
+       clear_fflags("fflags_nofflags");
        r = systemf("%s -x -C fflags_nofflags -p --no-fflags -f fflags.tar >fflags_nofflags.out 2>fflags_nofflags.err", testprog);
        assertEqualInt(r, 0);
        assertUnequalFflags("f", "fflags_nofflags/f");
 
        /* Extract nofflags with fflags */
        assertMakeDir("nofflags_fflags", 0755);
+       clear_fflags("nofflags_fflags");
        r = systemf("%s -x -C nofflags_fflags --no-same-permissions --fflags -f nofflags.tar >nofflags_fflags.out 2>nofflags_fflags.err", testprog);
        assertEqualInt(r, 0);   
        assertUnequalFflags("f", "nofflags_fflags/f");
 
        /* Extract nofflags with nofflags */
        assertMakeDir("nofflags_nofflags", 0755);
+       clear_fflags("nofflags_nofflags");
        r = systemf("%s -x -C nofflags_nofflags -p --no-fflags -f nofflags.tar >nofflags_nofflags.out 2>nofflags_nofflags.err", testprog);
        assertEqualInt(r, 0);
        assertUnequalFflags("f", "nofflags_nofflags/f");