summaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/endian.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/utils/endian.h b/src/utils/endian.h
new file mode 100644
index 0000000..6dc36a0
--- /dev/null
+++ b/src/utils/endian.h
@@ -0,0 +1,40 @@
+/*
+ * This file is part of LibParserUtils.
+ * Licensed under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2009 John-Mark Bell <jmb@netsurf-browser.org>
+ */
+
+#ifndef parserutils_endian_h_
+#define parserutils_endian_h_
+
+static inline bool endian_host_is_le(void)
+{
+ uint32_t magic = 0x01020304;
+
+ return (((uint8_t *) &magic)[0] == 0x04);
+}
+
+static inline uint32_t endian_swap(uint32_t val)
+{
+ return ((val & 0xff000000) >> 24) | ((val & 0x00ff0000) >> 8) |
+ ((val & 0x0000ff00) << 8) | ((val & 0x000000ff) << 24);
+}
+
+static inline uint32_t endian_host_to_big(uint32_t host)
+{
+ if (endian_host_is_le())
+ return endian_swap(host);
+
+ return host;
+}
+
+static inline uint32_t endian_big_to_host(uint32_t big)
+{
+ if (endian_host_is_le())
+ return endian_swap(big);
+
+ return big;
+}
+
+#endif