From 80dc2ed052dc9a52080ed04bd946f3a537492f24 Mon Sep 17 00:00:00 2001 From: Markos Chandras Date: Wed, 10 Oct 2012 16:06:57 +0100 Subject: utimes: Use utimensat if arch does not have the utimes syscall Signed-off-by: Markos Chandras Signed-off-by: Bernhard Reutner-Fischer --- libc/sysdeps/linux/common/utimes.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'libc/sysdeps') 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 #include -#ifdef __NR_utimes +#if defined __NR_utimensat && !defined __NR_utimes +# include +# include +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 -- cgit v1.2.3