Browse Source

Display sys_errno when UV_UNKNOWN is returned

v0.7.4-release
Ryan Dahl 14 years ago
parent
commit
6cc42927d8
  1. 8
      src/fs_event_wrap.cc
  2. 4
      src/handle_wrap.cc
  3. 22
      src/node.cc
  4. 2
      src/node.h
  5. 12
      src/pipe_wrap.cc
  6. 8
      src/process_wrap.cc
  7. 18
      src/stream_wrap.cc
  8. 22
      src/tcp_wrap.cc
  9. 12
      src/timer_wrap.cc
  10. 8
      src/tty_wrap.cc
  11. 16
      src/udp_wrap.cc

8
src/fs_event_wrap.cc

@ -13,7 +13,9 @@ namespace node {
FSEventWrap* wrap = \ FSEventWrap* wrap = \
static_cast<FSEventWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ static_cast<FSEventWrap*>(args.Holder()->GetPointerFromInternalField(0)); \
if (!wrap) { \ if (!wrap) { \
SetErrno(UV_EBADF); \ uv_err_t err; \
err.code = UV_EBADF; \
SetErrno(err); \
return scope.Close(Integer::New(-1)); \ return scope.Close(Integer::New(-1)); \
} }
@ -89,7 +91,7 @@ Handle<Value> FSEventWrap::Start(const Arguments& args) {
uv_unref(uv_default_loop()); uv_unref(uv_default_loop());
} }
} else { } else {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
} }
return scope.Close(Integer::New(r)); 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); assert(wrap->object_.IsEmpty() == false);
if (status) { if (status) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
eventStr = String::Empty(); eventStr = String::Empty();
} else { } else {
switch (events) { switch (events) {

4
src/handle_wrap.cc

@ -24,7 +24,9 @@ using v8::Integer;
HandleWrap* wrap = \ HandleWrap* wrap = \
static_cast<HandleWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ static_cast<HandleWrap*>(args.Holder()->GetPointerFromInternalField(0)); \
if (!wrap) { \ if (!wrap) { \
SetErrno(UV_EBADF); \ uv_err_t err; \
err.code = UV_EBADF; \
SetErrno(err); \
return scope.Close(Integer::New(-1)); \ return scope.Close(Integer::New(-1)); \
} }

22
src/node.cc

@ -1004,7 +1004,7 @@ Local<Value> ErrnoException(int errorno,
Local<String> cons1 = String::Concat(estring, String::NewSymbol(", ")); Local<String> cons1 = String::Concat(estring, String::NewSymbol(", "));
Local<String> cons2 = String::Concat(cons1, message); Local<String> cons2 = String::Concat(cons1, message);
if (errno_symbol.IsEmpty()) { if (syscall_symbol.IsEmpty()) {
syscall_symbol = NODE_PSYMBOL("syscall"); syscall_symbol = NODE_PSYMBOL("syscall");
errno_symbol = NODE_PSYMBOL("errno"); errno_symbol = NODE_PSYMBOL("errno");
errpath_symbol = NODE_PSYMBOL("path"); errpath_symbol = NODE_PSYMBOL("path");
@ -1080,11 +1080,21 @@ void MakeCallback(Handle<Object> object,
} }
void SetErrno(uv_err_code code) { void SetErrno(uv_err_t err) {
uv_err_t err; HandleScope scope;
err.code = code;
Context::GetCurrent()->Global()->Set(String::NewSymbol("errno"), if (errno_symbol.IsEmpty()) {
String::NewSymbol(uv_err_name(err))); 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)));
}
} }

2
src/node.h

@ -203,7 +203,7 @@ node_module_struct* get_builtin_module(const char *name);
#define NODE_MODULE_DECL(modname) \ #define NODE_MODULE_DECL(modname) \
extern node::node_module_struct modname ## _module; 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, void MakeCallback(v8::Handle<v8::Object> object,
const char* method, const char* method,
int argc, int argc,

12
src/pipe_wrap.cc

@ -11,7 +11,9 @@
PipeWrap* wrap = \ PipeWrap* wrap = \
static_cast<PipeWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ static_cast<PipeWrap*>(args.Holder()->GetPointerFromInternalField(0)); \
if (!wrap) { \ if (!wrap) { \
SetErrno(UV_EBADF); \ uv_err_t err; \
err.code = UV_EBADF; \
SetErrno(err); \
return scope.Close(Integer::New(-1)); \ 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); int r = uv_pipe_bind(&wrap->handle_, *name);
// Error starting the pipe. // 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)); 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); int r = uv_listen((uv_stream_t*)&wrap->handle_, backlog, OnConnection);
// Error starting the pipe. // 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)); return scope.Close(Integer::New(r));
} }
@ -182,7 +184,7 @@ void PipeWrap::AfterConnect(uv_connect_t* req, int status) {
assert(wrap->object_.IsEmpty() == false); assert(wrap->object_.IsEmpty() == false);
if (status) { if (status) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
} }
Local<Value> argv[3] = { Local<Value> argv[3] = {
@ -227,7 +229,7 @@ Handle<Value> PipeWrap::Connect(const Arguments& args) {
req_wrap->Dispatched(); req_wrap->Dispatched();
if (r) { if (r) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
delete req_wrap; delete req_wrap;
return scope.Close(v8::Null()); return scope.Close(v8::Null());
} else { } else {

8
src/process_wrap.cc

@ -10,7 +10,9 @@
ProcessWrap* wrap = \ ProcessWrap* wrap = \
static_cast<ProcessWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ static_cast<ProcessWrap*>(args.Holder()->GetPointerFromInternalField(0)); \
if (!wrap) { \ if (!wrap) { \
SetErrno(UV_EBADF); \ uv_err_t err; \
err.code = UV_EBADF; \
SetErrno(err); \
return scope.Close(Integer::New(-1)); \ return scope.Close(Integer::New(-1)); \
} }
@ -172,7 +174,7 @@ class ProcessWrap : public HandleWrap {
delete [] options.env; 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)); return scope.Close(Integer::New(r));
} }
@ -186,7 +188,7 @@ class ProcessWrap : public HandleWrap {
int r = uv_process_kill(&wrap->process_, signal); 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)); return scope.Close(Integer::New(r));
} }

18
src/stream_wrap.cc

@ -34,7 +34,9 @@ using v8::Integer;
StreamWrap* wrap = \ StreamWrap* wrap = \
static_cast<StreamWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ static_cast<StreamWrap*>(args.Holder()->GetPointerFromInternalField(0)); \
if (!wrap) { \ if (!wrap) { \
SetErrno(UV_EBADF); \ uv_err_t err; \
err.code = UV_EBADF; \
SetErrno(err); \
return scope.Close(Integer::New(-1)); \ return scope.Close(Integer::New(-1)); \
} }
@ -106,7 +108,7 @@ Handle<Value> StreamWrap::ReadStart(const Arguments& args) {
} }
// Error starting the tcp. // 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)); return scope.Close(Integer::New(r));
} }
@ -120,7 +122,7 @@ Handle<Value> StreamWrap::ReadStop(const Arguments& args) {
int r = uv_read_stop(wrap->stream_); int r = uv_read_stop(wrap->stream_);
// Error starting the tcp. // 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)); return scope.Close(Integer::New(r));
} }
@ -199,7 +201,7 @@ void StreamWrap::OnReadCommon(uv_stream_t* handle, ssize_t nread,
slab_used -= buf.len; 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); MakeCallback(wrap->object_, "onread", 0, NULL);
return; return;
} }
@ -312,7 +314,7 @@ Handle<Value> StreamWrap::Write(const Arguments& args) {
wrap->UpdateWriteQueueSize(); wrap->UpdateWriteQueueSize();
if (r) { if (r) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
delete req_wrap; delete req_wrap;
return scope.Close(v8::Null()); return scope.Close(v8::Null());
} else { } else {
@ -332,7 +334,7 @@ void StreamWrap::AfterWrite(uv_write_t* req, int status) {
assert(wrap->object_.IsEmpty() == false); assert(wrap->object_.IsEmpty() == false);
if (status) { if (status) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
} }
wrap->UpdateWriteQueueSize(); wrap->UpdateWriteQueueSize();
@ -362,7 +364,7 @@ Handle<Value> StreamWrap::Shutdown(const Arguments& args) {
req_wrap->Dispatched(); req_wrap->Dispatched();
if (r) { if (r) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
delete req_wrap; delete req_wrap;
return scope.Close(v8::Null()); return scope.Close(v8::Null());
} else { } else {
@ -382,7 +384,7 @@ void StreamWrap::AfterShutdown(uv_shutdown_t* req, int status) {
HandleScope scope; HandleScope scope;
if (status) { if (status) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
} }
Local<Value> argv[3] = { Local<Value> argv[3] = {

22
src/tcp_wrap.cc

@ -28,7 +28,9 @@
TCPWrap* wrap = \ TCPWrap* wrap = \
static_cast<TCPWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ static_cast<TCPWrap*>(args.Holder()->GetPointerFromInternalField(0)); \
if (!wrap) { \ if (!wrap) { \
SetErrno(UV_EBADF); \ uv_err_t err; \
err.code = UV_EBADF; \
SetErrno(err); \
return scope.Close(Integer::New(-1)); \ return scope.Close(Integer::New(-1)); \
} }
@ -149,7 +151,7 @@ Handle<Value> TCPWrap::GetSockName(const Arguments& args) {
Local<Object> sockname = Object::New(); Local<Object> sockname = Object::New();
if (r != 0) { if (r != 0) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
} else { } else {
family = address.ss_family; family = address.ss_family;
@ -191,7 +193,7 @@ Handle<Value> TCPWrap::GetPeerName(const Arguments& args) {
Local<Object> sockname = Object::New(); Local<Object> sockname = Object::New();
if (r != 0) { if (r != 0) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
} else { } else {
family = address.ss_family; family = address.ss_family;
@ -229,7 +231,7 @@ Handle<Value> TCPWrap::Bind(const Arguments& args) {
int r = uv_tcp_bind(&wrap->handle_, address); int r = uv_tcp_bind(&wrap->handle_, address);
// Error starting the tcp. // 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)); 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); int r = uv_tcp_bind6(&wrap->handle_, address);
// Error starting the tcp. // 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)); 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); int r = uv_listen((uv_stream_t*)&wrap->handle_, backlog, OnConnection);
// Error starting the tcp. // 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)); 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. // Successful accept. Call the onconnection callback in JavaScript land.
argv[0] = client_obj; argv[0] = client_obj;
} else { } else {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
argv[0] = v8::Null(); argv[0] = v8::Null();
} }
@ -317,7 +319,7 @@ void TCPWrap::AfterConnect(uv_connect_t* req, int status) {
assert(wrap->object_.IsEmpty() == false); assert(wrap->object_.IsEmpty() == false);
if (status) { if (status) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
} }
Local<Value> argv[3] = { Local<Value> argv[3] = {
@ -353,7 +355,7 @@ Handle<Value> TCPWrap::Connect(const Arguments& args) {
req_wrap->Dispatched(); req_wrap->Dispatched();
if (r) { if (r) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
delete req_wrap; delete req_wrap;
return scope.Close(v8::Null()); return scope.Close(v8::Null());
} else { } else {
@ -380,7 +382,7 @@ Handle<Value> TCPWrap::Connect6(const Arguments& args) {
req_wrap->Dispatched(); req_wrap->Dispatched();
if (r) { if (r) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
delete req_wrap; delete req_wrap;
return scope.Close(v8::Null()); return scope.Close(v8::Null());
} else { } else {

12
src/timer_wrap.cc

@ -7,7 +7,9 @@
TimerWrap* wrap = \ TimerWrap* wrap = \
static_cast<TimerWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ static_cast<TimerWrap*>(args.Holder()->GetPointerFromInternalField(0)); \
if (!wrap) { \ if (!wrap) { \
SetErrno(UV_EBADF); \ uv_err_t err; \
err.code = UV_EBADF; \
SetErrno(err); \
return scope.Close(Integer::New(-1)); \ return scope.Close(Integer::New(-1)); \
} }
@ -109,7 +111,7 @@ class TimerWrap : public HandleWrap {
int r = uv_timer_start(&wrap->handle_, OnTimeout, timeout, repeat); int r = uv_timer_start(&wrap->handle_, OnTimeout, timeout, repeat);
// Error starting the timer. // 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(); wrap->StateChange();
@ -123,7 +125,7 @@ class TimerWrap : public HandleWrap {
int r = uv_timer_stop(&wrap->handle_); 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(); wrap->StateChange();
@ -137,7 +139,7 @@ class TimerWrap : public HandleWrap {
int r = uv_timer_again(&wrap->handle_); 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(); wrap->StateChange();
@ -163,7 +165,7 @@ class TimerWrap : public HandleWrap {
int64_t repeat = uv_timer_get_repeat(&wrap->handle_); 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)); return scope.Close(Integer::New(repeat));
} }

8
src/tty_wrap.cc

@ -27,7 +27,9 @@ using v8::Undefined;
TTYWrap* wrap = \ TTYWrap* wrap = \
static_cast<TTYWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ static_cast<TTYWrap*>(args.Holder()->GetPointerFromInternalField(0)); \
if (!wrap) { \ if (!wrap) { \
SetErrno(UV_EBADF); \ uv_err_t err; \
err.code = UV_EBADF; \
SetErrno(err); \
return scope.Close(Integer::New(-1)); \ return scope.Close(Integer::New(-1)); \
} }
@ -100,7 +102,7 @@ class TTYWrap : StreamWrap {
int r = uv_tty_get_winsize(&wrap->handle_, &width, &height); int r = uv_tty_get_winsize(&wrap->handle_, &width, &height);
if (r) { if (r) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
return v8::Undefined(); return v8::Undefined();
} }
@ -119,7 +121,7 @@ class TTYWrap : StreamWrap {
int r = uv_tty_set_mode(&wrap->handle_, args[0]->IsTrue()); int r = uv_tty_set_mode(&wrap->handle_, args[0]->IsTrue());
if (r) { if (r) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
} }
return scope.Close(Integer::New(r)); return scope.Close(Integer::New(r));

16
src/udp_wrap.cc

@ -32,7 +32,9 @@ namespace node {
UDPWrap* wrap = \ UDPWrap* wrap = \
static_cast<UDPWrap*>(args.Holder()->GetPointerFromInternalField(0)); \ static_cast<UDPWrap*>(args.Holder()->GetPointerFromInternalField(0)); \
if (!wrap) { \ if (!wrap) { \
SetErrno(UV_EBADF); \ uv_err_t err; \
err.code = UV_EBADF; \
SetErrno(err); \
return scope.Close(Integer::New(-1)); \ return scope.Close(Integer::New(-1)); \
} }
@ -153,7 +155,7 @@ Handle<Value> UDPWrap::DoBind(const Arguments& args, int family) {
} }
if (r) if (r)
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
return scope.Close(Integer::New(r)); return scope.Close(Integer::New(r));
} }
@ -210,7 +212,7 @@ Handle<Value> UDPWrap::DoSend(const Arguments& args, int family) {
req_wrap->Dispatched(); req_wrap->Dispatched();
if (r) { if (r) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
delete req_wrap; delete req_wrap;
return Null(); 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 // UV_EALREADY means that the socket is already bound but that's okay
int r = uv_udp_recv_start(&wrap->handle_, OnAlloc, OnRecv); int r = uv_udp_recv_start(&wrap->handle_, OnAlloc, OnRecv);
if (r && uv_last_error(uv_default_loop()).code != UV_EALREADY) { 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(); return False();
} }
@ -274,7 +276,7 @@ Handle<Value> UDPWrap::GetSockName(const Arguments& args) {
return scope.Close(sockname); return scope.Close(sockname);
} }
else { else {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
return Null(); return Null();
} }
} }
@ -293,7 +295,7 @@ void UDPWrap::OnSend(uv_udp_send_t* req, int status) {
assert(wrap->object_.IsEmpty() == false); assert(wrap->object_.IsEmpty() == false);
if (status) { if (status) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
} }
Local<Value> argv[4] = { Local<Value> argv[4] = {
@ -341,7 +343,7 @@ void UDPWrap::OnRecv(uv_udp_t* handle,
}; };
if (nread == -1) { if (nread == -1) {
SetErrno(uv_last_error(uv_default_loop()).code); SetErrno(uv_last_error(uv_default_loop()));
} }
else { else {
Local<Object> rinfo = Object::New(); Local<Object> rinfo = Object::New();

Loading…
Cancel
Save