| Index: native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc
|
| diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc b/native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc
|
| index 218c76fc10514fae396dc54bca8192f80f189385..392f440e3bd5a94535c2291cd3e82181fd412a89 100644
|
| --- a/native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc
|
| +++ b/native_client_sdk/src/libraries/nacl_io/kernel_intercept.cc
|
| @@ -14,6 +14,7 @@
|
| #include "nacl_io/log.h"
|
| #include "nacl_io/osmman.h"
|
| #include "nacl_io/ossocket.h"
|
| +#include "nacl_io/ostime.h"
|
| #include "nacl_io/pepper_interface.h"
|
| #include "nacl_io/real_pepper_interface.h"
|
|
|
| @@ -328,7 +329,24 @@ int ki_readlink(const char* path, char* buf, size_t count) {
|
|
|
| int ki_utimes(const char* path, const struct timeval times[2]) {
|
| ON_NOSYS_RETURN(-1);
|
| - return s_state.kp->utimes(path, times);
|
| + // Implement in terms of utimens.
|
| + struct timespec ts[2];
|
| + ts[0].tv_sec = times[0].tv_sec;
|
| + ts[0].tv_nsec = times[0].tv_usec * 1000;
|
| + ts[1].tv_sec = times[1].tv_sec;
|
| + ts[1].tv_nsec = times[1].tv_usec * 1000;
|
| + return s_state.kp->utimens(path, ts);
|
| +}
|
| +
|
| +int ki_futimes(int fd, const struct timeval times[2]) {
|
| + ON_NOSYS_RETURN(-1);
|
| + // Implement in terms of futimens.
|
| + struct timespec ts[2];
|
| + ts[0].tv_sec = times[0].tv_sec;
|
| + ts[0].tv_nsec = times[0].tv_usec * 1000;
|
| + ts[1].tv_sec = times[1].tv_sec;
|
| + ts[1].tv_nsec = times[1].tv_usec * 1000;
|
| + return s_state.kp->futimens(fd, ts);
|
| }
|
|
|
| void* ki_mmap(void* addr,
|
| @@ -378,7 +396,18 @@ int ki_lchown(const char* path, uid_t owner, gid_t group) {
|
|
|
| int ki_utime(const char* filename, const struct utimbuf* times) {
|
| ON_NOSYS_RETURN(-1);
|
| - return s_state.kp->utime(filename, times);
|
| + // Implement in terms of utimens.
|
| + struct timespec ts[2];
|
| + ts[0].tv_sec = times->actime;
|
| + ts[0].tv_nsec = 0;
|
| + ts[1].tv_sec = times->modtime;
|
| + ts[1].tv_nsec = 0;
|
| + return s_state.kp->utimens(filename, ts);
|
| +}
|
| +
|
| +int ki_futimens(int fd, const struct timespec times[2]) {
|
| + ON_NOSYS_RETURN(-1);
|
| + return s_state.kp->futimens(fd, times);
|
| }
|
|
|
| int ki_poll(struct pollfd* fds, nfds_t nfds, int timeout) {
|
|
|