Blame gl/w32sock.h

Packit aea12f
/* w32sock.h --- internal auxiliary functions for Windows socket functions
Packit aea12f
Packit Service 991b93
   Copyright (C) 2008-2020 Free Software Foundation, Inc.
Packit aea12f
Packit aea12f
   This program is free software: you can redistribute it and/or modify
Packit Service 991b93
   it under the terms of the GNU Lesser General Public License as published by
Packit Service 991b93
   the Free Software Foundation; either version 2.1 of the License, or
Packit aea12f
   (at your option) any later version.
Packit aea12f
Packit aea12f
   This program is distributed in the hope that it will be useful,
Packit aea12f
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit aea12f
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 991b93
   GNU Lesser General Public License for more details.
Packit aea12f
Packit Service 991b93
   You should have received a copy of the GNU Lesser General Public License
Packit aea12f
   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
Packit aea12f
Packit aea12f
/* Written by Paolo Bonzini */
Packit aea12f
Packit aea12f
#include <errno.h>
Packit aea12f
Packit aea12f
/* Get O_RDWR and O_BINARY.  */
Packit aea12f
#include <fcntl.h>
Packit aea12f
Packit aea12f
/* Get _open_osfhandle().  */
Packit aea12f
#include <io.h>
Packit aea12f
Packit aea12f
/* Get _get_osfhandle().  */
Packit aea12f
#if GNULIB_MSVC_NOTHROW
Packit aea12f
# include "msvc-nothrow.h"
Packit aea12f
#else
Packit aea12f
# include <io.h>
Packit aea12f
#endif
Packit aea12f
Packit aea12f
#define FD_TO_SOCKET(fd)   ((SOCKET) _get_osfhandle ((fd)))
Packit aea12f
#define SOCKET_TO_FD(fh)   (_open_osfhandle ((intptr_t) (fh), O_RDWR | O_BINARY))
Packit aea12f
Packit aea12f
static inline void
Packit aea12f
set_winsock_errno (void)
Packit aea12f
{
Packit aea12f
  int err = WSAGetLastError ();
Packit aea12f
Packit aea12f
  /* Map some WSAE* errors to the runtime library's error codes.  */
Packit aea12f
  switch (err)
Packit aea12f
    {
Packit aea12f
    case WSA_INVALID_HANDLE:
Packit aea12f
      errno = EBADF;
Packit aea12f
      break;
Packit aea12f
    case WSA_NOT_ENOUGH_MEMORY:
Packit aea12f
      errno = ENOMEM;
Packit aea12f
      break;
Packit aea12f
    case WSA_INVALID_PARAMETER:
Packit aea12f
      errno = EINVAL;
Packit aea12f
      break;
Packit aea12f
    case WSAENAMETOOLONG:
Packit aea12f
      errno = ENAMETOOLONG;
Packit aea12f
      break;
Packit aea12f
    case WSAENOTEMPTY:
Packit aea12f
      errno = ENOTEMPTY;
Packit aea12f
      break;
Packit aea12f
    case WSAEWOULDBLOCK:
Packit aea12f
      errno = EWOULDBLOCK;
Packit aea12f
      break;
Packit aea12f
    case WSAEINPROGRESS:
Packit aea12f
      errno = EINPROGRESS;
Packit aea12f
      break;
Packit aea12f
    case WSAEALREADY:
Packit aea12f
      errno = EALREADY;
Packit aea12f
      break;
Packit aea12f
    case WSAENOTSOCK:
Packit aea12f
      errno = ENOTSOCK;
Packit aea12f
      break;
Packit aea12f
    case WSAEDESTADDRREQ:
Packit aea12f
      errno = EDESTADDRREQ;
Packit aea12f
      break;
Packit aea12f
    case WSAEMSGSIZE:
Packit aea12f
      errno = EMSGSIZE;
Packit aea12f
      break;
Packit aea12f
    case WSAEPROTOTYPE:
Packit aea12f
      errno = EPROTOTYPE;
Packit aea12f
      break;
Packit aea12f
    case WSAENOPROTOOPT:
Packit aea12f
      errno = ENOPROTOOPT;
Packit aea12f
      break;
Packit aea12f
    case WSAEPROTONOSUPPORT:
Packit aea12f
      errno = EPROTONOSUPPORT;
Packit aea12f
      break;
Packit aea12f
    case WSAEOPNOTSUPP:
Packit aea12f
      errno = EOPNOTSUPP;
Packit aea12f
      break;
Packit aea12f
    case WSAEAFNOSUPPORT:
Packit aea12f
      errno = EAFNOSUPPORT;
Packit aea12f
      break;
Packit aea12f
    case WSAEADDRINUSE:
Packit aea12f
      errno = EADDRINUSE;
Packit aea12f
      break;
Packit aea12f
    case WSAEADDRNOTAVAIL:
Packit aea12f
      errno = EADDRNOTAVAIL;
Packit aea12f
      break;
Packit aea12f
    case WSAENETDOWN:
Packit aea12f
      errno = ENETDOWN;
Packit aea12f
      break;
Packit aea12f
    case WSAENETUNREACH:
Packit aea12f
      errno = ENETUNREACH;
Packit aea12f
      break;
Packit aea12f
    case WSAENETRESET:
Packit aea12f
      errno = ENETRESET;
Packit aea12f
      break;
Packit aea12f
    case WSAECONNABORTED:
Packit aea12f
      errno = ECONNABORTED;
Packit aea12f
      break;
Packit aea12f
    case WSAECONNRESET:
Packit aea12f
      errno = ECONNRESET;
Packit aea12f
      break;
Packit aea12f
    case WSAENOBUFS:
Packit aea12f
      errno = ENOBUFS;
Packit aea12f
      break;
Packit aea12f
    case WSAEISCONN:
Packit aea12f
      errno = EISCONN;
Packit aea12f
      break;
Packit aea12f
    case WSAENOTCONN:
Packit aea12f
      errno = ENOTCONN;
Packit aea12f
      break;
Packit aea12f
    case WSAETIMEDOUT:
Packit aea12f
      errno = ETIMEDOUT;
Packit aea12f
      break;
Packit aea12f
    case WSAECONNREFUSED:
Packit aea12f
      errno = ECONNREFUSED;
Packit aea12f
      break;
Packit aea12f
    case WSAELOOP:
Packit aea12f
      errno = ELOOP;
Packit aea12f
      break;
Packit aea12f
    case WSAEHOSTUNREACH:
Packit aea12f
      errno = EHOSTUNREACH;
Packit aea12f
      break;
Packit aea12f
    default:
Packit aea12f
      errno = (err > 10000 && err < 10025) ? err - 10000 : err;
Packit aea12f
      break;
Packit aea12f
    }
Packit aea12f
}