diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2011-10-19 16:53:07 -0700 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2011-10-19 16:53:07 -0700 |
commit | 6cc42927d83adf2f89809ff54732e13f9376ff6c (patch) | |
tree | dc4674913a23541edaa37557fb4b5afcf16bb299 | |
parent | 88af0c86357cf627cd7e7cc6f83f7f546754f6c3 (diff) | |
download | android-node-v8-6cc42927d83adf2f89809ff54732e13f9376ff6c.tar.gz android-node-v8-6cc42927d83adf2f89809ff54732e13f9376ff6c.tar.bz2 android-node-v8-6cc42927d83adf2f89809ff54732e13f9376ff6c.zip |
Display sys_errno when UV_UNKNOWN is returned
-rw-r--r-- | src/fs_event_wrap.cc | 8 | ||||
-rw-r--r-- | src/handle_wrap.cc | 4 | ||||
-rw-r--r-- | src/node.cc | 22 | ||||
-rw-r--r-- | src/node.h | 2 | ||||
-rw-r--r-- | src/pipe_wrap.cc | 12 | ||||
-rw-r--r-- | src/process_wrap.cc | 8 | ||||
-rw-r--r-- | src/stream_wrap.cc | 18 | ||||
-rw-r--r-- | src/tcp_wrap.cc | 22 | ||||
-rw-r--r-- | src/timer_wrap.cc | 12 | ||||
-rw-r--r-- | src/tty_wrap.cc | 8 | ||||
-rw-r--r-- | src/udp_wrap.cc | 16 |
11 files changed, 80 insertions, 52 deletions
diff --git a/src/fs_event_wrap.cc b/src/fs_event_wrap.cc index 9a2df34bfc..76f88ffbb8 100644 --- a/src/fs_event_wrap.cc +++ b/src/fs_event_wrap.cc @@ -13,7 +13,9 @@ namespace node { FSEventWrap* wrap = \ static_cast<FSEventWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ if (!wrap) { \ - SetErrno(UV_EBADF); \ + uv_err_t err; \ + err.code = UV_EBADF; \ + SetErrno(err); \ return scope.Close(Integer::New(-1)); \ } @@ -89,7 +91,7 @@ Handle<Value> FSEventWrap::Start(const Arguments& args) { uv_unref(uv_default_loop()); } } else { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); } return scope.Close(Integer::New(r)); @@ -106,7 +108,7 @@ void FSEventWrap::OnEvent(uv_fs_event_t* handle, const char* filename, assert(wrap->object_.IsEmpty() == false); if (status) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); eventStr = String::Empty(); } else { switch (events) { diff --git a/src/handle_wrap.cc b/src/handle_wrap.cc index b82418ab37..45ab0bbf2d 100644 --- a/src/handle_wrap.cc +++ b/src/handle_wrap.cc @@ -24,7 +24,9 @@ using v8::Integer; HandleWrap* wrap = \ static_cast<HandleWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ if (!wrap) { \ - SetErrno(UV_EBADF); \ + uv_err_t err; \ + err.code = UV_EBADF; \ + SetErrno(err); \ return scope.Close(Integer::New(-1)); \ } diff --git a/src/node.cc b/src/node.cc index fc4f26edea..46d2a796c3 100644 --- a/src/node.cc +++ b/src/node.cc @@ -1004,7 +1004,7 @@ Local<Value> ErrnoException(int errorno, Local<String> cons1 = String::Concat(estring, String::NewSymbol(", ")); Local<String> cons2 = String::Concat(cons1, message); - if (errno_symbol.IsEmpty()) { + if (syscall_symbol.IsEmpty()) { syscall_symbol = NODE_PSYMBOL("syscall"); errno_symbol = NODE_PSYMBOL("errno"); errpath_symbol = NODE_PSYMBOL("path"); @@ -1080,11 +1080,21 @@ void MakeCallback(Handle<Object> object, } -void SetErrno(uv_err_code code) { - uv_err_t err; - err.code = code; - Context::GetCurrent()->Global()->Set(String::NewSymbol("errno"), - String::NewSymbol(uv_err_name(err))); +void SetErrno(uv_err_t err) { + HandleScope scope; + + if (errno_symbol.IsEmpty()) { + errno_symbol = NODE_PSYMBOL("errno"); + } + + if (err.code == UV_UNKNOWN) { + char errno_buf[100]; + snprintf(errno_buf, 100, "Unknown system errno %d", err.sys_errno_); + Context::GetCurrent()->Global()->Set(errno_symbol, String::New(errno_buf)); + } else { + Context::GetCurrent()->Global()->Set(errno_symbol, + String::NewSymbol(uv_err_name(err))); + } } diff --git a/src/node.h b/src/node.h index 5748598916..1a3b6110e8 100644 --- a/src/node.h +++ b/src/node.h @@ -203,7 +203,7 @@ node_module_struct* get_builtin_module(const char *name); #define NODE_MODULE_DECL(modname) \ extern node::node_module_struct modname ## _module; -void SetErrno(uv_err_code code); +void SetErrno(uv_err_t err); void MakeCallback(v8::Handle<v8::Object> object, const char* method, int argc, diff --git a/src/pipe_wrap.cc b/src/pipe_wrap.cc index 1bf59bd2de..a180b4b4d0 100644 --- a/src/pipe_wrap.cc +++ b/src/pipe_wrap.cc @@ -11,7 +11,9 @@ PipeWrap* wrap = \ static_cast<PipeWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ if (!wrap) { \ - SetErrno(UV_EBADF); \ + uv_err_t err; \ + err.code = UV_EBADF; \ + SetErrno(err); \ return scope.Close(Integer::New(-1)); \ } @@ -113,7 +115,7 @@ Handle<Value> PipeWrap::Bind(const Arguments& args) { int r = uv_pipe_bind(&wrap->handle_, *name); // Error starting the pipe. - if (r) SetErrno(uv_last_error(uv_default_loop()).code); + if (r) SetErrno(uv_last_error(uv_default_loop())); return scope.Close(Integer::New(r)); } @@ -129,7 +131,7 @@ Handle<Value> PipeWrap::Listen(const Arguments& args) { int r = uv_listen((uv_stream_t*)&wrap->handle_, backlog, OnConnection); // Error starting the pipe. - if (r) SetErrno(uv_last_error(uv_default_loop()).code); + if (r) SetErrno(uv_last_error(uv_default_loop())); return scope.Close(Integer::New(r)); } @@ -182,7 +184,7 @@ void PipeWrap::AfterConnect(uv_connect_t* req, int status) { assert(wrap->object_.IsEmpty() == false); if (status) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); } Local<Value> argv[3] = { @@ -227,7 +229,7 @@ Handle<Value> PipeWrap::Connect(const Arguments& args) { req_wrap->Dispatched(); if (r) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); delete req_wrap; return scope.Close(v8::Null()); } else { diff --git a/src/process_wrap.cc b/src/process_wrap.cc index 7b880a35d9..eb7f10d9da 100644 --- a/src/process_wrap.cc +++ b/src/process_wrap.cc @@ -10,7 +10,9 @@ ProcessWrap* wrap = \ static_cast<ProcessWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ if (!wrap) { \ - SetErrno(UV_EBADF); \ + uv_err_t err; \ + err.code = UV_EBADF; \ + SetErrno(err); \ return scope.Close(Integer::New(-1)); \ } @@ -172,7 +174,7 @@ class ProcessWrap : public HandleWrap { delete [] options.env; } - if (r) SetErrno(uv_last_error(uv_default_loop()).code); + if (r) SetErrno(uv_last_error(uv_default_loop())); return scope.Close(Integer::New(r)); } @@ -186,7 +188,7 @@ class ProcessWrap : public HandleWrap { int r = uv_process_kill(&wrap->process_, signal); - if (r) SetErrno(uv_last_error(uv_default_loop()).code); + if (r) SetErrno(uv_last_error(uv_default_loop())); return scope.Close(Integer::New(r)); } diff --git a/src/stream_wrap.cc b/src/stream_wrap.cc index cea1a5589e..fab635ad9d 100644 --- a/src/stream_wrap.cc +++ b/src/stream_wrap.cc @@ -34,7 +34,9 @@ using v8::Integer; StreamWrap* wrap = \ static_cast<StreamWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ if (!wrap) { \ - SetErrno(UV_EBADF); \ + uv_err_t err; \ + err.code = UV_EBADF; \ + SetErrno(err); \ return scope.Close(Integer::New(-1)); \ } @@ -106,7 +108,7 @@ Handle<Value> StreamWrap::ReadStart(const Arguments& args) { } // Error starting the tcp. - if (r) SetErrno(uv_last_error(uv_default_loop()).code); + if (r) SetErrno(uv_last_error(uv_default_loop())); return scope.Close(Integer::New(r)); } @@ -120,7 +122,7 @@ Handle<Value> StreamWrap::ReadStop(const Arguments& args) { int r = uv_read_stop(wrap->stream_); // Error starting the tcp. - if (r) SetErrno(uv_last_error(uv_default_loop()).code); + if (r) SetErrno(uv_last_error(uv_default_loop())); return scope.Close(Integer::New(r)); } @@ -199,7 +201,7 @@ void StreamWrap::OnReadCommon(uv_stream_t* handle, ssize_t nread, slab_used -= buf.len; } - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); MakeCallback(wrap->object_, "onread", 0, NULL); return; } @@ -312,7 +314,7 @@ Handle<Value> StreamWrap::Write(const Arguments& args) { wrap->UpdateWriteQueueSize(); if (r) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); delete req_wrap; return scope.Close(v8::Null()); } else { @@ -332,7 +334,7 @@ void StreamWrap::AfterWrite(uv_write_t* req, int status) { assert(wrap->object_.IsEmpty() == false); if (status) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); } wrap->UpdateWriteQueueSize(); @@ -362,7 +364,7 @@ Handle<Value> StreamWrap::Shutdown(const Arguments& args) { req_wrap->Dispatched(); if (r) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); delete req_wrap; return scope.Close(v8::Null()); } else { @@ -382,7 +384,7 @@ void StreamWrap::AfterShutdown(uv_shutdown_t* req, int status) { HandleScope scope; if (status) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); } Local<Value> argv[3] = { diff --git a/src/tcp_wrap.cc b/src/tcp_wrap.cc index 1303246a0a..90fc448fcf 100644 --- a/src/tcp_wrap.cc +++ b/src/tcp_wrap.cc @@ -28,7 +28,9 @@ TCPWrap* wrap = \ static_cast<TCPWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ if (!wrap) { \ - SetErrno(UV_EBADF); \ + uv_err_t err; \ + err.code = UV_EBADF; \ + SetErrno(err); \ return scope.Close(Integer::New(-1)); \ } @@ -149,7 +151,7 @@ Handle<Value> TCPWrap::GetSockName(const Arguments& args) { Local<Object> sockname = Object::New(); if (r != 0) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); } else { family = address.ss_family; @@ -191,7 +193,7 @@ Handle<Value> TCPWrap::GetPeerName(const Arguments& args) { Local<Object> sockname = Object::New(); if (r != 0) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); } else { family = address.ss_family; @@ -229,7 +231,7 @@ Handle<Value> TCPWrap::Bind(const Arguments& args) { int r = uv_tcp_bind(&wrap->handle_, address); // Error starting the tcp. - if (r) SetErrno(uv_last_error(uv_default_loop()).code); + if (r) SetErrno(uv_last_error(uv_default_loop())); return scope.Close(Integer::New(r)); } @@ -247,7 +249,7 @@ Handle<Value> TCPWrap::Bind6(const Arguments& args) { int r = uv_tcp_bind6(&wrap->handle_, address); // Error starting the tcp. - if (r) SetErrno(uv_last_error(uv_default_loop()).code); + if (r) SetErrno(uv_last_error(uv_default_loop())); return scope.Close(Integer::New(r)); } @@ -263,7 +265,7 @@ Handle<Value> TCPWrap::Listen(const Arguments& args) { int r = uv_listen((uv_stream_t*)&wrap->handle_, backlog, OnConnection); // Error starting the tcp. - if (r) SetErrno(uv_last_error(uv_default_loop()).code); + if (r) SetErrno(uv_last_error(uv_default_loop())); return scope.Close(Integer::New(r)); } @@ -298,7 +300,7 @@ void TCPWrap::OnConnection(uv_stream_t* handle, int status) { // Successful accept. Call the onconnection callback in JavaScript land. argv[0] = client_obj; } else { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); argv[0] = v8::Null(); } @@ -317,7 +319,7 @@ void TCPWrap::AfterConnect(uv_connect_t* req, int status) { assert(wrap->object_.IsEmpty() == false); if (status) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); } Local<Value> argv[3] = { @@ -353,7 +355,7 @@ Handle<Value> TCPWrap::Connect(const Arguments& args) { req_wrap->Dispatched(); if (r) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); delete req_wrap; return scope.Close(v8::Null()); } else { @@ -380,7 +382,7 @@ Handle<Value> TCPWrap::Connect6(const Arguments& args) { req_wrap->Dispatched(); if (r) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); delete req_wrap; return scope.Close(v8::Null()); } else { diff --git a/src/timer_wrap.cc b/src/timer_wrap.cc index 99db0c5d6d..3071c2a823 100644 --- a/src/timer_wrap.cc +++ b/src/timer_wrap.cc @@ -7,7 +7,9 @@ TimerWrap* wrap = \ static_cast<TimerWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ if (!wrap) { \ - SetErrno(UV_EBADF); \ + uv_err_t err; \ + err.code = UV_EBADF; \ + SetErrno(err); \ return scope.Close(Integer::New(-1)); \ } @@ -109,7 +111,7 @@ class TimerWrap : public HandleWrap { int r = uv_timer_start(&wrap->handle_, OnTimeout, timeout, repeat); // Error starting the timer. - if (r) SetErrno(uv_last_error(uv_default_loop()).code); + if (r) SetErrno(uv_last_error(uv_default_loop())); wrap->StateChange(); @@ -123,7 +125,7 @@ class TimerWrap : public HandleWrap { int r = uv_timer_stop(&wrap->handle_); - if (r) SetErrno(uv_last_error(uv_default_loop()).code); + if (r) SetErrno(uv_last_error(uv_default_loop())); wrap->StateChange(); @@ -137,7 +139,7 @@ class TimerWrap : public HandleWrap { int r = uv_timer_again(&wrap->handle_); - if (r) SetErrno(uv_last_error(uv_default_loop()).code); + if (r) SetErrno(uv_last_error(uv_default_loop())); wrap->StateChange(); @@ -163,7 +165,7 @@ class TimerWrap : public HandleWrap { int64_t repeat = uv_timer_get_repeat(&wrap->handle_); - if (repeat < 0) SetErrno(uv_last_error(uv_default_loop()).code); + if (repeat < 0) SetErrno(uv_last_error(uv_default_loop())); return scope.Close(Integer::New(repeat)); } diff --git a/src/tty_wrap.cc b/src/tty_wrap.cc index eaa8cfdcd4..6272d45f29 100644 --- a/src/tty_wrap.cc +++ b/src/tty_wrap.cc @@ -27,7 +27,9 @@ using v8::Undefined; TTYWrap* wrap = \ static_cast<TTYWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ if (!wrap) { \ - SetErrno(UV_EBADF); \ + uv_err_t err; \ + err.code = UV_EBADF; \ + SetErrno(err); \ return scope.Close(Integer::New(-1)); \ } @@ -100,7 +102,7 @@ class TTYWrap : StreamWrap { int r = uv_tty_get_winsize(&wrap->handle_, &width, &height); if (r) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); return v8::Undefined(); } @@ -119,7 +121,7 @@ class TTYWrap : StreamWrap { int r = uv_tty_set_mode(&wrap->handle_, args[0]->IsTrue()); if (r) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); } return scope.Close(Integer::New(r)); diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc index 651dc6f40a..eb9a4843b2 100644 --- a/src/udp_wrap.cc +++ b/src/udp_wrap.cc @@ -32,7 +32,9 @@ namespace node { UDPWrap* wrap = \ static_cast<UDPWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ if (!wrap) { \ - SetErrno(UV_EBADF); \ + uv_err_t err; \ + err.code = UV_EBADF; \ + SetErrno(err); \ return scope.Close(Integer::New(-1)); \ } @@ -153,7 +155,7 @@ Handle<Value> UDPWrap::DoBind(const Arguments& args, int family) { } if (r) - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); return scope.Close(Integer::New(r)); } @@ -210,7 +212,7 @@ Handle<Value> UDPWrap::DoSend(const Arguments& args, int family) { req_wrap->Dispatched(); if (r) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); delete req_wrap; return Null(); } @@ -238,7 +240,7 @@ Handle<Value> UDPWrap::RecvStart(const Arguments& args) { // UV_EALREADY means that the socket is already bound but that's okay int r = uv_udp_recv_start(&wrap->handle_, OnAlloc, OnRecv); if (r && uv_last_error(uv_default_loop()).code != UV_EALREADY) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); return False(); } @@ -274,7 +276,7 @@ Handle<Value> UDPWrap::GetSockName(const Arguments& args) { return scope.Close(sockname); } else { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); return Null(); } } @@ -293,7 +295,7 @@ void UDPWrap::OnSend(uv_udp_send_t* req, int status) { assert(wrap->object_.IsEmpty() == false); if (status) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); } Local<Value> argv[4] = { @@ -341,7 +343,7 @@ void UDPWrap::OnRecv(uv_udp_t* handle, }; if (nread == -1) { - SetErrno(uv_last_error(uv_default_loop()).code); + SetErrno(uv_last_error(uv_default_loop())); } else { Local<Object> rinfo = Object::New(); |