Code

Sync with the latest Gnulib code (177f525)
[nagiosplug.git] / gl / w32sock.h
1 /* w32sock.h --- internal auxilliary functions for Windows socket functions
3    Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
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.
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.
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/>.  */
18 /* Written by Paolo Bonzini */
20 #include <errno.h>
22 /* Get O_RDWR and O_BINARY.  */
23 #include <fcntl.h>
25 /* Get _get_osfhandle() and _open_osfhandle().  */
26 #include <io.h>
28 #define FD_TO_SOCKET(fd)   ((SOCKET) _get_osfhandle ((fd)))
29 #define SOCKET_TO_FD(fh)   (_open_osfhandle ((long) (fh), O_RDWR | O_BINARY))
31 static inline void
32 set_winsock_errno (void)
33 {
34   int err = WSAGetLastError ();
36   /* Map some WSAE* errors to the runtime library's error codes.  */
37   switch (err)
38     {
39     case WSA_INVALID_HANDLE:
40       errno = EBADF;
41       break;
42     case WSA_NOT_ENOUGH_MEMORY:
43       errno = ENOMEM;
44       break;
45     case WSA_INVALID_PARAMETER:
46       errno = EINVAL;
47       break;
48     case WSAEWOULDBLOCK:
49       errno = EWOULDBLOCK;
50       break;
51     case WSAENAMETOOLONG:
52       errno = ENAMETOOLONG;
53       break;
54     case WSAENOTEMPTY:
55       errno = ENOTEMPTY;
56       break;
57     default:
58       errno = (err > 10000 && err < 10025) ? err - 10000 : err;
59       break;
60     }
61 }