diff options
-rw-r--r-- | libc/sysdeps/linux/common/utimes.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/libc/sysdeps/linux/common/utimes.c b/libc/sysdeps/linux/common/utimes.c index 5d6f1689c..a459d1508 100644 --- a/libc/sysdeps/linux/common/utimes.c +++ b/libc/sysdeps/linux/common/utimes.c @@ -10,7 +10,26 @@ #include <sys/syscall.h> #include <sys/time.h> -#ifdef __NR_utimes +#if defined __NR_utimensat && !defined __NR_utimes +# include <fcntl.h> +# include <stddef.h> +int utimes(const char *file, const struct timeval tvp[2]) +{ + struct timespec ts[2], *times; + if (tvp) { + times = ts; + times[0].tv_sec = tvp[0].tv_sec; + times[0].tv_nsec = tvp[0].tv_usec * 1000; + times[1].tv_sec = tvp[1].tv_sec; + times[1].tv_nsec = tvp[1].tv_usec * 1000; + } else { + times = NULL; + } + + return utimensat(AT_FDCWD, file, times, 0); +} + +#elif defined __NR_utimes _syscall2(int, utimes, const char *, file, const struct timeval *, tvp) #elif defined __NR_utime # define __need_NULL @@ -31,6 +50,7 @@ int utimes(const char *file, const struct timeval tvp[2]) return utime(file, times); } #endif + #if defined __NR_utimes || defined __NR_utime libc_hidden_def(utimes) #endif |