winsock: fix for Winelib apps
Dimitrie O. Paun
dpaun at rogers.com
Mon Mar 17 23:03:12 CST 2003
Yes,
This is Francois' patch update to the latest header changes.
I know it's been discussed before, and that it breaks FreeBSD.
Unfortunately, it doesn't seem like we're going to get a
solution to the problem anytime soon, so I've decided to
submit it once again for consideration.
I think this one is a step forward. Yes, it breaks FreeBSD, but
the current state _is_ broken on Linux, which is even worse IMO.
More importantly, if someone is to work on a fix, this patch is
a better starting point than the current broken state.
All credit goes to Francois, of course. Please apply.
ChangeLog
Francois Gouget <fgouget at free.fr>
winsock.h fix for Winelib use (under Linux).
Index: include/winsock.h
===================================================================
RCS file: /var/cvs/wine/include/winsock.h,v
retrieving revision 1.51
diff -u -r1.51 winsock.h
--- include/winsock.h 17 Mar 2003 21:22:34 -0000 1.51
+++ include/winsock.h 17 Mar 2003 21:52:12 -0000
@@ -56,17 +56,82 @@
/*
* This section defines the items that conflict with the Unix headers.
*/
+#if !defined(USE_WS_PREFIX) && !defined(__WINE_USE_MSVCRT)
+/* We are not using the WS_ prefix and not using the MSVCRT either so we
+ * risk getting conflicts for everything related to select.
+ */
+# ifdef FD_CLR
+/* Too late, the Unix version of stdlib.h was included before winsock.h.
+ * This means select and all the related stuff is already defined and we
+ * cannot override types and function prototypes.
+ * All we can do is disable all these symbols so that they are not used
+ * inadvertantly.
+ */
+# undef FD_SETSIZE
+# undef FD_CLR
+# undef FD_SET
+# undef FD_ZERO
+# undef FD_ISSET
-#include <sys/types.h>
-/* On FreeBSD we may get macros and prototypes for htonl & co.
- * This means the functions will not be called because of the macros.
- * So this should not harm us too much unless we try to define our own
- * prototypes (different calling convention).
- */
-#if defined(USE_WS_PREFIX) || !defined(htonl)
-# define WS_DEFINE_HTONL
-#endif /* htonl */
+# define FD_SETSIZE Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+# define FD_CLR 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 FD_ZERO Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+# 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
+# include <sys/types.h>
+# ifdef __MINGW_H
+ /* MinGW doesn't define the u_xxx types */
+# define WS_DEFINE_U_TYPES
+# endif
+# else
+/* 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
+ * define them with our own values.
+ */
+# define fd_set unix_fd_set
+# define timeval unix_timeval
+# define select unix_select
+# include <sys/types.h>
+# ifndef FD_CLR
+ /* On Windows-style platforms, sys/types.h does not define FD_CLR
+ * and does not define the u_xxx types
+ */
+# define WS_DEFINE_U_TYPES
+# endif
+# undef fd_set
+# undef timeval
+# undef select
+# undef FD_SETSIZE
+# undef FD_CLR
+# undef FD_SET
+# undef FD_ZERO
+# undef FD_ISSET
+
+# define WS_DEFINE_SELECT
+# endif /* FD_CLR */
+
+#elif !defined(__WINE_USE_MSVCRT)
+# define WS_DEFINE_SELECT
+# include <sys/types.h>
+# ifndef FD_CLR
+ /* On Windows-style platforms, sys/types.h does not define FD_CLR
+ * and does not define the u_xxx types
+ */
+# define WS_DEFINE_U_TYPES
+# endif
+#else
+# define WS_DEFINE_SELECT
+# include <sys/types.h>
+#endif /* !USE_WS_PREFIX && !__WINE_USE_MSVCRT */
+#ifdef WS_DEFINE_U_TYPES
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned int u_int;
+typedef unsigned long u_long;
+#endif
/*
@@ -337,55 +402,6 @@
* Select
*/
-#if !defined(USE_WS_PREFIX) && !defined(__WINE_USE_MSVCRT)
-/* We are not using the WS_ prefix and not using the MSVCRT either so we
- * risk getting conflicts for everything related to select.
- */
-# ifdef FD_CLR
-/* Too late, the Unix version of stdlib.h was included before winsock.h.
- * This means select and all the related stuff is already defined and we
- * cannot override types and function prototypes.
- * All we can do is disable all these symbols so that they are not used
- * inadvertantly.
- */
-# undef FD_SETSIZE
-# undef FD_CLR
-# undef FD_SET
-# undef FD_ZERO
-# undef FD_ISSET
-
-# define FD_SETSIZE Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
-# define FD_CLR 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 FD_ZERO Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
-# 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
-# else
-/* 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
- * define them with our own values.
- */
-# define fd_set unix_fd_set
-# define timeval unix_timeval
-# define select unix_select
-# include <stdlib.h>
-# undef fd_set
-# undef timeval
-# undef select
-# undef FD_SETSIZE
-# undef FD_CLR
-# undef FD_SET
-# undef FD_ZERO
-# undef FD_ISSET
-
-# define WS_DEFINE_SELECT
-# endif /* FD_CLR */
-
-#else
-# define WS_DEFINE_SELECT
-#endif /* !USE_WS_PREFIX && !__WINE_USE_MSVCRT */
-
#ifdef WS_DEFINE_SELECT
/* Define our own version of select and the associated types and macros */
@@ -917,12 +933,16 @@
int WINAPI WS(shutdown)(SOCKET,int);
SOCKET WINAPI WS(socket)(int,int,int);
-#ifdef WS_DEFINE_HTONL
+#if defined(htonl) && !defined(USE_WS_PREFIX)
+# undef htonl
+# undef htons
+# undef ntohl
+# undef ntohs
+#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
#if defined(__WINESRC__) || !defined(__WINE_WINSOCK2__)
/* Stuff specific to winsock.h */
--
Dimi.
More information about the wine-patches
mailing list