Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Unified Diff: native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc

Issue 23456045: [NaCl SDK] nacl_io: Add initial support for getsockopt (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc
diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc b/native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc
index f9171e29a6c0af2145a3864f6fc3fd618ec933e2..127bfecc57d35754973113222d46c633667f525a 100644
--- a/native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc
+++ b/native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc
@@ -1014,7 +1014,6 @@ int KernelProxy::poll(struct pollfd *fds, nfds_t nfds, int timeout) {
}
-
// Socket Functions
int KernelProxy::accept(int fd, struct sockaddr* addr, socklen_t* len) {
if (NULL == addr || NULL == len) {
@@ -1111,10 +1110,10 @@ int KernelProxy::getsockname(int fd, struct sockaddr* addr, socklen_t* len) {
}
int KernelProxy::getsockopt(int fd,
- int lvl,
- int optname,
- void* optval,
- socklen_t* len) {
+ int lvl,
+ int optname,
+ void* optval,
+ socklen_t* len) {
if (NULL == optval || NULL == len) {
errno = EFAULT;
return -1;
@@ -1124,8 +1123,13 @@ int KernelProxy::getsockopt(int fd,
if (AcquireSocketHandle(fd, &handle) == -1)
return -1;
- errno = EINVAL;
- return -1;
+ Error err = handle->socket_node()->GetSockOpt(lvl, optname, optval, len);
+ if (err != 0) {
+ errno = err;
+ return -1;
+ }
+
+ return 0;
}
int KernelProxy::listen(int fd, int backlog) {
@@ -1289,8 +1293,13 @@ int KernelProxy::setsockopt(int fd,
if (AcquireSocketHandle(fd, &handle) == -1)
return -1;
- errno = EINVAL;
- return -1;
+ Error err = handle->socket_node()->SetSockOpt(lvl, optname, optval, len);
+ if (err != 0) {
+ errno = err;
+ return -1;
+ }
+
+ return 0;
}
int KernelProxy::shutdown(int fd, int how) {
@@ -1329,13 +1338,14 @@ int KernelProxy::socket(int domain, int type, int protocol) {
}
ScopedMountNode node(sock);
- if (sock->Init(S_IREAD | S_IWRITE) == 0) {
- ScopedKernelHandle handle(new KernelHandle(stream_mount_, node));
- return AllocateFD(handle);
+ Error rtn = sock->Init(S_IREAD | S_IWRITE);
+ if (rtn != 0) {
+ errno = rtn;
+ return -1;
}
- // If we failed to init, assume we don't have access.
- return EACCES;
+ ScopedKernelHandle handle(new KernelHandle(stream_mount_, node));
+ return AllocateFD(handle);
}
int KernelProxy::socketpair(int domain, int type, int protocol, int* sv) {

Powered by Google App Engine
This is Rietveld 408576698