From a59b0a9f768f6e27b25f4f1bab6de08842e78d74 Mon Sep 17 00:00:00 2001 From: Michal Sekletár Date: Nov 06 2020 11:28:40 +0000 Subject: basic/stat-util: make mtime check stricter and use entire timestamp Note that st_mtime member of struct stat is defined as follows, #define st_mtime st_mtim.tv_sec Hence we omitted checking nanosecond part of the timestamp (struct timespec) and possibly would miss modifications that happened within the same second. --- diff --git a/src/basic/stat-util.c b/src/basic/stat-util.c index 574815b..6c43141 100644 --- a/src/basic/stat-util.c +++ b/src/basic/stat-util.c @@ -408,7 +408,8 @@ bool stat_inode_unmodified(const struct stat *a, const struct stat *b) { return a && b && (a->st_mode & S_IFMT) != 0 && /* We use the check for .st_mode if the structure was ever initialized */ ((a->st_mode ^ b->st_mode) & S_IFMT) == 0 && /* same inode type */ - a->st_mtime == b->st_mtime && + a->st_mtim.tv_sec == b->st_mtim.tv_sec && + a->st_mtim.tv_nsec == b->st_mtim.tv_nsec && (!S_ISREG(a->st_mode) || a->st_size == b->st_size) && /* if regular file, compare file size */ a->st_dev == b->st_dev && a->st_ino == b->st_ino &&