summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2018-06-02 14:57:16 -0400
committerLioncash <mathew1800@gmail.com>2018-06-02 15:02:03 -0400
commit4601136b0876c26105bfc45153128a8dc5065efd (patch)
tree5168ab23f9146650f8efbac7669951a6d8167415 /Source/Core
parent13e828fd4d7220cf51e0e3a3ee09e09d89509a45 (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.cpp16
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: