diff options
author | Markos Chandras <markos.chandras@imgtec.com> | 2012-10-10 16:06:57 +0100 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2013-02-20 13:45:11 +0100 |
commit | 80dc2ed052dc9a52080ed04bd946f3a537492f24 (patch) | |
tree | b221049782654c9d680ad0fad374560f9369b04e /libc/sysdeps | |
parent | 81b480369b905229c8dad41755c82aea0faca1e7 (diff) |
utimes: Use utimensat if arch does not have the utimes syscall
Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'libc/sysdeps')
-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 |