]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
basic/stat-util: make mtime check stricter and use entire timestamp
authorMichal Sekletár <msekleta@redhat.com>
Thu, 5 Nov 2020 16:55:25 +0000 (17:55 +0100)
committerMichal Sekletár <msekleta@redhat.com>
Fri, 6 Nov 2020 11:28:40 +0000 (12:28 +0100)
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.

src/basic/stat-util.c

index 574815bc439db896bd6f10c564b33418844558f7..6c431410cd5a915677a4c80823ef1e472b8370f8 100644 (file)
@@ -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 &&