forked from cory/tildefriends
		
	libuv 1.47.0.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4615 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		
							
								
								
									
										1
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Makefile
									
									
									
									
									
								
							@@ -355,6 +355,7 @@ $(UV_OBJS): CFLAGS += \
 | 
			
		||||
	-Wno-incompatible-pointer-types \
 | 
			
		||||
	-Wno-maybe-uninitialized \
 | 
			
		||||
	-Wno-sign-compare \
 | 
			
		||||
	-Wno-unused-but-set-parameter \
 | 
			
		||||
	-Wno-unused-but-set-variable \
 | 
			
		||||
	-Wno-unused-result \
 | 
			
		||||
	-Wno-unused-variable
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								deps/libuv/.github/workflows/CI-unix.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								deps/libuv/.github/workflows/CI-unix.yml
									
									
									
									
										vendored
									
									
								
							@@ -125,7 +125,7 @@ jobs:
 | 
			
		||||
        # this ensure install latest qemu on ubuntu, apt get version is old
 | 
			
		||||
        env:
 | 
			
		||||
          QEMU_SRC: "http://archive.ubuntu.com/ubuntu/pool/universe/q/qemu"
 | 
			
		||||
          QEMU_VER: "qemu-user-static_7\\.0+dfsg-.*_amd64.deb$"
 | 
			
		||||
          QEMU_VER: "qemu-user-static_7\\.2+dfsg-.*_amd64.deb$"
 | 
			
		||||
        run: |
 | 
			
		||||
          DEB=`curl -s $QEMU_SRC/ | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | grep $QEMU_VER | tail -1`
 | 
			
		||||
          wget $QEMU_SRC/$DEB
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								deps/libuv/.github/workflows/CI-win.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								deps/libuv/.github/workflows/CI-win.yml
									
									
									
									
										vendored
									
									
								
							@@ -26,6 +26,8 @@ jobs:
 | 
			
		||||
          - {toolchain: Visual Studio 17 2022, arch: Win32, server: 2022}
 | 
			
		||||
          - {toolchain: Visual Studio 17 2022, arch: x64, server: 2022}
 | 
			
		||||
          - {toolchain: Visual Studio 17 2022, arch: x64, server: 2022, config: ASAN}
 | 
			
		||||
          - {toolchain: Visual Studio 17 2022, arch: x64, server: 2022, config: UBSAN}
 | 
			
		||||
          - {toolchain: Visual Studio 17 2022, arch: arm64, server: 2022}
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v2
 | 
			
		||||
      - name: Envinfo
 | 
			
		||||
@@ -35,30 +37,33 @@ jobs:
 | 
			
		||||
        run:
 | 
			
		||||
          cmake -S . -B build -DBUILD_TESTING=ON
 | 
			
		||||
            -G "${{ matrix.config.toolchain }}" -A ${{ matrix.config.arch }}
 | 
			
		||||
            ${{ matrix.config.config == 'ASAN' && '-DASAN=on -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded' || '' }}
 | 
			
		||||
            ${{ matrix.config.config == 'ASAN' && '-DASAN=on -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded' ||
 | 
			
		||||
                matrix.config.config == 'UBSAN' && '-DUBSAN=on' || '' }}
 | 
			
		||||
 | 
			
		||||
          cmake --build build --config RelWithDebInfo
 | 
			
		||||
 | 
			
		||||
          ls -l build
 | 
			
		||||
      - name: platform_output
 | 
			
		||||
        if: ${{ matrix.config.arch != 'arm64' }}
 | 
			
		||||
        shell: cmd
 | 
			
		||||
        run:
 | 
			
		||||
          build\\RelWithDebInfo\\uv_run_tests.exe platform_output
 | 
			
		||||
      - name: platform_output_a
 | 
			
		||||
        if: ${{ matrix.config.arch != 'arm64' }}
 | 
			
		||||
        shell: cmd
 | 
			
		||||
        run:
 | 
			
		||||
          build\\RelWithDebInfo\\uv_run_tests_a.exe platform_output
 | 
			
		||||
      - name: Test
 | 
			
		||||
        # only valid with libuv-master with the fix for
 | 
			
		||||
        # https://github.com/libuv/leps/blob/master/005-windows-handles-not-fd.md
 | 
			
		||||
        if: ${{ matrix.config.config != 'ASAN' }}
 | 
			
		||||
        if: ${{ matrix.config.config != 'ASAN' && matrix.config.arch != 'arm64' }}
 | 
			
		||||
        shell: cmd
 | 
			
		||||
        run:
 | 
			
		||||
          cd build
 | 
			
		||||
 | 
			
		||||
          ctest -C RelWithDebInfo -V
 | 
			
		||||
      - name: Test only static
 | 
			
		||||
        if: ${{ matrix.config.config == 'ASAN' }}
 | 
			
		||||
        if: ${{ matrix.config.config == 'ASAN' && matrix.config.arch != 'arm64' }}
 | 
			
		||||
        shell: cmd
 | 
			
		||||
        run:
 | 
			
		||||
          build\\RelWithDebInfo\\uv_run_tests_a.exe
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										63
									
								
								deps/libuv/.github/workflows/sanitizer.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										63
									
								
								deps/libuv/.github/workflows/sanitizer.yml
									
									
									
									
										vendored
									
									
								
							@@ -13,7 +13,7 @@ on:
 | 
			
		||||
      - master
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  sanitizers:
 | 
			
		||||
  sanitizers-linux:
 | 
			
		||||
    runs-on: ubuntu-22.04
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v2
 | 
			
		||||
@@ -60,3 +60,64 @@ jobs:
 | 
			
		||||
      - name: UBSAN Test
 | 
			
		||||
        run: |
 | 
			
		||||
          ./build-ubsan/uv_run_tests_a
 | 
			
		||||
 | 
			
		||||
  sanitizers-macos:
 | 
			
		||||
    runs-on: macos-11
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v2
 | 
			
		||||
 | 
			
		||||
      - name: Envinfo
 | 
			
		||||
        run: npx envinfo
 | 
			
		||||
 | 
			
		||||
      - name: ASAN Build
 | 
			
		||||
        run: |
 | 
			
		||||
          mkdir build-asan
 | 
			
		||||
          (cd build-asan && cmake .. -DBUILD_TESTING=ON -DASAN=ON -DCMAKE_BUILD_TYPE=Debug)
 | 
			
		||||
          cmake --build build-asan
 | 
			
		||||
      - name: ASAN Test
 | 
			
		||||
        run: |
 | 
			
		||||
          ./build-asan/uv_run_tests_a
 | 
			
		||||
 | 
			
		||||
      - name: TSAN Build
 | 
			
		||||
        run: |
 | 
			
		||||
          mkdir build-tsan
 | 
			
		||||
          (cd build-tsan && cmake .. -DBUILD_TESTING=ON -DTSAN=ON -DCMAKE_BUILD_TYPE=Release)
 | 
			
		||||
          cmake --build build-tsan
 | 
			
		||||
      - name: TSAN Test
 | 
			
		||||
        run: |
 | 
			
		||||
          ./build-tsan/uv_run_tests_a
 | 
			
		||||
 | 
			
		||||
      - name: UBSAN Build
 | 
			
		||||
        run: |
 | 
			
		||||
          mkdir build-ubsan
 | 
			
		||||
          (cd build-ubsan && cmake .. -DBUILD_TESTING=ON -DUBSAN=ON -DCMAKE_BUILD_TYPE=Debug)
 | 
			
		||||
          cmake --build build-ubsan
 | 
			
		||||
      - name: UBSAN Test
 | 
			
		||||
        run: |
 | 
			
		||||
          ./build-ubsan/uv_run_tests_a
 | 
			
		||||
 | 
			
		||||
  sanitizers-windows:
 | 
			
		||||
    runs-on: windows-2022
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v2
 | 
			
		||||
      - name: Setup
 | 
			
		||||
        run: |
 | 
			
		||||
          choco install ninja
 | 
			
		||||
 | 
			
		||||
      # Note: clang shipped with VS2022 has an issue where the UBSAN runtime doesn't link.
 | 
			
		||||
      - name: Install LLVM and Clang
 | 
			
		||||
        uses: KyleMayes/install-llvm-action@v1
 | 
			
		||||
        with:
 | 
			
		||||
          version: "17"
 | 
			
		||||
 | 
			
		||||
      - name: Envinfo
 | 
			
		||||
        run: npx envinfo
 | 
			
		||||
 | 
			
		||||
      - name: UBSAN Build
 | 
			
		||||
        run: |
 | 
			
		||||
          mkdir build-ubsan
 | 
			
		||||
          cmake -B build-ubsan -G Ninja -DBUILD_TESTING=ON -DUBSAN=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang
 | 
			
		||||
          cmake --build build-ubsan
 | 
			
		||||
      - name: UBSAN Test
 | 
			
		||||
        run: |
 | 
			
		||||
          ./build-ubsan/uv_run_tests_a
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								deps/libuv/AUTHORS
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								deps/libuv/AUTHORS
									
									
									
									
										vendored
									
									
								
							@@ -548,3 +548,15 @@ liuxiang88 <94350585+liuxiang88@users.noreply.github.com>
 | 
			
		||||
Jeffrey H. Johnson <trnsz@pobox.com>
 | 
			
		||||
Abdirahim Musse <33973272+abmusse@users.noreply.github.com>
 | 
			
		||||
小明 <7737673+caobug@users.noreply.github.com>
 | 
			
		||||
Shuduo Sang <sangshuduo@gmail.com>
 | 
			
		||||
Keith Winstein <keithw@cs.stanford.edu>
 | 
			
		||||
michalbiesek <michalbiesek@gmail.com>
 | 
			
		||||
Alois Klink <alois@aloisklink.com>
 | 
			
		||||
SmorkalovG <smorkalov.g@gmail.com>
 | 
			
		||||
Pleuvens <pleuvens.fervil@gmail.com>
 | 
			
		||||
jolai <58589285+laijonathan@users.noreply.github.com>
 | 
			
		||||
Julien Roncaglia <fox@vbfox.net>
 | 
			
		||||
prubel <paul@rubels.net>
 | 
			
		||||
Per Allansson <65364157+per-allansson@users.noreply.github.com>
 | 
			
		||||
Matheus Izvekov <mizvekov@gmail.com>
 | 
			
		||||
Christian Heimlich <chris@pcserenity.com>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								deps/libuv/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								deps/libuv/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
cmake_minimum_required(VERSION 3.4)
 | 
			
		||||
cmake_minimum_required(VERSION 3.9)
 | 
			
		||||
 | 
			
		||||
if(POLICY CMP0091)
 | 
			
		||||
  cmake_policy(SET CMP0091 NEW) # Enable MSVC_RUNTIME_LIBRARY setting
 | 
			
		||||
@@ -186,7 +186,8 @@ if(WIN32)
 | 
			
		||||
       ws2_32
 | 
			
		||||
       dbghelp
 | 
			
		||||
       ole32
 | 
			
		||||
       uuid)
 | 
			
		||||
       uuid
 | 
			
		||||
       shell32)
 | 
			
		||||
  list(APPEND uv_sources
 | 
			
		||||
       src/win/async.c
 | 
			
		||||
       src/win/core.c
 | 
			
		||||
@@ -477,7 +478,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "OS390")
 | 
			
		||||
endif()
 | 
			
		||||
target_link_libraries(uv_a ${uv_libraries})
 | 
			
		||||
set_target_properties(uv_a PROPERTIES OUTPUT_NAME "uv")
 | 
			
		||||
if(MSVC)
 | 
			
		||||
if(WIN32)
 | 
			
		||||
  set_target_properties(uv_a PROPERTIES PREFIX "lib")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										111
									
								
								deps/libuv/ChangeLog
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										111
									
								
								deps/libuv/ChangeLog
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +1,113 @@
 | 
			
		||||
2023.06.30, Version 1.46.0 (Stable)
 | 
			
		||||
2023.11.06, Version 1.47.0 (Stable)
 | 
			
		||||
 | 
			
		||||
Changes since version 1.46.0:
 | 
			
		||||
 | 
			
		||||
* test: fix license blurb (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* linux: fix harmless warn_unused_result warning (Shuduo Sang)
 | 
			
		||||
 | 
			
		||||
* darwin: fix build warnings (小明)
 | 
			
		||||
 | 
			
		||||
* linux: don't use io_uring on pre-5.10.186 kernels (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* fs: fix WTF-8 decoding issue (Jameson Nash)
 | 
			
		||||
 | 
			
		||||
* test: enable disabled tcp_connect6_error_fault (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* test: enable disabled fs_link (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* test: enable disabled spawn_same_stdout_stderr (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* linux: handle UNAME26 personality (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* build: move cmake_minimum_required version to 3.9 (Keith Winstein)
 | 
			
		||||
 | 
			
		||||
* unix: set ipv6 scope id for link-local addresses (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* unix: match kqueue and epoll code (Trevor Norris)
 | 
			
		||||
 | 
			
		||||
* win,spawn: allow `%PATH%` to be unset (Kyle Edwards)
 | 
			
		||||
 | 
			
		||||
* doc: switch to Furo, a more modern Sphinx theme (Saúl Ibarra Corretgé)
 | 
			
		||||
 | 
			
		||||
* darwin: make TCP_KEEPINTVL and TCP_KEEPCNT available (小明)
 | 
			
		||||
 | 
			
		||||
* win,fs: avoid winapi macro redefinition (Brad King)
 | 
			
		||||
 | 
			
		||||
* linux: add missing riscv syscall numbers (michalbiesek)
 | 
			
		||||
 | 
			
		||||
* doc: fix broken "Shared library" Wikipedia link (Alois Klink)
 | 
			
		||||
 | 
			
		||||
* unix: get mainline kernel version in Ubuntu (Santiago Gimeno)
 | 
			
		||||
 | 
			
		||||
* unix: get mainline kernel version in Debian (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* build: fix qemu install in CI-unix workflow (Santiago Gimeno)
 | 
			
		||||
 | 
			
		||||
* unix: disable io_uring close on selected kernels (Santiago Gimeno)
 | 
			
		||||
 | 
			
		||||
* test: skip tests when ipv6 is not available (Santiago Gimeno)
 | 
			
		||||
 | 
			
		||||
* ibmi: implement ifaddrs, getifaddrs, freeifaddrs (Abdirahim Musse)
 | 
			
		||||
 | 
			
		||||
* unix: reset signal counters after fork (SmorkalovG)
 | 
			
		||||
 | 
			
		||||
* win,process: avoid assert after spawning Store app (Jameson Nash)
 | 
			
		||||
 | 
			
		||||
* unix: remove pread/preadv conditionals (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* unix: remove pwrite/pwritev conditionals (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* darwin: remove workaround for data corruption bug (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* src: default to stream=stderr in handle printer (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* test: switch to new-style ASSERT_EQ macros (Pleuvens)
 | 
			
		||||
 | 
			
		||||
* zos: correctly get cpu model in uv_cpu_info() (jolai)
 | 
			
		||||
 | 
			
		||||
* test: fix get_passwd2 on IBM i (Abdirahim Musse)
 | 
			
		||||
 | 
			
		||||
* unix: don't malloc on sync uv_fs_read (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* freebsd: get fs event path with fcntl(F_KINFO) (David Carlier)
 | 
			
		||||
 | 
			
		||||
* test: switch from ASSERT_* to ASSERT_PTR_* (Pleuvens)
 | 
			
		||||
 | 
			
		||||
* darwin: workaround apple pthread_cond_wait bug (Julien Roncaglia)
 | 
			
		||||
 | 
			
		||||
* doc: uv_close should be called after exit callback (Pleuvens)
 | 
			
		||||
 | 
			
		||||
* test: 192.0.2.0/24 is the actual -TEST-NET-1 (prubel)
 | 
			
		||||
 | 
			
		||||
* unix: add back preadv/pwritev fallback (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* unix: rename variable for consistency (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* unix: merge read/write code into single functions (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* doc: filename arg to uv_fs_event_cb can be NULL (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* build,win: we need to link against shell32.lib (Per Allansson)
 | 
			
		||||
 | 
			
		||||
* unix: no preadv/pwritev workaround if not needed (Jeffrey H. Johnson)
 | 
			
		||||
 | 
			
		||||
* build: add CI for Windows ARM64 (build only) (Per Allansson)
 | 
			
		||||
 | 
			
		||||
* linux: disable io_uring on 32 bits arm systems (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* build: run sanitizers on macos ci (Ben Noordhuis)
 | 
			
		||||
 | 
			
		||||
* misc: export WTF8 conversion utilities (Jameson Nash)
 | 
			
		||||
 | 
			
		||||
* build: fix libuv.a file name for cmake (Jameson Nash)
 | 
			
		||||
 | 
			
		||||
* build: add windows ubsan and clang ci (Matheus Izvekov)
 | 
			
		||||
 | 
			
		||||
* win: improve accuracy of ProductName between arch (Christian Heimlich)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
2023.06.30, Version 1.46.0 (Stable), f0bb7e40f0508bedf6fad33769b3f87bb8aedfa6
 | 
			
		||||
 | 
			
		||||
Changes since version 1.45.0:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								deps/libuv/configure.ac
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								deps/libuv/configure.ac
									
									
									
									
										vendored
									
									
								
							@@ -13,7 +13,7 @@
 | 
			
		||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
 | 
			
		||||
AC_PREREQ(2.57)
 | 
			
		||||
AC_INIT([libuv], [1.46.0], [https://github.com/libuv/libuv/issues])
 | 
			
		||||
AC_INIT([libuv], [1.47.0], [https://github.com/libuv/libuv/issues])
 | 
			
		||||
AC_CONFIG_MACRO_DIR([m4])
 | 
			
		||||
m4_include([m4/libuv-extra-automake-flags.m4])
 | 
			
		||||
m4_include([m4/as_case.m4])
 | 
			
		||||
@@ -74,7 +74,7 @@ AM_CONDITIONAL([OS400],    [AS_CASE([$host_os],[os400],         [true], [false])
 | 
			
		||||
AM_CONDITIONAL([SUNOS],    [AS_CASE([$host_os],[solaris*],      [true], [false])])
 | 
			
		||||
AM_CONDITIONAL([WINNT],    [AS_CASE([$host_os],[mingw*],        [true], [false])])
 | 
			
		||||
AS_CASE([$host_os],[mingw*], [
 | 
			
		||||
    LIBS="$LIBS -lws2_32 -lpsapi -liphlpapi -lshell32 -luserenv -luser32 -ldbghelp -lole32 -luuid"
 | 
			
		||||
    LIBS="$LIBS -lws2_32 -lpsapi -liphlpapi -lshell32 -luserenv -luser32 -ldbghelp -lole32 -luuid -lshell32"
 | 
			
		||||
])
 | 
			
		||||
AS_CASE([$host_os], [solaris2.10], [
 | 
			
		||||
    CFLAGS="$CFLAGS -DSUNOS_NO_IFADDRS"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								deps/libuv/docs/requirements.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								deps/libuv/docs/requirements.txt
									
									
									
									
										vendored
									
									
								
							@@ -1,27 +1,36 @@
 | 
			
		||||
# primary
 | 
			
		||||
sphinx==6.1.3
 | 
			
		||||
furo==2023.5.20
 | 
			
		||||
Sphinx==6.1.3
 | 
			
		||||
 | 
			
		||||
# dependencies
 | 
			
		||||
alabaster==0.7.13
 | 
			
		||||
Babel==2.11.0
 | 
			
		||||
beautifulsoup4==4.12.2
 | 
			
		||||
certifi==2022.12.7
 | 
			
		||||
charset-normalizer==3.0.1
 | 
			
		||||
colorama==0.4.6
 | 
			
		||||
docutils==0.19
 | 
			
		||||
idna==3.4
 | 
			
		||||
imagesize==1.4.1
 | 
			
		||||
importlib-metadata==6.0.0
 | 
			
		||||
Jinja2==3.1.2
 | 
			
		||||
livereload==2.6.3
 | 
			
		||||
MarkupSafe==2.1.2
 | 
			
		||||
packaging==23.0
 | 
			
		||||
Pygments==2.14.0
 | 
			
		||||
pytz==2022.7.1
 | 
			
		||||
requests==2.28.2
 | 
			
		||||
six==1.16.0
 | 
			
		||||
snowballstemmer==2.2.0
 | 
			
		||||
sphinxcontrib-applehelp==1.0.3
 | 
			
		||||
soupsieve==2.4.1
 | 
			
		||||
sphinx-autobuild==2021.3.14
 | 
			
		||||
sphinx-basic-ng==1.0.0b2
 | 
			
		||||
sphinxcontrib-devhelp==1.0.2
 | 
			
		||||
sphinxcontrib-htmlhelp==2.0.0
 | 
			
		||||
sphinxcontrib-jsmath==1.0.1
 | 
			
		||||
sphinxcontrib-qthelp==1.0.3
 | 
			
		||||
sphinxcontrib-serializinghtml==1.1.5
 | 
			
		||||
sphinxcontrib.applehelp==1.0.3
 | 
			
		||||
tornado==6.3.2
 | 
			
		||||
urllib3==1.26.14
 | 
			
		||||
zipp==3.11.0
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								deps/libuv/docs/src/conf.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								deps/libuv/docs/src/conf.py
									
									
									
									
										vendored
									
									
								
							@@ -118,7 +118,7 @@ pygments_style = 'sphinx'
 | 
			
		||||
 | 
			
		||||
# The theme to use for HTML and HTML Help pages.  See the documentation for
 | 
			
		||||
# a list of builtin themes.
 | 
			
		||||
html_theme = 'nature'
 | 
			
		||||
html_theme = 'furo'
 | 
			
		||||
 | 
			
		||||
# Theme options are theme-specific and customize the look and feel of a theme
 | 
			
		||||
# further.  For a list of options available for each theme, see the
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								deps/libuv/docs/src/fs_event.rst
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								deps/libuv/docs/src/fs_event.rst
									
									
									
									
										vendored
									
									
								
							@@ -39,8 +39,12 @@ Data types
 | 
			
		||||
.. c:type:: void (*uv_fs_event_cb)(uv_fs_event_t* handle, const char* filename, int events, int status)
 | 
			
		||||
 | 
			
		||||
    Callback passed to :c:func:`uv_fs_event_start` which will be called repeatedly
 | 
			
		||||
    after the handle is started. If the handle was started with a directory the
 | 
			
		||||
    `filename` parameter will be a relative path to a file contained in the directory.
 | 
			
		||||
    after the handle is started.
 | 
			
		||||
 | 
			
		||||
    If the handle was started with a directory the `filename` parameter will
 | 
			
		||||
    be a relative path to a file contained in the directory, or `NULL` if the
 | 
			
		||||
    file name cannot be determined.
 | 
			
		||||
 | 
			
		||||
    The `events` parameter is an ORed mask of :c:type:`uv_fs_event` elements.
 | 
			
		||||
 | 
			
		||||
.. c:type:: uv_fs_event
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								deps/libuv/docs/src/guide/processes.rst
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								deps/libuv/docs/src/guide/processes.rst
									
									
									
									
										vendored
									
									
								
							@@ -53,6 +53,8 @@ ID of the child process.
 | 
			
		||||
The exit callback will be invoked with the *exit status* and the type of *signal*
 | 
			
		||||
which caused the exit.
 | 
			
		||||
 | 
			
		||||
Note that it is important **not** to call ``uv_close`` before the exit callback.
 | 
			
		||||
 | 
			
		||||
.. rubric:: spawn/main.c
 | 
			
		||||
.. literalinclude:: ../../code/spawn/main.c
 | 
			
		||||
    :language: c
 | 
			
		||||
@@ -126,7 +128,8 @@ of ``uv_kill`` is::
 | 
			
		||||
 | 
			
		||||
For processes started using libuv, you may use ``uv_process_kill`` instead,
 | 
			
		||||
which accepts the ``uv_process_t`` watcher as the first argument, rather than
 | 
			
		||||
the pid. In this case, **remember to call** ``uv_close`` on the watcher.
 | 
			
		||||
the pid. In this case, **remember to call** ``uv_close`` on the watcher _after_
 | 
			
		||||
the exit callback has been called.
 | 
			
		||||
 | 
			
		||||
Signals
 | 
			
		||||
-------
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								deps/libuv/docs/src/guide/utilities.rst
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								deps/libuv/docs/src/guide/utilities.rst
									
									
									
									
										vendored
									
									
								
							@@ -363,7 +363,7 @@ to get the error message.
 | 
			
		||||
argument. ``init_plugin_function`` is a function pointer to the sort of
 | 
			
		||||
function we are looking for in the application's plugins.
 | 
			
		||||
 | 
			
		||||
.. _shared libraries: https://en.wikipedia.org/wiki/Shared_library#Shared_libraries
 | 
			
		||||
.. _shared libraries: https://en.wikipedia.org/wiki/Shared_library
 | 
			
		||||
 | 
			
		||||
TTY
 | 
			
		||||
---
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										47
									
								
								deps/libuv/docs/src/misc.rst
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										47
									
								
								deps/libuv/docs/src/misc.rst
									
									
									
									
										vendored
									
									
								
							@@ -839,3 +839,50 @@ API
 | 
			
		||||
    Causes the calling thread to sleep for `msec` milliseconds.
 | 
			
		||||
 | 
			
		||||
    .. versionadded:: 1.34.0
 | 
			
		||||
 | 
			
		||||
String manipulation functions
 | 
			
		||||
-----------------------------
 | 
			
		||||
 | 
			
		||||
These string utilities are needed internally for dealing with Windows, and are
 | 
			
		||||
exported to allow clients to work uniformly with this data when the libuv API
 | 
			
		||||
is not complete.
 | 
			
		||||
 | 
			
		||||
.. c:function:: size_t uv_utf16_length_as_wtf8(const uint16_t* utf16, ssize_t utf16_len)
 | 
			
		||||
 | 
			
		||||
    Get the length of a UTF-16 (or UCS-2) `utf16` value after converting it to
 | 
			
		||||
    WTF-8. If `utf16` is NUL terminated, `utf16_len` can be set to -1,
 | 
			
		||||
    otherwise it must be specified.
 | 
			
		||||
 | 
			
		||||
    .. versionadded:: 1.47.0
 | 
			
		||||
 | 
			
		||||
.. c:function:: int uv_utf16_to_wtf8(const uint16_t* utf16, ssize_t utf16_len, char** wtf8_ptr, size_t* wtf8_len_ptr)
 | 
			
		||||
 | 
			
		||||
    Convert UTF-16 (or UCS-2) data in `utf16` to WTF-8 data in `*wtf8_ptr`. The
 | 
			
		||||
    `utf16_len` count (in characters) gives the length of `utf16`. If `utf16`
 | 
			
		||||
    is NUL terminated, `utf16_len` can be set to -1, otherwise it must be
 | 
			
		||||
    specified. If `wtf8_ptr` is `NULL`, no result will be computed, but the
 | 
			
		||||
    length (equal to `uv_utf16_length_as_wtf8`) will be stored in `wtf8_ptr`.
 | 
			
		||||
    If `*wtf8_ptr` is `NULL`, space for the conversion will be allocated and
 | 
			
		||||
    returned in `wtf8_ptr` and the length will be returned in `wtf8_len_ptr`.
 | 
			
		||||
    Otherwise, the length of `*wtf8_ptr` must be passed in `wtf8_len_ptr`. The
 | 
			
		||||
    `wtf8_ptr` must contain an extra space for an extra NUL after the result.
 | 
			
		||||
    If the result is truncated, `UV_ENOBUFS` will be returned and
 | 
			
		||||
    `wtf8_len_ptr` will be the length of the required `wtf8_ptr` to contain the
 | 
			
		||||
    whole result.
 | 
			
		||||
 | 
			
		||||
    .. versionadded:: 1.47.0
 | 
			
		||||
 | 
			
		||||
.. c:function:: ssize_t uv_wtf8_length_as_utf16(const char* wtf8)
 | 
			
		||||
 | 
			
		||||
    Get the length in characters of a NUL-terminated WTF-8 `wtf8` value
 | 
			
		||||
    after converting it to UTF-16 (or UCS-2), including NUL terminator.
 | 
			
		||||
 | 
			
		||||
    .. versionadded:: 1.47.0
 | 
			
		||||
 | 
			
		||||
.. c:function:: void uv_wtf8_to_utf16(const char* utf8, uint16_t* utf16, size_t utf16_len)
 | 
			
		||||
 | 
			
		||||
    Convert NUL-terminated WTF-8 data in `wtf8` to UTF-16 (or UCS-2) data
 | 
			
		||||
    in `utf16`. The `utf16_len` count (in characters) must include space
 | 
			
		||||
    for the NUL terminator.
 | 
			
		||||
 | 
			
		||||
    .. versionadded:: 1.47.0
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								deps/libuv/include/uv.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								deps/libuv/include/uv.h
									
									
									
									
										vendored
									
									
								
							@@ -1885,6 +1885,18 @@ struct uv_loop_s {
 | 
			
		||||
UV_EXTERN void* uv_loop_get_data(const uv_loop_t*);
 | 
			
		||||
UV_EXTERN void uv_loop_set_data(uv_loop_t*, void* data);
 | 
			
		||||
 | 
			
		||||
/* String utilities needed internally for dealing with Windows. */
 | 
			
		||||
size_t uv_utf16_length_as_wtf8(const uint16_t* utf16,
 | 
			
		||||
                               ssize_t utf16_len);
 | 
			
		||||
int uv_utf16_to_wtf8(const uint16_t* utf16,
 | 
			
		||||
                     ssize_t utf16_len,
 | 
			
		||||
                     char** wtf8_ptr,
 | 
			
		||||
                     size_t* wtf8_len_ptr);
 | 
			
		||||
ssize_t uv_wtf8_length_as_utf16(const char* wtf8);
 | 
			
		||||
void uv_wtf8_to_utf16(const char* wtf8,
 | 
			
		||||
                      uint16_t* utf16,
 | 
			
		||||
                      size_t utf16_len);
 | 
			
		||||
 | 
			
		||||
/* Don't export the private CPP symbols. */
 | 
			
		||||
#undef UV_HANDLE_TYPE_PRIVATE
 | 
			
		||||
#undef UV_REQ_TYPE_PRIVATE
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								deps/libuv/include/uv/version.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								deps/libuv/include/uv/version.h
									
									
									
									
										vendored
									
									
								
							@@ -31,7 +31,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define UV_VERSION_MAJOR 1
 | 
			
		||||
#define UV_VERSION_MINOR 46
 | 
			
		||||
#define UV_VERSION_MINOR 47
 | 
			
		||||
#define UV_VERSION_PATCH 0
 | 
			
		||||
#define UV_VERSION_IS_RELEASE 1
 | 
			
		||||
#define UV_VERSION_SUFFIX ""
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										244
									
								
								deps/libuv/src/idna.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										244
									
								
								deps/libuv/src/idna.c
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* Copyright (c) 2011, 2018 Ben Noordhuis <info@bnoordhuis.nl>
 | 
			
		||||
/* Copyright libuv contributors. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and/or distribute this software for any
 | 
			
		||||
 * purpose with or without fee is hereby granted, provided that the above
 | 
			
		||||
@@ -18,11 +18,56 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "uv.h"
 | 
			
		||||
#include "uv-common.h"
 | 
			
		||||
#include "idna.h"
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <limits.h> /* UINT_MAX */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int32_t uv__wtf8_decode1(const char** input) {
 | 
			
		||||
  uint32_t code_point;
 | 
			
		||||
  uint8_t b1;
 | 
			
		||||
  uint8_t b2;
 | 
			
		||||
  uint8_t b3;
 | 
			
		||||
  uint8_t b4;
 | 
			
		||||
 | 
			
		||||
  b1 = **input;
 | 
			
		||||
  if (b1 <= 0x7F)
 | 
			
		||||
    return b1; /* ASCII code point */
 | 
			
		||||
  if (b1 < 0xC2)
 | 
			
		||||
    return -1; /* invalid: continuation byte */
 | 
			
		||||
  code_point = b1;
 | 
			
		||||
 | 
			
		||||
  b2 = *++*input;
 | 
			
		||||
  if ((b2 & 0xC0) != 0x80)
 | 
			
		||||
    return -1; /* invalid: not a continuation byte */
 | 
			
		||||
  code_point = (code_point << 6) | (b2 & 0x3F);
 | 
			
		||||
  if (b1 <= 0xDF)
 | 
			
		||||
    return 0x7FF & code_point; /* two-byte character */
 | 
			
		||||
 | 
			
		||||
  b3 = *++*input;
 | 
			
		||||
  if ((b3 & 0xC0) != 0x80)
 | 
			
		||||
    return -1; /* invalid: not a continuation byte */
 | 
			
		||||
  code_point = (code_point << 6) | (b3 & 0x3F);
 | 
			
		||||
  if (b1 <= 0xEF)
 | 
			
		||||
    return 0xFFFF & code_point; /* three-byte character */
 | 
			
		||||
 | 
			
		||||
  b4 = *++*input;
 | 
			
		||||
  if ((b4 & 0xC0) != 0x80)
 | 
			
		||||
    return -1; /* invalid: not a continuation byte */
 | 
			
		||||
  code_point = (code_point << 6) | (b4 & 0x3F);
 | 
			
		||||
  if (b1 <= 0xF4) {
 | 
			
		||||
    code_point &= 0x1FFFFF;
 | 
			
		||||
    if (code_point <= 0x10FFFF)
 | 
			
		||||
      return code_point; /* four-byte character */
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* code point too large */
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static unsigned uv__utf8_decode1_slow(const char** p,
 | 
			
		||||
                                      const char* pe,
 | 
			
		||||
                                      unsigned a) {
 | 
			
		||||
@@ -89,6 +134,7 @@ static unsigned uv__utf8_decode1_slow(const char** p,
 | 
			
		||||
  return a;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
unsigned uv__utf8_decode1(const char** p, const char* pe) {
 | 
			
		||||
  unsigned a;
 | 
			
		||||
 | 
			
		||||
@@ -102,6 +148,7 @@ unsigned uv__utf8_decode1(const char** p, const char* pe) {
 | 
			
		||||
  return uv__utf8_decode1_slow(p, pe, a);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int uv__idna_toascii_label(const char* s, const char* se,
 | 
			
		||||
                                  char** d, char* de) {
 | 
			
		||||
  static const char alphabet[] = "abcdefghijklmnopqrstuvwxyz0123456789";
 | 
			
		||||
@@ -267,7 +314,8 @@ static int uv__idna_toascii_label(const char* s, const char* se,
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
long uv__idna_toascii(const char* s, const char* se, char* d, char* de) {
 | 
			
		||||
 | 
			
		||||
ssize_t uv__idna_toascii(const char* s, const char* se, char* d, char* de) {
 | 
			
		||||
  const char* si;
 | 
			
		||||
  const char* st;
 | 
			
		||||
  unsigned c;
 | 
			
		||||
@@ -313,3 +361,195 @@ long uv__idna_toascii(const char* s, const char* se, char* d, char* de) {
 | 
			
		||||
 | 
			
		||||
  return d - ds;  /* Number of bytes written. */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ssize_t uv_wtf8_length_as_utf16(const char* source_ptr) {
 | 
			
		||||
  size_t w_target_len = 0;
 | 
			
		||||
  int32_t code_point;
 | 
			
		||||
 | 
			
		||||
  do {
 | 
			
		||||
    code_point = uv__wtf8_decode1(&source_ptr);
 | 
			
		||||
    if (code_point < 0)
 | 
			
		||||
      return -1;
 | 
			
		||||
    if (code_point > 0xFFFF)
 | 
			
		||||
      w_target_len++;
 | 
			
		||||
    w_target_len++;
 | 
			
		||||
  } while (*source_ptr++);
 | 
			
		||||
 | 
			
		||||
  return w_target_len;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void uv_wtf8_to_utf16(const char* source_ptr,
 | 
			
		||||
                      uint16_t* w_target,
 | 
			
		||||
                      size_t w_target_len) {
 | 
			
		||||
  int32_t code_point;
 | 
			
		||||
 | 
			
		||||
  do {
 | 
			
		||||
    code_point = uv__wtf8_decode1(&source_ptr);
 | 
			
		||||
    /* uv_wtf8_length_as_utf16 should have been called and checked first. */
 | 
			
		||||
    assert(code_point >= 0);
 | 
			
		||||
    if (code_point > 0x10000) {
 | 
			
		||||
      assert(code_point < 0x10FFFF);
 | 
			
		||||
      *w_target++ = (((code_point - 0x10000) >> 10) + 0xD800);
 | 
			
		||||
      *w_target++ = ((code_point - 0x10000) & 0x3FF) + 0xDC00;
 | 
			
		||||
      w_target_len -= 2;
 | 
			
		||||
    } else {
 | 
			
		||||
      *w_target++ = code_point;
 | 
			
		||||
      w_target_len -= 1;
 | 
			
		||||
    }
 | 
			
		||||
  } while (*source_ptr++);
 | 
			
		||||
 | 
			
		||||
  assert(w_target_len == 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int32_t uv__get_surrogate_value(const uint16_t* w_source_ptr,
 | 
			
		||||
                                       ssize_t w_source_len) {
 | 
			
		||||
  uint16_t u;
 | 
			
		||||
  uint16_t next;
 | 
			
		||||
 | 
			
		||||
  u = w_source_ptr[0];
 | 
			
		||||
  if (u >= 0xD800 && u <= 0xDBFF && w_source_len != 1) {
 | 
			
		||||
    next = w_source_ptr[1];
 | 
			
		||||
    if (next >= 0xDC00 && next <= 0xDFFF)
 | 
			
		||||
      return 0x10000 + ((u - 0xD800) << 10) + (next - 0xDC00);
 | 
			
		||||
  }
 | 
			
		||||
  return u;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
size_t uv_utf16_length_as_wtf8(const uint16_t* w_source_ptr,
 | 
			
		||||
                               ssize_t w_source_len) {
 | 
			
		||||
  size_t target_len;
 | 
			
		||||
  int32_t code_point;
 | 
			
		||||
 | 
			
		||||
  target_len = 0;
 | 
			
		||||
  while (w_source_len) {
 | 
			
		||||
    code_point = uv__get_surrogate_value(w_source_ptr, w_source_len);
 | 
			
		||||
    /* Can be invalid UTF-8 but must be valid WTF-8. */
 | 
			
		||||
    assert(code_point >= 0);
 | 
			
		||||
    if (w_source_len < 0 && code_point == 0)
 | 
			
		||||
      break;
 | 
			
		||||
    if (code_point < 0x80)
 | 
			
		||||
      target_len += 1;
 | 
			
		||||
    else if (code_point < 0x800)
 | 
			
		||||
      target_len += 2;
 | 
			
		||||
    else if (code_point < 0x10000)
 | 
			
		||||
      target_len += 3;
 | 
			
		||||
    else {
 | 
			
		||||
      target_len += 4;
 | 
			
		||||
      w_source_ptr++;
 | 
			
		||||
      if (w_source_len > 0)
 | 
			
		||||
        w_source_len--;
 | 
			
		||||
    }
 | 
			
		||||
    w_source_ptr++;
 | 
			
		||||
    if (w_source_len > 0)
 | 
			
		||||
      w_source_len--;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return target_len;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int uv_utf16_to_wtf8(const uint16_t* w_source_ptr,
 | 
			
		||||
                     ssize_t w_source_len,
 | 
			
		||||
                     char** target_ptr,
 | 
			
		||||
                     size_t* target_len_ptr) {
 | 
			
		||||
  size_t target_len;
 | 
			
		||||
  char* target;
 | 
			
		||||
  char* target_end;
 | 
			
		||||
  int32_t code_point;
 | 
			
		||||
 | 
			
		||||
  /* If *target_ptr is provided, then *target_len_ptr must be its length
 | 
			
		||||
   * (excluding space for NUL), otherwise we will compute the target_len_ptr
 | 
			
		||||
   * length and may return a new allocation in *target_ptr if target_ptr is
 | 
			
		||||
   * provided. */
 | 
			
		||||
  if (target_ptr == NULL || *target_ptr == NULL) {
 | 
			
		||||
    target_len = uv_utf16_length_as_wtf8(w_source_ptr, w_source_len);
 | 
			
		||||
    if (target_len_ptr != NULL)
 | 
			
		||||
      *target_len_ptr = target_len;
 | 
			
		||||
  } else {
 | 
			
		||||
    target_len = *target_len_ptr;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (target_ptr == NULL)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (*target_ptr == NULL) {
 | 
			
		||||
    target = uv__malloc(target_len + 1);
 | 
			
		||||
    if (target == NULL) {
 | 
			
		||||
      return UV_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
    *target_ptr = target;
 | 
			
		||||
  } else {
 | 
			
		||||
    target = *target_ptr;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  target_end = target + target_len;
 | 
			
		||||
 | 
			
		||||
  while (target != target_end && w_source_len) {
 | 
			
		||||
    code_point = uv__get_surrogate_value(w_source_ptr, w_source_len);
 | 
			
		||||
    /* Can be invalid UTF-8 but must be valid WTF-8. */
 | 
			
		||||
    assert(code_point >= 0);
 | 
			
		||||
    if (w_source_len < 0 && code_point == 0) {
 | 
			
		||||
      w_source_len = 0;
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    if (code_point < 0x80) {
 | 
			
		||||
      *target++ = code_point;
 | 
			
		||||
    } else if (code_point < 0x800) {
 | 
			
		||||
      *target++ = 0xC0 | (code_point >> 6);
 | 
			
		||||
      if (target == target_end)
 | 
			
		||||
        break;
 | 
			
		||||
      *target++ = 0x80 | (code_point & 0x3F);
 | 
			
		||||
    } else if (code_point < 0x10000) {
 | 
			
		||||
      *target++ = 0xE0 | (code_point >> 12);
 | 
			
		||||
      if (target == target_end)
 | 
			
		||||
        break;
 | 
			
		||||
      *target++ = 0x80 | ((code_point >> 6) & 0x3F);
 | 
			
		||||
      if (target == target_end)
 | 
			
		||||
        break;
 | 
			
		||||
      *target++ = 0x80 | (code_point & 0x3F);
 | 
			
		||||
    } else {
 | 
			
		||||
      *target++ = 0xF0 | (code_point >> 18);
 | 
			
		||||
      if (target == target_end)
 | 
			
		||||
        break;
 | 
			
		||||
      *target++ = 0x80 | ((code_point >> 12) & 0x3F);
 | 
			
		||||
      if (target == target_end)
 | 
			
		||||
        break;
 | 
			
		||||
      *target++ = 0x80 | ((code_point >> 6) & 0x3F);
 | 
			
		||||
      if (target == target_end)
 | 
			
		||||
        break;
 | 
			
		||||
      *target++ = 0x80 | (code_point & 0x3F);
 | 
			
		||||
      /* uv__get_surrogate_value consumed 2 input characters */
 | 
			
		||||
      w_source_ptr++;
 | 
			
		||||
      if (w_source_len > 0)
 | 
			
		||||
        w_source_len--;
 | 
			
		||||
    }
 | 
			
		||||
    target_len = target - *target_ptr;
 | 
			
		||||
    w_source_ptr++;
 | 
			
		||||
    if (w_source_len > 0)
 | 
			
		||||
      w_source_len--;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (target != target_end && target_len_ptr != NULL)
 | 
			
		||||
    /* Did not fill all of the provided buffer, so update the target_len_ptr
 | 
			
		||||
     * output with the space used. */
 | 
			
		||||
    *target_len_ptr = target - *target_ptr;
 | 
			
		||||
 | 
			
		||||
  /* Check if input fit into target exactly. */
 | 
			
		||||
  if (w_source_len < 0 && target == target_end && w_source_ptr[0] == 0)
 | 
			
		||||
    w_source_len = 0;
 | 
			
		||||
 | 
			
		||||
  *target++ = '\0';
 | 
			
		||||
 | 
			
		||||
  /* Characters remained after filling the buffer, compute the remaining length now. */
 | 
			
		||||
  if (w_source_len) {
 | 
			
		||||
    if (target_len_ptr != NULL)
 | 
			
		||||
      *target_len_ptr = target_len + uv_utf16_length_as_wtf8(w_source_ptr, w_source_len);
 | 
			
		||||
    return UV_ENOBUFS;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								deps/libuv/src/idna.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								deps/libuv/src/idna.h
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* Copyright (c) 2011, 2018 Ben Noordhuis <info@bnoordhuis.nl>
 | 
			
		||||
/* Copyright libuv contributors. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and/or distribute this software for any
 | 
			
		||||
 * purpose with or without fee is hereby granted, provided that the above
 | 
			
		||||
@@ -26,6 +26,6 @@ unsigned uv__utf8_decode1(const char** p, const char* pe);
 | 
			
		||||
 * is the number of bytes written to |d|, including the trailing nul byte.
 | 
			
		||||
 * A return value < 0 is a libuv error code. |s| and |d| can not overlap.
 | 
			
		||||
 */
 | 
			
		||||
long uv__idna_toascii(const char* s, const char* se, char* d, char* de);
 | 
			
		||||
ssize_t uv__idna_toascii(const char* s, const char* se, char* d, char* de);
 | 
			
		||||
 | 
			
		||||
#endif  /* UV_SRC_IDNA_H_ */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								deps/libuv/src/unix/darwin.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								deps/libuv/src/unix/darwin.c
									
									
									
									
										vendored
									
									
								
							@@ -209,7 +209,7 @@ int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
 | 
			
		||||
  if (cpuspeed == 0)
 | 
			
		||||
    /* If sysctl hw.cputype == CPU_TYPE_ARM64, the correct value is unavailable
 | 
			
		||||
     * from Apple, but we can hard-code it here to a plausible value. */
 | 
			
		||||
    cpuspeed = 2400000000;
 | 
			
		||||
    cpuspeed = 2400000000U;
 | 
			
		||||
 | 
			
		||||
  if (host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &numcpus,
 | 
			
		||||
                          (processor_info_array_t*)&info,
 | 
			
		||||
@@ -235,7 +235,7 @@ int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
 | 
			
		||||
    cpu_info->cpu_times.irq = 0;
 | 
			
		||||
 | 
			
		||||
    cpu_info->model = uv__strdup(model);
 | 
			
		||||
    cpu_info->speed = cpuspeed/1000000;
 | 
			
		||||
    cpu_info->speed = (int)(cpuspeed / 1000000);
 | 
			
		||||
  }
 | 
			
		||||
  vm_deallocate(mach_task_self(), (vm_address_t)info, msg_type);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										240
									
								
								deps/libuv/src/unix/fs.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										240
									
								
								deps/libuv/src/unix/fs.c
									
									
									
									
										vendored
									
									
								
							@@ -41,25 +41,10 @@
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include <sys/uio.h>
 | 
			
		||||
#include <pthread.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <poll.h>
 | 
			
		||||
 | 
			
		||||
#if defined(__DragonFly__)        ||                                      \
 | 
			
		||||
    defined(__FreeBSD__)          ||                                      \
 | 
			
		||||
    defined(__OpenBSD__)          ||                                      \
 | 
			
		||||
    defined(__NetBSD__)
 | 
			
		||||
# define HAVE_PREADV 1
 | 
			
		||||
#else
 | 
			
		||||
# define HAVE_PREADV 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* preadv() and pwritev() were added in Android N (level 24) */
 | 
			
		||||
#if defined(__linux__) && !(defined(__ANDROID__) && __ANDROID_API__ < 24)
 | 
			
		||||
# define TRY_PREADV 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(__linux__)
 | 
			
		||||
# include <sys/sendfile.h>
 | 
			
		||||
#endif
 | 
			
		||||
@@ -97,6 +82,15 @@
 | 
			
		||||
# include <sys/statfs.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(__CYGWIN__) ||                                                    \
 | 
			
		||||
    (defined(__HAIKU__) && B_HAIKU_VERSION < B_HAIKU_VERSION_1_PRE_BETA_5) || \
 | 
			
		||||
    (defined(__sun) && !defined(__illumos__))
 | 
			
		||||
#define preadv(fd, bufs, nbufs, off)                                          \
 | 
			
		||||
  pread(fd, (bufs)->iov_base, (bufs)->iov_len, off)
 | 
			
		||||
#define pwritev(fd, bufs, nbufs, off)                                         \
 | 
			
		||||
  pwrite(fd, (bufs)->iov_base, (bufs)->iov_len, off)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(_AIX) && _XOPEN_SOURCE <= 600
 | 
			
		||||
extern char *mkdtemp(char *template); /* See issue #740 on AIX < 7 */
 | 
			
		||||
#endif
 | 
			
		||||
@@ -410,123 +404,57 @@ static ssize_t uv__fs_open(uv_fs_t* req) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if !HAVE_PREADV
 | 
			
		||||
static ssize_t uv__fs_preadv(uv_file fd,
 | 
			
		||||
                             uv_buf_t* bufs,
 | 
			
		||||
                             unsigned int nbufs,
 | 
			
		||||
                             off_t off) {
 | 
			
		||||
  uv_buf_t* buf;
 | 
			
		||||
  uv_buf_t* end;
 | 
			
		||||
  ssize_t result;
 | 
			
		||||
  ssize_t rc;
 | 
			
		||||
  size_t pos;
 | 
			
		||||
 | 
			
		||||
  assert(nbufs > 0);
 | 
			
		||||
 | 
			
		||||
  result = 0;
 | 
			
		||||
  pos = 0;
 | 
			
		||||
  buf = bufs + 0;
 | 
			
		||||
  end = bufs + nbufs;
 | 
			
		||||
 | 
			
		||||
  for (;;) {
 | 
			
		||||
    do
 | 
			
		||||
      rc = pread(fd, buf->base + pos, buf->len - pos, off + result);
 | 
			
		||||
    while (rc == -1 && errno == EINTR);
 | 
			
		||||
 | 
			
		||||
    if (rc == 0)
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    if (rc == -1 && result == 0)
 | 
			
		||||
      return UV__ERR(errno);
 | 
			
		||||
 | 
			
		||||
    if (rc == -1)
 | 
			
		||||
      break;  /* We read some data so return that, ignore the error. */
 | 
			
		||||
 | 
			
		||||
    pos += rc;
 | 
			
		||||
    result += rc;
 | 
			
		||||
 | 
			
		||||
    if (pos < buf->len)
 | 
			
		||||
      continue;
 | 
			
		||||
 | 
			
		||||
    pos = 0;
 | 
			
		||||
    buf += 1;
 | 
			
		||||
 | 
			
		||||
    if (buf == end)
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static ssize_t uv__fs_read(uv_fs_t* req) {
 | 
			
		||||
#if TRY_PREADV
 | 
			
		||||
  static _Atomic int no_preadv;
 | 
			
		||||
#endif
 | 
			
		||||
  const struct iovec* bufs;
 | 
			
		||||
  unsigned int iovmax;
 | 
			
		||||
  ssize_t result;
 | 
			
		||||
  size_t nbufs;
 | 
			
		||||
  ssize_t r;
 | 
			
		||||
  off_t off;
 | 
			
		||||
  int fd;
 | 
			
		||||
 | 
			
		||||
  fd = req->file;
 | 
			
		||||
  off = req->off;
 | 
			
		||||
  bufs = (const struct iovec*) req->bufs;
 | 
			
		||||
  nbufs = req->nbufs;
 | 
			
		||||
 | 
			
		||||
  iovmax = uv__getiovmax();
 | 
			
		||||
  if (req->nbufs > iovmax)
 | 
			
		||||
    req->nbufs = iovmax;
 | 
			
		||||
  if (nbufs > iovmax)
 | 
			
		||||
    nbufs = iovmax;
 | 
			
		||||
 | 
			
		||||
  if (req->off < 0) {
 | 
			
		||||
    if (req->nbufs == 1)
 | 
			
		||||
      result = read(req->file, req->bufs[0].base, req->bufs[0].len);
 | 
			
		||||
    else
 | 
			
		||||
      result = readv(req->file, (struct iovec*) req->bufs, req->nbufs);
 | 
			
		||||
  r = 0;
 | 
			
		||||
  if (off < 0) {
 | 
			
		||||
    if (nbufs == 1)
 | 
			
		||||
      r = read(fd, bufs->iov_base, bufs->iov_len);
 | 
			
		||||
    else if (nbufs > 1)
 | 
			
		||||
      r = readv(fd, bufs, nbufs);
 | 
			
		||||
  } else {
 | 
			
		||||
    if (req->nbufs == 1) {
 | 
			
		||||
      result = pread(req->file, req->bufs[0].base, req->bufs[0].len, req->off);
 | 
			
		||||
      goto done;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if HAVE_PREADV
 | 
			
		||||
    result = preadv(req->file, (struct iovec*) req->bufs, req->nbufs, req->off);
 | 
			
		||||
#else
 | 
			
		||||
# if TRY_PREADV
 | 
			
		||||
    if (atomic_load_explicit(&no_preadv, memory_order_relaxed)) retry:
 | 
			
		||||
# endif
 | 
			
		||||
    {
 | 
			
		||||
      result = uv__fs_preadv(req->file, req->bufs, req->nbufs, req->off);
 | 
			
		||||
    }
 | 
			
		||||
# if TRY_PREADV
 | 
			
		||||
    else {
 | 
			
		||||
      result = preadv(req->file,
 | 
			
		||||
                      (struct iovec*) req->bufs,
 | 
			
		||||
                      req->nbufs,
 | 
			
		||||
                      req->off);
 | 
			
		||||
      if (result == -1 && errno == ENOSYS) {
 | 
			
		||||
        atomic_store_explicit(&no_preadv, 1, memory_order_relaxed);
 | 
			
		||||
        goto retry;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
    if (nbufs == 1)
 | 
			
		||||
      r = pread(fd, bufs->iov_base, bufs->iov_len, off);
 | 
			
		||||
    else if (nbufs > 1)
 | 
			
		||||
      r = preadv(fd, bufs, nbufs, off);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
done:
 | 
			
		||||
  /* Early cleanup of bufs allocation, since we're done with it. */
 | 
			
		||||
  if (req->bufs != req->bufsml)
 | 
			
		||||
    uv__free(req->bufs);
 | 
			
		||||
 | 
			
		||||
  req->bufs = NULL;
 | 
			
		||||
  req->nbufs = 0;
 | 
			
		||||
 | 
			
		||||
#ifdef __PASE__
 | 
			
		||||
  /* PASE returns EOPNOTSUPP when reading a directory, convert to EISDIR */
 | 
			
		||||
  if (result == -1 && errno == EOPNOTSUPP) {
 | 
			
		||||
  if (r == -1 && errno == EOPNOTSUPP) {
 | 
			
		||||
    struct stat buf;
 | 
			
		||||
    ssize_t rc;
 | 
			
		||||
    rc = uv__fstat(req->file, &buf);
 | 
			
		||||
    rc = uv__fstat(fd, &buf);
 | 
			
		||||
    if (rc == 0 && S_ISDIR(buf.st_mode)) {
 | 
			
		||||
      errno = EISDIR;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  return result;
 | 
			
		||||
  /* We don't own the buffer list in the synchronous case. */
 | 
			
		||||
  if (req->cb != NULL)
 | 
			
		||||
    if (req->bufs != req->bufsml)
 | 
			
		||||
      uv__free(req->bufs);
 | 
			
		||||
 | 
			
		||||
  req->bufs = NULL;
 | 
			
		||||
  req->nbufs = 0;
 | 
			
		||||
 | 
			
		||||
  return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1161,65 +1089,34 @@ static ssize_t uv__fs_lutime(uv_fs_t* req) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static ssize_t uv__fs_write(uv_fs_t* req) {
 | 
			
		||||
#if TRY_PREADV
 | 
			
		||||
  static _Atomic int no_pwritev;
 | 
			
		||||
#endif
 | 
			
		||||
  const struct iovec* bufs;
 | 
			
		||||
  size_t nbufs;
 | 
			
		||||
  ssize_t r;
 | 
			
		||||
  off_t off;
 | 
			
		||||
  int fd;
 | 
			
		||||
 | 
			
		||||
  /* Serialize writes on OS X, concurrent write() and pwrite() calls result in
 | 
			
		||||
   * data loss. We can't use a per-file descriptor lock, the descriptor may be
 | 
			
		||||
   * a dup().
 | 
			
		||||
   */
 | 
			
		||||
#if defined(__APPLE__)
 | 
			
		||||
  static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
 | 
			
		||||
  fd = req->file;
 | 
			
		||||
  off = req->off;
 | 
			
		||||
  bufs = (const struct iovec*) req->bufs;
 | 
			
		||||
  nbufs = req->nbufs;
 | 
			
		||||
 | 
			
		||||
  if (pthread_mutex_lock(&lock))
 | 
			
		||||
    abort();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  if (req->off < 0) {
 | 
			
		||||
    if (req->nbufs == 1)
 | 
			
		||||
      r = write(req->file, req->bufs[0].base, req->bufs[0].len);
 | 
			
		||||
    else
 | 
			
		||||
      r = writev(req->file, (struct iovec*) req->bufs, req->nbufs);
 | 
			
		||||
  r = 0;
 | 
			
		||||
  if (off < 0) {
 | 
			
		||||
    if (nbufs == 1)
 | 
			
		||||
      r = write(fd, bufs->iov_base, bufs->iov_len);
 | 
			
		||||
    else if (nbufs > 1)
 | 
			
		||||
      r = writev(fd, bufs, nbufs);
 | 
			
		||||
  } else {
 | 
			
		||||
    if (req->nbufs == 1) {
 | 
			
		||||
      r = pwrite(req->file, req->bufs[0].base, req->bufs[0].len, req->off);
 | 
			
		||||
      goto done;
 | 
			
		||||
    }
 | 
			
		||||
#if HAVE_PREADV
 | 
			
		||||
    r = pwritev(req->file, (struct iovec*) req->bufs, req->nbufs, req->off);
 | 
			
		||||
#else
 | 
			
		||||
# if TRY_PREADV
 | 
			
		||||
    if (atomic_load_explicit(&no_pwritev, memory_order_relaxed)) retry:
 | 
			
		||||
# endif
 | 
			
		||||
    {
 | 
			
		||||
      r = pwrite(req->file, req->bufs[0].base, req->bufs[0].len, req->off);
 | 
			
		||||
    }
 | 
			
		||||
# if TRY_PREADV
 | 
			
		||||
    else {
 | 
			
		||||
      r = pwritev(req->file,
 | 
			
		||||
                  (struct iovec*) req->bufs,
 | 
			
		||||
                  req->nbufs,
 | 
			
		||||
                  req->off);
 | 
			
		||||
      if (r == -1 && errno == ENOSYS) {
 | 
			
		||||
        atomic_store_explicit(&no_pwritev, 1, memory_order_relaxed);
 | 
			
		||||
        goto retry;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
    if (nbufs == 1)
 | 
			
		||||
      r = pwrite(fd, bufs->iov_base, bufs->iov_len, off);
 | 
			
		||||
    else if (nbufs > 1)
 | 
			
		||||
      r = pwritev(fd, bufs, nbufs, off);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
done:
 | 
			
		||||
#if defined(__APPLE__)
 | 
			
		||||
  if (pthread_mutex_unlock(&lock))
 | 
			
		||||
    abort();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static ssize_t uv__fs_copyfile(uv_fs_t* req) {
 | 
			
		||||
  uv_fs_t fs_req;
 | 
			
		||||
  uv_file srcfd;
 | 
			
		||||
@@ -1979,9 +1876,14 @@ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req,
 | 
			
		||||
  if (bufs == NULL || nbufs == 0)
 | 
			
		||||
    return UV_EINVAL;
 | 
			
		||||
 | 
			
		||||
  req->off = off;
 | 
			
		||||
  req->file = file;
 | 
			
		||||
 | 
			
		||||
  req->bufs = (uv_buf_t*) bufs;  /* Safe, doesn't mutate |bufs| */
 | 
			
		||||
  req->nbufs = nbufs;
 | 
			
		||||
 | 
			
		||||
  if (cb == NULL)
 | 
			
		||||
    goto post;
 | 
			
		||||
 | 
			
		||||
  req->bufs = req->bufsml;
 | 
			
		||||
  if (nbufs > ARRAY_SIZE(req->bufsml))
 | 
			
		||||
    req->bufs = uv__malloc(nbufs * sizeof(*bufs));
 | 
			
		||||
@@ -1991,12 +1893,10 @@ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req,
 | 
			
		||||
 | 
			
		||||
  memcpy(req->bufs, bufs, nbufs * sizeof(*bufs));
 | 
			
		||||
 | 
			
		||||
  req->off = off;
 | 
			
		||||
 | 
			
		||||
  if (cb != NULL)
 | 
			
		||||
    if (uv__iou_fs_read_or_write(loop, req, /* is_read */ 1))
 | 
			
		||||
      return 0;
 | 
			
		||||
  if (uv__iou_fs_read_or_write(loop, req, /* is_read */ 1))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
post:
 | 
			
		||||
  POST;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								deps/libuv/src/unix/kqueue.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								deps/libuv/src/unix/kqueue.c
									
									
									
									
										vendored
									
									
								
							@@ -30,6 +30,9 @@
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/event.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#if defined(__FreeBSD__)
 | 
			
		||||
#include <sys/user.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
@@ -262,6 +265,9 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
 | 
			
		||||
 | 
			
		||||
    if (nfds == -1)
 | 
			
		||||
      assert(errno == EINTR);
 | 
			
		||||
    else if (nfds == 0)
 | 
			
		||||
      /* Unlimited timeout should only return with events or signal. */
 | 
			
		||||
      assert(timeout != -1);
 | 
			
		||||
 | 
			
		||||
    if (pset != NULL)
 | 
			
		||||
      pthread_sigmask(SIG_UNBLOCK, pset, NULL);
 | 
			
		||||
@@ -286,8 +292,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
 | 
			
		||||
        timeout = user_timeout;
 | 
			
		||||
        reset_timeout = 0;
 | 
			
		||||
      } else if (nfds == 0) {
 | 
			
		||||
        /* Reached the user timeout value. */
 | 
			
		||||
        assert(timeout != -1);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@@ -479,6 +483,16 @@ static void uv__fs_event(uv_loop_t* loop, uv__io_t* w, unsigned int fflags) {
 | 
			
		||||
   */
 | 
			
		||||
  if (fcntl(handle->event_watcher.fd, F_GETPATH, pathbuf) == 0)
 | 
			
		||||
    path = uv__basename_r(pathbuf);
 | 
			
		||||
#elif defined(F_KINFO)
 | 
			
		||||
  /* We try to get the file info reference from the file descriptor.
 | 
			
		||||
   * the struct's kf_structsize must be initialised beforehand
 | 
			
		||||
   * whether with the KINFO_FILE_SIZE constant or this way.
 | 
			
		||||
   */
 | 
			
		||||
  struct kinfo_file kf;
 | 
			
		||||
  kf.kf_structsize = sizeof(kf);
 | 
			
		||||
 | 
			
		||||
  if (fcntl(handle->event_watcher.fd, F_KINFO, &kf) == 0)
 | 
			
		||||
    path = uv__basename_r(kf.kf_path);
 | 
			
		||||
#endif
 | 
			
		||||
  handle->cb(handle, path, events, 0);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										121
									
								
								deps/libuv/src/unix/linux.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										121
									
								
								deps/libuv/src/unix/linux.c
									
									
									
									
										vendored
									
									
								
							@@ -79,6 +79,8 @@
 | 
			
		||||
#  define __NR_copy_file_range 379
 | 
			
		||||
# elif defined(__arc__)
 | 
			
		||||
#  define __NR_copy_file_range 285
 | 
			
		||||
# elif defined(__riscv)
 | 
			
		||||
#  define __NR_copy_file_range 285
 | 
			
		||||
# endif
 | 
			
		||||
#endif /* __NR_copy_file_range */
 | 
			
		||||
 | 
			
		||||
@@ -95,6 +97,8 @@
 | 
			
		||||
#  define __NR_statx 383
 | 
			
		||||
# elif defined(__s390__)
 | 
			
		||||
#  define __NR_statx 379
 | 
			
		||||
# elif defined(__riscv)
 | 
			
		||||
#  define __NR_statx 291
 | 
			
		||||
# endif
 | 
			
		||||
#endif /* __NR_statx */
 | 
			
		||||
 | 
			
		||||
@@ -111,6 +115,8 @@
 | 
			
		||||
#  define __NR_getrandom 359
 | 
			
		||||
# elif defined(__s390__)
 | 
			
		||||
#  define __NR_getrandom 349
 | 
			
		||||
# elif defined(__riscv)
 | 
			
		||||
#  define __NR_getrandom 278
 | 
			
		||||
# endif
 | 
			
		||||
#endif /* __NR_getrandom */
 | 
			
		||||
 | 
			
		||||
@@ -317,17 +323,64 @@ unsigned uv__kernel_version(void) {
 | 
			
		||||
  unsigned major;
 | 
			
		||||
  unsigned minor;
 | 
			
		||||
  unsigned patch;
 | 
			
		||||
  char v_sig[256];
 | 
			
		||||
  char* needle;
 | 
			
		||||
 | 
			
		||||
  version = atomic_load_explicit(&cached_version, memory_order_relaxed);
 | 
			
		||||
  if (version != 0)
 | 
			
		||||
    return version;
 | 
			
		||||
 | 
			
		||||
  /* Check /proc/version_signature first as it's the way to get the mainline
 | 
			
		||||
   * kernel version in Ubuntu. The format is:
 | 
			
		||||
   *   Ubuntu ubuntu_kernel_version mainline_kernel_version
 | 
			
		||||
   * For example:
 | 
			
		||||
   *   Ubuntu 5.15.0-79.86-generic 5.15.111
 | 
			
		||||
   */
 | 
			
		||||
  if (0 == uv__slurp("/proc/version_signature", v_sig, sizeof(v_sig)))
 | 
			
		||||
    if (3 == sscanf(v_sig, "Ubuntu %*s %u.%u.%u", &major, &minor, &patch))
 | 
			
		||||
      goto calculate_version;
 | 
			
		||||
 | 
			
		||||
  if (-1 == uname(&u))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  /* In Debian we need to check `version` instead of `release` to extract the
 | 
			
		||||
   * mainline kernel version. This is an example of how it looks like:
 | 
			
		||||
   *  #1 SMP Debian 5.10.46-4 (2021-08-03)
 | 
			
		||||
   */
 | 
			
		||||
  needle = strstr(u.version, "Debian ");
 | 
			
		||||
  if (needle != NULL)
 | 
			
		||||
    if (3 == sscanf(needle, "Debian %u.%u.%u", &major, &minor, &patch))
 | 
			
		||||
      goto calculate_version;
 | 
			
		||||
 | 
			
		||||
  if (3 != sscanf(u.release, "%u.%u.%u", &major, &minor, &patch))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  /* Handle it when the process runs under the UNAME26 personality:
 | 
			
		||||
   *
 | 
			
		||||
   * - kernels >= 3.x identify as 2.6.40+x
 | 
			
		||||
   * - kernels >= 4.x identify as 2.6.60+x
 | 
			
		||||
   *
 | 
			
		||||
   * UNAME26 is a poorly conceived hack that doesn't let us distinguish
 | 
			
		||||
   * between 4.x kernels and 5.x/6.x kernels so we conservatively assume
 | 
			
		||||
   * that 2.6.60+x means 4.x.
 | 
			
		||||
   *
 | 
			
		||||
   * Fun fact of the day: it's technically possible to observe the actual
 | 
			
		||||
   * kernel version for a brief moment because uname() first copies out the
 | 
			
		||||
   * real release string before overwriting it with the backcompat string.
 | 
			
		||||
   */
 | 
			
		||||
  if (major == 2 && minor == 6) {
 | 
			
		||||
    if (patch >= 60) {
 | 
			
		||||
      major = 4;
 | 
			
		||||
      minor = patch - 60;
 | 
			
		||||
      patch = 0;
 | 
			
		||||
    } else if (patch >= 40) {
 | 
			
		||||
      major = 3;
 | 
			
		||||
      minor = patch - 40;
 | 
			
		||||
      patch = 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
calculate_version:
 | 
			
		||||
  version = major * 65536 + minor * 256 + patch;
 | 
			
		||||
  atomic_store_explicit(&cached_version, version, memory_order_relaxed);
 | 
			
		||||
 | 
			
		||||
@@ -422,6 +475,9 @@ int uv__io_uring_register(int fd, unsigned opcode, void* arg, unsigned nargs) {
 | 
			
		||||
static int uv__use_io_uring(void) {
 | 
			
		||||
#if defined(__ANDROID_API__)
 | 
			
		||||
  return 0;  /* Possibly available but blocked by seccomp. */
 | 
			
		||||
#elif defined(__arm__) && __SIZEOF_POINTER__ == 4
 | 
			
		||||
  /* See https://github.com/libuv/libuv/issues/4158. */
 | 
			
		||||
  return 0;  /* All 32 bits kernels appear buggy. */
 | 
			
		||||
#else
 | 
			
		||||
  /* Ternary: unknown=0, yes=1, no=-1 */
 | 
			
		||||
  static _Atomic int use_io_uring;
 | 
			
		||||
@@ -431,8 +487,14 @@ static int uv__use_io_uring(void) {
 | 
			
		||||
  use = atomic_load_explicit(&use_io_uring, memory_order_relaxed);
 | 
			
		||||
 | 
			
		||||
  if (use == 0) {
 | 
			
		||||
    /* Older kernels have a bug where the sqpoll thread uses 100% CPU. */
 | 
			
		||||
    use = uv__kernel_version() >= /* 5.10.186 */ 0x050ABA ? 1 : -1;
 | 
			
		||||
 | 
			
		||||
    /* But users can still enable it if they so desire. */
 | 
			
		||||
    val = getenv("UV_USE_IO_URING");
 | 
			
		||||
    use = val == NULL || atoi(val) ? 1 : -1;
 | 
			
		||||
    if (val != NULL)
 | 
			
		||||
      use = atoi(val) ? 1 : -1;
 | 
			
		||||
 | 
			
		||||
    atomic_store_explicit(&use_io_uring, use, memory_order_relaxed);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -756,7 +818,9 @@ static void uv__iou_submit(struct uv__iou* iou) {
 | 
			
		||||
int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req) {
 | 
			
		||||
  struct uv__io_uring_sqe* sqe;
 | 
			
		||||
  struct uv__iou* iou;
 | 
			
		||||
  int kv;
 | 
			
		||||
 | 
			
		||||
  kv = uv__kernel_version();
 | 
			
		||||
  /* Work around a poorly understood bug in older kernels where closing a file
 | 
			
		||||
   * descriptor pointing to /foo/bar results in ETXTBSY errors when trying to
 | 
			
		||||
   * execve("/foo/bar") later on. The bug seems to have been fixed somewhere
 | 
			
		||||
@@ -764,10 +828,17 @@ int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req) {
 | 
			
		||||
   * but good candidates are the several data race fixes. Interestingly, it
 | 
			
		||||
   * seems to manifest only when running under Docker so the possibility of
 | 
			
		||||
   * a Docker bug can't be completely ruled out either. Yay, computers.
 | 
			
		||||
   * Also, disable on non-longterm versions between 5.16.0 (non-longterm) and
 | 
			
		||||
   * 6.1.0 (longterm). Starting with longterm 6.1.x, the issue seems to be
 | 
			
		||||
   * solved.
 | 
			
		||||
   */
 | 
			
		||||
  if (uv__kernel_version() < /* 5.15.90 */ 0x050F5A)
 | 
			
		||||
  if (kv < /* 5.15.90 */ 0x050F5A)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (kv >= /* 5.16.0 */ 0x050A00 && kv < /* 6.1.0 */ 0x060100)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  iou = &uv__get_internal_fields(loop)->iou;
 | 
			
		||||
 | 
			
		||||
  sqe = uv__iou_get_sqe(iou, loop, req);
 | 
			
		||||
@@ -1364,41 +1435,20 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
 | 
			
		||||
     */
 | 
			
		||||
    SAVE_ERRNO(uv__update_time(loop));
 | 
			
		||||
 | 
			
		||||
    if (nfds == 0) {
 | 
			
		||||
    if (nfds == -1)
 | 
			
		||||
      assert(errno == EINTR);
 | 
			
		||||
    else if (nfds == 0)
 | 
			
		||||
      /* Unlimited timeout should only return with events or signal. */
 | 
			
		||||
      assert(timeout != -1);
 | 
			
		||||
 | 
			
		||||
    if (nfds == 0 || nfds == -1) {
 | 
			
		||||
      if (reset_timeout != 0) {
 | 
			
		||||
        timeout = user_timeout;
 | 
			
		||||
        reset_timeout = 0;
 | 
			
		||||
      } else if (nfds == 0) {
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (timeout == -1)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (timeout == 0)
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      /* We may have been inside the system call for longer than |timeout|
 | 
			
		||||
       * milliseconds so we need to update the timestamp to avoid drift.
 | 
			
		||||
       */
 | 
			
		||||
      goto update_timeout;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (nfds == -1) {
 | 
			
		||||
      if (errno != EINTR)
 | 
			
		||||
        abort();
 | 
			
		||||
 | 
			
		||||
      if (reset_timeout != 0) {
 | 
			
		||||
        timeout = user_timeout;
 | 
			
		||||
        reset_timeout = 0;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (timeout == -1)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (timeout == 0)
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      /* Interrupted by a signal. Update timeout and poll again. */
 | 
			
		||||
      goto update_timeout;
 | 
			
		||||
    }
 | 
			
		||||
@@ -1509,13 +1559,13 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
update_timeout:
 | 
			
		||||
    if (timeout == 0)
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    if (timeout == -1)
 | 
			
		||||
      continue;
 | 
			
		||||
 | 
			
		||||
update_timeout:
 | 
			
		||||
    assert(timeout > 0);
 | 
			
		||||
 | 
			
		||||
    real_timeout -= (loop->time - base);
 | 
			
		||||
@@ -1718,7 +1768,8 @@ int uv_cpu_info(uv_cpu_info_t** ci, int* count) {
 | 
			
		||||
    return UV__ERR(errno);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  fgets(buf, sizeof(buf), fp);  /* Skip first line. */
 | 
			
		||||
  if (NULL == fgets(buf, sizeof(buf), fp))
 | 
			
		||||
    abort();
 | 
			
		||||
 | 
			
		||||
  for (;;) {
 | 
			
		||||
    memset(&t, 0, sizeof(t));
 | 
			
		||||
@@ -1729,7 +1780,8 @@ int uv_cpu_info(uv_cpu_info_t** ci, int* count) {
 | 
			
		||||
    if (n != 7)
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    fgets(buf, sizeof(buf), fp);  /* Skip rest of line. */
 | 
			
		||||
    if (NULL == fgets(buf, sizeof(buf), fp))
 | 
			
		||||
      abort();
 | 
			
		||||
 | 
			
		||||
    if (cpu >= ARRAY_SIZE(*cpus))
 | 
			
		||||
      continue;
 | 
			
		||||
@@ -1809,7 +1861,8 @@ nocpuinfo:
 | 
			
		||||
    if (fp == NULL)
 | 
			
		||||
      continue;
 | 
			
		||||
 | 
			
		||||
    fscanf(fp, "%llu", &(*cpus)[cpu].freq);
 | 
			
		||||
    if (1 != fscanf(fp, "%llu", &(*cpus)[cpu].freq))
 | 
			
		||||
      abort();
 | 
			
		||||
    fclose(fp);
 | 
			
		||||
    fp = NULL;
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								deps/libuv/src/unix/os390.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								deps/libuv/src/unix/os390.c
									
									
									
									
										vendored
									
									
								
							@@ -19,6 +19,7 @@
 | 
			
		||||
 * IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "uv.h"
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
#include <net/if.h>
 | 
			
		||||
@@ -30,6 +31,7 @@
 | 
			
		||||
#include <sys/msg.h>
 | 
			
		||||
#include <sys/resource.h>
 | 
			
		||||
#include "zos-base.h"
 | 
			
		||||
#include "zos-sys-info.h"
 | 
			
		||||
#if defined(__clang__)
 | 
			
		||||
#include "csrsic.h"
 | 
			
		||||
#else
 | 
			
		||||
@@ -66,9 +68,6 @@
 | 
			
		||||
/* Total number of frames currently on all available frame queues. */
 | 
			
		||||
#define RCEAFC_OFFSET     0x088
 | 
			
		||||
 | 
			
		||||
/* CPC model length from the CSRSI Service. */
 | 
			
		||||
#define CPCMODEL_LENGTH   16
 | 
			
		||||
 | 
			
		||||
/* Pointer to the home (current) ASCB. */
 | 
			
		||||
#define PSAAOLD           0x224
 | 
			
		||||
 | 
			
		||||
@@ -258,9 +257,12 @@ int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
 | 
			
		||||
  idx = 0;
 | 
			
		||||
  while (idx < *count) {
 | 
			
		||||
    cpu_info->speed = *(int*)(info.siv1v2si22v1.si22v1cpucapability);
 | 
			
		||||
    cpu_info->model = uv__malloc(CPCMODEL_LENGTH + 1);
 | 
			
		||||
    memset(cpu_info->model, '\0', CPCMODEL_LENGTH + 1);
 | 
			
		||||
    memcpy(cpu_info->model, info.siv1v2si11v1.si11v1cpcmodel, CPCMODEL_LENGTH);
 | 
			
		||||
    cpu_info->model = uv__malloc(ZOSCPU_MODEL_LENGTH + 1);
 | 
			
		||||
    if (cpu_info->model == NULL) {
 | 
			
		||||
      uv_free_cpu_info(*cpu_infos, idx);
 | 
			
		||||
      return UV_ENOMEM; 
 | 
			
		||||
    }
 | 
			
		||||
    __get_cpu_model(cpu_info->model, ZOSCPU_MODEL_LENGTH + 1);
 | 
			
		||||
    cpu_info->cpu_times.user = cpu_usage_avg;
 | 
			
		||||
    /* TODO: implement the following */
 | 
			
		||||
    cpu_info->cpu_times.sys = 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								deps/libuv/src/unix/signal.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								deps/libuv/src/unix/signal.c
									
									
									
									
										vendored
									
									
								
							@@ -279,6 +279,8 @@ static int uv__signal_loop_once_init(uv_loop_t* loop) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int uv__signal_loop_fork(uv_loop_t* loop) {
 | 
			
		||||
  struct uv__queue* q;
 | 
			
		||||
 | 
			
		||||
  if (loop->signal_pipefd[0] == -1)
 | 
			
		||||
    return 0;
 | 
			
		||||
  uv__io_stop(loop, &loop->signal_io_watcher, POLLIN);
 | 
			
		||||
@@ -286,6 +288,19 @@ int uv__signal_loop_fork(uv_loop_t* loop) {
 | 
			
		||||
  uv__close(loop->signal_pipefd[1]);
 | 
			
		||||
  loop->signal_pipefd[0] = -1;
 | 
			
		||||
  loop->signal_pipefd[1] = -1;
 | 
			
		||||
 | 
			
		||||
  uv__queue_foreach(q, &loop->handle_queue) {
 | 
			
		||||
    uv_handle_t* handle = uv__queue_data(q, uv_handle_t, handle_queue);
 | 
			
		||||
    uv_signal_t* sh;
 | 
			
		||||
 | 
			
		||||
    if (handle->type != UV_SIGNAL)
 | 
			
		||||
      continue;
 | 
			
		||||
 | 
			
		||||
    sh = (uv_signal_t*) handle;
 | 
			
		||||
    sh->caught_signals = 0;
 | 
			
		||||
    sh->dispatched_signals = 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return uv__signal_loop_once_init(loop);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										101
									
								
								deps/libuv/src/unix/tcp.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										101
									
								
								deps/libuv/src/unix/tcp.c
									
									
									
									
										vendored
									
									
								
							@@ -27,6 +27,17 @@
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
 | 
			
		||||
#if defined(__PASE__)
 | 
			
		||||
#include <as400_protos.h>
 | 
			
		||||
#define ifaddrs ifaddrs_pase
 | 
			
		||||
#define getifaddrs Qp2getifaddrs
 | 
			
		||||
#define freeifaddrs Qp2freeifaddrs
 | 
			
		||||
#else
 | 
			
		||||
#include <ifaddrs.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int maybe_bind_socket(int fd) {
 | 
			
		||||
  union uv__sockaddr s;
 | 
			
		||||
@@ -198,11 +209,50 @@ int uv__tcp_bind(uv_tcp_t* tcp,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int uv__is_ipv6_link_local(const struct sockaddr* addr) {
 | 
			
		||||
  const struct sockaddr_in6* a6;
 | 
			
		||||
  uint8_t b[2];
 | 
			
		||||
 | 
			
		||||
  if (addr->sa_family != AF_INET6)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  a6 = (const struct sockaddr_in6*) addr;
 | 
			
		||||
  memcpy(b, &a6->sin6_addr, sizeof(b));
 | 
			
		||||
 | 
			
		||||
  return b[0] == 0xFE && b[1] == 0x80;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int uv__ipv6_link_local_scope_id(void) {
 | 
			
		||||
  struct sockaddr_in6* a6;
 | 
			
		||||
  struct ifaddrs* ifa;
 | 
			
		||||
  struct ifaddrs* p;
 | 
			
		||||
  int rv;
 | 
			
		||||
 | 
			
		||||
  if (getifaddrs(&ifa))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  for (p = ifa; p != NULL; p = p->ifa_next)
 | 
			
		||||
    if (uv__is_ipv6_link_local(p->ifa_addr))
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
  rv = 0;
 | 
			
		||||
  if (p != NULL) {
 | 
			
		||||
    a6 = (struct sockaddr_in6*) p->ifa_addr;
 | 
			
		||||
    rv = a6->sin6_scope_id;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  freeifaddrs(ifa);
 | 
			
		||||
  return rv;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int uv__tcp_connect(uv_connect_t* req,
 | 
			
		||||
                    uv_tcp_t* handle,
 | 
			
		||||
                    const struct sockaddr* addr,
 | 
			
		||||
                    unsigned int addrlen,
 | 
			
		||||
                    uv_connect_cb cb) {
 | 
			
		||||
  struct sockaddr_in6 tmp6;
 | 
			
		||||
  int err;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
@@ -220,6 +270,14 @@ int uv__tcp_connect(uv_connect_t* req,
 | 
			
		||||
  if (err)
 | 
			
		||||
    return err;
 | 
			
		||||
 | 
			
		||||
  if (uv__is_ipv6_link_local(addr)) {
 | 
			
		||||
    memcpy(&tmp6, addr, sizeof(tmp6));
 | 
			
		||||
    if (tmp6.sin6_scope_id == 0) {
 | 
			
		||||
      tmp6.sin6_scope_id = uv__ipv6_link_local_scope_id();
 | 
			
		||||
      addr = (void*) &tmp6;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  do {
 | 
			
		||||
    errno = 0;
 | 
			
		||||
    r = connect(uv__stream_fd(handle), addr, addrlen);
 | 
			
		||||
@@ -374,28 +432,39 @@ int uv__tcp_nodelay(int fd, int on) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int uv__tcp_keepalive(int fd, int on, unsigned int delay) {
 | 
			
		||||
  int intvl;
 | 
			
		||||
  int cnt;
 | 
			
		||||
 | 
			
		||||
  (void) &intvl;
 | 
			
		||||
  (void) &cnt;
 | 
			
		||||
    
 | 
			
		||||
  if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on)))
 | 
			
		||||
    return UV__ERR(errno);
 | 
			
		||||
 | 
			
		||||
  if (!on)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
#ifdef TCP_KEEPIDLE
 | 
			
		||||
  if (on) {
 | 
			
		||||
    int intvl = 1;  /*  1 second; same as default on Win32 */
 | 
			
		||||
    int cnt = 10;  /* 10 retries; same as hardcoded on Win32 */
 | 
			
		||||
    if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &delay, sizeof(delay)))
 | 
			
		||||
      return UV__ERR(errno);
 | 
			
		||||
    if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &intvl, sizeof(intvl)))
 | 
			
		||||
      return UV__ERR(errno);
 | 
			
		||||
    if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &cnt, sizeof(cnt)))
 | 
			
		||||
      return UV__ERR(errno);
 | 
			
		||||
  }
 | 
			
		||||
  if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &delay, sizeof(delay)))
 | 
			
		||||
    return UV__ERR(errno);
 | 
			
		||||
/* 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. */
 | 
			
		||||
#elif defined(TCP_KEEPALIVE) && !defined(__sun)
 | 
			
		||||
  if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE, &delay, sizeof(delay)))
 | 
			
		||||
    return UV__ERR(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)))
 | 
			
		||||
#ifdef TCP_KEEPINTVL
 | 
			
		||||
  intvl = 1;  /*  1 second; same as default on Win32 */
 | 
			
		||||
  if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &intvl, sizeof(intvl)))
 | 
			
		||||
    return UV__ERR(errno);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef TCP_KEEPCNT
 | 
			
		||||
  cnt = 10;  /* 10 retries; same as hardcoded on Win32 */
 | 
			
		||||
  if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &cnt, sizeof(cnt)))
 | 
			
		||||
    return UV__ERR(errno);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								deps/libuv/src/unix/thread.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								deps/libuv/src/unix/thread.c
									
									
									
									
										vendored
									
									
								
							@@ -789,11 +789,33 @@ void uv_cond_broadcast(uv_cond_t* cond) {
 | 
			
		||||
    abort();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(__APPLE__) && defined(__MACH__)
 | 
			
		||||
 | 
			
		||||
void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  errno = 0;
 | 
			
		||||
  r = pthread_cond_wait(cond, mutex);
 | 
			
		||||
 | 
			
		||||
  /* Workaround for a bug in OS X at least up to 13.6
 | 
			
		||||
   * See https://github.com/libuv/libuv/issues/4165
 | 
			
		||||
   */
 | 
			
		||||
  if (r == EINVAL)
 | 
			
		||||
    if (errno == EBUSY)
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
  if (r)
 | 
			
		||||
    abort();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else /* !(defined(__APPLE__) && defined(__MACH__)) */
 | 
			
		||||
 | 
			
		||||
void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) {
 | 
			
		||||
  if (pthread_cond_wait(cond, mutex))
 | 
			
		||||
    abort();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout) {
 | 
			
		||||
  int r;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								deps/libuv/src/uv-common.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								deps/libuv/src/uv-common.c
									
									
									
									
										vendored
									
									
								
							@@ -559,6 +559,9 @@ static void uv__print_handles(uv_loop_t* loop, int only_active, FILE* stream) {
 | 
			
		||||
  if (loop == NULL)
 | 
			
		||||
    loop = uv_default_loop();
 | 
			
		||||
 | 
			
		||||
  if (stream == NULL)
 | 
			
		||||
    stream = stderr;
 | 
			
		||||
 | 
			
		||||
  uv__queue_foreach(q, &loop->handle_queue) {
 | 
			
		||||
    h = uv__queue_data(q, uv_handle_t, handle_queue);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								deps/libuv/src/win/dl.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								deps/libuv/src/win/dl.c
									
									
									
									
										vendored
									
									
								
							@@ -27,18 +27,17 @@ static int uv__dlerror(uv_lib_t* lib, const char* filename, DWORD errorno);
 | 
			
		||||
 | 
			
		||||
int uv_dlopen(const char* filename, uv_lib_t* lib) {
 | 
			
		||||
  WCHAR filename_w[32768];
 | 
			
		||||
  ssize_t r;
 | 
			
		||||
 | 
			
		||||
  lib->handle = NULL;
 | 
			
		||||
  lib->errmsg = NULL;
 | 
			
		||||
 | 
			
		||||
  if (!MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                           0,
 | 
			
		||||
                           filename,
 | 
			
		||||
                           -1,
 | 
			
		||||
                           filename_w,
 | 
			
		||||
                           ARRAY_SIZE(filename_w))) {
 | 
			
		||||
    return uv__dlerror(lib, filename, GetLastError());
 | 
			
		||||
  }
 | 
			
		||||
  r = uv_wtf8_length_as_utf16(filename);
 | 
			
		||||
  if (r < 0)
 | 
			
		||||
    return uv__dlerror(lib, filename, ERROR_NO_UNICODE_TRANSLATION);
 | 
			
		||||
  if ((size_t) r > ARRAY_SIZE(filename_w))
 | 
			
		||||
    return uv__dlerror(lib, filename, ERROR_INSUFFICIENT_BUFFER);
 | 
			
		||||
  uv_wtf8_to_utf16(filename, filename_w, r);
 | 
			
		||||
 | 
			
		||||
  lib->handle = LoadLibraryExW(filename_w, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
 | 
			
		||||
  if (lib->handle == NULL) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								deps/libuv/src/win/fs-event.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								deps/libuv/src/win/fs-event.c
									
									
									
									
										vendored
									
									
								
							@@ -157,7 +157,8 @@ int uv_fs_event_start(uv_fs_event_t* handle,
 | 
			
		||||
                      uv_fs_event_cb cb,
 | 
			
		||||
                      const char* path,
 | 
			
		||||
                      unsigned int flags) {
 | 
			
		||||
  int name_size, is_path_dir, size;
 | 
			
		||||
  int is_path_dir;
 | 
			
		||||
  size_t size;
 | 
			
		||||
  DWORD attr, last_error;
 | 
			
		||||
  WCHAR* dir = NULL, *dir_to_watch, *pathw = NULL;
 | 
			
		||||
  DWORD short_path_buffer_len;
 | 
			
		||||
@@ -176,23 +177,9 @@ int uv_fs_event_start(uv_fs_event_t* handle,
 | 
			
		||||
 | 
			
		||||
  uv__handle_start(handle);
 | 
			
		||||
 | 
			
		||||
  /* Convert name to UTF16. */
 | 
			
		||||
 | 
			
		||||
  name_size = MultiByteToWideChar(CP_UTF8, 0, path, -1, NULL, 0) *
 | 
			
		||||
              sizeof(WCHAR);
 | 
			
		||||
  pathw = (WCHAR*)uv__malloc(name_size);
 | 
			
		||||
  if (!pathw) {
 | 
			
		||||
    uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                           0,
 | 
			
		||||
                           path,
 | 
			
		||||
                           -1,
 | 
			
		||||
                           pathw,
 | 
			
		||||
                           name_size / sizeof(WCHAR))) {
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
  }
 | 
			
		||||
  last_error = uv__convert_utf8_to_utf16(path, &pathw);
 | 
			
		||||
  if (last_error)
 | 
			
		||||
    goto error_uv;
 | 
			
		||||
 | 
			
		||||
  /* Determine whether path is a file or a directory. */
 | 
			
		||||
  attr = GetFileAttributesW(pathw);
 | 
			
		||||
@@ -333,6 +320,9 @@ short_path_done:
 | 
			
		||||
  return 0;
 | 
			
		||||
 | 
			
		||||
error:
 | 
			
		||||
  last_error = uv_translate_sys_error(last_error);
 | 
			
		||||
 | 
			
		||||
error_uv:
 | 
			
		||||
  if (handle->path) {
 | 
			
		||||
    uv__free(handle->path);
 | 
			
		||||
    handle->path = NULL;
 | 
			
		||||
@@ -365,7 +355,7 @@ error:
 | 
			
		||||
 | 
			
		||||
  uv__free(short_path);
 | 
			
		||||
 | 
			
		||||
  return uv_translate_sys_error(last_error);
 | 
			
		||||
  return last_error;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										381
									
								
								deps/libuv/src/win/fs.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										381
									
								
								deps/libuv/src/win/fs.c
									
									
									
									
										vendored
									
									
								
							@@ -31,13 +31,16 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include "uv.h"
 | 
			
		||||
 | 
			
		||||
/* <winioctl.h> requires <windows.h>, included via "uv.h" above, but needs to
 | 
			
		||||
   be included before our "winapi.h", included via "internal.h" below. */
 | 
			
		||||
#include <winioctl.h>
 | 
			
		||||
 | 
			
		||||
#include "internal.h"
 | 
			
		||||
#include "req-inl.h"
 | 
			
		||||
#include "handle-inl.h"
 | 
			
		||||
#include "fs-fd-hash-inl.h"
 | 
			
		||||
 | 
			
		||||
#include <winioctl.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define UV_FS_FREE_PATHS         0x0002
 | 
			
		||||
#define UV_FS_FREE_PTR           0x0008
 | 
			
		||||
@@ -144,279 +147,6 @@ void uv__fs_init(void) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int32_t fs__decode_wtf8_char(const char** input) {
 | 
			
		||||
  uint32_t code_point;
 | 
			
		||||
  uint8_t b1;
 | 
			
		||||
  uint8_t b2;
 | 
			
		||||
  uint8_t b3;
 | 
			
		||||
  uint8_t b4;
 | 
			
		||||
 | 
			
		||||
  b1 = **input;
 | 
			
		||||
  if (b1 <= 0x7F)
 | 
			
		||||
    return b1; /* ASCII code point */
 | 
			
		||||
  if (b1 < 0xC2)
 | 
			
		||||
    return -1; /* invalid: continuation byte */
 | 
			
		||||
  code_point = b1;
 | 
			
		||||
 | 
			
		||||
  b2 = *++*input;
 | 
			
		||||
  if ((b2 & 0xC0) != 0x80)
 | 
			
		||||
    return -1; /* invalid: not a continuation byte */
 | 
			
		||||
  code_point = (code_point << 6) | (b2 & 0x3F);
 | 
			
		||||
  if (b1 <= 0xDF)
 | 
			
		||||
    return 0x7FF & code_point; /* two-byte character */
 | 
			
		||||
 | 
			
		||||
  b3 = *++*input;
 | 
			
		||||
  if ((b3 & 0xC0) != 0x80)
 | 
			
		||||
    return -1; /* invalid: not a continuation byte */
 | 
			
		||||
  code_point = (code_point << 6) | (b3 & 0x3F);
 | 
			
		||||
  if (b1 <= 0xEF)
 | 
			
		||||
    return 0xFFFF & code_point; /* three-byte character */
 | 
			
		||||
 | 
			
		||||
  b4 = *++*input;
 | 
			
		||||
  if ((b4 & 0xC0) != 0x80)
 | 
			
		||||
    return -1; /* invalid: not a continuation byte */
 | 
			
		||||
  code_point = (code_point << 6) | (b4 & 0x3F);
 | 
			
		||||
  if (b1 <= 0xF4)
 | 
			
		||||
    if (code_point <= 0x10FFFF)
 | 
			
		||||
      return code_point; /* four-byte character */
 | 
			
		||||
 | 
			
		||||
  /* code point too large */
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static ssize_t fs__get_length_wtf8(const char* source_ptr) {
 | 
			
		||||
  size_t w_target_len = 0;
 | 
			
		||||
  int32_t code_point;
 | 
			
		||||
 | 
			
		||||
  do {
 | 
			
		||||
    code_point = fs__decode_wtf8_char(&source_ptr);
 | 
			
		||||
    if (code_point < 0)
 | 
			
		||||
      return -1;
 | 
			
		||||
    if (code_point > 0xFFFF)
 | 
			
		||||
      w_target_len++;
 | 
			
		||||
    w_target_len++;
 | 
			
		||||
  } while (*source_ptr++);
 | 
			
		||||
  return w_target_len;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void fs__wtf8_to_wide(const char* source_ptr, WCHAR* w_target) {
 | 
			
		||||
  int32_t code_point;
 | 
			
		||||
 | 
			
		||||
  do {
 | 
			
		||||
    code_point = fs__decode_wtf8_char(&source_ptr);
 | 
			
		||||
    /* fs__get_length_wtf8 should have been called and checked first. */
 | 
			
		||||
    assert(code_point >= 0);
 | 
			
		||||
    if (code_point > 0x10000) {
 | 
			
		||||
      assert(code_point < 0x10FFFF);
 | 
			
		||||
      *w_target++ = (((code_point - 0x10000) >> 10) + 0xD800);
 | 
			
		||||
      *w_target++ = ((code_point - 0x10000) & 0x3FF) + 0xDC00;
 | 
			
		||||
    } else {
 | 
			
		||||
      *w_target++ = code_point;
 | 
			
		||||
    }
 | 
			
		||||
  } while (*source_ptr++);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
 | 
			
		||||
    const char* new_path, const int copy_path) {
 | 
			
		||||
  WCHAR* buf;
 | 
			
		||||
  WCHAR* pos;
 | 
			
		||||
  size_t buf_sz = 0;
 | 
			
		||||
  size_t path_len = 0;
 | 
			
		||||
  ssize_t pathw_len = 0;
 | 
			
		||||
  ssize_t new_pathw_len = 0;
 | 
			
		||||
 | 
			
		||||
  /* new_path can only be set if path is also set. */
 | 
			
		||||
  assert(new_path == NULL || path != NULL);
 | 
			
		||||
 | 
			
		||||
  if (path != NULL) {
 | 
			
		||||
    pathw_len = fs__get_length_wtf8(path);
 | 
			
		||||
    if (pathw_len < 0)
 | 
			
		||||
      return ERROR_INVALID_NAME;
 | 
			
		||||
    buf_sz += pathw_len * sizeof(WCHAR);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (path != NULL && copy_path) {
 | 
			
		||||
    path_len = 1 + strlen(path);
 | 
			
		||||
    buf_sz += path_len;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (new_path != NULL) {
 | 
			
		||||
    new_pathw_len = fs__get_length_wtf8(new_path);
 | 
			
		||||
    if (new_pathw_len < 0)
 | 
			
		||||
      return ERROR_INVALID_NAME;
 | 
			
		||||
    buf_sz += new_pathw_len * sizeof(WCHAR);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  if (buf_sz == 0) {
 | 
			
		||||
    req->file.pathw = NULL;
 | 
			
		||||
    req->fs.info.new_pathw = NULL;
 | 
			
		||||
    req->path = NULL;
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  buf = uv__malloc(buf_sz);
 | 
			
		||||
  if (buf == NULL) {
 | 
			
		||||
    return ERROR_OUTOFMEMORY;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  pos = buf;
 | 
			
		||||
 | 
			
		||||
  if (path != NULL) {
 | 
			
		||||
    fs__wtf8_to_wide(path, pos);
 | 
			
		||||
    req->file.pathw = pos;
 | 
			
		||||
    pos += pathw_len;
 | 
			
		||||
  } else {
 | 
			
		||||
    req->file.pathw = NULL;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (new_path != NULL) {
 | 
			
		||||
    fs__wtf8_to_wide(new_path, pos);
 | 
			
		||||
    req->fs.info.new_pathw = pos;
 | 
			
		||||
    pos += new_pathw_len;
 | 
			
		||||
  } else {
 | 
			
		||||
    req->fs.info.new_pathw = NULL;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  req->path = path;
 | 
			
		||||
  if (path != NULL && copy_path) {
 | 
			
		||||
    memcpy(pos, path, path_len);
 | 
			
		||||
    assert(path_len == buf_sz - (pos - buf) * sizeof(WCHAR));
 | 
			
		||||
    req->path = (char*) pos;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  req->flags |= UV_FS_FREE_PATHS;
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
INLINE static void uv__fs_req_init(uv_loop_t* loop, uv_fs_t* req,
 | 
			
		||||
    uv_fs_type fs_type, const uv_fs_cb cb) {
 | 
			
		||||
  uv__once_init();
 | 
			
		||||
  UV_REQ_INIT(req, UV_FS);
 | 
			
		||||
  req->loop = loop;
 | 
			
		||||
  req->flags = 0;
 | 
			
		||||
  req->fs_type = fs_type;
 | 
			
		||||
  req->sys_errno_ = 0;
 | 
			
		||||
  req->result = 0;
 | 
			
		||||
  req->ptr = NULL;
 | 
			
		||||
  req->path = NULL;
 | 
			
		||||
  req->cb = cb;
 | 
			
		||||
  memset(&req->fs, 0, sizeof(req->fs));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int32_t fs__get_surrogate_value(const WCHAR* w_source_ptr,
 | 
			
		||||
                                       size_t w_source_len) {
 | 
			
		||||
  WCHAR u;
 | 
			
		||||
  WCHAR next;
 | 
			
		||||
 | 
			
		||||
  u = w_source_ptr[0];
 | 
			
		||||
  if (u >= 0xD800 && u <= 0xDBFF && w_source_len > 1) {
 | 
			
		||||
    next = w_source_ptr[1];
 | 
			
		||||
    if (next >= 0xDC00 && next <= 0xDFFF)
 | 
			
		||||
      return 0x10000 + ((u - 0xD800) << 10) + (next - 0xDC00);
 | 
			
		||||
  }
 | 
			
		||||
  return u;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static size_t fs__get_length_wide(const WCHAR* w_source_ptr,
 | 
			
		||||
                                  size_t w_source_len) {
 | 
			
		||||
  size_t target_len;
 | 
			
		||||
  int32_t code_point;
 | 
			
		||||
 | 
			
		||||
  target_len = 0;
 | 
			
		||||
  for (; w_source_len; w_source_len--, w_source_ptr++) {
 | 
			
		||||
    code_point = fs__get_surrogate_value(w_source_ptr, w_source_len);
 | 
			
		||||
    /* Can be invalid UTF-8 but must be valid WTF-8. */
 | 
			
		||||
    assert(code_point >= 0);
 | 
			
		||||
    if (code_point < 0x80)
 | 
			
		||||
      target_len += 1;
 | 
			
		||||
    else if (code_point < 0x800)
 | 
			
		||||
      target_len += 2;
 | 
			
		||||
    else if (code_point < 0x10000)
 | 
			
		||||
      target_len += 3;
 | 
			
		||||
    else {
 | 
			
		||||
      target_len += 4;
 | 
			
		||||
      w_source_ptr++;
 | 
			
		||||
      w_source_len--;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return target_len;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int fs__wide_to_wtf8(WCHAR* w_source_ptr,
 | 
			
		||||
                            size_t w_source_len,
 | 
			
		||||
                            char** target_ptr,
 | 
			
		||||
                            size_t* target_len_ptr) {
 | 
			
		||||
  size_t target_len;
 | 
			
		||||
  char* target;
 | 
			
		||||
  int32_t code_point;
 | 
			
		||||
 | 
			
		||||
  /* If *target_ptr is provided, then *target_len_ptr must be its length
 | 
			
		||||
   * (excluding space for null), otherwise we will compute the target_len_ptr
 | 
			
		||||
   * length and may return a new allocation in *target_ptr if target_ptr is
 | 
			
		||||
   * provided. */
 | 
			
		||||
  if (target_ptr == NULL || *target_ptr == NULL) {
 | 
			
		||||
    target_len = fs__get_length_wide(w_source_ptr, w_source_len);
 | 
			
		||||
    if (target_len_ptr != NULL)
 | 
			
		||||
      *target_len_ptr = target_len;
 | 
			
		||||
  } else {
 | 
			
		||||
    target_len = *target_len_ptr;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (target_ptr == NULL)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (*target_ptr == NULL) {
 | 
			
		||||
    target = uv__malloc(target_len + 1);
 | 
			
		||||
    if (target == NULL) {
 | 
			
		||||
      SetLastError(ERROR_OUTOFMEMORY);
 | 
			
		||||
      return -1;
 | 
			
		||||
    }
 | 
			
		||||
    *target_ptr = target;
 | 
			
		||||
  } else {
 | 
			
		||||
    target = *target_ptr;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (; w_source_len; w_source_len--, w_source_ptr++) {
 | 
			
		||||
    code_point = fs__get_surrogate_value(w_source_ptr, w_source_len);
 | 
			
		||||
    /* Can be invalid UTF-8 but must be valid WTF-8. */
 | 
			
		||||
    assert(code_point >= 0);
 | 
			
		||||
 | 
			
		||||
    if (code_point < 0x80) {
 | 
			
		||||
      *target++ = code_point;
 | 
			
		||||
    } else if (code_point < 0x800) {
 | 
			
		||||
      *target++ = 0xC0 | (code_point >> 6);
 | 
			
		||||
      *target++ = 0x80 | (code_point & 0x3F);
 | 
			
		||||
    } else if (code_point < 0x10000) {
 | 
			
		||||
      *target++ = 0xE0 | (code_point >> 12);
 | 
			
		||||
      *target++ = 0x80 | ((code_point >> 6) & 0x3F);
 | 
			
		||||
      *target++ = 0x80 | (code_point & 0x3F);
 | 
			
		||||
    } else {
 | 
			
		||||
      *target++ = 0xF0 | (code_point >> 18);
 | 
			
		||||
      *target++ = 0x80 | ((code_point >> 12) & 0x3F);
 | 
			
		||||
      *target++ = 0x80 | ((code_point >> 6) & 0x3F);
 | 
			
		||||
      *target++ = 0x80 | (code_point & 0x3F);
 | 
			
		||||
      w_source_ptr++;
 | 
			
		||||
      w_source_len--;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  assert((size_t) (target - *target_ptr) == target_len);
 | 
			
		||||
 | 
			
		||||
  *target++ = '\0';
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
INLINE static int fs__readlink_handle(HANDLE handle,
 | 
			
		||||
                                      char** target_ptr,
 | 
			
		||||
                                      size_t* target_len_ptr) {
 | 
			
		||||
@@ -550,7 +280,98 @@ INLINE static int fs__readlink_handle(HANDLE handle,
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  assert(target_ptr == NULL || *target_ptr == NULL);
 | 
			
		||||
  return fs__wide_to_wtf8(w_target, w_target_len, target_ptr, target_len_ptr);
 | 
			
		||||
  return uv_utf16_to_wtf8(w_target, w_target_len, target_ptr, target_len_ptr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
 | 
			
		||||
    const char* new_path, const int copy_path) {
 | 
			
		||||
  WCHAR* buf;
 | 
			
		||||
  WCHAR* pos;
 | 
			
		||||
  size_t buf_sz = 0;
 | 
			
		||||
  size_t path_len = 0;
 | 
			
		||||
  ssize_t pathw_len = 0;
 | 
			
		||||
  ssize_t new_pathw_len = 0;
 | 
			
		||||
 | 
			
		||||
  /* new_path can only be set if path is also set. */
 | 
			
		||||
  assert(new_path == NULL || path != NULL);
 | 
			
		||||
 | 
			
		||||
  if (path != NULL) {
 | 
			
		||||
    pathw_len = uv_wtf8_length_as_utf16(path);
 | 
			
		||||
    if (pathw_len < 0)
 | 
			
		||||
      return ERROR_INVALID_NAME;
 | 
			
		||||
    buf_sz += pathw_len * sizeof(WCHAR);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (path != NULL && copy_path) {
 | 
			
		||||
    path_len = 1 + strlen(path);
 | 
			
		||||
    buf_sz += path_len;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (new_path != NULL) {
 | 
			
		||||
    new_pathw_len = uv_wtf8_length_as_utf16(new_path);
 | 
			
		||||
    if (new_pathw_len < 0)
 | 
			
		||||
      return ERROR_INVALID_NAME;
 | 
			
		||||
    buf_sz += new_pathw_len * sizeof(WCHAR);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  if (buf_sz == 0) {
 | 
			
		||||
    req->file.pathw = NULL;
 | 
			
		||||
    req->fs.info.new_pathw = NULL;
 | 
			
		||||
    req->path = NULL;
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  buf = uv__malloc(buf_sz);
 | 
			
		||||
  if (buf == NULL) {
 | 
			
		||||
    return ERROR_OUTOFMEMORY;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  pos = buf;
 | 
			
		||||
 | 
			
		||||
  if (path != NULL) {
 | 
			
		||||
    uv_wtf8_to_utf16(path, pos, pathw_len);
 | 
			
		||||
    req->file.pathw = pos;
 | 
			
		||||
    pos += pathw_len;
 | 
			
		||||
  } else {
 | 
			
		||||
    req->file.pathw = NULL;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (new_path != NULL) {
 | 
			
		||||
    uv_wtf8_to_utf16(new_path, pos, new_pathw_len);
 | 
			
		||||
    req->fs.info.new_pathw = pos;
 | 
			
		||||
    pos += new_pathw_len;
 | 
			
		||||
  } else {
 | 
			
		||||
    req->fs.info.new_pathw = NULL;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  req->path = path;
 | 
			
		||||
  if (path != NULL && copy_path) {
 | 
			
		||||
    memcpy(pos, path, path_len);
 | 
			
		||||
    assert(path_len == buf_sz - (pos - buf) * sizeof(WCHAR));
 | 
			
		||||
    req->path = (char*) pos;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  req->flags |= UV_FS_FREE_PATHS;
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
INLINE static void uv__fs_req_init(uv_loop_t* loop, uv_fs_t* req,
 | 
			
		||||
    uv_fs_type fs_type, const uv_fs_cb cb) {
 | 
			
		||||
  uv__once_init();
 | 
			
		||||
  UV_REQ_INIT(req, UV_FS);
 | 
			
		||||
  req->loop = loop;
 | 
			
		||||
  req->flags = 0;
 | 
			
		||||
  req->fs_type = fs_type;
 | 
			
		||||
  req->sys_errno_ = 0;
 | 
			
		||||
  req->result = 0;
 | 
			
		||||
  req->ptr = NULL;
 | 
			
		||||
  req->path = NULL;
 | 
			
		||||
  req->cb = cb;
 | 
			
		||||
  memset(&req->fs, 0, sizeof(req->fs));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1569,7 +1390,7 @@ void fs__scandir(uv_fs_t* req) {
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      /* Compute the space required to store the filename as WTF-8. */
 | 
			
		||||
      wtf8_len = fs__get_length_wide(&info->FileName[0], wchar_len);
 | 
			
		||||
      wtf8_len = uv_utf16_length_as_wtf8(&info->FileName[0], wchar_len);
 | 
			
		||||
 | 
			
		||||
      /* Resize the dirent array if needed. */
 | 
			
		||||
      if (dirents_used >= dirents_size) {
 | 
			
		||||
@@ -1597,8 +1418,8 @@ void fs__scandir(uv_fs_t* req) {
 | 
			
		||||
 | 
			
		||||
      /* Convert file name to UTF-8. */
 | 
			
		||||
      wtf8 = &dirent->d_name[0];
 | 
			
		||||
      if (fs__wide_to_wtf8(&info->FileName[0], wchar_len, &wtf8, &wtf8_len) == -1)
 | 
			
		||||
        goto win32_error;
 | 
			
		||||
      if (uv_utf16_to_wtf8(&info->FileName[0], wchar_len, &wtf8, &wtf8_len) != 0)
 | 
			
		||||
        goto out_of_memory_error;
 | 
			
		||||
 | 
			
		||||
      /* Fill out the type field. */
 | 
			
		||||
      if (info->FileAttributes & FILE_ATTRIBUTE_DEVICE)
 | 
			
		||||
@@ -2824,7 +2645,7 @@ static ssize_t fs__realpath_handle(HANDLE handle, char** realpath_ptr) {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  assert(*realpath_ptr == NULL);
 | 
			
		||||
  r = fs__wide_to_wtf8(w_realpath_ptr, w_realpath_len, realpath_ptr, NULL);
 | 
			
		||||
  r = uv_utf16_to_wtf8(w_realpath_ptr, w_realpath_len, realpath_ptr, NULL);
 | 
			
		||||
  uv__free(w_realpath_buf);
 | 
			
		||||
  return r;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										156
									
								
								deps/libuv/src/win/getaddrinfo.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										156
									
								
								deps/libuv/src/win/getaddrinfo.c
									
									
									
									
										vendored
									
									
								
							@@ -104,13 +104,14 @@ static void uv__getaddrinfo_work(struct uv__work* w) {
 | 
			
		||||
 */
 | 
			
		||||
static void uv__getaddrinfo_done(struct uv__work* w, int status) {
 | 
			
		||||
  uv_getaddrinfo_t* req;
 | 
			
		||||
  int addrinfo_len = 0;
 | 
			
		||||
  int name_len = 0;
 | 
			
		||||
  size_t addrinfo_len = 0;
 | 
			
		||||
  ssize_t name_len = 0;
 | 
			
		||||
  size_t addrinfo_struct_len = ALIGNED_SIZE(sizeof(struct addrinfo));
 | 
			
		||||
  struct addrinfoW* addrinfow_ptr;
 | 
			
		||||
  struct addrinfo* addrinfo_ptr;
 | 
			
		||||
  char* alloc_ptr = NULL;
 | 
			
		||||
  char* cur_ptr = NULL;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  req = container_of(w, uv_getaddrinfo_t, work_req);
 | 
			
		||||
 | 
			
		||||
@@ -131,19 +132,12 @@ static void uv__getaddrinfo_done(struct uv__work* w, int status) {
 | 
			
		||||
      addrinfo_len += addrinfo_struct_len +
 | 
			
		||||
          ALIGNED_SIZE(addrinfow_ptr->ai_addrlen);
 | 
			
		||||
      if (addrinfow_ptr->ai_canonname != NULL) {
 | 
			
		||||
        name_len = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                       0,
 | 
			
		||||
                                       addrinfow_ptr->ai_canonname,
 | 
			
		||||
                                       -1,
 | 
			
		||||
                                       NULL,
 | 
			
		||||
                                       0,
 | 
			
		||||
                                       NULL,
 | 
			
		||||
                                       NULL);
 | 
			
		||||
        if (name_len == 0) {
 | 
			
		||||
          req->retcode = uv_translate_sys_error(GetLastError());
 | 
			
		||||
        name_len = uv_utf16_length_as_wtf8(addrinfow_ptr->ai_canonname, -1);
 | 
			
		||||
        if (name_len < 0) {
 | 
			
		||||
          req->retcode = name_len;
 | 
			
		||||
          goto complete;
 | 
			
		||||
        }
 | 
			
		||||
        addrinfo_len += ALIGNED_SIZE(name_len);
 | 
			
		||||
        addrinfo_len += ALIGNED_SIZE(name_len + 1);
 | 
			
		||||
      }
 | 
			
		||||
      addrinfow_ptr = addrinfow_ptr->ai_next;
 | 
			
		||||
    }
 | 
			
		||||
@@ -182,27 +176,14 @@ static void uv__getaddrinfo_done(struct uv__work* w, int status) {
 | 
			
		||||
 | 
			
		||||
        /* convert canonical name to UTF-8 */
 | 
			
		||||
        if (addrinfow_ptr->ai_canonname != NULL) {
 | 
			
		||||
          name_len = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                         0,
 | 
			
		||||
                                         addrinfow_ptr->ai_canonname,
 | 
			
		||||
                                         -1,
 | 
			
		||||
                                         NULL,
 | 
			
		||||
                                         0,
 | 
			
		||||
                                         NULL,
 | 
			
		||||
                                         NULL);
 | 
			
		||||
          assert(name_len > 0);
 | 
			
		||||
          assert(cur_ptr + name_len <= alloc_ptr + addrinfo_len);
 | 
			
		||||
          name_len = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                         0,
 | 
			
		||||
                                         addrinfow_ptr->ai_canonname,
 | 
			
		||||
                                         -1,
 | 
			
		||||
                                         cur_ptr,
 | 
			
		||||
                                         name_len,
 | 
			
		||||
                                         NULL,
 | 
			
		||||
                                         NULL);
 | 
			
		||||
          assert(name_len > 0);
 | 
			
		||||
          name_len = alloc_ptr + addrinfo_len - cur_ptr;
 | 
			
		||||
          r = uv__copy_utf16_to_utf8(addrinfow_ptr->ai_canonname,
 | 
			
		||||
                                     -1,
 | 
			
		||||
                                     cur_ptr,
 | 
			
		||||
                                     (size_t*)&name_len);
 | 
			
		||||
          assert(r == 0);
 | 
			
		||||
          addrinfo_ptr->ai_canonname = cur_ptr;
 | 
			
		||||
          cur_ptr += ALIGNED_SIZE(name_len);
 | 
			
		||||
          cur_ptr += ALIGNED_SIZE(name_len + 1);
 | 
			
		||||
        }
 | 
			
		||||
        assert(cur_ptr <= alloc_ptr + addrinfo_len);
 | 
			
		||||
 | 
			
		||||
@@ -261,12 +242,11 @@ int uv_getaddrinfo(uv_loop_t* loop,
 | 
			
		||||
                   const char* service,
 | 
			
		||||
                   const struct addrinfo* hints) {
 | 
			
		||||
  char hostname_ascii[256];
 | 
			
		||||
  int nodesize = 0;
 | 
			
		||||
  int servicesize = 0;
 | 
			
		||||
  int hintssize = 0;
 | 
			
		||||
  size_t nodesize = 0;
 | 
			
		||||
  size_t servicesize = 0;
 | 
			
		||||
  size_t hintssize = 0;
 | 
			
		||||
  char* alloc_ptr = NULL;
 | 
			
		||||
  int err;
 | 
			
		||||
  long rc;
 | 
			
		||||
  ssize_t rc;
 | 
			
		||||
 | 
			
		||||
  if (req == NULL || (node == NULL && service == NULL)) {
 | 
			
		||||
    return UV_EINVAL;
 | 
			
		||||
@@ -286,56 +266,36 @@ int uv_getaddrinfo(uv_loop_t* loop,
 | 
			
		||||
                          hostname_ascii + sizeof(hostname_ascii));
 | 
			
		||||
    if (rc < 0)
 | 
			
		||||
      return rc;
 | 
			
		||||
    nodesize = ALIGNED_SIZE(MultiByteToWideChar(CP_UTF8, 0, hostname_ascii,
 | 
			
		||||
                                                -1, NULL, 0) * sizeof(WCHAR));
 | 
			
		||||
    if (nodesize == 0) {
 | 
			
		||||
      err = GetLastError();
 | 
			
		||||
      goto error;
 | 
			
		||||
    }
 | 
			
		||||
    nodesize = strlen(hostname_ascii) + 1;
 | 
			
		||||
    node = hostname_ascii;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (service != NULL) {
 | 
			
		||||
    servicesize = ALIGNED_SIZE(MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                                                   0,
 | 
			
		||||
                                                   service,
 | 
			
		||||
                                                   -1,
 | 
			
		||||
                                                   NULL,
 | 
			
		||||
                                                   0) *
 | 
			
		||||
                               sizeof(WCHAR));
 | 
			
		||||
    if (servicesize == 0) {
 | 
			
		||||
      err = GetLastError();
 | 
			
		||||
      goto error;
 | 
			
		||||
    }
 | 
			
		||||
    rc = uv_wtf8_length_as_utf16(service);
 | 
			
		||||
    if (rc < 0)
 | 
			
		||||
       return rc;
 | 
			
		||||
    servicesize = rc;
 | 
			
		||||
  }
 | 
			
		||||
  if (hints != NULL) {
 | 
			
		||||
    hintssize = ALIGNED_SIZE(sizeof(struct addrinfoW));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* allocate memory for inputs, and partition it as needed */
 | 
			
		||||
  alloc_ptr = (char*)uv__malloc(nodesize + servicesize + hintssize);
 | 
			
		||||
  if (!alloc_ptr) {
 | 
			
		||||
    err = WSAENOBUFS;
 | 
			
		||||
    goto error;
 | 
			
		||||
  }
 | 
			
		||||
  alloc_ptr = uv__malloc(ALIGNED_SIZE(nodesize * sizeof(WCHAR)) +
 | 
			
		||||
                         ALIGNED_SIZE(servicesize * sizeof(WCHAR)) +
 | 
			
		||||
                         hintssize);
 | 
			
		||||
  if (!alloc_ptr)
 | 
			
		||||
    return UV_ENOMEM;
 | 
			
		||||
 | 
			
		||||
  /* save alloc_ptr now so we can free if error */
 | 
			
		||||
  req->alloc = (void*)alloc_ptr;
 | 
			
		||||
  req->alloc = (void*) alloc_ptr;
 | 
			
		||||
 | 
			
		||||
  /* Convert node string to UTF16 into allocated memory and save pointer in the
 | 
			
		||||
   * request. */
 | 
			
		||||
   * request. The node here has been converted to ascii. */
 | 
			
		||||
  if (node != NULL) {
 | 
			
		||||
    req->node = (WCHAR*)alloc_ptr;
 | 
			
		||||
    if (MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                            0,
 | 
			
		||||
                            node,
 | 
			
		||||
                            -1,
 | 
			
		||||
                            (WCHAR*) alloc_ptr,
 | 
			
		||||
                            nodesize / sizeof(WCHAR)) == 0) {
 | 
			
		||||
      err = GetLastError();
 | 
			
		||||
      goto error;
 | 
			
		||||
    }
 | 
			
		||||
    alloc_ptr += nodesize;
 | 
			
		||||
    req->node = (WCHAR*) alloc_ptr;
 | 
			
		||||
    uv_wtf8_to_utf16(node, (WCHAR*) alloc_ptr, nodesize);
 | 
			
		||||
    alloc_ptr += ALIGNED_SIZE(nodesize * sizeof(WCHAR));
 | 
			
		||||
  } else {
 | 
			
		||||
    req->node = NULL;
 | 
			
		||||
  }
 | 
			
		||||
@@ -343,24 +303,16 @@ int uv_getaddrinfo(uv_loop_t* loop,
 | 
			
		||||
  /* Convert service string to UTF16 into allocated memory and save pointer in
 | 
			
		||||
   * the req. */
 | 
			
		||||
  if (service != NULL) {
 | 
			
		||||
    req->service = (WCHAR*)alloc_ptr;
 | 
			
		||||
    if (MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                            0,
 | 
			
		||||
                            service,
 | 
			
		||||
                            -1,
 | 
			
		||||
                            (WCHAR*) alloc_ptr,
 | 
			
		||||
                            servicesize / sizeof(WCHAR)) == 0) {
 | 
			
		||||
      err = GetLastError();
 | 
			
		||||
      goto error;
 | 
			
		||||
    }
 | 
			
		||||
    alloc_ptr += servicesize;
 | 
			
		||||
    req->service = (WCHAR*) alloc_ptr;
 | 
			
		||||
    uv_wtf8_to_utf16(service, (WCHAR*) alloc_ptr, servicesize);
 | 
			
		||||
    alloc_ptr += ALIGNED_SIZE(servicesize * sizeof(WCHAR));
 | 
			
		||||
  } else {
 | 
			
		||||
    req->service = NULL;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* copy hints to allocated memory and save pointer in req */
 | 
			
		||||
  if (hints != NULL) {
 | 
			
		||||
    req->addrinfow = (struct addrinfoW*)alloc_ptr;
 | 
			
		||||
    req->addrinfow = (struct addrinfoW*) alloc_ptr;
 | 
			
		||||
    req->addrinfow->ai_family = hints->ai_family;
 | 
			
		||||
    req->addrinfow->ai_socktype = hints->ai_socktype;
 | 
			
		||||
    req->addrinfow->ai_protocol = hints->ai_protocol;
 | 
			
		||||
@@ -387,19 +339,11 @@ int uv_getaddrinfo(uv_loop_t* loop,
 | 
			
		||||
    uv__getaddrinfo_done(&req->work_req, 0);
 | 
			
		||||
    return req->retcode;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
error:
 | 
			
		||||
  if (req != NULL) {
 | 
			
		||||
    uv__free(req->alloc);
 | 
			
		||||
    req->alloc = NULL;
 | 
			
		||||
  }
 | 
			
		||||
  return uv_translate_sys_error(err);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int uv_if_indextoname(unsigned int ifindex, char* buffer, size_t* size) {
 | 
			
		||||
  NET_LUID luid;
 | 
			
		||||
  wchar_t wname[NDIS_IF_MAX_STRING_SIZE + 1]; /* Add one for the NUL. */
 | 
			
		||||
  DWORD bufsize;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  if (buffer == NULL || size == NULL || *size == 0)
 | 
			
		||||
@@ -415,31 +359,7 @@ int uv_if_indextoname(unsigned int ifindex, char* buffer, size_t* size) {
 | 
			
		||||
  if (r != 0)
 | 
			
		||||
    return uv_translate_sys_error(r);
 | 
			
		||||
 | 
			
		||||
  /* Check how much space we need */
 | 
			
		||||
  bufsize = WideCharToMultiByte(CP_UTF8, 0, wname, -1, NULL, 0, NULL, NULL);
 | 
			
		||||
 | 
			
		||||
  if (bufsize == 0) {
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
  } else if (bufsize > *size) {
 | 
			
		||||
    *size = bufsize;
 | 
			
		||||
    return UV_ENOBUFS;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Convert to UTF-8 */
 | 
			
		||||
  bufsize = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                0,
 | 
			
		||||
                                wname,
 | 
			
		||||
                                -1,
 | 
			
		||||
                                buffer,
 | 
			
		||||
                                *size,
 | 
			
		||||
                                NULL,
 | 
			
		||||
                                NULL);
 | 
			
		||||
 | 
			
		||||
  if (bufsize == 0)
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
 | 
			
		||||
  *size = bufsize - 1;
 | 
			
		||||
  return 0;
 | 
			
		||||
  return uv__copy_utf16_to_utf8(wname, -1, buffer, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int uv_if_indextoiid(unsigned int ifindex, char* buffer, size_t* size) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								deps/libuv/src/win/getnameinfo.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								deps/libuv/src/win/getnameinfo.c
									
									
									
									
										vendored
									
									
								
							@@ -42,6 +42,7 @@ static void uv__getnameinfo_work(struct uv__work* w) {
 | 
			
		||||
  uv_getnameinfo_t* req;
 | 
			
		||||
  WCHAR host[NI_MAXHOST];
 | 
			
		||||
  WCHAR service[NI_MAXSERV];
 | 
			
		||||
  size_t size;
 | 
			
		||||
  int ret;
 | 
			
		||||
 | 
			
		||||
  req = container_of(w, uv_getnameinfo_t, work_req);
 | 
			
		||||
@@ -57,29 +58,17 @@ static void uv__getnameinfo_work(struct uv__work* w) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ret = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                            0,
 | 
			
		||||
                            host,
 | 
			
		||||
                            -1,
 | 
			
		||||
                            req->host,
 | 
			
		||||
                            sizeof(req->host),
 | 
			
		||||
                            NULL,
 | 
			
		||||
                            NULL);
 | 
			
		||||
  if (ret == 0) {
 | 
			
		||||
    req->retcode = uv_translate_sys_error(GetLastError());
 | 
			
		||||
  size = sizeof(req->host);
 | 
			
		||||
  ret = uv__copy_utf16_to_utf8(host, -1, req->host, &size);
 | 
			
		||||
  if (ret < 0) {
 | 
			
		||||
    req->retcode = ret;
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ret = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                            0,
 | 
			
		||||
                            service,
 | 
			
		||||
                            -1,
 | 
			
		||||
                            req->service,
 | 
			
		||||
                            sizeof(req->service),
 | 
			
		||||
                            NULL,
 | 
			
		||||
                            NULL);
 | 
			
		||||
  if (ret == 0) {
 | 
			
		||||
    req->retcode = uv_translate_sys_error(GetLastError());
 | 
			
		||||
  size = sizeof(req->service);
 | 
			
		||||
  ret = uv__copy_utf16_to_utf8(service, -1, req->service, &size);
 | 
			
		||||
  if (ret < 0) {
 | 
			
		||||
    req->retcode = ret;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								deps/libuv/src/win/internal.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								deps/libuv/src/win/internal.h
									
									
									
									
										vendored
									
									
								
							@@ -257,8 +257,9 @@ void uv__util_init(void);
 | 
			
		||||
 | 
			
		||||
uint64_t uv__hrtime(unsigned int scale);
 | 
			
		||||
__declspec(noreturn) void uv_fatal_error(const int errorno, const char* syscall);
 | 
			
		||||
int uv__convert_utf16_to_utf8(const WCHAR* utf16, int utf16len, char** utf8);
 | 
			
		||||
int uv__convert_utf8_to_utf16(const char* utf8, int utf8len, WCHAR** utf16);
 | 
			
		||||
int uv__convert_utf16_to_utf8(const WCHAR* utf16, size_t utf16len, char** utf8);
 | 
			
		||||
int uv__copy_utf16_to_utf8(const WCHAR* utf16, size_t utf16len, char* utf8, size_t *size);
 | 
			
		||||
int uv__convert_utf8_to_utf16(const char* utf8, WCHAR** utf16);
 | 
			
		||||
 | 
			
		||||
typedef int (WINAPI *uv__peersockfunc)(SOCKET, struct sockaddr*, int*);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										146
									
								
								deps/libuv/src/win/pipe.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										146
									
								
								deps/libuv/src/win/pipe.c
									
									
									
									
										vendored
									
									
								
							@@ -49,7 +49,7 @@ static const int default_pending_pipe_instances = 4;
 | 
			
		||||
 | 
			
		||||
/* Pipe prefix */
 | 
			
		||||
static char pipe_prefix[] = "\\\\?\\pipe";
 | 
			
		||||
static const int pipe_prefix_len = sizeof(pipe_prefix) - 1;
 | 
			
		||||
static const size_t pipe_prefix_len = sizeof(pipe_prefix) - 1;
 | 
			
		||||
 | 
			
		||||
/* IPC incoming xfer queue item. */
 | 
			
		||||
typedef struct {
 | 
			
		||||
@@ -703,7 +703,7 @@ int uv_pipe_bind2(uv_pipe_t* handle,
 | 
			
		||||
                  size_t namelen,
 | 
			
		||||
                  unsigned int flags) {
 | 
			
		||||
  uv_loop_t* loop = handle->loop;
 | 
			
		||||
  int i, err, nameSize;
 | 
			
		||||
  int i, err;
 | 
			
		||||
  uv_pipe_accept_t* req;
 | 
			
		||||
 | 
			
		||||
  if (flags & ~UV_PIPE_NO_TRUNCATE) {
 | 
			
		||||
@@ -742,9 +742,8 @@ int uv_pipe_bind2(uv_pipe_t* handle,
 | 
			
		||||
 | 
			
		||||
  handle->pipe.serv.accept_reqs = (uv_pipe_accept_t*)
 | 
			
		||||
    uv__malloc(sizeof(uv_pipe_accept_t) * handle->pipe.serv.pending_instances);
 | 
			
		||||
  if (!handle->pipe.serv.accept_reqs) {
 | 
			
		||||
    uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc");
 | 
			
		||||
  }
 | 
			
		||||
  if (!handle->pipe.serv.accept_reqs)
 | 
			
		||||
    return UV_ENOMEM;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < handle->pipe.serv.pending_instances; i++) {
 | 
			
		||||
    req = &handle->pipe.serv.accept_reqs[i];
 | 
			
		||||
@@ -754,22 +753,9 @@ int uv_pipe_bind2(uv_pipe_t* handle,
 | 
			
		||||
    req->next_pending = NULL;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Convert name to UTF16. */
 | 
			
		||||
  nameSize = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0) * sizeof(WCHAR);
 | 
			
		||||
  handle->name = uv__malloc(nameSize);
 | 
			
		||||
  if (!handle->name) {
 | 
			
		||||
    uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                           0,
 | 
			
		||||
                           name,
 | 
			
		||||
                           -1,
 | 
			
		||||
                           handle->name,
 | 
			
		||||
                           nameSize / sizeof(WCHAR))) {
 | 
			
		||||
    err = GetLastError();
 | 
			
		||||
    goto error;
 | 
			
		||||
  }
 | 
			
		||||
  err = uv__convert_utf8_to_utf16(name, &handle->name);
 | 
			
		||||
  if (err)
 | 
			
		||||
    return err;
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
   * Attempt to create the first pipe with FILE_FLAG_FIRST_PIPE_INSTANCE.
 | 
			
		||||
@@ -795,10 +781,8 @@ int uv_pipe_bind2(uv_pipe_t* handle,
 | 
			
		||||
  return 0;
 | 
			
		||||
 | 
			
		||||
error:
 | 
			
		||||
  if (handle->name) {
 | 
			
		||||
    uv__free(handle->name);
 | 
			
		||||
    handle->name = NULL;
 | 
			
		||||
  }
 | 
			
		||||
  uv__free(handle->name);
 | 
			
		||||
  handle->name = NULL;
 | 
			
		||||
 | 
			
		||||
  return uv_translate_sys_error(err);
 | 
			
		||||
}
 | 
			
		||||
@@ -861,7 +845,8 @@ int uv_pipe_connect2(uv_connect_t* req,
 | 
			
		||||
                     unsigned int flags,
 | 
			
		||||
                     uv_connect_cb cb) {
 | 
			
		||||
  uv_loop_t* loop = handle->loop;
 | 
			
		||||
  int err, nameSize;
 | 
			
		||||
  int err;
 | 
			
		||||
  size_t nameSize;
 | 
			
		||||
  HANDLE pipeHandle = INVALID_HANDLE_VALUE;
 | 
			
		||||
  DWORD duplex_flags;
 | 
			
		||||
 | 
			
		||||
@@ -904,26 +889,16 @@ int uv_pipe_connect2(uv_connect_t* req,
 | 
			
		||||
  }
 | 
			
		||||
  uv__pipe_connection_init(handle);
 | 
			
		||||
 | 
			
		||||
  /* Convert name to UTF16. */
 | 
			
		||||
  nameSize = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0) * sizeof(WCHAR);
 | 
			
		||||
  handle->name = uv__malloc(nameSize);
 | 
			
		||||
  if (!handle->name) {
 | 
			
		||||
    uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                           0,
 | 
			
		||||
                           name,
 | 
			
		||||
                           -1,
 | 
			
		||||
                           handle->name,
 | 
			
		||||
                           nameSize / sizeof(WCHAR))) {
 | 
			
		||||
    err = GetLastError();
 | 
			
		||||
  err = uv__convert_utf8_to_utf16(name, &handle->name);
 | 
			
		||||
  if (err) {
 | 
			
		||||
    err = ERROR_NO_UNICODE_TRANSLATION;
 | 
			
		||||
    goto error;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  pipeHandle = open_named_pipe(handle->name, &duplex_flags);
 | 
			
		||||
  if (pipeHandle == INVALID_HANDLE_VALUE) {
 | 
			
		||||
    if (GetLastError() == ERROR_PIPE_BUSY) {
 | 
			
		||||
      nameSize = (wcslen(handle->name) + 1) * sizeof(WCHAR);
 | 
			
		||||
      req->u.connect.name = uv__malloc(nameSize);
 | 
			
		||||
      if (!req->u.connect.name) {
 | 
			
		||||
        uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc");
 | 
			
		||||
@@ -2439,7 +2414,6 @@ static int uv__pipe_getname(const uv_pipe_t* handle, char* buffer, size_t* size)
 | 
			
		||||
  FILE_NAME_INFORMATION tmp_name_info;
 | 
			
		||||
  FILE_NAME_INFORMATION* name_info;
 | 
			
		||||
  WCHAR* name_buf;
 | 
			
		||||
  unsigned int addrlen;
 | 
			
		||||
  unsigned int name_size;
 | 
			
		||||
  unsigned int name_len;
 | 
			
		||||
  int err;
 | 
			
		||||
@@ -2450,46 +2424,7 @@ static int uv__pipe_getname(const uv_pipe_t* handle, char* buffer, size_t* size)
 | 
			
		||||
  if (handle->name != NULL) {
 | 
			
		||||
    /* The user might try to query the name before we are connected,
 | 
			
		||||
     * and this is just easier to return the cached value if we have it. */
 | 
			
		||||
    name_buf = handle->name;
 | 
			
		||||
    name_len = wcslen(name_buf);
 | 
			
		||||
 | 
			
		||||
    /* check how much space we need */
 | 
			
		||||
    addrlen = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                  0,
 | 
			
		||||
                                  name_buf,
 | 
			
		||||
                                  name_len,
 | 
			
		||||
                                  NULL,
 | 
			
		||||
                                  0,
 | 
			
		||||
                                  NULL,
 | 
			
		||||
                                  NULL);
 | 
			
		||||
    if (!addrlen) {
 | 
			
		||||
      *size = 0;
 | 
			
		||||
      err = uv_translate_sys_error(GetLastError());
 | 
			
		||||
      return err;
 | 
			
		||||
    } else if (addrlen >= *size) {
 | 
			
		||||
      *size = addrlen + 1;
 | 
			
		||||
      err = UV_ENOBUFS;
 | 
			
		||||
      goto error;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    addrlen = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                  0,
 | 
			
		||||
                                  name_buf,
 | 
			
		||||
                                  name_len,
 | 
			
		||||
                                  buffer,
 | 
			
		||||
                                  addrlen,
 | 
			
		||||
                                  NULL,
 | 
			
		||||
                                  NULL);
 | 
			
		||||
    if (!addrlen) {
 | 
			
		||||
      *size = 0;
 | 
			
		||||
      err = uv_translate_sys_error(GetLastError());
 | 
			
		||||
      return err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    *size = addrlen;
 | 
			
		||||
    buffer[addrlen] = '\0';
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
    return uv__copy_utf16_to_utf8(handle->name, -1, buffer, size);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (handle->handle == INVALID_HANDLE_VALUE) {
 | 
			
		||||
@@ -2517,8 +2452,7 @@ static int uv__pipe_getname(const uv_pipe_t* handle, char* buffer, size_t* size)
 | 
			
		||||
    name_info = uv__malloc(name_size);
 | 
			
		||||
    if (!name_info) {
 | 
			
		||||
      *size = 0;
 | 
			
		||||
      err = UV_ENOMEM;
 | 
			
		||||
      goto cleanup;
 | 
			
		||||
      return UV_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    nt_status = pNtQueryInformationFile(handle->handle,
 | 
			
		||||
@@ -2551,51 +2485,19 @@ static int uv__pipe_getname(const uv_pipe_t* handle, char* buffer, size_t* size)
 | 
			
		||||
 | 
			
		||||
  name_len /= sizeof(WCHAR);
 | 
			
		||||
 | 
			
		||||
  /* check how much space we need */
 | 
			
		||||
  addrlen = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                0,
 | 
			
		||||
                                name_buf,
 | 
			
		||||
                                name_len,
 | 
			
		||||
                                NULL,
 | 
			
		||||
                                0,
 | 
			
		||||
                                NULL,
 | 
			
		||||
                                NULL);
 | 
			
		||||
  if (!addrlen) {
 | 
			
		||||
  /* "\\\\.\\pipe" + name */
 | 
			
		||||
  if (*size < pipe_prefix_len) {
 | 
			
		||||
    *size = 0;
 | 
			
		||||
    err = uv_translate_sys_error(GetLastError());
 | 
			
		||||
    goto error;
 | 
			
		||||
  } else if (pipe_prefix_len + addrlen >= *size) {
 | 
			
		||||
    /* "\\\\.\\pipe" + name */
 | 
			
		||||
    *size = pipe_prefix_len + addrlen + 1;
 | 
			
		||||
    err = UV_ENOBUFS;
 | 
			
		||||
    goto error;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  memcpy(buffer, pipe_prefix, pipe_prefix_len);
 | 
			
		||||
  addrlen = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                0,
 | 
			
		||||
                                name_buf,
 | 
			
		||||
                                name_len,
 | 
			
		||||
                                buffer+pipe_prefix_len,
 | 
			
		||||
                                *size-pipe_prefix_len,
 | 
			
		||||
                                NULL,
 | 
			
		||||
                                NULL);
 | 
			
		||||
  if (!addrlen) {
 | 
			
		||||
    *size = 0;
 | 
			
		||||
    err = uv_translate_sys_error(GetLastError());
 | 
			
		||||
    goto error;
 | 
			
		||||
  else {
 | 
			
		||||
    memcpy(buffer, pipe_prefix, pipe_prefix_len);
 | 
			
		||||
    *size -= pipe_prefix_len;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  addrlen += pipe_prefix_len;
 | 
			
		||||
  *size = addrlen;
 | 
			
		||||
  buffer[addrlen] = '\0';
 | 
			
		||||
 | 
			
		||||
  err = 0;
 | 
			
		||||
  err = uv__copy_utf16_to_utf8(name_buf, name_len, buffer+pipe_prefix_len, size);
 | 
			
		||||
  *size += pipe_prefix_len;
 | 
			
		||||
 | 
			
		||||
error:
 | 
			
		||||
  uv__free(name_info);
 | 
			
		||||
 | 
			
		||||
cleanup:
 | 
			
		||||
  return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										192
									
								
								deps/libuv/src/win/process.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										192
									
								
								deps/libuv/src/win/process.c
									
									
									
									
										vendored
									
									
								
							@@ -105,38 +105,26 @@ static void uv__init_global_job_handle(void) {
 | 
			
		||||
                               &info,
 | 
			
		||||
                               sizeof info))
 | 
			
		||||
    uv_fatal_error(GetLastError(), "SetInformationJobObject");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  if (!AssignProcessToJobObject(uv_global_job_handle_, GetCurrentProcess())) {
 | 
			
		||||
    /* Make sure this handle is functional. The Windows kernel has a bug that
 | 
			
		||||
     * if the first use of AssignProcessToJobObject is for a Windows Store
 | 
			
		||||
     * program, subsequent attempts to use the handle with fail with
 | 
			
		||||
     * INVALID_PARAMETER (87). This is possibly because all uses of the handle
 | 
			
		||||
     * must be for the same Terminal Services session. We can ensure it is tied
 | 
			
		||||
     * to our current session now by adding ourself to it. We could remove
 | 
			
		||||
     * ourself afterwards, but there doesn't seem to be a reason to.
 | 
			
		||||
     */
 | 
			
		||||
    DWORD err = GetLastError();
 | 
			
		||||
    if (err != ERROR_ACCESS_DENIED)
 | 
			
		||||
      uv_fatal_error(err, "AssignProcessToJobObject");
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int uv__utf8_to_utf16_alloc(const char* s, WCHAR** ws_ptr) {
 | 
			
		||||
  int ws_len, r;
 | 
			
		||||
  WCHAR* ws;
 | 
			
		||||
 | 
			
		||||
  ws_len = MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                               0,
 | 
			
		||||
                               s,
 | 
			
		||||
                               -1,
 | 
			
		||||
                               NULL,
 | 
			
		||||
                               0);
 | 
			
		||||
  if (ws_len <= 0) {
 | 
			
		||||
    return GetLastError();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ws = (WCHAR*) uv__malloc(ws_len * sizeof(WCHAR));
 | 
			
		||||
  if (ws == NULL) {
 | 
			
		||||
    return ERROR_OUTOFMEMORY;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  r = MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                          0,
 | 
			
		||||
                          s,
 | 
			
		||||
                          -1,
 | 
			
		||||
                          ws,
 | 
			
		||||
                          ws_len);
 | 
			
		||||
  assert(r == ws_len);
 | 
			
		||||
 | 
			
		||||
  *ws_ptr = ws;
 | 
			
		||||
  return 0;
 | 
			
		||||
  return uv__convert_utf8_to_utf16(s, ws_ptr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -396,7 +384,7 @@ static WCHAR* search_path(const WCHAR *file,
 | 
			
		||||
                                  name_has_ext);
 | 
			
		||||
 | 
			
		||||
    while (result == NULL) {
 | 
			
		||||
      if (*dir_end == L'\0') {
 | 
			
		||||
      if (dir_end == NULL || *dir_end == L'\0') {
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@@ -539,21 +527,15 @@ int make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) {
 | 
			
		||||
 | 
			
		||||
  /* Count the required size. */
 | 
			
		||||
  for (arg = args; *arg; arg++) {
 | 
			
		||||
    DWORD arg_len;
 | 
			
		||||
    ssize_t arg_len;
 | 
			
		||||
 | 
			
		||||
    arg_len = MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                                  0,
 | 
			
		||||
                                  *arg,
 | 
			
		||||
                                  -1,
 | 
			
		||||
                                  NULL,
 | 
			
		||||
                                  0);
 | 
			
		||||
    if (arg_len == 0) {
 | 
			
		||||
      return GetLastError();
 | 
			
		||||
    }
 | 
			
		||||
    arg_len = uv_wtf8_length_as_utf16(*arg);
 | 
			
		||||
    if (arg_len < 0)
 | 
			
		||||
      return arg_len;
 | 
			
		||||
 | 
			
		||||
    dst_len += arg_len;
 | 
			
		||||
 | 
			
		||||
    if (arg_len > temp_buffer_len)
 | 
			
		||||
    if ((size_t) arg_len > temp_buffer_len)
 | 
			
		||||
      temp_buffer_len = arg_len;
 | 
			
		||||
 | 
			
		||||
    arg_count++;
 | 
			
		||||
@@ -564,34 +546,28 @@ int make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) {
 | 
			
		||||
  dst_len = dst_len * 2 + arg_count * 2;
 | 
			
		||||
 | 
			
		||||
  /* Allocate buffer for the final command line. */
 | 
			
		||||
  dst = (WCHAR*) uv__malloc(dst_len * sizeof(WCHAR));
 | 
			
		||||
  dst = uv__malloc(dst_len * sizeof(WCHAR));
 | 
			
		||||
  if (dst == NULL) {
 | 
			
		||||
    err = ERROR_OUTOFMEMORY;
 | 
			
		||||
    err = UV_ENOMEM;
 | 
			
		||||
    goto error;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Allocate temporary working buffer. */
 | 
			
		||||
  temp_buffer = (WCHAR*) uv__malloc(temp_buffer_len * sizeof(WCHAR));
 | 
			
		||||
  temp_buffer = uv__malloc(temp_buffer_len * sizeof(WCHAR));
 | 
			
		||||
  if (temp_buffer == NULL) {
 | 
			
		||||
    err = ERROR_OUTOFMEMORY;
 | 
			
		||||
    err = UV_ENOMEM;
 | 
			
		||||
    goto error;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  pos = dst;
 | 
			
		||||
  for (arg = args; *arg; arg++) {
 | 
			
		||||
    DWORD arg_len;
 | 
			
		||||
    ssize_t arg_len;
 | 
			
		||||
 | 
			
		||||
    /* Convert argument to wide char. */
 | 
			
		||||
    arg_len = MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                                  0,
 | 
			
		||||
                                  *arg,
 | 
			
		||||
                                  -1,
 | 
			
		||||
                                  temp_buffer,
 | 
			
		||||
                                  (int) (dst + dst_len - pos));
 | 
			
		||||
    if (arg_len == 0) {
 | 
			
		||||
      err = GetLastError();
 | 
			
		||||
      goto error;
 | 
			
		||||
    }
 | 
			
		||||
    arg_len = uv_wtf8_length_as_utf16(*arg);
 | 
			
		||||
    assert(arg_len > 0);
 | 
			
		||||
    assert(temp_buffer_len >= (size_t) arg_len);
 | 
			
		||||
    uv_wtf8_to_utf16(*arg, temp_buffer, arg_len);
 | 
			
		||||
 | 
			
		||||
    if (verbatim_arguments) {
 | 
			
		||||
      /* Copy verbatim. */
 | 
			
		||||
@@ -603,6 +579,7 @@ int make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    *pos++ = *(arg + 1) ? L' ' : L'\0';
 | 
			
		||||
    assert(pos <= dst + dst_len);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  uv__free(temp_buffer);
 | 
			
		||||
@@ -688,55 +665,43 @@ int make_program_env(char* env_block[], WCHAR** dst_ptr) {
 | 
			
		||||
  WCHAR* ptr;
 | 
			
		||||
  char** env;
 | 
			
		||||
  size_t env_len = 0;
 | 
			
		||||
  int len;
 | 
			
		||||
  size_t len;
 | 
			
		||||
  size_t i;
 | 
			
		||||
  DWORD var_size;
 | 
			
		||||
  size_t var_size;
 | 
			
		||||
  size_t env_block_count = 1; /* 1 for null-terminator */
 | 
			
		||||
  WCHAR* dst_copy;
 | 
			
		||||
  WCHAR** ptr_copy;
 | 
			
		||||
  WCHAR** env_copy;
 | 
			
		||||
  DWORD required_vars_value_len[ARRAY_SIZE(required_vars)];
 | 
			
		||||
  size_t required_vars_value_len[ARRAY_SIZE(required_vars)];
 | 
			
		||||
 | 
			
		||||
  /* first pass: determine size in UTF-16 */
 | 
			
		||||
  for (env = env_block; *env; env++) {
 | 
			
		||||
    int len;
 | 
			
		||||
    ssize_t len;
 | 
			
		||||
    if (strchr(*env, '=')) {
 | 
			
		||||
      len = MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                                0,
 | 
			
		||||
                                *env,
 | 
			
		||||
                                -1,
 | 
			
		||||
                                NULL,
 | 
			
		||||
                                0);
 | 
			
		||||
      if (len <= 0) {
 | 
			
		||||
        return GetLastError();
 | 
			
		||||
      }
 | 
			
		||||
      len = uv_wtf8_length_as_utf16(*env);
 | 
			
		||||
      if (len < 0)
 | 
			
		||||
        return len;
 | 
			
		||||
      env_len += len;
 | 
			
		||||
      env_block_count++;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* second pass: copy to UTF-16 environment block */
 | 
			
		||||
  dst_copy = (WCHAR*)uv__malloc(env_len * sizeof(WCHAR));
 | 
			
		||||
  dst_copy = uv__malloc(env_len * sizeof(WCHAR));
 | 
			
		||||
  if (dst_copy == NULL && env_len > 0) {
 | 
			
		||||
    return ERROR_OUTOFMEMORY;
 | 
			
		||||
    return UV_ENOMEM;
 | 
			
		||||
  }
 | 
			
		||||
  env_copy = alloca(env_block_count * sizeof(WCHAR*));
 | 
			
		||||
 | 
			
		||||
  ptr = dst_copy;
 | 
			
		||||
  ptr_copy = env_copy;
 | 
			
		||||
  for (env = env_block; *env; env++) {
 | 
			
		||||
    ssize_t len;
 | 
			
		||||
    if (strchr(*env, '=')) {
 | 
			
		||||
      len = MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                                0,
 | 
			
		||||
                                *env,
 | 
			
		||||
                                -1,
 | 
			
		||||
                                ptr,
 | 
			
		||||
                                (int) (env_len - (ptr - dst_copy)));
 | 
			
		||||
      if (len <= 0) {
 | 
			
		||||
        DWORD err = GetLastError();
 | 
			
		||||
        uv__free(dst_copy);
 | 
			
		||||
        return err;
 | 
			
		||||
      }
 | 
			
		||||
      len = uv_wtf8_length_as_utf16(*env);
 | 
			
		||||
      assert(len > 0);
 | 
			
		||||
      assert((size_t) len <= env_len - (ptr - dst_copy));
 | 
			
		||||
      uv_wtf8_to_utf16(*env, ptr, len);
 | 
			
		||||
      *ptr_copy++ = ptr;
 | 
			
		||||
      ptr += len;
 | 
			
		||||
    }
 | 
			
		||||
@@ -754,7 +719,7 @@ int make_program_env(char* env_block[], WCHAR** dst_ptr) {
 | 
			
		||||
      cmp = -1;
 | 
			
		||||
    } else {
 | 
			
		||||
      cmp = env_strncmp(required_vars[i].wide_eq,
 | 
			
		||||
                       required_vars[i].len,
 | 
			
		||||
                        required_vars[i].len,
 | 
			
		||||
                        *ptr_copy);
 | 
			
		||||
    }
 | 
			
		||||
    if (cmp < 0) {
 | 
			
		||||
@@ -777,7 +742,7 @@ int make_program_env(char* env_block[], WCHAR** dst_ptr) {
 | 
			
		||||
  dst = uv__malloc((1+env_len) * sizeof(WCHAR));
 | 
			
		||||
  if (!dst) {
 | 
			
		||||
    uv__free(dst_copy);
 | 
			
		||||
    return ERROR_OUTOFMEMORY;
 | 
			
		||||
    return UV_ENOMEM;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (ptr = dst, ptr_copy = env_copy, i = 0;
 | 
			
		||||
@@ -975,26 +940,26 @@ int uv_spawn(uv_loop_t* loop,
 | 
			
		||||
 | 
			
		||||
  err = uv__utf8_to_utf16_alloc(options->file, &application);
 | 
			
		||||
  if (err)
 | 
			
		||||
    goto done;
 | 
			
		||||
    goto done_uv;
 | 
			
		||||
 | 
			
		||||
  err = make_program_args(
 | 
			
		||||
      options->args,
 | 
			
		||||
      options->flags & UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS,
 | 
			
		||||
      &arguments);
 | 
			
		||||
  if (err)
 | 
			
		||||
    goto done;
 | 
			
		||||
    goto done_uv;
 | 
			
		||||
 | 
			
		||||
  if (options->env) {
 | 
			
		||||
     err = make_program_env(options->env, &env);
 | 
			
		||||
     if (err)
 | 
			
		||||
       goto done;
 | 
			
		||||
       goto done_uv;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (options->cwd) {
 | 
			
		||||
    /* Explicit cwd */
 | 
			
		||||
    err = uv__utf8_to_utf16_alloc(options->cwd, &cwd);
 | 
			
		||||
    if (err)
 | 
			
		||||
      goto done;
 | 
			
		||||
      goto done_uv;
 | 
			
		||||
 | 
			
		||||
  } else {
 | 
			
		||||
    /* Inherit cwd */
 | 
			
		||||
@@ -1025,22 +990,19 @@ int uv_spawn(uv_loop_t* loop,
 | 
			
		||||
    DWORD path_len, r;
 | 
			
		||||
 | 
			
		||||
    path_len = GetEnvironmentVariableW(L"PATH", NULL, 0);
 | 
			
		||||
    if (path_len == 0) {
 | 
			
		||||
      err = GetLastError();
 | 
			
		||||
      goto done;
 | 
			
		||||
    }
 | 
			
		||||
    if (path_len != 0) {
 | 
			
		||||
      alloc_path = (WCHAR*) uv__malloc(path_len * sizeof(WCHAR));
 | 
			
		||||
      if (alloc_path == NULL) {
 | 
			
		||||
        err = ERROR_OUTOFMEMORY;
 | 
			
		||||
        goto done;
 | 
			
		||||
      }
 | 
			
		||||
      path = alloc_path;
 | 
			
		||||
 | 
			
		||||
    alloc_path = (WCHAR*) uv__malloc(path_len * sizeof(WCHAR));
 | 
			
		||||
    if (alloc_path == NULL) {
 | 
			
		||||
      err = ERROR_OUTOFMEMORY;
 | 
			
		||||
      goto done;
 | 
			
		||||
    }
 | 
			
		||||
    path = alloc_path;
 | 
			
		||||
 | 
			
		||||
    r = GetEnvironmentVariableW(L"PATH", path, path_len);
 | 
			
		||||
    if (r == 0 || r >= path_len) {
 | 
			
		||||
      err = GetLastError();
 | 
			
		||||
      goto done;
 | 
			
		||||
      r = GetEnvironmentVariableW(L"PATH", path, path_len);
 | 
			
		||||
      if (r == 0 || r >= path_len) {
 | 
			
		||||
        err = GetLastError();
 | 
			
		||||
        goto done;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -1102,6 +1064,7 @@ int uv_spawn(uv_loop_t* loop,
 | 
			
		||||
     * breakaway.
 | 
			
		||||
     */
 | 
			
		||||
    process_flags |= DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP;
 | 
			
		||||
    process_flags |= CREATE_SUSPENDED;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!CreateProcessW(application_path,
 | 
			
		||||
@@ -1119,11 +1082,6 @@ int uv_spawn(uv_loop_t* loop,
 | 
			
		||||
    goto done;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Spawn succeeded. Beyond this point, failure is reported asynchronously. */
 | 
			
		||||
 | 
			
		||||
  process->process_handle = info.hProcess;
 | 
			
		||||
  process->pid = info.dwProcessId;
 | 
			
		||||
 | 
			
		||||
  /* If the process isn't spawned as detached, assign to the global job object
 | 
			
		||||
   * so windows will kill it when the parent process dies. */
 | 
			
		||||
  if (!(options->flags & UV_PROCESS_DETACHED)) {
 | 
			
		||||
@@ -1146,6 +1104,19 @@ int uv_spawn(uv_loop_t* loop,
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (process_flags & CREATE_SUSPENDED) {
 | 
			
		||||
    if (ResumeThread(info.hThread) == ((DWORD)-1)) {
 | 
			
		||||
      err = GetLastError();
 | 
			
		||||
      TerminateProcess(info.hProcess, 1);
 | 
			
		||||
      goto done;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Spawn succeeded. Beyond this point, failure is reported asynchronously. */
 | 
			
		||||
 | 
			
		||||
  process->process_handle = info.hProcess;
 | 
			
		||||
  process->pid = info.dwProcessId;
 | 
			
		||||
 | 
			
		||||
  /* Set IPC pid to all IPC pipes. */
 | 
			
		||||
  for (i = 0; i < options->stdio_count; i++) {
 | 
			
		||||
    const uv_stdio_container_t* fdopt = &options->stdio[i];
 | 
			
		||||
@@ -1173,8 +1144,13 @@ int uv_spawn(uv_loop_t* loop,
 | 
			
		||||
   * made or the handle is closed, whichever happens first. */
 | 
			
		||||
  uv__handle_start(process);
 | 
			
		||||
 | 
			
		||||
  goto done_uv;
 | 
			
		||||
 | 
			
		||||
  /* Cleanup, whether we succeeded or failed. */
 | 
			
		||||
 done:
 | 
			
		||||
  err = uv_translate_sys_error(err);
 | 
			
		||||
 | 
			
		||||
 done_uv:
 | 
			
		||||
  uv__free(application);
 | 
			
		||||
  uv__free(application_path);
 | 
			
		||||
  uv__free(arguments);
 | 
			
		||||
@@ -1188,7 +1164,7 @@ int uv_spawn(uv_loop_t* loop,
 | 
			
		||||
    child_stdio_buffer = NULL;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return uv_translate_sys_error(err);
 | 
			
		||||
  return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										62
									
								
								deps/libuv/src/win/tty.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								deps/libuv/src/win/tty.c
									
									
									
									
										vendored
									
									
								
							@@ -482,9 +482,11 @@ static DWORD CALLBACK uv_tty_line_read_thread(void* data) {
 | 
			
		||||
  uv_loop_t* loop;
 | 
			
		||||
  uv_tty_t* handle;
 | 
			
		||||
  uv_req_t* req;
 | 
			
		||||
  DWORD bytes, read_bytes;
 | 
			
		||||
  DWORD bytes;
 | 
			
		||||
  size_t read_bytes;
 | 
			
		||||
  WCHAR utf16[MAX_INPUT_BUFFER_LENGTH / 3];
 | 
			
		||||
  DWORD chars, read_chars;
 | 
			
		||||
  DWORD chars;
 | 
			
		||||
  DWORD read_chars;
 | 
			
		||||
  LONG status;
 | 
			
		||||
  COORD pos;
 | 
			
		||||
  BOOL read_console_success;
 | 
			
		||||
@@ -525,16 +527,13 @@ static DWORD CALLBACK uv_tty_line_read_thread(void* data) {
 | 
			
		||||
                                      NULL);
 | 
			
		||||
 | 
			
		||||
  if (read_console_success) {
 | 
			
		||||
    read_bytes = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                     0,
 | 
			
		||||
                                     utf16,
 | 
			
		||||
                                     read_chars,
 | 
			
		||||
                                     handle->tty.rd.read_line_buffer.base,
 | 
			
		||||
                                     bytes,
 | 
			
		||||
                                     NULL,
 | 
			
		||||
                                     NULL);
 | 
			
		||||
    read_bytes = bytes;
 | 
			
		||||
    uv_utf16_to_wtf8(utf16,
 | 
			
		||||
                     read_chars,
 | 
			
		||||
                     &handle->tty.rd.read_line_buffer.base,
 | 
			
		||||
                     &read_bytes);
 | 
			
		||||
    SET_REQ_SUCCESS(req);
 | 
			
		||||
    req->u.io.overlapped.InternalHigh = read_bytes;
 | 
			
		||||
    req->u.io.overlapped.InternalHigh = (DWORD) read_bytes;
 | 
			
		||||
  } else {
 | 
			
		||||
    SET_REQ_ERROR(req, GetLastError());
 | 
			
		||||
  }
 | 
			
		||||
@@ -798,7 +797,9 @@ void uv_process_tty_read_raw_req(uv_loop_t* loop, uv_tty_t* handle,
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (KEV.uChar.UnicodeChar != 0) {
 | 
			
		||||
        int prefix_len, char_len;
 | 
			
		||||
        int prefix_len;
 | 
			
		||||
        size_t char_len;
 | 
			
		||||
        char* last_key_buf;
 | 
			
		||||
 | 
			
		||||
        /* Character key pressed */
 | 
			
		||||
        if (KEV.uChar.UnicodeChar >= 0xD800 &&
 | 
			
		||||
@@ -819,38 +820,31 @@ void uv_process_tty_read_raw_req(uv_loop_t* loop, uv_tty_t* handle,
 | 
			
		||||
          prefix_len = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (KEV.uChar.UnicodeChar >= 0xDC00 &&
 | 
			
		||||
            KEV.uChar.UnicodeChar < 0xE000) {
 | 
			
		||||
        char_len = sizeof handle->tty.rd.last_key;
 | 
			
		||||
        last_key_buf = &handle->tty.rd.last_key[prefix_len];
 | 
			
		||||
        if (handle->tty.rd.last_utf16_high_surrogate) {
 | 
			
		||||
          /* UTF-16 surrogate pair */
 | 
			
		||||
          WCHAR utf16_buffer[2];
 | 
			
		||||
          utf16_buffer[0] = handle->tty.rd.last_utf16_high_surrogate;
 | 
			
		||||
          utf16_buffer[1] = KEV.uChar.UnicodeChar;
 | 
			
		||||
          char_len = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                         0,
 | 
			
		||||
                                         utf16_buffer,
 | 
			
		||||
                                         2,
 | 
			
		||||
                                         &handle->tty.rd.last_key[prefix_len],
 | 
			
		||||
                                         sizeof handle->tty.rd.last_key,
 | 
			
		||||
                                         NULL,
 | 
			
		||||
                                         NULL);
 | 
			
		||||
          if (uv_utf16_to_wtf8(utf16_buffer,
 | 
			
		||||
                               2,
 | 
			
		||||
                               &last_key_buf,
 | 
			
		||||
                               &char_len))
 | 
			
		||||
            char_len = 0;
 | 
			
		||||
          handle->tty.rd.last_utf16_high_surrogate = 0;
 | 
			
		||||
        } else {
 | 
			
		||||
          /* Single UTF-16 character */
 | 
			
		||||
          char_len = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                         0,
 | 
			
		||||
                                         &KEV.uChar.UnicodeChar,
 | 
			
		||||
                                         1,
 | 
			
		||||
                                         &handle->tty.rd.last_key[prefix_len],
 | 
			
		||||
                                         sizeof handle->tty.rd.last_key,
 | 
			
		||||
                                         NULL,
 | 
			
		||||
                                         NULL);
 | 
			
		||||
          if (uv_utf16_to_wtf8(&KEV.uChar.UnicodeChar,
 | 
			
		||||
                               1,
 | 
			
		||||
                               &last_key_buf,
 | 
			
		||||
                               &char_len))
 | 
			
		||||
            char_len = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Whatever happened, the last character wasn't a high surrogate. */
 | 
			
		||||
        handle->tty.rd.last_utf16_high_surrogate = 0;
 | 
			
		||||
 | 
			
		||||
        /* If the utf16 character(s) couldn't be converted something must be
 | 
			
		||||
         * wrong. */
 | 
			
		||||
        if (!char_len) {
 | 
			
		||||
        if (char_len == 0) {
 | 
			
		||||
          handle->flags &= ~UV_HANDLE_READING;
 | 
			
		||||
          DECREASE_ACTIVE_COUNT(loop, handle);
 | 
			
		||||
          handle->read_cb((uv_stream_t*) handle,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										410
									
								
								deps/libuv/src/win/util.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										410
									
								
								deps/libuv/src/win/util.c
									
									
									
									
										vendored
									
									
								
							@@ -95,7 +95,7 @@ void uv__util_init(void) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int uv_exepath(char* buffer, size_t* size_ptr) {
 | 
			
		||||
  int utf8_len, utf16_buffer_len, utf16_len;
 | 
			
		||||
  size_t utf8_len, utf16_buffer_len, utf16_len;
 | 
			
		||||
  WCHAR* utf16_buffer;
 | 
			
		||||
  int err;
 | 
			
		||||
 | 
			
		||||
@@ -123,25 +123,17 @@ int uv_exepath(char* buffer, size_t* size_ptr) {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Convert to UTF-8 */
 | 
			
		||||
  utf8_len = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                 0,
 | 
			
		||||
                                 utf16_buffer,
 | 
			
		||||
                                 -1,
 | 
			
		||||
                                 buffer,
 | 
			
		||||
                                 (int) *size_ptr,
 | 
			
		||||
                                 NULL,
 | 
			
		||||
                                 NULL);
 | 
			
		||||
  if (utf8_len == 0) {
 | 
			
		||||
    err = GetLastError();
 | 
			
		||||
    goto error;
 | 
			
		||||
  utf8_len = *size_ptr - 1; /* Reserve space for NUL */
 | 
			
		||||
  err = uv_utf16_to_wtf8(utf16_buffer, utf16_len, &buffer, &utf8_len);
 | 
			
		||||
  if (err == UV_ENOBUFS) {
 | 
			
		||||
    utf8_len = *size_ptr - 1;
 | 
			
		||||
    err = 0;
 | 
			
		||||
  }
 | 
			
		||||
  *size_ptr = utf8_len;
 | 
			
		||||
 | 
			
		||||
  uv__free(utf16_buffer);
 | 
			
		||||
 | 
			
		||||
  /* utf8_len *does* include the terminating null at this point, but the
 | 
			
		||||
   * returned size shouldn't. */
 | 
			
		||||
  *size_ptr = utf8_len - 1;
 | 
			
		||||
  return 0;
 | 
			
		||||
  return err;
 | 
			
		||||
 | 
			
		||||
 error:
 | 
			
		||||
  uv__free(utf16_buffer);
 | 
			
		||||
@@ -204,45 +196,14 @@ int uv_cwd(char* buffer, size_t* size) {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  r = uv__cwd(&utf16_buffer, &utf16_len);
 | 
			
		||||
  if (r < 0) {
 | 
			
		||||
  if (r < 0)
 | 
			
		||||
    return r;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Check how much space we need */
 | 
			
		||||
  r = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                          0,
 | 
			
		||||
                          utf16_buffer,
 | 
			
		||||
                          -1,
 | 
			
		||||
                          NULL,
 | 
			
		||||
                          0,
 | 
			
		||||
                          NULL,
 | 
			
		||||
                          NULL);
 | 
			
		||||
  if (r == 0) {
 | 
			
		||||
    uv__free(utf16_buffer);
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
  } else if (r > (int) *size) {
 | 
			
		||||
    uv__free(utf16_buffer);
 | 
			
		||||
    *size = r;
 | 
			
		||||
    return UV_ENOBUFS;
 | 
			
		||||
  }
 | 
			
		||||
  r = uv__copy_utf16_to_utf8(utf16_buffer, utf16_len, buffer, size);
 | 
			
		||||
 | 
			
		||||
  /* Convert to UTF-8 */
 | 
			
		||||
  r = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                          0,
 | 
			
		||||
                          utf16_buffer,
 | 
			
		||||
                          -1,
 | 
			
		||||
                          buffer,
 | 
			
		||||
                          *size > INT_MAX ? INT_MAX : (int) *size,
 | 
			
		||||
                          NULL,
 | 
			
		||||
                          NULL);
 | 
			
		||||
  uv__free(utf16_buffer);
 | 
			
		||||
 | 
			
		||||
  if (r == 0) {
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  *size = r - 1;
 | 
			
		||||
  return 0;
 | 
			
		||||
  return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -252,33 +213,10 @@ int uv_chdir(const char* dir) {
 | 
			
		||||
  WCHAR drive_letter, env_var[4];
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  if (dir == NULL) {
 | 
			
		||||
    return UV_EINVAL;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  utf16_len = MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                                  0,
 | 
			
		||||
                                  dir,
 | 
			
		||||
                                  -1,
 | 
			
		||||
                                  NULL,
 | 
			
		||||
                                  0);
 | 
			
		||||
  if (utf16_len == 0) {
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
  }
 | 
			
		||||
  utf16_buffer = uv__malloc(utf16_len * sizeof(WCHAR));
 | 
			
		||||
  if (utf16_buffer == NULL) {
 | 
			
		||||
    return UV_ENOMEM;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (MultiByteToWideChar(CP_UTF8,
 | 
			
		||||
                          0,
 | 
			
		||||
                          dir,
 | 
			
		||||
                          -1,
 | 
			
		||||
                          utf16_buffer,
 | 
			
		||||
                          utf16_len) == 0) {
 | 
			
		||||
    uv__free(utf16_buffer);
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
  }
 | 
			
		||||
  /* Convert to UTF-16 */
 | 
			
		||||
  r = uv__convert_utf8_to_utf16(dir, &utf16_buffer);
 | 
			
		||||
  if (r)
 | 
			
		||||
    return r;
 | 
			
		||||
 | 
			
		||||
  if (!SetCurrentDirectoryW(utf16_buffer)) {
 | 
			
		||||
    uv__free(utf16_buffer);
 | 
			
		||||
@@ -416,29 +354,14 @@ int uv_set_process_title(const char* title) {
 | 
			
		||||
 | 
			
		||||
  uv__once_init();
 | 
			
		||||
 | 
			
		||||
  /* Find out how big the buffer for the wide-char title must be */
 | 
			
		||||
  length = MultiByteToWideChar(CP_UTF8, 0, title, -1, NULL, 0);
 | 
			
		||||
  if (!length) {
 | 
			
		||||
    err = GetLastError();
 | 
			
		||||
    goto done;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Convert to wide-char string */
 | 
			
		||||
  title_w = (WCHAR*)uv__malloc(sizeof(WCHAR) * length);
 | 
			
		||||
  if (!title_w) {
 | 
			
		||||
    uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  length = MultiByteToWideChar(CP_UTF8, 0, title, -1, title_w, length);
 | 
			
		||||
  if (!length) {
 | 
			
		||||
    err = GetLastError();
 | 
			
		||||
    goto done;
 | 
			
		||||
  }
 | 
			
		||||
  err = uv__convert_utf8_to_utf16(title, &title_w);
 | 
			
		||||
  if (err)
 | 
			
		||||
    return err;
 | 
			
		||||
 | 
			
		||||
  /* If the title must be truncated insert a \0 terminator there */
 | 
			
		||||
  if (length > MAX_TITLE_LENGTH) {
 | 
			
		||||
  length = wcslen(title_w);
 | 
			
		||||
  if (length >= MAX_TITLE_LENGTH)
 | 
			
		||||
    title_w[MAX_TITLE_LENGTH - 1] = L'\0';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!SetConsoleTitleW(title_w)) {
 | 
			
		||||
    err = GetLastError();
 | 
			
		||||
@@ -460,20 +383,19 @@ done:
 | 
			
		||||
 | 
			
		||||
static int uv__get_process_title(void) {
 | 
			
		||||
  WCHAR title_w[MAX_TITLE_LENGTH];
 | 
			
		||||
  DWORD wlen;
 | 
			
		||||
 | 
			
		||||
  if (!GetConsoleTitleW(title_w, sizeof(title_w) / sizeof(WCHAR))) {
 | 
			
		||||
    return -1;
 | 
			
		||||
  }
 | 
			
		||||
  wlen = GetConsoleTitleW(title_w, sizeof(title_w) / sizeof(WCHAR));
 | 
			
		||||
  if (wlen == 0)
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
 | 
			
		||||
  if (uv__convert_utf16_to_utf8(title_w, -1, &process_title) != 0)
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
  return uv__convert_utf16_to_utf8(title_w, wlen, &process_title);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int uv_get_process_title(char* buffer, size_t size) {
 | 
			
		||||
  size_t len;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  if (buffer == NULL || size == 0)
 | 
			
		||||
    return UV_EINVAL;
 | 
			
		||||
@@ -485,9 +407,12 @@ int uv_get_process_title(char* buffer, size_t size) {
 | 
			
		||||
   * If the process_title was never read before nor explicitly set,
 | 
			
		||||
   * we must query it with getConsoleTitleW
 | 
			
		||||
   */
 | 
			
		||||
  if (!process_title && uv__get_process_title() == -1) {
 | 
			
		||||
    LeaveCriticalSection(&process_title_lock);
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
  if (process_title == NULL) {
 | 
			
		||||
    r = uv__get_process_title();
 | 
			
		||||
    if (r) {
 | 
			
		||||
      LeaveCriticalSection(&process_title_lock);
 | 
			
		||||
      return r;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  assert(process_title);
 | 
			
		||||
@@ -833,19 +758,8 @@ int uv_interface_addresses(uv_interface_address_t** addresses_ptr,
 | 
			
		||||
      continue;
 | 
			
		||||
 | 
			
		||||
    /* Compute the size of the interface name. */
 | 
			
		||||
    name_size = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                    0,
 | 
			
		||||
                                    adapter->FriendlyName,
 | 
			
		||||
                                    -1,
 | 
			
		||||
                                    NULL,
 | 
			
		||||
                                    0,
 | 
			
		||||
                                    NULL,
 | 
			
		||||
                                    FALSE);
 | 
			
		||||
    if (name_size <= 0) {
 | 
			
		||||
      uv__free(win_address_buf);
 | 
			
		||||
      return uv_translate_sys_error(GetLastError());
 | 
			
		||||
    }
 | 
			
		||||
    uv_address_buf_size += name_size;
 | 
			
		||||
    name_size = uv_utf16_length_as_wtf8(adapter->FriendlyName, -1);
 | 
			
		||||
    uv_address_buf_size += name_size + 1;
 | 
			
		||||
 | 
			
		||||
    /* Count the number of addresses associated with this interface, and
 | 
			
		||||
     * compute the size. */
 | 
			
		||||
@@ -875,30 +789,25 @@ int uv_interface_addresses(uv_interface_address_t** addresses_ptr,
 | 
			
		||||
       adapter != NULL;
 | 
			
		||||
       adapter = adapter->Next) {
 | 
			
		||||
    IP_ADAPTER_UNICAST_ADDRESS* unicast_address;
 | 
			
		||||
    int name_size;
 | 
			
		||||
    size_t max_name_size;
 | 
			
		||||
    size_t name_size;
 | 
			
		||||
    int r;
 | 
			
		||||
 | 
			
		||||
    if (adapter->OperStatus != IfOperStatusUp ||
 | 
			
		||||
        adapter->FirstUnicastAddress == NULL)
 | 
			
		||||
      continue;
 | 
			
		||||
 | 
			
		||||
    /* Convert the interface name to UTF8. */
 | 
			
		||||
    max_name_size = (char*) uv_address_buf + uv_address_buf_size - name_buf;
 | 
			
		||||
    if (max_name_size > (size_t) INT_MAX)
 | 
			
		||||
      max_name_size = INT_MAX;
 | 
			
		||||
    name_size = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                    0,
 | 
			
		||||
                                    adapter->FriendlyName,
 | 
			
		||||
                                    -1,
 | 
			
		||||
                                    name_buf,
 | 
			
		||||
                                    (int) max_name_size,
 | 
			
		||||
                                    NULL,
 | 
			
		||||
                                    FALSE);
 | 
			
		||||
    if (name_size <= 0) {
 | 
			
		||||
    name_size = (char*) uv_address_buf + uv_address_buf_size - name_buf;
 | 
			
		||||
    r = uv__copy_utf16_to_utf8(adapter->FriendlyName,
 | 
			
		||||
                               -1,
 | 
			
		||||
                               name_buf,
 | 
			
		||||
                               &name_size);
 | 
			
		||||
    if (r) {
 | 
			
		||||
      uv__free(win_address_buf);
 | 
			
		||||
      uv__free(uv_address_buf);
 | 
			
		||||
      return uv_translate_sys_error(GetLastError());
 | 
			
		||||
      return r;
 | 
			
		||||
    }
 | 
			
		||||
    name_size += 1; /* Add NUL byte. */
 | 
			
		||||
 | 
			
		||||
    /* Add an uv_interface_address_t element for every unicast address. */
 | 
			
		||||
    for (unicast_address = (IP_ADAPTER_UNICAST_ADDRESS*)
 | 
			
		||||
@@ -1061,7 +970,6 @@ int uv_os_homedir(char* buffer, size_t* size) {
 | 
			
		||||
 | 
			
		||||
int uv_os_tmpdir(char* buffer, size_t* size) {
 | 
			
		||||
  wchar_t *path;
 | 
			
		||||
  DWORD bufsize;
 | 
			
		||||
  size_t len;
 | 
			
		||||
 | 
			
		||||
  if (buffer == NULL || size == NULL || *size == 0)
 | 
			
		||||
@@ -1078,7 +986,7 @@ int uv_os_tmpdir(char* buffer, size_t* size) {
 | 
			
		||||
  if (path == NULL) {
 | 
			
		||||
    return UV_ENOMEM;
 | 
			
		||||
  }
 | 
			
		||||
  len  = GetTempPathW(len, path);
 | 
			
		||||
  len = GetTempPathW(len, path);
 | 
			
		||||
 | 
			
		||||
  if (len == 0) {
 | 
			
		||||
    uv__free(path);
 | 
			
		||||
@@ -1093,34 +1001,7 @@ int uv_os_tmpdir(char* buffer, size_t* size) {
 | 
			
		||||
    path[len] = L'\0';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Check how much space we need */
 | 
			
		||||
  bufsize = WideCharToMultiByte(CP_UTF8, 0, path, -1, NULL, 0, NULL, NULL);
 | 
			
		||||
 | 
			
		||||
  if (bufsize == 0) {
 | 
			
		||||
    uv__free(path);
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
  } else if (bufsize > *size) {
 | 
			
		||||
    uv__free(path);
 | 
			
		||||
    *size = bufsize;
 | 
			
		||||
    return UV_ENOBUFS;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Convert to UTF-8 */
 | 
			
		||||
  bufsize = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                0,
 | 
			
		||||
                                path,
 | 
			
		||||
                                -1,
 | 
			
		||||
                                buffer,
 | 
			
		||||
                                *size,
 | 
			
		||||
                                NULL,
 | 
			
		||||
                                NULL);
 | 
			
		||||
  uv__free(path);
 | 
			
		||||
 | 
			
		||||
  if (bufsize == 0)
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
 | 
			
		||||
  *size = bufsize - 1;
 | 
			
		||||
  return 0;
 | 
			
		||||
  return uv__copy_utf16_to_utf8(path, len, buffer, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1131,95 +1012,71 @@ int uv_os_tmpdir(char* buffer, size_t* size) {
 | 
			
		||||
 * If utf16 is null terminated, utf16len can be set to -1, otherwise it must
 | 
			
		||||
 * be specified.
 | 
			
		||||
 */
 | 
			
		||||
int uv__convert_utf16_to_utf8(const WCHAR* utf16, int utf16len, char** utf8) {
 | 
			
		||||
  DWORD bufsize;
 | 
			
		||||
int uv__convert_utf16_to_utf8(const WCHAR* utf16, size_t utf16len, char** utf8) {
 | 
			
		||||
  size_t utf8_len = 0;
 | 
			
		||||
 | 
			
		||||
  if (utf16 == NULL)
 | 
			
		||||
    return UV_EINVAL;
 | 
			
		||||
 | 
			
		||||
  /* Check how much space we need */
 | 
			
		||||
  bufsize = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                0,
 | 
			
		||||
                                utf16,
 | 
			
		||||
                                utf16len,
 | 
			
		||||
                                NULL,
 | 
			
		||||
                                0,
 | 
			
		||||
                                NULL,
 | 
			
		||||
                                NULL);
 | 
			
		||||
 | 
			
		||||
  if (bufsize == 0)
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
 | 
			
		||||
  /* Allocate the destination buffer adding an extra byte for the terminating
 | 
			
		||||
   * NULL. If utf16len is not -1 WideCharToMultiByte will not add it, so
 | 
			
		||||
   * we do it ourselves always, just in case. */
 | 
			
		||||
  *utf8 = uv__malloc(bufsize + 1);
 | 
			
		||||
 | 
			
		||||
  if (*utf8 == NULL)
 | 
			
		||||
    return UV_ENOMEM;
 | 
			
		||||
 | 
			
		||||
  /* Convert to UTF-8 */
 | 
			
		||||
  bufsize = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                0,
 | 
			
		||||
                                utf16,
 | 
			
		||||
                                utf16len,
 | 
			
		||||
                                *utf8,
 | 
			
		||||
                                bufsize,
 | 
			
		||||
                                NULL,
 | 
			
		||||
                                NULL);
 | 
			
		||||
 | 
			
		||||
  if (bufsize == 0) {
 | 
			
		||||
    uv__free(*utf8);
 | 
			
		||||
    *utf8 = NULL;
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  (*utf8)[bufsize] = '\0';
 | 
			
		||||
  return 0;
 | 
			
		||||
   *utf8 = NULL;
 | 
			
		||||
   return uv_utf16_to_wtf8(utf16, utf16len, utf8, &utf8_len);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Converts a UTF-8 string into a UTF-16 one. The resulting string is
 | 
			
		||||
 * null-terminated.
 | 
			
		||||
 *
 | 
			
		||||
 * If utf8 is null terminated, utf8len can be set to -1, otherwise it must
 | 
			
		||||
 * be specified.
 | 
			
		||||
 */
 | 
			
		||||
int uv__convert_utf8_to_utf16(const char* utf8, int utf8len, WCHAR** utf16) {
 | 
			
		||||
int uv__convert_utf8_to_utf16(const char* utf8, WCHAR** utf16) {
 | 
			
		||||
  int bufsize;
 | 
			
		||||
 | 
			
		||||
  if (utf8 == NULL)
 | 
			
		||||
    return UV_EINVAL;
 | 
			
		||||
 | 
			
		||||
  /* Check how much space we need */
 | 
			
		||||
  bufsize = MultiByteToWideChar(CP_UTF8, 0, utf8, utf8len, NULL, 0);
 | 
			
		||||
  /* Check how much space we need (including NUL). */
 | 
			
		||||
  bufsize = uv_wtf8_length_as_utf16(utf8);
 | 
			
		||||
  if (bufsize < 0)
 | 
			
		||||
    return UV__EINVAL;
 | 
			
		||||
 | 
			
		||||
  if (bufsize == 0)
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
 | 
			
		||||
  /* Allocate the destination buffer adding an extra byte for the terminating
 | 
			
		||||
   * NULL. If utf8len is not -1 MultiByteToWideChar will not add it, so
 | 
			
		||||
   * we do it ourselves always, just in case. */
 | 
			
		||||
  *utf16 = uv__malloc(sizeof(WCHAR) * (bufsize + 1));
 | 
			
		||||
  /* Allocate the destination buffer. */
 | 
			
		||||
  *utf16 = uv__malloc(sizeof(WCHAR) * bufsize);
 | 
			
		||||
 | 
			
		||||
  if (*utf16 == NULL)
 | 
			
		||||
    return UV_ENOMEM;
 | 
			
		||||
 | 
			
		||||
  /* Convert to UTF-16 */
 | 
			
		||||
  bufsize = MultiByteToWideChar(CP_UTF8, 0, utf8, utf8len, *utf16, bufsize);
 | 
			
		||||
  uv_wtf8_to_utf16(utf8, *utf16, bufsize);
 | 
			
		||||
 | 
			
		||||
  if (bufsize == 0) {
 | 
			
		||||
    uv__free(*utf16);
 | 
			
		||||
    *utf16 = NULL;
 | 
			
		||||
    return uv_translate_sys_error(GetLastError());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  (*utf16)[bufsize] = L'\0';
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Converts a UTF-16 string into a UTF-8 one in an existing buffer. The
 | 
			
		||||
 * resulting string is null-terminated.
 | 
			
		||||
 *
 | 
			
		||||
 * If utf16 is null terminated, utf16len can be set to -1, otherwise it must
 | 
			
		||||
 * be specified.
 | 
			
		||||
 */
 | 
			
		||||
int uv__copy_utf16_to_utf8(const WCHAR* utf16buffer, size_t utf16len, char* utf8, size_t *size) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  if (utf8 == NULL || size == NULL)
 | 
			
		||||
    return UV_EINVAL;
 | 
			
		||||
 | 
			
		||||
  if (*size == 0) {
 | 
			
		||||
    *size = uv_utf16_length_as_wtf8(utf16buffer, utf16len);
 | 
			
		||||
    r = UV_ENOBUFS;
 | 
			
		||||
  } else {
 | 
			
		||||
    *size -= 1; /* Reserve space for NUL. */
 | 
			
		||||
    r = uv_utf16_to_wtf8(utf16buffer, utf16len, &utf8, size);
 | 
			
		||||
  }
 | 
			
		||||
  if (r == UV_ENOBUFS)
 | 
			
		||||
    *size += 1; /* Add space for NUL. */
 | 
			
		||||
  return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int uv__getpwuid_r(uv_passwd_t* pwd) {
 | 
			
		||||
  HANDLE token;
 | 
			
		||||
  wchar_t username[UNLEN + 1];
 | 
			
		||||
@@ -1384,14 +1241,13 @@ int uv_os_getenv(const char* name, char* buffer, size_t* size) {
 | 
			
		||||
  wchar_t* var;
 | 
			
		||||
  DWORD varlen;
 | 
			
		||||
  wchar_t* name_w;
 | 
			
		||||
  DWORD bufsize;
 | 
			
		||||
  size_t len;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  if (name == NULL || buffer == NULL || size == NULL || *size == 0)
 | 
			
		||||
    return UV_EINVAL;
 | 
			
		||||
 | 
			
		||||
  r = uv__convert_utf8_to_utf16(name, -1, &name_w);
 | 
			
		||||
  r = uv__convert_utf8_to_utf16(name, &name_w);
 | 
			
		||||
 | 
			
		||||
  if (r != 0)
 | 
			
		||||
    return r;
 | 
			
		||||
@@ -1432,35 +1288,7 @@ int uv_os_getenv(const char* name, char* buffer, size_t* size) {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Check how much space we need */
 | 
			
		||||
  bufsize = WideCharToMultiByte(CP_UTF8, 0, var, -1, NULL, 0, NULL, NULL);
 | 
			
		||||
 | 
			
		||||
  if (bufsize == 0) {
 | 
			
		||||
    r = uv_translate_sys_error(GetLastError());
 | 
			
		||||
    goto fail;
 | 
			
		||||
  } else if (bufsize > *size) {
 | 
			
		||||
    *size = bufsize;
 | 
			
		||||
    r = UV_ENOBUFS;
 | 
			
		||||
    goto fail;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Convert to UTF-8 */
 | 
			
		||||
  bufsize = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                0,
 | 
			
		||||
                                var,
 | 
			
		||||
                                -1,
 | 
			
		||||
                                buffer,
 | 
			
		||||
                                *size,
 | 
			
		||||
                                NULL,
 | 
			
		||||
                                NULL);
 | 
			
		||||
 | 
			
		||||
  if (bufsize == 0) {
 | 
			
		||||
    r = uv_translate_sys_error(GetLastError());
 | 
			
		||||
    goto fail;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  *size = bufsize - 1;
 | 
			
		||||
  r = 0;
 | 
			
		||||
  r = uv__copy_utf16_to_utf8(var, len, buffer, size);
 | 
			
		||||
 | 
			
		||||
fail:
 | 
			
		||||
 | 
			
		||||
@@ -1482,12 +1310,12 @@ int uv_os_setenv(const char* name, const char* value) {
 | 
			
		||||
  if (name == NULL || value == NULL)
 | 
			
		||||
    return UV_EINVAL;
 | 
			
		||||
 | 
			
		||||
  r = uv__convert_utf8_to_utf16(name, -1, &name_w);
 | 
			
		||||
  r = uv__convert_utf8_to_utf16(name, &name_w);
 | 
			
		||||
 | 
			
		||||
  if (r != 0)
 | 
			
		||||
    return r;
 | 
			
		||||
 | 
			
		||||
  r = uv__convert_utf8_to_utf16(value, -1, &value_w);
 | 
			
		||||
  r = uv__convert_utf8_to_utf16(value, &value_w);
 | 
			
		||||
 | 
			
		||||
  if (r != 0) {
 | 
			
		||||
    uv__free(name_w);
 | 
			
		||||
@@ -1512,7 +1340,7 @@ int uv_os_unsetenv(const char* name) {
 | 
			
		||||
  if (name == NULL)
 | 
			
		||||
    return UV_EINVAL;
 | 
			
		||||
 | 
			
		||||
  r = uv__convert_utf8_to_utf16(name, -1, &name_w);
 | 
			
		||||
  r = uv__convert_utf8_to_utf16(name, &name_w);
 | 
			
		||||
 | 
			
		||||
  if (r != 0)
 | 
			
		||||
    return r;
 | 
			
		||||
@@ -1529,9 +1357,6 @@ int uv_os_unsetenv(const char* name) {
 | 
			
		||||
 | 
			
		||||
int uv_os_gethostname(char* buffer, size_t* size) {
 | 
			
		||||
  WCHAR buf[UV_MAXHOSTNAMESIZE];
 | 
			
		||||
  size_t len;
 | 
			
		||||
  char* utf8_str;
 | 
			
		||||
  int convert_result;
 | 
			
		||||
 | 
			
		||||
  if (buffer == NULL || size == NULL || *size == 0)
 | 
			
		||||
    return UV_EINVAL;
 | 
			
		||||
@@ -1544,22 +1369,7 @@ int uv_os_gethostname(char* buffer, size_t* size) {
 | 
			
		||||
  if (pGetHostNameW(buf, UV_MAXHOSTNAMESIZE) != 0)
 | 
			
		||||
    return uv_translate_sys_error(WSAGetLastError());
 | 
			
		||||
 | 
			
		||||
  convert_result = uv__convert_utf16_to_utf8(buf, -1, &utf8_str);
 | 
			
		||||
 | 
			
		||||
  if (convert_result != 0)
 | 
			
		||||
    return convert_result;
 | 
			
		||||
 | 
			
		||||
  len = strlen(utf8_str);
 | 
			
		||||
  if (len >= *size) {
 | 
			
		||||
    *size = len + 1;
 | 
			
		||||
    uv__free(utf8_str);
 | 
			
		||||
    return UV_ENOBUFS;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  memcpy(buffer, utf8_str, len + 1);
 | 
			
		||||
  uv__free(utf8_str);
 | 
			
		||||
  *size = len;
 | 
			
		||||
  return 0;
 | 
			
		||||
  return uv__copy_utf16_to_utf8(buf, -1, buffer, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1665,7 +1475,7 @@ int uv_os_uname(uv_utsname_t* buffer) {
 | 
			
		||||
  HKEY registry_key;
 | 
			
		||||
  WCHAR product_name_w[256];
 | 
			
		||||
  DWORD product_name_w_size;
 | 
			
		||||
  int version_size;
 | 
			
		||||
  size_t version_size;
 | 
			
		||||
  int processor_level;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
@@ -1696,7 +1506,7 @@ int uv_os_uname(uv_utsname_t* buffer) {
 | 
			
		||||
  r = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
 | 
			
		||||
                    L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",
 | 
			
		||||
                    0,
 | 
			
		||||
                    KEY_QUERY_VALUE,
 | 
			
		||||
                    KEY_QUERY_VALUE | KEY_WOW64_64KEY,
 | 
			
		||||
                    ®istry_key);
 | 
			
		||||
 | 
			
		||||
  if (r == ERROR_SUCCESS) {
 | 
			
		||||
@@ -1727,37 +1537,29 @@ int uv_os_uname(uv_utsname_t* buffer) {
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      version_size = WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                                         0,
 | 
			
		||||
                                         product_name_w,
 | 
			
		||||
                                         -1,
 | 
			
		||||
                                         buffer->version,
 | 
			
		||||
                                         sizeof(buffer->version),
 | 
			
		||||
                                         NULL,
 | 
			
		||||
                                         NULL);
 | 
			
		||||
      if (version_size == 0) {
 | 
			
		||||
        r = uv_translate_sys_error(GetLastError());
 | 
			
		||||
      version_size = sizeof(buffer->version);
 | 
			
		||||
      r = uv__copy_utf16_to_utf8(product_name_w,
 | 
			
		||||
                                 -1,
 | 
			
		||||
                                 buffer->version,
 | 
			
		||||
                                 &version_size);
 | 
			
		||||
      if (r)
 | 
			
		||||
        goto error;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Append service pack information to the version if present. */
 | 
			
		||||
  if (os_info.szCSDVersion[0] != L'\0') {
 | 
			
		||||
    if (version_size > 0)
 | 
			
		||||
      buffer->version[version_size - 1] = ' ';
 | 
			
		||||
      buffer->version[version_size++] = ' ';
 | 
			
		||||
 | 
			
		||||
    if (WideCharToMultiByte(CP_UTF8,
 | 
			
		||||
                            0,
 | 
			
		||||
                            os_info.szCSDVersion,
 | 
			
		||||
                            -1,
 | 
			
		||||
                            buffer->version + version_size,
 | 
			
		||||
                            sizeof(buffer->version) - version_size,
 | 
			
		||||
                            NULL,
 | 
			
		||||
                            NULL) == 0) {
 | 
			
		||||
      r = uv_translate_sys_error(GetLastError());
 | 
			
		||||
    version_size = sizeof(buffer->version) - version_size;
 | 
			
		||||
    r = uv__copy_utf16_to_utf8(os_info.szCSDVersion,
 | 
			
		||||
                               -1,
 | 
			
		||||
                               buffer->version + 
 | 
			
		||||
                                 sizeof(buffer->version) - version_size,
 | 
			
		||||
                               &version_size);
 | 
			
		||||
    if (r)
 | 
			
		||||
      goto error;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Populate the sysname field. */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								deps/libuv/test/benchmark-async-pummel.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								deps/libuv/test/benchmark-async-pummel.c
									
									
									
									
										vendored
									
									
								
							@@ -71,21 +71,21 @@ static int test_async_pummel(int nthreads) {
 | 
			
		||||
  tids = calloc(nthreads, sizeof(tids[0]));
 | 
			
		||||
  ASSERT_NOT_NULL(tids);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_async_init(uv_default_loop(), &handle, async_cb));
 | 
			
		||||
  ASSERT_OK(uv_async_init(uv_default_loop(), &handle, async_cb));
 | 
			
		||||
  ACCESS_ONCE(const char*, handle.data) = running;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < nthreads; i++)
 | 
			
		||||
    ASSERT(0 == uv_thread_create(tids + i, pummel, &handle));
 | 
			
		||||
    ASSERT_OK(uv_thread_create(tids + i, pummel, &handle));
 | 
			
		||||
 | 
			
		||||
  time = uv_hrtime();
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
 | 
			
		||||
  time = uv_hrtime() - time;
 | 
			
		||||
  done = 1;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < nthreads; i++)
 | 
			
		||||
    ASSERT(0 == uv_thread_join(tids + i));
 | 
			
		||||
    ASSERT_OK(uv_thread_join(tids + i));
 | 
			
		||||
 | 
			
		||||
  printf("async_pummel_%d: %s callbacks in %.2f seconds (%s/sec)\n",
 | 
			
		||||
         nthreads,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								deps/libuv/test/benchmark-async.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								deps/libuv/test/benchmark-async.c
									
									
									
									
										vendored
									
									
								
							@@ -43,7 +43,7 @@ struct ctx {
 | 
			
		||||
static void worker_async_cb(uv_async_t* handle) {
 | 
			
		||||
  struct ctx* ctx = container_of(handle, struct ctx, worker_async);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_async_send(&ctx->main_async));
 | 
			
		||||
  ASSERT_OK(uv_async_send(&ctx->main_async));
 | 
			
		||||
  ctx->worker_sent++;
 | 
			
		||||
  ctx->worker_seen++;
 | 
			
		||||
 | 
			
		||||
@@ -55,7 +55,7 @@ static void worker_async_cb(uv_async_t* handle) {
 | 
			
		||||
static void main_async_cb(uv_async_t* handle) {
 | 
			
		||||
  struct ctx* ctx = container_of(handle, struct ctx, main_async);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_async_send(&ctx->worker_async));
 | 
			
		||||
  ASSERT_OK(uv_async_send(&ctx->worker_async));
 | 
			
		||||
  ctx->main_sent++;
 | 
			
		||||
  ctx->main_seen++;
 | 
			
		||||
 | 
			
		||||
@@ -66,8 +66,8 @@ static void main_async_cb(uv_async_t* handle) {
 | 
			
		||||
 | 
			
		||||
static void worker(void* arg) {
 | 
			
		||||
  struct ctx* ctx = arg;
 | 
			
		||||
  ASSERT(0 == uv_async_send(&ctx->main_async));
 | 
			
		||||
  ASSERT(0 == uv_run(&ctx->loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_async_send(&ctx->main_async));
 | 
			
		||||
  ASSERT_OK(uv_run(&ctx->loop, UV_RUN_DEFAULT));
 | 
			
		||||
  uv_loop_close(&ctx->loop);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -85,29 +85,29 @@ static int test_async(int nthreads) {
 | 
			
		||||
  for (i = 0; i < nthreads; i++) {
 | 
			
		||||
    ctx = threads + i;
 | 
			
		||||
    ctx->nthreads = nthreads;
 | 
			
		||||
    ASSERT(0 == uv_loop_init(&ctx->loop));
 | 
			
		||||
    ASSERT(0 == uv_async_init(&ctx->loop, &ctx->worker_async, worker_async_cb));
 | 
			
		||||
    ASSERT(0 == uv_async_init(uv_default_loop(),
 | 
			
		||||
                              &ctx->main_async,
 | 
			
		||||
                              main_async_cb));
 | 
			
		||||
    ASSERT(0 == uv_thread_create(&ctx->thread, worker, ctx));
 | 
			
		||||
    ASSERT_OK(uv_loop_init(&ctx->loop));
 | 
			
		||||
    ASSERT_OK(uv_async_init(&ctx->loop, &ctx->worker_async, worker_async_cb));
 | 
			
		||||
    ASSERT_OK(uv_async_init(uv_default_loop(),
 | 
			
		||||
                            &ctx->main_async,
 | 
			
		||||
                            main_async_cb));
 | 
			
		||||
    ASSERT_OK(uv_thread_create(&ctx->thread, worker, ctx));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  time = uv_hrtime();
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < nthreads; i++)
 | 
			
		||||
    ASSERT(0 == uv_thread_join(&threads[i].thread));
 | 
			
		||||
    ASSERT_OK(uv_thread_join(&threads[i].thread));
 | 
			
		||||
 | 
			
		||||
  time = uv_hrtime() - time;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < nthreads; i++) {
 | 
			
		||||
    ctx = threads + i;
 | 
			
		||||
    ASSERT(ctx->worker_sent == NUM_PINGS);
 | 
			
		||||
    ASSERT(ctx->worker_seen == NUM_PINGS);
 | 
			
		||||
    ASSERT(ctx->main_sent == (unsigned int) NUM_PINGS);
 | 
			
		||||
    ASSERT(ctx->main_seen == (unsigned int) NUM_PINGS);
 | 
			
		||||
    ASSERT_EQ(ctx->worker_sent, NUM_PINGS);
 | 
			
		||||
    ASSERT_EQ(ctx->worker_seen, NUM_PINGS);
 | 
			
		||||
    ASSERT_EQ(ctx->main_sent, (unsigned int) NUM_PINGS);
 | 
			
		||||
    ASSERT_EQ(ctx->main_seen, (unsigned int) NUM_PINGS);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  printf("async%d: %.2f sec (%s/sec)\n",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								deps/libuv/test/benchmark-getaddrinfo.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								deps/libuv/test/benchmark-getaddrinfo.c
									
									
									
									
										vendored
									
									
								
							@@ -43,7 +43,7 @@ static void getaddrinfo_initiate(uv_getaddrinfo_t* handle);
 | 
			
		||||
 | 
			
		||||
static void getaddrinfo_cb(uv_getaddrinfo_t* handle, int status,
 | 
			
		||||
    struct addrinfo* res) {
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  calls_completed++;
 | 
			
		||||
  if (calls_initiated < TOTAL_CALLS) {
 | 
			
		||||
    getaddrinfo_initiate(handle);
 | 
			
		||||
@@ -59,7 +59,7 @@ static void getaddrinfo_initiate(uv_getaddrinfo_t* handle) {
 | 
			
		||||
  calls_initiated++;
 | 
			
		||||
 | 
			
		||||
  r = uv_getaddrinfo(loop, handle, &getaddrinfo_cb, name, NULL, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -80,8 +80,8 @@ BENCHMARK_IMPL(getaddrinfo) {
 | 
			
		||||
  uv_update_time(loop);
 | 
			
		||||
  end_time = uv_now(loop);
 | 
			
		||||
 | 
			
		||||
  ASSERT(calls_initiated == TOTAL_CALLS);
 | 
			
		||||
  ASSERT(calls_completed == TOTAL_CALLS);
 | 
			
		||||
  ASSERT_EQ(calls_initiated, TOTAL_CALLS);
 | 
			
		||||
  ASSERT_EQ(calls_completed, TOTAL_CALLS);
 | 
			
		||||
 | 
			
		||||
  fprintf(stderr, "getaddrinfo: %.0f req/s\n",
 | 
			
		||||
          (double) calls_completed / (double) (end_time - start_time) * 1000.0);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								deps/libuv/test/benchmark-loop-count.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								deps/libuv/test/benchmark-loop-count.c
									
									
									
									
										vendored
									
									
								
							@@ -74,7 +74,7 @@ BENCHMARK_IMPL(loop_count) {
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
  ns = uv_hrtime() - ns;
 | 
			
		||||
 | 
			
		||||
  ASSERT(ticks == NUM_TICKS);
 | 
			
		||||
  ASSERT_UINT64_EQ(ticks, NUM_TICKS);
 | 
			
		||||
 | 
			
		||||
  fprintf(stderr, "loop_count: %d ticks in %.2fs (%.0f/s)\n",
 | 
			
		||||
          NUM_TICKS,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								deps/libuv/test/benchmark-million-async.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								deps/libuv/test/benchmark-million-async.c
									
									
									
									
										vendored
									
									
								
							@@ -60,7 +60,7 @@ static void timer_cb(uv_timer_t* handle) {
 | 
			
		||||
  unsigned i;
 | 
			
		||||
 | 
			
		||||
  done = 1;
 | 
			
		||||
  ASSERT(0 == uv_thread_join(&thread_id));
 | 
			
		||||
  ASSERT_OK(uv_thread_join(&thread_id));
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < ARRAY_SIZE(container->async_handles); i++) {
 | 
			
		||||
    uv_async_t* handle = container->async_handles + i;
 | 
			
		||||
@@ -93,14 +93,14 @@ BENCHMARK_IMPL(million_async) {
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < ARRAY_SIZE(container->async_handles); i++) {
 | 
			
		||||
    handle = container->async_handles + i;
 | 
			
		||||
    ASSERT(0 == uv_async_init(loop, handle, async_cb));
 | 
			
		||||
    ASSERT_OK(uv_async_init(loop, handle, async_cb));
 | 
			
		||||
    handle->data = NULL;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_timer_init(loop, &timer_handle));
 | 
			
		||||
  ASSERT(0 == uv_timer_start(&timer_handle, timer_cb, timeout, 0));
 | 
			
		||||
  ASSERT(0 == uv_thread_create(&thread_id, thread_cb, NULL));
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_timer_init(loop, &timer_handle));
 | 
			
		||||
  ASSERT_OK(uv_timer_start(&timer_handle, timer_cb, timeout, 0));
 | 
			
		||||
  ASSERT_OK(uv_thread_create(&thread_id, thread_cb, NULL));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  printf("%s async events in %.1f seconds (%s/s, %s unique handles seen)\n",
 | 
			
		||||
          fmt(&fmtbuf[0], container->async_events),
 | 
			
		||||
          timeout / 1000.,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								deps/libuv/test/benchmark-million-timers.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								deps/libuv/test/benchmark-million-timers.c
									
									
									
									
										vendored
									
									
								
							@@ -57,22 +57,22 @@ BENCHMARK_IMPL(million_timers) {
 | 
			
		||||
  before_all = uv_hrtime();
 | 
			
		||||
  for (i = 0; i < NUM_TIMERS; i++) {
 | 
			
		||||
    if (i % 1000 == 0) timeout++;
 | 
			
		||||
    ASSERT(0 == uv_timer_init(loop, timers + i));
 | 
			
		||||
    ASSERT(0 == uv_timer_start(timers + i, timer_cb, timeout, 0));
 | 
			
		||||
    ASSERT_OK(uv_timer_init(loop, timers + i));
 | 
			
		||||
    ASSERT_OK(uv_timer_start(timers + i, timer_cb, timeout, 0));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  before_run = uv_hrtime();
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  after_run = uv_hrtime();
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < NUM_TIMERS; i++)
 | 
			
		||||
    uv_close((uv_handle_t*) (timers + i), close_cb);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  after_all = uv_hrtime();
 | 
			
		||||
 | 
			
		||||
  ASSERT(timer_cb_called == NUM_TIMERS);
 | 
			
		||||
  ASSERT(close_cb_called == NUM_TIMERS);
 | 
			
		||||
  ASSERT_EQ(timer_cb_called, NUM_TIMERS);
 | 
			
		||||
  ASSERT_EQ(close_cb_called, NUM_TIMERS);
 | 
			
		||||
  free(timers);
 | 
			
		||||
 | 
			
		||||
  fprintf(stderr, "%.2f seconds total\n", (after_all - before_all) / 1e9);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										114
									
								
								deps/libuv/test/benchmark-multi-accept.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										114
									
								
								deps/libuv/test/benchmark-multi-accept.c
									
									
									
									
										vendored
									
									
								
							@@ -117,19 +117,19 @@ static void ipc_connection_cb(uv_stream_t* ipc_pipe, int status) {
 | 
			
		||||
  ASSERT_NOT_NULL(pc);
 | 
			
		||||
 | 
			
		||||
  if (ipc_pipe->type == UV_TCP)
 | 
			
		||||
    ASSERT(0 == uv_tcp_init(loop, (uv_tcp_t*) &pc->peer_handle));
 | 
			
		||||
    ASSERT_OK(uv_tcp_init(loop, (uv_tcp_t*) &pc->peer_handle));
 | 
			
		||||
  else if (ipc_pipe->type == UV_NAMED_PIPE)
 | 
			
		||||
    ASSERT(0 == uv_pipe_init(loop, (uv_pipe_t*) &pc->peer_handle, 1));
 | 
			
		||||
    ASSERT_OK(uv_pipe_init(loop, (uv_pipe_t*) &pc->peer_handle, 1));
 | 
			
		||||
  else
 | 
			
		||||
    ASSERT(0);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_accept(ipc_pipe, (uv_stream_t*) &pc->peer_handle));
 | 
			
		||||
  ASSERT(0 == uv_write2(&pc->write_req,
 | 
			
		||||
                        (uv_stream_t*) &pc->peer_handle,
 | 
			
		||||
                        &buf,
 | 
			
		||||
                        1,
 | 
			
		||||
                        (uv_stream_t*) &sc->server_handle,
 | 
			
		||||
                        ipc_write_cb));
 | 
			
		||||
  ASSERT_OK(uv_accept(ipc_pipe, (uv_stream_t*) &pc->peer_handle));
 | 
			
		||||
  ASSERT_OK(uv_write2(&pc->write_req,
 | 
			
		||||
                      (uv_stream_t*) &pc->peer_handle,
 | 
			
		||||
                      &buf,
 | 
			
		||||
                      1,
 | 
			
		||||
                      (uv_stream_t*) &sc->server_handle,
 | 
			
		||||
                      ipc_write_cb));
 | 
			
		||||
 | 
			
		||||
  if (--sc->num_connects == 0)
 | 
			
		||||
    uv_close((uv_handle_t*) ipc_pipe, NULL);
 | 
			
		||||
@@ -153,10 +153,10 @@ static void ipc_close_cb(uv_handle_t* handle) {
 | 
			
		||||
static void ipc_connect_cb(uv_connect_t* req, int status) {
 | 
			
		||||
  struct ipc_client_ctx* ctx;
 | 
			
		||||
  ctx = container_of(req, struct ipc_client_ctx, connect_req);
 | 
			
		||||
  ASSERT(0 == status);
 | 
			
		||||
  ASSERT(0 == uv_read_start((uv_stream_t*) &ctx->ipc_pipe,
 | 
			
		||||
                            ipc_alloc_cb,
 | 
			
		||||
                            ipc_read_cb));
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  ASSERT_OK(uv_read_start((uv_stream_t*) &ctx->ipc_pipe,
 | 
			
		||||
                          ipc_alloc_cb,
 | 
			
		||||
                          ipc_read_cb));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -182,16 +182,16 @@ static void ipc_read_cb(uv_stream_t* handle,
 | 
			
		||||
  ctx = container_of(ipc_pipe, struct ipc_client_ctx, ipc_pipe);
 | 
			
		||||
  loop = ipc_pipe->loop;
 | 
			
		||||
 | 
			
		||||
  ASSERT(1 == uv_pipe_pending_count(ipc_pipe));
 | 
			
		||||
  ASSERT_EQ(1, uv_pipe_pending_count(ipc_pipe));
 | 
			
		||||
  type = uv_pipe_pending_type(ipc_pipe);
 | 
			
		||||
  if (type == UV_TCP)
 | 
			
		||||
    ASSERT(0 == uv_tcp_init(loop, (uv_tcp_t*) ctx->server_handle));
 | 
			
		||||
    ASSERT_OK(uv_tcp_init(loop, (uv_tcp_t*) ctx->server_handle));
 | 
			
		||||
  else if (type == UV_NAMED_PIPE)
 | 
			
		||||
    ASSERT(0 == uv_pipe_init(loop, (uv_pipe_t*) ctx->server_handle, 0));
 | 
			
		||||
    ASSERT_OK(uv_pipe_init(loop, (uv_pipe_t*) ctx->server_handle, 0));
 | 
			
		||||
  else
 | 
			
		||||
    ASSERT(0);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_accept(handle, ctx->server_handle));
 | 
			
		||||
  ASSERT_OK(uv_accept(handle, ctx->server_handle));
 | 
			
		||||
  uv_close((uv_handle_t*) &ctx->ipc_pipe, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -211,10 +211,10 @@ static void send_listen_handles(uv_handle_type type,
 | 
			
		||||
  ctx.num_connects = num_servers;
 | 
			
		||||
 | 
			
		||||
  if (type == UV_TCP) {
 | 
			
		||||
    ASSERT(0 == uv_tcp_init(loop, (uv_tcp_t*) &ctx.server_handle));
 | 
			
		||||
    ASSERT(0 == uv_tcp_bind((uv_tcp_t*) &ctx.server_handle,
 | 
			
		||||
                            (const struct sockaddr*) &listen_addr,
 | 
			
		||||
                            0));
 | 
			
		||||
    ASSERT_OK(uv_tcp_init(loop, (uv_tcp_t*) &ctx.server_handle));
 | 
			
		||||
    ASSERT_OK(uv_tcp_bind((uv_tcp_t*) &ctx.server_handle,
 | 
			
		||||
                          (const struct sockaddr*) &listen_addr,
 | 
			
		||||
                          0));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
    ASSERT(0);
 | 
			
		||||
@@ -223,16 +223,16 @@ static void send_listen_handles(uv_handle_type type,
 | 
			
		||||
   * If we accept a connection then the connected pipe must be initialized
 | 
			
		||||
   * with ipc=1.
 | 
			
		||||
   */
 | 
			
		||||
  ASSERT(0 == uv_pipe_init(loop, &ctx.ipc_pipe, 0));
 | 
			
		||||
  ASSERT(0 == uv_pipe_bind(&ctx.ipc_pipe, IPC_PIPE_NAME));
 | 
			
		||||
  ASSERT(0 == uv_listen((uv_stream_t*) &ctx.ipc_pipe, 128, ipc_connection_cb));
 | 
			
		||||
  ASSERT_OK(uv_pipe_init(loop, &ctx.ipc_pipe, 0));
 | 
			
		||||
  ASSERT_OK(uv_pipe_bind(&ctx.ipc_pipe, IPC_PIPE_NAME));
 | 
			
		||||
  ASSERT_OK(uv_listen((uv_stream_t*) &ctx.ipc_pipe, 128, ipc_connection_cb));
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < num_servers; i++)
 | 
			
		||||
    uv_sem_post(&servers[i].semaphore);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  uv_close((uv_handle_t*) &ctx.server_handle, NULL);
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < num_servers; i++)
 | 
			
		||||
    uv_sem_wait(&servers[i].semaphore);
 | 
			
		||||
@@ -245,12 +245,12 @@ static void get_listen_handle(uv_loop_t* loop, uv_stream_t* server_handle) {
 | 
			
		||||
  ctx.server_handle = server_handle;
 | 
			
		||||
  ctx.server_handle->data = "server handle";
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_pipe_init(loop, &ctx.ipc_pipe, 1));
 | 
			
		||||
  ASSERT_OK(uv_pipe_init(loop, &ctx.ipc_pipe, 1));
 | 
			
		||||
  uv_pipe_connect(&ctx.connect_req,
 | 
			
		||||
                  &ctx.ipc_pipe,
 | 
			
		||||
                  IPC_PIPE_NAME,
 | 
			
		||||
                  ipc_connect_cb);
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -259,9 +259,9 @@ static void server_cb(void *arg) {
 | 
			
		||||
  uv_loop_t loop;
 | 
			
		||||
 | 
			
		||||
  ctx = arg;
 | 
			
		||||
  ASSERT(0 == uv_loop_init(&loop));
 | 
			
		||||
  ASSERT_OK(uv_loop_init(&loop));
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_async_init(&loop, &ctx->async_handle, sv_async_cb));
 | 
			
		||||
  ASSERT_OK(uv_async_init(&loop, &ctx->async_handle, sv_async_cb));
 | 
			
		||||
  uv_unref((uv_handle_t*) &ctx->async_handle);
 | 
			
		||||
 | 
			
		||||
  /* Wait until the main thread is ready. */
 | 
			
		||||
@@ -270,10 +270,10 @@ static void server_cb(void *arg) {
 | 
			
		||||
  uv_sem_post(&ctx->semaphore);
 | 
			
		||||
 | 
			
		||||
  /* Now start the actual benchmark. */
 | 
			
		||||
  ASSERT(0 == uv_listen((uv_stream_t*) &ctx->server_handle,
 | 
			
		||||
                        128,
 | 
			
		||||
                        sv_connection_cb));
 | 
			
		||||
  ASSERT(0 == uv_run(&loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_listen((uv_stream_t*) &ctx->server_handle,
 | 
			
		||||
                      128,
 | 
			
		||||
                      sv_connection_cb));
 | 
			
		||||
  ASSERT_OK(uv_run(&loop, UV_RUN_DEFAULT));
 | 
			
		||||
 | 
			
		||||
  uv_loop_close(&loop);
 | 
			
		||||
}
 | 
			
		||||
@@ -292,20 +292,20 @@ static void sv_connection_cb(uv_stream_t* server_handle, int status) {
 | 
			
		||||
  struct server_ctx* ctx;
 | 
			
		||||
 | 
			
		||||
  ctx = container_of(server_handle, struct server_ctx, server_handle);
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
 | 
			
		||||
  storage = malloc(sizeof(*storage));
 | 
			
		||||
  ASSERT_NOT_NULL(storage);
 | 
			
		||||
 | 
			
		||||
  if (server_handle->type == UV_TCP)
 | 
			
		||||
    ASSERT(0 == uv_tcp_init(server_handle->loop, (uv_tcp_t*) storage));
 | 
			
		||||
    ASSERT_OK(uv_tcp_init(server_handle->loop, (uv_tcp_t*) storage));
 | 
			
		||||
  else if (server_handle->type == UV_NAMED_PIPE)
 | 
			
		||||
    ASSERT(0 == uv_pipe_init(server_handle->loop, (uv_pipe_t*) storage, 0));
 | 
			
		||||
    ASSERT_OK(uv_pipe_init(server_handle->loop, (uv_pipe_t*) storage, 0));
 | 
			
		||||
  else
 | 
			
		||||
    ASSERT(0);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_accept(server_handle, (uv_stream_t*) storage));
 | 
			
		||||
  ASSERT(0 == uv_read_start((uv_stream_t*) storage, sv_alloc_cb, sv_read_cb));
 | 
			
		||||
  ASSERT_OK(uv_accept(server_handle, (uv_stream_t*) storage));
 | 
			
		||||
  ASSERT_OK(uv_read_start((uv_stream_t*) storage, sv_alloc_cb, sv_read_cb));
 | 
			
		||||
  ctx->num_connects++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -322,7 +322,7 @@ static void sv_alloc_cb(uv_handle_t* handle,
 | 
			
		||||
static void sv_read_cb(uv_stream_t* handle,
 | 
			
		||||
                       ssize_t nread,
 | 
			
		||||
                       const uv_buf_t* buf) {
 | 
			
		||||
  ASSERT(nread == UV_EOF);
 | 
			
		||||
  ASSERT_EQ(nread, UV_EOF);
 | 
			
		||||
  uv_close((uv_handle_t*) handle, (uv_close_cb) free);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -330,7 +330,7 @@ static void sv_read_cb(uv_stream_t* handle,
 | 
			
		||||
static void cl_connect_cb(uv_connect_t* req, int status) {
 | 
			
		||||
  struct client_ctx* ctx = container_of(req, struct client_ctx, connect_req);
 | 
			
		||||
  uv_idle_start(&ctx->idle_handle, cl_idle_cb);
 | 
			
		||||
  ASSERT(0 == status);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -351,11 +351,11 @@ static void cl_close_cb(uv_handle_t* handle) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_tcp_init(handle->loop, (uv_tcp_t*) &ctx->client_handle));
 | 
			
		||||
  ASSERT(0 == uv_tcp_connect(&ctx->connect_req,
 | 
			
		||||
                             (uv_tcp_t*) &ctx->client_handle,
 | 
			
		||||
                             (const struct sockaddr*) &listen_addr,
 | 
			
		||||
                             cl_connect_cb));
 | 
			
		||||
  ASSERT_OK(uv_tcp_init(handle->loop, (uv_tcp_t*) &ctx->client_handle));
 | 
			
		||||
  ASSERT_OK(uv_tcp_connect(&ctx->connect_req,
 | 
			
		||||
                           (uv_tcp_t*) &ctx->client_handle,
 | 
			
		||||
                           (const struct sockaddr*) &listen_addr,
 | 
			
		||||
                           cl_connect_cb));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -367,7 +367,7 @@ static int test_tcp(unsigned int num_servers, unsigned int num_clients) {
 | 
			
		||||
  unsigned int i;
 | 
			
		||||
  double time;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &listen_addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &listen_addr));
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
 | 
			
		||||
  servers = calloc(num_servers, sizeof(servers[0]));
 | 
			
		||||
@@ -381,8 +381,8 @@ static int test_tcp(unsigned int num_servers, unsigned int num_clients) {
 | 
			
		||||
   */
 | 
			
		||||
  for (i = 0; i < num_servers; i++) {
 | 
			
		||||
    struct server_ctx* ctx = servers + i;
 | 
			
		||||
    ASSERT(0 == uv_sem_init(&ctx->semaphore, 0));
 | 
			
		||||
    ASSERT(0 == uv_thread_create(&ctx->thread_id, server_cb, ctx));
 | 
			
		||||
    ASSERT_OK(uv_sem_init(&ctx->semaphore, 0));
 | 
			
		||||
    ASSERT_OK(uv_thread_create(&ctx->thread_id, server_cb, ctx));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  send_listen_handles(UV_TCP, num_servers, servers);
 | 
			
		||||
@@ -392,17 +392,17 @@ static int test_tcp(unsigned int num_servers, unsigned int num_clients) {
 | 
			
		||||
    ctx->num_connects = NUM_CONNECTS / num_clients;
 | 
			
		||||
    handle = (uv_tcp_t*) &ctx->client_handle;
 | 
			
		||||
    handle->data = "client handle";
 | 
			
		||||
    ASSERT(0 == uv_tcp_init(loop, handle));
 | 
			
		||||
    ASSERT(0 == uv_tcp_connect(&ctx->connect_req,
 | 
			
		||||
                               handle,
 | 
			
		||||
                               (const struct sockaddr*) &listen_addr,
 | 
			
		||||
                               cl_connect_cb));
 | 
			
		||||
    ASSERT(0 == uv_idle_init(loop, &ctx->idle_handle));
 | 
			
		||||
    ASSERT_OK(uv_tcp_init(loop, handle));
 | 
			
		||||
    ASSERT_OK(uv_tcp_connect(&ctx->connect_req,
 | 
			
		||||
                             handle,
 | 
			
		||||
                             (const struct sockaddr*) &listen_addr,
 | 
			
		||||
                             cl_connect_cb));
 | 
			
		||||
    ASSERT_OK(uv_idle_init(loop, &ctx->idle_handle));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    uint64_t t = uv_hrtime();
 | 
			
		||||
    ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
    ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
    t = uv_hrtime() - t;
 | 
			
		||||
    time = t / 1e9;
 | 
			
		||||
  }
 | 
			
		||||
@@ -410,7 +410,7 @@ static int test_tcp(unsigned int num_servers, unsigned int num_clients) {
 | 
			
		||||
  for (i = 0; i < num_servers; i++) {
 | 
			
		||||
    struct server_ctx* ctx = servers + i;
 | 
			
		||||
    uv_async_send(&ctx->async_handle);
 | 
			
		||||
    ASSERT(0 == uv_thread_join(&ctx->thread_id));
 | 
			
		||||
    ASSERT_OK(uv_thread_join(&ctx->thread_id));
 | 
			
		||||
    uv_sem_destroy(&ctx->semaphore);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								deps/libuv/test/benchmark-ping-pongs.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								deps/libuv/test/benchmark-ping-pongs.c
									
									
									
									
										vendored
									
									
								
							@@ -90,7 +90,7 @@ static void pinger_close_cb(uv_handle_t* handle) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void pinger_write_cb(uv_write_t* req, int status) {
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
 | 
			
		||||
  free(req);
 | 
			
		||||
}
 | 
			
		||||
@@ -110,14 +110,14 @@ static void pinger_write_ping(pinger_t* pinger) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void pinger_shutdown_cb(uv_shutdown_t* req, int status) {
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  pinger_shutdown_cb_called++;
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
   * The close callback has not been triggered yet. We must wait for EOF
 | 
			
		||||
   * until we close the connection.
 | 
			
		||||
   */
 | 
			
		||||
  ASSERT(completed_pingers == 0);
 | 
			
		||||
  ASSERT_OK(completed_pingers);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -130,13 +130,13 @@ static void pinger_read_cb(uv_stream_t* tcp,
 | 
			
		||||
  pinger = (pinger_t*)tcp->data;
 | 
			
		||||
 | 
			
		||||
  if (nread < 0) {
 | 
			
		||||
    ASSERT(nread == UV_EOF);
 | 
			
		||||
    ASSERT_EQ(nread, UV_EOF);
 | 
			
		||||
 | 
			
		||||
    if (buf->base) {
 | 
			
		||||
      buf_free(buf);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ASSERT(pinger_shutdown_cb_called == 1);
 | 
			
		||||
    ASSERT_EQ(1, pinger_shutdown_cb_called);
 | 
			
		||||
    uv_close((uv_handle_t*)tcp, pinger_close_cb);
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
@@ -144,7 +144,7 @@ static void pinger_read_cb(uv_stream_t* tcp,
 | 
			
		||||
 | 
			
		||||
  /* Now we count the pings */
 | 
			
		||||
  for (i = 0; i < nread; i++) {
 | 
			
		||||
    ASSERT(buf->base[i] == PING[pinger->state]);
 | 
			
		||||
    ASSERT_EQ(buf->base[i], PING[pinger->state]);
 | 
			
		||||
    pinger->state = (pinger->state + 1) % (sizeof(PING) - 1);
 | 
			
		||||
    if (pinger->state == 0) {
 | 
			
		||||
      pinger->pongs++;
 | 
			
		||||
@@ -166,7 +166,7 @@ static void pinger_read_cb(uv_stream_t* tcp,
 | 
			
		||||
static void pinger_connect_cb(uv_connect_t* req, int status) {
 | 
			
		||||
  pinger_t *pinger = (pinger_t*)req->handle->data;
 | 
			
		||||
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
 | 
			
		||||
  pinger_write_ping(pinger);
 | 
			
		||||
 | 
			
		||||
@@ -182,8 +182,8 @@ static void pinger_new(void) {
 | 
			
		||||
  pinger_t *pinger;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("0.0.0.0", 0, &client_addr));
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &server_addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("0.0.0.0", 0, &client_addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &server_addr));
 | 
			
		||||
  pinger = malloc(sizeof(*pinger));
 | 
			
		||||
  pinger->state = 0;
 | 
			
		||||
  pinger->pongs = 0;
 | 
			
		||||
@@ -194,9 +194,9 @@ static void pinger_new(void) {
 | 
			
		||||
 | 
			
		||||
  pinger->tcp.data = pinger;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_tcp_bind(&pinger->tcp,
 | 
			
		||||
                          (const struct sockaddr*) &client_addr,
 | 
			
		||||
                          0));
 | 
			
		||||
  ASSERT_OK(uv_tcp_bind(&pinger->tcp,
 | 
			
		||||
                        (const struct sockaddr*) &client_addr,
 | 
			
		||||
                        0));
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_connect(&pinger->connect_req,
 | 
			
		||||
                     &pinger->tcp,
 | 
			
		||||
@@ -214,7 +214,7 @@ BENCHMARK_IMPL(ping_pongs) {
 | 
			
		||||
  pinger_new();
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(completed_pingers == 1);
 | 
			
		||||
  ASSERT_EQ(1, completed_pingers);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								deps/libuv/test/benchmark-ping-udp.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								deps/libuv/test/benchmark-ping-udp.c
									
									
									
									
										vendored
									
									
								
							@@ -95,11 +95,11 @@ static void pinger_read_cb(uv_udp_t* udp,
 | 
			
		||||
  pinger = (pinger_t*)udp->data;
 | 
			
		||||
 | 
			
		||||
  /* No data here means something went wrong */
 | 
			
		||||
  ASSERT(nread > 0);
 | 
			
		||||
  ASSERT_GT(nread, 0);
 | 
			
		||||
 | 
			
		||||
  /* Now we count the pings */
 | 
			
		||||
  for (i = 0; i < nread; i++) {
 | 
			
		||||
    ASSERT(buf->base[i] == PING[pinger->state]);
 | 
			
		||||
    ASSERT_EQ(buf->base[i], PING[pinger->state]);
 | 
			
		||||
    pinger->state = (pinger->state + 1) % (sizeof(PING) - 1);
 | 
			
		||||
    if (pinger->state == 0) {
 | 
			
		||||
      pinger->pongs++;
 | 
			
		||||
@@ -119,15 +119,15 @@ static void udp_pinger_new(void) {
 | 
			
		||||
  pinger_t* pinger = malloc(sizeof(*pinger));
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &pinger->server_addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &pinger->server_addr));
 | 
			
		||||
  pinger->state = 0;
 | 
			
		||||
  pinger->pongs = 0;
 | 
			
		||||
 | 
			
		||||
  /* Try to do NUM_PINGS ping-pongs (connection-less). */
 | 
			
		||||
  r = uv_udp_init(loop, &pinger->udp);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_udp_bind(&pinger->udp, (const struct sockaddr*) &pinger->server_addr, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  pinger->udp.data = pinger;
 | 
			
		||||
 | 
			
		||||
@@ -148,7 +148,7 @@ static int ping_udp(unsigned pingers) {
 | 
			
		||||
    udp_pinger_new();
 | 
			
		||||
  }
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(completed_pingers >= 1);
 | 
			
		||||
  ASSERT_GE(completed_pingers, 1);
 | 
			
		||||
 | 
			
		||||
  fprintf(stderr, "ping_pongs: %d pingers, ~ %lu roundtrips/s\n",
 | 
			
		||||
          completed_pingers, completed_pings / (TIME/1000));
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								deps/libuv/test/benchmark-pound.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								deps/libuv/test/benchmark-pound.c
									
									
									
									
										vendored
									
									
								
							@@ -115,7 +115,7 @@ static void connect_cb(uv_connect_t* req, int status) {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ASSERT_NOT_NULL(req);
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
 | 
			
		||||
  conn = (conn_rec*)req->data;
 | 
			
		||||
  ASSERT_NOT_NULL(conn);
 | 
			
		||||
@@ -125,13 +125,13 @@ static void connect_cb(uv_connect_t* req, int status) {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  r = uv_read_start(&conn->stream, alloc_cb, read_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  buf.base = buffer;
 | 
			
		||||
  buf.len = sizeof(buffer) - 1;
 | 
			
		||||
 | 
			
		||||
  r = uv_write(&conn->write_req, &conn->stream, &buf, 1, after_write);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -200,9 +200,9 @@ static void tcp_make_connect(conn_rec* p) {
 | 
			
		||||
  tp = (tcp_conn_rec*) p;
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_init(loop, (uv_tcp_t*)&p->stream);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_connect(&tp->conn_req,
 | 
			
		||||
                     (uv_tcp_t*) &p->stream,
 | 
			
		||||
@@ -227,7 +227,7 @@ static void pipe_make_connect(conn_rec* p) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  r = uv_pipe_init(loop, (uv_pipe_t*)&p->stream, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_pipe_connect(&((pipe_conn_rec*) p)->conn_req,
 | 
			
		||||
                  (uv_pipe_t*) &p->stream,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										50
									
								
								deps/libuv/test/benchmark-pump.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										50
									
								
								deps/libuv/test/benchmark-pump.c
									
									
									
									
										vendored
									
									
								
							@@ -159,9 +159,9 @@ static void start_stats_collection(void) {
 | 
			
		||||
  /* Show-stats timer */
 | 
			
		||||
  stats_left = STATS_COUNT;
 | 
			
		||||
  r = uv_timer_init(loop, &timer_handle);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_timer_start(&timer_handle, show_stats, STATS_INTERVAL, STATS_INTERVAL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_update_time(loop);
 | 
			
		||||
  start_time = uv_now(loop);
 | 
			
		||||
@@ -170,7 +170,7 @@ static void start_stats_collection(void) {
 | 
			
		||||
 | 
			
		||||
static void read_cb(uv_stream_t* stream, ssize_t bytes, const uv_buf_t* buf) {
 | 
			
		||||
  if (nrecv_total == 0) {
 | 
			
		||||
    ASSERT(start_time == 0);
 | 
			
		||||
    ASSERT_OK(start_time);
 | 
			
		||||
    uv_update_time(loop);
 | 
			
		||||
    start_time = uv_now(loop);
 | 
			
		||||
  }
 | 
			
		||||
@@ -188,7 +188,7 @@ static void read_cb(uv_stream_t* stream, ssize_t bytes, const uv_buf_t* buf) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void write_cb(uv_write_t* req, int status) {
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
 | 
			
		||||
  req_free((uv_req_t*) req);
 | 
			
		||||
 | 
			
		||||
@@ -209,7 +209,7 @@ static void do_write(uv_stream_t* stream) {
 | 
			
		||||
 | 
			
		||||
  req = (uv_write_t*) req_alloc();
 | 
			
		||||
  r = uv_write(req, stream, &buf, 1, write_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -220,7 +220,7 @@ static void connect_cb(uv_connect_t* req, int status) {
 | 
			
		||||
    fprintf(stderr, "%s", uv_strerror(status));
 | 
			
		||||
    fflush(stderr);
 | 
			
		||||
  }
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
 | 
			
		||||
  write_sockets++;
 | 
			
		||||
  req_free((uv_req_t*) req);
 | 
			
		||||
@@ -253,19 +253,19 @@ static void maybe_connect_some(void) {
 | 
			
		||||
      tcp = &tcp_write_handles[max_connect_socket++];
 | 
			
		||||
 | 
			
		||||
      r = uv_tcp_init(loop, tcp);
 | 
			
		||||
      ASSERT(r == 0);
 | 
			
		||||
      ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
      req = (uv_connect_t*) req_alloc();
 | 
			
		||||
      r = uv_tcp_connect(req,
 | 
			
		||||
                         tcp,
 | 
			
		||||
                         (const struct sockaddr*) &connect_addr,
 | 
			
		||||
                         connect_cb);
 | 
			
		||||
      ASSERT(r == 0);
 | 
			
		||||
      ASSERT_OK(r);
 | 
			
		||||
    } else {
 | 
			
		||||
      pipe = &pipe_write_handles[max_connect_socket++];
 | 
			
		||||
 | 
			
		||||
      r = uv_pipe_init(loop, pipe, 0);
 | 
			
		||||
      ASSERT(r == 0);
 | 
			
		||||
      ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
      req = (uv_connect_t*) req_alloc();
 | 
			
		||||
      uv_pipe_connect(req, pipe, TEST_PIPENAME, connect_cb);
 | 
			
		||||
@@ -278,24 +278,24 @@ static void connection_cb(uv_stream_t* s, int status) {
 | 
			
		||||
  uv_stream_t* stream;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(server == s);
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_PTR_EQ(server, s);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
 | 
			
		||||
  if (type == TCP) {
 | 
			
		||||
    stream = (uv_stream_t*)malloc(sizeof(uv_tcp_t));
 | 
			
		||||
    r = uv_tcp_init(loop, (uv_tcp_t*)stream);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
  } else {
 | 
			
		||||
    stream = (uv_stream_t*)malloc(sizeof(uv_pipe_t));
 | 
			
		||||
    r = uv_pipe_init(loop, (uv_pipe_t*)stream, 0);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  r = uv_accept(s, stream);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_read_start(stream, buf_alloc, read_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  read_sockets++;
 | 
			
		||||
  max_read_sockets++;
 | 
			
		||||
@@ -379,16 +379,16 @@ HELPER_IMPL(tcp_pump_server) {
 | 
			
		||||
  type = TCP;
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &listen_addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("0.0.0.0", TEST_PORT, &listen_addr));
 | 
			
		||||
 | 
			
		||||
  /* Server */
 | 
			
		||||
  server = (uv_stream_t*)&tcpServer;
 | 
			
		||||
  r = uv_tcp_init(loop, &tcpServer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_tcp_bind(&tcpServer, (const struct sockaddr*) &listen_addr, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_listen((uv_stream_t*)&tcpServer, MAX_WRITE_HANDLES, connection_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  notify_parent_process();
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
@@ -406,11 +406,11 @@ HELPER_IMPL(pipe_pump_server) {
 | 
			
		||||
  /* Server */
 | 
			
		||||
  server = (uv_stream_t*)&pipeServer;
 | 
			
		||||
  r = uv_pipe_init(loop, &pipeServer, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_pipe_bind(&pipeServer, TEST_PIPENAME);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_listen((uv_stream_t*)&pipeServer, MAX_WRITE_HANDLES, connection_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  notify_parent_process();
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
@@ -421,13 +421,13 @@ HELPER_IMPL(pipe_pump_server) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void tcp_pump(int n) {
 | 
			
		||||
  ASSERT(n <= MAX_WRITE_HANDLES);
 | 
			
		||||
  ASSERT_LE(n, MAX_WRITE_HANDLES);
 | 
			
		||||
  TARGET_CONNECTIONS = n;
 | 
			
		||||
  type = TCP;
 | 
			
		||||
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &connect_addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &connect_addr));
 | 
			
		||||
 | 
			
		||||
  /* Start making connections */
 | 
			
		||||
  maybe_connect_some();
 | 
			
		||||
@@ -439,7 +439,7 @@ static void tcp_pump(int n) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void pipe_pump(int n) {
 | 
			
		||||
  ASSERT(n <= MAX_WRITE_HANDLES);
 | 
			
		||||
  ASSERT_LE(n, MAX_WRITE_HANDLES);
 | 
			
		||||
  TARGET_CONNECTIONS = n;
 | 
			
		||||
  type = PIPE;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								deps/libuv/test/benchmark-queue-work.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								deps/libuv/test/benchmark-queue-work.c
									
									
									
									
										vendored
									
									
								
							@@ -40,7 +40,7 @@ static void work_cb(uv_work_t* req) {
 | 
			
		||||
static void after_work_cb(uv_work_t* req, int status) {
 | 
			
		||||
  events++;
 | 
			
		||||
  if (!done)
 | 
			
		||||
    ASSERT_EQ(0, uv_queue_work(req->loop, req, work_cb, after_work_cb));
 | 
			
		||||
    ASSERT_OK(uv_queue_work(req->loop, req, work_cb, after_work_cb));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void timer_cb(uv_timer_t* handle) { done = 1; }
 | 
			
		||||
@@ -55,11 +55,11 @@ BENCHMARK_IMPL(queue_work) {
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
  timeout = 5000;
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_timer_init(loop, &timer_handle));
 | 
			
		||||
  ASSERT_EQ(0, uv_timer_start(&timer_handle, timer_cb, timeout, 0));
 | 
			
		||||
  ASSERT_OK(uv_timer_init(loop, &timer_handle));
 | 
			
		||||
  ASSERT_OK(uv_timer_start(&timer_handle, timer_cb, timeout, 0));
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_queue_work(loop, &work, work_cb, after_work_cb));
 | 
			
		||||
  ASSERT_EQ(0, uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_queue_work(loop, &work, work_cb, after_work_cb));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
 | 
			
		||||
  printf("%s async jobs in %.1f seconds (%s/s)\n",
 | 
			
		||||
         fmt(&fmtbuf[0], events),
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								deps/libuv/test/benchmark-spawn.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								deps/libuv/test/benchmark-spawn.c
									
									
									
									
										vendored
									
									
								
							@@ -58,7 +58,7 @@ static void maybe_spawn(void) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void process_close_cb(uv_handle_t* handle) {
 | 
			
		||||
  ASSERT(process_open == 1);
 | 
			
		||||
  ASSERT_EQ(1, process_open);
 | 
			
		||||
  process_open = 0;
 | 
			
		||||
  maybe_spawn();
 | 
			
		||||
}
 | 
			
		||||
@@ -67,8 +67,8 @@ static void process_close_cb(uv_handle_t* handle) {
 | 
			
		||||
static void exit_cb(uv_process_t* process,
 | 
			
		||||
                    int64_t exit_status,
 | 
			
		||||
                    int term_signal) {
 | 
			
		||||
  ASSERT(exit_status == 42);
 | 
			
		||||
  ASSERT(term_signal == 0);
 | 
			
		||||
  ASSERT_EQ(42, exit_status);
 | 
			
		||||
  ASSERT_OK(term_signal);
 | 
			
		||||
  uv_close((uv_handle_t*)process, process_close_cb);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -82,7 +82,7 @@ static void on_alloc(uv_handle_t* handle,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void pipe_close_cb(uv_handle_t* pipe) {
 | 
			
		||||
  ASSERT(pipe_open == 1);
 | 
			
		||||
  ASSERT_EQ(1, pipe_open);
 | 
			
		||||
  pipe_open = 0;
 | 
			
		||||
  maybe_spawn();
 | 
			
		||||
}
 | 
			
		||||
@@ -90,7 +90,7 @@ static void pipe_close_cb(uv_handle_t* pipe) {
 | 
			
		||||
 | 
			
		||||
static void on_read(uv_stream_t* pipe, ssize_t nread, const uv_buf_t* buf) {
 | 
			
		||||
  if (nread > 0) {
 | 
			
		||||
    ASSERT(pipe_open == 1);
 | 
			
		||||
    ASSERT_EQ(1, pipe_open);
 | 
			
		||||
    output_used += nread;
 | 
			
		||||
  } else if (nread < 0) {
 | 
			
		||||
    if (nread == UV_EOF) {
 | 
			
		||||
@@ -104,8 +104,8 @@ static void spawn(void) {
 | 
			
		||||
  uv_stdio_container_t stdio[2];
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(process_open == 0);
 | 
			
		||||
  ASSERT(pipe_open == 0);
 | 
			
		||||
  ASSERT_OK(process_open);
 | 
			
		||||
  ASSERT_OK(pipe_open);
 | 
			
		||||
 | 
			
		||||
  args[0] = exepath;
 | 
			
		||||
  args[1] = "spawn_helper";
 | 
			
		||||
@@ -123,14 +123,14 @@ static void spawn(void) {
 | 
			
		||||
  options.stdio[1].data.stream = (uv_stream_t*)&out;
 | 
			
		||||
 | 
			
		||||
  r = uv_spawn(loop, &process, &options);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  process_open = 1;
 | 
			
		||||
  pipe_open = 1;
 | 
			
		||||
  output_used = 0;
 | 
			
		||||
 | 
			
		||||
  r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -141,7 +141,7 @@ BENCHMARK_IMPL(spawn) {
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
 | 
			
		||||
  r = uv_exepath(exepath, &exepath_size);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  exepath[exepath_size] = '\0';
 | 
			
		||||
 | 
			
		||||
  uv_update_time(loop);
 | 
			
		||||
@@ -150,7 +150,7 @@ BENCHMARK_IMPL(spawn) {
 | 
			
		||||
  spawn();
 | 
			
		||||
 | 
			
		||||
  r = uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_update_time(loop);
 | 
			
		||||
  end_time = uv_now(loop);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								deps/libuv/test/benchmark-tcp-write-batch.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								deps/libuv/test/benchmark-tcp-write-batch.c
									
									
									
									
										vendored
									
									
								
							@@ -55,16 +55,16 @@ static void connect_cb(uv_connect_t* req, int status) {
 | 
			
		||||
  int i;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(req->handle == (uv_stream_t*)&tcp_client);
 | 
			
		||||
  ASSERT_PTR_EQ(req->handle, (uv_stream_t*)&tcp_client);
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < NUM_WRITE_REQS; i++) {
 | 
			
		||||
    w = &write_reqs[i];
 | 
			
		||||
    r = uv_write(&w->req, req->handle, &w->buf, 1, write_cb);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  r = uv_shutdown(&shutdown_req, req->handle, shutdown_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  connect_cb_called++;
 | 
			
		||||
}
 | 
			
		||||
@@ -72,14 +72,14 @@ static void connect_cb(uv_connect_t* req, int status) {
 | 
			
		||||
 | 
			
		||||
static void write_cb(uv_write_t* req, int status) {
 | 
			
		||||
  ASSERT_NOT_NULL(req);
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  write_cb_called++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void shutdown_cb(uv_shutdown_t* req, int status) {
 | 
			
		||||
  ASSERT(req->handle == (uv_stream_t*)&tcp_client);
 | 
			
		||||
  ASSERT(req->handle->write_queue_size == 0);
 | 
			
		||||
  ASSERT_PTR_EQ(req->handle, (uv_stream_t*)&tcp_client);
 | 
			
		||||
  ASSERT_OK(req->handle->write_queue_size);
 | 
			
		||||
 | 
			
		||||
  uv_close((uv_handle_t*)req->handle, close_cb);
 | 
			
		||||
  free(write_reqs);
 | 
			
		||||
@@ -89,7 +89,7 @@ static void shutdown_cb(uv_shutdown_t* req, int status) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void close_cb(uv_handle_t* handle) {
 | 
			
		||||
  ASSERT(handle == (uv_handle_t*)&tcp_client);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, (uv_handle_t*)&tcp_client);
 | 
			
		||||
  close_cb_called++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -112,28 +112,28 @@ BENCHMARK_IMPL(tcp_write_batch) {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_init(loop, &tcp_client);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_connect(&connect_req,
 | 
			
		||||
                     &tcp_client,
 | 
			
		||||
                     (const struct sockaddr*) &addr,
 | 
			
		||||
                     connect_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  start = uv_hrtime();
 | 
			
		||||
 | 
			
		||||
  r = uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  stop = uv_hrtime();
 | 
			
		||||
 | 
			
		||||
  ASSERT(connect_cb_called == 1);
 | 
			
		||||
  ASSERT(write_cb_called == NUM_WRITE_REQS);
 | 
			
		||||
  ASSERT(shutdown_cb_called == 1);
 | 
			
		||||
  ASSERT(close_cb_called == 1);
 | 
			
		||||
  ASSERT_EQ(1, connect_cb_called);
 | 
			
		||||
  ASSERT_EQ(write_cb_called, NUM_WRITE_REQS);
 | 
			
		||||
  ASSERT_EQ(1, shutdown_cb_called);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  printf("%ld write requests in %.2fs.\n",
 | 
			
		||||
         (long)NUM_WRITE_REQS,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								deps/libuv/test/benchmark-thread.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								deps/libuv/test/benchmark-thread.c
									
									
									
									
										vendored
									
									
								
							@@ -31,7 +31,7 @@ static volatile int num_threads;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void thread_entry(void* arg) {
 | 
			
		||||
  ASSERT(arg == (void *) 42);
 | 
			
		||||
  ASSERT_PTR_EQ(arg, (void *) 42);
 | 
			
		||||
  num_threads++;
 | 
			
		||||
  /* FIXME write barrier? */
 | 
			
		||||
}
 | 
			
		||||
@@ -47,15 +47,15 @@ BENCHMARK_IMPL(thread_create) {
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < NUM_THREADS; i++) {
 | 
			
		||||
    r = uv_thread_create(&tid, thread_entry, (void *) 42);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
    r = uv_thread_join(&tid);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  duration = (uv_hrtime() - start_time) / 1e9;
 | 
			
		||||
 | 
			
		||||
  ASSERT(num_threads == NUM_THREADS);
 | 
			
		||||
  ASSERT_EQ(num_threads, NUM_THREADS);
 | 
			
		||||
 | 
			
		||||
  printf("%d threads created in %.2f seconds (%.0f/s)\n",
 | 
			
		||||
      NUM_THREADS, duration, NUM_THREADS / duration);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										60
									
								
								deps/libuv/test/benchmark-udp-pummel.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										60
									
								
								deps/libuv/test/benchmark-udp-pummel.c
									
									
									
									
										vendored
									
									
								
							@@ -63,7 +63,7 @@ static void alloc_cb(uv_handle_t* handle,
 | 
			
		||||
                     size_t suggested_size,
 | 
			
		||||
                     uv_buf_t* buf) {
 | 
			
		||||
  static char slab[65536];
 | 
			
		||||
  ASSERT(suggested_size <= sizeof(slab));
 | 
			
		||||
  ASSERT_LE(suggested_size, sizeof(slab));
 | 
			
		||||
  buf->base = slab;
 | 
			
		||||
  buf->len = sizeof(slab);
 | 
			
		||||
}
 | 
			
		||||
@@ -75,7 +75,7 @@ static void send_cb(uv_udp_send_t* req, int status) {
 | 
			
		||||
  ASSERT_NOT_NULL(req);
 | 
			
		||||
 | 
			
		||||
  if (status != 0) {
 | 
			
		||||
    ASSERT(status == UV_ECANCELED);
 | 
			
		||||
    ASSERT_EQ(status, UV_ECANCELED);
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -83,7 +83,7 @@ static void send_cb(uv_udp_send_t* req, int status) {
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  s = container_of(req, struct sender_state, send_req);
 | 
			
		||||
  ASSERT(req->handle == &s->udp_handle);
 | 
			
		||||
  ASSERT_PTR_EQ(req->handle, &s->udp_handle);
 | 
			
		||||
 | 
			
		||||
  if (timed)
 | 
			
		||||
    goto send;
 | 
			
		||||
@@ -96,12 +96,12 @@ static void send_cb(uv_udp_send_t* req, int status) {
 | 
			
		||||
  packet_counter--;
 | 
			
		||||
 | 
			
		||||
send:
 | 
			
		||||
  ASSERT(0 == uv_udp_send(&s->send_req,
 | 
			
		||||
                          &s->udp_handle,
 | 
			
		||||
                          bufs,
 | 
			
		||||
                          ARRAY_SIZE(bufs),
 | 
			
		||||
                          (const struct sockaddr*) &s->addr,
 | 
			
		||||
                          send_cb));
 | 
			
		||||
  ASSERT_OK(uv_udp_send(&s->send_req,
 | 
			
		||||
                        &s->udp_handle,
 | 
			
		||||
                        bufs,
 | 
			
		||||
                        ARRAY_SIZE(bufs),
 | 
			
		||||
                        (const struct sockaddr*) &s->addr,
 | 
			
		||||
                        send_cb));
 | 
			
		||||
  send_cb_called++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -115,11 +115,11 @@ static void recv_cb(uv_udp_t* handle,
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (nread < 0) {
 | 
			
		||||
    ASSERT(nread == UV_ECANCELED);
 | 
			
		||||
    ASSERT_EQ(nread, UV_ECANCELED);
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ASSERT(addr->sa_family == AF_INET);
 | 
			
		||||
  ASSERT_EQ(addr->sa_family, AF_INET);
 | 
			
		||||
  ASSERT(!memcmp(buf->base, EXPECTED, nread));
 | 
			
		||||
 | 
			
		||||
  recv_cb_called++;
 | 
			
		||||
@@ -153,8 +153,8 @@ static int pummel(unsigned int n_senders,
 | 
			
		||||
  uv_loop_t* loop;
 | 
			
		||||
  unsigned int i;
 | 
			
		||||
 | 
			
		||||
  ASSERT(n_senders <= ARRAY_SIZE(senders));
 | 
			
		||||
  ASSERT(n_receivers <= ARRAY_SIZE(receivers));
 | 
			
		||||
  ASSERT_LE(n_senders, ARRAY_SIZE(senders));
 | 
			
		||||
  ASSERT_LE(n_receivers, ARRAY_SIZE(receivers));
 | 
			
		||||
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
 | 
			
		||||
@@ -162,8 +162,8 @@ static int pummel(unsigned int n_senders,
 | 
			
		||||
  n_receivers_ = n_receivers;
 | 
			
		||||
 | 
			
		||||
  if (timeout) {
 | 
			
		||||
    ASSERT(0 == uv_timer_init(loop, &timer_handle));
 | 
			
		||||
    ASSERT(0 == uv_timer_start(&timer_handle, timeout_cb, timeout, 0));
 | 
			
		||||
    ASSERT_OK(uv_timer_init(loop, &timer_handle));
 | 
			
		||||
    ASSERT_OK(uv_timer_start(&timer_handle, timeout_cb, timeout, 0));
 | 
			
		||||
    /* Timer should not keep loop alive. */
 | 
			
		||||
    uv_unref((uv_handle_t*)&timer_handle);
 | 
			
		||||
    timed = 1;
 | 
			
		||||
@@ -172,10 +172,10 @@ static int pummel(unsigned int n_senders,
 | 
			
		||||
  for (i = 0; i < n_receivers; i++) {
 | 
			
		||||
    struct receiver_state* s = receivers + i;
 | 
			
		||||
    struct sockaddr_in addr;
 | 
			
		||||
    ASSERT(0 == uv_ip4_addr("0.0.0.0", BASE_PORT + i, &addr));
 | 
			
		||||
    ASSERT(0 == uv_udp_init(loop, &s->udp_handle));
 | 
			
		||||
    ASSERT(0 == uv_udp_bind(&s->udp_handle, (const struct sockaddr*) &addr, 0));
 | 
			
		||||
    ASSERT(0 == uv_udp_recv_start(&s->udp_handle, alloc_cb, recv_cb));
 | 
			
		||||
    ASSERT_OK(uv_ip4_addr("0.0.0.0", BASE_PORT + i, &addr));
 | 
			
		||||
    ASSERT_OK(uv_udp_init(loop, &s->udp_handle));
 | 
			
		||||
    ASSERT_OK(uv_udp_bind(&s->udp_handle, (const struct sockaddr*) &addr, 0));
 | 
			
		||||
    ASSERT_OK(uv_udp_recv_start(&s->udp_handle, alloc_cb, recv_cb));
 | 
			
		||||
    uv_unref((uv_handle_t*)&s->udp_handle);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -187,20 +187,20 @@ static int pummel(unsigned int n_senders,
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n_senders; i++) {
 | 
			
		||||
    struct sender_state* s = senders + i;
 | 
			
		||||
    ASSERT(0 == uv_ip4_addr("127.0.0.1",
 | 
			
		||||
                            BASE_PORT + (i % n_receivers),
 | 
			
		||||
                            &s->addr));
 | 
			
		||||
    ASSERT(0 == uv_udp_init(loop, &s->udp_handle));
 | 
			
		||||
    ASSERT(0 == uv_udp_send(&s->send_req,
 | 
			
		||||
                            &s->udp_handle,
 | 
			
		||||
                            bufs,
 | 
			
		||||
                            ARRAY_SIZE(bufs),
 | 
			
		||||
                            (const struct sockaddr*) &s->addr,
 | 
			
		||||
                            send_cb));
 | 
			
		||||
    ASSERT_OK(uv_ip4_addr("127.0.0.1",
 | 
			
		||||
                          BASE_PORT + (i % n_receivers),
 | 
			
		||||
                          &s->addr));
 | 
			
		||||
    ASSERT_OK(uv_udp_init(loop, &s->udp_handle));
 | 
			
		||||
    ASSERT_OK(uv_udp_send(&s->send_req,
 | 
			
		||||
                          &s->udp_handle,
 | 
			
		||||
                          bufs,
 | 
			
		||||
                          ARRAY_SIZE(bufs),
 | 
			
		||||
                          (const struct sockaddr*) &s->addr,
 | 
			
		||||
                          send_cb));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  duration = uv_hrtime();
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  duration = uv_hrtime() - duration;
 | 
			
		||||
  /* convert from nanoseconds to milliseconds */
 | 
			
		||||
  duration = duration / (uint64_t) 1e6;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								deps/libuv/test/blackhole-server.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								deps/libuv/test/blackhole-server.c
									
									
									
									
										vendored
									
									
								
							@@ -43,20 +43,20 @@ static void connection_cb(uv_stream_t* stream, int status) {
 | 
			
		||||
  conn_rec* conn;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT(stream == (uv_stream_t*)&tcp_server);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  ASSERT_PTR_EQ(stream, (uv_stream_t*)&tcp_server);
 | 
			
		||||
 | 
			
		||||
  conn = malloc(sizeof *conn);
 | 
			
		||||
  ASSERT_NOT_NULL(conn);
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_init(stream->loop, &conn->handle);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_accept(stream, (uv_stream_t*)&conn->handle);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_read_start((uv_stream_t*)&conn->handle, alloc_cb, read_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -76,12 +76,12 @@ static void read_cb(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) {
 | 
			
		||||
  if (nread >= 0)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  ASSERT(nread == UV_EOF);
 | 
			
		||||
  ASSERT_EQ(nread, UV_EOF);
 | 
			
		||||
 | 
			
		||||
  conn = container_of(stream, conn_rec, handle);
 | 
			
		||||
 | 
			
		||||
  r = uv_shutdown(&conn->shutdown_req, stream, shutdown_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -103,16 +103,16 @@ HELPER_IMPL(tcp4_blackhole_server) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_init(loop, &tcp_server);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_listen((uv_stream_t*)&tcp_server, 128, connection_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  notify_parent_process();
 | 
			
		||||
  r = uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								deps/libuv/test/echo-server.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								deps/libuv/test/echo-server.c
									
									
									
									
										vendored
									
									
								
							@@ -65,14 +65,14 @@ static void after_write(uv_write_t* req, int status) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void after_shutdown(uv_shutdown_t* req, int status) {
 | 
			
		||||
  ASSERT_EQ(status, 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  uv_close((uv_handle_t*) req->handle, on_close);
 | 
			
		||||
  free(req);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void on_shutdown(uv_shutdown_t* req, int status) {
 | 
			
		||||
  ASSERT_EQ(status, 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  free(req);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -92,7 +92,7 @@ static void after_read(uv_stream_t* handle,
 | 
			
		||||
    free(buf->base);
 | 
			
		||||
    sreq = malloc(sizeof* sreq);
 | 
			
		||||
    if (uv_is_writable(handle)) {
 | 
			
		||||
      ASSERT_EQ(0, uv_shutdown(sreq, handle, after_shutdown));
 | 
			
		||||
      ASSERT_OK(uv_shutdown(sreq, handle, after_shutdown));
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
@@ -118,7 +118,7 @@ static void after_read(uv_stream_t* handle,
 | 
			
		||||
        if (i + 2 < nread && buf->base[i + 2] == 'H')
 | 
			
		||||
          reset = 1;
 | 
			
		||||
        if (reset && handle->type == UV_TCP)
 | 
			
		||||
          ASSERT_EQ(0, uv_tcp_close_reset((uv_tcp_t*) handle, on_close));
 | 
			
		||||
          ASSERT_OK(uv_tcp_close_reset((uv_tcp_t*) handle, on_close));
 | 
			
		||||
        else if (shutdown)
 | 
			
		||||
          break;
 | 
			
		||||
        else
 | 
			
		||||
@@ -141,7 +141,7 @@ static void after_read(uv_stream_t* handle,
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (shutdown)
 | 
			
		||||
    ASSERT_EQ(0, uv_shutdown(malloc(sizeof* sreq), handle, on_shutdown));
 | 
			
		||||
    ASSERT_OK(uv_shutdown(malloc(sizeof* sreq), handle, on_shutdown));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -173,21 +173,21 @@ static void on_connection(uv_stream_t* server, int status) {
 | 
			
		||||
  if (status != 0) {
 | 
			
		||||
    fprintf(stderr, "Connect error %s\n", uv_err_name(status));
 | 
			
		||||
  }
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
 | 
			
		||||
  switch (serverType) {
 | 
			
		||||
  case TCP:
 | 
			
		||||
    stream = malloc(sizeof(uv_tcp_t));
 | 
			
		||||
    ASSERT_NOT_NULL(stream);
 | 
			
		||||
    r = uv_tcp_init(loop, (uv_tcp_t*)stream);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  case PIPE:
 | 
			
		||||
    stream = malloc(sizeof(uv_pipe_t));
 | 
			
		||||
    ASSERT_NOT_NULL(stream);
 | 
			
		||||
    r = uv_pipe_init(loop, (uv_pipe_t*)stream, 0);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  default:
 | 
			
		||||
@@ -199,15 +199,15 @@ static void on_connection(uv_stream_t* server, int status) {
 | 
			
		||||
  stream->data = server;
 | 
			
		||||
 | 
			
		||||
  r = uv_accept(server, stream);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_read_start(stream, echo_alloc, after_read);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void on_server_close(uv_handle_t* handle) {
 | 
			
		||||
  ASSERT(handle == server);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, server);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static uv_udp_send_t* send_alloc(void) {
 | 
			
		||||
@@ -221,7 +221,7 @@ static uv_udp_send_t* send_alloc(void) {
 | 
			
		||||
 | 
			
		||||
static void on_send(uv_udp_send_t* req, int status) {
 | 
			
		||||
  ASSERT_NOT_NULL(req);
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  req->data = send_freelist;
 | 
			
		||||
  send_freelist = req;
 | 
			
		||||
}
 | 
			
		||||
@@ -239,20 +239,20 @@ static void on_recv(uv_udp_t* handle,
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ASSERT(nread > 0);
 | 
			
		||||
  ASSERT(addr->sa_family == AF_INET);
 | 
			
		||||
  ASSERT_GT(nread, 0);
 | 
			
		||||
  ASSERT_EQ(addr->sa_family, AF_INET);
 | 
			
		||||
 | 
			
		||||
  req = send_alloc();
 | 
			
		||||
  ASSERT_NOT_NULL(req);
 | 
			
		||||
  sndbuf = uv_buf_init(rcvbuf->base, nread);
 | 
			
		||||
  ASSERT(0 <= uv_udp_send(req, handle, &sndbuf, 1, addr, on_send));
 | 
			
		||||
  ASSERT_LE(0, uv_udp_send(req, handle, &sndbuf, 1, addr, on_send));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int tcp4_echo_start(int port) {
 | 
			
		||||
  struct sockaddr_in addr;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", port, &addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", port, &addr));
 | 
			
		||||
 | 
			
		||||
  server = (uv_handle_t*)&tcpServer;
 | 
			
		||||
  serverType = TCP;
 | 
			
		||||
@@ -286,7 +286,7 @@ static int tcp6_echo_start(int port) {
 | 
			
		||||
  struct sockaddr_in6 addr6;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip6_addr("::1", port, &addr6));
 | 
			
		||||
  ASSERT_OK(uv_ip6_addr("::1", port, &addr6));
 | 
			
		||||
 | 
			
		||||
  server = (uv_handle_t*)&tcpServer;
 | 
			
		||||
  serverType = TCP;
 | 
			
		||||
@@ -321,7 +321,7 @@ static int udp4_echo_start(int port) {
 | 
			
		||||
  struct sockaddr_in addr;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", port, &addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", port, &addr));
 | 
			
		||||
  server = (uv_handle_t*)&udpServer;
 | 
			
		||||
  serverType = UDP;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										33
									
								
								deps/libuv/test/run-tests.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								deps/libuv/test/run-tests.c
									
									
									
									
										vendored
									
									
								
							@@ -145,7 +145,7 @@ static int maybe_run_test(int argc, char **argv) {
 | 
			
		||||
  if (strcmp(argv[1], "spawn_helper3") == 0) {
 | 
			
		||||
    char buffer[256];
 | 
			
		||||
    notify_parent_process();
 | 
			
		||||
    ASSERT(buffer == fgets(buffer, sizeof(buffer) - 1, stdin));
 | 
			
		||||
    ASSERT_PTR_EQ(buffer, fgets(buffer, sizeof(buffer) - 1, stdin));
 | 
			
		||||
    buffer[sizeof(buffer) - 1] = '\0';
 | 
			
		||||
    fputs(buffer, stdout);
 | 
			
		||||
    return 1;
 | 
			
		||||
@@ -183,10 +183,10 @@ static int maybe_run_test(int argc, char **argv) {
 | 
			
		||||
    notify_parent_process();
 | 
			
		||||
 | 
			
		||||
    r = fprintf(stdout, "hello world\n");
 | 
			
		||||
    ASSERT(r > 0);
 | 
			
		||||
    ASSERT_GT(r, 0);
 | 
			
		||||
 | 
			
		||||
    r = fprintf(stderr, "hello errworld\n");
 | 
			
		||||
    ASSERT(r > 0);
 | 
			
		||||
    ASSERT_GT(r, 0);
 | 
			
		||||
 | 
			
		||||
    return 1;
 | 
			
		||||
  }
 | 
			
		||||
@@ -202,7 +202,7 @@ static int maybe_run_test(int argc, char **argv) {
 | 
			
		||||
    ASSERT_NOT_NULL(test);
 | 
			
		||||
 | 
			
		||||
    r = fprintf(stdout, "%s", test);
 | 
			
		||||
    ASSERT(r > 0);
 | 
			
		||||
    ASSERT_GT(r, 0);
 | 
			
		||||
 | 
			
		||||
    return 1;
 | 
			
		||||
  }
 | 
			
		||||
@@ -216,23 +216,24 @@ static int maybe_run_test(int argc, char **argv) {
 | 
			
		||||
    sCompareObjectHandles pCompareObjectHandles; /* function introduced in Windows 10 */
 | 
			
		||||
#endif
 | 
			
		||||
    notify_parent_process();
 | 
			
		||||
    ASSERT(sizeof(closed_fd) == read(0, &closed_fd, sizeof(closed_fd)));
 | 
			
		||||
    ASSERT(sizeof(open_fd) == read(0, &open_fd, sizeof(open_fd)));
 | 
			
		||||
    ASSERT_EQ(sizeof(closed_fd), read(0, &closed_fd, sizeof(closed_fd)));
 | 
			
		||||
    ASSERT_EQ(sizeof(open_fd), read(0, &open_fd, sizeof(open_fd)));
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
    ASSERT((intptr_t) closed_fd > 0);
 | 
			
		||||
    ASSERT((intptr_t) open_fd > 0);
 | 
			
		||||
    ASSERT(0 != GetHandleInformation(open_fd, &flags));
 | 
			
		||||
    ASSERT_GT((intptr_t) closed_fd, 0);
 | 
			
		||||
    ASSERT_GT((intptr_t) open_fd, 0);
 | 
			
		||||
    ASSERT_NE(0, GetHandleInformation(open_fd, &flags));
 | 
			
		||||
    kernelbase_module = GetModuleHandleA("kernelbase.dll");
 | 
			
		||||
    pCompareObjectHandles = (sCompareObjectHandles)
 | 
			
		||||
        GetProcAddress(kernelbase_module, "CompareObjectHandles");
 | 
			
		||||
    ASSERT(pCompareObjectHandles == NULL || !pCompareObjectHandles(open_fd, closed_fd));
 | 
			
		||||
    ASSERT_NE(pCompareObjectHandles == NULL || \
 | 
			
		||||
              !pCompareObjectHandles(open_fd, closed_fd), 0);
 | 
			
		||||
#else
 | 
			
		||||
    ASSERT(open_fd > 2);
 | 
			
		||||
    ASSERT(closed_fd > 2);
 | 
			
		||||
    ASSERT_GT(open_fd, 2);
 | 
			
		||||
    ASSERT_GT(closed_fd, 2);
 | 
			
		||||
# if defined(__PASE__)  /* On IBMi PASE, write() returns 1 */
 | 
			
		||||
    ASSERT(1 == write(closed_fd, "x", 1));
 | 
			
		||||
    ASSERT_EQ(1, write(closed_fd, "x", 1));
 | 
			
		||||
# else
 | 
			
		||||
    ASSERT(-1 == write(closed_fd, "x", 1));
 | 
			
		||||
    ASSERT_EQ(-1, write(closed_fd, "x", 1));
 | 
			
		||||
# endif  /* !__PASE__ */
 | 
			
		||||
#endif
 | 
			
		||||
    return 1;
 | 
			
		||||
@@ -249,8 +250,8 @@ static int maybe_run_test(int argc, char **argv) {
 | 
			
		||||
    uv_uid_t uid = atoi(argv[2]);
 | 
			
		||||
    uv_gid_t gid = atoi(argv[3]);
 | 
			
		||||
 | 
			
		||||
    ASSERT(uid == getuid());
 | 
			
		||||
    ASSERT(gid == getgid());
 | 
			
		||||
    ASSERT_EQ(uid, getuid());
 | 
			
		||||
    ASSERT_EQ(gid, getgid());
 | 
			
		||||
    notify_parent_process();
 | 
			
		||||
 | 
			
		||||
    return 1;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								deps/libuv/test/runner-win.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								deps/libuv/test/runner-win.c
									
									
									
									
										vendored
									
									
								
							@@ -185,7 +185,7 @@ int process_wait(process_info_t *vec, int n, int timeout) {
 | 
			
		||||
  if (n == 0)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  ASSERT(n <= MAXIMUM_WAIT_OBJECTS);
 | 
			
		||||
  ASSERT_LE(n, MAXIMUM_WAIT_OBJECTS);
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n; i++)
 | 
			
		||||
    handles[i] = vec[i].process;
 | 
			
		||||
@@ -245,7 +245,7 @@ int process_read_last_line(process_info_t *p,
 | 
			
		||||
  DWORD start;
 | 
			
		||||
  OVERLAPPED overlapped;
 | 
			
		||||
 | 
			
		||||
  ASSERT(buffer_len > 0);
 | 
			
		||||
  ASSERT_GT(buffer_len, 0);
 | 
			
		||||
 | 
			
		||||
  size = GetFileSize(p->stdio_out, NULL);
 | 
			
		||||
  if (size == INVALID_FILE_SIZE)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								deps/libuv/test/task.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								deps/libuv/test/task.h
									
									
									
									
										vendored
									
									
								
							@@ -244,13 +244,16 @@ typedef enum {
 | 
			
		||||
#define ASSERT_PTR_NE(a, b) \
 | 
			
		||||
  ASSERT_BASE(a, !=, b, void*, "p")
 | 
			
		||||
 | 
			
		||||
#define ASSERT_PTR_LT(a, b) \
 | 
			
		||||
  ASSERT_BASE(a, <, b, void*, "p")
 | 
			
		||||
 | 
			
		||||
/* This macro cleans up the event loop. This is used to avoid valgrind
 | 
			
		||||
 * warnings about memory being "leaked" by the event loop.
 | 
			
		||||
 */
 | 
			
		||||
#define MAKE_VALGRIND_HAPPY(loop)                   \
 | 
			
		||||
  do {                                              \
 | 
			
		||||
    close_loop(loop);                               \
 | 
			
		||||
    ASSERT(0 == uv_loop_close(loop));               \
 | 
			
		||||
    ASSERT_EQ(0, uv_loop_close(loop));              \
 | 
			
		||||
    uv_library_shutdown();                          \
 | 
			
		||||
  } while (0)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								deps/libuv/test/test-active.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								deps/libuv/test/test-active.c
									
									
									
									
										vendored
									
									
								
							@@ -45,39 +45,39 @@ TEST_IMPL(active) {
 | 
			
		||||
  uv_timer_t timer;
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_init(uv_default_loop(), &timer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  /* uv_is_active() and uv_is_closing() should always return either 0 or 1. */
 | 
			
		||||
  ASSERT(0 == uv_is_active((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT(0 == uv_is_closing((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT_OK(uv_is_active((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT_OK(uv_is_closing((uv_handle_t*) &timer));
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_start(&timer, timer_cb, 1000, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  ASSERT(1 == uv_is_active((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT(0 == uv_is_closing((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT_EQ(1, uv_is_active((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT_OK(uv_is_closing((uv_handle_t*) &timer));
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_stop(&timer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_is_active((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT(0 == uv_is_closing((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT_OK(uv_is_active((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT_OK(uv_is_closing((uv_handle_t*) &timer));
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_start(&timer, timer_cb, 1000, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  ASSERT(1 == uv_is_active((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT(0 == uv_is_closing((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT_EQ(1, uv_is_active((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT_OK(uv_is_closing((uv_handle_t*) &timer));
 | 
			
		||||
 | 
			
		||||
  uv_close((uv_handle_t*) &timer, close_cb);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_is_active((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT(1 == uv_is_closing((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT_OK(uv_is_active((uv_handle_t*) &timer));
 | 
			
		||||
  ASSERT_EQ(1, uv_is_closing((uv_handle_t*) &timer));
 | 
			
		||||
 | 
			
		||||
  r = uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  ASSERT(close_cb_called == 1);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								deps/libuv/test/test-async-null-cb.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								deps/libuv/test/test-async-null-cb.c
									
									
									
									
										vendored
									
									
								
							@@ -36,7 +36,7 @@ static void thread_cb(void* dummy) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void check_cb(uv_check_t* handle) {
 | 
			
		||||
  ASSERT(check_cb_called == 0);
 | 
			
		||||
  ASSERT_OK(check_cb_called);
 | 
			
		||||
  uv_close((uv_handle_t*) &async_handle, NULL);
 | 
			
		||||
  uv_close((uv_handle_t*) &check_handle, NULL);
 | 
			
		||||
  check_cb_called++;
 | 
			
		||||
@@ -52,13 +52,13 @@ TEST_IMPL(async_null_cb) {
 | 
			
		||||
   */
 | 
			
		||||
  memset(&async_handle, 0xff, sizeof(async_handle));
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_async_init(uv_default_loop(), &async_handle, NULL));
 | 
			
		||||
  ASSERT(0 == uv_check_init(uv_default_loop(), &check_handle));
 | 
			
		||||
  ASSERT(0 == uv_check_start(&check_handle, check_cb));
 | 
			
		||||
  ASSERT(0 == uv_thread_create(&thread, thread_cb, NULL));
 | 
			
		||||
  ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT(0 == uv_thread_join(&thread));
 | 
			
		||||
  ASSERT(1 == check_cb_called);
 | 
			
		||||
  ASSERT_OK(uv_async_init(uv_default_loop(), &async_handle, NULL));
 | 
			
		||||
  ASSERT_OK(uv_check_init(uv_default_loop(), &check_handle));
 | 
			
		||||
  ASSERT_OK(uv_check_start(&check_handle, check_cb));
 | 
			
		||||
  ASSERT_OK(uv_thread_create(&thread, thread_cb, NULL));
 | 
			
		||||
  ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_thread_join(&thread));
 | 
			
		||||
  ASSERT_EQ(1, check_cb_called);
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								deps/libuv/test/test-async.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								deps/libuv/test/test-async.c
									
									
									
									
										vendored
									
									
								
							@@ -49,7 +49,7 @@ static void thread_cb(void *arg) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    r = uv_async_send(&async);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
    /* Work around a bug in Valgrind.
 | 
			
		||||
     *
 | 
			
		||||
@@ -78,7 +78,7 @@ static void close_cb(uv_handle_t* handle) {
 | 
			
		||||
static void async_cb(uv_async_t* handle) {
 | 
			
		||||
  int n;
 | 
			
		||||
 | 
			
		||||
  ASSERT(handle == &async);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, &async);
 | 
			
		||||
 | 
			
		||||
  uv_mutex_lock(&mutex);
 | 
			
		||||
  n = ++async_cb_called;
 | 
			
		||||
@@ -94,13 +94,13 @@ static void async_cb(uv_async_t* handle) {
 | 
			
		||||
static void prepare_cb(uv_prepare_t* handle) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(handle == &prepare);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, &prepare);
 | 
			
		||||
 | 
			
		||||
  if (prepare_cb_called++)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  r = uv_thread_create(&thread, thread_cb, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_mutex_unlock(&mutex);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -109,25 +109,25 @@ TEST_IMPL(async) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  r = uv_mutex_init(&mutex);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_mutex_lock(&mutex);
 | 
			
		||||
 | 
			
		||||
  r = uv_prepare_init(uv_default_loop(), &prepare);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_prepare_start(&prepare, prepare_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_async_init(uv_default_loop(), &async, async_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  ASSERT(prepare_cb_called > 0);
 | 
			
		||||
  ASSERT(async_cb_called == 3);
 | 
			
		||||
  ASSERT(close_cb_called == 2);
 | 
			
		||||
  ASSERT_GT(prepare_cb_called, 0);
 | 
			
		||||
  ASSERT_EQ(3, async_cb_called);
 | 
			
		||||
  ASSERT_EQ(2, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_thread_join(&thread));
 | 
			
		||||
  ASSERT_OK(uv_thread_join(&thread));
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								deps/libuv/test/test-barrier.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								deps/libuv/test/test-barrier.c
									
									
									
									
										vendored
									
									
								
							@@ -53,13 +53,13 @@ TEST_IMPL(barrier_1) {
 | 
			
		||||
  memset(&wc, 0, sizeof(wc));
 | 
			
		||||
  wc.niter = 1;
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_barrier_init(&wc.barrier, 2));
 | 
			
		||||
  ASSERT_EQ(0, uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
  ASSERT_OK(uv_barrier_init(&wc.barrier, 2));
 | 
			
		||||
  ASSERT_OK(uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
 | 
			
		||||
  uv_sleep(100);
 | 
			
		||||
  wc.main_barrier_wait_rval = uv_barrier_wait(&wc.barrier);
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_thread_join(&thread));
 | 
			
		||||
  ASSERT_OK(uv_thread_join(&thread));
 | 
			
		||||
  uv_barrier_destroy(&wc.barrier);
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(1, (wc.main_barrier_wait_rval ^ wc.worker_barrier_wait_rval));
 | 
			
		||||
@@ -76,12 +76,12 @@ TEST_IMPL(barrier_2) {
 | 
			
		||||
  wc.delay = 100;
 | 
			
		||||
  wc.niter = 1;
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_barrier_init(&wc.barrier, 2));
 | 
			
		||||
  ASSERT_EQ(0, uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
  ASSERT_OK(uv_barrier_init(&wc.barrier, 2));
 | 
			
		||||
  ASSERT_OK(uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
 | 
			
		||||
  wc.main_barrier_wait_rval = uv_barrier_wait(&wc.barrier);
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_thread_join(&thread));
 | 
			
		||||
  ASSERT_OK(uv_thread_join(&thread));
 | 
			
		||||
  uv_barrier_destroy(&wc.barrier);
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(1, (wc.main_barrier_wait_rval ^ wc.worker_barrier_wait_rval));
 | 
			
		||||
@@ -98,13 +98,13 @@ TEST_IMPL(barrier_3) {
 | 
			
		||||
  memset(&wc, 0, sizeof(wc));
 | 
			
		||||
  wc.niter = 5;
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_barrier_init(&wc.barrier, 2));
 | 
			
		||||
  ASSERT_EQ(0, uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
  ASSERT_OK(uv_barrier_init(&wc.barrier, 2));
 | 
			
		||||
  ASSERT_OK(uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < wc.niter; i++)
 | 
			
		||||
    wc.main_barrier_wait_rval += uv_barrier_wait(&wc.barrier);
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_thread_join(&thread));
 | 
			
		||||
  ASSERT_OK(uv_thread_join(&thread));
 | 
			
		||||
  uv_barrier_destroy(&wc.barrier);
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(wc.niter, wc.main_barrier_wait_rval + wc.worker_barrier_wait_rval);
 | 
			
		||||
@@ -133,10 +133,10 @@ TEST_IMPL(barrier_serial_thread) {
 | 
			
		||||
  uv_barrier_t barrier;
 | 
			
		||||
  unsigned i;
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_barrier_init(&barrier, ARRAY_SIZE(threads) + 1));
 | 
			
		||||
  ASSERT_OK(uv_barrier_init(&barrier, ARRAY_SIZE(threads) + 1));
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < ARRAY_SIZE(threads); ++i)
 | 
			
		||||
    ASSERT_EQ(0, uv_thread_create(&threads[i], serial_worker, &barrier));
 | 
			
		||||
    ASSERT_OK(uv_thread_create(&threads[i], serial_worker, &barrier));
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < 5; i++)
 | 
			
		||||
    uv_barrier_wait(&barrier);
 | 
			
		||||
@@ -144,7 +144,7 @@ TEST_IMPL(barrier_serial_thread) {
 | 
			
		||||
    uv_barrier_destroy(&barrier);
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < ARRAY_SIZE(threads); ++i)
 | 
			
		||||
    ASSERT_EQ(0, uv_thread_join(&threads[i]));
 | 
			
		||||
    ASSERT_OK(uv_thread_join(&threads[i]));
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -153,7 +153,7 @@ TEST_IMPL(barrier_serial_thread) {
 | 
			
		||||
TEST_IMPL(barrier_serial_thread_single) {
 | 
			
		||||
  uv_barrier_t barrier;
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_barrier_init(&barrier, 1));
 | 
			
		||||
  ASSERT_OK(uv_barrier_init(&barrier, 1));
 | 
			
		||||
  ASSERT_LT(0, uv_barrier_wait(&barrier));
 | 
			
		||||
  uv_barrier_destroy(&barrier);
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								deps/libuv/test/test-callback-stack.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								deps/libuv/test/test-callback-stack.c
									
									
									
									
										vendored
									
									
								
							@@ -60,7 +60,7 @@ static void close_cb(uv_handle_t* handle) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void shutdown_cb(uv_shutdown_t* req, int status) {
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  ASSERT(nested == 0 && "shutdown_cb must be called from a fresh stack");
 | 
			
		||||
 | 
			
		||||
  shutdown_cb_called++;
 | 
			
		||||
@@ -77,7 +77,7 @@ static void read_cb(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf) {
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  } else if (nread < 0) {
 | 
			
		||||
    ASSERT(nread == UV_EOF);
 | 
			
		||||
    ASSERT_EQ(nread, UV_EOF);
 | 
			
		||||
 | 
			
		||||
    nested++;
 | 
			
		||||
    uv_close((uv_handle_t*)tcp, close_cb);
 | 
			
		||||
@@ -105,7 +105,7 @@ static void read_cb(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void timer_cb(uv_timer_t* handle) {
 | 
			
		||||
  ASSERT(handle == &timer);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, &timer);
 | 
			
		||||
  ASSERT(nested == 0 && "timer_cb must be called from a fresh stack");
 | 
			
		||||
 | 
			
		||||
  puts("Timeout complete. Now read data...");
 | 
			
		||||
@@ -125,7 +125,7 @@ static void timer_cb(uv_timer_t* handle) {
 | 
			
		||||
static void write_cb(uv_write_t* req, int status) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  ASSERT(nested == 0 && "write_cb must be called from a fresh stack");
 | 
			
		||||
 | 
			
		||||
  puts("Data written. 500ms timeout...");
 | 
			
		||||
@@ -136,9 +136,9 @@ static void write_cb(uv_write_t* req, int status) {
 | 
			
		||||
   * for the backend to use dirty stack for calling read_cb. */
 | 
			
		||||
  nested++;
 | 
			
		||||
  r = uv_timer_init(uv_default_loop(), &timer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_timer_start(&timer, timer_cb, 500, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  nested--;
 | 
			
		||||
 | 
			
		||||
  write_cb_called++;
 | 
			
		||||
@@ -150,7 +150,7 @@ static void connect_cb(uv_connect_t* req, int status) {
 | 
			
		||||
 | 
			
		||||
  puts("Connected. Write some data to echo server...");
 | 
			
		||||
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  ASSERT(nested == 0 && "connect_cb must be called from a fresh stack");
 | 
			
		||||
 | 
			
		||||
  nested++;
 | 
			
		||||
@@ -171,7 +171,7 @@ static void connect_cb(uv_connect_t* req, int status) {
 | 
			
		||||
TEST_IMPL(callback_stack) {
 | 
			
		||||
  struct sockaddr_in addr;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
 | 
			
		||||
  if (uv_tcp_init(uv_default_loop(), &client)) {
 | 
			
		||||
    FATAL("uv_tcp_init failed");
 | 
			
		||||
@@ -191,13 +191,18 @@ TEST_IMPL(callback_stack) {
 | 
			
		||||
 | 
			
		||||
  uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(nested == 0);
 | 
			
		||||
  ASSERT(connect_cb_called == 1 && "connect_cb must be called exactly once");
 | 
			
		||||
  ASSERT(write_cb_called == 1 && "write_cb must be called exactly once");
 | 
			
		||||
  ASSERT(timer_cb_called == 1 && "timer_cb must be called exactly once");
 | 
			
		||||
  ASSERT(bytes_received == sizeof MESSAGE);
 | 
			
		||||
  ASSERT(shutdown_cb_called == 1 && "shutdown_cb must be called exactly once");
 | 
			
		||||
  ASSERT(close_cb_called == 2 && "close_cb must be called exactly twice");
 | 
			
		||||
  ASSERT_OK(nested);
 | 
			
		||||
  ASSERT_NE(connect_cb_called == 1 && \
 | 
			
		||||
            "connect_cb must be called exactly once", 0);
 | 
			
		||||
  ASSERT_NE(write_cb_called == 1 && "write_cb must be called exactly once",
 | 
			
		||||
            0);
 | 
			
		||||
  ASSERT_NE(timer_cb_called == 1 && "timer_cb must be called exactly once",
 | 
			
		||||
            0);
 | 
			
		||||
  ASSERT_EQ(bytes_received, sizeof MESSAGE);
 | 
			
		||||
  ASSERT_NE(shutdown_cb_called == 1 && \
 | 
			
		||||
            "shutdown_cb must be called exactly once", 0);
 | 
			
		||||
  ASSERT_NE(close_cb_called == 2 && "close_cb must be called exactly twice",
 | 
			
		||||
            0);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								deps/libuv/test/test-close-fd.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								deps/libuv/test/test-close-fd.c
									
									
									
									
										vendored
									
									
								
							@@ -36,11 +36,11 @@ static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) {
 | 
			
		||||
static void read_cb(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf) {
 | 
			
		||||
  switch (++read_cb_called) {
 | 
			
		||||
  case 1:
 | 
			
		||||
    ASSERT(nread == 1);
 | 
			
		||||
    ASSERT_EQ(1, nread);
 | 
			
		||||
    uv_read_stop(handle);
 | 
			
		||||
    break;
 | 
			
		||||
  case 2:
 | 
			
		||||
    ASSERT(nread == UV_EOF);
 | 
			
		||||
    ASSERT_EQ(nread, UV_EOF);
 | 
			
		||||
    uv_close((uv_handle_t *) handle, NULL);
 | 
			
		||||
    break;
 | 
			
		||||
  default:
 | 
			
		||||
@@ -55,29 +55,29 @@ TEST_IMPL(close_fd) {
 | 
			
		||||
  uv_file fd[2];
 | 
			
		||||
  bufs[0] = uv_buf_init("", 1);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_pipe(fd, 0, 0));
 | 
			
		||||
  ASSERT(0 == uv_pipe_init(uv_default_loop(), &pipe_handle, 0));
 | 
			
		||||
  ASSERT(0 == uv_pipe_open(&pipe_handle, fd[0]));
 | 
			
		||||
  ASSERT_OK(uv_pipe(fd, 0, 0));
 | 
			
		||||
  ASSERT_OK(uv_pipe_init(uv_default_loop(), &pipe_handle, 0));
 | 
			
		||||
  ASSERT_OK(uv_pipe_open(&pipe_handle, fd[0]));
 | 
			
		||||
  /* uv_pipe_open() takes ownership of the file descriptor. */
 | 
			
		||||
  fd[0] = -1;
 | 
			
		||||
 | 
			
		||||
  ASSERT(1 == uv_fs_write(NULL, &req, fd[1], bufs, 1, -1, NULL));
 | 
			
		||||
  ASSERT(1 == req.result);
 | 
			
		||||
  ASSERT_EQ(1, uv_fs_write(NULL, &req, fd[1], bufs, 1, -1, NULL));
 | 
			
		||||
  ASSERT_EQ(1, req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
  ASSERT(0 == _close(fd[1]));
 | 
			
		||||
  ASSERT_OK(_close(fd[1]));
 | 
			
		||||
#else
 | 
			
		||||
  ASSERT(0 == close(fd[1]));
 | 
			
		||||
  ASSERT_OK(close(fd[1]));
 | 
			
		||||
#endif
 | 
			
		||||
  fd[1] = -1;
 | 
			
		||||
  ASSERT(0 == uv_read_start((uv_stream_t *) &pipe_handle, alloc_cb, read_cb));
 | 
			
		||||
  ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT(1 == read_cb_called);
 | 
			
		||||
  ASSERT(0 == uv_is_active((const uv_handle_t *) &pipe_handle));
 | 
			
		||||
  ASSERT(0 == uv_read_start((uv_stream_t *) &pipe_handle, alloc_cb, read_cb));
 | 
			
		||||
  ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT(2 == read_cb_called);
 | 
			
		||||
  ASSERT(0 != uv_is_closing((const uv_handle_t *) &pipe_handle));
 | 
			
		||||
  ASSERT_OK(uv_read_start((uv_stream_t *) &pipe_handle, alloc_cb, read_cb));
 | 
			
		||||
  ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_EQ(1, read_cb_called);
 | 
			
		||||
  ASSERT_OK(uv_is_active((const uv_handle_t *) &pipe_handle));
 | 
			
		||||
  ASSERT_OK(uv_read_start((uv_stream_t *) &pipe_handle, alloc_cb, read_cb));
 | 
			
		||||
  ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_EQ(2, read_cb_called);
 | 
			
		||||
  ASSERT_NE(0, uv_is_closing((const uv_handle_t *) &pipe_handle));
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								deps/libuv/test/test-close-order.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								deps/libuv/test/test-close-order.c
									
									
									
									
										vendored
									
									
								
							@@ -39,9 +39,9 @@ static void close_cb(uv_handle_t* handle) {
 | 
			
		||||
 | 
			
		||||
/* check_cb should run before any close_cb */
 | 
			
		||||
static void check_cb(uv_check_t* handle) {
 | 
			
		||||
  ASSERT(check_cb_called == 0);
 | 
			
		||||
  ASSERT(timer_cb_called == 1);
 | 
			
		||||
  ASSERT(close_cb_called == 0);
 | 
			
		||||
  ASSERT_OK(check_cb_called);
 | 
			
		||||
  ASSERT_EQ(1, timer_cb_called);
 | 
			
		||||
  ASSERT_OK(close_cb_called);
 | 
			
		||||
  uv_close((uv_handle_t*) handle, close_cb);
 | 
			
		||||
  uv_close((uv_handle_t*) &timer_handle2, close_cb);
 | 
			
		||||
  check_cb_called++;
 | 
			
		||||
@@ -65,15 +65,15 @@ TEST_IMPL(close_order) {
 | 
			
		||||
  uv_timer_init(loop, &timer_handle2);
 | 
			
		||||
  uv_timer_start(&timer_handle2, timer_cb, 100000, 0);
 | 
			
		||||
 | 
			
		||||
  ASSERT(check_cb_called == 0);
 | 
			
		||||
  ASSERT(close_cb_called == 0);
 | 
			
		||||
  ASSERT(timer_cb_called == 0);
 | 
			
		||||
  ASSERT_OK(check_cb_called);
 | 
			
		||||
  ASSERT_OK(close_cb_called);
 | 
			
		||||
  ASSERT_OK(timer_cb_called);
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(check_cb_called == 1);
 | 
			
		||||
  ASSERT(close_cb_called == 3);
 | 
			
		||||
  ASSERT(timer_cb_called == 1);
 | 
			
		||||
  ASSERT_EQ(1, check_cb_called);
 | 
			
		||||
  ASSERT_EQ(3, close_cb_called);
 | 
			
		||||
  ASSERT_EQ(1, timer_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								deps/libuv/test/test-condvar.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								deps/libuv/test/test-condvar.c
									
									
									
									
										vendored
									
									
								
							@@ -55,10 +55,10 @@ void worker_config_init(worker_config* wc,
 | 
			
		||||
  wc->use_broadcast = use_broadcast;
 | 
			
		||||
 | 
			
		||||
  /* Init. */
 | 
			
		||||
  ASSERT(0 == uv_sem_init(&wc->sem_waiting, 0));
 | 
			
		||||
  ASSERT(0 == uv_sem_init(&wc->sem_signaled, 0));
 | 
			
		||||
  ASSERT(0 == uv_cond_init(&wc->cond));
 | 
			
		||||
  ASSERT(0 == uv_mutex_init(&wc->mutex));
 | 
			
		||||
  ASSERT_OK(uv_sem_init(&wc->sem_waiting, 0));
 | 
			
		||||
  ASSERT_OK(uv_sem_init(&wc->sem_signaled, 0));
 | 
			
		||||
  ASSERT_OK(uv_cond_init(&wc->cond));
 | 
			
		||||
  ASSERT_OK(uv_mutex_init(&wc->mutex));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void worker_config_destroy(worker_config* wc) {
 | 
			
		||||
@@ -87,7 +87,7 @@ static void condvar_signal(worker_config* c, int* flag) {
 | 
			
		||||
  uv_mutex_lock(&c->mutex);
 | 
			
		||||
 | 
			
		||||
  /* Help waiter differentiate between spurious and legitimate wakeup. */
 | 
			
		||||
  ASSERT(*flag == 0);
 | 
			
		||||
  ASSERT_OK(*flag);
 | 
			
		||||
  *flag = 1;
 | 
			
		||||
 | 
			
		||||
  if (c->use_broadcast)
 | 
			
		||||
@@ -113,7 +113,7 @@ static int condvar_wait(worker_config* c, const int* flag) {
 | 
			
		||||
  do {
 | 
			
		||||
    uv_cond_wait(&c->cond, &c->mutex);
 | 
			
		||||
  } while (*flag == 0);
 | 
			
		||||
  ASSERT(*flag == 1);
 | 
			
		||||
  ASSERT_EQ(1, *flag);
 | 
			
		||||
 | 
			
		||||
  uv_mutex_unlock(&c->mutex);
 | 
			
		||||
 | 
			
		||||
@@ -130,13 +130,13 @@ TEST_IMPL(condvar_1) {
 | 
			
		||||
 | 
			
		||||
  /* Helper signal-then-wait. */
 | 
			
		||||
  worker_config_init(&wc, 0, condvar_signal, condvar_wait);
 | 
			
		||||
  ASSERT(0 == uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
  ASSERT_OK(uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
 | 
			
		||||
  /* We wait-then-signal. */
 | 
			
		||||
  ASSERT(0 == wc.wait_cond(&wc, &wc.posted_1));
 | 
			
		||||
  ASSERT_OK(wc.wait_cond(&wc, &wc.posted_1));
 | 
			
		||||
  wc.signal_cond(&wc, &wc.posted_2);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_thread_join(&thread));
 | 
			
		||||
  ASSERT_OK(uv_thread_join(&thread));
 | 
			
		||||
  worker_config_destroy(&wc);
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -149,13 +149,13 @@ TEST_IMPL(condvar_2) {
 | 
			
		||||
 | 
			
		||||
  /* Helper to signal-then-wait. */
 | 
			
		||||
  worker_config_init(&wc, 1, condvar_signal, condvar_wait);
 | 
			
		||||
  ASSERT(0 == uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
  ASSERT_OK(uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
 | 
			
		||||
  /* We wait-then-signal. */
 | 
			
		||||
  ASSERT(0 == wc.wait_cond(&wc, &wc.posted_1));
 | 
			
		||||
  ASSERT_OK(wc.wait_cond(&wc, &wc.posted_1));
 | 
			
		||||
  wc.signal_cond(&wc, &wc.posted_2);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_thread_join(&thread));
 | 
			
		||||
  ASSERT_OK(uv_thread_join(&thread));
 | 
			
		||||
  worker_config_destroy(&wc);
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -176,9 +176,9 @@ static int condvar_timedwait(worker_config* c, const int* flag) {
 | 
			
		||||
  /* Wait until I get a non-spurious signal. */
 | 
			
		||||
  do {
 | 
			
		||||
    r = uv_cond_timedwait(&c->cond, &c->mutex, (uint64_t)(1 * 1e9)); /* 1 s */
 | 
			
		||||
    ASSERT(r == 0); /* Should not time out. */
 | 
			
		||||
    ASSERT_OK(r); /* Should not time out. */
 | 
			
		||||
  } while (*flag == 0);
 | 
			
		||||
  ASSERT(*flag == 1);
 | 
			
		||||
  ASSERT_EQ(1, *flag);
 | 
			
		||||
 | 
			
		||||
  uv_mutex_unlock(&c->mutex);
 | 
			
		||||
 | 
			
		||||
@@ -194,13 +194,13 @@ TEST_IMPL(condvar_3) {
 | 
			
		||||
 | 
			
		||||
  /* Helper to signal-then-wait. */
 | 
			
		||||
  worker_config_init(&wc, 0, condvar_signal, condvar_timedwait);
 | 
			
		||||
  ASSERT(0 == uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
  ASSERT_OK(uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
 | 
			
		||||
  /* We wait-then-signal. */
 | 
			
		||||
  wc.wait_cond(&wc, &wc.posted_1);
 | 
			
		||||
  wc.signal_cond(&wc, &wc.posted_2);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_thread_join(&thread));
 | 
			
		||||
  ASSERT_OK(uv_thread_join(&thread));
 | 
			
		||||
  worker_config_destroy(&wc);
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -213,13 +213,13 @@ TEST_IMPL(condvar_4) {
 | 
			
		||||
 | 
			
		||||
  /* Helper to signal-then-wait. */
 | 
			
		||||
  worker_config_init(&wc, 1, condvar_signal, condvar_timedwait);
 | 
			
		||||
  ASSERT(0 == uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
  ASSERT_OK(uv_thread_create(&thread, worker, &wc));
 | 
			
		||||
 | 
			
		||||
  /* We wait-then-signal. */
 | 
			
		||||
  wc.wait_cond(&wc, &wc.posted_1);
 | 
			
		||||
  wc.signal_cond(&wc, &wc.posted_2);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_thread_join(&thread));
 | 
			
		||||
  ASSERT_OK(uv_thread_join(&thread));
 | 
			
		||||
  worker_config_destroy(&wc);
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								deps/libuv/test/test-connect-unspecified.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								deps/libuv/test/test-connect-unspecified.c
									
									
									
									
										vendored
									
									
								
							@@ -23,11 +23,11 @@
 | 
			
		||||
#include "task.h"
 | 
			
		||||
 | 
			
		||||
static void connect_4(uv_connect_t* req, int status) {
 | 
			
		||||
  ASSERT(status != UV_EADDRNOTAVAIL);
 | 
			
		||||
  ASSERT_NE(status, UV_EADDRNOTAVAIL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void connect_6(uv_connect_t* req, int status) {
 | 
			
		||||
  ASSERT(status != UV_EADDRNOTAVAIL);
 | 
			
		||||
  ASSERT_NE(status, UV_EADDRNOTAVAIL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_IMPL(connect_unspecified) {
 | 
			
		||||
@@ -41,23 +41,23 @@ TEST_IMPL(connect_unspecified) {
 | 
			
		||||
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
 | 
			
		||||
  ASSERT(uv_tcp_init(loop, &socket4) == 0);
 | 
			
		||||
  ASSERT(uv_ip4_addr("0.0.0.0", TEST_PORT, &addr4) == 0);
 | 
			
		||||
  ASSERT(uv_tcp_connect(&connect4,
 | 
			
		||||
                        &socket4,
 | 
			
		||||
                        (const struct sockaddr*) &addr4,
 | 
			
		||||
                        connect_4) == 0);
 | 
			
		||||
  ASSERT_OK(uv_tcp_init(loop, &socket4));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("0.0.0.0", TEST_PORT, &addr4));
 | 
			
		||||
  ASSERT_OK(uv_tcp_connect(&connect4,
 | 
			
		||||
                           &socket4,
 | 
			
		||||
                           (const struct sockaddr*) &addr4,
 | 
			
		||||
                           connect_4));
 | 
			
		||||
 | 
			
		||||
  if (can_ipv6()) {
 | 
			
		||||
    ASSERT(uv_tcp_init(loop, &socket6) == 0);
 | 
			
		||||
    ASSERT(uv_ip6_addr("::", TEST_PORT, &addr6) == 0);
 | 
			
		||||
    ASSERT(uv_tcp_connect(&connect6,
 | 
			
		||||
                          &socket6,
 | 
			
		||||
                          (const struct sockaddr*) &addr6,
 | 
			
		||||
                          connect_6) == 0);
 | 
			
		||||
    ASSERT_OK(uv_tcp_init(loop, &socket6));
 | 
			
		||||
    ASSERT_OK(uv_ip6_addr("::", TEST_PORT, &addr6));
 | 
			
		||||
    ASSERT_OK(uv_tcp_connect(&connect6,
 | 
			
		||||
                             &socket6,
 | 
			
		||||
                             (const struct sockaddr*) &addr6,
 | 
			
		||||
                             connect_6));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ASSERT(uv_run(loop, UV_RUN_DEFAULT) == 0);
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								deps/libuv/test/test-connection-fail.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								deps/libuv/test/test-connection-fail.c
									
									
									
									
										vendored
									
									
								
							@@ -54,8 +54,8 @@ static void timer_cb(uv_timer_t* handle) {
 | 
			
		||||
   * but libuv hasn't automatically closed the socket. The user must
 | 
			
		||||
   * uv_close the handle manually.
 | 
			
		||||
   */
 | 
			
		||||
  ASSERT(close_cb_calls == 0);
 | 
			
		||||
  ASSERT(connect_cb_calls == 1);
 | 
			
		||||
  ASSERT_OK(close_cb_calls);
 | 
			
		||||
  ASSERT_EQ(1, connect_cb_calls);
 | 
			
		||||
 | 
			
		||||
  /* Close the tcp handle. */
 | 
			
		||||
  uv_close((uv_handle_t*)&tcp, on_close);
 | 
			
		||||
@@ -66,22 +66,22 @@ static void timer_cb(uv_timer_t* handle) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void on_connect_with_close(uv_connect_t *req, int status) {
 | 
			
		||||
  ASSERT((uv_stream_t*) &tcp == req->handle);
 | 
			
		||||
  ASSERT(status == UV_ECONNREFUSED);
 | 
			
		||||
  ASSERT_PTR_EQ((uv_stream_t*) &tcp, req->handle);
 | 
			
		||||
  ASSERT_EQ(status, UV_ECONNREFUSED);
 | 
			
		||||
  connect_cb_calls++;
 | 
			
		||||
 | 
			
		||||
  ASSERT(close_cb_calls == 0);
 | 
			
		||||
  ASSERT_OK(close_cb_calls);
 | 
			
		||||
  uv_close((uv_handle_t*)req->handle, on_close);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void on_connect_without_close(uv_connect_t *req, int status) {
 | 
			
		||||
  ASSERT(status == UV_ECONNREFUSED);
 | 
			
		||||
  ASSERT_EQ(status, UV_ECONNREFUSED);
 | 
			
		||||
  connect_cb_calls++;
 | 
			
		||||
 | 
			
		||||
  uv_timer_start(&timer, timer_cb, 100, 0);
 | 
			
		||||
 | 
			
		||||
  ASSERT(close_cb_calls == 0);
 | 
			
		||||
  ASSERT_OK(close_cb_calls);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -89,10 +89,10 @@ static void connection_fail(uv_connect_cb connect_cb) {
 | 
			
		||||
  struct sockaddr_in client_addr, server_addr;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("0.0.0.0", 0, &client_addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("0.0.0.0", 0, &client_addr));
 | 
			
		||||
 | 
			
		||||
  /* There should be no servers listening on this port. */
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &server_addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &server_addr));
 | 
			
		||||
 | 
			
		||||
  /* Try to connect to the server and do NUM_PINGS ping-pongs. */
 | 
			
		||||
  r = uv_tcp_init(uv_default_loop(), &tcp);
 | 
			
		||||
@@ -100,7 +100,7 @@ static void connection_fail(uv_connect_cb connect_cb) {
 | 
			
		||||
 | 
			
		||||
  /* We are never doing multiple reads/connects at a time anyway. so these
 | 
			
		||||
   * handles can be pre-initialized. */
 | 
			
		||||
  ASSERT(0 == uv_tcp_bind(&tcp, (const struct sockaddr*) &client_addr, 0));
 | 
			
		||||
  ASSERT_OK(uv_tcp_bind(&tcp, (const struct sockaddr*) &client_addr, 0));
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_connect(&req,
 | 
			
		||||
                     &tcp,
 | 
			
		||||
@@ -110,8 +110,8 @@ static void connection_fail(uv_connect_cb connect_cb) {
 | 
			
		||||
 | 
			
		||||
  uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(connect_cb_calls == 1);
 | 
			
		||||
  ASSERT(close_cb_calls == 1);
 | 
			
		||||
  ASSERT_EQ(1, connect_cb_calls);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_calls);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -127,8 +127,8 @@ TEST_IMPL(connection_fail) {
 | 
			
		||||
 | 
			
		||||
  connection_fail(on_connect_with_close);
 | 
			
		||||
 | 
			
		||||
  ASSERT(timer_close_cb_calls == 0);
 | 
			
		||||
  ASSERT(timer_cb_calls == 0);
 | 
			
		||||
  ASSERT_OK(timer_close_cb_calls);
 | 
			
		||||
  ASSERT_OK(timer_cb_calls);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -149,12 +149,12 @@ TEST_IMPL(connection_fail_doesnt_auto_close) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_init(uv_default_loop(), &timer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  connection_fail(on_connect_without_close);
 | 
			
		||||
 | 
			
		||||
  ASSERT(timer_close_cb_calls == 1);
 | 
			
		||||
  ASSERT(timer_cb_calls == 1);
 | 
			
		||||
  ASSERT_EQ(1, timer_close_cb_calls);
 | 
			
		||||
  ASSERT_EQ(1, timer_cb_calls);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								deps/libuv/test/test-cwd-and-chdir.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								deps/libuv/test/test-cwd-and-chdir.c
									
									
									
									
										vendored
									
									
								
							@@ -34,24 +34,24 @@ TEST_IMPL(cwd_and_chdir) {
 | 
			
		||||
 | 
			
		||||
  size1 = 1;
 | 
			
		||||
  err = uv_cwd(buffer_orig, &size1);
 | 
			
		||||
  ASSERT(err == UV_ENOBUFS);
 | 
			
		||||
  ASSERT(size1 > 1);
 | 
			
		||||
  ASSERT_EQ(err, UV_ENOBUFS);
 | 
			
		||||
  ASSERT_GT(size1, 1);
 | 
			
		||||
 | 
			
		||||
  size1 = sizeof buffer_orig;
 | 
			
		||||
  err = uv_cwd(buffer_orig, &size1);
 | 
			
		||||
  ASSERT(err == 0);
 | 
			
		||||
  ASSERT(size1 > 0);
 | 
			
		||||
  ASSERT(buffer_orig[size1] != '/');
 | 
			
		||||
  ASSERT_OK(err);
 | 
			
		||||
  ASSERT_GT(size1, 0);
 | 
			
		||||
  ASSERT_NE(buffer_orig[size1], '/');
 | 
			
		||||
 | 
			
		||||
  err = uv_chdir(buffer_orig);
 | 
			
		||||
  ASSERT(err == 0);
 | 
			
		||||
  ASSERT_OK(err);
 | 
			
		||||
 | 
			
		||||
  size2 = sizeof buffer_new;
 | 
			
		||||
  err = uv_cwd(buffer_new, &size2);
 | 
			
		||||
  ASSERT(err == 0);
 | 
			
		||||
  ASSERT_OK(err);
 | 
			
		||||
 | 
			
		||||
  ASSERT(size1 == size2);
 | 
			
		||||
  ASSERT(strcmp(buffer_orig, buffer_new) == 0);
 | 
			
		||||
  ASSERT_EQ(size1, size2);
 | 
			
		||||
  ASSERT_OK(strcmp(buffer_orig, buffer_new));
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								deps/libuv/test/test-default-loop-close.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								deps/libuv/test/test-default-loop-close.c
									
									
									
									
										vendored
									
									
								
							@@ -39,19 +39,19 @@ TEST_IMPL(default_loop_close) {
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
  ASSERT_NOT_NULL(loop);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_timer_init(loop, &timer_handle));
 | 
			
		||||
  ASSERT(0 == uv_timer_start(&timer_handle, timer_cb, 1, 0));
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT(1 == timer_cb_called);
 | 
			
		||||
  ASSERT(0 == uv_loop_close(loop));
 | 
			
		||||
  ASSERT_OK(uv_timer_init(loop, &timer_handle));
 | 
			
		||||
  ASSERT_OK(uv_timer_start(&timer_handle, timer_cb, 1, 0));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_EQ(1, timer_cb_called);
 | 
			
		||||
  ASSERT_OK(uv_loop_close(loop));
 | 
			
		||||
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
  ASSERT_NOT_NULL(loop);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_timer_init(loop, &timer_handle));
 | 
			
		||||
  ASSERT(0 == uv_timer_start(&timer_handle, timer_cb, 1, 0));
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT(2 == timer_cb_called);
 | 
			
		||||
  ASSERT_OK(uv_timer_init(loop, &timer_handle));
 | 
			
		||||
  ASSERT_OK(uv_timer_start(&timer_handle, timer_cb, 1, 0));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_EQ(2, timer_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								deps/libuv/test/test-delayed-accept.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								deps/libuv/test/test-delayed-accept.c
									
									
									
									
										vendored
									
									
								
							@@ -54,11 +54,11 @@ static void do_accept(uv_timer_t* timer_handle) {
 | 
			
		||||
  ASSERT_NOT_NULL(accepted_handle);
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_init(uv_default_loop(), accepted_handle);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  server = (uv_tcp_t*)timer_handle->data;
 | 
			
		||||
  r = uv_accept((uv_stream_t*)server, (uv_stream_t*)accepted_handle);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  do_accept_called++;
 | 
			
		||||
 | 
			
		||||
@@ -79,19 +79,19 @@ static void connection_cb(uv_stream_t* tcp, int status) {
 | 
			
		||||
  int r;
 | 
			
		||||
  uv_timer_t* timer_handle;
 | 
			
		||||
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
 | 
			
		||||
  timer_handle = (uv_timer_t*)malloc(sizeof *timer_handle);
 | 
			
		||||
  ASSERT_NOT_NULL(timer_handle);
 | 
			
		||||
 | 
			
		||||
  /* Accept the client after 1 second */
 | 
			
		||||
  r = uv_timer_init(uv_default_loop(), timer_handle);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  timer_handle->data = tcp;
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_start(timer_handle, do_accept, 1000, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  connection_cb_called++;
 | 
			
		||||
}
 | 
			
		||||
@@ -102,16 +102,16 @@ static void start_server(void) {
 | 
			
		||||
  uv_tcp_t* server = (uv_tcp_t*)malloc(sizeof *server);
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("0.0.0.0", TEST_PORT, &addr));
 | 
			
		||||
  ASSERT_NOT_NULL(server);
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_init(uv_default_loop(), server);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_tcp_bind(server, (const struct sockaddr*) &addr, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_listen((uv_stream_t*)server, 128, connection_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -123,10 +123,10 @@ static void read_cb(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf) {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (nread >= 0) {
 | 
			
		||||
    ASSERT(nread == 0);
 | 
			
		||||
    ASSERT_OK(nread);
 | 
			
		||||
  } else {
 | 
			
		||||
    ASSERT_NOT_NULL(tcp);
 | 
			
		||||
    ASSERT(nread == UV_EOF);
 | 
			
		||||
    ASSERT_EQ(nread, UV_EOF);
 | 
			
		||||
    uv_close((uv_handle_t*)tcp, close_cb);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -136,12 +136,12 @@ static void connect_cb(uv_connect_t* req, int status) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT_NOT_NULL(req);
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
 | 
			
		||||
  /* Not that the server will send anything, but otherwise we'll never know
 | 
			
		||||
   * when the server closes the connection. */
 | 
			
		||||
  r = uv_read_start((uv_stream_t*)(req->handle), alloc_cb, read_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  connect_cb_called++;
 | 
			
		||||
 | 
			
		||||
@@ -155,18 +155,18 @@ static void client_connect(void) {
 | 
			
		||||
  uv_connect_t* connect_req = malloc(sizeof *connect_req);
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
  ASSERT_NOT_NULL(client);
 | 
			
		||||
  ASSERT_NOT_NULL(connect_req);
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_init(uv_default_loop(), client);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_connect(connect_req,
 | 
			
		||||
                     client,
 | 
			
		||||
                     (const struct sockaddr*) &addr,
 | 
			
		||||
                     connect_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -179,10 +179,10 @@ TEST_IMPL(delayed_accept) {
 | 
			
		||||
 | 
			
		||||
  uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(connection_cb_called == 2);
 | 
			
		||||
  ASSERT(do_accept_called == 2);
 | 
			
		||||
  ASSERT(connect_cb_called == 2);
 | 
			
		||||
  ASSERT(close_cb_called == 7);
 | 
			
		||||
  ASSERT_EQ(2, connection_cb_called);
 | 
			
		||||
  ASSERT_EQ(2, do_accept_called);
 | 
			
		||||
  ASSERT_EQ(2, connect_cb_called);
 | 
			
		||||
  ASSERT_EQ(7, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								deps/libuv/test/test-dlerror.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								deps/libuv/test/test-dlerror.c
									
									
									
									
										vendored
									
									
								
							@@ -38,7 +38,7 @@ TEST_IMPL(dlerror) {
 | 
			
		||||
  ASSERT_NOT_NULL(strstr(msg, dlerror_no_error));
 | 
			
		||||
 | 
			
		||||
  r = uv_dlopen(path, &lib);
 | 
			
		||||
  ASSERT(r == -1);
 | 
			
		||||
  ASSERT_EQ(r, -1);
 | 
			
		||||
 | 
			
		||||
  msg = uv_dlerror(&lib);
 | 
			
		||||
  ASSERT_NOT_NULL(msg);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								deps/libuv/test/test-eintr-handling.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								deps/libuv/test/test-eintr-handling.c
									
									
									
									
										vendored
									
									
								
							@@ -48,13 +48,13 @@ struct thread_ctx {
 | 
			
		||||
 | 
			
		||||
static void thread_main(void* arg) {
 | 
			
		||||
  int nwritten;
 | 
			
		||||
  ASSERT(0 == kill(getpid(), SIGUSR1));
 | 
			
		||||
  ASSERT_OK(kill(getpid(), SIGUSR1));
 | 
			
		||||
 | 
			
		||||
  do
 | 
			
		||||
    nwritten = write(pipe_fds[1], test_buf, sizeof(test_buf));
 | 
			
		||||
  while (nwritten == -1 && errno == EINTR);
 | 
			
		||||
 | 
			
		||||
  ASSERT(nwritten == sizeof(test_buf));
 | 
			
		||||
  ASSERT_EQ(nwritten, sizeof(test_buf));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void sig_func(uv_signal_t* handle, int signum) {
 | 
			
		||||
@@ -70,24 +70,24 @@ TEST_IMPL(eintr_handling) {
 | 
			
		||||
  iov = uv_buf_init(buf, sizeof(buf));
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_signal_init(loop, &signal));
 | 
			
		||||
  ASSERT(0 == uv_signal_start(&signal, sig_func, SIGUSR1));
 | 
			
		||||
  ASSERT_OK(uv_signal_init(loop, &signal));
 | 
			
		||||
  ASSERT_OK(uv_signal_start(&signal, sig_func, SIGUSR1));
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == pipe(pipe_fds));
 | 
			
		||||
  ASSERT(0 == uv_thread_create(&thread, thread_main, &ctx));
 | 
			
		||||
  ASSERT_OK(pipe(pipe_fds));
 | 
			
		||||
  ASSERT_OK(uv_thread_create(&thread, thread_main, &ctx));
 | 
			
		||||
 | 
			
		||||
  nread = uv_fs_read(loop, &read_req, pipe_fds[0], &iov, 1, -1, NULL);
 | 
			
		||||
 | 
			
		||||
  ASSERT(nread == sizeof(test_buf));
 | 
			
		||||
  ASSERT(0 == strcmp(buf, test_buf));
 | 
			
		||||
  ASSERT_EQ(nread, sizeof(test_buf));
 | 
			
		||||
  ASSERT_OK(strcmp(buf, test_buf));
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == close(pipe_fds[0]));
 | 
			
		||||
  ASSERT(0 == close(pipe_fds[1]));
 | 
			
		||||
  ASSERT_OK(close(pipe_fds[0]));
 | 
			
		||||
  ASSERT_OK(close(pipe_fds[1]));
 | 
			
		||||
  uv_close((uv_handle_t*) &signal, NULL);
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_thread_join(&thread));
 | 
			
		||||
  ASSERT_OK(uv_thread_join(&thread));
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								deps/libuv/test/test-embed.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								deps/libuv/test/test-embed.c
									
									
									
									
										vendored
									
									
								
							@@ -36,7 +36,7 @@ static uv_barrier_t barrier;
 | 
			
		||||
static void thread_main(void* arg) {
 | 
			
		||||
  ASSERT_LE(0, uv_barrier_wait(&barrier));
 | 
			
		||||
  uv_sleep(250);
 | 
			
		||||
  ASSERT_EQ(0, uv_async_send(&async));
 | 
			
		||||
  ASSERT_OK(uv_async_send(&async));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -50,9 +50,9 @@ TEST_IMPL(embed) {
 | 
			
		||||
  uv_loop_t* loop;
 | 
			
		||||
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
  ASSERT_EQ(0, uv_async_init(loop, &async, async_cb));
 | 
			
		||||
  ASSERT_EQ(0, uv_barrier_init(&barrier, 2));
 | 
			
		||||
  ASSERT_EQ(0, uv_thread_create(&thread, thread_main, NULL));
 | 
			
		||||
  ASSERT_OK(uv_async_init(loop, &async, async_cb));
 | 
			
		||||
  ASSERT_OK(uv_barrier_init(&barrier, 2));
 | 
			
		||||
  ASSERT_OK(uv_thread_create(&thread, thread_main, NULL));
 | 
			
		||||
  ASSERT_LE(0, uv_barrier_wait(&barrier));
 | 
			
		||||
 | 
			
		||||
  while (uv_loop_alive(loop)) {
 | 
			
		||||
@@ -71,7 +71,7 @@ TEST_IMPL(embed) {
 | 
			
		||||
#endif
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_thread_join(&thread));
 | 
			
		||||
  ASSERT_OK(uv_thread_join(&thread));
 | 
			
		||||
  uv_barrier_destroy(&barrier);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								deps/libuv/test/test-emfile.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								deps/libuv/test/test-emfile.c
									
									
									
									
										vendored
									
									
								
							@@ -54,37 +54,37 @@ TEST_IMPL(emfile) {
 | 
			
		||||
  /* Lower the file descriptor limit and use up all fds save one. */
 | 
			
		||||
  limits.rlim_cur = limits.rlim_max = maxfd + 1;
 | 
			
		||||
  if (setrlimit(RLIMIT_NOFILE, &limits)) {
 | 
			
		||||
    ASSERT(errno == EPERM);  /* Valgrind blocks the setrlimit() call. */
 | 
			
		||||
    ASSERT_EQ(errno, EPERM);  /* Valgrind blocks the setrlimit() call. */
 | 
			
		||||
    RETURN_SKIP("setrlimit(RLIMIT_NOFILE) failed, running under valgrind?");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
  ASSERT(0 == uv_tcp_init(loop, &server_handle));
 | 
			
		||||
  ASSERT(0 == uv_tcp_init(loop, &client_handle));
 | 
			
		||||
  ASSERT(0 == uv_tcp_bind(&server_handle, (const struct sockaddr*) &addr, 0));
 | 
			
		||||
  ASSERT(0 == uv_listen((uv_stream_t*) &server_handle, 8, connection_cb));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
  ASSERT_OK(uv_tcp_init(loop, &server_handle));
 | 
			
		||||
  ASSERT_OK(uv_tcp_init(loop, &client_handle));
 | 
			
		||||
  ASSERT_OK(uv_tcp_bind(&server_handle, (const struct sockaddr*) &addr, 0));
 | 
			
		||||
  ASSERT_OK(uv_listen((uv_stream_t*) &server_handle, 8, connection_cb));
 | 
			
		||||
 | 
			
		||||
  /* Remember the first one so we can clean up afterwards. */
 | 
			
		||||
  do
 | 
			
		||||
    first_fd = dup(0);
 | 
			
		||||
  while (first_fd == -1 && errno == EINTR);
 | 
			
		||||
  ASSERT(first_fd > 0);
 | 
			
		||||
  ASSERT_GT(first_fd, 0);
 | 
			
		||||
 | 
			
		||||
  while (dup(0) != -1 || errno == EINTR);
 | 
			
		||||
  ASSERT(errno == EMFILE);
 | 
			
		||||
  ASSERT_EQ(errno, EMFILE);
 | 
			
		||||
  close(maxfd);
 | 
			
		||||
 | 
			
		||||
  /* Now connect and use up the last available file descriptor.  The EMFILE
 | 
			
		||||
   * handling logic in src/unix/stream.c should ensure that connect_cb() runs
 | 
			
		||||
   * whereas connection_cb() should *not* run.
 | 
			
		||||
   */
 | 
			
		||||
  ASSERT(0 == uv_tcp_connect(&connect_req,
 | 
			
		||||
                             &client_handle,
 | 
			
		||||
                             (const struct sockaddr*) &addr,
 | 
			
		||||
                             connect_cb));
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT(1 == connect_cb_called);
 | 
			
		||||
  ASSERT_OK(uv_tcp_connect(&connect_req,
 | 
			
		||||
                           &client_handle,
 | 
			
		||||
                           (const struct sockaddr*) &addr,
 | 
			
		||||
                           connect_cb));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_EQ(1, connect_cb_called);
 | 
			
		||||
 | 
			
		||||
  /* Close the dups again. Ignore errors in the unlikely event that the
 | 
			
		||||
   * file descriptors were not contiguous.
 | 
			
		||||
@@ -108,7 +108,7 @@ static void connect_cb(uv_connect_t* req, int status) {
 | 
			
		||||
  /* |status| should equal 0 because the connection should have been accepted,
 | 
			
		||||
   * it's just that the server immediately closes it again.
 | 
			
		||||
   */
 | 
			
		||||
  ASSERT(0 == status);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  connect_cb_called += 1;
 | 
			
		||||
  uv_close((uv_handle_t*) &server_handle, NULL);
 | 
			
		||||
  uv_close((uv_handle_t*) &client_handle, NULL);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										68
									
								
								deps/libuv/test/test-env-vars.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										68
									
								
								deps/libuv/test/test-env-vars.c
									
									
									
									
										vendored
									
									
								
							@@ -35,83 +35,83 @@ TEST_IMPL(env_vars) {
 | 
			
		||||
 | 
			
		||||
  /* Reject invalid inputs when setting an environment variable */
 | 
			
		||||
  r = uv_os_setenv(NULL, "foo");
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
  r = uv_os_setenv(name, NULL);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
  r = uv_os_setenv(NULL, NULL);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
 | 
			
		||||
  /* Reject invalid inputs when retrieving an environment variable */
 | 
			
		||||
  size = BUF_SIZE;
 | 
			
		||||
  r = uv_os_getenv(NULL, buf, &size);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
  r = uv_os_getenv(name, NULL, &size);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
  r = uv_os_getenv(name, buf, NULL);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
  size = 0;
 | 
			
		||||
  r = uv_os_getenv(name, buf, &size);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
 | 
			
		||||
  /* Reject invalid inputs when deleting an environment variable */
 | 
			
		||||
  r = uv_os_unsetenv(NULL);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
 | 
			
		||||
  /* Successfully set an environment variable */
 | 
			
		||||
  r = uv_os_setenv(name, "123456789");
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  /* Successfully read an environment variable */
 | 
			
		||||
  size = BUF_SIZE;
 | 
			
		||||
  buf[0] = '\0';
 | 
			
		||||
  r = uv_os_getenv(name, buf, &size);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(strcmp(buf, "123456789") == 0);
 | 
			
		||||
  ASSERT(size == BUF_SIZE - 1);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(strcmp(buf, "123456789"));
 | 
			
		||||
  ASSERT_EQ(size, BUF_SIZE - 1);
 | 
			
		||||
 | 
			
		||||
  /* Return UV_ENOBUFS if the buffer cannot hold the environment variable */
 | 
			
		||||
  size = BUF_SIZE - 1;
 | 
			
		||||
  buf[0] = '\0';
 | 
			
		||||
  r = uv_os_getenv(name, buf, &size);
 | 
			
		||||
  ASSERT(r == UV_ENOBUFS);
 | 
			
		||||
  ASSERT(size == BUF_SIZE);
 | 
			
		||||
  ASSERT_EQ(r, UV_ENOBUFS);
 | 
			
		||||
  ASSERT_EQ(size, BUF_SIZE);
 | 
			
		||||
 | 
			
		||||
  /* Successfully delete an environment variable */
 | 
			
		||||
  r = uv_os_unsetenv(name);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  /* Return UV_ENOENT retrieving an environment variable that does not exist */
 | 
			
		||||
  r = uv_os_getenv(name, buf, &size);
 | 
			
		||||
  ASSERT(r == UV_ENOENT);
 | 
			
		||||
  ASSERT_EQ(r, UV_ENOENT);
 | 
			
		||||
 | 
			
		||||
  /* Successfully delete an environment variable that does not exist */
 | 
			
		||||
  r = uv_os_unsetenv(name);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  /* Setting an environment variable to the empty string does not delete it. */
 | 
			
		||||
  r = uv_os_setenv(name, "");
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  size = BUF_SIZE;
 | 
			
		||||
  r = uv_os_getenv(name, buf, &size);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(size == 0);
 | 
			
		||||
  ASSERT(strlen(buf) == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(size);
 | 
			
		||||
  ASSERT_OK(strlen(buf));
 | 
			
		||||
 | 
			
		||||
  /* Check getting all env variables. */
 | 
			
		||||
  r = uv_os_setenv(name, "123456789");
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_os_setenv(name2, "");
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
  /* Create a special environment variable on Windows in case there are no
 | 
			
		||||
     naturally occurring ones. */
 | 
			
		||||
  r = uv_os_setenv("=Z:", "\\");
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  r = uv_os_environ(&envitems, &envcount);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(envcount > 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_GT(envcount, 0);
 | 
			
		||||
 | 
			
		||||
  found = 0;
 | 
			
		||||
  found_win_special = 0;
 | 
			
		||||
@@ -120,16 +120,16 @@ TEST_IMPL(env_vars) {
 | 
			
		||||
    /* printf("Env: %s = %s\n", envitems[i].name, envitems[i].value); */
 | 
			
		||||
    if (strcmp(envitems[i].name, name) == 0) {
 | 
			
		||||
      found++;
 | 
			
		||||
      ASSERT(strcmp(envitems[i].value, "123456789") == 0);
 | 
			
		||||
      ASSERT_OK(strcmp(envitems[i].value, "123456789"));
 | 
			
		||||
    } else if (strcmp(envitems[i].name, name2) == 0) {
 | 
			
		||||
      found++;
 | 
			
		||||
      ASSERT(strlen(envitems[i].value) == 0);
 | 
			
		||||
      ASSERT_OK(strlen(envitems[i].value));
 | 
			
		||||
    } else if (envitems[i].name[0] == '=') {
 | 
			
		||||
      found_win_special++;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ASSERT(found == 2);
 | 
			
		||||
  ASSERT_EQ(2, found);
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
  ASSERT_GT(found_win_special, 0);
 | 
			
		||||
#else
 | 
			
		||||
@@ -140,10 +140,10 @@ TEST_IMPL(env_vars) {
 | 
			
		||||
  uv_os_free_environ(envitems, envcount);
 | 
			
		||||
 | 
			
		||||
  r = uv_os_unsetenv(name);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_os_unsetenv(name2);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  for (i = 1; i <= 4; i++) {
 | 
			
		||||
    size_t n;
 | 
			
		||||
@@ -158,14 +158,14 @@ TEST_IMPL(env_vars) {
 | 
			
		||||
    memset(p, 'x', n);
 | 
			
		||||
    p[n] = '\0';
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(0, uv_os_setenv(name, p));
 | 
			
		||||
    ASSERT_EQ(0, uv_os_getenv(name, p, &size));
 | 
			
		||||
    ASSERT_OK(uv_os_setenv(name, p));
 | 
			
		||||
    ASSERT_OK(uv_os_getenv(name, p, &size));
 | 
			
		||||
    ASSERT_EQ(n, size);
 | 
			
		||||
 | 
			
		||||
    for (n = 0; n < size; n++)
 | 
			
		||||
      ASSERT_EQ('x', p[n]);
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(0, uv_os_unsetenv(name));
 | 
			
		||||
    ASSERT_OK(uv_os_unsetenv(name));
 | 
			
		||||
    free(p);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								deps/libuv/test/test-error.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								deps/libuv/test/test-error.c
									
									
									
									
										vendored
									
									
								
							@@ -51,8 +51,8 @@ TEST_IMPL(error_message) {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ASSERT_NULL(strstr(uv_strerror(UV_EINVAL), "Success"));
 | 
			
		||||
  ASSERT(strcmp(uv_strerror(1337), "Unknown error") == 0);
 | 
			
		||||
  ASSERT(strcmp(uv_strerror(-1337), "Unknown error") == 0);
 | 
			
		||||
  ASSERT_OK(strcmp(uv_strerror(1337), "Unknown error"));
 | 
			
		||||
  ASSERT_OK(strcmp(uv_strerror(-1337), "Unknown error"));
 | 
			
		||||
 | 
			
		||||
  ASSERT_NULL(strstr(uv_strerror_r(UV_EINVAL, buf, sizeof(buf)), "Success"));
 | 
			
		||||
  ASSERT_NOT_NULL(strstr(uv_strerror_r(1337, buf, sizeof(buf)), "1337"));
 | 
			
		||||
@@ -64,19 +64,19 @@ TEST_IMPL(error_message) {
 | 
			
		||||
 | 
			
		||||
TEST_IMPL(sys_error) {
 | 
			
		||||
#if defined(_WIN32)
 | 
			
		||||
  ASSERT(uv_translate_sys_error(ERROR_NOACCESS) == UV_EACCES);
 | 
			
		||||
  ASSERT(uv_translate_sys_error(ERROR_ELEVATION_REQUIRED) == UV_EACCES);
 | 
			
		||||
  ASSERT(uv_translate_sys_error(WSAEADDRINUSE) == UV_EADDRINUSE);
 | 
			
		||||
  ASSERT(uv_translate_sys_error(ERROR_BAD_PIPE) == UV_EPIPE);
 | 
			
		||||
  ASSERT_EQ(uv_translate_sys_error(ERROR_NOACCESS), UV_EACCES);
 | 
			
		||||
  ASSERT_EQ(uv_translate_sys_error(ERROR_ELEVATION_REQUIRED), UV_EACCES);
 | 
			
		||||
  ASSERT_EQ(uv_translate_sys_error(WSAEADDRINUSE), UV_EADDRINUSE);
 | 
			
		||||
  ASSERT_EQ(uv_translate_sys_error(ERROR_BAD_PIPE), UV_EPIPE);
 | 
			
		||||
#else
 | 
			
		||||
  ASSERT(uv_translate_sys_error(EPERM) == UV_EPERM);
 | 
			
		||||
  ASSERT(uv_translate_sys_error(EPIPE) == UV_EPIPE);
 | 
			
		||||
  ASSERT(uv_translate_sys_error(EINVAL) == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(uv_translate_sys_error(EPERM), UV_EPERM);
 | 
			
		||||
  ASSERT_EQ(uv_translate_sys_error(EPIPE), UV_EPIPE);
 | 
			
		||||
  ASSERT_EQ(uv_translate_sys_error(EINVAL), UV_EINVAL);
 | 
			
		||||
#endif
 | 
			
		||||
  ASSERT(uv_translate_sys_error(UV_EINVAL) == UV_EINVAL);
 | 
			
		||||
  ASSERT(uv_translate_sys_error(UV_ERANGE) == UV_ERANGE);
 | 
			
		||||
  ASSERT(uv_translate_sys_error(UV_EACCES) == UV_EACCES);
 | 
			
		||||
  ASSERT(uv_translate_sys_error(0) == 0);
 | 
			
		||||
  ASSERT_EQ(uv_translate_sys_error(UV_EINVAL), UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(uv_translate_sys_error(UV_ERANGE), UV_ERANGE);
 | 
			
		||||
  ASSERT_EQ(uv_translate_sys_error(UV_EACCES), UV_EACCES);
 | 
			
		||||
  ASSERT_OK(uv_translate_sys_error(0));
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										257
									
								
								deps/libuv/test/test-fork.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										257
									
								
								deps/libuv/test/test-fork.c
									
									
									
									
										vendored
									
									
								
							@@ -51,12 +51,12 @@ static char socket_cb_read_buf[1024];
 | 
			
		||||
static void socket_cb(uv_poll_t* poll, int status, int events) {
 | 
			
		||||
  ssize_t cnt;
 | 
			
		||||
  socket_cb_called++;
 | 
			
		||||
  ASSERT(0 == status);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  printf("Socket cb got events %d\n", events);
 | 
			
		||||
  ASSERT(UV_READABLE == (events & UV_READABLE));
 | 
			
		||||
  ASSERT_EQ(UV_READABLE, (events & UV_READABLE));
 | 
			
		||||
  if (socket_cb_read_fd) {
 | 
			
		||||
    cnt = read(socket_cb_read_fd, socket_cb_read_buf, socket_cb_read_size);
 | 
			
		||||
    ASSERT(cnt == socket_cb_read_size);
 | 
			
		||||
    ASSERT_EQ(cnt, socket_cb_read_size);
 | 
			
		||||
  }
 | 
			
		||||
  uv_close((uv_handle_t*) poll, NULL);
 | 
			
		||||
}
 | 
			
		||||
@@ -66,15 +66,15 @@ static void run_timer_loop_once(void) {
 | 
			
		||||
  uv_loop_t loop;
 | 
			
		||||
  uv_timer_t timer_handle;
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_loop_init(&loop));
 | 
			
		||||
  ASSERT_OK(uv_loop_init(&loop));
 | 
			
		||||
 | 
			
		||||
  timer_cb_called = 0; /* Reset for the child. */
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_timer_init(&loop, &timer_handle));
 | 
			
		||||
  ASSERT(0 == uv_timer_start(&timer_handle, timer_cb, 1, 0));
 | 
			
		||||
  ASSERT(0 == uv_run(&loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT(1 == timer_cb_called);
 | 
			
		||||
  ASSERT_EQ(0, uv_loop_close(&loop));
 | 
			
		||||
  ASSERT_OK(uv_timer_init(&loop, &timer_handle));
 | 
			
		||||
  ASSERT_OK(uv_timer_start(&timer_handle, timer_cb, 1, 0));
 | 
			
		||||
  ASSERT_OK(uv_run(&loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_EQ(1, timer_cb_called);
 | 
			
		||||
  ASSERT_OK(uv_loop_close(&loop));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -87,10 +87,10 @@ static void assert_wait_child(pid_t child_pid) {
 | 
			
		||||
  if (waited_pid == -1) {
 | 
			
		||||
    perror("Failed to wait");
 | 
			
		||||
  }
 | 
			
		||||
  ASSERT(child_pid == waited_pid);
 | 
			
		||||
  ASSERT_EQ(child_pid, waited_pid);
 | 
			
		||||
  ASSERT(WIFEXITED(child_stat)); /* Clean exit, not a signal. */
 | 
			
		||||
  ASSERT(!WIFSIGNALED(child_stat));
 | 
			
		||||
  ASSERT(0 == WEXITSTATUS(child_stat));
 | 
			
		||||
  ASSERT_OK(WEXITSTATUS(child_stat));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -109,14 +109,14 @@ TEST_IMPL(fork_timer) {
 | 
			
		||||
#else
 | 
			
		||||
  child_pid = fork();
 | 
			
		||||
#endif
 | 
			
		||||
  ASSERT(child_pid != -1);
 | 
			
		||||
  ASSERT_NE(child_pid, -1);
 | 
			
		||||
 | 
			
		||||
  if (child_pid != 0) {
 | 
			
		||||
    /* parent */
 | 
			
		||||
    assert_wait_child(child_pid);
 | 
			
		||||
  } else {
 | 
			
		||||
    /* child */
 | 
			
		||||
    ASSERT(0 == uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    ASSERT_OK(uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    run_timer_loop_once();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -135,30 +135,30 @@ TEST_IMPL(fork_socketpair) {
 | 
			
		||||
  /* Prime the loop. */
 | 
			
		||||
  run_timer_loop_once();
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == socketpair(AF_UNIX, SOCK_STREAM, 0, socket_fds));
 | 
			
		||||
  ASSERT_OK(socketpair(AF_UNIX, SOCK_STREAM, 0, socket_fds));
 | 
			
		||||
 | 
			
		||||
  /* Create the server watcher in the parent, use it in the child. */
 | 
			
		||||
  ASSERT(0 == uv_poll_init(uv_default_loop(), &poll_handle, socket_fds[0]));
 | 
			
		||||
  ASSERT_OK(uv_poll_init(uv_default_loop(), &poll_handle, socket_fds[0]));
 | 
			
		||||
 | 
			
		||||
#if defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH)
 | 
			
		||||
  child_pid = -1;
 | 
			
		||||
#else
 | 
			
		||||
  child_pid = fork();
 | 
			
		||||
#endif
 | 
			
		||||
  ASSERT(child_pid != -1);
 | 
			
		||||
  ASSERT_NE(child_pid, -1);
 | 
			
		||||
 | 
			
		||||
  if (child_pid != 0) {
 | 
			
		||||
    /* parent */
 | 
			
		||||
    ASSERT(3 == send(socket_fds[1], "hi\n", 3, 0));
 | 
			
		||||
    ASSERT_EQ(3, send(socket_fds[1], "hi\n", 3, 0));
 | 
			
		||||
    assert_wait_child(child_pid);
 | 
			
		||||
  } else {
 | 
			
		||||
    /* child */
 | 
			
		||||
    ASSERT(0 == uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    ASSERT(0 == socket_cb_called);
 | 
			
		||||
    ASSERT(0 == uv_poll_start(&poll_handle, UV_READABLE, socket_cb));
 | 
			
		||||
    ASSERT_OK(uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    ASSERT_OK(socket_cb_called);
 | 
			
		||||
    ASSERT_OK(uv_poll_start(&poll_handle, UV_READABLE, socket_cb));
 | 
			
		||||
    printf("Going to run the loop in the child\n");
 | 
			
		||||
    ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
    ASSERT(1 == socket_cb_called);
 | 
			
		||||
    ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
    ASSERT_EQ(1, socket_cb_called);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
@@ -176,57 +176,57 @@ TEST_IMPL(fork_socketpair_started) {
 | 
			
		||||
  char sync_buf[1];
 | 
			
		||||
  uv_poll_t poll_handle;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == pipe(sync_pipe));
 | 
			
		||||
  ASSERT_OK(pipe(sync_pipe));
 | 
			
		||||
 | 
			
		||||
  /* Prime the loop. */
 | 
			
		||||
  run_timer_loop_once();
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == socketpair(AF_UNIX, SOCK_STREAM, 0, socket_fds));
 | 
			
		||||
  ASSERT_OK(socketpair(AF_UNIX, SOCK_STREAM, 0, socket_fds));
 | 
			
		||||
 | 
			
		||||
  /* Create and start the server watcher in the parent, use it in the child. */
 | 
			
		||||
  ASSERT(0 == uv_poll_init(uv_default_loop(), &poll_handle, socket_fds[0]));
 | 
			
		||||
  ASSERT(0 == uv_poll_start(&poll_handle, UV_READABLE, socket_cb));
 | 
			
		||||
  ASSERT_OK(uv_poll_init(uv_default_loop(), &poll_handle, socket_fds[0]));
 | 
			
		||||
  ASSERT_OK(uv_poll_start(&poll_handle, UV_READABLE, socket_cb));
 | 
			
		||||
 | 
			
		||||
  /* Run the loop AFTER the poll watcher is registered to make sure it
 | 
			
		||||
     gets passed to the kernel. Use NOWAIT and expect a non-zero
 | 
			
		||||
     return to prove the poll watcher is active.
 | 
			
		||||
  */
 | 
			
		||||
  ASSERT(1 == uv_run(uv_default_loop(), UV_RUN_NOWAIT));
 | 
			
		||||
  ASSERT_EQ(1, uv_run(uv_default_loop(), UV_RUN_NOWAIT));
 | 
			
		||||
 | 
			
		||||
#if defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH)
 | 
			
		||||
  child_pid = -1;
 | 
			
		||||
#else
 | 
			
		||||
  child_pid = fork();
 | 
			
		||||
#endif
 | 
			
		||||
  ASSERT(child_pid != -1);
 | 
			
		||||
  ASSERT_NE(child_pid, -1);
 | 
			
		||||
 | 
			
		||||
  if (child_pid != 0) {
 | 
			
		||||
    /* parent */
 | 
			
		||||
    ASSERT(0 == uv_poll_stop(&poll_handle));
 | 
			
		||||
    ASSERT_OK(uv_poll_stop(&poll_handle));
 | 
			
		||||
    uv_close((uv_handle_t*)&poll_handle, NULL);
 | 
			
		||||
    ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
    ASSERT(0 == socket_cb_called);
 | 
			
		||||
    ASSERT(1 == write(sync_pipe[1], "1", 1)); /* alert child */
 | 
			
		||||
    ASSERT(3 == send(socket_fds[1], "hi\n", 3, 0));
 | 
			
		||||
    ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
    ASSERT_OK(socket_cb_called);
 | 
			
		||||
    ASSERT_EQ(1, write(sync_pipe[1], "1", 1)); /* alert child */
 | 
			
		||||
    ASSERT_EQ(3, send(socket_fds[1], "hi\n", 3, 0));
 | 
			
		||||
 | 
			
		||||
    ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
    ASSERT(0 == socket_cb_called);
 | 
			
		||||
    ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
    ASSERT_OK(socket_cb_called);
 | 
			
		||||
 | 
			
		||||
    assert_wait_child(child_pid);
 | 
			
		||||
  } else {
 | 
			
		||||
    /* child */
 | 
			
		||||
    printf("Child is %d\n", getpid());
 | 
			
		||||
    ASSERT(1 == read(sync_pipe[0], sync_buf, 1)); /* wait for parent */
 | 
			
		||||
    ASSERT(0 == uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    ASSERT(0 == socket_cb_called);
 | 
			
		||||
    ASSERT_EQ(1, read(sync_pipe[0], sync_buf, 1)); /* wait for parent */
 | 
			
		||||
    ASSERT_OK(uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    ASSERT_OK(socket_cb_called);
 | 
			
		||||
 | 
			
		||||
    printf("Going to run the loop in the child\n");
 | 
			
		||||
    socket_cb_read_fd = socket_fds[0];
 | 
			
		||||
    socket_cb_read_size = 3;
 | 
			
		||||
    ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
    ASSERT(1 == socket_cb_called);
 | 
			
		||||
    ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
    ASSERT_EQ(1, socket_cb_called);
 | 
			
		||||
    printf("Buf %s\n", socket_cb_read_buf);
 | 
			
		||||
    ASSERT(0 == strcmp("hi\n", socket_cb_read_buf));
 | 
			
		||||
    ASSERT_OK(strcmp("hi\n", socket_cb_read_buf));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
@@ -253,41 +253,43 @@ TEST_IMPL(fork_signal_to_child) {
 | 
			
		||||
 | 
			
		||||
  fork_signal_cb_called = 0;    /* reset */
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == pipe(sync_pipe));
 | 
			
		||||
  ASSERT_OK(pipe(sync_pipe));
 | 
			
		||||
 | 
			
		||||
  /* Prime the loop. */
 | 
			
		||||
  run_timer_loop_once();
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_signal_init(uv_default_loop(), &signal_handle));
 | 
			
		||||
  ASSERT(0 == uv_signal_start(&signal_handle, fork_signal_to_child_cb, SIGUSR1));
 | 
			
		||||
  ASSERT_OK(uv_signal_init(uv_default_loop(), &signal_handle));
 | 
			
		||||
  ASSERT_OK(uv_signal_start(&signal_handle,
 | 
			
		||||
                            fork_signal_to_child_cb,
 | 
			
		||||
                            SIGUSR1));
 | 
			
		||||
 | 
			
		||||
#if defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH)
 | 
			
		||||
  child_pid = -1;
 | 
			
		||||
#else
 | 
			
		||||
  child_pid = fork();
 | 
			
		||||
#endif
 | 
			
		||||
  ASSERT(child_pid != -1);
 | 
			
		||||
  ASSERT_NE(child_pid, -1);
 | 
			
		||||
 | 
			
		||||
  if (child_pid != 0) {
 | 
			
		||||
    /* parent */
 | 
			
		||||
    ASSERT(1 == read(sync_pipe[0], sync_buf, 1)); /* wait for child */
 | 
			
		||||
    ASSERT(0 == kill(child_pid, SIGUSR1));
 | 
			
		||||
    ASSERT_EQ(1, read(sync_pipe[0], sync_buf, 1)); /* wait for child */
 | 
			
		||||
    ASSERT_OK(kill(child_pid, SIGUSR1));
 | 
			
		||||
    /* Run the loop, make sure we don't get the signal. */
 | 
			
		||||
    printf("Running loop in parent\n");
 | 
			
		||||
    uv_unref((uv_handle_t*)&signal_handle);
 | 
			
		||||
    ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_NOWAIT));
 | 
			
		||||
    ASSERT(0 == fork_signal_cb_called);
 | 
			
		||||
    ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_NOWAIT));
 | 
			
		||||
    ASSERT_OK(fork_signal_cb_called);
 | 
			
		||||
    printf("Waiting for child in parent\n");
 | 
			
		||||
    assert_wait_child(child_pid);
 | 
			
		||||
  } else {
 | 
			
		||||
    /* child */
 | 
			
		||||
    ASSERT(0 == uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    ASSERT(1 == write(sync_pipe[1], "1", 1)); /* alert parent */
 | 
			
		||||
    ASSERT_OK(uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    ASSERT_EQ(1, write(sync_pipe[1], "1", 1)); /* alert parent */
 | 
			
		||||
    /* Get the signal. */
 | 
			
		||||
    ASSERT(0 != uv_loop_alive(uv_default_loop()));
 | 
			
		||||
    ASSERT_NE(0, uv_loop_alive(uv_default_loop()));
 | 
			
		||||
    printf("Running loop in child\n");
 | 
			
		||||
    ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_ONCE));
 | 
			
		||||
    ASSERT(SIGUSR1 == fork_signal_cb_called);
 | 
			
		||||
    ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_ONCE));
 | 
			
		||||
    ASSERT_EQ(SIGUSR1, fork_signal_cb_called);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
@@ -308,47 +310,49 @@ TEST_IMPL(fork_signal_to_child_closed) {
 | 
			
		||||
 | 
			
		||||
  fork_signal_cb_called = 0;    /* reset */
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == pipe(sync_pipe));
 | 
			
		||||
  ASSERT(0 == pipe(sync_pipe2));
 | 
			
		||||
  ASSERT_OK(pipe(sync_pipe));
 | 
			
		||||
  ASSERT_OK(pipe(sync_pipe2));
 | 
			
		||||
 | 
			
		||||
  /* Prime the loop. */
 | 
			
		||||
  run_timer_loop_once();
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_signal_init(uv_default_loop(), &signal_handle));
 | 
			
		||||
  ASSERT(0 == uv_signal_start(&signal_handle, fork_signal_to_child_cb, SIGUSR1));
 | 
			
		||||
  ASSERT_OK(uv_signal_init(uv_default_loop(), &signal_handle));
 | 
			
		||||
  ASSERT_OK(uv_signal_start(&signal_handle,
 | 
			
		||||
                            fork_signal_to_child_cb,
 | 
			
		||||
                            SIGUSR1));
 | 
			
		||||
 | 
			
		||||
#if defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH)
 | 
			
		||||
  child_pid = -1;
 | 
			
		||||
#else
 | 
			
		||||
  child_pid = fork();
 | 
			
		||||
#endif
 | 
			
		||||
  ASSERT(child_pid != -1);
 | 
			
		||||
  ASSERT_NE(child_pid, -1);
 | 
			
		||||
 | 
			
		||||
  if (child_pid != 0) {
 | 
			
		||||
    /* parent */
 | 
			
		||||
    printf("Wating on child in parent\n");
 | 
			
		||||
    ASSERT(1 == read(sync_pipe[0], sync_buf, 1)); /* wait for child */
 | 
			
		||||
    ASSERT_EQ(1, read(sync_pipe[0], sync_buf, 1)); /* wait for child */
 | 
			
		||||
    printf("Parent killing child\n");
 | 
			
		||||
    ASSERT(0 == kill(child_pid, SIGUSR1));
 | 
			
		||||
    ASSERT_OK(kill(child_pid, SIGUSR1));
 | 
			
		||||
    /* Run the loop, make sure we don't get the signal. */
 | 
			
		||||
    printf("Running loop in parent\n");
 | 
			
		||||
    uv_unref((uv_handle_t*)&signal_handle); /* so the loop can exit;
 | 
			
		||||
                                               we *shouldn't* get any signals */
 | 
			
		||||
    run_timer_loop_once(); /* but while we share a pipe, we do, so
 | 
			
		||||
                              have something active. */
 | 
			
		||||
    ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_ONCE));
 | 
			
		||||
    ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_ONCE));
 | 
			
		||||
    printf("Signal in parent %d\n", fork_signal_cb_called);
 | 
			
		||||
    ASSERT(0 == fork_signal_cb_called);
 | 
			
		||||
    ASSERT(1 == write(sync_pipe2[1], "1", 1)); /* alert child */
 | 
			
		||||
    ASSERT_OK(fork_signal_cb_called);
 | 
			
		||||
    ASSERT_EQ(1, write(sync_pipe2[1], "1", 1)); /* alert child */
 | 
			
		||||
    printf("Waiting for child in parent\n");
 | 
			
		||||
    assert_wait_child(child_pid);
 | 
			
		||||
  } else {
 | 
			
		||||
    /* Child. Our signal handler should still be installed. */
 | 
			
		||||
    ASSERT(0 == uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    ASSERT_OK(uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    printf("Checking loop in child\n");
 | 
			
		||||
    ASSERT(0 != uv_loop_alive(uv_default_loop()));
 | 
			
		||||
    ASSERT_NE(0, uv_loop_alive(uv_default_loop()));
 | 
			
		||||
    printf("Alerting parent in child\n");
 | 
			
		||||
    ASSERT(1 == write(sync_pipe[1], "1", 1)); /* alert parent */
 | 
			
		||||
    ASSERT_EQ(1, write(sync_pipe[1], "1", 1)); /* alert parent */
 | 
			
		||||
    /* Don't run the loop. Wait for the parent to call us */
 | 
			
		||||
    printf("Waiting on parent in child\n");
 | 
			
		||||
    /* Wait for parent. read may fail if the parent tripped an ASSERT
 | 
			
		||||
@@ -356,7 +360,7 @@ TEST_IMPL(fork_signal_to_child_closed) {
 | 
			
		||||
    */
 | 
			
		||||
    r = read(sync_pipe2[0], sync_buf, 1);
 | 
			
		||||
    ASSERT(-1 <= r && r <= 1);
 | 
			
		||||
    ASSERT(0 == fork_signal_cb_called);
 | 
			
		||||
    ASSERT_OK(fork_signal_cb_called);
 | 
			
		||||
    printf("Exiting child \n");
 | 
			
		||||
    /* Note that we're deliberately not running the loop
 | 
			
		||||
     * in the child, and also not closing the loop's handles,
 | 
			
		||||
@@ -371,6 +375,47 @@ TEST_IMPL(fork_signal_to_child_closed) {
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void fork_signal_cb(uv_signal_t* h, int s) {
 | 
			
		||||
  fork_signal_cb_called = s;
 | 
			
		||||
}
 | 
			
		||||
static void empty_close_cb(uv_handle_t* h){}
 | 
			
		||||
 | 
			
		||||
TEST_IMPL(fork_close_signal_in_child) {
 | 
			
		||||
  uv_loop_t loop;
 | 
			
		||||
  uv_signal_t signal_handle;
 | 
			
		||||
  pid_t child_pid;
 | 
			
		||||
 | 
			
		||||
  ASSERT_OK(uv_loop_init(&loop));
 | 
			
		||||
  ASSERT_OK(uv_signal_init(&loop, &signal_handle));
 | 
			
		||||
  ASSERT_OK(uv_signal_start(&signal_handle, &fork_signal_cb, SIGHUP));
 | 
			
		||||
 | 
			
		||||
  ASSERT_OK(kill(getpid(), SIGHUP));
 | 
			
		||||
  child_pid = fork();
 | 
			
		||||
  ASSERT_NE(child_pid, -1);
 | 
			
		||||
  ASSERT_OK(fork_signal_cb_called);
 | 
			
		||||
 | 
			
		||||
  if (!child_pid) {
 | 
			
		||||
    uv_loop_fork(&loop);
 | 
			
		||||
    uv_close((uv_handle_t*)&signal_handle, &empty_close_cb);
 | 
			
		||||
    uv_run(&loop, UV_RUN_DEFAULT);
 | 
			
		||||
    /* Child doesn't receive the signal */
 | 
			
		||||
    ASSERT_OK(fork_signal_cb_called);
 | 
			
		||||
  } else {
 | 
			
		||||
    /* Parent. Runing once to receive the signal */
 | 
			
		||||
    uv_run(&loop, UV_RUN_ONCE);
 | 
			
		||||
    ASSERT_EQ(SIGHUP, fork_signal_cb_called);
 | 
			
		||||
 | 
			
		||||
    /* loop should stop after closing the only handle */
 | 
			
		||||
    uv_close((uv_handle_t*)&signal_handle, &empty_close_cb);
 | 
			
		||||
    ASSERT_OK(uv_run(&loop, UV_RUN_DEFAULT));
 | 
			
		||||
 | 
			
		||||
    assert_wait_child(child_pid);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(&loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void create_file(const char* name) {
 | 
			
		||||
  int r;
 | 
			
		||||
@@ -378,11 +423,11 @@ static void create_file(const char* name) {
 | 
			
		||||
  uv_fs_t req;
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_open(NULL, &req, name, O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL);
 | 
			
		||||
  ASSERT(r >= 0);
 | 
			
		||||
  ASSERT_GE(r, 0);
 | 
			
		||||
  file = r;
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
  r = uv_fs_close(NULL, &req, file, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -394,17 +439,17 @@ static void touch_file(const char* name) {
 | 
			
		||||
  uv_buf_t buf;
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_open(NULL, &req, name, O_RDWR, 0, NULL);
 | 
			
		||||
  ASSERT(r >= 0);
 | 
			
		||||
  ASSERT_GE(r, 0);
 | 
			
		||||
  file = r;
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
 | 
			
		||||
  buf = uv_buf_init("foo", 4);
 | 
			
		||||
  r = uv_fs_write(NULL, &req, file, &buf, 1, -1, NULL);
 | 
			
		||||
  ASSERT(r >= 0);
 | 
			
		||||
  ASSERT_GE(r, 0);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_close(NULL, &req, file, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -424,11 +469,11 @@ static void fs_event_cb_file_current_dir(uv_fs_event_t* handle,
 | 
			
		||||
                                         const char* filename,
 | 
			
		||||
                                         int events,
 | 
			
		||||
                                         int status) {
 | 
			
		||||
  ASSERT(fs_event_cb_called == 0);
 | 
			
		||||
  ASSERT_OK(fs_event_cb_called);
 | 
			
		||||
  ++fs_event_cb_called;
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
#if defined(__APPLE__) || defined(__linux__)
 | 
			
		||||
  ASSERT(strcmp(filename, "watch_file") == 0);
 | 
			
		||||
  ASSERT_OK(strcmp(filename, "watch_file"));
 | 
			
		||||
#else
 | 
			
		||||
  ASSERT(filename == NULL || strcmp(filename, "watch_file") == 0);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -446,28 +491,28 @@ static void assert_watch_file_current_dir(uv_loop_t* const loop, int file_or_dir
 | 
			
		||||
  create_file("watch_file");
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  /* watching a dir is the only way to get fsevents involved on apple
 | 
			
		||||
     platforms */
 | 
			
		||||
  r = uv_fs_event_start(&fs_event,
 | 
			
		||||
                        fs_event_cb_file_current_dir,
 | 
			
		||||
                        file_or_dir == 1 ? "." : "watch_file",
 | 
			
		||||
                        0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_init(loop, &timer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_start(&timer, timer_cb_touch, 100, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  ASSERT(timer_cb_touch_called == 0);
 | 
			
		||||
  ASSERT(fs_event_cb_called == 0);
 | 
			
		||||
  ASSERT_OK(timer_cb_touch_called);
 | 
			
		||||
  ASSERT_OK(fs_event_cb_called);
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(timer_cb_touch_called == 1);
 | 
			
		||||
  ASSERT(fs_event_cb_called == 1);
 | 
			
		||||
  ASSERT_EQ(1, timer_cb_touch_called);
 | 
			
		||||
  ASSERT_EQ(1, fs_event_cb_called);
 | 
			
		||||
 | 
			
		||||
  /* Cleanup */
 | 
			
		||||
  remove("watch_file");
 | 
			
		||||
@@ -492,7 +537,7 @@ static int _do_fork_fs_events_child(int file_or_dir) {
 | 
			
		||||
#else
 | 
			
		||||
  child_pid = fork();
 | 
			
		||||
#endif
 | 
			
		||||
  ASSERT(child_pid != -1);
 | 
			
		||||
  ASSERT_NE(child_pid, -1);
 | 
			
		||||
 | 
			
		||||
  if (child_pid != 0) {
 | 
			
		||||
    /* parent */
 | 
			
		||||
@@ -508,10 +553,10 @@ static int _do_fork_fs_events_child(int file_or_dir) {
 | 
			
		||||
    uv_loop_init(&loop);
 | 
			
		||||
    printf("Child first watch\n");
 | 
			
		||||
    assert_watch_file_current_dir(&loop, file_or_dir);
 | 
			
		||||
    ASSERT(0 == uv_loop_close(&loop));
 | 
			
		||||
    ASSERT_OK(uv_loop_close(&loop));
 | 
			
		||||
    printf("Child second watch default loop\n");
 | 
			
		||||
    /* Ee can watch in the default loop. */
 | 
			
		||||
    ASSERT(0 == uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    ASSERT_OK(uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    /* On some platforms (OS X), if we don't update the time now,
 | 
			
		||||
     * the timer cb fires before the event loop enters uv__io_poll,
 | 
			
		||||
     * instead of after, meaning we don't see the change! This may be
 | 
			
		||||
@@ -524,7 +569,7 @@ static int _do_fork_fs_events_child(int file_or_dir) {
 | 
			
		||||
       especially important on Apple platforms where if we're not
 | 
			
		||||
       careful trying to touch the CFRunLoop, even just to shut it
 | 
			
		||||
       down, that we allocated in the FS_TEST_DIR case would crash. */
 | 
			
		||||
    ASSERT(0 == uv_loop_close(uv_default_loop()));
 | 
			
		||||
    ASSERT_OK(uv_loop_close(uv_default_loop()));
 | 
			
		||||
 | 
			
		||||
    printf("Exiting child \n");
 | 
			
		||||
  }
 | 
			
		||||
@@ -587,40 +632,40 @@ TEST_IMPL(fork_fs_events_file_parent_child) {
 | 
			
		||||
  create_file("watch_file");
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event,
 | 
			
		||||
                        fs_event_cb_file_current_dir,
 | 
			
		||||
                        "watch_file",
 | 
			
		||||
                        0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_init(loop, &timer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
#if defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH)
 | 
			
		||||
  child_pid = -1;
 | 
			
		||||
#else
 | 
			
		||||
  child_pid = fork();
 | 
			
		||||
#endif
 | 
			
		||||
  ASSERT(child_pid != -1);
 | 
			
		||||
  ASSERT_NE(child_pid, -1);
 | 
			
		||||
  if (child_pid != 0) {
 | 
			
		||||
    /* parent */
 | 
			
		||||
    assert_wait_child(child_pid);
 | 
			
		||||
  } else {
 | 
			
		||||
    /* child */
 | 
			
		||||
    printf("Running child\n");
 | 
			
		||||
    ASSERT(0 == uv_loop_fork(loop));
 | 
			
		||||
    ASSERT_OK(uv_loop_fork(loop));
 | 
			
		||||
 | 
			
		||||
    r = uv_timer_start(&timer, timer_cb_touch, 100, 0);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
    ASSERT(timer_cb_touch_called == 0);
 | 
			
		||||
    ASSERT(fs_event_cb_called == 0);
 | 
			
		||||
    ASSERT_OK(timer_cb_touch_called);
 | 
			
		||||
    ASSERT_OK(fs_event_cb_called);
 | 
			
		||||
    printf("Running loop in child \n");
 | 
			
		||||
    uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
    ASSERT(timer_cb_touch_called == 1);
 | 
			
		||||
    ASSERT(fs_event_cb_called == 1);
 | 
			
		||||
    ASSERT_EQ(1, timer_cb_touch_called);
 | 
			
		||||
    ASSERT_EQ(1, fs_event_cb_called);
 | 
			
		||||
 | 
			
		||||
    /* Cleanup */
 | 
			
		||||
    remove("watch_file");
 | 
			
		||||
@@ -646,7 +691,7 @@ static void work_cb(uv_work_t* req) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void after_work_cb(uv_work_t* req, int status) {
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  after_work_cb_count++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -655,16 +700,16 @@ static void assert_run_work(uv_loop_t* const loop) {
 | 
			
		||||
  uv_work_t work_req;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(work_cb_count == 0);
 | 
			
		||||
  ASSERT(after_work_cb_count == 0);
 | 
			
		||||
  ASSERT_OK(work_cb_count);
 | 
			
		||||
  ASSERT_OK(after_work_cb_count);
 | 
			
		||||
  printf("Queue in %d\n", getpid());
 | 
			
		||||
  r = uv_queue_work(loop, &work_req, work_cb, after_work_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  printf("Running in %d\n", getpid());
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(work_cb_count == 1);
 | 
			
		||||
  ASSERT(after_work_cb_count == 1);
 | 
			
		||||
  ASSERT_EQ(1, work_cb_count);
 | 
			
		||||
  ASSERT_EQ(1, after_work_cb_count);
 | 
			
		||||
 | 
			
		||||
  /* cleanup  */
 | 
			
		||||
  work_cb_count = 0;
 | 
			
		||||
@@ -691,7 +736,7 @@ TEST_IMPL(fork_threadpool_queue_work_simple) {
 | 
			
		||||
#else
 | 
			
		||||
  child_pid = fork();
 | 
			
		||||
#endif
 | 
			
		||||
  ASSERT(child_pid != -1);
 | 
			
		||||
  ASSERT_NE(child_pid, -1);
 | 
			
		||||
 | 
			
		||||
  if (child_pid != 0) {
 | 
			
		||||
    /* Parent. We can still run work. */
 | 
			
		||||
@@ -706,7 +751,7 @@ TEST_IMPL(fork_threadpool_queue_work_simple) {
 | 
			
		||||
    uv_loop_close(&loop);
 | 
			
		||||
    printf("Child second watch default loop\n");
 | 
			
		||||
    /* We can work in the default loop. */
 | 
			
		||||
    ASSERT(0 == uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    ASSERT_OK(uv_loop_fork(uv_default_loop()));
 | 
			
		||||
    assert_run_work(uv_default_loop());
 | 
			
		||||
    printf("Exiting child \n");
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										66
									
								
								deps/libuv/test/test-fs-copyfile.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										66
									
								
								deps/libuv/test/test-fs-copyfile.c
									
									
									
									
										vendored
									
									
								
							@@ -48,19 +48,19 @@ static void handle_result(uv_fs_t* req) {
 | 
			
		||||
  uint64_t mode;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(req->fs_type == UV_FS_COPYFILE);
 | 
			
		||||
  ASSERT(req->result == 0);
 | 
			
		||||
  ASSERT_EQ(req->fs_type, UV_FS_COPYFILE);
 | 
			
		||||
  ASSERT_OK(req->result);
 | 
			
		||||
 | 
			
		||||
  /* Verify that the file size and mode are the same. */
 | 
			
		||||
  r = uv_fs_stat(NULL, &stat_req, req->path, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  size = stat_req.statbuf.st_size;
 | 
			
		||||
  mode = stat_req.statbuf.st_mode;
 | 
			
		||||
  uv_fs_req_cleanup(&stat_req);
 | 
			
		||||
  r = uv_fs_stat(NULL, &stat_req, dst, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(stat_req.statbuf.st_size == size);
 | 
			
		||||
  ASSERT(stat_req.statbuf.st_mode == mode);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(stat_req.statbuf.st_size, size);
 | 
			
		||||
  ASSERT_EQ(stat_req.statbuf.st_mode, mode);
 | 
			
		||||
  uv_fs_req_cleanup(&stat_req);
 | 
			
		||||
  uv_fs_req_cleanup(req);
 | 
			
		||||
  result_check_count++;
 | 
			
		||||
@@ -77,7 +77,7 @@ static void touch_file(const char* name, unsigned int size) {
 | 
			
		||||
  r = uv_fs_open(NULL, &req, name, O_WRONLY | O_CREAT | O_TRUNC,
 | 
			
		||||
                 S_IWUSR | S_IRUSR, NULL);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
  ASSERT(r >= 0);
 | 
			
		||||
  ASSERT_GE(r, 0);
 | 
			
		||||
  file = r;
 | 
			
		||||
 | 
			
		||||
  buf = uv_buf_init("a", 1);
 | 
			
		||||
@@ -86,12 +86,12 @@ static void touch_file(const char* name, unsigned int size) {
 | 
			
		||||
  for (i = 0; i < size; i++) {
 | 
			
		||||
    r = uv_fs_write(NULL, &req, file, &buf, 1, i, NULL);
 | 
			
		||||
    uv_fs_req_cleanup(&req);
 | 
			
		||||
    ASSERT(r >= 0);
 | 
			
		||||
    ASSERT_GE(r, 0);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_close(NULL, &req, file, NULL);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -105,102 +105,102 @@ TEST_IMPL(fs_copyfile) {
 | 
			
		||||
 | 
			
		||||
  /* Fails with EINVAL if bad flags are passed. */
 | 
			
		||||
  r = uv_fs_copyfile(NULL, &req, src, dst, -1, NULL);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
 | 
			
		||||
  /* Fails with ENOENT if source does not exist. */
 | 
			
		||||
  unlink(src);
 | 
			
		||||
  unlink(dst);
 | 
			
		||||
  r = uv_fs_copyfile(NULL, &req, src, dst, 0, NULL);
 | 
			
		||||
  ASSERT(req.result == UV_ENOENT);
 | 
			
		||||
  ASSERT(r == UV_ENOENT);
 | 
			
		||||
  ASSERT_EQ(req.result, UV_ENOENT);
 | 
			
		||||
  ASSERT_EQ(r, UV_ENOENT);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
  /* The destination should not exist. */
 | 
			
		||||
  r = uv_fs_stat(NULL, &req, dst, NULL);
 | 
			
		||||
  ASSERT(r != 0);
 | 
			
		||||
  ASSERT(r);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
 | 
			
		||||
  /* Succeeds if src and dst files are identical. */
 | 
			
		||||
  touch_file(src, 12);
 | 
			
		||||
  r = uv_fs_copyfile(NULL, &req, src, src, 0, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
  /* Verify that the src file did not get truncated. */
 | 
			
		||||
  r = uv_fs_stat(NULL, &req, src, NULL);
 | 
			
		||||
  ASSERT_EQ(r, 0);
 | 
			
		||||
  ASSERT_EQ(req.statbuf.st_size, 12);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(12, req.statbuf.st_size);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
  unlink(src);
 | 
			
		||||
 | 
			
		||||
  /* Copies file synchronously. Creates new file. */
 | 
			
		||||
  unlink(dst);
 | 
			
		||||
  r = uv_fs_copyfile(NULL, &req, fixture, dst, 0, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  handle_result(&req);
 | 
			
		||||
 | 
			
		||||
  /* Copies a file of size zero. */
 | 
			
		||||
  unlink(dst);
 | 
			
		||||
  touch_file(src, 0);
 | 
			
		||||
  r = uv_fs_copyfile(NULL, &req, src, dst, 0, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  handle_result(&req);
 | 
			
		||||
 | 
			
		||||
  /* Copies file synchronously. Overwrites existing file. */
 | 
			
		||||
  r = uv_fs_copyfile(NULL, &req, fixture, dst, 0, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  handle_result(&req);
 | 
			
		||||
 | 
			
		||||
  /* Fails to overwrites existing file. */
 | 
			
		||||
  ASSERT_EQ(uv_fs_chmod(NULL, &req, dst, 0644, NULL), 0);
 | 
			
		||||
  ASSERT_OK(uv_fs_chmod(NULL, &req, dst, 0644, NULL));
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
  r = uv_fs_copyfile(NULL, &req, fixture, dst, UV_FS_COPYFILE_EXCL, NULL);
 | 
			
		||||
  ASSERT(r == UV_EEXIST);
 | 
			
		||||
  ASSERT_EQ(r, UV_EEXIST);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
 | 
			
		||||
  /* Truncates when an existing destination is larger than the source file. */
 | 
			
		||||
  ASSERT_EQ(uv_fs_chmod(NULL, &req, dst, 0644, NULL), 0);
 | 
			
		||||
  ASSERT_OK(uv_fs_chmod(NULL, &req, dst, 0644, NULL));
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
  touch_file(src, 1);
 | 
			
		||||
  r = uv_fs_copyfile(NULL, &req, src, dst, 0, NULL);
 | 
			
		||||
  ASSERT_EQ(r, 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  handle_result(&req);
 | 
			
		||||
 | 
			
		||||
  /* Copies a larger file. */
 | 
			
		||||
  unlink(dst);
 | 
			
		||||
  touch_file(src, 4096 * 2);
 | 
			
		||||
  r = uv_fs_copyfile(NULL, &req, src, dst, 0, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  handle_result(&req);
 | 
			
		||||
  unlink(src);
 | 
			
		||||
 | 
			
		||||
  /* Copies file asynchronously */
 | 
			
		||||
  unlink(dst);
 | 
			
		||||
  r = uv_fs_copyfile(loop, &req, fixture, dst, 0, handle_result);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(result_check_count == 5);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(5, result_check_count);
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(result_check_count == 6);
 | 
			
		||||
  ASSERT_EQ(6, result_check_count);
 | 
			
		||||
  /* Ensure file is user-writable (not copied from src). */
 | 
			
		||||
  ASSERT_EQ(uv_fs_chmod(NULL, &req, dst, 0644, NULL), 0);
 | 
			
		||||
  ASSERT_OK(uv_fs_chmod(NULL, &req, dst, 0644, NULL));
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
 | 
			
		||||
  /* If the flags are invalid, the loop should not be kept open */
 | 
			
		||||
  unlink(dst);
 | 
			
		||||
  r = uv_fs_copyfile(loop, &req, fixture, dst, -1, fail_cb);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  /* Copies file using UV_FS_COPYFILE_FICLONE. */
 | 
			
		||||
  unlink(dst);
 | 
			
		||||
  r = uv_fs_copyfile(NULL, &req, fixture, dst, UV_FS_COPYFILE_FICLONE, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  handle_result(&req);
 | 
			
		||||
 | 
			
		||||
  /* Copies file using UV_FS_COPYFILE_FICLONE_FORCE. */
 | 
			
		||||
  unlink(dst);
 | 
			
		||||
  r = uv_fs_copyfile(NULL, &req, fixture, dst, UV_FS_COPYFILE_FICLONE_FORCE,
 | 
			
		||||
                     NULL);
 | 
			
		||||
  ASSERT(r <= 0);
 | 
			
		||||
  ASSERT_LE(r, 0);
 | 
			
		||||
 | 
			
		||||
  if (r == 0)
 | 
			
		||||
    handle_result(&req);
 | 
			
		||||
@@ -213,8 +213,8 @@ TEST_IMPL(fs_copyfile) {
 | 
			
		||||
  r = uv_fs_copyfile(NULL, &req, fixture, dst, 0, NULL);
 | 
			
		||||
  /* On IBMi PASE, qsecofr users can overwrite read-only files */
 | 
			
		||||
# ifndef __PASE__
 | 
			
		||||
  ASSERT(req.result == UV_EACCES);
 | 
			
		||||
  ASSERT(r == UV_EACCES);
 | 
			
		||||
  ASSERT_EQ(req.result, UV_EACCES);
 | 
			
		||||
  ASSERT_EQ(r, UV_EACCES);
 | 
			
		||||
# endif
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										355
									
								
								deps/libuv/test/test-fs-event.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										355
									
								
								deps/libuv/test/test-fs-event.c
									
									
									
									
										vendored
									
									
								
							@@ -81,11 +81,11 @@ static void create_file(const char* name) {
 | 
			
		||||
  uv_fs_t req;
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_open(NULL, &req, name, O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL);
 | 
			
		||||
  ASSERT(r >= 0);
 | 
			
		||||
  ASSERT_GE(r, 0);
 | 
			
		||||
  file = r;
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
  r = uv_fs_close(NULL, &req, file, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -96,17 +96,17 @@ static void touch_file(const char* name) {
 | 
			
		||||
  uv_buf_t buf;
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_open(NULL, &req, name, O_RDWR, 0, NULL);
 | 
			
		||||
  ASSERT(r >= 0);
 | 
			
		||||
  ASSERT_GE(r, 0);
 | 
			
		||||
  file = r;
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
 | 
			
		||||
  buf = uv_buf_init("foo", 4);
 | 
			
		||||
  r = uv_fs_write(NULL, &req, file, &buf, 1, -1, NULL);
 | 
			
		||||
  ASSERT(r >= 0);
 | 
			
		||||
  ASSERT_GE(r, 0);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_close(NULL, &req, file, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_fs_req_cleanup(&req);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -125,15 +125,15 @@ static void fail_cb(uv_fs_event_t* handle,
 | 
			
		||||
static void fs_event_cb_dir(uv_fs_event_t* handle, const char* filename,
 | 
			
		||||
  int events, int status) {
 | 
			
		||||
  ++fs_event_cb_called;
 | 
			
		||||
  ASSERT(handle == &fs_event);
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT(events == UV_CHANGE);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, &fs_event);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  ASSERT_EQ(events, UV_CHANGE);
 | 
			
		||||
  #if defined(__APPLE__) || defined(_WIN32) || defined(__linux__)
 | 
			
		||||
  ASSERT(strcmp(filename, "file1") == 0);
 | 
			
		||||
  ASSERT_OK(strcmp(filename, "file1"));
 | 
			
		||||
  #else
 | 
			
		||||
  ASSERT(filename == NULL || strcmp(filename, "file1") == 0);
 | 
			
		||||
  #endif
 | 
			
		||||
  ASSERT(0 == uv_fs_event_stop(handle));
 | 
			
		||||
  ASSERT_OK(uv_fs_event_stop(handle));
 | 
			
		||||
  uv_close((uv_handle_t*)handle, close_cb);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -148,7 +148,7 @@ static const char* fs_event_get_filename(int i) {
 | 
			
		||||
 | 
			
		||||
static void fs_event_create_files(uv_timer_t* handle) {
 | 
			
		||||
  /* Make sure we're not attempting to create files we do not intend */
 | 
			
		||||
  ASSERT(fs_event_created < fs_event_file_count);
 | 
			
		||||
  ASSERT_LT(fs_event_created, fs_event_file_count);
 | 
			
		||||
 | 
			
		||||
  /* Create the file */
 | 
			
		||||
  create_file(fs_event_get_filename(fs_event_created));
 | 
			
		||||
@@ -156,7 +156,7 @@ static void fs_event_create_files(uv_timer_t* handle) {
 | 
			
		||||
  if (++fs_event_created < fs_event_file_count) {
 | 
			
		||||
    /* Create another file on a different event loop tick.  We do it this way
 | 
			
		||||
     * to avoid fs events coalescing into one fs event. */
 | 
			
		||||
    ASSERT_EQ(0, uv_timer_start(&timer, fs_event_create_files, 100, 0));
 | 
			
		||||
    ASSERT_OK(uv_timer_start(&timer, fs_event_create_files, 100, 0));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -170,19 +170,19 @@ static void fs_event_unlink_files(uv_timer_t* handle) {
 | 
			
		||||
    for (i = 0; i < 16; i++) {
 | 
			
		||||
      r = remove(fs_event_get_filename(i));
 | 
			
		||||
      if (handle != NULL)
 | 
			
		||||
        ASSERT(r == 0);
 | 
			
		||||
        ASSERT_OK(r);
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    /* Make sure we're not attempting to remove files we do not intend */
 | 
			
		||||
    ASSERT(fs_event_removed < fs_event_file_count);
 | 
			
		||||
    ASSERT_LT(fs_event_removed, fs_event_file_count);
 | 
			
		||||
 | 
			
		||||
    /* Remove the file */
 | 
			
		||||
    ASSERT(0 == remove(fs_event_get_filename(fs_event_removed)));
 | 
			
		||||
    ASSERT_OK(remove(fs_event_get_filename(fs_event_removed)));
 | 
			
		||||
 | 
			
		||||
    if (++fs_event_removed < fs_event_file_count) {
 | 
			
		||||
      /* Remove another file on a different event loop tick.  We do it this way
 | 
			
		||||
       * to avoid fs events coalescing into one fs event. */
 | 
			
		||||
      ASSERT(0 == uv_timer_start(&timer, fs_event_unlink_files, 1, 0));
 | 
			
		||||
      ASSERT_OK(uv_timer_start(&timer, fs_event_unlink_files, 1, 0));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -192,19 +192,19 @@ static void fs_event_cb_dir_multi_file(uv_fs_event_t* handle,
 | 
			
		||||
                                       int events,
 | 
			
		||||
                                       int status) {
 | 
			
		||||
  fs_event_cb_called++;
 | 
			
		||||
  ASSERT(handle == &fs_event);
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, &fs_event);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  ASSERT(events == UV_CHANGE || events == UV_RENAME);
 | 
			
		||||
  #if defined(__APPLE__) || defined(_WIN32) || defined(__linux__)
 | 
			
		||||
  ASSERT(strncmp(filename, file_prefix, sizeof(file_prefix) - 1) == 0);
 | 
			
		||||
  ASSERT_OK(strncmp(filename, file_prefix, sizeof(file_prefix) - 1));
 | 
			
		||||
  #else
 | 
			
		||||
  ASSERT(filename == NULL ||
 | 
			
		||||
         strncmp(filename, file_prefix, sizeof(file_prefix) - 1) == 0);
 | 
			
		||||
  ASSERT_NE(filename == NULL ||
 | 
			
		||||
            strncmp(filename, file_prefix, sizeof(file_prefix) - 1) == 0, 0);
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  if (fs_event_created + fs_event_removed == fs_event_file_count) {
 | 
			
		||||
    /* Once we've processed all create events, delete all files */
 | 
			
		||||
    ASSERT(0 == uv_timer_start(&timer, fs_event_unlink_files, 1, 0));
 | 
			
		||||
    ASSERT_OK(uv_timer_start(&timer, fs_event_unlink_files, 1, 0));
 | 
			
		||||
  } else if (fs_event_cb_called == 2 * fs_event_file_count) {
 | 
			
		||||
    /* Once we've processed all create and delete events, stop watching */
 | 
			
		||||
    uv_close((uv_handle_t*) &timer, close_cb);
 | 
			
		||||
@@ -224,7 +224,7 @@ static const char* fs_event_get_filename_in_subdir(int i) {
 | 
			
		||||
 | 
			
		||||
static void fs_event_create_files_in_subdir(uv_timer_t* handle) {
 | 
			
		||||
  /* Make sure we're not attempting to create files we do not intend */
 | 
			
		||||
  ASSERT(fs_event_created < fs_event_file_count);
 | 
			
		||||
  ASSERT_LT(fs_event_created, fs_event_file_count);
 | 
			
		||||
 | 
			
		||||
  /* Create the file */
 | 
			
		||||
  create_file(fs_event_get_filename_in_subdir(fs_event_created));
 | 
			
		||||
@@ -232,8 +232,7 @@ static void fs_event_create_files_in_subdir(uv_timer_t* handle) {
 | 
			
		||||
  if (++fs_event_created < fs_event_file_count) {
 | 
			
		||||
    /* Create another file on a different event loop tick.  We do it this way
 | 
			
		||||
     * to avoid fs events coalescing into one fs event. */
 | 
			
		||||
    ASSERT_EQ(0,
 | 
			
		||||
              uv_timer_start(&timer, fs_event_create_files_in_subdir, 100, 0));
 | 
			
		||||
    ASSERT_OK(uv_timer_start(&timer, fs_event_create_files_in_subdir, 100, 0));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -247,19 +246,22 @@ static void fs_event_unlink_files_in_subdir(uv_timer_t* handle) {
 | 
			
		||||
    for (i = 0; i < 16; i++) {
 | 
			
		||||
      r = remove(fs_event_get_filename_in_subdir(i));
 | 
			
		||||
      if (handle != NULL)
 | 
			
		||||
        ASSERT(r == 0);
 | 
			
		||||
        ASSERT_OK(r);
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    /* Make sure we're not attempting to remove files we do not intend */
 | 
			
		||||
    ASSERT(fs_event_removed < fs_event_file_count);
 | 
			
		||||
    ASSERT_LT(fs_event_removed, fs_event_file_count);
 | 
			
		||||
 | 
			
		||||
    /* Remove the file */
 | 
			
		||||
    ASSERT(0 == remove(fs_event_get_filename_in_subdir(fs_event_removed)));
 | 
			
		||||
    ASSERT_OK(remove(fs_event_get_filename_in_subdir(fs_event_removed)));
 | 
			
		||||
 | 
			
		||||
    if (++fs_event_removed < fs_event_file_count) {
 | 
			
		||||
      /* Remove another file on a different event loop tick.  We do it this way
 | 
			
		||||
       * to avoid fs events coalescing into one fs event. */
 | 
			
		||||
      ASSERT(0 == uv_timer_start(&timer, fs_event_unlink_files_in_subdir, 1, 0));
 | 
			
		||||
      ASSERT_OK(uv_timer_start(&timer,
 | 
			
		||||
                               fs_event_unlink_files_in_subdir,
 | 
			
		||||
                               1,
 | 
			
		||||
                               0));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -283,27 +285,30 @@ static void fs_event_cb_dir_multi_file_in_subdir(uv_fs_event_t* handle,
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  fs_multievent_cb_called++;
 | 
			
		||||
  ASSERT(handle == &fs_event);
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, &fs_event);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  ASSERT(events == UV_CHANGE || events == UV_RENAME);
 | 
			
		||||
  #if defined(__APPLE__) || defined(_WIN32) || defined(__linux__)
 | 
			
		||||
  ASSERT(strncmp(filename,
 | 
			
		||||
                 file_prefix_in_subdir,
 | 
			
		||||
                 sizeof(file_prefix_in_subdir) - 1) == 0);
 | 
			
		||||
  ASSERT_OK(strncmp(filename,
 | 
			
		||||
                    file_prefix_in_subdir,
 | 
			
		||||
                    sizeof(file_prefix_in_subdir) - 1));
 | 
			
		||||
  #else
 | 
			
		||||
  ASSERT(filename == NULL ||
 | 
			
		||||
         strncmp(filename,
 | 
			
		||||
                 file_prefix_in_subdir,
 | 
			
		||||
                 sizeof(file_prefix_in_subdir) - 1) == 0);
 | 
			
		||||
  ASSERT_NE(filename == NULL ||
 | 
			
		||||
            strncmp(filename,
 | 
			
		||||
                    file_prefix_in_subdir,
 | 
			
		||||
                    sizeof(file_prefix_in_subdir) - 1) == 0, 0);
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  if (fs_event_created == fs_event_file_count &&
 | 
			
		||||
      fs_multievent_cb_called == fs_event_created) {
 | 
			
		||||
    /* Once we've processed all create events, delete all files */
 | 
			
		||||
    ASSERT(0 == uv_timer_start(&timer, fs_event_unlink_files_in_subdir, 1, 0));
 | 
			
		||||
    ASSERT_OK(uv_timer_start(&timer,
 | 
			
		||||
                             fs_event_unlink_files_in_subdir,
 | 
			
		||||
                             1,
 | 
			
		||||
                             0));
 | 
			
		||||
  } else if (fs_multievent_cb_called == 2 * fs_event_file_count) {
 | 
			
		||||
    /* Once we've processed all create and delete events, stop watching */
 | 
			
		||||
    ASSERT(fs_event_removed == fs_event_file_count);
 | 
			
		||||
    ASSERT_EQ(fs_event_removed, fs_event_file_count);
 | 
			
		||||
    uv_close((uv_handle_t*) &timer, close_cb);
 | 
			
		||||
    uv_close((uv_handle_t*) handle, close_cb);
 | 
			
		||||
  }
 | 
			
		||||
@@ -313,15 +318,15 @@ static void fs_event_cb_dir_multi_file_in_subdir(uv_fs_event_t* handle,
 | 
			
		||||
static void fs_event_cb_file(uv_fs_event_t* handle, const char* filename,
 | 
			
		||||
  int events, int status) {
 | 
			
		||||
  ++fs_event_cb_called;
 | 
			
		||||
  ASSERT(handle == &fs_event);
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT(events == UV_CHANGE);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, &fs_event);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  ASSERT_EQ(events, UV_CHANGE);
 | 
			
		||||
  #if defined(__APPLE__) || defined(_WIN32) || defined(__linux__)
 | 
			
		||||
  ASSERT(strcmp(filename, "file2") == 0);
 | 
			
		||||
  ASSERT_OK(strcmp(filename, "file2"));
 | 
			
		||||
  #else
 | 
			
		||||
  ASSERT(filename == NULL || strcmp(filename, "file2") == 0);
 | 
			
		||||
  #endif
 | 
			
		||||
  ASSERT(0 == uv_fs_event_stop(handle));
 | 
			
		||||
  ASSERT_OK(uv_fs_event_stop(handle));
 | 
			
		||||
  uv_close((uv_handle_t*)handle, close_cb);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -329,11 +334,11 @@ static void fs_event_cb_file_current_dir(uv_fs_event_t* handle,
 | 
			
		||||
  const char* filename, int events, int status) {
 | 
			
		||||
  ++fs_event_cb_called;
 | 
			
		||||
 | 
			
		||||
  ASSERT(handle == &fs_event);
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT(events == UV_CHANGE);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, &fs_event);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  ASSERT_EQ(events, UV_CHANGE);
 | 
			
		||||
  #if defined(__APPLE__) || defined(_WIN32) || defined(__linux__)
 | 
			
		||||
  ASSERT(strcmp(filename, "watch_file") == 0);
 | 
			
		||||
  ASSERT_OK(strcmp(filename, "watch_file"));
 | 
			
		||||
  #else
 | 
			
		||||
  ASSERT(filename == NULL || strcmp(filename, "watch_file") == 0);
 | 
			
		||||
  #endif
 | 
			
		||||
@@ -366,7 +371,7 @@ static void timer_cb_exact(uv_timer_t* handle) {
 | 
			
		||||
  } else {
 | 
			
		||||
    uv_close((uv_handle_t*)handle, NULL);
 | 
			
		||||
    r = uv_fs_event_stop(&fs_event);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
    uv_close((uv_handle_t*) &fs_event, NULL);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -384,9 +389,9 @@ static void fs_event_cb_close(uv_fs_event_t* handle,
 | 
			
		||||
                              const char* filename,
 | 
			
		||||
                              int events,
 | 
			
		||||
                              int status) {
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
 | 
			
		||||
  ASSERT(fs_event_cb_called < 3);
 | 
			
		||||
  ASSERT_LT(fs_event_cb_called, 3);
 | 
			
		||||
  ++fs_event_cb_called;
 | 
			
		||||
 | 
			
		||||
  if (fs_event_cb_called == 3) {
 | 
			
		||||
@@ -400,6 +405,8 @@ TEST_IMPL(fs_event_watch_dir) {
 | 
			
		||||
  RETURN_SKIP(NO_FS_EVENTS);
 | 
			
		||||
#elif defined(__MVS__)
 | 
			
		||||
  RETURN_SKIP("Directory watching not supported on this platform.");
 | 
			
		||||
#elif defined(__APPLE__) && defined(__TSAN__)
 | 
			
		||||
  RETURN_SKIP("Times out under TSAN.");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  uv_loop_t* loop = uv_default_loop();
 | 
			
		||||
@@ -413,18 +420,18 @@ TEST_IMPL(fs_event_watch_dir) {
 | 
			
		||||
  create_dir("watch_dir");
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event, fs_event_cb_dir_multi_file, "watch_dir", 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_timer_init(loop, &timer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_timer_start(&timer, fs_event_create_files, 100, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(fs_event_cb_called == fs_event_created + fs_event_removed);
 | 
			
		||||
  ASSERT(close_cb_called == 2);
 | 
			
		||||
  ASSERT_EQ(fs_event_cb_called, fs_event_created + fs_event_removed);
 | 
			
		||||
  ASSERT_EQ(2, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  /* Cleanup */
 | 
			
		||||
  fs_event_unlink_files(NULL);
 | 
			
		||||
@@ -438,7 +445,9 @@ TEST_IMPL(fs_event_watch_dir) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST_IMPL(fs_event_watch_dir_recursive) {
 | 
			
		||||
#if defined(__APPLE__) || defined(_WIN32)
 | 
			
		||||
#if defined(__APPLE__) && defined(__TSAN__)
 | 
			
		||||
  RETURN_SKIP("Times out under TSAN.");
 | 
			
		||||
#elif defined(__APPLE__) || defined(_WIN32)
 | 
			
		||||
  uv_loop_t* loop;
 | 
			
		||||
  int r;
 | 
			
		||||
  uv_fs_event_t fs_event_root;
 | 
			
		||||
@@ -454,27 +463,27 @@ TEST_IMPL(fs_event_watch_dir_recursive) {
 | 
			
		||||
  create_dir("watch_dir/subdir");
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event,
 | 
			
		||||
                        fs_event_cb_dir_multi_file_in_subdir,
 | 
			
		||||
                        "watch_dir",
 | 
			
		||||
                        UV_FS_EVENT_RECURSIVE);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_timer_init(loop, &timer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_timer_start(&timer, fs_event_create_files_in_subdir, 100, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
#ifndef _WIN32
 | 
			
		||||
  /* Also try to watch the root directory.
 | 
			
		||||
   * This will be noisier, so we're just checking for any couple events to happen. */
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event_root);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event_root,
 | 
			
		||||
                        fs_event_cb_close,
 | 
			
		||||
                        "/",
 | 
			
		||||
                        UV_FS_EVENT_RECURSIVE);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
#else
 | 
			
		||||
  fs_event_cb_called += 3;
 | 
			
		||||
  close_cb_called += 1;
 | 
			
		||||
@@ -483,9 +492,9 @@ TEST_IMPL(fs_event_watch_dir_recursive) {
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(fs_multievent_cb_called == fs_event_created + fs_event_removed);
 | 
			
		||||
  ASSERT(fs_event_cb_called == 3);
 | 
			
		||||
  ASSERT(close_cb_called == 3);
 | 
			
		||||
  ASSERT_EQ(fs_multievent_cb_called, fs_event_created + fs_event_removed);
 | 
			
		||||
  ASSERT_EQ(3, fs_event_cb_called);
 | 
			
		||||
  ASSERT_EQ(3, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  /* Cleanup */
 | 
			
		||||
  fs_event_unlink_files_in_subdir(NULL);
 | 
			
		||||
@@ -522,19 +531,19 @@ TEST_IMPL(fs_event_watch_dir_short_path) {
 | 
			
		||||
  has_shortnames = uv_fs_stat(NULL, &req, "watch_~1", NULL) != UV_ENOENT;
 | 
			
		||||
  if (has_shortnames) {
 | 
			
		||||
    r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
    r = uv_fs_event_start(&fs_event, fs_event_cb_dir, "watch_~1", 0);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
    r = uv_timer_init(loop, &timer);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
    r = uv_timer_start(&timer, timer_cb_file, 100, 0);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
    uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
    ASSERT(fs_event_cb_called == 1);
 | 
			
		||||
    ASSERT(timer_cb_called == 1);
 | 
			
		||||
    ASSERT(close_cb_called == 1);
 | 
			
		||||
    ASSERT_EQ(1, fs_event_cb_called);
 | 
			
		||||
    ASSERT_EQ(1, timer_cb_called);
 | 
			
		||||
    ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Cleanup */
 | 
			
		||||
@@ -568,19 +577,19 @@ TEST_IMPL(fs_event_watch_file) {
 | 
			
		||||
  create_file("watch_dir/file2");
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event, fs_event_cb_file, "watch_dir/file2", 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_timer_init(loop, &timer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_timer_start(&timer, timer_cb_file, 100, 100);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(fs_event_cb_called == 1);
 | 
			
		||||
  ASSERT(timer_cb_called == 2);
 | 
			
		||||
  ASSERT(close_cb_called == 2);
 | 
			
		||||
  ASSERT_EQ(1, fs_event_cb_called);
 | 
			
		||||
  ASSERT_EQ(2, timer_cb_called);
 | 
			
		||||
  ASSERT_EQ(2, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  /* Cleanup */
 | 
			
		||||
  remove("watch_dir/file2");
 | 
			
		||||
@@ -624,16 +633,16 @@ TEST_IMPL(fs_event_watch_file_exact_path) {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event, fs_event_fail, "watch_dir/file.jsx", 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_timer_init(loop, &timer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_timer_start(&timer, timer_cb_exact, 100, 100);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(timer_cb_exact_called == 2);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(2, timer_cb_exact_called);
 | 
			
		||||
 | 
			
		||||
  /* Cleanup */
 | 
			
		||||
  remove("watch_dir/file.js");
 | 
			
		||||
@@ -656,13 +665,13 @@ TEST_IMPL(fs_event_watch_file_twice) {
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
  timer.data = watchers;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_fs_event_init(loop, watchers + 0));
 | 
			
		||||
  ASSERT(0 == uv_fs_event_start(watchers + 0, fail_cb, path, 0));
 | 
			
		||||
  ASSERT(0 == uv_fs_event_init(loop, watchers + 1));
 | 
			
		||||
  ASSERT(0 == uv_fs_event_start(watchers + 1, fail_cb, path, 0));
 | 
			
		||||
  ASSERT(0 == uv_timer_init(loop, &timer));
 | 
			
		||||
  ASSERT(0 == uv_timer_start(&timer, timer_cb_watch_twice, 10, 0));
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_fs_event_init(loop, watchers + 0));
 | 
			
		||||
  ASSERT_OK(uv_fs_event_start(watchers + 0, fail_cb, path, 0));
 | 
			
		||||
  ASSERT_OK(uv_fs_event_init(loop, watchers + 1));
 | 
			
		||||
  ASSERT_OK(uv_fs_event_start(watchers + 1, fail_cb, path, 0));
 | 
			
		||||
  ASSERT_OK(uv_timer_init(loop, &timer));
 | 
			
		||||
  ASSERT_OK(uv_timer_start(&timer, timer_cb_watch_twice, 10, 0));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -690,31 +699,31 @@ TEST_IMPL(fs_event_watch_file_current_dir) {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event,
 | 
			
		||||
                        fs_event_cb_file_current_dir,
 | 
			
		||||
                        "watch_file",
 | 
			
		||||
                        0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_init(loop, &timer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  timer.data = "watch_file";
 | 
			
		||||
  r = uv_timer_start(&timer, timer_cb_touch, 1100, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  ASSERT(timer_cb_touch_called == 0);
 | 
			
		||||
  ASSERT(fs_event_cb_called == 0);
 | 
			
		||||
  ASSERT(close_cb_called == 0);
 | 
			
		||||
  ASSERT_OK(timer_cb_touch_called);
 | 
			
		||||
  ASSERT_OK(fs_event_cb_called);
 | 
			
		||||
  ASSERT_OK(close_cb_called);
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(timer_cb_touch_called == 1);
 | 
			
		||||
  ASSERT_EQ(1, timer_cb_touch_called);
 | 
			
		||||
  /* FSEvents on macOS sometimes sends one change event, sometimes two. */
 | 
			
		||||
  ASSERT_NE(0, fs_event_cb_called);
 | 
			
		||||
  ASSERT(close_cb_called == 1);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  /* Cleanup */
 | 
			
		||||
  remove("watch_file");
 | 
			
		||||
@@ -737,11 +746,11 @@ TEST_IMPL(fs_event_watch_file_root_dir) {
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event, fail_cb, path, 0);
 | 
			
		||||
  if (r == UV_ENOENT)
 | 
			
		||||
    RETURN_SKIP("bootsect.bak doesn't exist in system root.\n");
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_close((uv_handle_t*) &fs_event, NULL);
 | 
			
		||||
 | 
			
		||||
@@ -765,20 +774,20 @@ TEST_IMPL(fs_event_no_callback_after_close) {
 | 
			
		||||
  create_file("watch_dir/file1");
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event,
 | 
			
		||||
                        fs_event_cb_file,
 | 
			
		||||
                        "watch_dir/file1",
 | 
			
		||||
                        0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  uv_close((uv_handle_t*)&fs_event, close_cb);
 | 
			
		||||
  touch_file("watch_dir/file1");
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(fs_event_cb_called == 0);
 | 
			
		||||
  ASSERT(close_cb_called == 1);
 | 
			
		||||
  ASSERT_OK(fs_event_cb_called);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  /* Cleanup */
 | 
			
		||||
  remove("watch_dir/file1");
 | 
			
		||||
@@ -803,19 +812,19 @@ TEST_IMPL(fs_event_no_callback_on_close) {
 | 
			
		||||
  create_file("watch_dir/file1");
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event,
 | 
			
		||||
                        fs_event_cb_file,
 | 
			
		||||
                        "watch_dir/file1",
 | 
			
		||||
                        0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_close((uv_handle_t*)&fs_event, close_cb);
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(fs_event_cb_called == 0);
 | 
			
		||||
  ASSERT(close_cb_called == 1);
 | 
			
		||||
  ASSERT_OK(fs_event_cb_called);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  /* Cleanup */
 | 
			
		||||
  remove("watch_dir/file1");
 | 
			
		||||
@@ -830,9 +839,9 @@ static void timer_cb(uv_timer_t* handle) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(handle->loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event, fs_event_fail, ".", 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_close((uv_handle_t*)&fs_event, close_cb);
 | 
			
		||||
  uv_close((uv_handle_t*)handle, close_cb);
 | 
			
		||||
@@ -850,14 +859,14 @@ TEST_IMPL(fs_event_immediate_close) {
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_init(loop, &timer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_start(&timer, timer_cb, 1, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(close_cb_called == 2);
 | 
			
		||||
  ASSERT_EQ(2, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -877,9 +886,9 @@ TEST_IMPL(fs_event_close_with_pending_event) {
 | 
			
		||||
  create_file("watch_dir/file");
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event, fs_event_fail, "watch_dir", 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  /* Generate an fs event. */
 | 
			
		||||
  touch_file("watch_dir/file");
 | 
			
		||||
@@ -888,7 +897,7 @@ TEST_IMPL(fs_event_close_with_pending_event) {
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(close_cb_called == 1);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  /* Clean up */
 | 
			
		||||
  remove("watch_dir/file");
 | 
			
		||||
@@ -911,9 +920,9 @@ TEST_IMPL(fs_event_close_with_pending_delete_event) {
 | 
			
		||||
  create_file("watch_dir/file");
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event, fs_event_fail, "watch_dir/file", 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  /* Generate an fs event. */
 | 
			
		||||
  remove("watch_dir/file");
 | 
			
		||||
@@ -927,7 +936,7 @@ TEST_IMPL(fs_event_close_with_pending_delete_event) {
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(close_cb_called == 1);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  /* Clean up */
 | 
			
		||||
  remove("watch_dir/");
 | 
			
		||||
@@ -941,6 +950,8 @@ TEST_IMPL(fs_event_close_in_callback) {
 | 
			
		||||
  RETURN_SKIP(NO_FS_EVENTS);
 | 
			
		||||
#elif defined(__MVS__)
 | 
			
		||||
  RETURN_SKIP("Directory watching not supported on this platform.");
 | 
			
		||||
#elif defined(__APPLE__) && defined(__TSAN__)
 | 
			
		||||
  RETURN_SKIP("Times out under TSAN.");
 | 
			
		||||
#endif
 | 
			
		||||
  uv_loop_t* loop;
 | 
			
		||||
  int r;
 | 
			
		||||
@@ -951,14 +962,14 @@ TEST_IMPL(fs_event_close_in_callback) {
 | 
			
		||||
  create_dir("watch_dir");
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event, fs_event_cb_close, "watch_dir", 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_init(loop, &timer);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_timer_start(&timer, fs_event_create_files, 100, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
@@ -966,8 +977,8 @@ TEST_IMPL(fs_event_close_in_callback) {
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_ONCE);
 | 
			
		||||
 | 
			
		||||
  ASSERT(close_cb_called == 2);
 | 
			
		||||
  ASSERT(fs_event_cb_called == 3);
 | 
			
		||||
  ASSERT_EQ(2, close_cb_called);
 | 
			
		||||
  ASSERT_EQ(3, fs_event_cb_called);
 | 
			
		||||
 | 
			
		||||
  /* Clean up */
 | 
			
		||||
  fs_event_unlink_files(NULL);
 | 
			
		||||
@@ -991,21 +1002,21 @@ TEST_IMPL(fs_event_start_and_close) {
 | 
			
		||||
  create_dir("watch_dir");
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event1);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event1, fs_event_cb_dir, "watch_dir", 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event2);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event2, fs_event_cb_dir, "watch_dir", 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_close((uv_handle_t*) &fs_event2, close_cb);
 | 
			
		||||
  uv_close((uv_handle_t*) &fs_event1, close_cb);
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(close_cb_called == 2);
 | 
			
		||||
  ASSERT_EQ(2, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  remove("watch_dir/");
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
@@ -1035,28 +1046,28 @@ TEST_IMPL(fs_event_getpath) {
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < ARRAY_SIZE(watch_dir); i++) {
 | 
			
		||||
    r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
    len = sizeof buf;
 | 
			
		||||
    r = uv_fs_event_getpath(&fs_event, buf, &len);
 | 
			
		||||
    ASSERT(r == UV_EINVAL);
 | 
			
		||||
    ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
    r = uv_fs_event_start(&fs_event, fail_cb, watch_dir[i], 0);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
    len = 0;
 | 
			
		||||
    r = uv_fs_event_getpath(&fs_event, buf, &len);
 | 
			
		||||
    ASSERT(r == UV_ENOBUFS);
 | 
			
		||||
    ASSERT(len < sizeof buf); /* sanity check */
 | 
			
		||||
    ASSERT(len == strlen(watch_dir[i]) + 1);
 | 
			
		||||
    ASSERT_EQ(r, UV_ENOBUFS);
 | 
			
		||||
    ASSERT_LT(len, sizeof buf); /* sanity check */
 | 
			
		||||
    ASSERT_EQ(len, strlen(watch_dir[i]) + 1);
 | 
			
		||||
    r = uv_fs_event_getpath(&fs_event, buf, &len);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT(len == strlen(watch_dir[i]));
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
    ASSERT_EQ(len, strlen(watch_dir[i]));
 | 
			
		||||
    ASSERT(strcmp(buf, watch_dir[i]) == 0);
 | 
			
		||||
    r = uv_fs_event_stop(&fs_event);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
    uv_close((uv_handle_t*) &fs_event, close_cb);
 | 
			
		||||
 | 
			
		||||
    uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
    ASSERT(close_cb_called == 1);
 | 
			
		||||
    ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
    close_cb_called = 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -1108,43 +1119,43 @@ TEST_IMPL(fs_event_error_reporting) {
 | 
			
		||||
   */
 | 
			
		||||
  for (i = 0; i < ARRAY_SIZE(loops); i++) {
 | 
			
		||||
    loop = &loops[i];
 | 
			
		||||
    ASSERT(0 == uv_loop_init(loop));
 | 
			
		||||
    ASSERT_OK(uv_loop_init(loop));
 | 
			
		||||
    event = &events[i];
 | 
			
		||||
 | 
			
		||||
    timer_cb_called = 0;
 | 
			
		||||
    close_cb_called = 0;
 | 
			
		||||
    ASSERT(0 == uv_fs_event_init(loop, event));
 | 
			
		||||
    ASSERT(0 == uv_fs_event_start(event,
 | 
			
		||||
                                  fs_event_error_report_cb,
 | 
			
		||||
                                  "watch_dir",
 | 
			
		||||
                                  0));
 | 
			
		||||
    ASSERT_OK(uv_fs_event_init(loop, event));
 | 
			
		||||
    ASSERT_OK(uv_fs_event_start(event,
 | 
			
		||||
                                fs_event_error_report_cb,
 | 
			
		||||
                                "watch_dir",
 | 
			
		||||
                                0));
 | 
			
		||||
    uv_unref((uv_handle_t*) event);
 | 
			
		||||
 | 
			
		||||
    /* Let loop run for some time */
 | 
			
		||||
    ASSERT(0 == uv_timer_init(loop, &timer));
 | 
			
		||||
    ASSERT(0 == uv_timer_start(&timer, timer_cb_nop, 2, 0));
 | 
			
		||||
    ASSERT_OK(uv_timer_init(loop, &timer));
 | 
			
		||||
    ASSERT_OK(uv_timer_start(&timer, timer_cb_nop, 2, 0));
 | 
			
		||||
    uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
    ASSERT(1 == timer_cb_called);
 | 
			
		||||
    ASSERT(1 == close_cb_called);
 | 
			
		||||
    ASSERT_EQ(1, timer_cb_called);
 | 
			
		||||
    ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
    if (fs_event_error_reported != 0)
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* At least one loop should fail */
 | 
			
		||||
  ASSERT(fs_event_error_reported == UV_EMFILE);
 | 
			
		||||
  ASSERT_EQ(fs_event_error_reported, UV_EMFILE);
 | 
			
		||||
 | 
			
		||||
  /* Stop and close all events, and destroy loops */
 | 
			
		||||
  do {
 | 
			
		||||
    loop = &loops[i];
 | 
			
		||||
    event = &events[i];
 | 
			
		||||
 | 
			
		||||
    ASSERT(0 == uv_fs_event_stop(event));
 | 
			
		||||
    ASSERT_OK(uv_fs_event_stop(event));
 | 
			
		||||
    uv_ref((uv_handle_t*) event);
 | 
			
		||||
    uv_close((uv_handle_t*) event, fs_event_error_report_close_cb);
 | 
			
		||||
 | 
			
		||||
    close_cb_called = 0;
 | 
			
		||||
    uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
    ASSERT(close_cb_called == 1);
 | 
			
		||||
    ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
    uv_loop_close(loop);
 | 
			
		||||
  } while (i-- != 0);
 | 
			
		||||
@@ -1175,13 +1186,13 @@ TEST_IMPL(fs_event_watch_invalid_path) {
 | 
			
		||||
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
  r = uv_fs_event_init(loop, &fs_event);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fs_event_start(&fs_event, fs_event_cb_file, "<:;", 0);
 | 
			
		||||
  ASSERT(r != 0);
 | 
			
		||||
  ASSERT(uv_is_active((uv_handle_t*) &fs_event) == 0);
 | 
			
		||||
  ASSERT(r);
 | 
			
		||||
  ASSERT_OK(uv_is_active((uv_handle_t*) &fs_event));
 | 
			
		||||
  r = uv_fs_event_start(&fs_event, fs_event_cb_file, "", 0);
 | 
			
		||||
  ASSERT(r != 0);
 | 
			
		||||
  ASSERT(uv_is_active((uv_handle_t*) &fs_event) == 0);
 | 
			
		||||
  ASSERT(r);
 | 
			
		||||
  ASSERT_OK(uv_is_active((uv_handle_t*) &fs_event));
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -1206,24 +1217,24 @@ TEST_IMPL(fs_event_stop_in_cb) {
 | 
			
		||||
  remove(path);
 | 
			
		||||
  create_file(path);
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_fs_event_init(uv_default_loop(), &fs));
 | 
			
		||||
  ASSERT_EQ(0, uv_fs_event_start(&fs, fs_event_cb_stop, path, 0));
 | 
			
		||||
  ASSERT_OK(uv_fs_event_init(uv_default_loop(), &fs));
 | 
			
		||||
  ASSERT_OK(uv_fs_event_start(&fs, fs_event_cb_stop, path, 0));
 | 
			
		||||
 | 
			
		||||
  /* Note: timer_cb_touch() closes the handle. */
 | 
			
		||||
  timer.data = path;
 | 
			
		||||
  ASSERT_EQ(0, uv_timer_init(uv_default_loop(), &timer));
 | 
			
		||||
  ASSERT_EQ(0, uv_timer_start(&timer, timer_cb_touch, 100, 0));
 | 
			
		||||
  ASSERT_OK(uv_timer_init(uv_default_loop(), &timer));
 | 
			
		||||
  ASSERT_OK(uv_timer_start(&timer, timer_cb_touch, 100, 0));
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, fs_event_cb_stop_calls);
 | 
			
		||||
  ASSERT_EQ(0, timer_cb_touch_called);
 | 
			
		||||
  ASSERT_OK(fs_event_cb_stop_calls);
 | 
			
		||||
  ASSERT_OK(timer_cb_touch_called);
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(1, fs_event_cb_stop_calls);
 | 
			
		||||
  ASSERT_EQ(1, timer_cb_touch_called);
 | 
			
		||||
 | 
			
		||||
  uv_close((uv_handle_t*) &fs, NULL);
 | 
			
		||||
  ASSERT_EQ(0, uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_EQ(1, fs_event_cb_stop_calls);
 | 
			
		||||
 | 
			
		||||
  remove(path);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								deps/libuv/test/test-fs-fd-hash.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								deps/libuv/test/test-fs-fd-hash.c
									
									
									
									
										vendored
									
									
								
							@@ -43,7 +43,7 @@ void assert_nonexistent(int fd) {
 | 
			
		||||
void assert_existent(int fd) {
 | 
			
		||||
  struct uv__fd_info_s info = { 0 };
 | 
			
		||||
  ASSERT(uv__fd_hash_get(fd, &info));
 | 
			
		||||
  ASSERT(info.flags == fd + FD_DIFF);
 | 
			
		||||
  ASSERT_EQ(info.flags, fd + FD_DIFF);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void assert_insertion(int fd) {
 | 
			
		||||
@@ -58,7 +58,7 @@ void assert_removal(int fd) {
 | 
			
		||||
  struct uv__fd_info_s info = { 0 };
 | 
			
		||||
  assert_existent(fd);
 | 
			
		||||
  uv__fd_hash_remove(fd, &info);
 | 
			
		||||
  ASSERT(info.flags == fd + FD_DIFF);
 | 
			
		||||
  ASSERT_EQ(info.flags, fd + FD_DIFF);
 | 
			
		||||
  assert_nonexistent(fd);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -106,7 +106,7 @@ TEST_IMPL(fs_fd_hash) {
 | 
			
		||||
  {
 | 
			
		||||
    struct uv__fd_info_s info = { 0 };
 | 
			
		||||
    ASSERT(uv__fd_hash_get(0, &info));
 | 
			
		||||
    ASSERT(info.flags == FD_DIFF + FD_DIFF);
 | 
			
		||||
    ASSERT_EQ(info.flags, FD_DIFF + FD_DIFF);
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    /* Leave as it was, will be again tested below */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										96
									
								
								deps/libuv/test/test-fs-open-flags.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										96
									
								
								deps/libuv/test/test-fs-open-flags.c
									
									
									
									
										vendored
									
									
								
							@@ -68,8 +68,8 @@ static void setup(void) {
 | 
			
		||||
  uv_fs_req_cleanup(&rmdir_req);
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_mkdir(NULL, &mkdir_req, empty_dir, 0755, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(mkdir_req.result == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(mkdir_req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&mkdir_req);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -89,13 +89,13 @@ static void refresh(void) {
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_open(NULL, &open_req, empty_file,
 | 
			
		||||
    UV_FS_O_TRUNC | UV_FS_O_CREAT | UV_FS_O_WRONLY, S_IWUSR | S_IRUSR, NULL);
 | 
			
		||||
  ASSERT(r >= 0);
 | 
			
		||||
  ASSERT(open_req.result >= 0);
 | 
			
		||||
  ASSERT_GE(r, 0);
 | 
			
		||||
  ASSERT_GE(open_req.result, 0);
 | 
			
		||||
  uv_fs_req_cleanup(&open_req);
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_close(NULL, &close_req, open_req.result, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(close_req.result == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(close_req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&close_req);
 | 
			
		||||
 | 
			
		||||
  /* dummy_file */
 | 
			
		||||
@@ -103,19 +103,19 @@ static void refresh(void) {
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_open(NULL, &open_req, dummy_file,
 | 
			
		||||
    UV_FS_O_TRUNC | UV_FS_O_CREAT | UV_FS_O_WRONLY, S_IWUSR | S_IRUSR, NULL);
 | 
			
		||||
  ASSERT(r >= 0);
 | 
			
		||||
  ASSERT(open_req.result >= 0);
 | 
			
		||||
  ASSERT_GE(r, 0);
 | 
			
		||||
  ASSERT_GE(open_req.result, 0);
 | 
			
		||||
  uv_fs_req_cleanup(&open_req);
 | 
			
		||||
 | 
			
		||||
  iov = uv_buf_init("a", 1);
 | 
			
		||||
  r = uv_fs_write(NULL, &write_req, open_req.result, &iov, 1, -1, NULL);
 | 
			
		||||
  ASSERT(r == 1);
 | 
			
		||||
  ASSERT(write_req.result == 1);
 | 
			
		||||
  ASSERT_EQ(1, r);
 | 
			
		||||
  ASSERT_EQ(1, write_req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&write_req);
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_close(NULL, &close_req, open_req.result, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(close_req.result == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(close_req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&close_req);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -131,14 +131,14 @@ static void openFail(char *file, int error) {
 | 
			
		||||
  refresh();
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_open(NULL, &open_req, file, flags, S_IWUSR | S_IRUSR, NULL);
 | 
			
		||||
  ASSERT(r == error);
 | 
			
		||||
  ASSERT(open_req.result == error);
 | 
			
		||||
  ASSERT_EQ(r, error);
 | 
			
		||||
  ASSERT_EQ(open_req.result, error);
 | 
			
		||||
  uv_fs_req_cleanup(&open_req);
 | 
			
		||||
 | 
			
		||||
  /* Ensure the first call does not create the file */
 | 
			
		||||
  r = uv_fs_open(NULL, &open_req, file, flags, S_IWUSR | S_IRUSR, NULL);
 | 
			
		||||
  ASSERT(r == error);
 | 
			
		||||
  ASSERT(open_req.result == error);
 | 
			
		||||
  ASSERT_EQ(r, error);
 | 
			
		||||
  ASSERT_EQ(open_req.result, error);
 | 
			
		||||
  uv_fs_req_cleanup(&open_req);
 | 
			
		||||
 | 
			
		||||
  cleanup();
 | 
			
		||||
@@ -150,8 +150,8 @@ static void refreshOpen(char *file) {
 | 
			
		||||
  refresh();
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_open(NULL, &open_req, file, flags, S_IWUSR | S_IRUSR, NULL);
 | 
			
		||||
  ASSERT(r >= 0);
 | 
			
		||||
  ASSERT(open_req.result >= 0);
 | 
			
		||||
  ASSERT_GE(r, 0);
 | 
			
		||||
  ASSERT_GE(open_req.result, 0);
 | 
			
		||||
  uv_fs_req_cleanup(&open_req);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -162,37 +162,37 @@ static void writeExpect(char *file, char *expected, int size) {
 | 
			
		||||
 | 
			
		||||
  iov = uv_buf_init("b", 1);
 | 
			
		||||
  r = uv_fs_write(NULL, &write_req, open_req.result, &iov, 1, -1, NULL);
 | 
			
		||||
  ASSERT(r == 1);
 | 
			
		||||
  ASSERT(write_req.result == 1);
 | 
			
		||||
  ASSERT_EQ(1, r);
 | 
			
		||||
  ASSERT_EQ(1, write_req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&write_req);
 | 
			
		||||
 | 
			
		||||
  iov = uv_buf_init("c", 1);
 | 
			
		||||
  r = uv_fs_write(NULL, &write_req, open_req.result, &iov, 1, -1, NULL);
 | 
			
		||||
  ASSERT(r == 1);
 | 
			
		||||
  ASSERT(write_req.result == 1);
 | 
			
		||||
  ASSERT_EQ(1, r);
 | 
			
		||||
  ASSERT_EQ(1, write_req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&write_req);
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_close(NULL, &close_req, open_req.result, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(close_req.result == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(close_req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&close_req);
 | 
			
		||||
 | 
			
		||||
  /* Check contents */
 | 
			
		||||
  r = uv_fs_open(NULL, &open_req, file, UV_FS_O_RDONLY, S_IWUSR | S_IRUSR, NULL);
 | 
			
		||||
  ASSERT(r >= 0);
 | 
			
		||||
  ASSERT(open_req.result >= 0);
 | 
			
		||||
  ASSERT_GE(r, 0);
 | 
			
		||||
  ASSERT_GE(open_req.result, 0);
 | 
			
		||||
  uv_fs_req_cleanup(&open_req);
 | 
			
		||||
 | 
			
		||||
  iov = uv_buf_init(buf, sizeof(buf));
 | 
			
		||||
  r = uv_fs_read(NULL, &read_req, open_req.result, &iov, 1, -1, NULL);
 | 
			
		||||
  ASSERT(r == size);
 | 
			
		||||
  ASSERT(read_req.result == size);
 | 
			
		||||
  ASSERT(strncmp(buf, expected, size) == 0);
 | 
			
		||||
  ASSERT_EQ(r, size);
 | 
			
		||||
  ASSERT_EQ(read_req.result, size);
 | 
			
		||||
  ASSERT_OK(strncmp(buf, expected, size));
 | 
			
		||||
  uv_fs_req_cleanup(&read_req);
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_close(NULL, &close_req, open_req.result, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(close_req.result == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(close_req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&close_req);
 | 
			
		||||
 | 
			
		||||
  cleanup();
 | 
			
		||||
@@ -205,19 +205,19 @@ static void writeFail(char *file, int error) {
 | 
			
		||||
 | 
			
		||||
  iov = uv_buf_init("z", 1);
 | 
			
		||||
  r = uv_fs_write(NULL, &write_req, open_req.result, &iov, 1, -1, NULL);
 | 
			
		||||
  ASSERT(r == error);
 | 
			
		||||
  ASSERT(write_req.result == error);
 | 
			
		||||
  ASSERT_EQ(r, error);
 | 
			
		||||
  ASSERT_EQ(write_req.result, error);
 | 
			
		||||
  uv_fs_req_cleanup(&write_req);
 | 
			
		||||
 | 
			
		||||
  iov = uv_buf_init("z", 1);
 | 
			
		||||
  r = uv_fs_write(NULL, &write_req, open_req.result, &iov, 1, -1, NULL);
 | 
			
		||||
  ASSERT(r == error);
 | 
			
		||||
  ASSERT(write_req.result == error);
 | 
			
		||||
  ASSERT_EQ(r, error);
 | 
			
		||||
  ASSERT_EQ(write_req.result, error);
 | 
			
		||||
  uv_fs_req_cleanup(&write_req);
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_close(NULL, &close_req, open_req.result, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(close_req.result == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(close_req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&close_req);
 | 
			
		||||
 | 
			
		||||
  cleanup();
 | 
			
		||||
@@ -230,14 +230,14 @@ static void readExpect(char *file, char *expected, int size) {
 | 
			
		||||
 | 
			
		||||
  iov = uv_buf_init(buf, sizeof(buf));
 | 
			
		||||
  r = uv_fs_read(NULL, &read_req, open_req.result, &iov, 1, -1, NULL);
 | 
			
		||||
  ASSERT(r == size);
 | 
			
		||||
  ASSERT(read_req.result == size);
 | 
			
		||||
  ASSERT(strncmp(buf, expected, size) == 0);
 | 
			
		||||
  ASSERT_EQ(r, size);
 | 
			
		||||
  ASSERT_EQ(read_req.result, size);
 | 
			
		||||
  ASSERT_OK(strncmp(buf, expected, size));
 | 
			
		||||
  uv_fs_req_cleanup(&read_req);
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_close(NULL, &close_req, open_req.result, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(close_req.result == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(close_req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&close_req);
 | 
			
		||||
 | 
			
		||||
  cleanup();
 | 
			
		||||
@@ -250,19 +250,19 @@ static void readFail(char *file, int error) {
 | 
			
		||||
 | 
			
		||||
  iov = uv_buf_init(buf, sizeof(buf));
 | 
			
		||||
  r = uv_fs_read(NULL, &read_req, open_req.result, &iov, 1, -1, NULL);
 | 
			
		||||
  ASSERT(r == error);
 | 
			
		||||
  ASSERT(read_req.result == error);
 | 
			
		||||
  ASSERT_EQ(r, error);
 | 
			
		||||
  ASSERT_EQ(read_req.result, error);
 | 
			
		||||
  uv_fs_req_cleanup(&read_req);
 | 
			
		||||
 | 
			
		||||
  iov = uv_buf_init(buf, sizeof(buf));
 | 
			
		||||
  r = uv_fs_read(NULL, &read_req, open_req.result, &iov, 1, -1, NULL);
 | 
			
		||||
  ASSERT(r == error);
 | 
			
		||||
  ASSERT(read_req.result == error);
 | 
			
		||||
  ASSERT_EQ(r, error);
 | 
			
		||||
  ASSERT_EQ(read_req.result, error);
 | 
			
		||||
  uv_fs_req_cleanup(&read_req);
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_close(NULL, &close_req, open_req.result, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(close_req.result == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(close_req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&close_req);
 | 
			
		||||
 | 
			
		||||
  cleanup();
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										108
									
								
								deps/libuv/test/test-fs-poll.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										108
									
								
								deps/libuv/test/test-fs-poll.c
									
									
									
									
										vendored
									
									
								
							@@ -103,44 +103,44 @@ static void poll_cb(uv_fs_poll_t* handle,
 | 
			
		||||
 | 
			
		||||
  memset(&zero_statbuf, 0, sizeof(zero_statbuf));
 | 
			
		||||
 | 
			
		||||
  ASSERT(handle == &poll_handle);
 | 
			
		||||
  ASSERT(1 == uv_is_active((uv_handle_t*) handle));
 | 
			
		||||
  ASSERT_PTR_EQ(handle, &poll_handle);
 | 
			
		||||
  ASSERT_EQ(1, uv_is_active((uv_handle_t*) handle));
 | 
			
		||||
  ASSERT_NOT_NULL(prev);
 | 
			
		||||
  ASSERT_NOT_NULL(curr);
 | 
			
		||||
 | 
			
		||||
  switch (poll_cb_called++) {
 | 
			
		||||
  case 0:
 | 
			
		||||
    ASSERT(status == UV_ENOENT);
 | 
			
		||||
    ASSERT(0 == memcmp(prev, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT(0 == memcmp(curr, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT_EQ(status, UV_ENOENT);
 | 
			
		||||
    ASSERT_OK(memcmp(prev, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT_OK(memcmp(curr, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    touch_file(FIXTURE);
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  case 1:
 | 
			
		||||
    ASSERT(status == 0);
 | 
			
		||||
    ASSERT(0 == memcmp(prev, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT(0 != memcmp(curr, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT(0 == uv_timer_start(&timer_handle, timer_cb, 20, 0));
 | 
			
		||||
    ASSERT_OK(status);
 | 
			
		||||
    ASSERT_OK(memcmp(prev, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT_NE(0, memcmp(curr, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT_OK(uv_timer_start(&timer_handle, timer_cb, 20, 0));
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  case 2:
 | 
			
		||||
    ASSERT(status == 0);
 | 
			
		||||
    ASSERT(0 != memcmp(prev, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT(0 != memcmp(curr, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT(0 == uv_timer_start(&timer_handle, timer_cb, 200, 0));
 | 
			
		||||
    ASSERT_OK(status);
 | 
			
		||||
    ASSERT_NE(0, memcmp(prev, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT_NE(0, memcmp(curr, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT_OK(uv_timer_start(&timer_handle, timer_cb, 200, 0));
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  case 3:
 | 
			
		||||
    ASSERT(status == 0);
 | 
			
		||||
    ASSERT(0 != memcmp(prev, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT(0 != memcmp(curr, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT_OK(status);
 | 
			
		||||
    ASSERT_NE(0, memcmp(prev, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT_NE(0, memcmp(curr, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    remove(FIXTURE);
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  case 4:
 | 
			
		||||
    ASSERT(status == UV_ENOENT);
 | 
			
		||||
    ASSERT(0 != memcmp(prev, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT(0 == memcmp(curr, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT_EQ(status, UV_ENOENT);
 | 
			
		||||
    ASSERT_NE(0, memcmp(prev, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    ASSERT_OK(memcmp(curr, &zero_statbuf, sizeof(zero_statbuf)));
 | 
			
		||||
    uv_close((uv_handle_t*)handle, close_cb);
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
@@ -155,14 +155,14 @@ TEST_IMPL(fs_poll) {
 | 
			
		||||
 | 
			
		||||
  remove(FIXTURE);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_timer_init(loop, &timer_handle));
 | 
			
		||||
  ASSERT(0 == uv_fs_poll_init(loop, &poll_handle));
 | 
			
		||||
  ASSERT(0 == uv_fs_poll_start(&poll_handle, poll_cb, FIXTURE, 100));
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_timer_init(loop, &timer_handle));
 | 
			
		||||
  ASSERT_OK(uv_fs_poll_init(loop, &poll_handle));
 | 
			
		||||
  ASSERT_OK(uv_fs_poll_start(&poll_handle, poll_cb, FIXTURE, 100));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
 | 
			
		||||
  ASSERT(poll_cb_called == 5);
 | 
			
		||||
  ASSERT(timer_cb_called == 2);
 | 
			
		||||
  ASSERT(close_cb_called == 1);
 | 
			
		||||
  ASSERT_EQ(5, poll_cb_called);
 | 
			
		||||
  ASSERT_EQ(2, timer_cb_called);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -176,21 +176,21 @@ TEST_IMPL(fs_poll_getpath) {
 | 
			
		||||
 | 
			
		||||
  remove(FIXTURE);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_fs_poll_init(loop, &poll_handle));
 | 
			
		||||
  ASSERT_OK(uv_fs_poll_init(loop, &poll_handle));
 | 
			
		||||
  len = sizeof buf;
 | 
			
		||||
  ASSERT(UV_EINVAL == uv_fs_poll_getpath(&poll_handle, buf, &len));
 | 
			
		||||
  ASSERT(0 == uv_fs_poll_start(&poll_handle, poll_cb_fail, FIXTURE, 100));
 | 
			
		||||
  ASSERT_EQ(UV_EINVAL, uv_fs_poll_getpath(&poll_handle, buf, &len));
 | 
			
		||||
  ASSERT_OK(uv_fs_poll_start(&poll_handle, poll_cb_fail, FIXTURE, 100));
 | 
			
		||||
  len = sizeof buf;
 | 
			
		||||
  ASSERT(0 == uv_fs_poll_getpath(&poll_handle, buf, &len));
 | 
			
		||||
  ASSERT(buf[len - 1] != 0);
 | 
			
		||||
  ASSERT(buf[len] == '\0');
 | 
			
		||||
  ASSERT(0 == memcmp(buf, FIXTURE, len));
 | 
			
		||||
  ASSERT_OK(uv_fs_poll_getpath(&poll_handle, buf, &len));
 | 
			
		||||
  ASSERT_NE(0, buf[len - 1]);
 | 
			
		||||
  ASSERT_EQ(buf[len], '\0');
 | 
			
		||||
  ASSERT_OK(memcmp(buf, FIXTURE, len));
 | 
			
		||||
 | 
			
		||||
  uv_close((uv_handle_t*) &poll_handle, close_cb);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_OK(uv_run(loop, UV_RUN_DEFAULT));
 | 
			
		||||
 | 
			
		||||
  ASSERT(close_cb_called == 1);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -203,14 +203,14 @@ TEST_IMPL(fs_poll_close_request) {
 | 
			
		||||
 | 
			
		||||
  remove(FIXTURE);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_loop_init(&loop));
 | 
			
		||||
  ASSERT_OK(uv_loop_init(&loop));
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_fs_poll_init(&loop, &poll_handle));
 | 
			
		||||
  ASSERT(0 == uv_fs_poll_start(&poll_handle, poll_cb_fail, FIXTURE, 100));
 | 
			
		||||
  ASSERT_OK(uv_fs_poll_init(&loop, &poll_handle));
 | 
			
		||||
  ASSERT_OK(uv_fs_poll_start(&poll_handle, poll_cb_fail, FIXTURE, 100));
 | 
			
		||||
  uv_close((uv_handle_t*) &poll_handle, close_cb);
 | 
			
		||||
  while (close_cb_called == 0)
 | 
			
		||||
    uv_run(&loop, UV_RUN_ONCE);
 | 
			
		||||
  ASSERT(close_cb_called == 1);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(&loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -223,18 +223,18 @@ TEST_IMPL(fs_poll_close_request_multi_start_stop) {
 | 
			
		||||
 | 
			
		||||
  remove(FIXTURE);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_loop_init(&loop));
 | 
			
		||||
  ASSERT_OK(uv_loop_init(&loop));
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_fs_poll_init(&loop, &poll_handle));
 | 
			
		||||
  ASSERT_OK(uv_fs_poll_init(&loop, &poll_handle));
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < 10; ++i) {
 | 
			
		||||
    ASSERT(0 == uv_fs_poll_start(&poll_handle, poll_cb_fail, FIXTURE, 100));
 | 
			
		||||
    ASSERT(0 == uv_fs_poll_stop(&poll_handle));
 | 
			
		||||
    ASSERT_OK(uv_fs_poll_start(&poll_handle, poll_cb_fail, FIXTURE, 100));
 | 
			
		||||
    ASSERT_OK(uv_fs_poll_stop(&poll_handle));
 | 
			
		||||
  }
 | 
			
		||||
  uv_close((uv_handle_t*) &poll_handle, close_cb);
 | 
			
		||||
  while (close_cb_called == 0)
 | 
			
		||||
    uv_run(&loop, UV_RUN_ONCE);
 | 
			
		||||
  ASSERT(close_cb_called == 1);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(&loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -247,18 +247,18 @@ TEST_IMPL(fs_poll_close_request_multi_stop_start) {
 | 
			
		||||
 | 
			
		||||
  remove(FIXTURE);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_loop_init(&loop));
 | 
			
		||||
  ASSERT_OK(uv_loop_init(&loop));
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_fs_poll_init(&loop, &poll_handle));
 | 
			
		||||
  ASSERT_OK(uv_fs_poll_init(&loop, &poll_handle));
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < 10; ++i) {
 | 
			
		||||
    ASSERT(0 == uv_fs_poll_stop(&poll_handle));
 | 
			
		||||
    ASSERT(0 == uv_fs_poll_start(&poll_handle, poll_cb_fail, FIXTURE, 100));
 | 
			
		||||
    ASSERT_OK(uv_fs_poll_stop(&poll_handle));
 | 
			
		||||
    ASSERT_OK(uv_fs_poll_start(&poll_handle, poll_cb_fail, FIXTURE, 100));
 | 
			
		||||
  }
 | 
			
		||||
  uv_close((uv_handle_t*) &poll_handle, close_cb);
 | 
			
		||||
  while (close_cb_called == 0)
 | 
			
		||||
    uv_run(&loop, UV_RUN_ONCE);
 | 
			
		||||
  ASSERT(close_cb_called == 1);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(&loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -271,21 +271,21 @@ TEST_IMPL(fs_poll_close_request_stop_when_active) {
 | 
			
		||||
 | 
			
		||||
  remove(FIXTURE);
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_loop_init(&loop));
 | 
			
		||||
  ASSERT_OK(uv_loop_init(&loop));
 | 
			
		||||
 | 
			
		||||
  /* Set up all handles. */
 | 
			
		||||
  ASSERT(0 == uv_fs_poll_init(&loop, &poll_handle));
 | 
			
		||||
  ASSERT(0 == uv_fs_poll_start(&poll_handle, poll_cb_noop, FIXTURE, 100));
 | 
			
		||||
  ASSERT_OK(uv_fs_poll_init(&loop, &poll_handle));
 | 
			
		||||
  ASSERT_OK(uv_fs_poll_start(&poll_handle, poll_cb_noop, FIXTURE, 100));
 | 
			
		||||
  uv_run(&loop, UV_RUN_ONCE);
 | 
			
		||||
 | 
			
		||||
  /* Close the timer handle, and do not crash. */
 | 
			
		||||
  ASSERT(0 == uv_fs_poll_stop(&poll_handle));
 | 
			
		||||
  ASSERT_OK(uv_fs_poll_stop(&poll_handle));
 | 
			
		||||
  uv_run(&loop, UV_RUN_ONCE);
 | 
			
		||||
 | 
			
		||||
  /* Clean up after the test. */
 | 
			
		||||
  uv_close((uv_handle_t*) &poll_handle, close_cb);
 | 
			
		||||
  uv_run(&loop, UV_RUN_ONCE);
 | 
			
		||||
  ASSERT(close_cb_called == 1);
 | 
			
		||||
  ASSERT_EQ(1, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(&loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										152
									
								
								deps/libuv/test/test-fs-readdir.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										152
									
								
								deps/libuv/test/test-fs-readdir.c
									
									
									
									
										vendored
									
									
								
							@@ -47,9 +47,9 @@ static void cleanup_test_files(void) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void empty_closedir_cb(uv_fs_t* req) {
 | 
			
		||||
  ASSERT(req == &closedir_req);
 | 
			
		||||
  ASSERT(req->fs_type == UV_FS_CLOSEDIR);
 | 
			
		||||
  ASSERT(req->result == 0);
 | 
			
		||||
  ASSERT_PTR_EQ(req, &closedir_req);
 | 
			
		||||
  ASSERT_EQ(req->fs_type, UV_FS_CLOSEDIR);
 | 
			
		||||
  ASSERT_OK(req->result);
 | 
			
		||||
  ++empty_closedir_cb_count;
 | 
			
		||||
  uv_fs_req_cleanup(req);
 | 
			
		||||
}
 | 
			
		||||
@@ -58,25 +58,25 @@ static void empty_readdir_cb(uv_fs_t* req) {
 | 
			
		||||
  uv_dir_t* dir;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(req == &readdir_req);
 | 
			
		||||
  ASSERT(req->fs_type == UV_FS_READDIR);
 | 
			
		||||
  ASSERT(req->result == 0);
 | 
			
		||||
  ASSERT_PTR_EQ(req, &readdir_req);
 | 
			
		||||
  ASSERT_EQ(req->fs_type, UV_FS_READDIR);
 | 
			
		||||
  ASSERT_OK(req->result);
 | 
			
		||||
  dir = req->ptr;
 | 
			
		||||
  uv_fs_req_cleanup(req);
 | 
			
		||||
  r = uv_fs_closedir(uv_default_loop(),
 | 
			
		||||
                     &closedir_req,
 | 
			
		||||
                     dir,
 | 
			
		||||
                     empty_closedir_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void empty_opendir_cb(uv_fs_t* req) {
 | 
			
		||||
  uv_dir_t* dir;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(req == &opendir_req);
 | 
			
		||||
  ASSERT(req->fs_type == UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT(req->result == 0);
 | 
			
		||||
  ASSERT_PTR_EQ(req, &opendir_req);
 | 
			
		||||
  ASSERT_EQ(req->fs_type, UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT_OK(req->result);
 | 
			
		||||
  ASSERT_NOT_NULL(req->ptr);
 | 
			
		||||
  dir = req->ptr;
 | 
			
		||||
  dir->dirents = dirents;
 | 
			
		||||
@@ -85,7 +85,7 @@ static void empty_opendir_cb(uv_fs_t* req) {
 | 
			
		||||
                    &readdir_req,
 | 
			
		||||
                    dir,
 | 
			
		||||
                    empty_readdir_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_fs_req_cleanup(req);
 | 
			
		||||
  ++empty_opendir_cb_count;
 | 
			
		||||
}
 | 
			
		||||
@@ -115,9 +115,9 @@ TEST_IMPL(fs_readdir_empty_dir) {
 | 
			
		||||
                    &opendir_req,
 | 
			
		||||
                    path,
 | 
			
		||||
                    NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(opendir_req.fs_type == UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT(opendir_req.result == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(opendir_req.fs_type, UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT_OK(opendir_req.result);
 | 
			
		||||
  ASSERT_NOT_NULL(opendir_req.ptr);
 | 
			
		||||
  dir = opendir_req.ptr;
 | 
			
		||||
  uv_fs_req_cleanup(&opendir_req);
 | 
			
		||||
@@ -130,13 +130,13 @@ TEST_IMPL(fs_readdir_empty_dir) {
 | 
			
		||||
                                  &readdir_req,
 | 
			
		||||
                                  dir,
 | 
			
		||||
                                  NULL);
 | 
			
		||||
  ASSERT(nb_entries_read == 0);
 | 
			
		||||
  ASSERT_OK(nb_entries_read);
 | 
			
		||||
  uv_fs_req_cleanup(&readdir_req);
 | 
			
		||||
 | 
			
		||||
  /* Fill the req to ensure that required fields are cleaned up. */
 | 
			
		||||
  memset(&closedir_req, 0xdb, sizeof(closedir_req));
 | 
			
		||||
  uv_fs_closedir(uv_default_loop(), &closedir_req, dir, NULL);
 | 
			
		||||
  ASSERT(closedir_req.result == 0);
 | 
			
		||||
  ASSERT_OK(closedir_req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&closedir_req);
 | 
			
		||||
 | 
			
		||||
  /* Testing the asynchronous flavor. */
 | 
			
		||||
@@ -147,13 +147,13 @@ TEST_IMPL(fs_readdir_empty_dir) {
 | 
			
		||||
  memset(&closedir_req, 0xdb, sizeof(closedir_req));
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_opendir(uv_default_loop(), &opendir_req, path, empty_opendir_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(empty_opendir_cb_count == 0);
 | 
			
		||||
  ASSERT(empty_closedir_cb_count == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(empty_opendir_cb_count);
 | 
			
		||||
  ASSERT_OK(empty_closedir_cb_count);
 | 
			
		||||
  r = uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(empty_opendir_cb_count == 1);
 | 
			
		||||
  ASSERT(empty_closedir_cb_count == 1);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(1, empty_opendir_cb_count);
 | 
			
		||||
  ASSERT_EQ(1, empty_closedir_cb_count);
 | 
			
		||||
  uv_fs_rmdir(uv_default_loop(), &rmdir_req, path, NULL);
 | 
			
		||||
  uv_fs_req_cleanup(&rmdir_req);
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
@@ -168,9 +168,9 @@ TEST_IMPL(fs_readdir_empty_dir) {
 | 
			
		||||
static int non_existing_opendir_cb_count;
 | 
			
		||||
 | 
			
		||||
static void non_existing_opendir_cb(uv_fs_t* req) {
 | 
			
		||||
  ASSERT(req == &opendir_req);
 | 
			
		||||
  ASSERT(req->fs_type == UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT(req->result == UV_ENOENT);
 | 
			
		||||
  ASSERT_PTR_EQ(req, &opendir_req);
 | 
			
		||||
  ASSERT_EQ(req->fs_type, UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT_EQ(req->result, UV_ENOENT);
 | 
			
		||||
  ASSERT_NULL(req->ptr);
 | 
			
		||||
 | 
			
		||||
  uv_fs_req_cleanup(req);
 | 
			
		||||
@@ -188,9 +188,9 @@ TEST_IMPL(fs_readdir_non_existing_dir) {
 | 
			
		||||
 | 
			
		||||
  /* Testing the synchronous flavor. */
 | 
			
		||||
  r = uv_fs_opendir(uv_default_loop(), &opendir_req, path, NULL);
 | 
			
		||||
  ASSERT(r == UV_ENOENT);
 | 
			
		||||
  ASSERT(opendir_req.fs_type == UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT(opendir_req.result == UV_ENOENT);
 | 
			
		||||
  ASSERT_EQ(r, UV_ENOENT);
 | 
			
		||||
  ASSERT_EQ(opendir_req.fs_type, UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT_EQ(opendir_req.result, UV_ENOENT);
 | 
			
		||||
  ASSERT_NULL(opendir_req.ptr);
 | 
			
		||||
  uv_fs_req_cleanup(&opendir_req);
 | 
			
		||||
 | 
			
		||||
@@ -202,11 +202,11 @@ TEST_IMPL(fs_readdir_non_existing_dir) {
 | 
			
		||||
                    &opendir_req,
 | 
			
		||||
                    path,
 | 
			
		||||
                    non_existing_opendir_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(non_existing_opendir_cb_count == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(non_existing_opendir_cb_count);
 | 
			
		||||
  r = uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(non_existing_opendir_cb_count == 1);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(1, non_existing_opendir_cb_count);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -220,9 +220,9 @@ TEST_IMPL(fs_readdir_non_existing_dir) {
 | 
			
		||||
static int file_opendir_cb_count;
 | 
			
		||||
 | 
			
		||||
static void file_opendir_cb(uv_fs_t* req) {
 | 
			
		||||
  ASSERT(req == &opendir_req);
 | 
			
		||||
  ASSERT(req->fs_type == UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT(req->result == UV_ENOTDIR);
 | 
			
		||||
  ASSERT_PTR_EQ(req, &opendir_req);
 | 
			
		||||
  ASSERT_EQ(req->fs_type, UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT_EQ(req->result, UV_ENOTDIR);
 | 
			
		||||
  ASSERT_NULL(req->ptr);
 | 
			
		||||
 | 
			
		||||
  uv_fs_req_cleanup(req);
 | 
			
		||||
@@ -241,9 +241,9 @@ TEST_IMPL(fs_readdir_file) {
 | 
			
		||||
  /* Testing the synchronous flavor. */
 | 
			
		||||
  r = uv_fs_opendir(uv_default_loop(), &opendir_req, path, NULL);
 | 
			
		||||
 | 
			
		||||
  ASSERT(r == UV_ENOTDIR);
 | 
			
		||||
  ASSERT(opendir_req.fs_type == UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT(opendir_req.result == UV_ENOTDIR);
 | 
			
		||||
  ASSERT_EQ(r, UV_ENOTDIR);
 | 
			
		||||
  ASSERT_EQ(opendir_req.fs_type, UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT_EQ(opendir_req.result, UV_ENOTDIR);
 | 
			
		||||
  ASSERT_NULL(opendir_req.ptr);
 | 
			
		||||
 | 
			
		||||
  uv_fs_req_cleanup(&opendir_req);
 | 
			
		||||
@@ -253,11 +253,11 @@ TEST_IMPL(fs_readdir_file) {
 | 
			
		||||
 | 
			
		||||
  /* Testing the async flavor. */
 | 
			
		||||
  r = uv_fs_opendir(uv_default_loop(), &opendir_req, path, file_opendir_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(file_opendir_cb_count == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(file_opendir_cb_count);
 | 
			
		||||
  r = uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(file_opendir_cb_count == 1);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(1, file_opendir_cb_count);
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -273,8 +273,8 @@ static int non_empty_readdir_cb_count;
 | 
			
		||||
static int non_empty_closedir_cb_count;
 | 
			
		||||
 | 
			
		||||
static void non_empty_closedir_cb(uv_fs_t* req) {
 | 
			
		||||
  ASSERT(req == &closedir_req);
 | 
			
		||||
  ASSERT(req->result == 0);
 | 
			
		||||
  ASSERT_PTR_EQ(req, &closedir_req);
 | 
			
		||||
  ASSERT_OK(req->result);
 | 
			
		||||
  uv_fs_req_cleanup(req);
 | 
			
		||||
  ++non_empty_closedir_cb_count;
 | 
			
		||||
}
 | 
			
		||||
@@ -282,30 +282,30 @@ static void non_empty_closedir_cb(uv_fs_t* req) {
 | 
			
		||||
static void non_empty_readdir_cb(uv_fs_t* req) {
 | 
			
		||||
  uv_dir_t* dir;
 | 
			
		||||
 | 
			
		||||
  ASSERT(req == &readdir_req);
 | 
			
		||||
  ASSERT(req->fs_type == UV_FS_READDIR);
 | 
			
		||||
  ASSERT_PTR_EQ(req, &readdir_req);
 | 
			
		||||
  ASSERT_EQ(req->fs_type, UV_FS_READDIR);
 | 
			
		||||
  dir = req->ptr;
 | 
			
		||||
 | 
			
		||||
  if (req->result == 0) {
 | 
			
		||||
    uv_fs_req_cleanup(req);
 | 
			
		||||
    ASSERT(non_empty_readdir_cb_count == 3);
 | 
			
		||||
    ASSERT_EQ(3, non_empty_readdir_cb_count);
 | 
			
		||||
    uv_fs_closedir(uv_default_loop(),
 | 
			
		||||
                   &closedir_req,
 | 
			
		||||
                   dir,
 | 
			
		||||
                   non_empty_closedir_cb);
 | 
			
		||||
  } else {
 | 
			
		||||
    ASSERT(req->result == 1);
 | 
			
		||||
    ASSERT(dir->dirents == dirents);
 | 
			
		||||
    ASSERT_EQ(1, req->result);
 | 
			
		||||
    ASSERT_PTR_EQ(dir->dirents, dirents);
 | 
			
		||||
    ASSERT(strcmp(dirents[0].name, "file1") == 0 ||
 | 
			
		||||
           strcmp(dirents[0].name, "file2") == 0 ||
 | 
			
		||||
           strcmp(dirents[0].name, "test_subdir") == 0);
 | 
			
		||||
#ifdef HAVE_DIRENT_TYPES
 | 
			
		||||
    if (!strcmp(dirents[0].name, "test_subdir"))
 | 
			
		||||
      ASSERT(dirents[0].type == UV_DIRENT_DIR);
 | 
			
		||||
      ASSERT_EQ(dirents[0].type, UV_DIRENT_DIR);
 | 
			
		||||
    else
 | 
			
		||||
      ASSERT(dirents[0].type == UV_DIRENT_FILE);
 | 
			
		||||
      ASSERT_EQ(dirents[0].type, UV_DIRENT_FILE);
 | 
			
		||||
#else
 | 
			
		||||
    ASSERT(dirents[0].type == UV_DIRENT_UNKNOWN);
 | 
			
		||||
    ASSERT_EQ(dirents[0].type, UV_DIRENT_UNKNOWN);
 | 
			
		||||
#endif /* HAVE_DIRENT_TYPES */
 | 
			
		||||
 | 
			
		||||
    ++non_empty_readdir_cb_count;
 | 
			
		||||
@@ -323,9 +323,9 @@ static void non_empty_opendir_cb(uv_fs_t* req) {
 | 
			
		||||
  uv_dir_t* dir;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(req == &opendir_req);
 | 
			
		||||
  ASSERT(req->fs_type == UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT(req->result == 0);
 | 
			
		||||
  ASSERT_PTR_EQ(req, &opendir_req);
 | 
			
		||||
  ASSERT_EQ(req->fs_type, UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT_OK(req->result);
 | 
			
		||||
  ASSERT_NOT_NULL(req->ptr);
 | 
			
		||||
 | 
			
		||||
  dir = req->ptr;
 | 
			
		||||
@@ -336,7 +336,7 @@ static void non_empty_opendir_cb(uv_fs_t* req) {
 | 
			
		||||
                    &readdir_req,
 | 
			
		||||
                    dir,
 | 
			
		||||
                    non_empty_readdir_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_fs_req_cleanup(req);
 | 
			
		||||
  ++non_empty_opendir_cb_count;
 | 
			
		||||
}
 | 
			
		||||
@@ -353,7 +353,7 @@ TEST_IMPL(fs_readdir_non_empty_dir) {
 | 
			
		||||
  cleanup_test_files();
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_mkdir(uv_default_loop(), &mkdir_req, "test_dir", 0755, NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  /* Create two files synchronously. */
 | 
			
		||||
  r = uv_fs_open(uv_default_loop(),
 | 
			
		||||
@@ -361,13 +361,13 @@ TEST_IMPL(fs_readdir_non_empty_dir) {
 | 
			
		||||
                 "test_dir/file1",
 | 
			
		||||
                 O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR,
 | 
			
		||||
                 NULL);
 | 
			
		||||
  ASSERT(r >= 0);
 | 
			
		||||
  ASSERT_GE(r, 0);
 | 
			
		||||
  uv_fs_req_cleanup(&create_req);
 | 
			
		||||
  r = uv_fs_close(uv_default_loop(),
 | 
			
		||||
                  &close_req,
 | 
			
		||||
                  create_req.result,
 | 
			
		||||
                  NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_fs_req_cleanup(&close_req);
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_open(uv_default_loop(),
 | 
			
		||||
@@ -375,13 +375,13 @@ TEST_IMPL(fs_readdir_non_empty_dir) {
 | 
			
		||||
                 "test_dir/file2",
 | 
			
		||||
                 O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR,
 | 
			
		||||
                 NULL);
 | 
			
		||||
  ASSERT(r >= 0);
 | 
			
		||||
  ASSERT_GE(r, 0);
 | 
			
		||||
  uv_fs_req_cleanup(&create_req);
 | 
			
		||||
  r = uv_fs_close(uv_default_loop(),
 | 
			
		||||
                  &close_req,
 | 
			
		||||
                  create_req.result,
 | 
			
		||||
                  NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_fs_req_cleanup(&close_req);
 | 
			
		||||
 | 
			
		||||
  r = uv_fs_mkdir(uv_default_loop(),
 | 
			
		||||
@@ -389,7 +389,7 @@ TEST_IMPL(fs_readdir_non_empty_dir) {
 | 
			
		||||
                  "test_dir/test_subdir",
 | 
			
		||||
                  0755,
 | 
			
		||||
                  NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_fs_req_cleanup(&mkdir_req);
 | 
			
		||||
 | 
			
		||||
  /* Fill the req to ensure that required fields are cleaned up. */
 | 
			
		||||
@@ -397,9 +397,9 @@ TEST_IMPL(fs_readdir_non_empty_dir) {
 | 
			
		||||
 | 
			
		||||
  /* Testing the synchronous flavor. */
 | 
			
		||||
  r = uv_fs_opendir(uv_default_loop(), &opendir_req, "test_dir", NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(opendir_req.fs_type == UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT(opendir_req.result == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(opendir_req.fs_type, UV_FS_OPENDIR);
 | 
			
		||||
  ASSERT_OK(opendir_req.result);
 | 
			
		||||
  ASSERT_NOT_NULL(opendir_req.ptr);
 | 
			
		||||
 | 
			
		||||
  entries_count = 0;
 | 
			
		||||
@@ -417,23 +417,23 @@ TEST_IMPL(fs_readdir_non_empty_dir) {
 | 
			
		||||
         strcmp(dirents[0].name, "test_subdir") == 0);
 | 
			
		||||
#ifdef HAVE_DIRENT_TYPES
 | 
			
		||||
    if (!strcmp(dirents[0].name, "test_subdir"))
 | 
			
		||||
      ASSERT(dirents[0].type == UV_DIRENT_DIR);
 | 
			
		||||
      ASSERT_EQ(dirents[0].type, UV_DIRENT_DIR);
 | 
			
		||||
    else
 | 
			
		||||
      ASSERT(dirents[0].type == UV_DIRENT_FILE);
 | 
			
		||||
      ASSERT_EQ(dirents[0].type, UV_DIRENT_FILE);
 | 
			
		||||
#else
 | 
			
		||||
    ASSERT(dirents[0].type == UV_DIRENT_UNKNOWN);
 | 
			
		||||
    ASSERT_EQ(dirents[0].type, UV_DIRENT_UNKNOWN);
 | 
			
		||||
#endif /* HAVE_DIRENT_TYPES */
 | 
			
		||||
    uv_fs_req_cleanup(&readdir_req);
 | 
			
		||||
    ++entries_count;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ASSERT(entries_count == 3);
 | 
			
		||||
  ASSERT_EQ(3, entries_count);
 | 
			
		||||
  uv_fs_req_cleanup(&readdir_req);
 | 
			
		||||
 | 
			
		||||
  /* Fill the req to ensure that required fields are cleaned up. */
 | 
			
		||||
  memset(&closedir_req, 0xdb, sizeof(closedir_req));
 | 
			
		||||
  uv_fs_closedir(uv_default_loop(), &closedir_req, dir, NULL);
 | 
			
		||||
  ASSERT(closedir_req.result == 0);
 | 
			
		||||
  ASSERT_OK(closedir_req.result);
 | 
			
		||||
  uv_fs_req_cleanup(&closedir_req);
 | 
			
		||||
 | 
			
		||||
  /* Testing the asynchronous flavor. */
 | 
			
		||||
@@ -445,13 +445,13 @@ TEST_IMPL(fs_readdir_non_empty_dir) {
 | 
			
		||||
                    &opendir_req,
 | 
			
		||||
                    "test_dir",
 | 
			
		||||
                    non_empty_opendir_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(non_empty_opendir_cb_count == 0);
 | 
			
		||||
  ASSERT(non_empty_closedir_cb_count == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(non_empty_opendir_cb_count);
 | 
			
		||||
  ASSERT_OK(non_empty_closedir_cb_count);
 | 
			
		||||
  r = uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(non_empty_opendir_cb_count == 1);
 | 
			
		||||
  ASSERT(non_empty_closedir_cb_count == 1);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(1, non_empty_opendir_cb_count);
 | 
			
		||||
  ASSERT_EQ(1, non_empty_closedir_cb_count);
 | 
			
		||||
 | 
			
		||||
  uv_fs_rmdir(uv_default_loop(), &rmdir_req, "test_subdir", NULL);
 | 
			
		||||
  uv_fs_req_cleanup(&rmdir_req);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1725
									
								
								deps/libuv/test/test-fs.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1725
									
								
								deps/libuv/test/test-fs.c
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										26
									
								
								deps/libuv/test/test-get-currentexe.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								deps/libuv/test/test-get-currentexe.c
									
									
									
									
										vendored
									
									
								
							@@ -60,43 +60,43 @@ TEST_IMPL(get_currentexe) {
 | 
			
		||||
   * executable_path.
 | 
			
		||||
   */
 | 
			
		||||
  ASSERT(match && !strcmp(match, path));
 | 
			
		||||
  ASSERT(size == strlen(buffer));
 | 
			
		||||
  ASSERT_EQ(size, strlen(buffer));
 | 
			
		||||
 | 
			
		||||
  /* Negative tests */
 | 
			
		||||
  size = sizeof(buffer) / sizeof(buffer[0]);
 | 
			
		||||
  r = uv_exepath(NULL, &size);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
 | 
			
		||||
  r = uv_exepath(buffer, NULL);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
 | 
			
		||||
  size = 0;
 | 
			
		||||
  r = uv_exepath(buffer, &size);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
 | 
			
		||||
  memset(buffer, -1, sizeof(buffer));
 | 
			
		||||
 | 
			
		||||
  size = 1;
 | 
			
		||||
  r = uv_exepath(buffer, &size);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(size == 0);
 | 
			
		||||
  ASSERT(buffer[0] == '\0');
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_OK(size);
 | 
			
		||||
  ASSERT_EQ(buffer[0], '\0');
 | 
			
		||||
 | 
			
		||||
  memset(buffer, -1, sizeof(buffer));
 | 
			
		||||
 | 
			
		||||
  size = 2;
 | 
			
		||||
  r = uv_exepath(buffer, &size);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(size == 1);
 | 
			
		||||
  ASSERT(buffer[0] != '\0');
 | 
			
		||||
  ASSERT(buffer[1] == '\0');
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(1, size);
 | 
			
		||||
  ASSERT_NE(buffer[0], '\0');
 | 
			
		||||
  ASSERT_EQ(buffer[1], '\0');
 | 
			
		||||
 | 
			
		||||
  /* Verify uv_exepath is not affected by uv_set_process_title(). */
 | 
			
		||||
  r = uv_set_process_title("foobar");
 | 
			
		||||
  ASSERT_EQ(r, 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  size = sizeof(buffer);
 | 
			
		||||
  r = uv_exepath(buffer, &size);
 | 
			
		||||
  ASSERT_EQ(r, 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  match = strstr(buffer, path);
 | 
			
		||||
  /* Verify that the path returned from uv_exepath is a subdirectory of
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								deps/libuv/test/test-get-loadavg.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								deps/libuv/test/test-get-loadavg.c
									
									
									
									
										vendored
									
									
								
							@@ -27,9 +27,9 @@ TEST_IMPL(get_loadavg) {
 | 
			
		||||
  double avg[3] = {-1, -1, -1};
 | 
			
		||||
  uv_loadavg(avg);
 | 
			
		||||
 | 
			
		||||
  ASSERT(avg[0] >= 0);
 | 
			
		||||
  ASSERT(avg[1] >= 0);
 | 
			
		||||
  ASSERT(avg[2] >= 0);
 | 
			
		||||
  ASSERT_GE(avg[0], 0);
 | 
			
		||||
  ASSERT_GE(avg[1], 0);
 | 
			
		||||
  ASSERT_GE(avg[2], 0);
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								deps/libuv/test/test-get-memory.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								deps/libuv/test/test-get-memory.c
									
									
									
									
										vendored
									
									
								
							@@ -35,13 +35,13 @@ TEST_IMPL(get_memory) {
 | 
			
		||||
         (unsigned long long) constrained_mem,
 | 
			
		||||
         (unsigned long long) available_mem);
 | 
			
		||||
 | 
			
		||||
  ASSERT(free_mem > 0);
 | 
			
		||||
  ASSERT(total_mem > 0);
 | 
			
		||||
  ASSERT_GT(free_mem, 0);
 | 
			
		||||
  ASSERT_GT(total_mem, 0);
 | 
			
		||||
  /* On IBMi PASE, the amount of memory in use is always zero. */
 | 
			
		||||
#ifdef __PASE__
 | 
			
		||||
  ASSERT(total_mem == free_mem);
 | 
			
		||||
  ASSERT_EQ(total_mem, free_mem);
 | 
			
		||||
#else
 | 
			
		||||
  ASSERT(total_mem > free_mem);
 | 
			
		||||
  ASSERT_GT(total_mem, free_mem);
 | 
			
		||||
#endif
 | 
			
		||||
  ASSERT_LE(available_mem, total_mem);
 | 
			
		||||
  /* we'd really want to test if available <= free, but that is fragile:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								deps/libuv/test/test-get-passwd.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								deps/libuv/test/test-get-passwd.c
									
									
									
									
										vendored
									
									
								
							@@ -39,7 +39,7 @@ TEST_IMPL(get_passwd) {
 | 
			
		||||
 | 
			
		||||
  /* Test the normal case */
 | 
			
		||||
  r = uv_os_get_passwd(&pwd);
 | 
			
		||||
  ASSERT_EQ(r, 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  len = strlen(pwd.username);
 | 
			
		||||
  ASSERT_GT(len, 0);
 | 
			
		||||
 | 
			
		||||
@@ -114,7 +114,7 @@ TEST_IMPL(get_passwd2) {
 | 
			
		||||
 | 
			
		||||
  /* Test the normal case */
 | 
			
		||||
  r = uv_os_get_passwd(&pwd);
 | 
			
		||||
  ASSERT_EQ(r, 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_os_get_passwd2(&pwd2, pwd.uid);
 | 
			
		||||
 | 
			
		||||
@@ -123,7 +123,7 @@ TEST_IMPL(get_passwd2) {
 | 
			
		||||
  (void) &len;
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
  ASSERT_EQ(r, 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(pwd.uid, pwd2.uid);
 | 
			
		||||
  ASSERT_STR_EQ(pwd.username, pwd2.username);
 | 
			
		||||
  ASSERT_STR_EQ(pwd.shell, pwd2.shell);
 | 
			
		||||
@@ -131,15 +131,20 @@ TEST_IMPL(get_passwd2) {
 | 
			
		||||
  uv_os_free_passwd(&pwd2);
 | 
			
		||||
 | 
			
		||||
  r = uv_os_get_passwd2(&pwd2, 0);
 | 
			
		||||
  ASSERT_EQ(r, 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  len = strlen(pwd2.username);
 | 
			
		||||
  ASSERT_GT(len, 0);
 | 
			
		||||
#if defined(__PASE__)
 | 
			
		||||
  // uid 0 is qsecofr on IBM i
 | 
			
		||||
  ASSERT_STR_EQ(pwd2.username, "qsecofr");
 | 
			
		||||
#else
 | 
			
		||||
  ASSERT_STR_EQ(pwd2.username, "root");
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
  len = strlen(pwd2.homedir);
 | 
			
		||||
# ifndef __PASE__
 | 
			
		||||
  ASSERT_GT(len, 0);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
  len = strlen(pwd2.shell);
 | 
			
		||||
# ifndef __PASE__
 | 
			
		||||
  ASSERT_GT(len, 0);
 | 
			
		||||
@@ -174,7 +179,7 @@ TEST_IMPL(get_group) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  r = uv_os_get_passwd(&pwd);
 | 
			
		||||
  ASSERT_EQ(r, 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_os_get_group(&grp, pwd.gid);
 | 
			
		||||
 | 
			
		||||
@@ -183,7 +188,7 @@ TEST_IMPL(get_group) {
 | 
			
		||||
  (void) &len;
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
  ASSERT_EQ(r, 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(pwd.gid, grp.gid);
 | 
			
		||||
 | 
			
		||||
  len = strlen(grp.groupname);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										68
									
								
								deps/libuv/test/test-getaddrinfo.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										68
									
								
								deps/libuv/test/test-getaddrinfo.c
									
									
									
									
										vendored
									
									
								
							@@ -40,8 +40,8 @@ static void getaddrinfo_fail_cb(uv_getaddrinfo_t* req,
 | 
			
		||||
                                int status,
 | 
			
		||||
                                struct addrinfo* res) {
 | 
			
		||||
 | 
			
		||||
  ASSERT(fail_cb_called == 0);
 | 
			
		||||
  ASSERT(status < 0);
 | 
			
		||||
  ASSERT_OK(fail_cb_called);
 | 
			
		||||
  ASSERT_LT(status, 0);
 | 
			
		||||
  ASSERT_NULL(res);
 | 
			
		||||
  uv_freeaddrinfo(res);  /* Should not crash. */
 | 
			
		||||
  fail_cb_called++;
 | 
			
		||||
@@ -51,7 +51,7 @@ static void getaddrinfo_fail_cb(uv_getaddrinfo_t* req,
 | 
			
		||||
static void getaddrinfo_basic_cb(uv_getaddrinfo_t* handle,
 | 
			
		||||
                                 int status,
 | 
			
		||||
                                 struct addrinfo* res) {
 | 
			
		||||
  ASSERT(handle == getaddrinfo_handle);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, getaddrinfo_handle);
 | 
			
		||||
  getaddrinfo_cbs++;
 | 
			
		||||
  free(handle);
 | 
			
		||||
  uv_freeaddrinfo(res);
 | 
			
		||||
@@ -66,7 +66,7 @@ static void getaddrinfo_cuncurrent_cb(uv_getaddrinfo_t* handle,
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < CONCURRENT_COUNT; i++) {
 | 
			
		||||
    if (&getaddrinfo_handles[i] == handle) {
 | 
			
		||||
      ASSERT(i == *data);
 | 
			
		||||
      ASSERT_EQ(i, *data);
 | 
			
		||||
 | 
			
		||||
      callback_counts[i]++;
 | 
			
		||||
      break;
 | 
			
		||||
@@ -89,22 +89,22 @@ TEST_IMPL(getaddrinfo_fail) {
 | 
			
		||||
  
 | 
			
		||||
  uv_getaddrinfo_t req;
 | 
			
		||||
 | 
			
		||||
  ASSERT(UV_EINVAL == uv_getaddrinfo(uv_default_loop(),
 | 
			
		||||
                                     &req,
 | 
			
		||||
                                     (uv_getaddrinfo_cb) abort,
 | 
			
		||||
                                     NULL,
 | 
			
		||||
                                     NULL,
 | 
			
		||||
                                     NULL));
 | 
			
		||||
  ASSERT_EQ(UV_EINVAL, uv_getaddrinfo(uv_default_loop(),
 | 
			
		||||
                                      &req,
 | 
			
		||||
                                      (uv_getaddrinfo_cb) abort,
 | 
			
		||||
                                      NULL,
 | 
			
		||||
                                      NULL,
 | 
			
		||||
                                      NULL));
 | 
			
		||||
 | 
			
		||||
  /* Use a FQDN by ending in a period */
 | 
			
		||||
  ASSERT(0 == uv_getaddrinfo(uv_default_loop(),
 | 
			
		||||
                             &req,
 | 
			
		||||
                             getaddrinfo_fail_cb,
 | 
			
		||||
                             "example.invalid.",
 | 
			
		||||
                             NULL,
 | 
			
		||||
                             NULL));
 | 
			
		||||
  ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT(fail_cb_called == 1);
 | 
			
		||||
  ASSERT_OK(uv_getaddrinfo(uv_default_loop(),
 | 
			
		||||
                           &req,
 | 
			
		||||
                           getaddrinfo_fail_cb,
 | 
			
		||||
                           "example.invalid.",
 | 
			
		||||
                           NULL,
 | 
			
		||||
                           NULL));
 | 
			
		||||
  ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT));
 | 
			
		||||
  ASSERT_EQ(1, fail_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -119,12 +119,12 @@ TEST_IMPL(getaddrinfo_fail_sync) {
 | 
			
		||||
  uv_getaddrinfo_t req;
 | 
			
		||||
 | 
			
		||||
  /* Use a FQDN by ending in a period */
 | 
			
		||||
  ASSERT(0 > uv_getaddrinfo(uv_default_loop(),
 | 
			
		||||
                            &req,
 | 
			
		||||
                            NULL,
 | 
			
		||||
                            "example.invalid.",
 | 
			
		||||
                            NULL,
 | 
			
		||||
                            NULL));
 | 
			
		||||
  ASSERT_GT(0, uv_getaddrinfo(uv_default_loop(),
 | 
			
		||||
                              &req,
 | 
			
		||||
                              NULL,
 | 
			
		||||
                              "example.invalid.",
 | 
			
		||||
                              NULL,
 | 
			
		||||
                              NULL));
 | 
			
		||||
  uv_freeaddrinfo(req.addrinfo);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
@@ -147,11 +147,11 @@ TEST_IMPL(getaddrinfo_basic) {
 | 
			
		||||
                     name,
 | 
			
		||||
                     NULL,
 | 
			
		||||
                     NULL);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(getaddrinfo_cbs == 1);
 | 
			
		||||
  ASSERT_EQ(1, getaddrinfo_cbs);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -165,12 +165,12 @@ TEST_IMPL(getaddrinfo_basic_sync) {
 | 
			
		||||
#endif
 | 
			
		||||
  uv_getaddrinfo_t req;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_getaddrinfo(uv_default_loop(),
 | 
			
		||||
                             &req,
 | 
			
		||||
                             NULL,
 | 
			
		||||
                             name,
 | 
			
		||||
                             NULL,
 | 
			
		||||
                             NULL));
 | 
			
		||||
  ASSERT_OK(uv_getaddrinfo(uv_default_loop(),
 | 
			
		||||
                           &req,
 | 
			
		||||
                           NULL,
 | 
			
		||||
                           name,
 | 
			
		||||
                           NULL,
 | 
			
		||||
                           NULL));
 | 
			
		||||
  uv_freeaddrinfo(req.addrinfo);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
@@ -201,13 +201,13 @@ TEST_IMPL(getaddrinfo_concurrent) {
 | 
			
		||||
                       name,
 | 
			
		||||
                       NULL,
 | 
			
		||||
                       NULL);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < CONCURRENT_COUNT; i++) {
 | 
			
		||||
    ASSERT(callback_counts[i] == 1);
 | 
			
		||||
    ASSERT_EQ(1, callback_counts[i]);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								deps/libuv/test/test-gethostname.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								deps/libuv/test/test-gethostname.c
									
									
									
									
										vendored
									
									
								
							@@ -32,27 +32,27 @@ TEST_IMPL(gethostname) {
 | 
			
		||||
  /* Reject invalid inputs */
 | 
			
		||||
  size = 1;
 | 
			
		||||
  r = uv_os_gethostname(NULL, &size);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
  r = uv_os_gethostname(buf, NULL);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
  size = 0;
 | 
			
		||||
  r = uv_os_gethostname(buf, &size);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
 | 
			
		||||
  /* Return UV_ENOBUFS if the buffer cannot hold the hostname */
 | 
			
		||||
  enobufs_size = 1;
 | 
			
		||||
  buf[0] = '\0';
 | 
			
		||||
  r = uv_os_gethostname(buf, &enobufs_size);
 | 
			
		||||
  ASSERT_EQ(r, UV_ENOBUFS);
 | 
			
		||||
  ASSERT(buf[0] == '\0');
 | 
			
		||||
  ASSERT(enobufs_size > 1);
 | 
			
		||||
  ASSERT_EQ(buf[0], '\0');
 | 
			
		||||
  ASSERT_GT(enobufs_size, 1);
 | 
			
		||||
 | 
			
		||||
  /* Successfully get the hostname */
 | 
			
		||||
  size = UV_MAXHOSTNAMESIZE;
 | 
			
		||||
  r = uv_os_gethostname(buf, &size);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT(size > 0 && size == strlen(buf));
 | 
			
		||||
  ASSERT(size + 1 == enobufs_size);
 | 
			
		||||
  ASSERT_EQ(size + 1, enobufs_size);
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								deps/libuv/test/test-getnameinfo.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								deps/libuv/test/test-getnameinfo.c
									
									
									
									
										vendored
									
									
								
							@@ -39,7 +39,7 @@ static void getnameinfo_req(uv_getnameinfo_t* handle,
 | 
			
		||||
                            const char* hostname,
 | 
			
		||||
                            const char* service) {
 | 
			
		||||
  ASSERT_NOT_NULL(handle);
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
  ASSERT_NOT_NULL(hostname);
 | 
			
		||||
  ASSERT_NOT_NULL(service);
 | 
			
		||||
}
 | 
			
		||||
@@ -54,14 +54,14 @@ TEST_IMPL(getnameinfo_basic_ip4) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  r = uv_ip4_addr(address_ip4, port, &addr4);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_getnameinfo(uv_default_loop(),
 | 
			
		||||
                     &req,
 | 
			
		||||
                     &getnameinfo_req,
 | 
			
		||||
                     (const struct sockaddr*)&addr4,
 | 
			
		||||
                     0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
@@ -76,15 +76,15 @@ TEST_IMPL(getnameinfo_basic_ip4_sync) {
 | 
			
		||||
  RETURN_SKIP("Test does not currently work in QEMU");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr(address_ip4, port, &addr4));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr(address_ip4, port, &addr4));
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_getnameinfo(uv_default_loop(),
 | 
			
		||||
                             &req,
 | 
			
		||||
                             NULL,
 | 
			
		||||
                             (const struct sockaddr*)&addr4,
 | 
			
		||||
                             0));
 | 
			
		||||
  ASSERT(req.host[0] != '\0');
 | 
			
		||||
  ASSERT(req.service[0] != '\0');
 | 
			
		||||
  ASSERT_OK(uv_getnameinfo(uv_default_loop(),
 | 
			
		||||
                           &req,
 | 
			
		||||
                           NULL,
 | 
			
		||||
                           (const struct sockaddr*)&addr4,
 | 
			
		||||
                           0));
 | 
			
		||||
  ASSERT_NE(req.host[0], '\0');
 | 
			
		||||
  ASSERT_NE(req.service[0], '\0');
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -100,14 +100,14 @@ TEST_IMPL(getnameinfo_basic_ip6) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  r = uv_ip6_addr(address_ip6, port, &addr6);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_getnameinfo(uv_default_loop(),
 | 
			
		||||
                     &req,
 | 
			
		||||
                     &getnameinfo_req,
 | 
			
		||||
                     (const struct sockaddr*)&addr6,
 | 
			
		||||
                     0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										68
									
								
								deps/libuv/test/test-getsockname.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										68
									
								
								deps/libuv/test/test-getsockname.c
									
									
									
									
										vendored
									
									
								
							@@ -73,7 +73,7 @@ static void after_read(uv_stream_t* handle,
 | 
			
		||||
 | 
			
		||||
  req = (uv_shutdown_t*) malloc(sizeof *req);
 | 
			
		||||
  r = uv_shutdown(req, handle, after_shutdown);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -84,22 +84,22 @@ static void check_sockname(struct sockaddr* addr, const char* compare_ip,
 | 
			
		||||
  char check_ip[17];
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr(compare_ip, compare_port, &compare_addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr(compare_ip, compare_port, &compare_addr));
 | 
			
		||||
 | 
			
		||||
  /* Both addresses should be ipv4 */
 | 
			
		||||
  ASSERT(check_addr.sin_family == AF_INET);
 | 
			
		||||
  ASSERT(compare_addr.sin_family == AF_INET);
 | 
			
		||||
  ASSERT_EQ(check_addr.sin_family, AF_INET);
 | 
			
		||||
  ASSERT_EQ(compare_addr.sin_family, AF_INET);
 | 
			
		||||
 | 
			
		||||
  /* Check if the ip matches */
 | 
			
		||||
  ASSERT(memcmp(&check_addr.sin_addr,
 | 
			
		||||
         &compare_addr.sin_addr,
 | 
			
		||||
         sizeof compare_addr.sin_addr) == 0);
 | 
			
		||||
  ASSERT_OK(memcmp(&check_addr.sin_addr,
 | 
			
		||||
            &compare_addr.sin_addr,
 | 
			
		||||
            sizeof compare_addr.sin_addr));
 | 
			
		||||
 | 
			
		||||
  /* Check if the port matches. If port == 0 anything goes. */
 | 
			
		||||
  ASSERT(compare_port == 0 || check_addr.sin_port == compare_addr.sin_port);
 | 
			
		||||
 | 
			
		||||
  r = uv_ip4_name(&check_addr, (char*) check_ip, sizeof check_ip);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  printf("%s: %s:%d\n", context, check_ip, ntohs(check_addr.sin_port));
 | 
			
		||||
}
 | 
			
		||||
@@ -114,34 +114,34 @@ static void on_connection(uv_stream_t* server, int status) {
 | 
			
		||||
  if (status != 0) {
 | 
			
		||||
    fprintf(stderr, "Connect error %s\n", uv_err_name(status));
 | 
			
		||||
  }
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
 | 
			
		||||
  handle = malloc(sizeof(*handle));
 | 
			
		||||
  ASSERT_NOT_NULL(handle);
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_init(loop, handle);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  /* associate server with stream */
 | 
			
		||||
  handle->data = server;
 | 
			
		||||
 | 
			
		||||
  r = uv_accept(server, (uv_stream_t*)handle);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  namelen = sizeof sockname;
 | 
			
		||||
  r = uv_tcp_getsockname(handle, &sockname, &namelen);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  check_sockname(&sockname, "127.0.0.1", server_port, "accepted socket");
 | 
			
		||||
  getsocknamecount_tcp++;
 | 
			
		||||
 | 
			
		||||
  namelen = sizeof peername;
 | 
			
		||||
  r = uv_tcp_getpeername(handle, &peername, &namelen);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  check_sockname(&peername, "127.0.0.1", connect_port, "accepted socket peer");
 | 
			
		||||
  getpeernamecount++;
 | 
			
		||||
 | 
			
		||||
  r = uv_read_start((uv_stream_t*)handle, alloc, after_read);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -149,17 +149,17 @@ static void on_connect(uv_connect_t* req, int status) {
 | 
			
		||||
  struct sockaddr sockname, peername;
 | 
			
		||||
  int r, namelen;
 | 
			
		||||
 | 
			
		||||
  ASSERT(status == 0);
 | 
			
		||||
  ASSERT_OK(status);
 | 
			
		||||
 | 
			
		||||
  namelen = sizeof sockname;
 | 
			
		||||
  r = uv_tcp_getsockname((uv_tcp_t*) req->handle, &sockname, &namelen);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  check_sockname(&sockname, "127.0.0.1", 0, "connected socket");
 | 
			
		||||
  getsocknamecount_tcp++;
 | 
			
		||||
 | 
			
		||||
  namelen = sizeof peername;
 | 
			
		||||
  r = uv_tcp_getpeername((uv_tcp_t*) req->handle, &peername, &namelen);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  check_sockname(&peername, "127.0.0.1", server_port, "connected socket peer");
 | 
			
		||||
  getpeernamecount++;
 | 
			
		||||
 | 
			
		||||
@@ -173,7 +173,7 @@ static int tcp_listener(void) {
 | 
			
		||||
  int namelen;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("0.0.0.0", server_port, &addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("0.0.0.0", server_port, &addr));
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_init(loop, &tcpServer);
 | 
			
		||||
  if (r) {
 | 
			
		||||
@@ -196,13 +196,13 @@ static int tcp_listener(void) {
 | 
			
		||||
  memset(&sockname, -1, sizeof sockname);
 | 
			
		||||
  namelen = sizeof sockname;
 | 
			
		||||
  r = uv_tcp_getsockname(&tcpServer, &sockname, &namelen);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  check_sockname(&sockname, "0.0.0.0", server_port, "server socket");
 | 
			
		||||
  getsocknamecount_tcp++;
 | 
			
		||||
 | 
			
		||||
  namelen = sizeof sockname;
 | 
			
		||||
  r = uv_tcp_getpeername(&tcpServer, &peername, &namelen);
 | 
			
		||||
  ASSERT(r == UV_ENOTCONN);
 | 
			
		||||
  ASSERT_EQ(r, UV_ENOTCONN);
 | 
			
		||||
  getpeernamecount++;
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -214,7 +214,7 @@ static void tcp_connector(void) {
 | 
			
		||||
  struct sockaddr sockname;
 | 
			
		||||
  int r, namelen;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", server_port, &server_addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", server_port, &server_addr));
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_init(loop, &tcp);
 | 
			
		||||
  tcp.data = &connect_req;
 | 
			
		||||
@@ -230,9 +230,9 @@ static void tcp_connector(void) {
 | 
			
		||||
  namelen = sizeof sockname;
 | 
			
		||||
  r = uv_tcp_getsockname(&tcp, &sockname, &namelen);
 | 
			
		||||
  ASSERT(!r);
 | 
			
		||||
  ASSERT(sockname.sa_family == AF_INET);
 | 
			
		||||
  ASSERT_EQ(sockname.sa_family, AF_INET);
 | 
			
		||||
  connect_port = ntohs(((struct sockaddr_in*) &sockname)->sin_port);
 | 
			
		||||
  ASSERT(connect_port > 0);
 | 
			
		||||
  ASSERT_GT(connect_port, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -245,7 +245,7 @@ static void udp_recv(uv_udp_t* handle,
 | 
			
		||||
  int namelen;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(nread >= 0);
 | 
			
		||||
  ASSERT_GE(nread, 0);
 | 
			
		||||
  free(buf->base);
 | 
			
		||||
 | 
			
		||||
  if (nread == 0) {
 | 
			
		||||
@@ -255,7 +255,7 @@ static void udp_recv(uv_udp_t* handle,
 | 
			
		||||
  memset(&sockname, -1, sizeof sockname);
 | 
			
		||||
  namelen = sizeof(sockname);
 | 
			
		||||
  r = uv_udp_getsockname(&udp, &sockname, &namelen);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  check_sockname(&sockname, "0.0.0.0", 0, "udp receiving socket");
 | 
			
		||||
  getsocknamecount_udp++;
 | 
			
		||||
 | 
			
		||||
@@ -275,7 +275,7 @@ static int udp_listener(void) {
 | 
			
		||||
  int namelen;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("0.0.0.0", server_port, &addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("0.0.0.0", server_port, &addr));
 | 
			
		||||
 | 
			
		||||
  r = uv_udp_init(loop, &udpServer);
 | 
			
		||||
  if (r) {
 | 
			
		||||
@@ -292,12 +292,12 @@ static int udp_listener(void) {
 | 
			
		||||
  memset(&sockname, -1, sizeof sockname);
 | 
			
		||||
  namelen = sizeof sockname;
 | 
			
		||||
  r = uv_udp_getsockname(&udpServer, &sockname, &namelen);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  check_sockname(&sockname, "0.0.0.0", server_port, "udp listener socket");
 | 
			
		||||
  getsocknamecount_udp++;
 | 
			
		||||
 | 
			
		||||
  r = uv_udp_recv_start(&udpServer, alloc, udp_recv);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -312,7 +312,7 @@ static void udp_sender(void) {
 | 
			
		||||
  ASSERT(!r);
 | 
			
		||||
 | 
			
		||||
  buf = uv_buf_init("PING", 4);
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", server_port, &server_addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", server_port, &server_addr));
 | 
			
		||||
 | 
			
		||||
  r = uv_udp_send(&send_req,
 | 
			
		||||
                  &udp,
 | 
			
		||||
@@ -334,8 +334,8 @@ TEST_IMPL(getsockname_tcp) {
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(getsocknamecount_tcp == 3);
 | 
			
		||||
  ASSERT(getpeernamecount == 3);
 | 
			
		||||
  ASSERT_EQ(3, getsocknamecount_tcp);
 | 
			
		||||
  ASSERT_EQ(3, getpeernamecount);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -352,10 +352,10 @@ TEST_IMPL(getsockname_udp) {
 | 
			
		||||
 | 
			
		||||
  uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
 | 
			
		||||
  ASSERT(getsocknamecount_udp == 2);
 | 
			
		||||
  ASSERT_EQ(2, getsocknamecount_udp);
 | 
			
		||||
 | 
			
		||||
  ASSERT(udp.send_queue_size == 0);
 | 
			
		||||
  ASSERT(udpServer.send_queue_size == 0);
 | 
			
		||||
  ASSERT_OK(udp.send_queue_size);
 | 
			
		||||
  ASSERT_OK(udpServer.send_queue_size);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(loop);
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								deps/libuv/test/test-getters-setters.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										48
									
								
								deps/libuv/test/test-getters-setters.c
									
									
									
									
										vendored
									
									
								
							@@ -30,9 +30,9 @@ int cookie3;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST_IMPL(handle_type_name) {
 | 
			
		||||
  ASSERT(strcmp(uv_handle_type_name(UV_NAMED_PIPE), "pipe") == 0);
 | 
			
		||||
  ASSERT(strcmp(uv_handle_type_name(UV_UDP), "udp") == 0);
 | 
			
		||||
  ASSERT(strcmp(uv_handle_type_name(UV_FILE), "file") == 0);
 | 
			
		||||
  ASSERT_OK(strcmp(uv_handle_type_name(UV_NAMED_PIPE), "pipe"));
 | 
			
		||||
  ASSERT_OK(strcmp(uv_handle_type_name(UV_UDP), "udp"));
 | 
			
		||||
  ASSERT_OK(strcmp(uv_handle_type_name(UV_FILE), "file"));
 | 
			
		||||
  ASSERT_NULL(uv_handle_type_name(UV_HANDLE_TYPE_MAX));
 | 
			
		||||
  ASSERT_NULL(uv_handle_type_name(UV_HANDLE_TYPE_MAX + 1));
 | 
			
		||||
  ASSERT_NULL(uv_handle_type_name(UV_UNKNOWN_HANDLE));
 | 
			
		||||
@@ -41,9 +41,9 @@ TEST_IMPL(handle_type_name) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST_IMPL(req_type_name) {
 | 
			
		||||
  ASSERT(strcmp(uv_req_type_name(UV_REQ), "req") == 0);
 | 
			
		||||
  ASSERT(strcmp(uv_req_type_name(UV_UDP_SEND), "udp_send") == 0);
 | 
			
		||||
  ASSERT(strcmp(uv_req_type_name(UV_WORK), "work") == 0);
 | 
			
		||||
  ASSERT_OK(strcmp(uv_req_type_name(UV_REQ), "req"));
 | 
			
		||||
  ASSERT_OK(strcmp(uv_req_type_name(UV_UDP_SEND), "udp_send"));
 | 
			
		||||
  ASSERT_OK(strcmp(uv_req_type_name(UV_WORK), "work"));
 | 
			
		||||
  ASSERT_NULL(uv_req_type_name(UV_REQ_TYPE_MAX));
 | 
			
		||||
  ASSERT_NULL(uv_req_type_name(UV_REQ_TYPE_MAX + 1));
 | 
			
		||||
  ASSERT_NULL(uv_req_type_name(UV_UNKNOWN_REQ));
 | 
			
		||||
@@ -60,48 +60,48 @@ TEST_IMPL(getters_setters) {
 | 
			
		||||
  loop = malloc(uv_loop_size());
 | 
			
		||||
  ASSERT_NOT_NULL(loop);
 | 
			
		||||
  r = uv_loop_init(loop);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  uv_loop_set_data(loop, &cookie1);
 | 
			
		||||
  ASSERT(loop->data == &cookie1);
 | 
			
		||||
  ASSERT(uv_loop_get_data(loop) == &cookie1);
 | 
			
		||||
  ASSERT_PTR_EQ(loop->data, &cookie1);
 | 
			
		||||
  ASSERT_PTR_EQ(uv_loop_get_data(loop), &cookie1);
 | 
			
		||||
 | 
			
		||||
  pipe = malloc(uv_handle_size(UV_NAMED_PIPE));
 | 
			
		||||
  r = uv_pipe_init(loop, pipe, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(uv_handle_get_type((uv_handle_t*)pipe) == UV_NAMED_PIPE);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(uv_handle_get_type((uv_handle_t*)pipe), UV_NAMED_PIPE);
 | 
			
		||||
 | 
			
		||||
  ASSERT(uv_handle_get_loop((uv_handle_t*)pipe) == loop);
 | 
			
		||||
  ASSERT_PTR_EQ(uv_handle_get_loop((uv_handle_t*)pipe), loop);
 | 
			
		||||
  pipe->data = &cookie2;
 | 
			
		||||
  ASSERT(uv_handle_get_data((uv_handle_t*)pipe) == &cookie2);
 | 
			
		||||
  ASSERT_PTR_EQ(uv_handle_get_data((uv_handle_t*)pipe), &cookie2);
 | 
			
		||||
  uv_handle_set_data((uv_handle_t*)pipe, &cookie1);
 | 
			
		||||
  ASSERT(uv_handle_get_data((uv_handle_t*)pipe) == &cookie1);
 | 
			
		||||
  ASSERT(pipe->data == &cookie1);
 | 
			
		||||
  ASSERT_PTR_EQ(uv_handle_get_data((uv_handle_t*)pipe), &cookie1);
 | 
			
		||||
  ASSERT_PTR_EQ(pipe->data, &cookie1);
 | 
			
		||||
 | 
			
		||||
  ASSERT(uv_stream_get_write_queue_size((uv_stream_t*)pipe) == 0);
 | 
			
		||||
  ASSERT_OK(uv_stream_get_write_queue_size((uv_stream_t*)pipe));
 | 
			
		||||
  pipe->write_queue_size++;
 | 
			
		||||
  ASSERT(uv_stream_get_write_queue_size((uv_stream_t*)pipe) == 1);
 | 
			
		||||
  ASSERT_EQ(1, uv_stream_get_write_queue_size((uv_stream_t*)pipe));
 | 
			
		||||
  pipe->write_queue_size--;
 | 
			
		||||
  uv_close((uv_handle_t*)pipe, NULL);
 | 
			
		||||
 | 
			
		||||
  r = uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  fs = malloc(uv_req_size(UV_FS));
 | 
			
		||||
  uv_fs_stat(loop, fs, ".", NULL);
 | 
			
		||||
 | 
			
		||||
  r = uv_run(loop, UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  ASSERT(uv_fs_get_type(fs) == UV_FS_STAT);
 | 
			
		||||
  ASSERT(uv_fs_get_result(fs) == 0);
 | 
			
		||||
  ASSERT(uv_fs_get_ptr(fs) == uv_fs_get_statbuf(fs));
 | 
			
		||||
  ASSERT_EQ(uv_fs_get_type(fs), UV_FS_STAT);
 | 
			
		||||
  ASSERT_OK(uv_fs_get_result(fs));
 | 
			
		||||
  ASSERT_PTR_EQ(uv_fs_get_ptr(fs), uv_fs_get_statbuf(fs));
 | 
			
		||||
  ASSERT(uv_fs_get_statbuf(fs)->st_mode & S_IFDIR);
 | 
			
		||||
  ASSERT(strcmp(uv_fs_get_path(fs), ".") == 0);
 | 
			
		||||
  ASSERT_OK(strcmp(uv_fs_get_path(fs), "."));
 | 
			
		||||
  uv_fs_req_cleanup(fs);
 | 
			
		||||
 | 
			
		||||
  r = uv_loop_close(loop);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  free(pipe);
 | 
			
		||||
  free(fs);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								deps/libuv/test/test-gettimeofday.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								deps/libuv/test/test-gettimeofday.c
									
									
									
									
										vendored
									
									
								
							@@ -28,12 +28,12 @@ TEST_IMPL(gettimeofday) {
 | 
			
		||||
 | 
			
		||||
  tv.tv_sec = 0;
 | 
			
		||||
  r = uv_gettimeofday(&tv);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(tv.tv_sec != 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_NE(0, tv.tv_sec);
 | 
			
		||||
 | 
			
		||||
  /* Test invalid input. */
 | 
			
		||||
  r = uv_gettimeofday(NULL);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										42
									
								
								deps/libuv/test/test-handle-fileno.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								deps/libuv/test/test-handle-fileno.c
									
									
									
									
										vendored
									
									
								
							@@ -56,49 +56,49 @@ TEST_IMPL(handle_fileno) {
 | 
			
		||||
  uv_loop_t* loop;
 | 
			
		||||
 | 
			
		||||
  loop = uv_default_loop();
 | 
			
		||||
  ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
  ASSERT_OK(uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
 | 
			
		||||
 | 
			
		||||
  r = uv_idle_init(loop, &idle);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fileno((uv_handle_t*) &idle, &fd);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
  uv_close((uv_handle_t*) &idle, NULL);
 | 
			
		||||
 | 
			
		||||
  r = uv_tcp_init(loop, &tcp);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fileno((uv_handle_t*) &tcp, &fd);
 | 
			
		||||
  ASSERT(r == UV_EBADF);
 | 
			
		||||
  ASSERT_EQ(r, UV_EBADF);
 | 
			
		||||
  r = uv_tcp_bind(&tcp, (const struct sockaddr*) &addr, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fileno((uv_handle_t*) &tcp, &fd);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_close((uv_handle_t*) &tcp, NULL);
 | 
			
		||||
  r = uv_fileno((uv_handle_t*) &tcp, &fd);
 | 
			
		||||
  ASSERT(r == UV_EBADF);
 | 
			
		||||
  ASSERT_EQ(r, UV_EBADF);
 | 
			
		||||
 | 
			
		||||
  r = uv_udp_init(loop, &udp);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fileno((uv_handle_t*) &udp, &fd);
 | 
			
		||||
  ASSERT(r == UV_EBADF);
 | 
			
		||||
  ASSERT_EQ(r, UV_EBADF);
 | 
			
		||||
  r = uv_udp_bind(&udp, (const struct sockaddr*) &addr, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fileno((uv_handle_t*) &udp, &fd);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_close((uv_handle_t*) &udp, NULL);
 | 
			
		||||
  r = uv_fileno((uv_handle_t*) &udp, &fd);
 | 
			
		||||
  ASSERT(r == UV_EBADF);
 | 
			
		||||
  ASSERT_EQ(r, UV_EBADF);
 | 
			
		||||
 | 
			
		||||
  r = uv_pipe_init(loop, &pipe, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fileno((uv_handle_t*) &pipe, &fd);
 | 
			
		||||
  ASSERT(r == UV_EBADF);
 | 
			
		||||
  ASSERT_EQ(r, UV_EBADF);
 | 
			
		||||
  r = uv_pipe_bind(&pipe, TEST_PIPENAME);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_fileno((uv_handle_t*) &pipe, &fd);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  uv_close((uv_handle_t*) &pipe, NULL);
 | 
			
		||||
  r = uv_fileno((uv_handle_t*) &pipe, &fd);
 | 
			
		||||
  ASSERT(r == UV_EBADF);
 | 
			
		||||
  ASSERT_EQ(r, UV_EBADF);
 | 
			
		||||
 | 
			
		||||
  tty_fd = get_tty_fd();
 | 
			
		||||
  if (tty_fd < 0) {
 | 
			
		||||
@@ -106,14 +106,14 @@ TEST_IMPL(handle_fileno) {
 | 
			
		||||
    fflush(stderr);
 | 
			
		||||
  } else {
 | 
			
		||||
    r = uv_tty_init(loop, &tty, tty_fd, 0);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
    ASSERT(uv_is_readable((uv_stream_t*) &tty));
 | 
			
		||||
    ASSERT(!uv_is_writable((uv_stream_t*) &tty));
 | 
			
		||||
    r = uv_fileno((uv_handle_t*) &tty, &fd);
 | 
			
		||||
    ASSERT(r == 0);
 | 
			
		||||
    ASSERT_OK(r);
 | 
			
		||||
    uv_close((uv_handle_t*) &tty, NULL);
 | 
			
		||||
    r = uv_fileno((uv_handle_t*) &tty, &fd);
 | 
			
		||||
    ASSERT(r == UV_EBADF);
 | 
			
		||||
    ASSERT_EQ(r, UV_EBADF);
 | 
			
		||||
    ASSERT(!uv_is_readable((uv_stream_t*) &tty));
 | 
			
		||||
    ASSERT(!uv_is_writable((uv_stream_t*) &tty));
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								deps/libuv/test/test-homedir.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								deps/libuv/test/test-homedir.c
									
									
									
									
										vendored
									
									
								
							@@ -34,39 +34,39 @@ TEST_IMPL(homedir) {
 | 
			
		||||
  /* Test the normal case */
 | 
			
		||||
  len = sizeof homedir;
 | 
			
		||||
  homedir[0] = '\0';
 | 
			
		||||
  ASSERT(strlen(homedir) == 0);
 | 
			
		||||
  ASSERT_OK(strlen(homedir));
 | 
			
		||||
  r = uv_os_homedir(homedir, &len);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT(strlen(homedir) == len);
 | 
			
		||||
  ASSERT(len > 0);
 | 
			
		||||
  ASSERT(homedir[len] == '\0');
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  ASSERT_EQ(strlen(homedir), len);
 | 
			
		||||
  ASSERT_GT(len, 0);
 | 
			
		||||
  ASSERT_EQ(homedir[len], '\0');
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
  if (len == 3 && homedir[1] == ':')
 | 
			
		||||
    ASSERT(homedir[2] == '\\');
 | 
			
		||||
    ASSERT_EQ(homedir[2], '\\');
 | 
			
		||||
  else
 | 
			
		||||
    ASSERT(homedir[len - 1] != '\\');
 | 
			
		||||
    ASSERT_NE(homedir[len - 1], '\\');
 | 
			
		||||
#else
 | 
			
		||||
  if (len == 1)
 | 
			
		||||
    ASSERT(homedir[0] == '/');
 | 
			
		||||
    ASSERT_EQ(homedir[0], '/');
 | 
			
		||||
  else
 | 
			
		||||
    ASSERT(homedir[len - 1] != '/');
 | 
			
		||||
    ASSERT_NE(homedir[len - 1], '/');
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  /* Test the case where the buffer is too small */
 | 
			
		||||
  len = SMALLPATH;
 | 
			
		||||
  r = uv_os_homedir(homedir, &len);
 | 
			
		||||
  ASSERT(r == UV_ENOBUFS);
 | 
			
		||||
  ASSERT(len > SMALLPATH);
 | 
			
		||||
  ASSERT_EQ(r, UV_ENOBUFS);
 | 
			
		||||
  ASSERT_GT(len, SMALLPATH);
 | 
			
		||||
 | 
			
		||||
  /* Test invalid inputs */
 | 
			
		||||
  r = uv_os_homedir(NULL, &len);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
  r = uv_os_homedir(homedir, NULL);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
  len = 0;
 | 
			
		||||
  r = uv_os_homedir(homedir, &len);
 | 
			
		||||
  ASSERT(r == UV_EINVAL);
 | 
			
		||||
  ASSERT_EQ(r, UV_EINVAL);
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								deps/libuv/test/test-hrtime.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								deps/libuv/test/test-hrtime.c
									
									
									
									
										vendored
									
									
								
							@@ -45,7 +45,7 @@ TEST_IMPL(hrtime) {
 | 
			
		||||
     * that the difference between the two hrtime values has a reasonable
 | 
			
		||||
     * lower bound.
 | 
			
		||||
     */
 | 
			
		||||
    ASSERT(diff > (uint64_t) 25 * NANOSEC / MILLISEC);
 | 
			
		||||
    ASSERT_UINT64_GT(diff, (uint64_t) 25 * NANOSEC / MILLISEC);
 | 
			
		||||
    --i;
 | 
			
		||||
  }
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -57,8 +57,8 @@ TEST_IMPL(clock_gettime) {
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(UV_EINVAL, uv_clock_gettime(1337, &t));
 | 
			
		||||
  ASSERT_EQ(UV_EFAULT, uv_clock_gettime(1337, NULL));
 | 
			
		||||
  ASSERT_EQ(0, uv_clock_gettime(UV_CLOCK_MONOTONIC, &t));
 | 
			
		||||
  ASSERT_EQ(0, uv_clock_gettime(UV_CLOCK_REALTIME, &t));
 | 
			
		||||
  ASSERT_OK(uv_clock_gettime(UV_CLOCK_MONOTONIC, &t));
 | 
			
		||||
  ASSERT_OK(uv_clock_gettime(UV_CLOCK_REALTIME, &t));
 | 
			
		||||
  ASSERT_GT(1682500000000ll, t.tv_sec);  /* 2023-04-26T09:06:40.000Z */
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										38
									
								
								deps/libuv/test/test-idle.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										38
									
								
								deps/libuv/test/test-idle.c
									
									
									
									
										vendored
									
									
								
							@@ -39,7 +39,7 @@ static void close_cb(uv_handle_t* handle) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void timer_cb(uv_timer_t* handle) {
 | 
			
		||||
  ASSERT(handle == &timer_handle);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, &timer_handle);
 | 
			
		||||
 | 
			
		||||
  uv_close((uv_handle_t*) &idle_handle, close_cb);
 | 
			
		||||
  uv_close((uv_handle_t*) &check_handle, close_cb);
 | 
			
		||||
@@ -52,7 +52,7 @@ static void timer_cb(uv_timer_t* handle) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void idle_cb(uv_idle_t* handle) {
 | 
			
		||||
  ASSERT(handle == &idle_handle);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, &idle_handle);
 | 
			
		||||
 | 
			
		||||
  idle_cb_called++;
 | 
			
		||||
  fprintf(stderr, "idle_cb %d\n", idle_cb_called);
 | 
			
		||||
@@ -61,7 +61,7 @@ static void idle_cb(uv_idle_t* handle) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void check_cb(uv_check_t* handle) {
 | 
			
		||||
  ASSERT(handle == &check_handle);
 | 
			
		||||
  ASSERT_PTR_EQ(handle, &check_handle);
 | 
			
		||||
 | 
			
		||||
  check_cb_called++;
 | 
			
		||||
  fprintf(stderr, "check_cb %d\n", check_cb_called);
 | 
			
		||||
@@ -73,26 +73,26 @@ TEST_IMPL(idle_starvation) {
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  r = uv_idle_init(uv_default_loop(), &idle_handle);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_idle_start(&idle_handle, idle_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_check_init(uv_default_loop(), &check_handle);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_check_start(&check_handle, check_cb);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_timer_init(uv_default_loop(), &timer_handle);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
  r = uv_timer_start(&timer_handle, timer_cb, 50, 0);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  r = uv_run(uv_default_loop(), UV_RUN_DEFAULT);
 | 
			
		||||
  ASSERT(r == 0);
 | 
			
		||||
  ASSERT_OK(r);
 | 
			
		||||
 | 
			
		||||
  ASSERT(idle_cb_called > 0);
 | 
			
		||||
  ASSERT(timer_cb_called == 1);
 | 
			
		||||
  ASSERT(close_cb_called == 3);
 | 
			
		||||
  ASSERT_GT(idle_cb_called, 0);
 | 
			
		||||
  ASSERT_EQ(1, timer_cb_called);
 | 
			
		||||
  ASSERT_EQ(3, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -105,19 +105,19 @@ static void idle_stop(uv_idle_t* handle) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST_IMPL(idle_check) {
 | 
			
		||||
  ASSERT_EQ(0, uv_idle_init(uv_default_loop(), &idle_handle));
 | 
			
		||||
  ASSERT_EQ(0, uv_idle_start(&idle_handle, idle_stop));
 | 
			
		||||
  ASSERT_OK(uv_idle_init(uv_default_loop(), &idle_handle));
 | 
			
		||||
  ASSERT_OK(uv_idle_start(&idle_handle, idle_stop));
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, uv_check_init(uv_default_loop(), &check_handle));
 | 
			
		||||
  ASSERT_EQ(0, uv_check_start(&check_handle, check_cb));
 | 
			
		||||
  ASSERT_OK(uv_check_init(uv_default_loop(), &check_handle));
 | 
			
		||||
  ASSERT_OK(uv_check_start(&check_handle, check_cb));
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(1, uv_run(uv_default_loop(), UV_RUN_ONCE));
 | 
			
		||||
  ASSERT_EQ(1, check_cb_called);
 | 
			
		||||
 | 
			
		||||
  ASSERT_EQ(0, close_cb_called);
 | 
			
		||||
  ASSERT_OK(close_cb_called);
 | 
			
		||||
  uv_close((uv_handle_t*) &idle_handle, close_cb);
 | 
			
		||||
  uv_close((uv_handle_t*) &check_handle, close_cb);
 | 
			
		||||
  ASSERT_EQ(0, uv_run(uv_default_loop(), UV_RUN_ONCE));
 | 
			
		||||
  ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_ONCE));
 | 
			
		||||
  ASSERT_EQ(2, close_cb_called);
 | 
			
		||||
 | 
			
		||||
  MAKE_VALGRIND_HAPPY(uv_default_loop());
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										73
									
								
								deps/libuv/test/test-idna.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										73
									
								
								deps/libuv/test/test-idna.c
									
									
									
									
										vendored
									
									
								
							@@ -20,6 +20,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "task.h"
 | 
			
		||||
#define uv__malloc malloc
 | 
			
		||||
#include "../src/idna.c"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
@@ -31,66 +32,66 @@ TEST_IMPL(utf8_decode1) {
 | 
			
		||||
  /* ASCII. */
 | 
			
		||||
  p = b;
 | 
			
		||||
  snprintf(b, sizeof(b), "%c\x7F", 0x00);
 | 
			
		||||
  ASSERT(0 == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 1);
 | 
			
		||||
  ASSERT(127 == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 2);
 | 
			
		||||
  ASSERT_OK(uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 1);
 | 
			
		||||
  ASSERT_EQ(127, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 2);
 | 
			
		||||
 | 
			
		||||
  /* Two-byte sequences. */
 | 
			
		||||
  p = b;
 | 
			
		||||
  snprintf(b, sizeof(b), "\xC2\x80\xDF\xBF");
 | 
			
		||||
  ASSERT(128 == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 2);
 | 
			
		||||
  ASSERT(0x7FF == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 4);
 | 
			
		||||
  ASSERT_EQ(128, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 2);
 | 
			
		||||
  ASSERT_EQ(0x7FF, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 4);
 | 
			
		||||
 | 
			
		||||
  /* Three-byte sequences. */
 | 
			
		||||
  p = b;
 | 
			
		||||
  snprintf(b, sizeof(b), "\xE0\xA0\x80\xEF\xBF\xBF");
 | 
			
		||||
  ASSERT(0x800 == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 3);
 | 
			
		||||
  ASSERT(0xFFFF == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 6);
 | 
			
		||||
  ASSERT_EQ(0x800, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 3);
 | 
			
		||||
  ASSERT_EQ(0xFFFF, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 6);
 | 
			
		||||
 | 
			
		||||
  /* Four-byte sequences. */
 | 
			
		||||
  p = b;
 | 
			
		||||
  snprintf(b, sizeof(b), "\xF0\x90\x80\x80\xF4\x8F\xBF\xBF");
 | 
			
		||||
  ASSERT(0x10000 == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 4);
 | 
			
		||||
  ASSERT(0x10FFFF == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 8);
 | 
			
		||||
  ASSERT_EQ(0x10000, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 4);
 | 
			
		||||
  ASSERT_EQ(0x10FFFF, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 8);
 | 
			
		||||
 | 
			
		||||
  /* Four-byte sequences > U+10FFFF; disallowed. */
 | 
			
		||||
  p = b;
 | 
			
		||||
  snprintf(b, sizeof(b), "\xF4\x90\xC0\xC0\xF7\xBF\xBF\xBF");
 | 
			
		||||
  ASSERT((unsigned) -1 == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 4);
 | 
			
		||||
  ASSERT((unsigned) -1 == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 8);
 | 
			
		||||
  ASSERT_EQ((unsigned) -1, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 4);
 | 
			
		||||
  ASSERT_EQ((unsigned) -1, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 8);
 | 
			
		||||
 | 
			
		||||
  /* Overlong; disallowed. */
 | 
			
		||||
  p = b;
 | 
			
		||||
  snprintf(b, sizeof(b), "\xC0\x80\xC1\x80");
 | 
			
		||||
  ASSERT((unsigned) -1 == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 2);
 | 
			
		||||
  ASSERT((unsigned) -1 == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 4);
 | 
			
		||||
  ASSERT_EQ((unsigned) -1, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 2);
 | 
			
		||||
  ASSERT_EQ((unsigned) -1, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 4);
 | 
			
		||||
 | 
			
		||||
  /* Surrogate pairs; disallowed. */
 | 
			
		||||
  p = b;
 | 
			
		||||
  snprintf(b, sizeof(b), "\xED\xA0\x80\xED\xA3\xBF");
 | 
			
		||||
  ASSERT((unsigned) -1 == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 3);
 | 
			
		||||
  ASSERT((unsigned) -1 == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT(p == b + 6);
 | 
			
		||||
  ASSERT_EQ((unsigned) -1, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 3);
 | 
			
		||||
  ASSERT_EQ((unsigned) -1, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
  ASSERT_PTR_EQ(p, b + 6);
 | 
			
		||||
 | 
			
		||||
  /* Simply illegal. */
 | 
			
		||||
  p = b;
 | 
			
		||||
  snprintf(b, sizeof(b), "\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF");
 | 
			
		||||
 | 
			
		||||
  for (i = 1; i <= 8; i++) {
 | 
			
		||||
    ASSERT((unsigned) -1 == uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
    ASSERT(p == b + i);
 | 
			
		||||
    ASSERT_EQ((unsigned) -1, uv__utf8_decode1(&p, b + sizeof(b)));
 | 
			
		||||
    ASSERT_PTR_EQ(p, b + i);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -122,7 +123,7 @@ TEST_IMPL(utf8_decode1_overrun) {
 | 
			
		||||
  do {                                                                        \
 | 
			
		||||
    char d[256] = {0};                                                        \
 | 
			
		||||
    static const char s[] = "" input "";                                      \
 | 
			
		||||
    ASSERT(err == uv__idna_toascii(s, s + sizeof(s) - 1, d, d + sizeof(d)));  \
 | 
			
		||||
    ASSERT_EQ(err, uv__idna_toascii(s, s + sizeof(s) - 1, d, d + sizeof(d))); \
 | 
			
		||||
  } while (0)
 | 
			
		||||
 | 
			
		||||
#define T(input, expected)                                                    \
 | 
			
		||||
@@ -132,13 +133,13 @@ TEST_IMPL(utf8_decode1_overrun) {
 | 
			
		||||
    char d2[256] = {0};                                                       \
 | 
			
		||||
    static const char s[] = "" input "";                                      \
 | 
			
		||||
    n = uv__idna_toascii(s, s + sizeof(s) - 1, d1, d1 + sizeof(d1));          \
 | 
			
		||||
    ASSERT(n == sizeof(expected));                                            \
 | 
			
		||||
    ASSERT(0 == memcmp(d1, expected, n));                                     \
 | 
			
		||||
    ASSERT_EQ(n, sizeof(expected));                                           \
 | 
			
		||||
    ASSERT_OK(memcmp(d1, expected, n));                                       \
 | 
			
		||||
    /* Sanity check: encoding twice should not change the output. */          \
 | 
			
		||||
    n = uv__idna_toascii(d1, d1 + strlen(d1), d2, d2 + sizeof(d2));           \
 | 
			
		||||
    ASSERT(n == sizeof(expected));                                            \
 | 
			
		||||
    ASSERT(0 == memcmp(d2, expected, n));                                     \
 | 
			
		||||
    ASSERT(0 == memcmp(d1, d2, sizeof(d2)));                                  \
 | 
			
		||||
    ASSERT_EQ(n, sizeof(expected));                                           \
 | 
			
		||||
    ASSERT_OK(memcmp(d2, expected, n));                                       \
 | 
			
		||||
    ASSERT_OK(memcmp(d1, d2, sizeof(d2)));                                    \
 | 
			
		||||
  } while (0)
 | 
			
		||||
 | 
			
		||||
TEST_IMPL(idna_toascii) {
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user