root/maint/gnulib/lib/ioctl.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. rpl_ioctl
  2. primary_ioctl
  3. ioctl

   1 /* ioctl.c --- wrappers for Windows ioctl function
   2 
   3    Copyright (C) 2008-2021 Free Software Foundation, Inc.
   4 
   5    This file is free software: you can redistribute it and/or modify
   6    it under the terms of the GNU Lesser General Public License as
   7    published by the Free Software Foundation; either version 2.1 of the
   8    License, or (at your option) any later version.
   9 
  10    This file is distributed in the hope that it will be useful,
  11    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13    GNU Lesser General Public License for more details.
  14 
  15    You should have received a copy of the GNU Lesser General Public License
  16    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  17 
  18 /* Written by Paolo Bonzini */
  19 
  20 #include <config.h>
  21 
  22 #include <sys/ioctl.h>
  23 
  24 #include <stdarg.h>
  25 
  26 #if HAVE_IOCTL
  27 
  28 /* Provide a wrapper with the POSIX prototype.  */
  29 # undef ioctl
  30 int
  31 rpl_ioctl (int fd, int request, ... /* {void *,char *} arg */)
     /* [previous][next][first][last][top][bottom][index][help] */
  32 {
  33   void *buf;
  34   va_list args;
  35 
  36   va_start (args, request);
  37   buf = va_arg (args, void *);
  38   va_end (args);
  39 
  40   /* Cast 'request' so that when the system's ioctl function takes a 64-bit
  41      request argument, the value gets zero-extended, not sign-extended.  */
  42   return ioctl (fd, (unsigned int) request, buf);
  43 }
  44 
  45 #else /* mingw */
  46 
  47 # include <errno.h>
  48 
  49 /* Get HANDLE.  */
  50 # define WIN32_LEAN_AND_MEAN
  51 # include <windows.h>
  52 
  53 # include "fd-hook.h"
  54 /* Get _get_osfhandle.  */
  55 # if GNULIB_MSVC_NOTHROW
  56 #  include "msvc-nothrow.h"
  57 # else
  58 #  include <io.h>
  59 # endif
  60 
  61 static int
  62 primary_ioctl (int fd, int request, void *arg)
     /* [previous][next][first][last][top][bottom][index][help] */
  63 {
  64   /* We don't support FIONBIO on pipes here.  If you want to make pipe
  65      fds non-blocking, use the gnulib 'nonblocking' module, until
  66      gnulib implements fcntl F_GETFL / F_SETFL with O_NONBLOCK.  */
  67 
  68   if ((HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE)
  69     errno = ENOSYS;
  70   else
  71     errno = EBADF;
  72   return -1;
  73 }
  74 
  75 int
  76 ioctl (int fd, int request, ... /* {void *,char *} arg */)
     /* [previous][next][first][last][top][bottom][index][help] */
  77 {
  78   void *arg;
  79   va_list args;
  80 
  81   va_start (args, request);
  82   arg = va_arg (args, void *);
  83   va_end (args);
  84 
  85 # if WINDOWS_SOCKETS
  86   return execute_all_ioctl_hooks (primary_ioctl, fd, request, arg);
  87 # else
  88   return primary_ioctl (fd, request, arg);
  89 # endif
  90 }
  91 
  92 #endif

/* [previous][next][first][last][top][bottom][index][help] */