support linux kernel apis (new archs) with old syscalls removed
[musl] / src / stat / futimesat.c
index dbefc84..b4eea1d 100644 (file)
@@ -1,10 +1,23 @@
 #define _GNU_SOURCE
 #include <sys/time.h>
+#include <sys/stat.h>
+#include <errno.h>
 #include "syscall.h"
+#include "libc.h"
 
-#ifdef SYS_futimesat
-int futimesat(int dirfd, const char *pathname, const struct timeval times[2])
+int __futimesat(int dirfd, const char *pathname, const struct timeval times[2])
 {
-       return syscall(SYS_futimesat, dirfd, pathname, times);
+       struct timespec ts[2];
+       if (times) {
+               int i;
+               for (i=0; i<2; i++) {
+                       if (times[i].tv_usec >= 1000000ULL)
+                               return __syscall_ret(-EINVAL);
+                       ts[i].tv_sec = times[i].tv_sec;
+                       ts[i].tv_nsec = times[i].tv_usec * 1000;
+               }
+       }
+       return utimensat(dirfd, pathname, times ? ts : 0, 0);
 }
-#endif
+
+weak_alias(__futimesat, futimesat);