1#ifndef _INC_SYS_ERRNO2
2#define _INC_SYS_ERRNO2
3
4/* Too late to include winsock2.h if winsock.h has already been loaded */
5#ifndef _WINSOCKAPI_
6#  include <winsock2.h>
7#endif
8
9/* Ensure all the Exxx constants required by convert_wsa_error_to_errno() in
10 * win32/win32sck.c are defined. Many are defined in <errno.h> already (more so
11 * in VC++ 2010 and above and some MinGW/gcc-4.8 and above, which have an extra
12 * "POSIX supplement") so, for the sake of compatibility with third-party code
13 * linked into XS modules, we must be careful not to redefine them; for the
14 * remainder we define our own values, namely the corresponding WSAExxx values.
15 *
16 * These definitions are also used as a supplement to the use of <errno.h> in
17 * the Errno and POSIX modules, both of which may be used to test the value of
18 * $!, which may have these values assigned to it (via code in win32/win32sck.c
19 * and the $! case in Perl_magic_set()). It also provides numerous otherwise
20 * missing values in the (hard-coded) list of Exxx constants exported by POSIX.
21 * Finally, three of the non-standard errno.h values (actually all now in the
22 * POSIX supplement in VC10+ and some MinGW/gcc-4.8+) are used in the perl core.
23 *
24 * This list is in the same order as that in convert_wsa_error_to_errno(). A
25 * handful of WSAExxx constants used by that function have no corresponding Exxx
26 * constant in any errno.h so there is no point in making up values for them;
27 * they are just returned unchanged by that function so we do not need to worry
28 * about them here.
29 */
30
31/* EINTR is a standard errno.h value */
32/* EBADF is a standard errno.h value */
33/* EACCES is a standard errno.h value */
34/* EFAULT is a standard errno.h value */
35/* EINVAL is a standard errno.h value */
36/* EMFILE is a standard errno.h value */
37
38#ifndef EWOULDBLOCK		/* New in VC10 */
39#  define EWOULDBLOCK		WSAEWOULDBLOCK
40#endif
41#ifndef EINPROGRESS		/* New in VC10 */
42#  define EINPROGRESS		WSAEINPROGRESS
43#endif
44#ifndef EALREADY		/* New in VC10 */
45#  define EALREADY		WSAEALREADY
46#endif
47#ifndef ENOTSOCK		/* New in VC10 and needed in doio.c */
48#  define ENOTSOCK		WSAENOTSOCK
49#endif
50#ifndef EDESTADDRREQ		/* New in VC10 */
51#  define EDESTADDRREQ		WSAEDESTADDRREQ
52#endif
53#ifndef EMSGSIZE		/* New in VC10 */
54#  define EMSGSIZE		WSAEMSGSIZE
55#endif
56#ifndef EPROTOTYPE		/* New in VC10 */
57#  define EPROTOTYPE		WSAEPROTOTYPE
58#endif
59#ifndef ENOPROTOOPT		/* New in VC10 */
60#  define ENOPROTOOPT		WSAENOPROTOOPT
61#endif
62#ifndef EPROTONOSUPPORT		/* New in VC10 */
63#  define EPROTONOSUPPORT	WSAEPROTONOSUPPORT
64#endif
65#ifndef ESOCKTNOSUPPORT		/* Not in errno.h but wanted by POSIX.pm */
66#  define ESOCKTNOSUPPORT	WSAESOCKTNOSUPPORT
67#endif
68#ifndef EOPNOTSUPP		/* New in VC10 */
69#  define EOPNOTSUPP		WSAEOPNOTSUPP
70#endif
71#ifndef EPFNOSUPPORT		/* Not in errno.h but wanted by POSIX.pm */
72#  define EPFNOSUPPORT		WSAEPFNOSUPPORT
73#endif
74#ifndef EAFNOSUPPORT		/* New in VC10 and needed in util.c */
75#  define EAFNOSUPPORT		WSAEAFNOSUPPORT
76#endif
77#ifndef EADDRINUSE		/* New in VC10 */
78#  define EADDRINUSE		WSAEADDRINUSE
79#endif
80#ifndef EADDRNOTAVAIL		/* New in VC10 */
81#  define EADDRNOTAVAIL		WSAEADDRNOTAVAIL
82#endif
83#ifndef ENETDOWN		/* New in VC10 */
84#  define ENETDOWN		WSAENETDOWN
85#endif
86#ifndef ENETUNREACH		/* New in VC10 */
87#  define ENETUNREACH		WSAENETUNREACH
88#endif
89#ifndef ENETRESET		/* New in VC10 */
90#  define ENETRESET		WSAENETRESET
91#endif
92#ifndef ECONNABORTED		/* New in VC10 and needed in util.c */
93#  define ECONNABORTED		WSAECONNABORTED
94#endif
95#ifndef ECONNRESET		/* New in VC10 */
96#  define ECONNRESET		WSAECONNRESET
97#endif
98#ifndef ENOBUFS			/* New in VC10 */
99#  define ENOBUFS		WSAENOBUFS
100#endif
101#ifndef EISCONN			/* New in VC10 */
102#  define EISCONN		WSAEISCONN
103#endif
104#ifndef ENOTCONN		/* New in VC10 */
105#  define ENOTCONN		WSAENOTCONN
106#endif
107#ifndef ESHUTDOWN		/* Not in errno.h but wanted by POSIX.pm */
108#  define ESHUTDOWN		WSAESHUTDOWN
109#endif
110#ifndef ETOOMANYREFS		/* Not in errno.h but wanted by POSIX.pm */
111#  define ETOOMANYREFS		WSAETOOMANYREFS
112#endif
113#ifndef ETIMEDOUT		/* New in VC10 */
114#  define ETIMEDOUT		WSAETIMEDOUT
115#endif
116#ifndef ECONNREFUSED		/* New in VC10 */
117#  define ECONNREFUSED		WSAECONNREFUSED
118#endif
119#ifndef ELOOP			/* New in VC10 */
120#  define ELOOP			WSAELOOP
121#endif
122
123/* ENAMETOOLONG is a standard errno.h value */
124
125/* EHOSTDOWN is not in errno.h and despite being wanted by POSIX.pm we cannot
126 * provide any sane value since there is no WSAEHOSTDOWN */
127
128#ifndef EHOSTUNREACH		/* New in VC10 */
129#  define EHOSTUNREACH		WSAEHOSTUNREACH
130#endif
131
132/* ENOTEMPTY is a standard errno.h value */
133
134#ifndef EPROCLIM		/* Not in errno.h but wanted by POSIX.pm */
135#  define EPROCLIM		WSAEPROCLIM
136#endif
137#ifndef EUSERS			/* Not in errno.h but wanted by POSIX.pm */
138#  define EUSERS		WSAEUSERS
139#endif
140#ifndef EDQUOT			/* Not in errno.h but wanted by POSIX.pm */
141#  define EDQUOT		WSAEDQUOT
142#endif
143#ifndef ESTALE			/* Not in errno.h but wanted by POSIX.pm */
144#  define ESTALE		WSAESTALE
145#endif
146#ifndef EREMOTE			/* Not in errno.h but wanted by POSIX.pm */
147#  define EREMOTE		WSAEREMOTE
148#endif
149
150/* EDISCON is not an errno.h value at all */
151/* ENOMORE is not an errno.h value at all */
152
153#ifndef ECANCELED		/* New in VC10 */
154#  ifdef WSAECANCELLED		/* New in WinSock2 */
155#    define ECANCELED		WSAECANCELLED
156#  endif
157#endif
158
159/* EINVALIDPROCTABLE is not an errno.h value at all */
160/* EINVALIDPROVIDER is not an errno.h value at all */
161/* EPROVIDERFAILEDINIT is not an errno.h value at all */
162/* EREFUSED is not an errno.h value at all */
163
164/* Set a flag indicating whether <errno.h> has the POSIX supplement (the first
165 * constant in which is EADDRINUSE). If so then we won't have just defined it as
166 * WSAEADDRINUSE above.
167 */
168#undef ERRNO_HAS_POSIX_SUPPLEMENT
169#if EADDRINUSE != WSAEADDRINUSE
170#  define ERRNO_HAS_POSIX_SUPPLEMENT
171#endif
172
173#endif /* _INC_SYS_ERRNO2 */
174