random.c: Avoid UB type punning that results in miscompilation

This commit is contained in:
fincs 2021-12-05 19:31:42 +01:00
parent 16f8547f4c
commit 74c639ec3a
No known key found for this signature in database
GPG Key ID: 62C7609ADA219C60

View File

@ -18,10 +18,17 @@
#define ROTL32(x, n) (((x) << (n)) | ((x) >> (32-(n)))) #define ROTL32(x, n) (((x) << (n)) | ((x) >> (32-(n))))
#define U32TO8_LITTLE(p, v) \ #define U32TO8_LITTLE(p, v) \
(*(u32*)(p) = (v)) ({ \
u32 __temp = (v); \
__builtin_memcpy((void*)(p), &__temp, 4); \
})
#define U8TO32_LITTLE(p) \ #define U8TO32_LITTLE(p) \
(*(const u32*)(p)) ({ \
u32 __temp; \
__builtin_memcpy(&__temp, (const void*)(p), 4); \
__temp; \
})
#define ROTATE(v,c) (ROTL32(v,c)) #define ROTATE(v,c) (ROTL32(v,c))
#define XOR(v,w) ((v) ^ (w)) #define XOR(v,w) ((v) ^ (w))