]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Do not try a test restoring atime when the filesytem is mounted with noatime option.
authorMichihiro NAKAJIMA <ggcueroad@gmail.com>
Tue, 10 Jan 2012 10:10:03 +0000 (05:10 -0500)
committerMichihiro NAKAJIMA <ggcueroad@gmail.com>
Tue, 10 Jan 2012 10:10:03 +0000 (05:10 -0500)
SVN-Revision: 4119

libarchive/test/test_read_disk_directory_traversals.c

index d8f874242eff3540170f2b7780f78b199329cd62..ebbbdefeb8cb066857ebd0f9080e6a8ba4aaebdc 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)
 {
@@ -1001,6 +1048,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");