GUACAMOLE-249: Test endianness of platform without violating strict aliasing rules.

Dereferencing a uint8_t array as uint32_t causes a build failure with
some compilers as it breaks strict aliasing rules.
This commit is contained in:
Michael Jumper 2020-01-12 14:10:07 -08:00
parent 4b1243fbf8
commit e9846945c7

View File

@ -25,14 +25,18 @@
#include <winpr/wtypes.h> #include <winpr/wtypes.h>
#include <stdint.h> #include <stdint.h>
#include <string.h>
UINT32 guac_rdp_get_native_pixel_format(BOOL alpha) { UINT32 guac_rdp_get_native_pixel_format(BOOL alpha) {
uint8_t color[] = { 0x0A, 0x0B, 0x0C, 0x0D }; uint32_t int_value;
uint8_t raw_bytes[4] = { 0x0A, 0x0B, 0x0C, 0x0D };
memcpy(&int_value, raw_bytes, sizeof(raw_bytes));
/* Local platform stores bytes in decreasing order of significance /* Local platform stores bytes in decreasing order of significance
* (big-endian) */ * (big-endian) */
if (*((uint32_t*) color) == 0x0A0B0C0D) if (int_value == 0x0A0B0C0D)
return alpha ? PIXEL_FORMAT_ARGB32 : PIXEL_FORMAT_XRGB32; return alpha ? PIXEL_FORMAT_ARGB32 : PIXEL_FORMAT_XRGB32;
/* Local platform stores bytes in increasing order of significance /* Local platform stores bytes in increasing order of significance