summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiav A <liavalb@gmail.com>2020-02-19 16:58:54 +0200
committerAndreas Kling <kling@serenityos.org>2020-02-19 16:08:28 +0100
commit01ae3e9c856bbfcedaedb3706eb6e9dc2295ca4e (patch)
tree71255da29752bf18a2866e1a89e5a23f0c5f623a
parent940de40f28af2fd7284d941451a6bc4841a00e46 (diff)
downloadserenity-01ae3e9c856bbfcedaedb3706eb6e9dc2295ca4e.zip
AK: Use endianness flags to determine if conversion is necessary
-rw-r--r--AK/NetworkOrdered.h14
-rw-r--r--AK/Platform.h30
2 files changed, 24 insertions, 20 deletions
diff --git a/AK/NetworkOrdered.h b/AK/NetworkOrdered.h
index a778bad9b8..1d328ff821 100644
--- a/AK/NetworkOrdered.h
+++ b/AK/NetworkOrdered.h
@@ -26,22 +26,10 @@
#pragma once
+#include <AK/Platform.h>
#include <AK/Types.h>
template<typename T>
-[[gnu::always_inline]] inline T convert_between_host_and_network(T value)
-{
- if constexpr (sizeof(T) == 8)
- return __builtin_bswap64(value);
- if constexpr (sizeof(T) == 4)
- return __builtin_bswap32(value);
- if constexpr (sizeof(T) == 2)
- return __builtin_bswap16(value);
- if constexpr (sizeof(T) == 1)
- return value;
-}
-
-template<typename T>
class [[gnu::packed]] NetworkOrdered
{
public:
diff --git a/AK/Platform.h b/AK/Platform.h
index e023f80b9d..22f0f2e1d0 100644
--- a/AK/Platform.h
+++ b/AK/Platform.h
@@ -27,11 +27,11 @@
#pragma once
#ifdef __i386__
-#define AK_ARCH_I386 1
+# define AK_ARCH_I386 1
#endif
#ifdef __x86_64__
-#define AK_ARCH_X86_64 1
+# define AK_ARCH_X86_64 1
#endif
#define ARCH(arch) (defined(AK_ARCH_##arch) && AK_ARCH_##arch)
@@ -49,12 +49,12 @@
#endif
#ifndef __serenity__
-#define PAGE_SIZE sysconf(_SC_PAGESIZE)
+# define PAGE_SIZE sysconf(_SC_PAGESIZE)
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
+# include <errno.h>
+# include <fcntl.h>
+# include <stdlib.h>
+# include <string.h>
inline int open_with_path_length(const char* path, size_t path_length, int options, mode_t mode)
{
auto* tmp = (char*)malloc(path_length + 1);
@@ -68,3 +68,19 @@ inline int open_with_path_length(const char* path, size_t path_length, int optio
}
#endif
+template<typename T>
+[[gnu::always_inline]] inline T convert_between_host_and_network(T value)
+{
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ if constexpr (sizeof(T) == 8)
+ return __builtin_bswap64(value);
+ if constexpr (sizeof(T) == 4)
+ return __builtin_bswap32(value);
+ if constexpr (sizeof(T) == 2)
+ return __builtin_bswap16(value);
+ if constexpr (sizeof(T) == 1)
+ return value;
+#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+ return value;
+#endif
+}