diff options
| author | 2020-12-09 03:52:20 -0300 | |
|---|---|---|
| committer | 2020-12-09 03:52:20 -0300 | |
| commit | e94dd7e2c4fc3f7ca2c15c01bdc301be2b8a4c1b (patch) | |
| tree | 4ecd8c67c12e99dd8935487f4044f311b1b8311b /src/core/hle | |
| parent | Merge pull request #5173 from lioncash/common-fs (diff) | |
| parent | network, sockets: Replace `POLL_IN`, `POLL_OUT`, etc. constants with an `enum... (diff) | |
| download | yuzu-e94dd7e2c4fc3f7ca2c15c01bdc301be2b8a4c1b.tar.gz yuzu-e94dd7e2c4fc3f7ca2c15c01bdc301be2b8a4c1b.tar.xz yuzu-e94dd7e2c4fc3f7ca2c15c01bdc301be2b8a4c1b.zip | |
Merge pull request #5142 from comex/xx-poll-events
network, sockets: Replace `POLL_IN`, `POLL_OUT`, etc. constants with an `enum class PollEvents`
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/service/sockets/bsd.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/service/sockets/sockets.h | 23 | ||||
| -rw-r--r-- | src/core/hle/service/sockets/sockets_translate.cpp | 50 | ||||
| -rw-r--r-- | src/core/hle/service/sockets/sockets_translate.h | 4 |
4 files changed, 45 insertions, 40 deletions
diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp index c6dc5304a..67b419503 100644 --- a/src/core/hle/service/sockets/bsd.cpp +++ b/src/core/hle/service/sockets/bsd.cpp | |||
| @@ -489,18 +489,18 @@ std::pair<s32, Errno> BSD::PollImpl(std::vector<u8>& write_buffer, std::vector<u | |||
| 489 | } | 489 | } |
| 490 | 490 | ||
| 491 | for (PollFD& pollfd : fds) { | 491 | for (PollFD& pollfd : fds) { |
| 492 | ASSERT(pollfd.revents == 0); | 492 | ASSERT(False(pollfd.revents)); |
| 493 | 493 | ||
| 494 | if (pollfd.fd > static_cast<s32>(MAX_FD) || pollfd.fd < 0) { | 494 | if (pollfd.fd > static_cast<s32>(MAX_FD) || pollfd.fd < 0) { |
| 495 | LOG_ERROR(Service, "File descriptor handle={} is invalid", pollfd.fd); | 495 | LOG_ERROR(Service, "File descriptor handle={} is invalid", pollfd.fd); |
| 496 | pollfd.revents = 0; | 496 | pollfd.revents = PollEvents{}; |
| 497 | return {0, Errno::SUCCESS}; | 497 | return {0, Errno::SUCCESS}; |
| 498 | } | 498 | } |
| 499 | 499 | ||
| 500 | const std::optional<FileDescriptor>& descriptor = file_descriptors[pollfd.fd]; | 500 | const std::optional<FileDescriptor>& descriptor = file_descriptors[pollfd.fd]; |
| 501 | if (!descriptor) { | 501 | if (!descriptor) { |
| 502 | LOG_ERROR(Service, "File descriptor handle={} is not allocated", pollfd.fd); | 502 | LOG_ERROR(Service, "File descriptor handle={} is not allocated", pollfd.fd); |
| 503 | pollfd.revents = POLL_NVAL; | 503 | pollfd.revents = PollEvents::Nval; |
| 504 | return {0, Errno::SUCCESS}; | 504 | return {0, Errno::SUCCESS}; |
| 505 | } | 505 | } |
| 506 | } | 506 | } |
| @@ -510,7 +510,7 @@ std::pair<s32, Errno> BSD::PollImpl(std::vector<u8>& write_buffer, std::vector<u | |||
| 510 | Network::PollFD result; | 510 | Network::PollFD result; |
| 511 | result.socket = file_descriptors[pollfd.fd]->socket.get(); | 511 | result.socket = file_descriptors[pollfd.fd]->socket.get(); |
| 512 | result.events = TranslatePollEventsToHost(pollfd.events); | 512 | result.events = TranslatePollEventsToHost(pollfd.events); |
| 513 | result.revents = 0; | 513 | result.revents = Network::PollEvents{}; |
| 514 | return result; | 514 | return result; |
| 515 | }); | 515 | }); |
| 516 | 516 | ||
diff --git a/src/core/hle/service/sockets/sockets.h b/src/core/hle/service/sockets/sockets.h index 89a410076..5a65ed2a9 100644 --- a/src/core/hle/service/sockets/sockets.h +++ b/src/core/hle/service/sockets/sockets.h | |||
| @@ -69,10 +69,22 @@ struct SockAddrIn { | |||
| 69 | std::array<u8, 8> zeroes; | 69 | std::array<u8, 8> zeroes; |
| 70 | }; | 70 | }; |
| 71 | 71 | ||
| 72 | enum class PollEvents : u16 { | ||
| 73 | // Using Pascal case because IN is a macro on Windows. | ||
| 74 | In = 1 << 0, | ||
| 75 | Pri = 1 << 1, | ||
| 76 | Out = 1 << 2, | ||
| 77 | Err = 1 << 3, | ||
| 78 | Hup = 1 << 4, | ||
| 79 | Nval = 1 << 5, | ||
| 80 | }; | ||
| 81 | |||
| 82 | DECLARE_ENUM_FLAG_OPERATORS(PollEvents); | ||
| 83 | |||
| 72 | struct PollFD { | 84 | struct PollFD { |
| 73 | s32 fd; | 85 | s32 fd; |
| 74 | u16 events; | 86 | PollEvents events; |
| 75 | u16 revents; | 87 | PollEvents revents; |
| 76 | }; | 88 | }; |
| 77 | 89 | ||
| 78 | struct Linger { | 90 | struct Linger { |
| @@ -80,13 +92,6 @@ struct Linger { | |||
| 80 | u32 linger; | 92 | u32 linger; |
| 81 | }; | 93 | }; |
| 82 | 94 | ||
| 83 | constexpr u16 POLL_IN = 0x01; | ||
| 84 | constexpr u16 POLL_PRI = 0x02; | ||
| 85 | constexpr u16 POLL_OUT = 0x04; | ||
| 86 | constexpr u16 POLL_ERR = 0x08; | ||
| 87 | constexpr u16 POLL_HUP = 0x10; | ||
| 88 | constexpr u16 POLL_NVAL = 0x20; | ||
| 89 | |||
| 90 | constexpr u32 FLAG_MSG_DONTWAIT = 0x80; | 95 | constexpr u32 FLAG_MSG_DONTWAIT = 0x80; |
| 91 | 96 | ||
| 92 | constexpr u32 FLAG_O_NONBLOCK = 0x800; | 97 | constexpr u32 FLAG_O_NONBLOCK = 0x800; |
diff --git a/src/core/hle/service/sockets/sockets_translate.cpp b/src/core/hle/service/sockets/sockets_translate.cpp index 6ddf3f6f9..c822d21b8 100644 --- a/src/core/hle/service/sockets/sockets_translate.cpp +++ b/src/core/hle/service/sockets/sockets_translate.cpp | |||
| @@ -89,43 +89,43 @@ Network::Protocol Translate(Type type, Protocol protocol) { | |||
| 89 | } | 89 | } |
| 90 | } | 90 | } |
| 91 | 91 | ||
| 92 | u16 TranslatePollEventsToHost(u32 flags) { | 92 | Network::PollEvents TranslatePollEventsToHost(PollEvents flags) { |
| 93 | u32 result = 0; | 93 | Network::PollEvents result{}; |
| 94 | const auto translate = [&result, &flags](u32 from, u32 to) { | 94 | const auto translate = [&result, &flags](PollEvents from, Network::PollEvents to) { |
| 95 | if ((flags & from) != 0) { | 95 | if (True(flags & from)) { |
| 96 | flags &= ~from; | 96 | flags &= ~from; |
| 97 | result |= to; | 97 | result |= to; |
| 98 | } | 98 | } |
| 99 | }; | 99 | }; |
| 100 | translate(POLL_IN, Network::POLL_IN); | 100 | translate(PollEvents::In, Network::PollEvents::In); |
| 101 | translate(POLL_PRI, Network::POLL_PRI); | 101 | translate(PollEvents::Pri, Network::PollEvents::Pri); |
| 102 | translate(POLL_OUT, Network::POLL_OUT); | 102 | translate(PollEvents::Out, Network::PollEvents::Out); |
| 103 | translate(POLL_ERR, Network::POLL_ERR); | 103 | translate(PollEvents::Err, Network::PollEvents::Err); |
| 104 | translate(POLL_HUP, Network::POLL_HUP); | 104 | translate(PollEvents::Hup, Network::PollEvents::Hup); |
| 105 | translate(POLL_NVAL, Network::POLL_NVAL); | 105 | translate(PollEvents::Nval, Network::PollEvents::Nval); |
| 106 | 106 | ||
| 107 | UNIMPLEMENTED_IF_MSG(flags != 0, "Unimplemented flags={}", flags); | 107 | UNIMPLEMENTED_IF_MSG((u16)flags != 0, "Unimplemented flags={}", (u16)flags); |
| 108 | return static_cast<u16>(result); | 108 | return result; |
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | u16 TranslatePollEventsToGuest(u32 flags) { | 111 | PollEvents TranslatePollEventsToGuest(Network::PollEvents flags) { |
| 112 | u32 result = 0; | 112 | PollEvents result{}; |
| 113 | const auto translate = [&result, &flags](u32 from, u32 to) { | 113 | const auto translate = [&result, &flags](Network::PollEvents from, PollEvents to) { |
| 114 | if ((flags & from) != 0) { | 114 | if (True(flags & from)) { |
| 115 | flags &= ~from; | 115 | flags &= ~from; |
| 116 | result |= to; | 116 | result |= to; |
| 117 | } | 117 | } |
| 118 | }; | 118 | }; |
| 119 | 119 | ||
| 120 | translate(Network::POLL_IN, POLL_IN); | 120 | translate(Network::PollEvents::In, PollEvents::In); |
| 121 | translate(Network::POLL_PRI, POLL_PRI); | 121 | translate(Network::PollEvents::Pri, PollEvents::Pri); |
| 122 | translate(Network::POLL_OUT, POLL_OUT); | 122 | translate(Network::PollEvents::Out, PollEvents::Out); |
| 123 | translate(Network::POLL_ERR, POLL_ERR); | 123 | translate(Network::PollEvents::Err, PollEvents::Err); |
| 124 | translate(Network::POLL_HUP, POLL_HUP); | 124 | translate(Network::PollEvents::Hup, PollEvents::Hup); |
| 125 | translate(Network::POLL_NVAL, POLL_NVAL); | 125 | translate(Network::PollEvents::Nval, PollEvents::Nval); |
| 126 | 126 | ||
| 127 | UNIMPLEMENTED_IF_MSG(flags != 0, "Unimplemented flags={}", flags); | 127 | UNIMPLEMENTED_IF_MSG((u16)flags != 0, "Unimplemented flags={}", (u16)flags); |
| 128 | return static_cast<u16>(result); | 128 | return result; |
| 129 | } | 129 | } |
| 130 | 130 | ||
| 131 | Network::SockAddrIn Translate(SockAddrIn value) { | 131 | Network::SockAddrIn Translate(SockAddrIn value) { |
diff --git a/src/core/hle/service/sockets/sockets_translate.h b/src/core/hle/service/sockets/sockets_translate.h index e498913d4..057d1ff22 100644 --- a/src/core/hle/service/sockets/sockets_translate.h +++ b/src/core/hle/service/sockets/sockets_translate.h | |||
| @@ -31,10 +31,10 @@ Network::Type Translate(Type type); | |||
| 31 | Network::Protocol Translate(Type type, Protocol protocol); | 31 | Network::Protocol Translate(Type type, Protocol protocol); |
| 32 | 32 | ||
| 33 | /// Translate abstract poll event flags to guest poll event flags | 33 | /// Translate abstract poll event flags to guest poll event flags |
| 34 | u16 TranslatePollEventsToHost(u32 flags); | 34 | Network::PollEvents TranslatePollEventsToHost(PollEvents flags); |
| 35 | 35 | ||
| 36 | /// Translate guest poll event flags to abstract poll event flags | 36 | /// Translate guest poll event flags to abstract poll event flags |
| 37 | u16 TranslatePollEventsToGuest(u32 flags); | 37 | PollEvents TranslatePollEventsToGuest(Network::PollEvents flags); |
| 38 | 38 | ||
| 39 | /// Translate guest socket address structure to abstract socket address structure | 39 | /// Translate guest socket address structure to abstract socket address structure |
| 40 | Network::SockAddrIn Translate(SockAddrIn value); | 40 | Network::SockAddrIn Translate(SockAddrIn value); |