aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/service/sockets
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2026-06-27 08:50:24 +0200
committercrueter <crueter@eden-emu.dev>2026-06-27 08:50:24 +0200
commitd8a8169eb20935b777fbaf322fa2d43e8f29d005 (patch)
treee55a23c5c77a2c24b31b3a64911b1b23a07b5391 /src/core/hle/service/sockets
parent81c6e56713fec564b7bd6519f9f4f760d5680bac (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.cpp28
-rw-r--r--src/core/hle/service/sockets/bsd.h6
-rw-r--r--src/core/hle/service/sockets/sfdnsres.cpp34
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) {