diff --git a/TODO.win32 b/TODO.win32 index 54162c82086..ff2daa1cad6 100644 --- a/TODO.win32 +++ b/TODO.win32 @@ -55,9 +55,6 @@ If socket() fails it returns -1 so _open_osfhandle fails as well, but and we'll always return/throw EBADF. If _open_osfhandle fails but socket doesn't, a stray handle is left open. It should be fixed. -- Check error number mappings. - Winsock errnos are sometimes different. Subtracting WSABASEERR from errnos works in most cases. - - Think about `make install` - Extensions diff --git a/lib/net.js b/lib/net.js index 6eed683b9b2..efaf8165a9b 100644 --- a/lib/net.js +++ b/lib/net.js @@ -48,7 +48,7 @@ var errnoException = binding.errnoException; var sendMsg = binding.sendMsg; var recvMsg = binding.recvMsg; -var EINPROGRESS = constants.EINPROGRESS; +var EINPROGRESS = constants.EINPROGRESS || constants.WSAEINPROGRESS; var ENOENT = constants.ENOENT; var EMFILE = constants.EMFILE; diff --git a/src/node.cc b/src/node.cc index 5faa313c783..ab77db8f7a3 100644 --- a/src/node.cc +++ b/src/node.cc @@ -616,6 +616,234 @@ static inline const char *errno_string(int errorno) { ERRNO_CASE(EXDEV); #endif +#ifdef WSAEINTR + ERRNO_CASE(WSAEINTR); +#endif + +#ifdef WSAEBADF + ERRNO_CASE(WSAEBADF); +#endif + +#ifdef WSAEACCES + ERRNO_CASE(WSAEACCES); +#endif + +#ifdef WSAEFAULT + ERRNO_CASE(WSAEFAULT); +#endif + +#ifdef WSAEINVAL + ERRNO_CASE(WSAEINVAL); +#endif + +#ifdef WSAEMFILE + ERRNO_CASE(WSAEMFILE); +#endif + +#ifdef WSAEWOULDBLOCK + ERRNO_CASE(WSAEWOULDBLOCK); +#endif + +#ifdef WSAEINPROGRESS + ERRNO_CASE(WSAEINPROGRESS); +#endif + +#ifdef WSAEALREADY + ERRNO_CASE(WSAEALREADY); +#endif + +#ifdef WSAENOTSOCK + ERRNO_CASE(WSAENOTSOCK); +#endif + +#ifdef WSAEDESTADDRREQ + ERRNO_CASE(WSAEDESTADDRREQ); +#endif + +#ifdef WSAEMSGSIZE + ERRNO_CASE(WSAEMSGSIZE); +#endif + +#ifdef WSAEPROTOTYPE + ERRNO_CASE(WSAEPROTOTYPE); +#endif + +#ifdef WSAENOPROTOOPT + ERRNO_CASE(WSAENOPROTOOPT); +#endif + +#ifdef WSAEPROTONOSUPPORT + ERRNO_CASE(WSAEPROTONOSUPPORT); +#endif + +#ifdef WSAESOCKTNOSUPPORT + ERRNO_CASE(WSAESOCKTNOSUPPORT); +#endif + +#ifdef WSAEOPNOTSUPP + ERRNO_CASE(WSAEOPNOTSUPP); +#endif + +#ifdef WSAEPFNOSUPPORT + ERRNO_CASE(WSAEPFNOSUPPORT); +#endif + +#ifdef WSAEAFNOSUPPORT + ERRNO_CASE(WSAEAFNOSUPPORT); +#endif + +#ifdef WSAEADDRINUSE + ERRNO_CASE(WSAEADDRINUSE); +#endif + +#ifdef WSAEADDRNOTAVAIL + ERRNO_CASE(WSAEADDRNOTAVAIL); +#endif + +#ifdef WSAENETDOWN + ERRNO_CASE(WSAENETDOWN); +#endif + +#ifdef WSAENETUNREACH + ERRNO_CASE(WSAENETUNREACH); +#endif + +#ifdef WSAENETRESET + ERRNO_CASE(WSAENETRESET); +#endif + +#ifdef WSAECONNABORTED + ERRNO_CASE(WSAECONNABORTED); +#endif + +#ifdef WSAECONNRESET + ERRNO_CASE(WSAECONNRESET); +#endif + +#ifdef WSAENOBUFS + ERRNO_CASE(WSAENOBUFS); +#endif + +#ifdef WSAEISCONN + ERRNO_CASE(WSAEISCONN); +#endif + +#ifdef WSAENOTCONN + ERRNO_CASE(WSAENOTCONN); +#endif + +#ifdef WSAESHUTDOWN + ERRNO_CASE(WSAESHUTDOWN); +#endif + +#ifdef WSAETOOMANYREFS + ERRNO_CASE(WSAETOOMANYREFS); +#endif + +#ifdef WSAETIMEDOUT + ERRNO_CASE(WSAETIMEDOUT); +#endif + +#ifdef WSAECONNREFUSED + ERRNO_CASE(WSAECONNREFUSED); +#endif + +#ifdef WSAELOOP + ERRNO_CASE(WSAELOOP); +#endif + +#ifdef WSAENAMETOOLONG + ERRNO_CASE(WSAENAMETOOLONG); +#endif + +#ifdef WSAEHOSTDOWN + ERRNO_CASE(WSAEHOSTDOWN); +#endif + +#ifdef WSAEHOSTUNREACH + ERRNO_CASE(WSAEHOSTUNREACH); +#endif + +#ifdef WSAENOTEMPTY + ERRNO_CASE(WSAENOTEMPTY); +#endif + +#ifdef WSAEPROCLIM + ERRNO_CASE(WSAEPROCLIM); +#endif + +#ifdef WSAEUSERS + ERRNO_CASE(WSAEUSERS); +#endif + +#ifdef WSAEDQUOT + ERRNO_CASE(WSAEDQUOT); +#endif + +#ifdef WSAESTALE + ERRNO_CASE(WSAESTALE); +#endif + +#ifdef WSAEREMOTE + ERRNO_CASE(WSAEREMOTE); +#endif + +#ifdef WSASYSNOTREADY + ERRNO_CASE(WSASYSNOTREADY); +#endif + +#ifdef WSAVERNOTSUPPORTED + ERRNO_CASE(WSAVERNOTSUPPORTED); +#endif + +#ifdef WSANOTINITIALISED + ERRNO_CASE(WSANOTINITIALISED); +#endif + +#ifdef WSAEDISCON + ERRNO_CASE(WSAEDISCON); +#endif + +#ifdef WSAENOMORE + ERRNO_CASE(WSAENOMORE); +#endif + +#ifdef WSAECANCELLED + ERRNO_CASE(WSAECANCELLED); +#endif + +#ifdef WSAEINVALIDPROCTABLE + ERRNO_CASE(WSAEINVALIDPROCTABLE); +#endif + +#ifdef WSAEINVALIDPROVIDER + ERRNO_CASE(WSAEINVALIDPROVIDER); +#endif + +#ifdef WSAEPROVIDERFAILEDINIT + ERRNO_CASE(WSAEPROVIDERFAILEDINIT); +#endif + +#ifdef WSASYSCALLFAILURE + ERRNO_CASE(WSASYSCALLFAILURE); +#endif + +#ifdef WSASERVICE_NOT_FOUND + ERRNO_CASE(WSASERVICE_NOT_FOUND); +#endif + +#ifdef WSATYPE_NOT_FOUND + ERRNO_CASE(WSATYPE_NOT_FOUND); +#endif + +#ifdef WSA_E_NO_MORE + ERRNO_CASE(WSA_E_NO_MORE); +#endif + +#ifdef WSA_E_CANCELLED + ERRNO_CASE(WSA_E_CANCELLED); +#endif + default: return ""; } } diff --git a/src/node_constants.cc b/src/node_constants.cc index d82bca855f7..7ea372223eb 100644 --- a/src/node_constants.cc +++ b/src/node_constants.cc @@ -10,6 +10,11 @@ #include #include +#ifdef __MINGW32__ +# include +# include +#endif + namespace node { using namespace v8; @@ -443,6 +448,238 @@ void DefineConstants(Handle target) { NODE_DEFINE_CONSTANT(target, EXDEV); #endif +#ifdef WSAEINTR + NODE_DEFINE_CONSTANT(target, WSAEINTR); +#endif + +#ifdef WSAEBADF + NODE_DEFINE_CONSTANT(target, WSAEBADF); +#endif + +#ifdef WSAEACCES + NODE_DEFINE_CONSTANT(target, WSAEACCES); +#endif + +#ifdef WSAEFAULT + NODE_DEFINE_CONSTANT(target, WSAEFAULT); +#endif + +#ifdef WSAEINVAL + NODE_DEFINE_CONSTANT(target, WSAEINVAL); +#endif + +#ifdef WSAEMFILE + NODE_DEFINE_CONSTANT(target, WSAEMFILE); +#endif + +#ifdef WSAEWOULDBLOCK + NODE_DEFINE_CONSTANT(target, WSAEWOULDBLOCK); +#endif + +#ifdef WSAEINPROGRESS + NODE_DEFINE_CONSTANT(target, WSAEINPROGRESS); +#endif + +#ifdef WSAEALREADY + NODE_DEFINE_CONSTANT(target, WSAEALREADY); +#endif + +#ifdef WSAENOTSOCK + NODE_DEFINE_CONSTANT(target, WSAENOTSOCK); +#endif + +#ifdef WSAEDESTADDRREQ + NODE_DEFINE_CONSTANT(target, WSAEDESTADDRREQ); +#endif + +#ifdef WSAEMSGSIZE + NODE_DEFINE_CONSTANT(target, WSAEMSGSIZE); +#endif + +#ifdef WSAEPROTOTYPE + NODE_DEFINE_CONSTANT(target, WSAEPROTOTYPE); +#endif + +#ifdef WSAENOPROTOOPT + NODE_DEFINE_CONSTANT(target, WSAENOPROTOOPT); +#endif + +#ifdef WSAEPROTONOSUPPORT + NODE_DEFINE_CONSTANT(target, WSAEPROTONOSUPPORT); +#endif + +#ifdef WSAESOCKTNOSUPPORT + NODE_DEFINE_CONSTANT(target, WSAESOCKTNOSUPPORT); +#endif + +#ifdef WSAEOPNOTSUPP + NODE_DEFINE_CONSTANT(target, WSAEOPNOTSUPP); +#endif + +#ifdef WSAEPFNOSUPPORT + NODE_DEFINE_CONSTANT(target, WSAEPFNOSUPPORT); +#endif + +#ifdef WSAEAFNOSUPPORT + NODE_DEFINE_CONSTANT(target, WSAEAFNOSUPPORT); +#endif + +#ifdef WSAEADDRINUSE + NODE_DEFINE_CONSTANT(target, WSAEADDRINUSE); +#endif + +#ifdef WSAEADDRNOTAVAIL + NODE_DEFINE_CONSTANT(target, WSAEADDRNOTAVAIL); +#endif + +#ifdef WSAENETDOWN + NODE_DEFINE_CONSTANT(target, WSAENETDOWN); +#endif + +#ifdef WSAENETUNREACH + NODE_DEFINE_CONSTANT(target, WSAENETUNREACH); +#endif + +#ifdef WSAENETRESET + NODE_DEFINE_CONSTANT(target, WSAENETRESET); +#endif + +#ifdef WSAECONNABORTED + NODE_DEFINE_CONSTANT(target, WSAECONNABORTED); +#endif + +#ifdef WSAECONNRESET + NODE_DEFINE_CONSTANT(target, WSAECONNRESET); +#endif + +#ifdef WSAENOBUFS + NODE_DEFINE_CONSTANT(target, WSAENOBUFS); +#endif + +#ifdef WSAEISCONN + NODE_DEFINE_CONSTANT(target, WSAEISCONN); +#endif + +#ifdef WSAENOTCONN + NODE_DEFINE_CONSTANT(target, WSAENOTCONN); +#endif + +#ifdef WSAESHUTDOWN + NODE_DEFINE_CONSTANT(target, WSAESHUTDOWN); +#endif + +#ifdef WSAETOOMANYREFS + NODE_DEFINE_CONSTANT(target, WSAETOOMANYREFS); +#endif + +#ifdef WSAETIMEDOUT + NODE_DEFINE_CONSTANT(target, WSAETIMEDOUT); +#endif + +#ifdef WSAECONNREFUSED + NODE_DEFINE_CONSTANT(target, WSAECONNREFUSED); +#endif + +#ifdef WSAELOOP + NODE_DEFINE_CONSTANT(target, WSAELOOP); +#endif + +#ifdef WSAENAMETOOLONG + NODE_DEFINE_CONSTANT(target, WSAENAMETOOLONG); +#endif + +#ifdef WSAEHOSTDOWN + NODE_DEFINE_CONSTANT(target, WSAEHOSTDOWN); +#endif + +#ifdef WSAEHOSTUNREACH + NODE_DEFINE_CONSTANT(target, WSAEHOSTUNREACH); +#endif + +#ifdef WSAENOTEMPTY + NODE_DEFINE_CONSTANT(target, WSAENOTEMPTY); +#endif + +#ifdef WSAEPROCLIM + NODE_DEFINE_CONSTANT(target, WSAEPROCLIM); +#endif + +#ifdef WSAEUSERS + NODE_DEFINE_CONSTANT(target, WSAEUSERS); +#endif + +#ifdef WSAEDQUOT + NODE_DEFINE_CONSTANT(target, WSAEDQUOT); +#endif + +#ifdef WSAESTALE + NODE_DEFINE_CONSTANT(target, WSAESTALE); +#endif + +#ifdef WSAEREMOTE + NODE_DEFINE_CONSTANT(target, WSAEREMOTE); +#endif + +#ifdef WSASYSNOTREADY + NODE_DEFINE_CONSTANT(target, WSASYSNOTREADY); +#endif + +#ifdef WSAVERNOTSUPPORTED + NODE_DEFINE_CONSTANT(target, WSAVERNOTSUPPORTED); +#endif + +#ifdef WSANOTINITIALISED + NODE_DEFINE_CONSTANT(target, WSANOTINITIALISED); +#endif + +#ifdef WSAEDISCON + NODE_DEFINE_CONSTANT(target, WSAEDISCON); +#endif + +#ifdef WSAENOMORE + NODE_DEFINE_CONSTANT(target, WSAENOMORE); +#endif + +#ifdef WSAECANCELLED + NODE_DEFINE_CONSTANT(target, WSAECANCELLED); +#endif + +#ifdef WSAEINVALIDPROCTABLE + NODE_DEFINE_CONSTANT(target, WSAEINVALIDPROCTABLE); +#endif + +#ifdef WSAEINVALIDPROVIDER + NODE_DEFINE_CONSTANT(target, WSAEINVALIDPROVIDER); +#endif + +#ifdef WSAEPROVIDERFAILEDINIT + NODE_DEFINE_CONSTANT(target, WSAEPROVIDERFAILEDINIT); +#endif + +#ifdef WSASYSCALLFAILURE + NODE_DEFINE_CONSTANT(target, WSASYSCALLFAILURE); +#endif + +#ifdef WSASERVICE_NOT_FOUND + NODE_DEFINE_CONSTANT(target, WSASERVICE_NOT_FOUND); +#endif + +#ifdef WSATYPE_NOT_FOUND + NODE_DEFINE_CONSTANT(target, WSATYPE_NOT_FOUND); +#endif + +#ifdef WSA_E_NO_MORE + NODE_DEFINE_CONSTANT(target, WSA_E_NO_MORE); +#endif + +#ifdef WSA_E_CANCELLED + NODE_DEFINE_CONSTANT(target, WSA_E_CANCELLED); +#endif + +#ifdef WSAEREFUSED + NODE_DEFINE_CONSTANT(target, WSAEREFUSED); +#endif + #ifdef SIGHUP NODE_DEFINE_CONSTANT(target, SIGHUP); #endif diff --git a/src/node_os.cc b/src/node_os.cc index b5b97af6e97..8c85d1b0c8f 100644 --- a/src/node_os.cc +++ b/src/node_os.cc @@ -28,10 +28,11 @@ static Handle GetHostname(const Arguments& args) { int r = gethostname(s, 255); if (r < 0) { -#ifdef __MINGW32__ - errno = WSAGetLastError() - WSABASEERR; -#endif +#ifdef __POSIX__ return ThrowException(ErrnoException(errno, "gethostname")); +#else // __MINGW32__ + return ThrowException(ErrnoException(WSAGetLastError(), "gethostname")); +#endif // __MINGW32__ } return scope.Close(String::New(s));