]> git.cworth.org Git - tar/blob - lib/w32sock.h
Imported Upstream version 1.22
[tar] / lib / w32sock.h
1 /* w32sock.h --- internal auxilliary functions for Windows socket functions
2
3    Copyright (C) 2008 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 _get_osfhandle() and _open_osfhandle().  */
26 #include <io.h>
27
28 #define FD_TO_SOCKET(fd)   ((SOCKET) _get_osfhandle ((fd)))
29 #define SOCKET_TO_FD(fh)   (_open_osfhandle ((long) (fh), O_RDWR | O_BINARY))
30
31 static inline void
32 set_winsock_errno (void)
33 {
34   int err = WSAGetLastError ();
35   WSASetLastError (0);
36
37   /* Map some WSAE* errors to the runtime library's error codes.  */
38   switch (err)
39     {
40     case WSA_INVALID_HANDLE:
41       errno = EBADF;
42       break;
43     case WSA_NOT_ENOUGH_MEMORY:
44       errno = ENOMEM;
45       break;
46     case WSA_INVALID_PARAMETER:
47       errno = EINVAL;
48       break;
49     case WSAEWOULDBLOCK:
50       errno = EWOULDBLOCK;
51       break;
52     case WSAENAMETOOLONG:
53       errno = ENAMETOOLONG;
54       break;
55     case WSAENOTEMPTY:
56       errno = ENOTEMPTY;
57       break;
58     default:
59       errno = (err > 10000 && err < 10025) ? err - 10000 : err;
60       break;
61     }
62 }