summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ameerj2022-12-25 13:42:32 -0500
committerGravatar ameerj2022-12-25 17:04:02 -0500
commit7ffd62424804eceb73f01b1c4e8dc216134c8295 (patch)
tree2bfe2a9b5d0a3f0857c73475cbdf24f6fe66c740 /src
parentfsp_srv: Use ReadBufferSpan (diff)
downloadyuzu-7ffd62424804eceb73f01b1c4e8dc216134c8295.tar.gz
yuzu-7ffd62424804eceb73f01b1c4e8dc216134c8295.tar.xz
yuzu-7ffd62424804eceb73f01b1c4e8dc216134c8295.zip
service: Use ReadBufferSpan where it is trivial to do so
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/kernel/hle_ipc.cpp1
-rw-r--r--src/core/hle/service/acc/acc.cpp6
-rw-r--r--src/core/hle/service/am/am.cpp2
-rw-r--r--src/core/hle/service/aoc/aoc_u.cpp4
-rw-r--r--src/core/hle/service/audio/audin_u.cpp6
-rw-r--r--src/core/hle/service/audio/audout_u.cpp4
-rw-r--r--src/core/hle/service/audio/audren_u.cpp6
-rw-r--r--src/core/hle/service/audio/hwopus.cpp6
-rw-r--r--src/core/hle/service/bcat/bcat_module.cpp2
-rw-r--r--src/core/hle/service/es/es.cpp4
-rw-r--r--src/core/hle/service/fatal/fatal.cpp2
-rw-r--r--src/core/hle/service/glue/notif.cpp4
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp2
-rw-r--r--src/core/hle/service/hid/controllers/npad.h2
-rw-r--r--src/core/hle/service/hid/hid.cpp8
-rw-r--r--src/core/hle/service/jit/jit.cpp6
-rw-r--r--src/core/hle/service/ldn/ldn.cpp4
-rw-r--r--src/core/hle/service/lm/lm.cpp2
-rw-r--r--src/core/hle/service/nfc/mifare_user.cpp4
-rw-r--r--src/core/hle/service/nfc/nfc_user.cpp2
-rw-r--r--src/core/hle/service/nfp/nfp_user.cpp6
-rw-r--r--src/core/hle/service/ngct/ngct.cpp4
-rw-r--r--src/core/hle/service/nifm/nifm.cpp2
-rw-r--r--src/core/hle/service/prepo/prepo.cpp24
-rw-r--r--src/core/hle/service/set/set_sys.cpp8
-rw-r--r--src/core/hle/service/sockets/sfdnsres.cpp6
-rw-r--r--src/core/hle/service/ssl/ssl.cpp10
-rw-r--r--src/core/hle/service/time/time.cpp8
-rw-r--r--src/core/hle/service/time/time_zone_service.cpp4
-rw-r--r--src/core/reporter.cpp2
-rw-r--r--src/core/reporter.h4
31 files changed, 78 insertions, 77 deletions
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp
index 549fd8aea..9bc72da02 100644
--- a/src/core/hle/kernel/hle_ipc.cpp
+++ b/src/core/hle/kernel/hle_ipc.cpp
@@ -346,7 +346,6 @@ std::vector<u8> HLERequestContext::ReadBuffer(std::size_t buffer_index) const {
346} 346}
347 347
348std::span<const u8> HLERequestContext::ReadBufferSpan(std::size_t buffer_index) const { 348std::span<const u8> HLERequestContext::ReadBufferSpan(std::size_t buffer_index) const {
349 LOG_CRITICAL(Debug, "called");
350 const bool is_buffer_a{BufferDescriptorA().size() > buffer_index && 349 const bool is_buffer_a{BufferDescriptorA().size() > buffer_index &&
351 BufferDescriptorA()[buffer_index].Size()}; 350 BufferDescriptorA()[buffer_index].Size()};
352 if (is_buffer_a) { 351 if (is_buffer_a) {
diff --git a/src/core/hle/service/acc/acc.cpp b/src/core/hle/service/acc/acc.cpp
index 6d1084fd1..398bbc793 100644
--- a/src/core/hle/service/acc/acc.cpp
+++ b/src/core/hle/service/acc/acc.cpp
@@ -367,7 +367,7 @@ protected:
367 IPC::RequestParser rp{ctx}; 367 IPC::RequestParser rp{ctx};
368 const auto base = rp.PopRaw<ProfileBase>(); 368 const auto base = rp.PopRaw<ProfileBase>();
369 369
370 const auto user_data = ctx.ReadBuffer(); 370 const auto user_data = ctx.ReadBufferSpan();
371 371
372 LOG_DEBUG(Service_ACC, "called, username='{}', timestamp={:016X}, uuid=0x{}", 372 LOG_DEBUG(Service_ACC, "called, username='{}', timestamp={:016X}, uuid=0x{}",
373 Common::StringFromFixedZeroTerminatedBuffer( 373 Common::StringFromFixedZeroTerminatedBuffer(
@@ -399,8 +399,8 @@ protected:
399 IPC::RequestParser rp{ctx}; 399 IPC::RequestParser rp{ctx};
400 const auto base = rp.PopRaw<ProfileBase>(); 400 const auto base = rp.PopRaw<ProfileBase>();
401 401
402 const auto user_data = ctx.ReadBuffer(); 402 const auto user_data = ctx.ReadBufferSpan();
403 const auto image_data = ctx.ReadBuffer(1); 403 const auto image_data = ctx.ReadBufferSpan(1);
404 404
405 LOG_DEBUG(Service_ACC, "called, username='{}', timestamp={:016X}, uuid=0x{}", 405 LOG_DEBUG(Service_ACC, "called, username='{}', timestamp={:016X}, uuid=0x{}",
406 Common::StringFromFixedZeroTerminatedBuffer( 406 Common::StringFromFixedZeroTerminatedBuffer(
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp
index 22999c942..958e40648 100644
--- a/src/core/hle/service/am/am.cpp
+++ b/src/core/hle/service/am/am.cpp
@@ -1124,7 +1124,7 @@ void IStorageAccessor::Write(Kernel::HLERequestContext& ctx) {
1124 IPC::RequestParser rp{ctx}; 1124 IPC::RequestParser rp{ctx};
1125 1125
1126 const u64 offset{rp.Pop<u64>()}; 1126 const u64 offset{rp.Pop<u64>()};
1127 const std::vector<u8> data{ctx.ReadBuffer()}; 1127 const auto data{ctx.ReadBufferSpan()};
1128 const std::size_t size{std::min<u64>(data.size(), backing.GetSize() - offset)}; 1128 const std::size_t size{std::min<u64>(data.size(), backing.GetSize() - offset)};
1129 1129
1130 LOG_DEBUG(Service_AM, "called, offset={}, size={}", offset, size); 1130 LOG_DEBUG(Service_AM, "called, offset={}, size={}", offset, size);
diff --git a/src/core/hle/service/aoc/aoc_u.cpp b/src/core/hle/service/aoc/aoc_u.cpp
index 368ccd52f..cc976b155 100644
--- a/src/core/hle/service/aoc/aoc_u.cpp
+++ b/src/core/hle/service/aoc/aoc_u.cpp
@@ -72,7 +72,7 @@ private:
72 IPC::RequestParser rp{ctx}; 72 IPC::RequestParser rp{ctx};
73 73
74 const auto unknown_1 = rp.Pop<u64>(); 74 const auto unknown_1 = rp.Pop<u64>();
75 [[maybe_unused]] const auto unknown_2 = ctx.ReadBuffer(); 75 [[maybe_unused]] const auto unknown_2 = ctx.ReadBufferSpan();
76 76
77 LOG_WARNING(Service_AOC, "(STUBBED) called, unknown_1={}", unknown_1); 77 LOG_WARNING(Service_AOC, "(STUBBED) called, unknown_1={}", unknown_1);
78 78
@@ -84,7 +84,7 @@ private:
84 IPC::RequestParser rp{ctx}; 84 IPC::RequestParser rp{ctx};
85 85
86 const auto unknown_1 = rp.Pop<u64>(); 86 const auto unknown_1 = rp.Pop<u64>();
87 [[maybe_unused]] const auto unknown_2 = ctx.ReadBuffer(); 87 [[maybe_unused]] const auto unknown_2 = ctx.ReadBufferSpan();
88 88
89 LOG_WARNING(Service_AOC, "(STUBBED) called, unknown_1={}", unknown_1); 89 LOG_WARNING(Service_AOC, "(STUBBED) called, unknown_1={}", unknown_1);
90 90
diff --git a/src/core/hle/service/audio/audin_u.cpp b/src/core/hle/service/audio/audin_u.cpp
index 053e8f9dd..f3dd8397d 100644
--- a/src/core/hle/service/audio/audin_u.cpp
+++ b/src/core/hle/service/audio/audin_u.cpp
@@ -98,7 +98,7 @@ private:
98 LOG_ERROR(Service_Audio, "Input buffer is too small for an AudioInBuffer!"); 98 LOG_ERROR(Service_Audio, "Input buffer is too small for an AudioInBuffer!");
99 } 99 }
100 100
101 const auto& in_buffer = ctx.ReadBuffer(); 101 const auto& in_buffer = ctx.ReadBufferSpan();
102 AudioInBuffer buffer{}; 102 AudioInBuffer buffer{};
103 std::memcpy(&buffer, in_buffer.data(), sizeof(AudioInBuffer)); 103 std::memcpy(&buffer, in_buffer.data(), sizeof(AudioInBuffer));
104 104
@@ -266,7 +266,7 @@ void AudInU::OpenAudioIn(Kernel::HLERequestContext& ctx) {
266 IPC::RequestParser rp{ctx}; 266 IPC::RequestParser rp{ctx};
267 auto in_params{rp.PopRaw<AudioInParameter>()}; 267 auto in_params{rp.PopRaw<AudioInParameter>()};
268 auto applet_resource_user_id{rp.PopRaw<u64>()}; 268 auto applet_resource_user_id{rp.PopRaw<u64>()};
269 const auto device_name_data{ctx.ReadBuffer()}; 269 const auto device_name_data{ctx.ReadBufferSpan()};
270 auto device_name = Common::StringFromBuffer(device_name_data); 270 auto device_name = Common::StringFromBuffer(device_name_data);
271 auto handle{ctx.GetCopyHandle(0)}; 271 auto handle{ctx.GetCopyHandle(0)};
272 272
@@ -317,7 +317,7 @@ void AudInU::OpenAudioInProtocolSpecified(Kernel::HLERequestContext& ctx) {
317 auto protocol_specified{rp.PopRaw<u64>()}; 317 auto protocol_specified{rp.PopRaw<u64>()};
318 auto in_params{rp.PopRaw<AudioInParameter>()}; 318 auto in_params{rp.PopRaw<AudioInParameter>()};
319 auto applet_resource_user_id{rp.PopRaw<u64>()}; 319 auto applet_resource_user_id{rp.PopRaw<u64>()};
320 const auto device_name_data{ctx.ReadBuffer()}; 320 const auto device_name_data{ctx.ReadBufferSpan()};
321 auto device_name = Common::StringFromBuffer(device_name_data); 321 auto device_name = Common::StringFromBuffer(device_name_data);
322 auto handle{ctx.GetCopyHandle(0)}; 322 auto handle{ctx.GetCopyHandle(0)};
323 323
diff --git a/src/core/hle/service/audio/audout_u.cpp b/src/core/hle/service/audio/audout_u.cpp
index 29751f075..4bf388055 100644
--- a/src/core/hle/service/audio/audout_u.cpp
+++ b/src/core/hle/service/audio/audout_u.cpp
@@ -105,7 +105,7 @@ private:
105 LOG_ERROR(Service_Audio, "Input buffer is too small for an AudioOutBuffer!"); 105 LOG_ERROR(Service_Audio, "Input buffer is too small for an AudioOutBuffer!");
106 } 106 }
107 107
108 const auto& in_buffer = ctx.ReadBuffer(); 108 const auto& in_buffer = ctx.ReadBufferSpan();
109 AudioOutBuffer buffer{}; 109 AudioOutBuffer buffer{};
110 std::memcpy(&buffer, in_buffer.data(), sizeof(AudioOutBuffer)); 110 std::memcpy(&buffer, in_buffer.data(), sizeof(AudioOutBuffer));
111 111
@@ -264,7 +264,7 @@ void AudOutU::OpenAudioOut(Kernel::HLERequestContext& ctx) {
264 IPC::RequestParser rp{ctx}; 264 IPC::RequestParser rp{ctx};
265 auto in_params{rp.PopRaw<AudioOutParameter>()}; 265 auto in_params{rp.PopRaw<AudioOutParameter>()};
266 auto applet_resource_user_id{rp.PopRaw<u64>()}; 266 auto applet_resource_user_id{rp.PopRaw<u64>()};
267 const auto device_name_data{ctx.ReadBuffer()}; 267 const auto device_name_data{ctx.ReadBufferSpan()};
268 auto device_name = Common::StringFromBuffer(device_name_data); 268 auto device_name = Common::StringFromBuffer(device_name_data);
269 auto handle{ctx.GetCopyHandle(0)}; 269 auto handle{ctx.GetCopyHandle(0)};
270 270
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp
index 3a1c231b6..1a48c155e 100644
--- a/src/core/hle/service/audio/audren_u.cpp
+++ b/src/core/hle/service/audio/audren_u.cpp
@@ -112,7 +112,7 @@ private:
112 void RequestUpdate(Kernel::HLERequestContext& ctx) { 112 void RequestUpdate(Kernel::HLERequestContext& ctx) {
113 LOG_TRACE(Service_Audio, "called"); 113 LOG_TRACE(Service_Audio, "called");
114 114
115 std::vector<u8> input{ctx.ReadBuffer(0)}; 115 const auto input{ctx.ReadBufferSpan(0)};
116 116
117 // These buffers are written manually to avoid an issue with WriteBuffer throwing errors for 117 // These buffers are written manually to avoid an issue with WriteBuffer throwing errors for
118 // checking size 0. Performance size is 0 for most games. 118 // checking size 0. Performance size is 0 for most games.
@@ -306,7 +306,7 @@ private:
306 IPC::RequestParser rp{ctx}; 306 IPC::RequestParser rp{ctx};
307 const f32 volume = rp.Pop<f32>(); 307 const f32 volume = rp.Pop<f32>();
308 308
309 const auto device_name_buffer = ctx.ReadBuffer(); 309 const auto device_name_buffer = ctx.ReadBufferSpan();
310 const std::string name = Common::StringFromBuffer(device_name_buffer); 310 const std::string name = Common::StringFromBuffer(device_name_buffer);
311 311
312 LOG_DEBUG(Service_Audio, "called. name={}, volume={}", name, volume); 312 LOG_DEBUG(Service_Audio, "called. name={}, volume={}", name, volume);
@@ -320,7 +320,7 @@ private:
320 } 320 }
321 321
322 void GetAudioDeviceOutputVolume(Kernel::HLERequestContext& ctx) { 322 void GetAudioDeviceOutputVolume(Kernel::HLERequestContext& ctx) {
323 const auto device_name_buffer = ctx.ReadBuffer(); 323 const auto device_name_buffer = ctx.ReadBufferSpan();
324 const std::string name = Common::StringFromBuffer(device_name_buffer); 324 const std::string name = Common::StringFromBuffer(device_name_buffer);
325 325
326 LOG_DEBUG(Service_Audio, "called. Name={}", name); 326 LOG_DEBUG(Service_Audio, "called. Name={}", name);
diff --git a/src/core/hle/service/audio/hwopus.cpp b/src/core/hle/service/audio/hwopus.cpp
index 825fb8bcc..7c3f25c67 100644
--- a/src/core/hle/service/audio/hwopus.cpp
+++ b/src/core/hle/service/audio/hwopus.cpp
@@ -74,7 +74,7 @@ private:
74 ResetDecoderContext(); 74 ResetDecoderContext();
75 } 75 }
76 76
77 if (!DecodeOpusData(consumed, sample_count, ctx.ReadBuffer(), samples, performance)) { 77 if (!DecodeOpusData(consumed, sample_count, ctx.ReadBufferSpan(), samples, performance)) {
78 LOG_ERROR(Audio, "Failed to decode opus data"); 78 LOG_ERROR(Audio, "Failed to decode opus data");
79 IPC::ResponseBuilder rb{ctx, 2}; 79 IPC::ResponseBuilder rb{ctx, 2};
80 // TODO(ogniK): Use correct error code 80 // TODO(ogniK): Use correct error code
@@ -93,7 +93,7 @@ private:
93 ctx.WriteBuffer(samples); 93 ctx.WriteBuffer(samples);
94 } 94 }
95 95
96 bool DecodeOpusData(u32& consumed, u32& sample_count, const std::vector<u8>& input, 96 bool DecodeOpusData(u32& consumed, u32& sample_count, std::span<const u8> input,
97 std::vector<opus_int16>& output, u64* out_performance_time) const { 97 std::vector<opus_int16>& output, u64* out_performance_time) const {
98 const auto start_time = std::chrono::steady_clock::now(); 98 const auto start_time = std::chrono::steady_clock::now();
99 const std::size_t raw_output_sz = output.size() * sizeof(opus_int16); 99 const std::size_t raw_output_sz = output.size() * sizeof(opus_int16);
@@ -257,7 +257,7 @@ void HwOpus::GetWorkBufferSizeEx(Kernel::HLERequestContext& ctx) {
257 257
258void HwOpus::GetWorkBufferSizeForMultiStreamEx(Kernel::HLERequestContext& ctx) { 258void HwOpus::GetWorkBufferSizeForMultiStreamEx(Kernel::HLERequestContext& ctx) {
259 OpusMultiStreamParametersEx param; 259 OpusMultiStreamParametersEx param;
260 std::memcpy(&param, ctx.ReadBuffer().data(), ctx.GetReadBufferSize()); 260 std::memcpy(&param, ctx.ReadBufferSpan().data(), ctx.GetReadBufferSize());
261 261
262 const auto sample_rate = param.sample_rate; 262 const auto sample_rate = param.sample_rate;
263 const auto channel_count = param.channel_count; 263 const auto channel_count = param.channel_count;
diff --git a/src/core/hle/service/bcat/bcat_module.cpp b/src/core/hle/service/bcat/bcat_module.cpp
index cbe690a5d..c1a012739 100644
--- a/src/core/hle/service/bcat/bcat_module.cpp
+++ b/src/core/hle/service/bcat/bcat_module.cpp
@@ -206,7 +206,7 @@ private:
206 IPC::RequestParser rp{ctx}; 206 IPC::RequestParser rp{ctx};
207 const auto title_id = rp.PopRaw<u64>(); 207 const auto title_id = rp.PopRaw<u64>();
208 208
209 const auto passphrase_raw = ctx.ReadBuffer(); 209 const auto passphrase_raw = ctx.ReadBufferSpan();
210 210
211 LOG_DEBUG(Service_BCAT, "called, title_id={:016X}, passphrase={}", title_id, 211 LOG_DEBUG(Service_BCAT, "called, title_id={:016X}, passphrase={}", title_id,
212 Common::HexToString(passphrase_raw)); 212 Common::HexToString(passphrase_raw));
diff --git a/src/core/hle/service/es/es.cpp b/src/core/hle/service/es/es.cpp
index d183e5829..5ea61c430 100644
--- a/src/core/hle/service/es/es.cpp
+++ b/src/core/hle/service/es/es.cpp
@@ -121,8 +121,8 @@ private:
121 } 121 }
122 122
123 void ImportTicket(Kernel::HLERequestContext& ctx) { 123 void ImportTicket(Kernel::HLERequestContext& ctx) {
124 const auto ticket = ctx.ReadBuffer(); 124 const auto ticket = ctx.ReadBufferSpan();
125 const auto cert = ctx.ReadBuffer(1); 125 [[maybe_unused]] const auto cert = ctx.ReadBufferSpan(1);
126 126
127 if (ticket.size() < sizeof(Core::Crypto::Ticket)) { 127 if (ticket.size() < sizeof(Core::Crypto::Ticket)) {
128 LOG_ERROR(Service_ETicket, "The input buffer is not large enough!"); 128 LOG_ERROR(Service_ETicket, "The input buffer is not large enough!");
diff --git a/src/core/hle/service/fatal/fatal.cpp b/src/core/hle/service/fatal/fatal.cpp
index 27675615b..ff896ea10 100644
--- a/src/core/hle/service/fatal/fatal.cpp
+++ b/src/core/hle/service/fatal/fatal.cpp
@@ -152,7 +152,7 @@ void Module::Interface::ThrowFatalWithCpuContext(Kernel::HLERequestContext& ctx)
152 IPC::RequestParser rp(ctx); 152 IPC::RequestParser rp(ctx);
153 const auto error_code = rp.Pop<Result>(); 153 const auto error_code = rp.Pop<Result>();
154 const auto fatal_type = rp.PopEnum<FatalType>(); 154 const auto fatal_type = rp.PopEnum<FatalType>();
155 const auto fatal_info = ctx.ReadBuffer(); 155 const auto fatal_info = ctx.ReadBufferSpan();
156 FatalInfo info{}; 156 FatalInfo info{};
157 157
158 ASSERT_MSG(fatal_info.size() == sizeof(FatalInfo), "Invalid fatal info buffer size!"); 158 ASSERT_MSG(fatal_info.size() == sizeof(FatalInfo), "Invalid fatal info buffer size!");
diff --git a/src/core/hle/service/glue/notif.cpp b/src/core/hle/service/glue/notif.cpp
index 3ace2dabd..ee5c6d3a4 100644
--- a/src/core/hle/service/glue/notif.cpp
+++ b/src/core/hle/service/glue/notif.cpp
@@ -38,7 +38,7 @@ void NOTIF_A::RegisterAlarmSetting(Kernel::HLERequestContext& ctx) {
38 "application_parameter_size is bigger than 0x400 bytes"); 38 "application_parameter_size is bigger than 0x400 bytes");
39 39
40 AlarmSetting new_alarm{}; 40 AlarmSetting new_alarm{};
41 memcpy(&new_alarm, ctx.ReadBuffer(0).data(), sizeof(AlarmSetting)); 41 memcpy(&new_alarm, ctx.ReadBufferSpan(0).data(), sizeof(AlarmSetting));
42 42
43 // TODO: Count alarms per game id 43 // TODO: Count alarms per game id
44 if (alarms.size() >= max_alarms) { 44 if (alarms.size() >= max_alarms) {
@@ -73,7 +73,7 @@ void NOTIF_A::UpdateAlarmSetting(Kernel::HLERequestContext& ctx) {
73 "application_parameter_size is bigger than 0x400 bytes"); 73 "application_parameter_size is bigger than 0x400 bytes");
74 74
75 AlarmSetting alarm_setting{}; 75 AlarmSetting alarm_setting{};
76 memcpy(&alarm_setting, ctx.ReadBuffer(0).data(), sizeof(AlarmSetting)); 76 memcpy(&alarm_setting, ctx.ReadBufferSpan(0).data(), sizeof(AlarmSetting));
77 77
78 const auto alarm_it = GetAlarmFromId(alarm_setting.alarm_setting_id); 78 const auto alarm_it = GetAlarmFromId(alarm_setting.alarm_setting_id);
79 if (alarm_it != alarms.end()) { 79 if (alarm_it != alarms.end()) {
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index 2f871de31..df63083a8 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -737,7 +737,7 @@ Core::HID::NpadStyleTag Controller_NPad::GetSupportedStyleSet() const {
737 return hid_core.GetSupportedStyleTag(); 737 return hid_core.GetSupportedStyleTag();
738} 738}
739 739
740void Controller_NPad::SetSupportedNpadIdTypes(u8* data, std::size_t length) { 740void Controller_NPad::SetSupportedNpadIdTypes(const u8* const data, std::size_t length) {
741 ASSERT(length > 0 && (length % sizeof(u32)) == 0); 741 ASSERT(length > 0 && (length % sizeof(u32)) == 0);
742 supported_npad_id_types.clear(); 742 supported_npad_id_types.clear();
743 supported_npad_id_types.resize(length / sizeof(u32)); 743 supported_npad_id_types.resize(length / sizeof(u32));
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h
index 1a589cca2..988ac8ec4 100644
--- a/src/core/hle/service/hid/controllers/npad.h
+++ b/src/core/hle/service/hid/controllers/npad.h
@@ -95,7 +95,7 @@ public:
95 void SetSupportedStyleSet(Core::HID::NpadStyleTag style_set); 95 void SetSupportedStyleSet(Core::HID::NpadStyleTag style_set);
96 Core::HID::NpadStyleTag GetSupportedStyleSet() const; 96 Core::HID::NpadStyleTag GetSupportedStyleSet() const;
97 97
98 void SetSupportedNpadIdTypes(u8* data, std::size_t length); 98 void SetSupportedNpadIdTypes(const u8* const data, std::size_t length);
99 void GetSupportedNpadIdTypes(u32* data, std::size_t max_length); 99 void GetSupportedNpadIdTypes(u32* data, std::size_t max_length);
100 std::size_t GetSupportedNpadIdTypesSize() const; 100 std::size_t GetSupportedNpadIdTypesSize() const;
101 101
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp
index bf28440c6..80db6af06 100644
--- a/src/core/hle/service/hid/hid.cpp
+++ b/src/core/hle/service/hid/hid.cpp
@@ -1026,7 +1026,7 @@ void Hid::SetSupportedNpadIdType(Kernel::HLERequestContext& ctx) {
1026 const auto applet_resource_user_id{rp.Pop<u64>()}; 1026 const auto applet_resource_user_id{rp.Pop<u64>()};
1027 1027
1028 applet_resource->GetController<Controller_NPad>(HidController::NPad) 1028 applet_resource->GetController<Controller_NPad>(HidController::NPad)
1029 .SetSupportedNpadIdTypes(ctx.ReadBuffer().data(), ctx.GetReadBufferSize()); 1029 .SetSupportedNpadIdTypes(ctx.ReadBufferSpan().data(), ctx.GetReadBufferSize());
1030 1030
1031 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); 1031 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
1032 1032
@@ -1564,8 +1564,8 @@ void Hid::SendVibrationValues(Kernel::HLERequestContext& ctx) {
1564 IPC::RequestParser rp{ctx}; 1564 IPC::RequestParser rp{ctx};
1565 const auto applet_resource_user_id{rp.Pop<u64>()}; 1565 const auto applet_resource_user_id{rp.Pop<u64>()};
1566 1566
1567 const auto handles = ctx.ReadBuffer(0); 1567 const auto handles = ctx.ReadBufferSpan(0);
1568 const auto vibrations = ctx.ReadBuffer(1); 1568 const auto vibrations = ctx.ReadBufferSpan(1);
1569 1569
1570 std::vector<Core::HID::VibrationDeviceHandle> vibration_device_handles( 1570 std::vector<Core::HID::VibrationDeviceHandle> vibration_device_handles(
1571 handles.size() / sizeof(Core::HID::VibrationDeviceHandle)); 1571 handles.size() / sizeof(Core::HID::VibrationDeviceHandle));
@@ -2104,7 +2104,7 @@ void Hid::WritePalmaRgbLedPatternEntry(Kernel::HLERequestContext& ctx) {
2104 const auto connection_handle{rp.PopRaw<Controller_Palma::PalmaConnectionHandle>()}; 2104 const auto connection_handle{rp.PopRaw<Controller_Palma::PalmaConnectionHandle>()};
2105 const auto unknown{rp.Pop<u64>()}; 2105 const auto unknown{rp.Pop<u64>()};
2106 2106
2107 const auto buffer = ctx.ReadBuffer(); 2107 [[maybe_unused]] const auto buffer = ctx.ReadBufferSpan();
2108 2108
2109 LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}, unknown={}", 2109 LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}, unknown={}",
2110 connection_handle.npad_id, unknown); 2110 connection_handle.npad_id, unknown);
diff --git a/src/core/hle/service/jit/jit.cpp b/src/core/hle/service/jit/jit.cpp
index 8f2920c51..534639ff9 100644
--- a/src/core/hle/service/jit/jit.cpp
+++ b/src/core/hle/service/jit/jit.cpp
@@ -62,7 +62,7 @@ public:
62 const auto parameters{rp.PopRaw<InputParameters>()}; 62 const auto parameters{rp.PopRaw<InputParameters>()};
63 63
64 // Optional input/output buffers 64 // Optional input/output buffers
65 std::vector<u8> input_buffer{ctx.CanReadBuffer() ? ctx.ReadBuffer() : std::vector<u8>()}; 65 const auto input_buffer{ctx.CanReadBuffer() ? ctx.ReadBufferSpan() : std::span<const u8>()};
66 std::vector<u8> output_buffer(ctx.CanWriteBuffer() ? ctx.GetWriteBufferSize() : 0); 66 std::vector<u8> output_buffer(ctx.CanWriteBuffer() ? ctx.GetWriteBufferSize() : 0);
67 67
68 // Function call prototype: 68 // Function call prototype:
@@ -132,7 +132,7 @@ public:
132 const auto command{rp.PopRaw<u64>()}; 132 const auto command{rp.PopRaw<u64>()};
133 133
134 // Optional input/output buffers 134 // Optional input/output buffers
135 std::vector<u8> input_buffer{ctx.CanReadBuffer() ? ctx.ReadBuffer() : std::vector<u8>()}; 135 const auto input_buffer{ctx.CanReadBuffer() ? ctx.ReadBufferSpan() : std::span<const u8>()};
136 std::vector<u8> output_buffer(ctx.CanWriteBuffer() ? ctx.GetWriteBufferSize() : 0); 136 std::vector<u8> output_buffer(ctx.CanWriteBuffer() ? ctx.GetWriteBufferSize() : 0);
137 137
138 // Function call prototype: 138 // Function call prototype:
@@ -176,7 +176,7 @@ public:
176 IPC::RequestParser rp{ctx}; 176 IPC::RequestParser rp{ctx};
177 const auto tmem_size{rp.PopRaw<u64>()}; 177 const auto tmem_size{rp.PopRaw<u64>()};
178 const auto tmem_handle{ctx.GetCopyHandle(0)}; 178 const auto tmem_handle{ctx.GetCopyHandle(0)};
179 const auto nro_plugin{ctx.ReadBuffer(1)}; 179 const auto nro_plugin{ctx.ReadBufferSpan(1)};
180 180
181 if (tmem_size == 0) { 181 if (tmem_size == 0) {
182 LOG_ERROR(Service_JIT, "attempted to load plugin with empty transfer memory"); 182 LOG_ERROR(Service_JIT, "attempted to load plugin with empty transfer memory");
diff --git a/src/core/hle/service/ldn/ldn.cpp b/src/core/hle/service/ldn/ldn.cpp
index c49c61cff..ad097a6ef 100644
--- a/src/core/hle/service/ldn/ldn.cpp
+++ b/src/core/hle/service/ldn/ldn.cpp
@@ -412,7 +412,7 @@ public:
412 } 412 }
413 413
414 void SetAdvertiseData(Kernel::HLERequestContext& ctx) { 414 void SetAdvertiseData(Kernel::HLERequestContext& ctx) {
415 std::vector<u8> read_buffer = ctx.ReadBuffer(); 415 const auto read_buffer = ctx.ReadBufferSpan();
416 416
417 IPC::ResponseBuilder rb{ctx, 2}; 417 IPC::ResponseBuilder rb{ctx, 2};
418 rb.Push(lan_discovery.SetAdvertiseData(read_buffer)); 418 rb.Push(lan_discovery.SetAdvertiseData(read_buffer));
@@ -464,7 +464,7 @@ public:
464 parameters.security_config.passphrase_size, 464 parameters.security_config.passphrase_size,
465 parameters.security_config.security_mode, parameters.local_communication_version); 465 parameters.security_config.security_mode, parameters.local_communication_version);
466 466
467 const std::vector<u8> read_buffer = ctx.ReadBuffer(); 467 const auto read_buffer = ctx.ReadBufferSpan();
468 if (read_buffer.size() != sizeof(NetworkInfo)) { 468 if (read_buffer.size() != sizeof(NetworkInfo)) {
469 LOG_ERROR(Frontend, "NetworkInfo doesn't match read_buffer size!"); 469 LOG_ERROR(Frontend, "NetworkInfo doesn't match read_buffer size!");
470 IPC::ResponseBuilder rb{ctx, 2}; 470 IPC::ResponseBuilder rb{ctx, 2};
diff --git a/src/core/hle/service/lm/lm.cpp b/src/core/hle/service/lm/lm.cpp
index ef4b54046..0da461e6c 100644
--- a/src/core/hle/service/lm/lm.cpp
+++ b/src/core/hle/service/lm/lm.cpp
@@ -94,7 +94,7 @@ public:
94private: 94private:
95 void Log(Kernel::HLERequestContext& ctx) { 95 void Log(Kernel::HLERequestContext& ctx) {
96 std::size_t offset{}; 96 std::size_t offset{};
97 const auto data = ctx.ReadBuffer(); 97 const auto data = ctx.ReadBufferSpan();
98 98
99 // This function only succeeds - Get that out of the way 99 // This function only succeeds - Get that out of the way
100 IPC::ResponseBuilder rb{ctx, 2}; 100 IPC::ResponseBuilder rb{ctx, 2};
diff --git a/src/core/hle/service/nfc/mifare_user.cpp b/src/core/hle/service/nfc/mifare_user.cpp
index 51523a3ae..7d391c936 100644
--- a/src/core/hle/service/nfc/mifare_user.cpp
+++ b/src/core/hle/service/nfc/mifare_user.cpp
@@ -168,7 +168,7 @@ void MFIUser::StopDetection(Kernel::HLERequestContext& ctx) {
168void MFIUser::Read(Kernel::HLERequestContext& ctx) { 168void MFIUser::Read(Kernel::HLERequestContext& ctx) {
169 IPC::RequestParser rp{ctx}; 169 IPC::RequestParser rp{ctx};
170 const auto device_handle{rp.Pop<u64>()}; 170 const auto device_handle{rp.Pop<u64>()};
171 const auto buffer{ctx.ReadBuffer()}; 171 const auto buffer{ctx.ReadBufferSpan()};
172 const auto number_of_commands{ctx.GetReadBufferNumElements<NFP::MifareReadBlockParameter>()}; 172 const auto number_of_commands{ctx.GetReadBufferNumElements<NFP::MifareReadBlockParameter>()};
173 std::vector<NFP::MifareReadBlockParameter> read_commands(number_of_commands); 173 std::vector<NFP::MifareReadBlockParameter> read_commands(number_of_commands);
174 174
@@ -209,7 +209,7 @@ void MFIUser::Read(Kernel::HLERequestContext& ctx) {
209void MFIUser::Write(Kernel::HLERequestContext& ctx) { 209void MFIUser::Write(Kernel::HLERequestContext& ctx) {
210 IPC::RequestParser rp{ctx}; 210 IPC::RequestParser rp{ctx};
211 const auto device_handle{rp.Pop<u64>()}; 211 const auto device_handle{rp.Pop<u64>()};
212 const auto buffer{ctx.ReadBuffer()}; 212 const auto buffer{ctx.ReadBufferSpan()};
213 const auto number_of_commands{ctx.GetReadBufferNumElements<NFP::MifareWriteBlockParameter>()}; 213 const auto number_of_commands{ctx.GetReadBufferNumElements<NFP::MifareWriteBlockParameter>()};
214 std::vector<NFP::MifareWriteBlockParameter> write_commands(number_of_commands); 214 std::vector<NFP::MifareWriteBlockParameter> write_commands(number_of_commands);
215 215
diff --git a/src/core/hle/service/nfc/nfc_user.cpp b/src/core/hle/service/nfc/nfc_user.cpp
index 89aa6b3f5..5dcf8a423 100644
--- a/src/core/hle/service/nfc/nfc_user.cpp
+++ b/src/core/hle/service/nfc/nfc_user.cpp
@@ -325,7 +325,7 @@ void IUser::SendCommandByPassThrough(Kernel::HLERequestContext& ctx) {
325 IPC::RequestParser rp{ctx}; 325 IPC::RequestParser rp{ctx};
326 const auto device_handle{rp.Pop<u64>()}; 326 const auto device_handle{rp.Pop<u64>()};
327 const auto timeout{rp.PopRaw<Time::Clock::TimeSpanType>()}; 327 const auto timeout{rp.PopRaw<Time::Clock::TimeSpanType>()};
328 const auto command_data{ctx.ReadBuffer()}; 328 const auto command_data{ctx.ReadBufferSpan()};
329 329
330 LOG_INFO(Service_NFC, "(STUBBED) called, device_handle={}, timeout={}, data_size={}", 330 LOG_INFO(Service_NFC, "(STUBBED) called, device_handle={}, timeout={}, data_size={}",
331 device_handle, timeout.ToSeconds(), command_data.size()); 331 device_handle, timeout.ToSeconds(), command_data.size());
diff --git a/src/core/hle/service/nfp/nfp_user.cpp b/src/core/hle/service/nfp/nfp_user.cpp
index a4d3d1bc7..0a5606756 100644
--- a/src/core/hle/service/nfp/nfp_user.cpp
+++ b/src/core/hle/service/nfp/nfp_user.cpp
@@ -290,7 +290,7 @@ void IUser::GetApplicationArea(Kernel::HLERequestContext& ctx) {
290void IUser::SetApplicationArea(Kernel::HLERequestContext& ctx) { 290void IUser::SetApplicationArea(Kernel::HLERequestContext& ctx) {
291 IPC::RequestParser rp{ctx}; 291 IPC::RequestParser rp{ctx};
292 const auto device_handle{rp.Pop<u64>()}; 292 const auto device_handle{rp.Pop<u64>()};
293 const auto data{ctx.ReadBuffer()}; 293 const auto data{ctx.ReadBufferSpan()};
294 LOG_INFO(Service_NFP, "called, device_handle={}, data_size={}", device_handle, data.size()); 294 LOG_INFO(Service_NFP, "called, device_handle={}, data_size={}", device_handle, data.size());
295 295
296 if (state == State::NonInitialized) { 296 if (state == State::NonInitialized) {
@@ -370,7 +370,7 @@ void IUser::CreateApplicationArea(Kernel::HLERequestContext& ctx) {
370 IPC::RequestParser rp{ctx}; 370 IPC::RequestParser rp{ctx};
371 const auto device_handle{rp.Pop<u64>()}; 371 const auto device_handle{rp.Pop<u64>()};
372 const auto access_id{rp.Pop<u32>()}; 372 const auto access_id{rp.Pop<u32>()};
373 const auto data{ctx.ReadBuffer()}; 373 const auto data{ctx.ReadBufferSpan()};
374 LOG_INFO(Service_NFP, "called, device_handle={}, data_size={}, access_id={}", device_handle, 374 LOG_INFO(Service_NFP, "called, device_handle={}, data_size={}, access_id={}", device_handle,
375 access_id, data.size()); 375 access_id, data.size());
376 376
@@ -637,7 +637,7 @@ void IUser::RecreateApplicationArea(Kernel::HLERequestContext& ctx) {
637 IPC::RequestParser rp{ctx}; 637 IPC::RequestParser rp{ctx};
638 const auto device_handle{rp.Pop<u64>()}; 638 const auto device_handle{rp.Pop<u64>()};
639 const auto access_id{rp.Pop<u32>()}; 639 const auto access_id{rp.Pop<u32>()};
640 const auto data{ctx.ReadBuffer()}; 640 const auto data{ctx.ReadBufferSpan()};
641 LOG_INFO(Service_NFP, "called, device_handle={}, data_size={}, access_id={}", device_handle, 641 LOG_INFO(Service_NFP, "called, device_handle={}, data_size={}, access_id={}", device_handle,
642 access_id, data.size()); 642 access_id, data.size());
643 643
diff --git a/src/core/hle/service/ngct/ngct.cpp b/src/core/hle/service/ngct/ngct.cpp
index 8af8a835d..bee62b054 100644
--- a/src/core/hle/service/ngct/ngct.cpp
+++ b/src/core/hle/service/ngct/ngct.cpp
@@ -24,7 +24,7 @@ public:
24 24
25private: 25private:
26 void Match(Kernel::HLERequestContext& ctx) { 26 void Match(Kernel::HLERequestContext& ctx) {
27 const auto buffer = ctx.ReadBuffer(); 27 const auto buffer = ctx.ReadBufferSpan();
28 const auto text = Common::StringFromFixedZeroTerminatedBuffer( 28 const auto text = Common::StringFromFixedZeroTerminatedBuffer(
29 reinterpret_cast<const char*>(buffer.data()), buffer.size()); 29 reinterpret_cast<const char*>(buffer.data()), buffer.size());
30 30
@@ -37,7 +37,7 @@ private:
37 } 37 }
38 38
39 void Filter(Kernel::HLERequestContext& ctx) { 39 void Filter(Kernel::HLERequestContext& ctx) {
40 const auto buffer = ctx.ReadBuffer(); 40 const auto buffer = ctx.ReadBufferSpan();
41 const auto text = Common::StringFromFixedZeroTerminatedBuffer( 41 const auto text = Common::StringFromFixedZeroTerminatedBuffer(
42 reinterpret_cast<const char*>(buffer.data()), buffer.size()); 42 reinterpret_cast<const char*>(buffer.data()), buffer.size());
43 43
diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp
index 4fa9f51a6..a6446fdcc 100644
--- a/src/core/hle/service/nifm/nifm.cpp
+++ b/src/core/hle/service/nifm/nifm.cpp
@@ -414,7 +414,7 @@ void IGeneralService::CreateTemporaryNetworkProfile(Kernel::HLERequestContext& c
414 414
415 ASSERT_MSG(ctx.GetReadBufferSize() == 0x17c, "SfNetworkProfileData is not the correct size"); 415 ASSERT_MSG(ctx.GetReadBufferSize() == 0x17c, "SfNetworkProfileData is not the correct size");
416 u128 uuid{}; 416 u128 uuid{};
417 auto buffer = ctx.ReadBuffer(); 417 auto buffer = ctx.ReadBufferSpan();
418 std::memcpy(&uuid, buffer.data() + 8, sizeof(u128)); 418 std::memcpy(&uuid, buffer.data() + 8, sizeof(u128));
419 419
420 IPC::ResponseBuilder rb{ctx, 6, 0, 1}; 420 IPC::ResponseBuilder rb{ctx, 6, 0, 1};
diff --git a/src/core/hle/service/prepo/prepo.cpp b/src/core/hle/service/prepo/prepo.cpp
index 78f897d3e..f6a141b2e 100644
--- a/src/core/hle/service/prepo/prepo.cpp
+++ b/src/core/hle/service/prepo/prepo.cpp
@@ -57,13 +57,13 @@ private:
57 IPC::RequestParser rp{ctx}; 57 IPC::RequestParser rp{ctx};
58 const auto process_id = rp.PopRaw<u64>(); 58 const auto process_id = rp.PopRaw<u64>();
59 59
60 const auto data1 = ctx.ReadBuffer(0); 60 const auto data1 = ctx.ReadBufferSpan(0);
61 const auto data2 = [&ctx] { 61 const auto data2 = [&ctx] {
62 if (ctx.CanReadBuffer(1)) { 62 if (ctx.CanReadBuffer(1)) {
63 return ctx.ReadBuffer(1); 63 return ctx.ReadBufferSpan(1);
64 } 64 }
65 65
66 return std::vector<u8>{}; 66 return std::span<const u8>{};
67 }(); 67 }();
68 68
69 LOG_DEBUG(Service_PREPO, 69 LOG_DEBUG(Service_PREPO,
@@ -84,13 +84,13 @@ private:
84 const auto user_id = rp.PopRaw<u128>(); 84 const auto user_id = rp.PopRaw<u128>();
85 const auto process_id = rp.PopRaw<u64>(); 85 const auto process_id = rp.PopRaw<u64>();
86 86
87 const auto data1 = ctx.ReadBuffer(0); 87 const auto data1 = ctx.ReadBufferSpan(0);
88 const auto data2 = [&ctx] { 88 const auto data2 = [&ctx] {
89 if (ctx.CanReadBuffer(1)) { 89 if (ctx.CanReadBuffer(1)) {
90 return ctx.ReadBuffer(1); 90 return ctx.ReadBufferSpan(1);
91 } 91 }
92 92
93 return std::vector<u8>{}; 93 return std::span<const u8>{};
94 }(); 94 }();
95 95
96 LOG_DEBUG(Service_PREPO, 96 LOG_DEBUG(Service_PREPO,
@@ -136,13 +136,13 @@ private:
136 IPC::RequestParser rp{ctx}; 136 IPC::RequestParser rp{ctx};
137 const auto title_id = rp.PopRaw<u64>(); 137 const auto title_id = rp.PopRaw<u64>();
138 138
139 const auto data1 = ctx.ReadBuffer(0); 139 const auto data1 = ctx.ReadBufferSpan(0);
140 const auto data2 = [&ctx] { 140 const auto data2 = [&ctx] {
141 if (ctx.CanReadBuffer(1)) { 141 if (ctx.CanReadBuffer(1)) {
142 return ctx.ReadBuffer(1); 142 return ctx.ReadBufferSpan(1);
143 } 143 }
144 144
145 return std::vector<u8>{}; 145 return std::span<const u8>{};
146 }(); 146 }();
147 147
148 LOG_DEBUG(Service_PREPO, "called, title_id={:016X}, data1_size={:016X}, data2_size={:016X}", 148 LOG_DEBUG(Service_PREPO, "called, title_id={:016X}, data1_size={:016X}, data2_size={:016X}",
@@ -160,13 +160,13 @@ private:
160 const auto user_id = rp.PopRaw<u128>(); 160 const auto user_id = rp.PopRaw<u128>();
161 const auto title_id = rp.PopRaw<u64>(); 161 const auto title_id = rp.PopRaw<u64>();
162 162
163 const auto data1 = ctx.ReadBuffer(0); 163 const auto data1 = ctx.ReadBufferSpan(0);
164 const auto data2 = [&ctx] { 164 const auto data2 = [&ctx] {
165 if (ctx.CanReadBuffer(1)) { 165 if (ctx.CanReadBuffer(1)) {
166 return ctx.ReadBuffer(1); 166 return ctx.ReadBufferSpan(1);
167 } 167 }
168 168
169 return std::vector<u8>{}; 169 return std::span<const u8>{};
170 }(); 170 }();
171 171
172 LOG_DEBUG(Service_PREPO, 172 LOG_DEBUG(Service_PREPO,
diff --git a/src/core/hle/service/set/set_sys.cpp b/src/core/hle/service/set/set_sys.cpp
index 94c20edda..f1ace8184 100644
--- a/src/core/hle/service/set/set_sys.cpp
+++ b/src/core/hle/service/set/set_sys.cpp
@@ -131,12 +131,12 @@ void SET_SYS::GetSettingsItemValueSize(Kernel::HLERequestContext& ctx) {
131 131
132 // The category of the setting. This corresponds to the top-level keys of 132 // The category of the setting. This corresponds to the top-level keys of
133 // system_settings.ini. 133 // system_settings.ini.
134 const auto setting_category_buf{ctx.ReadBuffer(0)}; 134 const auto setting_category_buf{ctx.ReadBufferSpan(0)};
135 const std::string setting_category{setting_category_buf.begin(), setting_category_buf.end()}; 135 const std::string setting_category{setting_category_buf.begin(), setting_category_buf.end()};
136 136
137 // The name of the setting. This corresponds to the second-level keys of 137 // The name of the setting. This corresponds to the second-level keys of
138 // system_settings.ini. 138 // system_settings.ini.
139 const auto setting_name_buf{ctx.ReadBuffer(1)}; 139 const auto setting_name_buf{ctx.ReadBufferSpan(1)};
140 const std::string setting_name{setting_name_buf.begin(), setting_name_buf.end()}; 140 const std::string setting_name{setting_name_buf.begin(), setting_name_buf.end()};
141 141
142 auto settings{GetSettings()}; 142 auto settings{GetSettings()};
@@ -156,12 +156,12 @@ void SET_SYS::GetSettingsItemValue(Kernel::HLERequestContext& ctx) {
156 156
157 // The category of the setting. This corresponds to the top-level keys of 157 // The category of the setting. This corresponds to the top-level keys of
158 // system_settings.ini. 158 // system_settings.ini.
159 const auto setting_category_buf{ctx.ReadBuffer(0)}; 159 const auto setting_category_buf{ctx.ReadBufferSpan(0)};
160 const std::string setting_category{setting_category_buf.begin(), setting_category_buf.end()}; 160 const std::string setting_category{setting_category_buf.begin(), setting_category_buf.end()};
161 161
162 // The name of the setting. This corresponds to the second-level keys of 162 // The name of the setting. This corresponds to the second-level keys of
163 // system_settings.ini. 163 // system_settings.ini.
164 const auto setting_name_buf{ctx.ReadBuffer(1)}; 164 const auto setting_name_buf{ctx.ReadBufferSpan(1)};
165 const std::string setting_name{setting_name_buf.begin(), setting_name_buf.end()}; 165 const std::string setting_name{setting_name_buf.begin(), setting_name_buf.end()};
166 166
167 auto settings{GetSettings()}; 167 auto settings{GetSettings()};
diff --git a/src/core/hle/service/sockets/sfdnsres.cpp b/src/core/hle/service/sockets/sfdnsres.cpp
index 097c37d7a..6d0e1dd6c 100644
--- a/src/core/hle/service/sockets/sfdnsres.cpp
+++ b/src/core/hle/service/sockets/sfdnsres.cpp
@@ -199,10 +199,10 @@ static std::pair<u32, s32> GetAddrInfoRequestImpl(Kernel::HLERequestContext& ctx
199 "called with ignored parameters: use_nsd_resolve={}, unknown={}, process_id={}", 199 "called with ignored parameters: use_nsd_resolve={}, unknown={}, process_id={}",
200 parameters.use_nsd_resolve, parameters.unknown, parameters.process_id); 200 parameters.use_nsd_resolve, parameters.unknown, parameters.process_id);
201 201
202 const auto host_buffer = ctx.ReadBuffer(0); 202 const auto host_buffer = ctx.ReadBufferSpan(0);
203 const std::string host = Common::StringFromBuffer(host_buffer); 203 const std::string host = Common::StringFromBuffer(host_buffer);
204 204
205 const auto service_buffer = ctx.ReadBuffer(1); 205 const auto service_buffer = ctx.ReadBufferSpan(1);
206 const std::string service = Common::StringFromBuffer(service_buffer); 206 const std::string service = Common::StringFromBuffer(service_buffer);
207 207
208 addrinfo* addrinfo; 208 addrinfo* addrinfo;
@@ -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 \ No newline at end of file 246} // namespace Service::Sockets
diff --git a/src/core/hle/service/ssl/ssl.cpp b/src/core/hle/service/ssl/ssl.cpp
index 3735e0452..10851f08f 100644
--- a/src/core/hle/service/ssl/ssl.cpp
+++ b/src/core/hle/service/ssl/ssl.cpp
@@ -101,7 +101,7 @@ private:
101 void ImportServerPki(Kernel::HLERequestContext& ctx) { 101 void ImportServerPki(Kernel::HLERequestContext& ctx) {
102 IPC::RequestParser rp{ctx}; 102 IPC::RequestParser rp{ctx};
103 const auto certificate_format = rp.PopEnum<CertificateFormat>(); 103 const auto certificate_format = rp.PopEnum<CertificateFormat>();
104 const auto pkcs_12_certificates = ctx.ReadBuffer(0); 104 [[maybe_unused]] const auto pkcs_12_certificates = ctx.ReadBufferSpan(0);
105 105
106 constexpr u64 server_id = 0; 106 constexpr u64 server_id = 0;
107 107
@@ -113,13 +113,13 @@ private:
113 } 113 }
114 114
115 void ImportClientPki(Kernel::HLERequestContext& ctx) { 115 void ImportClientPki(Kernel::HLERequestContext& ctx) {
116 const auto pkcs_12_certificate = ctx.ReadBuffer(0); 116 [[maybe_unused]] const auto pkcs_12_certificate = ctx.ReadBufferSpan(0);
117 const auto ascii_password = [&ctx] { 117 [[maybe_unused]] const auto ascii_password = [&ctx] {
118 if (ctx.CanReadBuffer(1)) { 118 if (ctx.CanReadBuffer(1)) {
119 return ctx.ReadBuffer(1); 119 return ctx.ReadBufferSpan(1);
120 } 120 }
121 121
122 return std::vector<u8>{}; 122 return std::span<const u8>{};
123 }(); 123 }();
124 124
125 constexpr u64 client_id = 0; 125 constexpr u64 client_id = 0;
diff --git a/src/core/hle/service/time/time.cpp b/src/core/hle/service/time/time.cpp
index f77cdbb43..9376e0902 100644
--- a/src/core/hle/service/time/time.cpp
+++ b/src/core/hle/service/time/time.cpp
@@ -328,8 +328,8 @@ void Module::Interface::CalculateStandardUserSystemClockDifferenceByUser(
328 Clock::ClockSnapshot snapshot_a; 328 Clock::ClockSnapshot snapshot_a;
329 Clock::ClockSnapshot snapshot_b; 329 Clock::ClockSnapshot snapshot_b;
330 330
331 const auto snapshot_a_data = ctx.ReadBuffer(0); 331 const auto snapshot_a_data = ctx.ReadBufferSpan(0);
332 const auto snapshot_b_data = ctx.ReadBuffer(1); 332 const auto snapshot_b_data = ctx.ReadBufferSpan(1);
333 333
334 std::memcpy(&snapshot_a, snapshot_a_data.data(), sizeof(Clock::ClockSnapshot)); 334 std::memcpy(&snapshot_a, snapshot_a_data.data(), sizeof(Clock::ClockSnapshot));
335 std::memcpy(&snapshot_b, snapshot_b_data.data(), sizeof(Clock::ClockSnapshot)); 335 std::memcpy(&snapshot_b, snapshot_b_data.data(), sizeof(Clock::ClockSnapshot));
@@ -355,8 +355,8 @@ void Module::Interface::CalculateSpanBetween(Kernel::HLERequestContext& ctx) {
355 Clock::ClockSnapshot snapshot_a; 355 Clock::ClockSnapshot snapshot_a;
356 Clock::ClockSnapshot snapshot_b; 356 Clock::ClockSnapshot snapshot_b;
357 357
358 const auto snapshot_a_data = ctx.ReadBuffer(0); 358 const auto snapshot_a_data = ctx.ReadBufferSpan(0);
359 const auto snapshot_b_data = ctx.ReadBuffer(1); 359 const auto snapshot_b_data = ctx.ReadBufferSpan(1);
360 360
361 std::memcpy(&snapshot_a, snapshot_a_data.data(), sizeof(Clock::ClockSnapshot)); 361 std::memcpy(&snapshot_a, snapshot_a_data.data(), sizeof(Clock::ClockSnapshot));
362 std::memcpy(&snapshot_b, snapshot_b_data.data(), sizeof(Clock::ClockSnapshot)); 362 std::memcpy(&snapshot_b, snapshot_b_data.data(), sizeof(Clock::ClockSnapshot));
diff --git a/src/core/hle/service/time/time_zone_service.cpp b/src/core/hle/service/time/time_zone_service.cpp
index 961040bfc..6d05a66f1 100644
--- a/src/core/hle/service/time/time_zone_service.cpp
+++ b/src/core/hle/service/time/time_zone_service.cpp
@@ -84,7 +84,7 @@ void ITimeZoneService::ToCalendarTime(Kernel::HLERequestContext& ctx) {
84 LOG_DEBUG(Service_Time, "called, posix_time=0x{:016X}", posix_time); 84 LOG_DEBUG(Service_Time, "called, posix_time=0x{:016X}", posix_time);
85 85
86 TimeZone::TimeZoneRule time_zone_rule{}; 86 TimeZone::TimeZoneRule time_zone_rule{};
87 const auto buffer{ctx.ReadBuffer()}; 87 const auto buffer{ctx.ReadBufferSpan()};
88 std::memcpy(&time_zone_rule, buffer.data(), buffer.size()); 88 std::memcpy(&time_zone_rule, buffer.data(), buffer.size());
89 89
90 TimeZone::CalendarInfo calendar_info{}; 90 TimeZone::CalendarInfo calendar_info{};
@@ -128,7 +128,7 @@ void ITimeZoneService::ToPosixTime(Kernel::HLERequestContext& ctx) {
128 IPC::RequestParser rp{ctx}; 128 IPC::RequestParser rp{ctx};
129 const auto calendar_time{rp.PopRaw<TimeZone::CalendarTime>()}; 129 const auto calendar_time{rp.PopRaw<TimeZone::CalendarTime>()};
130 TimeZone::TimeZoneRule time_zone_rule{}; 130 TimeZone::TimeZoneRule time_zone_rule{};
131 std::memcpy(&time_zone_rule, ctx.ReadBuffer().data(), sizeof(TimeZone::TimeZoneRule)); 131 std::memcpy(&time_zone_rule, ctx.ReadBufferSpan().data(), sizeof(TimeZone::TimeZoneRule));
132 132
133 s64 posix_time{}; 133 s64 posix_time{};
134 if (const Result result{time_zone_content_manager.GetTimeZoneManager().ToPosixTime( 134 if (const Result result{time_zone_content_manager.GetTimeZoneManager().ToPosixTime(
diff --git a/src/core/reporter.cpp b/src/core/reporter.cpp
index 77821e047..59dfb8767 100644
--- a/src/core/reporter.cpp
+++ b/src/core/reporter.cpp
@@ -312,7 +312,7 @@ void Reporter::SaveUnimplementedAppletReport(
312} 312}
313 313
314void Reporter::SavePlayReport(PlayReportType type, u64 title_id, 314void Reporter::SavePlayReport(PlayReportType type, u64 title_id,
315 const std::vector<std::vector<u8>>& data, 315 const std::vector<std::span<const u8>>& data,
316 std::optional<u64> process_id, std::optional<u128> user_id) const { 316 std::optional<u64> process_id, std::optional<u128> user_id) const {
317 if (!IsReportingEnabled()) { 317 if (!IsReportingEnabled()) {
318 return; 318 return;
diff --git a/src/core/reporter.h b/src/core/reporter.h
index 9fdb9d6c1..bb11f8e7c 100644
--- a/src/core/reporter.h
+++ b/src/core/reporter.h
@@ -5,6 +5,7 @@
5 5
6#include <array> 6#include <array>
7#include <optional> 7#include <optional>
8#include <span>
8#include <string> 9#include <string>
9#include <vector> 10#include <vector>
10#include "common/common_types.h" 11#include "common/common_types.h"
@@ -56,7 +57,8 @@ public:
56 System, 57 System,
57 }; 58 };
58 59
59 void SavePlayReport(PlayReportType type, u64 title_id, const std::vector<std::vector<u8>>& data, 60 void SavePlayReport(PlayReportType type, u64 title_id,
61 const std::vector<std::span<const u8>>& data,
60 std::optional<u64> process_id = {}, std::optional<u128> user_id = {}) const; 62 std::optional<u64> process_id = {}, std::optional<u128> user_id = {}) const;
61 63
62 // Used by error applet 64 // Used by error applet