diff options
Diffstat (limited to 'libtreefs')
-rw-r--r-- | libtreefs/s-file.c | 30 | ||||
-rw-r--r-- | libtreefs/treefs-hooks.h | 2 | ||||
-rw-r--r-- | libtreefs/treefs-s-hooks.h | 6 |
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) |