From fa44077613d10cf3606d3e3f845585904f6c44a7 Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Sat, 2 Sep 2006 09:51:08 +0000 Subject: fix --- lib/fuse.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'lib/fuse.c') diff --git a/lib/fuse.c b/lib/fuse.c index 4895192..0a3b555 100644 --- a/lib/fuse.c +++ b/lib/fuse.c @@ -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); } -- cgit v1.2.3