Fix endianness test for Windows.
[portablexdr.git] / byteswap.h
index 3509acf..991e85b 100644 (file)
 #ifndef _PORTABLEXDR_BYTESWAP_H
 #define _PORTABLEXDR_BYTESWAP_H 1
 
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
 /* Swap bytes in 16 bit value.  */
 #define __bswap_constant_16(x) \
      ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8))
@@ -107,6 +111,7 @@ static inline uint32_t
 htonl (x)
      uint32_t x;
 {
+#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && defined(LITTLE_ENDIAN)
 #if BYTE_ORDER == BIG_ENDIAN
   return x;
 #elif BYTE_ORDER == LITTLE_ENDIAN
@@ -114,6 +119,9 @@ htonl (x)
 #else
 # error "What kind of system is this?"
 #endif
+#else
+#error "BYTE_ORDER/BIG_ENDIAN/LITTLE_ENDIAN are not defined"
+#endif
 }
 
 #define ntohl htonl
@@ -147,6 +155,7 @@ static inline uint16_t
 htons (x)
      uint16_t x;
 {
+#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && defined(LITTLE_ENDIAN)
 #if BYTE_ORDER == BIG_ENDIAN
   return x;
 #elif BYTE_ORDER == LITTLE_ENDIAN
@@ -154,6 +163,9 @@ htons (x)
 #else
 # error "What kind of system is this?"
 #endif
+#else
+#error "BYTE_ORDER/BIG_ENDIAN/LITTLE_ENDIAN are not defined"
+#endif
 }
 
 #define ntohs htons