Make the ioctl() signature POSIX compliant.
authorBruno Haible <bruno@clisp.org>
Fri, 10 Oct 2008 02:17:02 +0000 (04:17 +0200)
committerBruno Haible <bruno@clisp.org>
Fri, 10 Oct 2008 02:17:02 +0000 (04:17 +0200)
ChangeLog
lib/sys_socket.in.h
lib/winsock.c

index d7dc92b..1a778b0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2008-10-09  Bruno Haible  <bruno@clisp.org>
 
+       * lib/sys_socket.in.h (ioctl): Make signature POSIX compliant.
+       * lib/winsock.c: Include <stdarg.h>.
+       (rpl_ioctl): Change to second argument 'int' and then varargs.
+
+2008-10-09  Bruno Haible  <bruno@clisp.org>
+
        * m4/close.m4 (gl_FUNC_CLOSE): Arrange to replace the close() function when
        the sys_socket module is present and the system has <winsock2.h>.
 
index 74cb37a..ddc4264 100644 (file)
@@ -282,7 +282,7 @@ extern int rpl_listen (int, int);
 # if @HAVE_WINSOCK2_H@
 #  undef ioctl
 #  define ioctl                        rpl_ioctl
-extern int rpl_ioctl (int, unsigned long, char *);
+extern int rpl_ioctl (int, int, ...);
 # endif
 
 # if @GNULIB_RECV@
index feee00d..53b9336 100644 (file)
@@ -18,6 +18,7 @@
 /* Written by Paolo Bonzini */
 
 #include <config.h>
+#include <stdarg.h>
 #include <stdio.h>
 #include <string.h>
 #include <errno.h>
@@ -224,10 +225,19 @@ rpl_listen (int fd, int backlog)
 #endif
 
 int
-rpl_ioctl (int fd, unsigned long req, char *buf)
+rpl_ioctl (int fd, int req, ...)
 {
-  SOCKET sock = FD_TO_SOCKET (fd);
-  int r = ioctlsocket (sock, req, (void *) buf);
+  void *buf;
+  va_list args;
+  SOCKET sock;
+  int r;
+
+  va_start (args, req);
+  buf = va_arg (args, void *);
+  va_end (args);
+
+  sock = FD_TO_SOCKET (fd);
+  r = ioctlsocket (sock, req, buf);
   if (r < 0)
     set_winsock_errno ();