From 0efa3cf4d34e33a48508205a8361fc9e957bb379 Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Tue, 1 May 2012 21:30:32 +0700 Subject: [PATCH] err: handle EIO errors on win/unix --- include/uv.h | 3 ++- src/unix/error.c | 1 + src/win/error.c | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/include/uv.h b/include/uv.h index c6f15e84..d3e257f8 100644 --- a/include/uv.h +++ b/include/uv.h @@ -121,7 +121,8 @@ typedef intptr_t ssize_t; XX( 51, ELOOP, "too many symbolic links encountered") \ XX( 52, EXDEV, "cross-device link not permitted") \ XX( 53, ENOTEMPTY, "directory not empty") \ - XX( 54, ENOSPC, "no space left on device") + XX( 54, ENOSPC, "no space left on device") \ + XX( 55, EIO, "i/o error") #define UV_ERRNO_GEN(val, name, s) UV_##name = val, diff --git a/src/unix/error.c b/src/unix/error.c index e01d06ac..cbff2dde 100644 --- a/src/unix/error.c +++ b/src/unix/error.c @@ -59,6 +59,7 @@ void uv_fatal_error(const int errorno, const char* syscall) { uv_err_code uv_translate_sys_error(int sys_errno) { switch (sys_errno) { case 0: return UV_OK; + case EIO: return UV_EIO; case EPERM: return UV_EPERM; case ENOSYS: return UV_ENOSYS; case ENOTSOCK: return UV_ENOTSOCK; diff --git a/src/win/error.c b/src/win/error.c index a7c30e79..a2b1f545 100644 --- a/src/win/error.c +++ b/src/win/error.c @@ -67,6 +67,21 @@ void uv_fatal_error(const int errorno, const char* syscall) { uv_err_code uv_translate_sys_error(int sys_errno) { switch (sys_errno) { case ERROR_SUCCESS: return UV_OK; + case ERROR_BEGINNING_OF_MEDIA: return UV_EIO; + case ERROR_BUS_RESET: return UV_EIO; + case ERROR_CRC: return UV_EIO; + case ERROR_DEVICE_DOOR_OPEN: return UV_EIO; + case ERROR_DEVICE_REQUIRES_CLEANING: return UV_EIO; + case ERROR_DISK_CORRUPT: return UV_EIO; + case ERROR_EOM_OVERFLOW: return UV_EIO; + case ERROR_FILEMARK_DETECTED: return UV_EIO; + case ERROR_INVALID_BLOCK_LENGTH: return UV_EIO; + case ERROR_IO_DEVICE: return UV_EIO; + case ERROR_NO_DATA_DETECTED: return UV_EIO; + case ERROR_NO_SIGNAL_SENT: return UV_EIO; + case ERROR_OPEN_FAILED: return UV_EIO; + case ERROR_SETMARK_DETECTED: return UV_EIO; + case ERROR_SIGNAL_REFUSED: return UV_EIO; case ERROR_FILE_NOT_FOUND: return UV_ENOENT; case ERROR_INVALID_NAME: return UV_ENOENT; case ERROR_MOD_NOT_FOUND: return UV_ENOENT;