summaryrefslogtreecommitdiff
path: root/lib/unaligned.h
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2015-11-25 14:24:35 +0100
committerOndrej Zajicek (work) <santiago@crfreenet.org>2015-11-25 14:24:35 +0100
commit04ae8ddaa15b72c265dc7cf038b733d235198754 (patch)
treeeadc4dfee9a0f0eba3446538129608dffbde4625 /lib/unaligned.h
parentd44e686e9bcae5850115c0e1adfe24523dce61ee (diff)
parent33b4f40acce02c90b4b7766c5c94ebf2d22765c6 (diff)
Merge branch 'master' into int-new
Diffstat (limited to 'lib/unaligned.h')
-rw-r--r--lib/unaligned.h23
1 files changed, 21 insertions, 2 deletions
diff --git a/lib/unaligned.h b/lib/unaligned.h
index af655204..dc777fbf 100644
--- a/lib/unaligned.h
+++ b/lib/unaligned.h
@@ -20,7 +20,7 @@
#include "lib/string.h"
static inline u16
-get_u16(void *p)
+get_u16(const void *p)
{
u16 x;
memcpy(&x, p, 2);
@@ -28,13 +28,22 @@ get_u16(void *p)
}
static inline u32
-get_u32(void *p)
+get_u32(const void *p)
{
u32 x;
memcpy(&x, p, 4);
return ntohl(x);
}
+static inline u64
+get_u64(const void *p)
+{
+ u32 xh, xl;
+ memcpy(&xh, p, 4);
+ memcpy(&xl, p+4, 4);
+ return (((u64) ntohl(xh)) << 32) | ntohl(xl);
+}
+
static inline void
put_u16(void *p, u16 x)
{
@@ -49,4 +58,14 @@ put_u32(void *p, u32 x)
memcpy(p, &x, 4);
}
+static inline void
+put_u64(void *p, u64 x)
+{
+ u32 xh, xl;
+ xh = htonl(x >> 32);
+ xl = htonl((u32) x);
+ memcpy(p, &xh, 4);
+ memcpy(p+4, &xl, 4);
+}
+
#endif