summaryrefslogtreecommitdiff
path: root/src/core/hle/service/sockets
diff options
context:
space:
mode:
authorGravatar liamwhite2023-02-02 15:53:28 -0500
committerGravatar GitHub2023-02-02 15:53:28 -0500
commitb01698775b468a04e4d0a9bdd86035ff00e6decb (patch)
tree88f1784fe7833392caeaf713a7a616772f446b18 /src/core/hle/service/sockets
parentMerge pull request #9708 from ameerj/gl-context-flush (diff)
downloadyuzu-b01698775b468a04e4d0a9bdd86035ff00e6decb.tar.gz
yuzu-b01698775b468a04e4d0a9bdd86035ff00e6decb.tar.xz
yuzu-b01698775b468a04e4d0a9bdd86035ff00e6decb.zip
Revert "hle_ipc: Use std::span to avoid heap allocations/copies when calling ReadBuffer"
Diffstat (limited to 'src/core/hle/service/sockets')
-rw-r--r--src/core/hle/service/sockets/bsd.cpp15
-rw-r--r--src/core/hle/service/sockets/bsd.h23
-rw-r--r--src/core/hle/service/sockets/sfdnsres.cpp2
3 files changed, 20 insertions, 20 deletions
diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp
index bdb499268..9e94a462f 100644
--- a/src/core/hle/service/sockets/bsd.cpp
+++ b/src/core/hle/service/sockets/bsd.cpp
@@ -208,6 +208,7 @@ void BSD::Bind(Kernel::HLERequestContext& ctx) {
208 const s32 fd = rp.Pop<s32>(); 208 const s32 fd = rp.Pop<s32>();
209 209
210 LOG_DEBUG(Service, "called. fd={} addrlen={}", fd, ctx.GetReadBufferSize()); 210 LOG_DEBUG(Service, "called. fd={} addrlen={}", fd, ctx.GetReadBufferSize());
211
211 BuildErrnoResponse(ctx, BindImpl(fd, ctx.ReadBuffer())); 212 BuildErrnoResponse(ctx, BindImpl(fd, ctx.ReadBuffer()));
212} 213}
213 214
@@ -311,7 +312,7 @@ void BSD::SetSockOpt(Kernel::HLERequestContext& ctx) {
311 const u32 level = rp.Pop<u32>(); 312 const u32 level = rp.Pop<u32>();
312 const OptName optname = static_cast<OptName>(rp.Pop<u32>()); 313 const OptName optname = static_cast<OptName>(rp.Pop<u32>());
313 314
314 const auto buffer = ctx.ReadBuffer(); 315 const std::vector<u8> buffer = ctx.ReadBuffer();
315 const u8* optval = buffer.empty() ? nullptr : buffer.data(); 316 const u8* optval = buffer.empty() ? nullptr : buffer.data();
316 size_t optlen = buffer.size(); 317 size_t optlen = buffer.size();
317 318
@@ -488,7 +489,7 @@ std::pair<s32, Errno> BSD::SocketImpl(Domain domain, Type type, Protocol protoco
488 return {fd, Errno::SUCCESS}; 489 return {fd, Errno::SUCCESS};
489} 490}
490 491
491std::pair<s32, Errno> BSD::PollImpl(std::vector<u8>& write_buffer, std::span<const u8> read_buffer, 492std::pair<s32, Errno> BSD::PollImpl(std::vector<u8>& write_buffer, std::vector<u8> read_buffer,
492 s32 nfds, s32 timeout) { 493 s32 nfds, s32 timeout) {
493 if (write_buffer.size() < nfds * sizeof(PollFD)) { 494 if (write_buffer.size() < nfds * sizeof(PollFD)) {
494 return {-1, Errno::INVAL}; 495 return {-1, Errno::INVAL};
@@ -583,7 +584,7 @@ std::pair<s32, Errno> BSD::AcceptImpl(s32 fd, std::vector<u8>& write_buffer) {
583 return {new_fd, Errno::SUCCESS}; 584 return {new_fd, Errno::SUCCESS};
584} 585}
585 586
586Errno BSD::BindImpl(s32 fd, std::span<const u8> addr) { 587Errno BSD::BindImpl(s32 fd, const std::vector<u8>& addr) {
587 if (!IsFileDescriptorValid(fd)) { 588 if (!IsFileDescriptorValid(fd)) {
588 return Errno::BADF; 589 return Errno::BADF;
589 } 590 }
@@ -594,7 +595,7 @@ Errno BSD::BindImpl(s32 fd, std::span<const u8> addr) {
594 return Translate(file_descriptors[fd]->socket->Bind(Translate(addr_in))); 595 return Translate(file_descriptors[fd]->socket->Bind(Translate(addr_in)));
595} 596}
596 597
597Errno BSD::ConnectImpl(s32 fd, std::span<const u8> addr) { 598Errno BSD::ConnectImpl(s32 fd, const std::vector<u8>& addr) {
598 if (!IsFileDescriptorValid(fd)) { 599 if (!IsFileDescriptorValid(fd)) {
599 return Errno::BADF; 600 return Errno::BADF;
600 } 601 }
@@ -799,15 +800,15 @@ std::pair<s32, Errno> BSD::RecvFromImpl(s32 fd, u32 flags, std::vector<u8>& mess
799 return {ret, bsd_errno}; 800 return {ret, bsd_errno};
800} 801}
801 802
802std::pair<s32, Errno> BSD::SendImpl(s32 fd, u32 flags, std::span<const u8> message) { 803std::pair<s32, Errno> BSD::SendImpl(s32 fd, u32 flags, const std::vector<u8>& message) {
803 if (!IsFileDescriptorValid(fd)) { 804 if (!IsFileDescriptorValid(fd)) {
804 return {-1, Errno::BADF}; 805 return {-1, Errno::BADF};
805 } 806 }
806 return Translate(file_descriptors[fd]->socket->Send(message, flags)); 807 return Translate(file_descriptors[fd]->socket->Send(message, flags));
807} 808}
808 809
809std::pair<s32, Errno> BSD::SendToImpl(s32 fd, u32 flags, std::span<const u8> message, 810std::pair<s32, Errno> BSD::SendToImpl(s32 fd, u32 flags, const std::vector<u8>& message,
810 std::span<const u8> addr) { 811 const std::vector<u8>& addr) {
811 if (!IsFileDescriptorValid(fd)) { 812 if (!IsFileDescriptorValid(fd)) {
812 return {-1, Errno::BADF}; 813 return {-1, Errno::BADF};
813 } 814 }
diff --git a/src/core/hle/service/sockets/bsd.h b/src/core/hle/service/sockets/bsd.h
index 56bb3f8b1..81e855e0f 100644
--- a/src/core/hle/service/sockets/bsd.h
+++ b/src/core/hle/service/sockets/bsd.h
@@ -4,7 +4,6 @@
4#pragma once 4#pragma once
5 5
6#include <memory> 6#include <memory>
7#include <span>
8#include <vector> 7#include <vector>
9 8
10#include "common/common_types.h" 9#include "common/common_types.h"
@@ -45,7 +44,7 @@ private:
45 44
46 s32 nfds; 45 s32 nfds;
47 s32 timeout; 46 s32 timeout;
48 std::span<const u8> read_buffer; 47 std::vector<u8> read_buffer;
49 std::vector<u8> write_buffer; 48 std::vector<u8> write_buffer;
50 s32 ret{}; 49 s32 ret{};
51 Errno bsd_errno{}; 50 Errno bsd_errno{};
@@ -66,7 +65,7 @@ private:
66 void Response(Kernel::HLERequestContext& ctx); 65 void Response(Kernel::HLERequestContext& ctx);
67 66
68 s32 fd; 67 s32 fd;
69 std::span<const u8> addr; 68 std::vector<u8> addr;
70 Errno bsd_errno{}; 69 Errno bsd_errno{};
71 }; 70 };
72 71
@@ -99,7 +98,7 @@ private:
99 98
100 s32 fd; 99 s32 fd;
101 u32 flags; 100 u32 flags;
102 std::span<const u8> message; 101 std::vector<u8> message;
103 s32 ret{}; 102 s32 ret{};
104 Errno bsd_errno{}; 103 Errno bsd_errno{};
105 }; 104 };
@@ -110,8 +109,8 @@ private:
110 109
111 s32 fd; 110 s32 fd;
112 u32 flags; 111 u32 flags;
113 std::span<const u8> message; 112 std::vector<u8> message;
114 std::span<const u8> addr; 113 std::vector<u8> addr;
115 s32 ret{}; 114 s32 ret{};
116 Errno bsd_errno{}; 115 Errno bsd_errno{};
117 }; 116 };
@@ -144,11 +143,11 @@ private:
144 void ExecuteWork(Kernel::HLERequestContext& ctx, Work work); 143 void ExecuteWork(Kernel::HLERequestContext& ctx, Work work);
145 144
146 std::pair<s32, Errno> SocketImpl(Domain domain, Type type, Protocol protocol); 145 std::pair<s32, Errno> SocketImpl(Domain domain, Type type, Protocol protocol);
147 std::pair<s32, Errno> PollImpl(std::vector<u8>& write_buffer, std::span<const u8> read_buffer, 146 std::pair<s32, Errno> PollImpl(std::vector<u8>& write_buffer, std::vector<u8> read_buffer,
148 s32 nfds, s32 timeout); 147 s32 nfds, s32 timeout);
149 std::pair<s32, Errno> AcceptImpl(s32 fd, std::vector<u8>& write_buffer); 148 std::pair<s32, Errno> AcceptImpl(s32 fd, std::vector<u8>& write_buffer);
150 Errno BindImpl(s32 fd, std::span<const u8> addr); 149 Errno BindImpl(s32 fd, const std::vector<u8>& addr);
151 Errno ConnectImpl(s32 fd, std::span<const u8> addr); 150 Errno ConnectImpl(s32 fd, const std::vector<u8>& addr);
152 Errno GetPeerNameImpl(s32 fd, std::vector<u8>& write_buffer); 151 Errno GetPeerNameImpl(s32 fd, std::vector<u8>& write_buffer);
153 Errno GetSockNameImpl(s32 fd, std::vector<u8>& write_buffer); 152 Errno GetSockNameImpl(s32 fd, std::vector<u8>& write_buffer);
154 Errno ListenImpl(s32 fd, s32 backlog); 153 Errno ListenImpl(s32 fd, s32 backlog);
@@ -158,9 +157,9 @@ private:
158 std::pair<s32, Errno> RecvImpl(s32 fd, u32 flags, std::vector<u8>& message); 157 std::pair<s32, Errno> RecvImpl(s32 fd, u32 flags, std::vector<u8>& message);
159 std::pair<s32, Errno> RecvFromImpl(s32 fd, u32 flags, std::vector<u8>& message, 158 std::pair<s32, Errno> RecvFromImpl(s32 fd, u32 flags, std::vector<u8>& message,
160 std::vector<u8>& addr); 159 std::vector<u8>& addr);
161 std::pair<s32, Errno> SendImpl(s32 fd, u32 flags, std::span<const u8> message); 160 std::pair<s32, Errno> SendImpl(s32 fd, u32 flags, const std::vector<u8>& message);
162 std::pair<s32, Errno> SendToImpl(s32 fd, u32 flags, std::span<const u8> message, 161 std::pair<s32, Errno> SendToImpl(s32 fd, u32 flags, const std::vector<u8>& message,
163 std::span<const u8> addr); 162 const std::vector<u8>& addr);
164 Errno CloseImpl(s32 fd); 163 Errno CloseImpl(s32 fd);
165 164
166 s32 FindFreeFileDescriptorHandle() noexcept; 165 s32 FindFreeFileDescriptorHandle() noexcept;
diff --git a/src/core/hle/service/sockets/sfdnsres.cpp b/src/core/hle/service/sockets/sfdnsres.cpp
index e96eda7f3..097c37d7a 100644
--- a/src/core/hle/service/sockets/sfdnsres.cpp
+++ b/src/core/hle/service/sockets/sfdnsres.cpp
@@ -243,4 +243,4 @@ void SFDNSRES::GetAddrInfoRequestWithOptions(Kernel::HLERequestContext& ctx) {
243 rb.Push(0); 243 rb.Push(0);
244} 244}
245 245
246} // namespace Service::Sockets 246} // namespace Service::Sockets \ No newline at end of file