Hi Paolo, In gettext, when building on mingw, I compile gnulib in C mode but use some of it in C++ mode. I got link errors because of rpl_select and rpl_close. Adding the usual 'extern "C" { ... }' in the header file fixed it. OK?
Also, I compile with -Wall, and got two warnings about unused variables. OK to remove them? Proposed patch: 2008-09-28 Bruno Haible <[EMAIL PROTECTED]> * lib/sys_socket.in.h: Wrap the definitions in 'extern "C"'. * lib/sys_select.in.h: Likewise. * lib/winsock.c (rpl_close, rpl_socket): Remove unused variables. *** lib/sys_select.in.h.orig 2008-09-29 01:43:16.000000000 +0200 --- lib/sys_select.in.h 2008-09-29 01:38:58.000000000 +0200 *************** *** 40,49 **** # include <sys/socket.h> # if @HAVE_WINSOCK2_H@ # undef select # define select rpl_select - extern int rpl_select (int, fd_set *, fd_set *, fd_set *, struct timeval *); # endif #endif --- 40,58 ---- # include <sys/socket.h> # if @HAVE_WINSOCK2_H@ + + # ifdef __cplusplus + extern "C" { + # endif + # undef select # define select rpl_select extern int rpl_select (int, fd_set *, fd_set *, fd_set *, struct timeval *); + + # ifdef __cplusplus + } + # endif + # endif #endif *** lib/sys_socket.in.h.orig 2008-09-29 01:43:16.000000000 +0200 --- lib/sys_socket.in.h 2008-09-29 01:38:58.000000000 +0200 *************** *** 105,110 **** --- 105,114 ---- typedef int socklen_t; + # ifdef __cplusplus + extern "C" { + # endif + /* Re-define FD_ISSET to avoid a WSA call while we are not using network sockets. */ static inline int *************** *** 175,180 **** --- 179,188 ---- extern int rpl_sendto (int, const void *, int, int, struct sockaddr *, int); extern int rpl_setsockopt (int, int, int, const void *, int); + # ifdef __cplusplus + } + # endif + # endif /* HAVE_WINSOCK2_H */ #endif /* HAVE_SYS_SOCKET_H */ *** lib/winsock.c.orig 2008-09-29 01:43:16.000000000 +0200 --- lib/winsock.c 2008-09-29 01:28:05.000000000 +0200 *************** *** 51,57 **** rpl_close (int fd) { char buf[sizeof (int)]; - int bufsize = sizeof (buf); SOCKET sock = FD_TO_SOCKET (fd); WSANETWORKEVENTS ev; --- 51,56 ---- *************** *** 107,114 **** int rpl_socket (int domain, int type, int protocol) { - int fd; - /* We have to use WSASocket() to create non-overlapped IO sockets. Overlapped IO sockets cannot be used with read/write. */ SOCKET fh = WSASocket (domain, type, protocol, NULL, 0, 0); --- 106,111 ----