Merge pull request #288 from cptpcrd/utimensat-fix

Fix flaws in utimensat() handling
This commit is contained in:
Giuseppe Scrivano 2021-04-16 20:35:57 +02:00 committed by GitHub
commit af5cb1c04c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

22
main.c
View File

@ -3947,19 +3947,23 @@ ovl_setattr (fuse_req_t req, fuse_ino_t ino, struct stat *attr, int to_set, stru
l = release_big_lock ();
memset (times, 0, sizeof (times));
times[0].tv_sec = UTIME_OMIT;
times[1].tv_sec = UTIME_OMIT;
times[0].tv_nsec = UTIME_OMIT;
times[1].tv_nsec = UTIME_OMIT;
if (to_set & FUSE_SET_ATTR_ATIME)
times[0] = attr->st_atim;
else if (to_set & FUSE_SET_ATTR_ATIME_NOW)
times[0].tv_sec = UTIME_NOW;
{
times[0] = attr->st_atim;
if (to_set & FUSE_SET_ATTR_ATIME_NOW)
times[0].tv_nsec = UTIME_NOW;
}
if (to_set & FUSE_SET_ATTR_MTIME)
times[1] = attr->st_mtim;
else if (to_set & FUSE_SET_ATTR_MTIME_NOW)
times[1].tv_sec = UTIME_NOW;
{
times[1] = attr->st_mtim;
if (to_set & FUSE_SET_ATTR_MTIME_NOW)
times[1].tv_nsec = UTIME_NOW;
}
if (times[0].tv_sec != UTIME_OMIT || times[1].tv_sec != UTIME_OMIT)
if (times[0].tv_nsec != UTIME_OMIT || times[1].tv_nsec != UTIME_OMIT)
{
if (fd >= 0)
ret = futimens (fd, times);