diff options
author | Sebastian Pipping <sebastian@pipping.org> | 2011-06-25 19:14:29 +0200 |
---|---|---|
committer | Miklos Szeredi <mszeredi@suse.cz> | 2011-07-04 13:01:35 +0200 |
commit | c605b5f73c458eeacdb6653e6899b5ebe7f1fc1a (patch) | |
tree | 9aa6d860f0ec90b54fcffe5a47fa439df9f8b434 | |
parent | fe16912e9b9466a5a167c962e745d5690459f099 (diff) |
utimens must not follow symlinks
Make xmp_utimens of examples "fusexmp" and "fusexmp_fh" not follow
symlinks as other layers do that already.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | example/fusexmp.c | 14 | ||||
-rw-r--r-- | example/fusexmp_fh.c | 10 |
3 files changed, 13 insertions, 16 deletions
@@ -1,3 +1,8 @@ +2011-07-02 Sebastian Pipping <sebastian@pipping.org> + + * Make xmp_utimens of examples "fusexmp" and "fusexmp_fh" + not follow symlinks as other layers do that already. + 2011-06-02 Miklos Szeredi <miklos@szeredi.hu> * Add "remember" option. This works similar to "noforget" except diff --git a/example/fusexmp.c b/example/fusexmp.c index 083bbea..58b77a8 100644 --- a/example/fusexmp.c +++ b/example/fusexmp.c @@ -1,6 +1,7 @@ /* FUSE: Filesystem in Userspace Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu> + Copyright (C) 2011 Sebastian Pipping <sebastian@pipping.org> This program can be distributed under the terms of the GNU GPL. See the file COPYING. @@ -15,8 +16,8 @@ #endif #ifdef linux -/* For pread()/pwrite() */ -#define _XOPEN_SOURCE 500 +/* For pread()/pwrite()/utimensat() */ +#define _XOPEN_SOURCE 700 #endif #include <fuse.h> @@ -24,6 +25,7 @@ #include <string.h> #include <unistd.h> #include <fcntl.h> +#include <sys/stat.h> #include <dirent.h> #include <errno.h> #include <sys/time.h> @@ -214,14 +216,8 @@ static int xmp_truncate(const char *path, off_t size) static int xmp_utimens(const char *path, const struct timespec ts[2]) { int res; - struct timeval tv[2]; - tv[0].tv_sec = ts[0].tv_sec; - tv[0].tv_usec = ts[0].tv_nsec / 1000; - tv[1].tv_sec = ts[1].tv_sec; - tv[1].tv_usec = ts[1].tv_nsec / 1000; - - res = utimes(path, tv); + res = utimensat(0, path, ts, AT_SYMLINK_NOFOLLOW); if (res == -1) return -errno; diff --git a/example/fusexmp_fh.c b/example/fusexmp_fh.c index 8f8b1a9..96427b3 100644 --- a/example/fusexmp_fh.c +++ b/example/fusexmp_fh.c @@ -1,6 +1,7 @@ /* FUSE: Filesystem in Userspace Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu> + Copyright (C) 2011 Sebastian Pipping <sebastian@pipping.org> This program can be distributed under the terms of the GNU GPL. See the file COPYING. @@ -23,6 +24,7 @@ #include <string.h> #include <unistd.h> #include <fcntl.h> +#include <sys/stat.h> #include <dirent.h> #include <errno.h> #include <sys/time.h> @@ -283,14 +285,8 @@ static int xmp_ftruncate(const char *path, off_t size, static int xmp_utimens(const char *path, const struct timespec ts[2]) { int res; - struct timeval tv[2]; - tv[0].tv_sec = ts[0].tv_sec; - tv[0].tv_usec = ts[0].tv_nsec / 1000; - tv[1].tv_sec = ts[1].tv_sec; - tv[1].tv_usec = ts[1].tv_nsec / 1000; - - res = utimes(path, tv); + res = utimensat(0, path, ts, AT_SYMLINK_NOFOLLOW); if (res == -1) return -errno; |