From 2156e5eca10d1dc3bb8155dc70f1dc0718841028 Mon Sep 17 00:00:00 2001 From: Shigeki Ohtsu Date: Wed, 9 Nov 2011 00:27:52 +0900 Subject: [PATCH] fs: don't assert on uv_fs_*() errors Pass errors to the JS callbacks, don't assert in C++ land. Fixes among other things the case where Node aborts because uv_fs_futimes() returns ENOSYS. --- src/node_file.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/node_file.cc b/src/node_file.cc index f7d2d87ed11..376ebd98c34 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -226,11 +226,17 @@ struct fs_req_wrap { #define ASYNC_CALL(func, callback, ...) \ FSReqWrap* req_wrap = new FSReqWrap(); \ - int r = uv_fs_##func(Loop(), &req_wrap->req_, \ + int r = uv_fs_##func(Loop(), &req_wrap->req_, \ __VA_ARGS__, After); \ - assert(r == 0); \ req_wrap->object_->Set(oncomplete_sym, callback); \ req_wrap->Dispatched(); \ + if (r < 0) { \ + uv_fs_t* req = &req_wrap->req_; \ + req->result = r; \ + req->path = NULL; \ + req->errorno = uv_last_error(uv_default_loop()).code; \ + After(req); \ + } \ return scope.Close(req_wrap->object_); #define SYNC_CALL(func, path, ...) \