aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2011-10-19 16:53:07 -0700
committerRyan Dahl <ry@tinyclouds.org>2011-10-19 16:53:07 -0700
commit6cc42927d83adf2f89809ff54732e13f9376ff6c (patch)
treedc4674913a23541edaa37557fb4b5afcf16bb299
parent88af0c86357cf627cd7e7cc6f83f7f546754f6c3 (diff)
downloadandroid-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.cc8
-rw-r--r--src/handle_wrap.cc4
-rw-r--r--src/node.cc22
-rw-r--r--src/node.h2
-rw-r--r--src/pipe_wrap.cc12
-rw-r--r--src/process_wrap.cc8
-rw-r--r--src/stream_wrap.cc18
-rw-r--r--src/tcp_wrap.cc22
-rw-r--r--src/timer_wrap.cc12
-rw-r--r--src/tty_wrap.cc8
-rw-r--r--src/udp_wrap.cc16
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();