You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
5.2 KiB
195 lines
5.2 KiB
/*
|
|
Copyright (c) 2012 Martin Sustrik All rights reserved.
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"),
|
|
to deal in the Software without restriction, including without limitation
|
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
and/or sell copies of the Software, and to permit persons to whom
|
|
the Software is furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included
|
|
in all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
IN THE SOFTWARE.
|
|
*/
|
|
|
|
#include "err.h"
|
|
|
|
#ifdef NN_HAVE_WINDOWS
|
|
#include "win.h"
|
|
#endif
|
|
|
|
#include <stdlib.h>
|
|
|
|
void nn_err_abort(void)
|
|
{
|
|
PNACL_msg("nn_err_abort\n");
|
|
while ( 1 )
|
|
{
|
|
printf("exit due to error\n");
|
|
exit(-1);
|
|
void msleep(int32_t);
|
|
msleep(666777);
|
|
}
|
|
abort ();
|
|
}
|
|
|
|
int32_t nn_err_errno(void) { return errno; }
|
|
|
|
const char *nn_err_strerror(int32_t errnum)
|
|
{
|
|
switch (errnum) {
|
|
#if defined NN_HAVE_WINDOWS
|
|
case ENOTSUP:
|
|
return "Not supported";
|
|
case EPROTONOSUPPORT:
|
|
return "Protocol not supported";
|
|
case ENOBUFS:
|
|
return "No buffer space available";
|
|
case ENETDOWN:
|
|
return "Network is down";
|
|
case EADDRINUSE:
|
|
return "Address in use";
|
|
case EADDRNOTAVAIL:
|
|
return "Address not available";
|
|
case ECONNREFUSED:
|
|
return "Connection refused";
|
|
case EINPROGRESS:
|
|
return "Operation in progress";
|
|
case ENOTSOCK:
|
|
return "Not a socket";
|
|
case EAFNOSUPPORT:
|
|
return "Address family not supported";
|
|
case EPROTO:
|
|
return "Protocol error";
|
|
case EAGAIN:
|
|
return "Resource unavailable, try again";
|
|
case EBADF:
|
|
return "Bad file descriptor";
|
|
case EINVAL:
|
|
return "Invalid argument";
|
|
case EMFILE:
|
|
return "Too many open files";
|
|
case EFAULT:
|
|
return "Bad address";
|
|
case EACCES:
|
|
return "Permission denied";
|
|
case ENETRESET:
|
|
return "Connection aborted by network";
|
|
case ENETUNREACH:
|
|
return "Network unreachable";
|
|
case EHOSTUNREACH:
|
|
return "Host is unreachable";
|
|
case ENOTCONN:
|
|
return "The socket is not connected";
|
|
case EMSGSIZE:
|
|
return "Message too large";
|
|
case ETIMEDOUT:
|
|
return "Timed out";
|
|
case ECONNABORTED:
|
|
return "Connection aborted";
|
|
case ECONNRESET:
|
|
return "Connection reset";
|
|
case ENOPROTOOPT:
|
|
return "Protocol not available";
|
|
case EISCONN:
|
|
return "Socket is connected";
|
|
#endif
|
|
case ETERM:
|
|
return "Nanomsg library was terminated";
|
|
case EFSM:
|
|
return "Operation cannot be performed in this state";
|
|
default:
|
|
#if defined _MSC_VER
|
|
#pragma warning (push)
|
|
#pragma warning (disable:4996)
|
|
#endif
|
|
PNACL_msg("nanomsg: errno.%d (%s)\n",errnum,strerror(errnum));
|
|
getchar();
|
|
return strerror (errnum);
|
|
#if defined _MSC_VER
|
|
#pragma warning (pop)
|
|
#endif
|
|
}
|
|
}
|
|
|
|
#ifdef NN_HAVE_WINDOWS
|
|
|
|
int nn_err_wsa_to_posix (int wsaerr)
|
|
{
|
|
switch (wsaerr) {
|
|
case WSAEINPROGRESS:
|
|
return EAGAIN;
|
|
case WSAEBADF:
|
|
return EBADF;
|
|
case WSAEINVAL:
|
|
return EINVAL;
|
|
case WSAEMFILE:
|
|
return EMFILE;
|
|
case WSAEFAULT:
|
|
return EFAULT;
|
|
case WSAEPROTONOSUPPORT:
|
|
return EPROTONOSUPPORT;
|
|
case WSAENOBUFS:
|
|
return ENOBUFS;
|
|
case WSAENETDOWN:
|
|
return ENETDOWN;
|
|
case WSAEADDRINUSE:
|
|
return EADDRINUSE;
|
|
case WSAEADDRNOTAVAIL:
|
|
return EADDRNOTAVAIL;
|
|
case WSAEAFNOSUPPORT:
|
|
return EAFNOSUPPORT;
|
|
case WSAEACCES:
|
|
return EACCES;
|
|
case WSAENETRESET:
|
|
return ENETRESET;
|
|
case WSAENETUNREACH:
|
|
return ENETUNREACH;
|
|
case WSAEHOSTUNREACH:
|
|
return EHOSTUNREACH;
|
|
case WSAENOTCONN:
|
|
return ENOTCONN;
|
|
case WSAEMSGSIZE:
|
|
return EMSGSIZE;
|
|
case WSAETIMEDOUT:
|
|
return ETIMEDOUT;
|
|
case WSAECONNREFUSED:
|
|
return ECONNREFUSED;
|
|
case WSAECONNABORTED:
|
|
return ECONNABORTED;
|
|
case WSAECONNRESET:
|
|
return ECONNRESET;
|
|
case ERROR_BROKEN_PIPE:
|
|
return ECONNRESET;
|
|
case WSAESOCKTNOSUPPORT:
|
|
return ESOCKTNOSUPPORT;
|
|
case ERROR_NOT_CONNECTED:
|
|
return ENOTCONN;
|
|
case ERROR_PIPE_NOT_CONNECTED:
|
|
return ENOTCONN;
|
|
case ERROR_NO_DATA:
|
|
return EPIPE;
|
|
default:
|
|
nn_assert (0);
|
|
}
|
|
}
|
|
|
|
void nn_win_error (int err, char *buf, size_t bufsize)
|
|
{
|
|
DWORD rc = FormatMessageA (
|
|
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL, (DWORD) err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
|
buf, (DWORD) bufsize, NULL );
|
|
nn_assert (rc);
|
|
}
|
|
|
|
#endif
|
|
|
|
|