123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- #include "precompile.h"
- #include "toolkit.h"
- int toolkit_translate_sys_error(int sys_errno) {
- if (sys_errno <= 0) {
- return sys_errno; /* If < 0 then it's already a libuv error. */
- }
- switch (sys_errno) {
- case ERROR_NOACCESS: return TOOLKIT_EACCES;
- case WSAEACCES: return TOOLKIT_EACCES;
- case ERROR_ELEVATION_REQUIRED: return TOOLKIT_EACCES;
- case ERROR_ADDRESS_ALREADY_ASSOCIATED: return TOOLKIT_EADDRINUSE;
- case WSAEADDRINUSE: return TOOLKIT_EADDRINUSE;
- case WSAEADDRNOTAVAIL: return TOOLKIT_EADDRNOTAVAIL;
- case WSAEAFNOSUPPORT: return TOOLKIT_EAFNOSUPPORT;
- case WSAEWOULDBLOCK: return TOOLKIT_EAGAIN;
- case WSAEALREADY: return TOOLKIT_EALREADY;
- case ERROR_INVALID_FLAGS: return TOOLKIT_EBADF;
- case ERROR_INVALID_HANDLE: return TOOLKIT_EBADF;
- case ERROR_LOCK_VIOLATION: return TOOLKIT_EBUSY;
- case ERROR_PIPE_BUSY: return TOOLKIT_EBUSY;
- case ERROR_SHARING_VIOLATION: return TOOLKIT_EBUSY;
- case ERROR_OPERATION_ABORTED: return TOOLKIT_ECANCELED;
- case WSAEINTR: return TOOLKIT_ECANCELED;
- case ERROR_NO_UNICODE_TRANSLATION: return TOOLKIT_ECHARSET;
- case ERROR_CONNECTION_ABORTED: return TOOLKIT_ECONNABORTED;
- case WSAECONNABORTED: return TOOLKIT_ECONNABORTED;
- case ERROR_CONNECTION_REFUSED: return TOOLKIT_ECONNREFUSED;
- case WSAECONNREFUSED: return TOOLKIT_ECONNREFUSED;
- case ERROR_NETNAME_DELETED: return TOOLKIT_ECONNRESET;
- case WSAECONNRESET: return TOOLKIT_ECONNRESET;
- case ERROR_ALREADY_EXISTS: return TOOLKIT_EEXIST;
- case ERROR_FILE_EXISTS: return TOOLKIT_EEXIST;
- case ERROR_BUFFER_OVERFLOW: return TOOLKIT_EFAULT;
- case WSAEFAULT: return TOOLKIT_EFAULT;
- case ERROR_HOST_UNREACHABLE: return TOOLKIT_EHOSTUNREACH;
- case WSAEHOSTUNREACH: return TOOLKIT_EHOSTUNREACH;
- case ERROR_INSUFFICIENT_BUFFER: return TOOLKIT_EINVAL;
- case ERROR_INVALID_DATA: return TOOLKIT_EINVAL;
- case ERROR_INVALID_PARAMETER: return TOOLKIT_EINVAL;
- case ERROR_SYMLINK_NOT_SUPPORTED: return TOOLKIT_EINVAL;
- case WSAEINVAL: return TOOLKIT_EINVAL;
- case WSAEPFNOSUPPORT: return TOOLKIT_EINVAL;
- case WSAESOCKTNOSUPPORT: return TOOLKIT_EINVAL;
- case ERROR_BEGINNING_OF_MEDIA: return TOOLKIT_EIO;
- case ERROR_BUS_RESET: return TOOLKIT_EIO;
- case ERROR_CRC: return TOOLKIT_EIO;
- case ERROR_DEVICE_DOOR_OPEN: return TOOLKIT_EIO;
- case ERROR_DEVICE_REQUIRES_CLEANING: return TOOLKIT_EIO;
- case ERROR_DISK_CORRUPT: return TOOLKIT_EIO;
- case ERROR_EOM_OVERFLOW: return TOOLKIT_EIO;
- case ERROR_FILEMARK_DETECTED: return TOOLKIT_EIO;
- case ERROR_GEN_FAILURE: return TOOLKIT_EIO;
- case ERROR_INVALID_BLOCK_LENGTH: return TOOLKIT_EIO;
- case ERROR_IO_DEVICE: return TOOLKIT_EIO;
- case ERROR_NO_DATA_DETECTED: return TOOLKIT_EIO;
- case ERROR_NO_SIGNAL_SENT: return TOOLKIT_EIO;
- case ERROR_OPEN_FAILED: return TOOLKIT_EIO;
- case ERROR_SETMARK_DETECTED: return TOOLKIT_EIO;
- case ERROR_SIGNAL_REFUSED: return TOOLKIT_EIO;
- case WSAEISCONN: return TOOLKIT_EISCONN;
- case ERROR_CANT_RESOLVE_FILENAME: return TOOLKIT_ELOOP;
- case ERROR_TOO_MANY_OPEN_FILES: return TOOLKIT_EMFILE;
- case WSAEMFILE: return TOOLKIT_EMFILE;
- case WSAEMSGSIZE: return TOOLKIT_EMSGSIZE;
- case ERROR_FILENAME_EXCED_RANGE: return TOOLKIT_ENAMETOOLONG;
- case ERROR_NETWORK_UNREACHABLE: return TOOLKIT_ENETUNREACH;
- case WSAENETUNREACH: return TOOLKIT_ENETUNREACH;
- case WSAENOBUFS: return TOOLKIT_ENOBUFS;
- case ERROR_BAD_PATHNAME: return TOOLKIT_ENOENT;
- case ERROR_DIRECTORY: return TOOLKIT_ENOENT;
- case ERROR_ENVVAR_NOT_FOUND: return TOOLKIT_ENOENT;
- case ERROR_FILE_NOT_FOUND: return TOOLKIT_ENOENT;
- case ERROR_INVALID_NAME: return TOOLKIT_ENOENT;
- case ERROR_INVALID_DRIVE: return TOOLKIT_ENOENT;
- case ERROR_INVALID_REPARSE_DATA: return TOOLKIT_ENOENT;
- case ERROR_MOD_NOT_FOUND: return TOOLKIT_ENOENT;
- case ERROR_PATH_NOT_FOUND: return TOOLKIT_ENOENT;
- case WSAHOST_NOT_FOUND: return TOOLKIT_ENOENT;
- case WSANO_DATA: return TOOLKIT_ENOENT;
- case ERROR_NOT_ENOUGH_MEMORY: return TOOLKIT_ENOMEM;
- case ERROR_OUTOFMEMORY: return TOOLKIT_ENOMEM;
- case ERROR_CANNOT_MAKE: return TOOLKIT_ENOSPC;
- case ERROR_DISK_FULL: return TOOLKIT_ENOSPC;
- case ERROR_EA_TABLE_FULL: return TOOLKIT_ENOSPC;
- case ERROR_END_OF_MEDIA: return TOOLKIT_ENOSPC;
- case ERROR_HANDLE_DISK_FULL: return TOOLKIT_ENOSPC;
- case ERROR_NOT_CONNECTED: return TOOLKIT_ENOTCONN;
- case WSAENOTCONN: return TOOLKIT_ENOTCONN;
- case ERROR_DIR_NOT_EMPTY: return TOOLKIT_ENOTEMPTY;
- case WSAENOTSOCK: return TOOLKIT_ENOTSOCK;
- case ERROR_NOT_SUPPORTED: return TOOLKIT_ENOTSUP;
- case ERROR_BROKEN_PIPE: return TOOLKIT_EOF;
- case ERROR_ACCESS_DENIED: return TOOLKIT_EPERM;
- case ERROR_PRIVILEGE_NOT_HELD: return TOOLKIT_EPERM;
- case ERROR_BAD_PIPE: return TOOLKIT_EPIPE;
- case ERROR_NO_DATA: return TOOLKIT_EPIPE;
- case ERROR_PIPE_NOT_CONNECTED: return TOOLKIT_EPIPE;
- case WSAESHUTDOWN: return TOOLKIT_EPIPE;
- case WSAEPROTONOSUPPORT: return TOOLKIT_EPROTONOSUPPORT;
- case ERROR_WRITE_PROTECT: return TOOLKIT_EROFS;
- case ERROR_SEM_TIMEOUT: return TOOLKIT_ETIMEDOUT;
- case WSAETIMEDOUT: return TOOLKIT_ETIMEDOUT;
- case ERROR_NOT_SAME_DEVICE: return TOOLKIT_EXDEV;
- case ERROR_INVALID_FUNCTION: return TOOLKIT_EISDIR;
- case ERROR_META_EXPANSION_TOO_LONG: return TOOLKIT_E2BIG;
- default: return TOOLKIT_UNKNOWN;
- }
- }
- /*
- * Display an error message and abort the event loop.
- */
- void toolkit_fatal_error(const int errorno, const char* syscall)
- {
- char* buf = NULL;
- const char* errmsg;
- FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errorno,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buf, 0, NULL);
- if (buf) {
- errmsg = buf;
- }
- else {
- errmsg = "Unknown error";
- }
- /* FormatMessage messages include a newline character already, so don't add
- * another. */
- if (syscall) {
- fprintf(stderr, "%s: (%d) %s", syscall, errorno, errmsg);
- }
- else {
- fprintf(stderr, "(%d) %s", errorno, errmsg);
- }
- if (buf) {
- LocalFree(buf);
- }
- DebugBreak();
- abort();
- }
|