From fced942020f575ae905c95462f25cc10fe1e8048 Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Tue, 22 Jul 2014 23:24:49 -0700 Subject: [PATCH] Safer type-punning --- Sources/Plasma/CoreLib/HeadSpin.h | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/Sources/Plasma/CoreLib/HeadSpin.h b/Sources/Plasma/CoreLib/HeadSpin.h index f4a6e7fe..9a883e09 100644 --- a/Sources/Plasma/CoreLib/HeadSpin.h +++ b/Sources/Plasma/CoreLib/HeadSpin.h @@ -177,15 +177,25 @@ inline uint64_t hsSwapEndian64(uint64_t value) } inline float hsSwapEndianFloat(float fvalue) { - uint32_t value = *(uint32_t*)&fvalue; - value = hsSwapEndian32(value); - return *(float*)&value; + union { + uint32_t i; + float f; + } value; + + value.f = fvalue; + value.i = hsSwapEndian32(value.i); + return value.f; } inline double hsSwapEndianDouble(double dvalue) { - uint64_t value = *(uint64_t*)&dvalue; - value = hsSwapEndian64(value); - return *(double*)&value; + union { + uint64_t i; + double f; + } value; + + value.f = dvalue; + value.i = hsSwapEndian64(value.i); + return value.f; } #if LITTLE_ENDIAN