Yet another attempt at fixing the htonl functions.
diff --git a/include/winsock.h b/include/winsock.h
index 47d1aa4..4689875 100644
--- a/include/winsock.h
+++ b/include/winsock.h
@@ -56,10 +56,6 @@
# define FD_ISSET Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
# define fd_set Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
# define select Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
-# define htonl Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
-# define htons Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
-# define ntohl Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
-# define ntohs Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
# else /* FD_CLR */
/* stdlib.h has not been included yet so it's not too late. Include it now
* making sure that none of the select symbols is affected. Then we can
@@ -68,19 +64,11 @@
# define fd_set unix_fd_set
# define timeval unix_timeval
# define select unix_select
-# define htonl unix_htonl
-# define htons unix_htons
-# define ntohl unix_ntohl
-# define ntohs unix_ntohs
# include <sys/types.h>
# include <stdlib.h>
# undef fd_set
# undef timeval
# undef select
-# undef htonl
-# undef htons
-# undef ntohl
-# undef ntohs
# undef FD_SETSIZE
# undef FD_CLR
# undef FD_SET
@@ -481,13 +469,41 @@
#define WS_FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (WS_fd_set*)(set))
#endif
-u_long WINAPI WS(htonl)(u_long);
-u_short WINAPI WS(htons)(u_short);
-u_long WINAPI WS(ntohl)(u_long);
-u_short WINAPI WS(ntohs)(u_short);
-
#endif /* WS_DEFINE_SELECT */
+/* we have to define hton/ntoh as macros to avoid conflicts with Unix headers */
+#ifndef USE_WS_PREFIX
+
+#undef htonl
+#undef htons
+#undef ntohl
+#undef ntohs
+
+#ifdef WORDS_BIGENDIAN
+
+#define htonl(l) ((u_long)(l))
+#define htons(s) ((u_short)(s))
+#define ntohl(l) ((u_long)(l))
+#define ntohs(s) ((u_short)(s))
+
+#else /* WORDS_BIGENDIAN */
+
+inline static u_short __wine_ushort_swap(u_short s)
+{
+ return (s >> 8) | (s << 8);
+}
+inline static u_long __wine_ulong_swap(u_long l)
+{
+ return ((u_long)__wine_ushort_swap(l) << 16) | __wine_ushort_swap(l >> 16);
+}
+#define htonl(l) __wine_ulong_swap(l)
+#define htons(s) __wine_ushort_swap(s)
+#define ntohl(l) __wine_ulong_swap(l)
+#define ntohs(s) __wine_ushort_swap(s)
+
+#endif /* WORDS_BIGENDIAN */
+
+#endif /* USE_WS_PREFIX */
/*
* Internet address (old style... should be updated)