diff options
| author | lizzie <lizzie@eden-emu.dev> | 2026-06-27 08:50:24 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-06-27 08:50:24 +0200 |
| commit | d8a8169eb20935b777fbaf322fa2d43e8f29d005 (patch) | |
| tree | e55a23c5c77a2c24b31b3a64911b1b23a07b5391 /src/core/hle/service/sockets | |
| parent | 81c6e56713fec564b7bd6519f9f4f760d5680bac (diff) | |
[hle/bsd] do not use rust-result wannabe Expected in functions (#4075)
rust has Result<T,E> but we don't really need that in c++, also the header just sucks, objectively
Signed-off-by: lizzie lizzie@eden-emu.dev
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4075
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-by: crueter <crueter@eden-emu.dev>
Diffstat (limited to 'src/core/hle/service/sockets')
| -rw-r--r-- | src/core/hle/service/sockets/bsd.cpp | 28 | ||||
| -rw-r--r-- | src/core/hle/service/sockets/bsd.h | 6 | ||||
| -rw-r--r-- | src/core/hle/service/sockets/sfdnsres.cpp | 34 |
3 files changed, 36 insertions, 32 deletions
diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp index 6053cdd7f2..b8078bfd99 100644 --- a/src/core/hle/service/sockets/bsd.cpp +++ b/src/core/hle/service/sockets/bsd.cpp @@ -24,9 +24,6 @@ #include "network/network.h" #include <common/settings.h> -using Common::Expected; -using Common::Unexpected; - namespace Service::Sockets { namespace { @@ -464,13 +461,22 @@ void BSD::DuplicateSocket(HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; auto input = rp.PopRaw<InputParameters>(); - Expected<s32, Errno> res = DuplicateSocketImpl(input.fd); IPC::ResponseBuilder rb{ctx, 4}; rb.Push(ResultSuccess); - rb.PushRaw(OutputParameters{ - .ret = res.value_or(0), - .bsd_errno = res ? Errno::SUCCESS : res.error(), - }); + + auto const res_v = DuplicateSocketImpl(input.fd); + if (auto* res = std::get_if<s32>(&res_v)) { + rb.PushRaw(OutputParameters{ + .ret = *res, + .bsd_errno = Errno::SUCCESS, + }); + } else { + auto* err = std::get_if<Errno>(&res_v); + rb.PushRaw(OutputParameters{ + .ret = 0, + .bsd_errno = *err, + }); + } } void BSD::EventFd(HLERequestContext& ctx) { @@ -977,15 +983,15 @@ Errno BSD::CloseImpl(s32 fd) { return bsd_errno; } -Expected<s32, Errno> BSD::DuplicateSocketImpl(s32 fd) { +std::variant<s32, Errno> BSD::DuplicateSocketImpl(s32 fd) { if (!IsFileDescriptorValid(fd)) { - return Unexpected(Errno::BADF); + return Errno::BADF; } const s32 new_fd = FindFreeFileDescriptorHandle(); if (new_fd < 0) { LOG_ERROR(Service, "No more file descriptors available"); - return Unexpected(Errno::MFILE); + return Errno::MFILE; } file_descriptors[new_fd] = FileDescriptor{ diff --git a/src/core/hle/service/sockets/bsd.h b/src/core/hle/service/sockets/bsd.h index 32b5bdc3cf..15e4a33592 100644 --- a/src/core/hle/service/sockets/bsd.h +++ b/src/core/hle/service/sockets/bsd.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -8,9 +8,9 @@ #include <memory> #include <span> #include <vector> +#include <variant> #include "common/common_types.h" -#include "common/expected.h" #include "common/socket_types.h" #include "core/hle/service/service.h" #include "core/hle/service/sockets/sockets.h" @@ -35,7 +35,7 @@ public: // These methods are called from SSL; the first two are also called from // this class for the corresponding IPC methods. // On the real device, the SSL service makes IPC calls to this service. - Common::Expected<s32, Errno> DuplicateSocketImpl(s32 fd); + std::variant<s32, Errno> DuplicateSocketImpl(s32 fd); Errno CloseImpl(s32 fd); std::optional<std::shared_ptr<Network::SocketBase>> GetSocket(s32 fd); diff --git a/src/core/hle/service/sockets/sfdnsres.cpp b/src/core/hle/service/sockets/sfdnsres.cpp index 13b3754c42..9e71be3547 100644 --- a/src/core/hle/service/sockets/sfdnsres.cpp +++ b/src/core/hle/service/sockets/sfdnsres.cpp @@ -208,16 +208,15 @@ static std::pair<u32, GetAddrInfoError> GetHostByNameRequestImpl(HLERequestConte return {0, GetAddrInfoError::AGAIN}; } - auto res = Network::GetAddressInfo(host, /*service*/ std::nullopt); - if (!res.has_value()) { - return {0, Translate(res.error())}; + auto res_v = Network::GetAddressInfo(host, /*service*/ std::nullopt); + if (auto* res = std::get_if<std::vector<Network::AddrInfo>>(&res_v)) { + const std::vector<u8> data = SerializeAddrInfoAsHostEnt(*res, host); + const u32 data_size = u32(data.size()); + ctx.WriteBuffer(data, 0); + return {data_size, GetAddrInfoError::SUCCESS}; } - - const std::vector<u8> data = SerializeAddrInfoAsHostEnt(res.value(), host); - const u32 data_size = static_cast<u32>(data.size()); - ctx.WriteBuffer(data, 0); - - return {data_size, GetAddrInfoError::SUCCESS}; + auto* err = std::get_if<Network::GetAddrInfoError>(&res_v); + return {0, Translate(*err)}; } void SFDNSRES::GetHostByNameRequest(HLERequestContext& ctx) { @@ -333,16 +332,15 @@ static std::pair<u32, GetAddrInfoError> GetAddrInfoRequestImpl(HLERequestContext // Serialized hints are also passed in a buffer, but are ignored for now. - auto res = Network::GetAddressInfo(host, service); - if (!res.has_value()) { - return {0, Translate(res.error())}; + auto res_v = Network::GetAddressInfo(host, service); + if (auto* res = std::get_if<std::vector<Network::AddrInfo>>(&res_v)) { + const std::vector<u8> data = SerializeAddrInfo(*res, host); + const u32 data_size = u32(data.size()); + ctx.WriteBuffer(data, 0); + return {data_size, GetAddrInfoError::SUCCESS}; } - - const std::vector<u8> data = SerializeAddrInfo(res.value(), host); - const u32 data_size = static_cast<u32>(data.size()); - ctx.WriteBuffer(data, 0); - - return {data_size, GetAddrInfoError::SUCCESS}; + auto* err = std::get_if<Network::GetAddrInfoError>(&res_v); + return {0, Translate(*err)}; } void SFDNSRES::GetAddrInfoRequest(HLERequestContext& ctx) { |
