New module 'msvc-nothrow'. Makes _get_osfhandle safe on MSVC 9.
[gnulib.git] / lib / w32sock.h
1 /* w32sock.h --- internal auxilliary functions for Windows socket functions
2
3    Copyright (C) 2008-2011 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 ((long) (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 WSAEWOULDBLOCK:
52       errno = EWOULDBLOCK;
53       break;
54     case WSAENAMETOOLONG:
55       errno = ENAMETOOLONG;
56       break;
57     case WSAENOTEMPTY:
58       errno = ENOTEMPTY;
59       break;
60     default:
61       errno = (err > 10000 && err < 10025) ? err - 10000 : err;
62       break;
63     }
64 }