Blame lib/w32sock.h

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