|
@@ -4612,18 +4612,23 @@ test_util_touch_file(void *arg)
|
|
|
struct stat st;
|
|
|
write_bytes_to_file(fname, "abc", 3, 1);
|
|
|
tt_int_op(0, OP_EQ, stat(fname, &st));
|
|
|
- tt_i64_op(st.st_mtime, OP_GE, now);
|
|
|
+ /* A subtle point: the filesystem time is not necessarily equal to the
|
|
|
+ * system clock time, since one can be using a monotonic clock, or coarse
|
|
|
+ * monotonic clock, or whatever. So we might wind up with an mtime a few
|
|
|
+ * microseconds ago. Let's just give it a lot of wiggle room. */
|
|
|
+ tt_i64_op(st.st_mtime, OP_GE, now - 1);
|
|
|
|
|
|
const time_t five_sec_ago = now - 5;
|
|
|
struct utimbuf u = { five_sec_ago, five_sec_ago };
|
|
|
tt_int_op(0, OP_EQ, utime(fname, &u));
|
|
|
tt_int_op(0, OP_EQ, stat(fname, &st));
|
|
|
+ /* Let's hope that utime/stat give the same second as a round-trip? */
|
|
|
tt_i64_op(st.st_mtime, OP_EQ, five_sec_ago);
|
|
|
|
|
|
/* Finally we can touch the file */
|
|
|
tt_int_op(0, OP_EQ, touch_file(fname));
|
|
|
tt_int_op(0, OP_EQ, stat(fname, &st));
|
|
|
- tt_i64_op(st.st_mtime, OP_GE, now);
|
|
|
+ tt_i64_op(st.st_mtime, OP_GE, now-1);
|
|
|
|
|
|
done:
|
|
|
;
|