aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRuben Undheim <ruben.undheim@gmail.com>2016-02-11 22:25:46 +0100
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2016-02-12 21:18:27 +0100
commit5a1abeb02a058f69145821798561d5b4f3692b4a (patch)
tree321ef3a2d416864c366dbd026dc76ac811b019fc
parentf4402676f21a20b711d7bbad644b997f946d871e (diff)
Fix for big-endian architectures
-rw-r--r--src/sccp.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/sccp.c b/src/sccp.c
index 28378de..e6c538d 100644
--- a/src/sccp.c
+++ b/src/sccp.c
@@ -1392,14 +1392,26 @@ osmo_static_assert(sizeof(struct sccp_source_reference) <= sizeof(uint32_t), eno
uint32_t sccp_src_ref_to_int(struct sccp_source_reference *ref)
{
uint32_t src_ref = 0;
+#if OSMO_IS_LITTLE_ENDIAN
memcpy(&src_ref, ref, sizeof(*ref));
+#elif OSMO_IS_BIG_ENDIAN
+ *(((uint8_t*)(&src_ref))+3) = ref->octet1;
+ *(((uint8_t*)(&src_ref))+2) = ref->octet2;
+ *(((uint8_t*)(&src_ref))+1) = ref->octet3;
+#endif
return src_ref;
}
struct sccp_source_reference sccp_src_ref_from_int(uint32_t int_ref)
{
struct sccp_source_reference ref;
+#if OSMO_IS_LITTLE_ENDIAN
memcpy(&ref, &int_ref, sizeof(ref));
+#elif OSMO_IS_BIG_ENDIAN
+ ref.octet1 = *(((uint8_t*)(&int_ref))+3);
+ ref.octet2 = *(((uint8_t*)(&int_ref))+2);
+ ref.octet3 = *(((uint8_t*)(&int_ref))+1);
+#endif
return ref;
}