summaryrefslogtreecommitdiff
path: root/libtreefs
diff options
context:
space:
mode:
authorFlávio Cruz <flaviocruz@gmail.com>2018-03-05 02:58:41 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2018-03-05 02:58:41 +0100
commit82ab5bbac5d115b7cae4f3ca28f3ba8cce9431ba (patch)
tree2170bfb251afe6f2173c4424efa18e0b3fc0b46f /libtreefs
parent2ed669b5b1da77e80fff6dc2f72f11e266479a8c (diff)
Add file_utimens RPC to use a struct timespec
and update the servers to use UTIME_NOW and UTIME_OMIT. * console-client/trans.c (netfs_attempt_utimes): Do not set current time ourself. * console/console.c (netfs_attempt_utimes): Likewise. * ftpfs/netfs.c (netfs_attempt_utimes): Likewise. * hostmux/node.c (netfs_attempt_utimes): Likewise. * usermux/node.c (netfs_attempt_utimes): Likewise. * nfs/ops.c (netfs_attempt_utimes): Likewise. * doc/hurd.texi (file_utimens): Add documentation. * hurd/fs.defs (file_utimens): Add RPC. * libdiskfs/file-utimes.c (diskfs_S_file_utimes): Move implementation and replace with translation layer with... (diskfs_S_file_utimens): ... new function. * libnetfs/file-utimes.c (netfs_S_file_utimes): Likewise with... (netfs_S_file_utimens): ... new function. * libnetfs/init-init.c: Include <error.h>. (netfs_mtime): New variable. (netfs_init): New function. * libnetfs/netfs.h (netfs_attempt_utimes): Update documentation. * libnetfs/priv.h (netfs_mtime): Declare variable. * libtreefs/s-file.c (treefs_S_file_utimes): Convert time values and call treefs_s_file_utimens instead of treefs_s_file_utimes. * libtreefs/treefs-hooks.h: Replace TREEFS_HOOK_S_FILE_UTIMES with TREEFS_HOOK_S_FILE_UTIMENS. * libtreefs/treefs-s-hooks.h: Replace s_file_utimes with s_file_utimens. * libtrivfs/file-utimes.c (trivfs_S_file_utimens): New function. * libtrivfs/times.c (trivfs_set_atime): Try to use file_utimens before using file_utimes. (trivfs_set_mtime): Likewise. * nfsd/ops.c (complete_setattr): Likewise. * trans/fakeroot.c (netfs_attempt_utimes): Likewise. * nfs/nfs.c (xdr_encode_sattr_times): Do not set atime or mtime when they are NULL. * configure.ac: Look for file_futimens, and define UTIME_NOW/OMIT, for compatibility with old glibcs.
Diffstat (limited to 'libtreefs')
-rw-r--r--libtreefs/s-file.c30
-rw-r--r--libtreefs/treefs-hooks.h2
-rw-r--r--libtreefs/treefs-s-hooks.h6
3 files changed, 33 insertions, 5 deletions
diff --git a/libtreefs/s-file.c b/libtreefs/s-file.c
index c24d645e..6ba67e3c 100644
--- a/libtreefs/s-file.c
+++ b/libtreefs/s-file.c
@@ -231,5 +231,33 @@ treefs_S_file_utimes (struct treefs_protid *cred,
{
if (!cred)
return EOPNOTSUPP;
- return treefs_s_file_utimes (cred, atime, mtime);
+
+ struct timespec atim, mtim;
+
+ if (atime.microseconds == -1)
+ {
+ atim.tv_sec = 0;
+ atim.tv_nsec = UTIME_NOW;
+ }
+ else
+ TIME_VALUE_TO_TIMESPEC (&atime, &atim);
+
+ if (mtime.microseconds == -1)
+ {
+ mtim.tv_sec = 0;
+ mtim.tv_nsec = UTIME_NOW;
+ }
+ else
+ TIME_VALUE_TO_TIMESPEC (&mtime, &mtim);
+
+ return treefs_s_file_utimens (cred, atim, mtim);
+}
+
+error_t
+treefs_S_file_utimens (struct treefs_protid *cred,
+ struct timespec atime, struct timespec mtime)
+{
+ if (!cred)
+ return EOPNOTSUPP;
+ return treefs_s_file_utimens (cred, atime, mtime);
}
diff --git a/libtreefs/treefs-hooks.h b/libtreefs/treefs-hooks.h
index 6dc2f731..49dbb419 100644
--- a/libtreefs/treefs-hooks.h
+++ b/libtreefs/treefs-hooks.h
@@ -33,7 +33,7 @@ enum
/* file rpcs */
TREEFS_HOOK_S_FILE_EXEC, TREEFS_HOOK_S_FILE_CHOWN,
TREEFS_HOOK_S_FILE_CHAUTHOR, TREEFS_HOOK_S_FILE_CHMOD,
- TREEFS_HOOK_S_FILE_CHFLAGS, TREEFS_HOOK_S_FILE_UTIMES,
+ TREEFS_HOOK_S_FILE_CHFLAGS, TREEFS_HOOK_S_FILE_UTIMENS,
TREEFS_HOOK_S_FILE_SET_SIZE, TREEFS_HOOK_S_FILE_LOCK,
TREEFS_HOOK_S_FILE_LOCK_STAT, TREEFS_HOOK_S_FILE_ACCESS,
TREEFS_HOOK_S_FILE_NOTICE, TREEFS_HOOK_S_FILE_SYNC,
diff --git a/libtreefs/treefs-s-hooks.h b/libtreefs/treefs-s-hooks.h
index 2ea9e7ab..9b2489df 100644
--- a/libtreefs/treefs-s-hooks.h
+++ b/libtreefs/treefs-s-hooks.h
@@ -53,9 +53,9 @@ DHH(s_file_chmod, error_t, mode_t)
DHH(s_file_chflags, error_t, int)
#define treefs_s_file_chflags(h, args...) \
_TREEFS_CHH(h, S_FILE_CHFLAGS, s_file_chflags , ##args)
-DHH(s_file_utimes, error_t, time_value_t, time_value_t)
-#define treefs_s_file_utimes(h, args...) \
- _TREEFS_CHH(h, S_FILE_UTIMES, s_file_utimes , ##args)
+DHH(s_file_utimens, error_t, struct timespec, struct timespec)
+#define treefs_s_file_utimens(h, args...) \
+ _TREEFS_CHH(h, S_FILE_UTIMENS, s_file_utimens , ##args)
DHH(s_file_truncate, error_t, off_t)
#define treefs_s_file_truncate(h, args...) \
_TREEFS_CHH(h, S_FILE_TRUNCATE, s_file_truncate , ##args)