On 5/16/2017 3:13 PM, Johannes Sixt wrote:
Am 16.05.2017 um 19:17 schrieb Ben Peart:
OK, now I'm confused as to the best path for adding a get_be64. This
one is trivial:
#define get_be64(p) ntohll(*(uint64_t *)(p))
I cringe when I see a cast like this. Unless you can guarantee that p is
char* (bare or signed or unsigned), you fall pray to strict aliasing
violations, aka undefined behavior. And I'm not even mentioning correct
alignment, yet.
-- Hannes
Note, this macro is only used where the CPU architecture is OK with
unaligned memory access. You can see it in context with many similar
macros and casts in bswap.h. It's outside the scope of this patch
series to fix them all. Perhaps a separate patch series?