Here's a patch that takes care of the current winsock.h vs. unistd.h incompatibility. I am only half happy with it as it means that winsock.h will include unistd.h if you have not done so already. This is the only way I see to support both
#include <unistd.h> #include <windows.h> and #include <windows.h> #include <unistd.h>
If the patch is modified to handle only the first case, then winsock.h does not need to include 'unistd.h'.
Index: include/winsock.h =================================================================== RCS file: /home/wine/wine/include/winsock.h,v retrieving revision 1.39 diff -u -r1.39 winsock.h --- include/winsock.h 2002/01/29 02:55:41 1.39 +++ include/winsock.h 2002/02/17 18:53:38 @@ -63,6 +63,26 @@ # define WS_DEFINE_HTONL #endif /* __WINE_USE_MSVCRT */
+#ifndef USE_WS_PREFIX +/* One cannot include both winsock.h and unistd.h because their definition + * of gethostname() conflicts. This is normally not a problem in Winelib + * applications because unistd.h does not exist on Windows and thus Windows + * source code should not use unistd.h. + * But there are still situations where one may want to use both so we are + * taking some specific steps to avoid problems. + */ +# ifdef R_OK +/* unistd.h has already been defined */ +# define gethostname You_should_not_include_unistd_h +# else +# define gethostname unix_gethostname +# include <unistd.h> +# undef gethostname +# define WS_DEFINE_GETHOSTNAME +# endif /* R_OK */ +#else +# define WS_DEFINE_GETHOSTNAME +#endif /* USE_WS_PREFIX */
/* @@ -898,7 +918,9 @@ int WINAPI WS(connect)(SOCKET,const struct WS(sockaddr)*,int); struct WS(hostent)* WINAPI WS(gethostbyaddr)(const char*,int,int); struct WS(hostent)* WINAPI WS(gethostbyname)(const char*); +#ifdef WS_DEFINE_GETHOSTNAME int WINAPI WS(gethostname)(char*,int); +#endif int WINAPI WS(getpeername)(SOCKET,struct WS(sockaddr)*,int*); struct WS(protoent)* WINAPI WS(getprotobyname)(const char*); struct WS(protoent)* WINAPI WS(getprotobynumber)(int);
-- Francois Gouget fgouget@free.fr http://fgouget.free.fr/ In theory, theory and practice are the same, but in practice they're different.