rofiles-fuse: Fix utime() support
authorAlexander Larsson <alexl@redhat.com>
Tue, 28 Nov 2017 14:23:39 +0000 (15:23 +0100)
committerAtomic Bot <atomic-devel@projectatomic.io>
Tue, 28 Nov 2017 14:45:10 +0000 (14:45 +0000)
We use utimens instead of utime, thus allowing nanosecond timestamps,
and also fixes a bug where we used to passed UTIME_OMIT to tv_nsec
which made the entire operation a no-op.

Closes: #1351
Approved by: cgwalters

src/rofiles-fuse/main.c

index 97c91b607030ac51c8e40504fa4b0b969ddf276e..9e04274becf6c40fd2f22998b8bfc3fa6cdfcf7f 100644 (file)
@@ -284,18 +284,11 @@ callback_truncate (const char *path, off_t size)
 }
 
 static int
-callback_utime (const char *path, struct utimbuf *buf)
+callback_utimens (const char *path, const struct timespec tv[2])
 {
-  struct timespec ts[2];
-
   path = ENSURE_RELPATH (path);
 
-  ts[0].tv_sec = buf->actime;
-  ts[0].tv_nsec = UTIME_OMIT;
-  ts[1].tv_sec = buf->modtime;
-  ts[1].tv_nsec = UTIME_OMIT;
-
-  if (utimensat (basefd, path, ts, AT_SYMLINK_NOFOLLOW) == -1)
+  if (utimensat (basefd, path, tv, AT_SYMLINK_NOFOLLOW) == -1)
     return -errno;
 
   return 0;
@@ -506,7 +499,7 @@ struct fuse_operations callback_oper = {
   .chmod = callback_chmod,
   .chown = callback_chown,
   .truncate = callback_truncate,
-  .utime = callback_utime,
+  .utimens = callback_utimens,
   .create = callback_create,
   .open = callback_open,
   .read_buf = callback_read_buf,