diff options
Diffstat (limited to 'Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp')
-rw-r--r-- | Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp | 40 |
1 files changed, 19 insertions, 21 deletions
diff --git a/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp b/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp index e23d28a2c..73da9c914 100644 --- a/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp +++ b/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.cpp @@ -129,13 +129,19 @@ bool ArgumentDecoder::decodeVariableLengthByteArray(DataReference& dataReference return true; } +template<typename Type> +static void decodeValueFromBuffer(Type& value, uint8_t*& bufferPosition) +{ + memcpy(&value, bufferPosition, sizeof(value)); + bufferPosition += sizeof(Type); +} + bool ArgumentDecoder::decode(bool& result) { if (!alignBufferPosition(sizeof(result), sizeof(result))) return false; - result = *reinterpret_cast<bool*>(m_bufferPos); - m_bufferPos += sizeof(result); + decodeValueFromBuffer(result, m_bufferPos); return true; } @@ -144,8 +150,7 @@ bool ArgumentDecoder::decode(uint8_t& result) if (!alignBufferPosition(sizeof(result), sizeof(result))) return false; - result = *reinterpret_cast<uint8_t*>(m_bufferPos); - m_bufferPos += sizeof(result); + decodeValueFromBuffer(result, m_bufferPos); return true; } @@ -154,8 +159,7 @@ bool ArgumentDecoder::decode(uint16_t& result) if (!alignBufferPosition(sizeof(result), sizeof(result))) return false; - result = *reinterpret_cast_ptr<uint16_t*>(m_bufferPos); - m_bufferPos += sizeof(result); + decodeValueFromBuffer(result, m_bufferPos); return true; } @@ -163,9 +167,8 @@ bool ArgumentDecoder::decode(uint32_t& result) { if (!alignBufferPosition(sizeof(result), sizeof(result))) return false; - - result = *reinterpret_cast_ptr<uint32_t*>(m_bufferPos); - m_bufferPos += sizeof(result); + + decodeValueFromBuffer(result, m_bufferPos); return true; } @@ -174,8 +177,7 @@ bool ArgumentDecoder::decode(uint64_t& result) if (!alignBufferPosition(sizeof(result), sizeof(result))) return false; - result = *reinterpret_cast_ptr<uint64_t*>(m_bufferPos); - m_bufferPos += sizeof(result); + decodeValueFromBuffer(result, m_bufferPos); return true; } @@ -184,8 +186,7 @@ bool ArgumentDecoder::decode(int32_t& result) if (!alignBufferPosition(sizeof(result), sizeof(result))) return false; - result = *reinterpret_cast_ptr<uint32_t*>(m_bufferPos); - m_bufferPos += sizeof(result); + decodeValueFromBuffer(result, m_bufferPos); return true; } @@ -193,9 +194,8 @@ bool ArgumentDecoder::decode(int64_t& result) { if (!alignBufferPosition(sizeof(result), sizeof(result))) return false; - - result = *reinterpret_cast_ptr<uint64_t*>(m_bufferPos); - m_bufferPos += sizeof(result); + + decodeValueFromBuffer(result, m_bufferPos); return true; } @@ -203,9 +203,8 @@ bool ArgumentDecoder::decode(float& result) { if (!alignBufferPosition(sizeof(result), sizeof(result))) return false; - - result = *reinterpret_cast_ptr<float*>(m_bufferPos); - m_bufferPos += sizeof(result); + + decodeValueFromBuffer(result, m_bufferPos); return true; } @@ -214,8 +213,7 @@ bool ArgumentDecoder::decode(double& result) if (!alignBufferPosition(sizeof(result), sizeof(result))) return false; - result = *reinterpret_cast_ptr<double*>(m_bufferPos); - m_bufferPos += sizeof(result); + decodeValueFromBuffer(result, m_bufferPos); return true; } |