+ /* Non-symlinks should be handled just like utimens. */
+ errno = 0;
+ ASSERT (func ("no_such", NULL) == -1);
+ ASSERT (errno == ENOENT);
+ errno = 0;
+ ASSERT (func ("no_such/", NULL) == -1);
+ ASSERT (errno == ENOENT || errno == ENOTDIR);
+ errno = 0;
+ ASSERT (func ("", NULL) == -1);
+ ASSERT (errno == ENOENT);
+ ASSERT (close (creat (BASE "file", 0600)) == 0);
+ ASSERT (stat (BASE "file", &st1) == 0);
+ ASSERT (st1.st_atime != Y2K);
+ ASSERT (st1.st_mtime != Y2K);
+ {
+ struct timespec ts[2] = { { Y2K, 0 }, { Y2K, 0 } };
+ errno = 0;
+ ASSERT (func (BASE "file/", ts) == -1);
+ ASSERT (errno == ENOTDIR);
+ ASSERT (stat (BASE "file", &st2) == 0);
+ ASSERT (st1.st_atime == st2.st_atime);
+ ASSERT (st1.st_mtime == st2.st_mtime);
+ }
+ {
+ struct timespec ts[2] = { { Y2K, 0 }, { Y2K, 0 } };
+ nap ();
+ ASSERT (func (BASE "file", ts) == 0);
+ }
+ ASSERT (stat (BASE "file", &st2) == 0);
+ ASSERT (st2.st_atime == Y2K);
+ ASSERT (st2.st_mtime == Y2K);
+ if (check_ctime)
+ ASSERT (ctime_compare (&st1, &st2) < 0);
+
+ /* Play with symlink timestamps. */
+ if (symlink (BASE "file", BASE "link"))