diff options
| author | Garrett D'Amore <garrett@damore.org> | 2024-11-02 13:20:26 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2024-11-02 13:20:26 -0700 |
| commit | 9b27984d0e2da430b78a975e59f55c96de5f6056 (patch) | |
| tree | a047d3fb556fb79a87c92c8a4bc400be85202de7 /src/core | |
| parent | b3936a2d03a3909cd4fcca8c608f943b367c3c88 (diff) | |
| download | nng-9b27984d0e2da430b78a975e59f55c96de5f6056.tar.gz nng-9b27984d0e2da430b78a975e59f55c96de5f6056.tar.bz2 nng-9b27984d0e2da430b78a975e59f55c96de5f6056.zip | |
NNI_GETXX macros are brittle due to casting mistake.
Essentially, we forgot to dereference as uint8_t *, which can
lead to some suprises if these are misused.
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/defs.h | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/src/core/defs.h b/src/core/defs.h index 2d73f296..f367dcc4 100644 --- a/src/core/defs.h +++ b/src/core/defs.h @@ -104,25 +104,25 @@ typedef void (*nni_cb)(void *); (ptr)[7] = (uint8_t) ((uint64_t) (u)); \ } while (0) -#define NNI_GET16(ptr, v) \ - v = (((uint16_t) ((uint8_t) (ptr)[0])) << 8u) + \ - (((uint16_t) (uint8_t) (ptr)[1])) - -#define NNI_GET32(ptr, v) \ - v = (((uint32_t) ((uint8_t) (ptr)[0])) << 24u) + \ - (((uint32_t) ((uint8_t) (ptr)[1])) << 16u) + \ - (((uint32_t) ((uint8_t) (ptr)[2])) << 8u) + \ - (((uint32_t) (uint8_t) (ptr)[3])) - -#define NNI_GET64(ptr, v) \ - v = (((uint64_t) ((uint8_t) (ptr)[0])) << 56u) + \ - (((uint64_t) ((uint8_t) (ptr)[1])) << 48u) + \ - (((uint64_t) ((uint8_t) (ptr)[2])) << 40u) + \ - (((uint64_t) ((uint8_t) (ptr)[3])) << 32u) + \ - (((uint64_t) ((uint8_t) (ptr)[4])) << 24u) + \ - (((uint64_t) ((uint8_t) (ptr)[5])) << 16u) + \ - (((uint64_t) ((uint8_t) (ptr)[6])) << 8u) + \ - (((uint64_t) (uint8_t) (ptr)[7])) +#define NNI_GET16(ptr, v) \ + v = (((uint16_t) (((uint8_t *) (ptr))[0])) << 8u) + \ + ((uint16_t) ((uint8_t *) (ptr))[1]) + +#define NNI_GET32(ptr, v) \ + v = (((uint32_t) ((uint8_t *) (ptr))[0]) << 24u) + \ + (((uint32_t) ((uint8_t *) (ptr))[1]) << 16u) + \ + (((uint32_t) ((uint8_t *) (ptr))[2]) << 8u) + \ + ((uint32_t) ((uint8_t *) (ptr))[3]) + +#define NNI_GET64(ptr, v) \ + v = (((uint64_t) ((uint8_t *) (ptr))[0]) << 56u) + \ + (((uint64_t) ((uint8_t *) (ptr))[1]) << 48u) + \ + (((uint64_t) ((uint8_t *) (ptr))[2]) << 40u) + \ + (((uint64_t) ((uint8_t *) (ptr))[3]) << 32u) + \ + (((uint64_t) ((uint8_t *) (ptr))[4]) << 24u) + \ + (((uint64_t) ((uint8_t *) (ptr))[5]) << 16u) + \ + (((uint64_t) ((uint8_t *) (ptr))[6]) << 8u) + \ + ((uint64_t) ((uint8_t *) (ptr))[7]) // Modern CPUs are all little endian. Let's stop paying the endian tax. |
