aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/ndpi_define.h.in9
-rw-r--r--src/lib/protocols/quic.c9
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;