summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Sekletár <msekleta@redhat.com>2020-11-05 17:55:25 +0100
committerMichal Sekletár <msekleta@redhat.com>2020-11-06 12:28:40 +0100
commita59b0a9f768f6e27b25f4f1bab6de08842e78d74 (patch)
treede6b6d7de678bc10e834cf643f6bc61fe8a33aa1
parentdec8e6cfb479eee3fa53195218c0eb744fde5e72 (diff)
downloadsystemd-a59b0a9f768f6e27b25f4f1bab6de08842e78d74.tar.gz
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.
-rw-r--r--src/basic/stat-util.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/basic/stat-util.c b/src/basic/stat-util.c
index 574815bc43..6c431410cd 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 &&