OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <sys/types.h> // Include something that will define __GLIBC__. | 5 #include <sys/types.h> // Include something that will define __GLIBC__. |
6 | 6 |
7 // The entire file is wrapped in this #if. We do this so this .cc file can be | 7 // The entire file is wrapped in this #if. We do this so this .cc file can be |
8 // compiled, even on a non-glibc build. | 8 // compiled, even on a non-glibc build. |
9 #if defined(__native_client__) && defined(__GLIBC__) | 9 #if defined(__native_client__) && defined(__GLIBC__) |
10 | 10 |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 | 318 |
319 int WRAP(write)(int fd, const void* buf, size_t count, size_t* nwrote) { | 319 int WRAP(write)(int fd, const void* buf, size_t count, size_t* nwrote) { |
320 ssize_t signed_nwrote = ki_write(fd, buf, count); | 320 ssize_t signed_nwrote = ki_write(fd, buf, count); |
321 *nwrote = static_cast<size_t>(signed_nwrote); | 321 *nwrote = static_cast<size_t>(signed_nwrote); |
322 RTN_ERRNO_IF(signed_nwrote < 0); | 322 RTN_ERRNO_IF(signed_nwrote < 0); |
323 return 0; | 323 return 0; |
324 } | 324 } |
325 | 325 |
326 int WRAP(accept)(int sockfd, struct sockaddr* addr, | 326 int WRAP(accept)(int sockfd, struct sockaddr* addr, |
327 socklen_t* addrlen, int *sd) { | 327 socklen_t* addrlen, int *sd) { |
328 int result = ki_accept(sockfd, addr, addrlen); | 328 *sd = ki_accept(sockfd, addr, addrlen); |
329 if (result < 0) { | 329 RTN_ERRNO_IF(*sd < 0); |
330 *sd = -1; | 330 return 0; |
331 return errno; | |
332 } else { | |
333 *sd = result; | |
334 return 0; | |
335 } | |
336 } | 331 } |
337 | 332 |
338 int WRAP(bind)(int sockfd, const struct sockaddr* addr, socklen_t addrlen) { | 333 int WRAP(bind)(int sockfd, const struct sockaddr* addr, socklen_t addrlen) { |
339 return (ki_bind(sockfd, addr, addrlen) < 0) ? errno : 0; | 334 RTN_ERRNO_IF(ki_bind(sockfd, addr, addrlen) < 0); |
| 335 return 0; |
340 } | 336 } |
341 | 337 |
342 int WRAP(connect)(int sockfd, const struct sockaddr* addr, socklen_t addrlen) { | 338 int WRAP(connect)(int sockfd, const struct sockaddr* addr, socklen_t addrlen) { |
343 return (ki_connect(sockfd, addr, addrlen) < 0) ? errno : 0; | 339 RTN_ERRNO_IF(ki_connect(sockfd, addr, addrlen) < 0); |
| 340 return 0; |
344 } | 341 } |
345 | 342 |
346 int WRAP(getpeername)(int sockfd, struct sockaddr* addr, socklen_t* addrlen) { | 343 int WRAP(getpeername)(int sockfd, struct sockaddr* addr, socklen_t* addrlen) { |
347 return (ki_getpeername(sockfd, addr, addrlen) < 0) ? errno : 0; | 344 RTN_ERRNO_IF(ki_getpeername(sockfd, addr, addrlen) < 0); |
| 345 return 0; |
348 } | 346 } |
349 | 347 |
350 int WRAP(getsockname)(int sockfd, struct sockaddr* addr, socklen_t* addrlen) { | 348 int WRAP(getsockname)(int sockfd, struct sockaddr* addr, socklen_t* addrlen) { |
351 return (ki_getsockname(sockfd, addr, addrlen) < 0) ? errno : 0; | 349 RTN_ERRNO_IF(ki_getsockname(sockfd, addr, addrlen) < 0); |
| 350 return 0; |
352 } | 351 } |
353 | 352 |
354 int WRAP(getsockopt)(int sockfd, int level, int optname, void* optval, | 353 int WRAP(getsockopt)(int sockfd, int level, int optname, void* optval, |
355 socklen_t* optlen) { | 354 socklen_t* optlen) { |
356 return (ki_getsockopt( | 355 RTN_ERRNO_IF(ki_getsockopt(sockfd, level, optname, optval, optlen) < 0); |
357 sockfd, level, optname, optval, optlen) < 0) ? errno : 0; | 356 return 0; |
358 } | 357 } |
359 | 358 |
360 int WRAP(setsockopt)(int sockfd, int level, int optname, const void* optval, | 359 int WRAP(setsockopt)(int sockfd, int level, int optname, const void* optval, |
361 socklen_t optlen) { | 360 socklen_t optlen) { |
362 return (ki_setsockopt( | 361 RTN_ERRNO_IF(ki_setsockopt(sockfd, level, optname, optval, optlen) < 0); |
363 sockfd, level, optname, optval, optlen) < 0) ? errno : 0; | 362 return 0; |
364 } | 363 } |
365 | 364 |
366 int WRAP(listen)(int sockfd, int backlog) { | 365 int WRAP(listen)(int sockfd, int backlog) { |
367 return (ki_listen(sockfd, backlog) < 0) ? errno : 0; | 366 RTN_ERRNO_IF(ki_listen(sockfd, backlog) < 0); |
| 367 return 0; |
368 } | 368 } |
369 | 369 |
370 int WRAP(recv)(int sockfd, void* buf, size_t len, int flags, int* count) { | 370 int WRAP(recv)(int sockfd, void* buf, size_t len, int flags, int* count) { |
371 ssize_t signed_nread = ki_recv(sockfd, buf, len, flags); | 371 ssize_t signed_nread = ki_recv(sockfd, buf, len, flags); |
372 *count = static_cast<int>(signed_nread); | 372 *count = static_cast<int>(signed_nread); |
373 return (signed_nread < 0) ? errno : 0; | 373 RTN_ERRNO_IF(signed_nread < 0); |
| 374 return 0; |
374 } | 375 } |
375 | 376 |
376 int WRAP(recvfrom)(int sockfd, void* buf, size_t len, int flags, | 377 int WRAP(recvfrom)(int sockfd, void* buf, size_t len, int flags, |
377 struct sockaddr* addr, socklen_t* addrlen, int* count) { | 378 struct sockaddr* addr, socklen_t* addrlen, int* count) { |
378 ssize_t signed_nread = ki_recvfrom(sockfd, buf, len, flags, addr, addrlen); | 379 ssize_t signed_nread = ki_recvfrom(sockfd, buf, len, flags, addr, addrlen); |
379 *count = static_cast<int>(signed_nread); | 380 *count = static_cast<int>(signed_nread); |
380 return (signed_nread < 0) ? errno : 0; | 381 RTN_ERRNO_IF(signed_nread < 0); |
| 382 return 0; |
381 } | 383 } |
382 | 384 |
383 int WRAP(recvmsg)(int sockfd, struct msghdr* msg, int flags, int *count) { | 385 int WRAP(recvmsg)(int sockfd, struct msghdr* msg, int flags, int *count) { |
384 ssize_t signed_nread = ki_recvmsg(sockfd, msg, flags); | 386 ssize_t signed_nread = ki_recvmsg(sockfd, msg, flags); |
385 *count = static_cast<int>(signed_nread); | 387 *count = static_cast<int>(signed_nread); |
386 return (signed_nread < 0) ? errno : 0; | 388 RTN_ERRNO_IF(signed_nread < 0); |
| 389 return 0; |
387 } | 390 } |
388 | 391 |
389 ssize_t WRAP(send)(int sockfd, const void* buf, size_t len, int flags, | 392 ssize_t WRAP(send)(int sockfd, const void* buf, size_t len, int flags, |
390 int* count) { | 393 int* count) { |
391 ssize_t signed_nread = ki_send(sockfd, buf, len, flags); | 394 ssize_t signed_nread = ki_send(sockfd, buf, len, flags); |
392 *count = static_cast<int>(signed_nread); | 395 *count = static_cast<int>(signed_nread); |
393 return (signed_nread < 0) ? errno : 0; | 396 RTN_ERRNO_IF(signed_nread < 0); |
| 397 return 0; |
394 } | 398 } |
395 | 399 |
396 ssize_t WRAP(sendto)(int sockfd, const void* buf, size_t len, int flags, | 400 ssize_t WRAP(sendto)(int sockfd, const void* buf, size_t len, int flags, |
397 const struct sockaddr* addr, socklen_t addrlen, | 401 const struct sockaddr* addr, socklen_t addrlen, |
398 int* count) { | 402 int* count) { |
399 ssize_t signed_nread = ki_sendto(sockfd, buf, len, flags, addr, addrlen); | 403 ssize_t signed_nread = ki_sendto(sockfd, buf, len, flags, addr, addrlen); |
400 *count = static_cast<int>(signed_nread); | 404 *count = static_cast<int>(signed_nread); |
401 return (signed_nread < 0) ? errno : 0; | 405 RTN_ERRNO_IF(signed_nread < 0); |
| 406 return 0; |
402 } | 407 } |
403 | 408 |
404 ssize_t WRAP(sendmsg)(int sockfd, const struct msghdr* msg, int flags, | 409 ssize_t WRAP(sendmsg)(int sockfd, const struct msghdr* msg, int flags, |
405 int* count) { | 410 int* count) { |
406 ssize_t signed_nread = ki_sendmsg(sockfd, msg, flags); | 411 ssize_t signed_nread = ki_sendmsg(sockfd, msg, flags); |
407 *count = static_cast<int>(signed_nread); | 412 *count = static_cast<int>(signed_nread); |
408 return (signed_nread < 0) ? errno : 0; | 413 RTN_ERRNO_IF(signed_nread < 0); |
| 414 return 0; |
409 } | 415 } |
410 | 416 |
411 int WRAP(shutdown)(int sockfd, int how) { | 417 int WRAP(shutdown)(int sockfd, int how) { |
412 return (ki_shutdown(sockfd, how) < 0) ? errno : 0; | 418 RTN_ERRNO_IF(ki_shutdown(sockfd, how) < 0); |
| 419 return 0; |
413 } | 420 } |
414 | 421 |
415 int WRAP(socket)(int domain, int type, int protocol, int* sd) { | 422 int WRAP(socket)(int domain, int type, int protocol, int* sd) { |
416 int result = ki_socket(domain, type, protocol); | 423 *sd = ki_socket(domain, type, protocol); |
417 if (result < 0) { | 424 RTN_ERRNO_IF(*sd < 0); |
418 *sd = -1; | 425 return 0; |
419 return errno; | |
420 } else { | |
421 *sd = result; | |
422 return 0; | |
423 } | |
424 } | 426 } |
425 | 427 |
426 int WRAP(socketpair)(int domain, int type, int protocol, int* sv) { | 428 int WRAP(socketpair)(int domain, int type, int protocol, int* sv) { |
427 return (ki_socketpair(domain, type, protocol, sv) < 0) ? errno : 0; | 429 RTN_ERRNO_IF(ki_socketpair(domain, type, protocol, sv) < 0); |
| 430 return 0; |
428 } | 431 } |
429 | 432 |
430 static void assign_real_pointers() { | 433 static void assign_real_pointers() { |
431 static bool assigned = false; | 434 static bool assigned = false; |
432 if (!assigned) { | 435 if (!assigned) { |
433 EXPAND_SYMBOL_LIST_OPERATION(ASSIGN_REAL_PTR) | 436 EXPAND_SYMBOL_LIST_OPERATION(ASSIGN_REAL_PTR) |
434 assigned = true; | 437 assigned = true; |
435 } | 438 } |
436 } | 439 } |
437 | 440 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
554 if (s_wrapped) { | 557 if (s_wrapped) { |
555 LOG_TRACE("kernel_wrap_uninit"); | 558 LOG_TRACE("kernel_wrap_uninit"); |
556 EXPAND_SYMBOL_LIST_OPERATION(USE_REAL) | 559 EXPAND_SYMBOL_LIST_OPERATION(USE_REAL) |
557 s_wrapped = false; | 560 s_wrapped = false; |
558 } | 561 } |
559 } | 562 } |
560 | 563 |
561 EXTERN_C_END | 564 EXTERN_C_END |
562 | 565 |
563 #endif // defined(__native_client__) && defined(__GLIBC__) | 566 #endif // defined(__native_client__) && defined(__GLIBC__) |
OLD | NEW |