diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2006-09-02 09:51:08 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2006-09-02 09:51:08 +0000 |
commit | fa44077613d10cf3606d3e3f845585904f6c44a7 (patch) | |
tree | 0f0d28170cfb03b3a20e48ff58b2ecb7c78f8ea7 /lib/fuse.c | |
parent | 9ae10b743e945487e12e8377b8f9fe49d8a745ab (diff) | |
download | libfuse-fa44077613d10cf3606d3e3f845585904f6c44a7.tar.gz |
fix
Diffstat (limited to 'lib/fuse.c')
-rw-r--r-- | lib/fuse.c | 19 |
1 files changed, 13 insertions, 6 deletions
@@ -753,15 +753,22 @@ static int do_truncate(struct fuse *f, const char *path, struct stat *attr, return err; } -static int do_utime(struct fuse *f, const char *path, struct stat *attr) +static int do_utimes(struct fuse *f, const char *path, struct stat *attr) { int err; - struct utimbuf buf; - buf.actime = attr->st_atime; - buf.modtime = attr->st_mtime; + err = -ENOSYS; - if (f->op.utime) + if (f->op.utimes) { + struct timespec tv[2]; + tv[0] = attr->st_atim; + tv[1] = attr->st_mtim; + err = f->op.utimes(path, tv); + } else if (f->op.utime) { + struct utimbuf buf; + buf.actime = attr->st_atime; + buf.modtime = attr->st_mtime; err = f->op.utime(path, &buf); + } return err; } @@ -788,7 +795,7 @@ static void fuse_setattr(fuse_req_t req, fuse_ino_t ino, struct stat *attr, if (!err && (valid & FUSE_SET_ATTR_SIZE)) err = do_truncate(f, path, attr, fi); if (!err && (valid & (FUSE_SET_ATTR_ATIME | FUSE_SET_ATTR_MTIME)) == (FUSE_SET_ATTR_ATIME | FUSE_SET_ATTR_MTIME)) - err = do_utime(f, path, attr); + err = do_utimes(f, path, attr); if (!err) err = f->op.getattr(path, &buf); } |