Index: native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc |
diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc b/native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc |
index 5e43c6c41737d0fb00f0a5ab4677a5679a5ac819..ed2ab0c404d9368089c6aa2afbca2f2edbeac3b1 100644 |
--- a/native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc |
+++ b/native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc |
@@ -157,7 +157,17 @@ EXTERN_C_BEGIN |
OP(getsockopt); \ |
OP(setsockopt); \ |
OP(socketpair); \ |
- OP(shutdown); |
+ OP(shutdown); \ |
+ \ |
+ OP(access); \ |
+ OP(unlink); \ |
+ OP(fchdir); \ |
+ OP(fchmod); \ |
+ OP(fsync); \ |
+ OP(fdatasync); \ |
+ OP(lstat); \ |
+ OP(readlink); \ |
+ OP(utimes); |
// TODO(bradnelson): Add these as well. |
// OP(epoll_create); |
@@ -166,18 +176,15 @@ EXTERN_C_BEGIN |
// OP(epoll_pwait); |
// OP(ppoll); |
// OP(pselect); |
-// |
EXPAND_SYMBOL_LIST_OPERATION(DECLARE_REAL_PTR); |
int WRAP(chdir)(const char* pathname) { |
- RTN_ERRNO_IF(ki_chdir(pathname) < 0); |
- return 0; |
+ ERRNO_RTN(ki_chdir(pathname)); |
} |
int WRAP(close)(int fd) { |
- RTN_ERRNO_IF(ki_close(fd) < 0); |
- return 0; |
+ ERRNO_RTN(ki_close(fd)); |
} |
int WRAP(dup)(int fd, int* newfd) NOTHROW { |
@@ -187,8 +194,7 @@ int WRAP(dup)(int fd, int* newfd) NOTHROW { |
} |
int WRAP(dup2)(int fd, int newfd) NOTHROW { |
- RTN_ERRNO_IF(ki_dup2(fd, newfd) < 0); |
- return 0; |
+ ERRNO_RTN(ki_dup2(fd, newfd)); |
} |
void WRAP(exit)(int status) { |
@@ -320,6 +326,53 @@ int WRAP(stat)(const char* pathname, struct nacl_abi_stat* nacl_buf) { |
return 0; |
} |
+int WRAP(lstat)(const char* pathname, struct nacl_abi_stat* nacl_buf) { |
+ struct stat buf; |
+ memset(&buf, 0, sizeof(struct stat)); |
+ int res = ki_lstat(pathname, &buf); |
+ RTN_ERRNO_IF(res < 0); |
+ stat_to_nacl_stat(&buf, nacl_buf); |
+ return 0; |
+} |
+ |
+int WRAP(readlink)(const char* pathname, |
+ char* buf, |
+ size_t count, |
+ size_t* nread) { |
+ int rtn = ki_readlink(pathname, buf, count); |
+ RTN_ERRNO_IF(rtn < 0); |
+ *nread = rtn; |
+ return 0; |
+} |
+ |
+int WRAP(utimes)(const char *filename, const struct timeval *times) { |
+ ERRNO_RTN(ki_utimes(filename, times)); |
+} |
+ |
+int WRAP(access)(const char* pathname, int amode) { |
+ ERRNO_RTN(ki_access(pathname, amode)); |
+} |
+ |
+int WRAP(unlink)(const char* pathname) { |
+ ERRNO_RTN(ki_unlink(pathname)); |
+} |
+ |
+int WRAP(fchdir)(int fd) { |
+ ERRNO_RTN(ki_fchdir(fd)); |
+} |
+ |
+int WRAP(fchmod)(int fd, mode_t mode) { |
+ ERRNO_RTN(ki_fchmod(fd, mode)); |
+} |
+ |
+int WRAP(fsync)(int fd) { |
+ ERRNO_RTN(ki_fsync(fd)); |
+} |
+ |
+int WRAP(fdatasync)(int fd) { |
+ ERRNO_RTN(ki_fdatasync(fd)); |
+} |
+ |
int WRAP(write)(int fd, const void* buf, size_t count, size_t* nwrote) { |
ssize_t signed_nwrote = ki_write(fd, buf, count); |
*nwrote = static_cast<size_t>(signed_nwrote); |
@@ -337,23 +390,19 @@ int WRAP(accept)(int sockfd, |
} |
int WRAP(bind)(int sockfd, const struct sockaddr* addr, socklen_t addrlen) { |
- RTN_ERRNO_IF(ki_bind(sockfd, addr, addrlen) < 0); |
- return 0; |
+ ERRNO_RTN(ki_bind(sockfd, addr, addrlen)); |
} |
int WRAP(connect)(int sockfd, const struct sockaddr* addr, socklen_t addrlen) { |
- RTN_ERRNO_IF(ki_connect(sockfd, addr, addrlen) < 0); |
- return 0; |
+ ERRNO_RTN(ki_connect(sockfd, addr, addrlen)); |
} |
int WRAP(getpeername)(int sockfd, struct sockaddr* addr, socklen_t* addrlen) { |
- RTN_ERRNO_IF(ki_getpeername(sockfd, addr, addrlen) < 0); |
- return 0; |
+ ERRNO_RTN(ki_getpeername(sockfd, addr, addrlen)); |
} |
int WRAP(getsockname)(int sockfd, struct sockaddr* addr, socklen_t* addrlen) { |
- RTN_ERRNO_IF(ki_getsockname(sockfd, addr, addrlen) < 0); |
- return 0; |
+ ERRNO_RTN(ki_getsockname(sockfd, addr, addrlen)); |
} |
int WRAP(getsockopt)(int sockfd, |
@@ -361,8 +410,7 @@ int WRAP(getsockopt)(int sockfd, |
int optname, |
void* optval, |
socklen_t* optlen) { |
- RTN_ERRNO_IF(ki_getsockopt(sockfd, level, optname, optval, optlen) < 0); |
- return 0; |
+ ERRNO_RTN(ki_getsockopt(sockfd, level, optname, optval, optlen)); |
} |
int WRAP(setsockopt)(int sockfd, |
@@ -370,13 +418,11 @@ int WRAP(setsockopt)(int sockfd, |
int optname, |
const void* optval, |
socklen_t optlen) { |
- RTN_ERRNO_IF(ki_setsockopt(sockfd, level, optname, optval, optlen) < 0); |
- return 0; |
+ ERRNO_RTN(ki_setsockopt(sockfd, level, optname, optval, optlen)); |
} |
int WRAP(listen)(int sockfd, int backlog) { |
- RTN_ERRNO_IF(ki_listen(sockfd, backlog) < 0); |
- return 0; |
+ ERRNO_RTN(ki_listen(sockfd, backlog)); |
} |
int WRAP(recv)(int sockfd, void* buf, size_t len, int flags, int* count) { |