diff options
| author | Lioncash <mathew1800@gmail.com> | 2018-06-02 14:57:16 -0400 |
|---|---|---|
| committer | Lioncash <mathew1800@gmail.com> | 2018-06-02 15:02:03 -0400 |
| commit | 4601136b0876c26105bfc45153128a8dc5065efd (patch) | |
| tree | 5168ab23f9146650f8efbac7669951a6d8167415 /Source/Core | |
| parent | 13e828fd4d7220cf51e0e3a3ee09e09d89509a45 (diff) | |
WiimoteDevice: Get rid of pointer casting in CBigEndianBuffer
Gets rid of more places where we can violate alignment requirements and
aliasing rules.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/IOS/USB/Bluetooth/WiimoteDevice.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/Source/Core/Core/IOS/USB/Bluetooth/WiimoteDevice.cpp b/Source/Core/Core/IOS/USB/Bluetooth/WiimoteDevice.cpp index 40970ba79c..d805121978 100644 --- a/Source/Core/Core/IOS/USB/Bluetooth/WiimoteDevice.cpp +++ b/Source/Core/Core/IOS/USB/Bluetooth/WiimoteDevice.cpp @@ -32,11 +32,19 @@ class CBigEndianBuffer public: CBigEndianBuffer(u8* pBuffer) : m_pBuffer(pBuffer) {} u8 Read8(u32 offset) const { return m_pBuffer[offset]; } - u16 Read16(u32 offset) const { return Common::swap16(*(u16*)&m_pBuffer[offset]); } - u32 Read32(u32 offset) const { return Common::swap32(*(u32*)&m_pBuffer[offset]); } + u16 Read16(u32 offset) const { return Common::swap16(&m_pBuffer[offset]); } + u32 Read32(u32 offset) const { return Common::swap32(&m_pBuffer[offset]); } void Write8(u32 offset, u8 data) { m_pBuffer[offset] = data; } - void Write16(u32 offset, u16 data) { *(u16*)&m_pBuffer[offset] = Common::swap16(data); } - void Write32(u32 offset, u32 data) { *(u32*)&m_pBuffer[offset] = Common::swap32(data); } + void Write16(u32 offset, u16 data) + { + const u16 swapped = Common::swap16(data); + std::memcpy(&m_pBuffer[offset], &swapped, sizeof(u16)); + } + void Write32(u32 offset, u32 data) + { + const u32 swapped = Common::swap32(data); + std::memcpy(&m_pBuffer[offset], &swapped, sizeof(u32)); + } u8* GetPointer(u32 offset) { return &m_pBuffer[offset]; } private: |
