diff options
| author | 2017-03-10 22:43:26 -0600 | |
|---|---|---|
| committer | 2017-04-03 10:19:42 -0500 | |
| commit | 7ca9dedfd64fcbc91ad592a7e2e4acc3404ba94b (patch) | |
| tree | 4604ca5f7c8752bb653950eab9dd28ca185c3f35 | |
| parent | Merge pull request #2648 from mtheall/master (diff) | |
| download | yuzu-7ca9dedfd64fcbc91ad592a7e2e4acc3404ba94b.tar.gz yuzu-7ca9dedfd64fcbc91ad592a7e2e4acc3404ba94b.tar.xz yuzu-7ca9dedfd64fcbc91ad592a7e2e4acc3404ba94b.zip | |
error conversion fixes for soc_u
| -rw-r--r-- | src/core/hle/service/soc_u.cpp | 71 |
1 files changed, 32 insertions, 39 deletions
diff --git a/src/core/hle/service/soc_u.cpp b/src/core/hle/service/soc_u.cpp index dcc5c3c90..530614e6f 100644 --- a/src/core/hle/service/soc_u.cpp +++ b/src/core/hle/service/soc_u.cpp | |||
| @@ -362,18 +362,18 @@ static void Socket(Interface* self) { | |||
| 362 | return; | 362 | return; |
| 363 | } | 363 | } |
| 364 | 364 | ||
| 365 | u32 socket_handle = static_cast<u32>(::socket(domain, type, protocol)); | 365 | u32 ret = static_cast<u32>(::socket(domain, type, protocol)); |
| 366 | 366 | ||
| 367 | if ((s32)socket_handle != SOCKET_ERROR_VALUE) | 367 | if ((s32)ret != SOCKET_ERROR_VALUE) |
| 368 | open_sockets[socket_handle] = {socket_handle, true}; | 368 | open_sockets[ret] = {ret, true}; |
| 369 | 369 | ||
| 370 | int result = 0; | 370 | int result = 0; |
| 371 | if ((s32)socket_handle == SOCKET_ERROR_VALUE) | 371 | if ((s32)ret == SOCKET_ERROR_VALUE) |
| 372 | result = TranslateError(GET_ERRNO); | 372 | ret = TranslateError(GET_ERRNO); |
| 373 | 373 | ||
| 374 | cmd_buffer[0] = IPC::MakeHeader(2, 2, 0); | 374 | cmd_buffer[0] = IPC::MakeHeader(2, 2, 0); |
| 375 | cmd_buffer[1] = result; | 375 | cmd_buffer[1] = result; |
| 376 | cmd_buffer[2] = socket_handle; | 376 | cmd_buffer[2] = ret; |
| 377 | } | 377 | } |
| 378 | 378 | ||
| 379 | static void Bind(Interface* self) { | 379 | static void Bind(Interface* self) { |
| @@ -393,15 +393,15 @@ static void Bind(Interface* self) { | |||
| 393 | 393 | ||
| 394 | sockaddr sock_addr = CTRSockAddr::ToPlatform(ctr_sock_addr); | 394 | sockaddr sock_addr = CTRSockAddr::ToPlatform(ctr_sock_addr); |
| 395 | 395 | ||
| 396 | int res = ::bind(socket_handle, &sock_addr, std::max<u32>(sizeof(sock_addr), len)); | 396 | int ret = ::bind(socket_handle, &sock_addr, std::max<u32>(sizeof(sock_addr), len)); |
| 397 | 397 | ||
| 398 | int result = 0; | 398 | int result = 0; |
| 399 | if (res != 0) | 399 | if (ret != 0) |
| 400 | result = TranslateError(GET_ERRNO); | 400 | ret = TranslateError(GET_ERRNO); |
| 401 | 401 | ||
| 402 | cmd_buffer[0] = IPC::MakeHeader(5, 2, 0); | 402 | cmd_buffer[0] = IPC::MakeHeader(5, 2, 0); |
| 403 | cmd_buffer[1] = result; | 403 | cmd_buffer[1] = result; |
| 404 | cmd_buffer[2] = res; | 404 | cmd_buffer[2] = ret; |
| 405 | } | 405 | } |
| 406 | 406 | ||
| 407 | static void Fcntl(Interface* self) { | 407 | static void Fcntl(Interface* self) { |
| @@ -426,8 +426,7 @@ static void Fcntl(Interface* self) { | |||
| 426 | #else | 426 | #else |
| 427 | int ret = ::fcntl(socket_handle, F_GETFL, 0); | 427 | int ret = ::fcntl(socket_handle, F_GETFL, 0); |
| 428 | if (ret == SOCKET_ERROR_VALUE) { | 428 | if (ret == SOCKET_ERROR_VALUE) { |
| 429 | result = TranslateError(GET_ERRNO); | 429 | posix_ret = TranslateError(GET_ERRNO); |
| 430 | posix_ret = -1; | ||
| 431 | return; | 430 | return; |
| 432 | } | 431 | } |
| 433 | posix_ret = 0; | 432 | posix_ret = 0; |
| @@ -439,8 +438,7 @@ static void Fcntl(Interface* self) { | |||
| 439 | unsigned long tmp = (ctr_arg & 4 /* O_NONBLOCK */) ? 1 : 0; | 438 | unsigned long tmp = (ctr_arg & 4 /* O_NONBLOCK */) ? 1 : 0; |
| 440 | int ret = ioctlsocket(socket_handle, FIONBIO, &tmp); | 439 | int ret = ioctlsocket(socket_handle, FIONBIO, &tmp); |
| 441 | if (ret == SOCKET_ERROR_VALUE) { | 440 | if (ret == SOCKET_ERROR_VALUE) { |
| 442 | result = TranslateError(GET_ERRNO); | 441 | posix_ret = TranslateError(GET_ERRNO); |
| 443 | posix_ret = -1; | ||
| 444 | return; | 442 | return; |
| 445 | } | 443 | } |
| 446 | auto iter = open_sockets.find(socket_handle); | 444 | auto iter = open_sockets.find(socket_handle); |
| @@ -449,8 +447,7 @@ static void Fcntl(Interface* self) { | |||
| 449 | #else | 447 | #else |
| 450 | int flags = ::fcntl(socket_handle, F_GETFL, 0); | 448 | int flags = ::fcntl(socket_handle, F_GETFL, 0); |
| 451 | if (flags == SOCKET_ERROR_VALUE) { | 449 | if (flags == SOCKET_ERROR_VALUE) { |
| 452 | result = TranslateError(GET_ERRNO); | 450 | posix_ret = TranslateError(GET_ERRNO); |
| 453 | posix_ret = -1; | ||
| 454 | return; | 451 | return; |
| 455 | } | 452 | } |
| 456 | 453 | ||
| @@ -460,15 +457,13 @@ static void Fcntl(Interface* self) { | |||
| 460 | 457 | ||
| 461 | int ret = ::fcntl(socket_handle, F_SETFL, flags); | 458 | int ret = ::fcntl(socket_handle, F_SETFL, flags); |
| 462 | if (ret == SOCKET_ERROR_VALUE) { | 459 | if (ret == SOCKET_ERROR_VALUE) { |
| 463 | result = TranslateError(GET_ERRNO); | 460 | posix_ret = TranslateError(GET_ERRNO); |
| 464 | posix_ret = -1; | ||
| 465 | return; | 461 | return; |
| 466 | } | 462 | } |
| 467 | #endif | 463 | #endif |
| 468 | } else { | 464 | } else { |
| 469 | LOG_ERROR(Service_SOC, "Unsupported command (%d) in fcntl call", ctr_cmd); | 465 | LOG_ERROR(Service_SOC, "Unsupported command (%d) in fcntl call", ctr_cmd); |
| 470 | result = TranslateError(EINVAL); // TODO: Find the correct error | 466 | posix_ret = TranslateError(EINVAL); // TODO: Find the correct error |
| 471 | posix_ret = -1; | ||
| 472 | return; | 467 | return; |
| 473 | } | 468 | } |
| 474 | } | 469 | } |
| @@ -481,7 +476,7 @@ static void Listen(Interface* self) { | |||
| 481 | int ret = ::listen(socket_handle, backlog); | 476 | int ret = ::listen(socket_handle, backlog); |
| 482 | int result = 0; | 477 | int result = 0; |
| 483 | if (ret != 0) | 478 | if (ret != 0) |
| 484 | result = TranslateError(GET_ERRNO); | 479 | ret = TranslateError(GET_ERRNO); |
| 485 | 480 | ||
| 486 | cmd_buffer[0] = IPC::MakeHeader(3, 2, 0); | 481 | cmd_buffer[0] = IPC::MakeHeader(3, 2, 0); |
| 487 | cmd_buffer[1] = result; | 482 | cmd_buffer[1] = result; |
| @@ -504,7 +499,7 @@ static void Accept(Interface* self) { | |||
| 504 | 499 | ||
| 505 | int result = 0; | 500 | int result = 0; |
| 506 | if ((s32)ret == SOCKET_ERROR_VALUE) { | 501 | if ((s32)ret == SOCKET_ERROR_VALUE) { |
| 507 | result = TranslateError(GET_ERRNO); | 502 | ret = TranslateError(GET_ERRNO); |
| 508 | } else { | 503 | } else { |
| 509 | CTRSockAddr ctr_addr = CTRSockAddr::FromPlatform(addr); | 504 | CTRSockAddr ctr_addr = CTRSockAddr::FromPlatform(addr); |
| 510 | Memory::WriteBlock(cmd_buffer[0x104 >> 2], &ctr_addr, sizeof(ctr_addr)); | 505 | Memory::WriteBlock(cmd_buffer[0x104 >> 2], &ctr_addr, sizeof(ctr_addr)); |
| @@ -545,7 +540,7 @@ static void Close(Interface* self) { | |||
| 545 | 540 | ||
| 546 | int result = 0; | 541 | int result = 0; |
| 547 | if (ret != 0) | 542 | if (ret != 0) |
| 548 | result = TranslateError(GET_ERRNO); | 543 | ret = TranslateError(GET_ERRNO); |
| 549 | 544 | ||
| 550 | cmd_buffer[2] = ret; | 545 | cmd_buffer[2] = ret; |
| 551 | cmd_buffer[1] = result; | 546 | cmd_buffer[1] = result; |
| @@ -589,7 +584,7 @@ static void SendTo(Interface* self) { | |||
| 589 | 584 | ||
| 590 | int result = 0; | 585 | int result = 0; |
| 591 | if (ret == SOCKET_ERROR_VALUE) | 586 | if (ret == SOCKET_ERROR_VALUE) |
| 592 | result = TranslateError(GET_ERRNO); | 587 | ret = TranslateError(GET_ERRNO); |
| 593 | 588 | ||
| 594 | cmd_buffer[2] = ret; | 589 | cmd_buffer[2] = ret; |
| 595 | cmd_buffer[1] = result; | 590 | cmd_buffer[1] = result; |
| @@ -638,7 +633,7 @@ static void RecvFrom(Interface* self) { | |||
| 638 | int result = 0; | 633 | int result = 0; |
| 639 | int total_received = ret; | 634 | int total_received = ret; |
| 640 | if (ret == SOCKET_ERROR_VALUE) { | 635 | if (ret == SOCKET_ERROR_VALUE) { |
| 641 | result = TranslateError(GET_ERRNO); | 636 | ret = TranslateError(GET_ERRNO); |
| 642 | total_received = 0; | 637 | total_received = 0; |
| 643 | } else { | 638 | } else { |
| 644 | // Write only the data we received to avoid overwriting parts of the buffer with zeros | 639 | // Write only the data we received to avoid overwriting parts of the buffer with zeros |
| @@ -673,7 +668,7 @@ static void Poll(Interface* self) { | |||
| 673 | std::vector<pollfd> platform_pollfd(nfds); | 668 | std::vector<pollfd> platform_pollfd(nfds); |
| 674 | std::transform(ctr_fds.begin(), ctr_fds.end(), platform_pollfd.begin(), CTRPollFD::ToPlatform); | 669 | std::transform(ctr_fds.begin(), ctr_fds.end(), platform_pollfd.begin(), CTRPollFD::ToPlatform); |
| 675 | 670 | ||
| 676 | const int ret = ::poll(platform_pollfd.data(), nfds, timeout); | 671 | int ret = ::poll(platform_pollfd.data(), nfds, timeout); |
| 677 | 672 | ||
| 678 | // Now update the output pollfd structure | 673 | // Now update the output pollfd structure |
| 679 | std::transform(platform_pollfd.begin(), platform_pollfd.end(), ctr_fds.begin(), | 674 | std::transform(platform_pollfd.begin(), platform_pollfd.end(), ctr_fds.begin(), |
| @@ -683,7 +678,7 @@ static void Poll(Interface* self) { | |||
| 683 | 678 | ||
| 684 | int result = 0; | 679 | int result = 0; |
| 685 | if (ret == SOCKET_ERROR_VALUE) | 680 | if (ret == SOCKET_ERROR_VALUE) |
| 686 | result = TranslateError(GET_ERRNO); | 681 | ret = TranslateError(GET_ERRNO); |
| 687 | 682 | ||
| 688 | cmd_buffer[1] = result; | 683 | cmd_buffer[1] = result; |
| 689 | cmd_buffer[2] = ret; | 684 | cmd_buffer[2] = ret; |
| @@ -710,7 +705,7 @@ static void GetSockName(Interface* self) { | |||
| 710 | 705 | ||
| 711 | int result = 0; | 706 | int result = 0; |
| 712 | if (ret != 0) | 707 | if (ret != 0) |
| 713 | result = TranslateError(GET_ERRNO); | 708 | ret = TranslateError(GET_ERRNO); |
| 714 | 709 | ||
| 715 | cmd_buffer[2] = ret; | 710 | cmd_buffer[2] = ret; |
| 716 | cmd_buffer[1] = result; | 711 | cmd_buffer[1] = result; |
| @@ -724,7 +719,7 @@ static void Shutdown(Interface* self) { | |||
| 724 | int ret = ::shutdown(socket_handle, how); | 719 | int ret = ::shutdown(socket_handle, how); |
| 725 | int result = 0; | 720 | int result = 0; |
| 726 | if (ret != 0) | 721 | if (ret != 0) |
| 727 | result = TranslateError(GET_ERRNO); | 722 | ret = TranslateError(GET_ERRNO); |
| 728 | cmd_buffer[2] = ret; | 723 | cmd_buffer[2] = ret; |
| 729 | cmd_buffer[1] = result; | 724 | cmd_buffer[1] = result; |
| 730 | } | 725 | } |
| @@ -750,7 +745,7 @@ static void GetPeerName(Interface* self) { | |||
| 750 | 745 | ||
| 751 | int result = 0; | 746 | int result = 0; |
| 752 | if (ret != 0) | 747 | if (ret != 0) |
| 753 | result = TranslateError(GET_ERRNO); | 748 | ret = TranslateError(GET_ERRNO); |
| 754 | 749 | ||
| 755 | cmd_buffer[2] = ret; | 750 | cmd_buffer[2] = ret; |
| 756 | cmd_buffer[1] = result; | 751 | cmd_buffer[1] = result; |
| @@ -777,7 +772,7 @@ static void Connect(Interface* self) { | |||
| 777 | int ret = ::connect(socket_handle, &input_addr, sizeof(input_addr)); | 772 | int ret = ::connect(socket_handle, &input_addr, sizeof(input_addr)); |
| 778 | int result = 0; | 773 | int result = 0; |
| 779 | if (ret != 0) | 774 | if (ret != 0) |
| 780 | result = TranslateError(GET_ERRNO); | 775 | ret = TranslateError(GET_ERRNO); |
| 781 | 776 | ||
| 782 | cmd_buffer[0] = IPC::MakeHeader(6, 2, 0); | 777 | cmd_buffer[0] = IPC::MakeHeader(6, 2, 0); |
| 783 | cmd_buffer[1] = result; | 778 | cmd_buffer[1] = result; |
| @@ -815,7 +810,7 @@ static void GetSockOpt(Interface* self) { | |||
| 815 | int optname = TranslateSockOpt(cmd_buffer[3]); | 810 | int optname = TranslateSockOpt(cmd_buffer[3]); |
| 816 | socklen_t optlen = (socklen_t)cmd_buffer[4]; | 811 | socklen_t optlen = (socklen_t)cmd_buffer[4]; |
| 817 | 812 | ||
| 818 | int ret = -1; | 813 | int ret = 0; |
| 819 | int err = 0; | 814 | int err = 0; |
| 820 | 815 | ||
| 821 | if (optname < 0) { | 816 | if (optname < 0) { |
| @@ -830,9 +825,8 @@ static void GetSockOpt(Interface* self) { | |||
| 830 | // >> 2 = convert to u32 offset instead of byte offset (cmd_buffer = u32*) | 825 | // >> 2 = convert to u32 offset instead of byte offset (cmd_buffer = u32*) |
| 831 | char* optval = reinterpret_cast<char*>(Memory::GetPointer(cmd_buffer[0x104 >> 2])); | 826 | char* optval = reinterpret_cast<char*>(Memory::GetPointer(cmd_buffer[0x104 >> 2])); |
| 832 | 827 | ||
| 833 | ret = ::getsockopt(socket_handle, level, optname, optval, &optlen); | 828 | err = ::getsockopt(socket_handle, level, optname, optval, &optlen); |
| 834 | err = 0; | 829 | if (err == SOCKET_ERROR_VALUE) { |
| 835 | if (ret == SOCKET_ERROR_VALUE) { | ||
| 836 | err = TranslateError(GET_ERRNO); | 830 | err = TranslateError(GET_ERRNO); |
| 837 | } | 831 | } |
| 838 | } | 832 | } |
| @@ -849,7 +843,7 @@ static void SetSockOpt(Interface* self) { | |||
| 849 | u32 level = cmd_buffer[2]; | 843 | u32 level = cmd_buffer[2]; |
| 850 | int optname = TranslateSockOpt(cmd_buffer[3]); | 844 | int optname = TranslateSockOpt(cmd_buffer[3]); |
| 851 | 845 | ||
| 852 | int ret = -1; | 846 | int ret = 0; |
| 853 | int err = 0; | 847 | int err = 0; |
| 854 | 848 | ||
| 855 | if (optname < 0) { | 849 | if (optname < 0) { |
| @@ -862,9 +856,8 @@ static void SetSockOpt(Interface* self) { | |||
| 862 | socklen_t optlen = static_cast<socklen_t>(cmd_buffer[4]); | 856 | socklen_t optlen = static_cast<socklen_t>(cmd_buffer[4]); |
| 863 | const char* optval = reinterpret_cast<const char*>(Memory::GetPointer(cmd_buffer[8])); | 857 | const char* optval = reinterpret_cast<const char*>(Memory::GetPointer(cmd_buffer[8])); |
| 864 | 858 | ||
| 865 | ret = static_cast<u32>(::setsockopt(socket_handle, level, optname, optval, optlen)); | 859 | err = static_cast<u32>(::setsockopt(socket_handle, level, optname, optval, optlen)); |
| 866 | err = 0; | 860 | if (err == SOCKET_ERROR_VALUE) { |
| 867 | if (ret == SOCKET_ERROR_VALUE) { | ||
| 868 | err = TranslateError(GET_ERRNO); | 861 | err = TranslateError(GET_ERRNO); |
| 869 | } | 862 | } |
| 870 | } | 863 | } |