]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Issue 223. Merge from r4119 from trunk.
authorMichihiro NAKAJIMA <ggcueroad@gmail.com>
Tue, 10 Jan 2012 23:11:02 +0000 (18:11 -0500)
committerMichihiro NAKAJIMA <ggcueroad@gmail.com>
Tue, 10 Jan 2012 23:11:02 +0000 (18:11 -0500)
SVN-Revision: 4120

libarchive/test/test_read_disk_directory_traversals.c

index a1d6e1ad5e3168a2304ab3e3ef0cdb6e819fcc0f..c574d64dd338002b59a1dff8c1c4196aab008387 100644 (file)
 #include "test.h"
 __FBSDID("$FreeBSD$");
 
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+#ifdef HAVE_SYS_STATFS_H
+#include <sys/statfs.h>
+#endif
+#ifdef HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
 #include <limits.h>
 #if defined(_WIN32) && !defined(__CYGWIN__)
 # if !defined(__BORLANDC__)
@@ -32,6 +44,41 @@ __FBSDID("$FreeBSD$");
 # endif
 #endif
 
+/*
+ * Test if the current filesytem can restore atime.
+ */
+#if defined(HAVE_STATVFS) && defined(ST_NOATIME)
+static int
+canRestoreAtime(void)
+{
+       struct statvfs sfs;
+       int r;
+
+       r = statvfs(".", &sfs);
+       if (r != 0)
+               return (1);
+       return (sfs.f_flag & ST_NOATIME)?0:1;
+}
+#elif defined(HAVE_STATFS) && defined(MNT_NOATIME)
+static int
+canRestoreAtime(void)
+{
+       struct statfs sfs;
+       int r;
+
+       r = statfs(".", &sfs);
+       if (r != 0)
+               return (1);
+       return (sfs.f_flags & MNT_NOATIME)?0:1;
+}
+#else
+static int
+canRestoreAtime(void)
+{
+       return (1);
+}
+#endif
+
 static void
 test_basic(void)
 {
@@ -880,6 +927,11 @@ test_restore_atime(void)
        int64_t offset;
        int file_count;
 
+       if (!canRestoreAtime()) {
+               skipping("Can't test restoring atime on this filesystem");
+               return;
+       }
+
        assertMakeDir("at", 0755);
        assertMakeFile("at/f1", 0644, "0123456789");
        assertMakeFile("at/f2", 0644, "hello world");