summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGravatar bunnei2018-02-14 00:14:17 -0500
committerGravatar bunnei2018-02-14 00:14:17 -0500
commit6fd19f05f1eba884a20e79ee43fce1af388204d4 (patch)
treebbda0c9e467045c4bef0fc576846339d43ebe26a /src/core
parentservice: Remove remaining uses of BufferDescriptor*. (diff)
downloadyuzu-6fd19f05f1eba884a20e79ee43fce1af388204d4.tar.gz
yuzu-6fd19f05f1eba884a20e79ee43fce1af388204d4.tar.xz
yuzu-6fd19f05f1eba884a20e79ee43fce1af388204d4.zip
hle_ipc: Add GetReadBufferSize and check write buffer size.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/hle/kernel/hle_ipc.cpp7
-rw-r--r--src/core/hle/kernel/hle_ipc.h3
2 files changed, 10 insertions, 0 deletions
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp
index 0a9986c18..d592f502d 100644
--- a/src/core/hle/kernel/hle_ipc.cpp
+++ b/src/core/hle/kernel/hle_ipc.cpp
@@ -229,6 +229,8 @@ std::vector<u8> HLERequestContext::ReadBuffer() const {
229size_t HLERequestContext::WriteBuffer(const void* buffer, const size_t size) const { 229size_t HLERequestContext::WriteBuffer(const void* buffer, const size_t size) const {
230 const bool is_buffer_b{BufferDescriptorB().size() && BufferDescriptorB()[0].Size()}; 230 const bool is_buffer_b{BufferDescriptorB().size() && BufferDescriptorB()[0].Size()};
231 231
232 ASSERT_MSG(size <= GetWriteBufferSize(), "Size %d is too big", size);
233
232 if (is_buffer_b) { 234 if (is_buffer_b) {
233 Memory::WriteBlock(BufferDescriptorB()[0].Address(), buffer, size); 235 Memory::WriteBlock(BufferDescriptorB()[0].Address(), buffer, size);
234 } else { 236 } else {
@@ -242,6 +244,11 @@ size_t HLERequestContext::WriteBuffer(const std::vector<u8>& buffer) const {
242 return WriteBuffer(buffer.data(), buffer.size()); 244 return WriteBuffer(buffer.data(), buffer.size());
243} 245}
244 246
247size_t HLERequestContext::GetReadBufferSize() const {
248 const bool is_buffer_a{BufferDescriptorA().size() && BufferDescriptorA()[0].Size()};
249 return is_buffer_a ? BufferDescriptorA()[0].Size() : BufferDescriptorX()[0].Size();
250}
251
245size_t HLERequestContext::GetWriteBufferSize() const { 252size_t HLERequestContext::GetWriteBufferSize() const {
246 const bool is_buffer_b{BufferDescriptorB().size() && BufferDescriptorB()[0].Size()}; 253 const bool is_buffer_b{BufferDescriptorB().size() && BufferDescriptorB()[0].Size()};
247 return is_buffer_b ? BufferDescriptorB()[0].Size() : BufferDescriptorC()[0].Size(); 254 return is_buffer_b ? BufferDescriptorB()[0].Size() : BufferDescriptorC()[0].Size();
diff --git a/src/core/hle/kernel/hle_ipc.h b/src/core/hle/kernel/hle_ipc.h
index 0cc270909..5b1eae74a 100644
--- a/src/core/hle/kernel/hle_ipc.h
+++ b/src/core/hle/kernel/hle_ipc.h
@@ -152,6 +152,9 @@ public:
152 /// Helper function to write a buffer using the appropriate buffer descriptor 152 /// Helper function to write a buffer using the appropriate buffer descriptor
153 size_t WriteBuffer(const std::vector<u8>& buffer) const; 153 size_t WriteBuffer(const std::vector<u8>& buffer) const;
154 154
155 /// Helper function to get the size of the input buffer
156 size_t GetReadBufferSize() const;
157
155 /// Helper function to get the size of the output buffer 158 /// Helper function to get the size of the output buffer
156 size_t GetWriteBufferSize() const; 159 size_t GetWriteBufferSize() const;
157 160