maint: update copyright
[gnulib.git] / lib / w32sock.h
1 /* w32sock.h --- internal auxiliary functions for Windows socket functions
2
3    Copyright (C) 2008-2014 Free Software Foundation, Inc.
4
5    This program is free software: you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9
10    This program 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 General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
18 /* Written by Paolo Bonzini */
19
20 #include <errno.h>
21
22 /* Get O_RDWR and O_BINARY.  */
23 #include <fcntl.h>
24
25 /* Get _open_osfhandle().  */
26 #include <io.h>
27
28 /* Get _get_osfhandle().  */
29 #include "msvc-nothrow.h"
30
31 #define FD_TO_SOCKET(fd)   ((SOCKET) _get_osfhandle ((fd)))
32 #define SOCKET_TO_FD(fh)   (_open_osfhandle ((intptr_t) (fh), O_RDWR | O_BINARY))
33
34 static inline void
35 set_winsock_errno (void)
36 {
37   int err = WSAGetLastError ();
38
39   /* Map some WSAE* errors to the runtime library's error codes.  */
40   switch (err)
41     {
42     case WSA_INVALID_HANDLE:
43       errno = EBADF;
44       break;
45     case WSA_NOT_ENOUGH_MEMORY:
46       errno = ENOMEM;
47       break;
48     case WSA_INVALID_PARAMETER:
49       errno = EINVAL;
50       break;
51     case WSAENAMETOOLONG:
52       errno = ENAMETOOLONG;
53       break;
54     case WSAENOTEMPTY:
55       errno = ENOTEMPTY;
56       break;
57     case WSAEWOULDBLOCK:
58       errno = EWOULDBLOCK;
59       break;
60     case WSAEINPROGRESS:
61       errno = EINPROGRESS;
62       break;
63     case WSAEALREADY:
64       errno = EALREADY;
65       break;
66     case WSAENOTSOCK:
67       errno = ENOTSOCK;
68       break;
69     case WSAEDESTADDRREQ:
70       errno = EDESTADDRREQ;
71       break;
72     case WSAEMSGSIZE:
73       errno = EMSGSIZE;
74       break;
75     case WSAEPROTOTYPE:
76       errno = EPROTOTYPE;
77       break;
78     case WSAENOPROTOOPT:
79       errno = ENOPROTOOPT;
80       break;
81     case WSAEPROTONOSUPPORT:
82       errno = EPROTONOSUPPORT;
83       break;
84     case WSAEOPNOTSUPP:
85       errno = EOPNOTSUPP;
86       break;
87     case WSAEAFNOSUPPORT:
88       errno = EAFNOSUPPORT;
89       break;
90     case WSAEADDRINUSE:
91       errno = EADDRINUSE;
92       break;
93     case WSAEADDRNOTAVAIL:
94       errno = EADDRNOTAVAIL;
95       break;
96     case WSAENETDOWN:
97       errno = ENETDOWN;
98       break;
99     case WSAENETUNREACH:
100       errno = ENETUNREACH;
101       break;
102     case WSAENETRESET:
103       errno = ENETRESET;
104       break;
105     case WSAECONNABORTED:
106       errno = ECONNABORTED;
107       break;
108     case WSAECONNRESET:
109       errno = ECONNRESET;
110       break;
111     case WSAENOBUFS:
112       errno = ENOBUFS;
113       break;
114     case WSAEISCONN:
115       errno = EISCONN;
116       break;
117     case WSAENOTCONN:
118       errno = ENOTCONN;
119       break;
120     case WSAETIMEDOUT:
121       errno = ETIMEDOUT;
122       break;
123     case WSAECONNREFUSED:
124       errno = ECONNREFUSED;
125       break;
126     case WSAELOOP:
127       errno = ELOOP;
128       break;
129     case WSAEHOSTUNREACH:
130       errno = EHOSTUNREACH;
131       break;
132     default:
133       errno = (err > 10000 && err < 10025) ? err - 10000 : err;
134       break;
135     }
136 }