regex: also remove dependency on HAVE_WCSCOLL
[gnulib.git] / tests / test-utimens-common.h
index 707971a..5bd4679 100644 (file)
@@ -1,9 +1,9 @@
 /* Test of file timestamp modification functions.
-   Copyright (C) 2009 Free Software Foundation, Inc.
+   Copyright (C) 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
 # include <string.h>
 # include <unistd.h>
 
+/* Gnulib modules.  */
 # include "stat-time.h"
 # include "timespec.h"
 # include "utimecmp.h"
 
+/* Gnulib test header.  */
+# include "nap.h"
+
 enum {
   BILLION = 1000 * 1000 * 1000,
 
@@ -44,29 +48,6 @@ enum {
                           : 0)
 };
 
-/* Sleep long enough to cross a timestamp quantization boundary on
-   most known systems with subsecond timestamp resolution.  For
-   example, ext4 has a quantization of 10 milliseconds, but a
-   resolution of 1 nanosecond.  Likewise, NTFS has a quantization as
-   slow as 15.25 milliseconds, but a resolution of 100 nanoseconds.
-   This is necessary on systems where creat or utimens with NULL
-   rounds down to the quantization boundary, but where gettime and
-   hence utimensat can inject timestamps between quantization
-   boundaries.  By ensuring we cross a boundary, we are less likely to
-   confuse utimecmp for two times that would round to the same
-   quantization boundary but are distinct based on resolution.  */
-static void
-nap (void)
-{
-  /* Systems that lack usleep also lack subsecond timestamps, and have
-     a quantization boundary equal to the resolution.  Our usage of
-     utimecmp allows equality, so no need to waste 980 milliseconds
-     if the replacement usleep rounds to 1 second.  */
-# if HAVE_USLEEP
-  usleep (20 * 1000); /* 20 milliseconds.  */
-# endif
-}
-
 # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
 /* Skip ctime tests on native Windows, since it is either a copy of
    mtime or birth time (depending on the file system), rather than a
@@ -76,4 +57,21 @@ nap (void)
 #  define check_ctime 1
 # endif
 
+/* Compare two st_ctime values.  Return -1, 0 or 1, respectively
+   when A's st_ctime is smaller than, equal to or greater than B's.  */
+static int
+ctime_compare (struct stat const *a, struct stat const *b)
+{
+  if (a->st_ctime < b->st_ctime)
+    return -1;
+  else if (b->st_ctime < a->st_ctime)
+    return 1;
+  else if (get_stat_ctime_ns (a) < get_stat_ctime_ns (b))
+    return -1;
+  else if (get_stat_ctime_ns (b) < get_stat_ctime_ns (a))
+    return 1;
+  else
+    return 0;
+}
+
 #endif /* GL_TEST_UTIMENS_COMMON */