openat: work around AIX 7.1 fstatat bug
[gnulib.git] / lib / ioctl.c
index 7c09d95..c6ba989 100644 (file)
@@ -44,31 +44,36 @@ rpl_ioctl (int fd, int request, ... /* {void *,char *} arg */)
 
 #else /* mingw */
 
-# define WIN32_LEAN_AND_MEAN
-/* Get winsock2.h. */
-# include <sys/socket.h>
+# include <errno.h>
 
-/* Get set_winsock_errno, FD_TO_SOCKET etc. */
-# include "w32sock.h"
+# include "fd-hook.h"
+
+static int
+primary_ioctl (int fd, int request, void *arg)
+{
+  /* We don't support FIONBIO on pipes here.  If you want to make pipe
+     fds non-blocking, use the gnulib 'nonblocking' module, until
+     gnulib implements fcntl F_GETFL / F_SETFL with O_NONBLOCK.  */
+
+  errno = ENOSYS;
+  return -1;
+}
 
 int
-ioctl (int fd, int req, ...)
+ioctl (int fd, int request, ... /* {void *,char *} arg */)
 {
-  void *buf;
+  void *arg;
   va_list args;
-  SOCKET sock;
-  int r;
 
-  va_start (args, req);
-  buf = va_arg (args, void *);
+  va_start (args, request);
+  arg = va_arg (args, void *);
   va_end (args);
 
-  sock = FD_TO_SOCKET (fd);
-  r = ioctlsocket (sock, req, buf);
-  if (r < 0)
-    set_winsock_errno ();
-
-  return r;
+# if WINDOWS_SOCKETS
+  return execute_all_ioctl_hooks (primary_ioctl, fd, request, arg);
+# else
+  return primary_ioctl (fd, request, arg);
+# endif
 }
 
 #endif