aboutsummaryrefslogtreecommitdiffstats
path: root/src/arpa/inet/ntohl.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/arpa/inet/ntohl.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/arpa/inet/ntohl.c b/src/arpa/inet/ntohl.c
index 8eb5a3d..7111c28 100644
--- a/src/arpa/inet/ntohl.c
+++ b/src/arpa/inet/ntohl.c
@@ -16,6 +16,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <arpa/inet.h>
+#include <bits/intconf.h>
+
/**
@@ -31,6 +33,13 @@
*/
uint32_t _ntohl(uint32_t value)
{
+#if __INT32_BYTEORDER == 0x01020304
+ return value;
+#elif __INT32_BYTEORDER == 0x04030201
+ return (value >> 24) | ((value & 0xFF0000) >> 8) | ((value & 0x00FF00) << 8) | (value << 24);
+#elif __INT32_BYTEORDER == 0x02010403
+ return (value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8);
+#else
unsigned char* v = (unsigned char*)&value;
uint32_t rc = 0;
rc |= (uint32_t)(v[0]) << 24;
@@ -38,5 +47,6 @@ uint32_t _ntohl(uint32_t value)
rc |= (uint32_t)(v[2]) << 8;
rc |= (uint32_t)(v[3]) << 0;
return rc;
+#endif
}