Revert "lib: endianness: don't break strict-aliasing"
This reverts commit 1afce9573a.
Turns out this is a misunderstanding of the C standard... meh.
This commit is contained in:
parent
97f30c591c
commit
81352b068d
1 changed files with 20 additions and 27 deletions
|
|
@ -13,7 +13,6 @@
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
|
||||||
#if defined(unix) && !defined(__APPLE__)
|
#if defined(unix) && !defined(__APPLE__)
|
||||||
#include <endian.h>
|
#include <endian.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -286,12 +285,10 @@ CAPN_INLINE uint16_t capn_flip16(uint16_t v) {
|
||||||
defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 8
|
defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 8
|
||||||
return __builtin_bswap16(v);
|
return __builtin_bswap16(v);
|
||||||
#else
|
#else
|
||||||
uint8_t sv[2];
|
union { uint16_t u; uint8_t v[2]; } s;
|
||||||
uint16_t ret;
|
s.v[0] = (uint8_t)v;
|
||||||
sv[0] = (uint8_t)v;
|
s.v[1] = (uint8_t)(v>>8);
|
||||||
sv[1] = (uint8_t)(v>>8);
|
return s.u;
|
||||||
memcpy(&ret, sv, sizeof(ret));
|
|
||||||
return ret;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
CAPN_INLINE uint32_t capn_flip32(uint32_t v) {
|
CAPN_INLINE uint32_t capn_flip32(uint32_t v) {
|
||||||
|
|
@ -301,14 +298,12 @@ CAPN_INLINE uint32_t capn_flip32(uint32_t v) {
|
||||||
defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 8
|
defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 8
|
||||||
return __builtin_bswap32(v);
|
return __builtin_bswap32(v);
|
||||||
#else
|
#else
|
||||||
uint8_t sv[4];
|
union { uint32_t u; uint8_t v[4]; } s;
|
||||||
uint32_t ret;
|
s.v[0] = (uint8_t)v;
|
||||||
sv[0] = (uint8_t)v;
|
s.v[1] = (uint8_t)(v>>8);
|
||||||
sv[1] = (uint8_t)(v>>8);
|
s.v[2] = (uint8_t)(v>>16);
|
||||||
sv[2] = (uint8_t)(v>>16);
|
s.v[3] = (uint8_t)(v>>24);
|
||||||
sv[3] = (uint8_t)(v>>24);
|
return s.u;
|
||||||
memcpy(&ret, sv, sizeof(ret));
|
|
||||||
return ret;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
CAPN_INLINE uint64_t capn_flip64(uint64_t v) {
|
CAPN_INLINE uint64_t capn_flip64(uint64_t v) {
|
||||||
|
|
@ -318,18 +313,16 @@ CAPN_INLINE uint64_t capn_flip64(uint64_t v) {
|
||||||
defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 8
|
defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 8
|
||||||
return __builtin_bswap64(v);
|
return __builtin_bswap64(v);
|
||||||
#else
|
#else
|
||||||
uint8_t sv[8];
|
union { uint64_t u; uint8_t v[8]; } s;
|
||||||
uint64_t ret;
|
s.v[0] = (uint8_t)v;
|
||||||
sv[0] = (uint8_t)v;
|
s.v[1] = (uint8_t)(v>>8);
|
||||||
sv[1] = (uint8_t)(v>>8);
|
s.v[2] = (uint8_t)(v>>16);
|
||||||
sv[2] = (uint8_t)(v>>16);
|
s.v[3] = (uint8_t)(v>>24);
|
||||||
sv[3] = (uint8_t)(v>>24);
|
s.v[4] = (uint8_t)(v>>32);
|
||||||
sv[4] = (uint8_t)(v>>32);
|
s.v[5] = (uint8_t)(v>>40);
|
||||||
sv[5] = (uint8_t)(v>>40);
|
s.v[6] = (uint8_t)(v>>48);
|
||||||
sv[6] = (uint8_t)(v>>48);
|
s.v[7] = (uint8_t)(v>>56);
|
||||||
sv[7] = (uint8_t)(v>>56);
|
return s.u;
|
||||||
memcpy(&ret, sv, sizeof(ret));
|
|
||||||
return ret;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue