Blame gnulib-tests/w32sock.h

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