From d4c14c1fe5402b8c3b1d582070ccbf3ae40f5b1f Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Tue, 16 Jul 2013 23:08:25 +0200 Subject: [PATCH] src: add libuv bindings module Exports: * all UV_E* error codes * a uv_err_name() binding --- node.gyp | 1 + src/node_extensions.h | 4 +--- src/uv.cc | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 src/uv.cc diff --git a/node.gyp b/node.gyp index 3809993..b4d5f28 100644 --- a/node.gyp +++ b/node.gyp @@ -114,6 +114,7 @@ 'src/tty_wrap.cc', 'src/process_wrap.cc', 'src/udp_wrap.cc', + 'src/uv.cc', # headers to make for a more pleasant IDE experience 'src/handle_wrap.h', 'src/node.h', diff --git a/src/node_extensions.h b/src/node_extensions.h index 84c5fa9..fd0d0d1 100644 --- a/src/node_extensions.h +++ b/src/node_extensions.h @@ -19,7 +19,6 @@ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. - NODE_EXT_LIST_START NODE_EXT_LIST_ITEM(node_buffer) #if HAVE_OPENSSL @@ -33,7 +32,7 @@ NODE_EXT_LIST_ITEM(node_os) NODE_EXT_LIST_ITEM(node_smalloc) NODE_EXT_LIST_ITEM(node_zlib) -// libuv rewrite +NODE_EXT_LIST_ITEM(node_uv) NODE_EXT_LIST_ITEM(node_timer_wrap) NODE_EXT_LIST_ITEM(node_tcp_wrap) NODE_EXT_LIST_ITEM(node_udp_wrap) @@ -45,4 +44,3 @@ NODE_EXT_LIST_ITEM(node_fs_event_wrap) NODE_EXT_LIST_ITEM(node_signal_wrap) NODE_EXT_LIST_END - diff --git a/src/uv.cc b/src/uv.cc new file mode 100644 index 0000000..bac0b55 --- /dev/null +++ b/src/uv.cc @@ -0,0 +1,61 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +#include "node.h" +#include "uv.h" + +namespace node { +namespace uv { + +using v8::FunctionCallbackInfo; +using v8::FunctionTemplate; +using v8::Handle; +using v8::HandleScope; +using v8::Integer; +using v8::Object; +using v8::String; +using v8::Value; + + +void ErrName(const FunctionCallbackInfo& args) { + v8::HandleScope handle_scope(node_isolate); + int err = args[0]->Int32Value(); + if (err >= 0) return ThrowError("err >= 0"); + const char* name = uv_err_name(err); + args.GetReturnValue().Set(String::New(name)); +} + + +void Initialize(Handle target) { + v8::HandleScope handle_scope(node_isolate); + target->Set(String::New("errname"), + FunctionTemplate::New(ErrName)->GetFunction()); +#define V(name, _) target->Set(String::New("UV_" # name), \ + Integer::New(UV_ ## name, node_isolate)); + UV_ERRNO_MAP(V) +#undef V +} + + +} // namespace uv +} // namespace node + +NODE_MODULE(node_uv, node::uv::Initialize) -- 2.7.4