From 6b98a6397468a802603d1566a45b4b578ae64ed4 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Tue, 20 Sep 2011 13:34:52 -0700 Subject: [PATCH] Upgrade libuv to 2ef8f35 --- deps/uv/.mailmap | 1 + deps/uv/AUTHORS | 3 +++ deps/uv/common.gypi | 2 +- deps/uv/include/uv.h | 5 +++++ deps/uv/src/unix/core.c | 12 +++++++++--- deps/uv/src/unix/stream.c | 5 +++-- deps/uv/src/unix/tty.c | 4 ++++ deps/uv/src/win/process.c | 9 +++++++-- deps/uv/src/win/tty.c | 7 +++++++ deps/uv/test/test-getaddrinfo.c | 8 +++++--- deps/uv/test/test-list.h | 3 +++ deps/uv/test/test-tty.c | 33 +++++++++++++++++++++++++++++++++ deps/uv/uv.gyp | 6 +++++- 13 files changed, 86 insertions(+), 12 deletions(-) create mode 100644 deps/uv/test/test-tty.c diff --git a/deps/uv/.mailmap b/deps/uv/.mailmap index 415e8a178a..520f71be68 100644 --- a/deps/uv/.mailmap +++ b/deps/uv/.mailmap @@ -5,3 +5,4 @@ San-Tai Hsu +Isaac Z. Schlueter diff --git a/deps/uv/AUTHORS b/deps/uv/AUTHORS index b790284738..eefcd7dc1e 100644 --- a/deps/uv/AUTHORS +++ b/deps/uv/AUTHORS @@ -21,3 +21,6 @@ Clifford Heath Jorge Chamorro Bieling Luis Lavena Matthew Sporleder +Erick Tryzelaar +Isaac Z. Schlueter +Pieter Noordhuis diff --git a/deps/uv/common.gypi b/deps/uv/common.gypi index f871a473a9..9a0be4dc39 100644 --- a/deps/uv/common.gypi +++ b/deps/uv/common.gypi @@ -113,7 +113,7 @@ 'cflags_cc': [ '-fno-rtti', '-fno-exceptions' ], 'ldflags': [ '-pthread', ], 'conditions': [ - [ 'target_arch=="ia32"', { + [ 'host_arch != target_arch and target_arch=="ia32"', { 'cflags': [ '-m32' ], 'ldflags': [ '-m32' ], }], diff --git a/deps/uv/include/uv.h b/deps/uv/include/uv.h index bf7e88ad3e..4741616595 100644 --- a/deps/uv/include/uv.h +++ b/deps/uv/include/uv.h @@ -600,6 +600,11 @@ struct uv_tty_s { UV_TTY_PRIVATE_FIELDS }; +/* + * Returns 1 if file is associated with a Console/TTY 0 otherwise. + */ +int uv_is_tty(uv_file file); + int uv_tty_init(uv_loop_t*, uv_tty_t*, uv_file fd); /* diff --git a/deps/uv/src/unix/core.c b/deps/uv/src/unix/core.c index 8d7b0d051d..58d1298702 100644 --- a/deps/uv/src/unix/core.c +++ b/deps/uv/src/unix/core.c @@ -79,6 +79,7 @@ void uv_close(uv_handle_t* handle, uv_close_cb close_cb) { uv_pipe_cleanup((uv_pipe_t*)handle); /* Fall through. */ + case UV_TTY: case UV_TCP: stream = (uv_stream_t*)handle; @@ -231,6 +232,7 @@ void uv__finish_close(uv_handle_t* handle) { case UV_NAMED_PIPE: case UV_TCP: + case UV_TTY: assert(!ev_is_active(&((uv_stream_t*)handle)->read_watcher)); assert(!ev_is_active(&((uv_stream_t*)handle)->write_watcher)); assert(((uv_stream_t*)handle)->fd == -1); @@ -575,6 +577,8 @@ int64_t uv_timer_get_repeat(uv_timer_t* timer) { static int uv_getaddrinfo_done(eio_req* req) { uv_getaddrinfo_t* handle = req->data; + struct addrinfo *res = handle->res; + handle->res = NULL; uv_unref(handle->loop); @@ -587,10 +591,9 @@ static int uv_getaddrinfo_done(eio_req* req) { uv_err_new(handle->loop, handle->retcode); } - handle->cb(handle, handle->retcode, handle->res); + handle->cb(handle, handle->retcode, res); - freeaddrinfo(handle->res); - handle->res = NULL; + freeaddrinfo(res); return 0; } @@ -633,6 +636,9 @@ int uv_getaddrinfo(uv_loop_t* loop, handle->hints = malloc(sizeof(struct addrinfo)); memcpy(&handle->hints, hints, sizeof(struct addrinfo)); } + else { + handle->hints = NULL; + } /* TODO security! check lengths, check return values. */ diff --git a/deps/uv/src/unix/stream.c b/deps/uv/src/unix/stream.c index 12c7173c3d..be34df10c4 100644 --- a/deps/uv/src/unix/stream.c +++ b/deps/uv/src/unix/stream.c @@ -679,8 +679,9 @@ int uv_write(uv_write_t* req, uv_stream_t* stream, uv_buf_t bufs[], int bufcnt, uv_write_cb cb) { int empty_queue; - assert((stream->type == UV_TCP || stream->type == UV_NAMED_PIPE) - && "uv_write (unix) does not yet support other types of streams"); + assert((stream->type == UV_TCP || stream->type == UV_NAMED_PIPE || + stream->type == UV_TTY) && + "uv_write (unix) does not yet support other types of streams"); if (stream->fd < 0) { uv_err_new(stream->loop, EBADF); diff --git a/deps/uv/src/unix/tty.c b/deps/uv/src/unix/tty.c index 3ceeb5f1c0..9de7dd9fcb 100644 --- a/deps/uv/src/unix/tty.c +++ b/deps/uv/src/unix/tty.c @@ -67,3 +67,7 @@ fatal: return -1; } + +int uv_is_tty(uv_file file) { + return isatty(file); +} diff --git a/deps/uv/src/win/process.c b/deps/uv/src/win/process.c index 64a3569066..ed8015e0ef 100644 --- a/deps/uv/src/win/process.c +++ b/deps/uv/src/win/process.c @@ -845,14 +845,19 @@ static int duplicate_std_handle(uv_loop_t* loop, DWORD id, HANDLE* dup) { int uv_spawn(uv_loop_t* loop, uv_process_t* process, uv_process_options_t options) { int err = 0, keep_child_stdio_open = 0; - wchar_t* path; + wchar_t* path = NULL; int size; BOOL result; - wchar_t* application_path, *application, *arguments, *env, *cwd; + wchar_t* application_path = NULL, *application = NULL, *arguments = NULL, *env = NULL, *cwd = NULL; HANDLE* child_stdio = process->child_stdio; STARTUPINFOW startup; PROCESS_INFORMATION info; + if (!options.file) { + uv_set_error(loop, UV_EINVAL, 0); + return -1; + } + uv_process_init(loop, process); process->exit_cb = options.exit_cb; diff --git a/deps/uv/src/win/tty.c b/deps/uv/src/win/tty.c index 5498eec99c..c451a99d12 100644 --- a/deps/uv/src/win/tty.c +++ b/deps/uv/src/win/tty.c @@ -35,3 +35,10 @@ int uv_tty_set_mode(uv_tty_t* tty, int mode) { assert(0 && "implement me"); return -1; } + + +int uv_is_tty(uv_file file) { + DWORD result; + int r = GetConsoleMode((HANDLE)_get_osfhandle(file), &result); + return r ? 1 : 0; +} diff --git a/deps/uv/test/test-getaddrinfo.c b/deps/uv/test/test-getaddrinfo.c index cac471caed..4f0514f572 100644 --- a/deps/uv/test/test-getaddrinfo.c +++ b/deps/uv/test/test-getaddrinfo.c @@ -31,10 +31,10 @@ static const char* name = "localhost"; -static uv_getaddrinfo_t getaddrinfo_handle; static int getaddrinfo_cbs = 0; /* data used for running multiple calls concurrently */ +static uv_getaddrinfo_t* getaddrinfo_handle; static uv_getaddrinfo_t getaddrinfo_handles[CONCURRENT_COUNT]; static int callback_counts[CONCURRENT_COUNT]; @@ -42,8 +42,9 @@ static int callback_counts[CONCURRENT_COUNT]; static void getaddrinfo_basic_cb(uv_getaddrinfo_t* handle, int status, struct addrinfo* res) { - ASSERT(handle == &getaddrinfo_handle); + ASSERT(handle == getaddrinfo_handle); getaddrinfo_cbs++; + free(handle); } @@ -71,9 +72,10 @@ static void getaddrinfo_cuncurrent_cb(uv_getaddrinfo_t* handle, TEST_IMPL(getaddrinfo_basic) { int r; + getaddrinfo_handle = (uv_getaddrinfo_t*)malloc(sizeof(uv_getaddrinfo_t)); r = uv_getaddrinfo(uv_default_loop(), - &getaddrinfo_handle, + getaddrinfo_handle, &getaddrinfo_basic_cb, name, NULL, diff --git a/deps/uv/test/test-list.h b/deps/uv/test/test-list.h index bf84c6a947..429773f275 100644 --- a/deps/uv/test/test-list.h +++ b/deps/uv/test/test-list.h @@ -19,6 +19,7 @@ * IN THE SOFTWARE. */ +TEST_DECLARE (tty) TEST_DECLARE (tcp_ping_pong) TEST_DECLARE (tcp_ping_pong_v6) TEST_DECLARE (pipe_ping_pong) @@ -98,6 +99,8 @@ HELPER_DECLARE (pipe_echo_server) TASK_LIST_START + TEST_ENTRY (tty) + TEST_ENTRY (tcp_ping_pong) TEST_HELPER (tcp_ping_pong, tcp4_echo_server) diff --git a/deps/uv/test/test-tty.c b/deps/uv/test/test-tty.c new file mode 100644 index 0000000000..4f9fd54685 --- /dev/null +++ b/deps/uv/test/test-tty.c @@ -0,0 +1,33 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * 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 "uv.h" +#include "task.h" + +TEST_IMPL(tty) { + uv_loop_t* loop = uv_default_loop(); + + ASSERT(uv_is_tty(0) == 1); + + uv_run(loop); + + return 0; +} diff --git a/deps/uv/uv.gyp b/deps/uv/uv.gyp index 777aed3a00..84c8c86e6d 100644 --- a/deps/uv/uv.gyp +++ b/deps/uv/uv.gyp @@ -194,7 +194,10 @@ 'include_dirs': [ 'src/ares/config_darwin' ], 'sources': [ 'src/unix/darwin.c' ], 'direct_dependent_settings': { - 'libraries': [ '-framework CoreServices' ], + 'libraries': [ + '$(SDKROOT)/System/Library/Frameworks/Carbon.framework', + '$(SDKROOT)/System/Library/Frameworks/CoreServices.framework', + ], }, 'defines': [ 'EV_CONFIG_H="config_darwin.h"', @@ -261,6 +264,7 @@ 'test/test-tcp-bind-error.c', 'test/test-tcp-bind6-error.c', 'test/test-tcp-close.c', + 'test/test-tcp-write-error.c', 'test/test-tcp-writealot.c', 'test/test-threadpool.c', 'test/test-timer-again.c',