Bladeren bron

Merge pull request #1225 from lioncash/clean

csnd_snd: Get rid of type punning
bunnei 10 jaren geleden
bovenliggende
commit
e906165229
1 gewijzigde bestanden met toevoegingen van 13 en 12 verwijderingen
  1. 13 12
      src/core/hle/service/csnd_snd.cpp

+ 13 - 12
src/core/hle/service/csnd_snd.cpp

@@ -2,6 +2,7 @@
 // Licensed under GPLv2 or any later version
 // Refer to the license.txt file included.
 
+#include <cstring>
 #include "core/hle/hle.h"
 #include "core/hle/kernel/mutex.h"
 #include "core/hle/kernel/shared_memory.h"
@@ -52,19 +53,19 @@ void Initialize(Service::Interface* self) {
 }
 
 void ExecuteType0Commands(Service::Interface* self) {
-    u32* cmd_buff = Kernel::GetCommandBuffer();
+    u32* const cmd_buff = Kernel::GetCommandBuffer();
+    u8*  const ptr = shared_memory->GetPointer(cmd_buff[1]);
+
+    if (shared_memory != nullptr && ptr != nullptr) {
+        Type0Command command;
+        std::memcpy(&command, ptr, sizeof(Type0Command));
+
+        LOG_WARNING(Service, "(STUBBED) CSND_SND::ExecuteType0Commands");
+        command.finished |= 1;
+        cmd_buff[1] = 0;
 
-    if (shared_memory != nullptr) {
-        struct Type0Command* command = reinterpret_cast<struct Type0Command*>(
-                shared_memory->GetPointer(cmd_buff[1]));
-        if (command == nullptr) {
-            cmd_buff[1] = 1;
-        }else{
-            LOG_WARNING(Service, "(STUBBED) CSND_SND::ExecuteType0Commands");
-            command->finished |= 1;
-            cmd_buff[1] = 0;
-        }
-    }else{
+        std::memcpy(ptr, &command, sizeof(Type0Command));
+    } else {
         cmd_buff[1] = 1;
     }
 }