diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/include/ndpi_define.h.in | 9 | ||||
-rw-r--r-- | src/lib/protocols/quic.c | 9 |
2 files changed, 10 insertions, 8 deletions
diff --git a/src/include/ndpi_define.h.in b/src/include/ndpi_define.h.in index 150b04940..996cdfa8f 100644 --- a/src/include/ndpi_define.h.in +++ b/src/include/ndpi_define.h.in @@ -319,7 +319,16 @@ #define get_u_int8_t(X,O) (*(u_int8_t *)((&(((u_int8_t *)X)[O])))) #define get_u_int16_t(X,O) (*(u_int16_t *)((&(((u_int8_t *)X)[O])))) #define get_u_int32_t(X,O) (*(u_int32_t *)((&(((u_int8_t *)X)[O])))) +#if defined(__arm__) +static inline u_int64_t get_u_int64_t(const u_int8_t* X, int O) +{ + u_int64_t tmp; + memcpy(&tmp, X + O, sizeof(tmp)); + return tmp; +} +#else #define get_u_int64_t(X,O) (*(u_int64_t *)((&(((u_int8_t *)X)[O])))) +#endif // __arm__ /* new definitions to get little endian from network bytes */ #define get_ul8(X,O) get_u_int8_t(X,O) diff --git a/src/lib/protocols/quic.c b/src/lib/protocols/quic.c index 5eb5e1a01..43fcd0759 100644 --- a/src/lib/protocols/quic.c +++ b/src/lib/protocols/quic.c @@ -196,14 +196,7 @@ int quic_len(const uint8_t *buf, uint64_t *value) *value = ntohl(*(uint32_t *)buf) & 0x3FFFFFFF; return 4; case 3: - { - u_int64_t n; - - /* Necessary as simple cast crashes on ARM */ - memcpy(&n, buf, sizeof(u_int64_t)); - - *value = ndpi_ntohll(n) & 0x3FFFFFFFFFFFFFFF; - } + *value = ndpi_ntohll(get_u_int64_t(buf, 0)) & 0x3FFFFFFFFFFFFFFF; return 8; default: /* No Possible */ return 0; |