From 0e48cb4998a89a2adae95d97f3bce5f89c77d762 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Tue, 16 Jul 2013 21:04:31 +0200 Subject: [PATCH] deps: upgrade libuv to 3ee4d3f --- deps/uv/.gitignore | 24 +- deps/uv/AUTHORS | 1 + deps/uv/ChangeLog | 45 ++- deps/uv/Makefile | 53 --- deps/uv/Makefile.am | 223 +++++++++++++ deps/uv/README.md | 78 ++--- deps/uv/autogen.sh | 25 ++ deps/uv/build.mk | 169 ---------- deps/uv/checksparse.sh | 21 +- deps/uv/common.gypi | 1 + deps/uv/config-mingw.mk | 48 --- deps/uv/config-unix.mk | 207 ------------ deps/uv/configure.ac | 47 +++ deps/uv/include/{uv-private => }/pthread-fixes.h | 0 deps/uv/include/{uv-private => }/stdint-msvc2008.h | 0 deps/uv/include/{uv-private => }/tree.h | 0 deps/uv/include/{uv-private => }/uv-bsd.h | 0 deps/uv/include/{uv-private => }/uv-darwin.h | 2 + deps/uv/include/uv-errno.h | 365 +++++++++++++++++++++ deps/uv/include/{uv-private => }/uv-linux.h | 2 + deps/uv/include/{uv-private => }/uv-sunos.h | 0 deps/uv/include/{uv-private => }/uv-unix.h | 0 deps/uv/include/{uv-private => }/uv-win.h | 6 +- deps/uv/include/uv.h | 275 ++++++++-------- deps/uv/src/fs-poll.c | 18 +- deps/uv/src/inet.c | 80 +++-- deps/uv/src/unix/aix.c | 60 ++-- deps/uv/src/unix/async.c | 24 +- deps/uv/src/unix/core.c | 105 +++--- deps/uv/src/unix/darwin-proctitle.c | 14 +- deps/uv/src/unix/darwin.c | 81 ++--- deps/uv/src/unix/error.c | 88 ----- deps/uv/src/unix/freebsd.c | 95 +++--- deps/uv/src/unix/fs.c | 61 ++-- deps/uv/src/unix/fsevents.c | 4 +- deps/uv/src/unix/getaddrinfo.c | 51 +-- deps/uv/src/unix/internal.h | 3 - deps/uv/src/unix/kqueue.c | 10 +- deps/uv/src/unix/linux-core.c | 76 +++-- deps/uv/src/unix/linux-inotify.c | 39 ++- deps/uv/src/unix/loop-watcher.c | 3 +- deps/uv/src/unix/loop.c | 6 +- deps/uv/src/unix/netbsd.c | 90 +++-- deps/uv/src/unix/openbsd.c | 91 +++-- deps/uv/src/unix/pipe.c | 114 +++---- deps/uv/src/unix/poll.c | 3 +- deps/uv/src/unix/process.c | 95 +++--- deps/uv/src/unix/proctitle.c | 10 +- deps/uv/src/unix/signal.c | 34 +- deps/uv/src/unix/stream.c | 176 +++++----- deps/uv/src/unix/sunos.c | 125 ++++--- deps/uv/src/unix/tcp.c | 98 +++--- deps/uv/src/unix/thread.c | 144 ++++---- deps/uv/src/unix/threadpool.c | 15 +- deps/uv/src/unix/timer.c | 2 +- deps/uv/src/unix/tty.c | 16 +- deps/uv/src/unix/udp.c | 113 +++---- deps/uv/src/uv-common.c | 193 ++++++----- deps/uv/src/uv-common.h | 12 +- deps/uv/src/version.c | 2 +- deps/uv/src/win/core.c | 2 - deps/uv/src/win/error.c | 9 +- deps/uv/src/win/fs-event.c | 12 +- deps/uv/src/win/fs.c | 158 ++++----- deps/uv/src/win/getaddrinfo.c | 53 +-- deps/uv/src/win/internal.h | 13 +- deps/uv/src/win/loop-watcher.c | 2 +- deps/uv/src/win/pipe.c | 155 ++++----- deps/uv/src/win/poll.c | 50 +-- deps/uv/src/win/process-stdio.c | 50 ++- deps/uv/src/win/process.c | 136 ++++---- deps/uv/src/win/signal.c | 26 +- deps/uv/src/win/stream.c | 106 +++--- deps/uv/src/win/tcp.c | 305 ++++++++--------- deps/uv/src/win/thread.c | 74 +++-- deps/uv/src/win/threadpool.c | 7 +- deps/uv/src/win/timer.c | 3 +- deps/uv/src/win/tty.c | 75 ++--- deps/uv/src/win/udp.c | 187 +++++------ deps/uv/src/win/util.c | 125 +++---- deps/uv/test/benchmark-multi-accept.c | 3 +- deps/uv/test/benchmark-ping-pongs.c | 2 +- deps/uv/test/benchmark-pound.c | 18 +- deps/uv/test/benchmark-pump.c | 2 +- deps/uv/test/benchmark-spawn.c | 4 +- deps/uv/test/benchmark-udp-pummel.c | 7 +- deps/uv/test/blackhole-server.c | 2 +- deps/uv/test/dns-server.c | 5 +- deps/uv/test/echo-server.c | 31 +- deps/uv/test/task.h | 2 +- deps/uv/test/test-callback-stack.c | 5 +- deps/uv/test/test-condvar.c | 2 +- deps/uv/test/test-connection-fail.c | 6 +- deps/uv/test/test-cwd-and-chdir.c | 8 +- deps/uv/test/test-delayed-accept.c | 6 +- deps/uv/test/test-error.c | 17 +- deps/uv/test/test-fs-event.c | 28 +- deps/uv/test/test-fs-poll.c | 6 +- deps/uv/test/test-fs.c | 341 +++++++++---------- deps/uv/test/test-get-currentexe.c | 4 +- deps/uv/test/test-getaddrinfo.c | 2 +- deps/uv/test/test-getsockname.c | 6 +- deps/uv/test/test-ip6-addr.c | 103 ++++++ deps/uv/test/test-ipc.c | 17 +- deps/uv/test/test-list.h | 4 + deps/uv/test/test-ping-pong.c | 2 +- deps/uv/test/test-pipe-bind-error.c | 22 +- deps/uv/test/test-pipe-connect-error.c | 7 +- deps/uv/test/test-platform-output.c | 12 +- deps/uv/test/test-process-title.c | 8 +- deps/uv/test/test-semaphore.c | 4 +- deps/uv/test/test-shutdown-close.c | 3 +- deps/uv/test/test-shutdown-eof.c | 5 +- deps/uv/test/test-spawn.c | 88 ++--- deps/uv/test/test-stdio-over-pipes.c | 5 +- deps/uv/test/test-tcp-bind-error.c | 21 +- deps/uv/test/test-tcp-bind6-error.c | 15 +- deps/uv/test/test-tcp-close-while-connecting.c | 3 +- deps/uv/test/test-tcp-connect-error-after-write.c | 7 +- deps/uv/test/test-tcp-connect-error.c | 4 +- deps/uv/test/test-tcp-connect-timeout.c | 2 +- deps/uv/test/test-tcp-connect6-error.c | 4 +- deps/uv/test/test-tcp-open.c | 5 +- .../test/test-tcp-write-to-half-open-connection.c | 7 +- deps/uv/test/test-tcp-writealot.c | 5 +- deps/uv/test/test-threadpool-cancel.c | 8 +- deps/uv/test/test-threadpool.c | 3 +- deps/uv/test/test-timer-again.c | 3 +- deps/uv/test/test-tty.c | 4 +- deps/uv/test/test-udp-dgram-too-big.c | 3 +- deps/uv/test/test-udp-options.c | 6 +- deps/uv/uv.gyp | 19 +- 132 files changed, 3206 insertions(+), 2991 deletions(-) delete mode 100644 deps/uv/Makefile create mode 100644 deps/uv/Makefile.am create mode 100755 deps/uv/autogen.sh delete mode 100644 deps/uv/build.mk delete mode 100644 deps/uv/config-mingw.mk delete mode 100644 deps/uv/config-unix.mk create mode 100644 deps/uv/configure.ac rename deps/uv/include/{uv-private => }/pthread-fixes.h (100%) rename deps/uv/include/{uv-private => }/stdint-msvc2008.h (100%) rename deps/uv/include/{uv-private => }/tree.h (100%) rename deps/uv/include/{uv-private => }/uv-bsd.h (100%) rename deps/uv/include/{uv-private => }/uv-darwin.h (98%) create mode 100644 deps/uv/include/uv-errno.h rename deps/uv/include/{uv-private => }/uv-linux.h (97%) rename deps/uv/include/{uv-private => }/uv-sunos.h (100%) rename deps/uv/include/{uv-private => }/uv-unix.h (100%) rename deps/uv/include/{uv-private => }/uv-win.h (99%) delete mode 100644 deps/uv/src/unix/error.c create mode 100644 deps/uv/test/test-ip6-addr.c diff --git a/deps/uv/.gitignore b/deps/uv/.gitignore index 3f4c519..9235361 100644 --- a/deps/uv/.gitignore +++ b/deps/uv/.gitignore @@ -9,11 +9,31 @@ core vgcore.* .buildstamp -/libuv.so +/.deps/ +/.libs/ +/aclocal.m4 +/ar-lib +/autom4te.cache/ +/config.guess +/config.log +/config.status +/config.sub +/configure +/depcomp +/install-sh +/libtool +/libuv.a /libuv.dylib +/libuv.pc +/libuv.so +/ltmain.sh +/missing +/test-driver +Makefile +Makefile.in # Generated by dtrace(1) when doing an in-tree build. -/src/unix/uv-dtrace.h +/include/uv-dtrace.h /out/ /build/gyp diff --git a/deps/uv/AUTHORS b/deps/uv/AUTHORS index 2d0f01d..eb20985 100644 --- a/deps/uv/AUTHORS +++ b/deps/uv/AUTHORS @@ -90,3 +90,4 @@ Sean Silva Wynn Wilkes Linus Mårtensson Andrei Sedoi +Navaneeth Kedaram Nambiathan diff --git a/deps/uv/ChangeLog b/deps/uv/ChangeLog index 53f2ed4..02e64cc 100644 --- a/deps/uv/ChangeLog +++ b/deps/uv/ChangeLog @@ -1,4 +1,47 @@ -2013.06.27, Version 0.11.5 (Unstable) +2013.07.21, Version 0.11.6 (Unstable) + +Changes since version 0.11.5: + +* test: open stdout fd in write-only mode (Ben Noordhuis) + +* windows: uv_spawn shouldn't reject reparse points (Bert Belder) + +* windows: use WSAGetLastError(), not errno (Ben Noordhuis) + +* build: darwin: disable -fstrict-aliasing warnings (Ben Noordhuis) + +* test: fix signed/unsigned compiler warning (Ben Noordhuis) + +* test: add 'start timer from check handle' test (Ben Noordhuis) + +* build: `all` now builds static and dynamic lib (Ben Noordhuis) + +* unix, windows: add extra fields to uv_stat_t (Saúl Ibarra Corretgé) + +* build: add install target to the makefile (Navaneeth Kedaram Nambiathan) + +* build: switch to autotools (Ben Noordhuis) + +* build: use AM_PROG_AR conditionally (Ben Noordhuis) + +* test: fix fs_fstat test on sunos (Ben Noordhuis) + +* test: fix fs_chown when running as root (Ben Noordhuis) + +* test: fix spawn_setgid_fails and spawn_setuid_fails (Ben Noordhuis) + +* build: use AM_SILENT_RULES conditionally (Ben Noordhuis) + +* build: add DTrace detection for autotools (Timothy J. Fontaine) + +* linux,darwin,win: link-local IPv6 addresses (Miroslav Bajtoš) + +* unix: fix build when !defined(PTHREAD_MUTEX_ERRORCHECK) (Ben Noordhuis) + +* unix, windows: return error codes directly (Ben Noordhuis) + + +2013.06.27, Version 0.11.5 (Unstable), e3c63ff1627a14e96f54c1c62b0d68b446d8425b Changes since version 0.11.4: diff --git a/deps/uv/Makefile b/deps/uv/Makefile deleted file mode 100644 index 1584e67..0000000 --- a/deps/uv/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -# 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. - -SRCDIR ?= $(CURDIR) - -ifeq (,$(builddir_name)) - -VPATH := $(SRCDIR) -include $(SRCDIR)/build.mk - -else # Out of tree build. - -# Drop all built-in rules. -.SUFFIXES: - -.PHONY: $(builddir_name) -$(builddir_name): $(builddir_name)/.buildstamp - $(MAKE) -C $@ -f $(CURDIR)/Makefile $(MAKECMDGOALS) \ - SRCDIR=$(CURDIR) builddir_name= - -$(builddir_name)/.buildstamp: - mkdir -p $(dir $@) - touch $@ - -# Add no-op rules for Makefiles to stop make from trying to rebuild them. -Makefile:: ; -%.mk:: ; - -# Turn everything else into a no-op rule that depends on the build directory. -%:: $(builddir_name) ; - -.PHONY: clean distclean -clean distclean: - $(RM) -fr $(builddir_name) - -endif diff --git a/deps/uv/Makefile.am b/deps/uv/Makefile.am new file mode 100644 index 0000000..d1884fe --- /dev/null +++ b/deps/uv/Makefile.am @@ -0,0 +1,223 @@ +# Copyright (c) 2013, Ben Noordhuis +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +ACLOCAL_AMFLAGS = -I m4 + +AM_CPPFLAGS = -I$(top_srcdir)/include \ + -I$(top_srcdir)/src/unix \ + -I$(top_srcdir)/src + +include_HEADERS=include/uv.h include/uv-errno.h include/uv-unix.h + +CLEANFILES = + +lib_LTLIBRARIES = libuv.la +libuv_la_CFLAGS = @CFLAGS@ +libuv_la_LDFLAGS = -no-undefined -version-info 11:0:0 +libuv_la_SOURCES = src/fs-poll.c \ + src/inet.c \ + src/uv-common.c \ + src/uv-common.h \ + src/version.c \ + src/unix/async.c \ + src/unix/core.c \ + src/unix/dl.c \ + src/unix/fs.c \ + src/unix/getaddrinfo.c \ + src/unix/internal.h \ + src/unix/loop-watcher.c \ + src/unix/loop.c \ + src/unix/pipe.c \ + src/unix/poll.c \ + src/unix/process.c \ + src/unix/signal.c \ + src/unix/stream.c \ + src/unix/tcp.c \ + src/unix/thread.c \ + src/unix/threadpool.c \ + src/unix/timer.c \ + src/unix/tty.c \ + src/unix/udp.c + +TESTS = test/run-tests +check_PROGRAMS = test/run-tests +test_run_tests_SOURCES = test/blackhole-server.c \ + test/dns-server.c \ + test/echo-server.c \ + test/run-tests.c \ + test/runner-unix.c \ + test/runner-unix.h \ + test/runner.c \ + test/runner.h \ + test/task.h \ + test/test-active.c \ + test/test-async.c \ + test/test-barrier.c \ + test/test-callback-order.c \ + test/test-callback-stack.c \ + test/test-condvar.c \ + test/test-connection-fail.c \ + test/test-cwd-and-chdir.c \ + test/test-delayed-accept.c \ + test/test-dlerror.c \ + test/test-embed.c \ + test/test-error.c \ + test/test-fail-always.c \ + test/test-fs-event.c \ + test/test-fs-poll.c \ + test/test-fs.c \ + test/test-get-currentexe.c \ + test/test-get-loadavg.c \ + test/test-get-memory.c \ + test/test-getaddrinfo.c \ + test/test-getsockname.c \ + test/test-hrtime.c \ + test/test-idle.c \ + test/test-ip6-addr.c \ + test/test-ipc-send-recv.c \ + test/test-ipc.c \ + test/test-list.h \ + test/test-loop-handles.c \ + test/test-loop-stop.c \ + test/test-multiple-listen.c \ + test/test-mutexes.c \ + test/test-osx-select.c \ + test/test-pass-always.c \ + test/test-ping-pong.c \ + test/test-pipe-bind-error.c \ + test/test-pipe-connect-error.c \ + test/test-platform-output.c \ + test/test-poll-close.c \ + test/test-poll.c \ + test/test-process-title.c \ + test/test-ref.c \ + test/test-run-nowait.c \ + test/test-run-once.c \ + test/test-semaphore.c \ + test/test-shutdown-close.c \ + test/test-shutdown-eof.c \ + test/test-signal-multiple-loops.c \ + test/test-signal.c \ + test/test-spawn.c \ + test/test-stdio-over-pipes.c \ + test/test-tcp-bind-error.c \ + test/test-tcp-bind6-error.c \ + test/test-tcp-close-while-connecting.c \ + test/test-tcp-close.c \ + test/test-tcp-connect-error-after-write.c \ + test/test-tcp-connect-error.c \ + test/test-tcp-connect-timeout.c \ + test/test-tcp-connect6-error.c \ + test/test-tcp-flags.c \ + test/test-tcp-open.c \ + test/test-tcp-read-stop.c \ + test/test-tcp-shutdown-after-write.c \ + test/test-tcp-unexpected-read.c \ + test/test-tcp-write-to-half-open-connection.c \ + test/test-tcp-writealot.c \ + test/test-thread.c \ + test/test-threadpool-cancel.c \ + test/test-threadpool.c \ + test/test-timer-again.c \ + test/test-timer-from-check.c \ + test/test-timer.c \ + test/test-tty.c \ + test/test-udp-dgram-too-big.c \ + test/test-udp-ipv6.c \ + test/test-udp-multicast-join.c \ + test/test-udp-multicast-ttl.c \ + test/test-udp-open.c \ + test/test-udp-options.c \ + test/test-udp-send-and-recv.c \ + test/test-util.c \ + test/test-walk-handles.c +test_run_tests_LDADD = libuv.la + +if AIX +libuv_la_CFLAGS += -D_ALL_SOURCE -D_XOPEN_SOURCE=500 +libuv_la_SOURCES += src/unix/aix.c +endif + +if DARWIN +include_HEADERS += include/uv-darwin.h +libuv_la_CFLAGS += -D_DARWIN_USE_64_BIT_INODE=1 +libuv_la_SOURCES += src/unix/darwin.c \ + src/unix/darwin-proctitle.c \ + src/unix/fsevents.c \ + src/unix/kqueue.c \ + src/unix/proctitle.c +libuv_la_LDFLAGS += -framework ApplicationServices \ + -framework CoreServices \ + -framework Foundation +endif + +if FREEBSD +include_HEADERS += include/uv-bsd.h +libuv_la_SOURCES += src/unix/freebsd.c src/unix/kqueue.c +endif + +if LINUX +include_HEADERS += include/uv-linux.h +libuv_la_SOURCES += src/unix/linux-core.c \ + src/unix/linux-inotify.c \ + src/unix/linux-syscalls.c \ + src/unix/linux-syscalls.h \ + src/unix/proctitle.c +endif + +if NETBSD +include_HEADERS += include/uv-bsd.h +libuv_la_SOURCES += src/unix/kqueue.c src/unix/netbsd.c +endif + +if OPENBSD +include_HEADERS += include/uv-bsd.h +libuv_la_SOURCES += src/unix/kqueue.c src/unix/openbsd.c +endif + +if SUNOS +include_HEADERS += include/uv-sunos.h +libuv_la_CFLAGS += -D__EXTENSIONS__ -D_XOPEN_SOURCE=500 +libuv_la_SOURCES += src/unix/sunos.c +endif + +if HAVE_DTRACE +BUILT_SOURCES = include/uv-dtrace.h +CLEANFILES += include/uv-dtrace.h +endif + +if DTRACE_NEEDS_OBJECTS +libuv_la_SOURCES += src/unix/uv-dtrace.d +libuv_la_DEPENDENCIES = src/unix/uv-dtrace.o +libuv_la_LIBADD = src/unix/uv-dtrace.lo +CLEANFILES += src/unix/uv-dtrace.o src/unix/uv-dtrace.lo +endif + +SUFFIXES = .d + +include/uv-dtrace.h: src/unix/uv-dtrace.d + $(AM_V_GEN)$(DTRACE) $(DTRACEFLAGS) -h -xnolibs -s $< -o $@ + +src/unix/uv-dtrace.o: src/unix/uv-dtrace.d ${libuv_la_OBJECTS} + +.d.o: + $(AM_V_GEN)$(DTRACE) $(DTRACEFLAGS) -G -o $@ -s $< \ + `grep '^pic_object' ${top_builddir}/*.lo | cut -f 2 -d\'` + $(AM_V_GEN)printf %s\\n \ + '# $(patsubst %.o, %.lo, $@) - a libtool object file' \ + '# Generated by libtool (GNU libtool) 2.4' \ + '# libtool wants a .lo not a .o' \ + "pic_object='uv-dtrace.o'" \ + "non_pic_object='uv-dtrace.o'" \ + > $(patsubst %.o, %.lo, $@) diff --git a/deps/uv/README.md b/deps/uv/README.md index f4f3ce2..48a8626 100644 --- a/deps/uv/README.md +++ b/deps/uv/README.md @@ -1,11 +1,9 @@ # libuv -libuv is a new platform layer for Node. Its purpose is to abstract IOCP on -Windows and epoll/kqueue/event ports/etc. on Unix systems. We intend to +libuv is a platform layer for [node.js][]. Its purpose is to abstract IOCP +on Windows and epoll/kqueue/event ports/etc. on Unix systems. We intend to eventually contain all platform differences in this library. -http://nodejs.org/ - ## Features * Non-blocking TCP sockets @@ -30,9 +28,8 @@ http://nodejs.org/ * ANSI escape code controlled TTY `uv_tty_t` - * File system events Currently supports inotify, `ReadDirectoryChangesW` - and kqueue. Event ports in the near future. - `uv_fs_event_t` + * File system events using inotify, kqueue, event ports, + FSEvents and `ReadDirectoryChangesW` * IPC and socket sharing between processes `uv_write2` @@ -53,55 +50,46 @@ http://nodejs.org/ ## Build Instructions -For GCC (including MinGW) there are two methods building: via normal -makefiles or via GYP. GYP is a meta-build system which can generate MSVS, -Makefile, and XCode backends. It is best used for integration into other -projects. The old system is using plain GNU Makefiles. - -To build via Makefile simply execute: - - make - -MinGW users should run this instead: - - make PLATFORM=mingw - -Out-of-tree builds are supported: +For GCC there are two methods building: via autotools or via [GYP][]. +GYP is a meta-build system which can generate MSVS, Makefile, and XCode +backends. It is best used for integration into other projects. - make builddir_name=/path/to/builddir +To build with autotools: -To build a shared object: - - make libuv.so # libuv.dylib on OS X + $ sh autogen.sh + $ ./configure + $ make + $ make check + $ make install To build with Visual Studio run the vcbuild.bat file which will checkout the GYP code into build/gyp and generate the uv.sln and related files. -Windows users can also build from cmd-line using msbuild. This is -done by running vcbuild.bat from Visual Studio command prompt. +Windows users can also build from the command line using msbuild. +This is done by running vcbuild.bat from Visual Studio command prompt. To have GYP generate build script for another system, make sure that you have Python 2.6 or 2.7 installed, then checkout GYP into the project tree manually: - mkdir -p build - svn co http://gyp.googlecode.com/svn/trunk build/gyp + $ mkdir -p build + $ git clone https://git.chromium.org/external/gyp.git build/gyp -Or: +Unix users run: - mkdir -p build - git clone https://git.chromium.org/external/gyp.git build/gyp + $ ./gyp_uv -f make + $ make -C out -Unix users run +Macintosh users run: - ./gyp_uv -f make - make -C out + $ ./gyp_uv -f xcode + $ xcodebuild -project uv.xcodeproj -configuration Release -target All -Macintosh users run +To build for android: - ./gyp_uv -f xcode - xcodebuild -project uv.xcodeproj -configuration Release -target All + $ source ./android-configure NDK_PATH gyp + $ make -C out Note for UNIX users: compile your project with `-D_LARGEFILE_SOURCE` and `-D_FILE_OFFSET_BITS=64`. GYP builds take care of that automatically. @@ -110,16 +98,6 @@ Note for Linux users: compile your project with `-D_GNU_SOURCE` when you include `uv.h`. GYP builds take care of that automatically. If you use autotools, add a `AC_GNU_SOURCE` declaration to your `configure.ac`. -To build for android, locate your android NDK path, then run: - - source ./android-configure NDK_PATH - make - -To build for android with gyp, add "gyp" to the configuration: - - source ./android-configure NDK_PATH gyp - make -C out - ## Supported Platforms Microsoft Windows operating systems since Windows XP SP2. It can be built @@ -127,10 +105,12 @@ with either Visual Studio or MinGW. Consider using [Visual Studio Express 2010][] or later if you do not have a full Visual Studio license. -Linux 2.6 using the GCC toolchain. +Linux using the GCC toolchain. MacOS using the GCC or XCode toolchain. Solaris 121 and later using GCC toolchain. +[node.js]: http://nodejs.org/ +[GYP]: http://code.google.com/p/gyp/ [Visual Studio Express 2010]: http://www.microsoft.com/visualstudio/eng/products/visual-studio-2010-express diff --git a/deps/uv/autogen.sh b/deps/uv/autogen.sh new file mode 100755 index 0000000..ed07953 --- /dev/null +++ b/deps/uv/autogen.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +# Copyright (c) 2013, Ben Noordhuis +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +if [ "$LIBTOOLIZE" == "" ] && [ "`uname`" == "Darwin" ]; then + LIBTOOLIZE=glibtoolize +fi + +set -ex +${LIBTOOLIZE:-libtoolize} +${ACLOCAL:-aclocal -I m4} +${AUTOCONF:-autoconf} +${AUTOMAKE:-automake} --add-missing diff --git a/deps/uv/build.mk b/deps/uv/build.mk deleted file mode 100644 index abdd139..0000000 --- a/deps/uv/build.mk +++ /dev/null @@ -1,169 +0,0 @@ -# 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. - -ifdef PLATFORM -override PLATFORM := $(shell echo $(PLATFORM) | tr "[A-Z]" "[a-z]") -else -PLATFORM = $(shell sh -c 'uname -s | tr "[A-Z]" "[a-z]"') -endif - -CPPFLAGS += -I$(SRCDIR)/include -I$(SRCDIR)/include/uv-private - -ifeq (darwin,$(PLATFORM)) -SOEXT = dylib -else -SOEXT = so -endif - -ifneq (,$(findstring mingw,$(PLATFORM))) -include $(SRCDIR)/config-mingw.mk -else -include $(SRCDIR)/config-unix.mk -endif - -BENCHMARKS= \ - test/benchmark-async-pummel.o \ - test/benchmark-async.o \ - test/benchmark-fs-stat.o \ - test/benchmark-getaddrinfo.o \ - test/benchmark-loop-count.o \ - test/benchmark-million-async.o \ - test/benchmark-million-timers.o \ - test/benchmark-multi-accept.o \ - test/benchmark-ping-pongs.o \ - test/benchmark-pound.o \ - test/benchmark-pump.o \ - test/benchmark-sizes.o \ - test/benchmark-spawn.o \ - test/benchmark-tcp-write-batch.o \ - test/benchmark-thread.o \ - test/benchmark-udp-pummel.o \ - test/blackhole-server.o \ - test/dns-server.o \ - test/echo-server.o \ - -TESTS= \ - test/blackhole-server.o \ - test/dns-server.o \ - test/echo-server.o \ - test/test-active.o \ - test/test-async.o \ - test/test-barrier.o \ - test/test-callback-order.o \ - test/test-callback-stack.o \ - test/test-condvar.o \ - test/test-connection-fail.o \ - test/test-cwd-and-chdir.o \ - test/test-delayed-accept.o \ - test/test-dlerror.o \ - test/test-embed.o \ - test/test-error.o \ - test/test-fail-always.o \ - test/test-fs.o \ - test/test-fs-event.o \ - test/test-fs-poll.o \ - test/test-getaddrinfo.o \ - test/test-get-currentexe.o \ - test/test-get-loadavg.o \ - test/test-get-memory.o \ - test/test-getsockname.o \ - test/test-hrtime.o \ - test/test-idle.o \ - test/test-ipc.o \ - test/test-ipc-send-recv.o \ - test/test-loop-handles.o \ - test/test-loop-stop.o \ - test/test-multiple-listen.o \ - test/test-mutexes.o \ - test/test-osx-select.o \ - test/test-pass-always.o \ - test/test-ping-pong.o \ - test/test-pipe-bind-error.o \ - test/test-pipe-connect-error.o \ - test/test-platform-output.o \ - test/test-poll.o \ - test/test-poll-close.o \ - test/test-process-title.o \ - test/test-ref.o \ - test/test-run-nowait.o \ - test/test-run-once.o \ - test/test-semaphore.o \ - test/test-shutdown-close.o \ - test/test-shutdown-eof.o \ - test/test-signal.o \ - test/test-signal-multiple-loops.o \ - test/test-spawn.o \ - test/test-stdio-over-pipes.o \ - test/test-tcp-bind6-error.o \ - test/test-tcp-bind-error.o \ - test/test-tcp-close.o \ - test/test-tcp-close-while-connecting.o \ - test/test-tcp-connect6-error.o \ - test/test-tcp-connect-error-after-write.o \ - test/test-tcp-connect-error.o \ - test/test-tcp-connect-timeout.o \ - test/test-tcp-flags.o \ - test/test-tcp-open.o \ - test/test-tcp-read-stop.o \ - test/test-tcp-shutdown-after-write.o \ - test/test-tcp-unexpected-read.o \ - test/test-tcp-writealot.o \ - test/test-tcp-write-to-half-open-connection.o \ - test/test-thread.o \ - test/test-threadpool.o \ - test/test-threadpool-cancel.o \ - test/test-timer-again.o \ - test/test-timer.o \ - test/test-tty.o \ - test/test-udp-dgram-too-big.o \ - test/test-udp-ipv6.o \ - test/test-udp-multicast-join.o \ - test/test-udp-multicast-ttl.o \ - test/test-udp-open.o \ - test/test-udp-options.o \ - test/test-udp-send-and-recv.o \ - test/test-util.o \ - test/test-walk-handles.o \ - -all: libuv.a - -run-tests$(E): test/run-tests.o test/runner.o $(RUNNER_SRC) $(TESTS) libuv.a - $(CC) $(CPPFLAGS) $(RUNNER_CFLAGS) -o $@ $^ $(RUNNER_LIBS) $(RUNNER_LDFLAGS) - -run-benchmarks$(E): test/run-benchmarks.o test/runner.o $(RUNNER_SRC) $(BENCHMARKS) libuv.a - $(CC) $(CPPFLAGS) $(RUNNER_CFLAGS) -o $@ $^ $(RUNNER_LIBS) $(RUNNER_LDFLAGS) - -test/echo.o: test/echo.c test/echo.h - - -.PHONY: clean clean-platform distclean test bench - - -test: run-tests$(E) - $(CURDIR)/$< - -bench: run-benchmarks$(E) - $(CURDIR)/$< - -clean distclean: clean-platform - $(RM) libuv.a libuv.$(SOEXT) \ - test/run-tests.o test/run-benchmarks.o \ - test/runner.o run-tests$(E) test/run-benchmarks$(E) \ - $(BENCHMARKS) $(TESTS) $(RUNNER_LIBS) diff --git a/deps/uv/checksparse.sh b/deps/uv/checksparse.sh index 65ff72b..c2e3e88 100755 --- a/deps/uv/checksparse.sh +++ b/deps/uv/checksparse.sh @@ -22,13 +22,12 @@ SPARSE_FLAGS=${SPARSE_FLAGS:-" -Wno-do-while -Wno-transparent-union -Iinclude --Iinclude/uv-private -Isrc "} SOURCES=" -include/uv-private/tree.h -include/uv-private/uv-unix.h +include/tree.h +include/uv-unix.h include/uv.h src/fs-poll.c src/inet.c @@ -36,7 +35,6 @@ src/queue.h src/unix/async.c src/unix/core.c src/unix/dl.c -src/unix/error.c src/unix/fs.c src/unix/getaddrinfo.c src/unix/internal.h @@ -107,6 +105,7 @@ test/test-getaddrinfo.c test/test-getsockname.c test/test-hrtime.c test/test-idle.c +test/test-ip6-addr.c test/test-ipc-send-recv.c test/test-ipc.c test/test-loop-handles.c @@ -172,7 +171,7 @@ AIX) Darwin) SPARSE_FLAGS="$SPARSE_FLAGS -D__APPLE__=1" SOURCES="$SOURCES - include/uv-private/uv-bsd.h + include/uv-bsd.h src/unix/darwin.c src/unix/kqueue.c src/unix/fsevents.c" @@ -180,21 +179,21 @@ Darwin) DragonFly) SPARSE_FLAGS="$SPARSE_FLAGS -D__DragonFly__=1" SOURCES="$SOURCES - include/uv-private/uv-bsd.h + include/uv-bsd.h src/unix/kqueue.c src/unix/freebsd.c" ;; FreeBSD) SPARSE_FLAGS="$SPARSE_FLAGS -D__FreeBSD__=1" SOURCES="$SOURCES - include/uv-private/uv-bsd.h + include/uv-bsd.h src/unix/kqueue.c src/unix/freebsd.c" ;; Linux) SPARSE_FLAGS="$SPARSE_FLAGS -D__linux__=1" SOURCES="$SOURCES - include/uv-private/uv-linux.h + include/uv-linux.h src/unix/linux-inotify.c src/unix/linux-core.c src/unix/linux-syscalls.c @@ -203,21 +202,21 @@ Linux) NetBSD) SPARSE_FLAGS="$SPARSE_FLAGS -D__NetBSD__=1" SOURCES="$SOURCES - include/uv-private/uv-bsd.h + include/uv-bsd.h src/unix/kqueue.c src/unix/netbsd.c" ;; OpenBSD) SPARSE_FLAGS="$SPARSE_FLAGS -D__OpenBSD__=1" SOURCES="$SOURCES - include/uv-private/uv-bsd.h + include/uv-bsd.h src/unix/kqueue.c src/unix/openbsd.c" ;; SunOS) SPARSE_FLAGS="$SPARSE_FLAGS -D__sun=1" SOURCES="$SOURCES - include/uv-private/uv-sunos.h + include/uv-sunos.h src/unix/sunos.c" ;; esac diff --git a/deps/uv/common.gypi b/deps/uv/common.gypi index 7f2e8c3..df7da88 100644 --- a/deps/uv/common.gypi +++ b/deps/uv/common.gypi @@ -36,6 +36,7 @@ }, 'xcode_settings': { 'GCC_OPTIMIZATION_LEVEL': '0', + 'OTHER_CFLAGS': [ '-Wno-strict-aliasing' ], }, 'conditions': [ ['OS != "win"', { diff --git a/deps/uv/config-mingw.mk b/deps/uv/config-mingw.mk deleted file mode 100644 index 84df27a..0000000 --- a/deps/uv/config-mingw.mk +++ /dev/null @@ -1,48 +0,0 @@ -# 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. - -# Use make -f Makefile.gcc PREFIX=i686-w64-mingw32- -# for cross compilation -CC = $(PREFIX)gcc -AR = $(PREFIX)ar -E=.exe - -CFLAGS=$(CPPFLAGS) -g --std=gnu89 -D_WIN32_WINNT=0x0600 -LDFLAGS=-lm - -WIN_SRCS=$(wildcard $(SRCDIR)/src/win/*.c) -WIN_OBJS=$(WIN_SRCS:.c=.o) - -RUNNER_CFLAGS=$(CFLAGS) -D_GNU_SOURCE # Need _GNU_SOURCE for strdup? -RUNNER_LDFLAGS=$(LDFLAGS) -RUNNER_LIBS=-lws2_32 -lpsapi -liphlpapi -RUNNER_SRC=test/runner-win.c - -libuv.a: $(WIN_OBJS) src/fs-poll.o src/inet.o src/uv-common.o src/version.o - $(AR) rcs $@ $^ - -src/%.o: src/%.c include/uv.h include/uv-private/uv-win.h - $(CC) $(CFLAGS) -c $< -o $@ - -src/win/%.o: src/win/%.c include/uv.h include/uv-private/uv-win.h src/win/internal.h - $(CC) $(CFLAGS) -o $@ -c $< - -clean-platform: - -rm -f src/win/*.o diff --git a/deps/uv/config-unix.mk b/deps/uv/config-unix.mk deleted file mode 100644 index 7b99ac1..0000000 --- a/deps/uv/config-unix.mk +++ /dev/null @@ -1,207 +0,0 @@ -# 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. - -E= -CFLAGS += -g -Wall -Wextra -Wno-unused-parameter -CPPFLAGS += -I$(SRCDIR)/src -LDFLAGS=-lm - -CPPFLAGS += -D_LARGEFILE_SOURCE -CPPFLAGS += -D_FILE_OFFSET_BITS=64 - -RUNNER_SRC=test/runner-unix.c -RUNNER_CFLAGS=$(CFLAGS) -I$(SRCDIR)/test -RUNNER_LDFLAGS=-L"$(CURDIR)" -luv - -DTRACE_OBJS= -DTRACE_HEADER= - -OBJS += src/unix/async.o -OBJS += src/unix/core.o -OBJS += src/unix/dl.o -OBJS += src/unix/error.o -OBJS += src/unix/fs.o -OBJS += src/unix/getaddrinfo.o -OBJS += src/unix/loop.o -OBJS += src/unix/loop-watcher.o -OBJS += src/unix/pipe.o -OBJS += src/unix/poll.o -OBJS += src/unix/process.o -OBJS += src/unix/signal.o -OBJS += src/unix/stream.o -OBJS += src/unix/tcp.o -OBJS += src/unix/thread.o -OBJS += src/unix/threadpool.o -OBJS += src/unix/timer.o -OBJS += src/unix/tty.o -OBJS += src/unix/udp.o -OBJS += src/fs-poll.o -OBJS += src/uv-common.o -OBJS += src/inet.o -OBJS += src/version.o - -ifeq (sunos,$(PLATFORM)) -HAVE_DTRACE ?= 1 -CPPFLAGS += -D__EXTENSIONS__ -D_XOPEN_SOURCE=500 -LDFLAGS+=-lkstat -lnsl -lsendfile -lsocket -# Library dependencies are not transitive. -OBJS += src/unix/sunos.o -ifeq (1, $(HAVE_DTRACE)) -OBJS += src/unix/dtrace.o -DTRACE_OBJS += src/unix/core.o -endif -endif - -ifeq (aix,$(PLATFORM)) -CPPFLAGS += -D_ALL_SOURCE -D_XOPEN_SOURCE=500 -LDFLAGS+= -lperfstat -OBJS += src/unix/aix.o -endif - -ifeq (darwin,$(PLATFORM)) -HAVE_DTRACE ?= 1 -# dtrace(1) probes contain dollar signs on OS X. Mute the warnings they -# generate but only when CC=clang, -Wno-dollar-in-identifier-extension -# is a clang extension. -ifeq (__clang__,$(shell sh -c "$(CC) -dM -E - &2 2>/dev/null; echo $$?),0) -HAVE_DTRACE ?= 1 -endif -LDFLAGS+=-lkvm -OBJS += src/unix/freebsd.o -OBJS += src/unix/kqueue.o -endif - -ifeq (dragonfly,$(PLATFORM)) -LDFLAGS+=-lkvm -OBJS += src/unix/freebsd.o -OBJS += src/unix/kqueue.o -endif - -ifeq (netbsd,$(PLATFORM)) -LDFLAGS+=-lkvm -OBJS += src/unix/netbsd.o -OBJS += src/unix/kqueue.o -endif - -ifeq (openbsd,$(PLATFORM)) -LDFLAGS+=-lkvm -OBJS += src/unix/openbsd.o -OBJS += src/unix/kqueue.o -endif - -ifeq (sunos,$(PLATFORM)) -RUNNER_LDFLAGS += -pthreads -else -ifneq (android, $(PLATFORM)) -RUNNER_LDFLAGS += -pthread -endif -endif - -ifeq ($(HAVE_DTRACE), 1) -DTRACE_HEADER = src/unix/uv-dtrace.h -CPPFLAGS += -Isrc/unix -CFLAGS += -DHAVE_DTRACE -endif - -ifneq (darwin,$(PLATFORM)) -# Must correspond with UV_VERSION_MAJOR and UV_VERSION_MINOR in src/version.c -SO_LDFLAGS = -Wl,-soname,libuv.so.0.11 -endif - -RUNNER_LDFLAGS += $(LDFLAGS) - -libuv.a: $(OBJS) - $(AR) rcs $@ $^ - -libuv.$(SOEXT): override CFLAGS += -fPIC -libuv.$(SOEXT): $(OBJS:%.o=%.pic.o) - $(CC) -shared -o $@ $^ $(LDFLAGS) $(SO_LDFLAGS) - -include/uv-private/uv-unix.h: \ - include/uv-private/uv-bsd.h \ - include/uv-private/uv-darwin.h \ - include/uv-private/uv-linux.h \ - include/uv-private/uv-sunos.h - -src/unix/internal.h: src/unix/linux-syscalls.h src/uv-common.h -src/uv-common.h: src/queue.h - -src/.buildstamp src/unix/.buildstamp test/.buildstamp: - mkdir -p $(@D) - touch $@ - -src/unix/%.o src/unix/%.pic.o: src/unix/%.c include/uv.h include/uv-private/uv-unix.h src/unix/internal.h src/unix/.buildstamp $(DTRACE_HEADER) - $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ - -src/%.o src/%.pic.o: src/%.c include/uv.h include/uv-private/uv-unix.h src/.buildstamp - $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ - -test/%.o: test/%.c include/uv.h test/.buildstamp - $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ - -clean-platform: - $(RM) test/run-{tests,benchmarks}.dSYM $(OBJS) $(OBJS:%.o=%.pic.o) src/unix/uv-dtrace.h - -src/unix/uv-dtrace.h: src/unix/uv-dtrace.d - dtrace -h -xnolibs -s $< -o $@ - -src/unix/dtrace.o: src/unix/uv-dtrace.d $(DTRACE_OBJS) - dtrace -G -s $^ -o $@ - -src/unix/dtrace.pic.o: src/unix/uv-dtrace.d $(DTRACE_OBJS:%.o=%.pic.o) - dtrace -G -s $^ -o $@ diff --git a/deps/uv/configure.ac b/deps/uv/configure.ac new file mode 100644 index 0000000..9da911c --- /dev/null +++ b/deps/uv/configure.ac @@ -0,0 +1,47 @@ +# Copyright (c) 2013, Ben Noordhuis +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +AC_PREREQ(2.57) +AC_INIT([libuv], [0.11.5], [https://github.com/joyent/libuv/issues]) +AM_INIT_AUTOMAKE([foreign -Wall -Werror]) +AC_CONFIG_MACRO_DIR([m4]) +AC_CANONICAL_HOST +AC_ENABLE_SHARED +AC_ENABLE_STATIC +AC_PROG_CC +# AM_PROG_AR is not available in automake v0.11 but it's essential in v0.12. +m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) +LT_INIT +# TODO(bnoordhuis) Check for -pthread vs. -pthreads +AC_CHECK_LIB([dl], [dlopen]) +AC_CHECK_LIB([kstat], [kstat_lookup]) +AC_CHECK_LIB([kvm], [kvm_open]) +AC_CHECK_LIB([nsl], [gethostbyname]) +AC_CHECK_LIB([perfstat], [perfstat_cpu]) +AC_CHECK_LIB([pthread], [pthread_mutex_init]) +AC_CHECK_LIB([rt], [clock_gettime]) +AC_CHECK_LIB([sendfile], [sendfile]) +AC_CHECK_LIB([socket], [socket]) +AC_SYS_LARGEFILE +AM_CONDITIONAL([AIX], [AS_CASE([$host_os], [aix*], [true], [false])]) +AM_CONDITIONAL([DARWIN], [AS_CASE([$host_os], [darwin*], [true], [false])]) +AM_CONDITIONAL([FREEBSD], [AS_CASE([$host_os], [freebsd*], [true], [false])]) +AM_CONDITIONAL([LINUX], [AS_CASE([$host_os], [linux*], [true], [false])]) +AM_CONDITIONAL([NETBSD], [AS_CASE([$host_os], [netbsd*], [true], [false])]) +AM_CONDITIONAL([OPENBSD], [AS_CASE([$host_os], [openbsd*], [true], [false])]) +AM_CONDITIONAL([SUNOS], [AS_CASE([$host_os], [solaris*], [true], [false])]) +PANDORA_ENABLE_DTRACE +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/deps/uv/include/uv-private/pthread-fixes.h b/deps/uv/include/pthread-fixes.h similarity index 100% rename from deps/uv/include/uv-private/pthread-fixes.h rename to deps/uv/include/pthread-fixes.h diff --git a/deps/uv/include/uv-private/stdint-msvc2008.h b/deps/uv/include/stdint-msvc2008.h similarity index 100% rename from deps/uv/include/uv-private/stdint-msvc2008.h rename to deps/uv/include/stdint-msvc2008.h diff --git a/deps/uv/include/uv-private/tree.h b/deps/uv/include/tree.h similarity index 100% rename from deps/uv/include/uv-private/tree.h rename to deps/uv/include/tree.h diff --git a/deps/uv/include/uv-private/uv-bsd.h b/deps/uv/include/uv-bsd.h similarity index 100% rename from deps/uv/include/uv-private/uv-bsd.h rename to deps/uv/include/uv-bsd.h diff --git a/deps/uv/include/uv-private/uv-darwin.h b/deps/uv/include/uv-darwin.h similarity index 98% rename from deps/uv/include/uv-private/uv-darwin.h rename to deps/uv/include/uv-darwin.h index 110115c..43b261f 100644 --- a/deps/uv/include/uv-private/uv-darwin.h +++ b/deps/uv/include/uv-darwin.h @@ -58,4 +58,6 @@ #define UV_HAVE_KQUEUE 1 +#define UV_PLATFORM_HAS_IP6_LINK_LOCAL_ADDRESS + #endif /* UV_DARWIN_H */ diff --git a/deps/uv/include/uv-errno.h b/deps/uv/include/uv-errno.h new file mode 100644 index 0000000..2b12917 --- /dev/null +++ b/deps/uv/include/uv-errno.h @@ -0,0 +1,365 @@ +/* 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. + */ + +#ifndef UV_ERRNO_H_ +#define UV_ERRNO_H_ + +#include + +#define UV__EOF (-4095) +#define UV__UNKNOWN (-4094) + +#define UV__EAI_ADDRFAMILY (-3000) +#define UV__EAI_AGAIN (-3001) +#define UV__EAI_BADFLAGS (-3002) +#define UV__EAI_CANCELED (-3003) +#define UV__EAI_FAIL (-3004) +#define UV__EAI_FAMILY (-3005) +#define UV__EAI_MEMORY (-3006) +#define UV__EAI_NODATA (-3007) +#define UV__EAI_NONAME (-3008) +#define UV__EAI_OVERFLOW (-3009) +#define UV__EAI_SERVICE (-3010) +#define UV__EAI_SOCKTYPE (-3011) +#define UV__EAI_SYSTEM (-3012) /* TODO(bnoordhuis) Return system error. */ + +/* Only map to the system errno on non-Windows platforms. It's apparently + * a fairly common practice for Windows programmers to redefine errno codes. + */ +#if defined(EACCES) && !defined(_WIN32) +# define UV__EACCES (-EACCES) +#else +# define UV__EACCES (-4093) +#endif + +#if defined(EADDRINFO) && !defined(_WIN32) +# define UV__EADDRINFO EADDRINFO +#else +# define UV__EADDRINFO (-4092) +#endif + +#if defined(EADDRINUSE) && !defined(_WIN32) +# define UV__EADDRINUSE (-EADDRINUSE) +#else +# define UV__EADDRINUSE (-4092) +#endif + +#if defined(EADDRNOTAVAIL) && !defined(_WIN32) +# define UV__EADDRNOTAVAIL (-EADDRNOTAVAIL) +#else +# define UV__EADDRNOTAVAIL (-4091) +#endif + +#if defined(EAFNOSUPPORT) && !defined(_WIN32) +# define UV__EAFNOSUPPORT (-EAFNOSUPPORT) +#else +# define UV__EAFNOSUPPORT (-4090) +#endif + +#if defined(EAGAIN) && !defined(_WIN32) +# define UV__EAGAIN (-EAGAIN) +#else +# define UV__EAGAIN (-4089) +#endif + +#if defined(EALREADY) && !defined(_WIN32) +# define UV__EALREADY (-EALREADY) +#else +# define UV__EALREADY (-4085) +#endif + +#if defined(EBADF) && !defined(_WIN32) +# define UV__EBADF (-EBADF) +#else +# define UV__EBADF (-4084) +#endif + +#if defined(EBUSY) && !defined(_WIN32) +# define UV__EBUSY (-EBUSY) +#else +# define UV__EBUSY (-4083) +#endif + +#if defined(ECANCELED) && !defined(_WIN32) +# define UV__ECANCELED (-ECANCELED) +#else +# define UV__ECANCELED (-4082) +#endif + +#if defined(ECHARSET) && !defined(_WIN32) +# define UV__ECHARSET (-ECHARSET) +#else +# define UV__ECHARSET (-4081) +#endif + +#if defined(ECONNABORTED) && !defined(_WIN32) +# define UV__ECONNABORTED (-ECONNABORTED) +#else +# define UV__ECONNABORTED (-4080) +#endif + +#if defined(ECONNREFUSED) && !defined(_WIN32) +# define UV__ECONNREFUSED (-ECONNREFUSED) +#else +# define UV__ECONNREFUSED (-4079) +#endif + +#if defined(ECONNRESET) && !defined(_WIN32) +# define UV__ECONNRESET (-ECONNRESET) +#else +# define UV__ECONNRESET (-4078) +#endif + +#if defined(EDESTADDRREQ) && !defined(_WIN32) +# define UV__EDESTADDRREQ (-EDESTADDRREQ) +#else +# define UV__EDESTADDRREQ (-4077) +#endif + +#if defined(EEXIST) && !defined(_WIN32) +# define UV__EEXIST (-EEXIST) +#else +# define UV__EEXIST (-4076) +#endif + +#if defined(EFAULT) && !defined(_WIN32) +# define UV__EFAULT (-EFAULT) +#else +# define UV__EFAULT (-4075) +#endif + +#if defined(EHOSTUNREACH) && !defined(_WIN32) +# define UV__EHOSTUNREACH (-EHOSTUNREACH) +#else +# define UV__EHOSTUNREACH (-4074) +#endif + +#if defined(EINTR) && !defined(_WIN32) +# define UV__EINTR (-EINTR) +#else +# define UV__EINTR (-4073) +#endif + +#if defined(EINVAL) && !defined(_WIN32) +# define UV__EINVAL (-EINVAL) +#else +# define UV__EINVAL (-4072) +#endif + +#if defined(EIO) && !defined(_WIN32) +# define UV__EIO (-EIO) +#else +# define UV__EIO (-4071) +#endif + +#if defined(EISCONN) && !defined(_WIN32) +# define UV__EISCONN (-EISCONN) +#else +# define UV__EISCONN (-4070) +#endif + +#if defined(EISDIR) && !defined(_WIN32) +# define UV__EISDIR (-EISDIR) +#else +# define UV__EISDIR (-4069) +#endif + +#if defined(ELOOP) && !defined(_WIN32) +# define UV__ELOOP (-ELOOP) +#else +# define UV__ELOOP (-4068) +#endif + +#if defined(EMFILE) && !defined(_WIN32) +# define UV__EMFILE (-EMFILE) +#else +# define UV__EMFILE (-4067) +#endif + +#if defined(EMSGSIZE) && !defined(_WIN32) +# define UV__EMSGSIZE (-EMSGSIZE) +#else +# define UV__EMSGSIZE (-4066) +#endif + +#if defined(ENAMETOOLONG) && !defined(_WIN32) +# define UV__ENAMETOOLONG (-ENAMETOOLONG) +#else +# define UV__ENAMETOOLONG (-4065) +#endif + +#if defined(ENETDOWN) && !defined(_WIN32) +# define UV__ENETDOWN (-ENETDOWN) +#else +# define UV__ENETDOWN (-4064) +#endif + +#if defined(ENETUNREACH) && !defined(_WIN32) +# define UV__ENETUNREACH (-ENETUNREACH) +#else +# define UV__ENETUNREACH (-4063) +#endif + +#if defined(ENFILE) && !defined(_WIN32) +# define UV__ENFILE (-ENFILE) +#else +# define UV__ENFILE (-4062) +#endif + +#if defined(ENOBUFS) && !defined(_WIN32) +# define UV__ENOBUFS (-ENOBUFS) +#else +# define UV__ENOBUFS (-4061) +#endif + +#if defined(ENODEV) && !defined(_WIN32) +# define UV__ENODEV (-ENODEV) +#else +# define UV__ENODEV (-4060) +#endif + +#if defined(ENOENT) && !defined(_WIN32) +# define UV__ENOENT (-ENOENT) +#else +# define UV__ENOENT (-4059) +#endif + +#if defined(ENOMEM) && !defined(_WIN32) +# define UV__ENOMEM (-ENOMEM) +#else +# define UV__ENOMEM (-4058) +#endif + +#if defined(ENONET) && !defined(_WIN32) +# define UV__ENONET (-ENONET) +#else +# define UV__ENONET (-4057) +#endif + +#if defined(ENOSPC) && !defined(_WIN32) +# define UV__ENOSPC (-ENOSPC) +#else +# define UV__ENOSPC (-4056) +#endif + +#if defined(ENOSYS) && !defined(_WIN32) +# define UV__ENOSYS (-ENOSYS) +#else +# define UV__ENOSYS (-4055) +#endif + +#if defined(ENOTCONN) && !defined(_WIN32) +# define UV__ENOTCONN (-ENOTCONN) +#else +# define UV__ENOTCONN (-4054) +#endif + +#if defined(ENOTDIR) && !defined(_WIN32) +# define UV__ENOTDIR (-ENOTDIR) +#else +# define UV__ENOTDIR (-4053) +#endif + +#if defined(ENOTEMPTY) && !defined(_WIN32) +# define UV__ENOTEMPTY (-ENOTEMPTY) +#else +# define UV__ENOTEMPTY (-4052) +#endif + +#if defined(ENOTSOCK) && !defined(_WIN32) +# define UV__ENOTSOCK (-ENOTSOCK) +#else +# define UV__ENOTSOCK (-4051) +#endif + +#if defined(ENOTSUP) && !defined(_WIN32) +# define UV__ENOTSUP (-ENOTSUP) +#else +# define UV__ENOTSUP (-4050) +#endif + +#if defined(EPERM) && !defined(_WIN32) +# define UV__EPERM (-EPERM) +#else +# define UV__EPERM (-4049) +#endif + +#if defined(EPIPE) && !defined(_WIN32) +# define UV__EPIPE (-EPIPE) +#else +# define UV__EPIPE (-4048) +#endif + +#if defined(EPROTO) && !defined(_WIN32) +# define UV__EPROTO (-EPROTO) +#else +# define UV__EPROTO (-4047) +#endif + +#if defined(EPROTONOSUPPORT) && !defined(_WIN32) +# define UV__EPROTONOSUPPORT (-EPROTONOSUPPORT) +#else +# define UV__EPROTONOSUPPORT (-4046) +#endif + +#if defined(EPROTOTYPE) && !defined(_WIN32) +# define UV__EPROTOTYPE (-EPROTOTYPE) +#else +# define UV__EPROTOTYPE (-4045) +#endif + +#if defined(EROFS) && !defined(_WIN32) +# define UV__EROFS (-EROFS) +#else +# define UV__EROFS (-4044) +#endif + +#if defined(ESHUTDOWN) && !defined(_WIN32) +# define UV__ESHUTDOWN (-ESHUTDOWN) +#else +# define UV__ESHUTDOWN (-4043) +#endif + +#if defined(ESPIPE) && !defined(_WIN32) +# define UV__ESPIPE (-ESPIPE) +#else +# define UV__ESPIPE (-4042) +#endif + +#if defined(ESRCH) && !defined(_WIN32) +# define UV__ESRCH (-ESRCH) +#else +# define UV__ESRCH (-4041) +#endif + +#if defined(ETIMEDOUT) && !defined(_WIN32) +# define UV__ETIMEDOUT (-ETIMEDOUT) +#else +# define UV__ETIMEDOUT (-4040) +#endif + +#if defined(EXDEV) && !defined(_WIN32) +# define UV__EXDEV (-EXDEV) +#else +# define UV__EXDEV (-4038) +#endif + +#endif /* UV_ERRNO_H_ */ diff --git a/deps/uv/include/uv-private/uv-linux.h b/deps/uv/include/uv-linux.h similarity index 97% rename from deps/uv/include/uv-private/uv-linux.h rename to deps/uv/include/uv-linux.h index 9b38405..62ebfe2 100644 --- a/deps/uv/include/uv-private/uv-linux.h +++ b/deps/uv/include/uv-linux.h @@ -31,4 +31,6 @@ void* watchers[2]; \ int wd; \ +#define UV_PLATFORM_HAS_IP6_LINK_LOCAL_ADDRESS + #endif /* UV_LINUX_H */ diff --git a/deps/uv/include/uv-private/uv-sunos.h b/deps/uv/include/uv-sunos.h similarity index 100% rename from deps/uv/include/uv-private/uv-sunos.h rename to deps/uv/include/uv-sunos.h diff --git a/deps/uv/include/uv-private/uv-unix.h b/deps/uv/include/uv-unix.h similarity index 100% rename from deps/uv/include/uv-private/uv-unix.h rename to deps/uv/include/uv-unix.h diff --git a/deps/uv/include/uv-private/uv-win.h b/deps/uv/include/uv-win.h similarity index 99% rename from deps/uv/include/uv-private/uv-win.h rename to deps/uv/include/uv-win.h index 0ca4bc2..8e60b35 100644 --- a/deps/uv/include/uv-private/uv-win.h +++ b/deps/uv/include/uv-win.h @@ -39,7 +39,7 @@ typedef intptr_t ssize_t; #include #if defined(_MSC_VER) && _MSC_VER < 1600 -# include "uv-private/stdint-msvc2008.h" +# include "stdint-msvc2008.h" #else # include #endif @@ -529,7 +529,7 @@ RB_HEAD(uv_timer_tree_s, uv_timer_s); UV_REQ_FIELDS \ } exit_req; \ BYTE* child_stdio_buffer; \ - uv_err_t spawn_error; \ + int spawn_error; \ int exit_signal; \ HANDLE wait_handle; \ HANDLE process_handle; \ @@ -582,3 +582,5 @@ int uv_utf16_to_utf8(const WCHAR* utf16Buffer, size_t utf16Size, char* utf8Buffer, size_t utf8Size); int uv_utf8_to_utf16(const char* utf8Buffer, WCHAR* utf16Buffer, size_t utf16Size); + +#define UV_PLATFORM_HAS_IP6_LINK_LOCAL_ADDRESS diff --git a/deps/uv/include/uv.h b/deps/uv/include/uv.h index bb443e0..78232b0 100644 --- a/deps/uv/include/uv.h +++ b/deps/uv/include/uv.h @@ -45,8 +45,10 @@ extern "C" { # define UV_EXTERN /* nothing */ #endif +#include "uv-errno.h" + #if defined(_MSC_VER) && _MSC_VER < 1600 -# include "uv-private/stdint-msvc2008.h" +# include "stdint-msvc2008.h" #else # include #endif @@ -59,80 +61,79 @@ extern "C" { #if defined(__unix__) || defined(__POSIX__) || \ defined(__APPLE__) || defined(_AIX) -# include "uv-private/uv-unix.h" +# include "uv-unix.h" #else -# include "uv-private/uv-win.h" +# include "uv-win.h" #endif /* Expand this list if necessary. */ #define UV_ERRNO_MAP(XX) \ - XX( -1, UNKNOWN, "unknown error") \ - XX( 0, OK, "success") \ - XX( 1, EOF, "end of file") \ - XX( 2, EADDRINFO, "getaddrinfo error") \ - XX( 3, EACCES, "permission denied") \ - XX( 4, EAGAIN, "resource temporarily unavailable") \ - XX( 5, EADDRINUSE, "address already in use") \ - XX( 6, EADDRNOTAVAIL, "address not available") \ - XX( 7, EAFNOSUPPORT, "address family not supported") \ - XX( 8, EALREADY, "connection already in progress") \ - XX( 9, EBADF, "bad file descriptor") \ - XX( 10, EBUSY, "resource busy or locked") \ - XX( 11, ECONNABORTED, "software caused connection abort") \ - XX( 12, ECONNREFUSED, "connection refused") \ - XX( 13, ECONNRESET, "connection reset by peer") \ - XX( 14, EDESTADDRREQ, "destination address required") \ - XX( 15, EFAULT, "bad address in system call argument") \ - XX( 16, EHOSTUNREACH, "host is unreachable") \ - XX( 17, EINTR, "interrupted system call") \ - XX( 18, EINVAL, "invalid argument") \ - XX( 19, EISCONN, "socket is already connected") \ - XX( 20, EMFILE, "too many open files") \ - XX( 21, EMSGSIZE, "message too long") \ - XX( 22, ENETDOWN, "network is down") \ - XX( 23, ENETUNREACH, "network is unreachable") \ - XX( 24, ENFILE, "file table overflow") \ - XX( 25, ENOBUFS, "no buffer space available") \ - XX( 26, ENOMEM, "not enough memory") \ - XX( 27, ENOTDIR, "not a directory") \ - XX( 28, EISDIR, "illegal operation on a directory") \ - XX( 29, ENONET, "machine is not on the network") \ - XX( 31, ENOTCONN, "socket is not connected") \ - XX( 32, ENOTSOCK, "socket operation on non-socket") \ - XX( 33, ENOTSUP, "operation not supported on socket") \ - XX( 34, ENOENT, "no such file or directory") \ - XX( 35, ENOSYS, "function not implemented") \ - XX( 36, EPIPE, "broken pipe") \ - XX( 37, EPROTO, "protocol error") \ - XX( 38, EPROTONOSUPPORT, "protocol not supported") \ - XX( 39, EPROTOTYPE, "protocol wrong type for socket") \ - XX( 40, ETIMEDOUT, "connection timed out") \ - XX( 41, ECHARSET, "invalid Unicode character") \ - XX( 42, EAIFAMNOSUPPORT, "address family for hostname not supported") \ - XX( 44, EAISERVICE, "servname not supported for ai_socktype") \ - XX( 45, EAISOCKTYPE, "ai_socktype not supported") \ - XX( 46, ESHUTDOWN, "cannot send after transport endpoint shutdown") \ - XX( 47, EEXIST, "file already exists") \ - XX( 48, ESRCH, "no such process") \ - XX( 49, ENAMETOOLONG, "name too long") \ - XX( 50, EPERM, "operation not permitted") \ - XX( 51, ELOOP, "too many symbolic links encountered") \ - XX( 52, EXDEV, "cross-device link not permitted") \ - XX( 53, ENOTEMPTY, "directory not empty") \ - XX( 54, ENOSPC, "no space left on device") \ - XX( 55, EIO, "i/o error") \ - XX( 56, EROFS, "read-only file system") \ - XX( 57, ENODEV, "no such device") \ - XX( 58, ESPIPE, "invalid seek") \ - XX( 59, ECANCELED, "operation canceled") \ - - -#define UV_ERRNO_GEN(val, name, s) UV_##name = val, -typedef enum { - UV_ERRNO_MAP(UV_ERRNO_GEN) - UV_MAX_ERRORS -} uv_err_code; -#undef UV_ERRNO_GEN + XX(EACCES, "permission denied") \ + XX(EADDRINUSE, "address already in use") \ + XX(EADDRNOTAVAIL, "address not available") \ + XX(EAFNOSUPPORT, "address family not supported") \ + XX(EAGAIN, "resource temporarily unavailable") \ + XX(EAI_ADDRFAMILY, "address family not supported") \ + XX(EAI_AGAIN, "temporary failure") \ + XX(EAI_BADFLAGS, "bad ai_flags value") \ + XX(EAI_CANCELED, "request canceled") \ + XX(EAI_FAIL, "permanent failure") \ + XX(EAI_FAMILY, "ai_family not supported") \ + XX(EAI_MEMORY, "out of memory") \ + XX(EAI_NODATA, "no address") \ + XX(EAI_NONAME, "unknown node or service") \ + XX(EAI_SERVICE, "service not available for socket type") \ + XX(EAI_SOCKTYPE, "socket type not supported") \ + XX(EAI_SYSTEM, "system error") \ + XX(EALREADY, "connection already in progress") \ + XX(EBADF, "bad file descriptor") \ + XX(EBUSY, "resource busy or locked") \ + XX(ECANCELED, "operation canceled") \ + XX(ECHARSET, "invalid Unicode character") \ + XX(ECONNABORTED, "software caused connection abort") \ + XX(ECONNREFUSED, "connection refused") \ + XX(ECONNRESET, "connection reset by peer") \ + XX(EDESTADDRREQ, "destination address required") \ + XX(EEXIST, "file already exists") \ + XX(EFAULT, "bad address in system call argument") \ + XX(EHOSTUNREACH, "host is unreachable") \ + XX(EINTR, "interrupted system call") \ + XX(EINVAL, "invalid argument") \ + XX(EIO, "i/o error") \ + XX(EISCONN, "socket is already connected") \ + XX(EISDIR, "illegal operation on a directory") \ + XX(ELOOP, "too many symbolic links encountered") \ + XX(EMFILE, "too many open files") \ + XX(EMSGSIZE, "message too long") \ + XX(ENAMETOOLONG, "name too long") \ + XX(ENETDOWN, "network is down") \ + XX(ENETUNREACH, "network is unreachable") \ + XX(ENFILE, "file table overflow") \ + XX(ENOBUFS, "no buffer space available") \ + XX(ENODEV, "no such device") \ + XX(ENOENT, "no such file or directory") \ + XX(ENOMEM, "not enough memory") \ + XX(ENONET, "machine is not on the network") \ + XX(ENOSPC, "no space left on device") \ + XX(ENOSYS, "function not implemented") \ + XX(ENOTCONN, "socket is not connected") \ + XX(ENOTDIR, "not a directory") \ + XX(ENOTEMPTY, "directory not empty") \ + XX(ENOTSOCK, "socket operation on non-socket") \ + XX(ENOTSUP, "operation not supported on socket") \ + XX(EPERM, "operation not permitted") \ + XX(EPIPE, "broken pipe") \ + XX(EPROTO, "protocol error") \ + XX(EPROTONOSUPPORT, "protocol not supported") \ + XX(EPROTOTYPE, "protocol wrong type for socket") \ + XX(EROFS, "read-only file system") \ + XX(ESHUTDOWN, "cannot send after transport endpoint shutdown") \ + XX(ESPIPE, "invalid seek") \ + XX(ESRCH, "no such process") \ + XX(ETIMEDOUT, "connection timed out") \ + XX(EXDEV, "cross-device link not permitted") \ + XX(UNKNOWN, "unknown error") \ + XX(EOF, "end of file") \ #define UV_HANDLE_TYPE_MAP(XX) \ XX(ASYNC, async) \ @@ -163,6 +164,13 @@ typedef enum { XX(GETADDRINFO, getaddrinfo) \ typedef enum { +#define XX(code, _) UV_ ## code = UV__ ## code, + UV_ERRNO_MAP(XX) +#undef XX + UV_ERRNO_MAX = UV__EOF - 1 +} uv_errno_t; + +typedef enum { UV_UNKNOWN_HANDLE = 0, #define XX(uc, lc) UV_##uc, UV_HANDLE_TYPE_MAP(XX) @@ -183,7 +191,6 @@ typedef enum { /* Handle types. */ typedef struct uv_loop_s uv_loop_t; -typedef struct uv_err_s uv_err_t; typedef struct uv_handle_s uv_handle_t; typedef struct uv_stream_s uv_stream_t; typedef struct uv_tcp_s uv_tcp_t; @@ -339,11 +346,8 @@ UV_EXTERN int uv_backend_timeout(const uv_loop_t*); typedef uv_buf_t (*uv_alloc_cb)(uv_handle_t* handle, size_t suggested_size); /* - * `nread` is > 0 if there is data available, 0 if libuv is done reading for now - * or -1 on error. - * - * Error details can be obtained by calling uv_last_error(). UV_EOF indicates - * that the stream has been closed. + * `nread` is > 0 if there is data available, 0 if libuv is done reading for + * now, or < 0 on error. * * The callee is responsible for closing the stream when an error happens. * Trying to read from the stream again is undefined. @@ -400,9 +404,12 @@ typedef struct { uint64_t st_size; uint64_t st_blksize; uint64_t st_blocks; + uint64_t st_flags; + uint64_t st_gen; uv_timespec_t st_atim; uv_timespec_t st_mtim; uv_timespec_t st_ctim; + uv_timespec_t st_birthtim; } uv_stat_t; @@ -429,22 +436,11 @@ typedef enum { } uv_membership; -struct uv_err_s { - /* read-only */ - uv_err_code code; - /* private */ - int sys_errno_; -}; - - /* - * Most functions return boolean: 0 for success and -1 for failure. - * On error the user should then call uv_last_error() to determine - * the error code. + * Most functions return 0 on success or an error code < 0 on failure. */ -UV_EXTERN uv_err_t uv_last_error(uv_loop_t*); -UV_EXTERN const char* uv_strerror(uv_err_t err); -UV_EXTERN const char* uv_err_name(uv_err_t err); +UV_EXTERN const char* uv_strerror(int err); +UV_EXTERN const char* uv_err_name(int err); #define UV_REQ_FIELDS \ @@ -534,8 +530,7 @@ UV_EXTERN void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg); * It gives you a chance to free up any resources associated with the handle. * * In-progress requests, like uv_connect_t or uv_write_t, are cancelled and - * have their callbacks called asynchronously with status=-1 and the error code - * set to UV_ECANCELED. + * have their callbacks called asynchronously with status=UV_ECANCELED. */ UV_EXTERN void uv_close(uv_handle_t* handle, uv_close_cb close_cb); @@ -604,9 +599,11 @@ UV_EXTERN int uv_accept(uv_stream_t* server, uv_stream_t* client); /* * Read data from an incoming stream. The callback will be made several * times until there is no more data to read or uv_read_stop is called. - * When we've reached EOF nread will be set to -1 and the error is set - * to UV_EOF. When nread == -1 the buf parameter might not point to a - * valid buffer; in that case buf.len and buf.base are both set to 0. + * When we've reached EOF nread will be set to UV_EOF. + * + * When nread < 0, the buf parameter might not point to a valid buffer; + * in that case buf.len and buf.base are both set to 0. + * * Note that nread might also be 0, which does *not* indicate an error or * eof; it happens when libuv requested a buffer through the alloc callback * but then decided that it didn't need that buffer. @@ -804,7 +801,7 @@ typedef void (*uv_udp_send_cb)(uv_udp_send_t* req, int status); * nread Number of bytes that have been received. * 0 if there is no more data to read. You may * discard or repurpose the read buffer. - * -1 if a transmission error was detected. + * < 0 if a transmission error was detected. * buf uv_buf_t with the received data. * addr struct sockaddr_in or struct sockaddr_in6. * Valid for the duration of the callback only. @@ -854,7 +851,7 @@ UV_EXTERN int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock); * flags Unused. * * Returns: - * 0 on success, -1 on error. + * 0 on success, or an error code < 0 on failure. */ UV_EXTERN int uv_udp_bind(uv_udp_t* handle, struct sockaddr_in addr, unsigned flags); @@ -868,10 +865,11 @@ UV_EXTERN int uv_udp_bind(uv_udp_t* handle, struct sockaddr_in addr, * flags Should be 0 or UV_UDP_IPV6ONLY. * * Returns: - * 0 on success, -1 on error. + * 0 on success, or an error code < 0 on failure. */ UV_EXTERN int uv_udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, unsigned flags); + UV_EXTERN int uv_udp_getsockname(uv_udp_t* handle, struct sockaddr* name, int* namelen); @@ -886,7 +884,7 @@ UV_EXTERN int uv_udp_getsockname(uv_udp_t* handle, struct sockaddr* name, * membership Should be UV_JOIN_GROUP or UV_LEAVE_GROUP * * Returns: - * 0 on success, -1 on error. + * 0 on success, or an error code < 0 on failure. */ UV_EXTERN int uv_udp_set_membership(uv_udp_t* handle, const char* multicast_addr, const char* interface_addr, @@ -902,7 +900,7 @@ UV_EXTERN int uv_udp_set_membership(uv_udp_t* handle, * on 1 for on, 0 for off * * Returns: - * 0 on success, -1 on error. + * 0 on success, or an error code < 0 on failure. */ UV_EXTERN int uv_udp_set_multicast_loop(uv_udp_t* handle, int on); @@ -915,7 +913,7 @@ UV_EXTERN int uv_udp_set_multicast_loop(uv_udp_t* handle, int on); * ttl 1 through 255 * * Returns: - * 0 on success, -1 on error. + * 0 on success, or an error code < 0 on failure. */ UV_EXTERN int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl); @@ -928,7 +926,7 @@ UV_EXTERN int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl); * on 1 for on, 0 for off * * Returns: - * 0 on success, -1 on error. + * 0 on success, or an error code < 0 on failure. */ UV_EXTERN int uv_udp_set_broadcast(uv_udp_t* handle, int on); @@ -941,7 +939,7 @@ UV_EXTERN int uv_udp_set_broadcast(uv_udp_t* handle, int on); * ttl 1 through 255 * * Returns: - * 0 on success, -1 on error. + * 0 on success, or an error code < 0 on failure. */ UV_EXTERN int uv_udp_set_ttl(uv_udp_t* handle, int ttl); @@ -959,7 +957,7 @@ UV_EXTERN int uv_udp_set_ttl(uv_udp_t* handle, int ttl); * send_cb Callback to invoke when the data has been sent out. * * Returns: - * 0 on success, -1 on error. + * 0 on success, or an error code < 0 on failure. */ UV_EXTERN int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], int bufcnt, struct sockaddr_in addr, @@ -978,7 +976,7 @@ UV_EXTERN int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, * send_cb Callback to invoke when the data has been sent out. * * Returns: - * 0 on success, -1 on error. + * 0 on success, or an error code < 0 on failure. */ UV_EXTERN int uv_udp_send6(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], int bufcnt, struct sockaddr_in6 addr, @@ -995,7 +993,7 @@ UV_EXTERN int uv_udp_send6(uv_udp_send_t* req, uv_udp_t* handle, * recv_cb Callback to invoke with received data. * * Returns: - * 0 on success, -1 on error. + * 0 on success, or an error code < 0 on failure. */ UV_EXTERN int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb); @@ -1007,7 +1005,7 @@ UV_EXTERN int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, * handle UDP handle. Should have been initialized with `uv_udp_init`. * * Returns: - * 0 on success, -1 on error. + * 0 on success, or an error code < 0 on failure. */ UV_EXTERN int uv_udp_recv_stop(uv_udp_t* handle); @@ -1151,10 +1149,10 @@ UV_EXTERN int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, * will be called with `status` set to 0, and the detected events set en the * `events` field. * - * If an error happens while polling status may be set to -1 and the error - * code can be retrieved with uv_last_error. The user should not close the - * socket while uv_poll is active. If the user does that anyway, the callback - * *may* be called reporting an error status, but this is not guaranteed. + * If an error happens while polling status, `status` < 0 and corresponds + * with one of the UV_E* error codes. The user should not close the socket + * while uv_poll is active. If the user does that anyway, the callback *may* + * be called reporting an error status, but this is not guaranteed. * * Calling uv_poll_start on an uv_poll watcher that is already active is fine. * Doing so will update the events mask that is being watched for. @@ -1275,8 +1273,8 @@ UV_EXTERN int uv_timer_stop(uv_timer_t* handle); /* * Stop the timer, and if it is repeating restart it using the repeat value - * as the timeout. If the timer has never been started before it returns -1 and - * sets the error to UV_EINVAL. + * as the timeout. If the timer has never been started before it returns + * UV_EINVAL. */ UV_EXTERN int uv_timer_again(uv_timer_t* handle); @@ -1312,15 +1310,13 @@ struct uv_getaddrinfo_s { * hints is a pointer to a struct addrinfo with additional address type * constraints, or NULL. Consult `man -s 3 getaddrinfo` for details. * - * Returns 0 on success, -1 on error. Call uv_last_error() to get the error. + * Returns 0 on success or an error code < 0 on failure. * * If successful, your callback gets called sometime in the future with the * lookup result, which is either: * - * a) status == 0, the res argument points to a valid struct addrinfo, or - * b) status == -1, the res argument is NULL. - * - * On NXDOMAIN, the status code is -1 and uv_last_error() returns UV_ENOENT. + * a) err == 0, the res argument points to a valid struct addrinfo, or + * b) err < 0, the res argument is NULL. See the UV_EAI_* constants. * * Call uv_freeaddrinfo() to free the addrinfo structure. */ @@ -1336,6 +1332,7 @@ UV_EXTERN int uv_getaddrinfo(uv_loop_t* loop, */ UV_EXTERN void uv_freeaddrinfo(struct addrinfo* ai); + /* uv_spawn() options */ typedef enum { UV_IGNORE = 0x00, @@ -1466,7 +1463,7 @@ UV_EXTERN int uv_process_kill(uv_process_t*, int signum); /* Kills the process with the specified signal. */ -UV_EXTERN uv_err_t uv_kill(int pid, int signum); +UV_EXTERN int uv_kill(int pid, int signum); /* @@ -1487,7 +1484,7 @@ UV_EXTERN int uv_queue_work(uv_loop_t* loop, uv_work_t* req, /* Cancel a pending request. Fails if the request is executing or has finished * executing. * - * Returns 0 on success, -1 on error. The loop error code is not touched. + * Returns 0 on success, or an error code < 0 on failure. * * Only cancellation of uv_fs_t, uv_getaddrinfo_t and uv_work_t requests is * currently supported. @@ -1498,13 +1495,13 @@ UV_EXTERN int uv_queue_work(uv_loop_t* loop, uv_work_t* req, * * Here is how cancellation is reported to your callback: * - * - A uv_fs_t request has its req->errorno field set to UV_ECANCELED. + * - A uv_fs_t request has its req->result field set to UV_ECANCELED. * * - A uv_work_t or uv_getaddrinfo_t request has its callback invoked with - * status == -1 and uv_last_error(loop).code == UV_ECANCELED. + * status == UV_ECANCELED. * * This function is currently only implemented on UNIX platforms. On Windows, - * it always returns -1. + * it always returns UV_ENOSYS. */ UV_EXTERN int uv_cancel(uv_req_t* req); @@ -1535,23 +1532,23 @@ struct uv_interface_address_s { }; UV_EXTERN char** uv_setup_args(int argc, char** argv); -UV_EXTERN uv_err_t uv_get_process_title(char* buffer, size_t size); -UV_EXTERN uv_err_t uv_set_process_title(const char* title); -UV_EXTERN uv_err_t uv_resident_set_memory(size_t* rss); -UV_EXTERN uv_err_t uv_uptime(double* uptime); +UV_EXTERN int uv_get_process_title(char* buffer, size_t size); +UV_EXTERN int uv_set_process_title(const char* title); +UV_EXTERN int uv_resident_set_memory(size_t* rss); +UV_EXTERN int uv_uptime(double* uptime); /* * This allocates cpu_infos array, and sets count. The array * is freed using uv_free_cpu_info(). */ -UV_EXTERN uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count); +UV_EXTERN int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count); UV_EXTERN void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count); /* * This allocates addresses array, and sets count. The array * is freed using uv_free_interface_addresses(). */ -UV_EXTERN uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, +UV_EXTERN int uv_interface_addresses(uv_interface_address_t** addresses, int* count); UV_EXTERN void uv_free_interface_addresses(uv_interface_address_t* addresses, int count); @@ -1609,7 +1606,6 @@ struct uv_fs_s { ssize_t result; void* ptr; const char* path; - uv_err_code errorno; uv_stat_t statbuf; /* Stores the result of uv_fs_stat and uv_fs_fstat. */ UV_FS_PRIVATE_FIELDS }; @@ -1731,7 +1727,7 @@ UV_EXTERN int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle); /* * Check the file at `path` for changes every `interval` milliseconds. * - * Your callback i invoked with `status == -1` if `path` does not exist + * Your callback is invoked with `status < 0` if `path` does not exist * or is inaccessible. The watcher is *not* stopped but your callback is * not called again until something changes (e.g. when the file is created * or the error reason changes). @@ -1855,19 +1851,19 @@ UV_EXTERN int uv_ip4_name(struct sockaddr_in* src, char* dst, size_t size); UV_EXTERN int uv_ip6_name(struct sockaddr_in6* src, char* dst, size_t size); /* Cross-platform IPv6-capable implementation of the 'standard' inet_ntop */ -/* and inet_pton functions. On success they return UV_OK. If an error */ +/* and inet_pton functions. On success they return 0. If an error */ /* the target of the `dst` pointer is unmodified. */ -UV_EXTERN uv_err_t uv_inet_ntop(int af, const void* src, char* dst, size_t size); -UV_EXTERN uv_err_t uv_inet_pton(int af, const char* src, void* dst); +UV_EXTERN int uv_inet_ntop(int af, const void* src, char* dst, size_t size); +UV_EXTERN int uv_inet_pton(int af, const char* src, void* dst); /* Gets the executable path */ UV_EXTERN int uv_exepath(char* buffer, size_t* size); /* Gets the current working directory */ -UV_EXTERN uv_err_t uv_cwd(char* buffer, size_t size); +UV_EXTERN int uv_cwd(char* buffer, size_t size); /* Changes the current working directory */ -UV_EXTERN uv_err_t uv_chdir(const char* dir); +UV_EXTERN int uv_chdir(const char* dir); /* Gets memory info in bytes */ UV_EXTERN uint64_t uv_get_free_memory(void); @@ -1922,7 +1918,7 @@ UV_EXTERN int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr); UV_EXTERN const char* uv_dlerror(uv_lib_t* lib); /* - * The mutex functions return 0 on success, -1 on error + * The mutex functions return 0 on success or an error code < 0 * (unless the return type is void, of course). */ UV_EXTERN int uv_mutex_init(uv_mutex_t* handle); @@ -1966,7 +1962,8 @@ UV_EXTERN void uv_cond_broadcast(uv_cond_t* cond); */ UV_EXTERN void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex); /* Waits on a condition variable with a timeout in nano seconds. - * Returns 0 for success or -1 on timeout, * aborts when other errors happen. + * Returns 0 for success or UV_ETIMEDOUT on timeout, It aborts when other + * errors happen. * * Note: * 1. callers should be prepared to deal with spurious wakeups. @@ -2006,8 +2003,6 @@ union uv_any_req { struct uv_loop_s { /* User data - use this for whatever. */ void* data; - /* The last error */ - uv_err_t last_err; /* Loop reference counting */ unsigned int active_handles; void* handle_queue[2]; diff --git a/deps/uv/src/fs-poll.c b/deps/uv/src/fs-poll.c index 9b2d03e..7fdaaeb 100644 --- a/deps/uv/src/fs-poll.c +++ b/deps/uv/src/fs-poll.c @@ -69,7 +69,7 @@ int uv_fs_poll_start(uv_fs_poll_t* handle, ctx = calloc(1, sizeof(*ctx) + len); if (ctx == NULL) - return uv__set_artificial_error(loop, UV_ENOMEM); + return UV_ENOMEM; ctx->loop = loop; ctx->poll_cb = cb; @@ -150,10 +150,12 @@ static void poll_cb(uv_fs_t* req) { } if (req->result != 0) { - if (ctx->busy_polling != -req->errorno) { - uv__set_artificial_error(ctx->loop, req->errorno); - ctx->poll_cb(ctx->parent_handle, -1, &ctx->statbuf, &zero_statbuf); - ctx->busy_polling = -req->errorno; + if (ctx->busy_polling != req->result) { + ctx->poll_cb(ctx->parent_handle, + req->result, + &ctx->statbuf, + &zero_statbuf); + ctx->busy_polling = req->result; } goto out; } @@ -192,14 +194,18 @@ static void timer_close_cb(uv_handle_t* handle) { static int statbuf_eq(const uv_stat_t* a, const uv_stat_t* b) { return a->st_ctim.tv_nsec == b->st_ctim.tv_nsec && a->st_mtim.tv_nsec == b->st_mtim.tv_nsec + && a->st_birthtim.tv_nsec == b->st_birthtim.tv_nsec && a->st_ctim.tv_sec == b->st_ctim.tv_sec && a->st_mtim.tv_sec == b->st_mtim.tv_sec + && a->st_birthtim.tv_sec == b->st_birthtim.tv_sec && a->st_size == b->st_size && a->st_mode == b->st_mode && a->st_uid == b->st_uid && a->st_gid == b->st_gid && a->st_ino == b->st_ino - && a->st_dev == b->st_dev; + && a->st_dev == b->st_dev + && a->st_flags == b->st_flags + && a->st_gen == b->st_gen; } diff --git a/deps/uv/src/inet.c b/deps/uv/src/inet.c index 8f9d89b..a30c0d1 100644 --- a/deps/uv/src/inet.c +++ b/deps/uv/src/inet.c @@ -19,7 +19,7 @@ #include #if defined(_MSC_VER) && _MSC_VER < 1600 -# include "uv-private/stdint-msvc2008.h" +# include "stdint-msvc2008.h" #else # include #endif @@ -28,30 +28,26 @@ #include "uv-common.h" -static const uv_err_t uv_eafnosupport_ = { UV_EAFNOSUPPORT, 0 }; -static const uv_err_t uv_enospc_ = { UV_ENOSPC, 0 }; -static const uv_err_t uv_einval_ = { UV_EINVAL, 0 }; +static int inet_ntop4(const unsigned char *src, char *dst, size_t size); +static int inet_ntop6(const unsigned char *src, char *dst, size_t size); +static int inet_pton4(const char *src, unsigned char *dst); +static int inet_pton6(const char *src, unsigned char *dst); -static uv_err_t inet_ntop4(const unsigned char *src, char *dst, size_t size); -static uv_err_t inet_ntop6(const unsigned char *src, char *dst, size_t size); -static uv_err_t inet_pton4(const char *src, unsigned char *dst); -static uv_err_t inet_pton6(const char *src, unsigned char *dst); - -uv_err_t uv_inet_ntop(int af, const void* src, char* dst, size_t size) { +int uv_inet_ntop(int af, const void* src, char* dst, size_t size) { switch (af) { case AF_INET: return (inet_ntop4(src, dst, size)); case AF_INET6: return (inet_ntop6(src, dst, size)); default: - return uv_eafnosupport_; + return UV_EAFNOSUPPORT; } /* NOTREACHED */ } -static uv_err_t inet_ntop4(const unsigned char *src, char *dst, size_t size) { +static int inet_ntop4(const unsigned char *src, char *dst, size_t size) { static const char fmt[] = "%u.%u.%u.%u"; char tmp[sizeof "255.255.255.255"]; int l; @@ -62,15 +58,15 @@ static uv_err_t inet_ntop4(const unsigned char *src, char *dst, size_t size) { l = _snprintf(tmp, sizeof(tmp), fmt, src[0], src[1], src[2], src[3]); #endif if (l <= 0 || (size_t) l >= size) { - return uv_enospc_; + return UV_ENOSPC; } strncpy(dst, tmp, size); dst[size - 1] = '\0'; - return uv_ok_; + return 0; } -static uv_err_t inet_ntop6(const unsigned char *src, char *dst, size_t size) { +static int inet_ntop6(const unsigned char *src, char *dst, size_t size) { /* * Note that int32_t and int16_t need only be "at least" large enough * to contain a value of the specified size. On some systems, like @@ -135,8 +131,8 @@ static uv_err_t inet_ntop6(const unsigned char *src, char *dst, size_t size) { if (i == 6 && best.base == 0 && (best.len == 6 || (best.len == 7 && words[7] != 0x0001) || (best.len == 5 && words[5] == 0xffff))) { - uv_err_t err = inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp)); - if (err.code != UV_OK) + int err = inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp)); + if (err) return err; tp += strlen(tp); break; @@ -152,27 +148,27 @@ static uv_err_t inet_ntop6(const unsigned char *src, char *dst, size_t size) { * Check for overflow, copy, and we're done. */ if ((size_t)(tp - tmp) > size) { - return uv_enospc_; + return UV_ENOSPC; } strcpy(dst, tmp); - return uv_ok_; + return 0; } -uv_err_t uv_inet_pton(int af, const char* src, void* dst) { +int uv_inet_pton(int af, const char* src, void* dst) { switch (af) { case AF_INET: return (inet_pton4(src, dst)); case AF_INET6: return (inet_pton6(src, dst)); default: - return uv_eafnosupport_; + return UV_EAFNOSUPPORT; } /* NOTREACHED */ } -static uv_err_t inet_pton4(const char *src, unsigned char *dst) { +static int inet_pton4(const char *src, unsigned char *dst) { static const char digits[] = "0123456789"; int saw_digit, octets, ch; unsigned char tmp[sizeof(struct in_addr)], *tp; @@ -187,31 +183,31 @@ static uv_err_t inet_pton4(const char *src, unsigned char *dst) { unsigned int nw = *tp * 10 + (pch - digits); if (saw_digit && *tp == 0) - return uv_einval_; + return UV_EINVAL; if (nw > 255) - return uv_einval_; + return UV_EINVAL; *tp = nw; if (!saw_digit) { if (++octets > 4) - return uv_einval_; + return UV_EINVAL; saw_digit = 1; } } else if (ch == '.' && saw_digit) { if (octets == 4) - return uv_einval_; + return UV_EINVAL; *++tp = 0; saw_digit = 0; } else - return uv_einval_; + return UV_EINVAL; } if (octets < 4) - return uv_einval_; + return UV_EINVAL; memcpy(dst, tmp, sizeof(struct in_addr)); - return uv_ok_; + return 0; } -static uv_err_t inet_pton6(const char *src, unsigned char *dst) { +static int inet_pton6(const char *src, unsigned char *dst) { static const char xdigits_l[] = "0123456789abcdef", xdigits_u[] = "0123456789ABCDEF"; unsigned char tmp[sizeof(struct in6_addr)], *tp, *endp, *colonp; @@ -225,7 +221,7 @@ static uv_err_t inet_pton6(const char *src, unsigned char *dst) { /* Leading :: requires some special handling. */ if (*src == ':') if (*++src != ':') - return uv_einval_; + return UV_EINVAL; curtok = src; seen_xdigits = 0; val = 0; @@ -238,21 +234,21 @@ static uv_err_t inet_pton6(const char *src, unsigned char *dst) { val <<= 4; val |= (pch - xdigits); if (++seen_xdigits > 4) - return uv_einval_; + return UV_EINVAL; continue; } if (ch == ':') { curtok = src; if (!seen_xdigits) { if (colonp) - return uv_einval_; + return UV_EINVAL; colonp = tp; continue; } else if (*src == '\0') { - return uv_einval_; + return UV_EINVAL; } if (tp + sizeof(uint16_t) > endp) - return uv_einval_; + return UV_EINVAL; *tp++ = (unsigned char) (val >> 8) & 0xff; *tp++ = (unsigned char) val & 0xff; seen_xdigits = 0; @@ -260,18 +256,18 @@ static uv_err_t inet_pton6(const char *src, unsigned char *dst) { continue; } if (ch == '.' && ((tp + sizeof(struct in_addr)) <= endp)) { - uv_err_t err = inet_pton4(curtok, tp); - if (err.code == 0) { + int err = inet_pton4(curtok, tp); + if (err == 0) { tp += sizeof(struct in_addr); seen_xdigits = 0; break; /*%< '\\0' was seen by inet_pton4(). */ } } - return uv_einval_; + return UV_EINVAL; } if (seen_xdigits) { if (tp + sizeof(uint16_t) > endp) - return uv_einval_; + return UV_EINVAL; *tp++ = (unsigned char) (val >> 8) & 0xff; *tp++ = (unsigned char) val & 0xff; } @@ -284,7 +280,7 @@ static uv_err_t inet_pton6(const char *src, unsigned char *dst) { int i; if (tp == endp) - return uv_einval_; + return UV_EINVAL; for (i = 1; i <= n; i++) { endp[- i] = colonp[n - i]; colonp[n - i] = 0; @@ -292,7 +288,7 @@ static uv_err_t inet_pton6(const char *src, unsigned char *dst) { tp = endp; } if (tp != endp) - return uv_einval_; + return UV_EINVAL; memcpy(dst, tmp, sizeof tmp); - return uv_ok_; + return 0; } diff --git a/deps/uv/src/unix/aix.c b/deps/uv/src/unix/aix.c index d5b4259..0e4c4f7 100644 --- a/deps/uv/src/unix/aix.c +++ b/deps/uv/src/unix/aix.c @@ -134,8 +134,7 @@ int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_cb cb, int flags) { loop->counters.fs_event_init++; - uv__set_sys_error(loop, ENOSYS); - return -1; + return -ENOSYS; } @@ -149,45 +148,44 @@ char** uv_setup_args(int argc, char** argv) { } -uv_err_t uv_set_process_title(const char* title) { - return uv_ok_; +int uv_set_process_title(const char* title) { + return 0; } -uv_err_t uv_get_process_title(char* buffer, size_t size) { +int uv_get_process_title(char* buffer, size_t size) { if (size > 0) { buffer[0] = '\0'; } - return uv_ok_; + return 0; } -uv_err_t uv_resident_set_memory(size_t* rss) { +int uv_resident_set_memory(size_t* rss) { char pp[64]; psinfo_t psinfo; - uv_err_t err; + int err; int fd; (void) snprintf(pp, sizeof(pp), "/proc/%lu/psinfo", (unsigned long) getpid()); fd = open(pp, O_RDONLY); if (fd == -1) - return uv__new_sys_error(errno); + return -errno; - err = uv_ok_; - - if (read(fd, &psinfo, sizeof(psinfo)) == sizeof(psinfo)) + /* FIXME(bnoordhuis) Handle EINTR. */ + err = -EINVAL; + if (read(fd, &psinfo, sizeof(psinfo)) == sizeof(psinfo)) { *rss = (size_t)psinfo.pr_rssize * 1024; - else - err = uv__new_sys_error(EINVAL); - + err = 0; + } close(fd); return err; } -uv_err_t uv_uptime(double* uptime) { +int uv_uptime(double* uptime) { struct utmp *utmp_buf; size_t entries = 0; time_t boot_time; @@ -206,14 +204,14 @@ uv_err_t uv_uptime(double* uptime) { endutent(); if (boot_time == 0) - return uv__new_artificial_error(UV_ENOSYS); + return -ENOSYS; *uptime = time(NULL) - boot_time; - return uv_ok_; + return 0; } -uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { uv_cpu_info_t* cpu_info; perfstat_cpu_total_t ps_total; perfstat_cpu_t* ps_cpus; @@ -222,30 +220,30 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { result = perfstat_cpu_total(NULL, &ps_total, sizeof(ps_total), 1); if (result == -1) { - return uv__new_artificial_error(UV_ENOSYS); + return -ENOSYS; } ncpus = result = perfstat_cpu(NULL, NULL, sizeof(perfstat_cpu_t), 0); if (result == -1) { - return uv__new_artificial_error(UV_ENOSYS); + return -ENOSYS; } ps_cpus = (perfstat_cpu_t*) malloc(ncpus * sizeof(perfstat_cpu_t)); if (!ps_cpus) { - return uv__new_artificial_error(UV_ENOMEM); + return -ENOMEM; } strcpy(cpu_id.name, FIRST_CPU); result = perfstat_cpu(&cpu_id, ps_cpus, sizeof(perfstat_cpu_t), ncpus); if (result == -1) { free(ps_cpus); - return uv__new_artificial_error(UV_ENOSYS); + return -ENOSYS; } *cpu_infos = (uv_cpu_info_t*) malloc(ncpus * sizeof(uv_cpu_info_t)); if (!*cpu_infos) { free(ps_cpus); - return uv__new_artificial_error(UV_ENOMEM); + return -ENOMEM; } *count = ncpus; @@ -264,7 +262,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { } free(ps_cpus); - return uv_ok_; + return 0; } @@ -279,7 +277,7 @@ void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) { } -uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { uv_interface_address_t* address; int sockfd, size = 1; @@ -289,19 +287,19 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, *count = 0; if (0 > (sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP))) { - return uv__new_artificial_error(UV_ENOSYS); + return -ENOSYS; } if (ioctl(sockfd, SIOCGSIZIFCONF, &size) == -1) { close(sockfd); - return uv__new_artificial_error(UV_ENOSYS); + return -ENOSYS; } ifc.ifc_req = (struct ifreq*)malloc(size); ifc.ifc_len = size; if (ioctl(sockfd, SIOCGIFCONF, &ifc) == -1) { close(sockfd); - return uv__new_artificial_error(UV_ENOSYS); + return -ENOSYS; } #define ADDR_SIZE(p) MAX((p).sa_len, sizeof(p)) @@ -334,7 +332,7 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, malloc(*count * sizeof(uv_interface_address_t)); if (!(*addresses)) { close(sockfd); - return uv__new_artificial_error(UV_ENOMEM); + return -ENOMEM; } address = *addresses; @@ -377,7 +375,7 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, #undef ADDR_SIZE close(sockfd); - return uv_ok_; + return 0; } diff --git a/deps/uv/src/unix/async.c b/deps/uv/src/unix/async.c index 68d1a1e..f526ba3 100644 --- a/deps/uv/src/unix/async.c +++ b/deps/uv/src/unix/async.c @@ -39,8 +39,11 @@ static int uv__async_eventfd(void); int uv_async_init(uv_loop_t* loop, uv_async_t* handle, uv_async_cb async_cb) { - if (uv__async_start(loop, &loop->async_watcher, uv__async_event)) - return uv__set_sys_error(loop, errno); + int err; + + err = uv__async_start(loop, &loop->async_watcher, uv__async_event); + if (err) + return err; uv__handle_init(loop, (uv_handle_t*)handle, UV_ASYNC); handle->async_cb = async_cb; @@ -199,20 +202,21 @@ void uv__async_init(struct uv__async* wa) { int uv__async_start(uv_loop_t* loop, struct uv__async* wa, uv__async_cb cb) { int pipefd[2]; - int fd; + int err; if (wa->io_watcher.fd != -1) return 0; - fd = uv__async_eventfd(); - if (fd >= 0) { - pipefd[0] = fd; + err = uv__async_eventfd(); + if (err >= 0) { + pipefd[0] = err; pipefd[1] = -1; } - else if (fd != -ENOSYS) - return -1; - else if (uv__make_pipe(pipefd, UV__F_NONBLOCK)) - return -1; + else if (err == -ENOSYS) + err = uv__make_pipe(pipefd, UV__F_NONBLOCK); + + if (err < 0) + return err; uv__io_init(&wa->io_watcher, uv__async_io, pipefd[0]); uv__io_start(loop, &wa->io_watcher, UV__POLLIN); diff --git a/deps/uv/src/unix/core.c b/deps/uv/src/unix/core.c index 3eb45da..a5b340a 100644 --- a/deps/uv/src/unix/core.c +++ b/deps/uv/src/unix/core.c @@ -361,25 +361,28 @@ int uv_is_active(const uv_handle_t* handle) { /* Open a socket in non-blocking close-on-exec mode, atomically if possible. */ int uv__socket(int domain, int type, int protocol) { int sockfd; + int err; #if defined(SOCK_NONBLOCK) && defined(SOCK_CLOEXEC) sockfd = socket(domain, type | SOCK_NONBLOCK | SOCK_CLOEXEC, protocol); - if (sockfd != -1) - goto out; + return sockfd; if (errno != EINVAL) - goto out; + return -errno; #endif sockfd = socket(domain, type, protocol); - if (sockfd == -1) - goto out; + return -errno; - if (uv__nonblock(sockfd, 1) || uv__cloexec(sockfd, 1)) { + err = uv__nonblock(sockfd, 1); + if (err == 0) + err = uv__cloexec(sockfd, 1); + + if (err) { close(sockfd); - sockfd = -1; + return err; } #if defined(SO_NOSIGPIPE) @@ -389,13 +392,13 @@ int uv__socket(int domain, int type, int protocol) { } #endif -out: return sockfd; } int uv__accept(int sockfd) { int peerfd; + int err; assert(sockfd >= 0); @@ -410,38 +413,37 @@ int uv__accept(int sockfd) { NULL, NULL, UV__SOCK_NONBLOCK|UV__SOCK_CLOEXEC); - if (peerfd != -1) - break; + return peerfd; if (errno == EINTR) continue; if (errno != ENOSYS) - break; + return -errno; no_accept4 = 1; skip: #endif peerfd = accept(sockfd, NULL, NULL); - if (peerfd == -1) { if (errno == EINTR) continue; - else - break; + return -errno; } - if (uv__cloexec(peerfd, 1) || uv__nonblock(peerfd, 1)) { + err = uv__cloexec(peerfd, 1); + if (err == 0) + err = uv__nonblock(peerfd, 1); + + if (err) { close(peerfd); - peerfd = -1; + return err; } - break; + return peerfd; } - - return peerfd; } @@ -454,7 +456,10 @@ int uv__nonblock(int fd, int set) { r = ioctl(fd, FIONBIO, &set); while (r == -1 && errno == EINTR); - return r; + if (r) + return -errno; + + return 0; } @@ -465,7 +470,10 @@ int uv__cloexec(int fd, int set) { r = ioctl(fd, set ? FIOCLEX : FIONCLEX); while (r == -1 && errno == EINTR); - return r; + if (r) + return -errno; + + return 0; } #else /* !(defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__)) */ @@ -479,7 +487,7 @@ int uv__nonblock(int fd, int set) { while (r == -1 && errno == EINTR); if (r == -1) - return -1; + return -errno; /* Bail out now if already set/clear. */ if (!!(r & O_NONBLOCK) == !!set) @@ -494,7 +502,10 @@ int uv__nonblock(int fd, int set) { r = fcntl(fd, F_SETFL, flags); while (r == -1 && errno == EINTR); - return r; + if (r) + return -errno; + + return 0; } @@ -507,7 +518,7 @@ int uv__cloexec(int fd, int set) { while (r == -1 && errno == EINTR); if (r == -1) - return -1; + return -errno; /* Bail out now if already set/clear. */ if (!!(r & FD_CLOEXEC) == !!set) @@ -522,7 +533,10 @@ int uv__cloexec(int fd, int set) { r = fcntl(fd, F_SETFD, flags); while (r == -1 && errno == EINTR); - return r; + if (r) + return -errno; + + return 0; } #endif /* defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__) */ @@ -532,39 +546,42 @@ int uv__cloexec(int fd, int set) { * between the call to dup() and fcntl(FD_CLOEXEC). */ int uv__dup(int fd) { + int err; + fd = dup(fd); if (fd == -1) - return -1; + return -errno; - if (uv__cloexec(fd, 1)) { - SAVE_ERRNO(close(fd)); - return -1; + err = uv__cloexec(fd, 1); + if (err) { + close(fd); + return err; } return fd; } -uv_err_t uv_cwd(char* buffer, size_t size) { - if (!buffer || !size) { - return uv__new_artificial_error(UV_EINVAL); - } +int uv_cwd(char* buffer, size_t size) { + if (buffer == NULL) + return -EINVAL; - if (getcwd(buffer, size)) { - return uv_ok_; - } else { - return uv__new_sys_error(errno); - } + if (size == 0) + return -EINVAL; + + if (getcwd(buffer, size) == NULL) + return -errno; + + return 0; } -uv_err_t uv_chdir(const char* dir) { - if (chdir(dir) == 0) { - return uv_ok_; - } else { - return uv__new_sys_error(errno); - } +int uv_chdir(const char* dir) { + if (chdir(dir)) + return -errno; + + return 0; } diff --git a/deps/uv/src/unix/darwin-proctitle.c b/deps/uv/src/unix/darwin-proctitle.c index c3171a6..56c1417 100644 --- a/deps/uv/src/unix/darwin-proctitle.c +++ b/deps/uv/src/unix/darwin-proctitle.c @@ -28,7 +28,7 @@ int uv__set_process_title(const char* title) { #if TARGET_OS_IPHONE - return -1; + return -ENOSYS; #else typedef CFTypeRef (*LSGetCurrentApplicationASNType)(void); typedef OSStatus (*LSSetApplicationInformationItemType)(int, @@ -49,27 +49,27 @@ int uv__set_process_title(const char* title) { CFBundleGetBundleWithIdentifier(CFSTR("com.apple.LaunchServices")); if (launch_services_bundle == NULL) - return -1; + return -ENOENT; ls_get_current_application_asn = (LSGetCurrentApplicationASNType) CFBundleGetFunctionPointerForName(launch_services_bundle, CFSTR("_LSGetCurrentApplicationASN")); if (ls_get_current_application_asn == NULL) - return -1; + return -ENOENT; ls_set_application_information_item = (LSSetApplicationInformationItemType) CFBundleGetFunctionPointerForName(launch_services_bundle, CFSTR("_LSSetApplicationInformationItem")); if (ls_set_application_information_item == NULL) - return -1; + return -ENOENT; display_name_key = CFBundleGetDataPointerForName(launch_services_bundle, CFSTR("_kLSDisplayNameKey")); if (display_name_key == NULL || *display_name_key == NULL) - return -1; + return -ENOENT; /* Force the process manager to initialize. */ GetCurrentProcess(&psn); @@ -81,7 +81,9 @@ int uv__set_process_title(const char* title) { *display_name_key, display_name, NULL); + if (err != noErr) + return -ENOENT; - return (err == noErr) ? 0 : -1; + return 0; #endif /* !TARGET_OS_IPHONE */ } diff --git a/deps/uv/src/unix/darwin.c b/deps/uv/src/unix/darwin.c index f57b12c..e716cfb 100644 --- a/deps/uv/src/unix/darwin.c +++ b/deps/uv/src/unix/darwin.c @@ -54,7 +54,7 @@ int uv__platform_loop_init(uv_loop_t* loop, int default_loop) { int r; if (uv__kqueue_init(loop)) - return -1; + return -errno; loop->cf_loop = NULL; if ((r = uv_mutex_init(&loop->cf_mutex))) @@ -194,9 +194,8 @@ int uv_exepath(char* buffer, size_t* size) { char* path; char* fullpath; - if (!buffer || !size) { - return -1; - } + if (buffer == NULL || size == NULL) + return -EINVAL; usize = *size; result = _NSGetExecutablePath(buffer, &usize); @@ -204,10 +203,9 @@ int uv_exepath(char* buffer, size_t* size) { path = (char*)malloc(2 * PATH_MAX); fullpath = realpath(buffer, path); - if (fullpath == NULL) { - free(path); - return -1; + SAVE_ERRNO(free(path)); + return -errno; } strncpy(buffer, fullpath, *size); @@ -223,7 +221,7 @@ uint64_t uv_get_free_memory(void) { if (host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)&info, &count) != KERN_SUCCESS) { - return -1; + return -EINVAL; /* FIXME(bnoordhuis) Translate error. */ } return (uint64_t) info.free_count * sysconf(_SC_PAGESIZE); @@ -235,9 +233,8 @@ uint64_t uv_get_total_memory(void) { int which[] = {CTL_HW, HW_MEMSIZE}; size_t size = sizeof(info); - if (sysctl(which, 2, &info, &size, NULL, 0) < 0) { - return -1; - } + if (sysctl(which, 2, &info, &size, NULL, 0)) + return -errno; return (uint64_t) info; } @@ -256,7 +253,7 @@ void uv_loadavg(double avg[3]) { } -uv_err_t uv_resident_set_memory(size_t* rss) { +int uv_resident_set_memory(size_t* rss) { mach_msg_type_number_t count; task_basic_info_data_t info; kern_return_t err; @@ -273,27 +270,26 @@ uv_err_t uv_resident_set_memory(size_t* rss) { assert(err == KERN_SUCCESS); *rss = info.resident_size; - return uv_ok_; + return 0; } -uv_err_t uv_uptime(double* uptime) { +int uv_uptime(double* uptime) { time_t now; struct timeval info; size_t size = sizeof(info); static int which[] = {CTL_KERN, KERN_BOOTTIME}; - if (sysctl(which, 2, &info, &size, NULL, 0) < 0) { - return uv__new_sys_error(errno); - } - now = time(NULL); + if (sysctl(which, 2, &info, &size, NULL, 0)) + return -errno; - *uptime = (double)(now - info.tv_sec); + now = time(NULL); + *uptime = now - info.tv_sec; - return uv_ok_; + return 0; } -uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { unsigned int ticks = (unsigned int)sysconf(_SC_CLK_TCK), multiplier = ((uint64_t)1000L / ticks); char model[512]; @@ -306,25 +302,24 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { uv_cpu_info_t* cpu_info; size = sizeof(model); - if (sysctlbyname("machdep.cpu.brand_string", &model, &size, NULL, 0) < 0 && - sysctlbyname("hw.model", &model, &size, NULL, 0) < 0) { - return uv__new_sys_error(errno); + if (sysctlbyname("machdep.cpu.brand_string", &model, &size, NULL, 0) && + sysctlbyname("hw.model", &model, &size, NULL, 0)) { + return -errno; } + size = sizeof(cpuspeed); - if (sysctlbyname("hw.cpufrequency", &cpuspeed, &size, NULL, 0) < 0) { - return uv__new_sys_error(errno); - } + if (sysctlbyname("hw.cpufrequency", &cpuspeed, &size, NULL, 0)) + return -errno; if (host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &numcpus, (processor_info_array_t*)&info, &msg_type) != KERN_SUCCESS) { - return uv__new_sys_error(errno); + return -EINVAL; /* FIXME(bnoordhuis) Translate error. */ } - *cpu_infos = (uv_cpu_info_t*)malloc(numcpus * sizeof(uv_cpu_info_t)); - if (!(*cpu_infos)) { - return uv__new_artificial_error(UV_ENOMEM); - } + *cpu_infos = malloc(numcpus * sizeof(**cpu_infos)); + if (!(*cpu_infos)) + return -ENOMEM; /* FIXME(bnoordhuis) Deallocate info? */ *count = numcpus; @@ -342,7 +337,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { } vm_deallocate(mach_task_self(), (vm_address_t)info, msg_type); - return uv_ok_; + return 0; } @@ -357,15 +352,12 @@ void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) { } -uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, - int* count) { +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { struct ifaddrs *addrs, *ent; - char ip[INET6_ADDRSTRLEN]; uv_interface_address_t* address; - if (getifaddrs(&addrs) != 0) { - return uv__new_sys_error(errno); - } + if (getifaddrs(&addrs)) + return -errno; *count = 0; @@ -380,16 +372,13 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, (*count)++; } - *addresses = (uv_interface_address_t*) - malloc(*count * sizeof(uv_interface_address_t)); - if (!(*addresses)) { - return uv__new_artificial_error(UV_ENOMEM); - } + *addresses = malloc(*count * sizeof(**addresses)); + if (!(*addresses)) + return -ENOMEM; address = *addresses; for (ent = addrs; ent != NULL; ent = ent->ifa_next) { - bzero(&ip, sizeof (ip)); if (!(ent->ifa_flags & IFF_UP && ent->ifa_flags & IFF_RUNNING)) { continue; } @@ -427,7 +416,7 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, freeifaddrs(addrs); - return uv_ok_; + return 0; } diff --git a/deps/uv/src/unix/error.c b/deps/uv/src/unix/error.c deleted file mode 100644 index 74e1bac..0000000 --- a/deps/uv/src/unix/error.c +++ /dev/null @@ -1,88 +0,0 @@ -/* 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. - */ - -/* - * TODO Share this code with Windows. - * See https://github.com/joyent/libuv/issues/76 - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include - - -uv_err_code uv_translate_sys_error(int sys_errno) { - switch (sys_errno) { - case 0: return UV_OK; - case EIO: return UV_EIO; - case EPERM: return UV_EPERM; - case ENOSYS: return UV_ENOSYS; - case ENOTSOCK: return UV_ENOTSOCK; - case ENOENT: return UV_ENOENT; - case EACCES: return UV_EACCES; - case EAFNOSUPPORT: return UV_EAFNOSUPPORT; - case EBADF: return UV_EBADF; - case EPIPE: return UV_EPIPE; - case ESPIPE: return UV_ESPIPE; - case EAGAIN: return UV_EAGAIN; -#if EWOULDBLOCK != EAGAIN - case EWOULDBLOCK: return UV_EAGAIN; -#endif - case ECONNRESET: return UV_ECONNRESET; - case EFAULT: return UV_EFAULT; - case EMFILE: return UV_EMFILE; - case EMSGSIZE: return UV_EMSGSIZE; - case ENAMETOOLONG: return UV_ENAMETOOLONG; - case EINVAL: return UV_EINVAL; - case ENETDOWN: return UV_ENETDOWN; - case ENETUNREACH: return UV_ENETUNREACH; - case ECONNABORTED: return UV_ECONNABORTED; - case ELOOP: return UV_ELOOP; - case ECONNREFUSED: return UV_ECONNREFUSED; - case EADDRINUSE: return UV_EADDRINUSE; - case EADDRNOTAVAIL: return UV_EADDRNOTAVAIL; - case ENOTDIR: return UV_ENOTDIR; - case EISDIR: return UV_EISDIR; - case ENODEV: return UV_ENODEV; - case ENOTCONN: return UV_ENOTCONN; - case EEXIST: return UV_EEXIST; - case EHOSTUNREACH: return UV_EHOSTUNREACH; - case EAI_NONAME: return UV_ENOENT; - case ESRCH: return UV_ESRCH; - case ETIMEDOUT: return UV_ETIMEDOUT; - case EXDEV: return UV_EXDEV; - case EBUSY: return UV_EBUSY; -#if ENOTEMPTY != EEXIST - case ENOTEMPTY: return UV_ENOTEMPTY; -#endif - case ENOSPC: return UV_ENOSPC; - case EROFS: return UV_EROFS; - case ENOMEM: return UV_ENOMEM; - case EDQUOT: return UV_ENOSPC; - default: return UV_UNKNOWN; - } - UNREACHABLE(); -} diff --git a/deps/uv/src/unix/freebsd.c b/deps/uv/src/unix/freebsd.c index 44b1ef3..afdc409 100644 --- a/deps/uv/src/unix/freebsd.c +++ b/deps/uv/src/unix/freebsd.c @@ -74,9 +74,8 @@ int uv_exepath(char* buffer, size_t* size) { int mib[4]; size_t cb; - if (!buffer || !size) { - return -1; - } + if (buffer == NULL || size == NULL) + return -EINVAL; #ifdef __DragonFly__ mib[0] = CTL_KERN; @@ -91,10 +90,8 @@ int uv_exepath(char* buffer, size_t* size) { #endif cb = *size; - if (sysctl(mib, 4, buffer, &cb, NULL, 0) < 0) { - *size = 0; - return -1; - } + if (sysctl(mib, 4, buffer, &cb, NULL, 0)) + return -errno; *size = strlen(buffer); return 0; @@ -105,10 +102,9 @@ uint64_t uv_get_free_memory(void) { int freecount; size_t size = sizeof(freecount); - if(sysctlbyname("vm.stats.vm.v_free_count", - &freecount, &size, NULL, 0) == -1){ - return -1; - } + if (sysctlbyname("vm.stats.vm.v_free_count", &freecount, &size, NULL, 0)) + return -errno; + return (uint64_t) freecount * sysconf(_SC_PAGESIZE); } @@ -120,9 +116,8 @@ uint64_t uv_get_total_memory(void) { size_t size = sizeof(info); - if (sysctl(which, 2, &info, &size, NULL, 0) < 0) { - return -1; - } + if (sysctl(which, 2, &info, &size, NULL, 0)) + return -errno; return (uint64_t) info; } @@ -147,7 +142,7 @@ char** uv_setup_args(int argc, char** argv) { } -uv_err_t uv_set_process_title(const char* title) { +int uv_set_process_title(const char* title) { int oid[4]; if (process_title) free(process_title); @@ -165,11 +160,11 @@ uv_err_t uv_set_process_title(const char* title) { process_title, strlen(process_title) + 1); - return uv_ok_; + return 0; } -uv_err_t uv_get_process_title(char* buffer, size_t size) { +int uv_get_process_title(char* buffer, size_t size) { if (process_title) { strncpy(buffer, process_title, size); } else { @@ -178,11 +173,11 @@ uv_err_t uv_get_process_title(char* buffer, size_t size) { } } - return uv_ok_; + return 0; } -uv_err_t uv_resident_set_memory(size_t* rss) { +int uv_resident_set_memory(size_t* rss) { kvm_t *kd = NULL; struct kinfo_proc *kinfo = NULL; pid_t pid; @@ -205,32 +200,31 @@ uv_err_t uv_resident_set_memory(size_t* rss) { kvm_close(kd); - return uv_ok_; + return 0; error: if (kd) kvm_close(kd); - return uv__new_sys_error(errno); + return -EPERM; } -uv_err_t uv_uptime(double* uptime) { +int uv_uptime(double* uptime) { time_t now; struct timeval info; size_t size = sizeof(info); static int which[] = {CTL_KERN, KERN_BOOTTIME}; - if (sysctl(which, 2, &info, &size, NULL, 0) < 0) { - return uv__new_sys_error(errno); - } + if (sysctl(which, 2, &info, &size, NULL, 0)) + return -errno; now = time(NULL); *uptime = (double)(now - info.tv_sec); - return uv_ok_; + return 0; } -uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { unsigned int ticks = (unsigned int)sysconf(_SC_CLK_TCK), multiplier = ((uint64_t)1000L / ticks), cpuspeed, maxcpus, cur = 0; @@ -256,32 +250,30 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { #endif size = sizeof(model); - if (sysctlbyname("hw.model", &model, &size, NULL, 0) < 0) { - return uv__new_sys_error(errno); - } + if (sysctlbyname("hw.model", &model, &size, NULL, 0)) + return -errno; + size = sizeof(numcpus); - if (sysctlbyname("hw.ncpu", &numcpus, &size, NULL, 0) < 0) { - return uv__new_sys_error(errno); - } + if (sysctlbyname("hw.ncpu", &numcpus, &size, NULL, 0)) + return -errno; - *cpu_infos = (uv_cpu_info_t*)malloc(numcpus * sizeof(uv_cpu_info_t)); - if (!(*cpu_infos)) { - return uv__new_artificial_error(UV_ENOMEM); - } + *cpu_infos = malloc(numcpus * sizeof(**cpu_infos)); + if (!(*cpu_infos)) + return -ENOMEM; *count = numcpus; size = sizeof(cpuspeed); - if (sysctlbyname("hw.clockrate", &cpuspeed, &size, NULL, 0) < 0) { - free(*cpu_infos); - return uv__new_sys_error(errno); + if (sysctlbyname("hw.clockrate", &cpuspeed, &size, NULL, 0)) { + SAVE_ERRNO(free(*cpu_infos)); + return -errno; } /* kern.cp_times on FreeBSD i386 gives an array up to maxcpus instead of ncpu */ size = sizeof(maxcpus); - if (sysctlbyname(maxcpus_key, &maxcpus, &size, NULL, 0) < 0) { - free(*cpu_infos); - return uv__new_sys_error(errno); + if (sysctlbyname(maxcpus_key, &maxcpus, &size, NULL, 0)) { + SAVE_ERRNO(free(*cpu_infos)); + return -errno; } size = maxcpus * CPUSTATES * sizeof(long); @@ -289,13 +281,13 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { cp_times = malloc(size); if (cp_times == NULL) { free(*cpu_infos); - return uv__new_sys_error(ENOMEM); + return -ENOMEM; } - if (sysctlbyname(cptimes_key, cp_times, &size, NULL, 0) < 0) { - free(cp_times); - free(*cpu_infos); - return uv__new_sys_error(errno); + if (sysctlbyname(cptimes_key, cp_times, &size, NULL, 0)) { + SAVE_ERRNO(free(cp_times)); + SAVE_ERRNO(free(*cpu_infos)); + return -errno; } for (i = 0; i < numcpus; i++) { @@ -314,7 +306,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { } free(cp_times); - return uv_ok_; + return 0; } @@ -329,12 +321,11 @@ void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) { } -uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, - int* count) { +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { /* TODO: implement */ *addresses = NULL; *count = 0; - return uv_ok_; + return 0; } diff --git a/deps/uv/src/unix/fs.c b/deps/uv/src/unix/fs.c index 7fb2763..150ce1b 100644 --- a/deps/uv/src/unix/fs.c +++ b/deps/uv/src/unix/fs.c @@ -19,6 +19,13 @@ * IN THE SOFTWARE. */ +/* Caveat emptor: this file deviates from the libuv convention of returning + * negated errno codes. Most uv_fs_*() functions map directly to the system + * call of the same name. For more complex wrappers, it's easier to just + * return -1 with errno set. The dispatcher in uv__fs_work() takes care of + * getting the errno to the right place (req->result or as the return value.) + */ + #include "uv.h" #include "internal.h" @@ -48,7 +55,6 @@ do { \ uv__req_init((loop), (req), UV_FS); \ (req)->fs_type = UV_FS_ ## type; \ - (req)->errorno = 0; \ (req)->result = 0; \ (req)->ptr = NULL; \ (req)->loop = loop; \ @@ -60,8 +66,9 @@ #define PATH \ do { \ - if (NULL == ((req)->path = strdup((path)))) \ - return uv__set_sys_error((loop), ENOMEM); \ + (req)->path = strdup(path); \ + if ((req)->path == NULL) \ + return -ENOMEM; \ } \ while (0) @@ -69,13 +76,11 @@ do { \ size_t path_len; \ size_t new_path_len; \ - \ path_len = strlen((path)) + 1; \ new_path_len = strlen((new_path)) + 1; \ - \ - if (NULL == ((req)->path = malloc(path_len + new_path_len))) \ - return uv__set_sys_error((loop), ENOMEM); \ - \ + (req)->path = malloc(path_len + new_path_len); \ + if ((req)->path == NULL) \ + return -ENOMEM; \ (req)->new_path = (req)->path + path_len; \ memcpy((void*) (req)->path, (path), path_len); \ memcpy((void*) (req)->new_path, (new_path), new_path_len); \ @@ -519,6 +524,10 @@ static void uv__to_stat(struct stat* src, uv_stat_t* dst) { dst->st_mtim.tv_nsec = src->st_mtimespec.tv_nsec; dst->st_ctim.tv_sec = src->st_ctimespec.tv_sec; dst->st_ctim.tv_nsec = src->st_ctimespec.tv_nsec; + dst->st_birthtim.tv_sec = src->st_birthtimespec.tv_sec; + dst->st_birthtim.tv_nsec = src->st_birthtimespec.tv_nsec; + dst->st_flags = src->st_flags; + dst->st_gen = src->st_gen; #elif defined(_BSD_SOURCE) || defined(_SVID_SOURCE) || defined(_XOPEN_SOURCE) dst->st_atim.tv_sec = src->st_atim.tv_sec; dst->st_atim.tv_nsec = src->st_atim.tv_nsec; @@ -526,6 +535,20 @@ static void uv__to_stat(struct stat* src, uv_stat_t* dst) { dst->st_mtim.tv_nsec = src->st_mtim.tv_nsec; dst->st_ctim.tv_sec = src->st_ctim.tv_sec; dst->st_ctim.tv_nsec = src->st_ctim.tv_nsec; +# if defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__OpenBSD__) || \ + defined(__NetBSD__) + dst->st_birthtim.tv_sec = src->st_birthtim.tv_sec; + dst->st_birthtim.tv_nsec = src->st_birthtim.tv_nsec; + dst->st_flags = src->st_flags; + dst->st_gen = src->st_gen; +# else + dst->st_birthtim.tv_sec = src->st_ctim.tv_sec; + dst->st_birthtim.tv_nsec = src->st_ctim.tv_nsec; + dst->st_flags = 0; + dst->st_gen = 0; +# endif #else dst->st_atim.tv_sec = src->st_atime; dst->st_atim.tv_nsec = 0; @@ -533,6 +556,10 @@ static void uv__to_stat(struct stat* src, uv_stat_t* dst) { dst->st_mtim.tv_nsec = 0; dst->st_ctim.tv_sec = src->st_ctime; dst->st_ctim.tv_nsec = 0; + dst->st_birthtim.tv_sec = src->st_ctime; + dst->st_birthtim.tv_nsec = 0; + dst->st_flags = 0; + dst->st_gen = 0; #endif } @@ -613,8 +640,10 @@ static void uv__fs_work(struct uv__work* w) { } while (r == -1 && errno == EINTR && retry_on_eintr); - req->errorno = errno; - req->result = r; + if (r == -1) + req->result = -errno; + else + req->result = r; if (r == 0 && (req->fs_type == UV_FS_STAT || req->fs_type == UV_FS_FSTAT || @@ -630,15 +659,9 @@ static void uv__fs_done(struct uv__work* w, int status) { req = container_of(w, uv_fs_t, work_req); uv__req_unregister(req->loop, req); - if (req->errorno != 0) { - req->errorno = uv_translate_sys_error(req->errorno); - uv__set_artificial_error(req->loop, req->errorno); - } - - if (status == -UV_ECANCELED) { - assert(req->errorno == 0); - req->errorno = UV_ECANCELED; - uv__set_artificial_error(req->loop, UV_ECANCELED); + if (status == -ECANCELED) { + assert(req->result == 0); + req->result = -ECANCELED; } if (req->cb != NULL) diff --git a/deps/uv/src/unix/fsevents.c b/deps/uv/src/unix/fsevents.c index e33015d..ef9a352 100644 --- a/deps/uv/src/unix/fsevents.c +++ b/deps/uv/src/unix/fsevents.c @@ -248,7 +248,7 @@ int uv__fsevents_init(uv_fs_event_t* handle) { */ handle->cf_cb = malloc(sizeof(*handle->cf_cb)); if (handle->cf_cb == NULL) - return uv__set_sys_error(handle->loop, ENOMEM); + return -ENOMEM; handle->cf_cb->data = handle; uv_async_init(handle->loop, handle->cf_cb, uv__fsevents_cb); @@ -267,7 +267,7 @@ int uv__fsevents_init(uv_fs_event_t* handle) { int uv__fsevents_close(uv_fs_event_t* handle) { if (handle->cf_eventstream == NULL) - return -1; + return -EINVAL; /* Ensure that event stream was scheduled */ uv_sem_wait(&handle->cf_sem); diff --git a/deps/uv/src/unix/getaddrinfo.c b/deps/uv/src/unix/getaddrinfo.c index 994e0f3..1db0068 100644 --- a/deps/uv/src/unix/getaddrinfo.c +++ b/deps/uv/src/unix/getaddrinfo.c @@ -28,19 +28,18 @@ static void uv__getaddrinfo_work(struct uv__work* w) { - uv_getaddrinfo_t* req = container_of(w, uv_getaddrinfo_t, work_req); + uv_getaddrinfo_t* req; + int err; - req->retcode = getaddrinfo(req->hostname, - req->service, - req->hints, - &req->res); + req = container_of(w, uv_getaddrinfo_t, work_req); + err = getaddrinfo(req->hostname, req->service, req->hints, &req->res); + req->retcode = uv__getaddrinfo_translate_error(err); } static void uv__getaddrinfo_done(struct uv__work* w, int status) { uv_getaddrinfo_t* req; struct addrinfo *res; - size_t hostlen; req = container_of(w, uv_getaddrinfo_t, work_req); uv__req_unregister(req->loop, req); @@ -48,13 +47,6 @@ static void uv__getaddrinfo_done(struct uv__work* w, int status) { res = req->res; req->res = NULL; - (void) &hostlen; /* Silence unused variable warning. */ - hostlen = 0; -#if defined(__sun) - if (req->hostname != NULL) - hostlen = strlen(req->hostname); -#endif - /* See initialization in uv_getaddrinfo(). */ if (req->hints) free(req->hints); @@ -69,35 +61,12 @@ static void uv__getaddrinfo_done(struct uv__work* w, int status) { req->service = NULL; req->hostname = NULL; - if (status == -UV_ECANCELED) { + if (status == -ECANCELED) { assert(req->retcode == 0); - req->retcode = UV_ECANCELED; - uv__set_artificial_error(req->loop, UV_ECANCELED); - req->cb(req, -1, NULL); - return; - } - - if (req->retcode == 0) { - req->cb(req, 0, res); - return; - } - - if (req->retcode == EAI_NONAME) - uv__set_sys_error(req->loop, ENOENT); -#if defined(EAI_NODATA) /* Newer FreeBSDs don't have EAI_NODATA. */ - else if (req->retcode == EAI_NODATA) - uv__set_sys_error(req->loop, ENOENT); -#endif -#if defined(__sun) - else if (req->retcode == EAI_MEMORY && hostlen >= MAXHOSTNAMELEN) - uv__set_sys_error(req->loop, ENOENT); -#endif - else { - req->loop->last_err.code = UV_EADDRINFO; - req->loop->last_err.sys_errno_ = req->retcode; + req->retcode = UV_EAI_CANCELED; } - req->cb(req, -1, res); + req->cb(req, req->retcode, res); } @@ -114,7 +83,7 @@ int uv_getaddrinfo(uv_loop_t* loop, char* buf; if (req == NULL || cb == NULL || (hostname == NULL && service == NULL)) - return uv__set_artificial_error(loop, UV_EINVAL); + return -EINVAL; hostname_len = hostname ? strlen(hostname) + 1 : 0; service_len = service ? strlen(service) + 1 : 0; @@ -122,7 +91,7 @@ int uv_getaddrinfo(uv_loop_t* loop, buf = malloc(hostname_len + service_len + hints_len); if (buf == NULL) - return uv__set_artificial_error(loop, UV_ENOMEM); + return -ENOMEM; uv__req_init(loop, req, UV_GETADDRINFO); req->loop = loop; diff --git a/deps/uv/src/unix/internal.h b/deps/uv/src/unix/internal.h index 9b593d9..2c4e3e9 100644 --- a/deps/uv/src/unix/internal.h +++ b/deps/uv/src/unix/internal.h @@ -142,9 +142,6 @@ void uv__run_idle(uv_loop_t* loop); void uv__run_check(uv_loop_t* loop); void uv__run_prepare(uv_loop_t* loop); -/* error */ -uv_err_code uv_translate_sys_error(int sys_errno); - /* stream */ void uv__stream_init(uv_loop_t* loop, uv_stream_t* stream, uv_handle_type type); diff --git a/deps/uv/src/unix/kqueue.c b/deps/uv/src/unix/kqueue.c index fa40f61..f23391f 100644 --- a/deps/uv/src/unix/kqueue.c +++ b/deps/uv/src/unix/kqueue.c @@ -39,9 +39,8 @@ static void uv__fs_event(uv_loop_t* loop, uv__io_t* w, unsigned int fflags); int uv__kqueue_init(uv_loop_t* loop) { loop->backend_fd = kqueue(); - if (loop->backend_fd == -1) - return -1; + return -errno; uv__cloexec(loop->backend_fd, 1); @@ -308,10 +307,9 @@ int uv_fs_event_init(uv_loop_t* loop, int fd; /* TODO open asynchronously - but how do we report back errors? */ - if ((fd = open(filename, O_RDONLY)) == -1) { - uv__set_sys_error(loop, errno); - return -1; - } + fd = open(filename, O_RDONLY); + if (fd == -1) + return -errno; uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT); uv__handle_start(handle); /* FIXME shouldn't start automatically */ diff --git a/deps/uv/src/unix/linux-core.c b/deps/uv/src/unix/linux-core.c index f18da7a..8365ea8 100644 --- a/deps/uv/src/unix/linux-core.c +++ b/deps/uv/src/unix/linux-core.c @@ -86,7 +86,7 @@ int uv__platform_loop_init(uv_loop_t* loop, int default_loop) { loop->inotify_watchers = NULL; if (fd == -1) - return -1; + return -errno; return 0; } @@ -263,12 +263,13 @@ void uv_loadavg(double avg[3]) { int uv_exepath(char* buffer, size_t* size) { ssize_t n; - if (!buffer || !size) { - return -1; - } + if (buffer == NULL || size == NULL) + return -EINVAL; n = readlink("/proc/self/exe", buffer, *size - 1); - if (n <= 0) return -1; + if (n == -1) + return -errno; + buffer[n] = '\0'; *size = n; @@ -286,7 +287,7 @@ uint64_t uv_get_total_memory(void) { } -uv_err_t uv_resident_set_memory(size_t* rss) { +int uv_resident_set_memory(size_t* rss) { char buf[1024]; const char* s; ssize_t n; @@ -299,7 +300,7 @@ uv_err_t uv_resident_set_memory(size_t* rss) { while (fd == -1 && errno == EINTR); if (fd == -1) - return uv__new_sys_error(errno); + return -errno; do n = read(fd, buf, sizeof(buf) - 1); @@ -307,7 +308,7 @@ uv_err_t uv_resident_set_memory(size_t* rss) { SAVE_ERRNO(close(fd)); if (n == -1) - return uv__new_sys_error(errno); + return -errno; buf[n] = '\0'; s = strchr(buf, ' '); @@ -336,14 +337,14 @@ uv_err_t uv_resident_set_memory(size_t* rss) { goto err; *rss = val * getpagesize(); - return uv_ok_; + return 0; err: - return uv__new_artificial_error(UV_EINVAL); + return -EINVAL; } -uv_err_t uv_uptime(double* uptime) { +int uv_uptime(double* uptime) { static volatile int no_clock_boottime; struct timespec now; int r; @@ -361,17 +362,18 @@ uv_err_t uv_uptime(double* uptime) { } if (r) - return uv__new_sys_error(errno); + return -errno; *uptime = now.tv_sec; *uptime += (double)now.tv_nsec / 1000000000.0; - return uv_ok_; + return 0; } -uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { unsigned int numcpus; uv_cpu_info_t* ci; + int err; *cpu_infos = NULL; *count = 0; @@ -382,16 +384,15 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { ci = calloc(numcpus, sizeof(*ci)); if (ci == NULL) - return uv__new_sys_error(ENOMEM); + return -ENOMEM; - if (read_models(numcpus, ci)) { - SAVE_ERRNO(uv_free_cpu_info(ci, numcpus)); - return uv__new_sys_error(errno); - } + err = read_models(numcpus, ci); + if (err == 0) + err = read_times(numcpus, ci); - if (read_times(numcpus, ci)) { - SAVE_ERRNO(uv_free_cpu_info(ci, numcpus)); - return uv__new_sys_error(errno); + if (err) { + uv_free_cpu_info(ci, numcpus); + return err; } /* read_models() on x86 also reads the CPU speed from /proc/cpuinfo. @@ -403,7 +404,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { *cpu_infos = ci; *count = numcpus; - return uv_ok_; + return 0; } @@ -447,7 +448,7 @@ static int read_models(unsigned int numcpus, uv_cpu_info_t* ci) { defined(__x86_64__) fp = fopen("/proc/cpuinfo", "r"); if (fp == NULL) - return -1; + return -errno; while (fgets(buf, sizeof(buf), fp)) { if (model_idx < numcpus) { @@ -456,7 +457,7 @@ static int read_models(unsigned int numcpus, uv_cpu_info_t* ci) { model = strndup(model, strlen(model) - 1); /* Strip newline. */ if (model == NULL) { fclose(fp); - return -1; + return -ENOMEM; } ci[model_idx++].model = model; continue; @@ -475,7 +476,7 @@ static int read_models(unsigned int numcpus, uv_cpu_info_t* ci) { model = strndup(model, strlen(model) - 1); /* Strip newline. */ if (model == NULL) { fclose(fp); - return -1; + return -ENOMEM; } ci[model_idx++].model = model; continue; @@ -505,7 +506,7 @@ static int read_models(unsigned int numcpus, uv_cpu_info_t* ci) { while (model_idx < numcpus) { model = strndup(inferred_model, strlen(inferred_model)); if (model == NULL) - return -1; + return -ENOMEM; ci[model_idx++].model = model; } @@ -533,7 +534,7 @@ static int read_times(unsigned int numcpus, uv_cpu_info_t* ci) { fp = fopen("/proc/stat", "r"); if (fp == NULL) - return -1; + return -errno; if (!fgets(buf, sizeof(buf), fp)) abort(); @@ -617,18 +618,17 @@ void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) { } -uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { #ifndef HAVE_IFADDRS_H - return uv__new_artificial_error(UV_ENOSYS); + return -ENOSYS; #else struct ifaddrs *addrs, *ent; char ip[INET6_ADDRSTRLEN]; uv_interface_address_t* address; - if (getifaddrs(&addrs) != 0) { - return uv__new_sys_error(errno); - } + if (getifaddrs(&addrs)) + return -errno; *count = 0; @@ -643,11 +643,9 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, (*count)++; } - *addresses = (uv_interface_address_t*) - malloc(*count * sizeof(uv_interface_address_t)); - if (!(*addresses)) { - return uv__new_artificial_error(UV_ENOMEM); - } + *addresses = malloc(*count * sizeof(**addresses)); + if (!(*addresses)) + return -ENOMEM; address = *addresses; @@ -690,7 +688,7 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, freeifaddrs(addrs); - return uv_ok_; + return 0; #endif } diff --git a/deps/uv/src/unix/linux-inotify.c b/deps/uv/src/unix/linux-inotify.c index af02424..4bf30db 100644 --- a/deps/uv/src/unix/linux-inotify.c +++ b/deps/uv/src/unix/linux-inotify.c @@ -62,20 +62,27 @@ static void uv__inotify_read(uv_loop_t* loop, static int new_inotify_fd(void) { + int err; int fd; fd = uv__inotify_init1(UV__IN_NONBLOCK | UV__IN_CLOEXEC); if (fd != -1) return fd; + if (errno != ENOSYS) - return -1; + return -errno; + + fd = uv__inotify_init(); + if (fd == -1) + return -errno; - if ((fd = uv__inotify_init()) == -1) - return -1; + err = uv__cloexec(fd, 1); + if (err == 0) + err = uv__nonblock(fd, 1); - if (uv__cloexec(fd, 1) || uv__nonblock(fd, 1)) { - SAVE_ERRNO(close(fd)); - return -1; + if (err) { + close(fd); + return err; } return fd; @@ -83,15 +90,16 @@ static int new_inotify_fd(void) { static int init_inotify(uv_loop_t* loop) { + int err; + if (loop->inotify_fd != -1) return 0; - loop->inotify_fd = new_inotify_fd(); - if (loop->inotify_fd == -1) { - uv__set_sys_error(loop, errno); - return -1; - } + err = new_inotify_fd(); + if (err < 0) + return err; + loop->inotify_fd = err; uv__io_init(&loop->inotify_read_watcher, uv__inotify_read, loop->inotify_fd); uv__io_start(loop, &loop->inotify_read_watcher, UV__POLLIN); @@ -167,9 +175,12 @@ int uv_fs_event_init(uv_loop_t* loop, int flags) { struct watcher_list* w; int events; + int err; int wd; - if (init_inotify(loop)) return -1; + err = init_inotify(loop); + if (err) + return err; events = UV__IN_ATTRIB | UV__IN_CREATE @@ -182,7 +193,7 @@ int uv_fs_event_init(uv_loop_t* loop, wd = uv__inotify_add_watch(loop->inotify_fd, path, events); if (wd == -1) - return uv__set_sys_error(loop, errno); + return -errno; w = find_watcher(loop, wd); if (w) @@ -190,7 +201,7 @@ int uv_fs_event_init(uv_loop_t* loop, w = malloc(sizeof(*w) + strlen(path) + 1); if (w == NULL) - return uv__set_sys_error(loop, ENOMEM); + return -ENOMEM; w->wd = wd; w->path = strcpy((char*)(w + 1), path); diff --git a/deps/uv/src/unix/loop-watcher.c b/deps/uv/src/unix/loop-watcher.c index 4681beb..dc03c20 100644 --- a/deps/uv/src/unix/loop-watcher.c +++ b/deps/uv/src/unix/loop-watcher.c @@ -31,8 +31,7 @@ \ int uv_##name##_start(uv_##name##_t* handle, uv_##name##_cb cb) { \ if (uv__is_active(handle)) return 0; \ - if (cb == NULL) \ - return uv__set_artificial_error(handle->loop, UV_EINVAL); \ + if (cb == NULL) return -EINVAL; \ QUEUE_INSERT_HEAD(&handle->loop->name##_handles, &handle->queue); \ handle->name##_cb = cb; \ uv__handle_start(handle); \ diff --git a/deps/uv/src/unix/loop.c b/deps/uv/src/unix/loop.c index a28cd28..1ed5b8d 100644 --- a/deps/uv/src/unix/loop.c +++ b/deps/uv/src/unix/loop.c @@ -29,6 +29,7 @@ int uv__loop_init(uv_loop_t* loop, int default_loop) { unsigned int i; + int err; uv__signal_global_once_init(); @@ -59,8 +60,9 @@ int uv__loop_init(uv_loop_t* loop, int default_loop) { loop->timer_counter = 0; loop->stop_flag = 0; - if (uv__platform_loop_init(loop, default_loop)) - return -1; + err = uv__platform_loop_init(loop, default_loop); + if (err) + return err; uv_signal_init(loop, &loop->child_watcher); uv__handle_unref(&loop->child_watcher); diff --git a/deps/uv/src/unix/netbsd.c b/deps/uv/src/unix/netbsd.c index b0b35b2..8c7197e 100644 --- a/deps/uv/src/unix/netbsd.c +++ b/deps/uv/src/unix/netbsd.c @@ -81,9 +81,8 @@ int uv_exepath(char* buffer, size_t* size) { size_t cb; pid_t mypid; - if (!buffer || !size) { - return -1; - } + if (buffer == NULL || size == NULL) + return -EINVAL; mypid = getpid(); mib[0] = CTL_KERN; @@ -92,10 +91,8 @@ int uv_exepath(char* buffer, size_t* size) { mib[3] = KERN_PROC_ARGV; cb = *size; - if (sysctl(mib, 4, buffer, &cb, NULL, 0) == -1) { - *size = 0; - return -1; - } + if (sysctl(mib, 4, buffer, &cb, NULL, 0)) + return -errno; *size = strlen(buffer); return 0; @@ -107,9 +104,8 @@ uint64_t uv_get_free_memory(void) { size_t size = sizeof(info); int which[] = {CTL_VM, VM_UVMEXP}; - if (sysctl(which, 2, &info, &size, NULL, 0) == -1) { - return -1; - } + if (sysctl(which, 2, &info, &size, NULL, 0)) + return -errno; return (uint64_t) info.free * sysconf(_SC_PAGESIZE); } @@ -125,9 +121,8 @@ uint64_t uv_get_total_memory(void) { #endif size_t size = sizeof(info); - if (sysctl(which, 2, &info, &size, NULL, 0) == -1) { - return -1; - } + if (sysctl(which, 2, &info, &size, NULL, 0)) + return -errno; return (uint64_t) info; } @@ -139,17 +134,17 @@ char** uv_setup_args(int argc, char** argv) { } -uv_err_t uv_set_process_title(const char* title) { +int uv_set_process_title(const char* title) { if (process_title) free(process_title); process_title = strdup(title); setproctitle("%s", title); - return uv_ok_; + return 0; } -uv_err_t uv_get_process_title(char* buffer, size_t size) { +int uv_get_process_title(char* buffer, size_t size) { if (process_title) { strncpy(buffer, process_title, size); } else { @@ -158,11 +153,11 @@ uv_err_t uv_get_process_title(char* buffer, size_t size) { } } - return uv_ok_; + return 0; } -uv_err_t uv_resident_set_memory(size_t* rss) { +int uv_resident_set_memory(size_t* rss) { kvm_t *kd = NULL; struct kinfo_proc2 *kinfo = NULL; pid_t pid; @@ -184,32 +179,31 @@ uv_err_t uv_resident_set_memory(size_t* rss) { kvm_close(kd); - return uv_ok_; + return 0; error: if (kd) kvm_close(kd); - return uv__new_sys_error(errno); + return -EPERM; } -uv_err_t uv_uptime(double* uptime) { +int uv_uptime(double* uptime) { time_t now; struct timeval info; size_t size = sizeof(info); static int which[] = {CTL_KERN, KERN_BOOTTIME}; - if (sysctl(which, 2, &info, &size, NULL, 0) == -1) { - return uv__new_sys_error(errno); - } + if (sysctl(which, 2, &info, &size, NULL, 0)) + return -errno; now = time(NULL); *uptime = (double)(now - info.tv_sec); - return uv_ok_; + return 0; } -uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { unsigned int ticks = (unsigned int)sysconf(_SC_CLK_TCK); unsigned int multiplier = ((uint64_t)1000L / ticks); unsigned int cur = 0; @@ -222,37 +216,34 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { int i; size = sizeof(model); - if (sysctlbyname("machdep.cpu_brand", &model, &size, NULL, 0) == -1 && - sysctlbyname("hw.model", &model, &size, NULL, 0) == -1) { - return uv__new_sys_error(errno); + if (sysctlbyname("machdep.cpu_brand", &model, &size, NULL, 0) && + sysctlbyname("hw.model", &model, &size, NULL, 0)) { + return -errno; } size = sizeof(numcpus); - if (sysctlbyname("hw.ncpu", &numcpus, &size, NULL, 0) == -1) { - return uv__new_sys_error(errno); - } + if (sysctlbyname("hw.ncpu", &numcpus, &size, NULL, 0)) + return -errno; *count = numcpus; /* Only i386 and amd64 have machdep.tsc_freq */ size = sizeof(cpuspeed); - if (sysctlbyname("machdep.tsc_freq", &cpuspeed, &size, NULL, 0) == -1) { + if (sysctlbyname("machdep.tsc_freq", &cpuspeed, &size, NULL, 0)) cpuspeed = 0; - } size = numcpus * CPUSTATES * sizeof(*cp_times); cp_times = malloc(size); - if (cp_times == NULL) { - return uv__new_artificial_error(UV_ENOMEM); - } - if (sysctlbyname("kern.cp_time", cp_times, &size, NULL, 0) == -1) { - return uv__new_sys_error(errno); - } + if (cp_times == NULL) + return -ENOMEM; + + if (sysctlbyname("kern.cp_time", cp_times, &size, NULL, 0)) + return -errno; *cpu_infos = malloc(numcpus * sizeof(**cpu_infos)); if (!(*cpu_infos)) { free(cp_times); free(*cpu_infos); - return uv__new_artificial_error(UV_ENOMEM); + return -ENOMEM; } for (i = 0; i < numcpus; i++) { @@ -267,9 +258,10 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { cur += CPUSTATES; } free(cp_times); - return uv_ok_; + return 0; } + void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) { int i; @@ -281,14 +273,13 @@ void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) { } -uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, int* count) { +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { struct ifaddrs *addrs; struct ifaddrs *ent; uv_interface_address_t* address; - if (getifaddrs(&addrs) != 0) { - return uv__new_sys_error(errno); - } + if (getifaddrs(&addrs)) + return -errno; *count = 0; @@ -304,9 +295,8 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, int* count) *addresses = malloc(*count * sizeof(**addresses)); - if (!(*addresses)) { - return uv__new_artificial_error(UV_ENOMEM); - } + if (!(*addresses)) + return -ENOMEM; address = *addresses; @@ -344,7 +334,7 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, int* count) freeifaddrs(addrs); - return uv_ok_; + return 0; } diff --git a/deps/uv/src/unix/openbsd.c b/deps/uv/src/unix/openbsd.c index 4dfcd76..5f112e3 100644 --- a/deps/uv/src/unix/openbsd.c +++ b/deps/uv/src/unix/openbsd.c @@ -79,16 +79,17 @@ int uv_exepath(char* buffer, size_t* size) { size_t argsbuf_size = 100U; size_t exepath_size; pid_t mypid; - int status = -1; + int err; + + if (buffer == NULL || size == NULL) + return -EINVAL; - if (!buffer || !size) { - goto out; - } mypid = getpid(); for (;;) { - if ((argsbuf_tmp = realloc(argsbuf, argsbuf_size)) == NULL) { + err = -ENOMEM; + argsbuf_tmp = realloc(argsbuf, argsbuf_size); + if (argsbuf_tmp == NULL) goto out; - } argsbuf = argsbuf_tmp; mib[0] = CTL_KERN; mib[1] = KERN_PROC_ARGS; @@ -98,25 +99,28 @@ int uv_exepath(char* buffer, size_t* size) { break; } if (errno != ENOMEM) { + err = -errno; goto out; } argsbuf_size *= 2U; } if (argsbuf[0] == NULL) { + err = -EINVAL; /* FIXME(bnoordhuis) More appropriate error. */ goto out; } exepath_size = strlen(argsbuf[0]); if (exepath_size >= *size) { + err = -EINVAL; goto out; } memcpy(buffer, argsbuf[0], exepath_size + 1U); *size = exepath_size; - status = 0; + err = 0; out: free(argsbuf); - return status; + return err; } @@ -125,9 +129,8 @@ uint64_t uv_get_free_memory(void) { size_t size = sizeof(info); int which[] = {CTL_VM, VM_UVMEXP}; - if (sysctl(which, 2, &info, &size, NULL, 0) < 0) { - return -1; - } + if (sysctl(which, 2, &info, &size, NULL, 0)) + return -errno; return (uint64_t) info.free * sysconf(_SC_PAGESIZE); } @@ -138,9 +141,8 @@ uint64_t uv_get_total_memory(void) { int which[] = {CTL_HW, HW_PHYSMEM64}; size_t size = sizeof(info); - if (sysctl(which, 2, &info, &size, NULL, 0) < 0) { - return -1; - } + if (sysctl(which, 2, &info, &size, NULL, 0)) + return -errno; return (uint64_t) info; } @@ -152,15 +154,15 @@ char** uv_setup_args(int argc, char** argv) { } -uv_err_t uv_set_process_title(const char* title) { +int uv_set_process_title(const char* title) { if (process_title) free(process_title); process_title = strdup(title); setproctitle(title); - return uv_ok_; + return 0; } -uv_err_t uv_get_process_title(char* buffer, size_t size) { +int uv_get_process_title(char* buffer, size_t size) { if (process_title) { strncpy(buffer, process_title, size); } else { @@ -169,11 +171,11 @@ uv_err_t uv_get_process_title(char* buffer, size_t size) { } } - return uv_ok_; + return 0; } -uv_err_t uv_resident_set_memory(size_t* rss) { +int uv_resident_set_memory(size_t* rss) { kvm_t *kd = NULL; struct kinfo_proc *kinfo = NULL; pid_t pid; @@ -192,32 +194,31 @@ uv_err_t uv_resident_set_memory(size_t* rss) { kvm_close(kd); - return uv_ok_; + return 0; error: if (kd) kvm_close(kd); - return uv__new_sys_error(errno); + return -EPERM; } -uv_err_t uv_uptime(double* uptime) { +int uv_uptime(double* uptime) { time_t now; struct timeval info; size_t size = sizeof(info); static int which[] = {CTL_KERN, KERN_BOOTTIME}; - if (sysctl(which, 2, &info, &size, NULL, 0) < 0) { - return uv__new_sys_error(errno); - } + if (sysctl(which, 2, &info, &size, NULL, 0)) + return -errno; now = time(NULL); *uptime = (double)(now - info.tv_sec); - return uv_ok_; + return 0; } -uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { unsigned int ticks = (unsigned int)sysconf(_SC_CLK_TCK), multiplier = ((uint64_t)1000L / ticks), cpuspeed; uint64_t info[CPUSTATES]; @@ -229,27 +230,25 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { uv_cpu_info_t* cpu_info; size = sizeof(model); - if (sysctl(which, 2, &model, &size, NULL, 0) < 0) { - return uv__new_sys_error(errno); - } + if (sysctl(which, 2, &model, &size, NULL, 0)) + return -errno; + which[1] = HW_NCPU; size = sizeof(numcpus); - if (sysctl(which, 2, &numcpus, &size, NULL, 0) < 0) { - return uv__new_sys_error(errno); - } + if (sysctl(which, 2, &numcpus, &size, NULL, 0)) + return -errno; - *cpu_infos = (uv_cpu_info_t*)malloc(numcpus * sizeof(uv_cpu_info_t)); - if (!(*cpu_infos)) { - return uv__new_artificial_error(UV_ENOMEM); - } + *cpu_infos = malloc(numcpus * sizeof(**cpu_infos)); + if (!(*cpu_infos)) + return -ENOMEM; *count = numcpus; which[1] = HW_CPUSPEED; size = sizeof(cpuspeed); - if (sysctl(which, 2, &cpuspeed, &size, NULL, 0) < 0) { - free(*cpu_infos); - return uv__new_sys_error(errno); + if (sysctl(which, 2, &cpuspeed, &size, NULL, 0)) { + SAVE_ERRNO(free(*cpu_infos)); + return -errno; } size = sizeof(info); @@ -258,9 +257,9 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { for (i = 0; i < numcpus; i++) { which[2] = i; size = sizeof(info); - if (sysctl(which, 3, &info, &size, NULL, 0) < 0) { - free(*cpu_infos); - return uv__new_sys_error(errno); + if (sysctl(which, 3, &info, &size, NULL, 0)) { + SAVE_ERRNO(free(*cpu_infos)); + return -errno; } cpu_info = &(*cpu_infos)[i]; @@ -275,7 +274,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { cpu_info->speed = cpuspeed; } - return uv_ok_; + return 0; } @@ -290,12 +289,12 @@ void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) { } -uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { /* TODO: implement */ *addresses = NULL; *count = 0; - return uv_ok_; + return 0; } diff --git a/deps/uv/src/unix/pipe.c b/deps/uv/src/unix/pipe.c index 3d7ade6..d7c4794 100644 --- a/deps/uv/src/unix/pipe.c +++ b/deps/uv/src/unix/pipe.c @@ -46,41 +46,42 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) { struct sockaddr_un saddr; const char* pipe_fname; int sockfd; - int status; int bound; + int err; pipe_fname = NULL; sockfd = -1; - status = -1; bound = 0; + err = -EINVAL; /* Already bound? */ - if (uv__stream_fd(handle) >= 0) { - uv__set_artificial_error(handle->loop, UV_EINVAL); - goto out; - } + if (uv__stream_fd(handle) >= 0) + return -EINVAL; /* Make a copy of the file name, it outlives this function's scope. */ - if ((pipe_fname = strdup(name)) == NULL) { - uv__set_sys_error(handle->loop, ENOMEM); + pipe_fname = strdup(name); + if (pipe_fname == NULL) { + err = -ENOMEM; goto out; } /* We've got a copy, don't touch the original any more. */ name = NULL; - if ((sockfd = uv__socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { - uv__set_sys_error(handle->loop, errno); + err = uv__socket(AF_UNIX, SOCK_STREAM, 0); + if (err < 0) goto out; - } + sockfd = err; memset(&saddr, 0, sizeof saddr); uv_strlcpy(saddr.sun_path, pipe_fname, sizeof(saddr.sun_path)); saddr.sun_family = AF_UNIX; if (bind(sockfd, (struct sockaddr*)&saddr, sizeof saddr)) { + err = -errno; /* Convert ENOENT to EACCES for compatibility with Windows. */ - uv__set_sys_error(handle->loop, (errno == ENOENT) ? EACCES : errno); + if (err == -ENOENT) + err = -EACCES; goto out; } bound = 1; @@ -88,32 +89,26 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) { /* Success. */ handle->pipe_fname = pipe_fname; /* Is a strdup'ed copy. */ handle->io_watcher.fd = sockfd; - status = 0; + return 0; out: - /* Clean up on error. */ - if (status) { - if (bound) { - /* unlink() before close() to avoid races. */ - assert(pipe_fname != NULL); - unlink(pipe_fname); - } - close(sockfd); - - free((void*)pipe_fname); + if (bound) { + /* unlink() before close() to avoid races. */ + assert(pipe_fname != NULL); + unlink(pipe_fname); } - - return status; + close(sockfd); + free((void*)pipe_fname); + return err; } int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb) { if (uv__stream_fd(handle) == -1) - return uv__set_artificial_error(handle->loop, UV_EINVAL); + return -EINVAL; - assert(uv__stream_fd(handle) >= 0); if (listen(uv__stream_fd(handle), backlog)) - return uv__set_sys_error(handle->loop, errno); + return -errno; handle->connection_cb = cb; handle->io_watcher.cb = uv__pipe_accept; @@ -141,8 +136,11 @@ void uv__pipe_close(uv_pipe_t* handle) { int uv_pipe_open(uv_pipe_t* handle, uv_file fd) { #if defined(__APPLE__) - if (uv__stream_try_select((uv_stream_t*) handle, &fd)) - return -1; + int err; + + err = uv__stream_try_select((uv_stream_t*) handle, &fd); + if (err) + return err; #endif /* defined(__APPLE__) */ return uv__stream_open((uv_stream_t*)handle, @@ -161,11 +159,14 @@ void uv_pipe_connect(uv_connect_t* req, int r; new_sock = (uv__stream_fd(handle) == -1); - err = -1; + err = -EINVAL; - if (new_sock) - if ((handle->io_watcher.fd = uv__socket(AF_UNIX, SOCK_STREAM, 0)) == -1) + if (new_sock) { + err = uv__socket(AF_UNIX, SOCK_STREAM, 0); + if (err < 0) goto out; + handle->io_watcher.fd = err; + } memset(&saddr, 0, sizeof saddr); uv_strlcpy(saddr.sun_path, name, sizeof(saddr.sun_path)); @@ -177,21 +178,23 @@ void uv_pipe_connect(uv_connect_t* req, } while (r == -1 && errno == EINTR); - if (r == -1) - if (errno != EINPROGRESS) - goto out; - - if (new_sock) - if (uv__stream_open((uv_stream_t*)handle, - uv__stream_fd(handle), - UV_STREAM_READABLE | UV_STREAM_WRITABLE)) - goto out; + if (r == -1 && errno != EINPROGRESS) { + err = -errno; + goto out; + } - uv__io_start(handle->loop, &handle->io_watcher, UV__POLLIN | UV__POLLOUT); err = 0; + if (new_sock) { + err = uv__stream_open((uv_stream_t*)handle, + uv__stream_fd(handle), + UV_STREAM_READABLE | UV_STREAM_WRITABLE); + } + + if (err == 0) + uv__io_start(handle->loop, &handle->io_watcher, UV__POLLIN | UV__POLLOUT); out: - handle->delayed_error = err ? errno : 0; /* Passed to callback. */ + handle->delayed_error = err; handle->connect_req = req; uv__req_init(handle->loop, req, UV_CONNECT); @@ -200,7 +203,7 @@ out: QUEUE_INIT(&req->queue); /* Force callback to run on next tick in case of error. */ - if (err != 0) + if (err) uv__io_feed(handle->loop, &handle->io_watcher); /* Mimic the Windows pipe implementation, always @@ -219,17 +222,16 @@ static void uv__pipe_accept(uv_loop_t* loop, uv__io_t* w, unsigned int events) { sockfd = uv__accept(uv__stream_fd(pipe)); if (sockfd == -1) { - if (errno != EAGAIN && errno != EWOULDBLOCK) { - uv__set_sys_error(pipe->loop, errno); - pipe->connection_cb((uv_stream_t*)pipe, -1); - } - } else { - pipe->accepted_fd = sockfd; - pipe->connection_cb((uv_stream_t*)pipe, 0); - if (pipe->accepted_fd == sockfd) { - /* The user hasn't called uv_accept() yet */ - uv__io_stop(pipe->loop, &pipe->io_watcher, UV__POLLIN); - } + if (errno != EAGAIN && errno != EWOULDBLOCK) + pipe->connection_cb((uv_stream_t*)pipe, -errno); + return; + } + + pipe->accepted_fd = sockfd; + pipe->connection_cb((uv_stream_t*)pipe, 0); + if (pipe->accepted_fd == sockfd) { + /* The user hasn't called uv_accept() yet */ + uv__io_stop(pipe->loop, &pipe->io_watcher, UV__POLLIN); } } diff --git a/deps/uv/src/unix/poll.c b/deps/uv/src/unix/poll.c index b37a99b..a34a8d1 100644 --- a/deps/uv/src/unix/poll.c +++ b/deps/uv/src/unix/poll.c @@ -36,8 +36,7 @@ static void uv__poll_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { if (events & UV__POLLERR) { uv__io_stop(loop, w, UV__POLLIN | UV__POLLOUT); uv__handle_stop(handle); - uv__set_sys_error(handle->loop, EBADF); - handle->poll_cb(handle, -1, 0); + handle->poll_cb(handle, -EBADF, 0); return; } diff --git a/deps/uv/src/unix/process.c b/deps/uv/src/unix/process.c index 008c032..c37bb3e 100644 --- a/deps/uv/src/unix/process.c +++ b/deps/uv/src/unix/process.c @@ -103,10 +103,8 @@ static void uv__chld(uv_signal_t* handle, int signum) { if (WIFSIGNALED(status)) term_signal = WTERMSIG(status); - if (process->errorno) { - uv__set_sys_error(process->loop, process->errorno); - exit_status = -1; /* execve() failed */ - } + if (process->errorno) + exit_status = process->errorno; /* execve() failed */ process->exit_cb(process, exit_status, term_signal); } @@ -127,7 +125,7 @@ int uv__make_socketpair(int fds[2], int flags) { * Anything else is a genuine error. */ if (errno != EINVAL) - return -1; + return -errno; no_cloexec = 1; @@ -135,7 +133,7 @@ skip: #endif if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds)) - return -1; + return -errno; uv__cloexec(fds[0], 1); uv__cloexec(fds[1], 1); @@ -160,7 +158,7 @@ int uv__make_pipe(int fds[2], int flags) { return 0; if (errno != ENOSYS) - return -1; + return -errno; no_pipe2 = 1; @@ -168,7 +166,7 @@ skip: #endif if (pipe(fds)) - return -1; + return -errno; uv__cloexec(fds[0], 1); uv__cloexec(fds[1], 1); @@ -198,11 +196,10 @@ static int uv__process_init_stdio(uv_stdio_container_t* container, int fds[2]) { case UV_CREATE_PIPE: assert(container->data.stream != NULL); - if (container->data.stream->type != UV_NAMED_PIPE) { - errno = EINVAL; - return -1; - } - return uv__make_socketpair(fds, 0); + if (container->data.stream->type != UV_NAMED_PIPE) + return -EINVAL; + else + return uv__make_socketpair(fds, 0); case UV_INHERIT_FD: case UV_INHERIT_STREAM: @@ -211,17 +208,15 @@ static int uv__process_init_stdio(uv_stdio_container_t* container, int fds[2]) { else fd = uv__stream_fd(container->data.stream); - if (fd == -1) { - errno = EINVAL; - return -1; - } + if (fd == -1) + return -EINVAL; fds[1] = fd; return 0; default: assert(0 && "Unexpected flags"); - return -1; + return -EINVAL; } } @@ -299,7 +294,7 @@ static void uv__process_child_init(uv_process_options_t options, use_fd = open("/dev/null", fd == 0 ? O_RDONLY : O_RDWR); if (use_fd == -1) { - uv__write_int(error_fd, errno); + uv__write_int(error_fd, -errno); perror("failed to open stdio"); _exit(127); } @@ -317,19 +312,19 @@ static void uv__process_child_init(uv_process_options_t options, } if (options.cwd && chdir(options.cwd)) { - uv__write_int(error_fd, errno); + uv__write_int(error_fd, -errno); perror("chdir()"); _exit(127); } if ((options.flags & UV_PROCESS_SETGID) && setgid(options.gid)) { - uv__write_int(error_fd, errno); + uv__write_int(error_fd, -errno); perror("setgid()"); _exit(127); } if ((options.flags & UV_PROCESS_SETUID) && setuid(options.uid)) { - uv__write_int(error_fd, errno); + uv__write_int(error_fd, -errno); perror("setuid()"); _exit(127); } @@ -339,7 +334,7 @@ static void uv__process_child_init(uv_process_options_t options, } execvp(options.file, options.args); - uv__write_int(error_fd, errno); + uv__write_int(error_fd, -errno); perror("execvp()"); _exit(127); } @@ -354,6 +349,7 @@ int uv_spawn(uv_loop_t* loop, QUEUE* q; ssize_t r; pid_t pid; + int err; int i; assert(options.file != NULL); @@ -370,20 +366,21 @@ int uv_spawn(uv_loop_t* loop, if (stdio_count < 3) stdio_count = 3; + err = -ENOMEM; pipes = malloc(stdio_count * sizeof(*pipes)); - if (pipes == NULL) { - errno = ENOMEM; + if (pipes == NULL) goto error; - } for (i = 0; i < stdio_count; i++) { pipes[i][0] = -1; pipes[i][1] = -1; } - for (i = 0; i < options.stdio_count; i++) - if (uv__process_init_stdio(options.stdio + i, pipes[i])) + for (i = 0; i < options.stdio_count; i++) { + err = uv__process_init_stdio(options.stdio + i, pipes[i]); + if (err) goto error; + } /* This pipe is used by the parent to wait until * the child has called `execve()`. We need this @@ -405,7 +402,8 @@ int uv_spawn(uv_loop_t* loop, * marked close-on-exec. Then, after the call to `fork()`, * the parent polls the read end until it EOFs or errors with EPIPE. */ - if (uv__make_pipe(signal_pipe, 0)) + err = uv__make_pipe(signal_pipe, 0); + if (err) goto error; uv_signal_start(&loop->child_watcher, uv__chld, SIGCHLD); @@ -413,6 +411,7 @@ int uv_spawn(uv_loop_t* loop, pid = fork(); if (pid == -1) { + err = -errno; close(signal_pipe[0]); close(signal_pipe[1]); goto error; @@ -442,10 +441,14 @@ int uv_spawn(uv_loop_t* loop, close(signal_pipe[0]); for (i = 0; i < options.stdio_count; i++) { - if (uv__process_open_stream(options.stdio + i, pipes[i], i == 0)) { - while (i--) uv__process_close_stream(options.stdio + i); - goto error; - } + err = uv__process_open_stream(options.stdio + i, pipes[i], i == 0); + if (err == 0) + continue; + + while (i--) + uv__process_close_stream(options.stdio + i); + + goto error; } q = uv__process_queue(loop, pid); @@ -459,38 +462,26 @@ int uv_spawn(uv_loop_t* loop, return 0; error: - uv__set_sys_error(process->loop, errno); - for (i = 0; i < stdio_count; i++) { close(pipes[i][0]); close(pipes[i][1]); } free(pipes); - return -1; + return err; } int uv_process_kill(uv_process_t* process, int signum) { - int r = kill(process->pid, signum); - - if (r) { - uv__set_sys_error(process->loop, errno); - return -1; - } else { - return 0; - } + return uv_kill(process->pid, signum); } -uv_err_t uv_kill(int pid, int signum) { - int r = kill(pid, signum); - - if (r) { - return uv__new_sys_error(errno); - } else { - return uv_ok_; - } +int uv_kill(int pid, int signum) { + if (kill(pid, signum)) + return -errno; + else + return 0; } diff --git a/deps/uv/src/unix/proctitle.c b/deps/uv/src/unix/proctitle.c index 6728e23..8ffebb1 100644 --- a/deps/uv/src/unix/proctitle.c +++ b/deps/uv/src/unix/proctitle.c @@ -74,25 +74,25 @@ char** uv_setup_args(int argc, char** argv) { } -uv_err_t uv_set_process_title(const char* title) { +int uv_set_process_title(const char* title) { if (process_title.len == 0) - return uv_ok_; + return 0; /* No need to terminate, byte after is always '\0'. */ strncpy(process_title.str, title, process_title.len); uv__set_process_title(title); - return uv_ok_; + return 0; } -uv_err_t uv_get_process_title(char* buffer, size_t size) { +int uv_get_process_title(char* buffer, size_t size) { if (process_title.len > 0) strncpy(buffer, process_title.str, size); else if (size > 0) buffer[0] = '\0'; - return uv_ok_; + return 0; } diff --git a/deps/uv/src/unix/signal.c b/deps/uv/src/unix/signal.c index db277ca..5839098 100644 --- a/deps/uv/src/unix/signal.c +++ b/deps/uv/src/unix/signal.c @@ -171,7 +171,7 @@ static void uv__signal_handler(int signum) { } -static uv_err_t uv__signal_register_handler(int signum) { +static int uv__signal_register_handler(int signum) { /* When this function is called, the signal lock must be held. */ struct sigaction sa; @@ -183,9 +183,9 @@ static uv_err_t uv__signal_register_handler(int signum) { /* XXX save old action so we can restore it later on? */ if (sigaction(signum, &sa, NULL)) - return uv__new_sys_error(errno); + return -errno; - return uv_ok_; + return 0; } @@ -206,12 +206,15 @@ static void uv__signal_unregister_handler(int signum) { static int uv__signal_loop_once_init(uv_loop_t* loop) { + int err; + /* Return if already initialized. */ if (loop->signal_pipefd[0] != -1) return 0; - if (uv__make_pipe(loop->signal_pipefd, UV__F_NONBLOCK)) - return -1; + err = uv__make_pipe(loop->signal_pipefd, UV__F_NONBLOCK); + if (err) + return err; uv__io_init(&loop->signal_io_watcher, uv__signal_event, @@ -249,8 +252,11 @@ void uv__signal_loop_cleanup(uv_loop_t* loop) { int uv_signal_init(uv_loop_t* loop, uv_signal_t* handle) { - if (uv__signal_loop_once_init(loop)) - return uv__set_sys_error(loop, errno); + int err; + + err = uv__signal_loop_once_init(loop); + if (err) + return err; uv__handle_init(loop, (uv_handle_t*) handle, UV_SIGNAL); handle->signum = 0; @@ -277,6 +283,7 @@ void uv__signal_close(uv_signal_t* handle) { int uv_signal_start(uv_signal_t* handle, uv_signal_cb signal_cb, int signum) { sigset_t saved_sigmask; + int err; assert(!(handle->flags & (UV_CLOSING | UV_CLOSED))); @@ -284,10 +291,8 @@ int uv_signal_start(uv_signal_t* handle, uv_signal_cb signal_cb, int signum) { * signum is otherwise invalid then uv__signal_register will find out * eventually. */ - if (signum == 0) { - uv__set_artificial_error(handle->loop, UV_EINVAL); - return -1; - } + if (signum == 0) + return -EINVAL; /* Short circuit: if the signal watcher is already watching {signum} don't * go through the process of deregistering and registering the handler. @@ -310,12 +315,11 @@ int uv_signal_start(uv_signal_t* handle, uv_signal_cb signal_cb, int signum) { * any of the loops), it's time to try and register a handler for it here. */ if (uv__signal_first_handle(signum) == NULL) { - uv_err_t err = uv__signal_register_handler(signum); - if (err.code != UV_OK) { + err = uv__signal_register_handler(signum); + if (err) { /* Registering the signal handler failed. Must be an invalid signal. */ - handle->loop->last_err = err; uv__signal_unlock_and_unblock(&saved_sigmask); - return -1; + return err; } } diff --git a/deps/uv/src/unix/stream.c b/deps/uv/src/unix/stream.c index 9688fbe..4b449dc 100644 --- a/deps/uv/src/unix/stream.c +++ b/deps/uv/src/unix/stream.c @@ -65,6 +65,7 @@ static size_t uv__write_req_size(uv_write_t* req); /* Used by the accept() EMFILE party trick. */ static int uv__open_cloexec(const char* path, int flags) { + int err; int fd; #if defined(__linux__) @@ -73,14 +74,20 @@ static int uv__open_cloexec(const char* path, int flags) { return fd; if (errno != EINVAL) - return -1; + return -errno; /* O_CLOEXEC not supported. */ #endif fd = open(path, flags); - if (fd != -1) - uv__cloexec(fd, 1); + if (fd == -1) + return -errno; + + err = uv__cloexec(fd, 1); + if (err) { + close(fd); + return err; + } return fd; } @@ -101,6 +108,8 @@ static size_t uv__buf_count(uv_buf_t bufs[], int bufcnt) { void uv__stream_init(uv_loop_t* loop, uv_stream_t* stream, uv_handle_type type) { + int err; + uv__handle_init(loop, (uv_handle_t*)stream, type); stream->read_cb = NULL; stream->read2_cb = NULL; @@ -115,8 +124,11 @@ void uv__stream_init(uv_loop_t* loop, QUEUE_INIT(&stream->write_completed_queue); stream->write_queue_size = 0; - if (loop->emfile_fd == -1) - loop->emfile_fd = uv__open_cloexec("/", O_RDONLY); + if (loop->emfile_fd == -1) { + err = uv__open_cloexec("/", O_RDONLY); + if (err >= 0) + loop->emfile_fd = err; + } #if defined(__APPLE__) stream->select = NULL; @@ -280,13 +292,14 @@ int uv__stream_try_select(uv_stream_t* stream, int* fd) { struct timespec timeout; uv__stream_select_t* s; int fds[2]; + int err; int ret; int kq; kq = kqueue(); if (kq == -1) { fprintf(stderr, "(libuv) Failed to create kqueue (%d)\n", errno); - return uv__set_sys_error(stream->loop, errno); + return -errno; } EV_SET(&filter[0], *fd, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, 0); @@ -299,7 +312,7 @@ int uv__stream_try_select(uv_stream_t* stream, int* fd) { SAVE_ERRNO(close(kq)); if (ret == -1) - return uv__set_sys_error(stream->loop, errno); + return -errno; if (ret == 0 || (events[0].flags & EV_ERROR) == 0 || events[0].data != EINVAL) return 0; @@ -307,14 +320,15 @@ int uv__stream_try_select(uv_stream_t* stream, int* fd) { /* At this point we definitely know that this fd won't work with kqueue */ s = malloc(sizeof(*s)); if (s == NULL) - return uv__set_artificial_error(stream->loop, UV_ENOMEM); + return -ENOMEM; s->events = 0; s->fd = *fd; - if (uv_async_init(stream->loop, &s->async, uv__stream_osx_select_cb)) { - SAVE_ERRNO(free(s)); - return uv__set_sys_error(stream->loop, errno); + err = uv_async_init(stream->loop, &s->async, uv__stream_osx_select_cb); + if (err) { + free(s); + return err; } s->async.flags |= UV__HANDLE_INTERNAL; @@ -353,7 +367,7 @@ fatal2: uv_sem_destroy(&s->close_sem); fatal1: uv_close((uv_handle_t*) &s->async, uv__stream_osx_cb_close); - return uv__set_sys_error(stream->loop, errno); + return -errno; } #endif /* defined(__APPLE__) */ @@ -364,11 +378,11 @@ int uv__stream_open(uv_stream_t* stream, int fd, int flags) { if (stream->type == UV_TCP) { if ((stream->flags & UV_TCP_NODELAY) && uv__tcp_nodelay(fd, 1)) - return uv__set_sys_error(stream->loop, errno); + return -errno; /* TODO Use delay the user passed in. */ if ((stream->flags & UV_TCP_KEEPALIVE) && uv__tcp_keepalive(fd, 1, 60)) - return uv__set_sys_error(stream->loop, errno); + return -errno; } stream->io_watcher.fd = fd; @@ -386,8 +400,7 @@ void uv__stream_destroy(uv_stream_t* stream) { if (stream->connect_req) { uv__req_unregister(stream->loop, stream->connect_req); - uv__set_artificial_error(stream->loop, UV_ECANCELED); - stream->connect_req->cb(stream->connect_req, -1); + stream->connect_req->cb(stream->connect_req, -ECANCELED); stream->connect_req = NULL; } @@ -402,10 +415,8 @@ void uv__stream_destroy(uv_stream_t* stream) { free(req->bufs); req->bufs = NULL; - if (req->cb) { - uv__set_artificial_error(req->handle->loop, UV_ECANCELED); - req->cb(req, -1); - } + if (req->cb != NULL) + req->cb(req, -ECANCELED); } while (!QUEUE_EMPTY(&stream->write_completed_queue)) { @@ -422,21 +433,18 @@ void uv__stream_destroy(uv_stream_t* stream) { req->bufs = NULL; } - if (req->cb) { - uv__set_sys_error(stream->loop, req->error); - req->cb(req, req->error ? -1 : 0); - } + if (req->cb) + req->cb(req, req->error); } if (stream->shutdown_req) { - /* The UV_ECANCELED error code is a lie, the shutdown(2) syscall is a + /* The ECANCELED error code is a lie, the shutdown(2) syscall is a * fait accompli at this point. Maybe we should revisit this in v0.11. * A possible reason for leaving it unchanged is that it informs the * callee that the handle has been destroyed. */ uv__req_unregister(stream->loop, stream->shutdown_req); - uv__set_artificial_error(stream->loop, UV_ECANCELED); - stream->shutdown_req->cb(stream->shutdown_req, -1); + stream->shutdown_req->cb(stream->shutdown_req, -ECANCELED); stream->shutdown_req = NULL; } } @@ -457,7 +465,7 @@ static int uv__emfile_trick(uv_loop_t* loop, int accept_fd) { int fd; if (loop->emfile_fd == -1) - return -1; + return -EMFILE; close(loop->emfile_fd); @@ -473,7 +481,7 @@ static int uv__emfile_trick(uv_loop_t* loop, int accept_fd) { continue; SAVE_ERRNO(loop->emfile_fd = uv__open_cloexec("/", O_RDONLY)); - return errno; + return -errno; } } @@ -488,7 +496,6 @@ static int uv__emfile_trick(uv_loop_t* loop, int accept_fd) { void uv__server_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { uv_stream_t* stream; int err; - int fd; stream = container_of(w, uv_stream_t, io_watcher); assert(events == UV__POLLIN); @@ -508,27 +515,26 @@ void uv__server_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { return; #endif /* defined(UV_HAVE_KQUEUE) */ - fd = uv__accept(uv__stream_fd(stream)); - if (fd == -1) { - if (errno == EAGAIN || errno == EWOULDBLOCK) + err = uv__accept(uv__stream_fd(stream)); + if (err < 0) { + if (err == -EAGAIN || err == -EWOULDBLOCK) return; /* Not an error. */ - if (errno == ECONNABORTED) + if (err == -ECONNABORTED) continue; /* Ignore. Nothing we can do about that. */ - if (errno == EMFILE || errno == ENFILE) { - SAVE_ERRNO(err = uv__emfile_trick(loop, uv__stream_fd(stream))); - if (err == EAGAIN || err == EWOULDBLOCK) + if (err == -EMFILE || err == -ENFILE) { + err = uv__emfile_trick(loop, uv__stream_fd(stream)); + if (err == -EAGAIN || err == -EWOULDBLOCK) break; } - uv__set_sys_error(loop, errno); - stream->connection_cb(stream, -1); + stream->connection_cb(stream, err); continue; } UV_DEC_BACKLOG(w) - stream->accepted_fd = fd; + stream->accepted_fd = err; stream->connection_cb(stream, 0); if (stream->accepted_fd != -1) { @@ -550,30 +556,34 @@ void uv__server_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { int uv_accept(uv_stream_t* server, uv_stream_t* client) { + int err; + /* TODO document this */ assert(server->loop == client->loop); if (server->accepted_fd == -1) - return uv__set_sys_error(server->loop, EAGAIN); + return -EAGAIN; switch (client->type) { case UV_NAMED_PIPE: case UV_TCP: - if (uv__stream_open(client, - server->accepted_fd, - UV_STREAM_READABLE | UV_STREAM_WRITABLE)) { + err = uv__stream_open(client, + server->accepted_fd, + UV_STREAM_READABLE | UV_STREAM_WRITABLE); + if (err) { /* TODO handle error */ close(server->accepted_fd); server->accepted_fd = -1; - return -1; + return err; } break; case UV_UDP: - if (uv_udp_open((uv_udp_t*) client, server->accepted_fd)) { + err = uv_udp_open((uv_udp_t*) client, server->accepted_fd); + if (err) { close(server->accepted_fd); server->accepted_fd = -1; - return -1; + return err; } break; @@ -588,32 +598,32 @@ int uv_accept(uv_stream_t* server, uv_stream_t* client) { int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb) { - int r; + int err; + err = -EINVAL; switch (stream->type) { - case UV_TCP: - r = uv_tcp_listen((uv_tcp_t*)stream, backlog, cb); - break; + case UV_TCP: + err = uv_tcp_listen((uv_tcp_t*)stream, backlog, cb); + break; - case UV_NAMED_PIPE: - r = uv_pipe_listen((uv_pipe_t*)stream, backlog, cb); - break; + case UV_NAMED_PIPE: + err = uv_pipe_listen((uv_pipe_t*)stream, backlog, cb); + break; - default: - assert(0); - return -1; + default: + assert(0); } - if (r == 0) + if (err == 0) uv__handle_start(stream); - return r; + return err; } static void uv__drain(uv_stream_t* stream) { uv_shutdown_t* req; - int status; + int err; assert(QUEUE_EMPTY(&stream->write_queue)); uv__io_stop(stream->loop, &stream->io_watcher, UV__POLLOUT); @@ -629,14 +639,15 @@ static void uv__drain(uv_stream_t* stream) { stream->flags &= ~UV_STREAM_SHUTTING; uv__req_unregister(stream->loop, req); - status = shutdown(uv__stream_fd(stream), SHUT_WR); - if (status) - uv__set_sys_error(stream->loop, errno); - else + err = 0; + if (shutdown(uv__stream_fd(stream), SHUT_WR)) + err = -errno; + + if (err == 0) stream->flags |= UV_STREAM_SHUT; if (req->cb != NULL) - req->cb(req, status); + req->cb(req, err); } } @@ -791,7 +802,7 @@ start: if (n < 0) { if (errno != EAGAIN && errno != EWOULDBLOCK) { /* Error */ - req->error = errno; + req->error = -errno; uv__write_req_finish(req); uv__io_stop(stream->loop, &stream->io_watcher, UV__POLLOUT); if (!uv__io_active(&stream->io_watcher, UV__POLLIN)) @@ -879,10 +890,8 @@ static void uv__write_callbacks(uv_stream_t* stream) { } /* NOTE: call callback AFTER freeing the request data. */ - if (req->cb) { - uv__set_sys_error(stream->loop, req->error); - req->cb(req, req->error ? -1 : 0); - } + if (req->cb) + req->cb(req, req->error); } assert(QUEUE_EMPTY(&stream->write_completed_queue)); @@ -943,8 +952,7 @@ static void uv__stream_eof(uv_stream_t* stream, uv_buf_t buf) { uv__io_stop(stream->loop, &stream->io_watcher, UV__POLLIN); if (!uv__io_active(&stream->io_watcher, UV__POLLOUT)) uv__handle_stop(stream); - uv__set_artificial_error(stream->loop, UV_EOF); - uv__stream_read_cb(stream, -1, buf, UV_UNKNOWN_HANDLE); + uv__stream_read_cb(stream, UV_EOF, buf, UV_UNKNOWN_HANDLE); } @@ -1006,12 +1014,10 @@ static void uv__read(uv_stream_t* stream) { if (stream->flags & UV_STREAM_READING) { uv__io_start(stream->loop, &stream->io_watcher, UV__POLLIN); } - uv__set_sys_error(stream->loop, EAGAIN); uv__stream_read_cb(stream, 0, buf, UV_UNKNOWN_HANDLE); } else { /* Error. User should call uv_close(). */ - uv__set_sys_error(stream->loop, errno); - uv__stream_read_cb(stream, -1, buf, UV_UNKNOWN_HANDLE); + uv__stream_read_cb(stream, -errno, buf, UV_UNKNOWN_HANDLE); assert(!uv__io_active(&stream->io_watcher, UV__POLLIN) && "stream->read_cb(status=-1) did not call uv_close()"); } @@ -1085,8 +1091,7 @@ int uv_shutdown(uv_shutdown_t* req, uv_stream_t* stream, uv_shutdown_cb cb) { stream->flags & UV_STREAM_SHUT || stream->flags & UV_CLOSED || stream->flags & UV_CLOSING) { - uv__set_artificial_error(stream->loop, UV_ENOTCONN); - return -1; + return -ENOTCONN; } /* Initialize request */ @@ -1178,19 +1183,18 @@ static void uv__stream_connect(uv_stream_t* stream) { SO_ERROR, &error, &errorsize); + error = -error; } - if (error == EINPROGRESS) + if (error == -EINPROGRESS) return; stream->connect_req = NULL; uv__req_unregister(stream->loop, req); uv__io_stop(stream->loop, &stream->io_watcher, UV__POLLOUT); - if (req->cb) { - uv__set_sys_error(stream->loop, error); - req->cb(req, error ? -1 : 0); - } + if (req->cb) + req->cb(req, error); } @@ -1209,11 +1213,11 @@ int uv_write2(uv_write_t* req, "uv_write (unix) does not yet support other types of streams"); if (uv__stream_fd(stream) < 0) - return uv__set_artificial_error(stream->loop, UV_EBADF); + return -EBADF; if (send_handle) { if (stream->type != UV_NAMED_PIPE || !((uv_pipe_t*)stream)->ipc) - return uv__set_artificial_error(stream->loop, UV_EINVAL); + return -EINVAL; /* XXX We abuse uv_write2() to send over UDP handles to child processes. * Don't call uv__stream_fd() on those handles, it's a macro that on OS X @@ -1222,7 +1226,7 @@ int uv_write2(uv_write_t* req, * which works but only by accident. */ if (uv__handle_fd((uv_handle_t*) send_handle) < 0) - return uv__set_artificial_error(stream->loop, UV_EBADF); + return -EBADF; } /* It's legal for write_queue_size > 0 even when the write_queue is empty; @@ -1295,7 +1299,7 @@ static int uv__read_start_common(uv_stream_t* stream, stream->type == UV_TTY); if (stream->flags & UV_CLOSING) - return uv__set_sys_error(stream->loop, EINVAL); + return -EINVAL; /* The UV_STREAM_READING flag is irrelevant of the state of the tcp - it just * expresses the desired state of the user. diff --git a/deps/uv/src/unix/sunos.c b/deps/uv/src/unix/sunos.c index 2413105..829f072 100644 --- a/deps/uv/src/unix/sunos.c +++ b/deps/uv/src/unix/sunos.c @@ -62,13 +62,22 @@ int uv__platform_loop_init(uv_loop_t* loop, int default_loop) { + int err; + int fd; + loop->fs_fd = -1; - loop->backend_fd = port_create(); + loop->backend_fd = -1; - if (loop->backend_fd == -1) - return -1; + fd = port_create(); + if (fd == -1) + return -errno; - uv__cloexec(loop->backend_fd, 1); + err = uv__cloexec(fd, 1); + if (err) { + close(fd); + return err; + } + loop->backend_fd = fd; return 0; } @@ -243,21 +252,17 @@ int uv_exepath(char* buffer, size_t* size) { ssize_t res; char buf[128]; - if (buffer == NULL) - return (-1); - - if (size == NULL) - return (-1); + if (buffer == NULL || size == NULL) + return -EINVAL; (void) snprintf(buf, sizeof(buf), "/proc/%lu/path/a.out", (unsigned long) getpid()); res = readlink(buf, buffer, *size - 1); - - if (res < 0) - return (res); + if (res == -1) + return -errno; buffer[res] = '\0'; *size = res; - return (0); + return 0; } @@ -278,18 +283,20 @@ void uv_loadavg(double avg[3]) { #if defined(PORT_SOURCE_FILE) -static void uv__fs_event_rearm(uv_fs_event_t *handle) { +static int uv__fs_event_rearm(uv_fs_event_t *handle) { if (handle->fd == -1) - return; + return -EBADF; if (port_associate(handle->loop->fs_fd, PORT_SOURCE_FILE, (uintptr_t) &handle->fo, FILE_ATTRIB | FILE_MODIFIED, handle) == -1) { - uv__set_sys_error(handle->loop, errno); + return -errno; } handle->fd = PORT_LOADED; + + return 0; } @@ -340,7 +347,7 @@ static void uv__fs_event_read(uv_loop_t* loop, while (handle->fd != PORT_DELETED); if (handle != NULL && handle->fd != PORT_DELETED) - uv__fs_event_rearm(handle); + uv__fs_event_rearm(handle); /* FIXME(bnoordhuis) Check return code. */ } @@ -353,10 +360,9 @@ int uv_fs_event_init(uv_loop_t* loop, int first_run = 0; if (loop->fs_fd == -1) { - if ((portfd = port_create()) == -1) { - uv__set_sys_error(loop, errno); - return -1; - } + portfd = port_create(); + if (portfd == -1) + return -errno; loop->fs_fd = portfd; first_run = 1; } @@ -369,7 +375,7 @@ int uv_fs_event_init(uv_loop_t* loop, memset(&handle->fo, 0, sizeof handle->fo); handle->fo.fo_name = handle->filename; - uv__fs_event_rearm(handle); + uv__fs_event_rearm(handle); /* FIXME(bnoordhuis) Check return code. */ if (first_run) { uv__io_init(&loop->fs_event_watcher, uv__fs_event_read, portfd); @@ -398,8 +404,7 @@ int uv_fs_event_init(uv_loop_t* loop, const char* filename, uv_fs_event_cb cb, int flags) { - uv__set_sys_error(loop, ENOSYS); - return -1; + return -ENOSYS; } @@ -415,76 +420,74 @@ char** uv_setup_args(int argc, char** argv) { } -uv_err_t uv_set_process_title(const char* title) { - return uv_ok_; +int uv_set_process_title(const char* title) { + return 0; } -uv_err_t uv_get_process_title(char* buffer, size_t size) { +int uv_get_process_title(char* buffer, size_t size) { if (size > 0) { buffer[0] = '\0'; } - return uv_ok_; + return 0; } -uv_err_t uv_resident_set_memory(size_t* rss) { +int uv_resident_set_memory(size_t* rss) { psinfo_t psinfo; - uv_err_t err; + int err; int fd; fd = open("/proc/self/psinfo", O_RDONLY); if (fd == -1) - return uv__new_sys_error(errno); - - err = uv_ok_; + return -errno; - if (read(fd, &psinfo, sizeof(psinfo)) == sizeof(psinfo)) + /* FIXME(bnoordhuis) Handle EINTR. */ + err = -EINVAL; + if (read(fd, &psinfo, sizeof(psinfo)) == sizeof(psinfo)) { *rss = (size_t)psinfo.pr_rssize * 1024; - else - err = uv__new_sys_error(EINVAL); - + err = 0; + } close(fd); return err; } -uv_err_t uv_uptime(double* uptime) { +int uv_uptime(double* uptime) { kstat_ctl_t *kc; kstat_t *ksp; kstat_named_t *knp; long hz = sysconf(_SC_CLK_TCK); - if ((kc = kstat_open()) == NULL) - return uv__new_sys_error(errno); + kc = kstat_open(); + if (kc == NULL) + return -EPERM; ksp = kstat_lookup(kc, (char*) "unix", 0, (char*) "system_misc"); - if (kstat_read(kc, ksp, NULL) == -1) { *uptime = -1; } else { knp = (kstat_named_t*) kstat_data_lookup(ksp, (char*) "clk_intr"); *uptime = knp->value.ul / hz; } - kstat_close(kc); - return uv_ok_; + return 0; } -uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { int lookup_instance; kstat_ctl_t *kc; kstat_t *ksp; kstat_named_t *knp; uv_cpu_info_t* cpu_info; - if ((kc = kstat_open()) == NULL) { - return uv__new_sys_error(errno); - } + kc = kstat_open(); + if (kc == NULL) + return -EPERM; /* Get count of cpus */ lookup_instance = 0; @@ -492,10 +495,10 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { lookup_instance++; } - *cpu_infos = (uv_cpu_info_t*) - malloc(lookup_instance * sizeof(uv_cpu_info_t)); + *cpu_infos = malloc(lookup_instance * sizeof(**cpu_infos)); if (!(*cpu_infos)) { - return uv__new_artificial_error(UV_ENOMEM); + kstat_close(kc); + return -ENOMEM; } *count = lookup_instance; @@ -557,7 +560,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { kstat_close(kc); - return uv_ok_; + return 0; } @@ -572,18 +575,16 @@ void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) { } -uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, - int* count) { +int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { #ifdef SUNOS_NO_IFADDRS - return uv__new_artificial_error(UV_ENOSYS); + return -ENOSYS; #else struct ifaddrs *addrs, *ent; char ip[INET6_ADDRSTRLEN]; uv_interface_address_t* address; - if (getifaddrs(&addrs) != 0) { - return uv__new_sys_error(errno); - } + if (getifaddrs(&addrs)) + return -errno; *count = 0; @@ -598,11 +599,9 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, (*count)++; } - *addresses = (uv_interface_address_t*) - malloc(*count * sizeof(uv_interface_address_t)); - if (!(*addresses)) { - return uv__new_artificial_error(UV_ENOMEM); - } + *addresses = malloc(*count * sizeof(**addresses)); + if (!(*addresses)) + return -ENOMEM; address = *addresses; @@ -639,7 +638,7 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses, freeifaddrs(addrs); - return uv_ok_; + return 0; #endif /* SUNOS_NO_IFADDRS */ } diff --git a/deps/uv/src/unix/tcp.c b/deps/uv/src/unix/tcp.c index 2c81ff0..6257f7d 100644 --- a/deps/uv/src/unix/tcp.c +++ b/deps/uv/src/unix/tcp.c @@ -36,18 +36,20 @@ int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* tcp) { static int maybe_new_socket(uv_tcp_t* handle, int domain, int flags) { int sockfd; + int err; if (uv__stream_fd(handle) != -1) return 0; - sockfd = uv__socket(domain, SOCK_STREAM, 0); + err = uv__socket(domain, SOCK_STREAM, 0); + if (err < 0) + return err; + sockfd = err; - if (sockfd == -1) - return uv__set_sys_error(handle->loop, errno); - - if (uv__stream_open((uv_stream_t*)handle, sockfd, flags)) { + err = uv__stream_open((uv_stream_t*) handle, sockfd, flags); + if (err) { close(sockfd); - return -1; + return err; } return 0; @@ -58,20 +60,22 @@ static int uv__bind(uv_tcp_t* tcp, int domain, struct sockaddr* addr, int addrsize) { + int err; int on; - if (maybe_new_socket(tcp, domain, UV_STREAM_READABLE|UV_STREAM_WRITABLE)) - return -1; + err = maybe_new_socket(tcp, domain, UV_STREAM_READABLE | UV_STREAM_WRITABLE); + if (err) + return err; on = 1; if (setsockopt(tcp->io_watcher.fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) - return uv__set_sys_error(tcp->loop, errno); + return -errno; errno = 0; if (bind(tcp->io_watcher.fd, addr, addrsize) && errno != EADDRINUSE) - return uv__set_sys_error(tcp->loop, errno); + return -errno; - tcp->delayed_error = errno; + tcp->delayed_error = -errno; return 0; } @@ -81,18 +85,19 @@ static int uv__connect(uv_connect_t* req, struct sockaddr* addr, socklen_t addrlen, uv_connect_cb cb) { + int err; int r; assert(handle->type == UV_TCP); - if (handle->connect_req) - return uv__set_sys_error(handle->loop, EALREADY); + if (handle->connect_req != NULL) + return -EALREADY; /* FIXME(bnoordhuis) -EINVAL or maybe -EBUSY. */ - if (maybe_new_socket(handle, - addr->sa_family, - UV_STREAM_READABLE|UV_STREAM_WRITABLE)) { - return -1; - } + err = maybe_new_socket(handle, + addr->sa_family, + UV_STREAM_READABLE | UV_STREAM_WRITABLE); + if (err) + return err; handle->delayed_error = 0; @@ -108,9 +113,9 @@ static int uv__connect(uv_connect_t* req, * error. Solaris wants to report immediately--other unixes want to * wait. */ - handle->delayed_error = errno; + handle->delayed_error = -errno; else - return uv__set_sys_error(handle->loop, errno); + return -errno; } uv__req_init(handle->loop, req, UV_CONNECT); @@ -157,16 +162,16 @@ int uv_tcp_getsockname(uv_tcp_t* handle, socklen_t socklen; if (handle->delayed_error) - return uv__set_sys_error(handle->loop, handle->delayed_error); + return handle->delayed_error; if (uv__stream_fd(handle) < 0) - return uv__set_sys_error(handle->loop, EINVAL); + return -EINVAL; /* FIXME(bnoordhuis) -EBADF */ /* sizeof(socklen_t) != sizeof(int) on some systems. */ socklen = (socklen_t) *namelen; - if (getsockname(uv__stream_fd(handle), name, &socklen) == -1) - return uv__set_sys_error(handle->loop, errno); + if (getsockname(uv__stream_fd(handle), name, &socklen)) + return -errno; *namelen = (int) socklen; return 0; @@ -179,16 +184,16 @@ int uv_tcp_getpeername(uv_tcp_t* handle, socklen_t socklen; if (handle->delayed_error) - return uv__set_sys_error(handle->loop, handle->delayed_error); + return handle->delayed_error; if (uv__stream_fd(handle) < 0) - return uv__set_sys_error(handle->loop, EINVAL); + return -EINVAL; /* FIXME(bnoordhuis) -EBADF */ /* sizeof(socklen_t) != sizeof(int) on some systems. */ socklen = (socklen_t) *namelen; - if (getpeername(uv__stream_fd(handle), name, &socklen) == -1) - return uv__set_sys_error(handle->loop, errno); + if (getpeername(uv__stream_fd(handle), name, &socklen)) + return -errno; *namelen = (int) socklen; return 0; @@ -197,9 +202,10 @@ int uv_tcp_getpeername(uv_tcp_t* handle, int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) { static int single_accept = -1; + int err; if (tcp->delayed_error) - return uv__set_sys_error(tcp->loop, tcp->delayed_error); + return tcp->delayed_error; if (single_accept == -1) { const char* val = getenv("UV_TCP_SINGLE_ACCEPT"); @@ -209,11 +215,12 @@ int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) { if (single_accept) tcp->flags |= UV_TCP_SINGLE_ACCEPT; - if (maybe_new_socket(tcp, AF_INET, UV_STREAM_READABLE)) - return -1; + err = maybe_new_socket(tcp, AF_INET, UV_STREAM_READABLE); + if (err) + return err; if (listen(tcp->io_watcher.fd, backlog)) - return uv__set_sys_error(tcp->loop, errno); + return -errno; tcp->connection_cb = cb; @@ -248,19 +255,20 @@ int uv__tcp_nodelay(int fd, int on) { int uv__tcp_keepalive(int fd, int on, unsigned int delay) { if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on))) - return -1; + return -errno; #ifdef TCP_KEEPIDLE if (on && setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &delay, sizeof(delay))) - return -1; + return -errno; #endif /* Solaris/SmartOS, if you don't support keep-alive, * then don't advertise it in your system headers... */ + /* FIXME(bnoordhuis) That's possibly because sizeof(delay) should be 1. */ #if defined(TCP_KEEPALIVE) && !defined(__sun) if (on && setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE, &delay, sizeof(delay))) - return -1; + return -errno; #endif return 0; @@ -268,9 +276,13 @@ int uv__tcp_keepalive(int fd, int on, unsigned int delay) { int uv_tcp_nodelay(uv_tcp_t* handle, int on) { - if (uv__stream_fd(handle) != -1) - if (uv__tcp_nodelay(uv__stream_fd(handle), on)) - return -1; + int err; + + if (uv__stream_fd(handle) != -1) { + err = uv__tcp_nodelay(uv__stream_fd(handle), on); + if (err) + return err; + } if (on) handle->flags |= UV_TCP_NODELAY; @@ -282,9 +294,13 @@ int uv_tcp_nodelay(uv_tcp_t* handle, int on) { int uv_tcp_keepalive(uv_tcp_t* handle, int on, unsigned int delay) { - if (uv__stream_fd(handle) != -1) - if (uv__tcp_keepalive(uv__stream_fd(handle), on, delay)) - return -1; + int err; + + if (uv__stream_fd(handle) != -1) { + err =uv__tcp_keepalive(uv__stream_fd(handle), on, delay); + if (err) + return err; + } if (on) handle->flags |= UV_TCP_KEEPALIVE; diff --git a/deps/uv/src/unix/thread.c b/deps/uv/src/unix/thread.c index 0cf65a5..e0238ae 100644 --- a/deps/uv/src/unix/thread.c +++ b/deps/uv/src/unix/thread.c @@ -32,22 +32,16 @@ #define NANOSEC ((uint64_t) 1e9) int uv_thread_join(uv_thread_t *tid) { - if (pthread_join(*tid, NULL)) - return -1; - else - return 0; + return -pthread_join(*tid, NULL); } int uv_mutex_init(uv_mutex_t* mutex) { -#ifdef NDEBUG - if (pthread_mutex_init(mutex, NULL)) - return -1; - else - return 0; +#if defined(NDEBUG) || !defined(PTHREAD_MUTEX_ERRORCHECK) + return -pthread_mutex_init(mutex, NULL); #else pthread_mutexattr_t attr; - int r; + int err; if (pthread_mutexattr_init(&attr)) abort(); @@ -55,12 +49,12 @@ int uv_mutex_init(uv_mutex_t* mutex) { if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK)) abort(); - r = pthread_mutex_init(mutex, &attr); + err = pthread_mutex_init(mutex, &attr); if (pthread_mutexattr_destroy(&attr)) abort(); - return r ? -1 : 0; + return -err; #endif } @@ -78,17 +72,16 @@ void uv_mutex_lock(uv_mutex_t* mutex) { int uv_mutex_trylock(uv_mutex_t* mutex) { - int r; + int err; - r = pthread_mutex_trylock(mutex); - - if (r && r != EBUSY && r != EAGAIN) + /* FIXME(bnoordhuis) EAGAIN means recursive lock limit reached. Arguably + * a bug, should probably abort rather than return -EAGAIN. + */ + err = pthread_mutex_trylock(mutex); + if (err && err != EBUSY && err != EAGAIN) abort(); - if (r) - return -1; - else - return 0; + return -err; } @@ -99,10 +92,7 @@ void uv_mutex_unlock(uv_mutex_t* mutex) { int uv_rwlock_init(uv_rwlock_t* rwlock) { - if (pthread_rwlock_init(rwlock, NULL)) - return -1; - else - return 0; + return -pthread_rwlock_init(rwlock, NULL); } @@ -119,17 +109,13 @@ void uv_rwlock_rdlock(uv_rwlock_t* rwlock) { int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock) { - int r; - - r = pthread_rwlock_tryrdlock(rwlock); + int err; - if (r && r != EBUSY && r != EAGAIN) + err = pthread_rwlock_tryrdlock(rwlock); + if (err && err != EBUSY && err != EAGAIN) abort(); - if (r) - return -1; - else - return 0; + return -err; } @@ -146,17 +132,13 @@ void uv_rwlock_wrlock(uv_rwlock_t* rwlock) { int uv_rwlock_trywrlock(uv_rwlock_t* rwlock) { - int r; + int err; - r = pthread_rwlock_trywrlock(rwlock); - - if (r && r != EBUSY && r != EAGAIN) + err = pthread_rwlock_trywrlock(rwlock); + if (err && err != EBUSY && err != EAGAIN) abort(); - if (r) - return -1; - else - return 0; + return -err; } @@ -174,10 +156,18 @@ void uv_once(uv_once_t* guard, void (*callback)(void)) { #if defined(__APPLE__) && defined(__MACH__) int uv_sem_init(uv_sem_t* sem, unsigned int value) { - if (semaphore_create(mach_task_self(), sem, SYNC_POLICY_FIFO, value)) - return -1; - else + kern_return_t err; + + err = semaphore_create(mach_task_self(), sem, SYNC_POLICY_FIFO, value); + if (err == KERN_SUCCESS) return 0; + if (err == KERN_INVALID_ARGUMENT) + return -EINVAL; + if (err == KERN_RESOURCE_SHORTAGE) + return -ENOMEM; + + abort(); + return -EINVAL; /* Satisfy the compiler. */ } @@ -207,20 +197,27 @@ void uv_sem_wait(uv_sem_t* sem) { int uv_sem_trywait(uv_sem_t* sem) { mach_timespec_t interval; + kern_return_t err; interval.tv_sec = 0; interval.tv_nsec = 0; - if (semaphore_timedwait(*sem, interval) == KERN_SUCCESS) + err = semaphore_timedwait(*sem, interval); + if (err == KERN_SUCCESS) return 0; - else - return -1; + if (err == KERN_OPERATION_TIMED_OUT) + return -EAGAIN; + + abort(); + return -EINVAL; /* Satisfy the compiler. */ } #else /* !(defined(__APPLE__) && defined(__MACH__)) */ int uv_sem_init(uv_sem_t* sem, unsigned int value) { - return sem_init(sem, 0, value); + if (sem_init(sem, 0, value)) + return -errno; + return 0; } @@ -255,10 +252,13 @@ int uv_sem_trywait(uv_sem_t* sem) { r = sem_trywait(sem); while (r == -1 && errno == EINTR); - if (r && errno != EAGAIN) + if (r) { + if (errno == EAGAIN) + return -EAGAIN; abort(); + } - return r; + return 0; } #endif /* defined(__APPLE__) && defined(__MACH__) */ @@ -267,29 +267,31 @@ int uv_sem_trywait(uv_sem_t* sem) { #if defined(__APPLE__) && defined(__MACH__) int uv_cond_init(uv_cond_t* cond) { - if (pthread_cond_init(cond, NULL)) - return -1; - else - return 0; + return -pthread_cond_init(cond, NULL); } #else /* !(defined(__APPLE__) && defined(__MACH__)) */ int uv_cond_init(uv_cond_t* cond) { pthread_condattr_t attr; + int err; - if (pthread_condattr_init(&attr)) - return -1; + err = pthread_condattr_init(&attr); + if (err) + return -err; #if !defined(__ANDROID__) - if (pthread_condattr_setclock(&attr, CLOCK_MONOTONIC)) + err = pthread_condattr_setclock(&attr, CLOCK_MONOTONIC); + if (err) goto error2; #endif - if (pthread_cond_init(cond, &attr)) + err = pthread_cond_init(cond, &attr); + if (err) goto error2; - if (pthread_condattr_destroy(&attr)) + err = pthread_condattr_destroy(&attr); + if (err) goto error; return 0; @@ -298,7 +300,7 @@ error: pthread_cond_destroy(cond); error2: pthread_condattr_destroy(&attr); - return -1; + return -err; } #endif /* defined(__APPLE__) && defined(__MACH__) */ @@ -352,26 +354,31 @@ int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout) { return 0; if (r == ETIMEDOUT) - return -1; + return -ETIMEDOUT; abort(); - return -1; /* Satisfy the compiler. */ + return -EINVAL; /* Satisfy the compiler. */ } #if defined(__APPLE__) && defined(__MACH__) int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) { + int err; + barrier->n = count; barrier->count = 0; - if (uv_mutex_init(&barrier->mutex)) - return -1; + err = uv_mutex_init(&barrier->mutex); + if (err) + return -err; - if (uv_sem_init(&barrier->turnstile1, 0)) + err = uv_sem_init(&barrier->turnstile1, 0); + if (err) goto error2; - if (uv_sem_init(&barrier->turnstile2, 1)) + err = uv_sem_init(&barrier->turnstile2, 1); + if (err) goto error; return 0; @@ -380,7 +387,7 @@ error: uv_sem_destroy(&barrier->turnstile1); error2: uv_mutex_destroy(&barrier->mutex); - return -1; + return -err; } @@ -417,10 +424,7 @@ void uv_barrier_wait(uv_barrier_t* barrier) { #else /* !(defined(__APPLE__) && defined(__MACH__)) */ int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) { - if (pthread_barrier_init(barrier, NULL, count)) - return -1; - else - return 0; + return -pthread_barrier_init(barrier, NULL, count); } diff --git a/deps/uv/src/unix/threadpool.c b/deps/uv/src/unix/threadpool.c index 835db31..5a3a5f5 100644 --- a/deps/uv/src/unix/threadpool.c +++ b/deps/uv/src/unix/threadpool.c @@ -182,7 +182,7 @@ static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) { uv_mutex_unlock(&mutex); if (!cancelled) - return -1; + return -EBUSY; w->work = uv__cancelled; uv_mutex_lock(&loop->wq_mutex); @@ -216,7 +216,7 @@ void uv__work_done(uv_async_t* handle, int status) { QUEUE_REMOVE(q); w = container_of(q, struct uv__work, wq); - err = (w->work == uv__cancelled) ? -UV_ECANCELED : 0; + err = (w->work == uv__cancelled) ? -ECANCELED : 0; w->done(w, err); } } @@ -229,7 +229,7 @@ static void uv__queue_work(struct uv__work* w) { } -static void uv__queue_done(struct uv__work* w, int status) { +static void uv__queue_done(struct uv__work* w, int err) { uv_work_t* req; req = container_of(w, uv_work_t, work_req); @@ -238,10 +238,7 @@ static void uv__queue_done(struct uv__work* w, int status) { if (req->after_work_cb == NULL) return; - if (status == -UV_ECANCELED) - uv__set_artificial_error(req->loop, UV_ECANCELED); - - req->after_work_cb(req, status ? -1 : 0); + req->after_work_cb(req, err); } @@ -250,7 +247,7 @@ int uv_queue_work(uv_loop_t* loop, uv_work_cb work_cb, uv_after_work_cb after_work_cb) { if (work_cb == NULL) - return uv__set_artificial_error(loop, UV_EINVAL); + return -EINVAL; uv__req_init(loop, req, UV_WORK); req->loop = loop; @@ -279,7 +276,7 @@ int uv_cancel(uv_req_t* req) { wreq = &((uv_work_t*) req)->work_req; break; default: - return -1; + return -EINVAL; } return uv__work_cancel(loop, req, wreq); diff --git a/deps/uv/src/unix/timer.c b/deps/uv/src/unix/timer.c index 57d32f5..240efad 100644 --- a/deps/uv/src/unix/timer.c +++ b/deps/uv/src/unix/timer.c @@ -92,7 +92,7 @@ int uv_timer_stop(uv_timer_t* handle) { int uv_timer_again(uv_timer_t* handle) { if (handle->timer_cb == NULL) - return uv__set_artificial_error(handle->loop, UV_EINVAL); + return -EINVAL; if (handle->repeat) { uv_timer_stop(handle); diff --git a/deps/uv/src/unix/tty.c b/deps/uv/src/unix/tty.c index a2b76ad..91baa6a 100644 --- a/deps/uv/src/unix/tty.c +++ b/deps/uv/src/unix/tty.c @@ -37,8 +37,11 @@ int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, int fd, int readable) { uv__stream_init(loop, (uv_stream_t*)tty, UV_TTY); #if defined(__APPLE__) - if (uv__stream_try_select((uv_stream_t*) tty, &fd)) - return -1; + { + int err = uv__stream_try_select((uv_stream_t*) tty, &fd); + if (err) + return err; + } #endif /* defined(__APPLE__) */ if (readable) { @@ -102,18 +105,15 @@ int uv_tty_set_mode(uv_tty_t* tty, int mode) { } fatal: - uv__set_sys_error(tty->loop, errno); - return -1; + return -errno; } int uv_tty_get_winsize(uv_tty_t* tty, int* width, int* height) { struct winsize ws; - if (ioctl(uv__stream_fd(tty), TIOCGWINSZ, &ws) < 0) { - uv__set_sys_error(tty->loop, errno); - return -1; - } + if (ioctl(uv__stream_fd(tty), TIOCGWINSZ, &ws)) + return -errno; *width = ws.ws_col; *height = ws.ws_row; diff --git a/deps/uv/src/unix/udp.c b/deps/uv/src/unix/udp.c index b19aebc..72a4acf 100644 --- a/deps/uv/src/unix/udp.c +++ b/deps/uv/src/unix/udp.c @@ -72,10 +72,8 @@ void uv__udp_finish_close(uv_udp_t* handle) { free(req->bufs); req->bufs = NULL; - if (req->send_cb) { - uv__set_artificial_error(handle->loop, UV_ECANCELED); - req->send_cb(req, -1); - } + if (req->send_cb != NULL) + req->send_cb(req, -ECANCELED); } /* Now tear down the handle. */ @@ -163,13 +161,10 @@ static void uv__udp_run_completed(uv_udp_t* handle) { /* req->status >= 0 == bytes written * req->status < 0 == errno */ - if (req->status >= 0) { + if (req->status >= 0) req->send_cb(req, 0); - } - else { - uv__set_sys_error(handle->loop, -req->status); - req->send_cb(req, -1); - } + else + req->send_cb(req, req->status); } } @@ -224,14 +219,10 @@ static void uv__udp_recvmsg(uv_loop_t* loop, while (nread == -1 && errno == EINTR); if (nread == -1) { - if (errno == EAGAIN || errno == EWOULDBLOCK) { - uv__set_sys_error(handle->loop, EAGAIN); + if (errno == EAGAIN || errno == EWOULDBLOCK) handle->recv_cb(handle, 0, buf, NULL, 0); - } - else { - uv__set_sys_error(handle->loop, errno); - handle->recv_cb(handle, -1, buf, NULL, 0); - } + else + handle->recv_cb(handle, -errno, buf, NULL, 0); } else { flags = 0; @@ -291,30 +282,32 @@ static int uv__bind(uv_udp_t* handle, struct sockaddr* addr, socklen_t len, unsigned flags) { + int err; int yes; int fd; + err = -EINVAL; fd = -1; /* Check for bad flags. */ if (flags & ~UV_UDP_IPV6ONLY) - return uv__set_sys_error(handle->loop, EINVAL); + return -EINVAL; /* Cannot set IPv6-only mode on non-IPv6 socket. */ if ((flags & UV_UDP_IPV6ONLY) && domain != AF_INET6) - return uv__set_sys_error(handle->loop, EINVAL); + return -EINVAL; fd = handle->io_watcher.fd; if (fd == -1) { fd = uv__socket(domain, SOCK_DGRAM, 0); if (fd == -1) - return uv__set_sys_error(handle->loop, errno); + return -errno; handle->io_watcher.fd = fd; } yes = 1; if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes) == -1) { - uv__set_sys_error(handle->loop, errno); + err = -errno; goto out; } @@ -329,7 +322,7 @@ static int uv__bind(uv_udp_t* handle, #ifdef SO_REUSEPORT yes = 1; if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof yes) == -1) { - uv__set_sys_error(handle->loop, errno); + err = -errno; goto out; } #endif @@ -338,17 +331,17 @@ static int uv__bind(uv_udp_t* handle, #ifdef IPV6_V6ONLY yes = 1; if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &yes, sizeof yes) == -1) { - uv__set_sys_error(handle->loop, errno); + err = -errno; goto out; } #else - uv__set_sys_error(handle->loop, ENOTSUP); + err = -ENOTSUP; goto out; #endif } if (bind(fd, addr, len) == -1) { - uv__set_sys_error(handle->loop, errno); + err = -errno; goto out; } @@ -357,7 +350,7 @@ static int uv__bind(uv_udp_t* handle, out: close(handle->io_watcher.fd); handle->io_watcher.fd = -1; - return -1; + return err; } @@ -405,10 +398,13 @@ static int uv__send(uv_udp_send_t* req, struct sockaddr* addr, socklen_t addrlen, uv_udp_send_cb send_cb) { + int err; + assert(bufcnt > 0); - if (uv__udp_maybe_deferred_bind(handle, addr->sa_family)) - return -1; + err = uv__udp_maybe_deferred_bind(handle, addr->sa_family); + if (err) + return err; uv__req_init(handle->loop, req, UV_UDP_SEND); @@ -418,13 +414,13 @@ static int uv__send(uv_udp_send_t* req, req->handle = handle; req->bufcnt = bufcnt; - if (bufcnt <= (int) ARRAY_SIZE(req->bufsml)) { + if (bufcnt <= (int) ARRAY_SIZE(req->bufsml)) req->bufs = req->bufsml; - } - else if ((req->bufs = malloc(bufcnt * sizeof(bufs[0]))) == NULL) { - uv__set_sys_error(handle->loop, ENOMEM); - return -1; - } + else + req->bufs = malloc(bufcnt * sizeof(*bufs)); + + if (req->bufs == NULL) + return -ENOMEM; memcpy(req->bufs, bufs, bufcnt * sizeof(bufs[0])); QUEUE_INSERT_TAIL(&handle->write_queue, &req->queue); @@ -469,11 +465,11 @@ int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) { /* Check for already active socket. */ if (handle->io_watcher.fd != -1) - return uv__set_artificial_error(handle->loop, UV_EALREADY); + return -EALREADY; /* FIXME(bnoordhuis) Should be -EBUSY. */ yes = 1; - if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes) == -1) - return uv__set_sys_error(handle->loop, errno); + if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes)) + return -errno; /* On the BSDs, SO_REUSEADDR lets you reuse an address that's in the TIME_WAIT * state (i.e. was until recently tied to a socket) while SO_REUSEPORT lets @@ -485,8 +481,8 @@ int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) { */ #ifdef SO_REUSEPORT yes = 1; - if (setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof yes) == -1) - return uv__set_sys_error(handle->loop, errno); + if (setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof yes)) + return -errno; #endif handle->io_watcher.fd = sock; @@ -519,7 +515,7 @@ int uv_udp_set_membership(uv_udp_t* handle, optname = IP_DROP_MEMBERSHIP; break; default: - return uv__set_artificial_error(handle->loop, UV_EINVAL); + return -EINVAL; } if (setsockopt(handle->io_watcher.fd, @@ -527,7 +523,7 @@ int uv_udp_set_membership(uv_udp_t* handle, optname, &mreq, sizeof(mreq))) { - return uv__set_sys_error(handle->loop, errno); + return -errno; } return 0; @@ -542,10 +538,10 @@ static int uv__setsockopt_maybe_char(uv_udp_t* handle, int option, int val) { #endif if (val < 0 || val > 255) - return uv__set_sys_error(handle->loop, EINVAL); + return -EINVAL; if (setsockopt(handle->io_watcher.fd, IPPROTO_IP, option, &arg, sizeof(arg))) - return uv__set_sys_error(handle->loop, errno); + return -errno; return 0; } @@ -557,7 +553,7 @@ int uv_udp_set_broadcast(uv_udp_t* handle, int on) { SO_BROADCAST, &on, sizeof(on))) { - return uv__set_sys_error(handle->loop, errno); + return -errno; } return 0; @@ -566,10 +562,10 @@ int uv_udp_set_broadcast(uv_udp_t* handle, int on) { int uv_udp_set_ttl(uv_udp_t* handle, int ttl) { if (ttl < 1 || ttl > 255) - return uv__set_sys_error(handle->loop, EINVAL); + return -EINVAL; if (setsockopt(handle->io_watcher.fd, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl))) - return uv__set_sys_error(handle->loop, errno); + return -errno; return 0; } @@ -589,13 +585,13 @@ int uv_udp_getsockname(uv_udp_t* handle, struct sockaddr* name, int* namelen) { socklen_t socklen; if (handle->io_watcher.fd == -1) - return uv__set_sys_error(handle->loop, EINVAL); + return -EINVAL; /* FIXME(bnoordhuis) -EBADF */ /* sizeof(socklen_t) != sizeof(int) on some systems. */ socklen = (socklen_t) *namelen; - if (getsockname(handle->io_watcher.fd, name, &socklen) == -1) - return uv__set_sys_error(handle->loop, errno); + if (getsockname(handle->io_watcher.fd, name, &socklen)) + return -errno; *namelen = (int) socklen; return 0; @@ -637,18 +633,17 @@ int uv__udp_send6(uv_udp_send_t* req, int uv__udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb) { - if (alloc_cb == NULL || recv_cb == NULL) { - uv__set_artificial_error(handle->loop, UV_EINVAL); - return -1; - } + int err; - if (uv__io_active(&handle->io_watcher, UV__POLLIN)) { - uv__set_artificial_error(handle->loop, UV_EALREADY); - return -1; - } + if (alloc_cb == NULL || recv_cb == NULL) + return -EINVAL; + + if (uv__io_active(&handle->io_watcher, UV__POLLIN)) + return -EALREADY; /* FIXME(bnoordhuis) Should be -EBUSY. */ - if (uv__udp_maybe_deferred_bind(handle, AF_INET)) - return -1; + err = uv__udp_maybe_deferred_bind(handle, AF_INET); + if (err) + return err; handle->alloc_cb = alloc_cb; handle->recv_cb = recv_cb; diff --git a/deps/uv/src/uv-common.c b/deps/uv/src/uv-common.c index 64a2599..9bcef45 100644 --- a/deps/uv/src/uv-common.c +++ b/deps/uv/src/uv-common.c @@ -28,6 +28,16 @@ #include /* malloc */ #include /* memset */ +#if defined(UV_PLATFORM_HAS_IP6_LINK_LOCAL_ADDRESS) && !defined(_WIN32) +# include /* if_nametoindex */ +#endif + +/* EAI_* constants. */ +#if !defined(_WIN32) +# include +# include +# include +#endif #define XX(uc, lc) case UV_##uc: return sizeof(uv_##lc##_t); @@ -92,11 +102,9 @@ uv_buf_t uv_buf_init(char* base, unsigned int len) { } -const uv_err_t uv_ok_ = { UV_OK, 0 }; - -#define UV_ERR_NAME_GEN(val, name, s) case UV_##name : return #name; -const char* uv_err_name(uv_err_t err) { - switch (err.code) { +#define UV_ERR_NAME_GEN(name, _) case UV_ ## name: return #name; +const char* uv_err_name(int err) { + switch (err) { UV_ERRNO_MAP(UV_ERR_NAME_GEN) default: assert(0); @@ -106,9 +114,9 @@ const char* uv_err_name(uv_err_t err) { #undef UV_ERR_NAME_GEN -#define UV_STRERROR_GEN(val, name, s) case UV_##name : return s; -const char* uv_strerror(uv_err_t err) { - switch (err.code) { +#define UV_STRERROR_GEN(name, msg) case UV_ ## name: return msg; +const char* uv_strerror(int err) { + switch (err) { UV_ERRNO_MAP(UV_STRERROR_GEN) default: return "Unknown system error"; @@ -117,47 +125,6 @@ const char* uv_strerror(uv_err_t err) { #undef UV_STRERROR_GEN -int uv__set_error(uv_loop_t* loop, uv_err_code code, int sys_error) { - loop->last_err.code = code; - loop->last_err.sys_errno_ = sys_error; - return -1; -} - - -int uv__set_sys_error(uv_loop_t* loop, int sys_error) { - loop->last_err.code = uv_translate_sys_error(sys_error); - loop->last_err.sys_errno_ = sys_error; - return -1; -} - - -int uv__set_artificial_error(uv_loop_t* loop, uv_err_code code) { - loop->last_err = uv__new_artificial_error(code); - return -1; -} - - -uv_err_t uv__new_sys_error(int sys_error) { - uv_err_t error; - error.code = uv_translate_sys_error(sys_error); - error.sys_errno_ = sys_error; - return error; -} - - -uv_err_t uv__new_artificial_error(uv_err_code code) { - uv_err_t error; - error.code = code; - error.sys_errno_ = 0; - return error; -} - - -uv_err_t uv_last_error(uv_loop_t* loop) { - return loop->last_err; -} - - struct sockaddr_in uv_ip4_addr(const char* ip, int port) { struct sockaddr_in addr; @@ -173,11 +140,36 @@ struct sockaddr_in uv_ip4_addr(const char* ip, int port) { struct sockaddr_in6 uv_ip6_addr(const char* ip, int port) { struct sockaddr_in6 addr; + char address_part[40]; + size_t address_part_size; + const char* zone_index; memset(&addr, 0, sizeof(struct sockaddr_in6)); addr.sin6_family = AF_INET6; addr.sin6_port = htons(port); + +#if defined(UV_PLATFORM_HAS_IP6_LINK_LOCAL_ADDRESS) + zone_index = strchr(ip, '%'); + if (zone_index != NULL) { + address_part_size = sizeof(address_part); + assert((unsigned)(zone_index - ip) < address_part_size); + strncpy(address_part, ip, zone_index - ip); + address_part[address_part_size - 1] = '\0'; + + ip = address_part; + + zone_index++; /* skip '%' */ + /* NOTE: unknown interface (id=0) is silently ignored */ +#ifdef _WIN32 + addr.sin6_scope_id = atoi(zone_index); +#else + addr.sin6_scope_id = if_nametoindex(zone_index); +#endif + } +#endif + + /* result code is ignored - we assume ip is a valid IPv6 address */ uv_inet_pton(AF_INET6, ip, &addr.sin6_addr); return addr; @@ -185,20 +177,18 @@ struct sockaddr_in6 uv_ip6_addr(const char* ip, int port) { int uv_ip4_name(struct sockaddr_in* src, char* dst, size_t size) { - uv_err_t err = uv_inet_ntop(AF_INET, &src->sin_addr, dst, size); - return err.code != UV_OK; + return uv_inet_ntop(AF_INET, &src->sin_addr, dst, size); } int uv_ip6_name(struct sockaddr_in6* src, char* dst, size_t size) { - uv_err_t err = uv_inet_ntop(AF_INET6, &src->sin6_addr, dst, size); - return err.code != UV_OK; + return uv_inet_ntop(AF_INET6, &src->sin6_addr, dst, size); } int uv_tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr) { if (handle->type != UV_TCP || addr.sin_family != AF_INET) - return uv__set_artificial_error(handle->loop, UV_EINVAL); + return UV_EINVAL; else return uv__tcp_bind(handle, addr); } @@ -206,7 +196,7 @@ int uv_tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr) { int uv_tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr) { if (handle->type != UV_TCP || addr.sin6_family != AF_INET6) - return uv__set_artificial_error(handle->loop, UV_EINVAL); + return UV_EINVAL; else return uv__tcp_bind6(handle, addr); } @@ -216,7 +206,7 @@ int uv_udp_bind(uv_udp_t* handle, struct sockaddr_in addr, unsigned int flags) { if (handle->type != UV_UDP || addr.sin_family != AF_INET) - return uv__set_artificial_error(handle->loop, UV_EINVAL); + return UV_EINVAL; else return uv__udp_bind(handle, addr, flags); } @@ -226,7 +216,7 @@ int uv_udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, unsigned int flags) { if (handle->type != UV_UDP || addr.sin6_family != AF_INET6) - return uv__set_artificial_error(handle->loop, UV_EINVAL); + return UV_EINVAL; else return uv__udp_bind6(handle, addr, flags); } @@ -237,7 +227,7 @@ int uv_tcp_connect(uv_connect_t* req, struct sockaddr_in address, uv_connect_cb cb) { if (handle->type != UV_TCP || address.sin_family != AF_INET) - return uv__set_artificial_error(handle->loop, UV_EINVAL); + return UV_EINVAL; else return uv__tcp_connect(req, handle, address, cb); } @@ -248,7 +238,7 @@ int uv_tcp_connect6(uv_connect_t* req, struct sockaddr_in6 address, uv_connect_cb cb) { if (handle->type != UV_TCP || address.sin6_family != AF_INET6) - return uv__set_artificial_error(handle->loop, UV_EINVAL); + return UV_EINVAL; else return uv__tcp_connect6(req, handle, address, cb); } @@ -260,11 +250,10 @@ int uv_udp_send(uv_udp_send_t* req, int bufcnt, struct sockaddr_in addr, uv_udp_send_cb send_cb) { - if (handle->type != UV_UDP || addr.sin_family != AF_INET) { - return uv__set_artificial_error(handle->loop, UV_EINVAL); - } - - return uv__udp_send(req, handle, bufs, bufcnt, addr, send_cb); + if (handle->type != UV_UDP || addr.sin_family != AF_INET) + return UV_EINVAL; + else + return uv__udp_send(req, handle, bufs, bufcnt, addr, send_cb); } @@ -274,31 +263,28 @@ int uv_udp_send6(uv_udp_send_t* req, int bufcnt, struct sockaddr_in6 addr, uv_udp_send_cb send_cb) { - if (handle->type != UV_UDP || addr.sin6_family != AF_INET6) { - return uv__set_artificial_error(handle->loop, UV_EINVAL); - } - - return uv__udp_send6(req, handle, bufs, bufcnt, addr, send_cb); + if (handle->type != UV_UDP || addr.sin6_family != AF_INET6) + return UV_EINVAL; + else + return uv__udp_send6(req, handle, bufs, bufcnt, addr, send_cb); } int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb) { - if (handle->type != UV_UDP || alloc_cb == NULL || recv_cb == NULL) { - return uv__set_artificial_error(handle->loop, UV_EINVAL); - } - - return uv__udp_recv_start(handle, alloc_cb, recv_cb); + if (handle->type != UV_UDP || alloc_cb == NULL || recv_cb == NULL) + return UV_EINVAL; + else + return uv__udp_recv_start(handle, alloc_cb, recv_cb); } int uv_udp_recv_stop(uv_udp_t* handle) { - if (handle->type != UV_UDP) { - return uv__set_artificial_error(handle->loop, UV_EINVAL); - } - - return uv__udp_recv_stop(handle); + if (handle->type != UV_UDP) + return UV_EINVAL; + else + return uv__udp_recv_stop(handle); } @@ -332,7 +318,7 @@ int uv_thread_create(uv_thread_t *tid, void (*entry)(void *arg), void *arg) { ctx = malloc(sizeof(*ctx)); if (ctx == NULL) - return -1; + return UV_ENOMEM; ctx->entry = entry; ctx->arg = arg; @@ -439,3 +425,50 @@ void uv_stop(uv_loop_t* loop) { uint64_t uv_now(uv_loop_t* loop) { return loop->time; } + + +int uv__getaddrinfo_translate_error(int sys_err) { + switch (sys_err) { + case 0: return 0; +#if defined(EAI_ADDRFAMILY) + case EAI_ADDRFAMILY: return UV_EAI_ADDRFAMILY; +#endif +#if defined(EAI_AGAIN) + case EAI_AGAIN: return UV_EAI_AGAIN; +#endif +#if defined(EAI_BADFLAGS) + case EAI_BADFLAGS: return UV_EAI_BADFLAGS; +#endif +#if defined(EAI_CANCELED) + case EAI_CANCELED: return UV_EAI_CANCELED; +#endif +#if defined(EAI_FAIL) + case EAI_FAIL: return UV_EAI_FAIL; +#endif +#if defined(EAI_FAMILY) + case EAI_FAMILY: return UV_EAI_FAMILY; +#endif +#if defined(EAI_MEMORY) + case EAI_MEMORY: return UV_EAI_MEMORY; +#endif +#if defined(EAI_NODATA) + case EAI_NODATA: return UV_EAI_NODATA; +#endif +#if defined(EAI_NONAME) +# if !defined(EAI_NODATA) || EAI_NODATA != EAI_NONAME + case EAI_NONAME: return UV_EAI_NONAME; +# endif +#endif +#if defined(EAI_SERVICE) + case EAI_SERVICE: return UV_EAI_SERVICE; +#endif +#if defined(EAI_SOCKTYPE) + case EAI_SOCKTYPE: return UV_EAI_SOCKTYPE; +#endif +#if defined(EAI_SYSTEM) + case EAI_SYSTEM: return UV_EAI_SYSTEM; +#endif + } + assert(!"unknown EAI_* error code"); + abort(); +} diff --git a/deps/uv/src/uv-common.h b/deps/uv/src/uv-common.h index bbd3e17..f3d7368 100644 --- a/deps/uv/src/uv-common.h +++ b/deps/uv/src/uv-common.h @@ -31,7 +31,7 @@ #include #if defined(_MSC_VER) && _MSC_VER < 1600 -# include "uv-private/stdint-msvc2008.h" +# include "stdint-msvc2008.h" #else # include #endif @@ -69,15 +69,6 @@ enum { # define UV__HANDLE_CLOSING 0x01 #endif -extern const uv_err_t uv_ok_; - -uv_err_code uv_translate_sys_error(int sys_errno); -int uv__set_error(uv_loop_t* loop, uv_err_code code, int sys_error); -int uv__set_sys_error(uv_loop_t* loop, int sys_error); -int uv__set_artificial_error(uv_loop_t* loop, uv_err_code code); -uv_err_t uv__new_sys_error(int sys_error); -uv_err_t uv__new_artificial_error(uv_err_code code); - int uv__tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr); int uv__tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr); @@ -115,6 +106,7 @@ int uv__udp_recv_stop(uv_udp_t* handle); void uv__fs_poll_close(uv_fs_poll_t* handle); +int uv__getaddrinfo_translate_error(int sys_err); /* EAI_* error. */ #define uv__has_active_reqs(loop) \ (QUEUE_EMPTY(&(loop)->active_reqs) == 0) diff --git a/deps/uv/src/version.c b/deps/uv/src/version.c index 9ec64f6..e65d5a5 100644 --- a/deps/uv/src/version.c +++ b/deps/uv/src/version.c @@ -31,7 +31,7 @@ #define UV_VERSION_MAJOR 0 #define UV_VERSION_MINOR 11 -#define UV_VERSION_PATCH 5 +#define UV_VERSION_PATCH 6 #define UV_VERSION_IS_RELEASE 1 diff --git a/deps/uv/src/win/core.c b/deps/uv/src/win/core.c index 9b77746..16373da 100644 --- a/deps/uv/src/win/core.c +++ b/deps/uv/src/win/core.c @@ -118,8 +118,6 @@ static void uv_loop_init(uv_loop_t* loop) { loop->timer_counter = 0; loop->stop_flag = 0; - - loop->last_err = uv_ok_; } diff --git a/deps/uv/src/win/error.c b/deps/uv/src/win/error.c index 2a72ff2..0937664 100644 --- a/deps/uv/src/win/error.c +++ b/deps/uv/src/win/error.c @@ -63,9 +63,12 @@ void uv_fatal_error(const int errorno, const char* syscall) { } -uv_err_code uv_translate_sys_error(int sys_errno) { +int uv_translate_sys_error(int sys_errno) { + if (sys_errno <= 0) { + return sys_errno; /* If < 0 then it's already a libuv error. */ + } + switch (sys_errno) { - case ERROR_SUCCESS: return UV_OK; case ERROR_NOACCESS: return UV_EACCES; case WSAEACCES: return UV_EACCES; case ERROR_ADDRESS_ALREADY_ASSOCIATED: return UV_EADDRINUSE; @@ -117,6 +120,7 @@ uv_err_code uv_translate_sys_error(int sys_errno) { case ERROR_OPEN_FAILED: return UV_EIO; case ERROR_SETMARK_DETECTED: return UV_EIO; case ERROR_SIGNAL_REFUSED: return UV_EIO; + case WSAEISCONN: return UV_EISCONN; case ERROR_CANT_RESOLVE_FILENAME: return UV_ELOOP; case ERROR_TOO_MANY_OPEN_FILES: return UV_EMFILE; case WSAEMFILE: return UV_EMFILE; @@ -161,4 +165,3 @@ uv_err_code uv_translate_sys_error(int sys_errno) { default: return UV_UNKNOWN; } } - diff --git a/deps/uv/src/win/fs-event.c b/deps/uv/src/win/fs-event.c index 1954cb0..39aa9c8 100644 --- a/deps/uv/src/win/fs-event.c +++ b/deps/uv/src/win/fs-event.c @@ -149,8 +149,7 @@ int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle, if (!uv_utf8_to_utf16(filename, filenamew, name_size / sizeof(WCHAR))) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return uv_translate_sys_error(GetLastError()); } /* Determine whether filename is a file or a directory. */ @@ -279,15 +278,14 @@ error: handle->buffer = NULL; } - uv__set_sys_error(loop, last_error); - return -1; + return uv_translate_sys_error(last_error); } void uv_process_fs_event_req(uv_loop_t* loop, uv_req_t* req, uv_fs_event_t* handle) { FILE_NOTIFY_INFORMATION* file_info; - int sizew, size, result; + int err, sizew, size, result; char* filename = NULL; WCHAR* filenamew, *long_filenamew = NULL; DWORD offset = 0; @@ -445,8 +443,8 @@ void uv_process_fs_event_req(uv_loop_t* loop, uv_req_t* req, handle->cb(handle, NULL, UV_CHANGE, 0); } } else { - uv__set_sys_error(loop, GET_REQ_ERROR(req)); - handle->cb(handle, NULL, 0, -1); + err = GET_REQ_ERROR(req); + handle->cb(handle, NULL, 0, uv_translate_sys_error(err)); } if (!(handle->flags & UV__HANDLE_CLOSING)) { diff --git a/deps/uv/src/win/fs.c b/deps/uv/src/win/fs.c index 3d7b3d9..1de5ae0 100644 --- a/deps/uv/src/win/fs.c +++ b/deps/uv/src/win/fs.c @@ -44,35 +44,28 @@ if (!QueueUserWorkItem(&uv_fs_thread_proc, \ req, \ WT_EXECUTEDEFAULT)) { \ - uv__set_sys_error((loop), GetLastError()); \ - return -1; \ + return uv_translate_sys_error(GetLastError()); \ } \ uv__req_register(loop, req); -#define SET_UV_LAST_ERROR_FROM_REQ(req) \ - uv__set_error(req->loop, req->errorno, req->sys_errno_); - #define SET_REQ_RESULT(req, result_value) \ req->result = (result_value); \ if (req->result == -1) { \ req->sys_errno_ = _doserrno; \ - req->errorno = uv_translate_sys_error(req->sys_errno_); \ + req->result = uv_translate_sys_error(req->sys_errno_); \ } #define SET_REQ_WIN32_ERROR(req, sys_errno) \ - req->result = -1; \ req->sys_errno_ = (sys_errno); \ - req->errorno = uv_translate_sys_error(req->sys_errno_); + req->result = uv_translate_sys_error(req->sys_errno_); \ #define SET_REQ_UV_ERROR(req, uv_errno, sys_errno) \ - req->result = -1; \ + req->result = (uv_errno); \ req->sys_errno_ = (sys_errno); \ - req->errorno = (uv_errno); #define VERIFY_FD(fd, req) \ if (fd == -1) { \ - req->result = -1; \ - req->errorno = UV_EBADF; \ + req->result = UV_EBADF; \ req->sys_errno_ = ERROR_INVALID_HANDLE; \ return; \ } @@ -131,8 +124,7 @@ INLINE static int fs__capture_path(uv_loop_t* loop, uv_fs_t* req, NULL, 0); if (pathw_len == 0) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return GetLastError(); } buf_sz += pathw_len * sizeof(WCHAR); @@ -151,8 +143,7 @@ INLINE static int fs__capture_path(uv_loop_t* loop, uv_fs_t* req, NULL, 0); if (new_pathw_len == 0) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return GetLastError(); } buf_sz += new_pathw_len * sizeof(WCHAR); @@ -168,8 +159,7 @@ INLINE static int fs__capture_path(uv_loop_t* loop, uv_fs_t* req, buf = (char*) malloc(buf_sz); if (buf == NULL) { - uv__set_artificial_error(loop, UV_ENOMEM); - return -1; + return ERROR_OUTOFMEMORY; } pos = buf; @@ -229,7 +219,6 @@ INLINE static void uv_fs_req_init(uv_loop_t* loop, uv_fs_t* req, req->fs_type = fs_type; req->result = 0; req->ptr = NULL; - req->errorno = UV_OK; req->path = NULL; if (cb != NULL) { @@ -726,8 +715,7 @@ void fs__readdir(uv_fs_t* req) { /* Figure out whether path is a file or a directory. */ if (!(GetFileAttributesW(pathw) & FILE_ATTRIBUTE_DIRECTORY)) { - req->result = -1; - req->errorno = UV_ENOTDIR; + req->result = UV_ENOTDIR; req->sys_errno_ = ERROR_SUCCESS; return; } @@ -839,6 +827,9 @@ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf) { statbuf->st_blksize = 0; statbuf->st_blocks = 0; + statbuf->st_flags = 0; + statbuf->st_gen = 0; + if (info.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) { if (fs__readlink_handle(handle, NULL, &statbuf->st_size) != 0) { return -1; @@ -863,6 +854,7 @@ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf) { FILETIME_TO_TIMESPEC(statbuf->st_mtim, info.ftLastWriteTime); FILETIME_TO_TIMESPEC(statbuf->st_atim, info.ftLastAccessTime); FILETIME_TO_TIMESPEC(statbuf->st_ctim, info.ftCreationTime); + FILETIME_TO_TIMESPEC(statbuf->st_birthtim, info.ftCreationTime); statbuf->st_nlink = (info.nNumberOfLinks <= SHRT_MAX) ? (short) info.nNumberOfLinks : SHRT_MAX; @@ -1473,10 +1465,13 @@ static DWORD WINAPI uv_fs_thread_proc(void* parameter) { int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int mode, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_OPEN, cb); - if (fs__capture_path(loop, req, path, NULL, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, NULL, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } req->file_flags = flags; @@ -1487,7 +1482,6 @@ int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, return 0; } else { fs__open(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1502,7 +1496,6 @@ int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) { return 0; } else { fs__close(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1522,7 +1515,6 @@ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, uv_file fd, void* buf, return 0; } else { fs__read(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1542,7 +1534,6 @@ int uv_fs_write(uv_loop_t* loop, uv_fs_t* req, uv_file fd, void* buf, return 0; } else { fs__write(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1550,10 +1541,13 @@ int uv_fs_write(uv_loop_t* loop, uv_fs_t* req, uv_file fd, void* buf, int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_UNLINK, cb); - if (fs__capture_path(loop, req, path, NULL, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, NULL, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } if (cb) { @@ -1561,7 +1555,6 @@ int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, return 0; } else { fs__unlink(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1569,10 +1562,13 @@ int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_MKDIR, cb); - if (fs__capture_path(loop, req, path, NULL, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, NULL, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } req->mode = mode; @@ -1582,17 +1578,19 @@ int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, return 0; } else { fs__mkdir(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_RMDIR, cb); - if (fs__capture_path(loop, req, path, NULL, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, NULL, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } if (cb) { @@ -1600,7 +1598,6 @@ int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { return 0; } else { fs__rmdir(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1608,10 +1605,13 @@ int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_READDIR, cb); - if (fs__capture_path(loop, req, path, NULL, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, NULL, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } req->file_flags; @@ -1621,7 +1621,6 @@ int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, return 0; } else { fs__readdir(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1629,10 +1628,13 @@ int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_LINK, cb); - if (fs__capture_path(loop, req, path, new_path, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, new_path, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } if (cb) { @@ -1640,7 +1642,6 @@ int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char* path, return 0; } else { fs__link(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1648,10 +1649,13 @@ int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char* path, int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, int flags, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_SYMLINK, cb); - if (fs__capture_path(loop, req, path, new_path, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, new_path, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } req->file_flags = flags; @@ -1661,7 +1665,6 @@ int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char* path, return 0; } else { fs__symlink(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1669,10 +1672,13 @@ int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char* path, int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_READLINK, cb); - if (fs__capture_path(loop, req, path, NULL, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, NULL, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } if (cb) { @@ -1680,7 +1686,6 @@ int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, return 0; } else { fs__readlink(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1688,10 +1693,13 @@ int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char* path, int uid, int gid, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_CHOWN, cb); - if (fs__capture_path(loop, req, path, NULL, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, NULL, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } if (cb) { @@ -1699,7 +1707,6 @@ int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char* path, int uid, return 0; } else { fs__chown(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1714,17 +1721,19 @@ int uv_fs_fchown(uv_loop_t* loop, uv_fs_t* req, uv_file fd, int uid, return 0; } else { fs__fchown(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_STAT, cb); - if (fs__capture_path(loop, req, path, NULL, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, NULL, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } if (cb) { @@ -1732,17 +1741,19 @@ int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { return 0; } else { fs__stat(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_LSTAT, cb); - if (fs__capture_path(loop, req, path, NULL, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, NULL, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } if (cb) { @@ -1750,7 +1761,6 @@ int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { return 0; } else { fs__lstat(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1765,7 +1775,6 @@ int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) { return 0; } else { fs__fstat(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1773,10 +1782,13 @@ int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) { int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_RENAME, cb); - if (fs__capture_path(loop, req, path, new_path, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, new_path, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } if (cb) { @@ -1784,7 +1796,6 @@ int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char* path, return 0; } else { fs__rename(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1799,7 +1810,6 @@ int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) { return 0; } else { fs__fsync(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1814,7 +1824,6 @@ int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) { return 0; } else { fs__fdatasync(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1832,7 +1841,6 @@ int uv_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req, uv_file fd, return 0; } else { fs__ftruncate(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1853,7 +1861,6 @@ int uv_fs_sendfile(uv_loop_t* loop, uv_fs_t* req, uv_file fd_out, return 0; } else { fs__sendfile(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1861,10 +1868,13 @@ int uv_fs_sendfile(uv_loop_t* loop, uv_fs_t* req, uv_file fd_out, int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_CHMOD, cb); - if (fs__capture_path(loop, req, path, NULL, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, NULL, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } req->mode = mode; @@ -1874,7 +1884,6 @@ int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, return 0; } else { fs__chmod(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1892,7 +1901,6 @@ int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file fd, int mode, return 0; } else { fs__fchmod(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1900,10 +1908,13 @@ int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file fd, int mode, int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, double mtime, uv_fs_cb cb) { + int err; + uv_fs_req_init(loop, req, UV_FS_UTIME, cb); - if (fs__capture_path(loop, req, path, NULL, cb != NULL) < 0) { - return -1; + err = fs__capture_path(loop, req, path, NULL, cb != NULL); + if (err) { + return uv_translate_sys_error(err); } req->atime = atime; @@ -1914,7 +1925,6 @@ int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, return 0; } else { fs__utime(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1933,7 +1943,6 @@ int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file fd, double atime, return 0; } else { fs__futime(req); - SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } } @@ -1942,7 +1951,6 @@ int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file fd, double atime, void uv_process_fs_req(uv_loop_t* loop, uv_fs_t* req) { assert(req->cb); uv__req_unregister(loop, req); - SET_UV_LAST_ERROR_FROM_REQ(req); req->cb(req); } diff --git a/deps/uv/src/win/getaddrinfo.c b/deps/uv/src/win/getaddrinfo.c index c2017ef..fb4ab0a 100644 --- a/deps/uv/src/win/getaddrinfo.c +++ b/deps/uv/src/win/getaddrinfo.c @@ -56,26 +56,6 @@ #define ALIGNED_SIZE(X) ((((X) + 3) >> 2) << 2) -/* - * getaddrinfo error code mapping - * Falls back to uv_translate_sys_error if no match - */ -static uv_err_code uv_translate_eai_error(int eai_errno) { - switch (eai_errno) { - case ERROR_SUCCESS: return UV_OK; - case EAI_BADFLAGS: return UV_EBADF; - case EAI_FAIL: return UV_EFAULT; - case EAI_FAMILY: return UV_EAIFAMNOSUPPORT; - case EAI_MEMORY: return UV_ENOMEM; - case EAI_NONAME: return UV_ENOENT; - case EAI_AGAIN: return UV_EAGAIN; - case EAI_SERVICE: return UV_EAISERVICE; - case EAI_SOCKTYPE: return UV_EAISOCKTYPE; - default: return uv_translate_sys_error(eai_errno); - } -} - - /* getaddrinfo worker thread implementation */ static DWORD WINAPI getaddrinfo_thread_proc(void* parameter) { uv_getaddrinfo_t* req = (uv_getaddrinfo_t*) parameter; @@ -115,7 +95,7 @@ void uv_process_getaddrinfo_req(uv_loop_t* loop, uv_getaddrinfo_t* req) { struct addrinfo* addrinfo_ptr; char* alloc_ptr = NULL; char* cur_ptr = NULL; - int status = 0; + int err = 0; /* release input parameter memory */ if (req->alloc != NULL) { @@ -133,8 +113,8 @@ void uv_process_getaddrinfo_req(uv_loop_t* loop, uv_getaddrinfo_t* req) { if (addrinfow_ptr->ai_canonname != NULL) { name_len = uv_utf16_to_utf8(addrinfow_ptr->ai_canonname, -1, NULL, 0); if (name_len == 0) { - uv__set_sys_error(loop, GetLastError()); - status = -1; + /* FIXME(bnoordhuis) Retain GetLastError(). */ + err = UV_EAI_SYSTEM; goto complete; } addrinfo_len += ALIGNED_SIZE(name_len); @@ -199,13 +179,11 @@ void uv_process_getaddrinfo_req(uv_loop_t* loop, uv_getaddrinfo_t* req) { } } } else { - uv__set_artificial_error(loop, UV_ENOMEM); - status = -1; + err = UV_EAI_MEMORY; } } else { /* GetAddrInfo failed */ - uv__set_artificial_error(loop, uv_translate_eai_error(req->retcode)); - status = -1; + err = uv__getaddrinfo_translate_error(req->retcode); } /* return memory to system */ @@ -218,7 +196,7 @@ complete: uv__req_unregister(loop, req); /* finally do callback with converted result */ - req->getaddrinfo_cb(req, status, (struct addrinfo*)alloc_ptr); + req->getaddrinfo_cb(req, err, (struct addrinfo*)alloc_ptr); } @@ -238,7 +216,7 @@ void uv_freeaddrinfo(struct addrinfo* ai) { * and save the UNICODE string pointers in the req * We also copy hints so that caller does not need to keep memory until the * callback. - * return UV_OK if a callback will be made + * return 0 if a callback will be made * return error code if validation fails * * To minimize allocation we calculate total size required, @@ -255,10 +233,11 @@ int uv_getaddrinfo(uv_loop_t* loop, int servicesize = 0; int hintssize = 0; char* alloc_ptr = NULL; + int err; if (req == NULL || getaddrinfo_cb == NULL || (node == NULL && service == NULL)) { - uv__set_sys_error(loop, WSAEINVAL); + err = WSAEINVAL; goto error; } @@ -273,7 +252,7 @@ int uv_getaddrinfo(uv_loop_t* loop, if (node != NULL) { nodesize = ALIGNED_SIZE(uv_utf8_to_utf16(node, NULL, 0) * sizeof(WCHAR)); if (nodesize == 0) { - uv__set_sys_error(loop, GetLastError()); + err = GetLastError(); goto error; } } @@ -282,7 +261,7 @@ int uv_getaddrinfo(uv_loop_t* loop, servicesize = ALIGNED_SIZE(uv_utf8_to_utf16(service, NULL, 0) * sizeof(WCHAR)); if (servicesize == 0) { - uv__set_sys_error(loop, GetLastError()); + err = GetLastError(); goto error; } } @@ -293,7 +272,7 @@ int uv_getaddrinfo(uv_loop_t* loop, /* allocate memory for inputs, and partition it as needed */ alloc_ptr = (char*)malloc(nodesize + servicesize + hintssize); if (!alloc_ptr) { - uv__set_sys_error(loop, WSAENOBUFS); + err = WSAENOBUFS; goto error; } @@ -307,7 +286,7 @@ int uv_getaddrinfo(uv_loop_t* loop, if (uv_utf8_to_utf16(node, (WCHAR*) alloc_ptr, nodesize / sizeof(WCHAR)) == 0) { - uv__set_sys_error(loop, GetLastError()); + err = GetLastError(); goto error; } alloc_ptr += nodesize; @@ -322,7 +301,7 @@ int uv_getaddrinfo(uv_loop_t* loop, if (uv_utf8_to_utf16(service, (WCHAR*) alloc_ptr, servicesize / sizeof(WCHAR)) == 0) { - uv__set_sys_error(loop, GetLastError()); + err = GetLastError(); goto error; } alloc_ptr += servicesize; @@ -349,7 +328,7 @@ int uv_getaddrinfo(uv_loop_t* loop, if (QueueUserWorkItem(&getaddrinfo_thread_proc, req, WT_EXECUTELONGFUNCTION) == 0) { - uv__set_sys_error(loop, GetLastError()); + err = GetLastError(); goto error; } @@ -361,5 +340,5 @@ error: if (req != NULL && req->alloc != NULL) { free(req->alloc); } - return -1; + return uv_translate_sys_error(err); } diff --git a/deps/uv/src/win/internal.h b/deps/uv/src/win/internal.h index 525eda5..7eaf410 100644 --- a/deps/uv/src/win/internal.h +++ b/deps/uv/src/win/internal.h @@ -135,7 +135,7 @@ void uv_udp_endgame(uv_loop_t* loop, uv_udp_t* handle); /* * Pipes */ -uv_err_t uv_stdio_pipe_server(uv_loop_t* loop, uv_pipe_t* handle, DWORD access, +int uv_stdio_pipe_server(uv_loop_t* loop, uv_pipe_t* handle, DWORD access, char* name, size_t nameSize); int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb); @@ -197,7 +197,7 @@ void uv_tty_endgame(uv_loop_t* loop, uv_tty_t* handle); void uv_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, uv_req_t* req); -void uv_poll_close(uv_loop_t* loop, uv_poll_t* handle); +int uv_poll_close(uv_loop_t* loop, uv_poll_t* handle); void uv_poll_endgame(uv_loop_t* loop, uv_poll_t* handle); @@ -255,6 +255,12 @@ void uv_process_endgame(uv_loop_t* loop, uv_process_t* handle); /* + * Error + */ +int uv_translate_sys_error(int sys_errno); + + +/* * Getaddrinfo */ void uv_process_getaddrinfo_req(uv_loop_t* loop, uv_getaddrinfo_t* req); @@ -295,13 +301,12 @@ void uv__util_init(); int uv_parent_pid(); void uv_fatal_error(const int errorno, const char* syscall); -uv_err_code uv_translate_sys_error(int sys_errno); /* * Process stdio handles. */ -uv_err_t uv__stdio_create(uv_loop_t* loop, uv_process_options_t* options, +int uv__stdio_create(uv_loop_t* loop, uv_process_options_t* options, BYTE** buffer_ptr); void uv__stdio_destroy(BYTE* buffer); void uv__stdio_noinherit(BYTE* buffer); diff --git a/deps/uv/src/win/loop-watcher.c b/deps/uv/src/win/loop-watcher.c index 65080ff..6dbc861 100644 --- a/deps/uv/src/win/loop-watcher.c +++ b/deps/uv/src/win/loop-watcher.c @@ -53,7 +53,7 @@ void uv_loop_watcher_endgame(uv_loop_t* loop, uv_handle_t* handle) { return 0; \ \ if (cb == NULL) \ - return uv__set_artificial_error(handle->loop, UV_EINVAL); \ + return UV_EINVAL; \ \ old_head = loop->name##_handles; \ \ diff --git a/deps/uv/src/win/pipe.c b/deps/uv/src/win/pipe.c index 8df2fcc..171c077 100644 --- a/deps/uv/src/win/pipe.c +++ b/deps/uv/src/win/pipe.c @@ -157,11 +157,10 @@ static HANDLE open_named_pipe(WCHAR* name, DWORD* duplex_flags) { } -uv_err_t uv_stdio_pipe_server(uv_loop_t* loop, uv_pipe_t* handle, DWORD access, +int uv_stdio_pipe_server(uv_loop_t* loop, uv_pipe_t* handle, DWORD access, char* name, size_t nameSize) { HANDLE pipeHandle; - int errorno; - uv_err_t err; + int err; char* ptr = (char*)handle; for (;;) { @@ -177,9 +176,8 @@ uv_err_t uv_stdio_pipe_server(uv_loop_t* loop, uv_pipe_t* handle, DWORD access, break; } - errorno = GetLastError(); - if (errorno != ERROR_PIPE_BUSY && errorno != ERROR_ACCESS_DENIED) { - err = uv__new_sys_error(errorno); + err = GetLastError(); + if (err != ERROR_PIPE_BUSY && err != ERROR_ACCESS_DENIED) { goto error; } @@ -191,14 +189,14 @@ uv_err_t uv_stdio_pipe_server(uv_loop_t* loop, uv_pipe_t* handle, DWORD access, loop->iocp, (ULONG_PTR)handle, 0) == NULL) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); goto error; } uv_pipe_connection_init(handle); handle->handle = pipeHandle; - return uv_ok_; + return 0; error: if (pipeHandle != INVALID_HANDLE_VALUE) { @@ -278,6 +276,7 @@ static DWORD WINAPI pipe_shutdown_thread_proc(void* parameter) { void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) { + int err; DWORD result; uv_shutdown_t* req; NTSTATUS nt_status; @@ -297,8 +296,7 @@ void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) { /* Already closing. Cancel the shutdown. */ if (req->cb) { - uv__set_artificial_error(loop, UV_ECANCELED); - req->cb(req, -1); + req->cb(req, UV_ECANCELED); } DECREASE_PENDING_REQ_COUNT(handle); @@ -318,8 +316,8 @@ void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) { handle->flags |= UV_HANDLE_WRITABLE; /* Questionable */ if (req->cb) { - uv__set_sys_error(loop, pRtlNtStatusToDosError(nt_status)); - req->cb(req, -1); + err = pRtlNtStatusToDosError(nt_status); + req->cb(req, uv_translate_sys_error(err)); } DECREASE_PENDING_REQ_COUNT(handle); @@ -345,8 +343,8 @@ void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) { handle->flags |= UV_HANDLE_WRITABLE; /* Questionable */ if (req->cb) { - uv__set_sys_error(loop, GetLastError()); - req->cb(req, -1); + err = GetLastError(); + req->cb(req, uv_translate_sys_error(err)); } DECREASE_PENDING_REQ_COUNT(handle); @@ -396,17 +394,15 @@ void uv_pipe_pending_instances(uv_pipe_t* handle, int count) { /* Creates a pipe server. */ int uv_pipe_bind(uv_pipe_t* handle, const char* name) { uv_loop_t* loop = handle->loop; - int i, errorno, nameSize; + int i, err, nameSize; uv_pipe_accept_t* req; if (handle->flags & UV_HANDLE_BOUND) { - uv__set_sys_error(loop, WSAEINVAL); - return -1; + return UV_EINVAL; } if (!name) { - uv__set_sys_error(loop, WSAEINVAL); - return -1; + return UV_EINVAL; } if (!(handle->flags & UV_HANDLE_PIPESERVER)) { @@ -436,8 +432,7 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) { } if (!uv_utf8_to_utf16(name, handle->name, nameSize / sizeof(WCHAR))) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return uv_translate_sys_error(GetLastError()); } /* @@ -451,19 +446,17 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) { PIPE_UNLIMITED_INSTANCES, 65536, 65536, 0, NULL); if (handle->accept_reqs[0].pipeHandle == INVALID_HANDLE_VALUE) { - errorno = GetLastError(); - if (errorno == ERROR_ACCESS_DENIED) { - uv__set_error(loop, UV_EADDRINUSE, errorno); - } else if (errorno == ERROR_PATH_NOT_FOUND || errorno == ERROR_INVALID_NAME) { - uv__set_error(loop, UV_EACCES, errorno); - } else { - uv__set_sys_error(loop, errorno); + err = GetLastError(); + if (err == ERROR_ACCESS_DENIED) { + err = WSAEADDRINUSE; /* Translates to UV_EADDRINUSE. */ + } else if (err == ERROR_PATH_NOT_FOUND || err == ERROR_INVALID_NAME) { + err = WSAEACCES; /* Translates to UV_EACCES. */ } goto error; } if (uv_set_pipe_handle(loop, handle, handle->accept_reqs[0].pipeHandle, 0)) { - uv__set_sys_error(loop, GetLastError()); + err = GetLastError(); goto error; } @@ -484,7 +477,7 @@ error: handle->accept_reqs[0].pipeHandle = INVALID_HANDLE_VALUE; } - return -1; + return uv_translate_sys_error(err); } @@ -531,7 +524,7 @@ static DWORD WINAPI pipe_connect_thread_proc(void* parameter) { void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, const char* name, uv_connect_cb cb) { uv_loop_t* loop = handle->loop; - int errorno, nameSize; + int err, nameSize; HANDLE pipeHandle = INVALID_HANDLE_VALUE; DWORD duplex_flags; @@ -548,7 +541,7 @@ void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, } if (!uv_utf8_to_utf16(name, handle->name, nameSize / sizeof(WCHAR))) { - errorno = GetLastError(); + err = GetLastError(); goto error; } @@ -559,7 +552,7 @@ void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, if (!QueueUserWorkItem(&pipe_connect_thread_proc, req, WT_EXECUTELONGFUNCTION)) { - errorno = GetLastError(); + err = GetLastError(); goto error; } @@ -569,7 +562,7 @@ void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, return; } - errorno = GetLastError(); + err = GetLastError(); goto error; } @@ -579,7 +572,7 @@ void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, (uv_pipe_t*) req->handle, pipeHandle, duplex_flags)) { - errorno = GetLastError(); + err = GetLastError(); goto error; } @@ -600,7 +593,7 @@ error: } /* Make this req pending reporting an error. */ - SET_REQ_ERROR(req, errorno); + SET_REQ_ERROR(req, err); uv_insert_pending_req(loop, (uv_req_t*) req); handle->reqs_pending++; REGISTER_HANDLE_REQ(loop, handle, req); @@ -725,8 +718,7 @@ int uv_pipe_accept(uv_pipe_t* server, uv_stream_t* client) { if (server->ipc) { if (!server->pending_ipc_info.socket_info) { /* No valid pending sockets. */ - uv__set_sys_error(loop, WSAEWOULDBLOCK); - return -1; + return WSAEWOULDBLOCK; } return uv_tcp_import((uv_tcp_t*)client, server->pending_ipc_info.socket_info, @@ -740,8 +732,7 @@ int uv_pipe_accept(uv_pipe_t* server, uv_stream_t* client) { if (!req) { /* No valid connections found, so we error out. */ - uv__set_sys_error(loop, WSAEWOULDBLOCK); - return -1; + return WSAEWOULDBLOCK; } /* Initialize the client handle and copy the pipeHandle to the client */ @@ -773,18 +764,15 @@ int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb) { } if (!(handle->flags & UV_HANDLE_BOUND)) { - uv__set_artificial_error(loop, UV_EINVAL); - return -1; + return WSAEINVAL; } if (handle->flags & UV_HANDLE_READING) { - uv__set_artificial_error(loop, UV_EISCONN); - return -1; + return WSAEISCONN; } if (!(handle->flags & UV_HANDLE_PIPESERVER)) { - uv__set_artificial_error(loop, UV_ENOTSUP); - return -1; + return ERROR_NOT_SUPPORTED; } handle->flags |= UV_HANDLE_LISTENING; @@ -1044,22 +1032,21 @@ static void uv_queue_non_overlapped_write(uv_pipe_t* handle) { static int uv_pipe_write_impl(uv_loop_t* loop, uv_write_t* req, uv_pipe_t* handle, uv_buf_t bufs[], int bufcnt, uv_stream_t* send_handle, uv_write_cb cb) { + int err; int result; uv_tcp_t* tcp_send_handle; uv_write_t* ipc_header_req; uv_ipc_frame_uv_stream ipc_frame; if (bufcnt != 1 && (bufcnt != 0 || !send_handle)) { - uv__set_artificial_error(loop, UV_ENOTSUP); - return -1; + return ERROR_NOT_SUPPORTED; } /* Only TCP handles are supported for sharing. */ if (send_handle && ((send_handle->type != UV_TCP) || (!(send_handle->flags & UV_HANDLE_BOUND) && !(send_handle->flags & UV_HANDLE_CONNECTION)))) { - uv__set_artificial_error(loop, UV_ENOTSUP); - return -1; + return ERROR_NOT_SUPPORTED; } assert(handle->handle != INVALID_HANDLE_VALUE); @@ -1081,9 +1068,10 @@ static int uv_pipe_write_impl(uv_loop_t* loop, uv_write_t* req, if (send_handle) { tcp_send_handle = (uv_tcp_t*)send_handle; - if (uv_tcp_duplicate_socket(tcp_send_handle, handle->ipc_pid, - &ipc_frame.socket_info)) { - return -1; + err = uv_tcp_duplicate_socket(tcp_send_handle, handle->ipc_pid, + &ipc_frame.socket_info); + if (err) { + return err; } ipc_frame.header.flags |= UV_IPC_TCP_SERVER; @@ -1142,18 +1130,18 @@ static int uv_pipe_write_impl(uv_loop_t* loop, uv_write_t* req, NULL, &ipc_header_req->overlapped); if (!result && GetLastError() != ERROR_IO_PENDING) { - uv__set_sys_error(loop, GetLastError()); + err = GetLastError(); CloseHandle(ipc_header_req->overlapped.hEvent); - return -1; + return err; } if (!result) { /* Request not completed immediately. Wait for it.*/ if (WaitForSingleObject(ipc_header_req->overlapped.hEvent, INFINITE) != WAIT_OBJECT_0) { - uv__set_sys_error(loop, GetLastError()); + err = GetLastError(); CloseHandle(ipc_header_req->overlapped.hEvent); - return -1; + return err; } } ipc_header_req->queued_bytes = 0; @@ -1181,7 +1169,7 @@ static int uv_pipe_write_impl(uv_loop_t* loop, uv_write_t* req, NULL); if (!result) { - return uv__set_sys_error(loop, GetLastError()); + return err; } else { /* Request completed immediately. */ req->queued_bytes = 0; @@ -1216,9 +1204,9 @@ static int uv_pipe_write_impl(uv_loop_t* loop, uv_write_t* req, &req->overlapped); if (!result && GetLastError() != ERROR_IO_PENDING) { - uv__set_sys_error(loop, GetLastError()); + err = GetLastError(); CloseHandle(req->overlapped.hEvent); - return -1; + return err; } if (result) { @@ -1228,9 +1216,9 @@ static int uv_pipe_write_impl(uv_loop_t* loop, uv_write_t* req, /* Request queued by the kernel. */ if (WaitForSingleObject(ipc_header_req->overlapped.hEvent, INFINITE) != WAIT_OBJECT_0) { - uv__set_sys_error(loop, GetLastError()); + err = GetLastError(); CloseHandle(ipc_header_req->overlapped.hEvent); - return -1; + return uv_translate_sys_error(err); } } CloseHandle(req->overlapped.hEvent); @@ -1248,8 +1236,7 @@ static int uv_pipe_write_impl(uv_loop_t* loop, uv_write_t* req, &req->overlapped); if (!result && GetLastError() != ERROR_IO_PENDING) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return GetLastError(); } if (result) { @@ -1269,8 +1256,7 @@ static int uv_pipe_write_impl(uv_loop_t* loop, uv_write_t* req, if (!RegisterWaitForSingleObject(&req->wait_handle, req->overlapped.hEvent, post_completion_write_wait, (void*) req, INFINITE, WT_EXECUTEINWAITTHREAD)) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return GetLastError(); } } } @@ -1292,8 +1278,7 @@ int uv_pipe_write(uv_loop_t* loop, uv_write_t* req, uv_pipe_t* handle, int uv_pipe_write2(uv_loop_t* loop, uv_write_t* req, uv_pipe_t* handle, uv_buf_t bufs[], int bufcnt, uv_stream_t* send_handle, uv_write_cb cb) { if (!handle->ipc) { - uv__set_artificial_error(loop, UV_EINVAL); - return -1; + return WSAEINVAL; } return uv_pipe_write_impl(loop, req, handle, bufs, bufcnt, send_handle, cb); @@ -1309,11 +1294,10 @@ static void uv_pipe_read_eof(uv_loop_t* loop, uv_pipe_t* handle, handle->flags &= ~UV_HANDLE_READABLE; uv_read_stop((uv_stream_t*) handle); - uv__set_artificial_error(loop, UV_EOF); if (handle->read2_cb) { - handle->read2_cb(handle, -1, uv_null_buf_, UV_UNKNOWN_HANDLE); + handle->read2_cb(handle, UV_EOF, uv_null_buf_, UV_UNKNOWN_HANDLE); } else { - handle->read_cb((uv_stream_t*) handle, -1, uv_null_buf_); + handle->read_cb((uv_stream_t*) handle, UV_EOF, uv_null_buf_); } } @@ -1326,11 +1310,13 @@ static void uv_pipe_read_error(uv_loop_t* loop, uv_pipe_t* handle, int error, uv_read_stop((uv_stream_t*) handle); - uv__set_sys_error(loop, error); if (handle->read2_cb) { - handle->read2_cb(handle, -1, buf, UV_UNKNOWN_HANDLE); + handle->read2_cb(handle, + uv_translate_sys_error(error), + buf, + UV_UNKNOWN_HANDLE); } else { - handle->read_cb((uv_stream_t*)handle, -1, buf); + handle->read_cb((uv_stream_t*)handle, uv_translate_sys_error(error), buf); } } @@ -1493,6 +1479,8 @@ void uv_process_pipe_read_req(uv_loop_t* loop, uv_pipe_t* handle, void uv_process_pipe_write_req(uv_loop_t* loop, uv_pipe_t* handle, uv_write_t* req) { + int err; + assert(handle->type == UV_NAMED_PIPE); assert(handle->write_queue_size >= req->queued_bytes); @@ -1519,12 +1507,8 @@ void uv_process_pipe_write_req(uv_loop_t* loop, uv_pipe_t* handle, } } else { if (req->cb) { - if (!REQ_SUCCESS(req)) { - uv__set_sys_error(loop, GET_REQ_ERROR(req)); - ((uv_write_cb)req->cb)(req, -1); - } else { - ((uv_write_cb)req->cb)(req, 0); - } + err = GET_REQ_ERROR(req); + req->cb(req, uv_translate_sys_error(err)); } } @@ -1575,18 +1559,20 @@ void uv_process_pipe_accept_req(uv_loop_t* loop, uv_pipe_t* handle, void uv_process_pipe_connect_req(uv_loop_t* loop, uv_pipe_t* handle, uv_connect_t* req) { + int err; + assert(handle->type == UV_NAMED_PIPE); UNREGISTER_HANDLE_REQ(loop, handle, req); if (req->cb) { + err = 0; if (REQ_SUCCESS(req)) { uv_pipe_connection_init(handle); - ((uv_connect_cb)req->cb)(req, 0); } else { - uv__set_sys_error(loop, GET_REQ_ERROR(req)); - ((uv_connect_cb)req->cb)(req, -1); + err = GET_REQ_ERROR(req); } + req->cb(req, uv_translate_sys_error(err)); } DECREASE_PENDING_REQ_COUNT(handle); @@ -1710,8 +1696,7 @@ int uv_pipe_open(uv_pipe_t* pipe, uv_file file) { if (os_handle == INVALID_HANDLE_VALUE || uv_set_pipe_handle(pipe->loop, pipe, os_handle, 0) == -1) { - uv__set_sys_error(pipe->loop, WSAEINVAL); - return -1; + return UV_EINVAL; } uv_pipe_connection_init(pipe); diff --git a/deps/uv/src/win/poll.c b/deps/uv/src/win/poll.c index f6972f9..4ba91e2 100644 --- a/deps/uv/src/win/poll.c +++ b/deps/uv/src/win/poll.c @@ -135,8 +135,7 @@ static int uv__fast_poll_cancel_poll_req(uv_loop_t* loop, uv_poll_t* handle) { if (result == SOCKET_ERROR) { DWORD error = WSAGetLastError(); if (error != WSA_IO_PENDING) { - uv__set_sys_error(loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } } @@ -166,8 +165,7 @@ static void uv__fast_poll_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, DWORD error = GET_REQ_SOCK_ERROR(req); if (error != WSAEINTR && handle->events != 0) { handle->events = 0; /* Stop the watcher */ - uv__set_sys_error(loop, error); - handle->poll_cb(handle, -1, 0); + handle->poll_cb(handle, uv_translate_sys_error(error), 0); } } else if (afd_poll_info->NumberOfHandles >= 1) { @@ -228,17 +226,18 @@ static int uv__fast_poll_set(uv_loop_t* loop, uv_poll_t* handle, int events) { } -static void uv__fast_poll_close(uv_loop_t* loop, uv_poll_t* handle) { +static int uv__fast_poll_close(uv_loop_t* loop, uv_poll_t* handle) { handle->events = 0; uv__handle_closing(handle); if (handle->submitted_events_1 == 0 && handle->submitted_events_2 == 0) { uv_want_endgame(loop, (uv_handle_t*) handle); + return 0; } else { /* Cancel outstanding poll requests by executing another, unique poll */ /* request that forces the outstanding ones to return. */ - uv__fast_poll_cancel_poll_req(loop, handle); + return uv__fast_poll_cancel_poll_req(loop, handle); } } @@ -409,6 +408,8 @@ static void uv__slow_poll_submit_poll_req(uv_loop_t* loop, uv_poll_t* handle) { static void uv__slow_poll_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, uv_req_t* req) { unsigned char mask_events; + int err; + if (req == &handle->poll_req_1) { handle->submitted_events_1 = 0; mask_events = handle->mask_events_1; @@ -422,9 +423,9 @@ static void uv__slow_poll_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, if (!REQ_SUCCESS(req)) { /* Error. */ if (handle->events != 0) { + err = GET_REQ_ERROR(req); handle->events = 0; /* Stop the watcher */ - uv__set_sys_error(loop, GET_REQ_ERROR(req)); - handle->poll_cb(handle, -1, 0); + handle->poll_cb(handle, uv_translate_sys_error(err), 0); } } else { /* Got some events. */ @@ -467,7 +468,7 @@ static int uv__slow_poll_set(uv_loop_t* loop, uv_poll_t* handle, int events) { } -static void uv__slow_poll_close(uv_loop_t* loop, uv_poll_t* handle) { +static int uv__slow_poll_close(uv_loop_t* loop, uv_poll_t* handle) { handle->events = 0; uv__handle_closing(handle); @@ -475,6 +476,8 @@ static void uv__slow_poll_close(uv_loop_t* loop, uv_poll_t* handle) { handle->submitted_events_2 == 0) { uv_want_endgame(loop, (uv_handle_t*) handle); } + + return 0; } @@ -522,8 +525,7 @@ int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, SO_PROTOCOL_INFOW, (char*) &protocol_info, &len) != 0) { - uv__set_sys_error(loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } /* Get the peer socket that is needed to enable fast poll. If the returned */ @@ -555,12 +557,16 @@ int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb) { + int err; + if (!(handle->flags & UV_HANDLE_POLL_SLOW)) { - if (uv__fast_poll_set(handle->loop, handle, events) < 0) - return -1; + err = uv__fast_poll_set(handle->loop, handle, events); } else { - if (uv__slow_poll_set(handle->loop, handle, events) < 0) - return -1; + err = uv__slow_poll_set(handle->loop, handle, events); + } + + if (err) { + return uv_translate_sys_error(err); } handle->poll_cb = cb; @@ -570,11 +576,15 @@ int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb) { int uv_poll_stop(uv_poll_t* handle) { + int err; + if (!(handle->flags & UV_HANDLE_POLL_SLOW)) { - return uv__fast_poll_set(handle->loop, handle, 0); + err = uv__fast_poll_set(handle->loop, handle, 0); } else { - return uv__slow_poll_set(handle->loop, handle, 0); + err = uv__slow_poll_set(handle->loop, handle, 0); } + + return uv_translate_sys_error(err); } @@ -587,11 +597,11 @@ void uv_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, uv_req_t* req) { } -void uv_poll_close(uv_loop_t* loop, uv_poll_t* handle) { +int uv_poll_close(uv_loop_t* loop, uv_poll_t* handle) { if (!(handle->flags & UV_HANDLE_POLL_SLOW)) { - uv__fast_poll_close(loop, handle); + return uv__fast_poll_close(loop, handle); } else { - uv__slow_poll_close(loop, handle); + return uv__slow_poll_close(loop, handle); } } diff --git a/deps/uv/src/win/process-stdio.c b/deps/uv/src/win/process-stdio.c index 89e2cd9..51c56b2 100644 --- a/deps/uv/src/win/process-stdio.c +++ b/deps/uv/src/win/process-stdio.c @@ -94,14 +94,14 @@ void uv_disable_stdio_inheritance(void) { } -static uv_err_t uv__create_stdio_pipe_pair(uv_loop_t* loop, +static int uv__create_stdio_pipe_pair(uv_loop_t* loop, uv_pipe_t* server_pipe, HANDLE* child_pipe_ptr, unsigned int flags) { char pipe_name[64]; SECURITY_ATTRIBUTES sa; DWORD server_access = 0; DWORD client_access = 0; HANDLE child_pipe = INVALID_HANDLE_VALUE; - uv_err_t err; + int err; if (flags & UV_READABLE_PIPE) { server_access |= PIPE_ACCESS_OUTBOUND; @@ -118,7 +118,7 @@ static uv_err_t uv__create_stdio_pipe_pair(uv_loop_t* loop, server_access, pipe_name, sizeof(pipe_name)); - if (err.code != UV_OK) + if (err) goto error; /* Create child pipe handle. */ @@ -134,7 +134,7 @@ static uv_err_t uv__create_stdio_pipe_pair(uv_loop_t* loop, server_pipe->ipc ? FILE_FLAG_OVERLAPPED : 0, NULL); if (child_pipe == INVALID_HANDLE_VALUE) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); goto error; } @@ -158,7 +158,7 @@ static uv_err_t uv__create_stdio_pipe_pair(uv_loop_t* loop, /* both ends of the pipe created. */ if (!ConnectNamedPipe(server_pipe->handle, NULL)) { if (GetLastError() != ERROR_PIPE_CONNECTED) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); goto error; } } @@ -167,7 +167,7 @@ static uv_err_t uv__create_stdio_pipe_pair(uv_loop_t* loop, server_pipe->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; *child_pipe_ptr = child_pipe; - return uv_ok_; + return 0; error: if (server_pipe->handle != INVALID_HANDLE_VALUE) { @@ -195,8 +195,7 @@ static int uv__duplicate_handle(uv_loop_t* loop, HANDLE handle, HANDLE* dup) { handle == NULL || handle == (HANDLE) -2) { *dup = INVALID_HANDLE_VALUE; - uv__set_artificial_error(loop, UV_EBADF); - return -1; + return ERROR_INVALID_HANDLE; } current_process = GetCurrentProcess(); @@ -209,8 +208,7 @@ static int uv__duplicate_handle(uv_loop_t* loop, HANDLE handle, HANDLE* dup) { TRUE, DUPLICATE_SAME_ACCESS)) { *dup = INVALID_HANDLE_VALUE; - uv__set_sys_error(loop, GetLastError()); - return -1; + return GetLastError(); } return 0; @@ -222,8 +220,7 @@ static int uv__duplicate_fd(uv_loop_t* loop, int fd, HANDLE* dup) { if (fd == -1) { *dup = INVALID_HANDLE_VALUE; - uv__set_artificial_error(loop, UV_EBADF); - return -1; + return ERROR_INVALID_HANDLE; } handle = (HANDLE) _get_osfhandle(fd); @@ -231,7 +228,7 @@ static int uv__duplicate_fd(uv_loop_t* loop, int fd, HANDLE* dup) { } -uv_err_t uv__create_nul_handle(HANDLE* handle_ptr, +int uv__create_nul_handle(HANDLE* handle_ptr, DWORD access) { HANDLE handle; SECURITY_ATTRIBUTES sa; @@ -248,25 +245,25 @@ uv_err_t uv__create_nul_handle(HANDLE* handle_ptr, 0, NULL); if (handle == INVALID_HANDLE_VALUE) { - return uv__new_sys_error(GetLastError()); + return GetLastError(); } *handle_ptr = handle; - return uv_ok_; + return 0; } -uv_err_t uv__stdio_create(uv_loop_t* loop, uv_process_options_t* options, +int uv__stdio_create(uv_loop_t* loop, uv_process_options_t* options, BYTE** buffer_ptr) { BYTE* buffer; int count, i; - uv_err_t err; + int err; count = options->stdio_count; if (count < 0 || count > 255) { /* Only support FDs 0-255 */ - return uv__new_artificial_error(UV_ENOTSUP); + return ERROR_NOT_SUPPORTED; } else if (count < 3) { /* There should always be at least 3 stdio handles. */ count = 3; @@ -275,7 +272,7 @@ uv_err_t uv__stdio_create(uv_loop_t* loop, uv_process_options_t* options, /* Allocate the child stdio buffer */ buffer = (BYTE*) malloc(CHILD_STDIO_SIZE(count)); if (buffer == NULL) { - return uv__new_artificial_error(UV_ENOMEM); + return ERROR_OUTOFMEMORY; } /* Prepopulate the buffer with INVALID_HANDLE_VALUE handles so we can */ @@ -309,7 +306,7 @@ uv_err_t uv__stdio_create(uv_loop_t* loop, uv_process_options_t* options, err = uv__create_nul_handle(&CHILD_STDIO_HANDLE(buffer, i), access); - if (err.code != UV_OK) + if (err) goto error; CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN | FDEV; @@ -333,7 +330,7 @@ uv_err_t uv__stdio_create(uv_loop_t* loop, uv_process_options_t* options, parent_pipe, &child_pipe, fdopt.flags); - if (err.code != UV_OK) + if (err) goto error; CHILD_STDIO_HANDLE(buffer, i) = child_pipe; @@ -346,10 +343,11 @@ uv_err_t uv__stdio_create(uv_loop_t* loop, uv_process_options_t* options, HANDLE child_handle; /* Make an inheritable duplicate of the handle. */ - if (uv__duplicate_fd(loop, fdopt.data.fd, &child_handle) < 0) { + err = uv__duplicate_fd(loop, fdopt.data.fd, &child_handle); + if (err) { /* If fdopt.data.fd is not valid and fd fd <= 2, then ignore the */ /* error. */ - if (fdopt.data.fd <= 2 && loop->last_err.code == UV_EBADF) { + if (fdopt.data.fd <= 2 && err == ERROR_INVALID_HANDLE) { CHILD_STDIO_CRT_FLAGS(buffer, i) = 0; CHILD_STDIO_HANDLE(buffer, i) = INVALID_HANDLE_VALUE; break; @@ -373,7 +371,7 @@ uv_err_t uv__stdio_create(uv_loop_t* loop, uv_process_options_t* options, case FILE_TYPE_UNKNOWN: if (GetLastError() != 0) { - uv__set_sys_error(loop, GetLastError()); + err = GetLastError(); CloseHandle(child_handle); goto error; } @@ -411,7 +409,7 @@ uv_err_t uv__stdio_create(uv_loop_t* loop, uv_process_options_t* options, stream_handle == INVALID_HANDLE_VALUE) { /* The handle is already closed, or not yet created, or the */ /* stream type is not supported. */ - uv__set_artificial_error(loop, UV_ENOTSUP); + err = ERROR_NOT_SUPPORTED; goto error; } @@ -433,7 +431,7 @@ uv_err_t uv__stdio_create(uv_loop_t* loop, uv_process_options_t* options, } *buffer_ptr = buffer; - return uv_ok_; + return 0; error: uv__stdio_destroy(buffer); diff --git a/deps/uv/src/win/process.c b/deps/uv/src/win/process.c index f98767a..053721c 100644 --- a/deps/uv/src/win/process.c +++ b/deps/uv/src/win/process.c @@ -90,7 +90,7 @@ static void uv__init_global_job_handle(void) { } -static uv_err_t uv_utf8_to_utf16_alloc(const char* s, WCHAR** ws_ptr) { +static int uv_utf8_to_utf16_alloc(const char* s, WCHAR** ws_ptr) { int ws_len, r; WCHAR* ws; @@ -101,12 +101,12 @@ static uv_err_t uv_utf8_to_utf16_alloc(const char* s, WCHAR** ws_ptr) { NULL, 0); if (ws_len <= 0) { - return uv__new_sys_error(GetLastError()); + return GetLastError(); } ws = (WCHAR*) malloc(ws_len * sizeof(WCHAR)); if (ws == NULL) { - return uv__new_artificial_error(UV_ENOMEM); + return ERROR_OUTOFMEMORY; } r = MultiByteToWideChar(CP_UTF8, @@ -118,7 +118,7 @@ static uv_err_t uv_utf8_to_utf16_alloc(const char* s, WCHAR** ws_ptr) { assert(r == ws_len); *ws_ptr = ws; - return uv_ok_; + return 0; } @@ -126,7 +126,7 @@ static void uv_process_init(uv_loop_t* loop, uv_process_t* handle) { uv__handle_init(loop, (uv_handle_t*) handle, UV_PROCESS); handle->exit_cb = NULL; handle->pid = 0; - handle->spawn_error = uv_ok_; + handle->spawn_error = 0; handle->exit_signal = 0; handle->wait_handle = INVALID_HANDLE_VALUE; handle->process_handle = INVALID_HANDLE_VALUE; @@ -225,7 +225,7 @@ static WCHAR* search_path_join_test(const WCHAR* dir, attrs = GetFileAttributesW(result); if (attrs != INVALID_FILE_ATTRIBUTES && - !(attrs & (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT))) { + !(attrs & FILE_ATTRIBUTE_DIRECTORY)) { return result; } @@ -498,7 +498,7 @@ WCHAR* quote_cmd_arg(const WCHAR *source, WCHAR *target) { } -uv_err_t make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) { +int make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) { char** arg; WCHAR* dst = NULL; WCHAR* temp_buffer = NULL; @@ -506,7 +506,7 @@ uv_err_t make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) size_t temp_buffer_len = 0; WCHAR* pos; int arg_count = 0; - uv_err_t err = uv_ok_; + int err = 0; /* Count the required size. */ for (arg = args; *arg; arg++) { @@ -519,7 +519,7 @@ uv_err_t make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) NULL, 0); if (arg_len == 0) { - return uv__new_sys_error(GetLastError()); + return GetLastError(); } dst_len += arg_len; @@ -537,14 +537,14 @@ uv_err_t make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) /* Allocate buffer for the final command line. */ dst = (WCHAR*) malloc(dst_len * sizeof(WCHAR)); if (dst == NULL) { - err = uv__new_artificial_error(UV_ENOMEM); + err = ERROR_OUTOFMEMORY; goto error; } /* Allocate temporary working buffer. */ temp_buffer = (WCHAR*) malloc(temp_buffer_len * sizeof(WCHAR)); if (temp_buffer == NULL) { - err = uv__new_artificial_error(UV_ENOMEM); + err = ERROR_OUTOFMEMORY; goto error; } @@ -560,6 +560,7 @@ uv_err_t make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) temp_buffer, (int) (dst + dst_len - pos)); if (arg_len == 0) { + err = GetLastError(); goto error; } @@ -578,7 +579,7 @@ uv_err_t make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) free(temp_buffer); *dst_ptr = dst; - return uv_ok_; + return 0; error: free(dst); @@ -617,7 +618,7 @@ static void check_required_vars_contains_var(env_var_t* required, int count, * these get defined if the input environment block does not contain any * values for them. */ -uv_err_t make_program_env(char* env_block[], WCHAR** dst_ptr) { +int make_program_env(char* env_block[], WCHAR** dst_ptr) { WCHAR* dst; WCHAR* ptr; char** env; @@ -645,7 +646,7 @@ uv_err_t make_program_env(char* env_block[], WCHAR** dst_ptr) { NULL, 0); if (len <= 0) { - return uv__new_sys_error(GetLastError()); + return GetLastError(); } env_len += len; @@ -656,7 +657,7 @@ uv_err_t make_program_env(char* env_block[], WCHAR** dst_ptr) { env_len += required_vars[i].len; var_size = GetEnvironmentVariableW(required_vars[i].wide, NULL, 0); if (var_size == 0) { - return uv__new_sys_error(GetLastError()); + return GetLastError(); } required_vars[i].value_len = var_size; env_len += var_size; @@ -665,7 +666,7 @@ uv_err_t make_program_env(char* env_block[], WCHAR** dst_ptr) { dst = malloc(env_len * sizeof(WCHAR)); if (!dst) { - return uv__new_artificial_error(UV_ENOMEM); + return ERROR_OUTOFMEMORY; } ptr = dst; @@ -679,7 +680,7 @@ uv_err_t make_program_env(char* env_block[], WCHAR** dst_ptr) { (int) (env_len - (ptr - dst))); if (len <= 0) { free(dst); - return uv__new_sys_error(GetLastError()); + return GetLastError(); } } @@ -702,7 +703,7 @@ uv_err_t make_program_env(char* env_block[], WCHAR** dst_ptr) { *ptr = L'\0'; *dst_ptr = dst; - return uv_ok_; + return 0; } @@ -727,7 +728,8 @@ static void CALLBACK exit_wait_callback(void* data, BOOLEAN didTimeout) { /* Called on main thread after a child process has exited. */ void uv_process_proc_exit(uv_loop_t* loop, uv_process_t* handle) { - DWORD exit_code; + int exit_code; + DWORD status; assert(handle->exit_cb_pending); handle->exit_cb_pending = 0; @@ -749,17 +751,19 @@ void uv_process_proc_exit(uv_loop_t* loop, uv_process_t* handle) { /* callback.*/ uv__handle_stop(handle); - if (handle->spawn_error.code != UV_OK) { + if (handle->spawn_error) { /* Spawning failed. */ - exit_code = (DWORD) -1; - } else if (!GetExitCodeProcess(handle->process_handle, &exit_code)) { + exit_code = uv_translate_sys_error(handle->spawn_error); + } else if (!GetExitCodeProcess(handle->process_handle, &status)) { /* Unable to to obtain the exit code. This should never happen. */ - exit_code = (DWORD) -1; + exit_code = uv_translate_sys_error(GetLastError()); + } else { + /* Make sure the exit code is >= 0. */ + exit_code = status & INT_MAX; } /* Fire the exit callback. */ if (handle->exit_cb) { - loop->last_err = handle->spawn_error; handle->exit_cb(handle, exit_code, handle->exit_signal); } } @@ -801,7 +805,7 @@ void uv_process_endgame(uv_loop_t* loop, uv_process_t* handle) { int uv_spawn(uv_loop_t* loop, uv_process_t* process, uv_process_options_t options) { int i; - uv_err_t err = uv_ok_; + int err = 0; WCHAR* path = NULL; BOOL result; WCHAR* application_path = NULL, *application = NULL, *arguments = NULL, @@ -811,14 +815,12 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, DWORD process_flags; if (options.flags & (UV_PROCESS_SETGID | UV_PROCESS_SETUID)) { - uv__set_artificial_error(loop, UV_ENOTSUP); - return -1; + return UV_ENOTSUP; } if (options.file == NULL || options.args == NULL) { - uv__set_artificial_error(loop, UV_EINVAL); - return -1; + return UV_EINVAL; } assert(options.file != NULL); @@ -832,25 +834,25 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, process->exit_cb = options.exit_cb; err = uv_utf8_to_utf16_alloc(options.file, &application); - if (err.code != UV_OK) + if (err) goto done; err = make_program_args(options.args, options.flags & UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS, &arguments); - if (err.code != UV_OK) + if (err) goto done; if (options.env) { err = make_program_env(options.env, &env); - if (err.code != UV_OK) + if (err) goto done; } if (options.cwd) { /* Explicit cwd */ err = uv_utf8_to_utf16_alloc(options.cwd, &cwd); - if (err.code != UV_OK) + if (err) goto done; } else { @@ -859,19 +861,19 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, cwd_len = GetCurrentDirectoryW(0, NULL); if (!cwd_len) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); goto done; } cwd = (WCHAR*) malloc(cwd_len * sizeof(WCHAR)); if (cwd == NULL) { - err = uv__new_artificial_error(UV_ENOMEM); + err = ERROR_OUTOFMEMORY; goto done; } r = GetCurrentDirectoryW(cwd_len, cwd); if (r == 0 || r >= cwd_len) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); goto done; } } @@ -882,20 +884,20 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, path_len = GetEnvironmentVariableW(L"PATH", NULL, 0); if (path_len == 0) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); goto done; } path = (WCHAR*) malloc(path_len * sizeof(WCHAR)); if (path == NULL) { - err = uv__new_artificial_error(UV_ENOMEM); + err = ERROR_OUTOFMEMORY; goto done; } r = GetEnvironmentVariableW(L"PATH", path, path_len); if (r == 0 || r >= path_len) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); goto done; } } @@ -905,13 +907,12 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, path); if (application_path == NULL) { /* Not found. */ - err = uv__new_artificial_error(UV_ENOENT); + err = ERROR_FILE_NOT_FOUND; goto done; } - err = uv__stdio_create(loop, &options, &process->child_stdio_buffer); - if (err.code != UV_OK) + if (err) goto done; startup.cb = sizeof(startup); @@ -1008,7 +1009,7 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, } else { /* CreateProcessW failed. */ - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); } done: @@ -1032,7 +1033,7 @@ done: uv__handle_start(process); /* If an error happened, queue the exit req. */ - if (err.code != UV_OK) { + if (err) { process->exit_cb_pending = 1; uv_insert_pending_req(loop, (uv_req_t*) &process->exit_req); } @@ -1041,28 +1042,29 @@ done: } -static uv_err_t uv__kill(HANDLE process_handle, int signum) { +static int uv__kill(HANDLE process_handle, int signum) { switch (signum) { case SIGTERM: case SIGKILL: case SIGINT: { /* Unconditionally terminate the process. On Windows, killed processes */ /* normally return 1. */ - DWORD error, status; + DWORD status; + int err; if (TerminateProcess(process_handle, 1)) - return uv_ok_; + return 0; /* If the process already exited before TerminateProcess was called, */ /* TerminateProcess will fail with ERROR_ACESS_DENIED. */ - error = GetLastError(); - if (error == ERROR_ACCESS_DENIED && + err = GetLastError(); + if (err == ERROR_ACCESS_DENIED && GetExitCodeProcess(process_handle, &status) && status != STILL_ACTIVE) { - return uv__new_artificial_error(UV_ESRCH); + return UV_ESRCH; } - return uv__new_sys_error(error); + return uv_translate_sys_error(err); } case 0: { @@ -1070,34 +1072,31 @@ static uv_err_t uv__kill(HANDLE process_handle, int signum) { DWORD status; if (!GetExitCodeProcess(process_handle, &status)) - return uv__new_sys_error(GetLastError()); + return uv_translate_sys_error(GetLastError()); if (status != STILL_ACTIVE) - return uv__new_artificial_error(UV_ESRCH); + return UV_ESRCH; - return uv_ok_; + return 0; } default: /* Unsupported signal. */ - return uv__new_artificial_error(UV_ENOSYS); + return UV_ENOSYS; } } int uv_process_kill(uv_process_t* process, int signum) { - uv_err_t err; + int err; if (process->process_handle == INVALID_HANDLE_VALUE) { - uv__set_artificial_error(process->loop, UV_EINVAL); - return -1; + return UV_EINVAL; } err = uv__kill(process->process_handle, signum); - - if (err.code != UV_OK) { - uv__set_error(process->loop, err.code, err.sys_errno_); - return -1; + if (err) { + return err; /* err is already translated. */ } process->exit_signal = signum; @@ -1106,21 +1105,22 @@ int uv_process_kill(uv_process_t* process, int signum) { } -uv_err_t uv_kill(int pid, int signum) { - uv_err_t err; +int uv_kill(int pid, int signum) { + int err; HANDLE process_handle = OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION, FALSE, pid); if (process_handle == NULL) { - if (GetLastError() == ERROR_INVALID_PARAMETER) { - return uv__new_artificial_error(UV_ESRCH); + err = GetLastError(); + if (err == ERROR_INVALID_PARAMETER) { + return UV_ESRCH; } else { - return uv__new_sys_error(GetLastError()); + return uv_translate_sys_error(err); } } err = uv__kill(process_handle, signum); CloseHandle(process_handle); - return err; + return err; /* err is already translated. */ } diff --git a/deps/uv/src/win/signal.c b/deps/uv/src/win/signal.c index e630cd3..9dc5fcc 100644 --- a/deps/uv/src/win/signal.c +++ b/deps/uv/src/win/signal.c @@ -124,20 +124,20 @@ static BOOL WINAPI uv__signal_control_handler(DWORD type) { } -static uv_err_t uv__signal_register_control_handler() { +static int uv__signal_register_control_handler() { /* When this function is called, the uv__signal_lock must be held. */ /* If the console control handler has already been hooked, just add a */ /* reference. */ if (uv__signal_control_handler_refs > 0) - return uv_ok_; + return 0; if (!SetConsoleCtrlHandler(uv__signal_control_handler, TRUE)) - return uv__new_sys_error(GetLastError()); + return GetLastError(); uv__signal_control_handler_refs++; - return uv_ok_; + return 0; } @@ -162,7 +162,7 @@ static void uv__signal_unregister_control_handler() { } -static uv_err_t uv__signal_register(int signum) { +static int uv__signal_register(int signum) { switch (signum) { case SIGINT: case SIGBREAK: @@ -171,7 +171,7 @@ static uv_err_t uv__signal_register(int signum) { case SIGWINCH: /* SIGWINCH is generated in tty.c. No need to register anything. */ - return uv_ok_; + return 0; case SIGILL: case SIGABRT_COMPAT: @@ -180,11 +180,11 @@ static uv_err_t uv__signal_register(int signum) { case SIGTERM: case SIGABRT: /* Signal is never raised. */ - return uv_ok_; + return 0; default: /* Invalid signal. */ - return uv__new_artificial_error(UV_EINVAL); + return ERROR_INVALID_PARAMETER; } } @@ -259,14 +259,13 @@ int uv_signal_stop(uv_signal_t* handle) { int uv_signal_start(uv_signal_t* handle, uv_signal_cb signal_cb, int signum) { - uv_err_t err; + int err; /* If the user supplies signum == 0, then return an error already. If the */ /* signum is otherwise invalid then uv__signal_register will find out */ /* eventually. */ if (signum == 0) { - uv__set_artificial_error(handle->loop, UV_EINVAL); - return -1; + return UV_EINVAL; } /* Short circuit: if the signal watcher is already watching {signum} don't */ @@ -288,11 +287,10 @@ int uv_signal_start(uv_signal_t* handle, uv_signal_cb signal_cb, int signum) { EnterCriticalSection(&uv__signal_lock); err = uv__signal_register(signum); - if (err.code != UV_OK) { + if (err) { /* Uh-oh, didn't work. */ - handle->loop->last_err = err; LeaveCriticalSection(&uv__signal_lock); - return -1; + return uv_translate_sys_error(err); } handle->signum = signum; diff --git a/deps/uv/src/win/stream.c b/deps/uv/src/win/stream.c index 2648585..2351dd3 100644 --- a/deps/uv/src/win/stream.c +++ b/deps/uv/src/win/stream.c @@ -28,148 +28,176 @@ int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb) { + int err; + + err = ERROR_INVALID_PARAMETER; switch (stream->type) { case UV_TCP: - return uv_tcp_listen((uv_tcp_t*)stream, backlog, cb); + err = uv_tcp_listen((uv_tcp_t*)stream, backlog, cb); + break; case UV_NAMED_PIPE: - return uv_pipe_listen((uv_pipe_t*)stream, backlog, cb); + err = uv_pipe_listen((uv_pipe_t*)stream, backlog, cb); + break; default: assert(0); - return -1; } + + return uv_translate_sys_error(err); } int uv_accept(uv_stream_t* server, uv_stream_t* client) { + int err; + + err = ERROR_INVALID_PARAMETER; switch (server->type) { case UV_TCP: - return uv_tcp_accept((uv_tcp_t*)server, (uv_tcp_t*)client); + err = uv_tcp_accept((uv_tcp_t*)server, (uv_tcp_t*)client); + break; case UV_NAMED_PIPE: - return uv_pipe_accept((uv_pipe_t*)server, client); + err = uv_pipe_accept((uv_pipe_t*)server, client); + break; default: assert(0); - return -1; } + + return uv_translate_sys_error(err); } int uv_read_start(uv_stream_t* handle, uv_alloc_cb alloc_cb, uv_read_cb read_cb) { + int err; + if (handle->flags & UV_HANDLE_READING) { - uv__set_artificial_error(handle->loop, UV_EALREADY); - return -1; + return UV_EALREADY; } if (!(handle->flags & UV_HANDLE_READABLE)) { - uv__set_artificial_error(handle->loop, UV_ENOTCONN); - return -1; + return UV_ENOTCONN; } + err = ERROR_INVALID_PARAMETER; switch (handle->type) { case UV_TCP: - return uv_tcp_read_start((uv_tcp_t*)handle, alloc_cb, read_cb); + err = uv_tcp_read_start((uv_tcp_t*)handle, alloc_cb, read_cb); + break; case UV_NAMED_PIPE: - return uv_pipe_read_start((uv_pipe_t*)handle, alloc_cb, read_cb); + err = uv_pipe_read_start((uv_pipe_t*)handle, alloc_cb, read_cb); + break; case UV_TTY: - return uv_tty_read_start((uv_tty_t*) handle, alloc_cb, read_cb); + err = uv_tty_read_start((uv_tty_t*) handle, alloc_cb, read_cb); + break; default: assert(0); - return -1; } + + return uv_translate_sys_error(err); } int uv_read2_start(uv_stream_t* handle, uv_alloc_cb alloc_cb, uv_read2_cb read_cb) { + int err; + if (handle->flags & UV_HANDLE_READING) { - uv__set_artificial_error(handle->loop, UV_EALREADY); - return -1; + return UV_EALREADY; } if (!(handle->flags & UV_HANDLE_READABLE)) { - uv__set_artificial_error(handle->loop, UV_ENOTCONN); - return -1; + return UV_ENOTCONN; } + err = ERROR_INVALID_PARAMETER; switch (handle->type) { case UV_NAMED_PIPE: - return uv_pipe_read2_start((uv_pipe_t*)handle, alloc_cb, read_cb); + err = uv_pipe_read2_start((uv_pipe_t*)handle, alloc_cb, read_cb); + break; default: assert(0); - return -1; } + + return uv_translate_sys_error(err); } int uv_read_stop(uv_stream_t* handle) { + int err; + if (!(handle->flags & UV_HANDLE_READING)) return 0; + err = 0; if (handle->type == UV_TTY) { - return uv_tty_read_stop((uv_tty_t*) handle); + err = uv_tty_read_stop((uv_tty_t*) handle); } else { handle->flags &= ~UV_HANDLE_READING; DECREASE_ACTIVE_COUNT(handle->loop, handle); - return 0; } + + return uv_translate_sys_error(err); } int uv_write(uv_write_t* req, uv_stream_t* handle, uv_buf_t bufs[], int bufcnt, uv_write_cb cb) { uv_loop_t* loop = handle->loop; + int err; if (!(handle->flags & UV_HANDLE_WRITABLE)) { - uv__set_artificial_error(loop, UV_EPIPE); - return -1; + return UV_EPIPE; } + err = ERROR_INVALID_PARAMETER; switch (handle->type) { case UV_TCP: - return uv_tcp_write(loop, req, (uv_tcp_t*) handle, bufs, bufcnt, cb); + err = uv_tcp_write(loop, req, (uv_tcp_t*) handle, bufs, bufcnt, cb); + break; case UV_NAMED_PIPE: - return uv_pipe_write(loop, req, (uv_pipe_t*) handle, bufs, bufcnt, cb); + err = uv_pipe_write(loop, req, (uv_pipe_t*) handle, bufs, bufcnt, cb); + break; case UV_TTY: - return uv_tty_write(loop, req, (uv_tty_t*) handle, bufs, bufcnt, cb); + err = uv_tty_write(loop, req, (uv_tty_t*) handle, bufs, bufcnt, cb); + break; default: assert(0); - uv__set_sys_error(loop, WSAEINVAL); - return -1; } + + return uv_translate_sys_error(err); } int uv_write2(uv_write_t* req, uv_stream_t* handle, uv_buf_t bufs[], int bufcnt, uv_stream_t* send_handle, uv_write_cb cb) { uv_loop_t* loop = handle->loop; + int err; if (!(handle->flags & UV_HANDLE_WRITABLE)) { - uv__set_artificial_error(loop, UV_EPIPE); - return -1; + return UV_EPIPE; } + err = ERROR_INVALID_PARAMETER; switch (handle->type) { case UV_NAMED_PIPE: - return uv_pipe_write2(loop, req, (uv_pipe_t*) handle, bufs, bufcnt, send_handle, cb); + err = uv_pipe_write2(loop, req, (uv_pipe_t*) handle, bufs, bufcnt, send_handle, cb); + break; default: assert(0); - uv__set_sys_error(loop, WSAEINVAL); - return -1; } + + return uv_translate_sys_error(err); } int uv_shutdown(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb cb) { uv_loop_t* loop = handle->loop; - if (!(handle->flags & UV_HANDLE_WRITABLE)) { - uv__set_artificial_error(loop, UV_EPIPE); - return -1; + if (!(handle->flags & UV_HANDLE_WRITABLE)) { + return UV_EPIPE; } if (!(handle->flags & UV_HANDLE_WRITABLE)) { - uv__set_artificial_error(loop, UV_EPIPE); - return -1; + return UV_EPIPE; } uv_req_init(loop, (uv_req_t*) req); diff --git a/deps/uv/src/win/tcp.c b/deps/uv/src/win/tcp.c index 59a36de..966ea14 100644 --- a/deps/uv/src/win/tcp.c +++ b/deps/uv/src/win/tcp.c @@ -50,8 +50,7 @@ static int uv__tcp_nodelay(uv_tcp_t* handle, SOCKET socket, int enable) { TCP_NODELAY, (const char*)&enable, sizeof enable) == -1) { - uv__set_sys_error(handle->loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } return 0; } @@ -63,8 +62,7 @@ static int uv__tcp_keepalive(uv_tcp_t* handle, SOCKET socket, int enable, unsign SO_KEEPALIVE, (const char*)&enable, sizeof enable) == -1) { - uv__set_sys_error(handle->loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } if (enable && setsockopt(socket, @@ -72,8 +70,7 @@ static int uv__tcp_keepalive(uv_tcp_t* handle, SOCKET socket, int enable, unsign TCP_KEEPALIVE, (const char*)&delay, sizeof delay) == -1) { - uv__set_sys_error(handle->loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } return 0; @@ -84,13 +81,13 @@ static int uv_tcp_set_socket(uv_loop_t* loop, uv_tcp_t* handle, SOCKET socket, int family, int imported) { DWORD yes = 1; int non_ifs_lsp; + int err; assert(handle->socket == INVALID_SOCKET); /* Set the socket to nonblocking mode */ if (ioctlsocket(socket, FIONBIO, &yes) == SOCKET_ERROR) { - uv__set_sys_error(loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } /* Associate it with the I/O completion port. */ @@ -102,8 +99,7 @@ static int uv_tcp_set_socket(uv_loop_t* loop, uv_tcp_t* handle, if (imported) { handle->flags |= UV_HANDLE_EMULATE_IOCP; } else { - uv__set_sys_error(loop, GetLastError()); - return -1; + return GetLastError(); } } @@ -120,20 +116,21 @@ static int uv_tcp_set_socket(uv_loop_t* loop, uv_tcp_t* handle, FILE_SKIP_COMPLETION_PORT_ON_SUCCESS)) { handle->flags |= UV_HANDLE_SYNC_BYPASS_IOCP; } else if (GetLastError() != ERROR_INVALID_FUNCTION) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return GetLastError(); } } - if ((handle->flags & UV_HANDLE_TCP_NODELAY) && - uv__tcp_nodelay(handle, socket, 1)) { - return -1; + if (handle->flags & UV_HANDLE_TCP_NODELAY) { + err = uv__tcp_nodelay(handle, socket, 1); + if (err) + return err; } /* TODO: Use stored delay. */ - if ((handle->flags & UV_HANDLE_TCP_KEEPALIVE) && - uv__tcp_keepalive(handle, socket, 1, 60)) { - return -1; + if (handle->flags & UV_HANDLE_TCP_KEEPALIVE) { + err = uv__tcp_keepalive(handle, socket, 1, 60); + if (err) + return err; } handle->socket = socket; @@ -164,7 +161,7 @@ int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle) { void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle) { - int status; + int err; unsigned int i; uv_tcp_accept_t* req; @@ -174,18 +171,16 @@ void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle) { UNREGISTER_HANDLE_REQ(loop, handle, handle->shutdown_req); + err = 0; if (handle->flags & UV__HANDLE_CLOSING) { - status = -1; - uv__set_artificial_error(loop, UV_ECANCELED); - } else if (shutdown(handle->socket, SD_SEND) != SOCKET_ERROR) { - status = 0; - } else { - status = -1; - uv__set_sys_error(loop, WSAGetLastError()); + err = ERROR_OPERATION_ABORTED; + } else if (shutdown(handle->socket, SD_SEND) == SOCKET_ERROR) { + err = WSAGetLastError(); } if (handle->shutdown_req->cb) { - handle->shutdown_req->cb(handle->shutdown_req, status); + handle->shutdown_req->cb(handle->shutdown_req, + uv_translate_sys_error(err)); } handle->shutdown_req = NULL; @@ -249,20 +244,20 @@ static int uv__bind(uv_tcp_t* handle, if (handle->socket == INVALID_SOCKET) { SOCKET sock = socket(family, SOCK_STREAM, 0); if (sock == INVALID_SOCKET) { - uv__set_sys_error(handle->loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } /* Make the socket non-inheritable */ if (!SetHandleInformation((HANDLE) sock, HANDLE_FLAG_INHERIT, 0)) { - uv__set_sys_error(handle->loop, GetLastError()); + err = GetLastError(); closesocket(sock); - return -1; + return err; } - if (uv_tcp_set_socket(handle->loop, handle, sock, family, 0) < 0) { + err = uv_tcp_set_socket(handle->loop, handle, sock, family, 0); + if (err) { closesocket(sock); - return -1; + return err; } } @@ -275,8 +270,7 @@ static int uv__bind(uv_tcp_t* handle, handle->bind_error = err; handle->flags |= UV_HANDLE_BIND_ERROR; } else { - uv__set_sys_error(handle->loop, err); - return -1; + return err; } } @@ -287,18 +281,14 @@ static int uv__bind(uv_tcp_t* handle, int uv__tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr) { - return uv__bind(handle, - AF_INET, - (struct sockaddr*)&addr, - sizeof(struct sockaddr_in)); + return uv_translate_sys_error( + uv__bind(handle, AF_INET, (struct sockaddr*) &addr, sizeof(addr))); } int uv__tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr) { - return uv__bind(handle, - AF_INET6, - (struct sockaddr*)&addr, - sizeof(struct sockaddr_in6)); + return uv_translate_sys_error( + uv__bind(handle, AF_INET6, (struct sockaddr*) &addr, sizeof(addr))); } @@ -499,6 +489,7 @@ int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb) { uv_loop_t* loop = handle->loop; unsigned int i, simultaneous_accepts; uv_tcp_accept_t* req; + int err; assert(backlog > 0); @@ -507,30 +498,28 @@ int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb) { } if (handle->flags & UV_HANDLE_READING) { - uv__set_artificial_error(loop, UV_EISCONN); - return -1; + return WSAEISCONN; } if (handle->flags & UV_HANDLE_BIND_ERROR) { - uv__set_sys_error(loop, handle->bind_error); - return -1; + return handle->bind_error; } - if (!(handle->flags & UV_HANDLE_BOUND) && - uv_tcp_bind(handle, uv_addr_ip4_any_) < 0) - return -1; + if (!(handle->flags & UV_HANDLE_BOUND)) { + err = uv_tcp_bind(handle, uv_addr_ip4_any_); + if (err) + return err; + } if (!handle->func_acceptex) { - if(!uv_get_acceptex_function(handle->socket, &handle->func_acceptex)) { - uv__set_sys_error(loop, WSAEAFNOSUPPORT); - return -1; + if (!uv_get_acceptex_function(handle->socket, &handle->func_acceptex)) { + return WSAEAFNOSUPPORT; } } if (!(handle->flags & UV_HANDLE_SHARED_TCP_SOCKET) && listen(handle->socket, backlog) == SOCKET_ERROR) { - uv__set_sys_error(loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } handle->flags |= UV_HANDLE_LISTENING; @@ -586,20 +575,18 @@ int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb) { int uv_tcp_accept(uv_tcp_t* server, uv_tcp_t* client) { uv_loop_t* loop = server->loop; - int rv = 0; + int err = 0; int family; uv_tcp_accept_t* req = server->pending_accepts; if (!req) { /* No valid connections found, so we error out. */ - uv__set_sys_error(loop, WSAEWOULDBLOCK); - return -1; + return WSAEWOULDBLOCK; } if (req->accept_socket == INVALID_SOCKET) { - uv__set_sys_error(loop, WSAENOTCONN); - return -1; + return WSAENOTCONN; } if (server->flags & UV_HANDLE_IPV6) { @@ -608,13 +595,13 @@ int uv_tcp_accept(uv_tcp_t* server, uv_tcp_t* client) { family = AF_INET; } - if (uv_tcp_set_socket(client->loop, - client, - req->accept_socket, - family, - 0) < 0) { + err = uv_tcp_set_socket(client->loop, + client, + req->accept_socket, + family, + 0); + if (err) { closesocket(req->accept_socket); - rv = -1; } else { uv_connection_init((uv_stream_t*) client); /* AcceptEx() implicitly binds the accepted socket. */ @@ -651,7 +638,7 @@ int uv_tcp_accept(uv_tcp_t* server, uv_tcp_t* client) { loop->active_tcp_streams++; - return rv; + return err; } @@ -689,20 +676,21 @@ int uv__tcp_connect(uv_connect_t* req, int addrsize = sizeof(struct sockaddr_in); BOOL success; DWORD bytes; + int err; if (handle->flags & UV_HANDLE_BIND_ERROR) { - uv__set_sys_error(loop, handle->bind_error); - return -1; + return handle->bind_error; } - if (!(handle->flags & UV_HANDLE_BOUND) && - uv_tcp_bind(handle, uv_addr_ip4_any_) < 0) - return -1; + if (!(handle->flags & UV_HANDLE_BOUND)) { + err = uv_tcp_bind(handle, uv_addr_ip4_any_); + if (err) + return err; + } if (!handle->func_connectex) { - if(!uv_get_connectex_function(handle->socket, &handle->func_connectex)) { - uv__set_sys_error(loop, WSAEAFNOSUPPORT); - return -1; + if (!uv_get_connectex_function(handle->socket, &handle->func_connectex)) { + return WSAEAFNOSUPPORT; } } @@ -730,8 +718,7 @@ int uv__tcp_connect(uv_connect_t* req, handle->reqs_pending++; REGISTER_HANDLE_REQ(loop, handle, req); } else { - uv__set_sys_error(loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } return 0; @@ -746,20 +733,21 @@ int uv__tcp_connect6(uv_connect_t* req, int addrsize = sizeof(struct sockaddr_in6); BOOL success; DWORD bytes; + int err; if (handle->flags & UV_HANDLE_BIND_ERROR) { - uv__set_sys_error(loop, handle->bind_error); - return -1; + return handle->bind_error; } - if (!(handle->flags & UV_HANDLE_BOUND) && - uv_tcp_bind6(handle, uv_addr_ip6_any_) < 0) - return -1; + if (!(handle->flags & UV_HANDLE_BOUND)) { + err = uv_tcp_bind6(handle, uv_addr_ip6_any_); + if (err) + return err; + } if (!handle->func_connectex) { - if(!uv_get_connectex_function(handle->socket, &handle->func_connectex)) { - uv__set_sys_error(loop, WSAEAFNOSUPPORT); - return -1; + if (!uv_get_connectex_function(handle->socket, &handle->func_connectex)) { + return WSAEAFNOSUPPORT; } } @@ -785,8 +773,7 @@ int uv__tcp_connect6(uv_connect_t* req, handle->reqs_pending++; REGISTER_HANDLE_REQ(loop, handle, req); } else { - uv__set_sys_error(loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } return 0; @@ -799,19 +786,16 @@ int uv_tcp_getsockname(uv_tcp_t* handle, struct sockaddr* name, int result; if (!(handle->flags & UV_HANDLE_BOUND)) { - uv__set_sys_error(loop, WSAEINVAL); - return -1; + return UV_EINVAL; } if (handle->flags & UV_HANDLE_BIND_ERROR) { - uv__set_sys_error(loop, handle->bind_error); - return -1; + return uv_translate_sys_error(handle->bind_error); } result = getsockname(handle->socket, name, namelen); if (result != 0) { - uv__set_sys_error(loop, WSAGetLastError()); - return -1; + return uv_translate_sys_error(WSAGetLastError()); } return 0; @@ -824,19 +808,16 @@ int uv_tcp_getpeername(uv_tcp_t* handle, struct sockaddr* name, int result; if (!(handle->flags & UV_HANDLE_BOUND)) { - uv__set_sys_error(loop, WSAEINVAL); - return -1; + return UV_EINVAL; } if (handle->flags & UV_HANDLE_BIND_ERROR) { - uv__set_sys_error(loop, handle->bind_error); - return -1; + return uv_translate_sys_error(handle->bind_error); } result = getpeername(handle->socket, name, namelen); if (result != 0) { - uv__set_sys_error(loop, WSAGetLastError()); - return -1; + return uv_translate_sys_error(WSAGetLastError()); } return 0; @@ -896,8 +877,7 @@ int uv_tcp_write(uv_loop_t* loop, uv_write_t* req, uv_tcp_t* handle, } } else { /* Send failed due to an error. */ - uv__set_sys_error(loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } return 0; @@ -928,12 +908,12 @@ void uv_process_tcp_read_req(uv_loop_t* loop, uv_tcp_t* handle, /* * Turn WSAECONNABORTED into UV_ECONNRESET to be consistent with Unix. */ - uv__set_error(loop, UV_ECONNRESET, err); - } else { - uv__set_sys_error(loop, err); + err = WSAECONNRESET; } - handle->read_cb((uv_stream_t*)handle, -1, buf); + handle->read_cb((uv_stream_t*)handle, + uv_translate_sys_error(err), + buf); } } else { if (!(handle->flags & UV_HANDLE_ZERO_READ)) { @@ -955,10 +935,9 @@ void uv_process_tcp_read_req(uv_loop_t* loop, uv_tcp_t* handle, } handle->flags &= ~UV_HANDLE_READABLE; - uv__set_error(loop, UV_EOF, ERROR_SUCCESS); buf.base = 0; buf.len = 0; - handle->read_cb((uv_stream_t*)handle, -1, handle->read_buffer); + handle->read_cb((uv_stream_t*)handle, UV_EOF, handle->read_buffer); goto done; } } @@ -987,15 +966,13 @@ void uv_process_tcp_read_req(uv_loop_t* loop, uv_tcp_t* handle, handle->flags &= ~(UV_HANDLE_READING | UV_HANDLE_READABLE); DECREASE_ACTIVE_COUNT(loop, handle); - uv__set_error(loop, UV_EOF, ERROR_SUCCESS); - handle->read_cb((uv_stream_t*)handle, -1, buf); + handle->read_cb((uv_stream_t*)handle, UV_EOF, buf); break; } } else { err = WSAGetLastError(); if (err == WSAEWOULDBLOCK) { /* Read buffer was completely empty, report a 0-byte read. */ - uv__set_sys_error(loop, WSAEWOULDBLOCK); handle->read_cb((uv_stream_t*)handle, 0, buf); } else { /* Ouch! serious error. */ @@ -1005,12 +982,12 @@ void uv_process_tcp_read_req(uv_loop_t* loop, uv_tcp_t* handle, if (err == WSAECONNABORTED) { /* Turn WSAECONNABORTED into UV_ECONNRESET to be consistent with */ /* Unix. */ - uv__set_error(loop, UV_ECONNRESET, err); - } else { - uv__set_sys_error(loop, err); + err = WSAECONNRESET; } - handle->read_cb((uv_stream_t*)handle, -1, buf); + handle->read_cb((uv_stream_t*)handle, + uv_translate_sys_error(err), + buf); } break; } @@ -1030,6 +1007,8 @@ done: void uv_process_tcp_write_req(uv_loop_t* loop, uv_tcp_t* handle, uv_write_t* req) { + int err; + assert(handle->type == UV_TCP); assert(handle->write_queue_size >= req->queued_bytes); @@ -1047,8 +1026,8 @@ void uv_process_tcp_write_req(uv_loop_t* loop, uv_tcp_t* handle, } if (req->cb) { - uv__set_sys_error(loop, GET_REQ_SOCK_ERROR(req)); - ((uv_write_cb)req->cb)(req, loop->last_err.code == UV_OK ? 0 : -1); + err = GET_REQ_SOCK_ERROR(req); + req->cb(req, uv_translate_sys_error(err)); } handle->write_reqs_pending--; @@ -1064,6 +1043,7 @@ void uv_process_tcp_write_req(uv_loop_t* loop, uv_tcp_t* handle, void uv_process_tcp_accept_req(uv_loop_t* loop, uv_tcp_t* handle, uv_req_t* raw_req) { uv_tcp_accept_t* req = (uv_tcp_accept_t*) raw_req; + int err; assert(handle->type == UV_TCP); @@ -1076,8 +1056,9 @@ void uv_process_tcp_accept_req(uv_loop_t* loop, uv_tcp_t* handle, handle->flags &= ~UV_HANDLE_LISTENING; DECREASE_ACTIVE_COUNT(loop, handle); if (handle->connection_cb) { - uv__set_sys_error(loop, GET_REQ_SOCK_ERROR(req)); - handle->connection_cb((uv_stream_t*)handle, -1); + err = GET_REQ_SOCK_ERROR(req); + handle->connection_cb((uv_stream_t*)handle, + uv_translate_sys_error(err)); } } } else if (REQ_SUCCESS(req) && @@ -1110,10 +1091,13 @@ void uv_process_tcp_accept_req(uv_loop_t* loop, uv_tcp_t* handle, void uv_process_tcp_connect_req(uv_loop_t* loop, uv_tcp_t* handle, uv_connect_t* req) { + int err; + assert(handle->type == UV_TCP); UNREGISTER_HANDLE_REQ(loop, handle, req); + err = 0; if (REQ_SUCCESS(req)) { if (setsockopt(handle->socket, SOL_SOCKET, @@ -1123,15 +1107,13 @@ void uv_process_tcp_connect_req(uv_loop_t* loop, uv_tcp_t* handle, uv_connection_init((uv_stream_t*)handle); handle->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; loop->active_tcp_streams++; - ((uv_connect_cb)req->cb)(req, 0); } else { - uv__set_sys_error(loop, WSAGetLastError()); - ((uv_connect_cb)req->cb)(req, -1); + err = WSAGetLastError(); } } else { - uv__set_sys_error(loop, GET_REQ_SOCK_ERROR(req)); - ((uv_connect_cb)req->cb)(req, -1); + err = GET_REQ_SOCK_ERROR(req); } + req->cb(req, uv_translate_sys_error(err)); DECREASE_PENDING_REQ_COUNT(handle); } @@ -1139,6 +1121,8 @@ void uv_process_tcp_connect_req(uv_loop_t* loop, uv_tcp_t* handle, int uv_tcp_import(uv_tcp_t* tcp, WSAPROTOCOL_INFOW* socket_protocol_info, int tcp_connection) { + int err; + SOCKET socket = WSASocketW(AF_INET, SOCK_STREAM, IPPROTO_IP, @@ -1147,23 +1131,23 @@ int uv_tcp_import(uv_tcp_t* tcp, WSAPROTOCOL_INFOW* socket_protocol_info, WSA_FLAG_OVERLAPPED); if (socket == INVALID_SOCKET) { - uv__set_sys_error(tcp->loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } if (!SetHandleInformation((HANDLE) socket, HANDLE_FLAG_INHERIT, 0)) { - uv__set_sys_error(tcp->loop, GetLastError()); + err = GetLastError(); closesocket(socket); - return -1; + return err; } - if (uv_tcp_set_socket(tcp->loop, - tcp, - socket, - socket_protocol_info->iAddressFamily, - 1) < 0) { + err = uv_tcp_set_socket(tcp->loop, + tcp, + socket, + socket_protocol_info->iAddressFamily, + 1); + if (err) { closesocket(socket); - return -1; + return err; } if (tcp_connection) { @@ -1180,9 +1164,12 @@ int uv_tcp_import(uv_tcp_t* tcp, WSAPROTOCOL_INFOW* socket_protocol_info, int uv_tcp_nodelay(uv_tcp_t* handle, int enable) { - if (handle->socket != INVALID_SOCKET && - uv__tcp_nodelay(handle, handle->socket, enable)) { - return -1; + int err; + + if (handle->socket != INVALID_SOCKET) { + err = uv__tcp_nodelay(handle, handle->socket, enable); + if (err) + return err; } if (enable) { @@ -1196,9 +1183,12 @@ int uv_tcp_nodelay(uv_tcp_t* handle, int enable) { int uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay) { - if (handle->socket != INVALID_SOCKET && - uv__tcp_keepalive(handle, handle->socket, enable, delay)) { - return -1; + int err; + + if (handle->socket != INVALID_SOCKET) { + err = uv__tcp_keepalive(handle, handle->socket, enable, delay); + if (err) + return err; } if (enable) { @@ -1225,19 +1215,16 @@ int uv_tcp_duplicate_socket(uv_tcp_t* handle, int pid, if (!(handle->flags & UV_HANDLE_LISTENING)) { if (!(handle->flags & UV_HANDLE_BOUND)) { - uv__set_artificial_error(handle->loop, UV_EINVAL); - return -1; + return ERROR_INVALID_PARAMETER; } if (listen(handle->socket, SOMAXCONN) == SOCKET_ERROR) { - uv__set_sys_error(handle->loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } } } if (WSADuplicateSocketW(handle->socket, pid, protocol_info)) { - uv__set_sys_error(handle->loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } handle->flags |= UV_HANDLE_SHARED_TCP_SOCKET; @@ -1248,8 +1235,7 @@ int uv_tcp_duplicate_socket(uv_tcp_t* handle, int pid, int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable) { if (handle->flags & UV_HANDLE_CONNECTION) { - uv__set_artificial_error(handle->loop, UV_EINVAL); - return -1; + return UV_EINVAL; } /* Check if we're already in the desired mode. */ @@ -1260,8 +1246,7 @@ int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable) { /* Don't allow switching from single pending accept to many. */ if (enable) { - uv__set_artificial_error(handle->loop, UV_ENOTSUP); - return -1; + return UV_ENOTSUP; } /* Check if we're in a middle of changing the number of pending accepts. */ @@ -1309,7 +1294,7 @@ static int uv_tcp_try_cancel_io(uv_tcp_t* tcp) { assert(socket != 0 && socket != INVALID_SOCKET); if (!CancelIo((HANDLE) socket)) { - return -1; + return GetLastError(); } /* It worked. */ @@ -1392,6 +1377,7 @@ void uv_tcp_close(uv_loop_t* loop, uv_tcp_t* tcp) { int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock) { WSAPROTOCOL_INFOW protocol_info; int opt_len; + int err; /* Detect the address family of the socket. */ opt_len = (int) sizeof protocol_info; @@ -1400,22 +1386,21 @@ int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock) { SO_PROTOCOL_INFOW, (char*) &protocol_info, &opt_len) == SOCKET_ERROR) { - uv__set_sys_error(handle->loop, GetLastError()); - return -1; + return uv_translate_sys_error(GetLastError()); } /* Make the socket non-inheritable */ if (!SetHandleInformation((HANDLE) sock, HANDLE_FLAG_INHERIT, 0)) { - uv__set_sys_error(handle->loop, GetLastError()); - return -1; + return uv_translate_sys_error(GetLastError()); } - if (uv_tcp_set_socket(handle->loop, - handle, - sock, - protocol_info.iAddressFamily, - 1) < 0) { - return -1; + err = uv_tcp_set_socket(handle->loop, + handle, + sock, + protocol_info.iAddressFamily, + 1); + if (err) { + return uv_translate_sys_error(err); } return 0; diff --git a/deps/uv/src/win/thread.c b/deps/uv/src/win/thread.c index e774fd9..e5eb701 100644 --- a/deps/uv/src/win/thread.c +++ b/deps/uv/src/win/thread.c @@ -119,7 +119,7 @@ void uv_once(uv_once_t* guard, void (*callback)(void)) { int uv_thread_join(uv_thread_t *tid) { if (WaitForSingleObject(*tid, INFINITE)) - return -1; + return uv_translate_sys_error(GetLastError()); else { CloseHandle(*tid); *tid = 0; @@ -148,7 +148,7 @@ int uv_mutex_trylock(uv_mutex_t* mutex) { if (TryEnterCriticalSection(mutex)) return 0; else - return -1; + return UV_EAGAIN; } @@ -225,7 +225,10 @@ void uv_rwlock_wrunlock(uv_rwlock_t* rwlock) { int uv_sem_init(uv_sem_t* sem, unsigned int value) { *sem = CreateSemaphore(NULL, value, INT_MAX, NULL); - return *sem ? 0 : -1; + if (*sem == NULL) + return uv_translate_sys_error(GetLastError()); + else + return 0; } @@ -254,7 +257,7 @@ int uv_sem_trywait(uv_sem_t* sem) { return 0; if (r == WAIT_TIMEOUT) - return -1; + return UV_EAGAIN; abort(); return -1; /* Satisfy the compiler. */ @@ -281,7 +284,7 @@ inline static int uv__rwlock_srwlock_tryrdlock(uv_rwlock_t* rwlock) { if (pTryAcquireSRWLockShared(&rwlock->srwlock_)) return 0; else - return -1; + return UV_EBUSY; /* TODO(bnoordhuis) EAGAIN when owned by this thread. */ } @@ -299,7 +302,7 @@ inline static int uv__rwlock_srwlock_trywrlock(uv_rwlock_t* rwlock) { if (pTryAcquireSRWLockExclusive(&rwlock->srwlock_)) return 0; else - return -1; + return UV_EBUSY; /* TODO(bnoordhuis) EAGAIN when owned by this thread. */ } @@ -309,12 +312,16 @@ inline static void uv__rwlock_srwlock_wrunlock(uv_rwlock_t* rwlock) { inline static int uv__rwlock_fallback_init(uv_rwlock_t* rwlock) { - if (uv_mutex_init(&rwlock->fallback_.read_mutex_)) - return -1; + int err; + + err = uv_mutex_init(&rwlock->fallback_.read_mutex_); + if (err) + return err; - if (uv_mutex_init(&rwlock->fallback_.write_mutex_)) { + err = uv_mutex_init(&rwlock->fallback_.write_mutex_); + if (err) { uv_mutex_destroy(&rwlock->fallback_.read_mutex_); - return -1; + return err; } rwlock->fallback_.num_readers_ = 0; @@ -340,25 +347,23 @@ inline static void uv__rwlock_fallback_rdlock(uv_rwlock_t* rwlock) { inline static int uv__rwlock_fallback_tryrdlock(uv_rwlock_t* rwlock) { - int ret; + int err; - ret = -1; - - if (uv_mutex_trylock(&rwlock->fallback_.read_mutex_)) + err = uv_mutex_trylock(&rwlock->fallback_.read_mutex_); + if (err) goto out; + err = 0; if (rwlock->fallback_.num_readers_ == 0) - ret = uv_mutex_trylock(&rwlock->fallback_.write_mutex_); - else - ret = 0; + err = uv_mutex_trylock(&rwlock->fallback_.write_mutex_); - if (ret == 0) + if (err == 0) rwlock->fallback_.num_readers_++; uv_mutex_unlock(&rwlock->fallback_.read_mutex_); out: - return ret; + return err; } @@ -396,6 +401,8 @@ inline static void uv__rwlock_fallback_wrunlock(uv_rwlock_t* rwlock) { */ inline static int uv_cond_fallback_init(uv_cond_t* cond) { + int err; + /* Initialize the count to 0. */ cond->fallback.waiters_count = 0; @@ -406,16 +413,20 @@ inline static int uv_cond_fallback_init(uv_cond_t* cond) { FALSE, /* auto-reset event */ FALSE, /* non-signaled initially */ NULL); /* unnamed */ - if (!cond->fallback.signal_event) + if (!cond->fallback.signal_event) { + err = GetLastError(); goto error2; + } /* Create a manual-reset event. */ cond->fallback.broadcast_event = CreateEvent(NULL, /* no security */ TRUE, /* manual-reset */ FALSE, /* non-signaled */ NULL); /* unnamed */ - if (!cond->fallback.broadcast_event) + if (!cond->fallback.broadcast_event) { + err = GetLastError(); goto error; + } return 0; @@ -423,7 +434,7 @@ error: CloseHandle(cond->fallback.signal_event); error2: DeleteCriticalSection(&cond->fallback.waiters_count_lock); - return -1; + return uv_translate_sys_error(err); } @@ -560,7 +571,7 @@ inline int uv_cond_wait_helper(uv_cond_t* cond, uv_mutex_t* mutex, return 0; if (result == WAIT_TIMEOUT) - return -1; + return UV_ETIMEDOUT; abort(); return -1; /* Satisfy the compiler. */ @@ -599,7 +610,7 @@ inline static int uv_cond_condvar_timedwait(uv_cond_t* cond, return 0; if (GetLastError() != ERROR_TIMEOUT) abort(); - return -1; + return UV_ETIMEDOUT; } @@ -613,16 +624,21 @@ int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) { + int err; + barrier->n = count; barrier->count = 0; - if (uv_mutex_init(&barrier->mutex)) - return -1; + err = uv_mutex_init(&barrier->mutex); + if (err) + return err; - if (uv_sem_init(&barrier->turnstile1, 0)) + err = uv_sem_init(&barrier->turnstile1, 0); + if (err) goto error2; - if (uv_sem_init(&barrier->turnstile2, 1)) + err = uv_sem_init(&barrier->turnstile2, 1); + if (err) goto error; return 0; @@ -631,7 +647,7 @@ error: uv_sem_destroy(&barrier->turnstile1); error2: uv_mutex_destroy(&barrier->mutex); - return -1; + return err; } diff --git a/deps/uv/src/win/threadpool.c b/deps/uv/src/win/threadpool.c index 1446878..9539844 100644 --- a/deps/uv/src/win/threadpool.c +++ b/deps/uv/src/win/threadpool.c @@ -56,13 +56,12 @@ static DWORD WINAPI uv_work_thread_proc(void* parameter) { int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, uv_after_work_cb after_work_cb) { if (work_cb == NULL) - return uv__set_artificial_error(loop, UV_EINVAL); + return UV_EINVAL; uv_work_req_init(loop, req, work_cb, after_work_cb); if (!QueueUserWorkItem(&uv_work_thread_proc, req, WT_EXECUTELONGFUNCTION)) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return uv_translate_sys_error(GetLastError()); } uv__req_register(loop, req); @@ -71,7 +70,7 @@ int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, int uv_cancel(uv_req_t* req) { - return -1; + return UV_ENOSYS; } diff --git a/deps/uv/src/win/timer.c b/deps/uv/src/win/timer.c index 9c0dbef..6c53ea3 100644 --- a/deps/uv/src/win/timer.c +++ b/deps/uv/src/win/timer.c @@ -157,8 +157,7 @@ int uv_timer_again(uv_timer_t* handle) { /* If timer_cb is NULL that means that the timer was never started. */ if (!handle->timer_cb) { - uv__set_sys_error(loop, ERROR_INVALID_DATA); - return -1; + return UV_EINVAL; } if (handle->flags & UV_HANDLE_ACTIVE) { diff --git a/deps/uv/src/win/tty.c b/deps/uv/src/win/tty.c index 64934ff..ee61529 100644 --- a/deps/uv/src/win/tty.c +++ b/deps/uv/src/win/tty.c @@ -24,7 +24,7 @@ #include #if defined(_MSC_VER) && _MSC_VER < 1600 -# include "uv-private/stdint-msvc2008.h" +# include "stdint-msvc2008.h" #else # include #endif @@ -101,15 +101,13 @@ int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, uv_file fd, int readable) { handle = (HANDLE) _get_osfhandle(fd); if (handle == INVALID_HANDLE_VALUE) { - uv__set_artificial_error(loop, UV_EBADF); - return -1; + return UV_EBADF; } if (!readable) { /* Obtain the screen buffer info with the output handle. */ if (!GetConsoleScreenBufferInfo(handle, &screen_buffer_info)) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return uv_translate_sys_error(GetLastError()); } /* Obtain the the tty_output_lock because the virtual window state is */ @@ -170,10 +168,10 @@ int uv_tty_set_mode(uv_tty_t* tty, int mode) { unsigned char was_reading; uv_alloc_cb alloc_cb; uv_read_cb read_cb; + int err; if (!(tty->flags & UV_HANDLE_TTY_READABLE)) { - uv__set_artificial_error(tty->loop, UV_EINVAL); - return -1; + return UV_EINVAL; } if (!!mode == !!(tty->flags & UV_HANDLE_TTY_RAW)) { @@ -189,8 +187,7 @@ int uv_tty_set_mode(uv_tty_t* tty, int mode) { } if (!SetConsoleMode(tty->handle, flags)) { - uv__set_sys_error(tty->loop, GetLastError()); - return -1; + return uv_translate_sys_error(GetLastError()); } /* If currently reading, stop, and restart reading. */ @@ -199,8 +196,11 @@ int uv_tty_set_mode(uv_tty_t* tty, int mode) { alloc_cb = tty->alloc_cb; read_cb = tty->read_cb; - if (was_reading && uv_tty_read_stop(tty) != 0) { - return -1; + if (was_reading) { + err = uv_tty_read_stop(tty); + if (err) { + return uv_translate_sys_error(err); + } } } else { was_reading = 0; @@ -211,8 +211,11 @@ int uv_tty_set_mode(uv_tty_t* tty, int mode) { tty->flags |= mode ? UV_HANDLE_TTY_RAW : 0; /* If we just stopped reading, restart. */ - if (was_reading && uv_tty_read_start(tty, alloc_cb, read_cb) != 0) { - return -1; + if (was_reading) { + err = uv_tty_read_start(tty, alloc_cb, read_cb); + if (err) { + return uv_translate_sys_error(err); + } } return 0; @@ -229,8 +232,7 @@ int uv_tty_get_winsize(uv_tty_t* tty, int* width, int* height) { CONSOLE_SCREEN_BUFFER_INFO info; if (!GetConsoleScreenBufferInfo(tty->handle, &info)) { - uv__set_sys_error(tty->loop, GetLastError()); - return -1; + return uv_translate_sys_error(GetLastError()); } EnterCriticalSection(&uv_tty_output_lock); @@ -479,18 +481,20 @@ void uv_process_tty_read_raw_req(uv_loop_t* loop, uv_tty_t* handle, /* An error occurred while waiting for the event. */ if ((handle->flags & UV_HANDLE_READING)) { handle->flags &= ~UV_HANDLE_READING; - uv__set_sys_error(loop, GET_REQ_ERROR(req)); - handle->read_cb((uv_stream_t*)handle, -1, uv_null_buf_); + handle->read_cb((uv_stream_t*)handle, + uv_translate_sys_error(GET_REQ_ERROR(req)), + uv_null_buf_); } goto out; } /* Fetch the number of events */ if (!GetNumberOfConsoleInputEvents(handle->handle, &records_left)) { - uv__set_sys_error(loop, GetLastError()); handle->flags &= ~UV_HANDLE_READING; DECREASE_ACTIVE_COUNT(loop, handle); - handle->read_cb((uv_stream_t*)handle, -1, uv_null_buf_); + handle->read_cb((uv_stream_t*)handle, + uv_translate_sys_error(GetLastError()), + uv_null_buf_); goto out; } @@ -507,10 +511,11 @@ void uv_process_tty_read_raw_req(uv_loop_t* loop, uv_tty_t* handle, &handle->last_input_record, 1, &records_read)) { - uv__set_sys_error(loop, GetLastError()); handle->flags &= ~UV_HANDLE_READING; DECREASE_ACTIVE_COUNT(loop, handle); - handle->read_cb((uv_stream_t*) handle, -1, buf); + handle->read_cb((uv_stream_t*) handle, + uv_translate_sys_error(GetLastError()), + buf); goto out; } records_left--; @@ -626,10 +631,11 @@ void uv_process_tty_read_raw_req(uv_loop_t* loop, uv_tty_t* handle, /* If the utf16 character(s) couldn't be converted something must */ /* be wrong. */ if (!char_len) { - uv__set_sys_error(loop, GetLastError()); handle->flags &= ~UV_HANDLE_READING; DECREASE_ACTIVE_COUNT(loop, handle); - handle->read_cb((uv_stream_t*) handle, -1, buf); + handle->read_cb((uv_stream_t*) handle, + uv_translate_sys_error(GetLastError()), + buf); goto out; } @@ -739,11 +745,11 @@ void uv_process_tty_read_line_req(uv_loop_t* loop, uv_tty_t* handle, /* Real error */ handle->flags &= ~UV_HANDLE_READING; DECREASE_ACTIVE_COUNT(loop, handle); - uv__set_sys_error(loop, GET_REQ_ERROR(req)); - handle->read_cb((uv_stream_t*) handle, -1, buf); + handle->read_cb((uv_stream_t*) handle, + uv_translate_sys_error(GET_REQ_ERROR(req)), + buf); } else { /* The read was cancelled, or whatever we don't care */ - uv__set_sys_error(loop, WSAEWOULDBLOCK); /* maps to UV_EAGAIN */ handle->read_cb((uv_stream_t*) handle, 0, buf); } @@ -751,9 +757,6 @@ void uv_process_tty_read_line_req(uv_loop_t* loop, uv_tty_t* handle, /* Read successful */ /* TODO: read unicode, convert to utf-8 */ DWORD bytes = req->overlapped.InternalHigh; - if (bytes == 0) { - uv__set_sys_error(loop, WSAEWOULDBLOCK); /* maps to UV_EAGAIN */ - } handle->read_cb((uv_stream_t*) handle, bytes, buf); } @@ -788,8 +791,7 @@ int uv_tty_read_start(uv_tty_t* handle, uv_alloc_cb alloc_cb, uv_loop_t* loop = handle->loop; if (!(handle->flags & UV_HANDLE_TTY_READABLE)) { - uv__set_artificial_error(handle->loop, UV_EINVAL); - return -1; + return ERROR_INVALID_PARAMETER; } handle->flags |= UV_HANDLE_READING; @@ -831,8 +833,7 @@ int uv_tty_read_stop(uv_tty_t* handle) { DWORD written; memset(&record, 0, sizeof record); if (!WriteConsoleInputW(handle->handle, &record, 1, &written)) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return GetLastError(); } } @@ -1763,13 +1764,14 @@ int uv_tty_write(uv_loop_t* loop, uv_write_t* req, uv_tty_t* handle, void uv_process_tty_write_req(uv_loop_t* loop, uv_tty_t* handle, uv_write_t* req) { + int err; handle->write_queue_size -= req->queued_bytes; UNREGISTER_HANDLE_REQ(loop, handle, req); if (req->cb) { - uv__set_sys_error(loop, GET_REQ_ERROR(req)); - ((uv_write_cb)req->cb)(req, loop->last_err.code == UV_OK ? 0 : -1); + err = GET_REQ_ERROR(req); + req->cb(req, uv_translate_sys_error(err)); } handle->write_reqs_pending--; @@ -1806,8 +1808,7 @@ void uv_tty_endgame(uv_loop_t* loop, uv_tty_t* handle) { /* TTY shutdown is really just a no-op */ if (handle->shutdown_req->cb) { if (handle->flags & UV__HANDLE_CLOSING) { - uv__set_artificial_error(loop, UV_ECANCELED); - handle->shutdown_req->cb(handle->shutdown_req, -1); + handle->shutdown_req->cb(handle->shutdown_req, UV_ECANCELED); } else { handle->shutdown_req->cb(handle->shutdown_req, 0); } diff --git a/deps/uv/src/win/udp.c b/deps/uv/src/win/udp.c index 4dcb19d..a82c8c1 100644 --- a/deps/uv/src/win/udp.c +++ b/deps/uv/src/win/udp.c @@ -42,14 +42,12 @@ int uv_udp_getsockname(uv_udp_t* handle, struct sockaddr* name, int result; if (!(handle->flags & UV_HANDLE_BOUND)) { - uv__set_sys_error(loop, WSAEINVAL); - return -1; + return UV_EINVAL; } result = getsockname(handle->socket, name, namelen); if (result != 0) { - uv__set_sys_error(loop, WSAGetLastError()); - return -1; + return uv_translate_sys_error(WSAGetLastError()); } return 0; @@ -70,20 +68,17 @@ static int uv_udp_set_socket(uv_loop_t* loop, uv_udp_t* handle, SOCKET socket, SO_REUSEADDR, (char*) &yes, sizeof yes) == SOCKET_ERROR) { - uv__set_sys_error(loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } /* Set the socket to nonblocking mode */ if (ioctlsocket(socket, FIONBIO, &yes) == SOCKET_ERROR) { - uv__set_sys_error(loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } /* Make the socket non-inheritable */ if (!SetHandleInformation((HANDLE)socket, HANDLE_FLAG_INHERIT, 0)) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return GetLastError(); } /* Associate it with the I/O completion port. */ @@ -92,8 +87,7 @@ static int uv_udp_set_socket(uv_loop_t* loop, uv_udp_t* handle, SOCKET socket, loop->iocp, (ULONG_PTR)socket, 0) == NULL) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return GetLastError(); } if (pSetFileCompletionNotificationModes) { @@ -108,8 +102,7 @@ static int uv_udp_set_socket(uv_loop_t* loop, uv_udp_t* handle, SOCKET socket, SO_PROTOCOL_INFOW, (char*) &info, &opt_len) == SOCKET_ERROR) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return GetLastError(); } if (info.ProtocolChain.ChainLen == 1) { @@ -120,8 +113,7 @@ static int uv_udp_set_socket(uv_loop_t* loop, uv_udp_t* handle, SOCKET socket, handle->func_wsarecv = uv_wsarecv_workaround; handle->func_wsarecvfrom = uv_wsarecvfrom_workaround; } else if (GetLastError() != ERROR_INVALID_FUNCTION) { - uv__set_sys_error(loop, GetLastError()); - return -1; + return GetLastError(); } } } @@ -182,24 +174,24 @@ static int uv__bind(uv_udp_t* handle, int addrsize, unsigned int flags) { int r; + int err; DWORD no = 0; if ((flags & UV_UDP_IPV6ONLY) && family != AF_INET6) { /* UV_UDP_IPV6ONLY is supported only for IPV6 sockets */ - uv__set_artificial_error(handle->loop, UV_EINVAL); - return -1; + return ERROR_INVALID_PARAMETER; } if (handle->socket == INVALID_SOCKET) { SOCKET sock = socket(family, SOCK_DGRAM, 0); if (sock == INVALID_SOCKET) { - uv__set_sys_error(handle->loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } - if (uv_udp_set_socket(handle->loop, handle, sock, family) < 0) { + err = uv_udp_set_socket(handle->loop, handle, sock, family); + if (err) { closesocket(sock); - return -1; + return err; } if (family == AF_INET6) @@ -222,8 +214,7 @@ static int uv__bind(uv_udp_t* handle, r = bind(handle->socket, addr, addrsize); if (r == SOCKET_ERROR) { - uv__set_sys_error(handle->loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } handle->flags |= UV_HANDLE_BOUND; @@ -232,23 +223,33 @@ static int uv__bind(uv_udp_t* handle, } -int uv__udp_bind(uv_udp_t* handle, struct sockaddr_in addr, - unsigned int flags) { - return uv__bind(handle, - AF_INET, - (struct sockaddr*) &addr, - sizeof(struct sockaddr_in), - flags); +int uv__udp_bind(uv_udp_t* handle, + struct sockaddr_in addr, + unsigned int flags) { + int err; + + err = uv__bind(handle, + AF_INET, + (struct sockaddr*) &addr, + sizeof(addr), + flags); + + return uv_translate_sys_error(err); } -int uv__udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, - unsigned int flags) { - return uv__bind(handle, - AF_INET6, - (struct sockaddr*) &addr, - sizeof(struct sockaddr_in6), - flags); +int uv__udp_bind6(uv_udp_t* handle, + struct sockaddr_in6 addr, + unsigned int flags) { + int err; + + err = uv__bind(handle, + AF_INET6, + (struct sockaddr*) &addr, + sizeof(addr), + flags); + + return uv_translate_sys_error(err); } @@ -344,15 +345,16 @@ static void uv_udp_queue_recv(uv_loop_t* loop, uv_udp_t* handle) { int uv__udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb) { uv_loop_t* loop = handle->loop; + int err; if (handle->flags & UV_HANDLE_READING) { - uv__set_sys_error(loop, WSAEALREADY); - return -1; + return WSAEALREADY; } - if (!(handle->flags & UV_HANDLE_BOUND) && - uv_udp_bind(handle, uv_addr_ip4_any_, 0) < 0) { - return -1; + if (!(handle->flags & UV_HANDLE_BOUND)) { + err = uv_udp_bind(handle, uv_addr_ip4_any_, 0); + if (err) + return err; } handle->flags |= UV_HANDLE_READING; @@ -416,8 +418,7 @@ static int uv__send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], REGISTER_HANDLE_REQ(loop, handle, req); } else { /* Send failed due to an error. */ - uv__set_sys_error(loop, WSAGetLastError()); - return -1; + return WSAGetLastError(); } return 0; @@ -426,10 +427,12 @@ static int uv__send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], int uv__udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], int bufcnt, struct sockaddr_in addr, uv_udp_send_cb cb) { + int err; - if (!(handle->flags & UV_HANDLE_BOUND) && - uv_udp_bind(handle, uv_addr_ip4_any_, 0) < 0) { - return -1; + if (!(handle->flags & UV_HANDLE_BOUND)) { + err = uv_udp_bind(handle, uv_addr_ip4_any_, 0); + if (err) + return err; } return uv__send(req, @@ -444,10 +447,12 @@ int uv__udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], int uv__udp_send6(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], int bufcnt, struct sockaddr_in6 addr, uv_udp_send_cb cb) { + int err; - if (!(handle->flags & UV_HANDLE_BOUND) && - uv_udp_bind6(handle, uv_addr_ip6_any_, 0) < 0) { - return -1; + if (!(handle->flags & UV_HANDLE_BOUND)) { + err = uv_udp_bind6(handle, uv_addr_ip6_any_, 0); + if (err) + return err; } return uv__send(req, @@ -486,11 +491,10 @@ void uv_process_udp_recv_req(uv_loop_t* loop, uv_udp_t* handle, /* A real error occurred. Report the error to the user only if we're */ /* currently reading. */ if (handle->flags & UV_HANDLE_READING) { - uv__set_sys_error(loop, err); uv_udp_recv_stop(handle); buf = (handle->flags & UV_HANDLE_ZERO_READ) ? uv_buf_init(NULL, 0) : handle->recv_buffer; - handle->recv_cb(handle, -1, buf, NULL, 0); + handle->recv_cb(handle, uv_translate_sys_error(err), buf, NULL, 0); } goto done; } @@ -542,14 +546,12 @@ void uv_process_udp_recv_req(uv_loop_t* loop, uv_udp_t* handle, UV_UDP_PARTIAL); } if (err == WSAEWOULDBLOCK) { /* Kernel buffer empty */ - uv__set_sys_error(loop, WSAEWOULDBLOCK); handle->recv_cb(handle, 0, buf, NULL, 0); } else if (err != WSAECONNRESET && err != WSAENETRESET) { /* Serious error. WSAECONNRESET/WSANETRESET is ignored because this */ /* just indicates that a previous sendto operation failed. */ uv_udp_recv_stop(handle); - uv__set_sys_error(loop, err); - handle->recv_cb(handle, -1, buf, NULL, 0); + handle->recv_cb(handle, uv_translate_sys_error(err), buf, NULL, 0); } } } @@ -567,17 +569,18 @@ done: void uv_process_udp_send_req(uv_loop_t* loop, uv_udp_t* handle, uv_udp_send_t* req) { + int err; + assert(handle->type == UV_UDP); UNREGISTER_HANDLE_REQ(loop, handle, req); if (req->cb) { - if (REQ_SUCCESS(req)) { - req->cb(req, 0); - } else { - uv__set_sys_error(loop, GET_REQ_SOCK_ERROR(req)); - req->cb(req, -1); + err = 0; + if (!REQ_SUCCESS(req)) { + err = GET_REQ_SOCK_ERROR(req); } + req->cb(req, uv_translate_sys_error(err)); } DECREASE_PENDING_REQ_COUNT(handle); @@ -586,18 +589,19 @@ void uv_process_udp_send_req(uv_loop_t* loop, uv_udp_t* handle, int uv_udp_set_membership(uv_udp_t* handle, const char* multicast_addr, const char* interface_addr, uv_membership membership) { + int err; int optname; struct ip_mreq mreq; /* If the socket is unbound, bind to inaddr_any. */ - if (!(handle->flags & UV_HANDLE_BOUND) && - uv_udp_bind(handle, uv_addr_ip4_any_, 0) < 0) { - return -1; + if (!(handle->flags & UV_HANDLE_BOUND)) { + err = uv__udp_bind(handle, uv_addr_ip4_any_, 0); + if (err) + return uv_translate_sys_error(err); } if (handle->flags & UV_HANDLE_IPV6) { - uv__set_artificial_error(handle->loop, UV_ENOSYS); - return -1; + return UV_ENOSYS; } memset(&mreq, 0, sizeof mreq); @@ -618,7 +622,7 @@ int uv_udp_set_membership(uv_udp_t* handle, const char* multicast_addr, optname = IP_DROP_MEMBERSHIP; break; default: - return uv__set_artificial_error(handle->loop, UV_EINVAL); + return UV_EINVAL; } if (setsockopt(handle->socket, @@ -626,8 +630,7 @@ int uv_udp_set_membership(uv_udp_t* handle, const char* multicast_addr, optname, (char*) &mreq, sizeof mreq) == SOCKET_ERROR) { - uv__set_sys_error(handle->loop, WSAGetLastError()); - return -1; + return uv_translate_sys_error(WSAGetLastError()); } return 0; @@ -636,11 +639,13 @@ int uv_udp_set_membership(uv_udp_t* handle, const char* multicast_addr, int uv_udp_set_broadcast(uv_udp_t* handle, int value) { BOOL optval = (BOOL) value; + int err; /* If the socket is unbound, bind to inaddr_any. */ - if (!(handle->flags & UV_HANDLE_BOUND) && - uv_udp_bind(handle, uv_addr_ip4_any_, 0) < 0) { - return -1; + if (!(handle->flags & UV_HANDLE_BOUND)) { + err = uv__udp_bind(handle, uv_addr_ip4_any_, 0); + if (err) + return uv_translate_sys_error(err); } if (setsockopt(handle->socket, @@ -648,9 +653,9 @@ int uv_udp_set_broadcast(uv_udp_t* handle, int value) { SO_BROADCAST, (char*) &optval, sizeof optval)) { - uv__set_sys_error(handle->loop, WSAGetLastError()); - return -1; + return uv_translate_sys_error(WSAGetLastError()); } + return 0; } @@ -658,6 +663,7 @@ int uv_udp_set_broadcast(uv_udp_t* handle, int value) { int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) { WSAPROTOCOL_INFOW protocol_info; int opt_len; + int err; /* Detect the address family of the socket. */ opt_len = (int) sizeof protocol_info; @@ -666,34 +672,31 @@ int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) { SO_PROTOCOL_INFOW, (char*) &protocol_info, &opt_len) == SOCKET_ERROR) { - uv__set_sys_error(handle->loop, GetLastError()); - return -1; - } - - if (uv_udp_set_socket(handle->loop, - handle, - sock, - protocol_info.iAddressFamily) < 0) { - return -1; + return uv_translate_sys_error(GetLastError()); } - return 0; + err = uv_udp_set_socket(handle->loop, + handle, + sock, + protocol_info.iAddressFamily); + return uv_translate_sys_error(err); } #define SOCKOPT_SETTER(name, option4, option6, validate) \ int uv_udp_set_##name(uv_udp_t* handle, int value) { \ DWORD optval = (DWORD) value; \ + int err; \ \ if (!(validate(value))) { \ - uv__set_artificial_error(handle->loop, UV_EINVAL); \ - return -1; \ + return UV_EINVAL; \ } \ \ /* If the socket is unbound, bind to inaddr_any. */ \ - if (!(handle->flags & UV_HANDLE_BOUND) && \ - uv_udp_bind(handle, uv_addr_ip4_any_, 0) < 0) { \ - return -1; \ + if (!(handle->flags & UV_HANDLE_BOUND)) { \ + err = uv__udp_bind(handle, uv_addr_ip4_any_, 0); \ + if (err) \ + return uv_translate_sys_error(err); \ } \ \ if (!(handle->flags & UV_HANDLE_IPV6)) { \ @@ -703,8 +706,7 @@ int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) { option4, \ (char*) &optval, \ sizeof optval)) { \ - uv__set_sys_error(handle->loop, WSAGetLastError()); \ - return -1; \ + return uv_translate_sys_error(WSAGetLastError()); \ } \ } else { \ /* Set IPv6 socket option */ \ @@ -713,8 +715,7 @@ int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) { option6, \ (char*) &optval, \ sizeof optval)) { \ - uv__set_sys_error(handle->loop, WSAGetLastError()); \ - return -1; \ + return uv_translate_sys_error(WSAGetLastError()); \ } \ } \ return 0; \ diff --git a/deps/uv/src/win/util.c b/deps/uv/src/win/util.c index ed7f115..f19d30a 100644 --- a/deps/uv/src/win/util.c +++ b/deps/uv/src/win/util.c @@ -102,9 +102,10 @@ int uv_utf8_to_utf16(const char* utf8Buffer, WCHAR* utf16Buffer, int uv_exepath(char* buffer, size_t* size_ptr) { int utf8_len, utf16_buffer_len, utf16_len; WCHAR* utf16_buffer; + int err; if (buffer == NULL || size_ptr == NULL || *size_ptr == 0) { - return -1; + return UV_EINVAL; } if (*size_ptr > 32768) { @@ -116,12 +117,13 @@ int uv_exepath(char* buffer, size_t* size_ptr) { utf16_buffer = (WCHAR*) malloc(sizeof(WCHAR) * utf16_buffer_len); if (!utf16_buffer) { - return -1; + return UV_ENOMEM; } /* Get the path as UTF-16. */ utf16_len = GetModuleFileNameW(NULL, utf16_buffer, utf16_buffer_len); if (utf16_len <= 0) { + err = GetLastError(); goto error; } @@ -138,6 +140,7 @@ int uv_exepath(char* buffer, size_t* size_ptr) { NULL, NULL); if (utf8_len == 0) { + err = GetLastError(); goto error; } @@ -150,26 +153,26 @@ int uv_exepath(char* buffer, size_t* size_ptr) { error: free(utf16_buffer); - return -1; + return uv_translate_sys_error(err); } -uv_err_t uv_cwd(char* buffer, size_t size) { +int uv_cwd(char* buffer, size_t size) { DWORD utf16_len; WCHAR utf16_buffer[MAX_PATH]; int r; if (buffer == NULL || size == 0) { - return uv__new_artificial_error(UV_EINVAL); + return UV_EINVAL; } utf16_len = GetCurrentDirectoryW(MAX_PATH, utf16_buffer); if (utf16_len == 0) { - return uv__new_sys_error(GetLastError()); + return uv_translate_sys_error(GetLastError()); } else if (utf16_len > MAX_PATH) { /* This should be impossible; however the CRT has a code path to deal */ /* with this scenario, so I added a check anyway. */ - return uv__new_artificial_error(UV_EIO); + return UV_EIO; } /* utf16_len contains the length, *not* including the terminating null. */ @@ -193,20 +196,20 @@ uv_err_t uv_cwd(char* buffer, size_t size) { NULL, NULL); if (r == 0) { - return uv__new_sys_error(GetLastError()); + return uv_translate_sys_error(GetLastError()); } - return uv_ok_; + return 0; } -uv_err_t uv_chdir(const char* dir) { +int uv_chdir(const char* dir) { WCHAR utf16_buffer[MAX_PATH]; size_t utf16_len; WCHAR drive_letter, env_var[4]; if (dir == NULL) { - return uv__new_artificial_error(UV_EINVAL); + return UV_EINVAL; } if (MultiByteToWideChar(CP_UTF8, @@ -220,14 +223,14 @@ uv_err_t uv_chdir(const char* dir) { /* including terminating null. If it doesn't fit, the path name must be */ /* too long. */ if (error == ERROR_INSUFFICIENT_BUFFER) { - return uv__new_artificial_error(UV_ENAMETOOLONG); + return UV_ENAMETOOLONG; } else { - return uv__new_sys_error(error); + return uv_translate_sys_error(error); } } if (!SetCurrentDirectoryW(utf16_buffer)) { - return uv__new_sys_error(GetLastError()); + return uv_translate_sys_error(GetLastError()); } /* Windows stores the drive-local path in an "hidden" environment variable, */ @@ -235,9 +238,9 @@ uv_err_t uv_chdir(const char* dir) { /* update this, so we'll have to do it. */ utf16_len = GetCurrentDirectoryW(MAX_PATH, utf16_buffer); if (utf16_len == 0) { - return uv__new_sys_error(GetLastError()); + return uv_translate_sys_error(GetLastError()); } else if (utf16_len > MAX_PATH) { - return uv__new_artificial_error(UV_EIO); + return UV_EIO; } /* The returned directory should not have a trailing slash, unless it */ @@ -270,11 +273,11 @@ uv_err_t uv_chdir(const char* dir) { env_var[3] = L'\0'; if (!SetEnvironmentVariableW(env_var, utf16_buffer)) { - return uv__new_sys_error(GetLastError()); + return uv_translate_sys_error(GetLastError()); } } - return uv_ok_; + return 0; } @@ -338,8 +341,8 @@ char** uv_setup_args(int argc, char** argv) { } -uv_err_t uv_set_process_title(const char* title) { - uv_err_t err; +int uv_set_process_title(const char* title) { + int err; int length; WCHAR* title_w = NULL; @@ -348,7 +351,7 @@ uv_err_t uv_set_process_title(const char* title) { /* Find out how big the buffer for the wide-char title must be */ length = uv_utf8_to_utf16(title, NULL, 0); if (!length) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); goto done; } @@ -360,7 +363,7 @@ uv_err_t uv_set_process_title(const char* title) { length = uv_utf8_to_utf16(title, title_w, length); if (!length) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); goto done; }; @@ -370,7 +373,7 @@ uv_err_t uv_set_process_title(const char* title) { } if (!SetConsoleTitleW(title_w)) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); goto done; } @@ -379,11 +382,11 @@ uv_err_t uv_set_process_title(const char* title) { process_title = strdup(title); LeaveCriticalSection(&process_title_lock); - err = uv_ok_; + err = 0; done: free(title_w); - return err; + return uv_translate_sys_error(err); } @@ -417,7 +420,7 @@ static int uv__get_process_title() { } -uv_err_t uv_get_process_title(char* buffer, size_t size) { +int uv_get_process_title(char* buffer, size_t size) { uv__once_init(); EnterCriticalSection(&process_title_lock); @@ -426,14 +429,14 @@ uv_err_t uv_get_process_title(char* buffer, size_t size) { * we must query it with getConsoleTitleW */ if (!process_title && uv__get_process_title() == -1) { - return uv__new_sys_error(GetLastError()); + return uv_translate_sys_error(GetLastError()); } assert(process_title); strncpy(buffer, process_title, size); LeaveCriticalSection(&process_title_lock); - return uv_ok_; + return 0; } @@ -462,23 +465,23 @@ uint64_t uv_hrtime(void) { } -uv_err_t uv_resident_set_memory(size_t* rss) { +int uv_resident_set_memory(size_t* rss) { HANDLE current_process; PROCESS_MEMORY_COUNTERS pmc; current_process = GetCurrentProcess(); if (!GetProcessMemoryInfo(current_process, &pmc, sizeof(pmc))) { - return uv__new_sys_error(GetLastError()); + return uv_translate_sys_error(GetLastError()); } *rss = pmc.WorkingSetSize; - return uv_ok_; + return 0; } -uv_err_t uv_uptime(double* uptime) { +int uv_uptime(double* uptime) { BYTE stack_buffer[4096]; BYTE* malloced_buffer = NULL; BYTE* buffer = (BYTE*) stack_buffer; @@ -505,7 +508,7 @@ uv_err_t uv_uptime(double* uptime) { break; } else if (result != ERROR_MORE_DATA) { *uptime = 0; - return uv__new_sys_error(result); + return uv_translate_sys_error(result); } free(malloced_buffer); @@ -519,7 +522,7 @@ uv_err_t uv_uptime(double* uptime) { buffer = malloced_buffer = (BYTE*) malloc(buffer_size); if (malloced_buffer == NULL) { *uptime = 0; - return uv__new_artificial_error(UV_ENOMEM); + return UV_ENOMEM; } } @@ -559,7 +562,7 @@ uv_err_t uv_uptime(double* uptime) { *uptime = (double) (object_type->PerfTime.QuadPart - value) / (double) object_type->PerfFreq.QuadPart; free(malloced_buffer); - return uv_ok_; + return 0; } } @@ -570,16 +573,16 @@ uv_err_t uv_uptime(double* uptime) { /* If we get here, the uptime value was not found. */ free(malloced_buffer); *uptime = 0; - return uv__new_artificial_error(UV_ENOSYS); + return UV_ENOSYS; internalError: free(malloced_buffer); *uptime = 0; - return uv__new_artificial_error(UV_EIO); + return UV_EIO; } -uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { +int uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { uv_cpu_info_t* cpu_infos; SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION* sppi; DWORD sppi_size; @@ -587,7 +590,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { DWORD cpu_count, r, i; NTSTATUS status; ULONG result_size; - uv_err_t err; + int err; uv_cpu_info_t* cpu_info; cpu_infos = NULL; @@ -601,14 +604,14 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { cpu_infos = calloc(cpu_count, sizeof *cpu_infos); if (cpu_infos == NULL) { - err = uv__new_artificial_error(UV_ENOMEM); + err = ERROR_OUTOFMEMORY; goto error; } sppi_size = cpu_count * sizeof(*sppi); sppi = malloc(sppi_size); if (sppi == NULL) { - err = uv__new_artificial_error(UV_ENOMEM); + err = ERROR_OUTOFMEMORY; goto error; } @@ -617,7 +620,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { sppi_size, &result_size); if (!NT_SUCCESS(status)) { - err = uv__new_sys_error(pRtlNtStatusToDosError(status)); + err = pRtlNtStatusToDosError(status); goto error; } @@ -645,7 +648,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { KEY_QUERY_VALUE, &processor_key); if (r != ERROR_SUCCESS) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); goto error; } @@ -655,7 +658,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { NULL, (BYTE*) &cpu_speed, &cpu_speed_size) != ERROR_SUCCESS) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); RegCloseKey(processor_key); goto error; } @@ -666,7 +669,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { NULL, (BYTE*) &cpu_brand, &cpu_brand_size) != ERROR_SUCCESS) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); RegCloseKey(processor_key); goto error; } @@ -692,7 +695,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { NULL, NULL); if (len == 0) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); goto error; } @@ -701,7 +704,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { /* Allocate 1 extra byte for the null terminator. */ cpu_info->model = malloc(len + 1); if (cpu_info->model == NULL) { - err = uv__new_artificial_error(UV_ENOMEM); + err = ERROR_OUTOFMEMORY; goto error; } @@ -713,7 +716,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { len, NULL, NULL) == 0) { - err = uv__new_sys_error(GetLastError()); + err = GetLastError(); goto error; } @@ -726,7 +729,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { *cpu_count_ptr = cpu_count; *cpu_infos_ptr = cpu_infos; - return uv_ok_; + return 0; error: /* This is safe because the cpu_infos array is zeroed on allocation. */ @@ -736,7 +739,7 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { free(cpu_infos); free(sppi); - return err; + return uv_translate_sys_error(err); } @@ -751,7 +754,7 @@ void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) { } -uv_err_t uv_interface_addresses(uv_interface_address_t** addresses_ptr, +int uv_interface_addresses(uv_interface_address_t** addresses_ptr, int* count_ptr) { IP_ADAPTER_ADDRESSES* win_address_buf; ULONG win_address_buf_size; @@ -792,7 +795,7 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses_ptr, /* all adapters. */ win_address_buf = malloc(win_address_buf_size); if (win_address_buf == NULL) - return uv__new_artificial_error(UV_ENOMEM); + return UV_ENOMEM; continue; @@ -800,16 +803,16 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses_ptr, /* No adapters were found. */ uv_address_buf = malloc(1); if (uv_address_buf == NULL) - return uv__new_artificial_error(UV_ENOMEM); + return UV_ENOMEM; *count_ptr = 0; *addresses_ptr = uv_address_buf; - return uv_ok_; + return 0; } case ERROR_ADDRESS_NOT_ASSOCIATED: - return uv__new_artificial_error(UV_EAGAIN); + return UV_EAGAIN; case ERROR_INVALID_PARAMETER: /* MSDN says: @@ -820,13 +823,13 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses_ptr, * Since the first two conditions are not met, it must be that the * adapter data is too big. */ - return uv__new_artificial_error(UV_ENOBUFS); + return UV_ENOBUFS; default: /* Other (unspecified) errors can happen, but we don't have any */ /* special meaning for them. */ assert(r != ERROR_SUCCESS); - return uv__new_sys_error(r); + return uv_translate_sys_error(r); } } @@ -861,7 +864,7 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses_ptr, FALSE); if (name_size <= 0) { free(win_address_buf); - return uv__new_sys_error(GetLastError()); + return uv_translate_sys_error(GetLastError()); } uv_address_buf_size += name_size; @@ -880,7 +883,7 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses_ptr, uv_address_buf = malloc(uv_address_buf_size); if (uv_address_buf == NULL) { free(win_address_buf); - return uv__new_artificial_error(UV_ENOMEM); + return UV_ENOMEM; } /* Compute the start of the uv_interface_address_t array, and the place in */ @@ -916,7 +919,7 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses_ptr, if (name_size <= 0) { free(win_address_buf); free(uv_address_buf); - return uv__new_sys_error(GetLastError()); + return uv_translate_sys_error(GetLastError()); } prefix = win_address->FirstPrefix; @@ -966,7 +969,7 @@ uv_err_t uv_interface_addresses(uv_interface_address_t** addresses_ptr, *addresses_ptr = uv_address_buf; *count_ptr = count; - return uv_ok_; + return 0; } diff --git a/deps/uv/test/benchmark-multi-accept.c b/deps/uv/test/benchmark-multi-accept.c index c6333e7..eb57464 100644 --- a/deps/uv/test/benchmark-multi-accept.c +++ b/deps/uv/test/benchmark-multi-accept.c @@ -302,8 +302,7 @@ static uv_buf_t sv_alloc_cb(uv_handle_t* handle, size_t suggested_size) { static void sv_read_cb(uv_stream_t* handle, ssize_t nread, uv_buf_t buf) { - ASSERT(nread == -1); - ASSERT(uv_last_error(handle->loop).code == UV_EOF); + ASSERT(nread == UV_EOF); uv_close((uv_handle_t*) handle, (uv_close_cb) free); } diff --git a/deps/uv/test/benchmark-ping-pongs.c b/deps/uv/test/benchmark-ping-pongs.c index 8db7f96..0012cfd 100644 --- a/deps/uv/test/benchmark-ping-pongs.c +++ b/deps/uv/test/benchmark-ping-pongs.c @@ -130,7 +130,7 @@ static void pinger_read_cb(uv_stream_t* tcp, ssize_t nread, uv_buf_t buf) { pinger = (pinger_t*)tcp->data; if (nread < 0) { - ASSERT(uv_last_error(loop).code == UV_EOF); + ASSERT(nread == UV_EOF); if (buf.base) { buf_free(buf); diff --git a/deps/uv/test/benchmark-pound.c b/deps/uv/test/benchmark-pound.c index 8669a14..df19c98 100644 --- a/deps/uv/test/benchmark-pound.c +++ b/deps/uv/test/benchmark-pound.c @@ -92,7 +92,7 @@ static uv_buf_t alloc_cb(uv_handle_t* handle, size_t suggested_size) { static void after_write(uv_write_t* req, int status) { if (status != 0) { - fprintf(stderr, "write error %s\n", uv_err_name(uv_last_error(loop))); + fprintf(stderr, "write error %s\n", uv_err_name(status)); uv_close((uv_handle_t*)req->handle, close_cb); conns_failed++; return; @@ -107,9 +107,7 @@ static void connect_cb(uv_connect_t* req, int status) { if (status != 0) { #if DEBUG - fprintf(stderr, - "connect error %s\n", - uv_err_name(uv_last_error(uv_default_loop()))); + fprintf(stderr, "connect error %s\n", uv_err_name(status)); #endif uv_close((uv_handle_t*)req->handle, close_cb); conns_failed++; @@ -138,7 +136,6 @@ static void connect_cb(uv_connect_t* req, int status) { static void read_cb(uv_stream_t* stream, ssize_t nread, uv_buf_t buf) { - uv_err_t err = uv_last_error(loop); ASSERT(stream != NULL); @@ -148,13 +145,13 @@ static void read_cb(uv_stream_t* stream, ssize_t nread, uv_buf_t buf) { uv_close((uv_handle_t*)stream, close_cb); - if (nread == -1) { - if (err.code == UV_EOF) { + if (nread < 0) { + if (nread == UV_EOF) { ; - } else if (err.code == UV_ECONNRESET) { + } else if (nread == UV_ECONNRESET) { conns_failed++; } else { - fprintf(stderr, "read error %s\n", uv_err_name(uv_last_error(loop))); + fprintf(stderr, "read error %s\n", uv_err_name(nread)); ASSERT(0); } } @@ -206,8 +203,7 @@ static void tcp_make_connect(conn_rec* p) { r = uv_tcp_connect(&((tcp_conn_rec*)p)->conn_req, (uv_tcp_t*)&p->stream, addr, connect_cb); if (r) { - fprintf(stderr, "uv_tcp_connect error %s\n", - uv_err_name(uv_last_error(loop))); + fprintf(stderr, "uv_tcp_connect error %s\n", uv_err_name(r)); ASSERT(0); } diff --git a/deps/uv/test/benchmark-pump.c b/deps/uv/test/benchmark-pump.c index 6d01229..5b4db3c 100644 --- a/deps/uv/test/benchmark-pump.c +++ b/deps/uv/test/benchmark-pump.c @@ -206,7 +206,7 @@ static void do_write(uv_stream_t* stream) { static void connect_cb(uv_connect_t* req, int status) { int i; - if (status) LOG(uv_strerror(uv_last_error(loop))); + if (status) LOG(uv_strerror(status)); ASSERT(status == 0); write_sockets++; diff --git a/deps/uv/test/benchmark-spawn.c b/deps/uv/test/benchmark-spawn.c index b950606..4912d97 100644 --- a/deps/uv/test/benchmark-spawn.c +++ b/deps/uv/test/benchmark-spawn.c @@ -87,13 +87,11 @@ static void pipe_close_cb(uv_handle_t* pipe) { static void on_read(uv_stream_t* pipe, ssize_t nread, uv_buf_t buf) { - uv_err_t err = uv_last_error(loop); - if (nread > 0) { ASSERT(pipe_open == 1); output_used += nread; } else if (nread < 0) { - if (err.code == UV_EOF) { + if (nread == UV_EOF) { uv_close((uv_handle_t*)pipe, pipe_close_cb); } } diff --git a/deps/uv/test/benchmark-udp-pummel.c b/deps/uv/test/benchmark-udp-pummel.c index 0957453..2590f57 100644 --- a/deps/uv/test/benchmark-udp-pummel.c +++ b/deps/uv/test/benchmark-udp-pummel.c @@ -72,8 +72,7 @@ static void send_cb(uv_udp_send_t* req, int status) { ASSERT(req != NULL); if (status != 0) { - ASSERT(status == -1); - ASSERT(uv_last_error(req->handle->loop).code == UV_ECANCELED); + ASSERT(status == UV_ECANCELED); return; } @@ -112,8 +111,8 @@ static void recv_cb(uv_udp_t* handle, if (nread == 0) return; - if (nread == -1) { - ASSERT(uv_last_error(handle->loop).code == UV_ECANCELED); + if (nread < 0) { + ASSERT(nread == UV_ECANCELED); return; } diff --git a/deps/uv/test/blackhole-server.c b/deps/uv/test/blackhole-server.c index cbb936f..ade49b4 100644 --- a/deps/uv/test/blackhole-server.c +++ b/deps/uv/test/blackhole-server.c @@ -73,7 +73,7 @@ static void read_cb(uv_stream_t* stream, ssize_t nread, uv_buf_t buf) { if (nread >= 0) return; - ASSERT(uv_last_error(stream->loop).code == UV_EOF); + ASSERT(nread == UV_EOF); conn = container_of(stream, conn_rec, handle); diff --git a/deps/uv/test/dns-server.c b/deps/uv/test/dns-server.c index ba53277..17e7ecf 100644 --- a/deps/uv/test/dns-server.c +++ b/deps/uv/test/dns-server.c @@ -81,8 +81,7 @@ static void after_write(uv_write_t* req, int status) { write_req_t* wr; if (status) { - uv_err_t err = uv_last_error(loop); - fprintf(stderr, "uv_write error: %s\n", uv_strerror(err)); + fprintf(stderr, "uv_write error: %s\n", uv_strerror(status)); ASSERT(0); } @@ -229,7 +228,7 @@ static void after_read(uv_stream_t* handle, ssize_t nread, uv_buf_t buf) { if (nread < 0) { /* Error or EOF */ - ASSERT (uv_last_error(loop).code == UV_EOF); + ASSERT(nread == UV_EOF); if (buf.base) { free(buf.base); diff --git a/deps/uv/test/echo-server.c b/deps/uv/test/echo-server.c index 79263c7..a9891d2 100644 --- a/deps/uv/test/echo-server.c +++ b/deps/uv/test/echo-server.c @@ -47,7 +47,6 @@ static void on_connection(uv_stream_t*, int status); static void after_write(uv_write_t* req, int status) { write_req_t* wr; - uv_err_t err; /* Free the read/write buffer and the request */ wr = (write_req_t*) req; @@ -57,13 +56,12 @@ static void after_write(uv_write_t* req, int status) { if (status == 0) return; - err = uv_last_error(loop); - fprintf(stderr, "uv_write error: %s\n", uv_strerror(err)); + fprintf(stderr, "uv_write error: %s\n", uv_strerror(status)); - if (err.code == UV_ECANCELED) + if (status == UV_ECANCELED) return; - ASSERT(err.code == UV_EPIPE); + ASSERT(status == UV_EPIPE); uv_close((uv_handle_t*)req->handle, on_close); } @@ -81,7 +79,7 @@ static void after_read(uv_stream_t* handle, ssize_t nread, uv_buf_t buf) { if (nread < 0) { /* Error or EOF */ - ASSERT (uv_last_error(loop).code == UV_EOF); + ASSERT(nread == UV_EOF); if (buf.base) { free(buf.base); @@ -142,8 +140,7 @@ static void on_connection(uv_stream_t* server, int status) { int r; if (status != 0) { - fprintf(stderr, "Connect error %d\n", - uv_last_error(loop).code); + fprintf(stderr, "Connect error %s\n", uv_err_name(status)); } ASSERT(status == 0); @@ -235,8 +232,7 @@ static int tcp4_echo_start(int port) { r = uv_listen((uv_stream_t*)&tcpServer, SOMAXCONN, on_connection); if (r) { /* TODO: Error codes */ - fprintf(stderr, "Listen error %s\n", - uv_err_name(uv_last_error(loop))); + fprintf(stderr, "Listen error %s\n", uv_err_name(r)); return 1; } @@ -285,15 +281,13 @@ static int udp4_echo_start(int port) { r = uv_udp_init(loop, &udpServer); if (r) { - fprintf(stderr, "uv_udp_init: %s\n", - uv_strerror(uv_last_error(loop))); + fprintf(stderr, "uv_udp_init: %s\n", uv_strerror(r)); return 1; } r = uv_udp_recv_start(&udpServer, echo_alloc, on_recv); if (r) { - fprintf(stderr, "uv_udp_recv_start: %s\n", - uv_strerror(uv_last_error(loop))); + fprintf(stderr, "uv_udp_recv_start: %s\n", uv_strerror(r)); return 1; } @@ -317,22 +311,19 @@ static int pipe_echo_start(char* pipeName) { r = uv_pipe_init(loop, &pipeServer, 0); if (r) { - fprintf(stderr, "uv_pipe_init: %s\n", - uv_strerror(uv_last_error(loop))); + fprintf(stderr, "uv_pipe_init: %s\n", uv_strerror(r)); return 1; } r = uv_pipe_bind(&pipeServer, pipeName); if (r) { - fprintf(stderr, "uv_pipe_bind: %s\n", - uv_strerror(uv_last_error(loop))); + fprintf(stderr, "uv_pipe_bind: %s\n", uv_strerror(r)); return 1; } r = uv_listen((uv_stream_t*)&pipeServer, SOMAXCONN, on_connection); if (r) { - fprintf(stderr, "uv_pipe_listen: %s\n", - uv_strerror(uv_last_error(loop))); + fprintf(stderr, "uv_pipe_listen: %s\n", uv_strerror(r)); return 1; } diff --git a/deps/uv/test/task.h b/deps/uv/test/task.h index 1e3f8df..6f96a4f 100644 --- a/deps/uv/test/task.h +++ b/deps/uv/test/task.h @@ -27,7 +27,7 @@ #include #if defined(_MSC_VER) && _MSC_VER < 1600 -# include "uv-private/stdint-msvc2008.h" +# include "stdint-msvc2008.h" #else # include #endif diff --git a/deps/uv/test/test-callback-stack.c b/deps/uv/test/test-callback-stack.c index e8cfcb4..1774fdf 100644 --- a/deps/uv/test/test-callback-stack.c +++ b/deps/uv/test/test-callback-stack.c @@ -76,11 +76,10 @@ static void read_cb(uv_stream_t* tcp, ssize_t nread, uv_buf_t buf) { free(buf.base); if (nread == 0) { - ASSERT(uv_last_error(uv_default_loop()).code == UV_EAGAIN); return; - } else if (nread == -1) { - ASSERT(uv_last_error(uv_default_loop()).code == UV_EOF); + } else if (nread < 0) { + ASSERT(nread == UV_EOF); nested++; uv_close((uv_handle_t*)tcp, close_cb); diff --git a/deps/uv/test/test-condvar.c b/deps/uv/test/test-condvar.c index 065dd4e..dbacdba 100644 --- a/deps/uv/test/test-condvar.c +++ b/deps/uv/test/test-condvar.c @@ -112,7 +112,7 @@ TEST_IMPL(condvar_3) { uv_mutex_lock(&wc.mutex); r = uv_cond_timedwait(&wc.cond, &wc.mutex, (uint64_t)(50 * 1e6)); - ASSERT(r == -1); + ASSERT(r == UV_ETIMEDOUT); uv_mutex_unlock(&wc.mutex); ASSERT(0 == uv_thread_join(&thread)); diff --git a/deps/uv/test/test-connection-fail.c b/deps/uv/test/test-connection-fail.c index e72b4e5..8dfb38e 100644 --- a/deps/uv/test/test-connection-fail.c +++ b/deps/uv/test/test-connection-fail.c @@ -68,8 +68,7 @@ static void timer_cb(uv_timer_t* handle, int status) { static void on_connect_with_close(uv_connect_t *req, int status) { ASSERT((uv_stream_t*) &tcp == req->handle); - ASSERT(status == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_ECONNREFUSED); + ASSERT(status == UV_ECONNREFUSED); connect_cb_calls++; ASSERT(close_cb_calls == 0); @@ -78,8 +77,7 @@ static void on_connect_with_close(uv_connect_t *req, int status) { static void on_connect_without_close(uv_connect_t *req, int status) { - ASSERT(status == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_ECONNREFUSED); + ASSERT(status == UV_ECONNREFUSED); connect_cb_calls++; uv_timer_start(&timer, timer_cb, 100, 0); diff --git a/deps/uv/test/test-cwd-and-chdir.c b/deps/uv/test/test-cwd-and-chdir.c index d72c26a..f1082ac 100644 --- a/deps/uv/test/test-cwd-and-chdir.c +++ b/deps/uv/test/test-cwd-and-chdir.c @@ -31,11 +31,11 @@ TEST_IMPL(cwd_and_chdir) { char buffer_new[PATHMAX]; size_t size; char* last_slash; - uv_err_t err; + int err; size = sizeof(buffer_orig) / sizeof(buffer_orig[0]); err = uv_cwd(buffer_orig, size); - ASSERT(err.code == UV_OK); + ASSERT(err == 0); /* Remove trailing slash unless at a root directory. */ #ifdef _WIN32 @@ -53,10 +53,10 @@ TEST_IMPL(cwd_and_chdir) { #endif err = uv_chdir(buffer_orig); - ASSERT(err.code == UV_OK); + ASSERT(err == 0); err = uv_cwd(buffer_new, size); - ASSERT(err.code == UV_OK); + ASSERT(err == 0); ASSERT(strcmp(buffer_orig, buffer_new) == 0); diff --git a/deps/uv/test/test-delayed-accept.c b/deps/uv/test/test-delayed-accept.c index b15d881..cd0b026 100644 --- a/deps/uv/test/test-delayed-accept.c +++ b/deps/uv/test/test-delayed-accept.c @@ -124,13 +124,11 @@ static void read_cb(uv_stream_t* tcp, ssize_t nread, uv_buf_t buf) { free(buf.base); } - if (nread != -1) { + if (nread >= 0) { ASSERT(nread == 0); - ASSERT(uv_last_error(uv_default_loop()).code == UV_EAGAIN); } else { ASSERT(tcp != NULL); - ASSERT(nread == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_EOF); + ASSERT(nread == UV_EOF); uv_close((uv_handle_t*)tcp, close_cb); } } diff --git a/deps/uv/test/test-error.c b/deps/uv/test/test-error.c index 8d6f235..eb337e6 100644 --- a/deps/uv/test/test-error.c +++ b/deps/uv/test/test-error.c @@ -34,26 +34,17 @@ * See https://github.com/joyent/libuv/issues/210 */ TEST_IMPL(error_message) { - uv_err_t e; - /* Cop out. Can't do proper checks on systems with * i18n-ized error messages... */ - e.code = 0, e.sys_errno_ = 0; - - if (strcmp(uv_strerror(e), "Success") != 0) { + if (strcmp(uv_strerror(0), "Success") != 0) { printf("i18n error messages detected, skipping test.\n"); return 0; } - e.code = UV_EINVAL, e.sys_errno_ = 0; - ASSERT(strstr(uv_strerror(e), "Success") == NULL); - - e.code = UV_UNKNOWN, e.sys_errno_ = 0; - ASSERT(strcmp(uv_strerror(e), "Unknown error") == 0); - - e.code = 1337, e.sys_errno_ = 0; - ASSERT(strcmp(uv_strerror(e), "Unknown error") == 0); + ASSERT(strstr(uv_strerror(UV_EINVAL), "Success") == NULL); + ASSERT(strcmp(uv_strerror(1337), "Unknown error") == 0); + ASSERT(strcmp(uv_strerror(-1337), "Unknown error") == 0); return 0; } diff --git a/deps/uv/test/test-fs-event.c b/deps/uv/test/test-fs-event.c index e989511..1df2569 100644 --- a/deps/uv/test/test-fs-event.c +++ b/deps/uv/test/test-fs-event.c @@ -46,7 +46,7 @@ static void create_dir(uv_loop_t* loop, const char* name) { int r; uv_fs_t req; r = uv_fs_mkdir(loop, &req, name, 0755, NULL); - ASSERT(r == 0 || uv_last_error(loop).code == UV_EEXIST); + ASSERT(r == 0 || r == UV_EEXIST); uv_fs_req_cleanup(&req); } @@ -57,7 +57,7 @@ static void create_file(uv_loop_t* loop, const char* name) { r = uv_fs_open(loop, &req, name, O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); + ASSERT(r >= 0); file = r; uv_fs_req_cleanup(&req); r = uv_fs_close(loop, &req, file, NULL); @@ -71,16 +71,16 @@ static void touch_file(uv_loop_t* loop, const char* name) { uv_fs_t req; r = uv_fs_open(loop, &req, name, O_RDWR, 0, NULL); - ASSERT(r != -1); + ASSERT(r >= 0); file = r; uv_fs_req_cleanup(&req); r = uv_fs_write(loop, &req, file, "foo", 4, -1, NULL); - ASSERT(r != -1); + ASSERT(r >= 0); uv_fs_req_cleanup(&req); r = uv_fs_close(loop, &req, file, NULL); - ASSERT(r != -1); + ASSERT(r == 0); uv_fs_req_cleanup(&req); } @@ -188,11 +188,11 @@ TEST_IMPL(fs_event_watch_dir) { create_dir(loop, "watch_dir"); r = uv_fs_event_init(loop, &fs_event, "watch_dir", fs_event_cb_dir, 0); - ASSERT(r != -1); + ASSERT(r == 0); r = uv_timer_init(loop, &timer); - ASSERT(r != -1); + ASSERT(r == 0); r = uv_timer_start(&timer, timer_cb_dir, 100, 0); - ASSERT(r != -1); + ASSERT(r == 0); uv_run(loop, UV_RUN_DEFAULT); @@ -222,11 +222,11 @@ TEST_IMPL(fs_event_watch_file) { create_file(loop, "watch_dir/file2"); r = uv_fs_event_init(loop, &fs_event, "watch_dir/file2", fs_event_cb_file, 0); - ASSERT(r != -1); + ASSERT(r == 0); r = uv_timer_init(loop, &timer); - ASSERT(r != -1); + ASSERT(r == 0); r = uv_timer_start(&timer, timer_cb_file, 100, 100); - ASSERT(r != -1); + ASSERT(r == 0); uv_run(loop, UV_RUN_DEFAULT); @@ -275,7 +275,7 @@ TEST_IMPL(fs_event_watch_file_current_dir) { r = uv_fs_event_init(loop, &fs_event, "watch_file", fs_event_cb_file_current_dir, 0); - ASSERT(r != -1); + ASSERT(r == 0); r = uv_timer_init(loop, &timer); ASSERT(r == 0); @@ -315,7 +315,7 @@ TEST_IMPL(fs_event_no_callback_after_close) { "watch_dir/file1", fs_event_cb_file, 0); - ASSERT(r != -1); + ASSERT(r == 0); uv_close((uv_handle_t*)&fs_event, close_cb); touch_file(loop, "watch_dir/file1"); @@ -347,7 +347,7 @@ TEST_IMPL(fs_event_no_callback_on_close) { "watch_dir/file1", fs_event_cb_file, 0); - ASSERT(r != -1); + ASSERT(r == 0); uv_close((uv_handle_t*)&fs_event, close_cb); diff --git a/deps/uv/test/test-fs-poll.c b/deps/uv/test/test-fs-poll.c index 8788418..4a162ab 100644 --- a/deps/uv/test/test-fs-poll.c +++ b/deps/uv/test/test-fs-poll.c @@ -87,8 +87,7 @@ static void poll_cb(uv_fs_poll_t* handle, switch (poll_cb_called++) { case 0: - ASSERT(status == -1); - ASSERT(uv_last_error(loop).code == UV_ENOENT); + ASSERT(status == UV_ENOENT); ASSERT(0 == memcmp(prev, &zero_statbuf, sizeof(zero_statbuf))); ASSERT(0 == memcmp(curr, &zero_statbuf, sizeof(zero_statbuf))); touch_file(FIXTURE); @@ -116,10 +115,9 @@ static void poll_cb(uv_fs_poll_t* handle, break; case 4: - ASSERT(status == -1); + ASSERT(status == UV_ENOENT); ASSERT(0 != memcmp(prev, &zero_statbuf, sizeof(zero_statbuf))); ASSERT(0 == memcmp(curr, &zero_statbuf, sizeof(zero_statbuf))); - ASSERT(uv_last_error(loop).code == UV_ENOENT); uv_close((uv_handle_t*)handle, close_cb); break; diff --git a/deps/uv/test/test-fs.c b/deps/uv/test/test-fs.c index 1ab958f..34f8afe 100644 --- a/deps/uv/test/test-fs.c +++ b/deps/uv/test/test-fs.c @@ -196,9 +196,13 @@ static void chown_root_cb(uv_fs_t* req) { /* On windows, chown is a no-op and always succeeds. */ ASSERT(req->result == 0); #else - /* On unix, chown'ing the root directory is not allowed. */ - ASSERT(req->result == -1); - ASSERT(req->errorno == UV_EPERM); + /* On unix, chown'ing the root directory is not allowed - + * unless you're root, of course. + */ + if (geteuid() == 0) + ASSERT(req->result == 0); + else + ASSERT(req->result == UV_EPERM); #endif chown_cb_count++; uv_fs_req_cleanup(req); @@ -207,7 +211,7 @@ static void chown_root_cb(uv_fs_t* req) { static void unlink_cb(uv_fs_t* req) { ASSERT(req == &unlink_req); ASSERT(req->fs_type == UV_FS_UNLINK); - ASSERT(req->result != -1); + ASSERT(req->result == 0); unlink_cb_count++; uv_fs_req_cleanup(req); } @@ -226,7 +230,7 @@ static void close_cb(uv_fs_t* req) { int r; ASSERT(req == &close_req); ASSERT(req->fs_type == UV_FS_CLOSE); - ASSERT(req->result != -1); + ASSERT(req->result == 0); close_cb_count++; uv_fs_req_cleanup(req); if (close_cb_count == 3) { @@ -240,7 +244,7 @@ static void ftruncate_cb(uv_fs_t* req) { int r; ASSERT(req == &ftruncate_req); ASSERT(req->fs_type == UV_FS_FTRUNCATE); - ASSERT(req->result != -1); + ASSERT(req->result == 0); ftruncate_cb_count++; uv_fs_req_cleanup(req); r = uv_fs_close(loop, &close_req, open_req1.result, close_cb); @@ -252,7 +256,7 @@ static void read_cb(uv_fs_t* req) { int r; ASSERT(req == &read_req); ASSERT(req->fs_type == UV_FS_READ); - ASSERT(req->result != -1); + ASSERT(req->result >= 0); /* FIXME(bnoordhuis) Check if requested size? */ read_cb_count++; uv_fs_req_cleanup(req); if (read_cb_count == 1) { @@ -272,8 +276,7 @@ static void open_cb(uv_fs_t* req) { ASSERT(req == &open_req1); ASSERT(req->fs_type == UV_FS_OPEN); if (req->result < 0) { - /* TODO get error with uv_last_error() */ - fprintf(stderr, "async open error: %d\n", req->errorno); + fprintf(stderr, "async open error: %d\n", (int) req->result); ASSERT(0); } open_cb_count++; @@ -290,8 +293,7 @@ static void open_cb(uv_fs_t* req) { static void open_cb_simple(uv_fs_t* req) { ASSERT(req->fs_type == UV_FS_OPEN); if (req->result < 0) { - /* TODO get error with uv_last_error() */ - fprintf(stderr, "async open error: %d\n", req->errorno); + fprintf(stderr, "async open error: %d\n", (int) req->result); ASSERT(0); } open_cb_count++; @@ -304,7 +306,7 @@ static void fsync_cb(uv_fs_t* req) { int r; ASSERT(req == &fsync_req); ASSERT(req->fs_type == UV_FS_FSYNC); - ASSERT(req->result != -1); + ASSERT(req->result == 0); fsync_cb_count++; uv_fs_req_cleanup(req); r = uv_fs_close(loop, &close_req, open_req1.result, close_cb); @@ -316,7 +318,7 @@ static void fdatasync_cb(uv_fs_t* req) { int r; ASSERT(req == &fdatasync_req); ASSERT(req->fs_type == UV_FS_FDATASYNC); - ASSERT(req->result != -1); + ASSERT(req->result == 0); fdatasync_cb_count++; uv_fs_req_cleanup(req); r = uv_fs_fsync(loop, &fsync_req, open_req1.result, fsync_cb); @@ -328,7 +330,7 @@ static void write_cb(uv_fs_t* req) { int r; ASSERT(req == &write_req); ASSERT(req->fs_type == UV_FS_WRITE); - ASSERT(req->result != -1); + ASSERT(req->result >= 0); /* FIXME(bnoordhuis) Check if requested size? */ write_cb_count++; uv_fs_req_cleanup(req); r = uv_fs_fdatasync(loop, &fdatasync_req, open_req1.result, fdatasync_cb); @@ -340,7 +342,7 @@ static void create_cb(uv_fs_t* req) { int r; ASSERT(req == &open_req1); ASSERT(req->fs_type == UV_FS_OPEN); - ASSERT(req->result != -1); + ASSERT(req->result >= 0); create_cb_count++; uv_fs_req_cleanup(req); r = uv_fs_write(loop, &write_req, req->result, test_buf, sizeof(test_buf), @@ -352,7 +354,7 @@ static void create_cb(uv_fs_t* req) { static void rename_cb(uv_fs_t* req) { ASSERT(req == &rename_req); ASSERT(req->fs_type == UV_FS_RENAME); - ASSERT(req->result != -1); + ASSERT(req->result == 0); rename_cb_count++; uv_fs_req_cleanup(req); } @@ -361,7 +363,7 @@ static void rename_cb(uv_fs_t* req) { static void mkdir_cb(uv_fs_t* req) { ASSERT(req == &mkdir_req); ASSERT(req->fs_type == UV_FS_MKDIR); - ASSERT(req->result != -1); + ASSERT(req->result == 0); mkdir_cb_count++; ASSERT(req->path); ASSERT(memcmp(req->path, "test_dir\0", 9) == 0); @@ -372,7 +374,7 @@ static void mkdir_cb(uv_fs_t* req) { static void rmdir_cb(uv_fs_t* req) { ASSERT(req == &rmdir_req); ASSERT(req->fs_type == UV_FS_RMDIR); - ASSERT(req->result != -1); + ASSERT(req->result == 0); rmdir_cb_count++; ASSERT(req->path); ASSERT(memcmp(req->path, "test_dir\0", 9) == 0); @@ -408,9 +410,8 @@ static void empty_readdir_cb(uv_fs_t* req) { static void file_readdir_cb(uv_fs_t* req) { ASSERT(req == &readdir_req); ASSERT(req->fs_type == UV_FS_READDIR); - ASSERT(req->result == -1); + ASSERT(req->result == UV_ENOTDIR); ASSERT(req->ptr == NULL); - ASSERT(uv_last_error(req->loop).code == UV_ENOTDIR); uv_fs_req_cleanup(req); readdir_cb_count++; } @@ -419,7 +420,7 @@ static void file_readdir_cb(uv_fs_t* req) { static void stat_cb(uv_fs_t* req) { ASSERT(req == &stat_req); ASSERT(req->fs_type == UV_FS_STAT || req->fs_type == UV_FS_LSTAT); - ASSERT(req->result != -1); + ASSERT(req->result == 0); ASSERT(req->ptr); stat_cb_count++; uv_fs_req_cleanup(req); @@ -438,24 +439,21 @@ static void sendfile_cb(uv_fs_t* req) { static void open_noent_cb(uv_fs_t* req) { ASSERT(req->fs_type == UV_FS_OPEN); - ASSERT(req->errorno == UV_ENOENT); - ASSERT(req->result == -1); + ASSERT(req->result == UV_ENOENT); open_cb_count++; uv_fs_req_cleanup(req); } static void open_nametoolong_cb(uv_fs_t* req) { ASSERT(req->fs_type == UV_FS_OPEN); - ASSERT(req->errorno == UV_ENAMETOOLONG); - ASSERT(req->result == -1); + ASSERT(req->result == UV_ENAMETOOLONG); open_cb_count++; uv_fs_req_cleanup(req); } static void open_loop_cb(uv_fs_t* req) { ASSERT(req->fs_type == UV_FS_OPEN); - ASSERT(req->errorno == UV_ELOOP); - ASSERT(req->result == -1); + ASSERT(req->result == UV_ELOOP); open_cb_count++; uv_fs_req_cleanup(req); } @@ -468,9 +466,8 @@ TEST_IMPL(fs_file_noent) { loop = uv_default_loop(); r = uv_fs_open(loop, &req, "does_not_exist", O_RDONLY, 0, NULL); - ASSERT(r == -1); - ASSERT(req.result == -1); - ASSERT(uv_last_error(loop).code == UV_ENOENT); + ASSERT(r == UV_ENOENT); + ASSERT(req.result == UV_ENOENT); uv_fs_req_cleanup(&req); r = uv_fs_open(loop, &req, "does_not_exist", O_RDONLY, 0, open_noent_cb); @@ -497,9 +494,8 @@ TEST_IMPL(fs_file_nametoolong) { name[TOO_LONG_NAME_LENGTH] = 0; r = uv_fs_open(loop, &req, name, O_RDONLY, 0, NULL); - ASSERT(r == -1); - ASSERT(req.result == -1); - ASSERT(uv_last_error(loop).code == UV_ENAMETOOLONG); + ASSERT(r == UV_ENAMETOOLONG); + ASSERT(req.result == UV_ENAMETOOLONG); uv_fs_req_cleanup(&req); r = uv_fs_open(loop, &req, name, O_RDONLY, 0, open_nametoolong_cb); @@ -524,9 +520,8 @@ TEST_IMPL(fs_file_loop) { uv_fs_req_cleanup(&req); r = uv_fs_open(loop, &req, "test_symlink", O_RDONLY, 0, NULL); - ASSERT(r == -1); - ASSERT(req.result == -1); - ASSERT(uv_last_error(loop).code == UV_ELOOP); + ASSERT(r == UV_ELOOP); + ASSERT(req.result == UV_ELOOP); uv_fs_req_cleanup(&req); r = uv_fs_open(loop, &req, "test_symlink", O_RDONLY, 0, open_loop_cb); @@ -664,69 +659,69 @@ TEST_IMPL(fs_file_sync) { r = uv_fs_open(loop, &open_req1, "test_file", O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(open_req1.result != -1); + ASSERT(r >= 0); + ASSERT(open_req1.result >= 0); uv_fs_req_cleanup(&open_req1); r = uv_fs_write(loop, &write_req, open_req1.result, test_buf, sizeof(test_buf), -1, NULL); - ASSERT(r != -1); - ASSERT(write_req.result != -1); + ASSERT(r >= 0); + ASSERT(write_req.result >= 0); uv_fs_req_cleanup(&write_req); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); - ASSERT(r != -1); - ASSERT(close_req.result != -1); + ASSERT(r == 0); + ASSERT(close_req.result == 0); uv_fs_req_cleanup(&close_req); r = uv_fs_open(loop, &open_req1, "test_file", O_RDWR, 0, NULL); - ASSERT(r != -1); - ASSERT(open_req1.result != -1); + ASSERT(r >= 0); + ASSERT(open_req1.result >= 0); uv_fs_req_cleanup(&open_req1); r = uv_fs_read(loop, &read_req, open_req1.result, buf, sizeof(buf), -1, NULL); - ASSERT(r != -1); - ASSERT(read_req.result != -1); + ASSERT(r >= 0); + ASSERT(read_req.result >= 0); ASSERT(strcmp(buf, test_buf) == 0); uv_fs_req_cleanup(&read_req); r = uv_fs_ftruncate(loop, &ftruncate_req, open_req1.result, 7, NULL); - ASSERT(r != -1); - ASSERT(ftruncate_req.result != -1); + ASSERT(r == 0); + ASSERT(ftruncate_req.result == 0); uv_fs_req_cleanup(&ftruncate_req); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); - ASSERT(r != -1); - ASSERT(close_req.result != -1); + ASSERT(r == 0); + ASSERT(close_req.result == 0); uv_fs_req_cleanup(&close_req); r = uv_fs_rename(loop, &rename_req, "test_file", "test_file2", NULL); - ASSERT(r != -1); - ASSERT(rename_req.result != -1); + ASSERT(r == 0); + ASSERT(rename_req.result == 0); uv_fs_req_cleanup(&rename_req); r = uv_fs_open(loop, &open_req1, "test_file2", O_RDONLY, 0, NULL); - ASSERT(r != -1); - ASSERT(open_req1.result != -1); + ASSERT(r >= 0); + ASSERT(open_req1.result >= 0); uv_fs_req_cleanup(&open_req1); memset(buf, 0, sizeof(buf)); r = uv_fs_read(loop, &read_req, open_req1.result, buf, sizeof(buf), -1, NULL); - ASSERT(r != -1); - ASSERT(read_req.result != -1); + ASSERT(r >= 0); + ASSERT(read_req.result >= 0); ASSERT(strcmp(buf, "test-bu") == 0); uv_fs_req_cleanup(&read_req); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); - ASSERT(r != -1); - ASSERT(close_req.result != -1); + ASSERT(r == 0); + ASSERT(close_req.result == 0); uv_fs_req_cleanup(&close_req); r = uv_fs_unlink(loop, &unlink_req, "test_file2", NULL); - ASSERT(r != -1); - ASSERT(unlink_req.result != -1); + ASSERT(r == 0); + ASSERT(unlink_req.result == 0); uv_fs_req_cleanup(&unlink_req); /* Cleanup */ @@ -757,7 +752,7 @@ TEST_IMPL(fs_async_dir) { /* Create 2 files synchronously. */ r = uv_fs_open(loop, &open_req1, "test_dir/file1", O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); + ASSERT(r >= 0); uv_fs_req_cleanup(&open_req1); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); ASSERT(r == 0); @@ -765,7 +760,7 @@ TEST_IMPL(fs_async_dir) { r = uv_fs_open(loop, &open_req1, "test_dir/file2", O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); + ASSERT(r >= 0); uv_fs_req_cleanup(&open_req1); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); ASSERT(r == 0); @@ -857,14 +852,14 @@ TEST_IMPL(fs_async_sendfile) { /* Test starts here. */ r = uv_fs_open(loop, &open_req1, "test_file", O_RDWR, 0, NULL); - ASSERT(r != -1); - ASSERT(open_req1.result != -1); + ASSERT(r >= 0); + ASSERT(open_req1.result >= 0); uv_fs_req_cleanup(&open_req1); r = uv_fs_open(loop, &open_req2, "test_file2", O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(open_req2.result != -1); + ASSERT(r >= 0); + ASSERT(open_req2.result >= 0); uv_fs_req_cleanup(&open_req2); r = uv_fs_sendfile(loop, &sendfile_req, open_req2.result, open_req1.result, @@ -910,8 +905,8 @@ TEST_IMPL(fs_fstat) { r = uv_fs_open(loop, &req, "test_file", O_RDWR | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); file = req.result; uv_fs_req_cleanup(&req); @@ -947,13 +942,29 @@ TEST_IMPL(fs_fstat) { ASSERT(s->st_mtim.tv_nsec == t.st_mtimespec.tv_nsec); ASSERT(s->st_ctim.tv_sec == t.st_ctimespec.tv_sec); ASSERT(s->st_ctim.tv_nsec == t.st_ctimespec.tv_nsec); -#elif defined(_BSD_SOURCE) || defined(_SVID_SOURCE) || defined(_XOPEN_SOURCE) + ASSERT(s->st_birthtim.tv_sec == t.st_birthtimespec.tv_sec); + ASSERT(s->st_birthtim.tv_nsec == t.st_birthtimespec.tv_nsec); + ASSERT(s->st_flags == t.st_flags); + ASSERT(s->st_gen == t.st_gen); +#elif defined(__sun) || \ + defined(_BSD_SOURCE) || \ + defined(_SVID_SOURCE) || \ + defined(_XOPEN_SOURCE) ASSERT(s->st_atim.tv_sec == t.st_atim.tv_sec); ASSERT(s->st_atim.tv_nsec == t.st_atim.tv_nsec); ASSERT(s->st_mtim.tv_sec == t.st_mtim.tv_sec); ASSERT(s->st_mtim.tv_nsec == t.st_mtim.tv_nsec); ASSERT(s->st_ctim.tv_sec == t.st_ctim.tv_sec); ASSERT(s->st_ctim.tv_nsec == t.st_ctim.tv_nsec); +# if defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__OpenBSD__) || \ + defined(__NetBSD__) + ASSERT(s->st_birthtim.tv_sec == t.st_birthtim.tv_sec); + ASSERT(s->st_birthtim.tv_nsec == t.st_birthtim.tv_nsec); + ASSERT(s->st_flags == t.st_flags); + ASSERT(s->st_gen == t.st_gen); +# endif #else ASSERT(s->st_atim.tv_sec == t.st_atime); ASSERT(s->st_atim.tv_nsec == 0); @@ -1004,8 +1015,8 @@ TEST_IMPL(fs_chmod) { r = uv_fs_open(loop, &req, "test_file", O_RDWR | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); file = req.result; uv_fs_req_cleanup(&req); @@ -1101,8 +1112,8 @@ TEST_IMPL(fs_chown) { r = uv_fs_open(loop, &req, "test_file", O_RDWR | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); file = req.result; uv_fs_req_cleanup(&req); @@ -1167,8 +1178,8 @@ TEST_IMPL(fs_link) { r = uv_fs_open(loop, &req, "test_file", O_RDWR | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); file = req.result; uv_fs_req_cleanup(&req); @@ -1186,15 +1197,15 @@ TEST_IMPL(fs_link) { uv_fs_req_cleanup(&req); r = uv_fs_open(loop, &req, "test_file_link", O_RDWR, 0, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); link = req.result; uv_fs_req_cleanup(&req); memset(buf, 0, sizeof(buf)); r = uv_fs_read(loop, &req, link, buf, sizeof(buf), 0, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); ASSERT(strcmp(buf, test_buf) == 0); close(link); @@ -1206,15 +1217,15 @@ TEST_IMPL(fs_link) { ASSERT(link_cb_count == 1); r = uv_fs_open(loop, &req, "test_file_link2", O_RDWR, 0, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); link = req.result; uv_fs_req_cleanup(&req); memset(buf, 0, sizeof(buf)); r = uv_fs_read(loop, &req, link, buf, sizeof(buf), 0, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); ASSERT(strcmp(buf, test_buf) == 0); close(link); @@ -1243,14 +1254,12 @@ TEST_IMPL(fs_readlink) { ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); ASSERT(dummy_cb_count == 1); ASSERT(req.ptr == NULL); - ASSERT(req.result == -1); - ASSERT(req.errorno == UV_ENOENT); + ASSERT(req.result == UV_ENOENT); uv_fs_req_cleanup(&req); - ASSERT(-1 == uv_fs_readlink(loop, &req, "no_such_file", NULL)); + ASSERT(UV_ENOENT == uv_fs_readlink(loop, &req, "no_such_file", NULL)); ASSERT(req.ptr == NULL); - ASSERT(req.result == -1); - ASSERT(req.errorno == UV_ENOENT); + ASSERT(req.result == UV_ENOENT); uv_fs_req_cleanup(&req); MAKE_VALGRIND_HAPPY(); @@ -1275,8 +1284,8 @@ TEST_IMPL(fs_symlink) { r = uv_fs_open(loop, &req, "test_file", O_RDWR | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); file = req.result; uv_fs_req_cleanup(&req); @@ -1290,14 +1299,14 @@ TEST_IMPL(fs_symlink) { /* sync symlink */ r = uv_fs_symlink(loop, &req, "test_file", "test_file_symlink", 0, NULL); #ifdef _WIN32 - if (r == -1) { - if (uv_last_error(loop).code == UV_ENOTSUP) { + if (r < 0) { + if (r == UV_ENOTSUP) { /* * Windows doesn't support symlinks on older versions. * We just pass the test and bail out early if we get ENOTSUP. */ return 0; - } else if (uv_last_error(loop).code == UV_EPERM) { + } else if (r == UV_EPERM) { /* * Creating a symlink is only allowed when running elevated. * We pass the test and bail out early if we get UV_EPERM. @@ -1311,25 +1320,25 @@ TEST_IMPL(fs_symlink) { uv_fs_req_cleanup(&req); r = uv_fs_open(loop, &req, "test_file_symlink", O_RDWR, 0, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); link = req.result; uv_fs_req_cleanup(&req); memset(buf, 0, sizeof(buf)); r = uv_fs_read(loop, &req, link, buf, sizeof(buf), 0, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); ASSERT(strcmp(buf, test_buf) == 0); close(link); r = uv_fs_symlink(loop, &req, "test_file_symlink", "test_file_symlink_symlink", 0, NULL); - ASSERT(r != -1); + ASSERT(r == 0); uv_fs_req_cleanup(&req); r = uv_fs_readlink(loop, &req, "test_file_symlink_symlink", NULL); - ASSERT(r != -1); + ASSERT(r == 0); ASSERT(strcmp(req.ptr, "test_file_symlink") == 0); uv_fs_req_cleanup(&req); @@ -1340,25 +1349,25 @@ TEST_IMPL(fs_symlink) { ASSERT(symlink_cb_count == 1); r = uv_fs_open(loop, &req, "test_file_symlink2", O_RDWR, 0, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); link = req.result; uv_fs_req_cleanup(&req); memset(buf, 0, sizeof(buf)); r = uv_fs_read(loop, &req, link, buf, sizeof(buf), 0, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); ASSERT(strcmp(buf, test_buf) == 0); close(link); r = uv_fs_symlink(loop, &req, "test_file_symlink2", "test_file_symlink2_symlink", 0, NULL); - ASSERT(r != -1); + ASSERT(r == 0); uv_fs_req_cleanup(&req); r = uv_fs_readlink(loop, &req, "test_file_symlink2_symlink", readlink_cb); - ASSERT(r != -1); + ASSERT(r == 0); uv_run(loop, UV_RUN_DEFAULT); ASSERT(readlink_cb_count == 1); @@ -1440,7 +1449,7 @@ TEST_IMPL(fs_symlink_dir) { r = uv_fs_open(loop, &open_req1, "test_dir/file1", O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); + ASSERT(r >= 0); uv_fs_req_cleanup(&open_req1); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); ASSERT(r == 0); @@ -1448,7 +1457,7 @@ TEST_IMPL(fs_symlink_dir) { r = uv_fs_open(loop, &open_req1, "test_dir/file2", O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); + ASSERT(r >= 0); uv_fs_req_cleanup(&open_req1); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); ASSERT(r == 0); @@ -1469,7 +1478,7 @@ TEST_IMPL(fs_symlink_dir) { uv_fs_req_cleanup(&req); r = uv_fs_readdir(loop, &readdir_req, "test_dir_symlink", 0, NULL); - ASSERT(r == -1); + ASSERT(r == UV_ENOENT); uv_fs_req_cleanup(&readdir_req); r = uv_fs_readdir(loop, &readdir_req, "test_dir", 0, NULL); @@ -1505,8 +1514,8 @@ TEST_IMPL(fs_utime) { unlink(path); r = uv_fs_open(loop, &req, path, O_RDWR | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); uv_fs_req_cleanup(&req); close(r); @@ -1590,16 +1599,16 @@ TEST_IMPL(fs_futime) { unlink(path); r = uv_fs_open(loop, &req, path, O_RDWR | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); uv_fs_req_cleanup(&req); close(r); atime = mtime = 400497753; /* 1982-09-10 11:22:33 */ r = uv_fs_open(loop, &req, path, O_RDWR, 0, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); file = req.result; /* FIXME probably not how it's supposed to be used */ uv_fs_req_cleanup(&req); @@ -1642,9 +1651,8 @@ TEST_IMPL(fs_stat_missing_path) { loop = uv_default_loop(); r = uv_fs_stat(loop, &req, "non_existent_file", NULL); - ASSERT(r == -1); - ASSERT(req.result == -1); - ASSERT(uv_last_error(loop).code == UV_ENOENT); + ASSERT(r == UV_ENOENT); + ASSERT(req.result == UV_ENOENT); uv_fs_req_cleanup(&req); MAKE_VALGRIND_HAPPY(); @@ -1692,8 +1700,7 @@ TEST_IMPL(fs_readdir_file) { loop = uv_default_loop(); r = uv_fs_readdir(loop, &readdir_req, path, 0, NULL); - ASSERT(r == -1); - ASSERT(uv_last_error(loop).code == UV_ENOTDIR); + ASSERT(r == UV_ENOTDIR); uv_fs_req_cleanup(&readdir_req); r = uv_fs_readdir(loop, &readdir_req, path, 0, file_readdir_cb); @@ -1717,8 +1724,8 @@ TEST_IMPL(fs_open_dir) { loop = uv_default_loop(); r = uv_fs_open(loop, &req, path, O_RDONLY, 0, NULL); - ASSERT(r != -1); - ASSERT(req.result != -1); + ASSERT(r >= 0); + ASSERT(req.result >= 0); ASSERT(req.ptr == NULL); file = r; uv_fs_req_cleanup(&req); @@ -1748,40 +1755,40 @@ TEST_IMPL(fs_file_open_append) { r = uv_fs_open(loop, &open_req1, "test_file", O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(open_req1.result != -1); + ASSERT(r >= 0); + ASSERT(open_req1.result >= 0); uv_fs_req_cleanup(&open_req1); r = uv_fs_write(loop, &write_req, open_req1.result, test_buf, sizeof(test_buf), -1, NULL); - ASSERT(r != -1); - ASSERT(write_req.result != -1); + ASSERT(r >= 0); + ASSERT(write_req.result >= 0); uv_fs_req_cleanup(&write_req); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); - ASSERT(r != -1); - ASSERT(close_req.result != -1); + ASSERT(r == 0); + ASSERT(close_req.result == 0); uv_fs_req_cleanup(&close_req); r = uv_fs_open(loop, &open_req1, "test_file", O_RDWR | O_APPEND, 0, NULL); - ASSERT(r != -1); - ASSERT(open_req1.result != -1); + ASSERT(r >= 0); + ASSERT(open_req1.result >= 0); uv_fs_req_cleanup(&open_req1); r = uv_fs_write(loop, &write_req, open_req1.result, test_buf, sizeof(test_buf), -1, NULL); - ASSERT(r != -1); - ASSERT(write_req.result != -1); + ASSERT(r >= 0); + ASSERT(write_req.result >= 0); uv_fs_req_cleanup(&write_req); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); - ASSERT(r != -1); - ASSERT(close_req.result != -1); + ASSERT(r == 0); + ASSERT(close_req.result == 0); uv_fs_req_cleanup(&close_req); r = uv_fs_open(loop, &open_req1, "test_file", O_RDONLY, S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(open_req1.result != -1); + ASSERT(r >= 0); + ASSERT(open_req1.result >= 0); uv_fs_req_cleanup(&open_req1); r = uv_fs_read(loop, &read_req, open_req1.result, buf, sizeof(buf), -1, @@ -1795,8 +1802,8 @@ TEST_IMPL(fs_file_open_append) { uv_fs_req_cleanup(&read_req); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); - ASSERT(r != -1); - ASSERT(close_req.result != -1); + ASSERT(r == 0); + ASSERT(close_req.result == 0); uv_fs_req_cleanup(&close_req); /* Cleanup */ @@ -1818,53 +1825,53 @@ TEST_IMPL(fs_rename_to_existing_file) { r = uv_fs_open(loop, &open_req1, "test_file", O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(open_req1.result != -1); + ASSERT(r >= 0); + ASSERT(open_req1.result >= 0); uv_fs_req_cleanup(&open_req1); r = uv_fs_write(loop, &write_req, open_req1.result, test_buf, sizeof(test_buf), -1, NULL); - ASSERT(r != -1); - ASSERT(write_req.result != -1); + ASSERT(r >= 0); + ASSERT(write_req.result >= 0); uv_fs_req_cleanup(&write_req); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); - ASSERT(r != -1); - ASSERT(close_req.result != -1); + ASSERT(r == 0); + ASSERT(close_req.result == 0); uv_fs_req_cleanup(&close_req); r = uv_fs_open(loop, &open_req1, "test_file2", O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(open_req1.result != -1); + ASSERT(r >= 0); + ASSERT(open_req1.result >= 0); uv_fs_req_cleanup(&open_req1); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); - ASSERT(r != -1); - ASSERT(close_req.result != -1); + ASSERT(r == 0); + ASSERT(close_req.result == 0); uv_fs_req_cleanup(&close_req); r = uv_fs_rename(loop, &rename_req, "test_file", "test_file2", NULL); - ASSERT(r != -1); - ASSERT(rename_req.result != -1); + ASSERT(r == 0); + ASSERT(rename_req.result == 0); uv_fs_req_cleanup(&rename_req); r = uv_fs_open(loop, &open_req1, "test_file2", O_RDONLY, 0, NULL); - ASSERT(r != -1); - ASSERT(open_req1.result != -1); + ASSERT(r >= 0); + ASSERT(open_req1.result >= 0); uv_fs_req_cleanup(&open_req1); memset(buf, 0, sizeof(buf)); r = uv_fs_read(loop, &read_req, open_req1.result, buf, sizeof(buf), -1, NULL); - ASSERT(r != -1); - ASSERT(read_req.result != -1); + ASSERT(r >= 0); + ASSERT(read_req.result >= 0); ASSERT(strcmp(buf, test_buf) == 0); uv_fs_req_cleanup(&read_req); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); - ASSERT(r != -1); - ASSERT(close_req.result != -1); + ASSERT(r == 0); + ASSERT(close_req.result == 0); uv_fs_req_cleanup(&close_req); /* Cleanup */ @@ -1886,31 +1893,31 @@ TEST_IMPL(fs_read_file_eof) { r = uv_fs_open(loop, &open_req1, "test_file", O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r != -1); - ASSERT(open_req1.result != -1); + ASSERT(r >= 0); + ASSERT(open_req1.result >= 0); uv_fs_req_cleanup(&open_req1); r = uv_fs_write(loop, &write_req, open_req1.result, test_buf, sizeof(test_buf), -1, NULL); - ASSERT(r != -1); - ASSERT(write_req.result != -1); + ASSERT(r >= 0); + ASSERT(write_req.result >= 0); uv_fs_req_cleanup(&write_req); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); - ASSERT(r != -1); - ASSERT(close_req.result != -1); + ASSERT(r == 0); + ASSERT(close_req.result == 0); uv_fs_req_cleanup(&close_req); r = uv_fs_open(loop, &open_req1, "test_file", O_RDONLY, 0, NULL); - ASSERT(r != -1); - ASSERT(open_req1.result != -1); + ASSERT(r >= 0); + ASSERT(open_req1.result >= 0); uv_fs_req_cleanup(&open_req1); memset(buf, 0, sizeof(buf)); r = uv_fs_read(loop, &read_req, open_req1.result, buf, sizeof(buf), -1, NULL); - ASSERT(r != -1); - ASSERT(read_req.result != -1); + ASSERT(r >= 0); + ASSERT(read_req.result >= 0); ASSERT(strcmp(buf, test_buf) == 0); uv_fs_req_cleanup(&read_req); @@ -1921,8 +1928,8 @@ TEST_IMPL(fs_read_file_eof) { uv_fs_req_cleanup(&read_req); r = uv_fs_close(loop, &close_req, open_req1.result, NULL); - ASSERT(r != -1); - ASSERT(close_req.result != -1); + ASSERT(r == 0); + ASSERT(close_req.result == 0); uv_fs_req_cleanup(&close_req); /* Cleanup */ diff --git a/deps/uv/test/test-get-currentexe.c b/deps/uv/test/test-get-currentexe.c index 9dd2676..8882732 100644 --- a/deps/uv/test/test-get-currentexe.c +++ b/deps/uv/test/test-get-currentexe.c @@ -54,10 +54,10 @@ TEST_IMPL(get_currentexe) { /* Negative tests */ size = sizeof(buffer) / sizeof(buffer[0]); r = uv_exepath(NULL, &size); - ASSERT(r == -1); + ASSERT(r == UV_EINVAL); r = uv_exepath(buffer, NULL); - ASSERT(r == -1); + ASSERT(r == UV_EINVAL); return 0; } diff --git a/deps/uv/test/test-getaddrinfo.c b/deps/uv/test/test-getaddrinfo.c index b515c8a..bca2a6b 100644 --- a/deps/uv/test/test-getaddrinfo.c +++ b/deps/uv/test/test-getaddrinfo.c @@ -40,7 +40,7 @@ static void getaddrinfo_fail_cb(uv_getaddrinfo_t* req, int status, struct addrinfo* res) { ASSERT(fail_cb_called == 0); - ASSERT(status == -1); + ASSERT(status < 0); ASSERT(res == NULL); uv_freeaddrinfo(res); /* Should not crash. */ fail_cb_called++; diff --git a/deps/uv/test/test-getsockname.c b/deps/uv/test/test-getsockname.c index 2baa9d7..e3f09ec 100644 --- a/deps/uv/test/test-getsockname.c +++ b/deps/uv/test/test-getsockname.c @@ -109,8 +109,7 @@ static void on_connection(uv_stream_t* server, int status) { int r; if (status != 0) { - fprintf(stderr, "Connect error %d\n", - uv_last_error(loop).code); + fprintf(stderr, "Connect error %s\n", uv_err_name(status)); } ASSERT(status == 0); @@ -198,8 +197,7 @@ static int tcp_listener(void) { namelen = sizeof sockname; r = uv_tcp_getpeername(&tcpServer, &peername, &namelen); - ASSERT(r == -1); - ASSERT(uv_last_error(loop).code == UV_ENOTCONN); + ASSERT(r == UV_ENOTCONN); getpeernamecount++; return 0; diff --git a/deps/uv/test/test-ip6-addr.c b/deps/uv/test/test-ip6-addr.c new file mode 100644 index 0000000..d65043e --- /dev/null +++ b/deps/uv/test/test-ip6-addr.c @@ -0,0 +1,103 @@ +/* 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" + +#include +#include + +#ifdef __linux__ +# include +# include +#endif + +typedef void (*iface_info_cb)(const char* ip6_addr, const char* device_name, + unsigned iface_index); + +void call_iface_info_cb(iface_info_cb iface_cb, + char const* iface_name, + struct sockaddr_in6 const* address) { + char string_address[INET6_ADDRSTRLEN]; + + ASSERT(0 == uv_inet_ntop(AF_INET6, + &address->sin6_addr, + string_address, + INET6_ADDRSTRLEN)); + iface_cb(string_address, iface_name, address->sin6_scope_id); +} + + +void foreach_ip6_interface(iface_info_cb iface_cb) { + int count, ix; + uv_interface_address_t* addresses; + + ASSERT(0 == uv_interface_addresses(&addresses, &count)); + + for (ix = 0; ix < count; ix++) { + if (addresses[ix].address.address4.sin_family != AF_INET6) + continue; + + call_iface_info_cb(iface_cb, + addresses[ix].name, + &addresses[ix].address.address6); + } + + uv_free_interface_addresses(addresses, count); +} + + +void test_ip6_addr_scope(const char* ip6_addr, + const char* device_name, + unsigned iface_index) { + /* 40 bytes address, 16 bytes device name, plus reserve */ + char scoped_addr[128]; + struct sockaddr_in6 addr; + + /* skip addresses that are not link-local */ + if (strncmp(ip6_addr, "fe80::", 6) != 0) return; + +#ifdef _WIN32 + sprintf(scoped_addr, "%s%%%d", ip6_addr, iface_index); +#else + sprintf(scoped_addr, "%s%%%s", ip6_addr, device_name); +#endif + + LOGF("Testing link-local address %s (iface_index: 0x%02x, device_name: %s)\n", + scoped_addr, + iface_index, + device_name); + + addr = uv_ip6_addr(scoped_addr, TEST_PORT); + + LOGF("Got scope_id 0x%02x\n", addr.sin6_scope_id); + ASSERT(iface_index == addr.sin6_scope_id); +} + + +TEST_IMPL(ip6_addr_link_local) { +#ifdef UV_PLATFORM_HAS_IP6_LINK_LOCAL_ADDRESS + foreach_ip6_interface(&test_ip6_addr_scope); + return 0; +#else + RETURN_SKIP("Qualified link-local addresses are not supported."); +#endif +} diff --git a/deps/uv/test/test-ipc.c b/deps/uv/test/test-ipc.c index 40a48b7..ba9c7a3 100644 --- a/deps/uv/test/test-ipc.c +++ b/deps/uv/test/test-ipc.c @@ -134,7 +134,6 @@ static void on_read(uv_pipe_t* pipe, ssize_t nread, uv_buf_t buf, uv_handle_type pending) { int r; uv_buf_t outbuf; - uv_err_t err; if (nread == 0) { /* Everything OK, but nothing read. */ @@ -143,13 +142,12 @@ static void on_read(uv_pipe_t* pipe, ssize_t nread, uv_buf_t buf, } if (nread < 0) { - err = uv_last_error(pipe->loop); - if (err.code == UV_EOF) { + if (nread == UV_EOF) { free(buf.base); return; } - printf("error recving on channel: %s\n", uv_strerror(err)); + printf("error recving on channel: %s\n", uv_strerror(nread)); abort(); } @@ -263,7 +261,6 @@ static void on_read_connection(uv_pipe_t* pipe, ssize_t nread, uv_buf_t buf, uv_handle_type pending) { int r; uv_buf_t outbuf; - uv_err_t err; if (nread == 0) { /* Everything OK, but nothing read. */ @@ -272,13 +269,12 @@ static void on_read_connection(uv_pipe_t* pipe, ssize_t nread, uv_buf_t buf, } if (nread < 0) { - err = uv_last_error(pipe->loop); - if (err.code == UV_EOF) { + if (nread == UV_EOF) { free(buf.base); return; } - printf("error recving on channel: %s\n", uv_strerror(err)); + printf("error recving on channel: %s\n", uv_strerror(nread)); abort(); } @@ -434,13 +430,12 @@ static void on_tcp_child_process_read(uv_stream_t* tcp, ssize_t nread, uv_buf_t int r; if (nread < 0) { - if (uv_last_error(tcp->loop).code == UV_EOF) { + if (nread == UV_EOF) { free(buf.base); return; } - printf("error recving on tcp connection: %s\n", - uv_strerror(uv_last_error(tcp->loop))); + printf("error recving on tcp connection: %s\n", uv_strerror(nread)); abort(); } diff --git a/deps/uv/test/test-list.h b/deps/uv/test/test-list.h index 156266d..d3371a8 100644 --- a/deps/uv/test/test-list.h +++ b/deps/uv/test/test-list.h @@ -102,6 +102,7 @@ TEST_DECLARE (timer_order) TEST_DECLARE (timer_huge_timeout) TEST_DECLARE (timer_huge_repeat) TEST_DECLARE (timer_run_once) +TEST_DECLARE (timer_from_check) TEST_DECLARE (idle_starvation) TEST_DECLARE (loop_handles) TEST_DECLARE (get_loadavg) @@ -210,6 +211,7 @@ TEST_DECLARE (dlerror) TEST_DECLARE (poll_duplex) TEST_DECLARE (poll_unidirectional) TEST_DECLARE (poll_close) +TEST_DECLARE (ip6_addr_link_local) #ifdef _WIN32 TEST_DECLARE (spawn_detect_pipe_name_collisions_on_windows) TEST_DECLARE (argument_escaping) @@ -352,6 +354,7 @@ TASK_LIST_START TEST_ENTRY (timer_huge_timeout) TEST_ENTRY (timer_huge_repeat) TEST_ENTRY (timer_run_once) + TEST_ENTRY (timer_from_check) TEST_ENTRY (idle_starvation) @@ -497,6 +500,7 @@ TASK_LIST_START TEST_ENTRY (strlcpy) TEST_ENTRY (strlcat) TEST_ENTRY (dlerror) + TEST_ENTRY (ip6_addr_link_local) #if 0 /* These are for testing the test runner. */ TEST_ENTRY (fail_always) diff --git a/deps/uv/test/test-ping-pong.c b/deps/uv/test/test-ping-pong.c index e5bf7c8..719f2d1 100644 --- a/deps/uv/test/test-ping-pong.c +++ b/deps/uv/test/test-ping-pong.c @@ -92,7 +92,7 @@ static void pinger_read_cb(uv_stream_t* stream, ssize_t nread, uv_buf_t buf) { pinger = (pinger_t*)stream->data; if (nread < 0) { - ASSERT(uv_last_error(uv_default_loop()).code == UV_EOF); + ASSERT(nread == UV_EOF); puts("got EOF"); free(buf.base); diff --git a/deps/uv/test/test-pipe-bind-error.c b/deps/uv/test/test-pipe-bind-error.c index a07fa0f..38b57db 100644 --- a/deps/uv/test/test-pipe-bind-error.c +++ b/deps/uv/test/test-pipe-bind-error.c @@ -53,16 +53,12 @@ TEST_IMPL(pipe_bind_error_addrinuse) { r = uv_pipe_init(uv_default_loop(), &server2, 0); ASSERT(r == 0); r = uv_pipe_bind(&server2, TEST_PIPENAME); - ASSERT(r == -1); - - ASSERT(uv_last_error(uv_default_loop()).code == UV_EADDRINUSE); + ASSERT(r == UV_EADDRINUSE); r = uv_listen((uv_stream_t*)&server1, SOMAXCONN, NULL); ASSERT(r == 0); r = uv_listen((uv_stream_t*)&server2, SOMAXCONN, NULL); - ASSERT(r == -1); - - ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL); + ASSERT(r == UV_EINVAL); uv_close((uv_handle_t*)&server1, close_cb); uv_close((uv_handle_t*)&server2, close_cb); @@ -82,10 +78,9 @@ TEST_IMPL(pipe_bind_error_addrnotavail) { r = uv_pipe_init(uv_default_loop(), &server, 0); ASSERT(r == 0); - r = uv_pipe_bind(&server, BAD_PIPENAME); - ASSERT(r == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_EACCES); + r = uv_pipe_bind(&server, BAD_PIPENAME); + ASSERT(r == UV_EACCES); uv_close((uv_handle_t*)&server, close_cb); @@ -107,9 +102,7 @@ TEST_IMPL(pipe_bind_error_inval) { r = uv_pipe_bind(&server, TEST_PIPENAME); ASSERT(r == 0); r = uv_pipe_bind(&server, TEST_PIPENAME_2); - ASSERT(r == -1); - - ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL); + ASSERT(r == UV_EINVAL); uv_close((uv_handle_t*)&server, close_cb); @@ -128,10 +121,9 @@ TEST_IMPL(pipe_listen_without_bind) { r = uv_pipe_init(uv_default_loop(), &server, 0); ASSERT(r == 0); - r = uv_listen((uv_stream_t*)&server, SOMAXCONN, NULL); - ASSERT(r == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL); + r = uv_listen((uv_stream_t*)&server, SOMAXCONN, NULL); + ASSERT(r == UV_EINVAL); uv_close((uv_handle_t*)&server, close_cb); diff --git a/deps/uv/test/test-pipe-connect-error.c b/deps/uv/test/test-pipe-connect-error.c index fae1e1b..ebb2a6c 100644 --- a/deps/uv/test/test-pipe-connect-error.c +++ b/deps/uv/test/test-pipe-connect-error.c @@ -43,17 +43,14 @@ static void close_cb(uv_handle_t* handle) { static void connect_cb(uv_connect_t* connect_req, int status) { - ASSERT(status == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_ENOENT); + ASSERT(status == UV_ENOENT); uv_close((uv_handle_t*)connect_req->handle, close_cb); connect_cb_called++; } static void connect_cb_file(uv_connect_t* connect_req, int status) { - ASSERT(status == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_ENOTSOCK || - uv_last_error(uv_default_loop()).code == UV_ECONNREFUSED); + ASSERT(status == UV_ENOTSOCK || status == UV_ECONNREFUSED); uv_close((uv_handle_t*)connect_req->handle, close_cb); connect_cb_called++; } diff --git a/deps/uv/test/test-platform-output.c b/deps/uv/test/test-platform-output.c index 80737a7..4e029e4 100644 --- a/deps/uv/test/test-platform-output.c +++ b/deps/uv/test/test-platform-output.c @@ -32,23 +32,23 @@ TEST_IMPL(platform_output) { uv_interface_address_t* interfaces; int count; int i; - uv_err_t err; + int err; err = uv_get_process_title(buffer, sizeof(buffer)); - ASSERT(UV_OK == err.code); + ASSERT(err == 0); printf("uv_get_process_title: %s\n", buffer); err = uv_resident_set_memory(&rss); - ASSERT(UV_OK == err.code); + ASSERT(err == 0); printf("uv_resident_set_memory: %llu\n", (unsigned long long) rss); err = uv_uptime(&uptime); - ASSERT(UV_OK == err.code); + ASSERT(err == 0); ASSERT(uptime > 0); printf("uv_uptime: %f\n", uptime); err = uv_cpu_info(&cpus, &count); - ASSERT(UV_OK == err.code); + ASSERT(err == 0); printf("uv_cpu_info:\n"); for (i = 0; i < count; i++) { @@ -66,7 +66,7 @@ TEST_IMPL(platform_output) { uv_free_cpu_info(cpus, count); err = uv_interface_addresses(&interfaces, &count); - ASSERT(UV_OK == err.code); + ASSERT(err == 0); printf("uv_interface_addresses:\n"); for (i = 0; i < count; i++) { diff --git a/deps/uv/test/test-process-title.c b/deps/uv/test/test-process-title.c index c870abd..29be207 100644 --- a/deps/uv/test/test-process-title.c +++ b/deps/uv/test/test-process-title.c @@ -26,16 +26,16 @@ static void set_title(const char* title) { char buffer[512]; - uv_err_t err; + int err; err = uv_get_process_title(buffer, sizeof(buffer)); - ASSERT(UV_OK == err.code); + ASSERT(err == 0); err = uv_set_process_title(title); - ASSERT(UV_OK == err.code); + ASSERT(err == 0); err = uv_get_process_title(buffer, sizeof(buffer)); - ASSERT(UV_OK == err.code); + ASSERT(err == 0); ASSERT(strcmp(buffer, title) == 0); } diff --git a/deps/uv/test/test-semaphore.c b/deps/uv/test/test-semaphore.c index ee89d4f..ac03bb0 100644 --- a/deps/uv/test/test-semaphore.c +++ b/deps/uv/test/test-semaphore.c @@ -99,11 +99,11 @@ TEST_IMPL(semaphore_3) { uv_sem_wait(&sem); /* should not block */ uv_sem_wait(&sem); /* should not block */ ASSERT(0 == uv_sem_trywait(&sem)); - ASSERT(-1 == uv_sem_trywait(&sem)); + ASSERT(UV_EAGAIN == uv_sem_trywait(&sem)); uv_sem_post(&sem); ASSERT(0 == uv_sem_trywait(&sem)); - ASSERT(-1 == uv_sem_trywait(&sem)); + ASSERT(UV_EAGAIN == uv_sem_trywait(&sem)); uv_sem_destroy(&sem); diff --git a/deps/uv/test/test-shutdown-close.c b/deps/uv/test/test-shutdown-close.c index 62596b9..957fc88 100644 --- a/deps/uv/test/test-shutdown-close.c +++ b/deps/uv/test/test-shutdown-close.c @@ -37,9 +37,8 @@ static int close_cb_called = 0; static void shutdown_cb(uv_shutdown_t* req, int status) { - int err = uv_last_error(uv_default_loop()).code; ASSERT(req == &shutdown_req); - ASSERT(status == 0 || (status == -1 && err == UV_ECANCELED)); + ASSERT(status == 0 || status == UV_ECANCELED); shutdown_cb_called++; } diff --git a/deps/uv/test/test-shutdown-eof.c b/deps/uv/test/test-shutdown-eof.c index 017525c..9c84891 100644 --- a/deps/uv/test/test-shutdown-eof.c +++ b/deps/uv/test/test-shutdown-eof.c @@ -48,12 +48,9 @@ static uv_buf_t alloc_cb(uv_handle_t* handle, size_t size) { static void read_cb(uv_stream_t* t, ssize_t nread, uv_buf_t buf) { - uv_err_t err = uv_last_error(uv_default_loop()); - ASSERT((uv_tcp_t*)t == &tcp); if (nread == 0) { - ASSERT(err.code == UV_EAGAIN); free(buf.base); return; } @@ -66,7 +63,7 @@ static void read_cb(uv_stream_t* t, ssize_t nread, uv_buf_t buf) { got_q = 1; puts("got Q"); } else { - ASSERT(err.code == UV_EOF); + ASSERT(nread == UV_EOF); if (buf.base) { free(buf.base); } diff --git a/deps/uv/test/test-spawn.c b/deps/uv/test/test-spawn.c index afa8d91..507ef2d 100644 --- a/deps/uv/test/test-spawn.c +++ b/deps/uv/test/test-spawn.c @@ -61,18 +61,34 @@ static void exit_cb(uv_process_t* process, int exit_status, int term_signal) { } -static void exit_cb_failure_expected(uv_process_t* process, int exit_status, - int term_signal) { +static void expect(uv_process_t* process, + int exit_status, + int term_signal, + int err) { printf("exit_cb\n"); exit_cb_called++; - ASSERT(exit_status == -1); + ASSERT(exit_status == err); ASSERT(term_signal == 0); uv_close((uv_handle_t*)process, close_cb); } +static void exit_cb_expect_enoent(uv_process_t* process, + int exit_status, + int term_signal) { + expect(process, exit_status, term_signal, UV_ENOENT); +} + + +static void exit_cb_expect_eperm(uv_process_t* process, + int exit_status, + int term_signal) { + expect(process, exit_status, term_signal, UV_EPERM); +} + + static void kill_cb(uv_process_t* process, int exit_status, int term_signal) { - uv_err_t err; + int err; printf("exit_cb\n"); exit_cb_called++; @@ -90,7 +106,7 @@ static void kill_cb(uv_process_t* process, int exit_status, int term_signal) { * This process should be dead. */ err = uv_kill(process->pid, 0); - ASSERT(err.code == UV_ESRCH); + ASSERT(err == UV_ESRCH); } static void detach_failure_cb(uv_process_t* process, int exit_status, int term_signal) { @@ -107,12 +123,10 @@ static uv_buf_t on_alloc(uv_handle_t* handle, size_t suggested_size) { static void on_read(uv_stream_t* tcp, ssize_t nread, uv_buf_t buf) { - uv_err_t err = uv_last_error(uv_default_loop()); - if (nread > 0) { output_used += nread; } else if (nread < 0) { - ASSERT(err.code == UV_EOF); + ASSERT(nread == UV_EOF); uv_close((uv_handle_t*)tcp, close_cb); } } @@ -146,12 +160,12 @@ static void timer_cb(uv_timer_t* handle, int status) { TEST_IMPL(spawn_fails) { - init_process_options("", exit_cb_failure_expected); + init_process_options("", exit_cb_expect_enoent); options.file = options.args[0] = "program-that-had-better-not-exist"; ASSERT(0 == uv_spawn(uv_default_loop(), &process, options)); ASSERT(0 != uv_is_active((uv_handle_t*)&process)); ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - ASSERT(uv_last_error(uv_default_loop()).code == UV_ENOENT); + ASSERT(1 == exit_cb_called); MAKE_VALGRIND_HAPPY(); return 0; @@ -430,7 +444,6 @@ TEST_IMPL(spawn_preserve_env) { TEST_IMPL(spawn_detached) { int r; - uv_err_t err; init_process_options("spawn_helper4", detach_failure_cb); @@ -446,11 +459,11 @@ TEST_IMPL(spawn_detached) { ASSERT(exit_cb_called == 0); - err = uv_kill(process.pid, 0); - ASSERT(err.code == 0); + r = uv_kill(process.pid, 0); + ASSERT(r == 0); - err = uv_kill(process.pid, 15); - ASSERT(err.code == 0); + r = uv_kill(process.pid, 15); + ASSERT(r == 0); MAKE_VALGRIND_HAPPY(); return 0; @@ -564,7 +577,6 @@ TEST_IMPL(spawn_and_ping) { TEST_IMPL(kill) { int r; - uv_err_t err; #ifdef _WIN32 no_term_signal = 1; @@ -578,12 +590,12 @@ TEST_IMPL(kill) { /* Sending signum == 0 should check if the * child process is still alive, not kill it. */ - err = uv_kill(process.pid, 0); - ASSERT(err.code == UV_OK); + r = uv_kill(process.pid, 0); + ASSERT(r == 0); /* Kill the process. */ - err = uv_kill(process.pid, /* SIGTERM */ 15); - ASSERT(err.code == UV_OK); + r = uv_kill(process.pid, /* SIGTERM */ 15); + ASSERT(r == 0); r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); ASSERT(r == 0); @@ -644,7 +656,7 @@ TEST_IMPL(spawn_detect_pipe_name_collisions_on_windows) { } -uv_err_t make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr); +int make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr); WCHAR* quote_cmd_arg(const WCHAR *source, WCHAR *target); TEST_IMPL(argument_escaping) { @@ -666,7 +678,7 @@ TEST_IMPL(argument_escaping) { size_t total_size = 0; int i; int num_args; - uv_err_t result; + int result; char* verbatim[] = { "cmd.exe", @@ -706,9 +718,9 @@ TEST_IMPL(argument_escaping) { } result = make_program_args(verbatim, 1, &verbatim_output); - ASSERT(result.code == UV_OK); + ASSERT(result == 0); result = make_program_args(verbatim, 0, &non_verbatim_output); - ASSERT(result.code == UV_OK); + ASSERT(result == 0); wprintf(L" verbatim_output: %s\n", verbatim_output); wprintf(L"non_verbatim_output: %s\n", non_verbatim_output); @@ -722,7 +734,7 @@ TEST_IMPL(argument_escaping) { return 0; } -uv_err_t make_program_env(char** env_block, WCHAR** dst_ptr); +int make_program_env(char** env_block, WCHAR** dst_ptr); TEST_IMPL(environment_creation) { int i; @@ -737,7 +749,7 @@ TEST_IMPL(environment_creation) { WCHAR expected[512]; WCHAR* ptr = expected; - uv_err_t result; + int result; WCHAR* str; WCHAR* env; @@ -757,7 +769,7 @@ TEST_IMPL(environment_creation) { *ptr = '\0'; result = make_program_env(environment, &env); - ASSERT(result.code == UV_OK); + ASSERT(result == 0); for (str = env; *str; str += wcslen(str) + 1) { wprintf(L"%s\n", str); @@ -815,14 +827,14 @@ TEST_IMPL(spawn_setuid_fails) { struct passwd* pw; pw = getpwnam("nobody"); ASSERT(pw != NULL); - r = setuid(pw->pw_uid); - ASSERT(r == 0); + ASSERT(0 == setgid(pw->pw_gid)); + ASSERT(0 == setuid(pw->pw_uid)); } - init_process_options("spawn_helper1", exit_cb_failure_expected); + init_process_options("spawn_helper1", exit_cb_expect_eperm); options.flags |= UV_PROCESS_SETUID; - options.uid = (uv_uid_t) -42424242; + options.uid = 0; r = uv_spawn(uv_default_loop(), &process, options); ASSERT(r == 0); @@ -847,14 +859,14 @@ TEST_IMPL(spawn_setgid_fails) { struct passwd* pw; pw = getpwnam("nobody"); ASSERT(pw != NULL); - r = setuid(pw->pw_uid); - ASSERT(r == 0); + ASSERT(0 == setgid(pw->pw_gid)); + ASSERT(0 == setuid(pw->pw_uid)); } - init_process_options("spawn_helper1", exit_cb_failure_expected); + init_process_options("spawn_helper1", exit_cb_expect_eperm); options.flags |= UV_PROCESS_SETGID; - options.gid = (uv_gid_t) -42424242; + options.gid = 0; r = uv_spawn(uv_default_loop(), &process, options); ASSERT(r == 0); @@ -889,8 +901,7 @@ TEST_IMPL(spawn_setuid_fails) { options.uid = (uv_uid_t) -42424242; r = uv_spawn(uv_default_loop(), &process, options); - ASSERT(r == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_ENOTSUP); + ASSERT(r == UV_ENOTSUP); r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); ASSERT(r == 0); @@ -911,8 +922,7 @@ TEST_IMPL(spawn_setgid_fails) { options.gid = (uv_gid_t) -42424242; r = uv_spawn(uv_default_loop(), &process, options); - ASSERT(r == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_ENOTSUP); + ASSERT(r == UV_ENOTSUP); r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); ASSERT(r == 0); diff --git a/deps/uv/test/test-stdio-over-pipes.c b/deps/uv/test/test-stdio-over-pipes.c index 923bf76..99b0916 100644 --- a/deps/uv/test/test-stdio-over-pipes.c +++ b/deps/uv/test/test-stdio-over-pipes.c @@ -79,8 +79,7 @@ static uv_buf_t on_alloc(uv_handle_t* handle, size_t suggested_size) { static void after_write(uv_write_t* req, int status) { if (status) { - uv_err_t err = uv_last_error(loop); - fprintf(stderr, "uv_write error: %s\n", uv_strerror(err)); + fprintf(stderr, "uv_write error: %s\n", uv_strerror(status)); ASSERT(0); } @@ -96,7 +95,7 @@ static void on_read(uv_stream_t* tcp, ssize_t nread, uv_buf_t rdbuf) { uv_buf_t wrbuf; int r; - ASSERT(nread > 0 || uv_last_error(uv_default_loop()).code == UV_EOF); + ASSERT(nread > 0 || nread == UV_EOF); if (nread > 0) { output_used += nread; diff --git a/deps/uv/test/test-tcp-bind-error.c b/deps/uv/test/test-tcp-bind-error.c index 4249535..2b2106e 100644 --- a/deps/uv/test/test-tcp-bind-error.c +++ b/deps/uv/test/test-tcp-bind-error.c @@ -52,9 +52,7 @@ TEST_IMPL(tcp_bind_error_addrinuse) { r = uv_listen((uv_stream_t*)&server1, 128, NULL); ASSERT(r == 0); r = uv_listen((uv_stream_t*)&server2, 128, NULL); - ASSERT(r == -1); - - ASSERT(uv_last_error(uv_default_loop()).code == UV_EADDRINUSE); + ASSERT(r == UV_EADDRINUSE); uv_close((uv_handle_t*)&server1, close_cb); uv_close((uv_handle_t*)&server2, close_cb); @@ -75,12 +73,10 @@ TEST_IMPL(tcp_bind_error_addrnotavail_1) { r = uv_tcp_init(uv_default_loop(), &server); ASSERT(r == 0); - r = uv_tcp_bind(&server, addr); /* It seems that Linux is broken here - bind succeeds. */ - if (r == -1) { - ASSERT(uv_last_error(uv_default_loop()).code == UV_EADDRNOTAVAIL); - } + r = uv_tcp_bind(&server, addr); + ASSERT(r == 0 || r == UV_EADDRNOTAVAIL); uv_close((uv_handle_t*)&server, close_cb); @@ -101,8 +97,7 @@ TEST_IMPL(tcp_bind_error_addrnotavail_2) { r = uv_tcp_init(uv_default_loop(), &server); ASSERT(r == 0); r = uv_tcp_bind(&server, addr); - ASSERT(r == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_EADDRNOTAVAIL); + ASSERT(r == UV_EADDRNOTAVAIL); uv_close((uv_handle_t*)&server, close_cb); @@ -126,9 +121,7 @@ TEST_IMPL(tcp_bind_error_fault) { r = uv_tcp_init(uv_default_loop(), &server); ASSERT(r == 0); r = uv_tcp_bind(&server, *garbage_addr); - ASSERT(r == -1); - - ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL); + ASSERT(r == UV_EINVAL); uv_close((uv_handle_t*)&server, close_cb); @@ -153,9 +146,7 @@ TEST_IMPL(tcp_bind_error_inval) { r = uv_tcp_bind(&server, addr1); ASSERT(r == 0); r = uv_tcp_bind(&server, addr2); - ASSERT(r == -1); - - ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL); + ASSERT(r == UV_EINVAL); uv_close((uv_handle_t*)&server, close_cb); diff --git a/deps/uv/test/test-tcp-bind6-error.c b/deps/uv/test/test-tcp-bind6-error.c index 61afc7f..46e147b 100644 --- a/deps/uv/test/test-tcp-bind6-error.c +++ b/deps/uv/test/test-tcp-bind6-error.c @@ -52,9 +52,7 @@ TEST_IMPL(tcp_bind6_error_addrinuse) { r = uv_listen((uv_stream_t*)&server1, 128, NULL); ASSERT(r == 0); r = uv_listen((uv_stream_t*)&server2, 128, NULL); - ASSERT(r == -1); - - ASSERT(uv_last_error(uv_default_loop()).code == UV_EADDRINUSE); + ASSERT(r == UV_EADDRINUSE); uv_close((uv_handle_t*)&server1, close_cb); uv_close((uv_handle_t*)&server2, close_cb); @@ -76,8 +74,7 @@ TEST_IMPL(tcp_bind6_error_addrnotavail) { r = uv_tcp_init(uv_default_loop(), &server); ASSERT(r == 0); r = uv_tcp_bind6(&server, addr); - ASSERT(r == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_EADDRNOTAVAIL); + ASSERT(r == UV_EADDRNOTAVAIL); uv_close((uv_handle_t*)&server, close_cb); @@ -101,9 +98,7 @@ TEST_IMPL(tcp_bind6_error_fault) { r = uv_tcp_init(uv_default_loop(), &server); ASSERT(r == 0); r = uv_tcp_bind6(&server, *garbage_addr); - ASSERT(r == -1); - - ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL); + ASSERT(r == UV_EINVAL); uv_close((uv_handle_t*)&server, close_cb); @@ -128,9 +123,7 @@ TEST_IMPL(tcp_bind6_error_inval) { r = uv_tcp_bind6(&server, addr1); ASSERT(r == 0); r = uv_tcp_bind6(&server, addr2); - ASSERT(r == -1); - - ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL); + ASSERT(r == UV_EINVAL); uv_close((uv_handle_t*)&server, close_cb); diff --git a/deps/uv/test/test-tcp-close-while-connecting.c b/deps/uv/test/test-tcp-close-while-connecting.c index d19dcbf..d3d12fd 100644 --- a/deps/uv/test/test-tcp-close-while-connecting.c +++ b/deps/uv/test/test-tcp-close-while-connecting.c @@ -37,8 +37,7 @@ static void close_cb(uv_handle_t* handle) { static void connect_cb(uv_connect_t* req, int status) { - ASSERT(status == -1); - ASSERT(uv_last_error(req->handle->loop).code == UV_ECANCELED); + ASSERT(status == UV_ECANCELED); uv_timer_stop(&timer2_handle); connect_cb_called++; } diff --git a/deps/uv/test/test-tcp-connect-error-after-write.c b/deps/uv/test/test-tcp-connect-error-after-write.c index e982c90..4c8fdc2 100644 --- a/deps/uv/test/test-tcp-connect-error-after-write.c +++ b/deps/uv/test/test-tcp-connect-error-after-write.c @@ -37,14 +37,14 @@ static void close_cb(uv_handle_t* handle) { static void connect_cb(uv_connect_t* req, int status) { - ASSERT(status == -1); + ASSERT(status < 0); connect_cb_called++; uv_close((uv_handle_t*)req->handle, close_cb); } static void write_cb(uv_write_t* req, int status) { - ASSERT(status == -1); + ASSERT(status < 0); write_cb_called++; } @@ -75,8 +75,7 @@ TEST_IMPL(tcp_connect_error_after_write) { ASSERT(r == 0); r = uv_write(&write_req, (uv_stream_t*)&conn, &buf, 1, write_cb); - ASSERT(r == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_EBADF); + ASSERT(r == UV_EBADF); r = uv_tcp_connect(&connect_req, &conn, addr, connect_cb); ASSERT(r == 0); diff --git a/deps/uv/test/test-tcp-connect-error.c b/deps/uv/test/test-tcp-connect-error.c index b39eab9..836e62f 100644 --- a/deps/uv/test/test-tcp-connect-error.c +++ b/deps/uv/test/test-tcp-connect-error.c @@ -55,9 +55,7 @@ TEST_IMPL(tcp_connect_error_fault) { r = uv_tcp_init(uv_default_loop(), &server); ASSERT(r == 0); r = uv_tcp_connect(&req, &server, *garbage_addr, connect_cb); - ASSERT(r == -1); - - ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL); + ASSERT(r == UV_EINVAL); uv_close((uv_handle_t*)&server, close_cb); diff --git a/deps/uv/test/test-tcp-connect-timeout.c b/deps/uv/test/test-tcp-connect-timeout.c index 0569b6b..8be4c64 100644 --- a/deps/uv/test/test-tcp-connect-timeout.c +++ b/deps/uv/test/test-tcp-connect-timeout.c @@ -39,7 +39,7 @@ static void close_cb(uv_handle_t* handle); static void connect_cb(uv_connect_t* req, int status) { ASSERT(req == &connect_req); - ASSERT(status == -1); + ASSERT(status == UV_ECANCELED); connect_cb_called++; } diff --git a/deps/uv/test/test-tcp-connect6-error.c b/deps/uv/test/test-tcp-connect6-error.c index 65f2f80..ad5d2e4 100644 --- a/deps/uv/test/test-tcp-connect6-error.c +++ b/deps/uv/test/test-tcp-connect6-error.c @@ -53,9 +53,7 @@ TEST_IMPL(tcp_connect6_error_fault) { r = uv_tcp_init(uv_default_loop(), &server); ASSERT(r == 0); r = uv_tcp_connect6(&req, &server, *garbage_addr, connect_cb); - ASSERT(r == -1); - - ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL); + ASSERT(r == UV_EINVAL); uv_close((uv_handle_t*)&server, close_cb); diff --git a/deps/uv/test/test-tcp-open.c b/deps/uv/test/test-tcp-open.c index fca3e11..cd69035 100644 --- a/deps/uv/test/test-tcp-open.c +++ b/deps/uv/test/test-tcp-open.c @@ -101,7 +101,7 @@ static void read_cb(uv_stream_t* tcp, ssize_t nread, uv_buf_t buf) { ASSERT(memcmp("PING", buf.base, nread) == 0); } else { - ASSERT(uv_last_error(uv_default_loop()).code == UV_EOF); + ASSERT(nread == UV_EOF); printf("GOT EOF\n"); uv_close((uv_handle_t*)tcp, close_cb); } @@ -112,8 +112,7 @@ static void write_cb(uv_write_t* req, int status) { ASSERT(req != NULL); if (status) { - uv_err_t err = uv_last_error(uv_default_loop()); - fprintf(stderr, "uv_write error: %s\n", uv_strerror(err)); + fprintf(stderr, "uv_write error: %s\n", uv_strerror(status)); ASSERT(0); } diff --git a/deps/uv/test/test-tcp-write-to-half-open-connection.c b/deps/uv/test/test-tcp-write-to-half-open-connection.c index 0447ac8..e3557bc 100644 --- a/deps/uv/test/test-tcp-write-to-half-open-connection.c +++ b/deps/uv/test/test-tcp-write-to-half-open-connection.c @@ -72,10 +72,9 @@ static uv_buf_t alloc_cb(uv_handle_t* handle, size_t suggested_size) { static void read_cb(uv_stream_t* stream, ssize_t nread, uv_buf_t buf) { - if (nread == -1) { - fprintf(stderr, "read_cb error: %s\n", uv_err_name(uv_last_error(stream->loop))); - ASSERT(uv_last_error(stream->loop).code == UV_ECONNRESET || - uv_last_error(stream->loop).code == UV_EOF); + if (nread < 0) { + fprintf(stderr, "read_cb error: %s\n", uv_err_name(nread)); + ASSERT(nread == UV_ECONNRESET || nread == UV_EOF); uv_close((uv_handle_t*)&tcp_server, NULL); uv_close((uv_handle_t*)&tcp_peer, NULL); diff --git a/deps/uv/test/test-tcp-writealot.c b/deps/uv/test/test-tcp-writealot.c index ab8c46a..e83aeb9 100644 --- a/deps/uv/test/test-tcp-writealot.c +++ b/deps/uv/test/test-tcp-writealot.c @@ -83,7 +83,7 @@ static void read_cb(uv_stream_t* tcp, ssize_t nread, uv_buf_t buf) { bytes_received_done += nread; } else { - ASSERT(uv_last_error(uv_default_loop()).code == UV_EOF); + ASSERT(nread == UV_EOF); printf("GOT EOF\n"); uv_close((uv_handle_t*)tcp, close_cb); } @@ -96,8 +96,7 @@ static void write_cb(uv_write_t* req, int status) { ASSERT(req != NULL); if (status) { - uv_err_t err = uv_last_error(uv_default_loop()); - fprintf(stderr, "uv_write error: %s\n", uv_strerror(err)); + fprintf(stderr, "uv_write error: %s\n", uv_strerror(status)); ASSERT(0); } diff --git a/deps/uv/test/test-threadpool-cancel.c b/deps/uv/test/test-threadpool-cancel.c index 0a21357..1443773 100644 --- a/deps/uv/test/test-threadpool-cancel.c +++ b/deps/uv/test/test-threadpool-cancel.c @@ -111,7 +111,7 @@ static void cleanup_threadpool(void) { static void fs_cb(uv_fs_t* req) { - ASSERT(req->errorno == UV_ECANCELED); + ASSERT(req->result == UV_ECANCELED); uv_fs_req_cleanup(req); fs_cb_called++; } @@ -120,8 +120,7 @@ static void fs_cb(uv_fs_t* req) { static void getaddrinfo_cb(uv_getaddrinfo_t* req, int status, struct addrinfo* res) { - ASSERT(UV_ECANCELED == uv_last_error(req->loop).code); - ASSERT(status == -1); + ASSERT(status == UV_EAI_CANCELED); ASSERT(res == NULL); uv_freeaddrinfo(res); /* Should not crash. */ getaddrinfo_cb_called++; @@ -134,8 +133,7 @@ static void work2_cb(uv_work_t* req) { static void done2_cb(uv_work_t* req, int status) { - ASSERT(uv_last_error(req->loop).code == UV_ECANCELED); - ASSERT(status == -1); + ASSERT(status == UV_ECANCELED); done2_cb_called++; } diff --git a/deps/uv/test/test-threadpool.c b/deps/uv/test/test-threadpool.c index 8d09649..e3d17d7 100644 --- a/deps/uv/test/test-threadpool.c +++ b/deps/uv/test/test-threadpool.c @@ -64,10 +64,9 @@ TEST_IMPL(threadpool_queue_work_einval) { work_req.data = &data; r = uv_queue_work(uv_default_loop(), &work_req, NULL, after_work_cb); - ASSERT(r == -1); + ASSERT(r == UV_EINVAL); uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL); ASSERT(work_cb_count == 0); ASSERT(after_work_cb_count == 0); diff --git a/deps/uv/test/test-timer-again.c b/deps/uv/test/test-timer-again.c index 536ac44..2616a13 100644 --- a/deps/uv/test/test-timer-again.c +++ b/deps/uv/test/test-timer-again.c @@ -102,8 +102,7 @@ TEST_IMPL(timer_again) { r = uv_timer_init(uv_default_loop(), &dummy); ASSERT(r == 0); r = uv_timer_again(&dummy); - ASSERT(r == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL); + ASSERT(r == UV_EINVAL); uv_unref((uv_handle_t*)&dummy); /* Start timer repeat_1. */ diff --git a/deps/uv/test/test-tty.c b/deps/uv/test/test-tty.c index f3003ef..c26f7fa 100644 --- a/deps/uv/test/test-tty.c +++ b/deps/uv/test/test-tty.c @@ -81,10 +81,10 @@ TEST_IMPL(tty) { ASSERT(UV_TTY == uv_guess_handle(ttyin_fd)); ASSERT(UV_TTY == uv_guess_handle(ttyout_fd)); - r = uv_tty_init(uv_default_loop(), &tty_in, ttyin_fd, 1); + r = uv_tty_init(uv_default_loop(), &tty_in, ttyin_fd, 1); /* Readable. */ ASSERT(r == 0); - r = uv_tty_init(uv_default_loop(), &tty_out, ttyout_fd, 2); + r = uv_tty_init(uv_default_loop(), &tty_out, ttyout_fd, 0); /* Writable. */ ASSERT(r == 0); r = uv_tty_get_winsize(&tty_out, &width, &height); diff --git a/deps/uv/test/test-udp-dgram-too-big.c b/deps/uv/test/test-udp-dgram-too-big.c index f343076..bb8cc6b 100644 --- a/deps/uv/test/test-udp-dgram-too-big.c +++ b/deps/uv/test/test-udp-dgram-too-big.c @@ -49,8 +49,7 @@ static void send_cb(uv_udp_send_t* req, int status) { CHECK_REQ(req); CHECK_HANDLE(req->handle); - ASSERT(status == -1); - ASSERT(uv_last_error(uv_default_loop()).code == UV_EMSGSIZE); + ASSERT(status == UV_EMSGSIZE); uv_close((uv_handle_t*)req->handle, close_cb); send_cb_called++; diff --git a/deps/uv/test/test-udp-options.c b/deps/uv/test/test-udp-options.c index 9d26d81..610892f 100644 --- a/deps/uv/test/test-udp-options.c +++ b/deps/uv/test/test-udp-options.c @@ -57,8 +57,7 @@ TEST_IMPL(udp_options) { for (i = 0; i < (int) ARRAY_SIZE(invalid_ttls); i++) { r = uv_udp_set_ttl(&h, invalid_ttls[i]); - ASSERT(r == -1); - ASSERT(uv_last_error(loop).code == UV_EINVAL); + ASSERT(r == UV_EINVAL); } r = uv_udp_set_multicast_loop(&h, 1); @@ -75,8 +74,7 @@ TEST_IMPL(udp_options) { /* anything >255 should fail */ r = uv_udp_set_multicast_ttl(&h, 256); - ASSERT(r == -1); - ASSERT(uv_last_error(loop).code == UV_EINVAL); + ASSERT(r == UV_EINVAL); /* don't test ttl=-1, it's a valid value on some platforms */ r = uv_run(loop, UV_RUN_DEFAULT); diff --git a/deps/uv/uv.gyp b/deps/uv/uv.gyp index e000b18..0e377d1 100644 --- a/deps/uv/uv.gyp +++ b/deps/uv/uv.gyp @@ -35,7 +35,6 @@ 'type': '<(library)', 'include_dirs': [ 'include', - 'include/uv-private', 'src/', ], 'direct_dependent_settings': { @@ -61,7 +60,8 @@ 'sources': [ 'common.gypi', 'include/uv.h', - 'include/uv-private/tree.h', + 'include/tree.h', + 'include/uv-errno.h', 'src/fs-poll.c', 'src/inet.c', 'src/queue.h', @@ -76,7 +76,7 @@ '_GNU_SOURCE', ], 'sources': [ - 'include/uv-private/uv-win.h', + 'include/uv-win.h', 'src/win/async.c', 'src/win/atomicops-inl.h', 'src/win/core.c', @@ -129,15 +129,14 @@ '-Wno-unused-parameter', ], 'sources': [ - 'include/uv-private/uv-unix.h', - 'include/uv-private/uv-linux.h', - 'include/uv-private/uv-sunos.h', - 'include/uv-private/uv-darwin.h', - 'include/uv-private/uv-bsd.h', + 'include/uv-unix.h', + 'include/uv-linux.h', + 'include/uv-sunos.h', + 'include/uv-darwin.h', + 'include/uv-bsd.h', 'src/unix/async.c', 'src/unix/core.c', 'src/unix/dl.c', - 'src/unix/error.c', 'src/unix/fs.c', 'src/unix/getaddrinfo.c', 'src/unix/internal.h', @@ -368,6 +367,7 @@ 'test/test-barrier.c', 'test/test-condvar.c', 'test/test-timer-again.c', + 'test/test-timer-from-check.c', 'test/test-timer.c', 'test/test-tty.c', 'test/test-udp-dgram-too-big.c', @@ -378,6 +378,7 @@ 'test/test-udp-multicast-join.c', 'test/test-dlerror.c', 'test/test-udp-multicast-ttl.c', + 'test/test-ip6-addr.c', ], 'conditions': [ [ 'OS=="win"', { -- 2.7.4