summaryrefslogtreecommitdiffstats
path: root/StdLib/LibC/Main/HtoNtoH.c
diff options
context:
space:
mode:
Diffstat (limited to 'StdLib/LibC/Main/HtoNtoH.c')
-rw-r--r--StdLib/LibC/Main/HtoNtoH.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/StdLib/LibC/Main/HtoNtoH.c b/StdLib/LibC/Main/HtoNtoH.c
new file mode 100644
index 0000000000..c501874b84
--- /dev/null
+++ b/StdLib/LibC/Main/HtoNtoH.c
@@ -0,0 +1,90 @@
+/** @File
+ Routines for translating between host and network byte-order.
+
+ Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available
+ under the terms and conditions of the BSD License that accompanies this
+ distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+#include <Library/BaseLib.h>
+#include <LibConfig.h>
+#include <sys/endian.h>
+
+// Undefine macro versions of the functions to be defined below.
+#undef htonl
+#undef htons
+#undef ntohl
+#undef ntohs
+
+/** 32-bit Host to Network byte order conversion.
+
+ @param[in] Datum The 32-bit value to be converted.
+ @return Datum, converted to network byte order.
+**/
+uint32_t
+htonl(
+ IN uint32_t Datum
+ )
+{
+#if BYTE_ORDER == LITTLE_ENDIAN
+ return SwapBytes32(Datum);
+#else
+ return Datum;
+#endif
+}
+
+/** 16-bit Host to Network byte order conversion.
+
+ @param[in] Datum The 16-bit value to be converted.
+ @return Datum, converted to network byte order.
+**/
+uint16_t
+htons(
+ IN uint16_t Datum
+ )
+{
+#if BYTE_ORDER == LITTLE_ENDIAN
+ return SwapBytes16(Datum);
+#else
+ return Datum;
+#endif
+}
+
+/** 32-bit Network to Host byte order conversion.
+
+ @param[in] Datum The 16-bit value to be converted.
+ @return Datum, converted to host byte order.
+**/
+uint32_t
+ntohl(
+ IN uint32_t Datum
+ )
+{
+#if BYTE_ORDER == LITTLE_ENDIAN
+ return SwapBytes32(Datum);
+#else
+ return Datum;
+#endif
+}
+
+/** 16-bit Network to Host byte order conversion.
+
+ @param[in] Datum The 16-bit value to be converted.
+ @return Datum, converted to host byte order.
+**/
+uint16_t
+ntohs(
+ IN uint16_t Datum
+ )
+{
+#if BYTE_ORDER == LITTLE_ENDIAN
+ return SwapBytes16(Datum);
+#else
+ return Datum;
+#endif
+}