From 0efa3cf4d34e33a48508205a8361fc9e957bb379 Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Tue, 1 May 2012 21:30:32 +0700 Subject: [PATCH 1/3] 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; From edb40b16ce0386566c7c433bbf7224aa4a1c19e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Ma=C5=82ecki?= Date: Sat, 14 Apr 2012 17:40:01 +0200 Subject: [PATCH 2/3] unix: map `EROFS` to `UV_EROFS` Conflicts: src/unix/error.c --- include/uv.h | 3 ++- src/unix/error.c | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/uv.h b/include/uv.h index d3e257f8..340ab11a 100644 --- a/include/uv.h +++ b/include/uv.h @@ -122,7 +122,8 @@ typedef intptr_t ssize_t; XX( 52, EXDEV, "cross-device link not permitted") \ XX( 53, ENOTEMPTY, "directory not empty") \ XX( 54, ENOSPC, "no space left on device") \ - XX( 55, EIO, "i/o error") + XX( 55, EIO, "i/o error") \ + XX( 56, EROFS, "read-only file system" ) #define UV_ERRNO_GEN(val, name, s) UV_##name = val, diff --git a/src/unix/error.c b/src/unix/error.c index cbff2dde..62f1f143 100644 --- a/src/unix/error.c +++ b/src/unix/error.c @@ -95,6 +95,7 @@ uv_err_code uv_translate_sys_error(int sys_errno) { case EBUSY: return UV_EBUSY; case ENOTEMPTY: return UV_ENOTEMPTY; case ENOSPC: return UV_ENOSPC; + case EROFS: return UV_EROFS; case ENOMEM: return UV_ENOMEM; default: return UV_UNKNOWN; } From 936795a2c8aac2d05bfbf3778c54396bd52352ee Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Mon, 16 Apr 2012 16:35:50 +0200 Subject: [PATCH 3/3] windows: map ERROR_WRITE_PROTECT to UV_EROFS --- src/win/error.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/win/error.c b/src/win/error.c index a2b1f545..29404126 100644 --- a/src/win/error.c +++ b/src/win/error.c @@ -126,6 +126,7 @@ uv_err_code uv_translate_sys_error(int sys_errno) { case ERROR_EA_TABLE_FULL: return UV_ENOSPC; case ERROR_END_OF_MEDIA: return UV_ENOSPC; case ERROR_HANDLE_DISK_FULL: return UV_ENOSPC; + case ERROR_WRITE_PROTECT: return UV_EROFS; case ERROR_NOT_CONNECTED: return UV_ENOTCONN; case WSAENOTCONN: return UV_ENOTCONN; case ERROR_DIR_NOT_EMPTY: return UV_ENOTEMPTY;