From 9a469914c71dfe01399b24a2d8bb44cfdbfec15d Mon Sep 17 00:00:00 2001 From: James Roberts Date: Tue, 3 Aug 2021 21:00:21 +0200 Subject: [PATCH] Remove dependecy folders --- .gitignore | 3 + Makefile | 3 +- libuv/.gitattributes | 1 - libuv/.github/ISSUE_TEMPLATE.md | 13 - libuv/.github/stale.yml | 24 - libuv/.github/workflows/CI.yml | 69 - libuv/.github/workflows/sanitizer.yml | 17 - libuv/.gitignore | 76 - libuv/.mailmap | 60 - libuv/.readthedocs.yaml | 11 - libuv/AUTHORS | 481 -- libuv/CMakeLists.txt | 670 --- libuv/CONTRIBUTING.md | 171 - libuv/ChangeLog | 5209 ----------------- libuv/LICENSE | 70 - libuv/LICENSE-docs | 396 -- libuv/LINKS.md | 101 - libuv/MAINTAINERS.md | 51 - libuv/Makefile.am | 549 -- libuv/README.md | 333 -- libuv/SUPPORTED_PLATFORMS.md | 69 - libuv/autogen.sh | 46 - libuv/configure.ac | 88 - libuv/docs/code/cgi/main.c | 81 - libuv/docs/code/cgi/tick.c | 13 - libuv/docs/code/detach/main.c | 31 - libuv/docs/code/dns/main.c | 80 - libuv/docs/code/helloworld/main.c | 15 - libuv/docs/code/idle-basic/main.c | 24 - libuv/docs/code/idle-compute/main.c | 43 - libuv/docs/code/interfaces/main.c | 33 - libuv/docs/code/locks/main.c | 57 - libuv/docs/code/multi-echo-server/hammer.js | 20 - libuv/docs/code/multi-echo-server/main.c | 114 - libuv/docs/code/multi-echo-server/worker.c | 88 - libuv/docs/code/onchange/main.c | 44 - libuv/docs/code/pipe-echo-server/main.c | 94 - libuv/docs/code/plugin/hello.c | 5 - libuv/docs/code/plugin/main.c | 39 - libuv/docs/code/plugin/plugin.h | 7 - libuv/docs/code/proc-streams/main.c | 49 - libuv/docs/code/proc-streams/test.c | 8 - libuv/docs/code/progress/main.c | 47 - libuv/docs/code/queue-cancel/main.c | 59 - libuv/docs/code/queue-work/main.c | 44 - libuv/docs/code/ref-timer/main.c | 29 - libuv/docs/code/signal/main.c | 66 - libuv/docs/code/spawn/main.c | 36 - libuv/docs/code/tcp-echo-server/main.c | 87 - libuv/docs/code/thread-create/main.c | 36 - libuv/docs/code/tty-gravity/main.c | 48 - libuv/docs/code/tty/main.c | 29 - libuv/docs/code/udp-dhcp/main.c | 127 - libuv/docs/code/uvcat/main.c | 63 - libuv/docs/code/uvstop/main.c | 33 - libuv/docs/code/uvtee/main.c | 80 - libuv/docs/code/uvwget/main.c | 166 - libuv/docs/make.bat | 243 - libuv/docs/requirements.txt | 42 - libuv/docs/src/api.rst | 36 - libuv/docs/src/async.rst | 65 - libuv/docs/src/check.rst | 54 - libuv/docs/src/conf.py | 348 -- libuv/docs/src/design.rst | 140 - libuv/docs/src/dll.rst | 44 - libuv/docs/src/dns.rst | 108 - libuv/docs/src/errors.rst | 385 -- libuv/docs/src/fs.rst | 702 --- libuv/docs/src/fs_event.rst | 132 - libuv/docs/src/fs_poll.rst | 77 - libuv/docs/src/guide.rst | 22 - libuv/docs/src/guide/about.rst | 22 - libuv/docs/src/guide/basics.rst | 221 - libuv/docs/src/guide/eventloops.rst | 50 - libuv/docs/src/guide/filesystem.rst | 339 -- libuv/docs/src/guide/introduction.rst | 75 - libuv/docs/src/guide/networking.rst | 257 - libuv/docs/src/guide/processes.rst | 421 -- libuv/docs/src/guide/threads.rst | 397 -- libuv/docs/src/guide/utilities.rst | 450 -- libuv/docs/src/handle.rst | 283 - libuv/docs/src/idle.rst | 62 - libuv/docs/src/index.rst | 62 - libuv/docs/src/loop.rst | 245 - libuv/docs/src/metrics.rst | 27 - libuv/docs/src/migration_010_100.rst | 244 - libuv/docs/src/misc.rst | 755 --- libuv/docs/src/pipe.rst | 138 - libuv/docs/src/poll.rst | 148 - libuv/docs/src/prepare.rst | 54 - libuv/docs/src/process.rst | 251 - libuv/docs/src/request.rst | 117 - libuv/docs/src/signal.rst | 101 - libuv/docs/src/sphinx-plugins/manpage.py | 45 - libuv/docs/src/static/architecture.png | Bin 206767 -> 0 bytes .../src/static/diagrams.key/Data/st0-311.jpg | Bin 14413 -> 0 bytes .../src/static/diagrams.key/Data/st1-475.jpg | Bin 8284 -> 0 bytes libuv/docs/src/static/diagrams.key/Index.zip | Bin 71160 -> 0 bytes .../Metadata/BuildVersionHistory.plist | 8 - .../diagrams.key/Metadata/DocumentIdentifier | 1 - .../diagrams.key/Metadata/Properties.plist | Bin 340 -> 0 bytes .../src/static/diagrams.key/preview-micro.jpg | Bin 1425 -> 0 bytes .../src/static/diagrams.key/preview-web.jpg | Bin 8106 -> 0 bytes .../docs/src/static/diagrams.key/preview.jpg | Bin 107456 -> 0 bytes libuv/docs/src/static/favicon.ico | Bin 15086 -> 0 bytes libuv/docs/src/static/logo.png | Bin 33545 -> 0 bytes libuv/docs/src/static/loop_iteration.png | Bin 80528 -> 0 bytes libuv/docs/src/stream.rst | 258 - libuv/docs/src/tcp.rst | 146 - libuv/docs/src/threading.rst | 197 - libuv/docs/src/threadpool.rst | 69 - libuv/docs/src/timer.rst | 88 - libuv/docs/src/tty.rst | 140 - libuv/docs/src/udp.rst | 450 -- libuv/docs/src/upgrading.rst | 11 - libuv/docs/src/version.rst | 60 - libuv/img/banner.png | Bin 44102 -> 0 bytes libuv/img/logos.svg | 152 - libuv/include/uv.h | 1846 ------ libuv/include/uv/aix.h | 32 - libuv/include/uv/android-ifaddrs.h | 54 - libuv/include/uv/bsd.h | 34 - libuv/include/uv/darwin.h | 61 - libuv/include/uv/errno.h | 460 -- libuv/include/uv/linux.h | 34 - libuv/include/uv/os390.h | 33 - libuv/include/uv/posix.h | 31 - libuv/include/uv/stdint-msvc2008.h | 247 - libuv/include/uv/sunos.h | 44 - libuv/include/uv/threadpool.h | 37 - libuv/include/uv/tree.h | 768 --- libuv/include/uv/unix.h | 507 -- libuv/include/uv/version.h | 43 - libuv/include/uv/win.h | 691 --- libuv/libuv-static.pc.in | 12 - libuv/libuv.pc.in | 12 - libuv/m4/.gitignore | 5 - libuv/m4/as_case.m4 | 21 - libuv/m4/ax_pthread.m4 | 485 -- libuv/m4/libuv-check-flags.m4 | 319 - libuv/src/fs-poll.c | 287 - libuv/src/heap-inl.h | 245 - libuv/src/idna.c | 314 - libuv/src/idna.h | 31 - libuv/src/inet.c | 303 - libuv/src/queue.h | 108 - libuv/src/random.c | 123 - libuv/src/strscpy.c | 38 - libuv/src/strscpy.h | 39 - libuv/src/threadpool.c | 386 -- libuv/src/timer.c | 185 - libuv/src/unix/aix-common.c | 89 - libuv/src/unix/aix.c | 1304 ----- libuv/src/unix/android-ifaddrs.c | 713 --- libuv/src/unix/async.c | 253 - libuv/src/unix/atomic-ops.h | 63 - libuv/src/unix/bsd-ifaddrs.c | 163 - libuv/src/unix/bsd-proctitle.c | 100 - libuv/src/unix/core.c | 1623 ----- libuv/src/unix/cygwin.c | 53 - libuv/src/unix/darwin-proctitle.c | 192 - libuv/src/unix/darwin-stub.h | 113 - libuv/src/unix/darwin.c | 375 -- libuv/src/unix/dl.c | 80 - libuv/src/unix/epoll.c | 422 -- libuv/src/unix/freebsd.c | 289 - libuv/src/unix/fs.c | 2206 ------- libuv/src/unix/fsevents.c | 916 --- libuv/src/unix/getaddrinfo.c | 252 - libuv/src/unix/getnameinfo.c | 121 - libuv/src/unix/haiku.c | 167 - libuv/src/unix/ibmi.c | 537 -- libuv/src/unix/internal.h | 360 -- libuv/src/unix/kqueue.c | 585 -- libuv/src/unix/linux-core.c | 766 --- libuv/src/unix/linux-inotify.c | 327 -- libuv/src/unix/linux-syscalls.c | 264 - libuv/src/unix/linux-syscalls.h | 78 - libuv/src/unix/loop-watcher.c | 68 - libuv/src/unix/loop.c | 228 - libuv/src/unix/netbsd.c | 259 - libuv/src/unix/no-fsevents.c | 42 - libuv/src/unix/no-proctitle.c | 45 - libuv/src/unix/openbsd.c | 240 - libuv/src/unix/os390-proctitle.c | 136 - libuv/src/unix/os390-syscalls.c | 529 -- libuv/src/unix/os390-syscalls.h | 74 - libuv/src/unix/os390.c | 877 --- libuv/src/unix/pipe.c | 435 -- libuv/src/unix/poll.c | 160 - libuv/src/unix/posix-hrtime.c | 35 - libuv/src/unix/posix-poll.c | 374 -- libuv/src/unix/process.c | 549 -- libuv/src/unix/procfs-exepath.c | 45 - libuv/src/unix/proctitle.c | 157 - libuv/src/unix/pthread-fixes.c | 58 - libuv/src/unix/qnx.c | 137 - libuv/src/unix/random-devurandom.c | 93 - libuv/src/unix/random-getentropy.c | 57 - libuv/src/unix/random-getrandom.c | 88 - libuv/src/unix/random-sysctl-linux.c | 99 - libuv/src/unix/signal.c | 558 -- libuv/src/unix/spinlock.h | 53 - libuv/src/unix/stream.c | 1678 ------ libuv/src/unix/sunos.c | 878 --- libuv/src/unix/sysinfo-loadavg.c | 36 - libuv/src/unix/sysinfo-memory.c | 42 - libuv/src/unix/tcp.c | 510 -- libuv/src/unix/thread.c | 842 --- libuv/src/unix/tty.c | 420 -- libuv/src/unix/udp.c | 1358 ----- libuv/src/uv-common.c | 951 --- libuv/src/uv-common.h | 373 -- libuv/src/uv-data-getter-setters.c | 119 - libuv/src/version.c | 45 - libuv/src/win/async.c | 98 - libuv/src/win/atomicops-inl.h | 61 - libuv/src/win/core.c | 748 --- libuv/src/win/detect-wakeup.c | 56 - libuv/src/win/dl.c | 136 - libuv/src/win/error.c | 173 - libuv/src/win/fs-event.c | 608 -- libuv/src/win/fs-fd-hash-inl.h | 200 - libuv/src/win/fs.c | 3427 ----------- libuv/src/win/getaddrinfo.c | 463 -- libuv/src/win/getnameinfo.c | 157 - libuv/src/win/handle-inl.h | 180 - libuv/src/win/handle.c | 162 - libuv/src/win/internal.h | 344 -- libuv/src/win/loop-watcher.c | 122 - libuv/src/win/pipe.c | 2591 -------- libuv/src/win/poll.c | 585 -- libuv/src/win/process-stdio.c | 416 -- libuv/src/win/process.c | 1281 ---- libuv/src/win/req-inl.h | 221 - libuv/src/win/signal.c | 282 - libuv/src/win/snprintf.c | 42 - libuv/src/win/stream-inl.h | 54 - libuv/src/win/stream.c | 246 - libuv/src/win/tcp.c | 1697 ------ libuv/src/win/thread.c | 520 -- libuv/src/win/tty.c | 2452 -------- libuv/src/win/udp.c | 1181 ---- libuv/src/win/util.c | 1984 ------- libuv/src/win/winapi.c | 137 - libuv/src/win/winapi.h | 4762 --------------- libuv/src/win/winsock.c | 575 -- libuv/src/win/winsock.h | 201 - libuv/test/benchmark-async-pummel.c | 119 - libuv/test/benchmark-async.c | 141 - libuv/test/benchmark-fs-stat.c | 136 - libuv/test/benchmark-getaddrinfo.c | 92 - libuv/test/benchmark-list.h | 164 - libuv/test/benchmark-loop-count.c | 92 - libuv/test/benchmark-million-async.c | 112 - libuv/test/benchmark-million-timers.c | 86 - libuv/test/benchmark-multi-accept.c | 451 -- libuv/test/benchmark-ping-pongs.c | 221 - libuv/test/benchmark-ping-udp.c | 163 - libuv/test/benchmark-pound.c | 351 -- libuv/test/benchmark-pump.c | 478 -- libuv/test/benchmark-sizes.c | 46 - libuv/test/benchmark-spawn.c | 164 - libuv/test/benchmark-tcp-write-batch.c | 144 - libuv/test/benchmark-thread.c | 64 - libuv/test/benchmark-udp-pummel.c | 243 - libuv/test/blackhole-server.c | 122 - libuv/test/dns-server.c | 340 -- libuv/test/echo-server.c | 431 -- libuv/test/fixtures/empty_file | 0 libuv/test/fixtures/load_error.node | 1 - libuv/test/fixtures/lorem_ipsum.txt | 1 - libuv/test/run-benchmarks.c | 72 - libuv/test/run-tests.c | 276 - libuv/test/runner-unix.c | 445 -- libuv/test/runner-unix.h | 36 - libuv/test/runner-win.c | 346 -- libuv/test/runner-win.h | 41 - libuv/test/runner.c | 453 -- libuv/test/runner.h | 172 - libuv/test/task.h | 378 -- libuv/test/test-active.c | 84 - libuv/test/test-async-null-cb.c | 64 - libuv/test/test-async.c | 134 - libuv/test/test-barrier.c | 148 - libuv/test/test-callback-order.c | 77 - libuv/test/test-callback-stack.c | 204 - libuv/test/test-close-fd.c | 84 - libuv/test/test-close-order.c | 80 - libuv/test/test-condvar.c | 267 - libuv/test/test-connect-unspecified.c | 63 - libuv/test/test-connection-fail.c | 161 - libuv/test/test-cwd-and-chdir.c | 57 - libuv/test/test-default-loop-close.c | 59 - libuv/test/test-delayed-accept.c | 189 - libuv/test/test-dlerror.c | 61 - libuv/test/test-eintr-handling.c | 94 - libuv/test/test-embed.c | 139 - libuv/test/test-emfile.c | 121 - libuv/test/test-env-vars.c | 170 - libuv/test/test-error.c | 82 - libuv/test/test-fail-always.c | 29 - libuv/test/test-fork.c | 683 --- libuv/test/test-fs-copyfile.c | 220 - libuv/test/test-fs-event.c | 1176 ---- libuv/test/test-fs-fd-hash.c | 133 - libuv/test/test-fs-open-flags.c | 435 -- libuv/test/test-fs-poll.c | 300 - libuv/test/test-fs-readdir.c | 465 -- libuv/test/test-fs.c | 4484 -------------- libuv/test/test-get-currentexe.c | 106 - libuv/test/test-get-loadavg.c | 35 - libuv/test/test-get-memory.c | 44 - libuv/test/test-get-passwd.c | 93 - libuv/test/test-getaddrinfo.c | 215 - libuv/test/test-gethostname.c | 58 - libuv/test/test-getnameinfo.c | 116 - libuv/test/test-getsockname.c | 361 -- libuv/test/test-getters-setters.c | 109 - libuv/test/test-gettimeofday.c | 39 - libuv/test/test-handle-fileno.c | 125 - libuv/test/test-homedir.c | 72 - libuv/test/test-hrtime.c | 52 - libuv/test/test-idle.c | 99 - libuv/test/test-idna.c | 214 - libuv/test/test-ip4-addr.c | 55 - libuv/test/test-ip6-addr.c | 171 - .../test-ipc-heavy-traffic-deadlock-bug.c | 159 - libuv/test/test-ipc-send-recv.c | 429 -- libuv/test/test-ipc.c | 984 ---- libuv/test/test-list.h | 1158 ---- libuv/test/test-loop-alive.c | 67 - libuv/test/test-loop-close.c | 75 - libuv/test/test-loop-configure.c | 38 - libuv/test/test-loop-handles.c | 337 -- libuv/test/test-loop-stop.c | 71 - libuv/test/test-loop-time.c | 63 - libuv/test/test-metrics.c | 135 - libuv/test/test-multiple-listen.c | 109 - libuv/test/test-mutexes.c | 182 - ...-not-readable-nor-writable-on-read-error.c | 104 - libuv/test/test-not-readable-on-eof.c | 103 - libuv/test/test-not-writable-after-shutdown.c | 69 - libuv/test/test-osx-select.c | 140 - libuv/test/test-pass-always.c | 28 - libuv/test/test-ping-pong.c | 436 -- libuv/test/test-pipe-bind-error.c | 139 - .../test/test-pipe-close-stdout-read-stdin.c | 112 - libuv/test/test-pipe-connect-error.c | 98 - libuv/test/test-pipe-connect-multiple.c | 107 - libuv/test/test-pipe-connect-prepare.c | 83 - libuv/test/test-pipe-getsockname.c | 270 - libuv/test/test-pipe-pending-instances.c | 59 - libuv/test/test-pipe-sendmsg.c | 172 - libuv/test/test-pipe-server-close.c | 94 - libuv/test/test-pipe-set-fchmod.c | 90 - libuv/test/test-pipe-set-non-blocking.c | 132 - libuv/test/test-platform-output.c | 176 - .../test-poll-close-doesnt-corrupt-stack.c | 114 - libuv/test/test-poll-close.c | 73 - libuv/test/test-poll-closesocket.c | 92 - libuv/test/test-poll-multiple-handles.c | 99 - libuv/test/test-poll-oob.c | 210 - libuv/test/test-poll.c | 696 --- libuv/test/test-process-priority.c | 83 - libuv/test/test-process-title-threadsafe.c | 109 - libuv/test/test-process-title.c | 135 - libuv/test/test-queue-foreach-delete.c | 204 - libuv/test/test-random.c | 94 - libuv/test/test-ref.c | 445 -- libuv/test/test-run-nowait.c | 45 - libuv/test/test-run-once.c | 48 - libuv/test/test-semaphore.c | 111 - libuv/test/test-shutdown-close.c | 108 - libuv/test/test-shutdown-eof.c | 188 - libuv/test/test-shutdown-simultaneous.c | 135 - libuv/test/test-shutdown-twice.c | 85 - libuv/test/test-signal-multiple-loops.c | 307 - libuv/test/test-signal-pending-on-close.c | 119 - libuv/test/test-signal.c | 325 - libuv/test/test-socket-buffer-size.c | 77 - libuv/test/test-spawn.c | 1945 ------ libuv/test/test-stdio-over-pipes.c | 299 - libuv/test/test-strscpy.c | 53 - libuv/test/test-tcp-alloc-cb-fail.c | 123 - libuv/test/test-tcp-bind-error.c | 299 - libuv/test/test-tcp-bind6-error.c | 176 - libuv/test/test-tcp-close-accept.c | 198 - libuv/test/test-tcp-close-reset.c | 290 - libuv/test/test-tcp-close-while-connecting.c | 97 - libuv/test/test-tcp-close.c | 136 - .../test/test-tcp-connect-error-after-write.c | 98 - libuv/test/test-tcp-connect-error.c | 73 - libuv/test/test-tcp-connect-timeout.c | 196 - libuv/test/test-tcp-connect6-error.c | 71 - libuv/test/test-tcp-create-socket-early.c | 209 - libuv/test/test-tcp-flags.c | 52 - libuv/test/test-tcp-oob.c | 146 - libuv/test/test-tcp-open.c | 401 -- libuv/test/test-tcp-read-stop-start.c | 136 - libuv/test/test-tcp-read-stop.c | 76 - libuv/test/test-tcp-shutdown-after-write.c | 138 - libuv/test/test-tcp-try-write-error.c | 109 - libuv/test/test-tcp-try-write.c | 135 - libuv/test/test-tcp-unexpected-read.c | 117 - libuv/test/test-tcp-write-after-connect.c | 77 - libuv/test/test-tcp-write-fail.c | 115 - libuv/test/test-tcp-write-queue-order.c | 139 - .../test-tcp-write-to-half-open-connection.c | 141 - libuv/test/test-tcp-writealot.c | 180 - libuv/test/test-test-macros.c | 42 - libuv/test/test-thread-equal.c | 45 - libuv/test/test-thread.c | 295 - libuv/test/test-threadpool-cancel.c | 349 -- libuv/test/test-threadpool.c | 76 - libuv/test/test-timer-again.c | 141 - libuv/test/test-timer-from-check.c | 80 - libuv/test/test-timer.c | 347 -- libuv/test/test-tmpdir.c | 82 - libuv/test/test-tty-duplicate-key.c | 321 - .../test-tty-escape-sequence-processing.c | 1621 ----- libuv/test/test-tty.c | 474 -- libuv/test/test-udp-alloc-cb-fail.c | 196 - libuv/test/test-udp-bind.c | 93 - libuv/test/test-udp-connect.c | 197 - libuv/test/test-udp-create-socket-early.c | 135 - libuv/test/test-udp-dgram-too-big.c | 91 - libuv/test/test-udp-ipv6.c | 251 - libuv/test/test-udp-mmsg.c | 142 - libuv/test/test-udp-multicast-interface.c | 104 - libuv/test/test-udp-multicast-interface6.c | 108 - libuv/test/test-udp-multicast-join.c | 181 - libuv/test/test-udp-multicast-join6.c | 219 - libuv/test/test-udp-multicast-ttl.c | 94 - libuv/test/test-udp-open.c | 350 -- libuv/test/test-udp-options.c | 160 - libuv/test/test-udp-send-and-recv.c | 212 - libuv/test/test-udp-send-hang-loop.c | 99 - libuv/test/test-udp-send-immediate.c | 148 - libuv/test/test-udp-send-unreachable.c | 201 - libuv/test/test-udp-sendmmsg-error.c | 75 - libuv/test/test-udp-try-send.c | 121 - libuv/test/test-uname.c | 69 - libuv/test/test-walk-handles.c | 77 - libuv/test/test-watcher-cross-stop.c | 112 - libuv/tools/make_dist_html.py | 122 - libuv/uv_win_longpath.manifest | 8 - libuv/watch_dir/file1 | Bin 4 -> 0 bytes libuv/watch_dir/file2 | Bin 4 -> 0 bytes libuv/watch_dir/fsevent-0 | 0 libuv/watch_dir/fsevent-1 | 0 libuv/watch_dir/fsevent-10 | 0 libuv/watch_dir/fsevent-11 | 0 libuv/watch_dir/fsevent-12 | 0 libuv/watch_dir/fsevent-13 | 0 libuv/watch_dir/fsevent-14 | 0 libuv/watch_dir/fsevent-15 | 0 libuv/watch_dir/fsevent-2 | 0 libuv/watch_dir/fsevent-3 | 0 libuv/watch_dir/fsevent-4 | 0 libuv/watch_dir/fsevent-5 | 0 libuv/watch_dir/fsevent-6 | 0 libuv/watch_dir/fsevent-7 | 0 libuv/watch_dir/fsevent-8 | 0 libuv/watch_dir/fsevent-9 | 0 libuv/watch_file | Bin 4 -> 0 bytes llhttp/.dockerignore | 6 - llhttp/.eslintrc.js | 31 - llhttp/.github/workflows/ci.yaml | 115 - llhttp/.gitignore | 6 - llhttp/CMakeLists.txt | 53 - llhttp/CNAME | 1 - llhttp/CODE_OF_CONDUCT.md | 4 - llhttp/Dockerfile | 22 - llhttp/LICENSE-MIT | 22 - llhttp/Makefile | 76 - llhttp/README.md | 150 - llhttp/_config.yml | 1 - llhttp/bench/index.ts | 83 - llhttp/bin/build_wasm.ts | 80 - llhttp/bin/generate.ts | 101 - llhttp/examples/wasm.ts | 248 - llhttp/images/http-loose-none.png | Bin 3571702 -> 0 bytes llhttp/images/http-strict-none.png | Bin 4166480 -> 0 bytes llhttp/package-lock.json | 3647 ------------ llhttp/package.json | 58 - llhttp/src/common.gypi | 46 - llhttp/src/llhttp.gyp | 13 - llhttp/src/llhttp.ts | 10 - llhttp/src/llhttp/c-headers.ts | 99 - llhttp/src/llhttp/constants.ts | 311 - llhttp/src/llhttp/http.ts | 958 --- llhttp/src/llhttp/url.ts | 236 - llhttp/src/llhttp/utils.ts | 27 - llhttp/src/native/api.c | 369 -- llhttp/src/native/api.h | 256 - llhttp/src/native/http.c | 149 - llhttp/test/fixtures/extra.c | 200 - llhttp/test/fixtures/index.ts | 82 - llhttp/test/fuzzers/fuzz_parser.c | 45 - llhttp/test/md-test.ts | 290 - llhttp/test/request/connection.md | 582 -- llhttp/test/request/content-length.md | 275 - llhttp/test/request/finish.md | 57 - llhttp/test/request/invalid.md | 202 - llhttp/test/request/lenient-headers.md | 81 - llhttp/test/request/method.md | 390 -- llhttp/test/request/sample.md | 547 -- llhttp/test/request/transfer-encoding.md | 480 -- llhttp/test/request/uri.md | 225 - llhttp/test/response/connection.md | 460 -- llhttp/test/response/content-length.md | 113 - llhttp/test/response/finish.md | 21 - llhttp/test/response/invalid.md | 108 - llhttp/test/response/sample.md | 656 --- llhttp/test/response/transfer-encoding.md | 76 - llhttp/test/url.md | 283 - llhttp/tsconfig.json | 15 - llhttp/tslint.json | 14 - server.c | 2 - 520 files changed, 5 insertions(+), 132873 deletions(-) delete mode 100644 libuv/.gitattributes delete mode 100644 libuv/.github/ISSUE_TEMPLATE.md delete mode 100644 libuv/.github/stale.yml delete mode 100644 libuv/.github/workflows/CI.yml delete mode 100644 libuv/.github/workflows/sanitizer.yml delete mode 100644 libuv/.gitignore delete mode 100644 libuv/.mailmap delete mode 100644 libuv/.readthedocs.yaml delete mode 100644 libuv/AUTHORS delete mode 100644 libuv/CMakeLists.txt delete mode 100644 libuv/CONTRIBUTING.md delete mode 100644 libuv/ChangeLog delete mode 100644 libuv/LICENSE delete mode 100644 libuv/LICENSE-docs delete mode 100644 libuv/LINKS.md delete mode 100644 libuv/MAINTAINERS.md delete mode 100644 libuv/Makefile.am delete mode 100644 libuv/README.md delete mode 100644 libuv/SUPPORTED_PLATFORMS.md delete mode 100644 libuv/autogen.sh delete mode 100644 libuv/configure.ac delete mode 100644 libuv/docs/code/cgi/main.c delete mode 100644 libuv/docs/code/cgi/tick.c delete mode 100644 libuv/docs/code/detach/main.c delete mode 100644 libuv/docs/code/dns/main.c delete mode 100644 libuv/docs/code/helloworld/main.c delete mode 100644 libuv/docs/code/idle-basic/main.c delete mode 100644 libuv/docs/code/idle-compute/main.c delete mode 100644 libuv/docs/code/interfaces/main.c delete mode 100644 libuv/docs/code/locks/main.c delete mode 100644 libuv/docs/code/multi-echo-server/hammer.js delete mode 100644 libuv/docs/code/multi-echo-server/main.c delete mode 100644 libuv/docs/code/multi-echo-server/worker.c delete mode 100644 libuv/docs/code/onchange/main.c delete mode 100644 libuv/docs/code/pipe-echo-server/main.c delete mode 100644 libuv/docs/code/plugin/hello.c delete mode 100644 libuv/docs/code/plugin/main.c delete mode 100644 libuv/docs/code/plugin/plugin.h delete mode 100644 libuv/docs/code/proc-streams/main.c delete mode 100644 libuv/docs/code/proc-streams/test.c delete mode 100644 libuv/docs/code/progress/main.c delete mode 100644 libuv/docs/code/queue-cancel/main.c delete mode 100644 libuv/docs/code/queue-work/main.c delete mode 100644 libuv/docs/code/ref-timer/main.c delete mode 100644 libuv/docs/code/signal/main.c delete mode 100644 libuv/docs/code/spawn/main.c delete mode 100644 libuv/docs/code/tcp-echo-server/main.c delete mode 100644 libuv/docs/code/thread-create/main.c delete mode 100644 libuv/docs/code/tty-gravity/main.c delete mode 100644 libuv/docs/code/tty/main.c delete mode 100644 libuv/docs/code/udp-dhcp/main.c delete mode 100644 libuv/docs/code/uvcat/main.c delete mode 100644 libuv/docs/code/uvstop/main.c delete mode 100644 libuv/docs/code/uvtee/main.c delete mode 100644 libuv/docs/code/uvwget/main.c delete mode 100644 libuv/docs/make.bat delete mode 100644 libuv/docs/requirements.txt delete mode 100644 libuv/docs/src/api.rst delete mode 100644 libuv/docs/src/async.rst delete mode 100644 libuv/docs/src/check.rst delete mode 100644 libuv/docs/src/conf.py delete mode 100644 libuv/docs/src/design.rst delete mode 100644 libuv/docs/src/dll.rst delete mode 100644 libuv/docs/src/dns.rst delete mode 100644 libuv/docs/src/errors.rst delete mode 100644 libuv/docs/src/fs.rst delete mode 100644 libuv/docs/src/fs_event.rst delete mode 100644 libuv/docs/src/fs_poll.rst delete mode 100644 libuv/docs/src/guide.rst delete mode 100644 libuv/docs/src/guide/about.rst delete mode 100644 libuv/docs/src/guide/basics.rst delete mode 100644 libuv/docs/src/guide/eventloops.rst delete mode 100644 libuv/docs/src/guide/filesystem.rst delete mode 100644 libuv/docs/src/guide/introduction.rst delete mode 100644 libuv/docs/src/guide/networking.rst delete mode 100644 libuv/docs/src/guide/processes.rst delete mode 100644 libuv/docs/src/guide/threads.rst delete mode 100644 libuv/docs/src/guide/utilities.rst delete mode 100644 libuv/docs/src/handle.rst delete mode 100644 libuv/docs/src/idle.rst delete mode 100644 libuv/docs/src/index.rst delete mode 100644 libuv/docs/src/loop.rst delete mode 100644 libuv/docs/src/metrics.rst delete mode 100644 libuv/docs/src/migration_010_100.rst delete mode 100644 libuv/docs/src/misc.rst delete mode 100644 libuv/docs/src/pipe.rst delete mode 100644 libuv/docs/src/poll.rst delete mode 100644 libuv/docs/src/prepare.rst delete mode 100644 libuv/docs/src/process.rst delete mode 100644 libuv/docs/src/request.rst delete mode 100644 libuv/docs/src/signal.rst delete mode 100644 libuv/docs/src/sphinx-plugins/manpage.py delete mode 100644 libuv/docs/src/static/architecture.png delete mode 100644 libuv/docs/src/static/diagrams.key/Data/st0-311.jpg delete mode 100644 libuv/docs/src/static/diagrams.key/Data/st1-475.jpg delete mode 100644 libuv/docs/src/static/diagrams.key/Index.zip delete mode 100644 libuv/docs/src/static/diagrams.key/Metadata/BuildVersionHistory.plist delete mode 100644 libuv/docs/src/static/diagrams.key/Metadata/DocumentIdentifier delete mode 100644 libuv/docs/src/static/diagrams.key/Metadata/Properties.plist delete mode 100644 libuv/docs/src/static/diagrams.key/preview-micro.jpg delete mode 100644 libuv/docs/src/static/diagrams.key/preview-web.jpg delete mode 100644 libuv/docs/src/static/diagrams.key/preview.jpg delete mode 100644 libuv/docs/src/static/favicon.ico delete mode 100644 libuv/docs/src/static/logo.png delete mode 100644 libuv/docs/src/static/loop_iteration.png delete mode 100644 libuv/docs/src/stream.rst delete mode 100644 libuv/docs/src/tcp.rst delete mode 100644 libuv/docs/src/threading.rst delete mode 100644 libuv/docs/src/threadpool.rst delete mode 100644 libuv/docs/src/timer.rst delete mode 100644 libuv/docs/src/tty.rst delete mode 100644 libuv/docs/src/udp.rst delete mode 100644 libuv/docs/src/upgrading.rst delete mode 100644 libuv/docs/src/version.rst delete mode 100644 libuv/img/banner.png delete mode 100644 libuv/img/logos.svg delete mode 100644 libuv/include/uv.h delete mode 100644 libuv/include/uv/aix.h delete mode 100644 libuv/include/uv/android-ifaddrs.h delete mode 100644 libuv/include/uv/bsd.h delete mode 100644 libuv/include/uv/darwin.h delete mode 100644 libuv/include/uv/errno.h delete mode 100644 libuv/include/uv/linux.h delete mode 100644 libuv/include/uv/os390.h delete mode 100644 libuv/include/uv/posix.h delete mode 100644 libuv/include/uv/stdint-msvc2008.h delete mode 100644 libuv/include/uv/sunos.h delete mode 100644 libuv/include/uv/threadpool.h delete mode 100644 libuv/include/uv/tree.h delete mode 100644 libuv/include/uv/unix.h delete mode 100644 libuv/include/uv/version.h delete mode 100644 libuv/include/uv/win.h delete mode 100644 libuv/libuv-static.pc.in delete mode 100644 libuv/libuv.pc.in delete mode 100644 libuv/m4/.gitignore delete mode 100644 libuv/m4/as_case.m4 delete mode 100644 libuv/m4/ax_pthread.m4 delete mode 100644 libuv/m4/libuv-check-flags.m4 delete mode 100644 libuv/src/fs-poll.c delete mode 100644 libuv/src/heap-inl.h delete mode 100644 libuv/src/idna.c delete mode 100644 libuv/src/idna.h delete mode 100644 libuv/src/inet.c delete mode 100644 libuv/src/queue.h delete mode 100644 libuv/src/random.c delete mode 100644 libuv/src/strscpy.c delete mode 100644 libuv/src/strscpy.h delete mode 100644 libuv/src/threadpool.c delete mode 100644 libuv/src/timer.c delete mode 100644 libuv/src/unix/aix-common.c delete mode 100644 libuv/src/unix/aix.c delete mode 100644 libuv/src/unix/android-ifaddrs.c delete mode 100644 libuv/src/unix/async.c delete mode 100644 libuv/src/unix/atomic-ops.h delete mode 100644 libuv/src/unix/bsd-ifaddrs.c delete mode 100644 libuv/src/unix/bsd-proctitle.c delete mode 100644 libuv/src/unix/core.c delete mode 100644 libuv/src/unix/cygwin.c delete mode 100644 libuv/src/unix/darwin-proctitle.c delete mode 100644 libuv/src/unix/darwin-stub.h delete mode 100644 libuv/src/unix/darwin.c delete mode 100644 libuv/src/unix/dl.c delete mode 100644 libuv/src/unix/epoll.c delete mode 100644 libuv/src/unix/freebsd.c delete mode 100644 libuv/src/unix/fs.c delete mode 100644 libuv/src/unix/fsevents.c delete mode 100644 libuv/src/unix/getaddrinfo.c delete mode 100644 libuv/src/unix/getnameinfo.c delete mode 100644 libuv/src/unix/haiku.c delete mode 100644 libuv/src/unix/ibmi.c delete mode 100644 libuv/src/unix/internal.h delete mode 100644 libuv/src/unix/kqueue.c delete mode 100644 libuv/src/unix/linux-core.c delete mode 100644 libuv/src/unix/linux-inotify.c delete mode 100644 libuv/src/unix/linux-syscalls.c delete mode 100644 libuv/src/unix/linux-syscalls.h delete mode 100644 libuv/src/unix/loop-watcher.c delete mode 100644 libuv/src/unix/loop.c delete mode 100644 libuv/src/unix/netbsd.c delete mode 100644 libuv/src/unix/no-fsevents.c delete mode 100644 libuv/src/unix/no-proctitle.c delete mode 100644 libuv/src/unix/openbsd.c delete mode 100644 libuv/src/unix/os390-proctitle.c delete mode 100644 libuv/src/unix/os390-syscalls.c delete mode 100644 libuv/src/unix/os390-syscalls.h delete mode 100644 libuv/src/unix/os390.c delete mode 100644 libuv/src/unix/pipe.c delete mode 100644 libuv/src/unix/poll.c delete mode 100644 libuv/src/unix/posix-hrtime.c delete mode 100644 libuv/src/unix/posix-poll.c delete mode 100644 libuv/src/unix/process.c delete mode 100644 libuv/src/unix/procfs-exepath.c delete mode 100644 libuv/src/unix/proctitle.c delete mode 100644 libuv/src/unix/pthread-fixes.c delete mode 100644 libuv/src/unix/qnx.c delete mode 100644 libuv/src/unix/random-devurandom.c delete mode 100644 libuv/src/unix/random-getentropy.c delete mode 100644 libuv/src/unix/random-getrandom.c delete mode 100644 libuv/src/unix/random-sysctl-linux.c delete mode 100644 libuv/src/unix/signal.c delete mode 100644 libuv/src/unix/spinlock.h delete mode 100644 libuv/src/unix/stream.c delete mode 100644 libuv/src/unix/sunos.c delete mode 100644 libuv/src/unix/sysinfo-loadavg.c delete mode 100644 libuv/src/unix/sysinfo-memory.c delete mode 100644 libuv/src/unix/tcp.c delete mode 100644 libuv/src/unix/thread.c delete mode 100644 libuv/src/unix/tty.c delete mode 100644 libuv/src/unix/udp.c delete mode 100644 libuv/src/uv-common.c delete mode 100644 libuv/src/uv-common.h delete mode 100644 libuv/src/uv-data-getter-setters.c delete mode 100644 libuv/src/version.c delete mode 100644 libuv/src/win/async.c delete mode 100644 libuv/src/win/atomicops-inl.h delete mode 100644 libuv/src/win/core.c delete mode 100644 libuv/src/win/detect-wakeup.c delete mode 100644 libuv/src/win/dl.c delete mode 100644 libuv/src/win/error.c delete mode 100644 libuv/src/win/fs-event.c delete mode 100644 libuv/src/win/fs-fd-hash-inl.h delete mode 100644 libuv/src/win/fs.c delete mode 100644 libuv/src/win/getaddrinfo.c delete mode 100644 libuv/src/win/getnameinfo.c delete mode 100644 libuv/src/win/handle-inl.h delete mode 100644 libuv/src/win/handle.c delete mode 100644 libuv/src/win/internal.h delete mode 100644 libuv/src/win/loop-watcher.c delete mode 100644 libuv/src/win/pipe.c delete mode 100644 libuv/src/win/poll.c delete mode 100644 libuv/src/win/process-stdio.c delete mode 100644 libuv/src/win/process.c delete mode 100644 libuv/src/win/req-inl.h delete mode 100644 libuv/src/win/signal.c delete mode 100644 libuv/src/win/snprintf.c delete mode 100644 libuv/src/win/stream-inl.h delete mode 100644 libuv/src/win/stream.c delete mode 100644 libuv/src/win/tcp.c delete mode 100644 libuv/src/win/thread.c delete mode 100644 libuv/src/win/tty.c delete mode 100644 libuv/src/win/udp.c delete mode 100644 libuv/src/win/util.c delete mode 100644 libuv/src/win/winapi.c delete mode 100644 libuv/src/win/winapi.h delete mode 100644 libuv/src/win/winsock.c delete mode 100644 libuv/src/win/winsock.h delete mode 100644 libuv/test/benchmark-async-pummel.c delete mode 100644 libuv/test/benchmark-async.c delete mode 100644 libuv/test/benchmark-fs-stat.c delete mode 100644 libuv/test/benchmark-getaddrinfo.c delete mode 100644 libuv/test/benchmark-list.h delete mode 100644 libuv/test/benchmark-loop-count.c delete mode 100644 libuv/test/benchmark-million-async.c delete mode 100644 libuv/test/benchmark-million-timers.c delete mode 100644 libuv/test/benchmark-multi-accept.c delete mode 100644 libuv/test/benchmark-ping-pongs.c delete mode 100644 libuv/test/benchmark-ping-udp.c delete mode 100644 libuv/test/benchmark-pound.c delete mode 100644 libuv/test/benchmark-pump.c delete mode 100644 libuv/test/benchmark-sizes.c delete mode 100644 libuv/test/benchmark-spawn.c delete mode 100644 libuv/test/benchmark-tcp-write-batch.c delete mode 100644 libuv/test/benchmark-thread.c delete mode 100644 libuv/test/benchmark-udp-pummel.c delete mode 100644 libuv/test/blackhole-server.c delete mode 100644 libuv/test/dns-server.c delete mode 100644 libuv/test/echo-server.c delete mode 100644 libuv/test/fixtures/empty_file delete mode 100644 libuv/test/fixtures/load_error.node delete mode 100644 libuv/test/fixtures/lorem_ipsum.txt delete mode 100644 libuv/test/run-benchmarks.c delete mode 100644 libuv/test/run-tests.c delete mode 100644 libuv/test/runner-unix.c delete mode 100644 libuv/test/runner-unix.h delete mode 100644 libuv/test/runner-win.c delete mode 100644 libuv/test/runner-win.h delete mode 100644 libuv/test/runner.c delete mode 100644 libuv/test/runner.h delete mode 100644 libuv/test/task.h delete mode 100644 libuv/test/test-active.c delete mode 100644 libuv/test/test-async-null-cb.c delete mode 100644 libuv/test/test-async.c delete mode 100644 libuv/test/test-barrier.c delete mode 100644 libuv/test/test-callback-order.c delete mode 100644 libuv/test/test-callback-stack.c delete mode 100644 libuv/test/test-close-fd.c delete mode 100644 libuv/test/test-close-order.c delete mode 100644 libuv/test/test-condvar.c delete mode 100644 libuv/test/test-connect-unspecified.c delete mode 100644 libuv/test/test-connection-fail.c delete mode 100644 libuv/test/test-cwd-and-chdir.c delete mode 100644 libuv/test/test-default-loop-close.c delete mode 100644 libuv/test/test-delayed-accept.c delete mode 100644 libuv/test/test-dlerror.c delete mode 100644 libuv/test/test-eintr-handling.c delete mode 100644 libuv/test/test-embed.c delete mode 100644 libuv/test/test-emfile.c delete mode 100644 libuv/test/test-env-vars.c delete mode 100644 libuv/test/test-error.c delete mode 100644 libuv/test/test-fail-always.c delete mode 100644 libuv/test/test-fork.c delete mode 100644 libuv/test/test-fs-copyfile.c delete mode 100644 libuv/test/test-fs-event.c delete mode 100644 libuv/test/test-fs-fd-hash.c delete mode 100644 libuv/test/test-fs-open-flags.c delete mode 100644 libuv/test/test-fs-poll.c delete mode 100644 libuv/test/test-fs-readdir.c delete mode 100644 libuv/test/test-fs.c delete mode 100644 libuv/test/test-get-currentexe.c delete mode 100644 libuv/test/test-get-loadavg.c delete mode 100644 libuv/test/test-get-memory.c delete mode 100644 libuv/test/test-get-passwd.c delete mode 100644 libuv/test/test-getaddrinfo.c delete mode 100644 libuv/test/test-gethostname.c delete mode 100644 libuv/test/test-getnameinfo.c delete mode 100644 libuv/test/test-getsockname.c delete mode 100644 libuv/test/test-getters-setters.c delete mode 100644 libuv/test/test-gettimeofday.c delete mode 100644 libuv/test/test-handle-fileno.c delete mode 100644 libuv/test/test-homedir.c delete mode 100644 libuv/test/test-hrtime.c delete mode 100644 libuv/test/test-idle.c delete mode 100644 libuv/test/test-idna.c delete mode 100644 libuv/test/test-ip4-addr.c delete mode 100644 libuv/test/test-ip6-addr.c delete mode 100644 libuv/test/test-ipc-heavy-traffic-deadlock-bug.c delete mode 100644 libuv/test/test-ipc-send-recv.c delete mode 100644 libuv/test/test-ipc.c delete mode 100644 libuv/test/test-list.h delete mode 100644 libuv/test/test-loop-alive.c delete mode 100644 libuv/test/test-loop-close.c delete mode 100644 libuv/test/test-loop-configure.c delete mode 100644 libuv/test/test-loop-handles.c delete mode 100644 libuv/test/test-loop-stop.c delete mode 100644 libuv/test/test-loop-time.c delete mode 100644 libuv/test/test-metrics.c delete mode 100644 libuv/test/test-multiple-listen.c delete mode 100644 libuv/test/test-mutexes.c delete mode 100644 libuv/test/test-not-readable-nor-writable-on-read-error.c delete mode 100644 libuv/test/test-not-readable-on-eof.c delete mode 100644 libuv/test/test-not-writable-after-shutdown.c delete mode 100644 libuv/test/test-osx-select.c delete mode 100644 libuv/test/test-pass-always.c delete mode 100644 libuv/test/test-ping-pong.c delete mode 100644 libuv/test/test-pipe-bind-error.c delete mode 100644 libuv/test/test-pipe-close-stdout-read-stdin.c delete mode 100644 libuv/test/test-pipe-connect-error.c delete mode 100644 libuv/test/test-pipe-connect-multiple.c delete mode 100644 libuv/test/test-pipe-connect-prepare.c delete mode 100644 libuv/test/test-pipe-getsockname.c delete mode 100644 libuv/test/test-pipe-pending-instances.c delete mode 100644 libuv/test/test-pipe-sendmsg.c delete mode 100644 libuv/test/test-pipe-server-close.c delete mode 100644 libuv/test/test-pipe-set-fchmod.c delete mode 100644 libuv/test/test-pipe-set-non-blocking.c delete mode 100644 libuv/test/test-platform-output.c delete mode 100644 libuv/test/test-poll-close-doesnt-corrupt-stack.c delete mode 100644 libuv/test/test-poll-close.c delete mode 100644 libuv/test/test-poll-closesocket.c delete mode 100644 libuv/test/test-poll-multiple-handles.c delete mode 100644 libuv/test/test-poll-oob.c delete mode 100644 libuv/test/test-poll.c delete mode 100644 libuv/test/test-process-priority.c delete mode 100644 libuv/test/test-process-title-threadsafe.c delete mode 100644 libuv/test/test-process-title.c delete mode 100644 libuv/test/test-queue-foreach-delete.c delete mode 100644 libuv/test/test-random.c delete mode 100644 libuv/test/test-ref.c delete mode 100644 libuv/test/test-run-nowait.c delete mode 100644 libuv/test/test-run-once.c delete mode 100644 libuv/test/test-semaphore.c delete mode 100644 libuv/test/test-shutdown-close.c delete mode 100644 libuv/test/test-shutdown-eof.c delete mode 100644 libuv/test/test-shutdown-simultaneous.c delete mode 100644 libuv/test/test-shutdown-twice.c delete mode 100644 libuv/test/test-signal-multiple-loops.c delete mode 100644 libuv/test/test-signal-pending-on-close.c delete mode 100644 libuv/test/test-signal.c delete mode 100644 libuv/test/test-socket-buffer-size.c delete mode 100644 libuv/test/test-spawn.c delete mode 100644 libuv/test/test-stdio-over-pipes.c delete mode 100644 libuv/test/test-strscpy.c delete mode 100644 libuv/test/test-tcp-alloc-cb-fail.c delete mode 100644 libuv/test/test-tcp-bind-error.c delete mode 100644 libuv/test/test-tcp-bind6-error.c delete mode 100644 libuv/test/test-tcp-close-accept.c delete mode 100644 libuv/test/test-tcp-close-reset.c delete mode 100644 libuv/test/test-tcp-close-while-connecting.c delete mode 100644 libuv/test/test-tcp-close.c delete mode 100644 libuv/test/test-tcp-connect-error-after-write.c delete mode 100644 libuv/test/test-tcp-connect-error.c delete mode 100644 libuv/test/test-tcp-connect-timeout.c delete mode 100644 libuv/test/test-tcp-connect6-error.c delete mode 100644 libuv/test/test-tcp-create-socket-early.c delete mode 100644 libuv/test/test-tcp-flags.c delete mode 100644 libuv/test/test-tcp-oob.c delete mode 100644 libuv/test/test-tcp-open.c delete mode 100644 libuv/test/test-tcp-read-stop-start.c delete mode 100644 libuv/test/test-tcp-read-stop.c delete mode 100644 libuv/test/test-tcp-shutdown-after-write.c delete mode 100644 libuv/test/test-tcp-try-write-error.c delete mode 100644 libuv/test/test-tcp-try-write.c delete mode 100644 libuv/test/test-tcp-unexpected-read.c delete mode 100644 libuv/test/test-tcp-write-after-connect.c delete mode 100644 libuv/test/test-tcp-write-fail.c delete mode 100644 libuv/test/test-tcp-write-queue-order.c delete mode 100644 libuv/test/test-tcp-write-to-half-open-connection.c delete mode 100644 libuv/test/test-tcp-writealot.c delete mode 100644 libuv/test/test-test-macros.c delete mode 100644 libuv/test/test-thread-equal.c delete mode 100644 libuv/test/test-thread.c delete mode 100644 libuv/test/test-threadpool-cancel.c delete mode 100644 libuv/test/test-threadpool.c delete mode 100644 libuv/test/test-timer-again.c delete mode 100644 libuv/test/test-timer-from-check.c delete mode 100644 libuv/test/test-timer.c delete mode 100644 libuv/test/test-tmpdir.c delete mode 100644 libuv/test/test-tty-duplicate-key.c delete mode 100644 libuv/test/test-tty-escape-sequence-processing.c delete mode 100644 libuv/test/test-tty.c delete mode 100644 libuv/test/test-udp-alloc-cb-fail.c delete mode 100644 libuv/test/test-udp-bind.c delete mode 100644 libuv/test/test-udp-connect.c delete mode 100644 libuv/test/test-udp-create-socket-early.c delete mode 100644 libuv/test/test-udp-dgram-too-big.c delete mode 100644 libuv/test/test-udp-ipv6.c delete mode 100644 libuv/test/test-udp-mmsg.c delete mode 100644 libuv/test/test-udp-multicast-interface.c delete mode 100644 libuv/test/test-udp-multicast-interface6.c delete mode 100644 libuv/test/test-udp-multicast-join.c delete mode 100644 libuv/test/test-udp-multicast-join6.c delete mode 100644 libuv/test/test-udp-multicast-ttl.c delete mode 100644 libuv/test/test-udp-open.c delete mode 100644 libuv/test/test-udp-options.c delete mode 100644 libuv/test/test-udp-send-and-recv.c delete mode 100644 libuv/test/test-udp-send-hang-loop.c delete mode 100644 libuv/test/test-udp-send-immediate.c delete mode 100644 libuv/test/test-udp-send-unreachable.c delete mode 100644 libuv/test/test-udp-sendmmsg-error.c delete mode 100644 libuv/test/test-udp-try-send.c delete mode 100644 libuv/test/test-uname.c delete mode 100644 libuv/test/test-walk-handles.c delete mode 100644 libuv/test/test-watcher-cross-stop.c delete mode 100644 libuv/tools/make_dist_html.py delete mode 100644 libuv/uv_win_longpath.manifest delete mode 100644 libuv/watch_dir/file1 delete mode 100644 libuv/watch_dir/file2 delete mode 100644 libuv/watch_dir/fsevent-0 delete mode 100644 libuv/watch_dir/fsevent-1 delete mode 100644 libuv/watch_dir/fsevent-10 delete mode 100644 libuv/watch_dir/fsevent-11 delete mode 100644 libuv/watch_dir/fsevent-12 delete mode 100644 libuv/watch_dir/fsevent-13 delete mode 100644 libuv/watch_dir/fsevent-14 delete mode 100644 libuv/watch_dir/fsevent-15 delete mode 100644 libuv/watch_dir/fsevent-2 delete mode 100644 libuv/watch_dir/fsevent-3 delete mode 100644 libuv/watch_dir/fsevent-4 delete mode 100644 libuv/watch_dir/fsevent-5 delete mode 100644 libuv/watch_dir/fsevent-6 delete mode 100644 libuv/watch_dir/fsevent-7 delete mode 100644 libuv/watch_dir/fsevent-8 delete mode 100644 libuv/watch_dir/fsevent-9 delete mode 100644 libuv/watch_file delete mode 100644 llhttp/.dockerignore delete mode 100644 llhttp/.eslintrc.js delete mode 100644 llhttp/.github/workflows/ci.yaml delete mode 100644 llhttp/.gitignore delete mode 100644 llhttp/CMakeLists.txt delete mode 100644 llhttp/CNAME delete mode 100644 llhttp/CODE_OF_CONDUCT.md delete mode 100644 llhttp/Dockerfile delete mode 100644 llhttp/LICENSE-MIT delete mode 100644 llhttp/Makefile delete mode 100644 llhttp/README.md delete mode 100644 llhttp/_config.yml delete mode 100644 llhttp/bench/index.ts delete mode 100644 llhttp/bin/build_wasm.ts delete mode 100644 llhttp/bin/generate.ts delete mode 100644 llhttp/examples/wasm.ts delete mode 100644 llhttp/images/http-loose-none.png delete mode 100644 llhttp/images/http-strict-none.png delete mode 100644 llhttp/package-lock.json delete mode 100644 llhttp/package.json delete mode 100644 llhttp/src/common.gypi delete mode 100644 llhttp/src/llhttp.gyp delete mode 100644 llhttp/src/llhttp.ts delete mode 100644 llhttp/src/llhttp/c-headers.ts delete mode 100644 llhttp/src/llhttp/constants.ts delete mode 100644 llhttp/src/llhttp/http.ts delete mode 100644 llhttp/src/llhttp/url.ts delete mode 100644 llhttp/src/llhttp/utils.ts delete mode 100644 llhttp/src/native/api.c delete mode 100644 llhttp/src/native/api.h delete mode 100644 llhttp/src/native/http.c delete mode 100644 llhttp/test/fixtures/extra.c delete mode 100644 llhttp/test/fixtures/index.ts delete mode 100644 llhttp/test/fuzzers/fuzz_parser.c delete mode 100644 llhttp/test/md-test.ts delete mode 100644 llhttp/test/request/connection.md delete mode 100644 llhttp/test/request/content-length.md delete mode 100644 llhttp/test/request/finish.md delete mode 100644 llhttp/test/request/invalid.md delete mode 100644 llhttp/test/request/lenient-headers.md delete mode 100644 llhttp/test/request/method.md delete mode 100644 llhttp/test/request/sample.md delete mode 100644 llhttp/test/request/transfer-encoding.md delete mode 100644 llhttp/test/request/uri.md delete mode 100644 llhttp/test/response/connection.md delete mode 100644 llhttp/test/response/content-length.md delete mode 100644 llhttp/test/response/finish.md delete mode 100644 llhttp/test/response/invalid.md delete mode 100644 llhttp/test/response/sample.md delete mode 100644 llhttp/test/response/transfer-encoding.md delete mode 100644 llhttp/test/url.md delete mode 100644 llhttp/tsconfig.json delete mode 100644 llhttp/tslint.json diff --git a/.gitignore b/.gitignore index c6127b3..759184d 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,6 @@ modules.order Module.symvers Mkfile.old dkms.conf + +.vscode +bin/ \ No newline at end of file diff --git a/Makefile b/Makefile index bd93344..05d0ea4 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,3 @@ server: server.c - gcc -o server server.c -luv \ No newline at end of file + mkdir bin + gcc -o bin/server server.c -luv \ No newline at end of file diff --git a/libuv/.gitattributes b/libuv/.gitattributes deleted file mode 100644 index 89297cb..0000000 --- a/libuv/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -test/fixtures/lorem_ipsum.txt text eol=lf diff --git a/libuv/.github/ISSUE_TEMPLATE.md b/libuv/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 43934de..0000000 --- a/libuv/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,13 +0,0 @@ - -* **Version**: -* **Platform**: diff --git a/libuv/.github/stale.yml b/libuv/.github/stale.yml deleted file mode 100644 index d0ba3a4..0000000 --- a/libuv/.github/stale.yml +++ /dev/null @@ -1,24 +0,0 @@ -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 21 -# Number of days of inactivity before a stale issue is closed -# Set to false to disable. If disabled, issues still need to be closed -# manually, but will remain marked as stale. -daysUntilClose: 120 -# Issues with these labels will never be considered stale -exemptLabels: - - v2 - - enhancement - - good first issue - - feature-request - - doc - - bug - - not-stale -# Label to use when marking an issue as stale -staleLabel: stale -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false diff --git a/libuv/.github/workflows/CI.yml b/libuv/.github/workflows/CI.yml deleted file mode 100644 index c384123..0000000 --- a/libuv/.github/workflows/CI.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: CI - -on: [push, pull_request] - -jobs: - build-android: - runs-on: ubuntu-latest - container: reactnativecommunity/react-native-android:2020-5-20 - steps: - - uses: actions/checkout@v2 - - name: Envinfo - run: npx envinfo - - name: Build android arm64 - # see build options you can use in https://developer.android.com/ndk/guides/cmake - run: | - mkdir build && cd build - $ANDROID_HOME/cmake/3.10.2.4988404/bin/cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_HOME/ndk/20.0.5594570/build/cmake/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-21 .. - $ANDROID_HOME/cmake/3.10.2.4988404/bin/cmake --build . - - build-cross-qemu: - runs-on: ubuntu-latest - name: build-cross-qemu-${{ matrix.config.target }} - - strategy: - fail-fast: false - matrix: - config: - - {target: arm, toolchain: gcc-arm-linux-gnueabi, cc: arm-linux-gnueabi-gcc, qemu: qemu-arm-static } - - {target: armhf, toolchain: gcc-arm-linux-gnueabihf, cc: arm-linux-gnueabihf-gcc, qemu: qemu-arm-static } - - {target: aarch64, toolchain: gcc-aarch64-linux-gnu, cc: aarch64-linux-gnu-gcc, qemu: qemu-aarch64-static } - - {target: riscv64, toolchain: gcc-riscv64-linux-gnu, cc: riscv64-linux-gnu-gcc, qemu: qemu-riscv64-static } - - {target: ppc, toolchain: gcc-powerpc-linux-gnu, cc: powerpc-linux-gnu-gcc, qemu: qemu-ppc-static } - - {target: ppc64, toolchain: gcc-powerpc64-linux-gnu, cc: powerpc64-linux-gnu-gcc, qemu: qemu-ppc64-static } - - {target: ppc64le, toolchain: gcc-powerpc64le-linux-gnu, cc: powerpc64le-linux-gnu-gcc, qemu: qemu-ppc64le-static } - - {target: s390x, toolchain: gcc-s390x-linux-gnu, cc: s390x-linux-gnu-gcc, qemu: qemu-s390x-static } - - {target: mips, toolchain: gcc-mips-linux-gnu, cc: mips-linux-gnu-gcc, qemu: qemu-mips-static } - - {target: mips64, toolchain: gcc-mips64-linux-gnuabi64, cc: mips64-linux-gnuabi64-gcc, qemu: qemu-mips64-static } - - {target: mipsel, toolchain: gcc-mipsel-linux-gnu, cc: mipsel-linux-gnu-gcc, qemu: qemu-mipsel-static } - - {target: mips64el,toolchain: gcc-mips64el-linux-gnuabi64, cc: mips64el-linux-gnuabi64-gcc,qemu: qemu-mips64el-static } - - {target: alpha, toolchain: gcc-alpha-linux-gnu, cc: alpha-linux-gnu-gcc, qemu: qemu-alpha-static } - - {target: arm (u64 slots), toolchain: gcc-arm-linux-gnueabi, cc: arm-linux-gnueabi-gcc, qemu: qemu-arm-static} - - {target: aarch64 (u64 slots), toolchain: gcc-aarch64-linux-gnu, cc: aarch64-linux-gnu-gcc, qemu: qemu-aarch64-static} - - {target: ppc (u64 slots), toolchain: gcc-powerpc-linux-gnu, cc: powerpc-linux-gnu-gcc, qemu: qemu-ppc-static} - - {target: ppc64 (u64 slots), toolchain: gcc-powerpc64-linux-gnu, cc: powerpc64-linux-gnu-gcc, qemu: qemu-ppc64-static} - - steps: - - uses: actions/checkout@v2 - - name: Install QEMU - # 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_4\\.2-.*_amd64.deb$" - run: | - DEB=`curl -s $QEMU_SRC/ | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | grep $QEMU_VER | tail -1` - wget $QEMU_SRC/$DEB - sudo dpkg -i $DEB - - name: Install ${{ matrix.config.toolchain }} - run: | - sudo apt update - sudo apt install ${{ matrix.config.toolchain }} -y - - name: Build - run: | - mkdir build - cd build && cmake .. -DBUILD_TESTING=ON -DQEMU=ON -DCMAKE_C_COMPILER=${{ matrix.config.cc }} - cmake --build . - ls -lh - - name: Test - run: | - ${{ matrix.config.qemu }} build/uv_run_tests_a diff --git a/libuv/.github/workflows/sanitizer.yml b/libuv/.github/workflows/sanitizer.yml deleted file mode 100644 index 51e1479..0000000 --- a/libuv/.github/workflows/sanitizer.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: Sanitizer checks - -on: [push, pull_request] - -jobs: - asan: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Envinfo - run: npx envinfo - - name: ASAN - run: | - mkdir build - cd build && cmake .. -DBUILD_TESTING=ON -DASAN=ON -DCMAKE_BUILD_TYPE=Debug - cmake --build . && ./uv_run_tests_a - diff --git a/libuv/.gitignore b/libuv/.gitignore deleted file mode 100644 index 7eb4932..0000000 --- a/libuv/.gitignore +++ /dev/null @@ -1,76 +0,0 @@ -*.swp -*.[oa] -*.l[oa] -*.opensdf -*.orig -*.pyc -*.sdf -*.suo -.vs/ -*.VC.db -*.VC.opendb -core -vgcore.* -.buildstamp -.dirstamp -.deps/ -/.libs/ -/aclocal.m4 -/ar-lib -/autom4te.cache/ -/compile -/config.guess -/config.log -/config.status -/config.sub -/configure -/depcomp -/install-sh -/libtool -/libuv.a -/libuv.dylib -/libuv.pc -/libuv.so -/ltmain.sh -/missing -/test-driver -Makefile -Makefile.in - -/build/ - -/test/.libs/ -/test/run-tests -/test/run-tests.exe -/test/run-tests.dSYM -/test/run-benchmarks -/test/run-benchmarks.exe -/test/run-benchmarks.dSYM -test_file_* - -*.sln -*.sln.cache -*.ncb -*.vcproj -*.vcproj*.user -*.vcxproj -*.vcxproj.filters -*.vcxproj.user -_UpgradeReport_Files/ -UpgradeLog*.XML -Debug -Release -ipch - -# sphinx generated files -/docs/build/ - -# Clion / IntelliJ project files -/.idea/ -cmake-build-debug/ - -*.xcodeproj -*.xcworkspace - -# make dist output -libuv-*.tar.* diff --git a/libuv/.mailmap b/libuv/.mailmap deleted file mode 100644 index 7be85ab..0000000 --- a/libuv/.mailmap +++ /dev/null @@ -1,60 +0,0 @@ -A. Hauptmann -Aaron Bieber -Alan Gutierrez -Andrius Bentkus -Andy Fiddaman -Bert Belder -Bert Belder -Bert Belder -Brandon Philips -Brian White -Brian White -Caleb James DeLisle -Christoph Iserlohn -Darshan Sen -David Carlier -Devchandra Meetei Leishangthem -Fedor Indutny -Frank Denis -Imran Iqbal -Isaac Z. Schlueter -Jason Williams -Jesse Gorzinski -Jesse Gorzinski -Justin Venus -Keno Fischer -Keno Fischer -Leith Bade -Leonard Hecker -Maciej Małecki -Marc Schlaich -Michael -Michael Neumann -Michael Penick -Nicholas Vavilov -Nick Logan -Rasmus Christian Pedersen -Rasmus Christian Pedersen -Richard Lau -Robert Mustacchi -Ryan Dahl -Ryan Emery -Sakthipriyan Vairamani -Sam Roberts -San-Tai Hsu -Santiago Gimeno -Saúl Ibarra Corretgé -Saúl Ibarra Corretgé -Shigeki Ohtsu -TK-one -Timothy J. Fontaine -Yasuhiro Matsumoto -Yazhong Liu -Yuki Okumura -cjihrig -gengjiawen -jBarz -jBarz -ptlomholt -tjarlama <59913901+tjarlama@users.noreply.github.com> -zlargon diff --git a/libuv/.readthedocs.yaml b/libuv/.readthedocs.yaml deleted file mode 100644 index e53b9f3..0000000 --- a/libuv/.readthedocs.yaml +++ /dev/null @@ -1,11 +0,0 @@ -version: 2 - -sphinx: - builder: html - configuration: null - fail_on_warning: false - -python: - version: 3.8 - install: - - requirements: docs/requirements.txt diff --git a/libuv/AUTHORS b/libuv/AUTHORS deleted file mode 100644 index 741bcc7..0000000 --- a/libuv/AUTHORS +++ /dev/null @@ -1,481 +0,0 @@ -# Authors ordered by first contribution. -Ryan Dahl -Bert Belder -Josh Roesslein -Alan Gutierrez -Joshua Peek -Igor Zinkovsky -San-Tai Hsu -Ben Noordhuis -Henry Rawas -Robert Mustacchi -Matt Stevens -Paul Querna -Shigeki Ohtsu -Tom Hughes -Peter Bright -Jeroen Janssen -Andrea Lattuada -Augusto Henrique Hentz -Clifford Heath -Jorge Chamorro Bieling -Luis Lavena -Matthew Sporleder -Erick Tryzelaar -Isaac Z. Schlueter -Pieter Noordhuis -Marek Jelen -Fedor Indutny -Saúl Ibarra Corretgé -Felix Geisendörfer -Yuki Okumura -Roman Shtylman -Frank Denis -Carter Allen -Tj Holowaychuk -Shimon Doodkin -Ryan Emery -Bruce Mitchener -Maciej Małecki -Yasuhiro Matsumoto -Daisuke Murase -Paddy Byers -Dan VerWeire -Brandon Benvie -Brandon Philips -Nathan Rajlich -Charlie McConnell -Vladimir Dronnikov -Aaron Bieber -Bulat Shakirzyanov -Brian White -Erik Dubbelboer -Keno Fischer -Ira Cooper -Andrius Bentkus -Iñaki Baz Castillo -Mark Cavage -George Yohng -Xidorn Quan -Roman Neuhauser -Shuhei Tanuma -Bryan Cantrill -Trond Norbye -Tim Holy -Prancesco Pertugio -Leonard Hecker -Andrew Paprocki -Luigi Grilli -Shannen Saez -Artur Adib -Hiroaki Nakamura -Ting-Yu Lin -Stephen Gallagher -Shane Holloway -Andrew Shaffer -Vlad Tudose -Ben Leslie -Tim Bradshaw -Timothy J. Fontaine -Marc Schlaich -Brian Mazza -Elliot Saba -Ben Kelly -Nils Maier -Nicholas Vavilov -Miroslav Bajtoš -Sean Silva -Wynn Wilkes -Andrei Sedoi -Alex Crichton -Brent Cook -Brian Kaisner -Luca Bruno -Reini Urban -Maks Naumov -Sean Farrell -Chris Bank -Geert Jansen -Christoph Iserlohn -Steven Kabbes -Alex Gaynor -huxingyi -Tenor Biel -Andrej Manduch -Joshua Neuheisel -Alexis Campailla -Yazhong Liu -Sam Roberts -River Tarnell -Nathan Sweet -Trevor Norris -Oguz Bastemur -Dylan Cali -Austin Foxley -Benjamin Saunders -Geoffry Song -William Light -Oleg Efimov -Lars Gierth -Rasmus Christian Pedersen -Justin Venus -Kristian Evensen -Linus Mårtensson -Navaneeth Kedaram Nambiathan -StarWing -thierry-FreeBSD -Isaiah Norton -Raul Martins -David Capello -Paul Tan -Javier Hernández -Tonis Tiigi -Norio Kobota -李港平 -Chernyshev Viacheslav -Stephen von Takach -JD Ballard -Luka Perkov -Ryan Cole -HungMingWu -Jay Satiro -Leith Bade -Peter Atashian -Tim Cooper -Caleb James DeLisle -Jameson Nash -Graham Lee -Andrew Low -Pavel Platto -Tony Kelman -John Firebaugh -lilohuang -Paul Goldsmith -Julien Gilli -Michael Hudson-Doyle -Recep ASLANTAS -Rob Adams -Zachary Newman -Robin Hahling -Jeff Widman -cjihrig -Tomasz Kołodziejski -Unknown W. Brackets -Emmanuel Odeke -Mikhail Mukovnikov -Thorsten Lorenz -Yuri D'Elia -Manos Nikolaidis -Elijah Andrews -Michael Ira Krufky -Helge Deller -Joey Geralnik -Tim Caswell -Logan Rosen -Kenneth Perry -John Marino -Alexey Melnichuk -Johan Bergström -Alex Mo -Luis Martinez de Bartolome -Michael Penick -Michael -Massimiliano Torromeo -TomCrypto -Brett Vickers -Ole André Vadla Ravnås -Kazuho Oku -Ryan Phillips -Brian Green -Devchandra Meetei Leishangthem -Corey Farrell -Per Nilsson -Alan Rogers -Daryl Haresign -Rui Abreu Ferreira -João Reis -farblue68 -Jason Williams -Igor Soarez -Miodrag Milanovic -Cheng Zhao -Michael Neumann -Stefano Cristiano -heshamsafi -A. Hauptmann -John McNamee -Yosuke Furukawa -Santiago Gimeno -guworks -RossBencina -Roger A. Light -chenttuuvv -Richard Lau -ronkorving -Corbin Simpson -Zachary Hamm -Karl Skomski -Jeremy Whitlock -Willem Thiart -Ben Trask -Jianghua Yang -Colin Snover -Sakthipriyan Vairamani -Eli Skeggs -nmushell -Gireesh Punathil -Ryan Johnston -Adam Stylinski -Nathan Corvino -Wink Saville -Angel Leon -Louis DeJardin -Imran Iqbal -Petka Antonov -Ian Kronquist -kkdaemon -Yuval Brik -Joran Dirk Greef -Andrey Mazo -sztomi -Martin Bark -Dave -Alexis Murzeau -Didiet -Nan Xiang <514580344@qq.com> -Samuel Lorétan -Nándor István Krácser -Katsutoshi Horie -Lukasz Jagiello -Robert Chiras -Kári Tristan Helgason -Krishnaraj Bhat -Enno Boland -Michael Fero -Robert Jefe Lindstaedt -Myles Borins -Tony Theodore -Jason Ginchereau -Nicolas Cavallari -Pierre-Marie de Rodat -Brian Maher -neevek -John Barboza -liuxiaobo -Michele Caini -Bartosz Sosnowski -Matej Knopp -sunjin.lee -Matt Clarkson -Jeffrey Clark -Bart Robinson -Vit Gottwald -Vladimír Čunát -Alex Hultman -Brad King -Philippe Laferriere -Will Speak -Hitesh Kanwathirtha -Eric Sciple -jBarz -muflub -Daniel Bevenius -Howard Hellyer -Chris Araman -Vladimir Matveev -Jason Madden -Jamie Davis -Daniel Kahn Gillmor -Keane -James McCoy -Bernardo Ramos -Juan Cruz Viotti -Gemini Wen -Sebastian Wiedenroth -Sai Ke WANG -Barnabas Gema -Romain Caire -Robert Ayrapetyan -Refael Ackermann -André Klitzing -Matthew Taylor -CurlyMoo -XadillaX -Anticrisis -Jacob Segal -Maciej Szeptuch (Neverous) -Joel Winarske -Gergely Nagy -Kamil Rytarowski -tux.uudiin <77389867@qq.com> -Nick Logan -darobs -Zheng, Lei -Carlo Marcelo Arenas Belón -Scott Parker -Wade Brainerd -rayrase -Pekka Nikander -Ed Schouten -Xu Meng -Matt Harrison -Anna Henningsen -Jérémy Lal -Ben Wijen -elephantp -Felix Yan -Mason X -Jesse Gorzinski -Ryuichi KAWAMATA -Joyee Cheung -Michael Kilburn -Ruslan Bekenev -Bob Burger -Thomas Versteeg -zzzjim -Alex Arslan -Kyle Farnung -ssrlive <30760636+ssrlive@users.noreply.github.com> -Tobias Nießen -Björn Linse -zyxwvu Shi -Peter Johnson -Paolo Greppi -Shelley Vohr -Ujjwal Sharma -Michał Kozakiewicz -Emil Bay -Jeremiah Senkpiel -Andy Zhang -dmabupt -Ryan Liptak -Ali Ijaz Sheikh -hitesh -Svante Signell -Samuel Thibault -Jeremy Studer -damon-kwok <563066990@qq.com> -Damon Kwok -Ashe Connor -Rick -Ivan Krylov -Michael Meier -ptlomholt -Victor Costan -sid -Kevin Adler -Stephen Belanger -yeyuanfeng -erw7 -Thomas Karl Pietrowski -evgley -Andreas Rohner -Rich Trott -Milad Farazmand -zlargon -Yury Selivanov -Oscar Waddell -FX Coudert -George Zhao -Kyle Edwards -ken-cunningham-webuse -Kelvin Jin -Leorize -Vlad A -Niels Lohmann -Jenil Christo -Evgeny Ermakov -gengjiawen -Leo Chung -Javier Blazquez -Mustafa M -Zach Bjornson -Nan Xiao -Ben Davies -Nhan Khong -Crunkle -Tomas Krizek -Konstantin Podsvirov -seny -Vladimir Karnushin -MaYuming -Eneas U de Queiroz -Daniel Hahler -Yang Yu -David Carlier -Calvin Hill -Isabella Muerte <63051+slurps-mad-rips@users.noreply.github.com> -Ouyang Yadong -ZYSzys -Carl Lei -Stefan Bender -nia -virtualyw -Witold Kręcicki -Dominique Dumont -Manuel BACHMANN -Marek Vavrusa -TK-one -Irek Fakhrutdinov -Lin Zhang -毛毛 -Sk Sajidul Kadir -twosee -Rikard Falkeborn -Yash Ladha -James Ross -Colin Finck -Shohei YOSHIDA -Philip Chimento -Michal Artazov -Jeroen Roovers -MasterDuke17 -Alexander Tokmakov -Arenoros -lander0s -Turbinya -OleksandrKvl -Carter Li -Juan Sebastian velez Posada -escherstair -Evan Lucas -tjarlama <59913901+tjarlama@users.noreply.github.com> -司徒玟琅 -YuMeiJie -Aleksej Lebedev -Nikolay Mitev -Ulrik Strid -Elad Lahav -Elad Nachmias -Darshan Sen -Simon Kadisch -Momtchil Momtchev -Ethel Weston <66453757+ethelweston@users.noreply.github.com> -Drew DeVault -Mark Klein -schamberg97 <50446906+schamberg97@users.noreply.github.com> -Bob Weinand -Issam E. Maghni -Juan Pablo Canepa -Shuowang (Wayne) Zhang -Ondřej Surý -Juan José Arboleda -Zhao Zhili -Brandon Cheng -Matvii Hodovaniuk -Hayden -yiyuaner -bbara -SeverinLeonhardt -Andy Fiddaman -Romain Roffé -Eagle Liang -Ricky Zhou -Simon Kissane -James M Snell -Ali Mohammad Pur -Erkhes N <71805796+rexes-ND@users.noreply.github.com> -Joshua M. Clulow -Guilherme Íscaro -Martin Storsjö -Claes Nästén diff --git a/libuv/CMakeLists.txt b/libuv/CMakeLists.txt deleted file mode 100644 index 148d0e6..0000000 --- a/libuv/CMakeLists.txt +++ /dev/null @@ -1,670 +0,0 @@ -cmake_minimum_required(VERSION 3.4) -project(libuv LANGUAGES C) - -cmake_policy(SET CMP0057 NEW) # Enable IN_LIST operator -cmake_policy(SET CMP0064 NEW) # Support if (TEST) operator - -list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") - -include(CMakePackageConfigHelpers) -include(CMakeDependentOption) -include(CheckCCompilerFlag) -include(GNUInstallDirs) -include(CTest) - -set(CMAKE_C_VISIBILITY_PRESET hidden) -set(CMAKE_C_STANDARD_REQUIRED ON) -set(CMAKE_C_EXTENSIONS ON) -set(CMAKE_C_STANDARD 90) - -cmake_dependent_option(LIBUV_BUILD_TESTS - "Build the unit tests when BUILD_TESTING is enabled and we are the root project" ON - "BUILD_TESTING;CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR" OFF) -cmake_dependent_option(LIBUV_BUILD_BENCH - "Build the benchmarks when building unit tests and we are the root project" ON - "LIBUV_BUILD_TESTS" OFF) - -# Qemu Build -option(QEMU "build for qemu" OFF) -if(QEMU) - add_definitions(-D__QEMU__=1) -endif() - -option(ASAN "Enable AddressSanitizer (ASan)" OFF) -if(ASAN AND CMAKE_C_COMPILER_ID MATCHES "AppleClang|GNU|Clang") - add_definitions(-D__ASAN__=1) - set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") - set (CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") - set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=address") -endif() - -# Compiler check -string(CONCAT is-msvc $, - $ ->) - -check_c_compiler_flag(/W4 UV_LINT_W4) -check_c_compiler_flag(/wd4100 UV_LINT_NO_UNUSED_PARAMETER_MSVC) -check_c_compiler_flag(/wd4127 UV_LINT_NO_CONDITIONAL_CONSTANT_MSVC) -check_c_compiler_flag(/wd4201 UV_LINT_NO_NONSTANDARD_MSVC) -check_c_compiler_flag(/wd4206 UV_LINT_NO_NONSTANDARD_EMPTY_TU_MSVC) -check_c_compiler_flag(/wd4210 UV_LINT_NO_NONSTANDARD_FILE_SCOPE_MSVC) -check_c_compiler_flag(/wd4232 UV_LINT_NO_NONSTANDARD_NONSTATIC_DLIMPORT_MSVC) -check_c_compiler_flag(/wd4456 UV_LINT_NO_HIDES_LOCAL) -check_c_compiler_flag(/wd4457 UV_LINT_NO_HIDES_PARAM) -check_c_compiler_flag(/wd4459 UV_LINT_NO_HIDES_GLOBAL) -check_c_compiler_flag(/wd4706 UV_LINT_NO_CONDITIONAL_ASSIGNMENT_MSVC) -check_c_compiler_flag(/wd4996 UV_LINT_NO_UNSAFE_MSVC) - -check_c_compiler_flag(-Wall UV_LINT_WALL) # DO NOT use this under MSVC - -# TODO: Place these into its own function -check_c_compiler_flag(-Wno-unused-parameter UV_LINT_NO_UNUSED_PARAMETER) -check_c_compiler_flag(-Wstrict-prototypes UV_LINT_STRICT_PROTOTYPES) -check_c_compiler_flag(-Wextra UV_LINT_EXTRA) - -check_c_compiler_flag(/utf-8 UV_LINT_UTF8_MSVC) - -set(lint-no-unused-parameter $<$:-Wno-unused-parameter>) -set(lint-strict-prototypes $<$:-Wstrict-prototypes>) -set(lint-extra $<$:-Wextra>) -set(lint-w4 $<$:/W4>) -set(lint-no-unused-parameter-msvc $<$:/wd4100>) -set(lint-no-conditional-constant-msvc $<$:/wd4127>) -set(lint-no-nonstandard-msvc $<$:/wd4201>) -set(lint-no-nonstandard-empty-tu-msvc $<$:/wd4206>) -set(lint-no-nonstandard-file-scope-msvc $<$:/wd4210>) -set(lint-no-nonstandard-nonstatic-dlimport-msvc $<$:/wd4232>) -set(lint-no-hides-local-msvc $<$:/wd4456>) -set(lint-no-hides-param-msvc $<$:/wd4457>) -set(lint-no-hides-global-msvc $<$:/wd4459>) -set(lint-no-conditional-assignment-msvc $<$:/wd4706>) -set(lint-no-unsafe-msvc $<$:/wd4996>) -# Unfortunately, this one is complicated because MSVC and clang-cl support -Wall -# but using it is like calling -Weverything -string(CONCAT lint-default $< - $,$>:-Wall ->) -set(lint-utf8-msvc $<$:/utf-8>) - -list(APPEND uv_cflags ${lint-strict-prototypes} ${lint-extra} ${lint-default} ${lint-w4}) -list(APPEND uv_cflags ${lint-no-unused-parameter}) -list(APPEND uv_cflags ${lint-no-unused-parameter-msvc}) -list(APPEND uv_cflags ${lint-no-conditional-constant-msvc}) -list(APPEND uv_cflags ${lint-no-nonstandard-msvc}) -list(APPEND uv_cflags ${lint-no-nonstandard-empty-tu-msvc}) -list(APPEND uv_cflags ${lint-no-nonstandard-file-scope-msvc}) -list(APPEND uv_cflags ${lint-no-nonstandard-nonstatic-dlimport-msvc}) -list(APPEND uv_cflags ${lint-no-hides-local-msvc}) -list(APPEND uv_cflags ${lint-no-hides-param-msvc}) -list(APPEND uv_cflags ${lint-no-hides-global-msvc}) -list(APPEND uv_cflags ${lint-no-conditional-assignment-msvc}) -list(APPEND uv_cflags ${lint-no-unsafe-msvc}) -list(APPEND uv_cflags ${lint-utf8-msvc} ) - -check_c_compiler_flag(-fno-strict-aliasing UV_F_STRICT_ALIASING) -list(APPEND uv_cflags $<$:-fno-strict-aliasing>) - -set(uv_sources - src/fs-poll.c - src/idna.c - src/inet.c - src/random.c - src/strscpy.c - src/threadpool.c - src/timer.c - src/uv-common.c - src/uv-data-getter-setters.c - src/version.c) - -if(WIN32) - list(APPEND uv_defines WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0602) - list(APPEND uv_libraries - psapi - user32 - advapi32 - iphlpapi - userenv - ws2_32) - list(APPEND uv_sources - src/win/async.c - src/win/core.c - src/win/detect-wakeup.c - src/win/dl.c - src/win/error.c - src/win/fs.c - src/win/fs-event.c - src/win/getaddrinfo.c - src/win/getnameinfo.c - src/win/handle.c - src/win/loop-watcher.c - src/win/pipe.c - src/win/thread.c - src/win/poll.c - src/win/process.c - src/win/process-stdio.c - src/win/signal.c - src/win/snprintf.c - src/win/stream.c - src/win/tcp.c - src/win/tty.c - src/win/udp.c - src/win/util.c - src/win/winapi.c - src/win/winsock.c) - list(APPEND uv_test_libraries ws2_32) - list(APPEND uv_test_sources src/win/snprintf.c test/runner-win.c) -else() - list(APPEND uv_defines _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE) - if(NOT CMAKE_SYSTEM_NAME MATCHES "Android|OS390|QNX") - # TODO: This should be replaced with find_package(Threads) if possible - # Android has pthread as part of its c library, not as a separate - # libpthread.so. - list(APPEND uv_libraries pthread) - endif() - list(APPEND uv_sources - src/unix/async.c - src/unix/core.c - src/unix/dl.c - src/unix/fs.c - src/unix/getaddrinfo.c - src/unix/getnameinfo.c - src/unix/loop-watcher.c - src/unix/loop.c - src/unix/pipe.c - src/unix/poll.c - src/unix/process.c - src/unix/random-devurandom.c - src/unix/signal.c - src/unix/stream.c - src/unix/tcp.c - src/unix/thread.c - src/unix/tty.c - src/unix/udp.c) - list(APPEND uv_test_sources test/runner-unix.c) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "AIX") - list(APPEND uv_defines - _ALL_SOURCE - _LINUX_SOURCE_COMPAT - _THREAD_SAFE - _XOPEN_SOURCE=500 - HAVE_SYS_AHAFS_EVPRODS_H) - list(APPEND uv_libraries perfstat) - list(APPEND uv_sources - src/unix/aix.c - src/unix/aix-common.c) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "Android") - list(APPEND uv_defines _GNU_SOURCE) - list(APPEND uv_libraries dl) - list(APPEND uv_sources - src/unix/android-ifaddrs.c - src/unix/linux-core.c - src/unix/linux-inotify.c - src/unix/linux-syscalls.c - src/unix/procfs-exepath.c - src/unix/pthread-fixes.c - src/unix/random-getentropy.c - src/unix/random-getrandom.c - src/unix/random-sysctl-linux.c - src/unix/epoll.c) -endif() - -if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "Android|Linux") - list(APPEND uv_sources src/unix/proctitle.c) -endif() - -if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD") - list(APPEND uv_sources src/unix/freebsd.c) -endif() - -if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD|NetBSD|OpenBSD") - list(APPEND uv_sources src/unix/posix-hrtime.c src/unix/bsd-proctitle.c) -endif() - -if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD|NetBSD|OpenBSD") - list(APPEND uv_sources src/unix/bsd-ifaddrs.c src/unix/kqueue.c) -endif() - -if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") - list(APPEND uv_sources src/unix/random-getrandom.c) -endif() - -if(APPLE OR CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") - list(APPEND uv_sources src/unix/random-getentropy.c) -endif() - -if(APPLE) - list(APPEND uv_defines _DARWIN_UNLIMITED_SELECT=1 _DARWIN_USE_64_BIT_INODE=1) - list(APPEND uv_sources - src/unix/darwin-proctitle.c - src/unix/darwin.c - src/unix/fsevents.c) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - list(APPEND uv_defines _GNU_SOURCE _POSIX_C_SOURCE=200112) - list(APPEND uv_libraries dl rt) - list(APPEND uv_sources - src/unix/linux-core.c - src/unix/linux-inotify.c - src/unix/linux-syscalls.c - src/unix/procfs-exepath.c - src/unix/random-getrandom.c - src/unix/random-sysctl-linux.c - src/unix/epoll.c) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "NetBSD") - list(APPEND uv_sources src/unix/netbsd.c) - list(APPEND uv_libraries kvm) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") - list(APPEND uv_sources src/unix/openbsd.c) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "OS390") - enable_language(CXX) - list(APPEND uv_defines PATH_MAX=1024) - list(APPEND uv_defines _AE_BIMODAL) - list(APPEND uv_defines _ALL_SOURCE) - list(APPEND uv_defines _ENHANCED_ASCII_EXT=0xFFFFFFFF) - list(APPEND uv_defines _ISOC99_SOURCE) - list(APPEND uv_defines _LARGE_TIME_API) - list(APPEND uv_defines _OPEN_MSGQ_EXT) - list(APPEND uv_defines _OPEN_SYS_FILE_EXT) - list(APPEND uv_defines _OPEN_SYS_IF_EXT) - list(APPEND uv_defines _OPEN_SYS_SOCK_EXT3) - list(APPEND uv_defines _OPEN_SYS_SOCK_IPV6) - list(APPEND uv_defines _UNIX03_SOURCE) - list(APPEND uv_defines _UNIX03_THREADS) - list(APPEND uv_defines _UNIX03_WITHDRAWN) - list(APPEND uv_defines _XOPEN_SOURCE=600) - list(APPEND uv_defines _XOPEN_SOURCE_EXTENDED) - list(APPEND uv_sources - src/unix/pthread-fixes.c - src/unix/os390.c - src/unix/os390-syscalls.c - src/unix/os390-proctitle.c) - list(APPEND uv_cflags - -q64 - -qascii - -qexportall - -qgonumber - -qlongname - -qlibansi - -qfloat=IEEE - -qtune=10 - -qarch=10 - -qasm - -qasmlib=sys1.maclib:sys1.modgen) - find_library(ZOSLIB - NAMES zoslib - PATHS ${ZOSLIB_DIR} - PATH_SUFFIXES lib - ) - list(APPEND uv_libraries ${ZOSLIB}) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "OS400") - list(APPEND uv_defines - _ALL_SOURCE - _LINUX_SOURCE_COMPAT - _THREAD_SAFE - _XOPEN_SOURCE=500) - list(APPEND uv_sources - src/unix/aix-common.c - src/unix/ibmi.c - src/unix/no-fsevents.c - src/unix/posix-poll.c) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "SunOS") - list(APPEND uv_defines __EXTENSIONS__ _XOPEN_SOURCE=500 _REENTRANT) - list(APPEND uv_libraries kstat nsl sendfile socket) - list(APPEND uv_sources - src/unix/no-proctitle.c - src/unix/sunos.c) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "Haiku") - list(APPEND uv_defines _BSD_SOURCE) - list(APPEND uv_libraries bsd network) - list(APPEND uv_sources - src/unix/haiku.c - src/unix/bsd-ifaddrs.c - src/unix/no-fsevents.c - src/unix/no-proctitle.c - src/unix/posix-hrtime.c - src/unix/posix-poll.c) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "QNX") - list(APPEND uv_sources - src/unix/posix-hrtime.c - src/unix/posix-poll.c - src/unix/qnx.c - src/unix/bsd-ifaddrs.c - src/unix/no-proctitle.c - src/unix/no-fsevents.c) - list(APPEND uv_libraries socket) -endif() - -if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD|Linux|NetBSD|OpenBSD") - list(APPEND uv_test_libraries util) -endif() - -add_library(uv SHARED ${uv_sources}) -target_compile_definitions(uv - INTERFACE - USING_UV_SHARED=1 - PRIVATE - BUILDING_UV_SHARED=1 - ${uv_defines}) -target_compile_options(uv PRIVATE ${uv_cflags}) -target_include_directories(uv - PUBLIC - $ - $ - PRIVATE - $) -if(CMAKE_SYSTEM_NAME STREQUAL "OS390") - target_include_directories(uv PUBLIC $) - set_target_properties(uv PROPERTIES LINKER_LANGUAGE CXX) -endif() -target_link_libraries(uv ${uv_libraries}) - -add_library(uv_a STATIC ${uv_sources}) -target_compile_definitions(uv_a PRIVATE ${uv_defines}) -target_compile_options(uv_a PRIVATE ${uv_cflags}) -target_include_directories(uv_a - PUBLIC - $ - $ - PRIVATE - $) -if(CMAKE_SYSTEM_NAME STREQUAL "OS390") - target_include_directories(uv_a PUBLIC $) - set_target_properties(uv_a PROPERTIES LINKER_LANGUAGE CXX) -endif() -target_link_libraries(uv_a ${uv_libraries}) - -if(LIBUV_BUILD_TESTS) - # Small hack: use ${uv_test_sources} now to get the runner skeleton, - # before the actual tests are added. - add_executable( - uv_run_benchmarks_a - ${uv_test_sources} - test/benchmark-async-pummel.c - test/benchmark-async.c - test/benchmark-fs-stat.c - test/benchmark-getaddrinfo.c - test/benchmark-loop-count.c - test/benchmark-million-async.c - test/benchmark-million-timers.c - test/benchmark-multi-accept.c - test/benchmark-ping-pongs.c - test/benchmark-ping-udp.c - test/benchmark-pound.c - test/benchmark-pump.c - test/benchmark-sizes.c - test/benchmark-spawn.c - test/benchmark-tcp-write-batch.c - test/benchmark-thread.c - test/benchmark-udp-pummel.c - test/blackhole-server.c - test/dns-server.c - test/echo-server.c - test/run-benchmarks.c - test/runner.c) - target_compile_definitions(uv_run_benchmarks_a PRIVATE ${uv_defines}) - target_compile_options(uv_run_benchmarks_a PRIVATE ${uv_cflags}) - target_link_libraries(uv_run_benchmarks_a uv_a ${uv_test_libraries}) - - list(APPEND uv_test_sources - test/blackhole-server.c - test/echo-server.c - test/run-tests.c - test/runner.c - test/test-active.c - test/test-async-null-cb.c - test/test-async.c - test/test-barrier.c - test/test-callback-order.c - test/test-callback-stack.c - test/test-close-fd.c - test/test-close-order.c - test/test-condvar.c - test/test-connect-unspecified.c - test/test-connection-fail.c - test/test-cwd-and-chdir.c - test/test-default-loop-close.c - test/test-delayed-accept.c - test/test-dlerror.c - test/test-eintr-handling.c - test/test-embed.c - test/test-emfile.c - test/test-env-vars.c - test/test-error.c - test/test-fail-always.c - test/test-fork.c - test/test-fs-copyfile.c - test/test-fs-event.c - test/test-fs-poll.c - test/test-fs.c - test/test-fs-readdir.c - test/test-fs-fd-hash.c - test/test-fs-open-flags.c - test/test-get-currentexe.c - test/test-get-loadavg.c - test/test-get-memory.c - test/test-get-passwd.c - test/test-getaddrinfo.c - test/test-gethostname.c - test/test-getnameinfo.c - test/test-getsockname.c - test/test-getters-setters.c - test/test-gettimeofday.c - test/test-handle-fileno.c - test/test-homedir.c - test/test-hrtime.c - test/test-idle.c - test/test-idna.c - test/test-ip4-addr.c - test/test-ip6-addr.c - test/test-ipc-heavy-traffic-deadlock-bug.c - test/test-ipc-send-recv.c - test/test-ipc.c - test/test-loop-alive.c - test/test-loop-close.c - test/test-loop-configure.c - test/test-loop-handles.c - test/test-loop-stop.c - test/test-loop-time.c - test/test-metrics.c - test/test-multiple-listen.c - test/test-mutexes.c - test/test-not-readable-nor-writable-on-read-error.c - test/test-not-readable-on-eof.c - test/test-not-writable-after-shutdown.c - test/test-osx-select.c - test/test-pass-always.c - test/test-ping-pong.c - test/test-pipe-bind-error.c - test/test-pipe-close-stdout-read-stdin.c - test/test-pipe-connect-error.c - test/test-pipe-connect-multiple.c - test/test-pipe-connect-prepare.c - test/test-pipe-getsockname.c - test/test-pipe-pending-instances.c - test/test-pipe-sendmsg.c - test/test-pipe-server-close.c - test/test-pipe-set-fchmod.c - test/test-pipe-set-non-blocking.c - test/test-platform-output.c - test/test-poll-close-doesnt-corrupt-stack.c - test/test-poll-close.c - test/test-poll-closesocket.c - test/test-poll-multiple-handles.c - test/test-poll-oob.c - test/test-poll.c - test/test-process-priority.c - test/test-process-title-threadsafe.c - test/test-process-title.c - test/test-queue-foreach-delete.c - test/test-random.c - test/test-ref.c - test/test-run-nowait.c - test/test-run-once.c - test/test-semaphore.c - test/test-shutdown-close.c - test/test-shutdown-eof.c - test/test-shutdown-simultaneous.c - test/test-shutdown-twice.c - test/test-signal-multiple-loops.c - test/test-signal-pending-on-close.c - test/test-signal.c - test/test-socket-buffer-size.c - test/test-spawn.c - test/test-stdio-over-pipes.c - test/test-strscpy.c - test/test-tcp-alloc-cb-fail.c - test/test-tcp-bind-error.c - test/test-tcp-bind6-error.c - test/test-tcp-close-accept.c - test/test-tcp-close-while-connecting.c - test/test-tcp-close.c - test/test-tcp-close-reset.c - test/test-tcp-connect-error-after-write.c - test/test-tcp-connect-error.c - test/test-tcp-connect-timeout.c - test/test-tcp-connect6-error.c - test/test-tcp-create-socket-early.c - test/test-tcp-flags.c - test/test-tcp-oob.c - test/test-tcp-open.c - test/test-tcp-read-stop.c - test/test-tcp-read-stop-start.c - test/test-tcp-shutdown-after-write.c - test/test-tcp-try-write.c - test/test-tcp-try-write-error.c - test/test-tcp-unexpected-read.c - test/test-tcp-write-after-connect.c - test/test-tcp-write-fail.c - test/test-tcp-write-queue-order.c - test/test-tcp-write-to-half-open-connection.c - test/test-tcp-writealot.c - test/test-test-macros.c - test/test-thread-equal.c - test/test-thread.c - test/test-threadpool-cancel.c - test/test-threadpool.c - test/test-timer-again.c - test/test-timer-from-check.c - test/test-timer.c - test/test-tmpdir.c - test/test-tty-duplicate-key.c - test/test-tty-escape-sequence-processing.c - test/test-tty.c - test/test-udp-alloc-cb-fail.c - test/test-udp-bind.c - test/test-udp-connect.c - test/test-udp-create-socket-early.c - test/test-udp-dgram-too-big.c - test/test-udp-ipv6.c - test/test-udp-mmsg.c - test/test-udp-multicast-interface.c - test/test-udp-multicast-interface6.c - test/test-udp-multicast-join.c - test/test-udp-multicast-join6.c - test/test-udp-multicast-ttl.c - test/test-udp-open.c - test/test-udp-options.c - test/test-udp-send-and-recv.c - test/test-udp-send-hang-loop.c - test/test-udp-send-immediate.c - test/test-udp-sendmmsg-error.c - test/test-udp-send-unreachable.c - test/test-udp-try-send.c - test/test-uname.c - test/test-walk-handles.c - test/test-watcher-cross-stop.c) - - add_executable(uv_run_tests ${uv_test_sources} uv_win_longpath.manifest) - target_compile_definitions(uv_run_tests - PRIVATE ${uv_defines} USING_UV_SHARED=1) - target_compile_options(uv_run_tests PRIVATE ${uv_cflags}) - target_link_libraries(uv_run_tests uv ${uv_test_libraries}) - add_test(NAME uv_test - COMMAND uv_run_tests - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) - if(CMAKE_SYSTEM_NAME STREQUAL "OS390") - set_tests_properties(uv_test PROPERTIES ENVIRONMENT - "LIBPATH=${CMAKE_BINARY_DIR}:$ENV{LIBPATH}") - endif() - add_executable(uv_run_tests_a ${uv_test_sources} uv_win_longpath.manifest) - target_compile_definitions(uv_run_tests_a PRIVATE ${uv_defines}) - target_compile_options(uv_run_tests_a PRIVATE ${uv_cflags}) - if(QEMU) - target_link_libraries(uv_run_tests_a uv_a ${uv_test_libraries} -static) - else() - target_link_libraries(uv_run_tests_a uv_a ${uv_test_libraries}) - endif() - add_test(NAME uv_test_a - COMMAND uv_run_tests_a - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) - if(CMAKE_SYSTEM_NAME STREQUAL "OS390") - set_target_properties(uv_run_benchmarks_a PROPERTIES LINKER_LANGUAGE CXX) - set_target_properties(uv_run_tests PROPERTIES LINKER_LANGUAGE CXX) - set_target_properties(uv_run_tests_a PROPERTIES LINKER_LANGUAGE CXX) - endif() -endif() - -if(UNIX OR MINGW) - # Now for some gibbering horrors from beyond the stars... - foreach(lib IN LISTS uv_libraries) - list(APPEND LIBS "-l${lib}") - endforeach() - string(REPLACE ";" " " LIBS "${LIBS}") - # Consider setting project version via project() call? - file(STRINGS configure.ac configure_ac REGEX ^AC_INIT) - string(REGEX MATCH "([0-9]+)[.][0-9]+[.][0-9]+" PACKAGE_VERSION "${configure_ac}") - set(UV_VERSION_MAJOR "${CMAKE_MATCH_1}") - # The version in the filename is mirroring the behaviour of autotools. - set_target_properties(uv PROPERTIES - VERSION ${UV_VERSION_MAJOR}.0.0 - SOVERSION ${UV_VERSION_MAJOR}) - set(includedir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}) - set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) - set(prefix ${CMAKE_INSTALL_PREFIX}) - configure_file(libuv.pc.in libuv.pc @ONLY) - configure_file(libuv-static.pc.in libuv-static.pc @ONLY) - - install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) - install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR}) - install(FILES ${PROJECT_BINARY_DIR}/libuv.pc ${PROJECT_BINARY_DIR}/libuv-static.pc - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - install(TARGETS uv LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install(TARGETS uv_a ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) -endif() - -if(MSVC) - install(DIRECTORY include/ DESTINATION include) - install(FILES LICENSE DESTINATION .) - install(TARGETS uv uv_a - RUNTIME DESTINATION lib/$ - ARCHIVE DESTINATION lib/$) -endif() - -message(STATUS "summary of build options: - Install prefix: ${CMAKE_INSTALL_PREFIX} - Target system: ${CMAKE_SYSTEM_NAME} - Compiler: - C compiler: ${CMAKE_C_COMPILER} - CFLAGS: ${CMAKE_C_FLAGS_${_build_type}} ${CMAKE_C_FLAGS} -") diff --git a/libuv/CONTRIBUTING.md b/libuv/CONTRIBUTING.md deleted file mode 100644 index d37c51d..0000000 --- a/libuv/CONTRIBUTING.md +++ /dev/null @@ -1,171 +0,0 @@ -# CONTRIBUTING - -The libuv project welcomes new contributors. This document will guide you -through the process. - - -### FORK - -Fork the project [on GitHub](https://github.com/libuv/libuv) and check out -your copy. - -``` -$ git clone https://github.com/username/libuv.git -$ cd libuv -$ git remote add upstream https://github.com/libuv/libuv.git -``` - -Now decide if you want your feature or bug fix to go into the master branch -or the stable branch. As a rule of thumb, bug fixes go into the stable branch -while new features go into the master branch. - -The stable branch is effectively frozen; patches that change the libuv -API/ABI or affect the run-time behavior of applications get rejected. - -In case of doubt, open an issue in the [issue tracker][], post your question -to the [libuv discussions forum], or message the [libuv mailing list]. - -Especially do so if you plan to work on something big. Nothing is more -frustrating than seeing your hard work go to waste because your vision does not -align with that of the [project maintainers]. - - -### BRANCH - -Okay, so you have decided on the proper branch. Create a feature branch -and start hacking: - -``` -$ git checkout -b my-feature-branch -t origin/v1.x -``` - -(Where v1.x is the latest stable branch as of this writing.) - -### CODE - -Please adhere to libuv's code style. In general it follows the conventions from -the [Google C/C++ style guide]. Some of the key points, as well as some -additional guidelines, are enumerated below. - -* Code that is specific to unix-y platforms should be placed in `src/unix`, and - declarations go into `include/uv/unix.h`. - -* Source code that is Windows-specific goes into `src/win`, and related - publicly exported types, functions and macro declarations should generally - be declared in `include/uv/win.h`. - -* Names should be descriptive and concise. - -* All the symbols and types that libuv makes available publicly should be - prefixed with `uv_` (or `UV_` in case of macros). - -* Internal, non-static functions should be prefixed with `uv__`. - -* Use two spaces and no tabs. - -* Lines should be wrapped at 80 characters. - -* Ensure that lines have no trailing whitespace, and use unix-style (LF) line - endings. - -* Use C89-compliant syntax. In other words, variables can only be declared at - the top of a scope (function, if/for/while-block). - -* When writing comments, use properly constructed sentences, including - punctuation. - -* When documenting APIs and/or source code, don't make assumptions or make - implications about race, gender, religion, political orientation or anything - else that isn't relevant to the project. - -* Remember that source code usually gets written once and read often: ensure - the reader doesn't have to make guesses. Make sure that the purpose and inner - logic are either obvious to a reasonably skilled professional, or add a - comment that explains it. - - -### COMMIT - -Make sure git knows your name and email address: - -``` -$ git config --global user.name "J. Random User" -$ git config --global user.email "j.random.user@example.com" -``` - -Writing good commit logs is important. A commit log should describe what -changed and why. Follow these guidelines when writing one: - -1. The first line should be 50 characters or less and contain a short - description of the change prefixed with the name of the changed - subsystem (e.g. "net: add localAddress and localPort to Socket"). -2. Keep the second line blank. -3. Wrap all other lines at 72 columns. - -A good commit log looks like this: - -``` -subsystem: explaining the commit in one line - -Body of commit message is a few lines of text, explaining things -in more detail, possibly giving some background about the issue -being fixed, etc etc. - -The body of the commit message can be several paragraphs, and -please do proper word-wrap and keep columns shorter than about -72 characters or so. That way `git log` will show things -nicely even when it is indented. -``` - -The header line should be meaningful; it is what other people see when they -run `git shortlog` or `git log --oneline`. - -Check the output of `git log --oneline files_that_you_changed` to find out -what subsystem (or subsystems) your changes touch. - - -### REBASE - -Use `git rebase` (not `git merge`) to sync your work from time to time. - -``` -$ git fetch upstream -$ git rebase upstream/v1.x # or upstream/master -``` - - -### TEST - -Bug fixes and features should come with tests. Add your tests in the -`test/` directory. Each new test needs to be registered in `test/test-list.h`. - -If you add a new test file, it needs to be registered in three places: -- `CMakeLists.txt`: add the file's name to the `uv_test_sources` list. -- `Makefile.am`: add the file's name to the `test_run_tests_SOURCES` list. - -Look at other tests to see how they should be structured (license boilerplate, -the way entry points are declared, etc.). - -Check README.md file to find out how to run the test suite and make sure that -there are no test regressions. - -### PUSH - -``` -$ git push origin my-feature-branch -``` - -Go to https://github.com/username/libuv and select your feature branch. Click -the 'Pull Request' button and fill out the form. - -Pull requests are usually reviewed within a few days. If there are comments -to address, apply your changes in a separate commit and push that to your -feature branch. Post a comment in the pull request afterwards; GitHub does -not send out notifications when you add commits. - - -[issue tracker]: https://github.com/libuv/libuv/issues -[libuv mailing list]: http://groups.google.com/group/libuv -[libuv discussions forum]: https://github.com/libuv/libuv/discussions -[Google C/C++ style guide]: https://google.github.io/styleguide/cppguide.html -[project maintainers]: https://github.com/libuv/libuv/blob/master/MAINTAINERS.md diff --git a/libuv/ChangeLog b/libuv/ChangeLog deleted file mode 100644 index 11492c5..0000000 --- a/libuv/ChangeLog +++ /dev/null @@ -1,5209 +0,0 @@ -2021.07.21, Version 1.42.0 (Stable), 6ce14710da7079eb248868171f6343bc409ea3a4 - -Changes since version 1.41.0: - -* doc: fix code highlighting (Darshan Sen) - -* test: move to ASSERT_NULL and ASSERT_NOT_NULL test macros (tjarlama) - -* zos: build in ascii code page (Shuowang (Wayne) Zhang) - -* zos: don't use nanosecond timestamp fields (Shuowang (Wayne) Zhang) - -* zos: introduce zoslib (Shuowang (Wayne) Zhang) - -* zos: use strnlen() from zoslib (Shuowang (Wayne) Zhang) - -* zos: use nanosleep() from zoslib (Shuowang (Wayne) Zhang) - -* zos: use __getargv() from zoslib to get exe path (Shuowang (Wayne) Zhang) - -* zos: treat __rfim_utok as binary (Shuowang (Wayne) Zhang) - -* zos: use execvpe() to set environ explictly (Shuowang (Wayne) Zhang) - -* zos: use custom proctitle implementation (Shuowang (Wayne) Zhang) - -* doc: add instructions for building on z/OS (Shuowang (Wayne) Zhang) - -* linux,udp: enable full ICMP error reporting (Ondřej Surý) - -* test: fix test-udp-send-unreachable (Ondřej Surý) - -* include: fix typo in documentation (Tobias Nießen) - -* chore: use for(;;) instead of while (Yash Ladha) - -* test: remove string + int warning on udp-pummel (Juan José Arboleda) - -* cmake: fix linker flags (Zhao Zhili) - -* test: fix stack-use-after-scope (Zhao Zhili) - -* unix: expose thread_stack_size() internally (Brandon Cheng) - -* darwin: use RLIMIT_STACK for fsevents pthread (Brandon Cheng) - -* darwin: abort on pthread_attr_init fail (Brandon Cheng) - -* benchmark: remove unreachable code (Matvii Hodovaniuk) - -* macos: fix memleaks in uv__get_cpu_speed (George Zhao) - -* Make Thread Sanitizer aware of file descriptor close in uv__close() (Ondřej - Surý) - -* darwin: fix iOS compilation and functionality (Hayden) - -* linux: work around copy_file_range() cephfs bug (Ben Noordhuis) - -* zos: implement uv_get_constrained_memory() (Shuowang (Wayne) Zhang) - -* zos: fix uv_get_free_memory() (Shuowang (Wayne) Zhang) - -* zos: use CVTRLSTG to get total memory accurately (Shuowang (Wayne) Zhang) - -* ibmi: Handle interface names longer than 10 chars (Kevin Adler) - -* docs: update read-the-docs version of sphinx (Jameson Nash) - -* unix: refactor uv_try_write (twosee) - -* linux-core: add proper divide by zero assert (yiyuaner) - -* misc: remove unnecessary _GNU_SOURCE macros (Darshan Sen) - -* test: log to stdout to conform TAP spec (bbara) - -* win,fs: fix C4090 warning with MSVC (SeverinLeonhardt) - -* build: some systems provide dlopen() in libc (Andy Fiddaman) - -* include: add EOVERFLOW status code mapping (Darshan Sen) - -* unix,fs: use uv__load_relaxed and uv__store_relaxed (Darshan Sen) - -* win: fix string encoding issue of uv_os_gethostname (Eagle Liang) - -* unix,process: add uv__write_errno helper function (Ricky Zhou) - -* Re-merge "unix,stream: clear read/write states on close/eof" (Jameson Nash) - -* unix,core: fix errno handling in uv__getpwuid_r (Darshan Sen) - -* errors: map ESOCKTNOSUPPORT errno (Ryan Liptak) - -* doc: uv_read_stop always succeeds (Simon Kissane) - -* inet: fix inconsistent return value of inet_ntop6 (twosee) - -* darwin: fix -Wsometimes-uninitialized warning (twosee) - -* stream: introduce uv_try_write2 function (twosee) - -* poll,win: UV_PRIORITIZED option should not assert (twosee) - -* src: DragonFlyBSD has mmsghdr struct too (David Carlier) - -* cleanup,win: Remove _WIN32 guards on threadpool (James M Snell) - -* freebsd: fix an incompatible pointer type warning (Darshan Sen) - -* core: Correct the conditionals for {cloexec,nonblock}_ioctl (Ali Mohammad - Pur) - -* win,tcp: make uv_close work more like unix (Jameson Nash) - -* doc: more accurate list of valid send_handle's (twosee) - -* win,tcp: translate system errors correctly (twosee) - -* unix: implement cpu_relax() on ppc64 (Ben Noordhuis) - -* docs: move list of project links under PR control (Jameson Nash) - -* test: wrong pointer arithmetic multiplier (Erkhes N) - -* doc: switch discussion forum to github (Jameson Nash) - -* idna: fix OOB read in punycode decoder (Ben Noordhuis) - -* build: make sure -fvisibility=hidden is set (Santiago Gimeno) - -* illumos: event ports to epoll (tjarlama) - -* illumos,tty: UV_TTY_MODE_IO waits for 4 bytes (Joshua M. Clulow) - -* doc: add vtjnash GPG ID (Jameson Nash) - -* linux: read CPU model information on ppc (Richard Lau) - -* darwin: fix uv_barrier race condition (Guilherme Íscaro) - -* unix,stream: fix loop hang after uv_shutdown (Jameson Nash) - -* doc,udp: note that suggested_size is 1 max-sized dgram (Ryan Liptak) - -* mingw: fix building for ARM/AArch64 (Martin Storsjö) - -* unix: strnlen is not available on Solaris 10 (Claes Nästén) - -* sunos: restore use of event ports (Andy Fiddaman) - -* sunos,cmake: use thread-safe errno (Andy Fiddaman) - - -2021.02.14, Version 1.41.0 (Stable), 1dff88e5161cba5c59276d2070d2e304e4dcb242 - -Changes since version 1.40.0: - -* mailmap: update contact information for richardlau (Richard Lau) - -* build: add asan checks (gengjiawen) - -* unix: report bind error in uv_tcp_connect() (Ben Noordhuis) - -* doc: uv_tcp_bind() never returns UV_EADDRINUSE (Ben Noordhuis) - -* test: fix pump and tcp_write_batch benchmarks (Santiago Gimeno) - -* doc: mark IBM i as Tier 2 support (Jesse Gorzinski) - -* doc,poll: add notes (repeated cb & cancel pending cb) (Elad Nachmias) - -* linux: fix -Wincompatible-pointer-types warning (Ben Noordhuis) - -* linux: fix -Wsign-compare warning (Ben Noordhuis) - -* android: add system call api guards (Ben Noordhuis) - -* unix,win: harmonize uv_read_start() error handling (Ben Noordhuis) - -* unix,win: more uv_read_start() argument validation (Ben Noordhuis) - -* build: turn on -fno-strict-aliasing (Ben Noordhuis) - -* stream: add uv_pipe and uv_socketpair to the API (Jameson Nash) - -* unix,win: initialize timer `timeout` field (Ben Noordhuis) - -* bsd-ifaddrs: improve comments (Darshan Sen) - -* test: remove unnecessary uv_fs_stat() calls (Ben Noordhuis) - -* fs: fix utime/futime timestamp rounding errors (Ben Noordhuis) - -* test: ensure reliable floating point comparison (Jameson Nash) - -* unix,fs: fix uv_fs_sendfile() (Santiago Gimeno) - -* unix: fix uv_fs_stat when using statx (Simon Kadisch) - -* linux,macos: fix uv_set_process_title regression (Momtchil Momtchev) - -* doc: clarify UDP errors and recvmmsg (Ethel Weston) - -* test-getaddrinfo: use example.invalid (Drew DeVault) - -* Revert "build: fix android autotools build" (Bernardo Ramos) - -* unix,fs: on DVS fs, statx returns EOPNOTSUPP (Mark Klein) - -* win, fs: mkdir really return UV_EINVAL for invalid names (Nicholas Vavilov) - -* tools: migrate tools/make_dist_html.py to python3 (Dominique Dumont) - -* unix: fix uv_uptime() on linux (schamberg97) - -* unix: check for partial copy_file_range support (Momtchil Momtchev) - -* win: bump minimum supported version to windows 8 (Ben Noordhuis) - -* poll,unix: ensure safety of rapid fd reuse (Bob Weinand) - -* test: fix some warnings (Issam E. Maghni) - -* unix: fix uv_uptime() regression (Santiago Gimeno) - -* doc: fix versionadded metadata (cjihrig) - -* test: fix 'incompatible pointer types' warnings (cjihrig) - -* unix: check for EXDEV in uv__fs_sendfile() (Darshan Sen) - - -2020.09.26, Version 1.40.0 (Stable), 4e69e333252693bd82d6338d6124f0416538dbfc - -Changes since version 1.39.0: - -* udp: add UV_UDP_MMSG_FREE recv_cb flag (Ryan Liptak) - -* include: re-map UV__EPROTO from 4046 to -4046 (YuMeiJie) - -* doc: correct UV_UDP_MMSG_FREE version added (cjihrig) - -* doc: add uv_metrics_idle_time() version metadata (Ryan Liptak) - -* win,tty: pass through utf-16 surrogate pairs (Mustafa M) - -* unix: fix DragonFly BSD build (Aleksej Lebedev) - -* win,udp: fix error code returned by connect() (Santiago Gimeno) - -* src: suppress user_timeout maybe-uninitialized (Daniel Bevenius) - -* test: fix compiler warning (Vladimír Čunát) - -* build: fix the Haiku cmake build (David Carlier) - -* linux: fix i386 sendmmsg/recvmmsg support (Ben Noordhuis) - -* build: add libuv-static pkg-config file (Nikolay Mitev) - -* unix,win: add uv_timer_get_due_in() (Ulrik Strid) - -* build,unix: add QNX support (Elad Lahav) - -* include: remove incorrect UV__ERR() for EPROTO (cjihrig) - - -2020.08.26, Version 1.39.0 (Stable), 25f4b8b8a3c0f934158cd37a37b0525d75ca488e - -Changes since version 1.38.1: - -* unix: use relaxed loads/stores for clock id (Ben Noordhuis) - -* build,win: link to user32.lib and advapi32.lib (George Zhao) - -* unix: squelch harmless valgrind warning (ssrlive) - -* include: fx c++ style comments warnings (Turbinya) - -* build,cmake: Change installation location on MinGW (erw7) - -* linux: use copy_file_range for uv_fs_copyfile when possible (Carter Li) - -* win,tcp: avoid reinserting a pending request ( - -* docs: improve the descriptions for get memory info (Juan Sebastian velez - Posada) - -* test: add udp-mmsg test (Ryan Liptak) - -* udp: add uv_udp_using_recvmmsg query (Ryan Liptak) - -* doc: add more error constants (TK-one) - -* zos: fix potential event loop stall (Trevor Norris) - -* include: add internal fields struct to uv_loop_t (Trevor Norris) - -* core: add API to measure event loop idle time (Trevor Norris) - -* win,fs: use CreateDirectoryW instead of _wmkdir (Mustafa M) - -* win,nfc: fix integer comparison signedness (escherstair) - -* win,nfc: use - -* win,nfc: removed some unused variables (escherstair) - -* win,nfc: add missing return statement (escherstair) - -* win,nfc: disable clang-format for - -* darwin: use IOKit for uv_cpu_info (Evan Lucas) - -* test: fix thread race in process_title_threadsafe (Ben Noordhuis) - -* win,fs: avoid implicit access to _doserrno (Jameson Nash) - -* test: give hrtime test a custom 20s timeout (Jameson Nash) - -* build: add more failed test, for qemu version bump (gengjiawen) - -* unix: handle src, dest same in uv_fs_copyfile() (cjihrig) - -* unix: error when uv_setup_args() is not called (Ryan Liptak) - -* aix: protect uv_exepath() from uv_set_process_title() (Richard Lau) - -* fs: clobber req->path on uv_fs_mkstemp() error (tjarlama) - -* cmake: fix compile error C2001 on Chinese Windows (司徒玟琅) - -* test: avoid double evaluation in ASSERT_BASE macro (tjarlama) - -* tcp: fail instantly if local port is unbound (Bartosz Sosnowski) - -* doc: fix most sphinx warnings (Jameson Nash) - -* nfci: address some style nits (Jameson Nash) - -* unix: don't use _POSIX_PATH_MAX (Ben Noordhuis) - - -2020.07.04, Version 1.38.1 (Stable), e8b989ea1f7f9d4083511a2caec7791e9abd1871 - -Changes since version 1.38.0: - -* test: use last matching qemu version (cjihrig) - -* win, util: rearrange uv_hrtime (Bartosz Sosnowski) - -* test: skip signal_multiple_loops test on QEMU (gengjiawen) - -* build: add android build to CI (gengjiawen) - -* test: extend fs_event_error_reporting timeout (cjihrig) - -* build: link libkvm on netbsd only (Alexander Tokmakov) - -* linux: refactor /proc file reader logic (Ben Noordhuis) - -* linux: read load average from /proc/loadavg (Ben Noordhuis) - -* android: remove patch code for below 21 (gengjiawen) - -* win: fix visual studio 2008 build (Arenoros) - -* win,tty: fix deadlock caused by inconsistent state (lander0s) - -* unix: use relaxed loads/stores for feature checks (Ben Noordhuis) - -* build: don't .gitignore m4/ax_pthread.m4 (Ben Noordhuis) - -* unix: fix gcc atomics feature check (Ben Noordhuis) - -* darwin: work around clock jumping back in time (Ben Noordhuis) - -* udp: fix write_queue cleanup on sendmmsg error (Santiago Gimeno) - -* src: build fix for Android (David Carlier) - - -2020.05.18, Version 1.38.0 (Stable), 1ab9ea3790378f9f25c4e78e9e2b511c75f9c9ed - -Changes since version 1.37.0: - -* test: skip poll_duplex and poll_unidirectional on PASE (Xu Meng) - -* linux: make cpu_times consistently be milliseconds (James Ross) - -* win: DRY uv_poll_start() and uv_poll_stop() (Ben Noordhuis) - -* win: DRY uv_poll_close() (Ben Noordhuis) - -* unix,win: add uv_library_shutdown() (Ben Noordhuis) - -* unix: yield cpu when spinlocking on async handle (Ben Noordhuis) - -* win: remove dep on GetQueuedCompletionStatusEx (Colin Finck) - -* doc: correct source lines (Shohei YOSHIDA) - -* build,android: fix typo (twosee) - -* doc: uv_cancel() handles uv_random_t requests (Philip Chimento) - -* doc: fix unescaped character (Philip Chimento) - -* build,cmake: fix compilation on old MinGW (erw7) - -* build: remove unnessesary MSVC warnings (Bartosz Sosnowski) - -* win: make uv_udp_init_ex() accept UV_UDP_RECVMMSG (Ben Noordhuis) - -* unix: simplify uv__udp_init_ex() (Ben Noordhuis) - -* win: remove MAX_PATH limitations (Bartosz Sosnowski) - -* build, win: add long path aware manifest (Bartosz Sosnowski) - -* doc: check/idle/prepare functions always succeed (Ben Noordhuis) - -* darwin: fix build with non-apple compilers (Ben Noordhuis) - -* win: support environment variables > 32767 chars (Ben Noordhuis) - -* unix: fully initialize struct msghdr (Ben Noordhuis) - -* doc: add uv_replace_allocator thread safety warning (twosee) - -* unix: fix int overflow when copying large files (Michal Artazov) - -* fs: report original error (Bartosz Sosnowski) - -* win, fs: add IO_REPARSE_TAG_APPEXECLINK support (Bartosz Sosnowski) - -* doc: fix formatting (Ben Noordhuis) - -* unix: fix memory leak when uv_loop_init() fails (Anna Henningsen) - -* unix: shrink uv_udp_set_source_membership() stack (Ben Noordhuis) - -* unix,win: fix wrong sizeof argument to memcpy() (Ben Noordhuis) - -* build: check for libraries not provided by libc (Jeroen Roovers) - -* doc: fix the order of arguments to calloc() (MasterDuke17) - -* unix: don't abort when getrlimit() fails (Ben Noordhuis) - -* test: support common user profile on IBMi (Xu Meng) - -* build: test on more platforms via QEMU in CI (gengjiawen) - - -2020.04.20, Version 1.37.0 (Stable), 02a9e1be252b623ee032a3137c0b0c94afbe6809 - -Changes since version 1.36.0: - -* timer: remove redundant check in heap compare (Yash Ladha) - -* udp: add flag to enable recvmmsg(2) explicitly (Saúl Ibarra Corretgé) - - -2020.04.16, Version 1.36.0 (Stable), 533b738838ad8407032e14b6772b29ef9af63cfa - -Changes since version 1.35.0: - -* build: add aix-common.c for AIX cmake build (Jesse Gorzinski) - -* zos: explicitly mark message queue events (Irek Fakhrutdinov) - -* zos: move mq check out of loop to save cpu cycles (Irek Fakhrutdinov) - -* zos: add checks to ensure behavior of epoll_wait (Irek Fakhrutdinov) - -* src: add uv__reallocf() (Ben Noordhuis) - -* build: ibmi support for cmake (Jesse Gorzinski) - -* build: fix gyp build for Android API >= 28 (Lin Zhang) - -* udp: return recvmmsg-ed datagrams in order (Saúl Ibarra Corretgé) - -* zos,test: fix spawn_empty_env for shared library build (Richard Lau) - -* zos: fix non-Release builds (Richard Lau) - -* zos: fix return value on expired nanosleep() call (Richard Lau) - -* build: fix z/OS cmake build (Richard Lau) - -* test: add a bunch of ASSERT macros (Santiago Gimeno) - -* test: remove unused extern declaration (Ben Noordhuis) - -* test: canonicalize argv[0] in exepath test (Ben Noordhuis) - -* test: simplify platform_init() (Ben Noordhuis) - -* ibmi: Fix isatty EBADF handling and refactor (Kevin Adler) - -* test: Test EBADF tty handling (Kevin Adler) - -* build: make cmake build benchmarks (Ben Noordhuis) - -* win: use RtlGenRandom from advapi32.dll directly (Ben Noordhuis) - -* android: fix OOB write in uv_interface_addresses() (Lin Zhang) - -* test: pass test when hostname is single character (毛毛) - -* ibmi: set the highest process priority to -10 (Xu Meng) - -* build: remove support for gyp (Ben Noordhuis) - -* doc: add note to README on cross-compiling (Ben Noordhuis) - -* fs: add uv_fs_lutime() (Sk Sajidul Kadir) - -* unix: implement cpu_relax() for arm (David Carlier) - -* linux: fix uv__accept4() (twosee) - -* win: handle file paths in uv_fs_statfs() (erw7) - -* unix: fix uv_os_environ() null pointer check (Rikard Falkeborn) - -* win: fix uv_os_environ() null pointer check (Rikard Falkeborn) - -* unix: fix compilation on macOS 32-bit architectures (Brad King) - -* win: replace alloca() with stack-based array (Ben Noordhuis) - - -2020.03.12, Version 1.35.0 (Stable), e45f1ec38db882f8dc17b51f51a6684027034609 - -Changes since version 1.34.2: - -* src: android build fix (David Carlier) - -* build: make code compilable for iOS on Xcode (ssrlive) - -* ibmi: skip unsupported fs test cases (Xu Meng) - -* ibmi: ensure that pipe backlog is not zero (Xu Meng) - -* test,udp6: fix udp_ipv6 test flakiness (Jameson Nash) - -* test: fix fs_event_watch_dir_recursive flakiness (Santiago Gimeno) - -* pipe: disallow listening on an IPC pipe (Witold Kręcicki) - -* build,cmake: improve buil experience (Isabella Muerte) - -* unix: remove support for FreeBSD < 10 (Saúl Ibarra Corretgé) - -* linux: simplify uv__accept() (Ben Noordhuis) - -* linux: assume presence of SOCK_CLOEXEC flag (Ben Noordhuis) - -* linux: simplify uv__dup2_cloexec() (Ben Noordhuis) - -* freebsd,linux: simplify uv__make_socketpair() (Ben Noordhuis) - -* unix: fix error handling in uv__make_socketpair() (Ben Noordhuis) - -* freebsd,linux: simplify uv__make_pipe() (Ben Noordhuis) - -* unix: fix error handling in uv__make_pipe() (Ben Noordhuis) - -* linux: simplify uv__async_eventfd() (Ben Noordhuis) - -* linux: assume the presence of inotify system calls (Ben Noordhuis) - -* doc: strip ICC profile from 2 jpg files (Dominique Dumont) - -* unix: make uv_tcp_keepalive predictable (Manuel BACHMANN) - -* docs: uv_setup_args() may take ownership of argv (Ben Noordhuis) - -* unix: fix error path in uv_setup_args() (Ben Noordhuis) - -* unix: fix size check in uv_get_process_title() (Ben Noordhuis) - -* doc: add erw7 to maintainers (erw7) - -* test: fixed udp4_echo_server implementation (Marek Vavrusa) - -* test: added udp ping benchmark (1,10,100 pingers) (Marek Vavrusa) - -* freebsd,linux: add recvmmsg() + sendmmsg() udp implementation (Marek Vavrusa) - -* win,pipe: DRY/simplify some code paths (Jameson Nash) - -* win: address some style nits (Jameson Nash) - -* win,pipe: ensure `req->event_handle` is defined (Elliot Saba) - -* win,pipe: consolidate overlapped initialization (Elliot Saba) - -* win,pipe: erase event_handle after deleting pointer (Jameson Nash) - -* build: fix android cmake build, build missing file (Ben Noordhuis) - -* test: skip some UDP tests on IBMi (Xu Meng) - -* test: skip some spawn test cases on IBMi (Xu Meng) - -* src: fix wrong method name in comment (TK-one) - -* test: add UV_TIMEOUT_MULTIPLIER environment var (Ben Noordhuis) - -* unix: fix uv_cpu_info always returning UV_ENOTDIR on OpenBSD (Ben Davies) - -* test: skip the pwd_shell test on IBMi (Xu Meng) - -* win,tty: Change to restore cursor shape with uv_tty_reset() (erw7) - -* win,tty: Added set cursor style to CSI sequences (erw7) - -* test: handle EINTR, fix EOF check in poll test (Ben Noordhuis) - -* unix: use socklen_t instead of size_t (Ben Noordhuis) - -* doc: fix header file location (TK-one) - -* unix: fix signal handle closing deferral (Ben Noordhuis) - -* ibmi: set the amount of memory in use to zero (Xu Meng) - -* zos: return on realloc failure in scandir() (Milad Farazmand) - -* zos: fix scandir() error path NULL pointer deref (Ben Noordhuis) - - -2020.01.24, Version 1.34.2 (Stable), f868c9ab0c307525a16fff99fd21e32a6ebc3837 - -Changes since version 1.34.1: - -* misc: adjust stalebot deadlines (Jameson Nash) - -* test: fix env-vars flakiness (cjihrig) - -* test: avoid truncating output lines (Jameson Nash) - -* darwin: stop calling SetApplicationIsDaemon() (Ben Noordhuis) - -* ibmi: implement uv_interface_addresses() (Xu Meng) - -* osx,fsevent: fix race during uv_loop_close (Jameson Nash) - -* osx,fsevent: clear pointer when deleting it [NFCI] (Jameson Nash) - -* Revert "aix: replace ECONNRESET with EOF if already closed" (Jameson Nash) - -* unix: handle uv__open_cloexec return value correctly (Anna Henningsen) - - -2020.01.13, Version 1.34.1 (Stable), 8aa5636ec72990bb2856f81e14c95813024a5c2b - -Changes since version 1.34.0: - -* unix: fix -Wstrict-aliasing compiler warning (Ben Noordhuis) - -* unix: cache address of dlsym("mkostemp") (Ben Noordhuis) - -* build: remove -pedantic from compiler flags (Ben Noordhuis) - -* Revert "darwin: assume pthread_setname_np() is available" (Ben Noordhuis) - -* Revert "darwin: speed up uv_set_process_title()" (Ben Noordhuis) - -* darwin: assume pthread_setname_np() is available (Ben Noordhuis) - -* ibmi: fix the false isatty() issue on IBMi (Xu Meng) - -* test: fix test failure under NetBSD and OpenBSD (David Carlier) - -* test: skip some test cases on IBMi (Xu Meng) - -* test: skip uv_(get|set)_process_title on IBMi (Xu Meng) - -* doc: remove binaries for Windows from README (Richard Lau) - -* unix: fix -Wunused-but-set-variable warning (George Zhao) - -* unix: pass sysctl size arg using ARRAY_SIZE macro (David Carlier) - -* test: disallow running the test suite as root (cjihrig) - -* unix: suppress -Waddress-of-packed-member warning (Ben Noordhuis) - -* misc: make more tags "not-stale" (Jameson Nash) - -* test: fix pthread memory leak (Trevor Norris) - -* docs: delete socks5-proxy sample (Jameson Nash) - -* ibmi: fix the CMSG length issue (Xu Meng) - -* docs: fix formatting (Jameson Nash) - -* unix: squelch fchmod() EPERM on CIFS share (Ben Noordhuis) - -* docs: fix linkcheck (Jameson Nash) - -* docs: switch from linux.die.net to man7.org (Jameson Nash) - -* win: remove abort when non-IFS LSP detection fails (virtualyw) - -* docs: clarify that uv_pipe_t is a pipe (Jameson Nash) - -* win,tty: avoid regressions in utf-8 handling (Jameson Nash) - -* win: remove bad assert in uv_loop_close (Jameson Nash) - -* test: fix -fno-common build errors (Ben Noordhuis) - -* build: turn on -fno-common to catch regressions (Ben Noordhuis) - -* test: fix fs birth time test failure (Ben Noordhuis) - -* tty,unix: avoid affecting controlling TTY (Jameson Nash) - - -2019.12.05, Version 1.34.0 (Stable), 15ae750151ac9341e5945eb38f8982d59fb99201 - -Changes since version 1.33.1: - -* unix: move random-sysctl to random-sysctl-linux (nia) - -* netbsd: use KERN_ARND sysctl to get entropy (nia) - -* unix: refactor uv__fs_copyfile() logic (cjihrig) - -* build: fix android build, add missing sources (Ben Noordhuis) - -* build: fix android build, fix symbol redefinition (Ben Noordhuis) - -* build: fix android autotools build (Ben Noordhuis) - -* fs: handle non-functional statx system call (Milad Farazmand) - -* unix,win: add uv_sleep() (cjihrig) - -* doc: add richardlau to maintainers (Richard Lau) - -* aix: fix netmask for IPv6 (Richard Lau) - -* aix: clean up after errors in uv_interface_addresses() (Richard Lau) - -* aix: fix setting of physical addresses (Richard Lau) - -* fs: add uv_fs_mkstemp (Saúl Ibarra Corretgé) - -* unix: switch uv_sleep() to nanosleep() (Ben Noordhuis) - -* unix: retry on EINTR in uv_sleep() (Ben Noordhuis) - -* zos: fix nanosleep() emulation (Ben Noordhuis) - - -2019.10.20, Version 1.33.1 (Stable), 07ad32138f4d2285ba2226b5e20462b27b091a59 - -Changes since version 1.33.0: - -* linux: fix arm64 SYS__sysctl build breakage (Ben Noordhuis) - - -2019.10.17, Version 1.33.0 (Stable), e56e42e9310e4437e1886dbd6771792c14c0a5f3 - -Changes since version 1.32.0: - -* Revert "linux: drop code path for epoll_pwait-less kernels" (Yang Yu) - -* build: fix build error with __ANDROID_API__ < 21 (Yang Yu) - -* win: fix reading hidden env vars (Anna Henningsen) - -* unix,win: add uv_random() (Ben Noordhuis) - -* win: simplify mkdtemp (Saúl Ibarra Corretgé) - -* docs: fix literal-includes in User Guide (Nhan Khong) - -* win, tty: fix problem of receiving unexpected SIGWINCH (erw7) - -* unix: fix {Net,Open}BSD build (David Carlier) - -* win,mingw: Fix undefined MCAST_* constants (Crunkle) - -* build: Add link for test/fixtures/lorem_ipsum.txt (Andrew Paprocki) - -* fs: use statvfs in uv__fs_statfs() for Haiku (Calvin Hill) - -* fsevents: stop using fsevents to watch files (Jameson Nash) - -* fsevents: regression in watching / (Jameson Nash) - -* build,cmake: don't try to detect a C++ compiler (Isabella Muerte) - -* build: fix build warning on cygwin (MaYuming) - -* unix: set sin_len and sin6_len (Ouyang Yadong) - -* test: fix order of operations in test (cjihrig) - -* doc: improve uv_fs_readdir() cleanup docs (cjihrig) - -* build: remove duplicated test in build files (ZYSzys) - -* android: enable getentropy on Android >= 28 (David Carlier) - -* android: fix build (David Carlier) - -* darwin: speed up uv_set_process_title() (Ben Noordhuis) - -* darwin: assume pthread_setname_np() is available (Ben Noordhuis) - -* unix,udp: ensure addr is non-null (Jameson Nash) - -* win,tty: add uv_tty_{get,set}_vterm_state (erw7) - -* win: fix uv_statfs_t leak in uv_fs_statfs() (Ryan Liptak) - -* build: install files on windows via cmake (Carl Lei) - -* darwin,test: include AvailabilityMacros.h (Saúl Ibarra Corretgé) - -* darwin,test: update loop time after sleeping (Saúl Ibarra Corretgé) - -* doc: remove old FreeBSD 9 related note (Saúl Ibarra Corretgé) - -* doc: improve uv_{send,recv}_buffer_size() docs (Ryan Liptak) - -* build: move -Wno-long-long check to configure time (Ben Noordhuis) - -* unix: update uv_fs_copyfile() fallback logic (Stefan Bender) - -* win: cast setsockopt struct to const char* (Shelley Vohr) - - -2019.09.10, Version 1.32.0 (Stable), 697bea87b3a0b0e9b4e5ff86b39d1dedb70ee46d - -Changes since version 1.31.0: - -* misc: enable stalebot (Saúl Ibarra Corretgé) - -* win: map ERROR_ENVVAR_NOT_FOUND to UV_ENOENT (cjihrig) - -* win: use L'\0' as UTF-16 null terminator (cjihrig) - -* win: support retrieving empty env variables (cjihrig) - -* unix,stream: fix returned error codes (Santiago Gimeno) - -* test: fix typo in DYLD_LIBRARY_PATH (Ben Noordhuis) - -* unix,signal: keep handle active if pending signal (Santiago Gimeno) - -* openbsd: fix uv_cpu_info (Santiago Gimeno) - -* src: move uv_free_cpu_info to uv-common.c (Santiago Gimeno) - -* tcp: add uv_tcp_close_reset method (Santiago Gimeno) - -* test: fix udp-multicast-join tests (Santiago Gimeno) - -* test: remove assertion in fs_statfs test (cjihrig) - -* doc: clarify uv_buf_t usage in uv_alloc_cb (Tomas Krizek) - -* win: fix typo in preprocessor expression (Konstantin Podsvirov) - -* timer: fix uv_timer_start on closing timer (seny) - -* udp: add source-specific multicast support (Vladimir Karnushin) - -* udp: fix error return values (Santiago Gimeno) - -* udp: drop IPV6_SSM_SUPPORT macro (Santiago Gimeno) - -* udp: fix uv__udp_set_source_membership6 (Santiago Gimeno) - -* udp: use sockaddr_storage instead of union (Santiago Gimeno) - -* build,zos: add _OPEN_SYS_SOCK_EXT3 flag (Santiago Gimeno) - -* test: add specific source multicast tests (Santiago Gimeno) - -* include: map EILSEQ error code (cjihrig) - -* win, tty: improve SIGWINCH performance (Bartosz Sosnowski) - -* build: fix ios build error (MaYuming) - -* aix: replace ECONNRESET with EOF if already closed (Milad Farazmand) - -* build: add cmake library VERSION, SOVERSION (Eneas U de Queiroz) - -* build: make include/ public in CMakeLists.txt (Ben Noordhuis) - -* build: export USING_UV_SHARED=1 to cmake deps (Ben Noordhuis) - -* build: cmake_minimum_required(VERSION 2.8.12) (Daniel Hahler) - -* aix: Fix broken cmpxchgi() XL C++ specialization. (Andrew Paprocki) - -* test: fix -Wsign-compare warning (Ben Noordhuis) - -* unix: simplify open(O_CLOEXEC) feature detection (Ben Noordhuis) - -* unix: fix UV_FS_O_DIRECT definition on Linux (Joran Dirk Greef) - -* doc: uv_handle_t documentation suggestion (Daniel Bevenius) - - -2019.08.10, Version 1.31.0 (Stable), 0a6771cee4c15184c924bfe9d397bdd0c3b206ba - -Changes since version 1.30.1: - -* win,fs: don't modify global file translation mode (Javier Blazquez) - -* win: fix uv_os_tmpdir when env var is 260 chars (Mustafa M) - -* win: prevent tty event explosion machine hang (Javier Blazquez) - -* win: add UV_FS_O_FILEMAP (João Reis) - -* win, fs: mkdir return UV_EINVAL for invalid names (Bartosz Sosnowski) - -* github: add root warning to template (cjihrig) - -* win: misc fs cleanup (cjihrig) - -* unix,win: add uv_fs_statfs() (cjihrig) - -* test: avoid AF_LOCAL (Carlo Marcelo Arenas Belón) - -* unix,win: add ability to retrieve all env variables (Saúl Ibarra Corretgé) - -* Revert "darwin: speed up uv_set_process_title()" (Ben Noordhuis) - -* doc: add %p to valgrind log-file arg (Zach Bjornson) - -* doc: fix typo in basics.rst (Nan Xiao) - -* ibmi: support Makefile build for IBM i (Xu Meng) - -* OpenBSD: only get active CPU core count (Ben Davies) - -* test: fix gcc 8 warnings for tests (Nhan Khong) - -* ibmi: use correct header files (Xu Meng) - -* unix: clear UV_HANDLE_READING flag before callback (zyxwvu Shi) - -* unix: fix unused-function warning on BSD (Nhan Khong) - -* test: fix test runner on MinGW (Crunkle) - -* win: remove try-except outside MSVC (Crunkle) - -* win: fix uv_spawn() ENOMEM on empty env (Ben Noordhuis) - - -2019.07.03, Version 1.30.1 (Stable), 1551969c84c2f546a429dac169c7fdac3e38115e - -Changes since version 1.30.0: - -* doc: fix incorrect versionchanged (cjihrig) - -* test: allow UV_ECONNRESET in tcp_try_write_error (cjihrig) - -* unix: add uv_get_constrained_memory() cygwin stub (cjihrig) - -* build: fix android cmake build (Ben Noordhuis) - -* unix: squelch -Wcast-function-type warning (Ben Noordhuis) - -* build: fix compile error with uClibc (zlargon) - - -2019.06.28, Version 1.30.0 (Stable), 365b6f2a0eacda1ff52be8e57ab9381cfddc5dbb - -Changes since version 1.29.1: - -* darwin: fall back to F_BARRIERFSYNC (Ben Noordhuis) - -* darwin: add 32 bit close$NOCANCEL implementation (ken-cunningham-webuse) - -* build, core, unix: add support for Haiku (Leorize) - -* darwin,linux: more conservative minimum stack size (Ben Noordhuis) - -* threadpool: increase UV_THREADPOOL_SIZE limit (Vlad A) - -* unix: return actual error from `uv_try_write()` (Anna Henningsen) - -* darwin: fix build error with macos 10.10 (Ben Noordhuis) - -* unix: make uv_cwd() report UV_ENOBUFS (Ben Noordhuis) - -* unix: make uv_fs_read() fill all buffers (Ben Noordhuis) - -* test: give hrtime test a custom 10s timeout (Ben Noordhuis) - -* fs: fix uv_fs_copyfile if same src and dst (Santiago Gimeno) - -* build: add cmake option to skip building tests (Niels Lohmann) - -* doc: add link to nodejs.org (Jenil Christo) - -* unix: fix a comment typo in signal.c (Evgeny Ermakov) - -* unix: remove redundant cast in process.c (gengjiawen) - -* doc: fix wrong mutex function prototypes (Leo Chung) - - -2019.05.22, Version 1.29.1 (Stable), d16e6094e1eb3b0b5981ef1dd7e03ec4d466944d - -Changes since version 1.29.0: - -* unix: simplify uv/posix.h include logic (cjihrig) - -* test: increase test timeout (cjihrig) - -* linux: fix sscanf() overflows reading from /proc (Ben Noordhuis) - - -2019.05.16, Version 1.29.0 (Stable), 43957efd92c167b352b4c948b617ca7afbee0ed1 - -Changes since version 1.28.0: - -* ibmi: read memory and CPU usage info (Xu Meng) - -* doc: update the cmake testing instruction (zlargon) - -* unix: fix race condition in uv_async_send() (Ben Noordhuis) - -* linux: use O_CLOEXEC instead of EPOLL_CLOEXEC (Ben Noordhuis) - -* doc: mark uv_async_send() as async-signal-safe (Ben Noordhuis) - -* linux: init st_flags and st_gen when using statx (Oscar Waddell) - -* linux: read free/total memory from /proc/meminfo (Ben Noordhuis) - -* test: test zero-sized uv_fs_sendfile() writes (Ben Noordhuis) - -* unix: don't assert on UV_PROCESS_WINDOWS_* flags (Ben Noordhuis) - -* linux: set correct mac address for IP-aliases (Santiago Gimeno) - -* win,util: fix null pointer dereferencing (Tobias Nießen) - -* unix,win: fix `uv_fs_poll_stop()` when active (Anna Henningsen) - -* doc: add missing uv_fs_type entries (Michele Caini) - -* doc: fix build with sphinx 2.x (FX Coudert) - -* unix: don't make statx system call on Android (George Zhao) - -* unix: fix clang scan-build warning (Kyle Edwards) - -* unix: fall back to kqueue on older macOS systems (ken-cunningham-webuse) - -* unix,win: add uv_get_constrained_memory() (Kelvin Jin) - -* darwin: fix thread cancellation fd leak (Ben Noordhuis) - -* linux: fix thread cancellation fd leak (Ben Noordhuis) - - -2019.04.16, Version 1.28.0 (Stable), 7bf8fabfa934660ee0fe889f78e151198a1165fc - -Changes since version 1.27.0: - -* unix,win: add uv_gettimeofday() (cjihrig) - -* unix,win: add uv_fs_{open,read,close}dir() (cjihrig) - -* unix: fix uv_interface_addresses() (Andreas Rohner) - -* fs: remove macOS-specific copyfile(3) (Rich Trott) - -* fs: add test for copyfile() respecting permissions (Rich Trott) - -* build: partially revert 5234b1c43a (Ben Noordhuis) - -* zos: fix setsockopt error when using AF_UNIX (Milad Farazmand) - -* unix: suppress EINTR/EINPROGRESS in uv_fs_close() (Ben Noordhuis) - -* build: use cmake APPLE variable to detect platform (zlargon) - -* distcheck: remove duplicate test/ entry (Jameson Nash) - -* unix: remove unused cmpxchgl() function (Ben Noordhuis) - -* unix: support sockaddr_un in uv_udp_send() (Yury Selivanov) - -* unix: guard use of PTHREAD_STACK_MIN (Kamil Rytarowski) - -* unix,win: introduce uv_timeval64_t (cjihrig) - -* doc: document uv_timeval_t and uv_timeval64_t (cjihrig) - - -2019.03.17, Version 1.27.0 (Stable), a4fc9a66cc35256dbc4dcd67c910174f05b6daa6 - -Changes since version 1.26.0: - -* doc: describe unix signal handling better (Vladimír Čunát) - -* linux: use statx() to obtain file birth time (Ben Noordhuis) - -* src: fill sockaddr_in6.sin6_len when it's defined (Santiago Gimeno) - -* test: relax uv_hrtime() test assumptions (Ben Noordhuis) - -* build: make cmake install LICENSE only once (Thomas Karl Pietrowski) - -* bsd: plug uv_fs_event_start() error path fd leak (Ben Noordhuis) - -* unix: fix __FreeBSD_kernel__ typo (cjihrig) - -* doc: add note about uv_run() not being reentrant (Ben Noordhuis) - -* unix, win: make fs-poll close wait for resource cleanup (Anna Henningsen) - -* doc: fix typo in uv_thread_options_t definition (Ryan Liptak) - -* win: skip winsock initialization in safe mode (evgley) - -* unix: refactor getsockname/getpeername methods (Santiago Gimeno) - -* win,udp: allow to use uv_udp_open on bound sockets (Santiago Gimeno) - -* udp: add support for UDP connected sockets (Santiago Gimeno) - -* build: fix uv_test shared uv Windows cmake build (ptlomholt) - -* build: add android-configure scripts to EXTRA_DIST (Ben Noordhuis) - -* build: add missing header (cjihrig) - -* sunos: add perror() output prior to abort() (Andrew Paprocki) - -* test,sunos: disable UV_DISCONNECT handling (Andrew Paprocki) - -* sunos: disable __attribute__((unused)) (Andrew Paprocki) - -* test,sunos: use unistd.h code branch (Andrew Paprocki) - -* build,sunos: better handling of non-GCC compiler (Andrew Paprocki) - -* test,sunos: fix statement not reached warnings (Andrew Paprocki) - -* sunos: fix argument/prototype mismatch in atomics (Andrew Paprocki) - -* test,sunos: test-ipc.c lacks newline at EOF (Andrew Paprocki) - -* test: change spawn_stdin_stdout return to void (Andrew Paprocki) - -* test: remove call to floor() in test driver (Andrew Paprocki) - - -2019.02.11, Version 1.26.0 (Stable), 8669d8d3e93cddb62611b267ef62a3ddb5ba3ca0 - -Changes since version 1.25.0: - -* doc: fix uv_get_free_memory doc (Stephen Belanger) - -* unix: fix epoll cpu 100% issue (yeyuanfeng) - -* openbsd,tcp: special handling of EINVAL on connect (ptlomholt) - -* win: simplify registry closing in uv_cpu_info() (cjihrig) - -* src,include: define UV_MAXHOSTNAMESIZE (cjihrig) - -* win: return product name in uv_os_uname() version (cjihrig) - -* thread: allow specifying stack size for new thread (Anna Henningsen) - -* win: fix duplicate tty vt100 fn key (erw7) - -* unix: don't attempt to invalidate invalid fd (Ben Noordhuis) - - -2019.01.19, Version 1.25.0 (Stable), 4a10a9d425863330af199e4b74bd688e62d945f1 - -Changes since version 1.24.1: - -* Revert "win,fs: retry if uv_fs_rename fails" (Ben Noordhuis) - -* aix: manually trigger fs event monitoring (Gireesh Punathil) - -* unix: rename WRITE_RETRY_ON_ERROR macro (Ben Noordhuis) - -* darwin: DRY platform-specific error check (Ben Noordhuis) - -* unix: refactor uv__write() (Ben Noordhuis) - -* unix: don't send handle twice on partial write (Ben Noordhuis) - -* tty,win: fix Alt+key under WSL (Bartosz Sosnowski) - -* build: support running tests in out-of-tree builds (Jameson Nash) - -* fsevents: really watch files with fsevents on macos 10.7+ (Jameson Nash) - -* thread,mingw64: need intrin.h header for SSE2 MemoryBarrier (Jameson Nash) - -* win: fix sizeof-pointer-div warning (cjihrig) - -* unix,win: add uv_os_uname() (cjihrig) - -* win, tty: fix CreateFileW() return value check (Bartosz Sosnowski) - -* unix: enable IPv6 tests on OpenBSD (ptlomholt) - -* test: fix test-ipc spawn_helper exit_cb (Santiago Gimeno) - -* test: fix test-ipc tests (Santiago Gimeno) - -* unix: better handling of unsupported F_FULLFSYNC (Victor Costan) - -* win,test: de-flake fs_event_watch_dir_short_path (Refael Ackermann) - -* win: fix msvc warning (sid) - -* openbsd: switch to libuv's barrier implementation (ptlomholt) - -* unix,stream: fix zero byte writes (Santiago Gimeno) - -* ibmi: return EISDIR on read from directory fd (Kevin Adler) - -* build: wrap long lines in Makefile.am (cjihrig) - - -2018.12.17, Version 1.24.1 (Stable), 274f2bd3b70847cadd9a3965577a87e666ab9ac3 - -Changes since version 1.24.0: - -* test: fix platform_output test on cygwin (damon-kwok) - -* gitignore: ignore build/ directory (Damon Kwok) - -* unix: zero epoll_event before use (Ashe Connor) - -* darwin: use runtime check for file cloning (Ben Noordhuis) - -* doc: replace deprecated build command on macOS (Rick) - -* warnings: fix code that emits compiler warnings (Jameson Nash) - -* doc: clarify expected memory management strategy (Ivan Krylov) - -* test: add uv_inet_ntop(AF_INET) coverage (Ben Noordhuis) - -* unix: harden string copying, introduce strscpy() (Ben Noordhuis) - -* linux: get rid of strncpy() call (Ben Noordhuis) - -* aix: get rid of strcat() calls (Ben Noordhuis) - -* aix: fix data race in uv_fs_event_start() (Ben Noordhuis) - -* win: fs: fix `FILE_FLAG_NO_BUFFERING` for writes (Joran Dirk Greef) - -* build: don't link against -lpthread on Android (Michael Meier) - - -2018.11.14, Version 1.24.0 (Stable), 2d427ee0083d1baf995df4ebf79a3f8890e9a3e1 - -Changes since version 1.23.2: - -* unix: do not require PATH_MAX to be defined (Brad King) - -* win,doc: path encoding in uv_fs_XX is UTF-8 (hitesh) - -* unix: add missing link dependency on kFreeBSD (Svante Signell) - -* unix: add support for GNU/Hurd (Samuel Thibault) - -* test: avoid memory leak for test_output (Carlo Marcelo Arenas Belón) - -* zos: avoid UB with NULL pointer arithmetic (Carlo Marcelo Arenas Belón) - -* doc: add vtjnash to maintainers (Jameson Nash) - -* unix: restore skipping of phys_addr copy (cjihrig) - -* unix,win: make uv_interface_addresses() consistent (cjihrig) - -* unix: remove unnecessary linebreaks (cjihrig) - -* unix,win: handle zero-sized allocations uniformly (Ben Noordhuis) - -* unix: remove unused uv__dup() function (Ben Noordhuis) - -* core,bsd: refactor process_title functions (Santiago Gimeno) - -* win: Redefine NSIG to consider SIGWINCH (Jeremy Studer) - -* test: make sure that reading a directory fails (Sakthipriyan Vairamani) - -* win, tty: remove zero-size read callbacks (Bartosz Sosnowski) - -* test: fix test runner getenv async-signal-safety (Ben Noordhuis) - -* test: fix test runner execvp async-signal-safety (Ben Noordhuis) - -* test,unix: fix race in test runner (Ben Noordhuis) - -* unix,win: support IDNA 2008 in uv_getaddrinfo() (Ben Noordhuis) - -* win, tcp: avoid starving the loop (Bartosz Sosnowski) - -* win, dl: proper error messages on some systems (Bartosz Sosnowski) - -* win,fs: retry if uv_fs_rename fails (Bartosz Sosnowski) - -* darwin: speed up uv_set_process_title() (Ben Noordhuis) - -* aix: fix race in uv_get_process_title() (Gireesh Punathil) - -* win: support more fine-grained windows hiding (Bartosz Sosnowski) - - -2018.10.09, Version 1.23.2 (Stable), 34c12788d2e7308f3ac506c0abcbf74c0d6abd20 - -Changes since version 1.23.1: - -* unix: return 0 retrieving rss on cygwin (cjihrig) - -* unix: initialize uv_interface_address_t.phys_addr (cjihrig) - -* test: handle uv_os_setpriority() windows edge case (cjihrig) - -* tty, win: fix read stop for raw mode (Bartosz Sosnowski) - -* Revert "Revert "unix,fs: fix for potential partial reads/writes"" (Jameson - Nash) - -* unix,readv: always permit partial reads to return (Jameson Nash) - -* win,tty: fix uv_tty_close() (Bartosz Sosnowski) - -* doc: remove extraneous "on" (Ben Noordhuis) - -* unix,win: fix threadpool race condition (Anna Henningsen) - -* unix: rework thread barrier implementation (Ben Noordhuis) - -* aix: switch to libuv's own thread barrier impl (Ben Noordhuis) - -* unix: signal done to last thread barrier waiter (Ben Noordhuis) - -* test: add uv_barrier_wait serial thread test (Ali Ijaz Sheikh) - -* unix: optimize uv_fs_readlink() memory allocation (Ben Noordhuis) - -* win: remove req.c and other cleanup (Carlo Marcelo Arenas Belón) - -* aix: don't EISDIR on read from directory fd (Ben Noordhuis) - - -2018.09.22, Version 1.23.1 (Stable), d2282b3d67821dc53c907c2155fa8c5c6ce25180 - -Changes since version 1.23.0: - -* unix,win: limit concurrent DNS calls to nthreads/2 (Anna Henningsen) - -* doc: add addaleax to maintainers (Anna Henningsen) - -* doc: add missing slash in stream.rst (Emil Bay) - -* unix,fs: use utimes & friends for uv_fs_utime (Jeremiah Senkpiel) - -* unix,fs: remove linux fallback from utimesat() (Jeremiah Senkpiel) - -* unix,fs: remove uv__utimesat() syscall fallback (Jeremiah Senkpiel) - -* doc: fix argument name in tcp.rts (Emil Bay) - -* doc: notes on running tests, benchmarks, tools (Jamie Davis) - -* linux: remove epoll syscall wrappers (Ben Noordhuis) - -* linux: drop code path for epoll_pwait-less kernels (Ben Noordhuis) - -* Partially revert "win,code: remove GetQueuedCompletionStatus-based poller" - (Jameson Nash) - -* build: add compile for android arm64/x86/x86-64 (Andy Zhang) - -* doc: clarify that some remarks apply to windows (Bert Belder) - -* test: fix compiler warnings (Jamie Davis) - -* ibmi: return 0 from uv_resident_set_memory() (dmabupt) - -* win: fix uv_udp_recv_start() error translation (Ryan Liptak) - -* win,doc: improve uv_os_setpriority() documentation (Bartosz Sosnowski) - -* test: increase upper bound in condvar_5 (Jamie Davis) - -* win,tty: remove deadcode (Jameson Nash) - -* stream: autodetect direction (Jameson Nash) - - -2018.08.18, Version 1.23.0 (Stable), 7ebb26225f2eaae6db22f4ef34ce76fa16ff89ec - -Changes since version 1.22.0: - -* win,pipe: restore compatibility with the old IPC framing protocol (Bert - Belder) - -* fs: add uv_open_osfhandle (Bartosz Sosnowski) - -* doc: update Visual C++ Build Tools URL (Michał Kozakiewicz) - -* unix: loop starvation on successful write complete (jBarz) - -* win: add uv__getnameinfo_work() error handling (A. Hauptmann) - -* win: return UV_ENOMEM from uv_loop_init() (cjihrig) - -* unix,win: add uv_os_{get,set}priority() (cjihrig) - -* test: fix warning in test-tcp-open (Santiago Gimeno) - - -2018.07.11, Version 1.22.0 (Stable), 8568f78a777d79d35eb7d6994617267b9fb33967 - -Changes since version 1.21.0: - -* unix: remove checksparse.sh (Ben Noordhuis) - -* win: fix mingw build error (Ben Noordhuis) - -* win: fix -Wunused-function warnings in thread.c (Ben Noordhuis) - -* unix,win: merge timers implementation (Ben Noordhuis) - -* win: fix pointer type in pipe.c (Ben Noordhuis) - -* win: fixing build for older MSVC compilers (Michael Fero) - -* zos: clear poll events on every iteration (jBarz) - -* zos: write-protect message queue (jBarz) - -* zos: use correct pointer type in strnlen (jBarz) - -* unix,win: merge handle flags (Ben Noordhuis) - -* doc: update Imran Iqbal's GitHub handle (cjihrig) - -* src: add new error apis to prevent memory leaks (Shelley Vohr) - -* test: make test-condvar call uv_cond_wait (Jamie Davis) - -* fs: change position of uv_fs_lchown (Ujjwal Sharma) - - -2018.06.23, Version 1.21.0 (Stable), e4983a9b0c152932f7553ff4a9ff189d2314cdcb - -Changes since version 1.20.3: - -* unix,windows: map EFTYPE errno (cjihrig) - -* win: perform case insensitive PATH= comparison (cjihrig) - -* win, fs: uv_fs_fchmod support for -A files (Bartosz Sosnowski) - -* src,lib: fix comments (Tobias Nießen) - -* win,process: allow child pipe handles to be opened in overlapped mode (Björn - Linse) - -* src,test: fix idiosyncratic comment style (Bert Belder) - -* test: fs_fchmod_archive_readonly must return a value (Bert Belder) - -* win,pipe: fix incorrect error code returned from uv_pipe_write_impl() (Bert - Belder) - -* win,pipe: properly set uv_write_t.send_handle in uv_write2() (Bert Belder) - -* test: add vectored uv_write() ping-pong tests (Bert Belder) - -* win,pipe: support vectored uv_write() calls (Bert Belder) - -* win,pipe: refactor pipe read cancellation logic (Bert Belder) - -* test: improve output from IPC test helpers (Bert Belder) - -* test: add test for IPC deadlock on Windows ( - -* win,pipe: fix IPC pipe deadlock (Bert Belder) - -* unix: catch some cases of watching fd twice (Ben Noordhuis) - -* test: use custom timeout for getaddrinfo_fail_sync (Ben Noordhuis) - -* Revert "win: add Windows XP support to uv_if_indextoname()" (Bert Belder) - -* win,thread: remove fallback uv_cond implementation (Bert Belder) - -* src,test: s/olny/only (cjihrig) - -* unix: close signal pipe fds on unload (Ben Noordhuis) - -* win: allow setting udp socket options before bind (cjihrig) - -* unix: return UV_ENOTSUP on FICLONE_FORCE failure (cjihrig) - -* win,pipe: remove unreferenced local variable (Bert Belder) - -* win,code: remove GetQueuedCompletionStatus-based poller (Bert Belder) - -* win: remove the remaining dynamic kernel32 imports (Bert Belder) - -* test: speedup process-title-threadsafe on macOS (cjihrig) - -* core: move all include files except uv.h to uv/ (Saúl Ibarra Corretgé) - -* win: move stdint-msvc2008.h to include/uv/ (Ben Noordhuis) - -* build: fix cygwin install (Ben Noordhuis) - -* build,win: remove MinGW Makefile (Saúl Ibarra Corretgé) - -* build: add a cmake build file (Ben Noordhuis) - -* build: add test suite option to cmake build (Ben Noordhuis) - -* unix: set errno in uv_fs_copyfile() (cjihrig) - -* samples: fix inconsistency in parse_opts vs usage (zyxwvu Shi) - -* linux: handle exclusive POLLHUP with UV_DISCONNECT (Brad King) - -* include: declare uv_cpu_times_s in higher scope (Peter Johnson) - -* doc: add uv_fs_fsync() AIX limitations (jBarz) - -* unix,win: add uv_fs_lchown() (Paolo Greppi) - -* unix: disable clang variable length array warning (Peter Johnson) - -* doc: document uv_pipe_t::ipc (Ed Schouten) - -* doc: undocument uv_req_type's UV_REQ_TYPE_PRIVATE (Ed Schouten) - -* doc: document UV_*_MAP() macros (Ed Schouten) - -* win: remove use of min() macro in pipe.c (Peter Johnson) - -* doc: add jbarz as maintainer ( - - -2018.05.08, Version 1.20.3 (Stable), 8cfd67e59195251dff793ee47c185c9d6a8f3818 - -Changes since version 1.20.2: - -* win: add Windows XP support to uv_if_indextoname() (ssrlive) - -* win: fix `'floor' undefined` compiler warning (ssrlive) - -* win, pipe: stop read for overlapped pipe (Bartosz Sosnowski) - -* build: fix utf-8 name of copyright holder (Jérémy Lal) - -* zos: initialize pollfd revents (jBarz) - -* zos,doc: add system V message queue note (jBarz) - -* linux: don't use uv__nonblock_ioctl() on sparc (Ben Noordhuis) - - -2018.04.23, Version 1.20.2 (Stable), c51fd3f66bbb386a1efdeba6812789f35a372d1e - -Changes since version 1.20.1: - -* zos: use custom semaphore (jBarz) - -* win: fix registry API error handling (Kyle Farnung) - -* build: add support for 64-bit AIX (Richard Lau) - -* aix: guard STATIC_ASSERT for glibc work around (Richard Lau) - - -2018.04.19, Version 1.20.1 (Stable), 36ac2fc8edfd5ff3e9be529be1d4a3f0d5364e94 - -Changes since version 1.20.0: - -* doc,fs: improve documentation (Bob Burger) - -* win: return a floored double from uv_uptime() (Refael Ackermann) - -* doc: clarify platform specific pipe naming (Thomas Versteeg) - -* unix: fix uv_pipe_chmod() on macOS (zzzjim) - -* unix: work around glibc semaphore race condition (Anna Henningsen) - -* tcp,openbsd: disable Unix TCP check for IPV6_ONLY (Alex Arslan) - -* test,openbsd: use RETURN_SKIP in UDP IPv6 tests (Alex Arslan) - -* test,openbsd: fix multicast test (Alex Arslan) - -* Revert "win, fs: use FILE_WRITE_ATTRIBUTES when opening files" (cjihrig) - - -2018.04.03, Version 1.20.0 (Stable), 0012178ee2b04d9e4a2c66c27cf8891ad8325ceb - -Changes since version 1.19.2: - -* unix,spawn: respect user stdio flags for new pipe (Jameson Nash) - -* Revert "Revert "unix,tcp: avoid marking server sockets connected"" (Jameson - Nash) - -* req: revisions to uv_req_t handling (Jameson Nash) - -* win: remove unnecessary initialization (cjihrig) - -* win: update uv_os_homedir() to use uv_os_getenv() (cjihrig) - -* test: fix tcp_oob test flakiness (Santiago Gimeno) - -* posix: fix uv__pollfds_del() for invalidated fd's (Jesse Gorzinski) - -* doc: README: add note on installing gyp (Jamie Davis) - -* unix: refactor uv_os_homedir to use uv_os_getenv (Santiago Gimeno) - -* unix: fix several instances of lost errno (Michael Kilburn) - -* win,tty: update several TODO comments (Ruslan Bekenev) - -* unix: add UV_FS_COPYFILE_FICLONE support (cjihrig) - -* test: fix connect_unspecified (Santiago Gimeno) - -* unix,win: add UV_FS_COPYFILE_FICLONE_FORCE support (cjihrig) - -* win: use long directory name for handle->dirw (Nicholas Vavilov) - -* build: build with -D_FILE_OFFSET_BITS=64 again (Ben Noordhuis) - -* win, fs: fix uv_fs_unlink for +R -A files (Bartosz Sosnowski) - -* win, fs: use FILE_WRITE_ATTRIBUTES when opening files (Bartosz Sosnowski) - -* unix: use __PASE__ on IBM i platforms (Jesse Gorzinski) - -* test,freebsd: fix flaky poll tests (Santiago Gimeno) - -* test: increase connection timeout to 1 second (jBarz) - -* win,tcp: handle canceled connect with ECANCELED (Jameson Nash) - - -2018.02.22, Version 1.19.2 (Stable), c5afc37e2a8a70d8ab0da8dac10b77ba78c0488c - -Changes since version 1.19.1: - -* test: fix incorrect asserts (cjihrig) - -* test: fix a typo in test-fork.c (Felix Yan) - -* build: remove long-obsolete gyp workarounds (Ben Noordhuis) - -* build: split off tests into separate gyp file (Ben Noordhuis) - -* test: check uv_cond_timedwait more carefully (Jamie Davis) - -* include,src: introduce UV__ERR() macro (Mason X) - -* build: add url field to libuv.pc (Ben Noordhuis) - -* doc: mark IBM i as Tier 3 support (Jesse Gorzinski) - -* win,build: correct C2059 errors (Michael Fero) - -* zos: fix timeout for condition variable (jBarz) - -* win: CREATE_NO_WINDOW when stdio is not inherited (Nick Logan) - -* build: fix commmon.gypi comment (Ryuichi KAWAMATA) - -* doc: document uv_timer_start() on an active timer (Vladimír Čunát) - -* doc: add note about handle movability (Bartosz Sosnowski) - -* doc: fix syntax error in loop documentation (Bartosz Sosnowski) - -* osx,stream: retry sending handle on EMSGSIZE error (Santiago Gimeno) - -* unix: delay fs req register until after validation (cjihrig) - -* test: add tests for bad inputs (Joyee Cheung) - -* unix,win: ensure req->bufs is freed (cjihrig) - -* test: add additional fs memory management checks (cjihrig) - - -2018.01.20, Version 1.19.1 (Stable), 8202d1751196c2374ad370f7f3779daef89befae - -Changes since version 1.19.0: - -* Revert "unix,tcp: avoid marking server sockets connected" (Ben Noordhuis) - -* Revert "unix,fs: fix for potential partial reads/writes" (Ben Noordhuis) - -* Revert "win: use RemoveDirectoryW() instead of _wmrmdir()" (Ben Noordhuis) - -* cygwin: fix compilation of ifaddrs impl (Brad King) - - -2018.01.18, Version 1.19.0 (Stable), effbb7c9d29090b2e085a40867f8cdfa916a66df - -Changes since version 1.18.0: - -* core: add getter/setter functions for easier ABI compat (Anna Henningsen) - -* unix: make get(set)_process_title MT-safe (Matt Harrison) - -* unix,win: wait for threads to start (Ben Noordhuis) - -* test: add threadpool init/teardown test (Bartosz Sosnowski) - -* win, process: uv_kill improvements (Bartosz Sosnowski) - -* win: set _WIN32_WINNT to 0x0600 (cjihrig) - -* zos: implement uv_fs_event* functions (jBarz) - -* unix,tcp: avoid marking server sockets connected (Jameson Nash) - -* doc: mark Windows 7 as Tier 1 support (Bartosz Sosnowski) - -* win: map 0.0.0.0 and :: addresses to localhost (Bartosz Sosnowski) - -* build: install libuv.pc unconditionally (Ben Noordhuis) - -* test: remove custom timeout for thread test on ppc (Ben Noordhuis) - -* test: allow multicast not permitted status (Jérémy Lal) - -* test: allow net unreachable status in udp test (Ben Noordhuis) - -* unix: use SA_RESTART when setting our sighandler (Brad King) - -* unix,fs: fix for potential partial reads/writes (Ben Wijen) - -* win,build: do not build executable installer for dll (Bert Belder) - -* win: allow directory symlinks to be created in a non-elevated context (Bert - Belder) - -* zos,test: accept SIGKILL for flaky test (jBarz) - -* win: use RemoveDirectoryW() instead of _wmrmdir() (Ben Noordhuis) - -* unix: fix uv_cpu_info() error on FreeBSD (elephantp) - -* zos,test: decrease pings to avoid timeout (jBarz) - - -2017.12.02, Version 1.18.0 (Stable), 1489c98b7fc17f1702821a269eb0c5e730c5c813 - -Changes since version 1.17.0: - -* aix: fix -Wmaybe-uninitialized warning (cjihrig) - -* doc: remove note about SIGWINCH on Windows (Bartosz Sosnowski) - -* Revert "unix,win: wait for threads to start" (Ben Noordhuis) - -* unix,win: add uv_os_getpid() (Bartosz Sosnowski) - -* unix: remove incorrect assertion in uv_shutdown() (Jameson Nash) - -* doc: fix IRC URL in CONTRIBUTING.md (Matt Harrison) - - -2017.11.25, Version 1.17.0 (Stable), 1344d2bb82e195d0eafc0b40ba103f18dfd04cc5 - -Changes since version 1.16.1: - -* unix: avoid malloc() call in uv_spawn() (Ben Noordhuis) - -* doc: clarify the description of uv_loop_alive() (Ed Schouten) - -* win: map UV_FS_O_EXLOCK to a share mode of 0 (Joran Dirk Greef) - -* win: fix build on case-sensitive file systems (Ben Noordhuis) - -* win: fix test runner build with mingw64 (Ben Noordhuis) - -* win: remove unused variable in test/test-fs.c (Ben Noordhuis) - -* zos: add strnlen() implementation (jBarz) - -* unix: keep track of bound sockets sent via spawn (jBarz) - -* unix,win: wait for threads to start (Ben Noordhuis) - -* test: add threadpool init/teardown test (Bartosz Sosnowski) - -* test: avoid malloc() in threadpool test (Ben Noordhuis) - -* test: lower number of tasks in threadpool test (Ben Noordhuis) - -* win: issue memory barrier in uv_thread_join() (Ben Noordhuis) - -* ibmi: add support for new platform (Xu Meng) - -* test: fix test-spawn compilation (Bartosz Sosnowski) - - -2017.11.11, Version 1.16.1 (Stable), 4056fbe46493ef87237e307e0025e551db875e13 - -Changes since version 1.16.0: - -* unix: move net/if.h include (cjihrig) - -* win: fix undeclared NDIS_IF_MAX_STRING_SIZE (Nick Logan) - - -2017.11.07, Version 1.16.0 (Stable), d68779f0ea742918f653b9c20237460271c39aeb - -Changes since version 1.15.0: - -* win: change st_blksize from `2048` to `4096` (Joran Dirk Greef) - -* unix,win: add fs open flags, map O_DIRECT|O_DSYNC (Joran Dirk Greef) - -* win, fs: fix non-symlink reparse points (Wade Brainerd) - -* test: fix -Wstrict-prototypes warnings (Ben Noordhuis) - -* unix, windows: map ENOTTY errno (Ben Noordhuis) - -* unix: fall back to fsync() if F_FULLFSYNC fails (Joran Dirk Greef) - -* unix: do not close invalid kqueue fd after fork (jBarz) - -* zos: reset epoll data after fork (jBarz) - -* zos: skip fork_threadpool_queue_work_simple (jBarz) - -* test: keep platform_output as first test (Bartosz Sosnowski) - -* win: fix non-English dlopen error message (Bartosz Sosnowski) - -* unix,win: add uv_os_getppid() (cjihrig) - -* test: fix const qualification compiler warning (Ben Noordhuis) - -* doc: mark uv_default_loop() as not thread safe (rayrase) - -* win, pipe: null-initialize stream->shutdown_req (Jameson Nash) - -* tty, win: get SetWinEventHook pointer at startup (Bartosz Sosnowski) - -* test: no extra new line in skipped test output (Bartosz Sosnowski) - -* pipe: allow access from other users (Bartosz Sosnowski) - -* unix,win: add uv_if_{indextoname,indextoiid} (Pekka Nikander) - - -2017.10.03, Version 1.15.0 (Stable), 8b69ce1419d2958011d415a636810705c36c2cc2 - -Changes since version 1.14.1: - -* unix: limit uv__has_forked_with_cfrunloop to macOS (Kamil Rytarowski) - -* win: fix buffer size in uv__getpwuid_r() (tux.uudiin) - -* win,tty: improve SIGWINCH support (Bartosz Sosnowski) - -* unix: use fchmod() in uv_fs_copyfile() (cjihrig) - -* unix: support copying empty files (cjihrig) - -* unix: truncate destination in uv_fs_copyfile() (Nick Logan) - -* win,build: keep cwd when setting build environment (darobs) - -* test: add NetBSD support to test-udp-ipv6.c (Kamil Rytarowski) - -* unix: add NetBSD support in core.c (Kamil Rytarowski) - -* linux: increase thread stack size with musl libc (Ben Noordhuis) - -* netbsd: correct uv_exepath() on NetBSD (Kamil Rytarowski) - -* test: clean up semaphore after use (jBarz) - -* win,build: bump vswhere_usability_wrapper to 2.0.0 (Refael Ackermann) - -* win: let UV_PROCESS_WINDOWS_HIDE hide consoles (cjihrig) - -* zos: lock protect global epoll list in epoll_ctl (jBarz) - -* zos: change platform name to match python (jBarz) - -* android: fix getifaddrs() (Zheng, Lei) - -* netbsd: implement uv__tty_is_slave() (Kamil Rytarowski) - -* zos: fix readlink for mounts with system variables (jBarz) - -* test: sort the tests alphabetically (Sakthipriyan Vairamani) - -* windows: fix compilation warnings (Carlo Marcelo Arenas Belón) - -* build: avoid -fstrict-aliasing compile option (jBarz) - -* win: remove unused variables (Carlo Marcelo Arenas Belón) - -* unix: remove unused variables (Sakthipriyan Vairamani) - -* netbsd: disable poll_bad_fdtype on NetBSD (Kamil Rytarowski) - -* netbsd: use uv__cloexec and uv__nonblock (Kamil Rytarowski) - -* test: fix udp_multicast_join6 on NetBSD (Kamil Rytarowski) - -* unix,win: add uv_mutex_init_recursive() (Scott Parker) - -* netbsd: do not exclude IPv6 functionality (Kamil Rytarowski) - -* fsevents: watch files with fsevents on macos 10.7+ (Ben Noordhuis) - -* unix: retry on ENOBUFS in sendmsg(2) (Kamil Rytarowski) - - -2017.09.07, Version 1.14.1 (Stable), b0f9fb2a07a5e638b1580fe9a42a356c3ab35f37 - -Changes since version 1.14.0: - -* fs, win: add support for user symlinks (Bartosz Sosnowski) - -* cygwin: include uv-posix.h header (Joel Winarske) - -* zos: fix semaphore initialization (jBarz) - -* zos: improve loop_count benchmark performance (jBarz) - -* zos, test: flush out the oob data in callback (jBarz) - -* unix,win: check for bad flags in uv_fs_copyfile() (cjihrig) - -* unix: modify argv[0] when process title is set (Matthew Taylor) - -* unix: don't use req->loop in uv__fs_copyfile() (cjihrig) - -* doc: fix a trivial typo (Vladimír Čunát) - -* android: fix uv_cond_timedwait on API level < 21 (Gergely Nagy) - -* win: add uv__once_init() calls (Bartosz Sosnowski) - -* unix,windows: init all requests in fs calls (cjihrig) - -* unix,windows: return UV_EINVAL on NULL fs reqs (cjihrig) - -* windows: add POST macro to fs functions (cjihrig) - -* unix: handle partial sends in uv_fs_copyfile() (A. Hauptmann) - -* Revert "win, test: fix double close in test runner" (Bartosz Sosnowski) - -* win, test: remove surplus CloseHandle (Bartosz Sosnowski) - - -2017.08.17, Version 1.14.0 (Stable), e0d31e9e21870f88277746b6d59cf07b977cdfea - -Changes since version 1.13.1: - -* unix: check for NULL in uv_os_unsetenv for parameter name (André Klitzing) - -* doc: add thread safety warning for process title (Matthew Taylor) - -* unix: always copy process title into local buffer (Matthew Taylor) - -* poll: add support for OOB TCP and GPIO interrupts (CurlyMoo) - -* win,build: fix appveyor properly (Refael Ackermann) - -* win: include filename in dlopen error message (Ben Noordhuis) - -* aix: add netmask, mac address into net interfaces (Gireesh Punathil) - -* unix, windows: map EREMOTEIO errno (Ben Noordhuis) - -* unix: fix wrong MAC of uv_interface_address (XadillaX) - -* win,build: fix building from Windows SDK or VS console (Saúl Ibarra Corretgé) - -* github: fix link to help repo in issue template (Ben Noordhuis) - -* zos: remove nonexistent include from autotools build (Saúl Ibarra Corretgé) - -* misc: remove reference to pthread-fixes.h from LICENSE (Saúl Ibarra Corretgé) - -* docs: fix guide source code example paths (Anticrisis) - -* android: fix compilation with new NDK versions (Saúl Ibarra Corretgé) - -* misc: add android-toolchain to .gitignore (Saúl Ibarra Corretgé) - -* win, fs: support unusual reparse points (Bartosz Sosnowski) - -* android: fix detection of pthread_condattr_setclock (Saúl Ibarra Corretgé) - -* android: remove no longer needed check (Saúl Ibarra Corretgé) - -* doc: update instructions for building on Android (Saúl Ibarra Corretgé) - -* win, process: support semicolons in PATH variable (Bartosz Sosnowski) - -* doc: document uv_async_(init|send) return values (Ben Noordhuis) - -* doc: add Android as a tier 3 supported platform (Saúl Ibarra Corretgé) - -* unix: add missing semicolon (jBarz) - -* win, test: fix double close in test runner (Bartosz Sosnowski) - -* doc: update supported windows version baseline (Ben Noordhuis) - -* test,zos: skip chown root test (jBarz) - -* test,zos: use gid=-1 to test spawn_setgid_fails (jBarz) - -* zos: fix hr timer resolution (jBarz) - -* android: fix blocking recvmsg due to netlink bug (Jacob Segal) - -* zos: read more accurate rss info from RSM (jBarz) - -* win: allow bound/connected socket in uv_tcp_open() (Maciej Szeptuch - (Neverous)) - -* doc: differentiate SmartOS and SunOS support (cjihrig) - -* unix: make uv_poll_stop() remove fd from pollset (Ben Noordhuis) - -* unix, windows: add basic uv_fs_copyfile() (cjihrig) - - -2017.07.07, Version 1.13.1 (Stable), 2bb4b68758f07cd8617838e68c44c125bc567ba6 - -Changes since version 1.13.0: - -* Now working on version 1.13.1 (cjihrig) - -* build: workaround AppVeyor quirk (Refael Ackermann) - - -2017.07.06, Version 1.13.0 (Stable), 8342fcaab815f33b988c1910ea988f28dfe27edb - -Changes since version 1.12.0: - -* Now working on version 1.12.1 (cjihrig) - -* unix: avoid segfault in uv_get_process_title (Michele Caini) - -* build: add a comma to uv.gyp (Gemini Wen) - -* win: restore file pos after positional read/write (Bartosz Sosnowski) - -* unix,stream: return error on closed handle passing (Santiago Gimeno) - -* unix,benchmark: use fd instead of FILE* after fork (jBarz) - -* zos: avoid compiler warnings (jBarz) - -* win,pipe: race condition canceling readfile thread (Jameson Nash) - -* sunos: filter out non-IPv4/IPv6 interfaces (Sebastian Wiedenroth) - -* sunos: fix cmpxchgi and cmpxchgl type error (Sai Ke WANG) - -* unix: reset signal disposition before execve() (Ben Noordhuis) - -* unix: reset signal mask before execve() (Ben Noordhuis) - -* unix: fix POLLIN assertion on server read (jBarz) - -* zos: use stckf builtin for high-res timer (jBarz) - -* win,udp: implements uv_udp_try_send (Barnabas Gema) - -* win,udp: return UV_EINVAL instead of aborting (Romain Caire) - -* freebsd: replace kvm with sysctl (Robert Ayrapetyan) - -* aix: fix un-initialized pointer field in fs handle (Gireesh Punathil) - -* win,build: support building with VS2017 (Refael Ackermann) - -* doc: add instructions for building on Windows (Refael Ackermann) - -* doc: format README (Refael Ackermann) - - -2017.05.31, Version 1.12.0 (Stable), d6ac141ac674657049598c36604f26e031fae917 - -Changes since version 1.11.0: - -* Now working on version 1.11.1 (cjihrig) - -* test: fix tests on OpenBSD (Santiago Gimeno) - -* test: fix -Wformat warning (Santiago Gimeno) - -* win,fs: avoid double freeing uv_fs_event_t.dirw (Vladimir Matveev) - -* unix: remove unused code in `uv__io_start` (Fedor Indutny) - -* signal: add uv_signal_start_oneshot method (Santiago Gimeno) - -* unix: factor out reusable POSIX hrtime impl (Brad King) - -* unix,win: add uv_os_{get,set,unset}env() (cjihrig) - -* win: add uv__convert_utf8_to_utf16() (cjihrig) - -* docs: improve UV_ENOBUFS scenario documentation (cjihrig) - -* unix: return UV_EINVAL for NULL env name (jBarz) - -* unix: filter getifaddrs results consistently (Brad King) - -* unix: factor out getifaddrs result filter (Brad King) - -* unix: factor out reusable BSD ifaddrs impl (Brad King) - -* unix: use union to follow strict aliasing rules (jBarz) - -* unix: simplify async watcher dispatch logic (Ben Noordhuis) - -* samples: update timer callback prototype (Ben Noordhuis) - -* unix: make loops and watchers usable after fork() (Jason Madden) - -* win: free uv__loops once empty (cjihrig) - -* tools: add make_dist_html.py script (Ben Noordhuis) - -* win,sunos: stop handle on uv_fs_event_start() err (cjihrig) - -* unix,windows: refactor request init logic (Ben Noordhuis) - -* win: fix memory leak inside uv__pipe_getname (A. Hauptmann) - -* fsevent: support for files without short name (Bartosz Sosnowski) - -* doc: fix multiple doc typos (Jamie Davis) - -* test,osx: fix flaky kill test (Santiago Gimeno) - -* unix: inline uv_pipe_bind() err_bind goto target (cjihrig) - -* unix,test: deadstore fixes (Rasmus Christian Pedersen) - -* win: fix memory leak inside uv_fs_access() (A. Hauptmann) - -* doc: fix docs/src/fs.rst build warning (Daniel Bevenius) - -* doc: minor grammar fix in Installation section (Daniel Bevenius) - -* doc: suggestions for design page (Daniel Bevenius) - -* doc: libuv does not touch uv_loop_t.data (Ben Noordhuis) - -* github: add ISSUE_TEMPLATE.md (Ben Noordhuis) - -* doc: add link to libuv/help to README (Ben Noordhuis) - -* udp: fix fast path in uv_udp_send() on unix (Fedor Indutny) - -* test: add test for uv_udp_send() fix (Trevor Norris) - -* doc: fix documentation for uv_handle_t.type (Daniel Kahn Gillmor) - -* zos: use proper prototype for epoll_init() (Ben Noordhuis) - -* doc: rename docs to "libuv documentation" (Saúl Ibarra Corretgé) - -* doc: update copyright years (Saúl Ibarra Corretgé) - -* doc: move TOC to a dedicated document (Saúl Ibarra Corretgé) - -* doc: move documentation section up (Saúl Ibarra Corretgé) - -* doc: move "upgrading" to a standalone document (Saúl Ibarra Corretgé) - -* doc: add initial version of the User Guide (Saúl Ibarra Corretgé) - -* doc: removed unused file (Saúl Ibarra Corretgé) - -* doc: update guide/about and mention new maintainership (Saúl Ibarra Corretgé) - -* doc: remove licensing note from guide/about (Saúl Ibarra Corretgé) - -* doc: add warning note to user guide (Saúl Ibarra Corretgé) - -* doc: change license to CC BY 4.0 (Saúl Ibarra Corretgé) - -* doc: remove ubvook reference from README (Saúl Ibarra Corretgé) - -* doc: add code samples from uvbook (unadapted) (Saúl Ibarra Corretgé) - -* doc: update supported linux/glibc baseline (Ben Noordhuis) - -* win: avoid leaking pipe handles to child processes (Jameson Nash) - -* win,test: support stdout output larger than 1kb (Bartosz Sosnowski) - -* win: remove __declspec(inline) from atomic op (Keane) - -* test: fix VC++ compilation warning (Rasmus Christian Pedersen) - -* build: add -Wstrict-prototypes (Jameson Nash) - -* zos: implement uv__io_fork, skip fs event tests (jBarz) - -* unix: do not close udp sockets on bind error (Marc Schlaich) - -* unix: remove FSEventStreamFlushSync() call (cjihrig) - -* build,openbsd: remove kvm-related code (James McCoy) - -* test: fix flaky tcp-write-queue-order (Santiago Gimeno) - -* unix,win: add uv_os_gethostname() (cjihrig) - -* zos: increase timeout for tcp_writealot (jBarz) - -* zos: do not inline OOB data by default (jBarz) - -* test: fix -Wstrict-prototypes compiler warnings (Ben Noordhuis) - -* unix: factor out reusable no-proctitle impl (Brad King) - -* test: factor out fsevents skip explanation (Brad King) - -* test: skip fork fsevent cases when lacking support (Brad King) - -* unix: factor out reusable no-fsevents impl (Brad King) - -* unix: factor out reusable sysinfo memory lookup (Brad King) - -* unix: factor out reusable sysinfo loadavg impl (Brad King) - -* unix: factor out reusable procfs exepath impl (Brad King) - -* unix: add a uv__io_poll impl using POSIX poll(2) (Brad King) - -* cygwin: implement support for cygwin and msys2 (Brad King) - -* cygwin: recognize EOF on named pipe closure (Brad King) - -* cygwin: fix uv_pipe_connect report of ENOTSOCK (Brad King) - -* cygwin: disable non-functional ipc handle send (Brad King) - -* test: skip self-connecting tests on cygwin (Brad King) - -* doc: mark uv_loop_fork() as experimental (cjihrig) - -* doc: add bzoz to maintainers (Bartosz Sosnowski) - -* doc: fix memory leak in tcp-echo-server example (Bernardo Ramos) - -* win: make uv__get_osfhandle() public (Juan Cruz Viotti) - -* doc: use valid pipe name in pipe-echo-server (Bernardo Ramos) - - -2017.02.02, Version 1.11.0 (Stable), 7452ef4e06a4f99ee26b694c65476401534f2725 - -Changes since version 1.10.2: - -* Now working on version 1.10.3 (cjihrig) - -* win: added fcntl.h to uv-win.h (Michele Caini) - -* unix: move function call out of assert (jBarz) - -* fs: cleanup uv__fs_scandir (Santiago Gimeno) - -* fs: fix crash in uv_fs_scandir_next (muflub) - -* win,signal: fix potential deadlock (Bartosz Sosnowski) - -* unix: use async-signal safe functions between fork and exec (jBarz) - -* sunos: fix SUNOS_NO_IFADDRS build (Ben Noordhuis) - -* zos: make platform functional (John Barboza) - -* doc: add repitition qualifier to version regexs (Daniel Bevenius) - -* zos: use gyp OS label "os390" on z/OS (John Barboza) - -* aix: enable uv_get/set_process_title (Howard Hellyer) - -* zos: use built-in proctitle implementation (John Barboza) - -* Revert "darwin: use clock_gettime in macOS 10.12" (Chris Araman) - -* win,test: don't write uninitialized buffer to tty (Bert Belder) - -* win: define ERROR_ELEVATION_REQUIRED for MinGW (Richard Lau) - -* aix: re-enable fs watch facility (Gireesh Punathil) - - -2017.01.10, Version 1.10.2 (Stable), cb9f579a454b8db592030ffa274ae58df78dbe20 - -Changes since version 1.10.1: - -* Now working on version 1.10.2 (cjihrig) - -* darwin: fix fsync and fdatasync (Joran Dirk Greef) - -* Revert "Revert "win,tty: add support for ANSI codes in win10 v1511"" - (Santiago Gimeno) - -* win,tty: fix MultiByteToWideChar output buffer (Santiago Gimeno) - -* win: remove dead code related to BACKUP_SEMANTICS (Sam Roberts) - -* win: fix comment in quote_cmd_arg (Eric Sciple) - -* darwin: use clock_gettime in macOS 10.12 (Saúl Ibarra Corretgé) - -* win, tty: fix crash on restarting with pending data (Nicholas Vavilov) - -* fs: fix uv__to_stat on BSD platforms (Santiago Gimeno) - -* win: map ERROR_ELEVATION_REQUIRED to UV_EACCES (Richard Lau) - -* win: fix free() on bad input in uv_getaddrinfo() (Ben Noordhuis) - - -2016.11.17, Version 1.10.1 (Stable), 2e49e332bdede6db7cf17fa784a902e8386d5d86 - -Changes since version 1.10.0: - -* Now working on version 1.10.1 (cjihrig) - -* win: fix anonymous union syntax (Brad King) - -* unix: use uv__is_closing everywhere (Santiago Gimeno) - -* win: add missing break statement (cjihrig) - -* doc: fix wrong man page link for uv_fs_lstat() (Michele Caini) - -* win, tty: handle empty buffer in uv_tty_write_bufs (Hitesh Kanwathirtha) - -* doc: add cjihrig alternative GPG ID (cjihrig) - -* Revert "win,tty: add support for ANSI codes in win10 v1511" (Ben Noordhuis) - - -2016.10.25, Version 1.10.0 (Stable), c8a373c729b4c9392e0e14fc53cd6b67b3051ab9 - -Changes since version 1.9.1: - -* Now working on version 1.9.2 (Saúl Ibarra Corretgé) - -* doc: add cjihrig GPG ID (cjihrig) - -* win,build: fix compilation on old Windows / MSVC (Saúl Ibarra Corretgé) - -* darwin: fix setting fd to non-blocking in select(() trick (Saúl Ibarra - Corretgé) - -* unix: allow nesting of kqueue fds in uv_poll_start (Ben Noordhuis) - -* doc: fix generation the first time livehtml runs (Saúl Ibarra Corretgé) - -* test: fix test_close_accept flakiness on Centos5 (Santiago Gimeno) - -* license: libuv is no longer a Node project (Saúl Ibarra Corretgé) - -* license: add license text we've been using for a while (Saúl Ibarra Corretgé) - -* doc: add licensing information to README (Saúl Ibarra Corretgé) - -* win,pipe: fixed formatting, DWORD is long unsigned (Miodrag Milanovic) - -* win: support sub-second precision in uv_fs_futimes() (Jason Ginchereau) - -* unix: ignore EINPROGRESS in uv__close (Saúl Ibarra Corretgé) - -* doc: add Imran Iqbal (iWuzHere) to maintainers (Imran Iqbal) - -* doc: update docs with AIX related information (Imran Iqbal) - -* test: silence build warnings (Kári Tristan Helgason) - -* doc: add iWuzHere GPG ID (Imran Iqbal) - -* linux-core: fix uv_get_total/free_memory on uclibc (Nicolas Cavallari) - -* build: fix build on DragonFly (Michael Neumann) - -* unix: correctly detect named pipes on DragonFly (Michael Neumann) - -* test: make tap output the default (Ben Noordhuis) - -* test: don't dump output for skipped tests (Ben Noordhuis) - -* test: improve formatting of diagnostic messages (Ben Noordhuis) - -* test: remove unused RETURN_TODO macro (Ben Noordhuis) - -* doc: fix stream typos (Pierre-Marie de Rodat) - -* doc: update coding style link (Imran Iqbal) - -* unix,fs: use uint64_t instead of unsigned long (Imran Iqbal) - -* build: check for warnings for -fvisibility=hidden (Imran Iqbal) - -* unix: remove unneeded TODO note (Saúl Ibarra Corretgé) - -* test: skip tty_pty test if pty is not available (Luca Bruno) - -* sunos: set phys_addr of interface_address using ARP (Brian Maher) - -* doc: clarify callbacks won't be called in error case (Saúl Ibarra Corretgé) - -* unix: don't convert stat buffer when syscall fails (Ben Noordhuis) - -* win: compare entire filename in watch events (cjihrig) - -* doc: add a note on safe reuse of uv_write_t (neevek) - -* linux: fix potential event loop stall (Ben Noordhuis) - -* unix,win: make uv_get_process_title() stricter (cjihrig) - -* test: close server before initiating new connection (John Barboza) - -* test: account for multiple handles in one ipc read (John Barboza) - -* unix: fix errno and retval conflict (liuxiaobo) - -* doc: add missing entry in uv_fs_type enum (Michele Caini) - -* unix: preserve loop->data across loop init/done (Ben Noordhuis) - -* win: return UV_EINVAL on bad uv_tty_mode mode arg (Ben Noordhuis) - -* win: simplify memory copy logic in fs.c (Ben Noordhuis) - -* win: fix compilation on mingw (Bartosz Sosnowski) - -* win: ensure 32-bit printf precision (Matej Knopp) - -* darwin: handle EINTR in /dev/tty workaround (Ben Noordhuis) - -* test: fix OOB buffer access (Saúl Ibarra Corretgé) - -* test: don't close CRT fd handed off to uv_pipe_t (Saúl Ibarra Corretgé) - -* test: fix android build error. (sunjin.lee) - -* win: evaluate timers when system wakes up (Bartosz Sosnowski) - -* doc: add supported platforms description (Saúl Ibarra Corretgé) - -* win: fix lstat reparse point without link data (Jason Ginchereau) - -* unix,win: make on_alloc_cb failures more resilient (Saúl Ibarra Corretgé) - -* zos: add support for new platform (John Barboza) - -* test: make tcp_close_while_connecting more resilient (Saúl Ibarra Corretgé) - -* build: use '${prefix}' for pkg-config 'exec_prefix' (Matt Clarkson) - -* build: GNU/kFreeBSD support (Jeffrey Clark) - -* zos: use PLO instruction for atomic operations (John Barboza) - -* zos: use pthread helper functions (John Barboza) - -* zos: implement uv__fs_futime (John Barboza) - -* unix: expand range of values for usleep (John Barboza) - -* zos: track unbound handles and bind before listen (John Barboza) - -* test: improve tap output on test failures (Santiago Gimeno) - -* test: refactor fs_event_close_in_callback (Julien Gilli) - -* zos: implement uv__io_check_fd (John Barboza) - -* unix: unneccessary use const qualifier in container_of (John Barboza) - -* win,tty: add support for ANSI codes in win10 v1511 (Imran Iqbal) - -* doc: add santigimeno to maintainers (Santiago Gimeno) - -* win: fix typo in type name (Saúl Ibarra Corretgé) - -* unix: always define pthread barrier fallback pad (Saúl Ibarra Corretgé) - -* test: use RETURN_SKIP in spawn_setuid_setgid test (Santiago Gimeno) - -* win: add disk read/write count to uv_getrusage (Imran Iqbal) - -* doc: document uv_fs_realpath caveats (Saúl Ibarra Corretgé) - -* test: improve spawn_setuid_setgid test (Santiago Gimeno) - -* test: fix building pty test on Android (Saúl Ibarra Corretgé) - -* doc: uv_buf_t members are not readonly (Saúl Ibarra Corretgé) - -* doc: improve documentation on uv_alloc_cb (Saúl Ibarra Corretgé) - -* fs: fix uv_fs_fstat on platforms using musl libc (Santiago Gimeno) - -* doc: update supported fields for uv_rusage_t (Imran Iqbal) - -* test: fix test-tcp-writealot flakiness on arm (Santiago Gimeno) - -* test: fix fs_event_watch_dir flakiness on arm (Santiago Gimeno) - -* unix: don't use alphasort in uv_fs_scandir() (Ben Noordhuis) - -* doc: fix confusing doc of uv_tcp_nodelay (Bart Robinson) - -* build,osx: fix warnings on tests compilation with gyp (Santiago Gimeno) - -* doc: add ABI tracker link to README (Saúl Ibarra Corretgé) - -* win,tty: fix uv_tty_set_mode race conditions (Bartosz Sosnowski) - -* test: fix fs_fstat on Android (Vit Gottwald) - -* win, test: fix fs_event_watch_dir_recursive (Bartosz Sosnowski) - -* doc: add description of uv_handle_type (Vit Gottwald) - -* build: use -pthreads for tests with autotools (Julien Gilli) - -* win: fix leaky fs request buffer (Jason Ginchereau) - -* doc: note buffer lifetime requirements in uv_write (Vladimír Čunát) - -* doc: add reference to uv_update_time on uv_timer_start (Alex Hultman) - -* win: fix winapi function pointer typedef syntax (Brad King) - -* test: fix tcp_close_while_connecting CI failures (Ben Noordhuis) - -* test: make threadpool_cancel_single deterministic (Ben Noordhuis) - -* test: make threadpool saturation reliable (Ben Noordhuis) - -* unix: don't malloc in uv_thread_create() (Ben Noordhuis) - -* unix: don't include CoreServices globally on macOS (Brad King) - -* unix,win: add uv_translate_sys_error() public API (Philippe Laferriere) - -* win: remove unused static variables (Ben Noordhuis) - -* win: silence -Wmaybe-uninitialized warning (Ben Noordhuis) - -* signal: replace pthread_once with uv_once (Santiago Gimeno) - -* test: fix sign-compare warning (Will Speak) - -* common: fix unused variable warning (Brad King) - - -2016.05.17, Version 1.9.1 (Stable), d989902ac658b4323a4f4020446e6f4dc449e25c - -Changes since version 1.9.0: - -* test: handle root home directories (cjihrig) - -* unix: implement uv__fs_futime for AIX 7.1 (Imran Iqbal) - -* test: skip early bind tests if no IPv6 is supported (Saúl Ibarra Corretgé) - -* win: fix var declaration to be C89 compliant (Michael Fero) - -* unix: use POLL{IN,OUT,etc} constants directly (Ben Noordhuis) - -* doc: add ability to live reload and regenerate HTML (Saúl Ibarra Corretgé) - -* Revert "win,build: remove unused build defines" (cjihrig) - -* linux: fix fd leaks in uv_cpu_info() error paths (Ben Noordhuis) - -* linux: don't abort on malformed /proc/stat (Ben Noordhuis) - -* linux: fix long lines in linux-core.c (Ben Noordhuis) - -* test: fix fs_event_watch_file_current_dir for AIX (Imran Iqbal) - -* unix,fs: code cleanup of uv_fs_event_start for AIX (Imran Iqbal) - -* unix: delay signal handling until after normal i/o (Ben Noordhuis) - -* android: pthread_sigmask() does not set errno (Oguz Bastemur) - -* win: work around sharepoint scandir bug (Ben Noordhuis) - -* unix: guard against clobbering errno in uv__free() (Ben Noordhuis) - -* unix: remove unneeded SAVE_ERRNO wrappers (Ben Noordhuis) - -* test: skip fs_event_close_in_callback on AIX (Imran Iqbal) - -* win: add maxrss, pagefaults to uv_getrusage() (Robert Jefe Lindstaedt) - -* test: set a big send buffer size for tcp_write_queue_order (Andrius Bentkus) - -* unix: error on realpath if PATH_MAX is undefined (Myles Borins) - -* unix: fix bug in barrier fallback implementation (Kári Tristan Helgason) - -* build: bump android ndk version (Kári Tristan Helgason) - -* build: always compile with -fvisibility=hidden (Ben Noordhuis) - -* test: fix -Wformat warnings in platform test (Ben Noordhuis) - -* win: clarify fsevents handling code (Saúl Ibarra Corretgé) - -* test: fix POLLHDRUP related failures for AIX (Imran Iqbal) - -* build, mingw: set LIBS in configure.ac (Tony Theodore) - -* win: improve uv__convert_utf16_to_utf8 (Saúl Ibarra Corretgé) - -* win: simplified UTF16 -> UTF8 conversions (Saúl Ibarra Corretgé) - -* win: remove unneeded condition (Saúl Ibarra Corretgé) - -* darwin: work around condition variable kernel bug (Ben Noordhuis) - -* darwin: make thread stack multiple of page size (Ben Noordhuis) - -* build,win: rename platform to msbuild_platform (João Reis) - -* gitignore: ignore VS temporary database files (João Reis) - -* test: skip emfile on AIX (Imran Iqbal) - -* unix: use system allocator for scandir() (cjihrig) - -* common: release uv_fs_scandir() array (cjihrig) - -* win: call uv__fs_scandir_cleanup() (cjihrig) - -* win,tty: fix read stop in line mode (João Reis) - -* win,tty: don't duplicate handle for line reads (João Reis) - -* win,tty: restore cursor after canceling line read (Alexis Campailla) - - -2016.04.08, Version 1.9.0 (Stable), 229b3a4cc150aebd6561e6bd43076eafa7a03756 - -Changes since version 1.8.0: - -* win: wait for full timeout duration (João Reis) - -* unix: fix support for uClibc-ng (Martin Bark) - -* doc: indicate where new test files need to be added (Dave) - -* test,unix: fix logic error in test runner (Ben Noordhuis) - -* fs: don't nullify req->bufs on EINTR (Dave) - -* osx: set the default thread stack size to RLIMIT_STACK (Saúl Ibarra Corretgé) - -* build: invoke libtoolize with --copy (Ben Noordhuis) - -* test: fixup eintr_handling (Saúl Ibarra Corretgé) - -* osx: avoid compilation warning with Clang (Saúl Ibarra Corretgé) - -* test,win: fix compilation with shared lib (Alexis Murzeau) - -* test: fix race condition in pipe-close-stdout (Imran Iqbal) - -* unix,win: add uv_os_tmpdir() (cjihrig) - -* ios: fix undefined PTHREAD_STACK_MIN (Didiet) - -* test: fix threadpool_multiple_event_loops for AIX (Imran Iqbal) - -* unix: report errors for unpollable fds (Ben Noordhuis) - -* win: fix watching root files (Nicholas Vavilov) - -* build,win: print the Visual Studio version in use (Saúl Ibarra Corretgé) - -* build,win: remove unneeded condition from GYP file (Saúl Ibarra Corretgé) - -* test,win: fix compilation warning (Saúl Ibarra Corretgé) - -* test: use uv_loop_close and assert its result (Nan Xiang) - -* build: map 'AMD64' host arch to 'x64' (Ben Noordhuis) - -* osx: protected use of potentially undefined macro (Samuel Lorétan) - -* linux: fix compilation with musl (Saúl Ibarra Corretgé) - -* doc: describe how to make release builds on Unix (Saúl Ibarra Corretgé) - -* doc: add missing link in README (Saúl Ibarra Corretgé) - -* build: python 2.x/3.x consistent print usage (Rasmus Christian Pedersen) - -* test: assume no IPv6 if interfaces cannot be listed (Nan Xiang) - -* darwin: replace F_FULLFSYNC with fdatasync syscall (Saúl Ibarra Corretgé) - -* doc: add missing write callback to example (Nándor István Krácser) - -* build: compile with -D_THREAD_SAFE on AIX (Imran Iqbal) - -* test: fix threadpool_multiple_event_loops on PPC (Imran Iqbal) - -* test: reduce timeout in tcp_close_while_connecting (Imran Iqbal) - -* unix, win: consistently null-terminate buffers (Saúl Ibarra Corretgé) - -* unix, win: count null byte on UV_ENOBUFS (Saúl Ibarra Corretgé) - -* test: fix deadlocks in uv_cond_wait (Katsutoshi Horie) - -* linux: fix cpu count (Lukasz Jagiello) - -* unix: fix uv__handle_type for AIX (Imran Iqbal) - -* linux: call fclose(), fix fdopen() memory leak (Ben Noordhuis) - -* win: remove unneeded condition (Saúl Ibarra Corretgé) - -* unix: fix compile error in Android using bionic (Robert Chiras) - -* linux: add braces to multi-statement if (Kári Tristan Helgason) - -* doc: add @cjihrig as a maintainer (Saúl Ibarra Corretgé) - -* unix: add fork-safe open file function (Kári Tristan Helgason) - -* linux: replace calls to fopen with uv__open_file (Kári Tristan Helgason) - -* linux: remove redundant call to rewind() (Krishnaraj Bhat) - -* win: remove duplicated code when processing fsevents (Saúl Ibarra Corretgé) - -* test: fix poll_bad_fdtype for AIX (Imran Iqbal) - -* linux: fix error checking in uv__open_file (Saúl Ibarra Corretgé) - -* poll: add UV_DISCONNECT event (Santiago Gimeno) - -* fs: realpath: fix string size before converting (Yuval Brik) - -* win: use native APIs for UTF conversions (cjihrig) - -* doc: clarify uv_loop_close() (Ben Noordhuis) - -* unix: retry ioctl(TIOCGWINSZ) on EINTR (Ben Noordhuis) - -* win,build: remove unused build defines (Saúl Ibarra Corretgé) - -* win: fix buffer overflow in fs events (Joran Dirk Greef) - -* win: fix uv_relative_path and remove dead branch (Joran Dirk Greef) - -* unix: use open(2) with O_CLOEXEC on OS X (Kári Tristan Helgason) - -* test: add missing copyright header (cjihrig) - -* aix: fix 'POLLRDHUP undeclared' build error (Ben Noordhuis) - -* unix,win: add uv_get_passwd() (cjihrig) - -* process: fix uv_spawn edge-case (Santiago Gimeno) - -* test: use %ld for printing uid/gid (Ben Noordhuis) - -* aix: fix ahafs implementation (Imran Iqbal) - -* aix: do not store absolute path to ahafs (Imran Iqbal) - -* process: close process pipes safely (Santiago Gimeno) - -* unix: open ttyname instead of /dev/tty (Enno Boland) - -* unix: remove outdated comment (Kári Tristan Helgason) - - -2015.12.15, Version 1.8.0 (Stable), 5467299450ecf61635657557b6e01aaaf6c3fdf4 - -Changes since version 1.7.5: - -* unix: fix memory leak in uv_interface_addresses (Jianghua Yang) - -* unix: make uv_guess_handle work properly for AIX (Gireesh Punathil) - -* fs: undo uv__req_init when uv__malloc failed (Jianghua Yang) - -* build: remove unused 'component' GYP option (Saúl Ibarra Corretgé) - -* include: remove duplicate extern declaration (Jianghua Yang) - -* win: use the MSVC provided snprintf where possible (Jason Williams) - -* win, test: fix compilation warning (Saúl Ibarra Corretgé) - -* win: fix compilation with VS < 2012 (Ryan Johnston) - -* stream: support empty uv_try_write on unix (Fedor Indutny) - -* unix: fix request handle leak in uv__udp_send (Jianghua Yang) - -* src: replace QUEUE_SPLIT with QUEUE_MOVE (Ben Noordhuis) - -* unix: use QUEUE_MOVE when iterating over lists (Ben Noordhuis) - -* unix: squelch harmless valgrind warning (Ben Noordhuis) - -* test: don't abort on setrlimit() failure (Ben Noordhuis) - -* unix: only undo fs req registration in async mode (Ben Noordhuis) - -* unix: fix uv__getiovmax return value (HungMingWu) - -* unix: make work with Solaris Studio. (Adam Stylinski) - -* test: fix fs_event_watch_file_currentdir flakiness (Santiago Gimeno) - -* unix: skip prohibited syscalls on tvOS and watchOS (Nathan Corvino) - -* test: use FQDN in getaddrinfo_fail test (Wink Saville) - -* docs: clarify documentation of uv_tcp_init_ex (Andrius Bentkus) - -* win: fix comment (Miodrag Milanovic) - -* doc: fix typo in README (Angel Leon) - -* darwin: abort() if (un)locking fs mutex fails (Ben Noordhuis) - -* pipe: enable inprocess uv_write2 on Windows (Louis DeJardin) - -* win: properly return UV_EBADF when _close() fails (Nicholas Vavilov) - -* test: skip process_title for AIX (Imran Iqbal) - -* misc: expose handle print APIs (Petka Antonov) - -* include: add stdio.h to uv.h (Saúl Ibarra Corretgé) - -* misc: remove unnecessary null pointer checks (Ian Kronquist) - -* test,freebsd: skip udp_dual_stack if not supported (Santiago Gimeno) - -* linux: don't retry dup2/dup3 on EINTR (Ben Noordhuis) - -* unix: don't retry dup2/dup3 on EINTR (Ben Noordhuis) - -* test: fix -Wtautological-pointer-compare warnings (Saúl Ibarra Corretgé) - -* win: map ERROR_BAD_PATHNAME to UV_ENOENT (Tony Kelman) - -* test: fix test/test-tty.c for AIX (Imran Iqbal) - -* android: support api level less than 21 (kkdaemon) - -* fsevents: fix race on simultaneous init+close (Fedor Indutny) - -* linux,fs: fix p{read,write}v with a 64bit offset (Saúl Ibarra Corretgé) - -* fs: add uv_fs_realpath() (Yuval Brik) - -* win: fix path for removed and renamed fs events (Joran Dirk Greef) - -* win: do not read more from stream than available (Jeremy Whitlock) - -* test: test that uv_close() doesn't corrupt QUEUE (Andrey Mazo) - -* unix: fix uv_fs_event_stop() from fs_event_cb (Andrey Mazo) - -* test: fix self-deadlocks in thread_rwlock_trylock (Ben Noordhuis) - -* src: remove non ascii character (sztomi) - -* test: fix test udp_multicast_join6 for AIX (Imran Iqbal) - - -2015.09.23, Version 1.7.5 (Stable), a8c1136de2cabf25b143021488cbaab05834daa8 - -Changes since version 1.7.4: - -* unix: Support atomic compare & swap xlC on AIX (nmushell) - -* unix: Fix including uv-aix.h on AIX (nmushell) - -* unix: consolidate rwlock tryrdlock trywrlock errors (Saúl Ibarra Corretgé) - -* unix, win: consolidate mutex trylock errors (Saúl Ibarra Corretgé) - -* darwin: fix memory leak in uv_cpu_info (Jianghua Yang) - -* test: add tests for the uv_rwlock implementation (Bert Belder) - -* win: redo/fix the uv_rwlock APIs (Bert Belder) - -* win: don't fetch function pointers to SRWLock APIs (Bert Belder) - - -2015.09.12, Version 1.7.4 (Stable), a7ad4f52189d89cfcba35f78bfc5ff3b1f4105c4 - -Changes since version 1.7.3: - -* doc: uv_read_start and uv_read_cb clarifications (Ben Trask) - -* freebsd: obtain true uptime through clock_gettime() (Jianghua Yang) - -* win, tty: do not convert \r to \r\n (Colin Snover) - -* build,gyp: add DragonFly to the list of OSes (Michael Neumann) - -* fs: fix bug in sendfile for DragonFly (Michael Neumann) - -* doc: add uv_dlsym() return type (Brian White) - -* tests: fix fs tests run w/o full getdents support (Jeremy Whitlock) - -* doc: fix typo (Devchandra Meetei Leishangthem) - -* doc: fix uv-unix.h location (Sakthipriyan Vairamani) - -* unix: fix error check when closing process pipe fd (Ben Noordhuis) - -* test,freebsd: fix ipc_listen_xx_write tests (Santiago Gimeno) - -* win: fix unsavory rwlock fallback implementation (Bert Belder) - -* doc: clarify repeat timer behavior (Eli Skeggs) - - -2015.08.28, Version 1.7.3 (Stable), 93877b11c8b86e0a6befcda83a54555c1e36e4f0 - -Changes since version 1.7.2: - -* threadpool: fix thread starvation bug (Ben Noordhuis) - - -2015.08.25, Version 1.7.2 (Stable), 4d13a013fcfa72311f0102751fdc7951873f466c - -Changes since version 1.7.1: - -* unix, win: make uv_loop_init return on error (Willem Thiart) - -* win: reset pipe handle for pipe servers (Saúl Ibarra Corretgé) - -* win: fix replacing pipe handle for pipe servers (Saúl Ibarra Corretgé) - -* win: fix setting pipe pending instances after bind (Saúl Ibarra Corretgé) - - -2015.08.20, Version 1.7.1 (Stable), 44f4b6bd82d8ae4583ccc4768a83af778ef69f85 - -Changes since version 1.7.0: - -* doc: document the procedure for verifying releases (Saúl Ibarra Corretgé) - -* doc: add note about Windows binaries to the README (Saúl Ibarra Corretgé) - -* doc: use long GPG IDs in MAINTAINERS.md (Saúl Ibarra Corretgé) - -* Revert "stream: squelch ECONNRESET error if already closed" (Saúl Ibarra - Corretgé) - -* doc: clarify uv_read_stop() is idempotent (Corbin Simpson) - -* unix: OpenBSD's setsockopt needs an unsigned char for multicast (Zachary - Hamm) - -* test: Fix two memory leaks (Karl Skomski) - -* unix,win: return EINVAL on nullptr args in uv_fs_{read,write} (Karl Skomski) - -* win: set accepted TCP sockets as non-inheritable (Saúl Ibarra Corretgé) - -* unix: remove superfluous parentheses in fs macros (Ben Noordhuis) - -* unix: don't copy arguments for sync fs requests (Ben Noordhuis) - -* test: plug small memory leak in unix test runner (Ben Noordhuis) - -* unix,windows: allow NULL loop for sync fs requests (Ben Noordhuis) - -* unix,windows: don't assert on unknown error code (Ben Noordhuis) - -* stream: retry write on EPROTOTYPE on OSX (Brian White) - -* common: fix use of snprintf on Windows (Saúl Ibarra Corretgé) - -* tests: refactored fs watch_dir tests for stability (Jeremy Whitlock) - - -2015.08.06, Version 1.7.0 (Stable), 415a865d6365ba58d02b92b89d46ba5d7744ec8b - -Changes since version 1.6.1: - -* win,stream: add slot to remember CRT fd (Bert Belder) - -* win,pipe: properly close when created from CRT fd (Bert Belder) - -* win,pipe: don't close fd 0-2 (Bert Belder) - -* win,tty: convert fd -> handle safely (Bert Belder) - -* win,tty: properly close when created from CRT fd (Bert Belder) - -* win,tty: don't close fd 0-2 (Bert Belder) - -* win,fs: don't close fd 0-2 (Bert Belder) - -* win: include "malloc.h" (Cheng Zhao) - -* windows: MSVC 2015 has C99 inline (Jason Williams) - -* dragonflybsd: fixes for nonblocking and cloexec (Michael Neumann) - -* dragonflybsd: use sendfile(2) for uv_fs_sendfile (Michael Neumann) - -* dragonflybsd: fix uv_exepath (Michael Neumann) - -* win,fs: Fixes align(8) directive on mingw (Stefano Cristiano) - -* unix, win: prevent replacing fd in uv_{udp,tcp,pipe}_t (Saúl Ibarra Corretgé) - -* win: move logic to set socket non-inheritable to uv_tcp_set_socket (Saúl - Ibarra Corretgé) - -* unix, win: add ability to create tcp/udp sockets early (Saúl Ibarra Corretgé) - -* test: retry select() on EINTR, honor milliseconds (Ben Noordhuis) - -* unix: consolidate tcp and udp bind error (Saúl Ibarra Corretgé) - -* test: conditionally skip udp_ipv6_multicast_join6 (heshamsafi) - -* core: add UV_VERSION_HEX macro (Saúl Ibarra Corretgé) - -* doc: add section with version-checking macros and functions (Saúl Ibarra - Corretgé) - -* tty: cleanup handle if uv_tty_init fails (Saúl Ibarra Corretgé) - -* darwin: save a fd when FSEvents is used (Saúl Ibarra Corretgé) - -* win: fix returning thread id in uv_thread_self (Saúl Ibarra Corretgé) - -* common: use offsetof for QUEUE_DATA (Saúl Ibarra Corretgé) - -* win: remove UV_HANDLE_CONNECTED (A. Hauptmann) - -* docs: add Windows specific note for uv_fs_open (Saúl Ibarra Corretgé) - -* doc: add note about uv_fs_scandir (Saúl Ibarra Corretgé) - -* test,unix: reduce stack size of watchdog threads (Ben Noordhuis) - -* win: add support for recursive file watching (Saúl Ibarra Corretgé) - -* win,tty: support consoles with non-default colors (John McNamee) - -* doc: add missing variable name (Yosuke Furukawa) - -* stream: squelch ECONNRESET error if already closed (Santiago Gimeno) - -* build: remove ancient condition from common.gypi (Saúl Ibarra Corretgé) - -* tests: skip some tests when network is unreachable (Luca Bruno) - -* build: proper support for android cross compilation (guworks) - -* android: add missing include to pthread-fixes.c (RossBencina) - -* test: fix compilation warning (Saúl Ibarra Corretgé) - -* doc: add a note about uv_dirent_t.type (Saúl Ibarra Corretgé) - -* win,test: fix shared library build (Saúl Ibarra Corretgé) - -* test: fix compilation warning (Santiago Gimeno) - -* build: add experimental Windows installer (Roger A. Light) - -* threadpool: send signal only when queue is empty (chenttuuvv) - -* aix: fix uv_exepath with relative paths (Richard Lau) - -* build: fix version syntax in AppVeyor file (Saúl Ibarra Corretgé) - -* unix: allow nbufs > IOV_MAX in uv_fs_{read,write} (ronkorving) - - -2015.06.06, Version 1.6.1 (Stable), 30c8be07bb78a66fdee5141626bf53a49a17094a - -Changes since version 1.6.0: - -* unix: handle invalid _SC_GETPW_R_SIZE_MAX values (cjihrig) - - -2015.06.04, Version 1.6.0 (Stable), adfccad76456061dfcf79b8df8e7dbfee51791d7 - -Changes since version 1.5.0: - -* aix: fix setsockopt for multicast options (Michael) - -* unix: don't block for io if any io handle is primed (Saúl Ibarra Corretgé) - -* windows: MSVC 2015 has snprintf() (Rui Abreu Ferreira) - -* windows: Add VS2015 support to vcbuild.bat (Jason Williams) - -* doc: fix typo in tcp.rst (Igor Soarez) - -* linux: work around epoll bug in kernels < 2.6.37 (Ben Noordhuis) - -* unix,win: add uv_os_homedir() (cjihrig) - -* stream: fix `select()` race condition (Fedor Indutny) - -* unix: prevent infinite loop in uv__run_pending (Saúl Ibarra Corretgé) - -* unix: make sure UDP send callbacks are asynchronous (Saúl Ibarra Corretgé) - -* test: fix `platform_output` netmask printing. (Andrew Paprocki) - -* aix: add ahafs autoconf detection and README notes (Andrew Paprocki) - -* core: add ability to customize memory allocator (Saúl Ibarra Corretgé) - - -2015.05.07, Version 1.5.0 (Stable), 4e77f74c7b95b639b3397095db1bc5bcc016c203 - -Changes since version 1.4.2: - -* doc: clarify that the thread pool primites are not thread safe (Andrius - Bentkus) - -* aix: always deregister closing fds from epoll (Michael) - -* unix: fix glibc-2.20+ macro incompatibility (Massimiliano Torromeo) - -* doc: add Sphinx plugin for generating links to man pages (Saúl Ibarra - Corretgé) - -* doc: link system and library calls to man pages (Saúl Ibarra Corretgé) - -* doc: document uv_getnameinfo_t.{host|service} (Saúl Ibarra Corretgé) - -* build: update the location of gyp (Stephen von Takach) - -* win: name all anonymous structs and unions (TomCrypto) - -* linux: work around epoll bug in kernels 3.10-3.19 (Ben Noordhuis) - -* darwin: fix size calculation in select() fallback (Ole André Vadla Ravnås) - -* solaris: fix setsockopt for multicast options (Julien Gilli) - -* test: fix race condition in multithreaded test (Ben Noordhuis) - -* doc: fix long lines in tty.rst (Ben Noordhuis) - -* test: use UV_TTY_MODE_* values in tty test (Ben Noordhuis) - -* unix: don't clobber errno in uv_tty_reset_mode() (Ben Noordhuis) - -* unix: reject non-tty fds in uv_tty_init() (Ben Noordhuis) - -* win: fix pipe blocking writes (Alexis Campailla) - -* build: fix cross-compiling for iOS (Steven Kabbes) - -* win: remove unnecessary malloc.h - -* include: use `extern "c++"` for defining C++ code (Kazuho Oku) - -* unix: reap child on execvp() failure (Ryan Phillips) - -* windows: fix handle leak on EMFILE (Brian Green) - -* test: fix tty_file, close handle if initialized (Saúl Ibarra Corretgé) - -* doc: clarify what uv_*_open accepts (Saúl Ibarra Corretgé) - -* doc: clarify that we don't maintain external doc resources (Saúl Ibarra - Corretgé) - -* build: add documentation for ninja support (Devchandra Meetei Leishangthem) - -* doc: document uv_buf_t members (Corey Farrell) - -* linux: fix epoll_pwait() fallback on arm64 (Ben Noordhuis) - -* android: fix compilation warning (Saúl Ibarra Corretgé) - -* unix: don't close the fds we just setup (Sam Roberts) - -* test: spawn child replacing std{out,err} to stderr (Saúl Ibarra Corretgé) - -* unix: fix swapping fds order in uv_spawn (Saúl Ibarra Corretgé) - -* unix: fix potential bug if dup2 fails in uv_spawn (Saúl Ibarra Corretgé) - -* test: remove LOG and LOGF variadic macros (Saúl Ibarra Corretgé) - -* win: fix uv_fs_access on directories (Saúl Ibarra Corretgé) - -* win: fix of double free in uv_uptime (Per Nilsson) - -* unix: open "/dev/null" instead of "/" for emfile_fd (Alan Rogers) - -* docs: add some missing words (Daryl Haresign) - -* unix: clean up uv_fs_open() O_CLOEXEC logic (Ben Noordhuis) - -* build: set SONAME for shared library in uv.gyp (Rui Abreu Ferreira) - -* windows: define snprintf replacement as inline instead of static (Rui Abreu - Ferreira) - -* win: fix unlink of readonly files (João Reis) - -* doc: fix uv_run(UV_RUN_DEFAULT) description (Ben Noordhuis) - -* linux: intercept syscall when running under memory sanitizer (Keno Fischer) - -* aix: fix uv_interface_addresses return value (farblue68) - -* windows: defer reporting TCP write failure until next tick (Saúl Ibarra - Corretgé) - -* test: add test for deferred TCP write failure (Saúl Ibarra Corretgé) - - -2015.02.27, Version 1.4.2 (Stable), 1a7391348a11d5450c0f69c828d5302e2cb842eb - -Changes since version 1.4.1: - -* stream: ignore EINVAL for SO_OOBINLINE on OS X (Fedor Indutny) - - -2015.02.25, Version 1.4.1 (Stable), e8e3fc5789cc0f02937879d141cca0411274093c - -Changes since version 1.4.0: - -* win: don't use inline keyword in thread.c (Ben Noordhuis) - -* windows: fix setting dirent types on uv_fs_scandir_next (Saúl Ibarra - Corretgé) - -* unix,windows: make uv_thread_create() return errno (Ben Noordhuis) - -* tty: fix build for SmartOS (Julien Gilli) - -* unix: fix for uv_async data race (Michael Penick) - -* unix, windows: map EHOSTDOWN errno (Ben Noordhuis) - -* stream: use SO_OOBINLINE on OS X (Fedor Indutny) - - -2015.02.10, Version 1.4.0 (Stable), 19fb8a90648f3763240db004b77ab984264409be - -Changes since version 1.3.0: - -* unix: check Android support for pthread_cond_timedwait_monotonic_np (Leith - Bade) - -* test: use modified path in test (cjihrig) - -* unix: implement uv_stream_set_blocking() (Ben Noordhuis) - - -2015.01.29, Version 1.3.0 (Stable), 165685b2a9a42cf96501d79cd6d48a18aaa16e3b - -Changes since version 1.2.1: - -* unix, windows: set non-block mode in uv_poll_init (Saúl Ibarra Corretgé) - -* doc: clarify which flags are supported in uv_fs_event_start (Saúl Ibarra - Corretgé) - -* win,unix: move loop functions which have identical implementations (Andrius - Bentkus) - -* doc: explain how the threadpool is allocated (Alex Mo) - -* doc: clarify uv_default_loop (Saúl Ibarra Corretgé) - -* unix: fix implicit declaration compiler warning (Ben Noordhuis) - -* unix: fix long line introduced in commit 94e628fa (Ben Noordhuis) - -* unix, win: add synchronous uv_get{addr,name}info (Saúl Ibarra Corretgé) - -* linux: fix epoll_pwait() regression with < 2.6.19 (Ben Noordhuis) - -* build: compile -D_GNU_SOURCE on linux (Ben Noordhuis) - -* build: use -fvisibility=hidden in autotools build (Ben Noordhuis) - -* fs, pipe: no trailing terminator in exact sized buffers (Andrius Bentkus) - -* style: rename buf to buffer and len to size for consistency (Andrius Bentkus) - -* test: fix test-spawn on MinGW32 (Luis Martinez de Bartolome) - -* win, pipe: fix assertion when destroying timer (Andrius Bentkus) - -* win, unix: add pipe_peername implementation (Andrius Bentkus) - - -2015.01.29, Version 0.10.33 (Stable), 7a2253d33ad8215a26c1b34f1952aee7242dd687 - -Changes since version 0.10.32: - -* linux: fix epoll_pwait() regression with < 2.6.19 (Ben Noordhuis) - -* test: back-port uv_loop_configure() test (Ben Noordhuis) - - -2015.01.15, Version 1.2.1 (Stable), 4ca78e989062a1099dc4b9ad182a98e8374134b1 - -Changes since version 1.2.0: - -* unix: remove unused dtrace file (Saúl Ibarra Corretgé) - -* test: skip TTY select test if /dev/tty can't be opened (Saúl Ibarra Corretgé) - -* doc: clarify the behavior of uv_tty_init (Saúl Ibarra Corretgé) - -* doc: clarify how uv_async_send behaves (Saúl Ibarra Corretgé) - -* build: make dist now generates a full tarball (Johan Bergström) - -* freebsd: make uv_exepath more resilient (Saúl Ibarra Corretgé) - -* unix: make setting the tty mode to the same value a no-op (Saúl Ibarra - Corretgé) - -* win,tcp: support uv_try_write (Bert Belder) - -* test: enable test-tcp-try-write on windows (Bert Belder) - -* win,tty: support uv_try_write (Bert Belder) - -* unix: set non-block mode in uv_{pipe,tcp,udp}_open (Ben Noordhuis) - - -2015.01.06, Version 1.2.0 (Stable), 09f25b13cd149c7981108fc1a75611daf1277f83 - -Changes since version 1.1.0: - -* linux: fix epoll_pwait() sigmask size calculation (Ben Noordhuis) - -* tty: implement binary I/O terminal mode (Yuri D'Elia) - -* test: fix spawn test with autotools build (Ben Noordhuis) - -* test: skip ipv6 tests when ipv6 is not supported (Ben Noordhuis) - -* common: move STATIC_ASSERT to uv-common.h (Alexey Melnichuk) - -* win/thread: store thread handle in a TLS slot (Alexey Melnichuk) - -* unix: fix ttl, multicast ttl and loop options on IPv6 (Saúl Ibarra Corretgé) - -* linux: fix support for preadv/pwritev-less kernels (Ben Noordhuis) - -* unix: make uv_exepath(size=0) return UV_EINVAL (Ben Noordhuis) - -* darwin: fix uv_exepath(smallbuf) UV_EPERM error (Ben Noordhuis) - -* openbsd: fix uv_exepath(smallbuf) UV_EINVAL error (Ben Noordhuis) - -* linux: fix uv_exepath(size=1) UV_EINVAL error (Ben Noordhuis) - -* sunos: preemptively fix uv_exepath(size=1) (Ben Noordhuis) - -* win: fix and clarify comments in winapi.h (Bert Belder) - -* win: make available NtQueryDirectoryFile (Bert Belder) - -* win: add definitions for directory information types (Bert Belder) - -* win: use NtQueryDirectoryFile to implement uv_fs_scandir (Bert Belder) - -* unix: don't unlink unix socket on bind error (Ben Noordhuis) - -* build: fix bad comment in autogen.sh (Ben Noordhuis) - -* build: add AC_PROG_LIBTOOL to configure.ac (Ben Noordhuis) - -* test: skip udp_options6 if there no IPv6 support (Saúl Ibarra Corretgé) - -* win: add definitions for MUI errors mingw lacks (Bert Belder) - -* build: enable warnings in autotools build (Ben Noordhuis) - -* build: remove -Wno-dollar-in-identifier-extension (Ben Noordhuis) - -* build: move flags from Makefile.am to configure.ac (Ben Noordhuis) - - -2015.01.06, Version 0.10.32 (Stable), 378de30c59aef5fdb6d130fa5cfcb0a68fce571c - -Changes since version 0.10.31: - -* linux: fix epoll_pwait() sigmask size calculation (Ben Noordhuis) - - -2014.12.25, Version 1.1.0 (Stable), 9572f3e74a167f59a8017e57ca3ebe91ffd88e18 - -Changes since version 1.0.2: - -* test: test that closing a poll handle doesn't corrupt the stack (Bert Belder) - -* win: fix compilation of tests (Marc Schlaich) - -* Revert "win: keep a reference to AFD_POLL_INFO in cancel poll" (Bert Belder) - -* win: avoid stack corruption when closing a poll handle (Bert Belder) - -* test: fix test-fs-file-loop on Windows (Bert Belder) - -* test: fix test-cwd-and-chdir (Bert Belder) - -* doc: indicate what version uv_loop_configure was added on (Saúl Ibarra - Corretgé) - -* doc: fix sphinx warning (Saúl Ibarra Corretgé) - -* test: skip spawn_setuid_setgid if we get EACCES (Saúl Ibarra Corretgé) - -* test: silence some Clang warnings (Saúl Ibarra Corretgé) - -* test: relax osx_select_many_fds (Saúl Ibarra Corretgé) - -* test: fix compilation warnings when building with Clang (Saúl Ibarra - Corretgé) - -* win: fix autotools build of tests (Luis Lavena) - -* gitignore: ignore Visual Studio files (Marc Schlaich) - -* win: set fallback message if FormatMessage fails (Marc Schlaich) - -* win: fall back to default language in uv_dlerror (Marc Schlaich) - -* test: improve compatibility for dlerror test (Marc Schlaich) - -* test: check dlerror is "no error" in no error case (Marc Schlaich) - -* unix: change uv_cwd not to return a trailing slash (Saúl Ibarra Corretgé) - -* test: fix cwd_and_chdir test on Unix (Saúl Ibarra Corretgé) - -* test: add uv_cwd output to platform_output test (Saúl Ibarra Corretgé) - -* build: fix dragonflybsd autotools build (John Marino) - -* win: scandir use 'ls' for formatting long strings (Kenneth Perry) - -* build: remove clang and gcc_version gyp defines (Ben Noordhuis) - -* unix, windows: don't treat uv_run_mode as a bitmask (Saúl Ibarra Corretgé) - -* unix, windows: fix UV_RUN_ONCE mode if progress was made (Saúl Ibarra - Corretgé) - - -2014.12.25, Version 0.10.31 (Stable), 4dbd27e2219069a6daa769fb37f98673b77b4261 - -Changes since version 0.10.30: - -* test: test that closing a poll handle doesn't corrupt the stack (Bert Belder) - -* win: fix compilation of tests (Marc Schlaich) - -* Revert "win: keep a reference to AFD_POLL_INFO in cancel poll" (Bert Belder) - -* win: avoid stack corruption when closing a poll handle (Bert Belder) - -* gitignore: ignore Visual Studio files (Marc Schlaich) - -* win: set fallback message if FormatMessage fails (Marc Schlaich) - -* win: fall back to default language in uv_dlerror (Marc Schlaich) - -* test: improve compatibility for dlerror test (Marc Schlaich) - -* test: check dlerror is "no error" in no error case (Marc Schlaich) - -* build: link against -pthread (Logan Rosen) - -* win: scandir use 'ls' for formatting long strings (Kenneth Perry) - - -2014.12.10, Version 1.0.2 (Stable), eec671f0059953505f9a3c9aeb7f9f31466dd7cd - -Changes since version 1.0.1: - -* linux: fix sigmask size arg in epoll_pwait() call (Ben Noordhuis) - -* linux: handle O_NONBLOCK != SOCK_NONBLOCK case (Helge Deller) - -* doc: fix spelling (Joey Geralnik) - -* unix, windows: fix typos in comments (Joey Geralnik) - -* test: canonicalize test runner path (Ben Noordhuis) - -* test: fix compilation warnings (Saúl Ibarra Corretgé) - -* test: skip tty test if detected width and height are 0 (Saúl Ibarra Corretgé) - -* doc: update README with IRC channel (Saúl Ibarra Corretgé) - -* Revert "unix: use cfmakeraw() for setting raw TTY mode" (Ben Noordhuis) - -* doc: document how to get result of uv_fs_mkdtemp (Tim Caswell) - -* unix: add flag for blocking SIGPROF during poll (Ben Noordhuis) - -* unix, windows: add uv_loop_configure() function (Ben Noordhuis) - -* win: keep a reference to AFD_POLL_INFO in cancel poll (Marc Schlaich) - -* test: raise fd limit for OSX select test (Saúl Ibarra Corretgé) - -* unix: remove overzealous assert in uv_read_stop (Saúl Ibarra Corretgé) - -* unix: reset the reading flag when a stream gets EOF (Saúl Ibarra Corretgé) - -* unix: stop reading if an error is produced (Saúl Ibarra Corretgé) - -* cleanup: remove all dead assignments (Maciej Małecki) - -* linux: return early if we have no interfaces (Maciej Małecki) - -* cleanup: remove a dead increment (Maciej Małecki) - - -2014.12.10, Version 0.10.30 (Stable), 5a63f5e9546dca482eeebc3054139b21f509f21f - -Changes since version 0.10.29: - -* linux: fix sigmask size arg in epoll_pwait() call (Ben Noordhuis) - -* linux: handle O_NONBLOCK != SOCK_NONBLOCK case (Helge Deller) - -* doc: update project links (Ben Noordhuis) - -* windows: fix compilation of tests (Marc Schlaich) - -* unix: add flag for blocking SIGPROF during poll (Ben Noordhuis) - -* unix, windows: add uv_loop_configure() function (Ben Noordhuis) - -* win: keep a reference to AFD_POLL_INFO in cancel poll (Marc Schlaich) - - -2014.11.27, Version 1.0.1 (Stable), 0a8e81374e861d425b56c45c8599595d848911d2 - -Changes since version 1.0.0: - -* readme: remove Rust from users (Elijah Andrews) - -* doc,build,include: update project links (Ben Noordhuis) - -* doc: fix typo: Strcutures -> Structures (Michael Ira Krufky) - -* unix: fix processing process handles queue (Saúl Ibarra Corretgé) - -* win: replace non-ansi characters in source file (Bert Belder) - - -2014.11.21, Version 1.0.0 (Stable), feb2a9e6947d892f449b2770c4090f7d8c88381b - -Changes since version 1.0.0-rc2: - -* doc: fix git/svn url for gyp repo in README (Emmanuel Odeke) - -* windows: fix fs_read with nbufs > 1 and offset (Unknown W. Brackets) - -* win: add missing IP_ADAPTER_UNICAST_ADDRESS_LH definition for MinGW - (huxingyi) - -* doc: mention homebrew in README (Mikhail Mukovnikov) - -* doc: add learnuv workshop to README (Thorsten Lorenz) - -* doc: fix parameter name in uv_fs_access (Saúl Ibarra Corretgé) - -* unix: use cfmakeraw() for setting raw TTY mode (Yuri D'Elia) - -* win: fix uv_thread_self() (Alexis Campailla) - -* build: add x32 support to gyp build (Ben Noordhuis) - -* build: remove dtrace probes (Ben Noordhuis) - -* doc: fix link in misc.rst (Manos Nikolaidis) - -* mailmap: remove duplicated entries (Saúl Ibarra Corretgé) - -* gyp: fix comment regarding version info location (Saúl Ibarra Corretgé) - - -2014.10.21, Version 1.0.0-rc2 (Pre-release) - -Changes since version 1.0.0-rc1: - -* build: add missing fixtures to distribution tarball (Rob Adams) - -* doc: update references to current stable branch (Zachary Newman) - -* fs: fix readdir on empty directory (Fedor Indutny) - -* fs: rename uv_fs_readdir to uv_fs_scandir (Saúl Ibarra Corretgé) - -* doc: document uv_alloc_cb (Saúl Ibarra Corretgé) - -* doc: add migration guide from version 0.10 (Saúl Ibarra Corretgé) - -* build: add DragonFly BSD support in autotools (Robin Hahling) - -* doc: document missing stream related structures (Saúl Ibarra Corretgé) - -* doc: clarify uv_loop_t.data field lifetime (Saúl Ibarra Corretgé) - -* doc: add documentation for missing functions and structures (Saúl Ibarra - Corretgé) - -* doc: fix punctuation and grammar in README (Jeff Widman) - -* windows: return libuv error codes in uv_poll_init() (cjihrig) - -* unix, windows: add uv_fs_access() (cjihrig) - -* windows: fix netmask detection (Alexis Campailla) - -* unix, windows: don't include null byte in uv_cwd size (Saúl Ibarra Corretgé) - -* unix, windows: add uv_thread_equal (Tomasz Kołodziejski) - -* windows: fix fs_write with nbufs > 1 and offset (Unknown W. Brackets) - - -2014.10.21, Version 0.10.29 (Stable), 2d728542d3790183417f8f122a110693cd85db14 - -Changes since version 0.10.28: - -* darwin: allocate enough space for select() hack (Fedor Indutny) - -* linux: try epoll_pwait if epoll_wait is missing (Michael Hudson-Doyle) - -* windows: map ERROR_INVALID_DRIVE to UV_ENOENT (Saúl Ibarra Corretgé) - - -2014.09.18, Version 1.0.0-rc1 (Unstable), 0c28bbf7b42882853d1799ab96ff68b07f7f8d49 - -Changes since version 0.11.29: - -* windows: improve timer precision (Alexis Campailla) - -* build, gyp: set xcode flags (Recep ASLANTAS) - -* ignore: include m4 files which are created manually (Recep ASLANTAS) - -* build: add m4 for feature/flag-testing (Recep ASLANTAS) - -* ignore: ignore Xcode project and workspace files (Recep ASLANTAS) - -* unix: fix warnings about dollar symbol usage in identifiers (Recep ASLANTAS) - -* unix: fix warnings when loading functions with dlsym (Recep ASLANTAS) - -* linux: try epoll_pwait if epoll_wait is missing (Michael Hudson-Doyle) - -* test: add test for closing and recreating default loop (Saúl Ibarra Corretgé) - -* windows: properly close the default loop (Saúl Ibarra Corretgé) - -* version: add ability to specify a version suffix (Saúl Ibarra Corretgé) - -* doc: add API documentation (Saúl Ibarra Corretgé) - -* test: don't close connection on write error (Trevor Norris) - -* windows: further simplify the code for timers (Saúl Ibarra Corretgé) - -* gyp: remove UNLIMITED_SELECT from dependent define (Fedor Indutny) - -* darwin: allocate enough space for select() hack (Fedor Indutny) - -* unix, windows: don't allow a NULL callback on timers (Saúl Ibarra Corretgé) - -* windows: simplify code in uv_timer_again (Saúl Ibarra Corretgé) - -* test: use less requests on tcp-write-queue-order (Saúl Ibarra Corretgé) - -* unix: stop child process watcher after last one exits (Saúl Ibarra Corretgé) - -* unix: simplify how process handle queue is managed (Saúl Ibarra Corretgé) - -* windows: remove duplicated field (mattn) - -* core: add a reserved field to uv_handle_t and uv_req_t (Saúl Ibarra Corretgé) - -* windows: fix buffer leak after failed udp send (Bert Belder) - -* windows: make sure sockets and handles are reset on close (Saúl Ibarra Corretgé) - -* unix, windows: add uv_fileno (Saúl Ibarra Corretgé) - -* build: use same CFLAGS in autotools build as in gyp (Saúl Ibarra Corretgé) - -* build: remove unneeded define in uv.gyp (Saúl Ibarra Corretgé) - -* test: fix watcher_cross_stop on Windows (Saúl Ibarra Corretgé) - -* unix, windows: move includes for EAI constants (Saúl Ibarra Corretgé) - -* unix: fix exposing EAI_* glibc-isms (Saúl Ibarra Corretgé) - -* unix: fix tcp write after bad connect freezing (Andrius Bentkus) - - -2014.08.20, Version 0.11.29 (Unstable), 35451fed830807095bbae8ef981af004a4b9259e - -Changes since version 0.11.28: - -* windows: make uv_read_stop immediately stop reading (Jameson Nash) - -* windows: fix uv__getaddrinfo_translate_error (Alexis Campailla) - -* netbsd: fix build (Saúl Ibarra Corretgé) - -* unix, windows: add uv_recv_buffer_size and uv_send_buffer_size (Andrius - Bentkus) - -* windows: add support for UNC paths on uv_spawn (Paul Goldsmith) - -* windows: replace use of inet_addr with uv_inet_pton (Saúl Ibarra Corretgé) - -* unix: replace some asserts with returning errors (Andrius Bentkus) - -* windows: use OpenBSD implementation for uv_fs_mkdtemp (Pavel Platto) - -* windows: fix GetNameInfoW error handling (Alexis Campailla) - -* fs: introduce uv_readdir_next() and report types (Fedor Indutny) - -* fs: extend reported types in uv_fs_readdir_next (Saúl Ibarra Corretgé) - -* unix: read on stream even when UV__POLLHUP set. (Julien Gilli) - - -2014.08.08, Version 0.11.28 (Unstable), fc9e2a0bc487b299c0cd3b2c9a23aeb554b5d8d1 - -Changes since version 0.11.27: - -* unix, windows: const-ify handle in uv_udp_getsockname (Rasmus Pedersen) - -* windows: use UV_ECANCELED for aborted TCP writes (Saúl Ibarra Corretgé) - -* windows: add more required environment variables (Jameson Nash) - -* windows: sort environment variables before calling CreateProcess (Jameson - Nash) - -* unix, windows: move uv_loop_close out of assert (John Firebaugh) - -* windows: fix buffer overflow on uv__getnameinfo_work() (lilohuang) - -* windows: add uv_backend_timeout (Jameson Nash) - -* test: disable tcp_close_accept on Windows (Saúl Ibarra Corretgé) - -* windows: read the PATH env var of the child (Alex Crichton) - -* include: avoid using C++ 'template' reserved word (Iñaki Baz Castillo) - -* include: fix version number (Saúl Ibarra Corretgé) - - -2014.07.32, Version 0.11.27 (Unstable), ffe24f955032d060968ea0289af365006afed55e - -Changes since version 0.11.26: - -* unix, windows: use the same threadpool implementation (Saúl Ibarra Corretgé) - -* unix: use struct sockaddr_storage for target UDP addr (Saúl Ibarra Corretgé) - -* doc: add documentation to uv_udp_start_recv (Andrius Bentkus) - -* common: use common uv__count_bufs code (Andrius Bentkus) - -* unix, win: add send_queue_size and send_queue_count to uv_udp_t (Andrius - Bentkus) - -* unix, win: add uv_udp_try_send (Andrius Bentkus) - -* unix: return UV_EAGAIN if uv_try_write cannot write any data (Saúl Ibarra - Corretgé) - -* windows: fix compatibility with cygwin pipes (Jameson Nash) - -* windows: count queued bytes even if request completed immediately (Saúl - Ibarra Corretgé) - -* windows: disable CRT debug handler on MinGW32 (Saúl Ibarra Corretgé) - -* windows: map ERROR_INVALID_DRIVE to UV_ENOENT (Saúl Ibarra Corretgé) - -* unix: try to write immediately in uv_udp_send (Saúl Ibarra Corretgé) - -* unix: remove incorrect assert (Saúl Ibarra Corretgé) - -* openbsd: avoid requiring privileges for uv_resident_set_memory (Aaron Bieber) - -* unix: guarantee write queue cb execution order in streams (Andrius Bentkus) - -* img: add logo files (Saúl Ibarra Corretgé) - -* aix: improve AIX compatibility (Andrew Low) - -* windows: return bind error immediately when implicitly binding (Saúl Ibarra - Corretgé) - -* windows: don't use atexit for cleaning up the threadpool (Saúl Ibarra - Corretgé) - -* windows: destroy work queue elements when colsing a loop (Saúl Ibarra - Corretgé) - -* unix, windows: add uv_fs_mkdtemp (Pavel Platto) - -* build: handle platforms without multiprocessing.synchronize (Saúl Ibarra - Corretgé) - -* windows: change GENERIC_ALL to GENERIC_WRITE in fs__create_junction (Tony - Kelman) - -* windows: relay TCP bind errors via ipc (Alexis Campailla) - - -2014.07.32, Version 0.10.28 (Stable), 9c14b616f5fb84bfd7d45707bab4bbb85894443e - -Changes since version 0.10.27: - -* windows: fix handling closed socket while poll handle is closing (Saúl Ibarra - Corretgé) - -* unix: return system error on EAI_SYSTEM (Saúl Ibarra Corretgé) - -* unix: fix bogus structure field name (Saúl Ibarra Corretgé) - -* darwin: invoke `mach_timebase_info` only once (Fedor Indutny) - - -2014.06.28, Version 0.11.26 (Unstable), 115281a1058c4034d5c5ccedacb667fe3f6327ea - -Changes since version 0.11.25: - -* windows: add VT100 codes ?25l and ?25h (JD Ballard) - -* windows: add invert ANSI (7 / 27) emulation (JD Ballard) - -* unix: fix handling error on UDP socket creation (Saúl Ibarra Corretgé) - -* unix, windows: getnameinfo implementation (Rasmus Pedersen) - -* heap: fix `heap_remove()` (Fedor Indutny) - -* unix, windows: fix parsing scoped IPv6 addresses (Saúl Ibarra Corretgé) - -* windows: fix handling closed socket while poll handle is closing (Saúl Ibarra - Corretgé) - -* thread: barrier functions (Ben Noordhuis) - -* windows: fix PYTHON environment variable usage (Jay Satiro) - -* unix, windows: return system error on EAI_SYSTEM (Saúl Ibarra Corretgé) - -* windows: fix handling closed socket while poll handle is closing (Saúl Ibarra - Corretgé) - -* unix: don't run i/o callbacks after prepare callbacks (Saúl Ibarra Corretgé) - -* windows: add tty unicode support for input (Peter Atashian) - -* header: introduce `uv_loop_size()` (Andrius Bentkus) - -* darwin: invoke `mach_timebase_info` only once (Fedor Indutny) - - -2014.05.02, Version 0.11.25 (Unstable), 2acd544cff7142e06aa3b09ec64b4a33dd9ab996 - -Changes since version 0.11.24: - -* osx: pass const handle pointer to uv___stream_fd (Chernyshev Viacheslav) - -* unix, windows: pass const handle ptr to uv_tcp_get*name (Chernyshev - Viacheslav) - -* common: pass const sockaddr ptr to uv_ip*_name (Chernyshev Viacheslav) - -* unix, windows: validate flags on uv_udp|tcp_bind (Saúl Ibarra Corretgé) - -* unix: handle case when addr is not initialized after recvmsg (Saúl Ibarra - Corretgé) - -* unix, windows: uv_now constness (Rasmus Pedersen) - - -2014.04.15, Version 0.11.24 (Unstable), ed948c29f6e8c290f79325a6f0bc9ef35bcde644 - -Changes since version 0.11.23: - -* linux: reduce file descriptor count of async pipe (Ben Noordhuis) - -* sunos: support IPv6 qualified link-local addresses (Saúl Ibarra Corretgé) - -* windows: fix opening of read-only stdin pipes (Alexis Campailla) - -* windows: Fix an infinite loop in uv_spawn (Alex Crichton) - -* windows: fix console signal handler refcount (李港平) - -* inet: allow scopeid in uv_inet_pton (Fedor Indutny) - - -2014.04.07, Version 0.11.23 (Unstable), e54de537efcacd593f36fcaaf8b4cb9e64313275 - -Changes since version 0.11.22: - -* fs: avoid using readv/writev where possible (Fedor Indutny) - -* mingw: fix build with autotools (Saúl Ibarra Corretgé) - -* bsd: support IPv6 qualified link-local addresses (Saúl Ibarra Corretgé) - -* unix: add UV_HANDLE_IPV6 flag to tcp and udp handles (Saúl Ibarra Corretgé) - -* unix, windows: do not set SO_REUSEADDR by default on udp (Saúl Ibarra - Corretgé) - -* windows: fix check in uv_tty_endgame() (Maks Naumov) - -* unix, windows: add IPv6 support for uv_udp_multicast_interface (Saúl Ibarra - Corretgé) - -* unix: fallback to blocking writes if reopening a tty fails (Saúl Ibarra - Corretgé) - -* unix: fix handling uv__open_cloexec failure (Saúl Ibarra Corretgé) - -* unix, windows: add IPv6 support to uv_udp_set_membership (Saúl Ibarra - Corretgé) - -* unix, windows: removed unused status parameter (Saúl Ibarra Corretgé) - -* android: add support of ifaddrs in android (Javier Hernández) - -* build: fix SunOS and AIX build with autotools (Saúl Ibarra Corretgé) - -* build: freebsd link with libelf if dtrace enabled (Saúl Ibarra Corretgé) - -* stream: do not leak `alloc_cb` buffers on error (Fedor Indutny) - -* unix: fix setting written size on uv_wd (Saúl Ibarra Corretgé) - - -2014.03.11, Version 0.11.22 (Unstable), cd0c19b1d3c56acf0ade7687006e12e75fbda36d - -Changes since version 0.11.21: - -* unix, windows: map ERANGE errno (Saúl Ibarra Corretgé) - -* unix, windows: make uv_cwd be consistent with uv_exepath (Saúl Ibarra - Corretgé) - -* process: remove debug perror() prints (Fedor Indutny) - -* windows: fall back for volume info query (Isaiah Norton) - -* pipe: allow queueing pending handles (Fedor Indutny) - -* windows: fix winsock status codes for address errors (Raul Martins) - -* windows: Remove unused variable from uv__pipe_insert_pending_socket (David - Capello) - -* unix: workaround broken pthread_sigmask on Android (Paul Tan) - -* error: add ENXIO for O_NONBLOCK FIFO open() (Fedor Indutny) - -* freebsd: use accept4, introduced in version 10 (Saúl Ibarra Corretgé) - -* windows: fix warnings of MinGW -Wall -O3 (StarWing) - -* openbsd, osx: fix compilation warning on scandir (Saúl Ibarra Corretgé) - -* linux: always deregister closing fds from epoll (Geoffry Song) - -* unix: reopen tty as /dev/tty (Saúl Ibarra Corretgé) - -* kqueue: invalidate fd in uv_fs_event_t (Fedor Indutny) - - -2014.02.28, Version 0.11.21 (Unstable), 3ef958158ae1019e027ebaa93114160099db5206 - -Changes since version 0.11.20: - -* unix: fix uv_fs_write when using an empty buffer (Saúl Ibarra Corretgé) - -* unix, windows: add assertion in uv_loop_delete (Saúl Ibarra Corretgé) - - -2014.02.27, Version 0.11.20 (Unstable), 88355e081b51c69ee1e2b6b0015a4e3d38bd0579 - -Changes since version 0.11.19: - -* stream: start thread after assignments (Oguz Bastemur) - -* fs: `uv__cloexec()` opened fd (Fedor Indutny) - -* gyp: qualify `library` variable (Fedor Indutny) - -* unix, win: add uv_udp_set_multicast_interface() (Austin Foxley) - -* unix: fix uv_tcp_nodelay return value in case of error (Saúl Ibarra Corretgé) - -* unix: call setgoups before calling setuid/setgid (Saúl Ibarra Corretgé) - -* include: mark close_cb field as private (Saúl Ibarra Corretgé) - -* unix, windows: map EFBIG errno (Saúl Ibarra Corretgé) - -* unix: correct error when calling uv_shutdown twice (Keno Fischer) - -* windows: fix building on MinGW (Alex Crichton) - -* windows: always initialize uv_process_t (Alex Crichton) - -* include: expose libuv version in header files (Saúl Ibarra Corretgé) - -* fs: vectored IO API for filesystem read/write (Benjamin Saunders) - -* windows: freeze in uv_tcp_endgame (Alexis Campailla) - -* sunos: handle rearm errors (Fedor Indutny) - -* unix: use a heap for timers (Ben Noordhuis) - -* linux: always deregister closing fds from epoll (Geoffry Song) - -* linux: include grp.h for setgroups() (William Light) - -* unix, windows: add uv_loop_init and uv_loop_close (Saúl Ibarra Corretgé) - -* unix, windows: add uv_getrusage() function (Oleg Efimov) - -* win: minor error handle fix to uv_pipe_write_impl (Rasmus Pedersen) - -* heap: fix node removal (Keno Fischer) - -* win: fix C99/C++ comment (Rasmus Pedersen) - -* fs: vectored IO API for filesystem read/write (Benjamin Saunders) - -* unix, windows: add uv_pipe_getsockname (Saúl Ibarra Corretgé) - -* unix, windows: map ENOPROTOOPT errno (Saúl Ibarra Corretgé) - -* errno: add ETXTBSY (Fedor Indutny) - -* fsevent: rename filename field to path (Saúl Ibarra Corretgé) - -* unix, windows: add uv_fs_event_getpath (Saúl Ibarra Corretgé) - -* unix, windows: add uv_fs_poll_getpath (Saúl Ibarra Corretgé) - -* unix, windows: map ERANGE errno (Saúl Ibarra Corretgé) - -* unix, windows: set required size on UV_ENOBUFS (Saúl Ibarra Corretgé) - -* unix, windows: clarify what uv_stream_set_blocking does (Saúl Ibarra - Corretgé) - -* fs: use preadv on Linux if available (Brian White) - - -2014.01.30, Version 0.11.19 (Unstable), 336a1825309744f920230ec3e427e78571772347 - -Changes since version 0.11.18: - -* linux: move sscanf() out of the assert() (Trevor Norris) - -* linux: fix C99/C++ comment (Fedor Indutny) - - -2014.05.02, Version 0.10.27 (Stable), 6e24ce23b1e7576059f85a608eca13b766458a01 - -Changes since version 0.10.26: - -* windows: fix console signal handler refcount (Saúl Ibarra Corretgé) - -* win: always leave crit section in get_proc_title (Fedor Indutny) - - -2014.04.07, Version 0.10.26 (Stable), d864907611c25ec986c5e77d4d6d6dee88f26926 - -Changes since version 0.10.25: - -* process: don't close stdio fds during spawn (Tonis Tiigi) - -* build, windows: do not fail on Windows SDK Prompt (Marc Schlaich) - -* build, windows: fix x64 configuration issue (Marc Schlaich) - -* win: fix buffer leak on error in pipe.c (Fedor Indutny) - -* kqueue: invalidate fd in uv_fs_event_t (Fedor Indutny) - -* linux: always deregister closing fds from epoll (Geoffry Song) - -* error: add ENXIO for O_NONBLOCK FIFO open() (Fedor Indutny) - - -2014.02.19, Version 0.10.25 (Stable), d778dc588507588b12b9f9d2905078db542ed751 - -Changes since version 0.10.24: - -* stream: start thread after assignments (Oguz Bastemur) - -* unix: correct error when calling uv_shutdown twice (Saúl Ibarra Corretgé) - -2014.01.30, Version 0.10.24 (Stable), aecd296b6bce9b40f06a61c5c94e43d45ac7308a - -Changes since version 0.10.23: - -* linux: move sscanf() out of the assert() (Trevor Norris) - -* linux: fix C99/C++ comment (Fedor Indutny) - - -2014.01.23, Version 0.11.18 (Unstable), d47962e9d93d4a55a9984623feaf546406c9cdbb - -Changes since version 0.11.17: - -* osx: Fix a possible segfault in uv__io_poll (Alex Crichton) - -* windows: improved handling of invalid FDs (Alexis Campailla) - -* doc: adding ARCHS flag to OS X build command (Nathan Sweet) - -* tcp: reveal bind-time errors before listen (Alexis Campailla) - -* tcp: uv_tcp_dualstack() (Fedor Indutny) - -* linux: relax assumption on /proc/stat parsing (Luca Bruno) - -* openbsd: fix obvious bug in uv_cpu_info (Fedor Indutny) - -* process: close stdio after dup2'ing it (Fedor Indutny) - -* linux: move sscanf() out of the assert() (Trevor Norris) - - -2014.01.23, Version 0.10.23 (Stable), dbd218e699fec8be311d85e4788be9e28ae884f8 - -Changes since version 0.10.22: - -* linux: relax assumption on /proc/stat parsing (Luca Bruno) - -* openbsd: fix obvious bug in uv_cpu_info (Fedor Indutny) - -* process: close stdio after dup2'ing it (Fedor Indutny) - - -2014.01.08, Version 0.10.22 (Stable), f526c90eeff271d9323a9107b9a64a4671fd3103 - -Changes since version 0.10.21: - -* windows: avoid assertion failure when pipe server is closed (Bert Belder) - - -2013.12.32, Version 0.11.17 (Unstable), 589c224d4c2e79fec65db01d361948f1e4976858 - -Changes since version 0.11.16: - -* stream: allow multiple buffers for uv_try_write (Fedor Indutny) - -* unix: fix a possible memory leak in uv_fs_readdir (Alex Crichton) - -* unix, windows: add uv_loop_alive() function (Sam Roberts) - -* windows: avoid assertion failure when pipe server is closed (Bert Belder) - -* osx: Fix a possible segfault in uv__io_poll (Alex Crichton) - -* stream: fix uv__stream_osx_select (Fedor Indutny) - - -2013.12.14, Version 0.11.16 (Unstable), ae0ed8c49d0d313c935c22077511148b6e8408a4 - -Changes since version 0.11.15: - -* fsevents: remove kFSEventStreamCreateFlagNoDefer polyfill (ci-innoq) - -* libuv: add more getaddrinfo errors (Steven Kabbes) - -* unix: fix accept() EMFILE error handling (Ben Noordhuis) - -* linux: fix up SO_REUSEPORT back-port (Ben Noordhuis) - -* fsevents: fix subfolder check (Fedor Indutny) - -* fsevents: fix invalid memory access (huxingyi) - -* windows/timer: fix uv_hrtime discontinuity (Bert Belder) - -* unix: fix various memory leaks and undef behavior (Fedor Indutny) - -* unix, windows: always update loop time (Saúl Ibarra Corretgé) - -* windows: translate system errors in uv_spawn (Alexis Campailla) - -* windows: uv_spawn code refactor (Alexis Campailla) - -* unix, windows: detect errors in uv_ip4/6_addr (Yorkie) - -* stream: introduce uv_try_write(...) (Fedor Indutny) - - -2013.12.13, Version 0.10.20 (Stable), 04141464dd0fba90ace9aa6f7003ce139b888a40 - -Changes since version 0.10.19: - -* linux: fix up SO_REUSEPORT back-port (Ben Noordhuis) - -* fs-event: fix invalid memory access (huxingyi) - - -2013.11.21, Version 0.11.15 (Unstable), bfe645ed7e99ca5670d9279ad472b604c129d2e5 - -Changes since version 0.11.14: - -* fsevents: report errors to user (Fedor Indutny) - -* include: UV_FS_EVENT_RECURSIVE is a flag (Fedor Indutny) - -* linux: use CLOCK_MONOTONIC_COARSE if available (Ben Noordhuis) - -* build: make systemtap probes work with gyp build (Ben Noordhuis) - -* unix: update events from pevents between polls (Fedor Indutny) - -* fsevents: support japaneese characters in path (Chris Bank) - -* linux: don't turn on SO_REUSEPORT socket option (Ben Noordhuis) - -* queue: strengthen type checks (Ben Noordhuis) - -* include: remove uv_strlcat() and uv_strlcpy() (Ben Noordhuis) - -* build: fix windows smp build with gyp (Geert Jansen) - -* unix: return exec errors from uv_spawn, not async (Alex Crichton) - -* fsevents: use native character encoding file paths (Ben Noordhuis) - -* linux: handle EPOLLHUP without EPOLLIN/EPOLLOUT (Ben Noordhuis) - -* windows: use _snwprintf(), not swprintf() (Ben Noordhuis) - -* fsevents: use FlagNoDefer for FSEventStreamCreate (Fedor Indutny) - -* unix: fix reopened fd bug (Fedor Indutny) - -* core: fix fake watcher list and count preservation (Fedor Indutny) - -* unix: set close-on-exec flag on received fds (Ben Noordhuis) - -* netbsd, openbsd: enable futimes() wrapper (Ben Noordhuis) - -* unix: nicer error message when kqueue() fails (Ben Noordhuis) - -* samples: add socks5 proxy sample application (Ben Noordhuis) - - -2013.11.13, Version 0.10.19 (Stable), 33959f7524090b8d2c6c41e2400ca77e31755059 - -Changes since version 0.10.18: - -* darwin: avoid calling GetCurrentProcess (Fedor Indutny) - -* unix: update events from pevents between polls (Fedor Indutny) - -* fsevents: support japaneese characters in path (Chris Bank) - -* linux: don't turn on SO_REUSEPORT socket option (Ben Noordhuis) - -* build: fix windows smp build with gyp (Geert Jansen) - -* linux: handle EPOLLHUP without EPOLLIN/EPOLLOUT (Ben Noordhuis) - -* unix: fix reopened fd bug (Fedor Indutny) - -* core: fix fake watcher list and count preservation (Fedor Indutny) - - -2013.10.30, Version 0.11.14 (Unstable), d7a6482f45c1b4eb4a853dbe1a9ce8090a35633a - -Changes since version 0.11.13: - -* darwin: create fsevents thread on demand (Ben Noordhuis) - -* fsevents: FSEvents is most likely not thread-safe (Fedor Indutny) - -* fsevents: use shared FSEventStream (Fedor Indutny) - -* windows: make uv_fs_chmod() report errors correctly (Bert Belder) - -* windows: make uv_shutdown() for write-only pipes work (Bert Belder) - -* windows/fs: wrap multi-statement macros in do..while block (Bert Belder) - -* windows/fs: make uv_fs_open() report EINVAL correctly (Bert Belder) - -* windows/fs: handle _open_osfhandle() failure correctly (Bert Belder) - -* windows/fs: wrap multi-statement macros in do..while block (Bert Belder) - -* windows/fs: make uv_fs_open() report EINVAL correctly (Bert Belder) - -* windows/fs: handle _open_osfhandle() failure correctly (Bert Belder) - -* build: clarify instructions for Windows (Brian Kaisner) - -* build: remove GCC_WARN_ABOUT_MISSING_NEWLINE (Ben Noordhuis) - -* darwin: fix 10.6 build error in fsevents.c (Ben Noordhuis) - -* windows: run close callbacks after polling for i/o (Saúl Ibarra Corretgé) - -* include: clarify uv_tcp_bind() behavior (Ben Noordhuis) - -* include: clean up includes in uv.h (Ben Noordhuis) - -* include: remove UV_IO_PRIVATE_FIELDS macro (Ben Noordhuis) - -* include: fix typo in comment in uv.h (Ben Noordhuis) - -* include: update uv_is_active() documentation (Ben Noordhuis) - -* include: make uv_process_options_t.cwd const (Ben Noordhuis) - -* unix: wrap long lines at 80 columns (Ben Noordhuis) - -* unix, windows: make uv_is_*() always return 0 or 1 (Ben Noordhuis) - -* bench: measure total/init/dispatch/cleanup times (Ben Noordhuis) - -* build: use -pthread on sunos (Timothy J. Fontaine) - -* windows: remove duplicate check in stream.c (Ben Noordhuis) - -* unix: sanity-check fds before closing (Ben Noordhuis) - -* unix: remove uv__pipe_accept() (Ben Noordhuis) - -* unix: fix uv_spawn() NULL pointer deref on ENOMEM (Ben Noordhuis) - -* unix: don't close inherited fds on uv_spawn() fail (Ben Noordhuis) - -* unix: revert recent FSEvent changes (Ben Noordhuis) - -* fsevents: fix clever rescheduling (Fedor Indutny) - -* linux: ignore fractional time in uv_uptime() (Ben Noordhuis) - -* unix: fix SIGCHLD waitpid() race in process.c (Ben Noordhuis) - -* unix, windows: add uv_fs_event_start/stop functions (Saúl Ibarra Corretgé) - -* unix: fix non-synchronized access in signal.c (Ben Noordhuis) - -* unix: add atomic-ops.h (Ben Noordhuis) - -* unix: add spinlock.h (Ben Noordhuis) - -* unix: clean up uv_tty_set_mode() a little (Ben Noordhuis) - -* unix: make uv_tty_reset_mode() async signal-safe (Ben Noordhuis) - -* include: add E2BIG status code mapping (Ben Noordhuis) - -* windows: fix duplicate case build error (Ben Noordhuis) - -* windows: remove unneeded check (Saúl Ibarra Corretgé) - -* include: document pipe path truncation behavior (Ben Noordhuis) - -* fsevents: increase stack size for OSX 10.9 (Fedor Indutny) - -* windows: _snprintf expected wrong parameter type in string (Maks Naumov) - -* windows: "else" keyword is missing (Maks Naumov) - -* windows: incorrect check for SOCKET_ERROR (Maks Naumov) - -* windows: add stdlib.h to satisfy reference to abort (Sean Farrell) - -* build: fix check target for mingw (Sean Farrell) - -* unix: move uv_shutdown() assertion (Keno Fischer) - -* darwin: avoid calling GetCurrentProcess (Fedor Indutny) - - -2013.10.19, Version 0.10.18 (Stable), 9ec52963b585e822e87bdc5de28d6143aff0d2e5 - -Changes since version 0.10.17: - -* unix: fix uv_spawn() NULL pointer deref on ENOMEM (Ben Noordhuis) - -* unix: don't close inherited fds on uv_spawn() fail (Ben Noordhuis) - -* unix: revert recent FSEvent changes (Ben Noordhuis) - -* unix: fix non-synchronized access in signal.c (Ben Noordhuis) - - -2013.09.25, Version 0.10.17 (Stable), 9670e0a93540c2f0d86c84a375f2303383c11e7e - -Changes since version 0.10.16: - -* build: remove GCC_WARN_ABOUT_MISSING_NEWLINE (Ben Noordhuis) - -* darwin: fix 10.6 build error in fsevents.c (Ben Noordhuis) - - -2013.09.06, Version 0.10.16 (Stable), 2bce230d81f4853a23662cbeb26fe98010b1084b - -Changes since version 0.10.15: - -* windows: make uv_shutdown() for write-only pipes work (Bert Belder) - -* windows: make uv_fs_open() report EINVAL when invalid arguments are passed - (Bert Belder) - -* windows: make uv_fs_open() report _open_osfhandle() failure correctly (Bert - Belder) - -* windows: make uv_fs_chmod() report errors correctly (Bert Belder) - -* windows: wrap multi-statement macros in do..while block (Bert Belder) - - -2013.09.05, Version 0.11.13 (Unstable), f5b6db6c1d7f93d28281207fd47c3841c9a9792e - -Changes since version 0.11.12: - -* unix: define _GNU_SOURCE, exposes glibc-isms (Ben Noordhuis) - -* windows: check for nonconforming swprintf arguments (Brent Cook) - -* build: include internal headers in source list (Brent Cook) - -* include: merge uv_tcp_bind and uv_tcp_bind6 (Ben Noordhuis) - -* include: merge uv_tcp_connect and uv_tcp_connect6 (Ben Noordhuis) - -* include: merge uv_udp_bind and uv_udp_bind6 (Ben Noordhuis) - -* include: merge uv_udp_send and uv_udp_send6 (Ben Noordhuis) - - -2013.09.03, Version 0.11.12 (Unstable), 82d01d5f6780d178f5176a01425ec297583c0811 - -Changes since version 0.11.11: - -* test: fix epoll_wait() usage in test-embed.c (Ben Noordhuis) - -* include: uv_alloc_cb now takes uv_buf_t* (Ben Noordhuis) - -* include: uv_read{2}_cb now takes const uv_buf_t* (Ben Noordhuis) - -* include: uv_ip[46]_addr now takes sockaddr_in* (Ben Noordhuis) - -* include: uv_tcp_bind{6} now takes sockaddr_in* (Ben Noordhuis) - -* include: uv_tcp_connect{6} now takes sockaddr_in* (Ben Noordhuis) - -* include: uv_udp_recv_cb now takes const uv_buf_t* (Ben Noordhuis) - -* include: uv_udp_bind{6} now takes sockaddr_in* (Ben Noordhuis) - -* include: uv_udp_send{6} now takes sockaddr_in* (Ben Noordhuis) - -* include: uv_spawn takes const uv_process_options_t* (Ben Noordhuis) - -* include: make uv_write{2} const correct (Ben Noordhuis) - -* windows: fix flags assignment in uv_fs_readdir() (Ben Noordhuis) - -* windows: fix stray comments (Ben Noordhuis) - -* windows: remove unused is_path_dir() function (Ben Noordhuis) - - -2013.08.30, Version 0.11.11 (Unstable), ba876d53539ed0427c52039012419cd9374c6f0d - -Changes since version 0.11.10: - -* unix, windows: add thread-local storage API (Ben Noordhuis) - -* linux: don't turn on SO_REUSEPORT socket option (Ben Noordhuis) - -* darwin: fix 10.6 build error in fsevents.c (Ben Noordhuis) - -* windows: make uv_shutdown() for write-only pipes work (Bert Belder) - -* include: update uv_udp_open() / uv_udp_bind() docs (Ben Noordhuis) - -* unix: req queue must be empty when destroying loop (Ben Noordhuis) - -* unix: move loop functions from core.c to loop.c (Ben Noordhuis) - -* darwin: remove CoreFoundation dependency (Ben Noordhuis) - -* windows: make autotools build system work with mingw (Keno Fischer) - -* windows: fix mingw build (Alex Crichton) - -* windows: tweak Makefile.mingw for easier usage (Alex Crichton) - -* build: remove _GNU_SOURCE macro definition (Ben Noordhuis) - - -2013.08.25, Version 0.11.10 (Unstable), 742dadcb7154cc7bb89c0c228a223b767a36cf0d - -* windows: Re-implement uv_fs_stat. The st_ctime field now contains the change - time, not the creation time, like on unix systems. st_dev, st_ino, st_blocks - and st_blksize are now also filled out. (Bert Belder) - -* linux: fix setsockopt(SO_REUSEPORT) error handling (Ben Noordhuis) - -* windows: report uv_process_t exit code correctly (Bert Belder) - -* windows: make uv_fs_chmod() report errors correctly (Bert Belder) - -* windows: make some more NT apis available for libuv's internal use (Bert - Belder) - -* windows: squelch some compiler warnings (Bert Belder) - - -2013.08.24, Version 0.11.9 (Unstable), a2d29b5b068cbac93dc16138fb30a74e2669daad - -Changes since version 0.11.8: - -* fsevents: share FSEventStream between multiple FS watchers, which removes a - limit on the maximum number of file watchers that can be created on OS X. - (Fedor Indutny) - -* process: the `exit_status` parameter for a uv_process_t's exit callback now - is an int64_t, and no longer an int. (Bert Belder) - -* process: make uv_spawn() return some types of errors immediately on windows, - instead of passing the error code the the exit callback. This brings it on - par with libuv's behavior on unix. (Bert Belder) - - -2013.08.24, Version 0.10.15 (Stable), 221078a8fdd9b853c6b557b3d9a5dd744b4fdd6b - -Changes since version 0.10.14: - -* fsevents: create FSEvents thread on demand (Ben Noordhuis) - -* fsevents: use a single thread for interacting with FSEvents, because it's not - thread-safe. (Fedor Indutny) - -* fsevents: share FSEventStream between multiple FS watchers, which removes a - limit on the maximum number of file watchers that can be created on OS X. - (Fedor Indutny) - - -2013.08.22, Version 0.11.8 (Unstable), a5260462db80ab0deab6b9e6a8991dd8f5a9a2f8 - -Changes since version 0.11.7: - -* unix: fix missing return value warning in stream.c (Ben Noordhuis) - -* build: serial-tests was added in automake v1.12 (Ben Noordhuis) - -* windows: fix uninitialized local variable warning (Ben Noordhuis) - -* windows: fix missing return value warning (Ben Noordhuis) - -* build: fix string comparisons in autogen.sh (Ben Noordhuis) - -* windows: move INLINE macro, remove UNUSED (Ben Noordhuis) - -* unix: clean up __attribute__((quux)) usage (Ben Noordhuis) - -* sunos: remove futimes() macro (Ben Noordhuis) - -* unix: fix uv__signal_unlock() prototype (Ben Noordhuis) - -* unix, windows: allow NULL async callback (Ben Noordhuis) - -* build: apply dtrace -G to all object files (Timothy J. Fontaine) - -* darwin: fix indentation in uv__hrtime() (Ben Noordhuis) - -* darwin: create fsevents thread on demand (Ben Noordhuis) - -* darwin: reduce fsevents thread stack size (Ben Noordhuis) - -* darwin: call pthread_setname_np() if available (Ben Noordhuis) - -* build: fix automake serial-tests check again (Ben Noordhuis) - -* unix: retry waitpid() on EINTR (Ben Noordhuis) - -* darwin: fix ios build error (Ben Noordhuis) - -* darwin: fix ios compiler warning (Ben Noordhuis) - -* test: simplify test-ip6-addr.c (Ben Noordhuis) - -* unix, windows: fix ipv6 link-local address parsing (Ben Noordhuis) - -* fsevents: FSEvents is most likely not thread-safe (Fedor Indutny) - -* windows: omit stdint.h, fix msvc 2008 build error (Ben Noordhuis) - - -2013.08.22, Version 0.10.14 (Stable), 15d64132151c18b26346afa892444b95e2addad0 - -Changes since version 0.10.13: - -* unix: retry waitpid() on EINTR (Ben Noordhuis) - - -2013.08.07, Version 0.11.7 (Unstable), 3cad361f8776f70941b39d65bd9426bcb1aa817b - -Changes since version 0.11.6: - -* unix, windows: fix uv_fs_chown() function prototype (Ben Noordhuis) - -* unix, windows: remove unused variables (Brian White) - -* test: fix signed/unsigned comparison warnings (Ben Noordhuis) - -* build: dtrace shouldn't break out of tree builds (Timothy J. Fontaine) - -* unix, windows: don't read/recv if buf.len==0 (Ben Noordhuis) - -* build: add mingw makefile (Ben Noordhuis) - -* unix, windows: add MAC to uv_interface_addresses() (Brian White) - -* build: enable AM_INIT_AUTOMAKE([subdir-objects]) (Ben Noordhuis) - -* unix, windows: make buf arg to uv_fs_write const (Ben Noordhuis) - -* sunos: fix build breakage introduced in e3a657c (Ben Noordhuis) - -* aix: fix build breakage introduced in 3ee4d3f (Ben Noordhuis) - -* windows: fix mingw32 build, define JOB_OBJECT_XXX (Yasuhiro Matsumoto) - -* windows: fix mingw32 build, include limits.h (Yasuhiro Matsumoto) - -* test: replace sprintf() with snprintf() (Ben Noordhuis) - -* test: replace strcpy() with strncpy() (Ben Noordhuis) - -* openbsd: fix uv_ip6_addr() unused variable warnings (Ben Noordhuis) - -* openbsd: fix dlerror() const correctness warning (Ben Noordhuis) - -* openbsd: fix uv_fs_sendfile() unused variable warnings (Ben Noordhuis) - -* build: disable parallel automake tests (Ben Noordhuis) - -* test: add windows-only snprintf() function (Ben Noordhuis) - -* build: add automake serial-tests version check (Ben Noordhuis) - - -2013.07.26, Version 0.10.13 (Stable), 381312e1fe6fecbabc943ccd56f0e7d114b3d064 - -Changes since version 0.10.12: - -* unix, windows: fix uv_fs_chown() function prototype (Ben Noordhuis) - - -2013.07.21, Version 0.11.6 (Unstable), 6645b93273e0553d23823c576573b82b129bf28c - -Changes since version 0.11.5: - -* test: open stdout fd in write-only mode (Ben Noordhuis) - -* windows: uv_spawn shouldn't reject reparse points (Bert Belder) - -* windows: use WSAGetLastError(), not errno (Ben Noordhuis) - -* build: darwin: disable -fstrict-aliasing warnings (Ben Noordhuis) - -* test: fix signed/unsigned compiler warning (Ben Noordhuis) - -* test: add 'start timer from check handle' test (Ben Noordhuis) - -* build: `all` now builds static and dynamic lib (Ben Noordhuis) - -* unix, windows: add extra fields to uv_stat_t (Saúl Ibarra Corretgé) - -* build: add install target to the makefile (Navaneeth Kedaram Nambiathan) - -* build: switch to autotools (Ben Noordhuis) - -* build: use AM_PROG_AR conditionally (Ben Noordhuis) - -* test: fix fs_fstat test on sunos (Ben Noordhuis) - -* test: fix fs_chown when running as root (Ben Noordhuis) - -* test: fix spawn_setgid_fails and spawn_setuid_fails (Ben Noordhuis) - -* build: use AM_SILENT_RULES conditionally (Ben Noordhuis) - -* build: add DTrace detection for autotools (Timothy J. Fontaine) - -* linux,darwin,win: link-local IPv6 addresses (Miroslav Bajtoš) - -* unix: fix build when !defined(PTHREAD_MUTEX_ERRORCHECK) (Ben Noordhuis) - -* unix, windows: return error codes directly (Ben Noordhuis) - - -2013.07.10, Version 0.10.12 (Stable), 58a46221bba726746887a661a9f36fe9ff204209 - -Changes since version 0.10.11: - -* linux: add support for MIPS (Andrei Sedoi) - -* windows: uv_spawn shouldn't reject reparse points (Bert Belder) - -* windows: use WSAGetLastError(), not errno (Ben Noordhuis) - -* build: darwin: disable -fstrict-aliasing warnings (Ben Noordhuis) - -* build: `all` now builds static and dynamic lib (Ben Noordhuis) - -* unix: fix build when !defined(PTHREAD_MUTEX_ERRORCHECK) (Ben Noordhuis) - - -2013.06.27, Version 0.11.5 (Unstable), e3c63ff1627a14e96f54c1c62b0d68b446d8425b - -Changes since version 0.11.4: - -* build: remove CSTDFLAG, use only CFLAGS (Ben Noordhuis) - -* unix: support for android builds (Linus Mårtensson) - -* unix: avoid extra read, short-circuit on POLLHUP (Ben Noordhuis) - -* uv: support android libuv standalone build (Linus Mårtensson) - -* src: make queue.h c++ compatible (Ben Noordhuis) - -* unix: s/ngx-queue.h/queue.h/ in checksparse.sh (Ben Noordhuis) - -* unix: unconditionally stop handle on close (Ben Noordhuis) - -* freebsd: don't enable dtrace if it's not available (Brian White) - -* build: make HAVE_DTRACE=0 should disable dtrace (Timothy J. Fontaine) - -* unix: remove overzealous assert (Ben Noordhuis) - -* unix: remove unused function uv_fatal_error() (Ben Noordhuis) - -* unix, windows: clean up uv_thread_create() (Ben Noordhuis) - -* queue: fix pointer truncation on LLP64 platforms (Bert Belder) - -* build: set OS=="android" for android builds (Linus Mårtensson) - -* windows: don't use uppercase in include filename (Ben Noordhuis) - -* stream: add an API to make streams do blocking writes (Henry Rawas) - -* windows: use WSAGetLastError(), not errno (Ben Noordhuis) - - -2013.06.13, Version 0.10.11 (Stable), c3b75406a66a10222a589cb173e8f469e9665c7e - -Changes since version 0.10.10: - -* unix: unconditionally stop handle on close (Ben Noordhuis) - -* freebsd: don't enable dtrace if it's not available (Brian White) - -* build: make HAVE_DTRACE=0 should disable dtrace (Timothy J. Fontaine) - -* unix: remove overzealous assert (Ben Noordhuis) - -* unix: clear UV_STREAM_SHUTTING after shutdown() (Ben Noordhuis) - -* unix: fix busy loop, write if POLLERR or POLLHUP (Ben Noordhuis) - - -2013.06.05, Version 0.10.10 (Stable), 0d95a88bd35fce93863c57a460be613aea34d2c5 - -Changes since version 0.10.9: - -* include: document uv_update_time() and uv_now() (Ben Noordhuis) - -* linux: fix cpu model parsing on newer arm kernels (Ben Noordhuis) - -* linux: fix a memory leak in uv_cpu_info() error path (Ben Noordhuis) - -* linux: don't ignore out-of-memory errors in uv_cpu_info() (Ben Noordhuis) - -* unix, windows: move uv_now() to uv-common.c (Ben Noordhuis) - -* test: fix a compilation problem in test-osx-select.c that was caused by the - use of c-style comments (Bert Belder) - -* darwin: use uv_fs_sendfile() use the sendfile api correctly (Wynn Wilkes) - - -2013.05.30, Version 0.11.4 (Unstable), e43e5b3d954a0989db5588aa110e1fe4fe6e0219 - -Changes since version 0.11.3: - -* windows: make uv_spawn not fail when the libuv embedding application is run - under external job control (Bert Belder) - -* darwin: assume CFRunLoopStop() isn't thread-safe, fixing a race condition - when stopping the 'stdin select hack' thread (Fedor Indutny) - -* win: fix UV_EALREADY not being reported correctly to the libuv user in some - cases (Bert Belder) - -* darwin: make the uv__cf_loop_runner and uv__cf_loop_cb functions static (Ben - Noordhuis) - -* darwin: task_info() cannot fail (Ben Noordhuis) - -* unix: add error mapping for ENETDOWN (Ben Noordhuis) - -* unix: implicitly signal write errors to the libuv user (Ben Noordhuis) - -* unix: fix assertion error on signal pipe overflow (Bert Belder) - -* unix: turn off POLLOUT after stream connect (Ben Noordhuis) - -* unix: fix stream refcounting buglet (Ben Noordhuis) - -* unix: remove assert statements that are no longer correct (Ben Noordhuis) - -* unix: appease warning about non-standard `inline` (Sean Silva) - -* unix: add uv__is_closing() macro (Ben Noordhuis) - -* unix: stop stream POLLOUT watcher on write error (Ben Noordhuis) - -* include: document uv_update_time() and uv_now() (Ben Noordhuis) - -* linux: fix cpu model parsing on newer arm kernels (Ben Noordhuis) - -* linux: fix a memory leak in uv_cpu_info() error path (Ben Noordhuis) - -* linux: don't ignore out-of-memory errors in uv_cpu_info() (Ben Noordhuis) - -* unix, windows: move uv_now() to uv-common.c (Ben Noordhuis) - -* test: fix a compilation problem in test-osx-select.c that was caused by the - use of c-style comments (Bert Belder) - -* darwin: use uv_fs_sendfile() use the sendfile api correctly (Wynn Wilkes) - -* windows: call idle handles on every loop iteration, something the unix - implementation already did (Bert Belder) - -* test: update the idle-starvation test to verify that idle handles are called - in every loop iteration (Bert Belder) - -* unix, windows: ensure that uv_run() in RUN_ONCE mode calls timers that expire - after blocking (Ben Noordhuis) - - -2013.05.29, Version 0.10.9 (Stable), a195f9ace23d92345baf57582678bfc3017e6632 - -Changes since version 0.10.8: - -* unix: fix stream refcounting buglet (Ben Noordhuis) - -* unix: remove erroneous asserts (Ben Noordhuis) - -* unix: add uv__is_closing() macro (Ben Noordhuis) - -* unix: stop stream POLLOUT watcher on write error (Ben Noordhuis) - - -2013.05.25, Version 0.10.8 (Stable), 0f39be12926fe2d8766a9f025797a473003e6504 - -Changes since version 0.10.7: - -* windows: make uv_spawn not fail under job control (Bert Belder) - -* darwin: assume CFRunLoopStop() isn't thread-safe (Fedor Indutny) - -* win: fix UV_EALREADY incorrectly set (Bert Belder) - -* darwin: make two uv__cf_*() functions static (Ben Noordhuis) - -* darwin: task_info() cannot fail (Ben Noordhuis) - -* unix: add mapping for ENETDOWN (Ben Noordhuis) - -* unix: implicitly signal write errors to libuv user (Ben Noordhuis) - -* unix: fix assert on signal pipe overflow (Bert Belder) - -* unix: turn off POLLOUT after stream connect (Ben Noordhuis) - - -2013.05.16, Version 0.11.3 (Unstable), 0a48c05b5988aea84c605751900926fa25443b34 - -Changes since version 0.11.2: - -* unix: clean up uv_accept() (Ben Noordhuis) - -* unix: remove errno preserving code (Ben Noordhuis) - -* darwin: fix ios build, don't require ApplicationServices (Ben Noordhuis) - -* windows: kill child processes when the parent dies (Bert Belder) - -* build: set soname in shared library (Ben Noordhuis) - -* build: make `make test` link against .a again (Ben Noordhuis) - -* build: only set soname on shared object builds (Timothy J. Fontaine) - -* build: convert predefined $PLATFORM to lower case (Elliot Saba) - -* test: fix process_title failing on linux (Miroslav Bajtoš) - -* test, sunos: disable process_title test (Miroslav Bajtoš) - -* test: add error logging to tty unit test (Miroslav Bajtoš) - - -2013.05.15, Version 0.10.7 (Stable), 028baaf0846b686a81e992cb2f2f5a9b8e841fcf - -Changes since version 0.10.6: - -* windows: kill child processes when the parent dies (Bert Belder) - - -2013.05.15, Version 0.10.6 (Stable), 11e6613e6260d95c8cf11bf89a2759c24649319a - -Changes since version 0.10.5: - -* stream: fix osx select hack (Fedor Indutny) - -* stream: fix small nit in select hack, add test (Fedor Indutny) - -* build: link with libkvm on openbsd (Ben Noordhuis) - -* stream: use harder sync restrictions for osx-hack (Fedor Indutny) - -* unix: fix EMFILE error handling (Ben Noordhuis) - -* darwin: fix unnecessary include headers (Daisuke Murase) - -* darwin: rename darwin-getproctitle.m (Ben Noordhuis) - -* build: convert predefined $PLATFORM to lower case (Elliot Saba) - -* build: set soname in shared library (Ben Noordhuis) - -* build: make `make test` link against .a again (Ben Noordhuis) - -* darwin: fix ios build, don't require ApplicationServices (Ben Noordhuis) - -* build: only set soname on shared object builds (Timothy J. Fontaine) - - -2013.05.11, Version 0.11.2 (Unstable), 3fba0bf65f091b91a9760530c05c6339c658d88b - -Changes since version 0.11.1: - -* darwin: look up file path with F_GETPATH (Ben Noordhuis) - -* unix, windows: add uv_has_ref() function (Saúl Ibarra Corretgé) - -* build: avoid double / in paths for dtrace (Timothy J. Fontaine) - -* unix: remove src/unix/cygwin.c (Ben Noordhuis) - -* windows: deal with the fact that GetTickCount might lag (Bert Belder) - -* unix: silence STATIC_ASSERT compiler warnings (Ben Noordhuis) - -* linux: don't use fopen() in uv_resident_set_memory() (Ben Noordhuis) - - -2013.04.24, Version 0.10.5 (Stable), 6595a7732c52eb4f8e57c88655f72997a8567a67 - -Changes since version 0.10.4: - -* unix: silence STATIC_ASSERT compiler warnings (Ben Noordhuis) - -* windows: make timers handle large timeouts (Miroslav Bajtoš) - -* windows: remove superfluous assert statement (Bert Belder) - -* unix: silence STATIC_ASSERT compiler warnings (Ben Noordhuis) - -* linux: don't use fopen() in uv_resident_set_memory() (Ben Noordhuis) - - -2013.04.12, Version 0.10.4 (Stable), 85827e26403ac6dfa331af8ec9916ea7e27bd833 - -Changes since version 0.10.3: - -* include: update uv_backend_fd() documentation (Ben Noordhuis) - -* unix: include uv.h in src/version.c (Ben Noordhuis) - -* unix: don't write more than IOV_MAX iovecs (Fedor Indutny) - -* mingw-w64: don't call _set_invalid_parameter_handler (Nils Maier) - -* build: gyp disable thin archives (Timothy J. Fontaine) - -* sunos: re-export entire library when static (Timothy J. Fontaine) - -* unix: dtrace probes for tick-start and tick-stop (Timothy J. Fontaine) - -* windows: fix memory leak in fs__sendfile (Shannen Saez) - -* windows: remove double initialization in uv_tty_init (Shannen Saez) - -* build: fix dtrace-enabled out of tree build (Ben Noordhuis) - -* build: squelch -Wdollar-in-identifier-extension warnings (Ben Noordhuis) - -* inet: snprintf returns int, not size_t (Brian White) - -* win: refactor uv_cpu_info (Bert Belder) - -* build: add support for Visual Studio 2012 (Nicholas Vavilov) - -* build: -Wno-dollar-in-identifier-extension is clang only (Ben Noordhuis) - - -2013.04.11, Version 0.11.1 (Unstable), 5c10e82ae0bc99eff86d4b9baff1f1aa0bf84c0a - -This is the first versioned release from the current unstable libuv branch. - -Changes since Node.js v0.11.0: - -* all platforms: nanosecond resolution support for uv_fs_[fl]stat (Timothy J. - Fontaine) - -* all platforms: add netmask to uv_interface_address (Ben Kelly) - -* unix: make sure the `status` parameter passed to the `uv_getaddrinfo` is 0 or - -1 (Ben Noordhuis) - -* unix: limit the number of iovecs written in a single `writev` syscall to - IOV_MAX (Fedor Indutny) - -* unix: add dtrace probes for tick-start and tick-stop (Timothy J. Fontaine) - -* mingw-w64: don't call _set_invalid_parameter_handler (Nils Maier) - -* windows: fix memory leak in fs__sendfile (Shannen Saez) - -* windows: fix edge case bugs in uv_cpu_info (Bert Belder) - -* include: no longer ship with / include ngx-queue.h (Ben Noordhuis) - -* include: remove UV_VERSION_* macros from uv.h (Ben Noordhuis) - -* documentation updates (Kristian Evensen, Ben Kelly, Ben Noordhuis) - -* build: fix dtrace-enabled builds (Ben Noordhuis, Timothy J. Fontaine) - -* build: gyp disable thin archives (Timothy J. Fontaine) - -* build: add support for Visual Studio 2012 (Nicholas Vavilov) - - -2013.03.28, Version 0.10.3 (Stable), 31ebe23973dd98fd8a24c042b606f37a794e99d0 - -Changes since version 0.10.2: - -* include: remove extraneous const from uv_version() (Ben Noordhuis) - -* doc: update README, replace `OS` by `PLATFORM` (Ben Noordhuis) - -* build: simplify .buildstamp rule (Ben Noordhuis) - -* build: disable -Wstrict-aliasing on darwin (Ben Noordhuis) - -* darwin: don't select(&exceptfds) in fallback path (Ben Noordhuis) - -* unix: don't clear flags after closing UDP handle (Saúl Ibarra Corretgé) - - -2013.03.25, Version 0.10.2 (Stable), 0f36a00568f3e7608f97f6c6cdb081f4800a50c9 - -This is the first officially versioned release of libuv. Starting now -libuv will make releases independently of Node.js. - -Changes since Node.js v0.10.0: - -* test: add tap output for windows (Timothy J. Fontaine) - -* unix: fix uv_tcp_simultaneous_accepts() logic (Ben Noordhuis) - -* include: bump UV_VERSION_MINOR (Ben Noordhuis) - -* unix: improve uv_guess_handle() implementation (Ben Noordhuis) - -* stream: run try_select only for pipes and ttys (Fedor Indutny) - -Changes since Node.js v0.10.1: - -* build: rename OS to PLATFORM (Ben Noordhuis) - -* unix: make uv_timer_init() initialize repeat (Brian Mazza) - -* unix: make timers handle large timeouts (Ben Noordhuis) - -* build: add OBJC makefile var (Ben Noordhuis) - -* Add `uv_version()` and `uv_version_string()` APIs (Bert Belder) diff --git a/libuv/LICENSE b/libuv/LICENSE deleted file mode 100644 index 28f1733..0000000 --- a/libuv/LICENSE +++ /dev/null @@ -1,70 +0,0 @@ -libuv is licensed for use as follows: - -==== -Copyright (c) 2015-present libuv project contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -==== - -This license applies to parts of libuv originating from the -https://github.com/joyent/libuv repository: - -==== - -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - -==== - -This license applies to all parts of libuv that are not externally -maintained libraries. - -The externally maintained libraries used by libuv are: - - - tree.h (from FreeBSD), copyright Niels Provos. Two clause BSD license. - - - inet_pton and inet_ntop implementations, contained in src/inet.c, are - copyright the Internet Systems Consortium, Inc., and licensed under the ISC - license. - - - stdint-msvc2008.h (from msinttypes), copyright Alexander Chemeris. Three - clause BSD license. - - - pthread-fixes.c, copyright Google Inc. and Sony Mobile Communications AB. - Three clause BSD license. - - - android-ifaddrs.h, android-ifaddrs.c, copyright Berkeley Software Design - Inc, Kenneth MacKay and Emergya (Cloud4all, FP7/2007-2013, grant agreement - n° 289016). Three clause BSD license. diff --git a/libuv/LICENSE-docs b/libuv/LICENSE-docs deleted file mode 100644 index 53883b1..0000000 --- a/libuv/LICENSE-docs +++ /dev/null @@ -1,396 +0,0 @@ -Attribution 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More_considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution 4.0 International Public License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution 4.0 International Public License ("Public License"). To the -extent this Public License may be interpreted as a contract, You are -granted the Licensed Rights in consideration of Your acceptance of -these terms and conditions, and the Licensor grants You such rights in -consideration of benefits the Licensor receives from making the -Licensed Material available under these terms and conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - d. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - e. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - f. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - g. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - h. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - i. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - j. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - k. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce, reproduce, and Share Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - 4. If You Share Adapted Material You produce, the Adapter's - License You apply must not prevent recipients of the Adapted - Material from complying with this Public License. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material; and - - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - - -======================================================================= - -Creative Commons is not a party to its public -licenses. Notwithstanding, Creative Commons may elect to apply one of -its public licenses to material it publishes and in those instances -will be considered the “Licensor.” The text of the Creative Commons -public licenses is dedicated to the public domain under the CC0 Public -Domain Dedication. Except for the limited purpose of indicating that -material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the -public licenses. - -Creative Commons may be contacted at creativecommons.org. - diff --git a/libuv/LINKS.md b/libuv/LINKS.md deleted file mode 100644 index b8204e5..0000000 --- a/libuv/LINKS.md +++ /dev/null @@ -1,101 +0,0 @@ -### Apps / VM -* [BIND 9](https://bind.isc.org/): DNS software system including an authoritative server, a recursive resolver and related utilities. -* [cjdns](https://github.com/cjdelisle/cjdns): Encrypted self-configuring network/VPN routing engine -* [clearskies_core](https://github.com/larroy/clearskies_core): Clearskies file synchronization program. (C++11) -* [CMake](https://cmake.org) open-source, cross-platform family of tools designed to build, test and package software -* [Coherence](https://github.com/liesware/coherence/): Cryptographic server for modern web apps. -* [DPS-For-IoT](https://github.com/intel/dps-for-iot/wiki): Fully distributed publish/subscribe protocol. -* [HashLink](https://github.com/HaxeFoundation/hashlink): Haxe run-time with libuv support included. -* [Haywire](https://github.com/kellabyte/Haywire): Asynchronous HTTP server. -* [H2O](https://github.com/h2o/h2o): An optimized HTTP server with support for HTTP/1.x and HTTP/2. -* [Igropyr](https://github.com/guenchi/Igropyr): a async Scheme http server base on libuv. -* [Julia](http://julialang.org/): Scientific computing programming language -* [Kestrel](https://github.com/aspnet/AspNetCore/tree/master/src/Servers/Kestrel): web server (C# + libuv + [ASP.NET Core](http://github.com/aspnet)) -* [Knot DNS Resolver](https://www.knot-resolver.cz/): A minimalistic DNS caching resolver -* [Lever](http://leverlanguage.com): runtime, libuv at the 0.9.0 release -* [libnode](https://github.com/plenluno/libnode): C++ implementation of Node.js -* [libstorj](https://github.com/Storj/libstorj): Library for interacting with Storj network -* [libuv_message_framing](https://github.com/litesync/libuv_message_framing) Message-based communication for libuv -* [luaw](https://github.com/raksoras/luaw): Lua web server backed by libuv -* [Luvit](http://luvit.io): Node.JS for the Lua Inventor -* [mo](https://github.com/wehu/mo): Scheme (guile) + libuv runtime -* [MoarVM](https://github.com/MoarVM/MoarVM): a VM for [Rakudo](http://rakudo.org/) [Raku](http://raku.org) -* [Mysocks](https://github.com/zhou0/mysocks): a cross-platform [Shadowsocks](https://shadowsocks.org) client -* [mediasoup](http://mediasoup.org): Powerful WebRTC SFU for Node.js -* [Neovim](https://neovim.io/): A major refactor of Vim. -* [node9](https://github.com/jvburnes/node9): A portable, hybrid, distributed OS based on Inferno, LuaJIT and Libuv -* [node.js](http://www.nodejs.org/): Javascript (using Google's V8) + libuv -* [node.native](https://github.com/d5/node.native): node.js-like API for C++11 -* [nodeuv](https://github.com/nodeuv): An organization with several c++ wrappers for libs which are used in node.js. -* [phastlight](https://github.com/phastlight/phastlight): Command line tool and web server written in PHP 5.3+ inspired by Node.js -* [pilight](https://www.pilight.org/): home automation ("domotica") -* [pixie](https://github.com/pixie-lang/pixie): clojure-inspired lisp with a tracing JIT -* [potion](https://github.com/perl11/potion)/[p2](https://github.com/perl11/p2): runtime -* [racer](https://libraries.io/rubygems/racer): Ruby web server written as an C extension -* [spider-gazelle](https://github.com/cotag/spider-gazelle): Ruby web server using libuv bindings -* [Suave](http://suave.io/): A simple web development F# library providing a lightweight web server and a set of combinators to manipulate route flow and task composition -* [Swish](https://github.com/becls/swish/): Concurrency engine with Erlang-like concepts. Includes a web server. -* [Trevi](https://github.com/Yoseob/Trevi): A powerful Swift Web Application Server Framework Project -* [Urbit](http://urbit.org): runtime -* [uv_callback](https://github.com/litesync/uv_callback) libuv thread communication -* [uvloop](https://github.com/MagicStack/uvloop): Ultra fast implementation of python's asyncio event loop on top of libuv -* [Wren CLI](https://github.com/wren-lang/wren-cli): For io, process, scheduler and timer modules - -### Other -* [libtuv](https://github.com/Samsung/libtuv): libuv fork for IoT and embedded systems - -### Bindings -* [Ring](http://ring-lang.net) - * [RingLibuv](http://ring-lang.sourceforge.net/doc1.7/libuv.html) -* Ruby - * [libuv](https://github.com/cotag/libuv) - * [uvrb](https://github.com/avalanche123/uvrb) - * [ruv](https://github.com/aq1018/ruv) - * [rbuv](https://github.com/rbuv/rbuv) - * [mruby-uv](https://github.com/mattn/mruby-uv): mruby binding -* Lua - * [luv](https://github.com/creationix/luv) - * [lev](https://github.com/connectFree/lev) - * [lluv](https://github.com/moteus/lua-lluv) -* C++11 - * [uvpp](https://github.com/larroy/uvpp) - Not complete, exposes very few aspects of `libuv` -* C++17 - * [uvw](https://github.com/skypjack/uvw) - Header-only, event based, tiny and easy to use *libuv* wrapper in modern C++. -* Python - * [Pyuv](https://github.com/saghul/pyuv) - * [uvloop](https://github.com/MagicStack/uvloop) - Ultra fast asyncio event loop. - * [gevent](http://www.gevent.org) - Coroutine-based concurrency library for Python -* C# - * [NetUV](http://github.com/StormHub/NetUV) - * [LibuvSharp](http://github.com/txdv/LibuvSharp) -* Perl 5 - * [UV](https://metacpan.org/pod/UV) -* [Raku](https://raku.org/) - * [MoarVM](https://github.com/MoarVM/MoarVM) [uses](http://6guts.wordpress.com/2013/05/31/moarvm-a-virtual-machine-for-nqp-and-rakudo/) libuv -* PHP - * [php-uv](https://github.com/bwoebi/php-uv) -* Go - * [go-uv](https://github.com/mattn/go-uv) -* OCaml - * [luv](https://github.com/aantron/luv) - * [uwt](https://github.com/fdopen/uwt) -* ooc - * [ooc-uv](https://github.com/nddrylliog/ooc-uv) -* dylan - * [uv-dylan](https://github.com/waywardmonkeys/uv-dylan) -* R - * [httpuv](https://github.com/rstudio/httpuv): HTTP and WebSocket server library for R - * [fs](https://fs.r-lib.org/): Cross-platform file system operations -* Java - * [libuv-java](https://java.net/projects/avatar-js/sources/libuv-java/show): Java bindings -* Nim - * [nimuv](https://github.com/2vg/nimuv): Nim bindings -* Lisp - * [cl-libuv](https://github.com/orthecreedence/cl-libuv) Common Lisp bindings - * [cl-async](https://github.com/orthecreedence/cl-async) Common Lisp async abstraction on top of cl-libuv -* [Céu](http://www.ceu-lang.org) - * [Céu-libuv](https://github.com/fsantanna/ceu-libuv) -* Delphi - * [node.pas](https://github.com/vovach777/node.pas) NodeJS-like ecosystem -* Haskell - * [Z.Haskell](https://z.haskell.world) diff --git a/libuv/MAINTAINERS.md b/libuv/MAINTAINERS.md deleted file mode 100644 index fb7e5ef..0000000 --- a/libuv/MAINTAINERS.md +++ /dev/null @@ -1,51 +0,0 @@ - -# Project Maintainers - -libuv is currently managed by the following individuals: - -* **Anna Henningsen** ([@addaleax](https://github.com/addaleax)) -* **Bartosz Sosnowski** ([@bzoz](https://github.com/bzoz)) -* **Ben Noordhuis** ([@bnoordhuis](https://github.com/bnoordhuis)) - - GPG key: D77B 1E34 243F BAF0 5F8E 9CC3 4F55 C8C8 46AB 89B9 (pubkey-bnoordhuis) -* **Bert Belder** ([@piscisaureus](https://github.com/piscisaureus)) -* **Colin Ihrig** ([@cjihrig](https://github.com/cjihrig)) - - GPG key: 94AE 3667 5C46 4D64 BAFA 68DD 7434 390B DBE9 B9C5 (pubkey-cjihrig) - - GPG key: 5735 3E0D BDAA A7E8 39B6 6A1A FF47 D5E4 AD8B 4FDC (pubkey-cjihrig-kb) -* **Fedor Indutny** ([@indutny](https://github.com/indutny)) - - GPG key: AF2E EA41 EC34 47BF DD86 FED9 D706 3CCE 19B7 E890 (pubkey-indutny) -* **Imran Iqbal** ([@imran-iq](https://github.com/imran-iq)) - - GPG key: 9DFE AA5F 481B BF77 2D90 03CE D592 4925 2F8E C41A (pubkey-iwuzhere) -* **Jameson Nash** ([@vtjnash](https://github.com/vtjnash)) - - GPG key: AEAD 0A4B 6867 6775 1A0E 4AEF 34A2 5FB1 2824 6514 (pubkey-vtjnash) -* **John Barboza** ([@jbarz](https://github.com/jbarz)) -* **Kaoru Takanashi** ([@erw7](https://github.com/erw7)) - - GPG Key: 5804 F999 8A92 2AFB A398 47A0 7183 5090 6134 887F (pubkey-erw7) -* **Richard Lau** ([@richardlau](https://github.com/richardlau)) - - GPG key: C82F A3AE 1CBE DC6B E46B 9360 C43C EC45 C17A B93C (pubkey-richardlau) -* **Santiago Gimeno** ([@santigimeno](https://github.com/santigimeno)) - - GPG key: 612F 0EAD 9401 6223 79DF 4402 F28C 3C8D A33C 03BE (pubkey-santigimeno) -* **Saúl Ibarra Corretgé** ([@saghul](https://github.com/saghul)) - - GPG key: FDF5 1936 4458 319F A823 3DC9 410E 5553 AE9B C059 (pubkey-saghul) - -## Storing a maintainer key in Git - -It's quite handy to store a maintainer's signature as a git blob, and have -that object tagged and signed with such key. - -Export your public key: - - $ gpg --armor --export saghul@gmail.com > saghul.asc - -Store it as a blob on the repo: - - $ git hash-object -w saghul.asc - -The previous command returns a hash, copy it. For the sake of this explanation, -we'll assume it's 'abcd1234'. Storing the blob in git is not enough, it could -be garbage collected since nothing references it, so we'll create a tag for it: - - $ git tag -s pubkey-saghul abcd1234 - -Commit the changes and push: - - $ git push origin pubkey-saghul diff --git a/libuv/Makefile.am b/libuv/Makefile.am deleted file mode 100644 index 5830003..0000000 --- a/libuv/Makefile.am +++ /dev/null @@ -1,549 +0,0 @@ -# Copyright (c) 2013, Ben Noordhuis -# -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -ACLOCAL_AMFLAGS = -I m4 - -AM_CPPFLAGS = -I$(top_srcdir)/include \ - -I$(top_srcdir)/src - -include_HEADERS=include/uv.h - -uvincludedir = $(includedir)/uv -uvinclude_HEADERS = include/uv/errno.h \ - include/uv/threadpool.h \ - include/uv/version.h - -CLEANFILES = - -lib_LTLIBRARIES = libuv.la -libuv_la_CFLAGS = @CFLAGS@ -libuv_la_LDFLAGS = -no-undefined -version-info 1:0:0 -libuv_la_SOURCES = src/fs-poll.c \ - src/heap-inl.h \ - src/idna.c \ - src/idna.h \ - src/inet.c \ - src/queue.h \ - src/random.c \ - src/strscpy.c \ - src/strscpy.h \ - src/threadpool.c \ - src/timer.c \ - src/uv-data-getter-setters.c \ - src/uv-common.c \ - src/uv-common.h \ - src/version.c - -if SUNOS -# Can't be turned into a CC_CHECK_CFLAGS in configure.ac, it makes compilers -# on other platforms complain that the argument is unused during compilation. -libuv_la_CFLAGS += -pthreads -endif - -if WINNT - -uvinclude_HEADERS += include/uv/win.h include/uv/tree.h -AM_CPPFLAGS += -I$(top_srcdir)/src/win \ - -DWIN32_LEAN_AND_MEAN \ - -D_WIN32_WINNT=0x0602 -libuv_la_SOURCES += src/win/async.c \ - src/win/atomicops-inl.h \ - src/win/core.c \ - src/win/detect-wakeup.c \ - src/win/dl.c \ - src/win/error.c \ - src/win/fs-event.c \ - src/win/fs.c \ - src/win/getaddrinfo.c \ - src/win/getnameinfo.c \ - src/win/handle.c \ - src/win/handle-inl.h \ - src/win/internal.h \ - src/win/loop-watcher.c \ - src/win/pipe.c \ - src/win/poll.c \ - src/win/process-stdio.c \ - src/win/process.c \ - src/win/req-inl.h \ - src/win/signal.c \ - src/win/stream.c \ - src/win/stream-inl.h \ - src/win/tcp.c \ - src/win/thread.c \ - src/win/tty.c \ - src/win/udp.c \ - src/win/util.c \ - src/win/winapi.c \ - src/win/winapi.h \ - src/win/winsock.c \ - src/win/winsock.h - -else # WINNT - -uvinclude_HEADERS += include/uv/unix.h -AM_CPPFLAGS += -I$(top_srcdir)/src/unix -libuv_la_SOURCES += src/unix/async.c \ - src/unix/atomic-ops.h \ - src/unix/core.c \ - src/unix/dl.c \ - src/unix/fs.c \ - src/unix/getaddrinfo.c \ - src/unix/getnameinfo.c \ - src/unix/internal.h \ - src/unix/loop-watcher.c \ - src/unix/loop.c \ - src/unix/pipe.c \ - src/unix/poll.c \ - src/unix/process.c \ - src/unix/random-devurandom.c \ - src/unix/signal.c \ - src/unix/spinlock.h \ - src/unix/stream.c \ - src/unix/tcp.c \ - src/unix/thread.c \ - src/unix/tty.c \ - src/unix/udp.c - -endif # WINNT - -EXTRA_DIST = test/fixtures/empty_file \ - test/fixtures/load_error.node \ - test/fixtures/lorem_ipsum.txt \ - include \ - docs \ - img \ - CONTRIBUTING.md \ - LICENSE \ - README.md - - - -TESTS = test/run-tests -check_PROGRAMS = test/run-tests -test_run_tests_CFLAGS = - -if SUNOS -# Can't be turned into a CC_CHECK_CFLAGS in configure.ac, it makes compilers -# on other platforms complain that the argument is unused during compilation. -test_run_tests_CFLAGS += -pthreads -endif - -test_run_tests_LDFLAGS = -test_run_tests_SOURCES = test/blackhole-server.c \ - test/dns-server.c \ - test/echo-server.c \ - test/run-tests.c \ - test/runner.c \ - test/runner.h \ - test/task.h \ - test/test-active.c \ - test/test-async.c \ - test/test-async-null-cb.c \ - test/test-barrier.c \ - test/test-callback-order.c \ - test/test-callback-stack.c \ - test/test-close-fd.c \ - test/test-close-order.c \ - test/test-condvar.c \ - test/test-connect-unspecified.c \ - test/test-connection-fail.c \ - test/test-cwd-and-chdir.c \ - test/test-default-loop-close.c \ - test/test-delayed-accept.c \ - test/test-dlerror.c \ - test/test-eintr-handling.c \ - test/test-embed.c \ - test/test-emfile.c \ - test/test-env-vars.c \ - test/test-error.c \ - test/test-fail-always.c \ - test/test-fs-copyfile.c \ - test/test-fs-event.c \ - test/test-fs-poll.c \ - test/test-fs.c \ - test/test-fs-readdir.c \ - test/test-fs-fd-hash.c \ - test/test-fs-open-flags.c \ - test/test-fork.c \ - test/test-getters-setters.c \ - test/test-get-currentexe.c \ - test/test-get-loadavg.c \ - test/test-get-memory.c \ - test/test-get-passwd.c \ - test/test-getaddrinfo.c \ - test/test-gethostname.c \ - test/test-getnameinfo.c \ - test/test-getsockname.c \ - test/test-gettimeofday.c \ - test/test-handle-fileno.c \ - test/test-homedir.c \ - test/test-hrtime.c \ - test/test-idle.c \ - test/test-idna.c \ - test/test-ip4-addr.c \ - test/test-ip6-addr.c \ - test/test-ipc-heavy-traffic-deadlock-bug.c \ - test/test-ipc-send-recv.c \ - test/test-ipc.c \ - test/test-list.h \ - test/test-loop-handles.c \ - test/test-loop-alive.c \ - test/test-loop-close.c \ - test/test-loop-stop.c \ - test/test-loop-time.c \ - test/test-loop-configure.c \ - test/test-metrics.c \ - test/test-multiple-listen.c \ - test/test-mutexes.c \ - test/test-not-readable-nor-writable-on-read-error.c \ - test/test-not-readable-on-eof.c \ - test/test-not-writable-after-shutdown.c \ - test/test-osx-select.c \ - test/test-pass-always.c \ - test/test-ping-pong.c \ - test/test-pipe-bind-error.c \ - test/test-pipe-connect-error.c \ - test/test-pipe-connect-multiple.c \ - test/test-pipe-connect-prepare.c \ - test/test-pipe-getsockname.c \ - test/test-pipe-pending-instances.c \ - test/test-pipe-sendmsg.c \ - test/test-pipe-server-close.c \ - test/test-pipe-close-stdout-read-stdin.c \ - test/test-pipe-set-non-blocking.c \ - test/test-pipe-set-fchmod.c \ - test/test-platform-output.c \ - test/test-poll.c \ - test/test-poll-close.c \ - test/test-poll-close-doesnt-corrupt-stack.c \ - test/test-poll-closesocket.c \ - test/test-poll-multiple-handles.c \ - test/test-poll-oob.c \ - test/test-process-priority.c \ - test/test-process-title.c \ - test/test-process-title-threadsafe.c \ - test/test-queue-foreach-delete.c \ - test/test-random.c \ - test/test-ref.c \ - test/test-run-nowait.c \ - test/test-run-once.c \ - test/test-semaphore.c \ - test/test-shutdown-close.c \ - test/test-shutdown-eof.c \ - test/test-shutdown-simultaneous.c \ - test/test-shutdown-twice.c \ - test/test-signal-multiple-loops.c \ - test/test-signal-pending-on-close.c \ - test/test-signal.c \ - test/test-socket-buffer-size.c \ - test/test-spawn.c \ - test/test-stdio-over-pipes.c \ - test/test-strscpy.c \ - test/test-tcp-alloc-cb-fail.c \ - test/test-tcp-bind-error.c \ - test/test-tcp-bind6-error.c \ - test/test-tcp-close-accept.c \ - test/test-tcp-close-while-connecting.c \ - test/test-tcp-close.c \ - test/test-tcp-close-reset.c \ - test/test-tcp-create-socket-early.c \ - test/test-tcp-connect-error-after-write.c \ - test/test-tcp-connect-error.c \ - test/test-tcp-connect-timeout.c \ - test/test-tcp-connect6-error.c \ - test/test-tcp-flags.c \ - test/test-tcp-open.c \ - test/test-tcp-read-stop.c \ - test/test-tcp-read-stop-start.c \ - test/test-tcp-shutdown-after-write.c \ - test/test-tcp-unexpected-read.c \ - test/test-tcp-oob.c \ - test/test-tcp-write-to-half-open-connection.c \ - test/test-tcp-write-after-connect.c \ - test/test-tcp-writealot.c \ - test/test-tcp-write-fail.c \ - test/test-tcp-try-write.c \ - test/test-tcp-try-write-error.c \ - test/test-tcp-write-queue-order.c \ - test/test-test-macros.c \ - test/test-thread-equal.c \ - test/test-thread.c \ - test/test-threadpool-cancel.c \ - test/test-threadpool.c \ - test/test-timer-again.c \ - test/test-timer-from-check.c \ - test/test-timer.c \ - test/test-tmpdir.c \ - test/test-tty-duplicate-key.c \ - test/test-tty-escape-sequence-processing.c \ - test/test-tty.c \ - test/test-udp-alloc-cb-fail.c \ - test/test-udp-bind.c \ - test/test-udp-connect.c \ - test/test-udp-create-socket-early.c \ - test/test-udp-dgram-too-big.c \ - test/test-udp-ipv6.c \ - test/test-udp-mmsg.c \ - test/test-udp-multicast-interface.c \ - test/test-udp-multicast-interface6.c \ - test/test-udp-multicast-join.c \ - test/test-udp-multicast-join6.c \ - test/test-udp-multicast-ttl.c \ - test/test-udp-open.c \ - test/test-udp-options.c \ - test/test-udp-send-and-recv.c \ - test/test-udp-send-hang-loop.c \ - test/test-udp-send-immediate.c \ - test/test-udp-sendmmsg-error.c \ - test/test-udp-send-unreachable.c \ - test/test-udp-try-send.c \ - test/test-uname.c \ - test/test-walk-handles.c \ - test/test-watcher-cross-stop.c -test_run_tests_LDADD = libuv.la - -if WINNT -test_run_tests_SOURCES += test/runner-win.c \ - test/runner-win.h -else -test_run_tests_SOURCES += test/runner-unix.c \ - test/runner-unix.h -endif - -if AIX -test_run_tests_CFLAGS += -D_ALL_SOURCE \ - -D_XOPEN_SOURCE=500 \ - -D_LINUX_SOURCE_COMPAT -endif - -if OS400 -test_run_tests_CFLAGS += -D_ALL_SOURCE \ - -D_XOPEN_SOURCE=500 \ - -D_LINUX_SOURCE_COMPAT -endif - -if HAIKU -test_run_tests_CFLAGS += -D_BSD_SOURCE -endif - -if LINUX -test_run_tests_CFLAGS += -D_GNU_SOURCE -endif - -if SUNOS -test_run_tests_CFLAGS += -D__EXTENSIONS__ \ - -D_XOPEN_SOURCE=500 \ - -D_REENTRANT -endif - -if OS390 -test_run_tests_CFLAGS += -D_ISOC99_SOURCE \ - -D_UNIX03_THREADS \ - -D_UNIX03_SOURCE \ - -D_OPEN_SYS_IF_EXT=1 \ - -D_OPEN_SYS_SOCK_IPV6 \ - -D_OPEN_MSGQ_EXT \ - -D_XOPEN_SOURCE_EXTENDED \ - -D_ALL_SOURCE \ - -D_LARGE_TIME_API \ - -D_OPEN_SYS_FILE_EXT \ - -DPATH_MAX=255 \ - -qCHARS=signed \ - -qXPLINK \ - -qFLOAT=IEEE -endif - -if AIX -libuv_la_CFLAGS += -D_ALL_SOURCE \ - -D_XOPEN_SOURCE=500 \ - -D_LINUX_SOURCE_COMPAT \ - -D_THREAD_SAFE \ - -DHAVE_SYS_AHAFS_EVPRODS_H -uvinclude_HEADERS += include/uv/aix.h -libuv_la_SOURCES += src/unix/aix.c src/unix/aix-common.c -endif - -if OS400 -libuv_la_CFLAGS += -D_ALL_SOURCE \ - -D_XOPEN_SOURCE=500 \ - -D_LINUX_SOURCE_COMPAT \ - -D_THREAD_SAFE -uvinclude_HEADERS += include/uv/posix.h -libuv_la_SOURCES += src/unix/aix-common.c \ - src/unix/ibmi.c \ - src/unix/posix-poll.c \ - src/unix/no-fsevents.c -endif - -if ANDROID -uvinclude_HEADERS += include/uv/android-ifaddrs.h -libuv_la_CFLAGS += -D_GNU_SOURCE -libuv_la_SOURCES += src/unix/android-ifaddrs.c \ - src/unix/pthread-fixes.c \ - src/unix/random-getrandom.c \ - src/unix/random-sysctl-linux.c \ - src/unix/epoll.c -endif - -if CYGWIN -uvinclude_HEADERS += include/uv/posix.h -libuv_la_CFLAGS += -D_GNU_SOURCE -libuv_la_SOURCES += src/unix/cygwin.c \ - src/unix/bsd-ifaddrs.c \ - src/unix/no-fsevents.c \ - src/unix/no-proctitle.c \ - src/unix/posix-hrtime.c \ - src/unix/posix-poll.c \ - src/unix/procfs-exepath.c \ - src/unix/sysinfo-loadavg.c \ - src/unix/sysinfo-memory.c -endif - -if DARWIN -uvinclude_HEADERS += include/uv/darwin.h -libuv_la_CFLAGS += -D_DARWIN_USE_64_BIT_INODE=1 -libuv_la_CFLAGS += -D_DARWIN_UNLIMITED_SELECT=1 -libuv_la_SOURCES += src/unix/bsd-ifaddrs.c \ - src/unix/darwin-proctitle.c \ - src/unix/darwin-stub.h \ - src/unix/darwin.c \ - src/unix/fsevents.c \ - src/unix/kqueue.c \ - src/unix/proctitle.c \ - src/unix/random-getentropy.c -test_run_tests_LDFLAGS += -lutil -endif - -if DRAGONFLY -uvinclude_HEADERS += include/uv/bsd.h -libuv_la_SOURCES += src/unix/bsd-ifaddrs.c \ - src/unix/bsd-proctitle.c \ - src/unix/freebsd.c \ - src/unix/kqueue.c \ - src/unix/posix-hrtime.c -test_run_tests_LDFLAGS += -lutil -endif - -if FREEBSD -uvinclude_HEADERS += include/uv/bsd.h -libuv_la_SOURCES += src/unix/bsd-ifaddrs.c \ - src/unix/bsd-proctitle.c \ - src/unix/freebsd.c \ - src/unix/kqueue.c \ - src/unix/posix-hrtime.c \ - src/unix/random-getrandom.c -test_run_tests_LDFLAGS += -lutil -endif - -if HAIKU -uvinclude_HEADERS += include/uv/posix.h -libuv_la_CFLAGS += -D_BSD_SOURCE -libuv_la_SOURCES += src/unix/bsd-ifaddrs.c \ - src/unix/haiku.c \ - src/unix/no-fsevents.c \ - src/unix/no-proctitle.c \ - src/unix/posix-hrtime.c \ - src/unix/posix-poll.c -endif - -if HURD -uvinclude_HEADERS += include/uv/posix.h -libuv_la_SOURCES += src/unix/no-fsevents.c \ - src/unix/posix-hrtime.c \ - src/unix/posix-poll.c -endif - -if LINUX -uvinclude_HEADERS += include/uv/linux.h -libuv_la_CFLAGS += -D_GNU_SOURCE -libuv_la_SOURCES += src/unix/linux-core.c \ - src/unix/linux-inotify.c \ - src/unix/linux-syscalls.c \ - src/unix/linux-syscalls.h \ - src/unix/procfs-exepath.c \ - src/unix/proctitle.c \ - src/unix/random-getrandom.c \ - src/unix/random-sysctl-linux.c \ - src/unix/epoll.c -test_run_tests_LDFLAGS += -lutil -endif - -if MSYS -libuv_la_CFLAGS += -D_GNU_SOURCE -libuv_la_SOURCES += src/unix/cygwin.c \ - src/unix/bsd-ifaddrs.c \ - src/unix/no-fsevents.c \ - src/unix/no-proctitle.c \ - src/unix/posix-hrtime.c \ - src/unix/posix-poll.c \ - src/unix/procfs-exepath.c \ - src/unix/sysinfo-loadavg.c \ - src/unix/sysinfo-memory.c -endif - -if NETBSD -uvinclude_HEADERS += include/uv/bsd.h -libuv_la_SOURCES += src/unix/bsd-ifaddrs.c \ - src/unix/bsd-proctitle.c \ - src/unix/kqueue.c \ - src/unix/netbsd.c \ - src/unix/posix-hrtime.c -test_run_tests_LDFLAGS += -lutil -endif - -if OPENBSD -uvinclude_HEADERS += include/uv/bsd.h -libuv_la_SOURCES += src/unix/bsd-ifaddrs.c \ - src/unix/bsd-proctitle.c \ - src/unix/kqueue.c \ - src/unix/openbsd.c \ - src/unix/posix-hrtime.c \ - src/unix/random-getentropy.c -test_run_tests_LDFLAGS += -lutil -endif - -if SUNOS -uvinclude_HEADERS += include/uv/sunos.h -libuv_la_CFLAGS += -D__EXTENSIONS__ \ - -D_XOPEN_SOURCE=500 \ - -D_REENTRANT -libuv_la_SOURCES += src/unix/no-proctitle.c \ - src/unix/sunos.c -endif - -if OS390 -libuv_la_CFLAGS += -D_UNIX03_THREADS \ - -D_UNIX03_SOURCE \ - -D_OPEN_SYS_IF_EXT=1 \ - -D_OPEN_MSGQ_EXT \ - -D_XOPEN_SOURCE_EXTENDED \ - -D_ALL_SOURCE \ - -D_LARGE_TIME_API \ - -D_OPEN_SYS_SOCK_EXT3 \ - -D_OPEN_SYS_SOCK_IPV6 \ - -D_OPEN_SYS_FILE_EXT \ - -DUV_PLATFORM_SEM_T=int \ - -DPATH_MAX=255 \ - -qCHARS=signed \ - -qXPLINK \ - -qFLOAT=IEEE -libuv_la_LDFLAGS += -qXPLINK -libuv_la_SOURCES += src/unix/pthread-fixes.c \ - src/unix/os390.c \ - src/unix/os390-syscalls.c \ - src/unix/proctitle.c -endif - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = @PACKAGE_NAME@.pc diff --git a/libuv/README.md b/libuv/README.md deleted file mode 100644 index a9a8a9d..0000000 --- a/libuv/README.md +++ /dev/null @@ -1,333 +0,0 @@ -![libuv][libuv_banner] - -## Overview - -libuv is a multi-platform support library with a focus on asynchronous I/O. It -was primarily developed for use by [Node.js][], but it's also -used by [Luvit](http://luvit.io/), [Julia](http://julialang.org/), -[pyuv](https://github.com/saghul/pyuv), and [others](https://github.com/libuv/libuv/blob/v1.x/LINKS.md). - -## Feature highlights - - * Full-featured event loop backed by epoll, kqueue, IOCP, event ports. - - * Asynchronous TCP and UDP sockets - - * Asynchronous DNS resolution - - * Asynchronous file and file system operations - - * File system events - - * ANSI escape code controlled TTY - - * IPC with socket sharing, using Unix domain sockets or named pipes (Windows) - - * Child processes - - * Thread pool - - * Signal handling - - * High resolution clock - - * Threading and synchronization primitives - -## Versioning - -Starting with version 1.0.0 libuv follows the [semantic versioning](http://semver.org/) -scheme. The API change and backwards compatibility rules are those indicated by -SemVer. libuv will keep a stable ABI across major releases. - -The ABI/API changes can be tracked [here](http://abi-laboratory.pro/tracker/timeline/libuv/). - -## Licensing - -libuv is licensed under the MIT license. Check the [LICENSE file](LICENSE). -The documentation is licensed under the CC BY 4.0 license. Check the [LICENSE-docs file](LICENSE-docs). - -## Community - - * [Support](https://github.com/libuv/libuv/discussions) - * [Mailing list](http://groups.google.com/group/libuv) - -## Documentation - -### Official documentation - -Located in the docs/ subdirectory. It uses the [Sphinx](http://sphinx-doc.org/) -framework, which makes it possible to build the documentation in multiple -formats. - -Show different supported building options: - -```bash -$ make help -``` - -Build documentation as HTML: - -```bash -$ make html -``` - -Build documentation as HTML and live reload it when it changes (this requires -sphinx-autobuild to be installed and is only supported on Unix): - -```bash -$ make livehtml -``` - -Build documentation as man pages: - -```bash -$ make man -``` - -Build documentation as ePub: - -```bash -$ make epub -``` - -NOTE: Windows users need to use make.bat instead of plain 'make'. - -Documentation can be browsed online [here](http://docs.libuv.org). - -The [tests and benchmarks](https://github.com/libuv/libuv/tree/master/test) -also serve as API specification and usage examples. - -### Other resources - - * [LXJS 2012 talk](http://www.youtube.com/watch?v=nGn60vDSxQ4) - — High-level introductory talk about libuv. - * [libuv-dox](https://github.com/thlorenz/libuv-dox) - — Documenting types and methods of libuv, mostly by reading uv.h. - * [learnuv](https://github.com/thlorenz/learnuv) - — Learn uv for fun and profit, a self guided workshop to libuv. - -These resources are not handled by libuv maintainers and might be out of -date. Please verify it before opening new issues. - -## Downloading - -libuv can be downloaded either from the -[GitHub repository](https://github.com/libuv/libuv) -or from the [downloads site](http://dist.libuv.org/dist/). - -Before verifying the git tags or signature files, importing the relevant keys -is necessary. Key IDs are listed in the -[MAINTAINERS](https://github.com/libuv/libuv/blob/master/MAINTAINERS.md) -file, but are also available as git blob objects for easier use. - -Importing a key the usual way: - -```bash -$ gpg --keyserver pool.sks-keyservers.net --recv-keys AE9BC059 -``` - -Importing a key from a git blob object: - -```bash -$ git show pubkey-saghul | gpg --import -``` - -### Verifying releases - -Git tags are signed with the developer's key, they can be verified as follows: - -```bash -$ git verify-tag v1.6.1 -``` - -Starting with libuv 1.7.0, the tarballs stored in the -[downloads site](http://dist.libuv.org/dist/) are signed and an accompanying -signature file sit alongside each. Once both the release tarball and the -signature file are downloaded, the file can be verified as follows: - -```bash -$ gpg --verify libuv-1.7.0.tar.gz.sign -``` - -## Build Instructions - -For UNIX-like platforms, including macOS, there are two build methods: -autotools or [CMake][]. - -For Windows, [CMake][] is the only supported build method and has the -following prerequisites: - -
- -* One of: - * [Visual C++ Build Tools][] - * [Visual Studio 2015 Update 3][], all editions - including the Community edition (remember to select - "Common Tools for Visual C++ 2015" feature during installation). - * [Visual Studio 2017][], any edition (including the Build Tools SKU). - **Required Components:** "MSbuild", "VC++ 2017 v141 toolset" and one of the - Windows SDKs (10 or 8.1). -* Basic Unix tools required for some tests, - [Git for Windows][] includes Git Bash - and tools which can be included in the global `PATH`. - -
- -To build with autotools: - -```bash -$ sh autogen.sh -$ ./configure -$ make -$ make check -$ make install -``` - -To build with [CMake][]: - -```bash -$ mkdir -p build - -$ (cd build && cmake .. -DBUILD_TESTING=ON) # generate project with tests -$ cmake --build build # add `-j ` with cmake >= 3.12 - -# Run tests: -$ (cd build && ctest -C Debug --output-on-failure) - -# Or manually run tests: -$ build/uv_run_tests # shared library build -$ build/uv_run_tests_a # static library build -``` - -To cross-compile with [CMake][] (unsupported but generally works): - -```bash -$ cmake ../.. \ - -DCMAKE_SYSTEM_NAME=Windows \ - -DCMAKE_SYSTEM_VERSION=6.1 \ - -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc -``` - -### Install with Homebrew - -```bash -$ brew install --HEAD libuv -``` - -Note to OS X users: - -Make sure that you specify the architecture you wish to build for in the -"ARCHS" flag. You can specify more than one by delimiting with a space -(e.g. "x86_64 i386"). - -### Running tests - -Some tests are timing sensitive. Relaxing test timeouts may be necessary -on slow or overloaded machines: - -```bash -$ env UV_TEST_TIMEOUT_MULTIPLIER=2 build/uv_run_tests # 10s instead of 5s -``` - -#### Run one test - -The list of all tests is in `test/test-list.h`. - -This invocation will cause the test driver to fork and execute `TEST_NAME` in -a child process: - -```bash -$ build/uv_run_tests_a TEST_NAME -``` - -This invocation will cause the test driver to execute the test in -the same process: - -```bash -$ build/uv_run_tests_a TEST_NAME TEST_NAME -``` - -#### Debugging tools - -When running the test from within the test driver process -(`build/uv_run_tests_a TEST_NAME TEST_NAME`), tools like gdb and valgrind -work normally. - -When running the test from a child of the test driver process -(`build/uv_run_tests_a TEST_NAME`), use these tools in a fork-aware manner. - -##### Fork-aware gdb - -Use the [follow-fork-mode](https://sourceware.org/gdb/onlinedocs/gdb/Forks.html) setting: - -``` -$ gdb --args build/uv_run_tests_a TEST_NAME - -(gdb) set follow-fork-mode child -... -``` - -##### Fork-aware valgrind - -Use the `--trace-children=yes` parameter: - -```bash -$ valgrind --trace-children=yes -v --tool=memcheck --leak-check=full --track-origins=yes --leak-resolution=high --show-reachable=yes --log-file=memcheck-%p.log build/uv_run_tests_a TEST_NAME -``` - -### Running benchmarks - -See the section on running tests. -The benchmark driver is `./uv_run_benchmarks_a` and the benchmarks are -listed in `test/benchmark-list.h`. - -## Supported Platforms - -Check the [SUPPORTED_PLATFORMS file](SUPPORTED_PLATFORMS.md). - -### `-fno-strict-aliasing` - -It is recommended to turn on the `-fno-strict-aliasing` compiler flag in -projects that use libuv. The use of ad hoc "inheritance" in the libuv API -may not be safe in the presence of compiler optimizations that depend on -strict aliasing. - -MSVC does not have an equivalent flag but it also does not appear to need it -at the time of writing (December 2019.) - -### AIX Notes - -AIX compilation using IBM XL C/C++ requires version 12.1 or greater. - -AIX support for filesystem events requires the non-default IBM `bos.ahafs` -package to be installed. This package provides the AIX Event Infrastructure -that is detected by `autoconf`. -[IBM documentation](http://www.ibm.com/developerworks/aix/library/au-aix_event_infrastructure/) -describes the package in more detail. - -### z/OS Notes - -z/OS compilation requires [ZOSLIB](https://github.com/ibmruntimes/zoslib) to be installed. When building with [CMake][], use the flag `-DZOSLIB_DIR` to specify the path to [ZOSLIB](https://github.com/ibmruntimes/zoslib): - -```bash -$ (cd build && cmake .. -DBUILD_TESTING=ON -DZOSLIB_DIR=/path/to/zoslib) -$ cmake --build build -``` - -z/OS creates System V semaphores and message queues. These persist on the system -after the process terminates unless the event loop is closed. - -Use the `ipcrm` command to manually clear up System V resources. - -## Patches - -See the [guidelines for contributing][]. - -[CMake]: https://cmake.org/ -[node.js]: http://nodejs.org/ -[guidelines for contributing]: https://github.com/libuv/libuv/blob/master/CONTRIBUTING.md -[libuv_banner]: https://raw.githubusercontent.com/libuv/libuv/master/img/banner.png -[Visual C++ Build Tools]: https://visualstudio.microsoft.com/visual-cpp-build-tools/ -[Visual Studio 2015 Update 3]: https://www.visualstudio.com/vs/older-downloads/ -[Visual Studio 2017]: https://www.visualstudio.com/downloads/ -[Git for Windows]: http://git-scm.com/download/win diff --git a/libuv/SUPPORTED_PLATFORMS.md b/libuv/SUPPORTED_PLATFORMS.md deleted file mode 100644 index 30e0ea6..0000000 --- a/libuv/SUPPORTED_PLATFORMS.md +++ /dev/null @@ -1,69 +0,0 @@ -# Supported platforms - -| System | Support type | Supported versions | Notes | -|---|---|---|---| -| GNU/Linux | Tier 1 | Linux >= 2.6.32 with glibc >= 2.12 | | -| macOS | Tier 1 | macOS >= 10.7 | | -| Windows | Tier 1 | >= Windows 8 | VS 2015 and later are supported | -| FreeBSD | Tier 1 | >= 10 | | -| AIX | Tier 2 | >= 6 | Maintainers: @libuv/aix | -| IBM i | Tier 2 | >= IBM i 7.2 | Maintainers: @libuv/ibmi | -| z/OS | Tier 2 | >= V2R2 | Maintainers: @libuv/zos | -| Linux with musl | Tier 2 | musl >= 1.0 | | -| SmartOS | Tier 2 | >= 14.4 | Maintainers: @libuv/smartos | -| Android | Tier 3 | NDK >= r15b | | -| MinGW | Tier 3 | MinGW32 and MinGW-w64 | | -| SunOS | Tier 3 | Solaris 121 and later | | -| Other | Tier 3 | N/A | | - -## Support types - -* **Tier 1**: Officially supported and tested with CI. Any contributed patch - MUST NOT break such systems. These are supported by @libuv/collaborators. - -* **Tier 2**: Officially supported, but not necessarily tested with CI. These - systems are maintained to the best of @libuv/collaborators ability, - without being a top priority. - -* **Tier 3**: Community maintained. These systems may inadvertently break and the - community and interested parties are expected to help with the maintenance. - -## Adding support for a new platform - -**IMPORTANT**: Before attempting to add support for a new platform please open -an issue about it for discussion. - -### Unix - -I/O handling is abstracted by an internal `uv__io_t` handle. The new platform -will need to implement some of the functions, the prototypes are in -``src/unix/internal.h``. - -If the new platform requires extra fields for any handle structure, create a -new include file in ``include/`` with the name ``uv-theplatform.h`` and add -the appropriate defines there. - -All functionality related to the new platform must be implemented in its own -file inside ``src/unix/`` unless it's already done in a common file, in which -case adding an `ifdef` is fine. - -Two build systems are supported: autotools and cmake. Ideally both need to be -supported, but if one of the two does not support the new platform it can be -left out. - -### Windows - -Windows is treated as a single platform, so adding support for a new platform -would mean adding support for a new version. - -Compilation and runtime must succeed for the minimum supported version. If a -new API is to be used, it must be done optionally, only in supported versions. - -### Common - -Some common notes when adding support for new platforms: - -* Generally libuv tries to avoid compile time checks. Do not add any to the - autotools based build system or use version checking macros. - Dynamically load functions and symbols if they are not supported by the - minimum supported version. diff --git a/libuv/autogen.sh b/libuv/autogen.sh deleted file mode 100644 index 271c2ee..0000000 --- a/libuv/autogen.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh - -# Copyright (c) 2013, Ben Noordhuis -# -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -cd `dirname "$0"` - -if [ "$LIBTOOLIZE" = "" ] && [ "`uname`" = "Darwin" ]; then - LIBTOOLIZE=glibtoolize -fi - -ACLOCAL=${ACLOCAL:-aclocal} -AUTOCONF=${AUTOCONF:-autoconf} -AUTOMAKE=${AUTOMAKE:-automake} -LIBTOOLIZE=${LIBTOOLIZE:-libtoolize} - -automake_version=`"$AUTOMAKE" --version | head -n 1 | sed 's/[^.0-9]//g'` -automake_version_major=`echo "$automake_version" | cut -d. -f1` -automake_version_minor=`echo "$automake_version" | cut -d. -f2` - -UV_EXTRA_AUTOMAKE_FLAGS= -if test "$automake_version_major" -gt 1 || \ - test "$automake_version_major" -eq 1 && \ - test "$automake_version_minor" -gt 11; then - # serial-tests is available in v1.12 and newer. - UV_EXTRA_AUTOMAKE_FLAGS="$UV_EXTRA_AUTOMAKE_FLAGS serial-tests" -fi -echo "m4_define([UV_EXTRA_AUTOMAKE_FLAGS], [$UV_EXTRA_AUTOMAKE_FLAGS])" \ - > m4/libuv-extra-automake-flags.m4 - -set -ex -"$LIBTOOLIZE" --copy -"$ACLOCAL" -I m4 -"$AUTOCONF" -"$AUTOMAKE" --add-missing --copy diff --git a/libuv/configure.ac b/libuv/configure.ac deleted file mode 100644 index 1fbb5c8..0000000 --- a/libuv/configure.ac +++ /dev/null @@ -1,88 +0,0 @@ -# Copyright (c) 2013, Ben Noordhuis -# -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -AC_PREREQ(2.57) -AC_INIT([libuv], [1.42.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]) -m4_include([m4/libuv-check-flags.m4]) -AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects] UV_EXTRA_AUTOMAKE_FLAGS) -AC_CANONICAL_HOST -AC_ENABLE_SHARED -AC_ENABLE_STATIC -AC_PROG_CC -AM_PROG_CC_C_O - -CC_ATTRIBUTE_VISIBILITY([default], [ - CC_FLAG_VISIBILITY([CFLAGS="${CFLAGS} -fvisibility=hidden"]) -]) -CC_CHECK_CFLAGS_APPEND([-fno-strict-aliasing]) -CC_CHECK_CFLAGS_APPEND([-g]) -CC_CHECK_CFLAGS_APPEND([-std=gnu89]) -CC_CHECK_CFLAGS_APPEND([-Wall]) -CC_CHECK_CFLAGS_APPEND([-Wextra]) -CC_CHECK_CFLAGS_APPEND([-Wno-long-long]) -CC_CHECK_CFLAGS_APPEND([-Wno-unused-parameter]) -CC_CHECK_CFLAGS_APPEND([-Wstrict-prototypes]) -# AM_PROG_AR is not available in automake v0.11 but it's essential in v0.12. -m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) -# autoconf complains if AC_PROG_LIBTOOL precedes AM_PROG_AR. -AC_PROG_LIBTOOL -m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) -LT_INIT -AX_PTHREAD([ - LIBS="$LIBS $PTHREAD_LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -]) -AC_SEARCH_LIBS([dlopen], [dl]) -AC_SEARCH_LIBS([kstat_lookup], [kstat]) -AC_SEARCH_LIBS([gethostbyname], [nsl]) -AC_SEARCH_LIBS([perfstat_cpu], [perfstat]) -AC_SEARCH_LIBS([clock_gettime], [rt]) -AC_SEARCH_LIBS([sendfile], [sendfile]) -AC_SEARCH_LIBS([socket], [socket]) -AC_SYS_LARGEFILE -AM_CONDITIONAL([AIX], [AS_CASE([$host_os],[aix*], [true], [false])]) -AM_CONDITIONAL([ANDROID], [AS_CASE([$host_os],[linux-android*],[true], [false])]) -AM_CONDITIONAL([CYGWIN], [AS_CASE([$host_os],[cygwin*], [true], [false])]) -AM_CONDITIONAL([DARWIN], [AS_CASE([$host_os],[darwin*], [true], [false])]) -AM_CONDITIONAL([DRAGONFLY],[AS_CASE([$host_os],[dragonfly*], [true], [false])]) -AM_CONDITIONAL([FREEBSD], [AS_CASE([$host_os],[*freebsd*], [true], [false])]) -AM_CONDITIONAL([HAIKU], [AS_CASE([$host_os],[haiku], [true], [false])]) -AM_CONDITIONAL([HURD], [AS_CASE([$host_os],[gnu*], [true], [false])]) -AM_CONDITIONAL([LINUX], [AS_CASE([$host_os],[linux*], [true], [false])]) -AM_CONDITIONAL([MSYS], [AS_CASE([$host_os],[msys*], [true], [false])]) -AM_CONDITIONAL([NETBSD], [AS_CASE([$host_os],[netbsd*], [true], [false])]) -AM_CONDITIONAL([OPENBSD], [AS_CASE([$host_os],[openbsd*], [true], [false])]) -AM_CONDITIONAL([OS390], [AS_CASE([$host_os],[openedition*], [true], [false])]) -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" -]) -AS_CASE([$host_os], [netbsd*], [AC_CHECK_LIB([kvm], [kvm_open])]) -AS_CASE([$host_os], [kfreebsd*], [ - LIBS="$LIBS -lfreebsd-glue" -]) -AS_CASE([$host_os], [haiku], [ - LIBS="$LIBS -lnetwork" -]) -AC_CHECK_HEADERS([sys/ahafs_evProds.h]) -AC_CONFIG_FILES([Makefile libuv.pc]) -AC_CONFIG_LINKS([test/fixtures/empty_file:test/fixtures/empty_file]) -AC_CONFIG_LINKS([test/fixtures/load_error.node:test/fixtures/load_error.node]) -AC_CONFIG_LINKS([test/fixtures/lorem_ipsum.txt:test/fixtures/lorem_ipsum.txt]) -AC_OUTPUT diff --git a/libuv/docs/code/cgi/main.c b/libuv/docs/code/cgi/main.c deleted file mode 100644 index d2e3426..0000000 --- a/libuv/docs/code/cgi/main.c +++ /dev/null @@ -1,81 +0,0 @@ -#include -#include -#include -#include -#include - -uv_loop_t *loop; -uv_process_t child_req; -uv_process_options_t options; - -void cleanup_handles(uv_process_t *req, int64_t exit_status, int term_signal) { - fprintf(stderr, "Process exited with status %" PRId64 ", signal %d\n", exit_status, term_signal); - uv_close((uv_handle_t*) req->data, NULL); - uv_close((uv_handle_t*) req, NULL); -} - -void invoke_cgi_script(uv_tcp_t *client) { - size_t size = 500; - char path[size]; - uv_exepath(path, &size); - strcpy(path + (strlen(path) - strlen("cgi")), "tick"); - - char* args[2]; - args[0] = path; - args[1] = NULL; - - /* ... finding the executable path and setting up arguments ... */ - - options.stdio_count = 3; - uv_stdio_container_t child_stdio[3]; - child_stdio[0].flags = UV_IGNORE; - child_stdio[1].flags = UV_INHERIT_STREAM; - child_stdio[1].data.stream = (uv_stream_t*) client; - child_stdio[2].flags = UV_IGNORE; - options.stdio = child_stdio; - - options.exit_cb = cleanup_handles; - options.file = args[0]; - options.args = args; - - // Set this so we can close the socket after the child process exits. - child_req.data = (void*) client; - int r; - if ((r = uv_spawn(loop, &child_req, &options))) { - fprintf(stderr, "%s\n", uv_strerror(r)); - return; - } -} - -void on_new_connection(uv_stream_t *server, int status) { - if (status == -1) { - // error! - return; - } - - uv_tcp_t *client = (uv_tcp_t*) malloc(sizeof(uv_tcp_t)); - uv_tcp_init(loop, client); - if (uv_accept(server, (uv_stream_t*) client) == 0) { - invoke_cgi_script(client); - } - else { - uv_close((uv_handle_t*) client, NULL); - } -} - -int main() { - loop = uv_default_loop(); - - uv_tcp_t server; - uv_tcp_init(loop, &server); - - struct sockaddr_in bind_addr; - uv_ip4_addr("0.0.0.0", 7000, &bind_addr); - uv_tcp_bind(&server, (const struct sockaddr *)&bind_addr, 0); - int r = uv_listen((uv_stream_t*) &server, 128, on_new_connection); - if (r) { - fprintf(stderr, "Listen error %s\n", uv_err_name(r)); - return 1; - } - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/cgi/tick.c b/libuv/docs/code/cgi/tick.c deleted file mode 100644 index 0b498ed..0000000 --- a/libuv/docs/code/cgi/tick.c +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include - -int main() { - int i; - for (i = 0; i < 10; i++) { - printf("tick\n"); - fflush(stdout); - sleep(1); - } - printf("BOOM!\n"); - return 0; -} diff --git a/libuv/docs/code/detach/main.c b/libuv/docs/code/detach/main.c deleted file mode 100644 index 3c88fff..0000000 --- a/libuv/docs/code/detach/main.c +++ /dev/null @@ -1,31 +0,0 @@ -#include - -#include - -uv_loop_t *loop; -uv_process_t child_req; -uv_process_options_t options; - -int main() { - loop = uv_default_loop(); - - char* args[3]; - args[0] = "sleep"; - args[1] = "100"; - args[2] = NULL; - - options.exit_cb = NULL; - options.file = "sleep"; - options.args = args; - options.flags = UV_PROCESS_DETACHED; - - int r; - if ((r = uv_spawn(loop, &child_req, &options))) { - fprintf(stderr, "%s\n", uv_strerror(r)); - return 1; - } - fprintf(stderr, "Launched sleep with PID %d\n", child_req.pid); - uv_unref((uv_handle_t*) &child_req); - - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/dns/main.c b/libuv/docs/code/dns/main.c deleted file mode 100644 index 2d63f1a..0000000 --- a/libuv/docs/code/dns/main.c +++ /dev/null @@ -1,80 +0,0 @@ -#include -#include -#include -#include - -uv_loop_t *loop; - -void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { - buf->base = malloc(suggested_size); - buf->len = suggested_size; -} - -void on_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) { - if (nread < 0) { - if (nread != UV_EOF) - fprintf(stderr, "Read error %s\n", uv_err_name(nread)); - uv_close((uv_handle_t*) client, NULL); - free(buf->base); - free(client); - return; - } - - char *data = (char*) malloc(sizeof(char) * (nread+1)); - data[nread] = '\0'; - strncpy(data, buf->base, nread); - - fprintf(stderr, "%s", data); - free(data); - free(buf->base); -} - -void on_connect(uv_connect_t *req, int status) { - if (status < 0) { - fprintf(stderr, "connect failed error %s\n", uv_err_name(status)); - free(req); - return; - } - - uv_read_start((uv_stream_t*) req->handle, alloc_buffer, on_read); - free(req); -} - -void on_resolved(uv_getaddrinfo_t *resolver, int status, struct addrinfo *res) { - if (status < 0) { - fprintf(stderr, "getaddrinfo callback error %s\n", uv_err_name(status)); - return; - } - - char addr[17] = {'\0'}; - uv_ip4_name((struct sockaddr_in*) res->ai_addr, addr, 16); - fprintf(stderr, "%s\n", addr); - - uv_connect_t *connect_req = (uv_connect_t*) malloc(sizeof(uv_connect_t)); - uv_tcp_t *socket = (uv_tcp_t*) malloc(sizeof(uv_tcp_t)); - uv_tcp_init(loop, socket); - - uv_tcp_connect(connect_req, socket, (const struct sockaddr*) res->ai_addr, on_connect); - - uv_freeaddrinfo(res); -} - -int main() { - loop = uv_default_loop(); - - struct addrinfo hints; - hints.ai_family = PF_INET; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; - hints.ai_flags = 0; - - uv_getaddrinfo_t resolver; - fprintf(stderr, "irc.libera.chat is... "); - int r = uv_getaddrinfo(loop, &resolver, on_resolved, "irc.libera.chat", "6667", &hints); - - if (r) { - fprintf(stderr, "getaddrinfo call error %s\n", uv_err_name(r)); - return 1; - } - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/helloworld/main.c b/libuv/docs/code/helloworld/main.c deleted file mode 100644 index a31bf88..0000000 --- a/libuv/docs/code/helloworld/main.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include -#include - -int main() { - uv_loop_t *loop = malloc(sizeof(uv_loop_t)); - uv_loop_init(loop); - - printf("Now quitting.\n"); - uv_run(loop, UV_RUN_DEFAULT); - - uv_loop_close(loop); - free(loop); - return 0; -} diff --git a/libuv/docs/code/idle-basic/main.c b/libuv/docs/code/idle-basic/main.c deleted file mode 100644 index 77ba31c..0000000 --- a/libuv/docs/code/idle-basic/main.c +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include - -int64_t counter = 0; - -void wait_for_a_while(uv_idle_t* handle) { - counter++; - - if (counter >= 10e6) - uv_idle_stop(handle); -} - -int main() { - uv_idle_t idler; - - uv_idle_init(uv_default_loop(), &idler); - uv_idle_start(&idler, wait_for_a_while); - - printf("Idling...\n"); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - uv_loop_close(uv_default_loop()); - return 0; -} diff --git a/libuv/docs/code/idle-compute/main.c b/libuv/docs/code/idle-compute/main.c deleted file mode 100644 index ff44b69..0000000 --- a/libuv/docs/code/idle-compute/main.c +++ /dev/null @@ -1,43 +0,0 @@ -#include - -#include - -uv_loop_t *loop; -uv_fs_t stdin_watcher; -uv_idle_t idler; -char buffer[1024]; - -void crunch_away(uv_idle_t* handle) { - // Compute extra-terrestrial life - // fold proteins - // computer another digit of PI - // or similar - fprintf(stderr, "Computing PI...\n"); - // just to avoid overwhelming your terminal emulator - uv_idle_stop(handle); -} - -void on_type(uv_fs_t *req) { - if (stdin_watcher.result > 0) { - buffer[stdin_watcher.result] = '\0'; - printf("Typed %s\n", buffer); - - uv_buf_t buf = uv_buf_init(buffer, 1024); - uv_fs_read(loop, &stdin_watcher, 0, &buf, 1, -1, on_type); - uv_idle_start(&idler, crunch_away); - } - else if (stdin_watcher.result < 0) { - fprintf(stderr, "error opening file: %s\n", uv_strerror(req->result)); - } -} - -int main() { - loop = uv_default_loop(); - - uv_idle_init(loop, &idler); - - uv_buf_t buf = uv_buf_init(buffer, 1024); - uv_fs_read(loop, &stdin_watcher, 0, &buf, 1, -1, on_type); - uv_idle_start(&idler, crunch_away); - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/interfaces/main.c b/libuv/docs/code/interfaces/main.c deleted file mode 100644 index cac12c2..0000000 --- a/libuv/docs/code/interfaces/main.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include - -int main() { - char buf[512]; - uv_interface_address_t *info; - int count, i; - - uv_interface_addresses(&info, &count); - i = count; - - printf("Number of interfaces: %d\n", count); - while (i--) { - uv_interface_address_t interface = info[i]; - - printf("Name: %s\n", interface.name); - printf("Internal? %s\n", interface.is_internal ? "Yes" : "No"); - - if (interface.address.address4.sin_family == AF_INET) { - uv_ip4_name(&interface.address.address4, buf, sizeof(buf)); - printf("IPv4 address: %s\n", buf); - } - else if (interface.address.address4.sin_family == AF_INET6) { - uv_ip6_name(&interface.address.address6, buf, sizeof(buf)); - printf("IPv6 address: %s\n", buf); - } - - printf("\n"); - } - - uv_free_interface_addresses(info, count); - return 0; -} diff --git a/libuv/docs/code/locks/main.c b/libuv/docs/code/locks/main.c deleted file mode 100644 index 2b1f8ca..0000000 --- a/libuv/docs/code/locks/main.c +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include - -uv_barrier_t blocker; -uv_rwlock_t numlock; -int shared_num; - -void reader(void *n) -{ - int num = *(int *)n; - int i; - for (i = 0; i < 20; i++) { - uv_rwlock_rdlock(&numlock); - printf("Reader %d: acquired lock\n", num); - printf("Reader %d: shared num = %d\n", num, shared_num); - uv_rwlock_rdunlock(&numlock); - printf("Reader %d: released lock\n", num); - } - uv_barrier_wait(&blocker); -} - -void writer(void *n) -{ - int num = *(int *)n; - int i; - for (i = 0; i < 20; i++) { - uv_rwlock_wrlock(&numlock); - printf("Writer %d: acquired lock\n", num); - shared_num++; - printf("Writer %d: incremented shared num = %d\n", num, shared_num); - uv_rwlock_wrunlock(&numlock); - printf("Writer %d: released lock\n", num); - } - uv_barrier_wait(&blocker); -} - -int main() -{ - uv_barrier_init(&blocker, 4); - - shared_num = 0; - uv_rwlock_init(&numlock); - - uv_thread_t threads[3]; - - int thread_nums[] = {1, 2, 1}; - uv_thread_create(&threads[0], reader, &thread_nums[0]); - uv_thread_create(&threads[1], reader, &thread_nums[1]); - - uv_thread_create(&threads[2], writer, &thread_nums[2]); - - uv_barrier_wait(&blocker); - uv_barrier_destroy(&blocker); - - uv_rwlock_destroy(&numlock); - return 0; -} diff --git a/libuv/docs/code/multi-echo-server/hammer.js b/libuv/docs/code/multi-echo-server/hammer.js deleted file mode 100644 index 5df345b..0000000 --- a/libuv/docs/code/multi-echo-server/hammer.js +++ /dev/null @@ -1,20 +0,0 @@ -var net = require('net'); - -var PHRASE = "hello world"; -var write = function(socket) { - socket.write(PHRASE, 'utf8'); -} - -for (var i = 0; i < 1000; i++) { -(function() { - var socket = net.connect(7000, 'localhost', function() { - socket.on('data', function(reply) { - if (reply.toString().indexOf(PHRASE) != 0) - console.error("Problem! '" + reply + "'" + " '" + PHRASE + "'"); - else - write(socket); - }); - write(socket); - }); -})(); -} diff --git a/libuv/docs/code/multi-echo-server/main.c b/libuv/docs/code/multi-echo-server/main.c deleted file mode 100644 index b938a7d..0000000 --- a/libuv/docs/code/multi-echo-server/main.c +++ /dev/null @@ -1,114 +0,0 @@ -#include -#include -#include -#include -#include - -uv_loop_t *loop; - -struct child_worker { - uv_process_t req; - uv_process_options_t options; - uv_pipe_t pipe; -} *workers; - -int round_robin_counter; -int child_worker_count; - -uv_buf_t dummy_buf; -char worker_path[500]; - -void close_process_handle(uv_process_t *req, int64_t exit_status, int term_signal) { - fprintf(stderr, "Process exited with status %" PRId64 ", signal %d\n", exit_status, term_signal); - uv_close((uv_handle_t*) req, NULL); -} - -void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { - buf->base = malloc(suggested_size); - buf->len = suggested_size; -} - -void on_new_connection(uv_stream_t *server, int status) { - if (status == -1) { - // error! - return; - } - - uv_tcp_t *client = (uv_tcp_t*) malloc(sizeof(uv_tcp_t)); - uv_tcp_init(loop, client); - if (uv_accept(server, (uv_stream_t*) client) == 0) { - uv_write_t *write_req = (uv_write_t*) malloc(sizeof(uv_write_t)); - dummy_buf = uv_buf_init("a", 1); - struct child_worker *worker = &workers[round_robin_counter]; - uv_write2(write_req, (uv_stream_t*) &worker->pipe, &dummy_buf, 1, (uv_stream_t*) client, NULL); - round_robin_counter = (round_robin_counter + 1) % child_worker_count; - } - else { - uv_close((uv_handle_t*) client, NULL); - } -} - -void setup_workers() { - size_t path_size = 500; - uv_exepath(worker_path, &path_size); - strcpy(worker_path + (strlen(worker_path) - strlen("multi-echo-server")), "worker"); - fprintf(stderr, "Worker path: %s\n", worker_path); - - char* args[2]; - args[0] = worker_path; - args[1] = NULL; - - round_robin_counter = 0; - - // ... - - // launch same number of workers as number of CPUs - uv_cpu_info_t *info; - int cpu_count; - uv_cpu_info(&info, &cpu_count); - uv_free_cpu_info(info, cpu_count); - - child_worker_count = cpu_count; - - workers = calloc(cpu_count, sizeof(struct child_worker)); - while (cpu_count--) { - struct child_worker *worker = &workers[cpu_count]; - uv_pipe_init(loop, &worker->pipe, 1); - - uv_stdio_container_t child_stdio[3]; - child_stdio[0].flags = UV_CREATE_PIPE | UV_READABLE_PIPE; - child_stdio[0].data.stream = (uv_stream_t*) &worker->pipe; - child_stdio[1].flags = UV_IGNORE; - child_stdio[2].flags = UV_INHERIT_FD; - child_stdio[2].data.fd = 2; - - worker->options.stdio = child_stdio; - worker->options.stdio_count = 3; - - worker->options.exit_cb = close_process_handle; - worker->options.file = args[0]; - worker->options.args = args; - - uv_spawn(loop, &worker->req, &worker->options); - fprintf(stderr, "Started worker %d\n", worker->req.pid); - } -} - -int main() { - loop = uv_default_loop(); - - setup_workers(); - - uv_tcp_t server; - uv_tcp_init(loop, &server); - - struct sockaddr_in bind_addr; - uv_ip4_addr("0.0.0.0", 7000, &bind_addr); - uv_tcp_bind(&server, (const struct sockaddr *)&bind_addr, 0); - int r; - if ((r = uv_listen((uv_stream_t*) &server, 128, on_new_connection))) { - fprintf(stderr, "Listen error %s\n", uv_err_name(r)); - return 2; - } - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/multi-echo-server/worker.c b/libuv/docs/code/multi-echo-server/worker.c deleted file mode 100644 index 1c46575..0000000 --- a/libuv/docs/code/multi-echo-server/worker.c +++ /dev/null @@ -1,88 +0,0 @@ -#include -#include -#include -#include -#include -#include - -uv_loop_t *loop; -uv_pipe_t queue; - -typedef struct { - uv_write_t req; - uv_buf_t buf; -} write_req_t; - -void free_write_req(uv_write_t *req) { - write_req_t *wr = (write_req_t*) req; - free(wr->buf.base); - free(wr); -} - -void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { - buf->base = malloc(suggested_size); - buf->len = suggested_size; -} - -void echo_write(uv_write_t *req, int status) { - if (status) { - fprintf(stderr, "Write error %s\n", uv_err_name(status)); - } - free_write_req(req); -} - -void echo_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) { - if (nread > 0) { - write_req_t *req = (write_req_t*) malloc(sizeof(write_req_t)); - req->buf = uv_buf_init(buf->base, nread); - uv_write((uv_write_t*) req, client, &req->buf, 1, echo_write); - return; - } - - if (nread < 0) { - if (nread != UV_EOF) - fprintf(stderr, "Read error %s\n", uv_err_name(nread)); - uv_close((uv_handle_t*) client, NULL); - } - - free(buf->base); -} - -void on_new_connection(uv_stream_t *q, ssize_t nread, const uv_buf_t *buf) { - if (nread < 0) { - if (nread != UV_EOF) - fprintf(stderr, "Read error %s\n", uv_err_name(nread)); - uv_close((uv_handle_t*) q, NULL); - return; - } - - uv_pipe_t *pipe = (uv_pipe_t*) q; - if (!uv_pipe_pending_count(pipe)) { - fprintf(stderr, "No pending count\n"); - return; - } - - uv_handle_type pending = uv_pipe_pending_type(pipe); - assert(pending == UV_TCP); - - uv_tcp_t *client = (uv_tcp_t*) malloc(sizeof(uv_tcp_t)); - uv_tcp_init(loop, client); - if (uv_accept(q, (uv_stream_t*) client) == 0) { - uv_os_fd_t fd; - uv_fileno((const uv_handle_t*) client, &fd); - fprintf(stderr, "Worker %d: Accepted fd %d\n", getpid(), fd); - uv_read_start((uv_stream_t*) client, alloc_buffer, echo_read); - } - else { - uv_close((uv_handle_t*) client, NULL); - } -} - -int main() { - loop = uv_default_loop(); - - uv_pipe_init(loop, &queue, 1 /* ipc */); - uv_pipe_open(&queue, 0); - uv_read_start((uv_stream_t*)&queue, alloc_buffer, on_new_connection); - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/onchange/main.c b/libuv/docs/code/onchange/main.c deleted file mode 100644 index 40bdaa5..0000000 --- a/libuv/docs/code/onchange/main.c +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include - -#include - -uv_loop_t *loop; -const char *command; - -void run_command(uv_fs_event_t *handle, const char *filename, int events, int status) { - char path[1024]; - size_t size = 1023; - // Does not handle error if path is longer than 1023. - uv_fs_event_getpath(handle, path, &size); - path[size] = '\0'; - - fprintf(stderr, "Change detected in %s: ", path); - if (events & UV_RENAME) - fprintf(stderr, "renamed"); - if (events & UV_CHANGE) - fprintf(stderr, "changed"); - - fprintf(stderr, " %s\n", filename ? filename : ""); - system(command); -} - -int main(int argc, char **argv) { - if (argc <= 2) { - fprintf(stderr, "Usage: %s [file2 ...]\n", argv[0]); - return 1; - } - - loop = uv_default_loop(); - command = argv[1]; - - while (argc-- > 2) { - fprintf(stderr, "Adding watch on %s\n", argv[argc]); - uv_fs_event_t *fs_event_req = malloc(sizeof(uv_fs_event_t)); - uv_fs_event_init(loop, fs_event_req); - // The recursive flag watches subdirectories too. - uv_fs_event_start(fs_event_req, run_command, argv[argc], UV_FS_EVENT_RECURSIVE); - } - - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/pipe-echo-server/main.c b/libuv/docs/code/pipe-echo-server/main.c deleted file mode 100644 index 4f28fd0..0000000 --- a/libuv/docs/code/pipe-echo-server/main.c +++ /dev/null @@ -1,94 +0,0 @@ -#include -#include -#include -#include - -#ifdef _WIN32 -#define PIPENAME "\\\\?\\pipe\\echo.sock" -#else -#define PIPENAME "/tmp/echo.sock" -#endif - -uv_loop_t *loop; - -typedef struct { - uv_write_t req; - uv_buf_t buf; -} write_req_t; - -void free_write_req(uv_write_t *req) { - write_req_t *wr = (write_req_t*) req; - free(wr->buf.base); - free(wr); -} - -void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { - buf->base = malloc(suggested_size); - buf->len = suggested_size; -} - -void echo_write(uv_write_t *req, int status) { - if (status < 0) { - fprintf(stderr, "Write error %s\n", uv_err_name(status)); - } - free_write_req(req); -} - -void echo_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) { - if (nread > 0) { - write_req_t *req = (write_req_t*) malloc(sizeof(write_req_t)); - req->buf = uv_buf_init(buf->base, nread); - uv_write((uv_write_t*) req, client, &req->buf, 1, echo_write); - return; - } - - if (nread < 0) { - if (nread != UV_EOF) - fprintf(stderr, "Read error %s\n", uv_err_name(nread)); - uv_close((uv_handle_t*) client, NULL); - } - - free(buf->base); -} - -void on_new_connection(uv_stream_t *server, int status) { - if (status == -1) { - // error! - return; - } - - uv_pipe_t *client = (uv_pipe_t*) malloc(sizeof(uv_pipe_t)); - uv_pipe_init(loop, client, 0); - if (uv_accept(server, (uv_stream_t*) client) == 0) { - uv_read_start((uv_stream_t*) client, alloc_buffer, echo_read); - } - else { - uv_close((uv_handle_t*) client, NULL); - } -} - -void remove_sock(int sig) { - uv_fs_t req; - uv_fs_unlink(loop, &req, PIPENAME, NULL); - exit(0); -} - -int main() { - loop = uv_default_loop(); - - uv_pipe_t server; - uv_pipe_init(loop, &server, 0); - - signal(SIGINT, remove_sock); - - int r; - if ((r = uv_pipe_bind(&server, PIPENAME))) { - fprintf(stderr, "Bind error %s\n", uv_err_name(r)); - return 1; - } - if ((r = uv_listen((uv_stream_t*) &server, 128, on_new_connection))) { - fprintf(stderr, "Listen error %s\n", uv_err_name(r)); - return 2; - } - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/plugin/hello.c b/libuv/docs/code/plugin/hello.c deleted file mode 100644 index 7b2861d..0000000 --- a/libuv/docs/code/plugin/hello.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "plugin.h" - -void initialize() { - mfp_register("Hello World!"); -} diff --git a/libuv/docs/code/plugin/main.c b/libuv/docs/code/plugin/main.c deleted file mode 100644 index 06e581e..0000000 --- a/libuv/docs/code/plugin/main.c +++ /dev/null @@ -1,39 +0,0 @@ -#include -#include -#include - -#include - -#include "plugin.h" - -typedef void (*init_plugin_function)(); - -void mfp_register(const char *name) { - fprintf(stderr, "Registered plugin \"%s\"\n", name); -} - -int main(int argc, char **argv) { - if (argc == 1) { - fprintf(stderr, "Usage: %s [plugin1] [plugin2] ...\n", argv[0]); - return 0; - } - - uv_lib_t *lib = (uv_lib_t*) malloc(sizeof(uv_lib_t)); - while (--argc) { - fprintf(stderr, "Loading %s\n", argv[argc]); - if (uv_dlopen(argv[argc], lib)) { - fprintf(stderr, "Error: %s\n", uv_dlerror(lib)); - continue; - } - - init_plugin_function init_plugin; - if (uv_dlsym(lib, "initialize", (void **) &init_plugin)) { - fprintf(stderr, "dlsym error: %s\n", uv_dlerror(lib)); - continue; - } - - init_plugin(); - } - - return 0; -} diff --git a/libuv/docs/code/plugin/plugin.h b/libuv/docs/code/plugin/plugin.h deleted file mode 100644 index 21f194e..0000000 --- a/libuv/docs/code/plugin/plugin.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef UVBOOK_PLUGIN_SYSTEM -#define UVBOOK_PLUGIN_SYSTEM - -// Plugin authors should use this to register their plugins with mfp. -void mfp_register(const char *name); - -#endif diff --git a/libuv/docs/code/proc-streams/main.c b/libuv/docs/code/proc-streams/main.c deleted file mode 100644 index b8a6521..0000000 --- a/libuv/docs/code/proc-streams/main.c +++ /dev/null @@ -1,49 +0,0 @@ -#include -#include -#include - -#include - -uv_loop_t *loop; -uv_process_t child_req; -uv_process_options_t options; - -void on_exit(uv_process_t *req, int64_t exit_status, int term_signal) { - fprintf(stderr, "Process exited with status %" PRId64 ", signal %d\n", exit_status, term_signal); - uv_close((uv_handle_t*) req, NULL); -} - -int main() { - loop = uv_default_loop(); - - size_t size = 500; - char path[size]; - uv_exepath(path, &size); - strcpy(path + (strlen(path) - strlen("proc-streams")), "test"); - - char* args[2]; - args[0] = path; - args[1] = NULL; - - /* ... */ - - options.stdio_count = 3; - uv_stdio_container_t child_stdio[3]; - child_stdio[0].flags = UV_IGNORE; - child_stdio[1].flags = UV_IGNORE; - child_stdio[2].flags = UV_INHERIT_FD; - child_stdio[2].data.fd = 2; - options.stdio = child_stdio; - - options.exit_cb = on_exit; - options.file = args[0]; - options.args = args; - - int r; - if ((r = uv_spawn(loop, &child_req, &options))) { - fprintf(stderr, "%s\n", uv_strerror(r)); - return 1; - } - - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/proc-streams/test.c b/libuv/docs/code/proc-streams/test.c deleted file mode 100644 index 7c45c1f..0000000 --- a/libuv/docs/code/proc-streams/test.c +++ /dev/null @@ -1,8 +0,0 @@ -#include - -int main() -{ - fprintf(stderr, "This is stderr\n"); - printf("This is stdout\n"); - return 0; -} diff --git a/libuv/docs/code/progress/main.c b/libuv/docs/code/progress/main.c deleted file mode 100644 index 5af01f1..0000000 --- a/libuv/docs/code/progress/main.c +++ /dev/null @@ -1,47 +0,0 @@ -#include -#include -#include - -#include - -uv_loop_t *loop; -uv_async_t async; - -double percentage; - -void fake_download(uv_work_t *req) { - int size = *((int*) req->data); - int downloaded = 0; - while (downloaded < size) { - percentage = downloaded*100.0/size; - async.data = (void*) &percentage; - uv_async_send(&async); - - sleep(1); - downloaded += (200+random())%1000; // can only download max 1000bytes/sec, - // but at least a 200; - } -} - -void after(uv_work_t *req, int status) { - fprintf(stderr, "Download complete\n"); - uv_close((uv_handle_t*) &async, NULL); -} - -void print_progress(uv_async_t *handle) { - double percentage = *((double*) handle->data); - fprintf(stderr, "Downloaded %.2f%%\n", percentage); -} - -int main() { - loop = uv_default_loop(); - - uv_work_t req; - int size = 10240; - req.data = (void*) &size; - - uv_async_init(loop, &async, print_progress); - uv_queue_work(loop, &req, fake_download, after); - - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/queue-cancel/main.c b/libuv/docs/code/queue-cancel/main.c deleted file mode 100644 index 3f7836c..0000000 --- a/libuv/docs/code/queue-cancel/main.c +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include -#include - -#include - -#define FIB_UNTIL 25 -uv_loop_t *loop; -uv_work_t fib_reqs[FIB_UNTIL]; - -long fib_(long t) { - if (t == 0 || t == 1) - return 1; - else - return fib_(t-1) + fib_(t-2); -} - -void fib(uv_work_t *req) { - int n = *(int *) req->data; - if (random() % 2) - sleep(1); - else - sleep(3); - long fib = fib_(n); - fprintf(stderr, "%dth fibonacci is %lu\n", n, fib); -} - -void after_fib(uv_work_t *req, int status) { - if (status == UV_ECANCELED) - fprintf(stderr, "Calculation of %d cancelled.\n", *(int *) req->data); -} - -void signal_handler(uv_signal_t *req, int signum) -{ - printf("Signal received!\n"); - int i; - for (i = 0; i < FIB_UNTIL; i++) { - uv_cancel((uv_req_t*) &fib_reqs[i]); - } - uv_signal_stop(req); -} - -int main() { - loop = uv_default_loop(); - - int data[FIB_UNTIL]; - int i; - for (i = 0; i < FIB_UNTIL; i++) { - data[i] = i; - fib_reqs[i].data = (void *) &data[i]; - uv_queue_work(loop, &fib_reqs[i], fib, after_fib); - } - - uv_signal_t sig; - uv_signal_init(loop, &sig); - uv_signal_start(&sig, signal_handler, SIGINT); - - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/queue-work/main.c b/libuv/docs/code/queue-work/main.c deleted file mode 100644 index 55675ea..0000000 --- a/libuv/docs/code/queue-work/main.c +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include -#include - -#include - -#define FIB_UNTIL 25 -uv_loop_t *loop; - -long fib_(long t) { - if (t == 0 || t == 1) - return 1; - else - return fib_(t-1) + fib_(t-2); -} - -void fib(uv_work_t *req) { - int n = *(int *) req->data; - if (random() % 2) - sleep(1); - else - sleep(3); - long fib = fib_(n); - fprintf(stderr, "%dth fibonacci is %lu\n", n, fib); -} - -void after_fib(uv_work_t *req, int status) { - fprintf(stderr, "Done calculating %dth fibonacci\n", *(int *) req->data); -} - -int main() { - loop = uv_default_loop(); - - int data[FIB_UNTIL]; - uv_work_t req[FIB_UNTIL]; - int i; - for (i = 0; i < FIB_UNTIL; i++) { - data[i] = i; - req[i].data = (void *) &data[i]; - uv_queue_work(loop, &req[i], fib, after_fib); - } - - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/ref-timer/main.c b/libuv/docs/code/ref-timer/main.c deleted file mode 100644 index ad7c829..0000000 --- a/libuv/docs/code/ref-timer/main.c +++ /dev/null @@ -1,29 +0,0 @@ -#include - -#include - -uv_loop_t *loop; -uv_timer_t gc_req; -uv_timer_t fake_job_req; - -void gc(uv_timer_t *handle) { - fprintf(stderr, "Freeing unused objects\n"); -} - -void fake_job(uv_timer_t *handle) { - fprintf(stdout, "Fake job done\n"); -} - -int main() { - loop = uv_default_loop(); - - uv_timer_init(loop, &gc_req); - uv_unref((uv_handle_t*) &gc_req); - - uv_timer_start(&gc_req, gc, 0, 2000); - - // could actually be a TCP download or something - uv_timer_init(loop, &fake_job_req); - uv_timer_start(&fake_job_req, fake_job, 9000, 0); - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/signal/main.c b/libuv/docs/code/signal/main.c deleted file mode 100644 index 1b982c5..0000000 --- a/libuv/docs/code/signal/main.c +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include -#include -#include - -uv_loop_t* create_loop() -{ - uv_loop_t *loop = malloc(sizeof(uv_loop_t)); - if (loop) { - uv_loop_init(loop); - } - return loop; -} - -void signal_handler(uv_signal_t *handle, int signum) -{ - printf("Signal received: %d\n", signum); - uv_signal_stop(handle); -} - -// two signal handlers in one loop -void thread1_worker(void *userp) -{ - uv_loop_t *loop1 = create_loop(); - - uv_signal_t sig1a, sig1b; - uv_signal_init(loop1, &sig1a); - uv_signal_start(&sig1a, signal_handler, SIGUSR1); - - uv_signal_init(loop1, &sig1b); - uv_signal_start(&sig1b, signal_handler, SIGUSR1); - - uv_run(loop1, UV_RUN_DEFAULT); -} - -// two signal handlers, each in its own loop -void thread2_worker(void *userp) -{ - uv_loop_t *loop2 = create_loop(); - uv_loop_t *loop3 = create_loop(); - - uv_signal_t sig2; - uv_signal_init(loop2, &sig2); - uv_signal_start(&sig2, signal_handler, SIGUSR1); - - uv_signal_t sig3; - uv_signal_init(loop3, &sig3); - uv_signal_start(&sig3, signal_handler, SIGUSR1); - - while (uv_run(loop2, UV_RUN_NOWAIT) || uv_run(loop3, UV_RUN_NOWAIT)) { - } -} - -int main() -{ - printf("PID %d\n", getpid()); - - uv_thread_t thread1, thread2; - - uv_thread_create(&thread1, thread1_worker, 0); - uv_thread_create(&thread2, thread2_worker, 0); - - uv_thread_join(&thread1); - uv_thread_join(&thread2); - return 0; -} diff --git a/libuv/docs/code/spawn/main.c b/libuv/docs/code/spawn/main.c deleted file mode 100644 index dedfe00..0000000 --- a/libuv/docs/code/spawn/main.c +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include - -#include - -uv_loop_t *loop; -uv_process_t child_req; -uv_process_options_t options; - -void on_exit(uv_process_t *req, int64_t exit_status, int term_signal) { - fprintf(stderr, "Process exited with status %" PRId64 ", signal %d\n", exit_status, term_signal); - uv_close((uv_handle_t*) req, NULL); -} - -int main() { - loop = uv_default_loop(); - - char* args[3]; - args[0] = "mkdir"; - args[1] = "test-dir"; - args[2] = NULL; - - options.exit_cb = on_exit; - options.file = "mkdir"; - options.args = args; - - int r; - if ((r = uv_spawn(loop, &child_req, &options))) { - fprintf(stderr, "%s\n", uv_strerror(r)); - return 1; - } else { - fprintf(stderr, "Launched process with ID %d\n", child_req.pid); - } - - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/tcp-echo-server/main.c b/libuv/docs/code/tcp-echo-server/main.c deleted file mode 100644 index 5d7b499..0000000 --- a/libuv/docs/code/tcp-echo-server/main.c +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include -#include -#include - -#define DEFAULT_PORT 7000 -#define DEFAULT_BACKLOG 128 - -uv_loop_t *loop; -struct sockaddr_in addr; - -typedef struct { - uv_write_t req; - uv_buf_t buf; -} write_req_t; - -void free_write_req(uv_write_t *req) { - write_req_t *wr = (write_req_t*) req; - free(wr->buf.base); - free(wr); -} - -void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { - buf->base = (char*) malloc(suggested_size); - buf->len = suggested_size; -} - -void on_close(uv_handle_t* handle) { - free(handle); -} - -void echo_write(uv_write_t *req, int status) { - if (status) { - fprintf(stderr, "Write error %s\n", uv_strerror(status)); - } - free_write_req(req); -} - -void echo_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) { - if (nread > 0) { - write_req_t *req = (write_req_t*) malloc(sizeof(write_req_t)); - req->buf = uv_buf_init(buf->base, nread); - uv_write((uv_write_t*) req, client, &req->buf, 1, echo_write); - return; - } - if (nread < 0) { - if (nread != UV_EOF) - fprintf(stderr, "Read error %s\n", uv_err_name(nread)); - uv_close((uv_handle_t*) client, on_close); - } - - free(buf->base); -} - -void on_new_connection(uv_stream_t *server, int status) { - if (status < 0) { - fprintf(stderr, "New connection error %s\n", uv_strerror(status)); - // error! - return; - } - - uv_tcp_t *client = (uv_tcp_t*) malloc(sizeof(uv_tcp_t)); - uv_tcp_init(loop, client); - if (uv_accept(server, (uv_stream_t*) client) == 0) { - uv_read_start((uv_stream_t*) client, alloc_buffer, echo_read); - } - else { - uv_close((uv_handle_t*) client, on_close); - } -} - -int main() { - loop = uv_default_loop(); - - uv_tcp_t server; - uv_tcp_init(loop, &server); - - uv_ip4_addr("0.0.0.0", DEFAULT_PORT, &addr); - - uv_tcp_bind(&server, (const struct sockaddr*)&addr, 0); - int r = uv_listen((uv_stream_t*) &server, DEFAULT_BACKLOG, on_new_connection); - if (r) { - fprintf(stderr, "Listen error %s\n", uv_strerror(r)); - return 1; - } - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/thread-create/main.c b/libuv/docs/code/thread-create/main.c deleted file mode 100644 index 70224c1..0000000 --- a/libuv/docs/code/thread-create/main.c +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include - -#include - -void hare(void *arg) { - int tracklen = *((int *) arg); - while (tracklen) { - tracklen--; - sleep(1); - fprintf(stderr, "Hare ran another step\n"); - } - fprintf(stderr, "Hare done running!\n"); -} - -void tortoise(void *arg) { - int tracklen = *((int *) arg); - while (tracklen) { - tracklen--; - fprintf(stderr, "Tortoise ran another step\n"); - sleep(3); - } - fprintf(stderr, "Tortoise done running!\n"); -} - -int main() { - int tracklen = 10; - uv_thread_t hare_id; - uv_thread_t tortoise_id; - uv_thread_create(&hare_id, hare, &tracklen); - uv_thread_create(&tortoise_id, tortoise, &tracklen); - - uv_thread_join(&hare_id); - uv_thread_join(&tortoise_id); - return 0; -} diff --git a/libuv/docs/code/tty-gravity/main.c b/libuv/docs/code/tty-gravity/main.c deleted file mode 100644 index 0a8d6b2..0000000 --- a/libuv/docs/code/tty-gravity/main.c +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include -#include -#include - -uv_loop_t *loop; -uv_tty_t tty; -uv_timer_t tick; -uv_write_t write_req; -int width, height; -int pos = 0; -char *message = " Hello TTY "; - -void update(uv_timer_t *req) { - char data[500]; - - uv_buf_t buf; - buf.base = data; - buf.len = sprintf(data, "\033[2J\033[H\033[%dB\033[%luC\033[42;37m%s", - pos, - (unsigned long) (width-strlen(message))/2, - message); - uv_write(&write_req, (uv_stream_t*) &tty, &buf, 1, NULL); - - pos++; - if (pos > height) { - uv_tty_reset_mode(); - uv_timer_stop(&tick); - } -} - -int main() { - loop = uv_default_loop(); - - uv_tty_init(loop, &tty, STDOUT_FILENO, 0); - uv_tty_set_mode(&tty, 0); - - if (uv_tty_get_winsize(&tty, &width, &height)) { - fprintf(stderr, "Could not get TTY information\n"); - uv_tty_reset_mode(); - return 1; - } - - fprintf(stderr, "Width %d, height %d\n", width, height); - uv_timer_init(loop, &tick); - uv_timer_start(&tick, update, 200, 200); - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/tty/main.c b/libuv/docs/code/tty/main.c deleted file mode 100644 index d44ec62..0000000 --- a/libuv/docs/code/tty/main.c +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include -#include -#include - -uv_loop_t *loop; -uv_tty_t tty; -int main() { - loop = uv_default_loop(); - - uv_tty_init(loop, &tty, STDOUT_FILENO, 0); - uv_tty_set_mode(&tty, UV_TTY_MODE_NORMAL); - - if (uv_guess_handle(1) == UV_TTY) { - uv_write_t req; - uv_buf_t buf; - buf.base = "\033[41;37m"; - buf.len = strlen(buf.base); - uv_write(&req, (uv_stream_t*) &tty, &buf, 1, NULL); - } - - uv_write_t req; - uv_buf_t buf; - buf.base = "Hello TTY\n"; - buf.len = strlen(buf.base); - uv_write(&req, (uv_stream_t*) &tty, &buf, 1, NULL); - uv_tty_reset_mode(); - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/udp-dhcp/main.c b/libuv/docs/code/udp-dhcp/main.c deleted file mode 100644 index fc2ca0c..0000000 --- a/libuv/docs/code/udp-dhcp/main.c +++ /dev/null @@ -1,127 +0,0 @@ -#include -#include -#include -#include - -#include - -uv_loop_t *loop; -uv_udp_t send_socket; -uv_udp_t recv_socket; - -void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { - buf->base = malloc(suggested_size); - buf->len = suggested_size; -} - -void on_read(uv_udp_t *req, ssize_t nread, const uv_buf_t *buf, const struct sockaddr *addr, unsigned flags) { - if (nread < 0) { - fprintf(stderr, "Read error %s\n", uv_err_name(nread)); - uv_close((uv_handle_t*) req, NULL); - free(buf->base); - return; - } - - char sender[17] = { 0 }; - uv_ip4_name((const struct sockaddr_in*) addr, sender, 16); - fprintf(stderr, "Recv from %s\n", sender); - - // ... DHCP specific code - unsigned int *as_integer = (unsigned int*)buf->base; - unsigned int ipbin = ntohl(as_integer[4]); - unsigned char ip[4] = {0}; - int i; - for (i = 0; i < 4; i++) - ip[i] = (ipbin >> i*8) & 0xff; - fprintf(stderr, "Offered IP %d.%d.%d.%d\n", ip[3], ip[2], ip[1], ip[0]); - - free(buf->base); - uv_udp_recv_stop(req); -} - -uv_buf_t make_discover_msg() { - uv_buf_t buffer; - alloc_buffer(NULL, 256, &buffer); - memset(buffer.base, 0, buffer.len); - - // BOOTREQUEST - buffer.base[0] = 0x1; - // HTYPE ethernet - buffer.base[1] = 0x1; - // HLEN - buffer.base[2] = 0x6; - // HOPS - buffer.base[3] = 0x0; - // XID 4 bytes - buffer.base[4] = (unsigned int) random(); - // SECS - buffer.base[8] = 0x0; - // FLAGS - buffer.base[10] = 0x80; - // CIADDR 12-15 is all zeros - // YIADDR 16-19 is all zeros - // SIADDR 20-23 is all zeros - // GIADDR 24-27 is all zeros - // CHADDR 28-43 is the MAC address, use your own - buffer.base[28] = 0xe4; - buffer.base[29] = 0xce; - buffer.base[30] = 0x8f; - buffer.base[31] = 0x13; - buffer.base[32] = 0xf6; - buffer.base[33] = 0xd4; - // SNAME 64 bytes zero - // FILE 128 bytes zero - // OPTIONS - // - magic cookie - buffer.base[236] = 99; - buffer.base[237] = 130; - buffer.base[238] = 83; - buffer.base[239] = 99; - - // DHCP Message type - buffer.base[240] = 53; - buffer.base[241] = 1; - buffer.base[242] = 1; // DHCPDISCOVER - - // DHCP Parameter request list - buffer.base[243] = 55; - buffer.base[244] = 4; - buffer.base[245] = 1; - buffer.base[246] = 3; - buffer.base[247] = 15; - buffer.base[248] = 6; - - return buffer; -} - -void on_send(uv_udp_send_t *req, int status) { - if (status) { - fprintf(stderr, "Send error %s\n", uv_strerror(status)); - return; - } -} - -int main() { - loop = uv_default_loop(); - - uv_udp_init(loop, &recv_socket); - struct sockaddr_in recv_addr; - uv_ip4_addr("0.0.0.0", 68, &recv_addr); - uv_udp_bind(&recv_socket, (const struct sockaddr *)&recv_addr, UV_UDP_REUSEADDR); - uv_udp_recv_start(&recv_socket, alloc_buffer, on_read); - - uv_udp_init(loop, &send_socket); - struct sockaddr_in broadcast_addr; - uv_ip4_addr("0.0.0.0", 0, &broadcast_addr); - uv_udp_bind(&send_socket, (const struct sockaddr *)&broadcast_addr, 0); - uv_udp_set_broadcast(&send_socket, 1); - - uv_udp_send_t send_req; - uv_buf_t discover_msg = make_discover_msg(); - - struct sockaddr_in send_addr; - uv_ip4_addr("255.255.255.255", 67, &send_addr); - uv_udp_send(&send_req, &send_socket, &discover_msg, 1, (const struct sockaddr *)&send_addr, on_send); - - return uv_run(loop, UV_RUN_DEFAULT); -} diff --git a/libuv/docs/code/uvcat/main.c b/libuv/docs/code/uvcat/main.c deleted file mode 100644 index b03b094..0000000 --- a/libuv/docs/code/uvcat/main.c +++ /dev/null @@ -1,63 +0,0 @@ -#include -#include -#include -#include -#include - -void on_read(uv_fs_t *req); - -uv_fs_t open_req; -uv_fs_t read_req; -uv_fs_t write_req; - -static char buffer[1024]; - -static uv_buf_t iov; - -void on_write(uv_fs_t *req) { - if (req->result < 0) { - fprintf(stderr, "Write error: %s\n", uv_strerror((int)req->result)); - } - else { - uv_fs_read(uv_default_loop(), &read_req, open_req.result, &iov, 1, -1, on_read); - } -} - -void on_read(uv_fs_t *req) { - if (req->result < 0) { - fprintf(stderr, "Read error: %s\n", uv_strerror(req->result)); - } - else if (req->result == 0) { - uv_fs_t close_req; - // synchronous - uv_fs_close(uv_default_loop(), &close_req, open_req.result, NULL); - } - else if (req->result > 0) { - iov.len = req->result; - uv_fs_write(uv_default_loop(), &write_req, 1, &iov, 1, -1, on_write); - } -} - -void on_open(uv_fs_t *req) { - // The request passed to the callback is the same as the one the call setup - // function was passed. - assert(req == &open_req); - if (req->result >= 0) { - iov = uv_buf_init(buffer, sizeof(buffer)); - uv_fs_read(uv_default_loop(), &read_req, req->result, - &iov, 1, -1, on_read); - } - else { - fprintf(stderr, "error opening file: %s\n", uv_strerror((int)req->result)); - } -} - -int main(int argc, char **argv) { - uv_fs_open(uv_default_loop(), &open_req, argv[1], O_RDONLY, 0, on_open); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - uv_fs_req_cleanup(&open_req); - uv_fs_req_cleanup(&read_req); - uv_fs_req_cleanup(&write_req); - return 0; -} diff --git a/libuv/docs/code/uvstop/main.c b/libuv/docs/code/uvstop/main.c deleted file mode 100644 index 7aa53b7..0000000 --- a/libuv/docs/code/uvstop/main.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include - -int64_t counter = 0; - -void idle_cb(uv_idle_t *handle) { - printf("Idle callback\n"); - counter++; - - if (counter >= 5) { - uv_stop(uv_default_loop()); - printf("uv_stop() called\n"); - } -} - -void prep_cb(uv_prepare_t *handle) { - printf("Prep callback\n"); -} - -int main() { - uv_idle_t idler; - uv_prepare_t prep; - - uv_idle_init(uv_default_loop(), &idler); - uv_idle_start(&idler, idle_cb); - - uv_prepare_init(uv_default_loop(), &prep); - uv_prepare_start(&prep, prep_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - return 0; -} diff --git a/libuv/docs/code/uvtee/main.c b/libuv/docs/code/uvtee/main.c deleted file mode 100644 index 6216c2e..0000000 --- a/libuv/docs/code/uvtee/main.c +++ /dev/null @@ -1,80 +0,0 @@ -#include -#include -#include -#include -#include - -#include - -typedef struct { - uv_write_t req; - uv_buf_t buf; -} write_req_t; - -uv_loop_t *loop; -uv_pipe_t stdin_pipe; -uv_pipe_t stdout_pipe; -uv_pipe_t file_pipe; - -void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) { - *buf = uv_buf_init((char*) malloc(suggested_size), suggested_size); -} - -void free_write_req(uv_write_t *req) { - write_req_t *wr = (write_req_t*) req; - free(wr->buf.base); - free(wr); -} - -void on_stdout_write(uv_write_t *req, int status) { - free_write_req(req); -} - -void on_file_write(uv_write_t *req, int status) { - free_write_req(req); -} - -void write_data(uv_stream_t *dest, size_t size, uv_buf_t buf, uv_write_cb cb) { - write_req_t *req = (write_req_t*) malloc(sizeof(write_req_t)); - req->buf = uv_buf_init((char*) malloc(size), size); - memcpy(req->buf.base, buf.base, size); - uv_write((uv_write_t*) req, (uv_stream_t*)dest, &req->buf, 1, cb); -} - -void read_stdin(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) { - if (nread < 0){ - if (nread == UV_EOF){ - // end of file - uv_close((uv_handle_t *)&stdin_pipe, NULL); - uv_close((uv_handle_t *)&stdout_pipe, NULL); - uv_close((uv_handle_t *)&file_pipe, NULL); - } - } else if (nread > 0) { - write_data((uv_stream_t *)&stdout_pipe, nread, *buf, on_stdout_write); - write_data((uv_stream_t *)&file_pipe, nread, *buf, on_file_write); - } - - // OK to free buffer as write_data copies it. - if (buf->base) - free(buf->base); -} - -int main(int argc, char **argv) { - loop = uv_default_loop(); - - uv_pipe_init(loop, &stdin_pipe, 0); - uv_pipe_open(&stdin_pipe, 0); - - uv_pipe_init(loop, &stdout_pipe, 0); - uv_pipe_open(&stdout_pipe, 1); - - uv_fs_t file_req; - int fd = uv_fs_open(loop, &file_req, argv[1], O_CREAT | O_RDWR, 0644, NULL); - uv_pipe_init(loop, &file_pipe, 0); - uv_pipe_open(&file_pipe, fd); - - uv_read_start((uv_stream_t*)&stdin_pipe, alloc_buffer, read_stdin); - - uv_run(loop, UV_RUN_DEFAULT); - return 0; -} diff --git a/libuv/docs/code/uvwget/main.c b/libuv/docs/code/uvwget/main.c deleted file mode 100644 index 4018624..0000000 --- a/libuv/docs/code/uvwget/main.c +++ /dev/null @@ -1,166 +0,0 @@ -#include -#include -#include -#include -#include - -uv_loop_t *loop; -CURLM *curl_handle; -uv_timer_t timeout; - -typedef struct curl_context_s { - uv_poll_t poll_handle; - curl_socket_t sockfd; -} curl_context_t; - -curl_context_t *create_curl_context(curl_socket_t sockfd) { - curl_context_t *context; - - context = (curl_context_t*) malloc(sizeof *context); - - context->sockfd = sockfd; - - int r = uv_poll_init_socket(loop, &context->poll_handle, sockfd); - assert(r == 0); - context->poll_handle.data = context; - - return context; -} - -void curl_close_cb(uv_handle_t *handle) { - curl_context_t *context = (curl_context_t*) handle->data; - free(context); -} - -void destroy_curl_context(curl_context_t *context) { - uv_close((uv_handle_t*) &context->poll_handle, curl_close_cb); -} - - -void add_download(const char *url, int num) { - char filename[50]; - sprintf(filename, "%d.download", num); - FILE *file; - - file = fopen(filename, "w"); - if (file == NULL) { - fprintf(stderr, "Error opening %s\n", filename); - return; - } - - CURL *handle = curl_easy_init(); - curl_easy_setopt(handle, CURLOPT_WRITEDATA, file); - curl_easy_setopt(handle, CURLOPT_URL, url); - curl_multi_add_handle(curl_handle, handle); - fprintf(stderr, "Added download %s -> %s\n", url, filename); -} - -void check_multi_info(void) { - char *done_url; - CURLMsg *message; - int pending; - - while ((message = curl_multi_info_read(curl_handle, &pending))) { - switch (message->msg) { - case CURLMSG_DONE: - curl_easy_getinfo(message->easy_handle, CURLINFO_EFFECTIVE_URL, - &done_url); - printf("%s DONE\n", done_url); - - curl_multi_remove_handle(curl_handle, message->easy_handle); - curl_easy_cleanup(message->easy_handle); - break; - - default: - fprintf(stderr, "CURLMSG default\n"); - abort(); - } - } -} - -void curl_perform(uv_poll_t *req, int status, int events) { - uv_timer_stop(&timeout); - int running_handles; - int flags = 0; - if (status < 0) flags = CURL_CSELECT_ERR; - if (!status && events & UV_READABLE) flags |= CURL_CSELECT_IN; - if (!status && events & UV_WRITABLE) flags |= CURL_CSELECT_OUT; - - curl_context_t *context; - - context = (curl_context_t*)req; - - curl_multi_socket_action(curl_handle, context->sockfd, flags, &running_handles); - check_multi_info(); -} - -void on_timeout(uv_timer_t *req) { - int running_handles; - curl_multi_socket_action(curl_handle, CURL_SOCKET_TIMEOUT, 0, &running_handles); - check_multi_info(); -} - -void start_timeout(CURLM *multi, long timeout_ms, void *userp) { - if (timeout_ms <= 0) - timeout_ms = 1; /* 0 means directly call socket_action, but we'll do it in a bit */ - uv_timer_start(&timeout, on_timeout, timeout_ms, 0); -} - -int handle_socket(CURL *easy, curl_socket_t s, int action, void *userp, void *socketp) { - curl_context_t *curl_context; - if (action == CURL_POLL_IN || action == CURL_POLL_OUT) { - if (socketp) { - curl_context = (curl_context_t*) socketp; - } - else { - curl_context = create_curl_context(s); - curl_multi_assign(curl_handle, s, (void *) curl_context); - } - } - - switch (action) { - case CURL_POLL_IN: - uv_poll_start(&curl_context->poll_handle, UV_READABLE, curl_perform); - break; - case CURL_POLL_OUT: - uv_poll_start(&curl_context->poll_handle, UV_WRITABLE, curl_perform); - break; - case CURL_POLL_REMOVE: - if (socketp) { - uv_poll_stop(&((curl_context_t*)socketp)->poll_handle); - destroy_curl_context((curl_context_t*) socketp); - curl_multi_assign(curl_handle, s, NULL); - } - break; - default: - abort(); - } - - return 0; -} - -int main(int argc, char **argv) { - loop = uv_default_loop(); - - if (argc <= 1) - return 0; - - if (curl_global_init(CURL_GLOBAL_ALL)) { - fprintf(stderr, "Could not init cURL\n"); - return 1; - } - - uv_timer_init(loop, &timeout); - - curl_handle = curl_multi_init(); - curl_multi_setopt(curl_handle, CURLMOPT_SOCKETFUNCTION, handle_socket); - curl_multi_setopt(curl_handle, CURLMOPT_TIMERFUNCTION, start_timeout); - - while (argc-- > 1) { - add_download(argv[argc], argc); - } - - uv_run(loop, UV_RUN_DEFAULT); - curl_multi_cleanup(curl_handle); - return 0; -} diff --git a/libuv/docs/make.bat b/libuv/docs/make.bat deleted file mode 100644 index aa7089a..0000000 --- a/libuv/docs/make.bat +++ /dev/null @@ -1,243 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=build -set SRCDIR=src -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% %SRCDIR% -set I18NSPHINXOPTS=%SPHINXOPTS% %SRCDIR% -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. xml to make Docutils-native XML files - echo. pseudoxml to make pseudoxml-XML files for display purposes - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - - -%SPHINXBUILD% 2> nul -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\libuv.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\libuv.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdf" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdfja" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf-ja - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -if "%1" == "xml" ( - %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The XML files are in %BUILDDIR%/xml. - goto end -) - -if "%1" == "pseudoxml" ( - %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. - goto end -) - -:end diff --git a/libuv/docs/requirements.txt b/libuv/docs/requirements.txt deleted file mode 100644 index 8386e01..0000000 --- a/libuv/docs/requirements.txt +++ /dev/null @@ -1,42 +0,0 @@ -# primary -Sphinx==3.5.4 - -# dependencies -alabaster==0.7.12 -appdirs==1.4.3 -Babel==2.9.0 -CacheControl==0.12.6 -certifi==2019.11.28 -chardet==3.0.4 -colorama==0.4.3 -contextlib2==0.6.0 -distlib==0.3.0 -distro==1.4.0 -docutils==0.16 -html5lib==1.0.1 -idna==2.8 -imagesize==1.2.0 -ipaddr==2.2.0 -Jinja2==2.11.3 -lockfile==0.12.2 -MarkupSafe==1.1.1 -msgpack==0.6.2 -packaging==20.3 -pep517==0.8.2 -progress==1.5 -Pygments==2.8.1 -pyparsing==2.4.6 -pytoml==0.1.21 -pytz==2021.1 -requests==2.22.0 -retrying==1.3.3 -six==1.14.0 -snowballstemmer==2.1.0 -sphinxcontrib-applehelp==1.0.2 -sphinxcontrib-devhelp==1.0.2 -sphinxcontrib-htmlhelp==1.0.3 -sphinxcontrib-jsmath==1.0.1 -sphinxcontrib-qthelp==1.0.3 -sphinxcontrib-serializinghtml==1.1.4 -urllib3==1.25.8 -webencodings==0.5.1 diff --git a/libuv/docs/src/api.rst b/libuv/docs/src/api.rst deleted file mode 100644 index c8e837d..0000000 --- a/libuv/docs/src/api.rst +++ /dev/null @@ -1,36 +0,0 @@ -.. _api: - -API documentation -================= - -.. toctree:: - :maxdepth: 1 - - errors - version - loop - handle - request - timer - prepare - check - idle - async - poll - signal - process - stream - tcp - pipe - tty - udp - fs_event - fs_poll - fs - threadpool - dns - dll - threading - misc - metrics - diff --git a/libuv/docs/src/async.rst b/libuv/docs/src/async.rst deleted file mode 100644 index 029c051..0000000 --- a/libuv/docs/src/async.rst +++ /dev/null @@ -1,65 +0,0 @@ - -.. _async: - -:c:type:`uv_async_t` --- Async handle -===================================== - -Async handles allow the user to "wakeup" the event loop and get a callback -called from another thread. - - -Data types ----------- - -.. c:type:: uv_async_t - - Async handle type. - -.. c:type:: void (*uv_async_cb)(uv_async_t* handle) - - Type definition for callback passed to :c:func:`uv_async_init`. - - -Public members -^^^^^^^^^^^^^^ - -N/A - -.. seealso:: The :c:type:`uv_handle_t` members also apply. - - -API ---- - -.. c:function:: int uv_async_init(uv_loop_t* loop, uv_async_t* async, uv_async_cb async_cb) - - Initialize the handle. A NULL callback is allowed. - - :returns: 0 on success, or an error code < 0 on failure. - - .. note:: - Unlike other handle initialization functions, it immediately starts the handle. - -.. c:function:: int uv_async_send(uv_async_t* async) - - Wake up the event loop and call the async handle's callback. - - :returns: 0 on success, or an error code < 0 on failure. - - .. note:: - It's safe to call this function from any thread. The callback will be called on the - loop thread. - - .. note:: - :c:func:`uv_async_send` is `async-signal-safe `_. - It's safe to call this function from a signal handler. - - .. warning:: - libuv will coalesce calls to :c:func:`uv_async_send`, that is, not every call to it will - yield an execution of the callback. For example: if :c:func:`uv_async_send` is called 5 - times in a row before the callback is called, the callback will only be called once. If - :c:func:`uv_async_send` is called again after the callback was called, it will be called - again. - -.. seealso:: - The :c:type:`uv_handle_t` API functions also apply. diff --git a/libuv/docs/src/check.rst b/libuv/docs/src/check.rst deleted file mode 100644 index 33aab55..0000000 --- a/libuv/docs/src/check.rst +++ /dev/null @@ -1,54 +0,0 @@ - -.. _check: - -:c:type:`uv_check_t` --- Check handle -===================================== - -Check handles will run the given callback once per loop iteration, right -after polling for i/o. - - -Data types ----------- - -.. c:type:: uv_check_t - - Check handle type. - -.. c:type:: void (*uv_check_cb)(uv_check_t* handle) - - Type definition for callback passed to :c:func:`uv_check_start`. - - -Public members -^^^^^^^^^^^^^^ - -N/A - -.. seealso:: The :c:type:`uv_handle_t` members also apply. - - -API ---- - -.. c:function:: int uv_check_init(uv_loop_t* loop, uv_check_t* check) - - Initialize the handle. This function always succeeds. - - :returns: 0 - -.. c:function:: int uv_check_start(uv_check_t* check, uv_check_cb cb) - - Start the handle with the given callback. This function always succeeds, - except when `cb` is `NULL`. - - :returns: 0 on success, or `UV_EINVAL` when `cb == NULL`. - -.. c:function:: int uv_check_stop(uv_check_t* check) - - Stop the handle, the callback will no longer be called. - This function always succeeds. - - :returns: 0 - -.. seealso:: The :c:type:`uv_handle_t` API functions also apply. diff --git a/libuv/docs/src/conf.py b/libuv/docs/src/conf.py deleted file mode 100644 index f6f4325..0000000 --- a/libuv/docs/src/conf.py +++ /dev/null @@ -1,348 +0,0 @@ -# -*- coding: utf-8 -*- -# -# libuv documentation documentation build configuration file, created by -# sphinx-quickstart on Sun Jul 27 11:47:51 2014. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import os -import re -import sys - - -def get_libuv_version(): - with open('../../include/uv/version.h') as f: - data = f.read() - try: - m = re.search(r"""^#define UV_VERSION_MAJOR (\d+)$""", data, re.MULTILINE) - major = int(m.group(1)) - m = re.search(r"""^#define UV_VERSION_MINOR (\d+)$""", data, re.MULTILINE) - minor = int(m.group(1)) - m = re.search(r"""^#define UV_VERSION_PATCH (\d+)$""", data, re.MULTILINE) - patch = int(m.group(1)) - m = re.search(r"""^#define UV_VERSION_IS_RELEASE (\d)$""", data, re.MULTILINE) - is_release = int(m.group(1)) - m = re.search(r"""^#define UV_VERSION_SUFFIX \"(\w*)\"$""", data, re.MULTILINE) - suffix = m.group(1) - return '%d.%d.%d%s' % (major, minor, patch, '-%s' % suffix if not is_release else '') - except Exception: - return 'unknown' - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('sphinx-plugins')) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = ['manpage'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'libuv API documentation' -copyright = u'2014-present, libuv contributors' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = get_libuv_version() -# The full version, including alpha/beta/rc tags. -release = version - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = [] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'nature' - -# 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 -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -html_title = 'libuv documentation' - -# A shorter title for the navigation bar. Default is the same as html_title. -html_short_title = 'libuv %s documentation' % version - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -html_logo = 'static/logo.png' - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -html_favicon = 'static/favicon.ico' - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'libuv' - - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ('index', 'libuv.tex', u'libuv documentation', - u'libuv contributors', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'libuv', u'libuv documentation', - [u'libuv contributors'], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', 'libuv', u'libuv documentation', - u'libuv contributors', 'libuv', 'Cross-platform asynchronous I/O', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False - - -# -- Options for Epub output ---------------------------------------------- - -# Bibliographic Dublin Core info. -epub_title = u'libuv documentation' -epub_author = u'libuv contributors' -epub_publisher = u'libuv contributors' -epub_copyright = u'2014-present, libuv contributors' - -# The basename for the epub file. It defaults to the project name. -epub_basename = u'libuv' - -# The HTML theme for the epub output. Since the default themes are not optimized -# for small screen space, using the same theme for HTML and epub output is -# usually not wise. This defaults to 'epub', a theme designed to save visual -# space. -#epub_theme = 'epub' - -# The language of the text. It defaults to the language option -# or en if the language is not set. -#epub_language = '' - -# The scheme of the identifier. Typical schemes are ISBN or URL. -#epub_scheme = '' - -# The unique identifier of the text. This can be a ISBN number -# or the project homepage. -#epub_identifier = '' - -# A unique identification for the text. -#epub_uid = '' - -# A tuple containing the cover image and cover page html template filenames. -#epub_cover = () - -# A sequence of (type, uri, title) tuples for the guide element of content.opf. -#epub_guide = () - -# HTML files that should be inserted before the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_pre_files = [] - -# HTML files shat should be inserted after the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_post_files = [] - -# A list of files that should not be packed into the epub file. -epub_exclude_files = ['search.html'] - -# The depth of the table of contents in toc.ncx. -#epub_tocdepth = 3 - -# Allow duplicate toc entries. -#epub_tocdup = True - -# Choose between 'default' and 'includehidden'. -#epub_tocscope = 'default' - -# Fix unsupported image types using the PIL. -#epub_fix_images = False - -# Scale large images. -#epub_max_image_width = 0 - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#epub_show_urls = 'inline' - -# If false, no index is generated. -#epub_use_index = True diff --git a/libuv/docs/src/design.rst b/libuv/docs/src/design.rst deleted file mode 100644 index a23e33a..0000000 --- a/libuv/docs/src/design.rst +++ /dev/null @@ -1,140 +0,0 @@ - -.. _design: - -Design overview -=============== - -libuv is cross-platform support library which was originally written for `Node.js`_. It's designed -around the event-driven asynchronous I/O model. - -.. _Node.js: https://nodejs.org - -The library provides much more than a simple abstraction over different I/O polling mechanisms: -'handles' and 'streams' provide a high level abstraction for sockets and other entities; -cross-platform file I/O and threading functionality is also provided, amongst other things. - -Here is a diagram illustrating the different parts that compose libuv and what subsystem they -relate to: - -.. image:: static/architecture.png - :scale: 75% - :align: center - - -Handles and requests -^^^^^^^^^^^^^^^^^^^^ - -libuv provides users with 2 abstractions to work with, in combination with the event loop: -handles and requests. - -Handles represent long-lived objects capable of performing certain operations while active. Some examples: - -- A prepare handle gets its callback called once every loop iteration when active. -- A TCP server handle that gets its connection callback called every time there is a new connection. - -Requests represent (typically) short-lived operations. These operations can be performed over a -handle: write requests are used to write data on a handle; or standalone: getaddrinfo requests -don't need a handle they run directly on the loop. - - -The I/O loop -^^^^^^^^^^^^ - -The I/O (or event) loop is the central part of libuv. It establishes the content for all I/O -operations, and it's meant to be tied to a single thread. One can run multiple event loops -as long as each runs in a different thread. The libuv event loop (or any other API involving -the loop or handles, for that matter) **is not thread-safe** except where stated otherwise. - -The event loop follows the rather usual single threaded asynchronous I/O approach: all (network) -I/O is performed on non-blocking sockets which are polled using the best mechanism available -on the given platform: epoll on Linux, kqueue on OSX and other BSDs, event ports on SunOS and IOCP -on Windows. As part of a loop iteration the loop will block waiting for I/O activity on sockets -which have been added to the poller and callbacks will be fired indicating socket conditions -(readable, writable hangup) so handles can read, write or perform the desired I/O operation. - -In order to better understand how the event loop operates, the following diagram illustrates all -stages of a loop iteration: - -.. image:: static/loop_iteration.png - :scale: 75% - :align: center - - -#. The loop concept of 'now' is updated. The event loop caches the current time at the start of - the event loop tick in order to reduce the number of time-related system calls. - -#. If the loop is *alive* an iteration is started, otherwise the loop will exit immediately. So, - when is a loop considered to be *alive*? If a loop has active and ref'd handles, active - requests or closing handles it's considered to be *alive*. - -#. Due timers are run. All active timers scheduled for a time before the loop's concept of *now* - get their callbacks called. - -#. Pending callbacks are called. All I/O callbacks are called right after polling for I/O, for the - most part. There are cases, however, in which calling such a callback is deferred for the next - loop iteration. If the previous iteration deferred any I/O callback it will be run at this point. - -#. Idle handle callbacks are called. Despite the unfortunate name, idle handles are run on every - loop iteration, if they are active. - -#. Prepare handle callbacks are called. Prepare handles get their callbacks called right before - the loop will block for I/O. - -#. Poll timeout is calculated. Before blocking for I/O the loop calculates for how long it should - block. These are the rules when calculating the timeout: - - * If the loop was run with the ``UV_RUN_NOWAIT`` flag, the timeout is 0. - * If the loop is going to be stopped (:c:func:`uv_stop` was called), the timeout is 0. - * If there are no active handles or requests, the timeout is 0. - * If there are any idle handles active, the timeout is 0. - * If there are any handles pending to be closed, the timeout is 0. - * If none of the above cases matches, the timeout of the closest timer is taken, or - if there are no active timers, infinity. - -#. The loop blocks for I/O. At this point the loop will block for I/O for the duration calculated - in the previous step. All I/O related handles that were monitoring a given file descriptor - for a read or write operation get their callbacks called at this point. - -#. Check handle callbacks are called. Check handles get their callbacks called right after the - loop has blocked for I/O. Check handles are essentially the counterpart of prepare handles. - -#. Close callbacks are called. If a handle was closed by calling :c:func:`uv_close` it will - get the close callback called. - -#. Special case in case the loop was run with ``UV_RUN_ONCE``, as it implies forward progress. - It's possible that no I/O callbacks were fired after blocking for I/O, but some time has passed - so there might be timers which are due, those timers get their callbacks called. - -#. Iteration ends. If the loop was run with ``UV_RUN_NOWAIT`` or ``UV_RUN_ONCE`` modes the - iteration ends and :c:func:`uv_run` will return. If the loop was run with ``UV_RUN_DEFAULT`` - it will continue from the start if it's still *alive*, otherwise it will also end. - - -.. important:: - libuv uses a thread pool to make asynchronous file I/O operations possible, but - network I/O is **always** performed in a single thread, each loop's thread. - -.. note:: - While the polling mechanism is different, libuv makes the execution model consistent - across Unix systems and Windows. - - -File I/O -^^^^^^^^ - -Unlike network I/O, there are no platform-specific file I/O primitives libuv could rely on, -so the current approach is to run blocking file I/O operations in a thread pool. - -For a thorough explanation of the cross-platform file I/O landscape, checkout -`this post `_. - -libuv currently uses a global thread pool on which all loops can queue work. 3 types of -operations are currently run on this pool: - - * File system operations - * DNS functions (getaddrinfo and getnameinfo) - * User specified code via :c:func:`uv_queue_work` - -.. warning:: - See the :c:ref:`threadpool` section for more details, but keep in mind the thread pool size - is quite limited. diff --git a/libuv/docs/src/dll.rst b/libuv/docs/src/dll.rst deleted file mode 100644 index fb13f90..0000000 --- a/libuv/docs/src/dll.rst +++ /dev/null @@ -1,44 +0,0 @@ - -.. _dll: - -Shared library handling -======================= - -libuv provides cross platform utilities for loading shared libraries and -retrieving symbols from them, using the following API. - - -Data types ----------- - -.. c:type:: uv_lib_t - - Shared library data type. - - -Public members -^^^^^^^^^^^^^^ - -N/A - - -API ---- - -.. c:function:: int uv_dlopen(const char* filename, uv_lib_t* lib) - - Opens a shared library. The filename is in utf-8. Returns 0 on success and - -1 on error. Call :c:func:`uv_dlerror` to get the error message. - -.. c:function:: void uv_dlclose(uv_lib_t* lib) - - Close the shared library. - -.. c:function:: int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr) - - Retrieves a data pointer from a dynamic library. It is legal for a symbol - to map to NULL. Returns 0 on success and -1 if the symbol was not found. - -.. c:function:: const char* uv_dlerror(const uv_lib_t* lib) - - Returns the last uv_dlopen() or uv_dlsym() error message. diff --git a/libuv/docs/src/dns.rst b/libuv/docs/src/dns.rst deleted file mode 100644 index 1d88158..0000000 --- a/libuv/docs/src/dns.rst +++ /dev/null @@ -1,108 +0,0 @@ - -.. _dns: - -DNS utility functions -===================== - -libuv provides asynchronous variants of `getaddrinfo` and `getnameinfo`. - - -Data types ----------- - -.. c:type:: uv_getaddrinfo_t - - `getaddrinfo` request type. - -.. c:type:: void (*uv_getaddrinfo_cb)(uv_getaddrinfo_t* req, int status, struct addrinfo* res) - - Callback which will be called with the getaddrinfo request result once - complete. In case it was cancelled, `status` will have a value of - ``UV_ECANCELED``. - -.. c:type:: uv_getnameinfo_t - - `getnameinfo` request type. - -.. c:type:: void (*uv_getnameinfo_cb)(uv_getnameinfo_t* req, int status, const char* hostname, const char* service) - - Callback which will be called with the getnameinfo request result once - complete. In case it was cancelled, `status` will have a value of - ``UV_ECANCELED``. - - -Public members -^^^^^^^^^^^^^^ - -.. c:member:: uv_loop_t* uv_getaddrinfo_t.loop - - Loop that started this getaddrinfo request and where completion will be - reported. Readonly. - -.. c:member:: struct addrinfo* uv_getaddrinfo_t.addrinfo - - Pointer to a `struct addrinfo` containing the result. Must be freed by the user - with :c:func:`uv_freeaddrinfo`. - - .. versionchanged:: 1.3.0 the field is declared as public. - -.. c:member:: uv_loop_t* uv_getnameinfo_t.loop - - Loop that started this getnameinfo request and where completion will be - reported. Readonly. - -.. c:member:: char[NI_MAXHOST] uv_getnameinfo_t.host - - Char array containing the resulting host. It's null terminated. - - .. versionchanged:: 1.3.0 the field is declared as public. - -.. c:member:: char[NI_MAXSERV] uv_getnameinfo_t.service - - Char array containing the resulting service. It's null terminated. - - .. versionchanged:: 1.3.0 the field is declared as public. - -.. seealso:: The :c:type:`uv_req_t` members also apply. - - -API ---- - -.. c:function:: int uv_getaddrinfo(uv_loop_t* loop, uv_getaddrinfo_t* req, uv_getaddrinfo_cb getaddrinfo_cb, const char* node, const char* service, const struct addrinfo* hints) - - Asynchronous :man:`getaddrinfo(3)`. - - Either node or service may be NULL but not both. - - `hints` is a pointer to a struct addrinfo with additional address type - constraints, or NULL. Consult `man -s 3 getaddrinfo` for more details. - - Returns 0 on success or an error code < 0 on failure. If successful, the - callback will get called sometime in the future with the lookup result, - which is either: - - * status == 0, the res argument points to a valid `struct addrinfo`, or - * status < 0, the res argument is NULL. See the UV_EAI_* constants. - - Call :c:func:`uv_freeaddrinfo` to free the addrinfo structure. - - .. versionchanged:: 1.3.0 the callback parameter is now allowed to be NULL, - in which case the request will run **synchronously**. - -.. c:function:: void uv_freeaddrinfo(struct addrinfo* ai) - - Free the struct addrinfo. Passing NULL is allowed and is a no-op. - -.. c:function:: int uv_getnameinfo(uv_loop_t* loop, uv_getnameinfo_t* req, uv_getnameinfo_cb getnameinfo_cb, const struct sockaddr* addr, int flags) - - Asynchronous :man:`getnameinfo(3)`. - - Returns 0 on success or an error code < 0 on failure. If successful, the - callback will get called sometime in the future with the lookup result. - Consult `man -s 3 getnameinfo` for more details. - - .. versionchanged:: 1.3.0 the callback parameter is now allowed to be NULL, - in which case the request will run **synchronously**. - -.. seealso:: The :c:type:`uv_req_t` API functions also apply. diff --git a/libuv/docs/src/errors.rst b/libuv/docs/src/errors.rst deleted file mode 100644 index c7240f3..0000000 --- a/libuv/docs/src/errors.rst +++ /dev/null @@ -1,385 +0,0 @@ - -.. _errors: - -Error handling -============== - -In libuv errors are negative numbered constants. As a rule of thumb, whenever -there is a status parameter, or an API functions returns an integer, a negative -number will imply an error. - -When a function which takes a callback returns an error, the callback will never -be called. - -.. note:: - Implementation detail: on Unix error codes are the negated `errno` (or `-errno`), while on - Windows they are defined by libuv to arbitrary negative numbers. - - -Error constants ---------------- - -.. c:macro:: UV_E2BIG - - argument list too long - -.. c:macro:: UV_EACCES - - permission denied - -.. c:macro:: UV_EADDRINUSE - - address already in use - -.. c:macro:: UV_EADDRNOTAVAIL - - address not available - -.. c:macro:: UV_EAFNOSUPPORT - - address family not supported - -.. c:macro:: UV_EAGAIN - - resource temporarily unavailable - -.. c:macro:: UV_EAI_ADDRFAMILY - - address family not supported - -.. c:macro:: UV_EAI_AGAIN - - temporary failure - -.. c:macro:: UV_EAI_BADFLAGS - - bad ai_flags value - -.. c:macro:: UV_EAI_BADHINTS - - invalid value for hints - -.. c:macro:: UV_EAI_CANCELED - - request canceled - -.. c:macro:: UV_EAI_FAIL - - permanent failure - -.. c:macro:: UV_EAI_FAMILY - - ai_family not supported - -.. c:macro:: UV_EAI_MEMORY - - out of memory - -.. c:macro:: UV_EAI_NODATA - - no address - -.. c:macro:: UV_EAI_NONAME - - unknown node or service - -.. c:macro:: UV_EAI_OVERFLOW - - argument buffer overflow - -.. c:macro:: UV_EAI_PROTOCOL - - resolved protocol is unknown - -.. c:macro:: UV_EAI_SERVICE - - service not available for socket type - -.. c:macro:: UV_EAI_SOCKTYPE - - socket type not supported - -.. c:macro:: UV_EALREADY - - connection already in progress - -.. c:macro:: UV_EBADF - - bad file descriptor - -.. c:macro:: UV_EBUSY - - resource busy or locked - -.. c:macro:: UV_ECANCELED - - operation canceled - -.. c:macro:: UV_ECHARSET - - invalid Unicode character - -.. c:macro:: UV_ECONNABORTED - - software caused connection abort - -.. c:macro:: UV_ECONNREFUSED - - connection refused - -.. c:macro:: UV_ECONNRESET - - connection reset by peer - -.. c:macro:: UV_EDESTADDRREQ - - destination address required - -.. c:macro:: UV_EEXIST - - file already exists - -.. c:macro:: UV_EFAULT - - bad address in system call argument - -.. c:macro:: UV_EFBIG - - file too large - -.. c:macro:: UV_EHOSTUNREACH - - host is unreachable - -.. c:macro:: UV_EINTR - - interrupted system call - -.. c:macro:: UV_EINVAL - - invalid argument - -.. c:macro:: UV_EIO - - i/o error - -.. c:macro:: UV_EISCONN - - socket is already connected - -.. c:macro:: UV_EISDIR - - illegal operation on a directory - -.. c:macro:: UV_ELOOP - - too many symbolic links encountered - -.. c:macro:: UV_EMFILE - - too many open files - -.. c:macro:: UV_EMSGSIZE - - message too long - -.. c:macro:: UV_ENAMETOOLONG - - name too long - -.. c:macro:: UV_ENETDOWN - - network is down - -.. c:macro:: UV_ENETUNREACH - - network is unreachable - -.. c:macro:: UV_ENFILE - - file table overflow - -.. c:macro:: UV_ENOBUFS - - no buffer space available - -.. c:macro:: UV_ENODEV - - no such device - -.. c:macro:: UV_ENOENT - - no such file or directory - -.. c:macro:: UV_ENOMEM - - not enough memory - -.. c:macro:: UV_ENONET - - machine is not on the network - -.. c:macro:: UV_ENOPROTOOPT - - protocol not available - -.. c:macro:: UV_ENOSPC - - no space left on device - -.. c:macro:: UV_ENOSYS - - function not implemented - -.. c:macro:: UV_ENOTCONN - - socket is not connected - -.. c:macro:: UV_ENOTDIR - - not a directory - -.. c:macro:: UV_ENOTEMPTY - - directory not empty - -.. c:macro:: UV_ENOTSOCK - - socket operation on non-socket - -.. c:macro:: UV_ENOTSUP - - operation not supported on socket - -.. c:macro:: UV_EOVERFLOW - - value too large for defined data type - -.. c:macro:: UV_EPERM - - operation not permitted - -.. c:macro:: UV_EPIPE - - broken pipe - -.. c:macro:: UV_EPROTO - - protocol error - -.. c:macro:: UV_EPROTONOSUPPORT - - protocol not supported - -.. c:macro:: UV_EPROTOTYPE - - protocol wrong type for socket - -.. c:macro:: UV_ERANGE - - result too large - -.. c:macro:: UV_EROFS - - read-only file system - -.. c:macro:: UV_ESHUTDOWN - - cannot send after transport endpoint shutdown - -.. c:macro:: UV_ESPIPE - - invalid seek - -.. c:macro:: UV_ESRCH - - no such process - -.. c:macro:: UV_ETIMEDOUT - - connection timed out - -.. c:macro:: UV_ETXTBSY - - text file is busy - -.. c:macro:: UV_EXDEV - - cross-device link not permitted - -.. c:macro:: UV_UNKNOWN - - unknown error - -.. c:macro:: UV_EOF - - end of file - -.. c:macro:: UV_ENXIO - - no such device or address - -.. c:macro:: UV_EMLINK - - too many links - -.. c:macro:: UV_ENOTTY - - inappropriate ioctl for device - -.. c:macro:: UV_EFTYPE - - inappropriate file type or format - -.. c:macro:: UV_EILSEQ - - illegal byte sequence - -.. c:macro:: UV_ESOCKTNOSUPPORT - - socket type not supported - - -API ---- - -.. c:macro:: UV_ERRNO_MAP(iter_macro) - - Macro that expands to a series of invocations of `iter_macro` for - each of the error constants above. `iter_macro` is invoked with two - arguments: the name of the error constant without the `UV_` prefix, - and the error message string literal. - -.. c:function:: const char* uv_strerror(int err) - - Returns the error message for the given error code. Leaks a few bytes - of memory when you call it with an unknown error code. - -.. c:function:: char* uv_strerror_r(int err, char* buf, size_t buflen) - - Returns the error message for the given error code. The zero-terminated - message is stored in the user-supplied buffer `buf` of at most `buflen` bytes. - - .. versionadded:: 1.22.0 - -.. c:function:: const char* uv_err_name(int err) - - Returns the error name for the given error code. Leaks a few bytes - of memory when you call it with an unknown error code. - -.. c:function:: char* uv_err_name_r(int err, char* buf, size_t buflen) - - Returns the error name for the given error code. The zero-terminated - name is stored in the user-supplied buffer `buf` of at most `buflen` bytes. - - .. versionadded:: 1.22.0 - -.. c:function:: int uv_translate_sys_error(int sys_errno) - - Returns the libuv error code equivalent to the given platform dependent error - code: POSIX error codes on Unix (the ones stored in `errno`), and Win32 error - codes on Windows (those returned by `GetLastError()` or `WSAGetLastError()`). - - If `sys_errno` is already a libuv error, it is simply returned. - - .. versionchanged:: 1.10.0 function declared public. diff --git a/libuv/docs/src/fs.rst b/libuv/docs/src/fs.rst deleted file mode 100644 index 0bf2abe..0000000 --- a/libuv/docs/src/fs.rst +++ /dev/null @@ -1,702 +0,0 @@ - -.. _fs: - -File system operations -====================== - -libuv provides a wide variety of cross-platform sync and async file system -operations. All functions defined in this document take a callback, which is -allowed to be NULL. If the callback is NULL the request is completed synchronously, -otherwise it will be performed asynchronously. - -All file operations are run on the threadpool. See :ref:`threadpool` for information -on the threadpool size. - -.. note:: - On Windows `uv_fs_*` functions use utf-8 encoding. - -Data types ----------- - -.. c:type:: uv_fs_t - - File system request type. - -.. c:type:: uv_timespec_t - - Portable equivalent of ``struct timespec``. - - :: - - typedef struct { - long tv_sec; - long tv_nsec; - } uv_timespec_t; - -.. c:type:: uv_stat_t - - Portable equivalent of ``struct stat``. - - :: - - typedef struct { - uint64_t st_dev; - uint64_t st_mode; - uint64_t st_nlink; - uint64_t st_uid; - uint64_t st_gid; - uint64_t st_rdev; - uint64_t st_ino; - uint64_t st_size; - uint64_t st_blksize; - uint64_t st_blocks; - uint64_t st_flags; - uint64_t st_gen; - uv_timespec_t st_atim; - uv_timespec_t st_mtim; - uv_timespec_t st_ctim; - uv_timespec_t st_birthtim; - } uv_stat_t; - -.. c:enum:: uv_fs_type - - File system request type. - - :: - - typedef enum { - UV_FS_UNKNOWN = -1, - UV_FS_CUSTOM, - UV_FS_OPEN, - UV_FS_CLOSE, - UV_FS_READ, - UV_FS_WRITE, - UV_FS_SENDFILE, - UV_FS_STAT, - UV_FS_LSTAT, - UV_FS_FSTAT, - UV_FS_FTRUNCATE, - UV_FS_UTIME, - UV_FS_FUTIME, - UV_FS_ACCESS, - UV_FS_CHMOD, - UV_FS_FCHMOD, - UV_FS_FSYNC, - UV_FS_FDATASYNC, - UV_FS_UNLINK, - UV_FS_RMDIR, - UV_FS_MKDIR, - UV_FS_MKDTEMP, - UV_FS_RENAME, - UV_FS_SCANDIR, - UV_FS_LINK, - UV_FS_SYMLINK, - UV_FS_READLINK, - UV_FS_CHOWN, - UV_FS_FCHOWN, - UV_FS_REALPATH, - UV_FS_COPYFILE, - UV_FS_LCHOWN, - UV_FS_OPENDIR, - UV_FS_READDIR, - UV_FS_CLOSEDIR, - UV_FS_MKSTEMP, - UV_FS_LUTIME - } uv_fs_type; - -.. c:type:: uv_statfs_t - - Reduced cross platform equivalent of ``struct statfs``. - Used in :c:func:`uv_fs_statfs`. - - :: - - typedef struct uv_statfs_s { - uint64_t f_type; - uint64_t f_bsize; - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_bavail; - uint64_t f_files; - uint64_t f_ffree; - uint64_t f_spare[4]; - } uv_statfs_t; - -.. c:enum:: uv_dirent_t - - Cross platform (reduced) equivalent of ``struct dirent``. - Used in :c:func:`uv_fs_scandir_next`. - - :: - - typedef enum { - UV_DIRENT_UNKNOWN, - UV_DIRENT_FILE, - UV_DIRENT_DIR, - UV_DIRENT_LINK, - UV_DIRENT_FIFO, - UV_DIRENT_SOCKET, - UV_DIRENT_CHAR, - UV_DIRENT_BLOCK - } uv_dirent_type_t; - - typedef struct uv_dirent_s { - const char* name; - uv_dirent_type_t type; - } uv_dirent_t; - -.. c:type:: uv_dir_t - - Data type used for streaming directory iteration. - Used by :c:func:`uv_fs_opendir()`, :c:func:`uv_fs_readdir()`, and - :c:func:`uv_fs_closedir()`. `dirents` represents a user provided array of - `uv_dirent_t`s used to hold results. `nentries` is the user provided maximum - array size of `dirents`. - - :: - - typedef struct uv_dir_s { - uv_dirent_t* dirents; - size_t nentries; - } uv_dir_t; - - -Public members -^^^^^^^^^^^^^^ - -.. c:member:: uv_loop_t* uv_fs_t.loop - - Loop that started this request and where completion will be reported. - Readonly. - -.. c:member:: uv_fs_type uv_fs_t.fs_type - - FS request type. - -.. c:member:: const char* uv_fs_t.path - - Path affecting the request. - -.. c:member:: ssize_t uv_fs_t.result - - Result of the request. < 0 means error, success otherwise. On requests such - as :c:func:`uv_fs_read` or :c:func:`uv_fs_write` it indicates the amount of - data that was read or written, respectively. - -.. c:member:: uv_stat_t uv_fs_t.statbuf - - Stores the result of :c:func:`uv_fs_stat` and other stat requests. - -.. c:member:: void* uv_fs_t.ptr - - Stores the result of :c:func:`uv_fs_readlink` and - :c:func:`uv_fs_realpath` and serves as an alias to `statbuf`. - -.. seealso:: The :c:type:`uv_req_t` members also apply. - - -API ---- - -.. c:function:: void uv_fs_req_cleanup(uv_fs_t* req) - - Cleanup request. Must be called after a request is finished to deallocate - any memory libuv might have allocated. - -.. c:function:: int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) - - Equivalent to :man:`close(2)`. - -.. c:function:: int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int mode, uv_fs_cb cb) - - Equivalent to :man:`open(2)`. - - .. note:: - On Windows libuv uses `CreateFileW` and thus the file is always opened - in binary mode. Because of this the O_BINARY and O_TEXT flags are not - supported. - -.. c:function:: int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, uv_file file, const uv_buf_t bufs[], unsigned int nbufs, int64_t offset, uv_fs_cb cb) - - Equivalent to :man:`preadv(2)`. - - .. warning:: - On Windows, under non-MSVC environments (e.g. when GCC or Clang is used - to build libuv), files opened using ``UV_FS_O_FILEMAP`` may cause a fatal - crash if the memory mapped read operation fails. - -.. c:function:: int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) - - Equivalent to :man:`unlink(2)`. - -.. c:function:: int uv_fs_write(uv_loop_t* loop, uv_fs_t* req, uv_file file, const uv_buf_t bufs[], unsigned int nbufs, int64_t offset, uv_fs_cb cb) - - Equivalent to :man:`pwritev(2)`. - - .. warning:: - On Windows, under non-MSVC environments (e.g. when GCC or Clang is used - to build libuv), files opened using ``UV_FS_O_FILEMAP`` may cause a fatal - crash if the memory mapped write operation fails. - -.. c:function:: int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, uv_fs_cb cb) - - Equivalent to :man:`mkdir(2)`. - - .. note:: - `mode` is currently not implemented on Windows. - -.. c:function:: int uv_fs_mkdtemp(uv_loop_t* loop, uv_fs_t* req, const char* tpl, uv_fs_cb cb) - - Equivalent to :man:`mkdtemp(3)`. The result can be found as a null terminated string at `req->path`. - -.. c:function:: int uv_fs_mkstemp(uv_loop_t* loop, uv_fs_t* req, const char* tpl, uv_fs_cb cb) - - Equivalent to :man:`mkstemp(3)`. The created file path can be found as a null terminated string at `req->path`. - The file descriptor can be found as an integer at `req->result`. - - .. versionadded:: 1.34.0 - -.. c:function:: int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) - - Equivalent to :man:`rmdir(2)`. - -.. c:function:: int uv_fs_opendir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) - - Opens `path` as a directory stream. On success, a `uv_dir_t` is allocated - and returned via `req->ptr`. This memory is not freed by - `uv_fs_req_cleanup()`, although `req->ptr` is set to `NULL`. The allocated - memory must be freed by calling `uv_fs_closedir()`. On failure, no memory - is allocated. - - The contents of the directory can be iterated over by passing the resulting - `uv_dir_t` to `uv_fs_readdir()`. - - .. versionadded:: 1.28.0 - -.. c:function:: int uv_fs_closedir(uv_loop_t* loop, uv_fs_t* req, uv_dir_t* dir, uv_fs_cb cb) - - Closes the directory stream represented by `dir` and frees the memory - allocated by `uv_fs_opendir()`. - - .. versionadded:: 1.28.0 - -.. c:function:: int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, uv_dir_t* dir, uv_fs_cb cb) - - Iterates over the directory stream, `dir`, returned by a successful - `uv_fs_opendir()` call. Prior to invoking `uv_fs_readdir()`, the caller - must set `dir->dirents` and `dir->nentries`, representing the array of - :c:type:`uv_dirent_t` elements used to hold the read directory entries and - its size. - - On success, the result is an integer >= 0 representing the number of entries - read from the stream. - - .. versionadded:: 1.28.0 - - .. warning:: - `uv_fs_readdir()` is not thread safe. - - .. note:: - This function does not return the "." and ".." entries. - - .. note:: - On success this function allocates memory that must be freed using - `uv_fs_req_cleanup()`. `uv_fs_req_cleanup()` must be called before - closing the directory with `uv_fs_closedir()`. - -.. c:function:: int uv_fs_scandir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, uv_fs_cb cb) -.. c:function:: int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent) - - Equivalent to :man:`scandir(3)`, with a slightly different API. Once the callback - for the request is called, the user can use :c:func:`uv_fs_scandir_next` to - get `ent` populated with the next directory entry data. When there are no - more entries ``UV_EOF`` will be returned. - - .. note:: - Unlike `scandir(3)`, this function does not return the "." and ".." entries. - - .. note:: - On Linux, getting the type of an entry is only supported by some file systems (btrfs, ext2, - ext3 and ext4 at the time of this writing), check the :man:`getdents(2)` man page. - -.. c:function:: int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) -.. c:function:: int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) -.. c:function:: int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) - - Equivalent to :man:`stat(2)`, :man:`fstat(2)` and :man:`lstat(2)` respectively. - -.. c:function:: int uv_fs_statfs(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) - - Equivalent to :man:`statfs(2)`. On success, a `uv_statfs_t` is allocated - and returned via `req->ptr`. This memory is freed by `uv_fs_req_cleanup()`. - - .. note:: - Any fields in the resulting `uv_statfs_t` that are not supported by the - underlying operating system are set to zero. - - .. versionadded:: 1.31.0 - -.. c:function:: int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, uv_fs_cb cb) - - Equivalent to :man:`rename(2)`. - -.. c:function:: int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) - - Equivalent to :man:`fsync(2)`. - - .. note:: - For AIX, `uv_fs_fsync` returns `UV_EBADF` on file descriptors referencing - non regular files. - -.. c:function:: int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) - - Equivalent to :man:`fdatasync(2)`. - -.. c:function:: int uv_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req, uv_file file, int64_t offset, uv_fs_cb cb) - - Equivalent to :man:`ftruncate(2)`. - -.. c:function:: int uv_fs_copyfile(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, int flags, uv_fs_cb cb) - - Copies a file from `path` to `new_path`. Supported `flags` are described below. - - - `UV_FS_COPYFILE_EXCL`: If present, `uv_fs_copyfile()` will fail with - `UV_EEXIST` if the destination path already exists. The default behavior - is to overwrite the destination if it exists. - - `UV_FS_COPYFILE_FICLONE`: If present, `uv_fs_copyfile()` will attempt to - create a copy-on-write reflink. If the underlying platform does not - support copy-on-write, or an error occurs while attempting to use - copy-on-write, a fallback copy mechanism based on - :c:func:`uv_fs_sendfile()` is used. - - `UV_FS_COPYFILE_FICLONE_FORCE`: If present, `uv_fs_copyfile()` will - attempt to create a copy-on-write reflink. If the underlying platform does - not support copy-on-write, or an error occurs while attempting to use - copy-on-write, then an error is returned. - - .. warning:: - If the destination path is created, but an error occurs while copying - the data, then the destination path is removed. There is a brief window - of time between closing and removing the file where another process - could access the file. - - .. versionadded:: 1.14.0 - - .. versionchanged:: 1.20.0 `UV_FS_COPYFILE_FICLONE` and - `UV_FS_COPYFILE_FICLONE_FORCE` are supported. - - .. versionchanged:: 1.33.0 If an error occurs while using - `UV_FS_COPYFILE_FICLONE_FORCE`, that error is returned. Previously, - all errors were mapped to `UV_ENOTSUP`. - -.. c:function:: int uv_fs_sendfile(uv_loop_t* loop, uv_fs_t* req, uv_file out_fd, uv_file in_fd, int64_t in_offset, size_t length, uv_fs_cb cb) - - Limited equivalent to :man:`sendfile(2)`. - -.. c:function:: int uv_fs_access(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, uv_fs_cb cb) - - Equivalent to :man:`access(2)` on Unix. Windows uses ``GetFileAttributesW()``. - -.. c:function:: int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, uv_fs_cb cb) -.. c:function:: int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file file, int mode, uv_fs_cb cb) - - Equivalent to :man:`chmod(2)` and :man:`fchmod(2)` respectively. - -.. c:function:: int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, double mtime, uv_fs_cb cb) -.. c:function:: int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file file, double atime, double mtime, uv_fs_cb cb) -.. c:function:: int uv_fs_lutime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, double mtime, uv_fs_cb cb) - - Equivalent to :man:`utime(2)`, :man:`futimes(3)` and :man:`lutimes(3)` respectively. - - .. note:: - z/OS: `uv_fs_lutime()` is not implemented for z/OS. It can still be called but will return - ``UV_ENOSYS``. - - .. note:: - AIX: `uv_fs_futime()` and `uv_fs_lutime()` functions only work for AIX 7.1 and newer. - They can still be called on older versions but will return ``UV_ENOSYS``. - - .. versionchanged:: 1.10.0 sub-second precission is supported on Windows - -.. c:function:: int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, uv_fs_cb cb) - - Equivalent to :man:`link(2)`. - -.. c:function:: int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, int flags, uv_fs_cb cb) - - Equivalent to :man:`symlink(2)`. - - .. note:: - On Windows the `flags` parameter can be specified to control how the symlink will - be created: - - * ``UV_FS_SYMLINK_DIR``: indicates that `path` points to a directory. - - * ``UV_FS_SYMLINK_JUNCTION``: request that the symlink is created - using junction points. - -.. c:function:: int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) - - Equivalent to :man:`readlink(2)`. - The resulting string is stored in `req->ptr`. - -.. c:function:: int uv_fs_realpath(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) - - Equivalent to :man:`realpath(3)` on Unix. Windows uses `GetFinalPathNameByHandle `_. - The resulting string is stored in `req->ptr`. - - .. warning:: - This function has certain platform-specific caveats that were discovered when used in Node. - - * macOS and other BSDs: this function will fail with UV_ELOOP if more than 32 symlinks are - found while resolving the given path. This limit is hardcoded and cannot be sidestepped. - * Windows: while this function works in the common case, there are a number of corner cases - where it doesn't: - - - Paths in ramdisk volumes created by tools which sidestep the Volume Manager (such as ImDisk) - cannot be resolved. - - Inconsistent casing when using drive letters. - - Resolved path bypasses subst'd drives. - - While this function can still be used, it's not recommended if scenarios such as the - above need to be supported. - - The background story and some more details on these issues can be checked - `here `_. - - .. note:: - This function is not implemented on Windows XP and Windows Server 2003. - On these systems, UV_ENOSYS is returned. - - .. versionadded:: 1.8.0 - -.. c:function:: int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb) -.. c:function:: int uv_fs_fchown(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb) -.. c:function:: int uv_fs_lchown(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb) - - Equivalent to :man:`chown(2)`, :man:`fchown(2)` and :man:`lchown(2)` respectively. - - .. note:: - These functions are not implemented on Windows. - - .. versionchanged:: 1.21.0 implemented uv_fs_lchown - -.. c:function:: uv_fs_type uv_fs_get_type(const uv_fs_t* req) - - Returns `req->fs_type`. - - .. versionadded:: 1.19.0 - -.. c:function:: ssize_t uv_fs_get_result(const uv_fs_t* req) - - Returns `req->result`. - - .. versionadded:: 1.19.0 - -.. c:function:: int uv_fs_get_system_error(const uv_fs_t* req) - - Returns the platform specific error code - `GetLastError()` value on Windows - and `-(req->result)` on other platforms. - - .. versionadded:: 1.38.0 - -.. c:function:: void* uv_fs_get_ptr(const uv_fs_t* req) - - Returns `req->ptr`. - - .. versionadded:: 1.19.0 - -.. c:function:: const char* uv_fs_get_path(const uv_fs_t* req) - - Returns `req->path`. - - .. versionadded:: 1.19.0 - -.. c:function:: uv_stat_t* uv_fs_get_statbuf(uv_fs_t* req) - - Returns `&req->statbuf`. - - .. versionadded:: 1.19.0 - -.. seealso:: The :c:type:`uv_req_t` API functions also apply. - -Helper functions ----------------- - -.. c:function:: uv_os_fd_t uv_get_osfhandle(int fd) - - For a file descriptor in the C runtime, get the OS-dependent handle. - On UNIX, returns the ``fd`` intact. On Windows, this calls `_get_osfhandle `_. - Note that the return value is still owned by the C runtime, - any attempts to close it or to use it after closing the fd may lead to malfunction. - - .. versionadded:: 1.12.0 - -.. c:function:: int uv_open_osfhandle(uv_os_fd_t os_fd) - - For a OS-dependent handle, get the file descriptor in the C runtime. - On UNIX, returns the ``os_fd`` intact. On Windows, this calls `_open_osfhandle `_. - Note that this consumes the argument, any attempts to close it or to use it - after closing the return value may lead to malfunction. - - .. versionadded:: 1.23.0 - -File open constants -------------------- - -.. c:macro:: UV_FS_O_APPEND - - The file is opened in append mode. Before each write, the file offset is - positioned at the end of the file. - -.. c:macro:: UV_FS_O_CREAT - - The file is created if it does not already exist. - -.. c:macro:: UV_FS_O_DIRECT - - File I/O is done directly to and from user-space buffers, which must be - aligned. Buffer size and address should be a multiple of the physical sector - size of the block device. - - .. note:: - `UV_FS_O_DIRECT` is supported on Linux, and on Windows via - `FILE_FLAG_NO_BUFFERING `_. - `UV_FS_O_DIRECT` is not supported on macOS. - -.. c:macro:: UV_FS_O_DIRECTORY - - If the path is not a directory, fail the open. - - .. note:: - `UV_FS_O_DIRECTORY` is not supported on Windows. - -.. c:macro:: UV_FS_O_DSYNC - - The file is opened for synchronous I/O. Write operations will complete once - all data and a minimum of metadata are flushed to disk. - - .. note:: - `UV_FS_O_DSYNC` is supported on Windows via - `FILE_FLAG_WRITE_THROUGH `_. - -.. c:macro:: UV_FS_O_EXCL - - If the `O_CREAT` flag is set and the file already exists, fail the open. - - .. note:: - In general, the behavior of `O_EXCL` is undefined if it is used without - `O_CREAT`. There is one exception: on Linux 2.6 and later, `O_EXCL` can - be used without `O_CREAT` if pathname refers to a block device. If the - block device is in use by the system (e.g., mounted), the open will fail - with the error `EBUSY`. - -.. c:macro:: UV_FS_O_EXLOCK - - Atomically obtain an exclusive lock. - - .. note:: - `UV_FS_O_EXLOCK` is only supported on macOS and Windows. - - .. versionchanged:: 1.17.0 support is added for Windows. - -.. c:macro:: UV_FS_O_FILEMAP - - Use a memory file mapping to access the file. When using this flag, the - file cannot be open multiple times concurrently. - - .. note:: - `UV_FS_O_FILEMAP` is only supported on Windows. - -.. c:macro:: UV_FS_O_NOATIME - - Do not update the file access time when the file is read. - - .. note:: - `UV_FS_O_NOATIME` is not supported on Windows. - -.. c:macro:: UV_FS_O_NOCTTY - - If the path identifies a terminal device, opening the path will not cause - that terminal to become the controlling terminal for the process (if the - process does not already have one). - - .. note:: - `UV_FS_O_NOCTTY` is not supported on Windows. - -.. c:macro:: UV_FS_O_NOFOLLOW - - If the path is a symbolic link, fail the open. - - .. note:: - `UV_FS_O_NOFOLLOW` is not supported on Windows. - -.. c:macro:: UV_FS_O_NONBLOCK - - Open the file in nonblocking mode if possible. - - .. note:: - `UV_FS_O_NONBLOCK` is not supported on Windows. - -.. c:macro:: UV_FS_O_RANDOM - - Access is intended to be random. The system can use this as a hint to - optimize file caching. - - .. note:: - `UV_FS_O_RANDOM` is only supported on Windows via - `FILE_FLAG_RANDOM_ACCESS `_. - -.. c:macro:: UV_FS_O_RDONLY - - Open the file for read-only access. - -.. c:macro:: UV_FS_O_RDWR - - Open the file for read-write access. - -.. c:macro:: UV_FS_O_SEQUENTIAL - - Access is intended to be sequential from beginning to end. The system can - use this as a hint to optimize file caching. - - .. note:: - `UV_FS_O_SEQUENTIAL` is only supported on Windows via - `FILE_FLAG_SEQUENTIAL_SCAN `_. - -.. c:macro:: UV_FS_O_SHORT_LIVED - - The file is temporary and should not be flushed to disk if possible. - - .. note:: - `UV_FS_O_SHORT_LIVED` is only supported on Windows via - `FILE_ATTRIBUTE_TEMPORARY `_. - -.. c:macro:: UV_FS_O_SYMLINK - - Open the symbolic link itself rather than the resource it points to. - -.. c:macro:: UV_FS_O_SYNC - - The file is opened for synchronous I/O. Write operations will complete once - all data and all metadata are flushed to disk. - - .. note:: - `UV_FS_O_SYNC` is supported on Windows via - `FILE_FLAG_WRITE_THROUGH `_. - -.. c:macro:: UV_FS_O_TEMPORARY - - The file is temporary and should not be flushed to disk if possible. - - .. note:: - `UV_FS_O_TEMPORARY` is only supported on Windows via - `FILE_ATTRIBUTE_TEMPORARY `_. - -.. c:macro:: UV_FS_O_TRUNC - - If the file exists and is a regular file, and the file is opened - successfully for write access, its length shall be truncated to zero. - -.. c:macro:: UV_FS_O_WRONLY - - Open the file for write-only access. diff --git a/libuv/docs/src/fs_event.rst b/libuv/docs/src/fs_event.rst deleted file mode 100644 index e28ec62..0000000 --- a/libuv/docs/src/fs_event.rst +++ /dev/null @@ -1,132 +0,0 @@ - -.. _fs_event: - -:c:type:`uv_fs_event_t` --- FS Event handle -=========================================== - -FS Event handles allow the user to monitor a given path for changes, for example, -if the file was renamed or there was a generic change in it. This handle uses -the best backend for the job on each platform. - -.. note:: - For AIX, the non default IBM bos.ahafs package has to be installed. - The AIX Event Infrastructure file system (ahafs) has some limitations: - - - ahafs tracks monitoring per process and is not thread safe. A separate process - must be spawned for each monitor for the same event. - - Events for file modification (writing to a file) are not received if only the - containing folder is watched. - - See documentation_ for more details. - - The z/OS file system events monitoring infrastructure does not notify of file - creation/deletion within a directory that is being monitored. - See the `IBM Knowledge centre`_ for more details. - - .. _documentation: https://developer.ibm.com/articles/au-aix_event_infrastructure/ - .. _`IBM Knowledge centre`: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/com.ibm.zos.v2r1.bpxb100/ioc.htm - - - - -Data types ----------- - -.. c:type:: uv_fs_event_t - - FS Event handle type. - -.. 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. - The `events` parameter is an ORed mask of :c:type:`uv_fs_event` elements. - -.. c:type:: uv_fs_event - - Event types that :c:type:`uv_fs_event_t` handles monitor. - - :: - - enum uv_fs_event { - UV_RENAME = 1, - UV_CHANGE = 2 - }; - -.. c:type:: uv_fs_event_flags - - Flags that can be passed to :c:func:`uv_fs_event_start` to control its - behavior. - - :: - - enum uv_fs_event_flags { - /* - * By default, if the fs event watcher is given a directory name, we will - * watch for all events in that directory. This flags overrides this behavior - * and makes fs_event report only changes to the directory entry itself. This - * flag does not affect individual files watched. - * This flag is currently not implemented yet on any backend. - */ - UV_FS_EVENT_WATCH_ENTRY = 1, - /* - * By default uv_fs_event will try to use a kernel interface such as inotify - * or kqueue to detect events. This may not work on remote file systems such - * as NFS mounts. This flag makes fs_event fall back to calling stat() on a - * regular interval. - * This flag is currently not implemented yet on any backend. - */ - UV_FS_EVENT_STAT = 2, - /* - * By default, event watcher, when watching directory, is not registering - * (is ignoring) changes in its subdirectories. - * This flag will override this behaviour on platforms that support it. - */ - UV_FS_EVENT_RECURSIVE = 4 - }; - - -Public members -^^^^^^^^^^^^^^ - -N/A - -.. seealso:: The :c:type:`uv_handle_t` members also apply. - - -API ---- - -.. c:function:: int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) - - Initialize the handle. - -.. c:function:: int uv_fs_event_start(uv_fs_event_t* handle, uv_fs_event_cb cb, const char* path, unsigned int flags) - - Start the handle with the given callback, which will watch the specified - `path` for changes. `flags` can be an ORed mask of :c:type:`uv_fs_event_flags`. - - .. note:: Currently the only supported flag is ``UV_FS_EVENT_RECURSIVE`` and - only on OSX and Windows. - -.. c:function:: int uv_fs_event_stop(uv_fs_event_t* handle) - - Stop the handle, the callback will no longer be called. - -.. c:function:: int uv_fs_event_getpath(uv_fs_event_t* handle, char* buffer, size_t* size) - - Get the path being monitored by the handle. The buffer must be preallocated - by the user. Returns 0 on success or an error code < 0 in case of failure. - On success, `buffer` will contain the path and `size` its length. If the buffer - is not big enough `UV_ENOBUFS` will be returned and `size` will be set to - the required size, including the null terminator. - - .. versionchanged:: 1.3.0 the returned length no longer includes the terminating null byte, - and the buffer is not null terminated. - - .. versionchanged:: 1.9.0 the returned length includes the terminating null - byte on `UV_ENOBUFS`, and the buffer is null terminated - on success. - -.. seealso:: The :c:type:`uv_handle_t` API functions also apply. diff --git a/libuv/docs/src/fs_poll.rst b/libuv/docs/src/fs_poll.rst deleted file mode 100644 index 2912bad..0000000 --- a/libuv/docs/src/fs_poll.rst +++ /dev/null @@ -1,77 +0,0 @@ - -.. _fs_poll: - -:c:type:`uv_fs_poll_t` --- FS Poll handle -========================================= - -FS Poll handles allow the user to monitor a given path for changes. Unlike -:c:type:`uv_fs_event_t`, fs poll handles use `stat` to detect when a file has -changed so they can work on file systems where fs event handles can't. - - -Data types ----------- - -.. c:type:: uv_fs_poll_t - - FS Poll handle type. - -.. c:type:: void (*uv_fs_poll_cb)(uv_fs_poll_t* handle, int status, const uv_stat_t* prev, const uv_stat_t* curr) - - Callback passed to :c:func:`uv_fs_poll_start` which will be called repeatedly - after the handle is started, when any change happens to the monitored path. - - The callback is invoked with `status < 0` if `path` does not exist - or is inaccessible. The watcher is *not* stopped but your callback is - not called again until something changes (e.g. when the file is created - or the error reason changes). - - When `status == 0`, the callback receives pointers to the old and new - :c:type:`uv_stat_t` structs. They are valid for the duration of the - callback only. - - -Public members -^^^^^^^^^^^^^^ - -N/A - -.. seealso:: The :c:type:`uv_handle_t` members also apply. - - -API ---- - -.. c:function:: int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle) - - Initialize the handle. - -.. c:function:: int uv_fs_poll_start(uv_fs_poll_t* handle, uv_fs_poll_cb poll_cb, const char* path, unsigned int interval) - - Check the file at `path` for changes every `interval` milliseconds. - - .. note:: - For maximum portability, use multi-second intervals. Sub-second intervals will not detect - all changes on many file systems. - -.. c:function:: int uv_fs_poll_stop(uv_fs_poll_t* handle) - - Stop the handle, the callback will no longer be called. - -.. c:function:: int uv_fs_poll_getpath(uv_fs_poll_t* handle, char* buffer, size_t* size) - - Get the path being monitored by the handle. The buffer must be preallocated - by the user. Returns 0 on success or an error code < 0 in case of failure. - On success, `buffer` will contain the path and `size` its length. If the buffer - is not big enough `UV_ENOBUFS` will be returned and `size` will be set to - the required size. - - .. versionchanged:: 1.3.0 the returned length no longer includes the terminating null byte, - and the buffer is not null terminated. - - .. versionchanged:: 1.9.0 the returned length includes the terminating null - byte on `UV_ENOBUFS`, and the buffer is null terminated - on success. - - -.. seealso:: The :c:type:`uv_handle_t` API functions also apply. diff --git a/libuv/docs/src/guide.rst b/libuv/docs/src/guide.rst deleted file mode 100644 index 126e080..0000000 --- a/libuv/docs/src/guide.rst +++ /dev/null @@ -1,22 +0,0 @@ -.. _guide: - -User guide -========== - -.. warning:: - The contents of this guide have been recently incorporated into the libuv documentation - and it hasn't gone through thorough review yet. If you spot a mistake please file an - issue, or better yet, open a pull request! - -.. toctree:: - :maxdepth: 2 - - guide/introduction - guide/basics - guide/filesystem - guide/networking - guide/threads - guide/processes - guide/eventloops - guide/utilities - guide/about diff --git a/libuv/docs/src/guide/about.rst b/libuv/docs/src/guide/about.rst deleted file mode 100644 index 731d1a4..0000000 --- a/libuv/docs/src/guide/about.rst +++ /dev/null @@ -1,22 +0,0 @@ -About -===== - -`Nikhil Marathe `_ started writing this book one -afternoon (June 16, 2012) when he didn't feel like programming. He had recently -been stung by the lack of good documentation on libuv while working on -`node-taglib `_. Although reference -documentation was present, there were no comprehensive tutorials. This book is -the output of that need and tries to be accurate. That said, the book may have -mistakes. Pull requests are encouraged. - -Nikhil is indebted to Marc Lehmann's comprehensive `man page -`_ about libev which -describes much of the semantics of the two libraries. - -This book was made using `Sphinx `_ and `vim -`_. - -.. note:: - In 2017 the libuv project incorporated the Nikhil's work into the official - documentation and it's maintained there henceforth. - diff --git a/libuv/docs/src/guide/basics.rst b/libuv/docs/src/guide/basics.rst deleted file mode 100644 index 457fb15..0000000 --- a/libuv/docs/src/guide/basics.rst +++ /dev/null @@ -1,221 +0,0 @@ -Basics of libuv -=============== - -libuv enforces an **asynchronous**, **event-driven** style of programming. Its -core job is to provide an event loop and callback based notifications of I/O -and other activities. libuv offers core utilities like timers, non-blocking -networking support, asynchronous file system access, child processes and more. - -Event loops ------------ - -In event-driven programming, an application expresses interest in certain events -and respond to them when they occur. The responsibility of gathering events -from the operating system or monitoring other sources of events is handled by -libuv, and the user can register callbacks to be invoked when an event occurs. -The event-loop usually keeps running *forever*. In pseudocode: - -.. code-block:: python - - while there are still events to process: - e = get the next event - if there is a callback associated with e: - call the callback - -Some examples of events are: - -* File is ready for writing -* A socket has data ready to be read -* A timer has timed out - -This event loop is encapsulated by ``uv_run()`` -- the end-all function when using -libuv. - -The most common activity of systems programs is to deal with input and output, -rather than a lot of number-crunching. The problem with using conventional -input/output functions (``read``, ``fprintf``, etc.) is that they are -**blocking**. The actual write to a hard disk or reading from a network, takes -a disproportionately long time compared to the speed of the processor. The -functions don't return until the task is done, so that your program is doing -nothing. For programs which require high performance this is a major roadblock -as other activities and other I/O operations are kept waiting. - -One of the standard solutions is to use threads. Each blocking I/O operation is -started in a separate thread (or in a thread pool). When the blocking function -gets invoked in the thread, the operating system can schedule another thread to run, -which actually needs the CPU. - -The approach followed by libuv uses another style, which is the **asynchronous, -non-blocking** style. Most modern operating systems provide event notification -subsystems. For example, a normal ``read`` call on a socket would block until -the sender actually sent something. Instead, the application can request the -operating system to watch the socket and put an event notification in the -queue. The application can inspect the events at its convenience (perhaps doing -some number crunching before to use the processor to the maximum) and grab the -data. It is **asynchronous** because the application expressed interest at one -point, then used the data at another point (in time and space). It is -**non-blocking** because the application process was free to do other tasks. -This fits in well with libuv's event-loop approach, since the operating system -events can be treated as just another libuv event. The non-blocking ensures -that other events can continue to be handled as fast as they come in [#]_. - -.. NOTE:: - - How the I/O is run in the background is not of our concern, but due to the - way our computer hardware works, with the thread as the basic unit of the - processor, libuv and OSes will usually run background/worker threads and/or - polling to perform tasks in a non-blocking manner. - -Bert Belder, one of the libuv core developers has a small video explaining the -architecture of libuv and its background. If you have no prior experience with -either libuv or libev, it is a quick, useful watch. - -libuv's event loop is explained in more detail in the `documentation -`_. - -.. raw:: html - - - -Hello World ------------ - -With the basics out of the way, let's write our first libuv program. It does -nothing, except start a loop which will exit immediately. - -.. rubric:: helloworld/main.c -.. literalinclude:: ../../code/helloworld/main.c - :language: c - :linenos: - -This program quits immediately because it has no events to process. A libuv -event loop has to be told to watch out for events using the various API -functions. - -Starting with libuv v1.0, users should allocate the memory for the loops before -initializing it with ``uv_loop_init(uv_loop_t *)``. This allows you to plug in -custom memory management. Remember to de-initialize the loop using -``uv_loop_close(uv_loop_t *)`` and then delete the storage. The examples never -close loops since the program quits after the loop ends and the system will -reclaim memory. Production grade projects, especially long running systems -programs, should take care to release correctly. - -Default loop -++++++++++++ - -A default loop is provided by libuv and can be accessed using -``uv_default_loop()``. You should use this loop if you only want a single -loop. - -.. note:: - - node.js uses the default loop as its main loop. If you are writing bindings - you should be aware of this. - -.. _libuv-error-handling: - -Error handling --------------- - -Initialization functions or synchronous functions which may fail return a negative number on error. Async functions that may fail will pass a status parameter to their callbacks. The error messages are defined as ``UV_E*`` `constants`_. - -.. _constants: http://docs.libuv.org/en/v1.x/errors.html#error-constants - -You can use the ``uv_strerror(int)`` and ``uv_err_name(int)`` functions -to get a ``const char *`` describing the error or the error name respectively. - -I/O read callbacks (such as for files and sockets) are passed a parameter ``nread``. If ``nread`` is less than 0, there was an error (UV_EOF is the end of file error, which you may want to handle differently). - -Handles and Requests --------------------- - -libuv works by the user expressing interest in particular events. This is -usually done by creating a **handle** to an I/O device, timer or process. -Handles are opaque structs named as ``uv_TYPE_t`` where type signifies what the -handle is used for. - -.. rubric:: libuv watchers -.. code-block:: c - - /* Handle types. */ - typedef struct uv_loop_s uv_loop_t; - typedef struct uv_handle_s uv_handle_t; - typedef struct uv_dir_s uv_dir_t; - typedef struct uv_stream_s uv_stream_t; - typedef struct uv_tcp_s uv_tcp_t; - typedef struct uv_udp_s uv_udp_t; - typedef struct uv_pipe_s uv_pipe_t; - typedef struct uv_tty_s uv_tty_t; - typedef struct uv_poll_s uv_poll_t; - typedef struct uv_timer_s uv_timer_t; - typedef struct uv_prepare_s uv_prepare_t; - typedef struct uv_check_s uv_check_t; - typedef struct uv_idle_s uv_idle_t; - typedef struct uv_async_s uv_async_t; - typedef struct uv_process_s uv_process_t; - typedef struct uv_fs_event_s uv_fs_event_t; - typedef struct uv_fs_poll_s uv_fs_poll_t; - typedef struct uv_signal_s uv_signal_t; - - /* Request types. */ - typedef struct uv_req_s uv_req_t; - typedef struct uv_getaddrinfo_s uv_getaddrinfo_t; - typedef struct uv_getnameinfo_s uv_getnameinfo_t; - typedef struct uv_shutdown_s uv_shutdown_t; - typedef struct uv_write_s uv_write_t; - typedef struct uv_connect_s uv_connect_t; - typedef struct uv_udp_send_s uv_udp_send_t; - typedef struct uv_fs_s uv_fs_t; - typedef struct uv_work_s uv_work_t; - - -Handles represent long-lived objects. Async operations on such handles are -identified using **requests**. A request is short-lived (usually used across -only one callback) and usually indicates one I/O operation on a handle. -Requests are used to preserve context between the initiation and the callback -of individual actions. For example, an UDP socket is represented by -a ``uv_udp_t``, while individual writes to the socket use a ``uv_udp_send_t`` -structure that is passed to the callback after the write is done. - -Handles are setup by a corresponding:: - - uv_TYPE_init(uv_loop_t *, uv_TYPE_t *) - -function. - -Callbacks are functions which are called by libuv whenever an event the watcher -is interested in has taken place. Application specific logic will usually be -implemented in the callback. For example, an IO watcher's callback will receive -the data read from a file, a timer callback will be triggered on timeout and so -on. - -Idling -++++++ - -Here is an example of using an idle handle. The callback is called once on -every turn of the event loop. A use case for idle handles is discussed in -:doc:`utilities`. Let us use an idle watcher to look at the watcher life cycle -and see how ``uv_run()`` will now block because a watcher is present. The idle -watcher is stopped when the count is reached and ``uv_run()`` exits since no -event watchers are active. - -.. rubric:: idle-basic/main.c -.. literalinclude:: ../../code/idle-basic/main.c - :language: c - :emphasize-lines: 6,10,14-17 - -Storing context -+++++++++++++++ - -In callback based programming style you'll often want to pass some 'context' -- -application specific information -- between the call site and the callback. All -handles and requests have a ``void* data`` member which you can set to the -context and cast back in the callback. This is a common pattern used throughout -the C library ecosystem. In addition ``uv_loop_t`` also has a similar data -member. - ----- - -.. [#] Depending on the capacity of the hardware of course. diff --git a/libuv/docs/src/guide/eventloops.rst b/libuv/docs/src/guide/eventloops.rst deleted file mode 100644 index 12244ff..0000000 --- a/libuv/docs/src/guide/eventloops.rst +++ /dev/null @@ -1,50 +0,0 @@ -Advanced event loops -==================== - -libuv provides considerable user control over event loops, and you can achieve -interesting results by juggling multiple loops. You can also embed libuv's -event loop into another event loop based library -- imagine a Qt based UI, and -Qt's event loop driving a libuv backend which does intensive system level -tasks. - -Stopping an event loop -~~~~~~~~~~~~~~~~~~~~~~ - -``uv_stop()`` can be used to stop an event loop. The earliest the loop will -stop running is *on the next iteration*, possibly later. This means that events -that are ready to be processed in this iteration of the loop will still be -processed, so ``uv_stop()`` can't be used as a kill switch. When ``uv_stop()`` -is called, the loop **won't** block for i/o on this iteration. The semantics of -these things can be a bit difficult to understand, so let's look at -``uv_run()`` where all the control flow occurs. - -.. rubric:: src/unix/core.c - uv_run -.. literalinclude:: ../../../src/unix/core.c - :language: c - :linenos: - :lines: 304-324 - :emphasize-lines: 10,19,21 - -``stop_flag`` is set by ``uv_stop()``. Now all libuv callbacks are invoked -within the event loop, which is why invoking ``uv_stop()`` in them will still -lead to this iteration of the loop occurring. First libuv updates timers, then -runs pending timer, idle and prepare callbacks, and invokes any pending I/O -callbacks. If you were to call ``uv_stop()`` in any of them, ``stop_flag`` -would be set. This causes ``uv_backend_timeout()`` to return ``0``, which is -why the loop does not block on I/O. If on the other hand, you called -``uv_stop()`` in one of the check handlers, I/O has already finished and is not -affected. - -``uv_stop()`` is useful to shutdown a loop when a result has been computed or -there is an error, without having to ensure that all handlers are stopped one -by one. - -Here is a simple example that stops the loop and demonstrates how the current -iteration of the loop still takes places. - -.. rubric:: uvstop/main.c -.. literalinclude:: ../../code/uvstop/main.c - :language: c - :linenos: - :emphasize-lines: 11 - diff --git a/libuv/docs/src/guide/filesystem.rst b/libuv/docs/src/guide/filesystem.rst deleted file mode 100644 index 2d5f6cb..0000000 --- a/libuv/docs/src/guide/filesystem.rst +++ /dev/null @@ -1,339 +0,0 @@ -Filesystem -========== - -Simple filesystem read/write is achieved using the ``uv_fs_*`` functions and the -``uv_fs_t`` struct. - -.. note:: - - The libuv filesystem operations are different from :doc:`socket operations - `. Socket operations use the non-blocking operations provided - by the operating system. Filesystem operations use blocking functions - internally, but invoke these functions in a `thread pool`_ and notify - watchers registered with the event loop when application interaction is - required. - -.. _thread pool: http://docs.libuv.org/en/v1.x/threadpool.html#thread-pool-work-scheduling - -All filesystem functions have two forms - *synchronous* and *asynchronous*. - -The *synchronous* forms automatically get called (and **block**) if the -callback is null. The return value of functions is a :ref:`libuv error code -`. This is usually only useful for synchronous calls. -The *asynchronous* form is called when a callback is passed and the return -value is 0. - -Reading/Writing files ---------------------- - -A file descriptor is obtained using - -.. code-block:: c - - int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int mode, uv_fs_cb cb) - -``flags`` and ``mode`` are standard -`Unix flags `_. -libuv takes care of converting to the appropriate Windows flags. - -File descriptors are closed using - -.. code-block:: c - - int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) - - -Filesystem operation callbacks have the signature: - -.. code-block:: c - - void callback(uv_fs_t* req); - -Let's see a simple implementation of ``cat``. We start with registering -a callback for when the file is opened: - -.. rubric:: uvcat/main.c - opening a file -.. literalinclude:: ../../code/uvcat/main.c - :language: c - :linenos: - :lines: 41-53 - :emphasize-lines: 4, 6-7 - -The ``result`` field of a ``uv_fs_t`` is the file descriptor in case of the -``uv_fs_open`` callback. If the file is successfully opened, we start reading it. - -.. rubric:: uvcat/main.c - read callback -.. literalinclude:: ../../code/uvcat/main.c - :language: c - :linenos: - :lines: 26-40 - :emphasize-lines: 2,8,12 - -In the case of a read call, you should pass an *initialized* buffer which will -be filled with data before the read callback is triggered. The ``uv_fs_*`` -operations map almost directly to certain POSIX functions, so EOF is indicated -in this case by ``result`` being 0. In the case of streams or pipes, the -``UV_EOF`` constant would have been passed as a status instead. - -Here you see a common pattern when writing asynchronous programs. The -``uv_fs_close()`` call is performed synchronously. *Usually tasks which are -one-off, or are done as part of the startup or shutdown stage are performed -synchronously, since we are interested in fast I/O when the program is going -about its primary task and dealing with multiple I/O sources*. For solo tasks -the performance difference usually is negligible and may lead to simpler code. - -Filesystem writing is similarly simple using ``uv_fs_write()``. *Your callback -will be triggered after the write is complete*. In our case the callback -simply drives the next read. Thus read and write proceed in lockstep via -callbacks. - -.. rubric:: uvcat/main.c - write callback -.. literalinclude:: ../../code/uvcat/main.c - :language: c - :linenos: - :lines: 16-24 - :emphasize-lines: 6 - -.. warning:: - - Due to the way filesystems and disk drives are configured for performance, - a write that 'succeeds' may not be committed to disk yet. - -We set the dominos rolling in ``main()``: - -.. rubric:: uvcat/main.c -.. literalinclude:: ../../code/uvcat/main.c - :language: c - :linenos: - :lines: 55- - :emphasize-lines: 2 - -.. warning:: - - The ``uv_fs_req_cleanup()`` function must always be called on filesystem - requests to free internal memory allocations in libuv. - -Filesystem operations ---------------------- - -All the standard filesystem operations like ``unlink``, ``rmdir``, ``stat`` are -supported asynchronously and have intuitive argument order. They follow the -same patterns as the read/write/open calls, returning the result in the -``uv_fs_t.result`` field. The full list: - -.. rubric:: Filesystem operations -.. code-block:: c - - int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb); - int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int mode, uv_fs_cb cb); - int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, uv_file file, const uv_buf_t bufs[], unsigned int nbufs, int64_t offset, uv_fs_cb cb); - int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb); - int uv_fs_write(uv_loop_t* loop, uv_fs_t* req, uv_file file, const uv_buf_t bufs[], unsigned int nbufs, int64_t offset, uv_fs_cb cb); - int uv_fs_copyfile(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, int flags, uv_fs_cb cb); - int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, uv_fs_cb cb); - int uv_fs_mkdtemp(uv_loop_t* loop, uv_fs_t* req, const char* tpl, uv_fs_cb cb); - int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb); - int uv_fs_scandir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, uv_fs_cb cb); - int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent); - int uv_fs_opendir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb); - int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, uv_dir_t* dir, uv_fs_cb cb); - int uv_fs_closedir(uv_loop_t* loop, uv_fs_t* req, uv_dir_t* dir, uv_fs_cb cb); - int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb); - int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb); - int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, uv_fs_cb cb); - int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb); - int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb); - int uv_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req, uv_file file, int64_t offset, uv_fs_cb cb); - int uv_fs_sendfile(uv_loop_t* loop, uv_fs_t* req, uv_file out_fd, uv_file in_fd, int64_t in_offset, size_t length, uv_fs_cb cb); - int uv_fs_access(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, uv_fs_cb cb); - int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, uv_fs_cb cb); - int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, double mtime, uv_fs_cb cb); - int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file file, double atime, double mtime, uv_fs_cb cb); - int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb); - int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, uv_fs_cb cb); - int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, int flags, uv_fs_cb cb); - int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb); - int uv_fs_realpath(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb); - int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file file, int mode, uv_fs_cb cb); - int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb); - int uv_fs_fchown(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb); - int uv_fs_lchown(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb); - - -.. _buffers-and-streams: - -Buffers and Streams -------------------- - -The basic I/O handle in libuv is the stream (``uv_stream_t``). TCP sockets, UDP -sockets, and pipes for file I/O and IPC are all treated as stream subclasses. - -Streams are initialized using custom functions for each subclass, then operated -upon using - -.. code-block:: c - - int uv_read_start(uv_stream_t*, uv_alloc_cb alloc_cb, uv_read_cb read_cb); - int uv_read_stop(uv_stream_t*); - int uv_write(uv_write_t* req, uv_stream_t* handle, - const uv_buf_t bufs[], unsigned int nbufs, uv_write_cb cb); - -The stream based functions are simpler to use than the filesystem ones and -libuv will automatically keep reading from a stream when ``uv_read_start()`` is -called once, until ``uv_read_stop()`` is called. - -The discrete unit of data is the buffer -- ``uv_buf_t``. This is simply -a collection of a pointer to bytes (``uv_buf_t.base``) and the length -(``uv_buf_t.len``). The ``uv_buf_t`` is lightweight and passed around by value. -What does require management is the actual bytes, which have to be allocated -and freed by the application. - -.. ERROR:: - - THIS PROGRAM DOES NOT ALWAYS WORK, NEED SOMETHING BETTER** - -To demonstrate streams we will need to use ``uv_pipe_t``. This allows streaming -local files [#]_. Here is a simple tee utility using libuv. Doing all operations -asynchronously shows the power of evented I/O. The two writes won't block each -other, but we have to be careful to copy over the buffer data to ensure we don't -free a buffer until it has been written. - -The program is to be executed as:: - - ./uvtee - -We start off opening pipes on the files we require. libuv pipes to a file are -opened as bidirectional by default. - -.. rubric:: uvtee/main.c - read on pipes -.. literalinclude:: ../../code/uvtee/main.c - :language: c - :linenos: - :lines: 61-80 - :emphasize-lines: 4,5,15 - -The third argument of ``uv_pipe_init()`` should be set to 1 for IPC using named -pipes. This is covered in :doc:`processes`. The ``uv_pipe_open()`` call -associates the pipe with the file descriptor, in this case ``0`` (standard -input). - -We start monitoring ``stdin``. The ``alloc_buffer`` callback is invoked as new -buffers are required to hold incoming data. ``read_stdin`` will be called with -these buffers. - -.. rubric:: uvtee/main.c - reading buffers -.. literalinclude:: ../../code/uvtee/main.c - :language: c - :linenos: - :lines: 19-22,44-60 - -The standard ``malloc`` is sufficient here, but you can use any memory allocation -scheme. For example, node.js uses its own slab allocator which associates -buffers with V8 objects. - -The read callback ``nread`` parameter is less than 0 on any error. This error -might be EOF, in which case we close all the streams, using the generic close -function ``uv_close()`` which deals with the handle based on its internal type. -Otherwise ``nread`` is a non-negative number and we can attempt to write that -many bytes to the output streams. Finally remember that buffer allocation and -deallocation is application responsibility, so we free the data. - -The allocation callback may return a buffer with length zero if it fails to -allocate memory. In this case, the read callback is invoked with error -UV_ENOBUFS. libuv will continue to attempt to read the stream though, so you -must explicitly call ``uv_close()`` if you want to stop when allocation fails. - -The read callback may be called with ``nread = 0``, indicating that at this -point there is nothing to be read. Most applications will just ignore this. - -.. rubric:: uvtee/main.c - Write to pipe -.. literalinclude:: ../../code/uvtee/main.c - :language: c - :linenos: - :lines: 9-13,23-42 - -``write_data()`` makes a copy of the buffer obtained from read. This buffer -does not get passed through to the write callback trigged on write completion. To -get around this we wrap a write request and a buffer in ``write_req_t`` and -unwrap it in the callbacks. We make a copy so we can free the two buffers from -the two calls to ``write_data`` independently of each other. While acceptable -for a demo program like this, you'll probably want smarter memory management, -like reference counted buffers or a pool of buffers in any major application. - -.. WARNING:: - - If your program is meant to be used with other programs it may knowingly or - unknowingly be writing to a pipe. This makes it susceptible to `aborting on - receiving a SIGPIPE`_. It is a good idea to insert:: - - signal(SIGPIPE, SIG_IGN) - - in the initialization stages of your application. - -.. _aborting on receiving a SIGPIPE: http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#The_special_problem_of_SIGPIPE - -File change events ------------------- - -All modern operating systems provide APIs to put watches on individual files or -directories and be informed when the files are modified. libuv wraps common -file change notification libraries [#fsnotify]_. This is one of the more -inconsistent parts of libuv. File change notification systems are themselves -extremely varied across platforms so getting everything working everywhere is -difficult. To demonstrate, I'm going to build a simple utility which runs -a command whenever any of the watched files change:: - - ./onchange [file2] ... - -The file change notification is started using ``uv_fs_event_init()``: - -.. rubric:: onchange/main.c - The setup -.. literalinclude:: ../../code/onchange/main.c - :language: c - :linenos: - :lines: 26- - :emphasize-lines: 15 - -The third argument is the actual file or directory to monitor. The last -argument, ``flags``, can be: - -.. code-block:: c - - /* - * Flags to be passed to uv_fs_event_start(). - */ - enum uv_fs_event_flags { - UV_FS_EVENT_WATCH_ENTRY = 1, - UV_FS_EVENT_STAT = 2, - UV_FS_EVENT_RECURSIVE = 4 - }; - -``UV_FS_EVENT_WATCH_ENTRY`` and ``UV_FS_EVENT_STAT`` don't do anything (yet). -``UV_FS_EVENT_RECURSIVE`` will start watching subdirectories as well on -supported platforms. - -The callback will receive the following arguments: - - #. ``uv_fs_event_t *handle`` - The handle. The ``path`` field of the handle - is the file on which the watch was set. - #. ``const char *filename`` - If a directory is being monitored, this is the - file which was changed. Only non-``null`` on Linux and Windows. May be ``null`` - even on those platforms. - #. ``int flags`` - one of ``UV_RENAME`` or ``UV_CHANGE``, or a bitwise OR of - both. - #. ``int status`` - Currently 0. - -In our example we simply print the arguments and run the command using -``system()``. - -.. rubric:: onchange/main.c - file change notification callback -.. literalinclude:: ../../code/onchange/main.c - :language: c - :linenos: - :lines: 9-24 - ----- - -.. [#fsnotify] inotify on Linux, FSEvents on Darwin, kqueue on BSDs, - ReadDirectoryChangesW on Windows, event ports on Solaris, unsupported on Cygwin -.. [#] see :ref:`pipes` diff --git a/libuv/docs/src/guide/introduction.rst b/libuv/docs/src/guide/introduction.rst deleted file mode 100644 index 0656e4d..0000000 --- a/libuv/docs/src/guide/introduction.rst +++ /dev/null @@ -1,75 +0,0 @@ -Introduction -============ - -This 'book' is a small set of tutorials about using libuv_ as -a high performance evented I/O library which offers the same API on Windows and Unix. - -It is meant to cover the main areas of libuv, but is not a comprehensive -reference discussing every function and data structure. The `official libuv -documentation`_ may be consulted for full details. - -.. _official libuv documentation: http://docs.libuv.org/en/v1.x/ - -This book is still a work in progress, so sections may be incomplete, but -I hope you will enjoy it as it grows. - -Who this book is for --------------------- - -If you are reading this book, you are either: - -1) a systems programmer, creating low-level programs such as daemons or network - services and clients. You have found that the event loop approach is well - suited for your application and decided to use libuv. - -2) a node.js module writer, who wants to wrap platform APIs - written in C or C++ with a set of (a)synchronous APIs that are exposed to - JavaScript. You will use libuv purely in the context of node.js. For - this you will require some other resources as the book does not cover parts - specific to v8/node.js. - -This book assumes that you are comfortable with the C programming language. - -Background ----------- - -The node.js_ project began in 2009 as a JavaScript environment decoupled -from the browser. Using Google's V8_ and Marc Lehmann's libev_, node.js -combined a model of I/O -- evented -- with a language that was well suited to -the style of programming; due to the way it had been shaped by browsers. As -node.js grew in popularity, it was important to make it work on Windows, but -libev ran only on Unix. The Windows equivalent of kernel event notification -mechanisms like kqueue or (e)poll is IOCP. libuv was an abstraction around libev -or IOCP depending on the platform, providing users an API based on libev. -In the node-v0.9.0 version of libuv `libev was removed`_. - -Since then libuv has continued to mature and become a high quality standalone -library for system programming. Users outside of node.js include Mozilla's -Rust_ programming language, and a variety_ of language bindings. - -This book and the code is based on libuv version `v1.3.0`_. - -Code ----- - -All the code from this book is included as part of the source of the book on -Github. `Clone`_/`Download`_ the book, then build libuv:: - - cd libuv - ./autogen.sh - ./configure - make - -There is no need to ``make install``. To build the examples run ``make`` in the -``code/`` directory. - -.. _Clone: https://github.com/nikhilm/uvbook -.. _Download: https://github.com/nikhilm/uvbook/downloads -.. _v1.3.0: https://github.com/libuv/libuv/tags -.. _V8: https://v8.dev -.. _libev: http://software.schmorp.de/pkg/libev.html -.. _libuv: https://github.com/libuv/libuv -.. _node.js: https://www.nodejs.org -.. _libev was removed: https://github.com/joyent/libuv/issues/485 -.. _Rust: https://www.rust-lang.org -.. _variety: https://github.com/libuv/libuv/blob/v1.x/LINKS.md diff --git a/libuv/docs/src/guide/networking.rst b/libuv/docs/src/guide/networking.rst deleted file mode 100644 index dcb5643..0000000 --- a/libuv/docs/src/guide/networking.rst +++ /dev/null @@ -1,257 +0,0 @@ -Networking -========== - -Networking in libuv is not much different from directly using the BSD socket -interface, some things are easier, all are non-blocking, but the concepts stay -the same. In addition libuv offers utility functions to abstract the annoying, -repetitive and low-level tasks like setting up sockets using the BSD socket -structures, DNS lookup, and tweaking various socket parameters. - -The ``uv_tcp_t`` and ``uv_udp_t`` structures are used for network I/O. - -.. NOTE:: - - The code samples in this chapter exist to show certain libuv APIs. They are - not examples of good quality code. They leak memory and don't always close - connections properly. - -TCP ---- - -TCP is a connection oriented, stream protocol and is therefore based on the -libuv streams infrastructure. - -Server -++++++ - -Server sockets proceed by: - -1. ``uv_tcp_init`` the TCP handle. -2. ``uv_tcp_bind`` it. -3. Call ``uv_listen`` on the handle to have a callback invoked whenever a new - connection is established by a client. -4. Use ``uv_accept`` to accept the connection. -5. Use :ref:`stream operations ` to communicate with the - client. - -Here is a simple echo server - -.. rubric:: tcp-echo-server/main.c - The listen socket -.. literalinclude:: ../../code/tcp-echo-server/main.c - :language: c - :linenos: - :lines: 68- - :emphasize-lines: 4-5,7-10 - -You can see the utility function ``uv_ip4_addr`` being used to convert from -a human readable IP address, port pair to the sockaddr_in structure required by -the BSD socket APIs. The reverse can be obtained using ``uv_ip4_name``. - -.. NOTE:: - - There are ``uv_ip6_*`` analogues for the ip4 functions. - -Most of the setup functions are synchronous since they are CPU-bound. -``uv_listen`` is where we return to libuv's callback style. The second -arguments is the backlog queue -- the maximum length of queued connections. - -When a connection is initiated by clients, the callback is required to set up -a handle for the client socket and associate the handle using ``uv_accept``. -In this case we also establish interest in reading from this stream. - -.. rubric:: tcp-echo-server/main.c - Accepting the client -.. literalinclude:: ../../code/tcp-echo-server/main.c - :language: c - :linenos: - :lines: 51-66 - :emphasize-lines: 9-10 - -The remaining set of functions is very similar to the streams example and can -be found in the code. Just remember to call ``uv_close`` when the socket isn't -required. This can be done even in the ``uv_listen`` callback if you are not -interested in accepting the connection. - -Client -++++++ - -Where you do bind/listen/accept on the server, on the client side it's simply -a matter of calling ``uv_tcp_connect``. The same ``uv_connect_cb`` style -callback of ``uv_listen`` is used by ``uv_tcp_connect``. Try:: - - uv_tcp_t* socket = (uv_tcp_t*)malloc(sizeof(uv_tcp_t)); - uv_tcp_init(loop, socket); - - uv_connect_t* connect = (uv_connect_t*)malloc(sizeof(uv_connect_t)); - - struct sockaddr_in dest; - uv_ip4_addr("127.0.0.1", 80, &dest); - - uv_tcp_connect(connect, socket, (const struct sockaddr*)&dest, on_connect); - -where ``on_connect`` will be called after the connection is established. The -callback receives the ``uv_connect_t`` struct, which has a member ``.handle`` -pointing to the socket. - -UDP ---- - -The `User Datagram Protocol`_ offers connectionless, unreliable network -communication. Hence libuv doesn't offer a stream. Instead libuv provides -non-blocking UDP support via the `uv_udp_t` handle (for receiving) and -`uv_udp_send_t` request (for sending) and related functions. That said, the -actual API for reading/writing is very similar to normal stream reads. To look -at how UDP can be used, the example shows the first stage of obtaining an IP -address from a `DHCP`_ server -- DHCP Discover. - -.. note:: - - You will have to run `udp-dhcp` as **root** since it uses well known port - numbers below 1024. - -.. rubric:: udp-dhcp/main.c - Setup and send UDP packets -.. literalinclude:: ../../code/udp-dhcp/main.c - :language: c - :linenos: - :lines: 7-11,104- - :emphasize-lines: 8,10-11,17-18,21 - -.. note:: - - The IP address ``0.0.0.0`` is used to bind to all interfaces. The IP - address ``255.255.255.255`` is a broadcast address meaning that packets - will be sent to all interfaces on the subnet. port ``0`` means that the OS - randomly assigns a port. - -First we setup the receiving socket to bind on all interfaces on port 68 (DHCP -client) and start a read on it. This will read back responses from any DHCP -server that replies. We use the UV_UDP_REUSEADDR flag to play nice with any -other system DHCP clients that are running on this computer on the same port. -Then we setup a similar send socket and use ``uv_udp_send`` to send -a *broadcast message* on port 67 (DHCP server). - -It is **necessary** to set the broadcast flag, otherwise you will get an -``EACCES`` error [#]_. The exact message being sent is not relevant to this -book and you can study the code if you are interested. As usual the read and -write callbacks will receive a status code of < 0 if something went wrong. - -Since UDP sockets are not connected to a particular peer, the read callback -receives an extra parameter about the sender of the packet. - -``nread`` may be zero if there is no more data to be read. If ``addr`` is NULL, -it indicates there is nothing to read (the callback shouldn't do anything), if -not NULL, it indicates that an empty datagram was received from the host at -``addr``. The ``flags`` parameter may be ``UV_UDP_PARTIAL`` if the buffer -provided by your allocator was not large enough to hold the data. *In this case -the OS will discard the data that could not fit* (That's UDP for you!). - -.. rubric:: udp-dhcp/main.c - Reading packets -.. literalinclude:: ../../code/udp-dhcp/main.c - :language: c - :linenos: - :lines: 17-40 - :emphasize-lines: 1,23 - -UDP Options -+++++++++++ - -Time-to-live -~~~~~~~~~~~~ - -The TTL of packets sent on the socket can be changed using ``uv_udp_set_ttl``. - -IPv6 stack only -~~~~~~~~~~~~~~~ - -IPv6 sockets can be used for both IPv4 and IPv6 communication. If you want to -restrict the socket to IPv6 only, pass the ``UV_UDP_IPV6ONLY`` flag to -``uv_udp_bind`` [#]_. - -Multicast -~~~~~~~~~ - -A socket can (un)subscribe to a multicast group using: - -.. code::block:: c - - int uv_udp_set_membership(uv_udp_t* handle, const char* multicast_addr, const char* interface_addr, uv_membership membership); - -where ``membership`` is ``UV_JOIN_GROUP`` or ``UV_LEAVE_GROUP``. - -The concepts of multicasting are nicely explained in `this guide`_. - -.. _this guide: https://www.tldp.org/HOWTO/Multicast-HOWTO-2.html - -Local loopback of multicast packets is enabled by default [#]_, use -``uv_udp_set_multicast_loop`` to switch it off. - -The packet time-to-live for multicast packets can be changed using -``uv_udp_set_multicast_ttl``. - -Querying DNS ------------- - -libuv provides asynchronous DNS resolution. For this it provides its own -``getaddrinfo`` replacement [#]_. In the callback you can -perform normal socket operations on the retrieved addresses. Let's connect to -Libera.chat to see an example of DNS resolution. - -.. rubric:: dns/main.c -.. literalinclude:: ../../code/dns/main.c - :language: c - :linenos: - :lines: 61- - :emphasize-lines: 12 - -If ``uv_getaddrinfo`` returns non-zero, something went wrong in the setup and -your callback won't be invoked at all. All arguments can be freed immediately -after ``uv_getaddrinfo`` returns. The `hostname`, `servname` and `hints` -structures are documented in `the getaddrinfo man page `_. The -callback can be ``NULL`` in which case the function will run synchronously. - -In the resolver callback, you can pick any IP from the linked list of ``struct -addrinfo(s)``. This also demonstrates ``uv_tcp_connect``. It is necessary to -call ``uv_freeaddrinfo`` in the callback. - -.. rubric:: dns/main.c -.. literalinclude:: ../../code/dns/main.c - :language: c - :linenos: - :lines: 42-60 - :emphasize-lines: 8,16 - -libuv also provides the inverse `uv_getnameinfo`_. - -.. _uv_getnameinfo: http://docs.libuv.org/en/v1.x/dns.html#c.uv_getnameinfo - -Network interfaces ------------------- - -Information about the system's network interfaces can be obtained through libuv -using ``uv_interface_addresses``. This simple program just prints out all the -interface details so you get an idea of the fields that are available. This is -useful to allow your service to bind to IP addresses when it starts. - -.. rubric:: interfaces/main.c -.. literalinclude:: ../../code/interfaces/main.c - :language: c - :linenos: - :emphasize-lines: 9,17 - -``is_internal`` is true for loopback interfaces. Note that if a physical -interface has multiple IPv4/IPv6 addresses, the name will be reported multiple -times, with each address being reported once. - -.. _c-ares: https://c-ares.haxx.se -.. _getaddrinfo: https://man7.org/linux/man-pages/man3/getaddrinfo.3.html - -.. _User Datagram Protocol: https://en.wikipedia.org/wiki/User_Datagram_Protocol -.. _DHCP: https://tools.ietf.org/html/rfc2131 - ----- - -.. [#] https://beej.us/guide/bgnet/html/#broadcast-packetshello-world -.. [#] on Windows only supported on Windows Vista and later. -.. [#] https://www.tldp.org/HOWTO/Multicast-HOWTO-6.html#ss6.1 -.. [#] libuv use the system ``getaddrinfo`` in the libuv threadpool. libuv - v0.8.0 and earlier also included c-ares_ as an alternative, but this has been - removed in v0.9.0. diff --git a/libuv/docs/src/guide/processes.rst b/libuv/docs/src/guide/processes.rst deleted file mode 100644 index c1278f1..0000000 --- a/libuv/docs/src/guide/processes.rst +++ /dev/null @@ -1,421 +0,0 @@ -Processes -========= - -libuv offers considerable child process management, abstracting the platform -differences and allowing communication with the child process using streams or -named pipes. - -A common idiom in Unix is for every process to do one thing and do it well. In -such a case, a process often uses multiple child processes to achieve tasks -(similar to using pipes in shells). A multi-process model with messages -may also be easier to reason about compared to one with threads and shared -memory. - -A common refrain against event-based programs is that they cannot take -advantage of multiple cores in modern computers. In a multi-threaded program -the kernel can perform scheduling and assign different threads to different -cores, improving performance. But an event loop has only one thread. The -workaround can be to launch multiple processes instead, with each process -running an event loop, and each process getting assigned to a separate CPU -core. - -Spawning child processes ------------------------- - -The simplest case is when you simply want to launch a process and know when it -exits. This is achieved using ``uv_spawn``. - -.. rubric:: spawn/main.c -.. literalinclude:: ../../code/spawn/main.c - :language: c - :linenos: - :lines: 6-8,15- - :emphasize-lines: 11,13-17 - -.. NOTE:: - - ``options`` is implicitly initialized with zeros since it is a global - variable. If you change ``options`` to a local variable, remember to - initialize it to null out all unused fields:: - - uv_process_options_t options = {0}; - -The ``uv_process_t`` struct only acts as the handle, all options are set via -``uv_process_options_t``. To simply launch a process, you need to set only the -``file`` and ``args`` fields. ``file`` is the program to execute. Since -``uv_spawn`` uses :man:`execvp(3)` internally, there is no need to supply the full -path. Finally as per underlying conventions, **the arguments array has to be -one larger than the number of arguments, with the last element being NULL**. - -After the call to ``uv_spawn``, ``uv_process_t.pid`` will contain the process -ID of the child process. - -The exit callback will be invoked with the *exit status* and the type of *signal* -which caused the exit. - -.. rubric:: spawn/main.c -.. literalinclude:: ../../code/spawn/main.c - :language: c - :linenos: - :lines: 9-12 - :emphasize-lines: 3 - -It is **required** to close the process watcher after the process exits. - -Changing process parameters ---------------------------- - -Before the child process is launched you can control the execution environment -using fields in ``uv_process_options_t``. - -Change execution directory -++++++++++++++++++++++++++ - -Set ``uv_process_options_t.cwd`` to the corresponding directory. - -Set environment variables -+++++++++++++++++++++++++ - -``uv_process_options_t.env`` is a null-terminated array of strings, each of the -form ``VAR=VALUE`` used to set up the environment variables for the process. Set -this to ``NULL`` to inherit the environment from the parent (this) process. - -Option flags -++++++++++++ - -Setting ``uv_process_options_t.flags`` to a bitwise OR of the following flags, -modifies the child process behaviour: - -* ``UV_PROCESS_SETUID`` - sets the child's execution user ID to ``uv_process_options_t.uid``. -* ``UV_PROCESS_SETGID`` - sets the child's execution group ID to ``uv_process_options_t.gid``. - -Changing the UID/GID is only supported on Unix, ``uv_spawn`` will fail on -Windows with ``UV_ENOTSUP``. - -* ``UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS`` - No quoting or escaping of - ``uv_process_options_t.args`` is done on Windows. Ignored on Unix. -* ``UV_PROCESS_DETACHED`` - Starts the child process in a new session, which - will keep running after the parent process exits. See example below. - -Detaching processes -------------------- - -Passing the flag ``UV_PROCESS_DETACHED`` can be used to launch daemons, or -child processes which are independent of the parent so that the parent exiting -does not affect it. - -.. rubric:: detach/main.c -.. literalinclude:: ../../code/detach/main.c - :language: c - :linenos: - :lines: 9-30 - :emphasize-lines: 12,19 - -Just remember that the handle is still monitoring the child, so your program -won't exit. Use ``uv_unref()`` if you want to be more *fire-and-forget*. - -Sending signals to processes ----------------------------- - -libuv wraps the standard ``kill(2)`` system call on Unix and implements one -with similar semantics on Windows, with *one caveat*: all of ``SIGTERM``, -``SIGINT`` and ``SIGKILL``, lead to termination of the process. The signature -of ``uv_kill`` is:: - - uv_err_t uv_kill(int pid, int signum); - -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. - -Signals -------- - -libuv provides wrappers around Unix signals with `some Windows support -`_ as well. - -Use ``uv_signal_init()`` to initialize -a handle and associate it with a loop. To listen for particular signals on -that handler, use ``uv_signal_start()`` with the handler function. Each handler -can only be associated with one signal number, with subsequent calls to -``uv_signal_start()`` overwriting earlier associations. Use ``uv_signal_stop()`` to -stop watching. Here is a small example demonstrating the various possibilities: - -.. rubric:: signal/main.c -.. literalinclude:: ../../code/signal/main.c - :language: c - :linenos: - :emphasize-lines: 17-18,27-28 - -.. NOTE:: - - ``uv_run(loop, UV_RUN_NOWAIT)`` is similar to ``uv_run(loop, UV_RUN_ONCE)`` - in that it will process only one event. UV_RUN_ONCE blocks if there are no - pending events, while UV_RUN_NOWAIT will return immediately. We use NOWAIT - so that one of the loops isn't starved because the other one has no pending - activity. - -Send ``SIGUSR1`` to the process, and you'll find the handler being invoked -4 times, one for each ``uv_signal_t``. The handler just stops each handle, -so that the program exits. This sort of dispatch to all handlers is very -useful. A server using multiple event loops could ensure that all data was -safely saved before termination, simply by every loop adding a watcher for -``SIGINT``. - -Child Process I/O ------------------ - -A normal, newly spawned process has its own set of file descriptors, with 0, -1 and 2 being ``stdin``, ``stdout`` and ``stderr`` respectively. Sometimes you -may want to share file descriptors with the child. For example, perhaps your -applications launches a sub-command and you want any errors to go in the log -file, but ignore ``stdout``. For this you'd like to have ``stderr`` of the -child be the same as the stderr of the parent. In this case, libuv supports -*inheriting* file descriptors. In this sample, we invoke the test program, -which is: - -.. rubric:: proc-streams/test.c -.. literalinclude:: ../../code/proc-streams/test.c - :language: c - -The actual program ``proc-streams`` runs this while sharing only ``stderr``. -The file descriptors of the child process are set using the ``stdio`` field in -``uv_process_options_t``. First set the ``stdio_count`` field to the number of -file descriptors being set. ``uv_process_options_t.stdio`` is an array of -``uv_stdio_container_t``, which is: - -.. code-block:: c - - typedef struct uv_stdio_container_s { - uv_stdio_flags flags; - - union { - uv_stream_t* stream; - int fd; - } data; - } uv_stdio_container_t; - -where flags can have several values. Use ``UV_IGNORE`` if it isn't going to be -used. If the first three ``stdio`` fields are marked as ``UV_IGNORE`` they'll -redirect to ``/dev/null``. - -Since we want to pass on an existing descriptor, we'll use ``UV_INHERIT_FD``. -Then we set the ``fd`` to ``stderr``. - -.. rubric:: proc-streams/main.c -.. literalinclude:: ../../code/proc-streams/main.c - :language: c - :linenos: - :lines: 15-17,27- - :emphasize-lines: 6,10,11,12 - -If you run ``proc-stream`` you'll see that only the line "This is stderr" will -be displayed. Try marking ``stdout`` as being inherited and see the output. - -It is dead simple to apply this redirection to streams. By setting ``flags`` -to ``UV_INHERIT_STREAM`` and setting ``data.stream`` to the stream in the -parent process, the child process can treat that stream as standard I/O. This -can be used to implement something like CGI_. - -.. _CGI: https://en.wikipedia.org/wiki/Common_Gateway_Interface - -A sample CGI script/executable is: - -.. rubric:: cgi/tick.c -.. literalinclude:: ../../code/cgi/tick.c - :language: c - -The CGI server combines the concepts from this chapter and :doc:`networking` so -that every client is sent ten ticks after which that connection is closed. - -.. rubric:: cgi/main.c -.. literalinclude:: ../../code/cgi/main.c - :language: c - :linenos: - :lines: 49-63 - :emphasize-lines: 10 - -Here we simply accept the TCP connection and pass on the socket (*stream*) to -``invoke_cgi_script``. - -.. rubric:: cgi/main.c -.. literalinclude:: ../../code/cgi/main.c - :language: c - :linenos: - :lines: 16, 25-45 - :emphasize-lines: 8-9,18,20 - -The ``stdout`` of the CGI script is set to the socket so that whatever our tick -script prints, gets sent to the client. By using processes, we can offload the -read/write buffering to the operating system, so in terms of convenience this -is great. Just be warned that creating processes is a costly task. - -.. _pipes: - -Parent-child IPC ----------------- - -A parent and child can have one or two way communication over a pipe created by -settings ``uv_stdio_container_t.flags`` to a bit-wise combination of -``UV_CREATE_PIPE`` and ``UV_READABLE_PIPE`` or ``UV_WRITABLE_PIPE``. The -read/write flag is from the perspective of the child process. In this case, -the ``uv_stream_t* stream`` field must be set to point to an initialized, -unopened ``uv_pipe_t`` instance. - -New stdio Pipes -+++++++++++++++ - -The ``uv_pipe_t`` structure represents more than just `pipe(7)`_ (or ``|``), -but supports any streaming file-like objects. On Windows, the only object of -that description is the `Named Pipe`_. On Unix, this could be any of `Unix -Domain Socket`_, or derived from `mkfifo(1)`_, or it could actually be a -`pipe(7)`_. When ``uv_spawn`` initializes a ``uv_pipe_t`` due to the -`UV_CREATE_PIPE` flag, it opts for creating a `socketpair(2)`_. - -This is intended for the purpose of allowing multiple libuv processes to -communicate with IPC. This is discussed below. - -.. _pipe(7): https://man7.org/linux/man-pages/man7/pipe.7.html -.. _mkfifo(1): https://man7.org/linux/man-pages/man1/mkfifo.1.html -.. _socketpair(2): https://man7.org/linux/man-pages/man2/socketpair.2.html -.. _Unix Domain Socket: https://man7.org/linux/man-pages/man7/unix.7.html -.. _Named Pipe: https://docs.microsoft.com/en-us/windows/win32/ipc/named-pipes - - -Arbitrary process IPC -+++++++++++++++++++++ - -Since domain sockets [#]_ can have a well known name and a location in the -file-system they can be used for IPC between unrelated processes. The D-BUS_ -system used by open source desktop environments uses domain sockets for event -notification. Various applications can then react when a contact comes online -or new hardware is detected. The MySQL server also runs a domain socket on -which clients can interact with it. - -.. _D-BUS: https://www.freedesktop.org/wiki/Software/dbus - -When using domain sockets, a client-server pattern is usually followed with the -creator/owner of the socket acting as the server. After the initial setup, -messaging is no different from TCP, so we'll re-use the echo server example. - -.. rubric:: pipe-echo-server/main.c -.. literalinclude:: ../../code/pipe-echo-server/main.c - :language: c - :linenos: - :lines: 70- - :emphasize-lines: 5,10,14 - -We name the socket ``echo.sock`` which means it will be created in the local -directory. This socket now behaves no different from TCP sockets as far as -the stream API is concerned. You can test this server using `socat`_:: - - $ socat - /path/to/socket - -A client which wants to connect to a domain socket will use:: - - void uv_pipe_connect(uv_connect_t *req, uv_pipe_t *handle, const char *name, uv_connect_cb cb); - -where ``name`` will be ``echo.sock`` or similar. On Unix systems, ``name`` must -point to a valid file (e.g. ``/tmp/echo.sock``). On Windows, ``name`` follows a -``\\?\pipe\echo.sock`` format. - -.. _socat: http://www.dest-unreach.org/socat/ - -Sending file descriptors over pipes -+++++++++++++++++++++++++++++++++++ - -The cool thing about domain sockets is that file descriptors can be exchanged -between processes by sending them over a domain socket. This allows processes -to hand off their I/O to other processes. Applications include load-balancing -servers, worker processes and other ways to make optimum use of CPU. libuv only -supports sending **TCP sockets or other pipes** over pipes for now. - -To demonstrate, we will look at a echo server implementation that hands of -clients to worker processes in a round-robin fashion. This program is a bit -involved, and while only snippets are included in the book, it is recommended -to read the full code to really understand it. - -The worker process is quite simple, since the file-descriptor is handed over to -it by the master. - -.. rubric:: multi-echo-server/worker.c -.. literalinclude:: ../../code/multi-echo-server/worker.c - :language: c - :linenos: - :lines: 7-9,81- - :emphasize-lines: 6-8 - -``queue`` is the pipe connected to the master process on the other end, along -which new file descriptors get sent. It is important to set the ``ipc`` -argument of ``uv_pipe_init`` to 1 to indicate this pipe will be used for -inter-process communication! Since the master will write the file handle to the -standard input of the worker, we connect the pipe to ``stdin`` using -``uv_pipe_open``. - -.. rubric:: multi-echo-server/worker.c -.. literalinclude:: ../../code/multi-echo-server/worker.c - :language: c - :linenos: - :lines: 51-79 - :emphasize-lines: 10,15,20 - -First we call ``uv_pipe_pending_count()`` to ensure that a handle is available -to read out. If your program could deal with different types of handles, -``uv_pipe_pending_type()`` can be used to determine the type. -Although ``accept`` seems odd in this code, it actually makes sense. What -``accept`` traditionally does is get a file descriptor (the client) from -another file descriptor (The listening socket). Which is exactly what we do -here. Fetch the file descriptor (``client``) from ``queue``. From this point -the worker does standard echo server stuff. - -Turning now to the master, let's take a look at how the workers are launched to -allow load balancing. - -.. rubric:: multi-echo-server/main.c -.. literalinclude:: ../../code/multi-echo-server/main.c - :language: c - :linenos: - :lines: 9-13 - -The ``child_worker`` structure wraps the process, and the pipe between the -master and the individual process. - -.. rubric:: multi-echo-server/main.c -.. literalinclude:: ../../code/multi-echo-server/main.c - :language: c - :linenos: - :lines: 51,61-95 - :emphasize-lines: 17,20-21 - -In setting up the workers, we use the nifty libuv function ``uv_cpu_info`` to -get the number of CPUs so we can launch an equal number of workers. Again it is -important to initialize the pipe acting as the IPC channel with the third -argument as 1. We then indicate that the child process' ``stdin`` is to be -a readable pipe (from the point of view of the child). Everything is -straightforward till here. The workers are launched and waiting for file -descriptors to be written to their standard input. - -It is in ``on_new_connection`` (the TCP infrastructure is initialized in -``main()``), that we accept the client socket and pass it along to the next -worker in the round-robin. - -.. rubric:: multi-echo-server/main.c -.. literalinclude:: ../../code/multi-echo-server/main.c - :language: c - :linenos: - :lines: 31-49 - :emphasize-lines: 9,12-13 - -The ``uv_write2`` call handles all the abstraction and it is simply a matter of -passing in the handle (``client``) as the right argument. With this our -multi-process echo server is operational. - -Thanks to Kyle for `pointing out`_ that ``uv_write2()`` requires a non-empty -buffer even when sending handles. - -.. _pointing out: https://github.com/nikhilm/uvbook/issues/56 - ----- - -.. [#] In this section domain sockets stands in for named pipes on Windows as - well. diff --git a/libuv/docs/src/guide/threads.rst b/libuv/docs/src/guide/threads.rst deleted file mode 100644 index 3990e44..0000000 --- a/libuv/docs/src/guide/threads.rst +++ /dev/null @@ -1,397 +0,0 @@ -Threads -======= - -Wait a minute? Why are we on threads? Aren't event loops supposed to be **the -way** to do *web-scale programming*? Well... no. Threads are still the medium in -which processors do their jobs. Threads are therefore mighty useful sometimes, even -though you might have to wade through various synchronization primitives. - -Threads are used internally to fake the asynchronous nature of all of the system -calls. libuv also uses threads to allow you, the application, to perform a task -asynchronously that is actually blocking, by spawning a thread and collecting -the result when it is done. - -Today there are two predominant thread libraries: the Windows threads -implementation and POSIX's :man:`pthreads(7)`. libuv's thread API is analogous to -the pthreads API and often has similar semantics. - -A notable aspect of libuv's thread facilities is that it is a self contained -section within libuv. Whereas other features intimately depend on the event -loop and callback principles, threads are complete agnostic, they block as -required, signal errors directly via return values, and, as shown in the -:ref:`first example `, don't even require a running -event loop. - -libuv's thread API is also very limited since the semantics and syntax of -threads are different on all platforms, with different levels of completeness. - -This chapter makes the following assumption: **There is only one event loop, -running in one thread (the main thread)**. No other thread interacts -with the event loop (except using ``uv_async_send``). - -Core thread operations ----------------------- - -There isn't much here, you just start a thread using ``uv_thread_create()`` and -wait for it to close using ``uv_thread_join()``. - -.. _thread-create-example: - -.. rubric:: thread-create/main.c -.. literalinclude:: ../../code/thread-create/main.c - :language: c - :linenos: - :lines: 26-36 - :emphasize-lines: 3-7 - -.. tip:: - - ``uv_thread_t`` is just an alias for ``pthread_t`` on Unix, but this is an - implementation detail, avoid depending on it to always be true. - -The second parameter is the function which will serve as the entry point for -the thread, the last parameter is a ``void *`` argument which can be used to pass -custom parameters to the thread. The function ``hare`` will now run in a separate -thread, scheduled pre-emptively by the operating system: - -.. rubric:: thread-create/main.c -.. literalinclude:: ../../code/thread-create/main.c - :language: c - :linenos: - :lines: 6-14 - :emphasize-lines: 2 - -Unlike ``pthread_join()`` which allows the target thread to pass back a value to -the calling thread using a second parameter, ``uv_thread_join()`` does not. To -send values use :ref:`inter-thread-communication`. - -Synchronization Primitives --------------------------- - -This section is purposely spartan. This book is not about threads, so I only -catalogue any surprises in the libuv APIs here. For the rest you can look at -the :man:`pthreads(7)` man pages. - -Mutexes -~~~~~~~ - -The mutex functions are a **direct** map to the pthread equivalents. - -.. rubric:: libuv mutex functions -.. code-block:: c - - int uv_mutex_init(uv_mutex_t* handle); - int uv_mutex_init_recursive(uv_mutex_t* handle); - void uv_mutex_destroy(uv_mutex_t* handle); - void uv_mutex_lock(uv_mutex_t* handle); - int uv_mutex_trylock(uv_mutex_t* handle); - void uv_mutex_unlock(uv_mutex_t* handle); - -The ``uv_mutex_init()``, ``uv_mutex_init_recursive()`` and ``uv_mutex_trylock()`` -functions will return 0 on success, and an error code otherwise. - -If `libuv` has been compiled with debugging enabled, ``uv_mutex_destroy()``, -``uv_mutex_lock()`` and ``uv_mutex_unlock()`` will ``abort()`` on error. -Similarly ``uv_mutex_trylock()`` will abort if the error is anything *other -than* ``EAGAIN`` or ``EBUSY``. - -Recursive mutexes are supported, but you should not rely on them. Also, they -should not be used with ``uv_cond_t`` variables. - -The default BSD mutex implementation will raise an error if a thread which has -locked a mutex attempts to lock it again. For example, a construct like:: - - uv_mutex_init(a_mutex); - uv_mutex_lock(a_mutex); - uv_thread_create(thread_id, entry, (void *)a_mutex); - uv_mutex_lock(a_mutex); - // more things here - -can be used to wait until another thread initializes some stuff and then -unlocks ``a_mutex`` but will lead to your program crashing if in debug mode, or -return an error in the second call to ``uv_mutex_lock()``. - -.. note:: - - Mutexes on Windows are always recursive. - -Locks -~~~~~ - -Read-write locks are a more granular access mechanism. Two readers can access -shared memory at the same time. A writer may not acquire the lock when it is -held by a reader. A reader or writer may not acquire a lock when a writer is -holding it. Read-write locks are frequently used in databases. Here is a toy -example. - -.. rubric:: locks/main.c - simple rwlocks -.. literalinclude:: ../../code/locks/main.c - :language: c - :linenos: - :emphasize-lines: 13,16,27,31,42,55 - -Run this and observe how the readers will sometimes overlap. In case of -multiple writers, schedulers will usually give them higher priority, so if you -add two writers, you'll see that both writers tend to finish first before the -readers get a chance again. - -We also use barriers in the above example so that the main thread can wait for -all readers and writers to indicate they have ended. - -Others -~~~~~~ - -libuv also supports semaphores_, `condition variables`_ and barriers_ with APIs -very similar to their pthread counterparts. - -.. _semaphores: https://en.wikipedia.org/wiki/Semaphore_(programming) -.. _condition variables: https://en.wikipedia.org/wiki/Monitor_(synchronization)#Condition_variables_2 -.. _barriers: https://en.wikipedia.org/wiki/Barrier_(computer_science) - -In addition, libuv provides a convenience function ``uv_once()``. Multiple -threads can attempt to call ``uv_once()`` with a given guard and a function -pointer, **only the first one will win, the function will be called once and -only once**:: - - /* Initialize guard */ - static uv_once_t once_only = UV_ONCE_INIT; - - int i = 0; - - void increment() { - i++; - } - - void thread1() { - /* ... work */ - uv_once(once_only, increment); - } - - void thread2() { - /* ... work */ - uv_once(once_only, increment); - } - - int main() { - /* ... spawn threads */ - } - -After all threads are done, ``i == 1``. - -.. _libuv-work-queue: - -libuv v0.11.11 onwards also added a ``uv_key_t`` struct and api_ for -thread-local storage. - -.. _api: http://docs.libuv.org/en/v1.x/threading.html#thread-local-storage - -libuv work queue ----------------- - -``uv_queue_work()`` is a convenience function that allows an application to run -a task in a separate thread, and have a callback that is triggered when the -task is done. A seemingly simple function, what makes ``uv_queue_work()`` -tempting is that it allows potentially any third-party libraries to be used -with the event-loop paradigm. When you use event loops, it is *imperative to -make sure that no function which runs periodically in the loop thread blocks -when performing I/O or is a serious CPU hog*, because this means that the loop -slows down and events are not being handled at full capacity. - -However, a lot of existing code out there features blocking functions (for example -a routine which performs I/O under the hood) to be used with threads if you -want responsiveness (the classic 'one thread per client' server model), and -getting them to play with an event loop library generally involves rolling your -own system of running the task in a separate thread. libuv just provides -a convenient abstraction for this. - -Here is a simple example inspired by `node.js is cancer`_. We are going to -calculate fibonacci numbers, sleeping a bit along the way, but run it in -a separate thread so that the blocking and CPU bound task does not prevent the -event loop from performing other activities. - -.. rubric:: queue-work/main.c - lazy fibonacci -.. literalinclude:: ../../code/queue-work/main.c - :language: c - :linenos: - :lines: 17-29 - -The actual task function is simple, nothing to show that it is going to be -run in a separate thread. The ``uv_work_t`` structure is the clue. You can pass -arbitrary data through it using the ``void* data`` field and use it to -communicate to and from the thread. But be sure you are using proper locks if -you are changing things while both threads may be running. - -The trigger is ``uv_queue_work``: - -.. rubric:: queue-work/main.c -.. literalinclude:: ../../code/queue-work/main.c - :language: c - :linenos: - :lines: 31-44 - :emphasize-lines: 10 - -The thread function will be launched in a separate thread, passed the -``uv_work_t`` structure and once the function returns, the *after* function -will be called on the thread the event loop is running in. It will be passed -the same structure. - -For writing wrappers to blocking libraries, a common :ref:`pattern ` -is to use a baton to exchange data. - -Since libuv version `0.9.4` an additional function, ``uv_cancel()``, is -available. This allows you to cancel tasks on the libuv work queue. Only tasks -that *are yet to be started* can be cancelled. If a task has *already started -executing, or it has finished executing*, ``uv_cancel()`` **will fail**. - -``uv_cancel()`` is useful to cleanup pending tasks if the user requests -termination. For example, a music player may queue up multiple directories to -be scanned for audio files. If the user terminates the program, it should quit -quickly and not wait until all pending requests are run. - -Let's modify the fibonacci example to demonstrate ``uv_cancel()``. We first set -up a signal handler for termination. - -.. rubric:: queue-cancel/main.c -.. literalinclude:: ../../code/queue-cancel/main.c - :language: c - :linenos: - :lines: 43- - -When the user triggers the signal by pressing ``Ctrl+C`` we send -``uv_cancel()`` to all the workers. ``uv_cancel()`` will return ``0`` for those that are already executing or finished. - -.. rubric:: queue-cancel/main.c -.. literalinclude:: ../../code/queue-cancel/main.c - :language: c - :linenos: - :lines: 33-41 - :emphasize-lines: 6 - -For tasks that do get cancelled successfully, the *after* function is called -with ``status`` set to ``UV_ECANCELED``. - -.. rubric:: queue-cancel/main.c -.. literalinclude:: ../../code/queue-cancel/main.c - :language: c - :linenos: - :lines: 28-31 - :emphasize-lines: 2 - -``uv_cancel()`` can also be used with ``uv_fs_t`` and ``uv_getaddrinfo_t`` -requests. For the filesystem family of functions, ``uv_fs_t.errorno`` will be -set to ``UV_ECANCELED``. - -.. TIP:: - - A well designed program would have a way to terminate long running workers - that have already started executing. Such a worker could periodically check - for a variable that only the main process sets to signal termination. - -.. _inter-thread-communication: - -Inter-thread communication --------------------------- - -Sometimes you want various threads to actually send each other messages *while* -they are running. For example you might be running some long duration task in -a separate thread (perhaps using ``uv_queue_work``) but want to notify progress -to the main thread. This is a simple example of having a download manager -informing the user of the status of running downloads. - -.. rubric:: progress/main.c -.. literalinclude:: ../../code/progress/main.c - :language: c - :linenos: - :lines: 7-8,35- - :emphasize-lines: 2,11 - -The async thread communication works *on loops* so although any thread can be -the message sender, only threads with libuv loops can be receivers (or rather -the loop is the receiver). libuv will invoke the callback (``print_progress``) -with the async watcher whenever it receives a message. - -.. warning:: - - It is important to realize that since the message send is *async*, the callback - may be invoked immediately after ``uv_async_send`` is called in another - thread, or it may be invoked after some time. libuv may also combine - multiple calls to ``uv_async_send`` and invoke your callback only once. The - only guarantee that libuv makes is -- The callback function is called *at - least once* after the call to ``uv_async_send``. If you have no pending - calls to ``uv_async_send``, the callback won't be called. If you make two - or more calls, and libuv hasn't had a chance to run the callback yet, it - *may* invoke your callback *only once* for the multiple invocations of - ``uv_async_send``. Your callback will never be called twice for just one - event. - -.. rubric:: progress/main.c -.. literalinclude:: ../../code/progress/main.c - :language: c - :linenos: - :lines: 10-24 - :emphasize-lines: 7-8 - -In the download function, we modify the progress indicator and queue the message -for delivery with ``uv_async_send``. Remember: ``uv_async_send`` is also -non-blocking and will return immediately. - -.. rubric:: progress/main.c -.. literalinclude:: ../../code/progress/main.c - :language: c - :linenos: - :lines: 31-34 - -The callback is a standard libuv pattern, extracting the data from the watcher. - -Finally it is important to remember to clean up the watcher. - -.. rubric:: progress/main.c -.. literalinclude:: ../../code/progress/main.c - :language: c - :linenos: - :lines: 26-29 - :emphasize-lines: 3 - -After this example, which showed the abuse of the ``data`` field, bnoordhuis_ -pointed out that using the ``data`` field is not thread safe, and -``uv_async_send()`` is actually only meant to wake up the event loop. Use -a mutex or rwlock to ensure accesses are performed in the right order. - -.. note:: - - mutexes and rwlocks **DO NOT** work inside a signal handler, whereas - ``uv_async_send`` does. - -One use case where ``uv_async_send`` is required is when interoperating with -libraries that require thread affinity for their functionality. For example in -node.js, a v8 engine instance, contexts and its objects are bound to the thread -that the v8 instance was started in. Interacting with v8 data structures from -another thread can lead to undefined results. Now consider some node.js module -which binds a third party library. It may go something like this: - -1. In node, the third party library is set up with a JavaScript callback to be - invoked for more information:: - - var lib = require('lib'); - lib.on_progress(function() { - console.log("Progress"); - }); - - lib.do(); - - // do other stuff - -2. ``lib.do`` is supposed to be non-blocking but the third party lib is - blocking, so the binding uses ``uv_queue_work``. - -3. The actual work being done in a separate thread wants to invoke the progress - callback, but cannot directly call into v8 to interact with JavaScript. So - it uses ``uv_async_send``. - -4. The async callback, invoked in the main loop thread, which is the v8 thread, - then interacts with v8 to invoke the JavaScript callback. - ----- - -.. _node.js is cancer: http://widgetsandshit.com/teddziuba/2011/10/node-js-is-cancer.html -.. _bnoordhuis: https://github.com/bnoordhuis diff --git a/libuv/docs/src/guide/utilities.rst b/libuv/docs/src/guide/utilities.rst deleted file mode 100644 index 4657b1b..0000000 --- a/libuv/docs/src/guide/utilities.rst +++ /dev/null @@ -1,450 +0,0 @@ -Utilities -========= - -This chapter catalogues tools and techniques which are useful for common tasks. -The `libev man page`_ already covers some patterns which can be adopted to -libuv through simple API changes. It also covers parts of the libuv API that -don't require entire chapters dedicated to them. - -Timers ------- - -Timers invoke the callback after a certain time has elapsed since the timer was -started. libuv timers can also be set to invoke at regular intervals instead of -just once. - -Simple use is to init a watcher and start it with a ``timeout``, and optional ``repeat``. -Timers can be stopped at any time. - -.. code-block:: c - - uv_timer_t timer_req; - - uv_timer_init(loop, &timer_req); - uv_timer_start(&timer_req, callback, 5000, 2000); - -will start a repeating timer, which first starts 5 seconds (the ``timeout``) after the execution -of ``uv_timer_start``, then repeats every 2 seconds (the ``repeat``). Use: - -.. code-block:: c - - uv_timer_stop(&timer_req); - -to stop the timer. This can be used safely from within the callback as well. - -The repeat interval can be modified at any time with:: - - uv_timer_set_repeat(uv_timer_t *timer, int64_t repeat); - -which will take effect **when possible**. If this function is called from -a timer callback, it means: - -* If the timer was non-repeating, the timer has already been stopped. Use - ``uv_timer_start`` again. -* If the timer is repeating, the next timeout has already been scheduled, so - the old repeat interval will be used once more before the timer switches to - the new interval. - -The utility function:: - - int uv_timer_again(uv_timer_t *) - -applies **only to repeating timers** and is equivalent to stopping the timer -and then starting it with both initial ``timeout`` and ``repeat`` set to the -old ``repeat`` value. If the timer hasn't been started it fails (error code -``UV_EINVAL``) and returns -1. - -An actual timer example is in the :ref:`reference count section -`. - -.. _reference-count: - -Event loop reference count --------------------------- - -The event loop only runs as long as there are active handles. This system -works by having every handle increase the reference count of the event loop -when it is started and decreasing the reference count when stopped. It is also -possible to manually change the reference count of handles using:: - - void uv_ref(uv_handle_t*); - void uv_unref(uv_handle_t*); - -These functions can be used to allow a loop to exit even when a watcher is -active or to use custom objects to keep the loop alive. - -The latter can be used with interval timers. You might have a garbage collector -which runs every X seconds, or your network service might send a heartbeat to -others periodically, but you don't want to have to stop them along all clean -exit paths or error scenarios. Or you want the program to exit when all your -other watchers are done. In that case just unref the timer immediately after -creation so that if it is the only watcher running then ``uv_run`` will still -exit. - -This is also used in node.js where some libuv methods are being bubbled up to -the JS API. A ``uv_handle_t`` (the superclass of all watchers) is created per -JS object and can be ref/unrefed. - -.. rubric:: ref-timer/main.c -.. literalinclude:: ../../code/ref-timer/main.c - :language: c - :linenos: - :lines: 5-8, 17- - :emphasize-lines: 9 - -We initialize the garbage collector timer, then immediately ``unref`` it. -Observe how after 9 seconds, when the fake job is done, the program -automatically exits, even though the garbage collector is still running. - -Idler pattern -------------- - -The callbacks of idle handles are invoked once per event loop. The idle -callback can be used to perform some very low priority activity. For example, -you could dispatch a summary of the daily application performance to the -developers for analysis during periods of idleness, or use the application's -CPU time to perform SETI calculations :) An idle watcher is also useful in -a GUI application. Say you are using an event loop for a file download. If the -TCP socket is still being established and no other events are present your -event loop will pause (**block**), which means your progress bar will freeze -and the user will face an unresponsive application. In such a case queue up and -idle watcher to keep the UI operational. - -.. rubric:: idle-compute/main.c -.. literalinclude:: ../../code/idle-compute/main.c - :language: c - :linenos: - :lines: 5-9, 34- - :emphasize-lines: 13 - -Here we initialize the idle watcher and queue it up along with the actual -events we are interested in. ``crunch_away`` will now be called repeatedly -until the user types something and presses Return. Then it will be interrupted -for a brief amount as the loop deals with the input data, after which it will -keep calling the idle callback again. - -.. rubric:: idle-compute/main.c -.. literalinclude:: ../../code/idle-compute/main.c - :language: c - :linenos: - :lines: 10-19 - -.. _baton: - -Passing data to worker thread ------------------------------ - -When using ``uv_queue_work`` you'll usually need to pass complex data through -to the worker thread. The solution is to use a ``struct`` and set -``uv_work_t.data`` to point to it. A slight variation is to have the -``uv_work_t`` itself as the first member of this struct (called a baton [#]_). -This allows cleaning up the work request and all the data in one free call. - -.. code-block:: c - :linenos: - :emphasize-lines: 2 - - struct ftp_baton { - uv_work_t req; - char *host; - int port; - char *username; - char *password; - } - -.. code-block:: c - :linenos: - :emphasize-lines: 2 - - ftp_baton *baton = (ftp_baton*) malloc(sizeof(ftp_baton)); - baton->req.data = (void*) baton; - baton->host = strdup("my.webhost.com"); - baton->port = 21; - // ... - - uv_queue_work(loop, &baton->req, ftp_session, ftp_cleanup); - -Here we create the baton and queue the task. - -Now the task function can extract the data it needs: - -.. code-block:: c - :linenos: - :emphasize-lines: 2, 12 - - void ftp_session(uv_work_t *req) { - ftp_baton *baton = (ftp_baton*) req->data; - - fprintf(stderr, "Connecting to %s\n", baton->host); - } - - void ftp_cleanup(uv_work_t *req) { - ftp_baton *baton = (ftp_baton*) req->data; - - free(baton->host); - // ... - free(baton); - } - -We then free the baton which also frees the watcher. - -External I/O with polling -------------------------- - -Usually third-party libraries will handle their own I/O, and keep track of -their sockets and other files internally. In this case it isn't possible to use -the standard stream I/O operations, but the library can still be integrated -into the libuv event loop. All that is required is that the library allow you -to access the underlying file descriptors and provide functions that process -tasks in small increments as decided by your application. Some libraries though -will not allow such access, providing only a standard blocking function which -will perform the entire I/O transaction and only then return. It is unwise to -use these in the event loop thread, use the :ref:`threadpool` instead. Of -course, this will also mean losing granular control on the library. - -The ``uv_poll`` section of libuv simply watches file descriptors using the -operating system notification mechanism. In some sense, all the I/O operations -that libuv implements itself are also backed by ``uv_poll`` like code. Whenever -the OS notices a change of state in file descriptors being polled, libuv will -invoke the associated callback. - -Here we will walk through a simple download manager that will use libcurl_ to -download files. Rather than give all control to libcurl, we'll instead be -using the libuv event loop, and use the non-blocking, async multi_ interface to -progress with the download whenever libuv notifies of I/O readiness. - -.. _libcurl: https://curl.haxx.se/libcurl/ -.. _multi: https://curl.haxx.se/libcurl/c/libcurl-multi.html - -.. rubric:: uvwget/main.c - The setup -.. literalinclude:: ../../code/uvwget/main.c - :language: c - :linenos: - :lines: 1-9,140- - :emphasize-lines: 7,21,24-25 - -The way each library is integrated with libuv will vary. In the case of -libcurl, we can register two callbacks. The socket callback ``handle_socket`` -is invoked whenever the state of a socket changes and we have to start polling -it. ``start_timeout`` is called by libcurl to notify us of the next timeout -interval, after which we should drive libcurl forward regardless of I/O status. -This is so that libcurl can handle errors or do whatever else is required to -get the download moving. - -Our downloader is to be invoked as:: - - $ ./uvwget [url1] [url2] ... - -So we add each argument as an URL - -.. rubric:: uvwget/main.c - Adding urls -.. literalinclude:: ../../code/uvwget/main.c - :language: c - :linenos: - :lines: 39-56 - :emphasize-lines: 13-14 - -We let libcurl directly write the data to a file, but much more is possible if -you so desire. - -``start_timeout`` will be called immediately the first time by libcurl, so -things are set in motion. This simply starts a libuv `timer <#timers>`_ which -drives ``curl_multi_socket_action`` with ``CURL_SOCKET_TIMEOUT`` whenever it -times out. ``curl_multi_socket_action`` is what drives libcurl, and what we -call whenever sockets change state. But before we go into that, we need to poll -on sockets whenever ``handle_socket`` is called. - -.. rubric:: uvwget/main.c - Setting up polling -.. literalinclude:: ../../code/uvwget/main.c - :language: c - :linenos: - :lines: 102-140 - :emphasize-lines: 9,11,15,21,24 - -We are interested in the socket fd ``s``, and the ``action``. For every socket -we create a ``uv_poll_t`` handle if it doesn't exist, and associate it with the -socket using ``curl_multi_assign``. This way ``socketp`` points to it whenever -the callback is invoked. - -In the case that the download is done or fails, libcurl requests removal of the -poll. So we stop and free the poll handle. - -Depending on what events libcurl wishes to watch for, we start polling with -``UV_READABLE`` or ``UV_WRITABLE``. Now libuv will invoke the poll callback -whenever the socket is ready for reading or writing. Calling ``uv_poll_start`` -multiple times on the same handle is acceptable, it will just update the events -mask with the new value. ``curl_perform`` is the crux of this program. - -.. rubric:: uvwget/main.c - Driving libcurl. -.. literalinclude:: ../../code/uvwget/main.c - :language: c - :linenos: - :lines: 81-95 - :emphasize-lines: 2,6-7,12 - -The first thing we do is to stop the timer, since there has been some progress -in the interval. Then depending on what event triggered the callback, we set -the correct flags. Then we call ``curl_multi_socket_action`` with the socket -that progressed and the flags informing about what events happened. At this -point libcurl does all of its internal tasks in small increments, and will -attempt to return as fast as possible, which is exactly what an evented program -wants in its main thread. libcurl keeps queueing messages into its own queue -about transfer progress. In our case we are only interested in transfers that -are completed. So we extract these messages, and clean up handles whose -transfers are done. - -.. rubric:: uvwget/main.c - Reading transfer status. -.. literalinclude:: ../../code/uvwget/main.c - :language: c - :linenos: - :lines: 58-79 - :emphasize-lines: 6,9-10,13-14 - -Check & Prepare watchers ------------------------- - -TODO - -Loading libraries ------------------ - -libuv provides a cross platform API to dynamically load `shared libraries`_. -This can be used to implement your own plugin/extension/module system and is -used by node.js to implement ``require()`` support for bindings. The usage is -quite simple as long as your library exports the right symbols. Be careful with -sanity and security checks when loading third party code, otherwise your -program will behave unpredictably. This example implements a very simple -plugin system which does nothing except print the name of the plugin. - -Let us first look at the interface provided to plugin authors. - -.. rubric:: plugin/plugin.h -.. literalinclude:: ../../code/plugin/plugin.h - :language: c - :linenos: - -You can similarly add more functions that plugin authors can use to do useful -things in your application [#]_. A sample plugin using this API is: - -.. rubric:: plugin/hello.c -.. literalinclude:: ../../code/plugin/hello.c - :language: c - :linenos: - -Our interface defines that all plugins should have an ``initialize`` function -which will be called by the application. This plugin is compiled as a shared -library and can be loaded by running our application:: - - $ ./plugin libhello.dylib - Loading libhello.dylib - Registered plugin "Hello World!" - -.. NOTE:: - - The shared library filename will be different depending on platforms. On - Linux it is ``libhello.so``. - -This is done by using ``uv_dlopen`` to first load the shared library -``libhello.dylib``. Then we get access to the ``initialize`` function using -``uv_dlsym`` and invoke it. - -.. rubric:: plugin/main.c -.. literalinclude:: ../../code/plugin/main.c - :language: c - :linenos: - :lines: 7- - :emphasize-lines: 15, 18, 24 - -``uv_dlopen`` expects a path to the shared library and sets the opaque -``uv_lib_t`` pointer. It returns 0 on success, -1 on error. Use ``uv_dlerror`` -to get the error message. - -``uv_dlsym`` stores a pointer to the symbol in the second argument in the third -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 - -TTY ---- - -Text terminals have supported basic formatting for a long time, with a `pretty -standardised`_ command set. This formatting is often used by programs to -improve the readability of terminal output. For example ``grep --colour``. -libuv provides the ``uv_tty_t`` abstraction (a stream) and related functions to -implement the ANSI escape codes across all platforms. By this I mean that libuv -converts ANSI codes to the Windows equivalent, and provides functions to get -terminal information. - -.. _pretty standardised: https://en.wikipedia.org/wiki/ANSI_escape_sequences - -The first thing to do is to initialize a ``uv_tty_t`` with the file descriptor -it reads/writes from. This is achieved with:: - - int uv_tty_init(uv_loop_t*, uv_tty_t*, uv_file fd, int unused) - -The ``unused`` parameter is now auto-detected and ignored. It previously needed -to be set to use ``uv_read_start()`` on the stream. - -It is then best to use ``uv_tty_set_mode`` to set the mode to *normal* -which enables most TTY formatting, flow-control and other settings. Other_ modes -are also available. - -.. _Other: http://docs.libuv.org/en/v1.x/tty.html#c.uv_tty_mode_t - -Remember to call ``uv_tty_reset_mode`` when your program exits to restore the -state of the terminal. Just good manners. Another set of good manners is to be -aware of redirection. If the user redirects the output of your command to -a file, control sequences should not be written as they impede readability and -``grep``. To check if the file descriptor is indeed a TTY, call -``uv_guess_handle`` with the file descriptor and compare the return value with -``UV_TTY``. - -Here is a simple example which prints white text on a red background: - -.. rubric:: tty/main.c -.. literalinclude:: ../../code/tty/main.c - :language: c - :linenos: - :emphasize-lines: 11-12,14,17,27 - -The final TTY helper is ``uv_tty_get_winsize()`` which is used to get the -width and height of the terminal and returns ``0`` on success. Here is a small -program which does some animation using the function and character position -escape codes. - -.. rubric:: tty-gravity/main.c -.. literalinclude:: ../../code/tty-gravity/main.c - :language: c - :linenos: - :emphasize-lines: 19,25,38 - -The escape codes are: - -====== ======================= -Code Meaning -====== ======================= -*2* J Clear part of the screen, 2 is entire screen -H Moves cursor to certain position, default top-left -*n* B Moves cursor down by n lines -*n* C Moves cursor right by n columns -m Obeys string of display settings, in this case green background (40+2), white text (30+7) -====== ======================= - -As you can see this is very useful to produce nicely formatted output, or even -console based arcade games if that tickles your fancy. For fancier control you -can try `ncurses`_. - -.. _ncurses: https://www.gnu.org/software/ncurses/ncurses.html - -.. versionchanged:: 1.23.1: the `readable` parameter is now unused and ignored. - The appropriate value will now be auto-detected from the kernel. - ----- - -.. [#] I was first introduced to the term baton in this context, in Konstantin - Käfer's excellent slides on writing node.js bindings -- - https://kkaefer.com/node-cpp-modules/#baton -.. [#] mfp is My Fancy Plugin - -.. _libev man page: http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#COMMON_OR_USEFUL_IDIOMS_OR_BOTH diff --git a/libuv/docs/src/handle.rst b/libuv/docs/src/handle.rst deleted file mode 100644 index 0edb7d7..0000000 --- a/libuv/docs/src/handle.rst +++ /dev/null @@ -1,283 +0,0 @@ - -.. _handle: - -:c:type:`uv_handle_t` --- Base handle -===================================== - -`uv_handle_t` is the base type for all libuv handle types. - -Structures are aligned so that any libuv handle can be cast to `uv_handle_t`. -All API functions defined here work with any handle type. - -Libuv handles are not movable. Pointers to handle structures passed to -functions must remain valid for the duration of the requested operation. Take -care when using stack allocated handles. - -Data types ----------- - -.. c:type:: uv_handle_t - - The base libuv handle type. - -.. c:enum:: uv_handle_type - - The kind of the libuv handle. - - :: - - typedef enum { - UV_UNKNOWN_HANDLE = 0, - UV_ASYNC, - UV_CHECK, - UV_FS_EVENT, - UV_FS_POLL, - UV_HANDLE, - UV_IDLE, - UV_NAMED_PIPE, - UV_POLL, - UV_PREPARE, - UV_PROCESS, - UV_STREAM, - UV_TCP, - UV_TIMER, - UV_TTY, - UV_UDP, - UV_SIGNAL, - UV_FILE, - UV_HANDLE_TYPE_MAX - } uv_handle_type; - -.. c:type:: uv_any_handle - - Union of all handle types. - -.. c:type:: void (*uv_alloc_cb)(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) - - Type definition for callback passed to :c:func:`uv_read_start` and - :c:func:`uv_udp_recv_start`. The user must allocate memory and fill the supplied - :c:type:`uv_buf_t` structure. If NULL is assigned as the buffer's base or 0 as its length, - a ``UV_ENOBUFS`` error will be triggered in the :c:type:`uv_udp_recv_cb` or the - :c:type:`uv_read_cb` callback. - - Each buffer is used only once and the user is responsible for freeing it in the - :c:type:`uv_udp_recv_cb` or the :c:type:`uv_read_cb` callback. - - A suggested size (65536 at the moment in most cases) is provided, but it's just an indication, - not related in any way to the pending data to be read. The user is free to allocate the amount - of memory they decide. - - As an example, applications with custom allocation schemes such as using freelists, allocation - pools or slab based allocators may decide to use a different size which matches the memory - chunks they already have. - - Example: - - :: - - static void my_alloc_cb(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) { - buf->base = malloc(suggested_size); - buf->len = suggested_size; - } - -.. c:type:: void (*uv_close_cb)(uv_handle_t* handle) - - Type definition for callback passed to :c:func:`uv_close`. - - -Public members -^^^^^^^^^^^^^^ - -.. c:member:: uv_loop_t* uv_handle_t.loop - - Pointer to the :c:type:`uv_loop_t` the handle is running on. Readonly. - -.. c:member:: uv_handle_type uv_handle_t.type - - The :c:type:`uv_handle_type`, indicating the type of the underlying handle. Readonly. - -.. c:member:: void* uv_handle_t.data - - Space for user-defined arbitrary data. libuv does not use this field. - - -API ---- - -.. c:macro:: UV_HANDLE_TYPE_MAP(iter_macro) - - Macro that expands to a series of invocations of `iter_macro` for - each of the handle types. `iter_macro` is invoked with two - arguments: the name of the `uv_handle_type` element without the - `UV_` prefix, and the name of the corresponding structure type - without the `uv_` prefix and `_t` suffix. - -.. c:function:: int uv_is_active(const uv_handle_t* handle) - - Returns non-zero if the handle is active, zero if it's inactive. What - "active" means depends on the type of handle: - - - A uv_async_t handle is always active and cannot be deactivated, except - by closing it with uv_close(). - - - A uv_pipe_t, uv_tcp_t, uv_udp_t, etc. handle - basically any handle that - deals with i/o - is active when it is doing something that involves i/o, - like reading, writing, connecting, accepting new connections, etc. - - - A uv_check_t, uv_idle_t, uv_timer_t, etc. handle is active when it has - been started with a call to uv_check_start(), uv_idle_start(), etc. - - Rule of thumb: if a handle of type `uv_foo_t` has a `uv_foo_start()` - function, then it's active from the moment that function is called. - Likewise, `uv_foo_stop()` deactivates the handle again. - -.. c:function:: int uv_is_closing(const uv_handle_t* handle) - - Returns non-zero if the handle is closing or closed, zero otherwise. - - .. note:: - This function should only be used between the initialization of the handle and the - arrival of the close callback. - -.. c:function:: void uv_close(uv_handle_t* handle, uv_close_cb close_cb) - - Request handle to be closed. `close_cb` will be called asynchronously after - this call. This MUST be called on each handle before memory is released. - Moreover, the memory can only be released in `close_cb` or after it has - returned. - - Handles that wrap file descriptors are closed immediately but - `close_cb` will still be deferred to the next iteration of the event loop. - It gives you a chance to free up any resources associated with the handle. - - In-progress requests, like uv_connect_t or uv_write_t, are cancelled and - have their callbacks called asynchronously with status=UV_ECANCELED. - -.. c:function:: void uv_ref(uv_handle_t* handle) - - Reference the given handle. References are idempotent, that is, if a handle - is already referenced calling this function again will have no effect. - - See :ref:`refcount`. - -.. c:function:: void uv_unref(uv_handle_t* handle) - - Un-reference the given handle. References are idempotent, that is, if a handle - is not referenced calling this function again will have no effect. - - See :ref:`refcount`. - -.. c:function:: int uv_has_ref(const uv_handle_t* handle) - - Returns non-zero if the handle referenced, zero otherwise. - - See :ref:`refcount`. - -.. c:function:: size_t uv_handle_size(uv_handle_type type) - - Returns the size of the given handle type. Useful for FFI binding writers - who don't want to know the structure layout. - - -Miscellaneous API functions ---------------------------- - -The following API functions take a :c:type:`uv_handle_t` argument but they work -just for some handle types. - -.. c:function:: int uv_send_buffer_size(uv_handle_t* handle, int* value) - - Gets or sets the size of the send buffer that the operating - system uses for the socket. - - If `*value` == 0, then it will set `*value` to the current send buffer size. - If `*value` > 0 then it will use `*value` to set the new send buffer size. - - On success, zero is returned. On error, a negative result is - returned. - - This function works for TCP, pipe and UDP handles on Unix and for TCP and - UDP handles on Windows. - - .. note:: - Linux will set double the size and return double the size of the original set value. - -.. c:function:: int uv_recv_buffer_size(uv_handle_t* handle, int* value) - - Gets or sets the size of the receive buffer that the operating - system uses for the socket. - - If `*value` == 0, then it will set `*value` to the current receive buffer size. - If `*value` > 0 then it will use `*value` to set the new receive buffer size. - - On success, zero is returned. On error, a negative result is - returned. - - This function works for TCP, pipe and UDP handles on Unix and for TCP and - UDP handles on Windows. - - .. note:: - Linux will set double the size and return double the size of the original set value. - -.. c:function:: int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd) - - Gets the platform dependent file descriptor equivalent. - - The following handles are supported: TCP, pipes, TTY, UDP and poll. Passing - any other handle type will fail with `UV_EINVAL`. - - If a handle doesn't have an attached file descriptor yet or the handle - itself has been closed, this function will return `UV_EBADF`. - - .. warning:: - Be very careful when using this function. libuv assumes it's in control of the file - descriptor so any change to it may lead to malfunction. - -.. c:function:: uv_loop_t* uv_handle_get_loop(const uv_handle_t* handle) - - Returns `handle->loop`. - - .. versionadded:: 1.19.0 - -.. c:function:: void* uv_handle_get_data(const uv_handle_t* handle) - - Returns `handle->data`. - - .. versionadded:: 1.19.0 - -.. c:function:: void* uv_handle_set_data(uv_handle_t* handle, void* data) - - Sets `handle->data` to `data`. - - .. versionadded:: 1.19.0 - -.. c:function:: uv_handle_type uv_handle_get_type(const uv_handle_t* handle) - - Returns `handle->type`. - - .. versionadded:: 1.19.0 - -.. c:function:: const char* uv_handle_type_name(uv_handle_type type) - - Returns the name for the equivalent struct for a given handle type, - e.g. `"pipe"` (as in :c:type:`uv_pipe_t`) for `UV_NAMED_PIPE`. - - If no such handle type exists, this returns `NULL`. - - .. versionadded:: 1.19.0 - -.. _refcount: - -Reference counting ------------------- - -The libuv event loop (if run in the default mode) will run until there are no -active `and` referenced handles left. The user can force the loop to exit early -by unreferencing handles which are active, for example by calling :c:func:`uv_unref` -after calling :c:func:`uv_timer_start`. - -A handle can be referenced or unreferenced, the refcounting scheme doesn't use -a counter, so both operations are idempotent. - -All handles are referenced when active by default, see :c:func:`uv_is_active` -for a more detailed explanation on what being `active` involves. diff --git a/libuv/docs/src/idle.rst b/libuv/docs/src/idle.rst deleted file mode 100644 index b7a0507..0000000 --- a/libuv/docs/src/idle.rst +++ /dev/null @@ -1,62 +0,0 @@ - -.. _idle: - -:c:type:`uv_idle_t` --- Idle handle -=================================== - -Idle handles will run the given callback once per loop iteration, right -before the :c:type:`uv_prepare_t` handles. - -.. note:: - The notable difference with prepare handles is that when there are active idle handles, - the loop will perform a zero timeout poll instead of blocking for i/o. - -.. warning:: - Despite the name, idle handles will get their callbacks called on every loop iteration, - not when the loop is actually "idle". - - -Data types ----------- - -.. c:type:: uv_idle_t - - Idle handle type. - -.. c:type:: void (*uv_idle_cb)(uv_idle_t* handle) - - Type definition for callback passed to :c:func:`uv_idle_start`. - - -Public members -^^^^^^^^^^^^^^ - -N/A - -.. seealso:: The :c:type:`uv_handle_t` members also apply. - - -API ---- - -.. c:function:: int uv_idle_init(uv_loop_t* loop, uv_idle_t* idle) - - Initialize the handle. This function always succeeds. - - :returns: 0 - -.. c:function:: int uv_idle_start(uv_idle_t* idle, uv_idle_cb cb) - - Start the handle with the given callback. This function always succeeds, - except when `cb` is `NULL`. - - :returns: 0 on success, or `UV_EINVAL` when `cb == NULL`. - -.. c:function:: int uv_idle_stop(uv_idle_t* idle) - - Stop the handle, the callback will no longer be called. - This function always succeeds. - - :returns: 0 - -.. seealso:: The :c:type:`uv_handle_t` API functions also apply. diff --git a/libuv/docs/src/index.rst b/libuv/docs/src/index.rst deleted file mode 100644 index 4b5d4d2..0000000 --- a/libuv/docs/src/index.rst +++ /dev/null @@ -1,62 +0,0 @@ - -Welcome to the libuv documentation -================================== - -Overview --------- - -libuv is a multi-platform support library with a focus on asynchronous I/O. It -was primarily developed for use by `Node.js`_, but it's also used by `Luvit`_, -`Julia`_, `pyuv`_, and `others`_. - -.. note:: - In case you find errors in this documentation you can help by sending - `pull requests `_! - -.. _Node.js: https://nodejs.org -.. _Luvit: https://luvit.io -.. _Julia: https://julialang.org -.. _pyuv: https://github.com/saghul/pyuv -.. _others: https://github.com/libuv/libuv/blob/v1.x/LINKS.md - - -Features --------- - -* Full-featured event loop backed by epoll, kqueue, IOCP, event ports. -* Asynchronous TCP and UDP sockets -* Asynchronous DNS resolution -* Asynchronous file and file system operations -* File system events -* ANSI escape code controlled TTY -* IPC with socket sharing, using Unix domain sockets or named pipes (Windows) -* Child processes -* Thread pool -* Signal handling -* High resolution clock -* Threading and synchronization primitives - - -Documentation -------------- - -.. toctree:: - :maxdepth: 1 - - design - api - guide - upgrading - - -Downloads ---------- - -libuv can be downloaded from `here `_. - - -Installation ------------- - -Installation instructions can be found in `the README `_. - diff --git a/libuv/docs/src/loop.rst b/libuv/docs/src/loop.rst deleted file mode 100644 index 0f5ddfb..0000000 --- a/libuv/docs/src/loop.rst +++ /dev/null @@ -1,245 +0,0 @@ - -.. _loop: - -:c:type:`uv_loop_t` --- Event loop -================================== - -The event loop is the central part of libuv's functionality. It takes care -of polling for i/o and scheduling callbacks to be run based on different sources -of events. - - -Data types ----------- - -.. c:type:: uv_loop_t - - Loop data type. - -.. c:enum:: uv_run_mode - - Mode used to run the loop with :c:func:`uv_run`. - - :: - - typedef enum { - UV_RUN_DEFAULT = 0, - UV_RUN_ONCE, - UV_RUN_NOWAIT - } uv_run_mode; - -.. c:type:: void (*uv_walk_cb)(uv_handle_t* handle, void* arg) - - Type definition for callback passed to :c:func:`uv_walk`. - - -Public members -^^^^^^^^^^^^^^ - -.. c:member:: void* uv_loop_t.data - - Space for user-defined arbitrary data. libuv does not use and does not - touch this field. - - -API ---- - -.. c:function:: int uv_loop_init(uv_loop_t* loop) - - Initializes the given `uv_loop_t` structure. - -.. c:function:: int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...) - - .. versionadded:: 1.0.2 - - Set additional loop options. You should normally call this before the - first call to :c:func:`uv_run` unless mentioned otherwise. - - Returns 0 on success or a UV_E* error code on failure. Be prepared to - handle UV_ENOSYS; it means the loop option is not supported by the platform. - - Supported options: - - - UV_LOOP_BLOCK_SIGNAL: Block a signal when polling for new events. The - second argument to :c:func:`uv_loop_configure` is the signal number. - - This operation is currently only implemented for SIGPROF signals, - to suppress unnecessary wakeups when using a sampling profiler. - Requesting other signals will fail with UV_EINVAL. - - - UV_METRICS_IDLE_TIME: Accumulate the amount of idle time the event loop - spends in the event provider. - - This option is necessary to use :c:func:`uv_metrics_idle_time`. - - .. versionchanged:: 1.39.0 added the UV_METRICS_IDLE_TIME option. - -.. c:function:: int uv_loop_close(uv_loop_t* loop) - - Releases all internal loop resources. Call this function only when the loop - has finished executing and all open handles and requests have been closed, - or it will return UV_EBUSY. After this function returns, the user can free - the memory allocated for the loop. - -.. c:function:: uv_loop_t* uv_default_loop(void) - - Returns the initialized default loop. It may return NULL in case of - allocation failure. - - This function is just a convenient way for having a global loop throughout - an application, the default loop is in no way different than the ones - initialized with :c:func:`uv_loop_init`. As such, the default loop can (and - should) be closed with :c:func:`uv_loop_close` so the resources associated - with it are freed. - - .. warning:: - This function is not thread safe. - -.. c:function:: int uv_run(uv_loop_t* loop, uv_run_mode mode) - - This function runs the event loop. It will act differently depending on the - specified mode: - - - UV_RUN_DEFAULT: Runs the event loop until there are no more active and - referenced handles or requests. Returns non-zero if :c:func:`uv_stop` - was called and there are still active handles or requests. Returns - zero in all other cases. - - UV_RUN_ONCE: Poll for i/o once. Note that this function blocks if - there are no pending callbacks. Returns zero when done (no active handles - or requests left), or non-zero if more callbacks are expected (meaning - you should run the event loop again sometime in the future). - - UV_RUN_NOWAIT: Poll for i/o once but don't block if there are no - pending callbacks. Returns zero if done (no active handles - or requests left), or non-zero if more callbacks are expected (meaning - you should run the event loop again sometime in the future). - - :c:func:`uv_run` is not reentrant. It must not be called from a callback. - -.. c:function:: int uv_loop_alive(const uv_loop_t* loop) - - Returns non-zero if there are referenced active handles, active - requests or closing handles in the loop. - -.. c:function:: void uv_stop(uv_loop_t* loop) - - Stop the event loop, causing :c:func:`uv_run` to end as soon as - possible. This will happen not sooner than the next loop iteration. - If this function was called before blocking for i/o, the loop won't block - for i/o on this iteration. - -.. c:function:: size_t uv_loop_size(void) - - Returns the size of the `uv_loop_t` structure. Useful for FFI binding - writers who don't want to know the structure layout. - -.. c:function:: int uv_backend_fd(const uv_loop_t* loop) - - Get backend file descriptor. Only kqueue, epoll and event ports are - supported. - - This can be used in conjunction with `uv_run(loop, UV_RUN_NOWAIT)` to - poll in one thread and run the event loop's callbacks in another see - test/test-embed.c for an example. - - .. note:: - Embedding a kqueue fd in another kqueue pollset doesn't work on all platforms. It's not - an error to add the fd but it never generates events. - -.. c:function:: int uv_backend_timeout(const uv_loop_t* loop) - - Get the poll timeout. The return value is in milliseconds, or -1 for no - timeout. - -.. c:function:: uint64_t uv_now(const uv_loop_t* loop) - - Return the current timestamp in milliseconds. The timestamp is cached at - the start of the event loop tick, see :c:func:`uv_update_time` for details - and rationale. - - The timestamp increases monotonically from some arbitrary point in time. - Don't make assumptions about the starting point, you will only get - disappointed. - - .. note:: - Use :c:func:`uv_hrtime` if you need sub-millisecond granularity. - -.. c:function:: void uv_update_time(uv_loop_t* loop) - - Update the event loop's concept of "now". Libuv caches the current time - at the start of the event loop tick in order to reduce the number of - time-related system calls. - - You won't normally need to call this function unless you have callbacks - that block the event loop for longer periods of time, where "longer" is - somewhat subjective but probably on the order of a millisecond or more. - -.. c:function:: void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) - - Walk the list of handles: `walk_cb` will be executed with the given `arg`. - -.. c:function:: int uv_loop_fork(uv_loop_t* loop) - - .. versionadded:: 1.12.0 - - Reinitialize any kernel state necessary in the child process after - a :man:`fork(2)` system call. - - Previously started watchers will continue to be started in the - child process. - - It is necessary to explicitly call this function on every event - loop created in the parent process that you plan to continue to - use in the child, including the default loop (even if you don't - continue to use it in the parent). This function must be called - before calling :c:func:`uv_run` or any other API function using - the loop in the child. Failure to do so will result in undefined - behaviour, possibly including duplicate events delivered to both - parent and child or aborting the child process. - - When possible, it is preferred to create a new loop in the child - process instead of reusing a loop created in the parent. New loops - created in the child process after the fork should not use this - function. - - This function is not implemented on Windows, where it returns ``UV_ENOSYS``. - - .. caution:: - - This function is experimental. It may contain bugs, and is subject to - change or removal. API and ABI stability is not guaranteed. - - .. note:: - - On Mac OS X, if directory FS event handles were in use in the - parent process *for any event loop*, the child process will no - longer be able to use the most efficient FSEvent - implementation. Instead, uses of directory FS event handles in - the child will fall back to the same implementation used for - files and on other kqueue-based systems. - - .. caution:: - - On AIX and SunOS, FS event handles that were already started in - the parent process at the time of forking will *not* deliver - events in the child process; they must be closed and restarted. - On all other platforms, they will continue to work normally - without any further intervention. - - .. caution:: - - Any previous value returned from :c:func:`uv_backend_fd` is now - invalid. That function must be called again to determine the - correct backend file descriptor. - -.. c:function:: void* uv_loop_get_data(const uv_loop_t* loop) - - Returns `loop->data`. - - .. versionadded:: 1.19.0 - -.. c:function:: void* uv_loop_set_data(uv_loop_t* loop, void* data) - - Sets `loop->data` to `data`. - - .. versionadded:: 1.19.0 diff --git a/libuv/docs/src/metrics.rst b/libuv/docs/src/metrics.rst deleted file mode 100644 index 696c620..0000000 --- a/libuv/docs/src/metrics.rst +++ /dev/null @@ -1,27 +0,0 @@ - -.. _metrics: - -Metrics operations -====================== - -libuv provides a metrics API to track the amount of time the event loop has -spent idle in the kernel's event provider. - -API ---- - -.. c:function:: uint64_t uv_metrics_idle_time(uv_loop_t* loop) - - Retrieve the amount of time the event loop has been idle in the kernel's - event provider (e.g. ``epoll_wait``). The call is thread safe. - - The return value is the accumulated time spent idle in the kernel's event - provider starting from when the :c:type:`uv_loop_t` was configured to - collect the idle time. - - .. note:: - The event loop will not begin accumulating the event provider's idle - time until calling :c:type:`uv_loop_configure` with - :c:type:`UV_METRICS_IDLE_TIME`. - - .. versionadded:: 1.39.0 diff --git a/libuv/docs/src/migration_010_100.rst b/libuv/docs/src/migration_010_100.rst deleted file mode 100644 index bb6ac1a..0000000 --- a/libuv/docs/src/migration_010_100.rst +++ /dev/null @@ -1,244 +0,0 @@ - -.. _migration_010_100: - -libuv 0.10 -> 1.0.0 migration guide -=================================== - -Some APIs changed quite a bit throughout the 1.0.0 development process. Here -is a migration guide for the most significant changes that happened after 0.10 -was released. - - -Loop initialization and closing -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -In libuv 0.10 (and previous versions), loops were created with `uv_loop_new`, which -allocated memory for a new loop and initialized it; and destroyed with `uv_loop_delete`, -which destroyed the loop and freed the memory. Starting with 1.0, those are deprecated -and the user is responsible for allocating the memory and then initializing the loop. - -libuv 0.10 - -:: - - uv_loop_t* loop = uv_loop_new(); - ... - uv_loop_delete(loop); - -libuv 1.0 - -:: - - uv_loop_t* loop = malloc(sizeof *loop); - uv_loop_init(loop); - ... - uv_loop_close(loop); - free(loop); - -.. note:: - Error handling was omitted for brevity. Check the documentation for :c:func:`uv_loop_init` - and :c:func:`uv_loop_close`. - - -Error handling -~~~~~~~~~~~~~~ - -Error handling had a major overhaul in libuv 1.0. In general, functions and status parameters -would get 0 for success and -1 for failure on libuv 0.10, and the user had to use `uv_last_error` -to fetch the error code, which was a positive number. - -In 1.0, functions and status parameters contain the actual error code, which is 0 for success, or -a negative number in case of error. - -libuv 0.10 - -:: - - ... assume 'server' is a TCP server which is already listening - r = uv_listen((uv_stream_t*) server, 511, NULL); - if (r == -1) { - uv_err_t err = uv_last_error(uv_default_loop()); - /* err.code contains UV_EADDRINUSE */ - } - -libuv 1.0 - -:: - - ... assume 'server' is a TCP server which is already listening - r = uv_listen((uv_stream_t*) server, 511, NULL); - if (r < 0) { - /* r contains UV_EADDRINUSE */ - } - - -Threadpool changes -~~~~~~~~~~~~~~~~~~ - -In libuv 0.10 Unix used a threadpool which defaulted to 4 threads, while Windows used the -`QueueUserWorkItem` API, which uses a Windows internal threadpool, which defaults to 512 -threads per process. - -In 1.0, we unified both implementations, so Windows now uses the same implementation Unix -does. The threadpool size can be set by exporting the ``UV_THREADPOOL_SIZE`` environment -variable. See :c:ref:`threadpool`. - - -Allocation callback API change -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -In libuv 0.10 the callback had to return a filled :c:type:`uv_buf_t` by value: - -:: - - uv_buf_t alloc_cb(uv_handle_t* handle, size_t size) { - return uv_buf_init(malloc(size), size); - } - -In libuv 1.0 a pointer to a buffer is passed to the callback, which the user -needs to fill: - -:: - - void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - buf->base = malloc(size); - buf->len = size; - } - - -Unification of IPv4 / IPv6 APIs -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -libuv 1.0 unified the IPv4 and IPv6 APIS. There is no longer a `uv_tcp_bind` and `uv_tcp_bind6` -duality, there is only :c:func:`uv_tcp_bind` now. - -IPv4 functions took ``struct sockaddr_in`` structures by value, and IPv6 functions took -``struct sockaddr_in6``. Now functions take a ``struct sockaddr*`` (note it's a pointer). -It can be stack allocated. - -libuv 0.10 - -:: - - struct sockaddr_in addr = uv_ip4_addr("0.0.0.0", 1234); - ... - uv_tcp_bind(&server, addr) - -libuv 1.0 - -:: - - struct sockaddr_in addr; - uv_ip4_addr("0.0.0.0", 1234, &addr) - ... - uv_tcp_bind(&server, (const struct sockaddr*) &addr, 0); - -The IPv4 and IPv6 struct creating functions (:c:func:`uv_ip4_addr` and :c:func:`uv_ip6_addr`) -have also changed, make sure you check the documentation. - -..note:: - This change applies to all functions that made a distinction between IPv4 and IPv6 - addresses. - - -Streams / UDP data receive callback API change -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The streams and UDP data receive callbacks now get a pointer to a :c:type:`uv_buf_t` buffer, -not a structure by value. - -libuv 0.10 - -:: - - void on_read(uv_stream_t* handle, - ssize_t nread, - uv_buf_t buf) { - ... - } - - void recv_cb(uv_udp_t* handle, - ssize_t nread, - uv_buf_t buf, - struct sockaddr* addr, - unsigned flags) { - ... - } - -libuv 1.0 - -:: - - void on_read(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - ... - } - - void recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* buf, - const struct sockaddr* addr, - unsigned flags) { - ... - } - - -Receiving handles over pipes API change -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -In libuv 0.10 (and earlier versions) the `uv_read2_start` function was used to start reading -data on a pipe, which could also result in the reception of handles over it. The callback -for such function looked like this: - -:: - - void on_read(uv_pipe_t* pipe, - ssize_t nread, - uv_buf_t buf, - uv_handle_type pending) { - ... - } - -In libuv 1.0, `uv_read2_start` was removed, and the user needs to check if there are pending -handles using :c:func:`uv_pipe_pending_count` and :c:func:`uv_pipe_pending_type` while in -the read callback: - -:: - - void on_read(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - ... - while (uv_pipe_pending_count((uv_pipe_t*) handle) != 0) { - pending = uv_pipe_pending_type((uv_pipe_t*) handle); - ... - } - ... - } - - -Extracting the file descriptor out of a handle -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -While it wasn't supported by the API, users often accessed the libuv internals in -order to get access to the file descriptor of a TCP handle, for example. - -:: - - fd = handle->io_watcher.fd; - -This is now properly exposed through the :c:func:`uv_fileno` function. - - -uv_fs_readdir rename and API change -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -`uv_fs_readdir` returned a list of strings in the `req->ptr` field upon completion in -libuv 0.10. In 1.0, this function got renamed to :c:func:`uv_fs_scandir`, since it's -actually implemented using ``scandir(3)``. - -In addition, instead of allocating a full list strings, the user is able to get one -result at a time by using the :c:func:`uv_fs_scandir_next` function. This function -does not need to make a roundtrip to the threadpool, because libuv will keep the -list of *dents* returned by ``scandir(3)`` around. diff --git a/libuv/docs/src/misc.rst b/libuv/docs/src/misc.rst deleted file mode 100644 index 9a8595e..0000000 --- a/libuv/docs/src/misc.rst +++ /dev/null @@ -1,755 +0,0 @@ - -.. _misc: - -Miscellaneous utilities -======================= - -This section contains miscellaneous functions that don't really belong in any -other section. - - -Data types ----------- - -.. c:type:: uv_buf_t - - Buffer data type. - - .. c:member:: char* uv_buf_t.base - - Pointer to the base of the buffer. - - .. c:member:: size_t uv_buf_t.len - - Total bytes in the buffer. - - .. note:: - On Windows this field is ULONG. - -.. c:type:: void* (*uv_malloc_func)(size_t size) - - Replacement function for :man:`malloc(3)`. - See :c:func:`uv_replace_allocator`. - -.. c:type:: void* (*uv_realloc_func)(void* ptr, size_t size) - - Replacement function for :man:`realloc(3)`. - See :c:func:`uv_replace_allocator`. - -.. c:type:: void* (*uv_calloc_func)(size_t count, size_t size) - - Replacement function for :man:`calloc(3)`. - See :c:func:`uv_replace_allocator`. - -.. c:type:: void (*uv_free_func)(void* ptr) - - Replacement function for :man:`free(3)`. - See :c:func:`uv_replace_allocator`. - -.. c:type:: void (*uv_random_cb)(uv_random_t* req, int status, void* buf, size_t buflen) - - Callback passed to :c:func:`uv_random`. `status` is non-zero in case of - error. The `buf` pointer is the same pointer that was passed to - :c:func:`uv_random`. - -.. c:type:: uv_file - - Cross platform representation of a file handle. - -.. c:type:: uv_os_sock_t - - Cross platform representation of a socket handle. - -.. c:type:: uv_os_fd_t - - Abstract representation of a file descriptor. On Unix systems this is a - `typedef` of `int` and on Windows a `HANDLE`. - -.. c:type:: uv_pid_t - - Cross platform representation of a `pid_t`. - - .. versionadded:: 1.16.0 - -.. c:type:: uv_timeval_t - - Data type for storing times. - - :: - - typedef struct { - long tv_sec; - long tv_usec; - } uv_timeval_t; - -.. c:type:: uv_timeval64_t - - Alternative data type for storing times. - - :: - - typedef struct { - int64_t tv_sec; - int32_t tv_usec; - } uv_timeval64_t; - -.. c:type:: uv_rusage_t - - Data type for resource usage results. - - :: - - typedef struct { - uv_timeval_t ru_utime; /* user CPU time used */ - uv_timeval_t ru_stime; /* system CPU time used */ - uint64_t ru_maxrss; /* maximum resident set size */ - uint64_t ru_ixrss; /* integral shared memory size (X) */ - uint64_t ru_idrss; /* integral unshared data size (X) */ - uint64_t ru_isrss; /* integral unshared stack size (X) */ - uint64_t ru_minflt; /* page reclaims (soft page faults) (X) */ - uint64_t ru_majflt; /* page faults (hard page faults) */ - uint64_t ru_nswap; /* swaps (X) */ - uint64_t ru_inblock; /* block input operations */ - uint64_t ru_oublock; /* block output operations */ - uint64_t ru_msgsnd; /* IPC messages sent (X) */ - uint64_t ru_msgrcv; /* IPC messages received (X) */ - uint64_t ru_nsignals; /* signals received (X) */ - uint64_t ru_nvcsw; /* voluntary context switches (X) */ - uint64_t ru_nivcsw; /* involuntary context switches (X) */ - } uv_rusage_t; - - Members marked with `(X)` are unsupported on Windows. - See :man:`getrusage(2)` for supported fields on Unix - -.. c:type:: uv_cpu_info_t - - Data type for CPU information. - - :: - - typedef struct uv_cpu_info_s { - char* model; - int speed; - struct uv_cpu_times_s { - uint64_t user; /* milliseconds */ - uint64_t nice; /* milliseconds */ - uint64_t sys; /* milliseconds */ - uint64_t idle; /* milliseconds */ - uint64_t irq; /* milliseconds */ - } cpu_times; - } uv_cpu_info_t; - -.. c:type:: uv_interface_address_t - - Data type for interface addresses. - - :: - - typedef struct uv_interface_address_s { - char* name; - char phys_addr[6]; - int is_internal; - union { - struct sockaddr_in address4; - struct sockaddr_in6 address6; - } address; - union { - struct sockaddr_in netmask4; - struct sockaddr_in6 netmask6; - } netmask; - } uv_interface_address_t; - -.. c:type:: uv_passwd_t - - Data type for password file information. - - :: - - typedef struct uv_passwd_s { - char* username; - long uid; - long gid; - char* shell; - char* homedir; - } uv_passwd_t; - -.. c:type:: uv_utsname_t - - Data type for operating system name and version information. - - :: - - typedef struct uv_utsname_s { - char sysname[256]; - char release[256]; - char version[256]; - char machine[256]; - } uv_utsname_t; - -.. c:type:: uv_env_item_t - - Data type for environment variable storage. - - :: - - typedef struct uv_env_item_s { - char* name; - char* value; - } uv_env_item_t; - -.. c:type:: uv_random_t - - Random data request type. - -API ---- - -.. c:function:: uv_handle_type uv_guess_handle(uv_file file) - - Used to detect what type of stream should be used with a given file - descriptor. Usually this will be used during initialization to guess the - type of the stdio streams. - - For :man:`isatty(3)` equivalent functionality use this function and test - for ``UV_TTY``. - -.. c:function:: int uv_replace_allocator(uv_malloc_func malloc_func, uv_realloc_func realloc_func, uv_calloc_func calloc_func, uv_free_func free_func) - - .. versionadded:: 1.6.0 - - Override the use of the standard library's :man:`malloc(3)`, - :man:`calloc(3)`, :man:`realloc(3)`, :man:`free(3)`, memory allocation - functions. - - This function must be called before any other libuv function is called or - after all resources have been freed and thus libuv doesn't reference - any allocated memory chunk. - - On success, it returns 0, if any of the function pointers is NULL it - returns UV_EINVAL. - - .. warning:: There is no protection against changing the allocator multiple - times. If the user changes it they are responsible for making - sure the allocator is changed while no memory was allocated with - the previous allocator, or that they are compatible. - - .. warning:: Allocator must be thread-safe. - -.. c:function:: void uv_library_shutdown(void); - - .. versionadded:: 1.38.0 - - Release any global state that libuv is holding onto. Libuv will normally - do so automatically when it is unloaded but it can be instructed to perform - cleanup manually. - - .. warning:: Only call :c:func:`uv_library_shutdown()` once. - - .. warning:: Don't call :c:func:`uv_library_shutdown()` when there are - still event loops or I/O requests active. - - .. warning:: Don't call libuv functions after calling - :c:func:`uv_library_shutdown()`. - -.. c:function:: uv_buf_t uv_buf_init(char* base, unsigned int len) - - Constructor for :c:type:`uv_buf_t`. - - Due to platform differences the user cannot rely on the ordering of the - `base` and `len` members of the uv_buf_t struct. The user is responsible for - freeing `base` after the uv_buf_t is done. Return struct passed by value. - -.. c:function:: char** uv_setup_args(int argc, char** argv) - - Store the program arguments. Required for getting / setting the process title - or the executable path. Libuv may take ownership of the memory that `argv` - points to. This function should be called exactly once, at program start-up. - - Example: - - :: - - argv = uv_setup_args(argc, argv); /* May return a copy of argv. */ - - -.. c:function:: int uv_get_process_title(char* buffer, size_t size) - - Gets the title of the current process. You *must* call `uv_setup_args` - before calling this function on Unix and AIX systems. If `uv_setup_args` - has not been called on systems that require it, then `UV_ENOBUFS` is - returned. If `buffer` is `NULL` or `size` is zero, `UV_EINVAL` is returned. - If `size` cannot accommodate the process title and terminating `nul` - character, the function returns `UV_ENOBUFS`. - - .. note:: - On BSD systems, `uv_setup_args` is needed for getting the initial process - title. The process title returned will be an empty string until either - `uv_setup_args` or `uv_set_process_title` is called. - - .. versionchanged:: 1.18.1 now thread-safe on all supported platforms. - - .. versionchanged:: 1.39.0 now returns an error if `uv_setup_args` is needed - but hasn't been called. - -.. c:function:: int uv_set_process_title(const char* title) - - Sets the current process title. You *must* call `uv_setup_args` before - calling this function on Unix and AIX systems. If `uv_setup_args` has not - been called on systems that require it, then `UV_ENOBUFS` is returned. On - platforms with a fixed size buffer for the process title the contents of - `title` will be copied to the buffer and truncated if larger than the - available space. Other platforms will return `UV_ENOMEM` if they cannot - allocate enough space to duplicate the contents of `title`. - - .. versionchanged:: 1.18.1 now thread-safe on all supported platforms. - - .. versionchanged:: 1.39.0 now returns an error if `uv_setup_args` is needed - but hasn't been called. - -.. c:function:: int uv_resident_set_memory(size_t* rss) - - Gets the resident set size (RSS) for the current process. - -.. c:function:: int uv_uptime(double* uptime) - - Gets the current system uptime. - -.. c:function:: int uv_getrusage(uv_rusage_t* rusage) - - Gets the resource usage measures for the current process. - - .. note:: - On Windows not all fields are set, the unsupported fields are filled with zeroes. - See :c:type:`uv_rusage_t` for more details. - -.. c:function:: uv_pid_t uv_os_getpid(void) - - Returns the current process ID. - - .. versionadded:: 1.18.0 - -.. c:function:: uv_pid_t uv_os_getppid(void) - - Returns the parent process ID. - - .. versionadded:: 1.16.0 - -.. c:function:: int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) - - Gets information about the CPUs on the system. The `cpu_infos` array will - have `count` elements and needs to be freed with :c:func:`uv_free_cpu_info`. - -.. c:function:: void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) - - Frees the `cpu_infos` array previously allocated with :c:func:`uv_cpu_info`. - -.. c:function:: int uv_interface_addresses(uv_interface_address_t** addresses, int* count) - - Gets address information about the network interfaces on the system. An - array of `count` elements is allocated and returned in `addresses`. It must - be freed by the user, calling :c:func:`uv_free_interface_addresses`. - -.. c:function:: void uv_free_interface_addresses(uv_interface_address_t* addresses, int count) - - Free an array of :c:type:`uv_interface_address_t` which was returned by - :c:func:`uv_interface_addresses`. - -.. c:function:: void uv_loadavg(double avg[3]) - - Gets the load average. See: ``_ - - .. note:: - Returns [0,0,0] on Windows (i.e., it's not implemented). - -.. c:function:: int uv_ip4_addr(const char* ip, int port, struct sockaddr_in* addr) - - Convert a string containing an IPv4 addresses to a binary structure. - -.. c:function:: int uv_ip6_addr(const char* ip, int port, struct sockaddr_in6* addr) - - Convert a string containing an IPv6 addresses to a binary structure. - -.. c:function:: int uv_ip4_name(const struct sockaddr_in* src, char* dst, size_t size) - - Convert a binary structure containing an IPv4 address to a string. - -.. c:function:: int uv_ip6_name(const struct sockaddr_in6* src, char* dst, size_t size) - - Convert a binary structure containing an IPv6 address to a string. - -.. c:function:: int uv_inet_ntop(int af, const void* src, char* dst, size_t size) -.. c:function:: int uv_inet_pton(int af, const char* src, void* dst) - - Cross-platform IPv6-capable implementation of :man:`inet_ntop(3)` - and :man:`inet_pton(3)`. On success they return 0. In case of error - the target `dst` pointer is unmodified. - -.. c:macro:: UV_IF_NAMESIZE - - Maximum IPv6 interface identifier name length. Defined as - `IFNAMSIZ` on Unix and `IF_NAMESIZE` on Linux and Windows. - - .. versionadded:: 1.16.0 - -.. c:function:: int uv_if_indextoname(unsigned int ifindex, char* buffer, size_t* size) - - IPv6-capable implementation of :man:`if_indextoname(3)`. When called, - `*size` indicates the length of the `buffer`, which is used to store the - result. - On success, zero is returned, `buffer` contains the interface name, and - `*size` represents the string length of the `buffer`, excluding the NUL - terminator byte from `*size`. On error, a negative result is - returned. If `buffer` is not large enough to hold the result, - `UV_ENOBUFS` is returned, and `*size` represents the necessary size in - bytes, including the NUL terminator byte into the `*size`. - - On Unix, the returned interface name can be used directly as an - interface identifier in scoped IPv6 addresses, e.g. - `fe80::abc:def1:2345%en0`. - - On Windows, the returned interface cannot be used as an interface - identifier, as Windows uses numerical interface identifiers, e.g. - `fe80::abc:def1:2345%5`. - - To get an interface identifier in a cross-platform compatible way, - use `uv_if_indextoiid()`. - - Example: - - :: - - char ifname[UV_IF_NAMESIZE]; - size_t size = sizeof(ifname); - uv_if_indextoname(sin6->sin6_scope_id, ifname, &size); - - .. versionadded:: 1.16.0 - -.. c:function:: int uv_if_indextoiid(unsigned int ifindex, char* buffer, size_t* size) - - Retrieves a network interface identifier suitable for use in an IPv6 scoped - address. On Windows, returns the numeric `ifindex` as a string. On all other - platforms, `uv_if_indextoname()` is called. The result is written to - `buffer`, with `*size` indicating the length of `buffer`. If `buffer` is not - large enough to hold the result, then `UV_ENOBUFS` is returned, and `*size` - represents the size, including the NUL byte, required to hold the - result. - - See `uv_if_indextoname` for further details. - - .. versionadded:: 1.16.0 - -.. c:function:: int uv_exepath(char* buffer, size_t* size) - - Gets the executable path. You *must* call `uv_setup_args` before calling - this function. - -.. c:function:: int uv_cwd(char* buffer, size_t* size) - - Gets the current working directory, and stores it in `buffer`. If the - current working directory is too large to fit in `buffer`, this function - returns `UV_ENOBUFS`, and sets `size` to the required length, including the - null terminator. - - .. versionchanged:: 1.1.0 - - On Unix the path no longer ends in a slash. - - .. versionchanged:: 1.9.0 the returned length includes the terminating null - byte on `UV_ENOBUFS`, and the buffer is null terminated - on success. - - -.. c:function:: int uv_chdir(const char* dir) - - Changes the current working directory. - -.. c:function:: int uv_os_homedir(char* buffer, size_t* size) - - Gets the current user's home directory. On Windows, `uv_os_homedir()` first - checks the `USERPROFILE` environment variable using - `GetEnvironmentVariableW()`. If `USERPROFILE` is not set, - `GetUserProfileDirectoryW()` is called. On all other operating systems, - `uv_os_homedir()` first checks the `HOME` environment variable using - :man:`getenv(3)`. If `HOME` is not set, :man:`getpwuid_r(3)` is called. The - user's home directory is stored in `buffer`. When `uv_os_homedir()` is - called, `size` indicates the maximum size of `buffer`. On success `size` is set - to the string length of `buffer`. On `UV_ENOBUFS` failure `size` is set to the - required length for `buffer`, including the null byte. - - .. warning:: - `uv_os_homedir()` is not thread safe. - - .. versionadded:: 1.6.0 - -.. c:function:: int uv_os_tmpdir(char* buffer, size_t* size) - - Gets the temp directory. On Windows, `uv_os_tmpdir()` uses `GetTempPathW()`. - On all other operating systems, `uv_os_tmpdir()` uses the first environment - variable found in the ordered list `TMPDIR`, `TMP`, `TEMP`, and `TEMPDIR`. - If none of these are found, the path `"/tmp"` is used, or, on Android, - `"/data/local/tmp"` is used. The temp directory is stored in `buffer`. When - `uv_os_tmpdir()` is called, `size` indicates the maximum size of `buffer`. - On success `size` is set to the string length of `buffer` (which does not - include the terminating null). On `UV_ENOBUFS` failure `size` is set to the - required length for `buffer`, including the null byte. - - .. warning:: - `uv_os_tmpdir()` is not thread safe. - - .. versionadded:: 1.9.0 - -.. c:function:: int uv_os_get_passwd(uv_passwd_t* pwd) - - Gets a subset of the password file entry for the current effective uid (not - the real uid). The populated data includes the username, euid, gid, shell, - and home directory. On non-Windows systems, all data comes from - :man:`getpwuid_r(3)`. On Windows, uid and gid are set to -1 and have no - meaning, and shell is `NULL`. After successfully calling this function, the - memory allocated to `pwd` needs to be freed with - :c:func:`uv_os_free_passwd`. - - .. versionadded:: 1.9.0 - -.. c:function:: void uv_os_free_passwd(uv_passwd_t* pwd) - - Frees the `pwd` memory previously allocated with :c:func:`uv_os_get_passwd`. - - .. versionadded:: 1.9.0 - -.. c:function:: uint64_t uv_get_free_memory(void) - - Gets the amount of free memory available in the system, as reported by the kernel (in bytes). - -.. c:function:: uint64_t uv_get_total_memory(void) - - Gets the total amount of physical memory in the system (in bytes). - -.. c:function:: uint64_t uv_get_constrained_memory(void) - - Gets the amount of memory available to the process (in bytes) based on - limits imposed by the OS. If there is no such constraint, or the constraint - is unknown, `0` is returned. Note that it is not unusual for this value to - be less than or greater than :c:func:`uv_get_total_memory`. - - .. note:: - This function currently only returns a non-zero value on Linux, based - on cgroups if it is present, and on z/OS based on RLIMIT_MEMLIMIT. - - .. versionadded:: 1.29.0 - -.. c:function:: uint64_t uv_hrtime(void) - - Returns the current high-resolution real time. This is expressed in - nanoseconds. It is relative to an arbitrary time in the past. It is not - related to the time of day and therefore not subject to clock drift. The - primary use is for measuring performance between intervals. - - .. note:: - Not every platform can support nanosecond resolution; however, this value will always - be in nanoseconds. - -.. c:function:: void uv_print_all_handles(uv_loop_t* loop, FILE* stream) - - Prints all handles associated with the given `loop` to the given `stream`. - - Example: - - :: - - uv_print_all_handles(uv_default_loop(), stderr); - /* - [--I] signal 0x1a25ea8 - [-AI] async 0x1a25cf0 - [R--] idle 0x1a7a8c8 - */ - - The format is `[flags] handle-type handle-address`. For `flags`: - - - `R` is printed for a handle that is referenced - - `A` is printed for a handle that is active - - `I` is printed for a handle that is internal - - .. warning:: - This function is meant for ad hoc debugging, there is no API/ABI - stability guarantees. - - .. versionadded:: 1.8.0 - -.. c:function:: void uv_print_active_handles(uv_loop_t* loop, FILE* stream) - - This is the same as :c:func:`uv_print_all_handles` except only active handles - are printed. - - .. warning:: - This function is meant for ad hoc debugging, there is no API/ABI - stability guarantees. - - .. versionadded:: 1.8.0 - -.. c:function:: int uv_os_environ(uv_env_item_t** envitems, int* count) - - Retrieves all environment variables. This function will allocate memory - which must be freed by calling :c:func:`uv_os_free_environ`. - - .. warning:: - This function is not thread safe. - - .. versionadded:: 1.31.0 - -.. c:function:: void uv_os_free_environ(uv_env_item_t* envitems, int count); - - Frees the memory allocated for the environment variables by - :c:func:`uv_os_environ`. - - .. versionadded:: 1.31.0 - -.. c:function:: int uv_os_getenv(const char* name, char* buffer, size_t* size) - - Retrieves the environment variable specified by `name`, copies its value - into `buffer`, and sets `size` to the string length of the value. When - calling this function, `size` must be set to the amount of storage available - in `buffer`, including the null terminator. If the environment variable - exceeds the storage available in `buffer`, `UV_ENOBUFS` is returned, and - `size` is set to the amount of storage required to hold the value. If no - matching environment variable exists, `UV_ENOENT` is returned. - - .. warning:: - This function is not thread safe. - - .. versionadded:: 1.12.0 - -.. c:function:: int uv_os_setenv(const char* name, const char* value) - - Creates or updates the environment variable specified by `name` with - `value`. - - .. warning:: - This function is not thread safe. - - .. versionadded:: 1.12.0 - -.. c:function:: int uv_os_unsetenv(const char* name) - - Deletes the environment variable specified by `name`. If no such environment - variable exists, this function returns successfully. - - .. warning:: - This function is not thread safe. - - .. versionadded:: 1.12.0 - -.. c:function:: int uv_os_gethostname(char* buffer, size_t* size) - - Returns the hostname as a null-terminated string in `buffer`, and sets - `size` to the string length of the hostname. When calling this function, - `size` must be set to the amount of storage available in `buffer`, including - the null terminator. If the hostname exceeds the storage available in - `buffer`, `UV_ENOBUFS` is returned, and `size` is set to the amount of - storage required to hold the value. - - .. versionadded:: 1.12.0 - - .. versionchanged:: 1.26.0 `UV_MAXHOSTNAMESIZE` is available and represents - the maximum `buffer` size required to store a - hostname and terminating `nul` character. - -.. c:function:: int uv_os_getpriority(uv_pid_t pid, int* priority) - - Retrieves the scheduling priority of the process specified by `pid`. The - returned value of `priority` is between -20 (high priority) and 19 (low - priority). - - .. note:: - On Windows, the returned priority will equal one of the `UV_PRIORITY` - constants. - - .. versionadded:: 1.23.0 - -.. c:function:: int uv_os_setpriority(uv_pid_t pid, int priority) - - Sets the scheduling priority of the process specified by `pid`. The - `priority` value range is between -20 (high priority) and 19 (low priority). - The constants `UV_PRIORITY_LOW`, `UV_PRIORITY_BELOW_NORMAL`, - `UV_PRIORITY_NORMAL`, `UV_PRIORITY_ABOVE_NORMAL`, `UV_PRIORITY_HIGH`, and - `UV_PRIORITY_HIGHEST` are also provided for convenience. - - .. note:: - On Windows, this function utilizes `SetPriorityClass()`. The `priority` - argument is mapped to a Windows priority class. When retrieving the - process priority, the result will equal one of the `UV_PRIORITY` - constants, and not necessarily the exact value of `priority`. - - .. note:: - On Windows, setting `PRIORITY_HIGHEST` will only work for elevated user, - for others it will be silently reduced to `PRIORITY_HIGH`. - - .. note:: - On IBM i PASE, the highest process priority is -10. The constant - `UV_PRIORITY_HIGHEST` is -10, `UV_PRIORITY_HIGH` is -7, - `UV_PRIORITY_ABOVE_NORMAL` is -4, `UV_PRIORITY_NORMAL` is 0, - `UV_PRIORITY_BELOW_NORMAL` is 15 and `UV_PRIORITY_LOW` is 39. - - .. note:: - On IBM i PASE, you are not allowed to change your priority unless you - have the \*JOBCTL special authority (even to lower it). - - .. versionadded:: 1.23.0 - -.. c:function:: int uv_os_uname(uv_utsname_t* buffer) - - Retrieves system information in `buffer`. The populated data includes the - operating system name, release, version, and machine. On non-Windows - systems, `uv_os_uname()` is a thin wrapper around :man:`uname(2)`. Returns - zero on success, and a non-zero error value otherwise. - - .. versionadded:: 1.25.0 - -.. c:function:: int uv_gettimeofday(uv_timeval64_t* tv) - - Cross-platform implementation of :man:`gettimeofday(2)`. The timezone - argument to `gettimeofday()` is not supported, as it is considered obsolete. - - .. versionadded:: 1.28.0 - -.. c:function:: int uv_random(uv_loop_t* loop, uv_random_t* req, void* buf, size_t buflen, unsigned int flags, uv_random_cb cb) - - Fill `buf` with exactly `buflen` cryptographically strong random bytes - acquired from the system CSPRNG. `flags` is reserved for future extension - and must currently be 0. - - Short reads are not possible. When less than `buflen` random bytes are - available, a non-zero error value is returned or passed to the callback. - - The synchronous version may block indefinitely when not enough entropy - is available. The asynchronous version may not ever finish when the system - is low on entropy. - - Sources of entropy: - - - Windows: `RtlGenRandom _`. - - Linux, Android: :man:`getrandom(2)` if available, or :man:`urandom(4)` - after reading from `/dev/random` once, or the `KERN_RANDOM` - :man:`sysctl(2)`. - - FreeBSD: `getrandom(2) _`, - or `/dev/urandom` after reading from `/dev/random` once. - - NetBSD: `KERN_ARND` `sysctl(3) _` - - macOS, OpenBSD: `getentropy(2) _` - if available, or `/dev/urandom` after reading from `/dev/random` once. - - AIX: `/dev/random`. - - IBM i: `/dev/urandom`. - - Other UNIX: `/dev/urandom` after reading from `/dev/random` once. - - :returns: 0 on success, or an error code < 0 on failure. The contents of - `buf` is undefined after an error. - - .. note:: - When using the synchronous version, both `loop` and `req` parameters - are not used and can be set to `NULL`. - - .. versionadded:: 1.33.0 - -.. c:function:: void uv_sleep(unsigned int msec) - - Causes the calling thread to sleep for `msec` milliseconds. - - .. versionadded:: 1.34.0 diff --git a/libuv/docs/src/pipe.rst b/libuv/docs/src/pipe.rst deleted file mode 100644 index 5fa83b8..0000000 --- a/libuv/docs/src/pipe.rst +++ /dev/null @@ -1,138 +0,0 @@ - -.. _pipe: - -:c:type:`uv_pipe_t` --- Pipe handle -=================================== - -Pipe handles provide an abstraction over streaming files on Unix (including -local domain sockets, pipes, and FIFOs) and named pipes on Windows. - -:c:type:`uv_pipe_t` is a 'subclass' of :c:type:`uv_stream_t`. - - -Data types ----------- - -.. c:type:: uv_pipe_t - - Pipe handle type. - - -Public members -^^^^^^^^^^^^^^ - -.. c:member:: int uv_pipe_t.ipc - - Whether this pipe is suitable for handle passing between processes. - Only a connected pipe that will be passing the handles should have this flag - set, not the listening pipe that uv_accept is called on. - -.. seealso:: The :c:type:`uv_stream_t` members also apply. - - -API ---- - -.. c:function:: int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc) - - Initialize a pipe handle. The `ipc` argument is a boolean to indicate if - this pipe will be used for handle passing between processes (which may - change the bytes on the wire). Only a connected pipe that will be - passing the handles should have this flag set, not the listening pipe - that uv_accept is called on. - -.. c:function:: int uv_pipe_open(uv_pipe_t* handle, uv_file file) - - Open an existing file descriptor or HANDLE as a pipe. - - .. versionchanged:: 1.2.1 the file descriptor is set to non-blocking mode. - - .. note:: - The passed file descriptor or HANDLE is not checked for its type, but - it's required that it represents a valid pipe. - -.. c:function:: int uv_pipe_bind(uv_pipe_t* handle, const char* name) - - Bind the pipe to a file path (Unix) or a name (Windows). - - .. note:: - Paths on Unix get truncated to ``sizeof(sockaddr_un.sun_path)`` bytes, typically between - 92 and 108 bytes. - -.. c:function:: void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, const char* name, uv_connect_cb cb) - - Connect to the Unix domain socket or the named pipe. - - .. note:: - Paths on Unix get truncated to ``sizeof(sockaddr_un.sun_path)`` bytes, typically between - 92 and 108 bytes. - -.. c:function:: int uv_pipe_getsockname(const uv_pipe_t* handle, char* buffer, size_t* size) - - Get the name of the Unix domain socket or the named pipe. - - A preallocated buffer must be provided. The size parameter holds the length - of the buffer and it's set to the number of bytes written to the buffer on - output. If the buffer is not big enough ``UV_ENOBUFS`` will be returned and - len will contain the required size. - - .. versionchanged:: 1.3.0 the returned length no longer includes the terminating null byte, - and the buffer is not null terminated. - -.. c:function:: int uv_pipe_getpeername(const uv_pipe_t* handle, char* buffer, size_t* size) - - Get the name of the Unix domain socket or the named pipe to which the handle - is connected. - - A preallocated buffer must be provided. The size parameter holds the length - of the buffer and it's set to the number of bytes written to the buffer on - output. If the buffer is not big enough ``UV_ENOBUFS`` will be returned and - len will contain the required size. - - .. versionadded:: 1.3.0 - -.. c:function:: void uv_pipe_pending_instances(uv_pipe_t* handle, int count) - - Set the number of pending pipe instance handles when the pipe server is - waiting for connections. - - .. note:: - This setting applies to Windows only. - -.. c:function:: int uv_pipe_pending_count(uv_pipe_t* handle) -.. c:function:: uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle) - - Used to receive handles over IPC pipes. - - First - call :c:func:`uv_pipe_pending_count`, if it's > 0 then initialize - a handle of the given `type`, returned by :c:func:`uv_pipe_pending_type` - and call ``uv_accept(pipe, handle)``. - -.. seealso:: The :c:type:`uv_stream_t` API functions also apply. - -.. c:function:: int uv_pipe_chmod(uv_pipe_t* handle, int flags) - - Alters pipe permissions, allowing it to be accessed from processes run by - different users. Makes the pipe writable or readable by all users. Mode can - be ``UV_WRITABLE``, ``UV_READABLE`` or ``UV_WRITABLE | UV_READABLE``. This - function is blocking. - - .. versionadded:: 1.16.0 - -.. c:function:: int uv_pipe(uv_file fds[2], int read_flags, int write_flags) - - Create a pair of connected pipe handles. - Data may be written to `fds[1]` and read from `fds[0]`. - The resulting handles can be passed to `uv_pipe_open`, used with `uv_spawn`, - or for any other purpose. - - Valid values for `flags` are: - - - UV_NONBLOCK_PIPE: Opens the specified socket handle for `OVERLAPPED` - or `FIONBIO`/`O_NONBLOCK` I/O usage. - This is recommended for handles that will be used by libuv, - and not usually recommended otherwise. - - Equivalent to :man:`pipe(2)` with the `O_CLOEXEC` flag set. - - .. versionadded:: 1.41.0 diff --git a/libuv/docs/src/poll.rst b/libuv/docs/src/poll.rst deleted file mode 100644 index 93a101e..0000000 --- a/libuv/docs/src/poll.rst +++ /dev/null @@ -1,148 +0,0 @@ - -.. _poll: - -:c:type:`uv_poll_t` --- Poll handle -=================================== - -Poll handles are used to watch file descriptors for readability, -writability and disconnection similar to the purpose of :man:`poll(2)`. - -The purpose of poll handles is to enable integrating external libraries that -rely on the event loop to signal it about the socket status changes, like -c-ares or libssh2. Using uv_poll_t for any other purpose is not recommended; -:c:type:`uv_tcp_t`, :c:type:`uv_udp_t`, etc. provide an implementation that is faster and -more scalable than what can be achieved with :c:type:`uv_poll_t`, especially on -Windows. - -It is possible that poll handles occasionally signal that a file descriptor is -readable or writable even when it isn't. The user should therefore always -be prepared to handle EAGAIN or equivalent when it attempts to read from or -write to the fd. - -It is not okay to have multiple active poll handles for the same socket, this -can cause libuv to busyloop or otherwise malfunction. - -The user should not close a file descriptor while it is being polled by an -active poll handle. This can cause the handle to report an error, -but it might also start polling another socket. However the fd can be safely -closed immediately after a call to :c:func:`uv_poll_stop` or :c:func:`uv_close`. - -.. note:: - On windows only sockets can be polled with poll handles. On Unix any file - descriptor that would be accepted by :man:`poll(2)` can be used. - -.. note:: - On AIX, watching for disconnection is not supported. - -Data types ----------- - -.. c:type:: uv_poll_t - - Poll handle type. - -.. c:type:: void (*uv_poll_cb)(uv_poll_t* handle, int status, int events) - - Type definition for callback passed to :c:func:`uv_poll_start`. - -.. c:type:: uv_poll_event - - Poll event types - - :: - - enum uv_poll_event { - UV_READABLE = 1, - UV_WRITABLE = 2, - UV_DISCONNECT = 4, - UV_PRIORITIZED = 8 - }; - - -Public members -^^^^^^^^^^^^^^ - -N/A - -.. seealso:: The :c:type:`uv_handle_t` members also apply. - - -API ---- - -.. c:function:: int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd) - - Initialize the handle using a file descriptor. - - .. versionchanged:: 1.2.2 the file descriptor is set to non-blocking mode. - -.. c:function:: int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, uv_os_sock_t socket) - - Initialize the handle using a socket descriptor. On Unix this is identical - to :c:func:`uv_poll_init`. On windows it takes a SOCKET handle. - - .. versionchanged:: 1.2.2 the socket is set to non-blocking mode. - -.. c:function:: int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb) - - Starts polling the file descriptor. `events` is a bitmask made up of - `UV_READABLE`, `UV_WRITABLE`, `UV_PRIORITIZED` and `UV_DISCONNECT`. As soon - as an event is detected the callback will be called with `status` set to 0, - and the detected events set on the `events` field. - - The `UV_PRIORITIZED` event is used to watch for sysfs interrupts or TCP - out-of-band messages. - - The `UV_DISCONNECT` event is optional in the sense that it may not be - reported and the user is free to ignore it, but it can help optimize the - shutdown path because an extra read or write call might be avoided. - - If an error happens while polling, `status` will be < 0 and corresponds - with one of the `UV_E*` error codes (see :ref:`errors`). The user should - not close the socket while the handle is active. If the user does that - anyway, the callback *may* be called reporting an error status, but this is - **not** guaranteed. - - .. note:: - Calling :c:func:`uv_poll_start` on a handle that is already active is - fine. Doing so will update the events mask that is being watched for. - - .. note:: - Though `UV_DISCONNECT` can be set, it is unsupported on AIX and as such - will not be set on the `events` field in the callback. - - .. note:: - If one of the events `UV_READABLE` or `UV_WRITABLE` are set, the - callback will be called again, as long as the given fd/socket remains - readable or writable accordingly. Particularly in each of the following - scenarios: - - * The callback has been called because the socket became - readable/writable and the callback did not conduct a read/write on - this socket at all. - * The callback committed a read on the socket, and has not read all the - available data (when `UV_READABLE` is set). - * The callback committed a write on the socket, but it remained - writable afterwards (when `UV_WRITABLE` is set). - * The socket has already became readable/writable before calling - :c:func:`uv_poll_start` on a poll handle associated with this socket, - and since then the state of the socket did not changed. - - In all of the above listed scenarios, the socket remains readable or - writable and hence the callback will be called again (depending on the - events set in the bitmask). This behaviour is known as level - triggering. - - .. versionchanged:: 1.9.0 Added the `UV_DISCONNECT` event. - .. versionchanged:: 1.14.0 Added the `UV_PRIORITIZED` event. - -.. c:function:: int uv_poll_stop(uv_poll_t* poll) - - Stop polling the file descriptor, the callback will no longer be called. - - .. note:: - Calling :c:func:`uv_poll_stop` is effective immediately: any pending - callback is also canceled, even if the socket state change notification - was already pending. - -.. seealso:: The :c:type:`uv_handle_t` API functions also apply. diff --git a/libuv/docs/src/prepare.rst b/libuv/docs/src/prepare.rst deleted file mode 100644 index 5e0d247..0000000 --- a/libuv/docs/src/prepare.rst +++ /dev/null @@ -1,54 +0,0 @@ - -.. _prepare: - -:c:type:`uv_prepare_t` --- Prepare handle -========================================= - -Prepare handles will run the given callback once per loop iteration, right -before polling for i/o. - - -Data types ----------- - -.. c:type:: uv_prepare_t - - Prepare handle type. - -.. c:type:: void (*uv_prepare_cb)(uv_prepare_t* handle) - - Type definition for callback passed to :c:func:`uv_prepare_start`. - - -Public members -^^^^^^^^^^^^^^ - -N/A - -.. seealso:: The :c:type:`uv_handle_t` members also apply. - - -API ---- - -.. c:function:: int uv_prepare_init(uv_loop_t* loop, uv_prepare_t* prepare) - - Initialize the handle. This function always succeeds. - - :returns: 0 - -.. c:function:: int uv_prepare_start(uv_prepare_t* prepare, uv_prepare_cb cb) - - Start the handle with the given callback. This function always succeeds, - except when `cb` is `NULL`. - - :returns: 0 on success, or `UV_EINVAL` when `cb == NULL`. - -.. c:function:: int uv_prepare_stop(uv_prepare_t* prepare) - - Stop the handle, the callback will no longer be called. - This function always succeeds. - - :returns: 0 - -.. seealso:: The :c:type:`uv_handle_t` API functions also apply. diff --git a/libuv/docs/src/process.rst b/libuv/docs/src/process.rst deleted file mode 100644 index ea6c4b9..0000000 --- a/libuv/docs/src/process.rst +++ /dev/null @@ -1,251 +0,0 @@ - -.. _process: - -:c:type:`uv_process_t` --- Process handle -========================================= - -Process handles will spawn a new process and allow the user to control it and -establish communication channels with it using streams. - - -Data types ----------- - -.. c:type:: uv_process_t - - Process handle type. - -.. c:type:: uv_process_options_t - - Options for spawning the process (passed to :c:func:`uv_spawn`. - - :: - - typedef struct uv_process_options_s { - uv_exit_cb exit_cb; - const char* file; - char** args; - char** env; - const char* cwd; - unsigned int flags; - int stdio_count; - uv_stdio_container_t* stdio; - uv_uid_t uid; - uv_gid_t gid; - } uv_process_options_t; - -.. c:type:: void (*uv_exit_cb)(uv_process_t*, int64_t exit_status, int term_signal) - - Type definition for callback passed in :c:type:`uv_process_options_t` which - will indicate the exit status and the signal that caused the process to - terminate, if any. - -.. c:type:: uv_process_flags - - Flags to be set on the flags field of :c:type:`uv_process_options_t`. - - :: - - enum uv_process_flags { - /* - * Set the child process' user id. - */ - UV_PROCESS_SETUID = (1 << 0), - /* - * Set the child process' group id. - */ - UV_PROCESS_SETGID = (1 << 1), - /* - * Do not wrap any arguments in quotes, or perform any other escaping, when - * converting the argument list into a command line string. This option is - * only meaningful on Windows systems. On Unix it is silently ignored. - */ - UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS = (1 << 2), - /* - * Spawn the child process in a detached state - this will make it a process - * group leader, and will effectively enable the child to keep running after - * the parent exits. Note that the child process will still keep the - * parent's event loop alive unless the parent process calls uv_unref() on - * the child's process handle. - */ - UV_PROCESS_DETACHED = (1 << 3), - /* - * Hide the subprocess window that would normally be created. This option is - * only meaningful on Windows systems. On Unix it is silently ignored. - */ - UV_PROCESS_WINDOWS_HIDE = (1 << 4), - /* - * Hide the subprocess console window that would normally be created. This - * option is only meaningful on Windows systems. On Unix it is silently - * ignored. - */ - UV_PROCESS_WINDOWS_HIDE_CONSOLE = (1 << 5), - /* - * Hide the subprocess GUI window that would normally be created. This - * option is only meaningful on Windows systems. On Unix it is silently - * ignored. - */ - UV_PROCESS_WINDOWS_HIDE_GUI = (1 << 6) - }; - -.. c:type:: uv_stdio_container_t - - Container for each stdio handle or fd passed to a child process. - - :: - - typedef struct uv_stdio_container_s { - uv_stdio_flags flags; - union { - uv_stream_t* stream; - int fd; - } data; - } uv_stdio_container_t; - -.. c:enum:: uv_stdio_flags - - Flags specifying how a stdio should be transmitted to the child process. - - :: - - typedef enum { - UV_IGNORE = 0x00, - UV_CREATE_PIPE = 0x01, - UV_INHERIT_FD = 0x02, - UV_INHERIT_STREAM = 0x04, - /* - * When UV_CREATE_PIPE is specified, UV_READABLE_PIPE and UV_WRITABLE_PIPE - * determine the direction of flow, from the child process' perspective. Both - * flags may be specified to create a duplex data stream. - */ - UV_READABLE_PIPE = 0x10, - UV_WRITABLE_PIPE = 0x20, - /* - * When UV_CREATE_PIPE is specified, specifying UV_NONBLOCK_PIPE opens the - * handle in non-blocking mode in the child. This may cause loss of data, - * if the child is not designed to handle to encounter this mode, - * but can also be significantly more efficient. - */ - UV_NONBLOCK_PIPE = 0x40 - } uv_stdio_flags; - - -Public members -^^^^^^^^^^^^^^ - -.. c:member:: int uv_process_t.pid - - The PID of the spawned process. It's set after calling :c:func:`uv_spawn`. - -.. note:: - The :c:type:`uv_handle_t` members also apply. - -.. c:member:: uv_exit_cb uv_process_options_t.exit_cb - - Callback called after the process exits. - -.. c:member:: const char* uv_process_options_t.file - - Path pointing to the program to be executed. - -.. c:member:: char** uv_process_options_t.args - - Command line arguments. args[0] should be the path to the program. On - Windows this uses `CreateProcess` which concatenates the arguments into a - string this can cause some strange errors. See the - ``UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS`` flag on :c:type:`uv_process_flags`. - -.. c:member:: char** uv_process_options_t.env - - Environment for the new process. If NULL the parents environment is used. - -.. c:member:: const char* uv_process_options_t.cwd - - Current working directory for the subprocess. - -.. c:member:: unsigned int uv_process_options_t.flags - - Various flags that control how :c:func:`uv_spawn` behaves. See - :c:type:`uv_process_flags`. - -.. c:member:: int uv_process_options_t.stdio_count -.. c:member:: uv_stdio_container_t* uv_process_options_t.stdio - - The `stdio` field points to an array of :c:type:`uv_stdio_container_t` - structs that describe the file descriptors that will be made available to - the child process. The convention is that stdio[0] points to stdin, - fd 1 is used for stdout, and fd 2 is stderr. - - .. note:: - On Windows file descriptors greater than 2 are available to the child process only if - the child processes uses the MSVCRT runtime. - -.. c:member:: uv_uid_t uv_process_options_t.uid -.. c:member:: uv_gid_t uv_process_options_t.gid - - Libuv can change the child process' user/group id. This happens only when - the appropriate bits are set in the flags fields. - - .. note:: - This is not supported on Windows, :c:func:`uv_spawn` will fail and set the error - to ``UV_ENOTSUP``. - -.. c:member:: uv_stdio_flags uv_stdio_container_t.flags - - Flags specifying how the stdio container should be passed to the child. - -.. c:member:: union @0 uv_stdio_container_t.data - - Union containing either the `stream` or `fd` to be passed on to the child - process. - - -API ---- - -.. c:function:: void uv_disable_stdio_inheritance(void) - - Disables inheritance for file descriptors / handles that this process - inherited from its parent. The effect is that child processes spawned by - this process don't accidentally inherit these handles. - - It is recommended to call this function as early in your program as possible, - before the inherited file descriptors can be closed or duplicated. - - .. note:: - This function works on a best-effort basis: there is no guarantee that libuv can discover - all file descriptors that were inherited. In general it does a better job on Windows than - it does on Unix. - -.. c:function:: int uv_spawn(uv_loop_t* loop, uv_process_t* handle, const uv_process_options_t* options) - - Initializes the process handle and starts the process. If the process is - successfully spawned, this function will return 0. Otherwise, the - negative error code corresponding to the reason it couldn't spawn is - returned. - - Possible reasons for failing to spawn would include (but not be limited to) - the file to execute not existing, not having permissions to use the setuid or - setgid specified, or not having enough memory to allocate for the new - process. - - .. versionchanged:: 1.24.0 Added `UV_PROCESS_WINDOWS_HIDE_CONSOLE` and - `UV_PROCESS_WINDOWS_HIDE_GUI` flags. - -.. c:function:: int uv_process_kill(uv_process_t* handle, int signum) - - Sends the specified signal to the given process handle. Check the documentation - on :c:ref:`signal` for signal support, specially on Windows. - -.. c:function:: int uv_kill(int pid, int signum) - - Sends the specified signal to the given PID. Check the documentation - on :c:ref:`signal` for signal support, specially on Windows. - -.. c:function:: uv_pid_t uv_process_get_pid(const uv_process_t* handle) - - Returns `handle->pid`. - - .. versionadded:: 1.19.0 - -.. seealso:: The :c:type:`uv_handle_t` API functions also apply. diff --git a/libuv/docs/src/request.rst b/libuv/docs/src/request.rst deleted file mode 100644 index a041443..0000000 --- a/libuv/docs/src/request.rst +++ /dev/null @@ -1,117 +0,0 @@ - -.. _request: - -:c:type:`uv_req_t` --- Base request -=================================== - -`uv_req_t` is the base type for all libuv request types. - -Structures are aligned so that any libuv request can be cast to `uv_req_t`. -All API functions defined here work with any request type. - - -Data types ----------- - -.. c:type:: uv_req_t - - The base libuv request structure. - -.. c:type:: uv_any_req - - Union of all request types. - - -Public members -^^^^^^^^^^^^^^ - -.. c:member:: void* uv_req_t.data - - Space for user-defined arbitrary data. libuv does not use this field. - -.. c:member:: uv_req_type uv_req_t.type - - Indicated the type of request. Readonly. - - :: - - typedef enum { - UV_UNKNOWN_REQ = 0, - UV_REQ, - UV_CONNECT, - UV_WRITE, - UV_SHUTDOWN, - UV_UDP_SEND, - UV_FS, - UV_WORK, - UV_GETADDRINFO, - UV_GETNAMEINFO, - UV_REQ_TYPE_MAX, - } uv_req_type; - - -API ---- - -.. c:macro:: UV_REQ_TYPE_MAP(iter_macro) - - Macro that expands to a series of invocations of `iter_macro` for - each of the request types. `iter_macro` is invoked with two - arguments: the name of the `uv_req_type` element without the `UV_` - prefix, and the name of the corresponding structure type without the - `uv_` prefix and `_t` suffix. - -.. c:function:: int uv_cancel(uv_req_t* req) - - Cancel a pending request. Fails if the request is executing or has finished - executing. - - Returns 0 on success, or an error code < 0 on failure. - - Only cancellation of :c:type:`uv_fs_t`, :c:type:`uv_getaddrinfo_t`, - :c:type:`uv_getnameinfo_t`, :c:type:`uv_random_t` and :c:type:`uv_work_t` - requests is currently supported. - - Cancelled requests have their callbacks invoked some time in the future. - It's **not** safe to free the memory associated with the request until the - callback is called. - - Here is how cancellation is reported to the callback: - - * A :c:type:`uv_fs_t` request has its req->result field set to `UV_ECANCELED`. - - * A :c:type:`uv_work_t`, :c:type:`uv_getaddrinfo_t`, - :c:type:`uv_getnameinfo_t` or :c:type:`uv_random_t` request has its - callback invoked with status == `UV_ECANCELED`. - -.. c:function:: size_t uv_req_size(uv_req_type type) - - Returns the size of the given request type. Useful for FFI binding writers - who don't want to know the structure layout. - -.. c:function:: void* uv_req_get_data(const uv_req_t* req) - - Returns `req->data`. - - .. versionadded:: 1.19.0 - -.. c:function:: void* uv_req_set_data(uv_req_t* req, void* data) - - Sets `req->data` to `data`. - - .. versionadded:: 1.19.0 - -.. c:function:: uv_req_type uv_req_get_type(const uv_req_t* req) - - Returns `req->type`. - - .. versionadded:: 1.19.0 - -.. c:function:: const char* uv_req_type_name(uv_req_type type) - - Returns the name for the equivalent struct for a given request type, - e.g. `"connect"` (as in :c:type:`uv_connect_t`) for `UV_CONNECT`. - - If no such request type exists, this returns `NULL`. - - .. versionadded:: 1.19.0 diff --git a/libuv/docs/src/signal.rst b/libuv/docs/src/signal.rst deleted file mode 100644 index eeadb95..0000000 --- a/libuv/docs/src/signal.rst +++ /dev/null @@ -1,101 +0,0 @@ - -.. _signal: - -:c:type:`uv_signal_t` --- Signal handle -======================================= - -Signal handles implement Unix style signal handling on a per-event loop bases. - -Windows notes -------------- - -Reception of some signals is emulated: - -* SIGINT is normally delivered when the user presses CTRL+C. However, like - on Unix, it is not generated when terminal raw mode is enabled. - -* SIGBREAK is delivered when the user pressed CTRL + BREAK. - -* SIGHUP is generated when the user closes the console window. On SIGHUP the - program is given approximately 10 seconds to perform cleanup. After that - Windows will unconditionally terminate it. - -* SIGWINCH is raised whenever libuv detects that the console has been - resized. When a libuv app is running under a console emulator, or when a - 32-bit libuv app is running on 64-bit system, SIGWINCH will be emulated. In - such cases SIGWINCH signals may not always be delivered in a timely manner. - For a writable :c:type:`uv_tty_t` handle libuv will only detect size changes - when the cursor is moved. When a readable :c:type:`uv_tty_t` handle is used, - resizing of the console buffer will be detected only if the handle is in raw - mode and is being read. - -* Watchers for other signals can be successfully created, but these signals - are never received. These signals are: `SIGILL`, `SIGABRT`, `SIGFPE`, `SIGSEGV`, - `SIGTERM` and `SIGKILL.` - -* Calls to raise() or abort() to programmatically raise a signal are - not detected by libuv; these will not trigger a signal watcher. - -.. versionchanged:: 1.15.0 SIGWINCH support on Windows was improved. -.. versionchanged:: 1.31.0 32-bit libuv SIGWINCH support on 64-bit Windows was - rolled back to old implementation. - -Unix notes ----------- - -* SIGKILL and SIGSTOP are impossible to catch. - -* Handling SIGBUS, SIGFPE, SIGILL or SIGSEGV via libuv results into undefined behavior. - -* SIGABRT will not be caught by libuv if generated by `abort()`, e.g. through `assert()`. - -* On Linux SIGRT0 and SIGRT1 (signals 32 and 33) are used by the NPTL pthreads library to - manage threads. Installing watchers for those signals will lead to unpredictable behavior - and is strongly discouraged. Future versions of libuv may simply reject them. - - -Data types ----------- - -.. c:type:: uv_signal_t - - Signal handle type. - -.. c:type:: void (*uv_signal_cb)(uv_signal_t* handle, int signum) - - Type definition for callback passed to :c:func:`uv_signal_start`. - - -Public members -^^^^^^^^^^^^^^ - -.. c:member:: int uv_signal_t.signum - - Signal being monitored by this handle. Readonly. - -.. seealso:: The :c:type:`uv_handle_t` members also apply. - - -API ---- - -.. c:function:: int uv_signal_init(uv_loop_t* loop, uv_signal_t* signal) - - Initialize the handle. - -.. c:function:: int uv_signal_start(uv_signal_t* signal, uv_signal_cb cb, int signum) - - Start the handle with the given callback, watching for the given signal. - -.. c:function:: int uv_signal_start_oneshot(uv_signal_t* signal, uv_signal_cb cb, int signum) - - .. versionadded:: 1.12.0 - - Same functionality as :c:func:`uv_signal_start` but the signal handler is reset the moment - the signal is received. - -.. c:function:: int uv_signal_stop(uv_signal_t* signal) - - Stop the handle, the callback will no longer be called. - -.. seealso:: The :c:type:`uv_handle_t` API functions also apply. diff --git a/libuv/docs/src/sphinx-plugins/manpage.py b/libuv/docs/src/sphinx-plugins/manpage.py deleted file mode 100644 index 6570aea..0000000 --- a/libuv/docs/src/sphinx-plugins/manpage.py +++ /dev/null @@ -1,45 +0,0 @@ -# encoding: utf-8 - -# -# Copyright (c) 2013 Dariusz Dwornikowski. All rights reserved. -# -# Adapted from https://github.com/tdi/sphinxcontrib-manpage -# License: Apache 2 -# - - -import re - -from docutils import nodes, utils -from docutils.parsers.rst.roles import set_classes -from string import Template - - -def make_link_node(rawtext, app, name, manpage_num, options): - ref = app.config.man_url_regex - if not ref: - ref = "https://man7.org/linux/man-pages/man%s/%s.%s.html" %(manpage_num, name, manpage_num) - else: - s = Template(ref) - ref = s.substitute(num=manpage_num, topic=name) - set_classes(options) - node = nodes.reference(rawtext, "%s(%s)" % (name, manpage_num), refuri=ref, **options) - return node - - -def man_role(name, rawtext, text, lineno, inliner, options={}, content=[]): - app = inliner.document.settings.env.app - p = re.compile("([a-zA-Z0-9_\.-_]+)\((\d)\)") - m = p.match(text) - - manpage_num = m.group(2) - name = m.group(1) - node = make_link_node(rawtext, app, name, manpage_num, options) - return [node], [] - - -def setup(app): - app.add_role('man', man_role) - app.add_config_value('man_url_regex', None, 'env') - return - diff --git a/libuv/docs/src/static/architecture.png b/libuv/docs/src/static/architecture.png deleted file mode 100644 index 81e8749f2495741d4b4c2c5dd8a6bca8803d8818..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206767 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

|<0@v3w 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 aM1obxbA2B^pWMfP?%y@PQ+oUP>;DChUmDi{ diff --git a/libuv/docs/src/static/diagrams.key/Data/st0-311.jpg b/libuv/docs/src/static/diagrams.key/Data/st0-311.jpg deleted file mode 100644 index 08f23a90b6ea37b207550368944f3f727a58e5e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14413 zcmdVBbx<6^*Dk!c1Phwr4!Z#o+})SOmWAMiU_lm_;10ocafiiO2(A$V3GS}J9fBrU zxa9Y}Z`Jq5{o~%cRk!N)OifqUobL0S)6ewG^yz+>d-w?;0V}C00npF@0JO&g@URGw ze=Pm~5;{5t`oDyUfq{;Jg^7iQg^7uYg^h!ag@uESiHVJejf49yVPWIp|Clk2YXnVliRkkn+lE zlbJuN#%0!lr4){nCx84pvG$AN5t5vxYjHguAHSeNNKwOS_rn5!;8De6#isyi!0I|l z*i$B4SvkS47MsOp zWw5#k7uin>1B4-g%A{%U>#{i1%wkL`?OdsS!kazYs%LgQJTztc8!NFSn_gCzoZe< zC1c8EqZDzOrKm6pOD2JK5V~^Y328tpP)C57OlV}Cw8?+`wJ2*9Bfc&%z^0=*BB1p| zXw@vJAh!Tzj`3H&LxCQ-R~zKH!YjBLtZB6#v%Hn4W^Toqm^W5~qIG``O6@0C4g3 zz{Q2u1&c;@$(kC6l{rO`P5w&?Ye3;%2(a=gfi(Q`yfdt!k!~;@4<~_qfH@{os*RSw zC(KW=r4`7HfaACs<7u-}Tak_8jJYuFURvyg0E_;qTGADx>?%Bl8h#g{L26_Bd&8pQ zHH>^iN(bL9kZudr%H8sOfN9oV#Y+`p>L@Tj_xy((`ycY=2LK7%%1{wmtOvlGNbJY! zrkbzak;_lr&YWcr+v%0W9{^v(WB++V_ZIGAqR)MV=Ym|s%wb0;vL>KIlKy@;x@u_! z0Pz;^w>im95Rf7Yj?JDA3@Wb_`MQ~`kD9(JbG0>c5Bi4XaZT(7aWT-U+(_zQZsRr2 zKI{6vJ=Q{lh;@E+1csC-pTbx2N!;+2N2bi?xpWosSaz^_*OaC!FwsdsqS!^57Z0|7 zm=vIlD!*XzWGa03^HB-C{7OEI8-YCf^vTxpb0gtUmXqk3F5ic|JUUjE^IQETjgliO zw?EMh6A1Y)^bDQ+kMfJS5nU+32LSrSBS&m>{u^?lU~uXjeVMr&W>fG}8)pQ~k5LhYh`$i}G1%2*3;L_#NAV1NmC zZ`~5_m7;(g69@PGc&fRZK+Jg+h(e*5t4Y5Yx}4%-(JB^YYfT4~%EN*B5x_i;*9B{8 z{)W%E3G}xc51YoZ!CVc1FG%;j!$gem{}{8qA1xzMjP`GR?jI*=0o`A8;jo8uHIi3J z*=FL<7x5{)O)x%)Cf`g;sa`#3^Kg&rN?as1>C@b&wlahZQcLpksh0@z+*)b!{m3!W zvad8U%30$bDMp(%;Eo(Z!wL|J+X@P@%%9?_wj1HQL z!8BC|5TUI#h#6GH5gpO=^Hc5it;2L>qzyjrZi2T^DgC8Q)i$@6H?};L7}&y<<20_o zmBUR8V~qM=$S9}Z9-yAE*(h7`Nn_bcj=W^(qP|od=>4eQ?i*dN=b>V4`%X+RS$6w( z0;_%XQ$0_Q?sXJO?hExm37+=J7pMITzj6L>%is?oM@32MX&pR#=g}K8{09RmAt41b z$`?QHlFl-{k1nnKCMu{mG^Z-xHu0BH@C>c%t%G7;m93;`;V^CTEi7~Abz;P{hLZBX z64mtjS!oU6_^3(pVLA6T2d^M6+e@9aj2zqMWsg(|^5(J5Uz|a%=&e*CzJD~tV*`p! zMYUf33{Dp5h&27IeZx!v{`A8g4X6A=h{l#}dwf39u8mGnGka2}+ju~u`Iinq(-xA@ zxvKTFqKEZ80=E!(mD1Q?n43$-U0dNsF+Eb51)Xz&G>Flg z=LOMSVOqJ(pTF1c#Y;A??b5y8k)`m(Efj|b#+gmh`oh1BiPesTfUcg(c`iHvs6UsA zTrEZxc$np4>K-!3C02=C91!AwyGQXbcS>2VW-6Z`ywjldVdNA!w4`p6wL<|J%oXP3 z#E&>0A>G(JTKu;9a{>DYH^9z&X7^Ctg;k_32#L0_nvj08(M^F2j(7d*LHgz&E|d1p z-}6Tj0uT~ynFeK)C>yRk+DnliE>aoHzYEFn?Hzwo3;}=OVkwJY-b5BjT|K^NsRRFc zr#XgX%RoqKn2o=lu*4Rug13X#EfI&xh^kM4y1sSiGX}{et77idY7~E)yy)S7Q|8`X zt&4#5bhf0@u_^QTX8vALnh9uSJ{aFrnW$w6HjtfZsCuq1GVqLJ^B^yuRex(~9*>Hr zWEz^}&f)HsAZ?gYt;U|YMcULm%FyYG8nzVDO2K+S;0x!-@&p7I;s* zZw*d>R%)I8btP}!%J>qa9Wv;BO!(&q{0?< zxJ;}8Oy6FB4Bf4>d85?1Rnr~q?6PjC`|-}O7`+pIHEC&I0Vk_rOIO;);|n7Z2gxr- zGmp5!VfHA2OWqxta&@X`cD9)<&ek+F88%H0Hsf0N_W0SmlK&`whGA^h^H;ouC6|%N zEdG3fd>imD)$ar(v!~7VFGhM}Y$} z(_jC*Wzs^@&oMkx=9!UVW*+%33mBvSCz81TmjqoVrs@3yvSuk=8y)~*KR!Ei5R_bs zkNhA5-+Z{|eY!Z1AZ?&Ezdi!{{K(E&J+EZ1evWcFm!8Sb&=gElGkb=o4B}>Y?)SV2 zxo}_9aoUU{Kd_Xx%J%gol#>rx>EbN>az4UVv*w+1^=*}!{RbrOz!;x~NXadYFUTuU zdB`rSG%j;&w8%j%N|{4Put$_oM3WktN5P~~fhdSA{BEpz9QBTuB~kK+D;YL^ANN~J z;lfR8w-D&p8$=6|nSaFkt)FZ(wSW z&A{%ou&V~G*681#vGS9(+-Es$S#R~)%9`S^BNrmFMIne{ZU-^BvB4B{TWFR1#G7+^ zxw|55Tl*)#OlWL}w_)SCly0d#kBvyCVPH1ob;C9e;g4f!!(uyHL$7cpVf_IbChq|S zw|^8FaJ(Fy%>wzP@Rr$L`XI3Gd5zKd$h|6wL9O|$0-NR~FM>gu=>)amn7={_Tu3%Y zro4^~YjlykZw@GMtjhKwLT8pB+_YRcQs_BhS3d_xEylpPnY4Z(F>GVGh*<^0+c>-w zZM%N5a3^fop{2Js0v1>Vd_kdI_=Lp<2lPGwf5LZOBhW{1KY_h(3dE04RhS{jxA$}+ zA4^{+#OWO2F{8@;ma`%0vijuN(#LvF_ew|Kn7JAb3BIt{YZjAb@uE5mRs7`1uiB zMTb+eU*QuljfyuO8W0Dl&AN$J?^*Ry#puP9-i8{E38V%j*RWjy$zed}kM${5libAD z$+j>_Pep`_WW7xecy+kvesM$KNmS#&X}pe=PDq4S668k45@}hJt$4IIjZ&0lB$6!D zBXFW#VG)1vLYl+l#W_?{BrVgsh5=$oXNdShiinb+pztmrI-mR`R_c{}f{|!vb$#3M zIyueJ3Tp4N%%LV{l%erH%YZL~h=8`_@|h$v=f_3O;e~rPmI6DEjubXI*pa!$5R_xU z7}+2Wffbn|tkl3yhDFx=(6xJaSh<^CWaQhO9EEDl=&gC?t4P<_Tuk*8v4Wc5I#O+w zx#kfoX&#>h*hV>=UL={zoXwm8w%nF9Npp@_LdGa=c?T$^8@kdAlYiGqO%xnNPK z3JWGp$BIp})#!W~crlv0Br~zZE>7uUe^xiZfDBtP>dgprQ3HJ*I@GscP=HP`$@(<( zXsJ@i$Z9?+H3a-xhl2sr({k+KqW9b>CHt%*H!l^%#wu+5{DP=nyX5VAwt@+e0QHw= zMr6MjXcr#`{#(fis;{;P{y}hK9M@AW>CYB@4*=H(0L{wH`jfhrbh$-Cg+=NKc|*vQr66WnWifkN z8f@uss zzIShgz~FvHStpy7VS2{EoN5_@p3QZIt+6Ja{6&I$M|aJ<{v^_Rf^P(n8THE`a-mK_ zu#x8Z4n{{W)R4*-doIgHUu(a;`)8m1J=I-b#l(|Y`o8m5q}9Cq2e(KG4iTK^ z_;f7Ri)C*2C~p66t^Fy2+VX{(dJ5%c#HnY`j0!t%L|S?Cjo(ebI-dr%Z0CMUc`1Ud z3TJewQRV;;5S6tmtu3ld>GC)DU!-f2&U8J0Eu(TGn(Y2ofX@8qRjU1>JA`22)h-Fa z(*eD?=kf0NEFXV|_r?iN<35NBx|fQWI|wX2(bcq_5w0!7WZL#D}T=;E8ka z@(xgW#$wXQm&bNm`c{s2q*g&= z4Q9Ad;S`ComcMAsK=vYZbFjfUyYL{Ukfq!-b%MJO(xLCtGcYuzGKMq zCWM$OhX~@S2&Zd$_YUd!ZA50D&cDjMB67k3TgUd84qWf%gS`xIjHK{0QPCPuorJ}{ zsCdrMrc#H9QZHA#u(^L?#I*6>rNQAWXtx|#sB!ZkdNUTx{)c0uY;2}uqI zkQG3LUGw^Qx9L4M9e`71A{jLHC(!xK3ShA8T`2Zl^;)96+hcq#KT8)`ehV~U4 zYr(7&eA2HHvZPJI7NzpxyE6+j`~G~<;V8Q(y~2I>&N4IpZutCfYOQqW)E8Uih?-bY zn*9D|4U-kSe1Av#g!LWo!UmvjybRyC}aXniWo znBk*d7BUN6-!p6hzi6=y;_XFz2R(<{viWVFc&j#H=W9$G#$8X?O_J_r99~&{laOuB z!NTgzO!d&$LIa(<%04p|A8S739Bs);TAiF*W~qHNvGke>vL*Eul3JkxU-)Ka8U$k_ zlD-Wn|C+6uZoFBW-X<`W&MUD#A(!?vsYeSBkYfW#I_pK%{(1qLvj9z(%!;J225J0l zvM;_8ptGB83(EN&wO+gFB)^E1V0%4n2gvzLI3d+fp%J^%(X5m+Jq0SQYCSXDQRlm% zkOXHIPR=Q8(3-l+SHFrRLDBvUcNghnDX}=KIpkD>l!gjdT62W%ZFyTZs5cv|`+g`# z+DRBosRfBycFY#JLBi5?yOVl~oB{hV2)s$ajmSedps@J9z+a8;PH3rF2q(yFEMjz8 zqH=97?N2>s;|M$hZr;M3CN<{xi*s8?4fx7rh8(3r zmD8(%OY%TUuw z9fwvc%DS5n6)+MQkl0lK8c}^x<@MP?7PAsC0DTTo|O{{}@>;sK$RC_J7J3Dt`isUp6ktrwZt zK&mwtj4qa9UQV%R%%tdm;Eku8e27=YLE?X)uKqHAl;~d)4P7zc>TU@V{ur;BIykIn zn-qU3aM&>Tjy9|YUhWc{61($U%dfR^I|3mX_r+!b$2)MYmtyu zIN4=&7mblr1Av*xJel4l?pZX`Le~Kcug*cxQR%YgGpx9DAA05@WHw+rUIagXTT`;% zg1LVEZZuvJO8GEo`?Vy#g30{n@$o$EsmnW`73oO!2Y>-Xz;DlfI^sH?nZSSL)!1(T zi=+86k@m*;+y_9gpwq`6Y))#+c?td=K#Y65%KLa8X_d0sz|7yMr!@q^vzbRYy%ujr z4?ml8>AKqJEY>^&E<}Bgp*P|ex|pnK_MMpbP!5&Kqa_tn^!DObtpDWx+(gu^aR^mh zR(B$$pH4YhkFvm0Zx12Qi4VgF-5W9!Ue#Jo!`AiK{d4&)t7UE@eN}TgGf}c>x90&s zYPV_;L!D(Sdx_;`9CG@@K{FPGV^4+4vqyL&x-%iJFN;4^JlXp<@IAF9rn%nzphWB!H z+y5ZPUYhW7+gJ8fKW{>uz~N(&2gOSm6n@^|p~{iM%f(@*L&hz%t^q|sXS9llh_#dy zOa-PcIyXCeau(r`f%cHaxM~+RTNX?b9}?vv9=8*uQsB4 zF-pQAL z9TweEdOWK9sr@3z_W{tFRXex7aG(Kv?bz#Eu-4bfP=cav|IuxS```BMcKQm>EuL#9 z))?2&E*rLRjixk-^$gaJo&~cq*~8_d7?Wl6TvB2!d)U1^50iZ_B>$@~S-Rvs&8Uc* zyBMT<9`*k8Dt8=WQ>8MDf9y%-%2kVaHGe5MdjzzD5F^Ns7*AJcMvrp5esCLYTFX!G zKfHfFTIaL!|M5P`XVjtVk;6VVFrylp`GvR{NNa9pj*sp4Y>{;}t7($hjS3AsI`Lxm zDaq~IX8TJqe~{d)UQyZ9GmLkNq3q(oi#Q!KD5Dk-0d}l-! zmzs->?suITJ-_m<)QNh)YudW9-r0($m$3m1J33 zdu!;H7um>C3J*m8(q`XVT2nju=pD|hMk4b%7QEHqiul~S3sq69wBA*aOmJj1DNDJN z&T_n4OpBt($sJDB#RK4NT+t}r1U}b%A-Ik<)D)+c%ZmH$n)~-bCw*}c+GVxW{qa%K zuRydaiw8j7BiTSE9CfIH8*#0POG&;}aZ#OQZ+_Bl&ocg31GK6GFhj!uiV*$~+`i-3 z+A5#;!_-UNg(9>&m8$z_v5`yoTyaH5qw(XD{et0bOr)VLOR#;#4CAGw-jUT>k8GDs zBLl^?khyi?>y8_rw;H-To0gNWE+&J#s~PLoNmVbb)Bu5Bde)l5kc!O$Z15<9NLz<% zBjV1a)W)W?X!K70?#IxZmcwQ9N}srb-Sc}2bDn_wDMLgWh0vA=bi1OqbwUN-2tHIl z?#{s?L90J%tdJkr9Pu$*WVf)|X{NpKT`uQsw|0uqU;@fz0&lB{XMysd1fYs5SBI^E zX)A)jPYa9ro@Ht688Jj;ZEpR_aJVN%iQdPg7{g{HrB9)M{|VXh$Jx~%7J^izCU&MK zL_*!z?3bPM{oj}OGxXT~n6vn#N>k^C4JRZNDoNRNJ9C?OW+8%9k;o3x72b2XJM)! zy@={$&B0Ax4AoZ;0FBigDd3Ix1hIC_;p!C(ZxLXL*i=$$h9p)9+S}>q)F-GhdzPG^ zAuVXP+tdrVd|DF=&lQn`N4GV>eVwTROtZJ))&3EZS6%~-D}+HKV~&^{1$Yw_UvP#u zoyAlmZ#?hTPBq6@5`E&FtRDdNH6ulpao7QlF|X5n@?i)At1IJYI`(w9_c*QbMbZoo zUf!q9=f2CoEn%iRnk)U!=VLA6j>rrQKb~cB-j(@k93@A*0 z_F|(N|I1URhwjsIfo8Am`cwVg(`+4IZGM;NX)iMbD*36%jYwb`H$|0c6DBs;3~VC) z096l$Uz;t!m7^L0W{qAQiM}wlxABdWn?cWj+LX*E1t?y>>HJka_-WG7nG|;e57_tJ zje*Nb67(1nQFP_x08eN<*ccxiD@ZHwF&&LYtOb0N?M7?Q<`1CrblLDi660ps!IPX7(2inP9t8_^L&U>7tO-2M0?X&ic*4Vy7oEEqKO3M4hd)ZrF z2uM`9_W8csZRR$9EdD88f_8GX6x+;gj)lW(Oe(gm>@&pn+iRlB2vh}i$o)-v!b&5` z1=MZ4udGcclURfchKl8Q3^|q>ES)cv3Hy--0?XR(UAPwS^L~4nMEfm6XBW7WP;8=+ z7%zvk${VA$=MA2(8D`3bsM3eHQA|!3=a@GwXhOFOH!p5bb4YLXABjV^X)#ey<)@t8 z0j7UieYrL2QecDzdL7dhnLb-$=47t0%?`d*_#hr|X^?M&tDWSmv_r&2L@P05ZB#z4 zujzP1yc4d=8@)W(AkMb9Adhl2%B~sPBjsw{3B)xj2diFUWPFJIwDakhdsRhxN8s1r z){ereA6njvmE9^!%GSQq(}c30CVooQOamF}_d=QZNhvF{&PMkZ@`|#Br1f^AmpkNW z(o-w+Et|Px!b0wtVxF@p+A{*)x{Q?%~$Q)MFITaLq>SkCwIYKwGY8WhOYl~g9f$Ya zc(r}oo7KjVMD{cscD0mI;d(8%#v(dvq2LC-$W) zmj?jHJj0H_@4fiX97~UD85&mat#j{rRi?jnnO7#2ORrYEzduluK?MWP^?Vz4<61pi zkhA64slW@vr6wgrxs?EY6e7p`r`9=7k#$x&jWc~g2st@%wc^08sLAxG-2y51H(!F! zHFrq-Qhc#;a4s3GeAvf<^FQaY&X+^(C-0nMyk^F1<&>3xU`=B$T{hxNWk)+N#qSI; z+TP_1FRhQhjXbGyH`3d{?5^FvD{S)IYxV93Lw6hX8NavtHx`uNt>e8Wb?e4g86htD z(OWB`p{l(%`Ipz(^Q?DLQ1{~$Riy5LU0V9MKvdb5O_F8_d!d*f74xEB>FZbBF!IW1 zk?0&5u%Y%qY6+8Rp2^B&!I%9A*5IDsR>OXUR_1zZ+qq9!(Y=Dx&MdoIX32}fLSqv& zV*_-N?}->_m1OsBiTl`pezv>Bn$Jy~J-di5EzWR!tq$D7oMfXA%3~6{7zD}>@&&E^ z8U${KRs8z7mHo2y=51!NV3V(!_NA`4{sfX%j=BQOjTC-G9#-2`M)$6Q%@4HIx-OE8 zqNowkZus~Ej!EaQ&rBCDJb_igMMzADvY$W)!JIC zvA$Qa=oBQYDxbsj1x+BOrb(=FeRj(_Fb)Iq^xNr4MEthq?7|qE_O*agU4%%D_XNA}kp!*UBH8W6jxn?j8ATL@a^9*n+lu;xVw)s9il< z2eVC7i0^KwXa%&!H8kDYdKe>(qRvWo3Yp6wKQwdhc^f4|EB4OcR)6%5G7bC)Qf6q) z_uqtD3%cDWoHaB@bON8LwouUCb(KNlO1RVwV~&`t?+5%I!$g5y9DhH|R!ZefdtK}J zg3nn7+?CRF|5663=!dTiOBy5QsZ3N=Muz*q;yzFKhxyjP)^mK0?WrO-KHkBIpLeXR zH<3Zor)#|-+G6^+r00joBPkfBpd3Mm+nIQ zBjQt9GW!KAulsXTJ&V+$;ltTZtItGO<~(G6J^(7?a14Zmi9Zut;9(WN!rShwJPZDE zQfZ-Hr5Nw_M1chFIqi3~(&fWRA4gPD&a4=fQiIL}=_Ju$mzGZj2kRinmat};Ye*ti zDCk^KP3rCY2wjS0s<(p&M)|3!`N%yJfyv!;kM!*-*IMLEzI)@hwKm<(y>u59w~#lC zjdh{jO|%&LM%KNPPL%)q5&6uhrCJX9Tbv&eURqTr2ynUjxV~CPylYh_O^0k<>Es z)F9qu6&y+NeNWv_UZls1RX^bHtFqR1v$+lT=gqtI8XAzkAwm9EzjR`o@vrS6ql!T? zoLV9SZV^WeR-RKWO?Z{1AL?n8_WE~{BUU_(RA6Y{crHAcFS!y+PMI)EE?5{t@SeJr zG!u(7DZjQD<_ok5I4rKKszlxAL5HS2zKF zb#$`6oFQ~+JF?9WsCGp9zK$;d^wF6@U9q#YO1T6|@y;oi+cma*z{axXaFEOi=tc|y zZnbAR6rQz}{mFL_v!cY?vb{k?|RpeqQZFd!+1soP4nd zoOfRdi5%`=lLR3P!Rg-kYf#q^sFJdeDo!WaDvi-Ga}}(ThWVghwEwyyN|nw_swa!q z0BV&5ON|L93_XGBZNz-}qo#erF4#3iBMkShJkT{!HJLwuho9@|W7S_#Hd}0mrrF-) z0@No6;#1wl#;Fu4SVn8u8lJzkvdiV!-@DG`sCaRc=A!>Z~} zMUhQmafpawyq%s#d~>>5nxLk({E88>;z1X>tTTZFg9|q&+BZ0}u#gbr87{5bn|U;c zE?U@86NQ#&9KgZf8*0TGd0a}{Tx+HfJagMpjU||;uO@Wz!7@)7CYoO@ylr?XE(vK$ zaU4`@k4S9+@xf0KWlS1H7ag5?_YB=f@--!?ZT|=+e0dJ zk}I_?&JniYu&|-MEPDxVu{jseW>vThcZ(r70v}o)#tK~gUIB&Hlj?2QHgIzTfh@q` z@rGKEYE*y}SYIc3OWip#SCtb8lA8)AP5JiBen>K;N!}oVC#BVj&*HtP+{7stUOrdN z**?Y9)v`DXXHGE>$5P=!>CkJ(1i@lpLjUewbY8*Zbb?L8%ZiFomUK`zJDvZ0YNyrM zDEA0s{kBAJXvizyrFrZJ08{vox~;#kW(uS{5BBY*C^?K>UA8-_Gc&LL*wuva6JKPs z3|x(kalp_E0zWCUY4p4G6uN=s76^+)tK^Ki#g}RhSoviRF>tKw|HS=f2U3FKsSX4m zqo7_d?!%7nWP7mj-Shcu5R+m2Eom>nsc zCqqQS?7Ab4h^eEI!y~s3O~u`RToah7x9WK)I8^_lv<G2ObNl!+K4^@W#~5rO9K8wpaVHAyey9 zKIIh#ta)b^W^j2M;n3Bah@A2E=poaE6+2>eaEo9GZK;|t-?fU-sDy!4;W$u}EV`Q{ zF{wKd6HevRY&F|dv*2d*a_^!~4*mNPy2c?~lNMJj@R2F6Le*K*5yTvRMc zZt9+MTE*)PWG%y68-0J#^J#lHTbaT8P3;@$UfTx%!@2g5!(yYg*xZZpgFA}6dzg+g z>9>keW$h5JuW0JusiJk`)3TRoO33JvYl+>(+&ZOgJg_WXW*z`%s(<=$4&(YL2op7_ zm0S1Y9{_2YBt*OZ2+xqjMZV=_LN&X~k+`u1Ytu4*t^DeVl_a^Td#Sg&%~{(>wjcQ0 zQ0JUApti_f_UY<)gYIURA^5BPqCuhkEOtI}rD{+YY0GzznQg`Y7S_CL4yb{LauyUN zs(>^hmI+aQl~whpqm+>j5dz+A+w`i-)A?^NV)~v1sQ1+DoBgdQEk5^@7jqW=ex7KU zR8|Of>nRY+*la=5Akm8@%gFk)&5cz3v2^Me-Rb{f^y06b=nJd+lCe3w`R(f$l0@zZ z`Agnk9Gio+N+;-DHFx{pB*mqi|5So9J&vuIee$(SmU4X|Nb_bLJYs8% z2C9eu-oPqN3HKYkkOfZ#y}b13c_5IKRA4~;pgpzHvN73`4Y_qNsRGZmEMenjLVN#j zdjxTih~$aNrstal`^=<<-pjTA2SAoC@w7631NJ1Q`~3QK=FbrUoatIjxt`FL+uk zm_5@Q6&_1iN66z`m+#ZOI^rsFYv?)$GHgCNNLvkF`;~{#FZY^uDn|{Cn{W>(v&2>> zPA;xh4zs&_elu)ZCLBK$_-c!~a$tcagl{nViNIVH62{RHg`Ydqa>~(pwh{^b9u~+cx!--ffAsW;C z5eAAh;<>-&FW}sP;RL?Mu)uRMONR}Mt=ua_BmI8ypO@gjrw@Q4;r&=lN49y_n_Zf7 zS0}+Q&4%qOyCr*67kBLku0;Kk;sO_&RbK=qE5NC#McRJg?`TjZpB#r5=4Jc9kIhz` zWl~UqTt<`J9K~g&nZnRDq(>VWY~B3cA~qBVq;P z4y$q$=>^*hC3{Kka{Ksw=BzGP>wH1=Ebm6P?O=uKZWGIjg2unwI^T7|-#jaqOf*ZR zVIEt=NPZvLU~`slcGZG<>lo(P!xPU)w@>NXAjxb9D}$-8@J*3@7$cAn!!>+3;IDH5YR0fBxd2zAB};;(XFE;G z&t^Jfec9)(Mh(BQxh9d=r>Su?M?wi0dC;S-6~@VpPo`J!8H1KGdal}{cCBgy=i99j z-3OGJm6{vEj{7Y;pa0-|b-&1k$KjAiR1rx~Hb!!IlF4U$r;HADd#&22!YY^^C1HJR<^U@p1 z_X+ivi~GBNpY7n5Ekq({GbtdR_rG<--m-s?Lk}4%6sk%;o#qm?tr35Wrs&peM@epsmNqixXC!bR1(uW%-4^vqhSHM5WmUk1Z9?0doIN^e!ltZAldn>e5Kf5_D& zEe^6m?#nU<8)v?*P&mih+XjD^;&X%i%~6=e&D5?F<+N$3ZI=VrsMqNEKbpi^wl)09 z-ylBhQ4vxg^xaVipEHuqiMKl`?{Df-ei8eeoX#6pt-;INUz42#3)ydOm8Ak348k_P z6_)<^;X!yS2TQVp`yODhgc?D9rL3huaQ36}p5n{I4Uj5&-k-&w42`s?Vk0JNO2G-H z$BlLTdnXC;`%f-H>SE;WS1_Kj7(oC5Sq|!BAA%~A3%w4!<{JeJn}nLJ6gWN*+VY90 zo}83=^!Ohw9wsJNY1>oe%L$hB1Fzj640>;E!Wh}dwNeBZ|LkgePAqu4hsfa1oGU7S zxj=3lBt(1;Xw~vBuZdz4Wtp$KR{bSCx8(nis@aNi>mB}gIbv}28sfZ{u2;7FN%6;B zneiW|Ud)~(o48Ia1a+d*D79pQBz@Z_zKo8NIWVEImh-qaHL49k2B1e>#U&$L&VnL; zYqB!zjFWB)tpqNBBlLgGs6{@;3+#MQF%$=@yc=dhy89LQI6_m@(@Gon7gco1txB57 U{Vf@vRTq*L{vT{Dqk5SCA1ib~G5`Po diff --git a/libuv/docs/src/static/diagrams.key/Data/st1-475.jpg b/libuv/docs/src/static/diagrams.key/Data/st1-475.jpg deleted file mode 100644 index 26e676a71a3c1d1c5b965e7db73a7553cd6bf71c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8284 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 diff --git a/libuv/docs/src/static/diagrams.key/Index.zip b/libuv/docs/src/static/diagrams.key/Index.zip deleted file mode 100644 index 17aedace14faf8f2990df3232565328901209d5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71160 zcmcG%30xD``agV57Mz3tAu|&Lf=!TE%rzK7h(KjY2>j8j)+$}3#WpBbS_CW5+TPj= z?)z4EMMcG3>%La2R;$*nYPE|?)w-|Ly3`Hd@0ozr{`CHO|L^4`o>y2Bo&S-SGzlh4?A7@V zII61;l2f8Icr2QGx*FXB-FN!?x`#TQoU74=CaIN)a_*ikRF+p5A?NPvEOPEUygv&>AiuM>B)_Pz+3Vf%OY)j^DDf6{@%HSZM-#eWPKFzJ!`v3XGQOOD zMBn_hj1N_+<=i7(ggStbGLJ||ss}BX^Qk10yh4KIR{AT`ZemcL4 z|B4^akL4HfOZlOEKYl9Tm!HM2<`?pV`GNcregr>*pUIEnC-D>bZ~2}4V!l5=hF{Ci z=2!7s`7Qi%ehNR4AI?|tbNLPYXnsAvgI~w5;K%Xv_zHdjznkCAPv$H6HT)2M7;l$p zgVig7@q&Hvp0At2TDRA8G`zvRf2Wx7wkcNn$G=nJs9I^TrRC(Ln7`iFDaCsC>O0{E z+b;hXQ_Mq-SW>K~EKR}ctdm^VdHKf5)aa#J4bq%=tFi`mg(`XtGhyl}YA)nbVT3hZp%_ze(6yyLsDP zZL;+Z&Ft_|w%0qIOg7KFo04Mv;6XWlzx~#sSo5I*F2$;8))bGheqL;n*<7(c+4}OH zuaiPH+uTzYw=l<~_er*{nLNCrI@p>UP`w95IP*cSH4q{V%GN3rdU_C-H!c>sc)y4KRa|d z*}8sa8TKnI$tmV9>FQ)_uMRFe(EMS#6mxm-uw<)p#;+|xezbYE7o?b{x5E>j>$)U- zp6!FUmbhSuKH0hs)mho?uzyP040QkIZCi=7c}cWuImiCYx8? z`Xk9YWziIs!8X%xidvnmdxIkw(5_>xTFZ#&8sHj7QUW4dy@4ICQW;6YsoH2H7NvM* z_xM!%TZFuxktuV(MOtOa#=J$E{=@reius*Y-W2P#pV|z=aogbecyagY&=l+IjSn^X z5hvL`s^25U{9BBeVx8Y%uNY5=U7)xf`|14Jf2Ek;xI6~mxx?6OG@B_M{u`Bd0W5ei|h!z~0Y^L>%kaqoeEc%1r27m^F22rIjn1`Smf}NqDVW8ol5mXs9 zl80Cv#X~HP#*s0g&p~5B<8aw{-Yw@QU}qv|5@<4L3ROC$@;Cg7AuB3)ET-Y$bkGb? zCCwo-v7QB*4XOgo0nNqnd05W}EdVV9EdnhDEdhN2S_)bQT27V575vtE4bk>``Yzdk zV_$+cf;K^{e#LLqP!m~61IQ{IS`AtQT8jr>$3p{b#?BVdR?yd=ZJ_O-Z$LXhJ3+fZ z-%@3Di`{%^q|@ni+imuAYes_GZFQu%99DO{+ip#>CAe*IE{`WZJq`W0o%PjrKA!O0 zN?sSp{SmF-r)pQvBHPDvBvj7r;~Rl=4Y~6+RfA6xEV@489C4MnT3jv;5U%hw{Eq_O zXpV?STqTC$0U~IS2JP0ET9ynD@CjCn=>IkY%k}Qi`jDSN8ueJ(jAfm0 z>kW(Siq1|upouFwBZ(q55>HY|`@os%YES<(49Cp0?8q2TjLYtHxvd_X$6<9in>(y7 zPxEwZye%!wX1Ckp-Eq!tqzCCm`cN6yVGt$IQWGgYAQ4R|(S^i#2{(BKH@TEsNNg^5 zbGI|yf&R#7o?&X4nP7FrII)Opo|a&~ii`Q#po+nj8du2ilDv zPtqXiq-!)ts1R`y8>8z$m#IJw(}oxi(#dZe=M%N^12bFqyYBvM%{SPmguQ zdRz`yg3IwIXS8z`62&gwj#hq0E3cuI-_gn_Te>~XmJa^1+2a$e4wu_$b*FngR=dLy zYm4*5*qv$3yNQM5HQZnDa9{DdlviV`lSfjEeW6$;-sSrW*Z9%mkNi;KrtnbcC(IL% z34_GR;w15N;f8QjSStL&eV3yWQ=x2k?+01q`dMqveea(JVej^=#^oR zsL5B@p5(HUi>52&sOdB*Gu_A6QbY8sC8^8A_UGvBYcxt4eC(^-#C|`lZ&2kM$1sR4 zln+o=edhKXe06%OyxTK^cy4v#3x2i@A}7Nb-XJytIbZNg-6$*&Z}M{>)Xww6gt@|P z*Zu7;K&I~l?E)=@oGv0aPsKDHCP19c6(G*e^9Nqg-saztiCYdvN6Cyg(VMU1oo?o? zr-RbsVjYeQN4nMRaYFjKG7_xu&D}O@OnOFh9M5PT6Ppu7UXNZ+Ig#7x#O2p<`K!46 zIzC3KJuM+7AB}0HvLlM z6nLdC@k(D}KlKoQT9_lw5mw=yPVvixTa~fqth>czl_`syG94tRPZg6n*gkZsSaC~; z$ucYx-cj(}s>EKT=~p60(biXJ>nrT1juu9sf98l&(bhz9s<75IS=lRL4|HHJvewl} zm?$R7xe?eIZQ7%lDhBt`P8HsvV&FGi^d4$Fj~9CxFLpk+6U|C@rNyV)oN?BSG)D}y zQUZD?J;v18=uC)@OOJQOx{^APm!msDXa^>!*ib)<%iH4ev*?$JvF=!VjML+^CM0-l zR);-3-Rg?9+pVqyo5K~Co*wIV#bc-s&n0bH-(+$dl2!G-n;{GnX9?qkL&65(I=@Po zB+M832#dun!V2*KKV1Amye;$-&k0`(Wx{-Mt#CvbARaayAzuWxRFNZF%w&MK87aeh z800kr8Hc>rAZ(T7dbtb;LQPhAGa0lX2TV24H)^uNG>V+VngN5w5DaUv-3QzKuzefb zOo7kG_AG2eslTxSL$$@R+_<3oP3P%hl!=Zcs4KZGh_ zys%IBov#$G@)g2*;Rj)pFjyQRE)}N0GM908#%xvC-$N&n)AScofu{i!0c2T2e!%v6Y%@{FpwKNa8I$ybX(L#H0>r2i zlA2*Lf$XE|c5}r3#=0`7dDB3FqX8A`a$c)$U1+(xh*K!kNqhcKK zF?N?d#_Enuhlop0fX=li*sSrf%^mTvE>F5WA-3DA2_y?w57V8 zPdD)#X&rrzU{EgCL}yXsWwg*9EnH^I8t<|hI=$otu2Z@{AnWu>Yh`CJ8d*Ze5bKxM><`u z*tF*94y!XGa4*-|(LCN7?{c`UPUx8!S9)^@^)~kCpNOF6_VBvkV6UyCMRrGLm#u+| zfV-2MNmFgMgoJcR8>=HW1AxmFW6F$Ai?P~m&7JP%adxPvj02S#Ik!gU>_HT#jrJZS z@`%wcJ1R#DN5c0xrv;2kv&W`665`X)7p^!ol!h%EG+mtAndV5#NORfU>D}5iMk`0< z(LG355WE>WHTP3!V4x?M3*zQc?hP)BYskI8B^yb*r<^P8_sx9$k&F;Vz=*ZZl{Vhu zlDwWB3i7+;N&c1lGV-~mx^*M&whkax>2t6wp%&d$aUs7#xFlW?uZx$(YvOvQlvW54 z7G0E$xFgl-te)P&;(X>y(J2ax3iCpkSBH@5lqO1UEjBDbk_>@e7TYV`1>VBOI9aFV>gkjR%f6%*#c^S& zUcH8@zo6=5^$TjaWHvtn{xv#1I&}b)kVu&)#!TxKpo?$oLUo)%D>G2|GE$)^2}!X5 zJ;&4V$m2q2Hx3q*B{w>W2%%Z(K#oT1hz4t!QmfeMR=(}j60Aj7S@hq+PPbadDU&^< z1sYze*HRHnJlTOD)uGfD7R4B`f*B!wd5cP2kE2n-7}3tD{pch-PGYdAt>D|yo??B) zRx0{Kp)HRZ-A_$3#RB08K zG$+ot0P9o3a=lh2a?7J5sgP+=RPghfL^cgoXXTd^c46!ZAiHcGA}+Nfrk zeyrfkk~O(VcA9Mp($-{C1bPnISo=1#pI}4lfgY!gVwr8DhGlxKLgbc3C9~dN)Ozv{$<+%I;k1Cc|=*v~+fpQSEEP zE620=Z#I#@2g9^s8j;DFnM2$G*Kk#f=2)b1#a2u^J zM-^KXqxmg*yG*5yiBJF~tWjjT>DQ5EsUERsSK=|q`$SM91Bjz}c#XxlFi65J`gq#P z^j=9dWASQFwv1Ed$~g6VSi=n0;&+`tw<%yaSr9j;Ndt_(;C>oHE~bU_Bj>u#p-GkW zOB&y`(kBcm!LAq6oRt*Iwv|*Pay6o}K&IKM|AEIkohnilEei~7*}YD>L%!)*AXEIn z+Y4j?NnLjnRYb^cm6n`L#L<)Pwz~=Io~@ER*&1CStCc4$3!aiEul9mGS<*`e;q{0~ zl&|y`g|-k6rX-tUxqC9UE;^^m%{H=pE4G*86dZ;qiTp}p`mY$%Pc1Kk?`VNFrp4c7 zdBMl>-LJM@@GOph_;g!e&YCZN}*b*10qlJOrOh$pqgnS?fTs6ccEcIPb=I-vR(sR z_;ie(Ek5j$_()Qa3xQ1KUVcL5{wBBRwu@V!bhnC|#ckpr{MSB}`v?E`RIbA(JT^1o zu|-S-J_RjpALP>sjg9Wof`Yt~;#!&UwWNf%OGKsJNu3x2dtj+ZhNU+Ss9}b3O!0cW-G= ztnv%-SCaQ`UeBgRudxdgJjTMjl2S;VqC#Vr(tM-x4Loa8W3l(${E`w}(KW9C%i^Lg z-h#a1rbbm9DOSEt)U=bfsQ80Yqbhw~abEWxc|DEZyuv(hp|QBMxJO=Lm;B=5Jau}3 zF|X8Eke{2^v&h)Fr?*%+=$)QjAo084E@qEgUxq`eR>gmxrzej!v zo~pCa+a2fR738syRB3lf9-0#vYIhhh~F~N*mR3 zf8v%g5-W}YD+0HK9O}XpFz$-b&)?-oW337X#Q8YuSxOj?=U$kB_!Kd8?-P3106h#a zqzXtE){8(xTyXO`IJ7mf3f{IFt({wHYvrjLwLp>AL{5Opz_$ zBbFnN!BqmF6|pcR=0jGaB}q6M$cki|A|dt6k&00D{0}vcVbu~FH3o6pd_W@qMWS={ zLrkFTbec*9-PTYDhDo#g`( z+T-axy zCs!n(f946Pa|=L!0slxiEdC%K5f6%o#P5M*0a+gXO~_I!bq+GAbEr=0INEFLq)vy@ z+!E^FtybzBmZZ)PlGOQLk~#|*^nV(e9C?n+c{Vcn0-ShA6uHAbL%|#(VUB6~<9}hi zy6?aYg*#7Ujx+y(?fzdG3e%)-IPL$|Pyp8cL6R@3SK@u*C5SuX8+9r%QdbMT%F_Z= z+G7A+2NScYrh-9$Y^u7hplQncMhOD+VHQO;We^~n1|+?gO_eYy60%|F^hv|XSY~Ha zLxnW(E26U>n-tj?_$}}F27Xtj|GP48+##m_FA7uiO#grLg#I5QgJsbjdViAy0fxwY z5WqG?k~>p;a;IgaH|PHj1-L#Yy7JdNK>L3|{;ypA4>-VIjz|6;0!A|x!nkb}1%Gus z3_AxXfQ)U0{XowqX$efg%pXXhsgh)w8V$tI!gZLLKg|?A6!0|biCbdiJs@xyApzhS z_CidI#Crt_GB1c}{A*9}-q#9??mKaxI9xaYt-n{?1AV`r8QH`CJKo#NcyAAQPdTc6 zy{EPOeu>`>Nc^_%nOeSp*#h5*%VquK|5Kv}2UlnQMWK5;BR8WM8uq`?>^_~Ydb9c+ zDAKNZrSIlL^Lk6)EzL9LGo{@nAIA&4utoAp)E%Cq@_i_w_(>e`KQ+6N{=53E=jisw z8r+yy3~13KuS=e>a{<)8`t|(ce5ig2Xh8Wh@bI+uZ)z;eFD}5N_w256N0tC-0I+yF z8%?6>TT)1KwfS8EHcVXPhd>{NNG~aF8aye=_#tkTpIcf`+CAWy2biZDkVK(3uc+84 zfe4p8DhOR)YmU0Q8R72O=R*%cy%>5JD@^)};Y1|;xYMnJZiIf+2Ey1dySxlLT>B3~ z>{-}BspA-Q$gFjFDBmU|5gv~~j|kWx1Tr?O^LI>=*kRI>VvOlp2|CpIJD_o&=kI_R zJ5Vde9=i|b?b9`8x`{Q6d)A{jC=f^`S!s~%^p_}8WVS*&0CPc&E zkZFo%x;g$SD<#guq?CtAsXcB8p^5Env}HF^X14v@O%|L4xiqtzEOMeGk0wGMz1q$D zlH`YI^7n0$IyXeib0!YJn=b3tB<{E{8LP(-A#X|E2mm?*8500_ z;0#c}T!UmHJH4sQN@4H-A`0-}u*@)7QZ17qqH5tm%frO-!5<7D?2MR-a~*nlah=|8JPAPnyJJebSy_vT@ST9#_X?4xd-g=Tr<;H<>Sa^?cms z5a#g`w^cpcySNJqn)@8^)Ar}sQXWt)^NlT7=EnuQjR650HBU*hN&Zge`@_hB@9%SI zWPKiOdkj2nK++gjkqq^I>yuYa`e-1nb|g9&5*V*<+eM~0k!E(JE15H(iww>H2fKj- zNF&Li)WRX)kQ@RI8aZC#zVVFvx_Fy2D9|MC?>hl&Jpyg!Khq=d%DU$>-}s+oWGC2- zjLlXl@U96}J`m6rdygT&PjwJrtR(ZsCjKOo+yMPm;I0b{1N`(C?wa9nhlWD;Gh!Za zpU*JMn+rp=na5k=ZJl52%Vg9OBD4-dCL$#Mt!SScLBaWH|AOba`K^ZdLpC#l^SQP` z$zksU6Y#iAX`mpX~a2!L4hc2S~sv ztB(Wa*tl=N29A&eprfE)L6`Bv=1}~A{0w1A7&chgk0tORfHrS;_z-v~Z|iEMz%c#K z*d3u~uw=M?Gjl%TUV65?rt~8Zlzxh``qV(mv2ou3HHahR0O%;_SI}krusM`QlHJ&t z5{5J89~Jp2 z9B3Jrn0=1#K*0ZZp2z>}$AJw)Ls(290*OK5#E)CLLe(LjF#NC~OyoAu-sC_)Zx$<9 zhD1ypEw7Cgbha&%xS3u0KZ6DE?cFyx_Y=)S!w5cPzaetDODyZUfbKV@R!8CSY|gaF z`w2IK4-MH5^Rma|n?5v%+(X*CWNwr%;`!-a6&^65X7NE%H4L`dkXo&p>_mZ8I^liJ721^gOHB{ub zqP276NBm{=cDi&XwWy7>iVy8p z-c(`9_42_<|2b-;d?IGV#y|}|M@{riImt5RDE=_?|2i_%zinR0M@2o~H%5D8IMnAm zMJJDp%y%vBZBfh%t2oNFo7|?xBG0wRwe!$>^Jwo^JWh)|($lsBdhX>O#nG?+^Rz_{ zp*-B@kl!_m3FV`vcfxNgjv0C5cGT$ja!$lq;LnwdOF*JxsMLanqH!ay2pwD-3M{4gRFeHLht3`Xn)Or60cic7D;@ zB{kcqX&W*L-i_Wy74?TSe&8QAV;KjIxKfXv(O*<6+R$ka{K=435Bz-$))x)+MMGzt z+bGxa<+Pfne%qUp-GMt*;U_i2_&uSo&gM>*JH(UPvQLJki3?5=GOX1};=6bc_-PM& z3f%?nH~*&oS%|!OyBOOQ6&2L%pr##Ui1*gU&6-2{-FoL{B|?^gYgBNh1%9nE)S~uj zyQ$)kK6gkmymh-mH~0i$h-lr0DE%| z2_fxs{PBq{t{bl*Ve?!yhQLmSKnb!kPrIe+!yw)yuCA4~b zEZXQ^)R@P!(4$huLXXnYsbrzY7d3{R03FC9!mXVQFCWw|OvE({+hTFB(~5c;J-0hN zv1Nc}XZR@Ia-K6}Pk;b8S7we_f1ayp8L+-(fUq;XKDRU6a+VA0Xz`oP-+ZB>NrWL( z3BPjbho#Yqn=iD2Ua#QY4bO9Aw%w@f)GmM=IQ3y~5BWYiTcaU6!`u7GF6KW1}xd%Dz8Jv5D_Rju= zD6%@n?K*vcdm88etBdB=1$ZJDJ;xhilYssi1-T2LO5lVu4DO$0A z)GGY*;%OSFt|tXAt#(Mt8@kgW!HO6iP1Z_bP57#Gw7rMLG%rfV!MR#T##1>1Q4BC# zU^xSbR_0Sb@*A}M4P6NC&%$=~b!K~YJ1KIv5Rp5Lf1SQ3FMSQPKg`Wk;pX=};zCO} zv#D$K{q^VR``YMUxD?x4$YOgmtK<=jw=H0?J^x%8r$KDbe-w-DEv$|0DHc$%AJ;cc zH1(tXBnNkNKccACW%naSqN~eCh_A~>Q0nj@m9Nzq=-EC4J=|xYhu0bCTnKl=ok@ko zc&)$yWTz63Xsa4(&Qy@|bem#w+VV^q9LF+_7h5w8sikU!L{fa1`l##E=Wd6_ZKnSB%OKURftAMkvG#=Dh75(P?hTp*-TXq>}`(s1Y#hu zNSU)O<3jR5F|FsSq%& zQe`Z7_=RLReZg8{S_ch0(HWX`(}%J_56*z+e|^L}}d4-@95ts=WmDcgn1DaQRj>k8jWc*vGFnEMdQ3in<6e42bm_D<~Axb zRW+V%n%QVmYsVP|e5sv{GyGY>QdG!q9WHb!206?PVb za8}cbC_OjMgcu_;u|BANgCXk?{8-bUNn5Fw?Qno>T_FWQ1BL(?&1mQTQ|KNsJ|}OB z8CfuNY6Yb(ybglXmuq4ApXpnze92qPmH9Yz%ZAIxnnVyw+zQw?sN)m1Sg5vrDWcL{ zkUrH7GXi0}`+P0&&$Z6*Mf|nQ{MoAVr&b_{c@gd;s+b#*m_#{k^xc{yioYRARG1qf za&se+l8}#_L~WXOMFsFB!-EXtrzU}#5)>6tNePMtGS`RN=~3#LvNj(YH#^`XDu1-W z-LXDg6>|_3{F$2eDJ+Ltc1?dxyVD)Ijkbw<>-wq%ZgEh%_gw16oB|r`&94u*#d}LQ zTBy`;edqP18f6q!21L>N@bsEEoI#rfYv@0tqlji{+|KDIH6VJX*`;)<&eD19zOc1dr zNidYQJf9Gu(#}j$3X>a&+~h_%S>&H4qvD2PeiA2ZTLib(4a4bXV4vt_G_nt~02>YB z)&J^#E9~TlBCvLKuqoPjb(n7hicn+s8*!;^Y?>4A z2c*3crX7WwjEcTTNQ>TW#oI&7e)doq_#-EjUdDx!8jF{WJ6?u*);70$`kxdGZt;cB z2dge~1JiV$yjIVC8K5ILY0PCJ;8bo>}*+ zGQZ{%x%(42*_1q1#chZfv2m>KfSMz1Uda1b%>gz3K0Kh-ZUCQbh#spVITe%Jg$ik2 z@JZ)_BIIRs#%8X!^ZVBht3wZ~p-?Y)We@LaE*p;v&b#&M%tv$DfytA9@Iz$%ZoS~7 znuGG(gYwABMrJ@>HtKY@?iye~UN?>r8yYkkW#o?vBeuu}UF zL*`-SsfJttCR_9eDD!UTx|HVWe&I;ZYi<4Zw#5TfC9C`ua~fN2`WxPPL+KGuyuJOO z#ubY?q=~ZeU!|B6*MG{!$EPyp=a_?`JEunF?^gMf*~yJ%q{_Zf5oT;~87I%5rLzTT z7XRT!#)|R^u+><_5#!8%!k5BM%xwG*o@9D=SZV@v%3x$OW9$XaQ#p^RA~W4+xe6Us z6}?b_2{t%8AW-ISgf{}&M<3>;+)5hKDBv|ee?08W=$Q&F(>ay)%pi?onZZ+&8HB&d znL*l0bWvqA26gM`%pirlqotQ{sbvt^6#c3^u(1Yxysq)OgJFlqMta28nuNOE3p-hV zF$C;_u!FD3@rJL-YZ_~E8*8-d@RI9l7ReJAvEcIgN`>XDS~FI-VsxHW>rd!No2u`1 zMLLGTPO#-BY3V$nquRz=A>t)}Cg!dfnMHbq9$a>WC9g=iIGch?D`Ax4bU>v;YP`+j z=&mvYlT3s7C5^Xf!~QjPXPOwfW0T2bG#zg05gQgxP3^y*tSnFKxnE)5ro~g{N#9`! z9&t%ckSsAshGteK#|1)lE=%53pZo5Y0No8uO2=R zZRc)zo!_si7t*+12%J2ZjBxUV-q&d0<+&DE-avZ|L*`oa=dwS&JkD`4GNo;C0GZWk z++W<|fAl)I{}H|sPVPwQ1)$JKkb(XC6zed#&;OuQtlL?it(`3^woM_QD-y%C0dwQ6ZwpAp{d6+tY^rtpJ6*{ro)P7F~C#>^5Z@+ zPbFnzK9SMkID}`gu`nLugr>`{GqrY{iqqMUpy1?(?95wJgmfc*gdLVlqBI`S<0>j&xk=?63C z{Pn--!K=;a>&GH}{q+dg&uH&o7qHJNs&m^7)H8?NU}=)U0BMrJ!at>fMfGcpG~ zbC!Y6OZPeS$N)BiF}>%G6pa6-&Xx3ddJmC2N^kucj6cPqar6`m#$S4_00@u#FEUVolXbblj_?r&-*3;YL<)bl3z45aOoBDw8P^MG=@vdU+qVAvnWTpsw6BB^;~ zQlu{gj}%md;NkVzE{*@~^k7n?&y|E<#)yoy`m=V)Hk9LlCn*!o9#f>xl~i`;NT$z+ z1XgA3mECb>GUs=uEOMJP>bGIk$3=P@NKPNK`M)0aZ6-a_=kv<^XODReOZV-#iy@g^ zGMF8Md@-v02Jq&V`WTn7>S?fQzr-Ds?8x3h5mJcTp&*t^*d&%sJ17Uk(Ro=$ES-WB zh8>d3+d&V$a+ze72a$O#FSEqlky@6RYZ(n^1;6AD%hMnHzvSt+s(5qkV#p#!JjfTa ze=R@nBUA$_@lA`HPf&rP3y%sysQGZPw(bxR(3U8$(v~P4Rd4~ETxHOdSY%tNA#x8d z`HU?vvFowyQV+Oi51);R6;bby?gX`TN>M?hj8duY0-XVG9Sv`0TSW;8NZW|z1NT-M z5?@xye8}xQdvPQ)?I7hdNg-2$o83QB5{Sm&x2&%kXwz`Wf;O;H5H$WTlbE`8`6#X) z6cM9mOOJR7amf|rtTc(~!V`#VFeWiw)ZG#n@YUjP;tlb4@q%#Eml1s7Z_1Ba#8u4@ z*KZ7QU3`qVTC~^JMF3vQ>sf+IOm$P3et#NkU6ioaEeUJgsLcg>Y6{alCR}a;YWcVR za|+Y*CNFKo*0TEBc11>yQzVC|pr0N{sCQB=Du4gNwSqplG$9W5Y7L^WFl+nGgF6R`afHavFU^3ku`J!sY9C8 z3?(54FID0FWpHfE!_i;Jb7K`ICmD;$3kniZvr?YDQkqG$TGAk^|4boHM}FQbD;YxC zB_qExXtU;N?U25!e@96>^m!c-fja$gSB}{MT`GR`X^6XWrXhC83~M9}v8E0o?W{vc z2!`C05Ypl+#Om6}RAMTf8IwF5E@@@S*rXyeIyF7~*}FF8KT3lpd*&$AImBFzIoZ zNsrr9S#k$6h+io!D#@$0%3$HLo=!#lK<4>1;-m0iuVd2L{R?sf5 zI4`e@(MskvFDc<9sVD-q^|(iEPm+ zj%wH88P-K(?{!lgS#FJM8gja9YSza+;M_BQ;MyK(>;`i$`gB=^G43U@eECZ(IC$3= z94wMt!s~sA4t{T6o^Km-l5d)`WXg@{DZ@19BxYjtlp!?OQ>kSWm+UN(OOkk$k}ork((*POM$O09kXm@~C>{I{th*jXN^^1>mThQ1$}F9u)bOPw zCccagl_Mh}6w<-`^Q({8^rdk~1?!W@<}m&NCMTQN?4?IUV~$K8#Q@SH83RaZvK=WZwE_3UZ%`-3<^v&HkL7l%BOc!Us)p!f|^u%uISO zOP2msP8OoII};0(Ozt2#bb};!Ho)wwO*?K%-5DZk)XNot&YuGBbPmtO!4`>RjGDz81(uqSIZY!_ede$`)d_hHH)D)%_8 zSjyd}mzX7U^SQ9%zp`YWmAhXh4X~;@js4%6GR6>eoaCfYwf9YYo-4&|<02GgTa`Pa z0F(A#8R-!pJxUo7ftmMD!l1bf2ASR?)u#8}dB%+AxsPW&C(I#bra8>z!ks+xZ`y*S zBKzPLW<4iVit)LXGyuV(n92YxNlmPzB(;4d3#p%Q7s$9ddNt-dqk_UW2&xwt>t+xb z_7%Vu%H2%@BE;PRQW6s8IwJ|GKo&Mf;*mM}oB~5_igo&PXFC7F<`B%o90C|x-XuJv zjrnvLHhC(pK2;t$Pm)ygm}3F6oFz&1UrZ_ZbDHzBB-IE1VVZMAIFnP-T<22^pv*=} z9RSK>w~MK2@KzsRyOe+wE@gk_h{eR``HP;OQh-@cvnAf1{q&TAWldQU!!8*rC!F@l zy=PWVc-#I{+*Gg}qXrB|_2*-_0-dnN|}CxlXHF3na-n7K8EV;hB-@;AS+jrD}jRqr1j#Z zMx(?FD^xpNZISh5cRCY}#Xwfu@DEJPX4Sh`4m7Ksc$f;pO_qp#0|$S{fe|!>jK+Ev zh}Ba19{VGyTDbB8PP&J35OY9RLAR(2Io1M7GqM_Af^dj=d8%>tI2>SQ7O!J_GFrVx ztthz`gnS@YD-YuU1XzV~Y$4{|DBrAm0yI4?*3dBRG#08AHN1lKGTU{iFrR4!A-4NN>i9j|~Fd#QCUV zhx-d;0@kW1wc{CsaK8|go(n=BpkNy4G^h`1G>yf&0<;jsvL;w*y1TgUKCYjJ`?30g zk8u0}w)=qwV0$p=I_-j5PiiT#Vkq`6q0b(IKF9eiPh%p8^*u{`{|Tk-PK9Ie_2rGk zqQ+Ml#gN+}y;6gFXu=NaEkQUql4`i$!ga1O1`B!v`B_va+%e!pWXnnY#meNd@5J8W zCg=|kt0H&{bOYHQSHLi$GUEV?ozJeLyuJ zHcC%`PJ*W68pa|0KzBihacm3?3Y*{1Qi%Q;Zpy>Q)q}b87?@H)ROzF$6dcB;H!+BY z;Ic{BX3PVY#XwL?eLWfbx3T>_eq%EtX5jTuan;ecp^frf--eJ&7lU+F5t0ALA{)-D zU207z9rOl5>1>ujJDS}r!m4I$a;lGHm1qf0CprP^Oa!k%d$ zF*NzyJh82k7!u(hZAh$f)psrp+1|NBQ#H5h|)V>B{|! z`2MZv>ZrBD31Rfa%$#m0s(_*b=y86U zIE~*W+!205NxXsL8sV-mO!!LJEKKKbp<3t+VGar-{=pwZY0d4ZZ90Pgg&!zP;uoPf z;I}ABS0PsOi^L`3OrbwYK+Y4F^E1Uu!Ug^&iVw2t+zW+uD8E<1e<_^crwOO|q2gg- zB!8EmF8s)^N6pj&{25^a%J5y{M+qlToAh_oCLJVGG@tcG%`1`^#aU{wD{>&d0 zMx#FJ0AVS=S{#R}w|j+I{26|aumn}he?!s0rNTpgh_C_$NvEP1>0*AJ_@gj}-zxMG z2Mdo-1ak^1mVYPgKykt8;%I(=_!G+b{mviZw+W-gd%_hIBwQ^_=9dU-g(3VH@pF{? zTPX||4x+l<=i+>RF{;bn;jal_pm^pGaXdduSj1oBCx}D&KBzc5mG39)MtR1C{8Vuu ze;XxFXYdon+o+*_1cd{uP+4vk>h)gd$BKveEy7Z9C+fPM7S8fth!go!!bqX7_!Iwt zzlWNz=lEgb3aPZhxR1mA({0RF@T(gp^OxpH=WEzd%7z&ukZn6>wnet@f@I0sj z+e`s|4q6GNbR7+_N}ywKoMDXH*k_7zCx|KTQ=qRvvmvvXxEuk@%|!buY_s#1;)atz zOgXOrv1_;Dftk2nhU3$5E)%y$ux4VODOIK-7T`Aq8W=*kgzMIWSRq6v#{1C>JhK|- zHH7$A3`__R+f3C2N#b}LwwW4Q4H^Vug%{^T zfwRJlOm)n~d6%)hT&c$0He-(!nPjCJkAoKB&daf00-6XK0Gf^-K&fCn9aD4yx?PYI z&eYm#&*C_f?t4Is(X&@^%?Mm`2EQ{%brN?{LLY>X;n)h1l*$gA!xYLAsa>@M=9prd z2bu`l0Gfa{SjpmHp!I+=3=*-=Js$U;B(=F8M-JfE@c=DMkDSIYtY0sH*f;qR`%Is( zzGvU-Al6K`>;o|s`a9lsFwSFx>Jat^VX)1^Hp2tsKo9W*Ut`TwHyaauai1+{li>+g z<98v>Jpy9bf&o6(7Hf9`w!guefj$Nbmx9*d{Nq@&v9t^{n7)lM*AR7=gYbO5H`|Ui zQ~zb4d$>0%+|0n$Y#e7_g#p$1AO-;0cO8lEIs)xZ!v1$ykHdKzrQ<%3Iu7kKkjTan zd-w10`xNxUGOSt8GnlXmzfT7-zF;b!L4YZEPo|IAJ=oYgfooRbcoo_kgZ(ei9&49j zCD;A3=-p31ozT4B=qnolr z)Y}f6^|PQ0SL>DCqS_+)!|JdWck}iTOUSbDRANg`C6Ng@=PIug)B(X>CC6$i@8@+! zbw~+wzQ$TnmZ_weZnIfi=anEyB(Dojm=V60*n{_Sn9X6Ls0tGq5$&8s|~IO~Vrg3>&1ul(Y-W6)l?i1Mh87#R&wEEGaQ zNGzU#Y)zU&;*xt1Ar5Cu7M(4q5NGX%nNIc=l$;A6Lt+!h5OO8_9rq35U_RLCf-X!g z7UD^xdr|W(mJ2&Y)J3YpQI}ZtnUGe5+75*=8_9_96C^J91kF)A6cU<}n8e9IXW^6G z-%)xGYFXDnEtv8JZ)d!*RXJ8`EkrFYR{`Oj^(k>=bdZrl%0^95ETZ%KAEy;{N0kWI zoAyXKa;;|=i&>>kYmCjRR4L!p-~m>L&w!g)aANZg|6Zlsbc@^zcf0$@shd>xw`=md zd*3znR&p^NgwZ_ymxl&<1BtU^edScGwY4`l&!kW+<;#{(`94SH{#u67F{5|L zDxIqVITRkU$^*6;5?&O&M^1|r_j&KagpUM=H5U~nl~>uLo~rPRE|AkiGNA251nTEvgJj^G~U_UkJws91P>=aCcU21Rr$j9yX3oYlY5a; z8;`a|CarfT$xppRmTp|&HesZmGLeDd5$@@1bZ$AGHyI!Pn|q<`)KcDzey;Yn)uD2h)0HF2vV=7)-{WL&r>{J1%0`wX%s=WBPljOLNk>s+Bz zRm)stP)?xx3I#{rB>m1#`1lI3*{{e+P2y*A66^d-t{5bkCM4hUBRv|Xse=cQ&lBI| zh&{tokIW4}&c_D z2}<6ji^gkyuhaW4TN;M{r6=#*qMje?W~xkM$xQUAPmI#{(QC7MuXPWXZRt#|CF1d8?N_LxO00ZOb%5A14iNHtcqjK<*_M7} zOj0n|FBSh6QPK?eH!?bnOxr%j+=a8o#5f-kvZ8l+=?c@kWW>gQxnINQHr>ICMYz}E zD+@(&Y+kR(UpObQNqFO6K=&lTkoi{YZJ-Y*G^aPm;eIAN}j_h>Q`0 zddSM~r5P95Fc2C~;)pY`P;Q^Z0avU_IznPI##4g-=f>@jDGSMET|<9ULoT|FG(!!W!e0X~|S`eN_Vt6?~d zAjL4ZG_ak9_0I}Rs6TNe4hSRpuhQNohyjg8za*jr(OvE zh}aW9LKaB)Yi?dnKO*B2TVbq+_EK9aImJY=aZV7iCBB1^X8Csji7h=T+~9T5>K9vH z%n_S7qA$u8XOl&VLnyHa^mk%4EO8;h__~FXyGdP%xLU8g3JovJ1)}uI(ZbH6r@|+XyNv^*k}BOP^1x({TuT}>t~D(sUnLE4my*D>966HXfZLnCN!IEn zaV;IuKghi)WN+1os+V+O;@&ao2~1tz<~tS<2WZs8t?n7x=r^_WzGAEx@j`Iuzy0$v zSqBfyzAJ}MX-M`eISnI|^NRxiB__32zII>_`*pEpjY#53kCKH+gWc!osSTt81kbX}pl18|j%jrAhR#FENo6vzQvou$QA2ttGyd8u8P2*njfEAmQ^{mk zlZAnWI^98i@Kk3g441r)<_^RW-GS=baJq3EOgvp9br^asrng^{n;I5`HhoH#_x6n2 zL$^aB&viFqD(hVT`uZd6Q*8($6Z`L}`&5&|dz4;tH6nMCipEvq(=O31;8bn!aoWIB z?tU-G{h+>LhS)g4KWT9jW&TI{YX8dVisjnZ^+1rY@mhPIMS7E+zTI+v4?H^h9lC(x*SM_j_;BqNegloT3=+(RaWt_ z`%@CQoFje1O&O;MJ9eP)JWZQEc`CL&xc9_W7VmjdmAGCOdQzht&kjyaY^iLxL$$Fb zx!FH3^lXsxOc2@L-&5DU7xMU)6IT6O%fRlU{#um-J&WwcKf})_WOU|-}64d=l$^<&b@Qz=FWcax#xV& zxyasuMW^*C?w3U58w8r07Pv1G>x=#XaibqR#iROu;Ew>W(_xKKs?!^~1knM3-05x^ z^lN672xgvl_0#r6s5vpTeqfpIgJ4M>_sz@*B1IuaQl*<3rXEu4D;!Tv3`F0XKH8+V z*a`9uHR!5)AtKuo=#Tf+?kI7(9G&PsmKv(=buO?9&C_>;FBaBQs?c{#t(L+yrRq?M zd6q(wcfO=J0Ys=7Xj}IWBr{SWY{6@(b3##Eyhnl`&>G*N+{K7G7y4;q<6X5eD4b8sv8)3$^%1+>f2P5=e~w<3%&fP?4xb3Kn(aB_G! zq8d_=0jxm1d5tJG?6E>rBPc{ME&#j%3(^S6M9EYXB8`?ZFNN2o=x#u(8F73meI6#ggc6?g@v zSE5Rr67_^BT{R|Oi^;cO(w&$BW`8HKNPEVInDP^htj9>OC)~i4cQI?}V2luT)?$?)&a8DH?;!dj6b3aultA zA~aih2Z^)=Xg#;FS5g2Ak>Of9+IA2&4|41{?8rQd(3zI>0$13;v8%xFTcTmLiQj)c z*l9XpPjy;n7R_{yc?37y_DGCGi-Fx$dZ%}t84>wjZeP60i%_%DYyUL%tkbkNf49?$ zW*;JvHa7zuYD^v3;4R*PT9~8g;4La_NhLiV!*l>Yk4ZtRSC&q4w(H${1 z4M%fu1Sp7V9IeICKK#+6sZ-wv=hKt$e_j$0ei3fz==27>`~K`9BGf7VEpgR;5xNBj zF2m{w{_2Etfy?4Ec!eaU8(cneJgOnp)$i=cGz?JX&C>T@{^Vbn_5%Y71a4*=X%jX=SEG~J@=Ry<-t zF^7<}_8c~}WLzrgmU#-r(Vak7GyoN#5;T5#Tl5Mh3FjfD*eVQDplzj%M9Phn2)Ev# zY2V2pvVKnVpz;Y~Cx$UTDUMy1xE0@F*l*M%Y3u_GO%tIxBCJ~UC=lz9trcNAMOaZW ztowu6OyDBzj>gik7ehM1qIrGLAWR-rD$&DN=z;~r$SYFw1UdK!=Sa7pO_C9u>u>lO z4AeAOJ%$x0s=mWO<%b;*VIKmJhm6({a$>daXSw<;%!4UiyI5ThovDWgI)I&F%5=Mi zs>Nk(GIXJ2Cs3ToAu`a2mdJ3FCbV+bU}Bm}htay_aw=6e^HXH>(ntfJ!#QU>7N+Z} z2#hlzSks{s=AmU+IEdle>3M3ni+9q0sEwk)B%{h0R$lx984#{19AW5D{9@w*q+9?- z@lGxuSO&bF+BgR(=MZq=v$PyKyKr1& z976O5gqi|7kyJ8==vnMzXCvus{9Kw(g;`hPA0AJgjiPn$;4(QE)METd>0E4?0+92D z;+aJZrvB_xuM7IQz9KX&Jpl_$rBQmqtYvUI=?UmVYK7d&C_s0sHZk4bQyaR$!!KHh z!b?t$b7}W>oa9)DJTy{ReLi1lqR483Fo-6qL=I=hCW?T%CnAG#PGNT&jS)RZO)S!4 z(^b?cRs06HJBaKhU#-Q6<9ZaQH5hl{GFiV-zHzE^0q*QQ&DuJB6sgT+p$3U$=!N6=wGmji2~N~mi= zjlD4_B}TL7^a|D&!xFyxF#W|jrG>6aWRmS`FjU$n-OYkq9Z=z&K4IXfrj6&am+eYk}5TInZ!ddmPCh1 zq^ZCl^40po0r0t!hs?_%-euV~5$X`rpGeG|*LNEWC|*Q>QI7pg3^e&OvEp|PB{$w< z@J7mfhcO@0#ly%PF# zViBguEs8)YwkSfNrlN@F(RvYrt2ih^$3^H27taMXh|pD$@x0!?_ePr2R8jD%)4Jt= zDdtmLi&8%ht$In%p4a=%>pkN|6c%I~!&DuVGUxSNkA6}I8GcX_s_>(ckcD9gGVb&G zqGFuAqz9_Gq>q|eGuvsJ^VV#q6_ZiNWpIQGZ-g_K^w}?Cb+i~V*a{dkq#Gd@#dd@% zz0nP>6q5xu)onyvy(Yw7(l=ew+pWv4I8A5QUU6CjmtN6chf?Ks=13QACE2g_sbA~E3+BYT^`|8Sxs@auhmBxi$5s+{qXkgHd=!K3S-y}N7g&+q zl%;^Dc9H!;=BMm0WYL=S0fCgfD+JOlGkyuHn51SxXCX2mH=LmGKF$2rexAANWpw*NF+bO zRP`8i`s59ayjvOpnlU!bB9J%DQgKOUKUXrqXlabayMPTD)V|TQ`T2-)PzW(a!zRXf`=RnsrHLxtgTgA8oXS7~hFzXJ{=mv}Nyr z>_IPx0_WqT5MsshP!{&Q6TJ|M-ywHt<8o|Di#uMC*`Ui;T1a(B>hiG0d7;$2P*w?^ z%a&TD1)RSRr8t_Cki;wtHZ~{G6-u@_$xka_kBHmNF+$`~n%g-D+`w(&qFm;uXOP4K zSxG1JQyfYNNhbtFT;gx*pE9YHm(gS+6&<|N5RcE700e%OXb%w{N?GL&S!*}hwH&I6S)!JWU)GpKNeX#uR%Cn*L z3nmmoW+jq6!Fo@w>4Z<~gq=a1$mNN6CpB5y)2uL}28$!u*sHSZ2ING?yWO z-0h&csL_g9uy3cqywkuwi1a;(G!JL))&Ps)kgU@mw$62ZStn{N5 z+~>i!UZW4TpR@OLnLc#%bXm_@d)~}xhUQdUbHZ2hAW}%bl5)@HD{13bQr%b5@CTz| zb?cYEf9d8>XebNL{wR4$%d9haC$=|^)UXrV`>AGPdnC&GH%zzEV4t<{lG8Nyxo@3T z{KX&WU*%B7-La`sKW88h_lxJ$N`v<+kH2NeOo0Q5D6@!Sr%HWL2kygE?nE1>N`;%i z7YjFm&vG|msx%j>!YzPGQ>8V)KeL!WvoI6ea~BSq+zf=7DvkYm5}e&NC!F2YA?K$z zK*tS@!%IF@+B8*a4?4lPOkJl&!Ybdtn2dRHc0f?-fFMl}u?7Hy#>vTsPet*VMiwQL z(9h){ntD0eJu-)WJ_rVO3B;!pEkrr|$9_vO7jxH|-q zC%Yv_qY6=_o>1uk1Xb3jW8E?PJ9vFbO zP=^NKXGG571EW6?Vf7;HI}vt6WNb%!u9zDxYMJ4KSuYCpGGk(dv?fAG+tEV$c>iCv zp&xsHuxCz>hD9K4Jf5E(ho87%%6q0Iz0i_2w4_&C(pxR5ntWxHd0!8kGClJ~e&*MS zY`kMdyn`B=MXU_O$#@4*I%6}dOb1%1Oh;?U5r(XIhdXZsJNLZ`W*!Yqwd z$3b+Q-;GpM!q+ikP=dQY;0^VnN>!O-1GRP}qC8Ebr4tA&SEqY9)?)}T9b;lKt;6N@=JfWCiUG8Xde4ZAA!#N(gzNIW9;h7BAapC;>#j* z$~FtLT^41I&t@-+u3i?MJi@;DEKu#6u(mm=e-+}c+|-$$GwcvqM7x4yuZqa5a5R=W zP;Tq_YRne9G#8BFj~B2ffA*>Q#pppu263F(?4xFLOVZB*20H?yV1)R- z5D?~)Xy|PpuWVm#3wP{}tokN{oEe9^jAb)QsOAC%>SPd;&km%DY>5`sN1EGKjTv$9 z%fYBML)@RmX}n@$SCEFBIToq*O^B+6(}V?6;$<>=%UE?rVfk>1o<7TWW^Bv=OVo3$ z$7%66uSY$HN=QqICKe{vDQ>f+1U@xO38b3i;Km5ifUPBH6}hDcvpq+%NF;-RnN;Ew zq@}C|OV|Xe$CQ|72z&s7z6BMNrQDo>i8T<5(npfYVG5Wh41mk$pcx!2h=UVwunaZ5 zIfoiqqKh?<>l4kX2Izt&lU%=ZV8I^^wlO*GhBoY&9D$n08}<3QpoIv z9g?i(_J3o#=Jxi+xRp**%8u1eYueuRv`Y?UT<882XCMz*&55xC?aWDeZ zb%U*DplP29H$qL`SO$um4}bnc2Ut5e5&?5GlwhDYoa)QX&3aZ;g`UKe!{sQ$tNg5}x50q0La6-~=Ys{0hsngS$ z+C`|dx!u~BLFVgP``(PbFyR{A&1F4v+f8?r`L1i>JXg;*cTtvq-77Pl%HJ03*%{Ed zEx5yJTx=y@vyrM78^Gndm^`A2Jk8#mIQiy8R7aL8(RCfzV5@^N=k}prQrZ|XJD#o` zPZJ-tp9VRgZR2UQ%JyAfo3hmXiw30(3ocWZvNfXA8WHuQhV7#R+TTZq-wE=S;wV9< zT~u0%+p|jEbDF*x)abN+6sW%G;&ug*?^T-b^ieOT(Hv<-MO)}fh6q_REQxnXqB_Ui~Y0^_J|$&=l{ZRaV`Ue0hZRx#%=P9)j$8A z$qf~frRHQ1&1Al*GJCb*4X3Go&R0(B*HI-jrFCBm+dq|?3O0Tf-Xh|0^;$$cF3Zh6 zhAYaa$}X$ev*AEB!0$=T_oU3pZh~%?T_*D_lL_}@8P^yTG%b_a#}w5&O>2ISa9OYK z+Xl0aWit0N8NOa)StcV-XpzOdOlCZxr9X>fPiXzL`-GP1>b0!k-ngz_c=5!1LZ0(^ z;5Q=639Wt7z9^T;lJ||%dgDfHdV~hK;5D%gZd_wYBFg05V-&oWJ0}( z-X zNP>Rr`wy}^n%&bA=pcpdhp7CHX3vRd8#|iWs5DOV`eK-fEHJzp!MmM zOo{{FLYse58BM$Bf34&Cp-P&4+vF$j+a`M8@Tgve#C6jG}w~8BXW5Srl5F?G7 z_4E6Mk4~t{8*9qH)Uh}5(wjKjE=-`tc466vvAO|bwprzCRtcY6vx@uVnpI8BD*H+u zm`E{?-jho3ls44Sx6nvZl&qKx z2wK`u#1^2?0`lQonrW_W7&nfRNkaz$Fh=Cz!{%l+ z+C(?2i5QuLy7vK0E5%<~UQ40oXz1p{(sPzS)MzdHhgzV6u(dtCmia^NZ9jJ3`)vEM zeyV9d7GYU&U0axLi^FndH7O0Gzc;`btPG@&4zr(j*<2?1%XXJl6P7q^q%N*2ClEfx zLCo6rGA9y38Nj%<7;N}q{}CWF1rFGOGs}%HMvyw4?Z01GVR-3^ zqpOPa5#y*?FV-<9WybH`K>)KG8!H&;dKOSTX@?@R)Y=muB zhI`i_6vyt$Xxf#*n)876oAc0nWOoIKUPPuXzpHy!2HjU-Ge+j$$@Y}?YBWYt#z=O} zK%m++17ULXjqN~&!YK=r$vo1kFNkD% zDtFkoUHWj{VXcU=4b&ZT!#PGR6EGRYE+-Oc&=q=ks zk2SMpoBXuDY!fa@&5Yed&WQ(&H942(l^h35%7q!Jl}1b1ChjHM9O&l^^ z-xy>rK-=Zdn9HAGHwXHl0%(;s2Xe30>m<|{I>6{iUv#AKe({w!spHu;<-iZ*o0|?nA?Q5)O?4I`m{yhNwl-2V~=$vfuWA`(gGJJ1V$$?AqzfEARD3(1hOXr z{DLA2;3*Xn0nxy>!)YKoo$;cm1rqp)ORz_4czd)}GDJHAX1g+!gtg=1d)#+pp@0Cu zuy-|1&H-$9;F8#!z(iBP+GkzXy7MCdfQ`;9L3f=0!9J}aUgO+W!3j;wxvfGBF>dY+ zaQsk;;sD{r)+B(OXN=`sUU~2a%!^^9hk+>dFCJZiU(|sow?2|W#?n|UWZJ6EV2WL9 zjqT5k^r-cOI$ooUWI4mrzIETn^T|7IV2Py^R{o z<$&P`Qo#7|*kTUBJ^tGU^OPqBbIvhPi3Jt6`$wC3r`9%e0G_AyM%D12;Ovbddt7fc zFRpjDoqq=ge3Omw7C!zHo($h_eflK8+)%{@ng$90H|oBV!drX-;!Kf=@F~AX`9U{n zt6Cxn0py@T4cY+?ZjdQ_P2V`PA9@;DgsPO1z>25!4W1oxXQn(C8JSe=6sQXBACn6|F_Qn?u*lfO44b!Z>u$wnT=u3QU!-_VPNAZyF_MQBCEJ1 zCjh3x-jV}tyCp|o+m6XlqXk$Zb4*5Gm2(o|C+snqpR$k1{+(GGwV0(*i&+}An59vR zSsJXIMms(YOh+|6f?U?@`5{|95Jj3BFrMNJ#b}q`Y;Icj?r%IUvv<Z38hK%0qFqmz)s<*4n*6^lF_31{Xzc2pJNpFhWF0a&%~hD;~z2P6&pTH?$h~ zr&Q0q9kox;*qSKD*$hB2W^8C$4&Wu$FbkE6PU#k<(HNr0f>q8A8bUZ9=$cUa`;hC7 z5Tb;@*}17(Mljd*CGu>oLH+n9I75K(^4e;erR~201h8wn#>7XxiZ=k4ilkmD6}e> z=43u>CVt;Gw-$At-n|d+0>(R0B|UMXTGc&@7Xw2$9F#Xm57sL1a3PIVIyDEq6q}dp zP=dQ&1&~X2xz11C<+`XRXh`aUO0Oc%aqJYwj&kgvD)uo5QVjaDe+PmD9EU8|r$S2B zrxK{irz$(EL$h`5!$1^%Q^!LUe+@?e9hf5XNf^6FW!|G=KMC`F5@w&5KgVf$|N3#K z^={2Q;}6O@l?tkGz0pIpKvN*Ye^L+CzK3c~aJ!9_e-ifoH|)=9pqii6_ExCJ@kHGw z74x(DF)mOyI!x%~pgKQYfL$OQ!gutu+6+G)Q+v#5B1&W~>stX<`ZW@YGk@kVuJ<(S z&&pAU(z9~UG8J@x8%ZV{t=FBEYj`P|rq9U}6ReLtS~wpybDfTpslO$Wj$X^Oma3CP zbo+zglcCIqCaW(SgMA3ZG3xL9vu=QGI4WTQeh@tG4MUmW^RJ} zw8T9#I;EAwP0WdW0o~LMi7~WHNo6#(L!sb&0Lfeh0U{rLSBnJ zFSf61U?dljuCzwxd1O%=VP&L-$Z_bpb)2o<0)83Afs*&|!HF?>W%U+M2XSL4csy#@ zdJ9l(y@eo&8#NW6R6Y#sv&ij?+yZbIPXvl%%2o6SS^*E^iC`a7wkM($9;QbGj&XPx zQfuM3j^_~^FN(5|Wp-Wfh}7Y2F&(7b(7$pLnhyMiZM`GhQ5Jf>)PHu6S=c)QYJ6$S#%wbcph{zBD*RMAlN-Ue+InNQP2hIp{9MU? z6ziv&k75Z8F~fE%6`iARr9M^!c1~tqi?qCMK!ojPDtk+1zNM;|80opC;(BFJ?&Tj= z>#n7uf2Aig1*CU)igBBj9iHN+s^KXJIse9(Dr@59MH`$Z~%Id4K3Y|q)(g*us{OwBSLMw3V zp;A|}2Keb@^XX)+X&7>0lkXFrq}+Y)N;Y*R4HG(pb$0h#?Ok+Ad-8&d-5Q>`H5_i@ zUfZgekmVdEG4us0E5khjQ2EAgB$~&3W656~b7o2?yE+DF%IX-X{S&!V#*6{)Y5-Ox zI?pLOSd3L2@-3L>t(e9wfS#jAc6tI`oZXep$pD(1lYy3}PcOeMr%P2rk-*o(4%~TL z{x_zp=wJ_e)#WldW*%@_V@Hpm?{w59=(rntTkhu!Bdxn3)DgldNi{flbi)pcS~&w>f1ss1^6a3G%|uZMhFx;Cp61%iZkT@?2;eZuaB0 z8(~w037c*xH8Gv`>^jMnBPfYb_Zu?V|8~#%pWGfD_U&p1cH z=3##F=3(UJK@Q;0CBYZEJ$*k~t=s3&@IZED-~AF;Q;Fn6ww+2LDbb~TS}r-}!Mb_LWzO(sljQ^*l+ z9MJ8_9J-yXe@=k6Q(;LxpWxd$Z|nayzMbsz{9gd>f4}==QP;>2;%m zh!Rvzwt=99PY~_)rx5MLZ)CEH(X}g2N@5p}@YCYOBjBxQuZrt!OGz4Xh@?;40aUeZX&0%j6-`fD#o8`4Sm-Q0*ER8v4 zrtSs8_+=!c{MeiSvZ?ESj9}_&mm!$C+GT*LYgL3m7gj}7^eAf$bp=zGQAe6XX89(t z_hWqbV>oNq4uWZy(K0OEj}e9?ey1=j5sZ&uS|$wbGFnVs4h!qB)Br!HH=olpqnQ?i z*J#E!nh`oSC<7s2G}Abm(T!%pzx`#1%Q~muGhpr-&A3N1Xc76Eg6SalCXY0(OJI{n z`l%*)B*JwoVk|vJf)$a=!NTO?#~HjO14{0F3HJEJOqc1-c8|-NbFVLbrJrtJ0yj)Q z#Tm%MV9j$!evJPpkg0`(j*K^tjAxHYeaAQ;CABZ?RC6SAjDu6w4GUmy^b&3dzhAf= ze3l!fk4fFfr1Xtm+&~TZNdZ)u(aW6C3lNi>KzcI7GR1DXc5l_f@2G0CZzgdUI+omm}B$j){!{V%8H4km?6MJyxRr!(7! zqS55Gp?t&!@_3Gfuq;dm3|-&ytwSBJ1Xk7QVZ^8+F9kEDQMS)|y8m2+;^^;#ZNsDT zKkMl!7|{4xPpaQycF9XXwM$-t${&-%qq6pZi#p7E|CduGoF+Emb|TtGzNTl$cHW2M z=rbkk!*PDv|8N|VK=I$0?!(-~gIf~POr})_oz~vxK1idMjMN3SR|TP_WWDh;epMyy%S>F z>vL}!3y*e3FPnD}7*oBA1gh~af+{;~7R=Ve>7F(gIjDbiw0#!}rna=0itcOKyy-x- zdDEfRp7q%vez4gXsPmzte9$8t)Y4+`^19ASOMn(iOVEn^Y|Q<8C%Q;!drQRrw%$*^ z-`1ly$eko}O>Yz7+-y#S`>9rhqur6&Xtk%#ixSzZ`v3g|GWr#Asg>EZKGh6C27KmG zcJJGLTqbctUzc^nXI@&>5z64M-6h>5Q?0VSWOY}A^F3YN$M%bweaX7wB`ej1iV{Go zR?rwyuMB6iCId~*nv6cMyy+$5$1k&YHI};?7BU~dJnQ3^(Z}2qn=Z=i z5?nJ~1ZD1zU)Jn(>p2V@Y)=<$n=V3|ZKpI7a z@rQw3Bj1kOHP0qG;r?oBW|oc>oe*fZ=mdIodIIxjly}*@xfXW&R6niXK9%X5qYFA= z?wq3xe8R}iIkeVb?=!l$%T&20-epaEV=kRBNp~%Z`)r=#4CLXn;W_orbN*vO<^mjl zRDbiR{_M3VA5?&E=2{edGmY1xgb#)<7Csn0%Z&inqH>`sd@4}sT2#%oDEyoq+H#6c zaFb#vk?`gxc2(dn%)U2E!*+0+Ao&1n!?Fh@ zLBFLQ12>`!hZ^o zse>x^sb>3B_FaYVT}8H4RCiv+ygh)s;qNMh8_w?$Zn#iMP+6{wV{-#aa|76i3ZR;Y zitIj#b$jH@uLA@Lg!v{;xZSXyzx_}{&{ICU&;0DZ)Wy}zGg9`~0ghh>z_+xt9Mqj$VLl5V1~cNju63=VznW<;Y70h%@KxZ8cHew}$}LzC9%N13esn^%6M#!tVk5wwxB~bF))$ zr9_I#H39xZz|n;nDO)Y~Rky(2s`<%iwY;fXZeN-Wn3`JyGF{detKZ>ZZ>Kd-)ln^n zUWTW^&VQO;lXk{oxh}y0xIW;vng_012HXbR`heT!0kj`^_yZJW<&2xq0gz>GSHzMwzdi*}oV#nS~}bjgc}A&A^J$b-M2fmHGo zd&bETF4LMmAO~Fc)m}kRghLnt-Qud3yGErFR6ysF!V$ycEBcGSxwIEuTDN~pmaQxz zGqVkAh`nlvec~^fxsCUiOmnko?pbMWIR2Zq+AkB2fvIPM7CatQeaef+Qi+Qpgb~DY z8%uE^-N?a%v-f|Auf|AKJ+4R7x7roy6N<}*m0P`|Mi!Q_`@RHX_I*i=Bv9$TFEuj2 zTC8<7hW<*0{yO~_zClYJ{1R;-PZ-dTy0h!>nIclJwWce$fOxMgdV<#{3V0u12$>5= zeGaq#>#zTS*;lB+$CqJWq>bvmDZ7Mw~ z1F7Mt%n0d^>maPMPFatyjRwsz_1Z>)4-;r%i~J5nH)Eqte$d%v`rx>m_gwLW-*hiJ{s6=wGl!|E z=fN@t1LyW6AZ1#esWXWK%D^M)^cSQJ=DkQ=>=rESjYh6 zQ*cOH+>)+nN!Pce+gj4yE$P9Q^ly$#N^k53*N-?&2W}s6T8~~ee<7`_7bCx46CfB~ z#&K{unJhyha=Z+6(n_2&WT?f_shWfZ1UWOXfDrn-A(+Po36|hQ-Vz)w0EIYXa0oS6 z-pU#b+Xgl936JwpNe4a8`|XDcK%c~?fj&jV;J8F--^8b)V|fV&4Wa*uw*kKO+>X(^1>3d*5Q;7F7rhXX)5v%5acM(~709ZOiW>s~CJ3y{ zXv@FR)E`Ruj&y6$2e#D~93ox~&NZ zBNbSvdSe%R`g&vRFSwsze}iph8*V>`paS)?pBAqcp-VPk)vx@Fl6ZL4n4i%+_}`hk zq>YD?Oj*+AdfNc@eWL1p0(#lkj~T%D{*hq_=VzyTVts!qgee4Ijj`}{hGN-Y#{Obi zEN_$7C^_sOVBL@&{!I|3NKL$Bn=Y|Ul|g7Wh@lrF&7UgcF+W&=0Qr&5n6eZrn+j3y z$rvf`P6!F-P6%ERQ)RQJ%HZT?l^(~y+QEr;zT;SHSvJNAMNnt|l@I$`)tpzgexNmQ zcuUk$uU%vp?Rvp!3jIytvi@;DYf2e{b6T2zLhLRIU{8nzYCa)W+y)Cv(z4VOVq~9u zLhR`z_K8GL^*qF7T(9dbYthuxePq#zPol6|UlSDdkurD-jI>u~pXZgiObZ=y2>sqh z7V~I&)S2IcIK}-5CE&L;B#+;g7PPj7-z`AoBjpo4KA5~~b#y1vZ}Lu+Pk-P}RO26F z1^15G(@(1fpG9_}ryh>Qi zrX?DdrL)?P%)5fC{}Gvo>(Izvo&`ihFY&fJ%Bt7(87+W3zo&wv1(7FdLF7qV5P1>~ zkr&N{xN6bqQXMG!93$Z}?YZ!d)4FR!{Pct9WLzQCkuo&=Flb3r7^XKHX!XY!zo06-u4g@$@2 zs1>BI><5kH-$VNDlU=kB5sQzOHR3-Z`g9p#t@mg*jD`lw%+5g!=$Sn^{$!^ZKX?i#$}qk__ovf z{hDH;LewBR z-Y1b<6f|K^sAmj5$2{$pHHKrA}P#pY#cK&(EfEA zctD&#deLcpZS6E|)GTOGP=fp|%8xzaU>e&KZv0)z+4T2>`^mc}yaj3c#Hb&_ z!JD~2N8t6zim%`LWlbHtEw3so-D%=B27wfj#tR}vqu3`R|W(1F$d z-@2eaL7g%a!;p+)YL3C#hY56HVpwT<5Dvj>(t|jxv&i^m7!R#Od#NwO;6vu|brAFq z9Z=el7-9k*Fc~r+z zxo@dF_Vt-?nOi%+WxjQ7Mt$zybHrb}(Bi_f+fqH7JO~AT68^UAV%E4i= zx1?%$l;Dtchr{wL#@_22WD8Gq2Z=K8+1c<^Kl#E_(GJoW5tog&(xnE%Dr=+5G~kq; z3Q4uxN{BBubeB^F2Krt~eo!hoG>rVvx~-ujTVMdHEHFUZ@8-`*0Ql&#$l_jTFgrEE zPrIi^p!&j}N;gAvw%pCQEd+I6$!^BaY{tn~^c?Iiz!CKp@1?;-eP8#ygy^E;J;mlT zCwh1y#qPars=7$1cNBoSv#317jkr-l?sq9%LBw$z7Q|yiaWfVK*ibBp!-ir(e)3{L zPh&$LQUC`1jbp!X>?X&qQGRSF4lnjUVM8tbC|q&C+>f%i3W~{|u?lqRjI}gI?0F-Q z?MFHKQJEib89#9)09N5kYN3tQqas|Uop<-bbOpU@{GD=y$g8?VG5sj6J9$CnuPF2+ z{U{&o5%j7z^Z*5|)(g~Ft#9!e9!~j&Q^KGNgJ*bpF%p>J7_-;dF00|jl%11?@^Xy5;v z+7<{FV|h53r3o`lum?D*JV0A&(`aYVt%fsAC=uMkwpy;BZtg zLf?td4fDgn*-1Lb1ga`Y#{^~AzmLvynyUT?c3Dq;pJ^mi4lmlj7diqiiqGS;O*_zc zK=mAFE9=$Tw{TMpQu+ z7zG3Ki6U4Nz}x*ItfcjVtgyJ&^Pb2(*jQEHCfu#2q}^ZwNOtN1fl{iIK!3b|(;vUx z_Obr>*(7vUvWhC|LZ%s0OS=eqV{??%KH@vE%XBq!AcVFW(vh4@fUr-0kf2*mW*MD7 zM(ymwUciASU%=5C&TzM*jXNIT_H*n1wFB&-o@a1&M;n3Qmc4F!2#Wx1%BT88LzH7r z9)x+DkQZH-D!GsstpG`BR^*i_S>5S19yY7HK(n&CgDAc!FaK69{Qj$BWuVNxDZ`hE z$l4eJl*Cs?^9o&RhjmyY#CH-y3>I}UgpL#fHx_yyD|G`(|C3Ue+S8qUfgt>9U3?N3 z%mofu6&cOUm)Q4_ezcKwdoN4QG4n{Dtkx*wBisf>N9=u zm~7;n(&TSa2q>E9coUyK0VZyWeDV#cRzkzt>Hr1LKi`9Q$#kFZQIrQ^ z4|_PEjV~f!=zGxCN9MlTJ98Y7pQ&V{N(5?zhzwCB=!8v;muF*{DjaV0I%Ai`q|wP9 z8ATo$MWOcWN)o7MCCRBs$csZfHFB_I)W~ZgZO*@hx&I8L&vdp;R}x3lE#4Jl*jtj+ zTM{-k1?Ws_3c4Mcz3Y~Zf_UyM)z43jR6h#JmPh6>Z}-LTQRE3JdV%UWjzf7T(7%u5 zuyz+IwmiX4-tvV0PlY}72dl(eVjtoyu@CW<*oSya>_a@4e%{ja3mJH+ujAbFU6Lz; zx8^^(qEQ_)dHgq*LZD{_(=pSyrx1~B$4r4Pbj+;SQ`j0F`$j)Uwymm2!|o~c?J49U zR4!GW+7iq3kB59*a zH%0MmQG88Nd@Em}F$e2(am<)P4%2WtlPQXS>@75=kZ%oqbT1ch!zH*jj43paDNOw8 zc7n_FIp?k4cLwSDVJMkHLA#Ekc<9geTL}G>^BD)F5Oj=KLB3YT1Ub<}@^C!0Eey9N zxOay^;F|%ui*wmN`0_r4QKBRRd&A3JOP0t=vt2r}kZKcT`&Va>Ug%yLHrsV7+Xc%c zy~hLu+M+_-FNLz7MhJBG(+DD%sGK!luQR7x^mOWcy*;AK>O@n>D6sS8y!r~cEQp=2 zzdBz}1!>7Yf-Dnzub;11Yly{K%KXO^w3oh|p-7P_`cYU#c*|lHZKUi~bepGQEzG1A_5~frZDI0l~-Lq{APSHvs7P z-2nLY?;QTcu`AMeyo{ZvUolT_%4YA+1FF404|X?BZ}aPITb#;$yA2zs66kK63SP&z z$y^IF_f?eX0G6b?|0?R7Irmip9OBC^Pe(V?FEXEpK@><}Nsyb{meWbT$9^8>r|i$e z=>1c02m|?`%F;XqFc+;E**t~zhNb+z0AeZLd;?-BR#x_OC6RHY?ob#9y?BZn1r)>Z*pR z*+XGIXbcd0U#M-p)m0ydLfb99256-Y2?{8omLTl%KY)G$%5veCfZBjchr((Og|+td zG;X8n#_AZT0vHac!uK#w(w3g#P?#BhxZ}uFu=Agu>arFenhH3MLt&YR!r+-y=I7gO zzmmD%YuT(x=B!ECkl`Y4xWCtOL(KPD%lBGTMV^u|zXzlDEo0(QlIQne1uWH9%#KWP zj!Ypml#(o;7X_f@ekFxNMorX{AR{ZoJ-L3sTy4)0QlX`d2uM+kqfP z%8?|XZAX&eg?-DrFGwwO!)i~uy+IJmZf}s~MH1WrLyb(m%D68Gea9Ar0nr5za+uvR z&A4S6a(jMTX^B~Y8ViTPSJx}lR;#ka(cRxt>t{Umf3!m*x;-a7mtZ&Q(iZx zyq-TMzG#`m;s~#TX)WX-tifGLsdEZ+S@UMO4Z3!|;?u+4OLZIU2}EV0DMo*m|yTCkC)RSNLgh&lTvR?FMdpwasPy z+#9Srt6CcT%(2g`^;79HYvJZ@vmK2< zx9IVV@o2=%1-K!Bf$bFcB!;>kp)}u=Q#Uu$qvquw1-~apYHvrE6O_3f#EI*~0&R$yO0<*VBrK>v>8K70OW!D} zoPbQ+2xEeReQ5-c4tRnBHc|9sU@J+PJWDee#bpCSI?Z7FcacRd)3w?Hm-X`QT)I36 zcG$N@Z%i}IvR62*bI}g^^yVhbU|~+xlG-56MxoidL*4jtnBQc=%mzv~qtMO5Y^PEv zczUV>`~TN(UR51olMk7b4>54I{LJQE)4xy0rME7Bysa6`^)YydDs?!t!Sw}$%#gv~ zY0Eb5V1Qa0Mi+FW^93R0amiKX##ROJpl6fAz?;LBsaQuOSjVQW&x=>A%f{cT`%pwJ z)R#`n%R16_v0@!+vW0}AH!Mqzpg8mXU}{^iWx;ebliB_@Cp})>{&Ka7L zoUkkv3_jIlq?Z|)kUDrDEE_d4A;0ar_VWubCzxgxL0G4i>R7VBk-VJjYx^#0iahrE zFP@(uM(5l+GXrgn86XSAe9Sgx9B#~jo3zNbU1GlkYVRFEGC=f%QJVD0+{#~`6P=M_ z*1;MyEq+Ny)d@Lvv~)sVgCg=BMGh5joM_%JqF=rQu^1X^heWe zVG>)dA+v2R?Ru8JrKkUx!`{*ZodUjd$m*R#&?Zod$&$VJe!9lM;`{xy9^VgcV+%I^ zjm0n6Xn(l>B@kok7dx#lc3NW2f3xsUBb1(f28_saMuQP~#I*fJl9{z&V~gJSZy5)a z2zukk8LBG9e{9HHfK!q7GfVriRVluz6wnttVu-3WYUVPho@s>2oB|TINNsHDwn5Z$ z@wQFYst75R2(KTc{E!Cq1qrdPY z*w6nMb_f!3eTun0g<7yNeExu?PV3TBRc1ifz0u$CMt^v8HMVMtbAShyPQwlHOtl3i zo3B!I+ZZS|p6_9djmfW7c*f!Ekv^42`mn<-^l*#2{{_ns3)*MvfuU>k5KHQ{_Qnl8 zkfW>zX8S|QUTeSqT6@puDGgtaG$wo5N!XN0oI2naaz-HYr_$R{Kqp!`#A8E&pK2Ql zaB*s8bpiMih@l30is>S{B)Z?+(a{vw1^UBxH)ztRu>+xy6JDO;4CFz0;kmzE$XtiR z)V*!4dz+oB@Xb|#G~#|kzJD$cIE<4rz6e1X%-+d^0KxRA+10o_} zP`pY685BkTv0w`t?8a~nQBkqQ-jdwho6FF9?{)f61ZmQHN2G&F2N4hi=^*{BgC&}H z^Z)+ed*AoogIP1@oW1utYxnlsYbnV;meG_~nh8GU7ko_ZIMs`o$v1_MFy9pHrbiq| z*G22@rR!?h%l@!UjXw!%gAKROU!os}M=0u{wwl#5VylL5lqavLGMcXYw$sYrIQOdw z_j8@ryZd*Y7Cim5(}D*d_fr3F+#>OnVF7<3*YkAUeXK9)<}FbMdFQ&V)_2{OA?U7$ zHMmH_C0+*NQ5TlRADBq-<)7NOpomj`2X z3R`!g%|{UWZ!uHwYEl)`2awde`*)bA{v!l#DM#umdZ#z(Eq>=MjA`9RFeXxM(y6yr zuShK@e`V)K{P=11|5iK{ptKHoPyo*C(}^(vA;A81uDUv z{^Im3=*Xd(Dr}IOGY++C*?(&sN;3ju{9m^XHRC|r>Oh-2J^R)2k5A9)e>gq60LJEk zStHeSH&Eb^o{XvzX;vA`Xp_5iGOBZ@^ja9D>au`6Y^AFoSV4b_K&2g{?m4hRg1L@% zk%|t%mJR6hIk@7(=fuGkP=K9b=8SyQ1<>bgg)c4UaS3}&5w4;Dj=AYL%tBOF%>1kd zpUXe1fq!#q1L0P>5^Z3vR)rrn901$2+N^ZtoYAP#l{2L)xuq+WWbs-sFM;zFwP`A( zR%~?=C3dM+N&B5icf~JOksz^2x!*xzyZ`n9Bu33y`JYi@r2e*O#7{Q zr%%uglJC$BlJC$BlJC$BlJC$BlJC(CiEGZuQk=J{Xr;4S@T4 zr&H@a?n_!(Tzx(9-guDIobjM<)B*i2wv%?624)gze1iIo`X|7z^Wp0ML6_Swbpi1n z`1NNqiL@UHQnCN<_y|cCQZ>T=1R;UC6%Q$W3K=sFqOAi9DcXi$358}P_uFx;$YCXD z5|xLQ05w6w==oD$!Zpkz$d&$?rEonrTqb?#V{o^|{*BXCwb&bwj)}_e;S;1Qm?VL4 zpb`d`ApvA(HF3}eCqK1BW=L)`m|(WTb}Zw;-}PjbdOQk^0TTPeEj+^Se}jH;~vehawA1Xxyr{ zuN|Pln5dsM0V0+`S3Z?Ows*a4;LVfB;Hyjm3V8FRN}2wQi&sTR!KoW*gLDF z^ZyET!K8rZIws{0mbcm~6Zy_C_tlr=X01n{tgmLz~F7AbPJ0x%UEHteOq zT&{!qSV?);HnejCeCeFnwQX+sf6X@JK>b2dIe_vWj2A#z!TbQmqXkpsx5|*?4N?u) zO2vy?XSPvRZlk=@yJfr`^lot|bC|q6lmpjO~v&{L_Q7FdBeoOO*vnQfb}kU{S80vP&jzz z%B7okO`2})=qOQwV_3U)ygP=qdk3KLckfuad&im&aC`#iXpS$_4B82{i?`5fzL+Uj z`tS)WC-Fp;i&pMf!k4SfT&h*F=Yz7&6f_nhg61f4X?VFL3J+bbwN@HGdiTs7a({`YEKu2UHuQ@{Dm&c8 za0J@cX&YzcB;S56%Sl2`rD^`~^*cR1U3+Lhd`;J$)6*l6UA;;|;)Jr{*IKXQ&V!Pl zGoVJH*5Nz(Y5KJ_IO4F>Q0K}ed$nLq@9m}@oM~91#-)SSJUDE%I&jfask`{RcboI? zR`t+T)&X*JUVq0`>aw*2T*>dm7Q$lQM+c}C#>c7VQh(f=hh@Gq;s~nmQ|c8u z>e4v=m6E!ci!4}0mQfVPU1U|T)mzq!oj`}gPDtPwAqI!BsFKpCouai$PMRV;Z!egu zxO7(POA=B}z+nj?Y(1_}kS3(1zP)zNYG)Lra~z3vsX~Y@O=tAm1~D0kOrxe2y48y?P1J^I-t0y<_Sqo1 zgvqt~d*p)b%{2NmJ;*Ra<21yD93xHI%r}ljs+gqK7IJ;oa3>s4fw}IXZ^R{F9sqyd zK`VEE(ehm<=!HfkF@W|$LjSy0?;4;uj7jAg1QUBpA$0-txR!aFgKIvf5pfO(S$5Sc@D43m)pVah;72 zHDW}PAjiyZV$@6(+=L`c?-n7uV3fyp#fXII7(3r^zxK-~mf}rvGO_WpXqmsIOQ#cd zT3pdy0w1DXeuN>NJ@7UENHT_EHT+PgMi?4`N=L-MQD zp$P`BaQx|ml2Oxg5g48ibQX4I2zna60BI)4#O}(7nkXxOBsxdj&$55o8RT5J7o-`( zHX2P9@?0OpKCsvjg3&AA`TWZ+e zX`Nxy%NNNKkwq4)(U^V@eQ-$!mmKGSEOweVZ#fY@lI@q|@`A4mE~8kMp{s9$(9=#J zJWN<;)kfynnD+e(2&{+=O0spR(>sI4u`Hu3cagBYd5Rl} z5urtmmfqRDl zvcgps>VOQ;g53a{U{Lj+)Y^BBc=|xpyrXLpBdj0rrWsV2Nh|dq@~W{G~2KhI@l+;{3@9YzTZeM8^;vDzfRboSRo2ru)# z->WIxRq(O_))E7c#}N)a9TUP%jEEY`$SWPNEJy*>?}LojhkPcSGtBFzMaG0}N^XPG zV5-yKPAD?|bq-4ZqZb{K&C|R9jBpo>K9~s?)oKC1e(ab*(~RGkb*du|N>2EL8vlr) zV)qX07er&8JDw(ZJ z#3gY;A9Ekn>p_a-V;l7&;u2cx1xccNgs;EbpzXwq@?dQAN;g?cZQ=!9&8}sTB;n)J zqeWv+Lw^N!dDs!d@vs4Vk07o9Cj{eGkGlQi%hm!rYwU=TjlYmrkrm9&g&LETH=CWr zw>u9`xtNlEbKtWlxy_{lHG)-=+wUGU2=JpSEvUs zD!`Vuqz_fU4#`dvUL*LEOqi}p>`aWX z9vP~9p32YI3Q?{%K4SPLytKm2;)Q@lq!taOa0VR%Zh%WIGy}6!=A|KKqatl0sjI#w zJvJ=tFcc{sOU~edMRB9oXn+vfDWB*V?${J-EET(sdRTHsK?xOY-R_zEXBgpGob2_$ zcD!dFWC$A*={xem*nUI997%#bWaA&!Sr=ad<+=`B2Fv_1hNr4I3yFCD=5}jG=jg{E zcrSMBPS(U|QA$WSHwq){GYaE`k1WQ|Lyia*;7?R&^JoTANLxDrQ(=*Pqc}cFTb+s; zuO3Iy8tylpP%Lzc{=K@0N5Prl$O(>3*ii6+)6BM;@oH@ZOO_Z^kh&q^A}jbudBjSn z$Xy+tW@T;h0$Yq=Idh!)+N;{uL5#hZLklq6C3rSn87DNwh@gS=7jZ>VrGeOpkp~09 zy?J2k_;{j{YXglvuc@?j@)et5cDh9cg86imM%6~xih41^!S!KW+OvX!N^Fxv$a3m- zsl)~+n{n?X-YFvS;j5Q1IT?-<7`!fhC4`%)>2PN~vJpOo#;CE=-&NF6A8s7df5egj z6@^tKaGG|1BN8L*I2m0-iFGyNkYybz;Pm26xUEyz5J#G@_8(8aAMr4X3Qi%a;KZA( zGLP>V68?=a7g;9u*!xCahKxyCiRJ7nXZNJ^53V9DO7WwDktI_SVK?n~Zu?K=Qn5pV--m*SzCITG!y< zWOdq<8N&)n+a?2_L5q^dIei=$>$qn%yyhobw0dKkkN~??X#S`yCYqDWZpH|!+JdA9 zQ!nnzLZn2?A!Rf2EZa+?I)&d8E?r)OY4%g`t084Mj8XmaHx0Ipfn4@sA|r1yHgJ?> zRgN7+p4d?%L0+D7LslU-9U}r_t)k3bY)mB}kdR@cKiMyeeAL6{!mGjqSx#mn=}nAG zG%cCCt7y+#DOl?Z5~d|CFfUp_;J)>?R7t zZtlu+D$aHa85AiIt|I{zS$(rUlGCS68IZDJX2pXEG5NfDj7WLq9^ql#Jz0bu2aU6A zgSd%Yo~><^h=URLSre@#*~0dE?D&mzRY<;p?1YMmS$AGGBvMuSa703x+ZK?VkKHmd ze;pt!E(n2Uhj`dm#B+sGumch)nlW|A?SW&X!{bEJDZ;hO_F;F-TSR?vzOf+QdINWH-EpAg88akc-Fd60d&>r|ug7Gdw1#R;2njot`OJ}V*7C)+Kb z`J@!^DFiFn%x!w2QXmgf1d>HFGC3>4p`wQm*=RjfQjy6O;7Ch*E;>2JA_@cq6_03EKXU0WP2vs=A zueYxvimwL3yJ1a+HC|m+QAthwjYL>zSEp^MTiMqjLl|bS@570#b1BOe93nzI%Og6U zra87UIOrvI!@#GzF3;Wm4c8vniKZPh24)h>u^Y$*+jP-(*vEHzG+(fa2<>zWb#1yI z?2esYq*y9}_iesCA5qoesI&%COFK;xnRC*-?#xFoBC?_@28_sQgTPn9T=roFZITMc zTqmgn43;RH<>xO{{&E4n6c5d6(tkPL-;(UmC~(0DZc$?@*WS!wHycG@%M2oWQwoYY zIo#JUJDCn~^?*@GG&YMmvvTy^L;TFm`&~r}M5=cUyR)==G>(yj+FK7AK6}OyKugijJBEqyF@()_&je1yaX1y*^oKWbPUxhvuc!mb8g>-&FO_eriFR6C4tE*r` zzvBL&VfH~sNlzR^zrS^{z8j~<_eoYO=OE!4?Vmm4W7U%mEzuw}RDtG=vBjw|{6rW^ z*%t_GrVFc;;9cR^P5qME2Lo|E&xLyk+k{yjpBtR~g3*HdsF@Ulp(3xW*qb9x} zvc4ez%SRnpzQL>dye!|YLUt@P9p1e~c1{lp#=E_oP%8PJN=OF`kZWJ)(hbzEUrM&h$*qpAyaLDg(54Dezp5G`)>4SB6 zLwKZm2|w&Y)0+!rO)*psl~y*!!L*4kEVVK5i%aop1!yyh%X7?2W}-P((5^ZP#v=<; zlLZVjiNa;9le@~NEj?t@S@<^2N^mU{I*JmkIlX?ZH13 zAl>2%SaIPgjv@)db~Ylp)lt~njoG6~OxMUKE4ucT&!7m#|5m=wc(YzYmn~5G{IOi6 z#Im}{f$4G>V=3j02RyHQmEHp4Pw1W1?|z+O*h_f#dYaC7R7E*pN)qu(j3v9g z-FyUX0sO^;i{s0@!rl}|KPZ(wQ1t5j9m=Z8W`xp&u)Z#&(B38PiJmcfL}kesy449v z5(fn^TXPr11PAm6ao2$09oY3U!o$gatCOY#?SlQ1GA z$s($?)x4~ik%bx<6Z$=VF$Gn{A^aR@`21DH(?YRugU6NmC4Fsy!akT>)VNHI zM;E&^Ld_U6_St1QQkKxw7scH|c=kp$aPvCGXgabCyIp08eqE!<-TXU59M68_nRRmw z%|;d#GnN_+CA!8Bj$87bVPKclTpi`kpST8PYzhLkC0D;}s~U${aKyuDWw71WzF zG=ohUjds^{#tc;OpwZ8;4eo9lwzj_oVoyO`@5yz}D2{y2hS&y{l!c7BKj*Q2M$?SL z2IXCC4e7~f5V;0?X>nW*i`z*>+4L&v}^qR-l~=@}PVw`g12ynGgCYLcOYim*_H z2*(Vw=T5EIX04=(`oXlU$wxQfO)SP?eU@ON=($$_dmX{*dX*CImykBdPymxtdHohH z4c-ZCw+X%~!A*&b_G*c?It6huT@3Xm$zI^oU(mr*AuO{zgMHGvGOq)_E^@u&exr3l zSx6ZlDzFu&J=QL}H~Jd56_a)9g>!dClV!AkLOgsrVv!_lXUCJv2-%9ja%kEzuG3?X zca4bXd~6vv@Obt%1T)73`kbmJhhBC*=NMt*na_LSlhFj|#g$K8z80 z?oEZh1J22M!zhK3W|Z3RCiFA4^(L&mq@{1*^>6>pYLSYf#DECm5qZV%6Age5k3vy^n zaXKuPEy0Ug1-sIs-qgGbau=x*F|6^5@uZg()QeKcT~AZNEJ@_^D&|?cfS$*hDCd+I zo8pRiVe7a)r|G_*Kf79ZnFt+^D4q54Yo5}(05H={3bSFZV=g_`94{3=^U;@0lVi^J zv1P~u`p=5qcEOajD}RAuMysN~*hF2J*3u$dlo)%bU}dVKvjr`-!k^>>ps+#-z87Bbam_ zE9`ocUNGdshd~e9JgBtyjg!asr^Oi-==Ej`Yy(?r!@2o1wiKGLT_KMg6>msw{TGJ9 zH9V1<;@=l;^^sy)D)!M(2_`sJ=@Xq9n>Q?iG8|XcJ(X;g>3Q_TQjB{HMw1SMmQ@9D zym*Z8?@Tvu_UxW~Y8;130nO?0Vk&c}+e7diBfOkn`-S@nnyFRNs0>q5D1ABh(6?1c zwVZSX)RF}ZrvA7~SY$(FD1S3dfHShDGjsFgsp2w{OSiL2Thi^_~Eg` zeP@Dc%3x4rRwMkRf;jCf1$+q}h!yS$czQAN}NqbZYVH#`0a-;caqT@tzXzg&0 zM`!pv2vftbH{j-3HrF@?3t&yhtIxhAq~5-|ieWD^D~7+iW{<%U>3vl3lk>#Un@FlS zB!COU+;F-ms7W}H&0Rvova)Rw!;`XBLP^cht2Rn`Q59Pm-M}4%7O(bs%S5f4(>ZW* z)(g^qIqQ%Y)Zs1shDfd$8xM}Hj1@7yK@cZ>uP)E~Lz&U+tAxjNxVcrqc#Sl*PYN8o z14h^n?6SDx#KYh`r~40*Q-rMhD4VfX-#*{1qrSF<_W&lGeGmLX8+rCLA8F)@-PmP6 z<$OnlHQs=bW9eU(olTi6R?r#;OuO-&kmU4S{DEJkply>DPZ zHh+>WPxv`Uq&|qL9K8brFLiP+Vex<1a`;6mPfw;u9B;oC30rVWw6yi+Wp5Hkd7C$h zSL}6dK(5rEmaP1484L#}^yC zr=*&SlIJxQ;~OBsW?@oT^=Pc;S)e=r7b0TTt0Z_(ZW_f?w;<>`Tiij)d03 zB>UvR$DHoJLo3E&)bHZY_If8Jdcauces5;2xuC0zDkFumj8_^|bv&F38BG%nKnM29 z!`vm_&u4&PjZ87!LxaV^rDelo{8dD_Z$Vr|LqQIHVhO|WG#!65RP5IE)Q7v6a4pKS z;$`$d*975aFriU*pjkApqm~bYF`LH66N!WTtP4<}va#z17P$@KJ|*6KnCFTDM_glz ztRD#UzCoGL`k6iM@GbLx%7H?iP}N?YWLZBRVEhl6eldJ>!(;438Z5bQotb~~wm38J z)-UtW66_ubVe8I&no$0RcY=tt_KzPK<_D{R5Ydb~`mGa_kNjdh__a_9oCAbiPX~Ib zOXW~3+S1UlT z7+Z|ub01Bnmeg^JV2dJWlsl7`^^_cZc0>2y{-P(zs$RgIPw+};=v#&DqPSW=iDj^(A$WjFbA80 zKo^_#ycTvDOi8^3W09GYg3VCiR^XE~+M=DtSI*wOVseGpeeJ@fYg>LcG5KmAYz{$> zchTgk$=q7xW~U`KFl$o>!hs}#B!K1t%?Bc9bmBnNUIl|i&?|~7s^R7GG^yj4Ony2F z+h@xz(~jY~k6{H39Ay=K7U38TSC&xx0jD)BM3q+^5nu7|IP#469yP+!<{))q2^v*WHnnw`6a@`XPN4+w;7HM+Tg$;Z zUAdwffwJJqIJOy9KQ|)>iX6%SR+&J-lp`pTvJZ{G>fIFFvw?&_BA^EB2jzN26oOF@ z3%s}hg;h9|5CMpnl3K zSb$vxt0ZSoALR_1f%tIYxg|vdCdL}Dh^wI7qXLf$zFH)RVN zhTmuk5gh>WTZO{GXA1aA1!{tcQxLrLIgmYe6$H78YRDJ^1;aBT&_jv|dIrDA6cy9} zzvQlx1@LhJ%UPY2AJ8ZW(FD(Wf%rfk@J1W(R|nTsK!HG{|4?}L6t1V?J+I+CuOKyj zDR#(?5sF^G`(`LRkk4G?2#{6-k`70cAZs{;3ji_&8UcC*&)-lEA#b=A0$(q9)`1g%?QJ39jWp=@fnR00KJ08gB=Ls+$W*Ko?M=yn5MOj>dyG5k%gKqCwj( zCj2LL5e4k_nJfxrq- z=5^wqb9v?mQj@V50;W&EDHk}og0~*H z_l5gNphO@)pg5pP@DH^M(u06fh(lg0K&)}p1;2L2YtiI>E<|LRGDiiRVCNbh*ML_G zpkfNHoVE}W987}48y`?gpmdRMRhcUdWZCY6YqC^Df$U^P6oS9!aNiDWTH)Rqu500X z0)A(KI)EG~hENI!@UIJ{lt2K7LTOYBT;(`4IL9`NNI*XSIW3xFh_r#gUr&=uuQ*wW6=yn`8$^Y zbAJO&7vDN{?#BzajDOL*e8c2|`r_{{Ub`n6LRFf;m%YZug)?vPv}aeM7P2KuL}4*ngD{^gFv zJu8F0->hx4CetUcUby7+!QT`YT)o58T4aT&6w;99MoH`bJ^#WN(CED>)7@qseWJw< zTB_gdP$XEVQ|>5gF_~JrTANPoF}`}~$}c-Ff|cIeCI^i#-aWPZz$q=Qbhvn9Q}3%cSOMF9(?q;)@_$k>(N2L9L zycId3eNPO(a_0hLSnb}!^x&)eT}8`{Hf^+Z3zRa(pqr#9&_f8L<8eoH*skgS7X-FLm(zwfMtI!2@Cgk4h1XcdcH*?pkB zNoncx@>4yEit_zGVQ=EXy}1dVP^^QlpmnAmMxv(@0At~bpSw*_8T zl-&ZLIg@j%BN5}C40Z!9p^O}%(QCM?`jaQz+veT+)nbZw*VIwF_cn}ebbi=4S4OlY zt)b8zrqRFEzPIfA=auLA^Te!vlT-LXeCs-QC`;?#6*{TZi@)F$8a?RF8`tB@21fh# zmn2vE8b4aIpVzOb$=!xYJ-yU$@0EmR7&?{eU?Q-yW`@*BDIE`(K*(CpuWYGMj{p-AcN!&}8I51Z__Z~QX5Z@0GJN%;cY>#WEcSMs+t@c1_ zfZO-qZG9=pN?!fVnU|8-a#GG?H2UHCjy2XB)O{jzEsUGRiWGiy-W|%=i8gN8IaiDI zjzcXzj^i}CFXNHL{vUrmG2JO+YAi{M-OjtFr44ITH}2lLab^F?f0WO~{a>H~nqDN- zGrs-9&$Y)})APlna%J?bOU3{3V*ZBZ^Q6X{;8zzRb!z{YYqUwc(q{5&yX>KFFtM%Z zcevKxAWfbIScM{qL{@$J_ZGbMemkASS^Y8m5m>vO6+?(5IMMOZA54_qm7N)#=W2gm84H)_z{e-zfF%h89tk_Z+@;Un}zq2 z^l557-}XNA$1<${oCv8AfA9PfvV){gnaJ<{9Fxzc#=gMsJt80hNdlYMAN}0}{O{X% zyr1sP!6W}z;m)7?NoPJpgQQQTIJWmagO8)4`?;v}AECO+0RxggW#Y2`b4+wT$3)C; zusIphf}~HG)E)jDlZ~Haa!R{aCje4`Bv20W(O=QG@0q-vSkIwH=cd-5O_#izo%NQI z2$2LDE~}hrW@VNBWV6|1L - - - - Template: White (2014-02-28 09:41) - M6.2.2-1878-1 - - diff --git a/libuv/docs/src/static/diagrams.key/Metadata/DocumentIdentifier b/libuv/docs/src/static/diagrams.key/Metadata/DocumentIdentifier deleted file mode 100644 index ddb18f0..0000000 --- a/libuv/docs/src/static/diagrams.key/Metadata/DocumentIdentifier +++ /dev/null @@ -1 +0,0 @@ -F69E9CD9-EEF1-4223-9DA4-A1EA7FE112BA \ No newline at end of file diff --git a/libuv/docs/src/static/diagrams.key/Metadata/Properties.plist b/libuv/docs/src/static/diagrams.key/Metadata/Properties.plist deleted file mode 100644 index 74bc69317de4fc4ae87da8c71d1615385d70d1f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 zcmYc)$jK}&F)+B!$i&RT%Er#Y$;HjX%NJ3UT9#RynV%Pylb@WJlNytfpIn-onpYAU z>gf_)mRbao1G6)WeM@snG6NFRQ{x2$(=u~X-SUfa6HCG%Y9fm>5{ptnD&qyz4Xmup z3`|U&4UCL+jhsv!bxoX{O?55Y%*}M23@scDT}@4m%q)yTQ}g2eeBuRE+{`RpEuCE~ zbzNQE40TP6fZ8lw98GkADjm(;Tn!D4oE(A5h%u8h)KJez&wxln88{fk859`Q8B7=) l75HPbcg8&-~3o|P_8#_BY8yg!t2RA1> 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

2KUY7yz-7_`p(lc`HgEPC5(QDJ#Lr#t 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 Y>c{6t4Sw{%j~@8Z1FJo-=6lco0p?d?5&!@I diff --git a/libuv/docs/src/static/favicon.ico b/libuv/docs/src/static/favicon.ico deleted file mode 100644 index 2c40694cd282ff3d0db2c495c23f3beca40c17fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 zcmeI3J!oE47{^bE(6L>dlR?3;f?AMDoTP|gC(+GON^N!X18j$O66~NjsaQd=(xSMC zL)z#dI2x#nOSZwR!m3x7+NM_xVsKV)SFb<|EpaeeASlj(+q}%U2&yoPD*;Lm&Ey_UhK~ z_4og5Xr+DRP_sk!#l?%;Y8ZWV*^pfGuZHnl8XJu9Yiq#y(Ek|pp24Oo_K^744vEX% z&VG-&+OikQSk~Z?A1-gL|EIsK{O26#L%+nJ84qMmd3jchtG#hWC&Nw%vpc1cK(nJjju2B;@Lx= zdb$)`edHiu4|NQ8|RdXF;=Y~_aQds zM-KRv4+sy(@ZfC92gKI6;H2E;6K(qX-UX~%j0>mIj{8FYL$I_j$2@PzKi(Uqj$`zO z#4L5N(?>*Nx>uvT*8k+fg{fl8rQ8qrD`mB~$cC=BvHB2S^BB zo_6@a7e4Xb##oy-YQyg-4(0Y@Zd<>ncpwkI?I z#(nm2&Rk}dLs#8nOwJ%bGaw_^Z@yn{`_@$KJMZd%`rc^{L%16&qPZZ8yy&yXqHe8E zp4v^DL$+J0`R4$#?Y4)|~%PII2w6MbC!=E%c&^QfI|YuvXc=!{*1Y4?qsL2`h* z$o-C7&RrON*x$_I{LppiJ7@Zwgz&bZi%;^2d%G)#^1eckdtnIwS=8R#;7=cfx8p9} zQLZlb%I^mM$iuvbtO1gd?cjn{}^(OGIzMtu55|%vU*fmf#WDj|cBmZ3E&ULE z^DEBxoq?V3_c`Snao@w)J2O5Htv$MtTiLJ8Ps<-ZzF*?kddj;CIdjfw6M5D+I$xWc zhQGY!fnWQebuQ(MwWVLXOObWGTVP`@;#mIJ;fE&YSX18%)QRXmF?Jtf*EjFnSpH>g zJddJ&XMw)QMPI~mOn)r@Xj{7voZk&B*MxEA-}y5>b8-Dk``zH!=QGwGJ^1uJznGg9 z|1$TION}?{8}*_O`a|A9*KPP*J_HMHIpwG&wQL$C-RQE%*QsQ_U2XFL*_t?GB)|p zoTFdrz*D)r%G#KV^AR(r&U;7R5&a!b^kMysGZx8@XQ0nP@+p19c=pHC-WnK_JFI=lYsh%FxQ85$b^U(; zyvsXi2xoM5o45Q$;<>lsOiqr6az+ok?5p#43dY+lgu~eV!XCTR_3p~Qe5cL4mf+UW zmb(1x$@eO7H!864g(1E`#3$lv{^Anj&Bm9F=&$E59)YX*%ShmI{=yP?CV$TeB#Hb_ z`=8LKQ_5!f8%mqFnE#H7@%+D--L>Nu^WRyOxXOI~8?33Y;%}S(z@z1r`L%pA%3o~Y ik^kAsb9poGOsuT~U&vzKIyJc*jGI?B>sZ!zWBd=1T7Db= diff --git a/libuv/docs/src/static/logo.png b/libuv/docs/src/static/logo.png deleted file mode 100644 index eaf1eee577b6774c345d5e21be51130a23b16627..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33545 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 W3*P8um*8Y!7&$3rXpMwP!2bZAf*ghb diff --git a/libuv/docs/src/static/loop_iteration.png b/libuv/docs/src/static/loop_iteration.png deleted file mode 100644 index e769cf338b4456ea688b0abf888b646a4253e0eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80528 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 diff --git a/libuv/img/logos.svg b/libuv/img/logos.svg deleted file mode 100644 index d6185f8..0000000 --- a/libuv/img/logos.svg +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/libuv/include/uv.h b/libuv/include/uv.h deleted file mode 100644 index 77503bd..0000000 --- a/libuv/include/uv.h +++ /dev/null @@ -1,1846 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* See https://github.com/libuv/libuv#documentation for documentation. */ - -#ifndef UV_H -#define UV_H -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(BUILDING_UV_SHARED) && defined(USING_UV_SHARED) -#error "Define either BUILDING_UV_SHARED or USING_UV_SHARED, not both." -#endif - -#ifdef _WIN32 - /* Windows - set up dll import/export decorators. */ -# if defined(BUILDING_UV_SHARED) - /* Building shared library. */ -# define UV_EXTERN __declspec(dllexport) -# elif defined(USING_UV_SHARED) - /* Using shared library. */ -# define UV_EXTERN __declspec(dllimport) -# else - /* Building static library. */ -# define UV_EXTERN /* nothing */ -# endif -#elif __GNUC__ >= 4 -# define UV_EXTERN __attribute__((visibility("default"))) -#else -# define UV_EXTERN /* nothing */ -#endif - -#include "uv/errno.h" -#include "uv/version.h" -#include -#include - -#if defined(_MSC_VER) && _MSC_VER < 1600 -# include "uv/stdint-msvc2008.h" -#else -# include -#endif - -#if defined(_WIN32) -# include "uv/win.h" -#else -# include "uv/unix.h" -#endif - -/* Expand this list if necessary. */ -#define UV_ERRNO_MAP(XX) \ - XX(E2BIG, "argument list too long") \ - XX(EACCES, "permission denied") \ - XX(EADDRINUSE, "address already in use") \ - XX(EADDRNOTAVAIL, "address not available") \ - XX(EAFNOSUPPORT, "address family not supported") \ - XX(EAGAIN, "resource temporarily unavailable") \ - XX(EAI_ADDRFAMILY, "address family not supported") \ - XX(EAI_AGAIN, "temporary failure") \ - XX(EAI_BADFLAGS, "bad ai_flags value") \ - XX(EAI_BADHINTS, "invalid value for hints") \ - XX(EAI_CANCELED, "request canceled") \ - XX(EAI_FAIL, "permanent failure") \ - XX(EAI_FAMILY, "ai_family not supported") \ - XX(EAI_MEMORY, "out of memory") \ - XX(EAI_NODATA, "no address") \ - XX(EAI_NONAME, "unknown node or service") \ - XX(EAI_OVERFLOW, "argument buffer overflow") \ - XX(EAI_PROTOCOL, "resolved protocol is unknown") \ - XX(EAI_SERVICE, "service not available for socket type") \ - XX(EAI_SOCKTYPE, "socket type not supported") \ - XX(EALREADY, "connection already in progress") \ - XX(EBADF, "bad file descriptor") \ - XX(EBUSY, "resource busy or locked") \ - XX(ECANCELED, "operation canceled") \ - XX(ECHARSET, "invalid Unicode character") \ - XX(ECONNABORTED, "software caused connection abort") \ - XX(ECONNREFUSED, "connection refused") \ - XX(ECONNRESET, "connection reset by peer") \ - XX(EDESTADDRREQ, "destination address required") \ - XX(EEXIST, "file already exists") \ - XX(EFAULT, "bad address in system call argument") \ - XX(EFBIG, "file too large") \ - XX(EHOSTUNREACH, "host is unreachable") \ - XX(EINTR, "interrupted system call") \ - XX(EINVAL, "invalid argument") \ - XX(EIO, "i/o error") \ - XX(EISCONN, "socket is already connected") \ - XX(EISDIR, "illegal operation on a directory") \ - XX(ELOOP, "too many symbolic links encountered") \ - XX(EMFILE, "too many open files") \ - XX(EMSGSIZE, "message too long") \ - XX(ENAMETOOLONG, "name too long") \ - XX(ENETDOWN, "network is down") \ - XX(ENETUNREACH, "network is unreachable") \ - XX(ENFILE, "file table overflow") \ - XX(ENOBUFS, "no buffer space available") \ - XX(ENODEV, "no such device") \ - XX(ENOENT, "no such file or directory") \ - XX(ENOMEM, "not enough memory") \ - XX(ENONET, "machine is not on the network") \ - XX(ENOPROTOOPT, "protocol not available") \ - XX(ENOSPC, "no space left on device") \ - XX(ENOSYS, "function not implemented") \ - XX(ENOTCONN, "socket is not connected") \ - XX(ENOTDIR, "not a directory") \ - XX(ENOTEMPTY, "directory not empty") \ - XX(ENOTSOCK, "socket operation on non-socket") \ - XX(ENOTSUP, "operation not supported on socket") \ - XX(EOVERFLOW, "value too large for defined data type") \ - XX(EPERM, "operation not permitted") \ - XX(EPIPE, "broken pipe") \ - XX(EPROTO, "protocol error") \ - XX(EPROTONOSUPPORT, "protocol not supported") \ - XX(EPROTOTYPE, "protocol wrong type for socket") \ - XX(ERANGE, "result too large") \ - XX(EROFS, "read-only file system") \ - XX(ESHUTDOWN, "cannot send after transport endpoint shutdown") \ - XX(ESPIPE, "invalid seek") \ - XX(ESRCH, "no such process") \ - XX(ETIMEDOUT, "connection timed out") \ - XX(ETXTBSY, "text file is busy") \ - XX(EXDEV, "cross-device link not permitted") \ - XX(UNKNOWN, "unknown error") \ - XX(EOF, "end of file") \ - XX(ENXIO, "no such device or address") \ - XX(EMLINK, "too many links") \ - XX(EHOSTDOWN, "host is down") \ - XX(EREMOTEIO, "remote I/O error") \ - XX(ENOTTY, "inappropriate ioctl for device") \ - XX(EFTYPE, "inappropriate file type or format") \ - XX(EILSEQ, "illegal byte sequence") \ - XX(ESOCKTNOSUPPORT, "socket type not supported") \ - -#define UV_HANDLE_TYPE_MAP(XX) \ - XX(ASYNC, async) \ - XX(CHECK, check) \ - XX(FS_EVENT, fs_event) \ - XX(FS_POLL, fs_poll) \ - XX(HANDLE, handle) \ - XX(IDLE, idle) \ - XX(NAMED_PIPE, pipe) \ - XX(POLL, poll) \ - XX(PREPARE, prepare) \ - XX(PROCESS, process) \ - XX(STREAM, stream) \ - XX(TCP, tcp) \ - XX(TIMER, timer) \ - XX(TTY, tty) \ - XX(UDP, udp) \ - XX(SIGNAL, signal) \ - -#define UV_REQ_TYPE_MAP(XX) \ - XX(REQ, req) \ - XX(CONNECT, connect) \ - XX(WRITE, write) \ - XX(SHUTDOWN, shutdown) \ - XX(UDP_SEND, udp_send) \ - XX(FS, fs) \ - XX(WORK, work) \ - XX(GETADDRINFO, getaddrinfo) \ - XX(GETNAMEINFO, getnameinfo) \ - XX(RANDOM, random) \ - -typedef enum { -#define XX(code, _) UV_ ## code = UV__ ## code, - UV_ERRNO_MAP(XX) -#undef XX - UV_ERRNO_MAX = UV__EOF - 1 -} uv_errno_t; - -typedef enum { - UV_UNKNOWN_HANDLE = 0, -#define XX(uc, lc) UV_##uc, - UV_HANDLE_TYPE_MAP(XX) -#undef XX - UV_FILE, - UV_HANDLE_TYPE_MAX -} uv_handle_type; - -typedef enum { - UV_UNKNOWN_REQ = 0, -#define XX(uc, lc) UV_##uc, - UV_REQ_TYPE_MAP(XX) -#undef XX - UV_REQ_TYPE_PRIVATE - UV_REQ_TYPE_MAX -} uv_req_type; - - -/* Handle types. */ -typedef struct uv_loop_s uv_loop_t; -typedef struct uv_handle_s uv_handle_t; -typedef struct uv_dir_s uv_dir_t; -typedef struct uv_stream_s uv_stream_t; -typedef struct uv_tcp_s uv_tcp_t; -typedef struct uv_udp_s uv_udp_t; -typedef struct uv_pipe_s uv_pipe_t; -typedef struct uv_tty_s uv_tty_t; -typedef struct uv_poll_s uv_poll_t; -typedef struct uv_timer_s uv_timer_t; -typedef struct uv_prepare_s uv_prepare_t; -typedef struct uv_check_s uv_check_t; -typedef struct uv_idle_s uv_idle_t; -typedef struct uv_async_s uv_async_t; -typedef struct uv_process_s uv_process_t; -typedef struct uv_fs_event_s uv_fs_event_t; -typedef struct uv_fs_poll_s uv_fs_poll_t; -typedef struct uv_signal_s uv_signal_t; - -/* Request types. */ -typedef struct uv_req_s uv_req_t; -typedef struct uv_getaddrinfo_s uv_getaddrinfo_t; -typedef struct uv_getnameinfo_s uv_getnameinfo_t; -typedef struct uv_shutdown_s uv_shutdown_t; -typedef struct uv_write_s uv_write_t; -typedef struct uv_connect_s uv_connect_t; -typedef struct uv_udp_send_s uv_udp_send_t; -typedef struct uv_fs_s uv_fs_t; -typedef struct uv_work_s uv_work_t; -typedef struct uv_random_s uv_random_t; - -/* None of the above. */ -typedef struct uv_env_item_s uv_env_item_t; -typedef struct uv_cpu_info_s uv_cpu_info_t; -typedef struct uv_interface_address_s uv_interface_address_t; -typedef struct uv_dirent_s uv_dirent_t; -typedef struct uv_passwd_s uv_passwd_t; -typedef struct uv_utsname_s uv_utsname_t; -typedef struct uv_statfs_s uv_statfs_t; - -typedef enum { - UV_LOOP_BLOCK_SIGNAL = 0, - UV_METRICS_IDLE_TIME -} uv_loop_option; - -typedef enum { - UV_RUN_DEFAULT = 0, - UV_RUN_ONCE, - UV_RUN_NOWAIT -} uv_run_mode; - - -UV_EXTERN unsigned int uv_version(void); -UV_EXTERN const char* uv_version_string(void); - -typedef void* (*uv_malloc_func)(size_t size); -typedef void* (*uv_realloc_func)(void* ptr, size_t size); -typedef void* (*uv_calloc_func)(size_t count, size_t size); -typedef void (*uv_free_func)(void* ptr); - -UV_EXTERN void uv_library_shutdown(void); - -UV_EXTERN int uv_replace_allocator(uv_malloc_func malloc_func, - uv_realloc_func realloc_func, - uv_calloc_func calloc_func, - uv_free_func free_func); - -UV_EXTERN uv_loop_t* uv_default_loop(void); -UV_EXTERN int uv_loop_init(uv_loop_t* loop); -UV_EXTERN int uv_loop_close(uv_loop_t* loop); -/* - * NOTE: - * This function is DEPRECATED (to be removed after 0.12), users should - * allocate the loop manually and use uv_loop_init instead. - */ -UV_EXTERN uv_loop_t* uv_loop_new(void); -/* - * NOTE: - * This function is DEPRECATED (to be removed after 0.12). Users should use - * uv_loop_close and free the memory manually instead. - */ -UV_EXTERN void uv_loop_delete(uv_loop_t*); -UV_EXTERN size_t uv_loop_size(void); -UV_EXTERN int uv_loop_alive(const uv_loop_t* loop); -UV_EXTERN int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...); -UV_EXTERN int uv_loop_fork(uv_loop_t* loop); - -UV_EXTERN int uv_run(uv_loop_t*, uv_run_mode mode); -UV_EXTERN void uv_stop(uv_loop_t*); - -UV_EXTERN void uv_ref(uv_handle_t*); -UV_EXTERN void uv_unref(uv_handle_t*); -UV_EXTERN int uv_has_ref(const uv_handle_t*); - -UV_EXTERN void uv_update_time(uv_loop_t*); -UV_EXTERN uint64_t uv_now(const uv_loop_t*); - -UV_EXTERN int uv_backend_fd(const uv_loop_t*); -UV_EXTERN int uv_backend_timeout(const uv_loop_t*); - -typedef void (*uv_alloc_cb)(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf); -typedef void (*uv_read_cb)(uv_stream_t* stream, - ssize_t nread, - const uv_buf_t* buf); -typedef void (*uv_write_cb)(uv_write_t* req, int status); -typedef void (*uv_connect_cb)(uv_connect_t* req, int status); -typedef void (*uv_shutdown_cb)(uv_shutdown_t* req, int status); -typedef void (*uv_connection_cb)(uv_stream_t* server, int status); -typedef void (*uv_close_cb)(uv_handle_t* handle); -typedef void (*uv_poll_cb)(uv_poll_t* handle, int status, int events); -typedef void (*uv_timer_cb)(uv_timer_t* handle); -typedef void (*uv_async_cb)(uv_async_t* handle); -typedef void (*uv_prepare_cb)(uv_prepare_t* handle); -typedef void (*uv_check_cb)(uv_check_t* handle); -typedef void (*uv_idle_cb)(uv_idle_t* handle); -typedef void (*uv_exit_cb)(uv_process_t*, int64_t exit_status, int term_signal); -typedef void (*uv_walk_cb)(uv_handle_t* handle, void* arg); -typedef void (*uv_fs_cb)(uv_fs_t* req); -typedef void (*uv_work_cb)(uv_work_t* req); -typedef void (*uv_after_work_cb)(uv_work_t* req, int status); -typedef void (*uv_getaddrinfo_cb)(uv_getaddrinfo_t* req, - int status, - struct addrinfo* res); -typedef void (*uv_getnameinfo_cb)(uv_getnameinfo_t* req, - int status, - const char* hostname, - const char* service); -typedef void (*uv_random_cb)(uv_random_t* req, - int status, - void* buf, - size_t buflen); - -typedef struct { - long tv_sec; - long tv_nsec; -} uv_timespec_t; - - -typedef struct { - uint64_t st_dev; - uint64_t st_mode; - uint64_t st_nlink; - uint64_t st_uid; - uint64_t st_gid; - uint64_t st_rdev; - uint64_t st_ino; - uint64_t st_size; - uint64_t st_blksize; - uint64_t st_blocks; - uint64_t st_flags; - uint64_t st_gen; - uv_timespec_t st_atim; - uv_timespec_t st_mtim; - uv_timespec_t st_ctim; - uv_timespec_t st_birthtim; -} uv_stat_t; - - -typedef void (*uv_fs_event_cb)(uv_fs_event_t* handle, - const char* filename, - int events, - int status); - -typedef void (*uv_fs_poll_cb)(uv_fs_poll_t* handle, - int status, - const uv_stat_t* prev, - const uv_stat_t* curr); - -typedef void (*uv_signal_cb)(uv_signal_t* handle, int signum); - - -typedef enum { - UV_LEAVE_GROUP = 0, - UV_JOIN_GROUP -} uv_membership; - - -UV_EXTERN int uv_translate_sys_error(int sys_errno); - -UV_EXTERN const char* uv_strerror(int err); -UV_EXTERN char* uv_strerror_r(int err, char* buf, size_t buflen); - -UV_EXTERN const char* uv_err_name(int err); -UV_EXTERN char* uv_err_name_r(int err, char* buf, size_t buflen); - - -#define UV_REQ_FIELDS \ - /* public */ \ - void* data; \ - /* read-only */ \ - uv_req_type type; \ - /* private */ \ - void* reserved[6]; \ - UV_REQ_PRIVATE_FIELDS \ - -/* Abstract base class of all requests. */ -struct uv_req_s { - UV_REQ_FIELDS -}; - - -/* Platform-specific request types. */ -UV_PRIVATE_REQ_TYPES - - -UV_EXTERN int uv_shutdown(uv_shutdown_t* req, - uv_stream_t* handle, - uv_shutdown_cb cb); - -struct uv_shutdown_s { - UV_REQ_FIELDS - uv_stream_t* handle; - uv_shutdown_cb cb; - UV_SHUTDOWN_PRIVATE_FIELDS -}; - - -#define UV_HANDLE_FIELDS \ - /* public */ \ - void* data; \ - /* read-only */ \ - uv_loop_t* loop; \ - uv_handle_type type; \ - /* private */ \ - uv_close_cb close_cb; \ - void* handle_queue[2]; \ - union { \ - int fd; \ - void* reserved[4]; \ - } u; \ - UV_HANDLE_PRIVATE_FIELDS \ - -/* The abstract base class of all handles. */ -struct uv_handle_s { - UV_HANDLE_FIELDS -}; - -UV_EXTERN size_t uv_handle_size(uv_handle_type type); -UV_EXTERN uv_handle_type uv_handle_get_type(const uv_handle_t* handle); -UV_EXTERN const char* uv_handle_type_name(uv_handle_type type); -UV_EXTERN void* uv_handle_get_data(const uv_handle_t* handle); -UV_EXTERN uv_loop_t* uv_handle_get_loop(const uv_handle_t* handle); -UV_EXTERN void uv_handle_set_data(uv_handle_t* handle, void* data); - -UV_EXTERN size_t uv_req_size(uv_req_type type); -UV_EXTERN void* uv_req_get_data(const uv_req_t* req); -UV_EXTERN void uv_req_set_data(uv_req_t* req, void* data); -UV_EXTERN uv_req_type uv_req_get_type(const uv_req_t* req); -UV_EXTERN const char* uv_req_type_name(uv_req_type type); - -UV_EXTERN int uv_is_active(const uv_handle_t* handle); - -UV_EXTERN void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg); - -/* Helpers for ad hoc debugging, no API/ABI stability guaranteed. */ -UV_EXTERN void uv_print_all_handles(uv_loop_t* loop, FILE* stream); -UV_EXTERN void uv_print_active_handles(uv_loop_t* loop, FILE* stream); - -UV_EXTERN void uv_close(uv_handle_t* handle, uv_close_cb close_cb); - -UV_EXTERN int uv_send_buffer_size(uv_handle_t* handle, int* value); -UV_EXTERN int uv_recv_buffer_size(uv_handle_t* handle, int* value); - -UV_EXTERN int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd); - -UV_EXTERN uv_buf_t uv_buf_init(char* base, unsigned int len); - -UV_EXTERN int uv_pipe(uv_file fds[2], int read_flags, int write_flags); -UV_EXTERN int uv_socketpair(int type, - int protocol, - uv_os_sock_t socket_vector[2], - int flags0, - int flags1); - -#define UV_STREAM_FIELDS \ - /* number of bytes queued for writing */ \ - size_t write_queue_size; \ - uv_alloc_cb alloc_cb; \ - uv_read_cb read_cb; \ - /* private */ \ - UV_STREAM_PRIVATE_FIELDS - -/* - * uv_stream_t is a subclass of uv_handle_t. - * - * uv_stream is an abstract class. - * - * uv_stream_t is the parent class of uv_tcp_t, uv_pipe_t and uv_tty_t. - */ -struct uv_stream_s { - UV_HANDLE_FIELDS - UV_STREAM_FIELDS -}; - -UV_EXTERN size_t uv_stream_get_write_queue_size(const uv_stream_t* stream); - -UV_EXTERN int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb); -UV_EXTERN int uv_accept(uv_stream_t* server, uv_stream_t* client); - -UV_EXTERN int uv_read_start(uv_stream_t*, - uv_alloc_cb alloc_cb, - uv_read_cb read_cb); -UV_EXTERN int uv_read_stop(uv_stream_t*); - -UV_EXTERN int uv_write(uv_write_t* req, - uv_stream_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - uv_write_cb cb); -UV_EXTERN int uv_write2(uv_write_t* req, - uv_stream_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - uv_stream_t* send_handle, - uv_write_cb cb); -UV_EXTERN int uv_try_write(uv_stream_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs); -UV_EXTERN int uv_try_write2(uv_stream_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - uv_stream_t* send_handle); - -/* uv_write_t is a subclass of uv_req_t. */ -struct uv_write_s { - UV_REQ_FIELDS - uv_write_cb cb; - uv_stream_t* send_handle; /* TODO: make private and unix-only in v2.x. */ - uv_stream_t* handle; - UV_WRITE_PRIVATE_FIELDS -}; - - -UV_EXTERN int uv_is_readable(const uv_stream_t* handle); -UV_EXTERN int uv_is_writable(const uv_stream_t* handle); - -UV_EXTERN int uv_stream_set_blocking(uv_stream_t* handle, int blocking); - -UV_EXTERN int uv_is_closing(const uv_handle_t* handle); - - -/* - * uv_tcp_t is a subclass of uv_stream_t. - * - * Represents a TCP stream or TCP server. - */ -struct uv_tcp_s { - UV_HANDLE_FIELDS - UV_STREAM_FIELDS - UV_TCP_PRIVATE_FIELDS -}; - -UV_EXTERN int uv_tcp_init(uv_loop_t*, uv_tcp_t* handle); -UV_EXTERN int uv_tcp_init_ex(uv_loop_t*, uv_tcp_t* handle, unsigned int flags); -UV_EXTERN int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock); -UV_EXTERN int uv_tcp_nodelay(uv_tcp_t* handle, int enable); -UV_EXTERN int uv_tcp_keepalive(uv_tcp_t* handle, - int enable, - unsigned int delay); -UV_EXTERN int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable); - -enum uv_tcp_flags { - /* Used with uv_tcp_bind, when an IPv6 address is used. */ - UV_TCP_IPV6ONLY = 1 -}; - -UV_EXTERN int uv_tcp_bind(uv_tcp_t* handle, - const struct sockaddr* addr, - unsigned int flags); -UV_EXTERN int uv_tcp_getsockname(const uv_tcp_t* handle, - struct sockaddr* name, - int* namelen); -UV_EXTERN int uv_tcp_getpeername(const uv_tcp_t* handle, - struct sockaddr* name, - int* namelen); -UV_EXTERN int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb); -UV_EXTERN int uv_tcp_connect(uv_connect_t* req, - uv_tcp_t* handle, - const struct sockaddr* addr, - uv_connect_cb cb); - -/* uv_connect_t is a subclass of uv_req_t. */ -struct uv_connect_s { - UV_REQ_FIELDS - uv_connect_cb cb; - uv_stream_t* handle; - UV_CONNECT_PRIVATE_FIELDS -}; - - -/* - * UDP support. - */ - -enum uv_udp_flags { - /* Disables dual stack mode. */ - UV_UDP_IPV6ONLY = 1, - /* - * Indicates message was truncated because read buffer was too small. The - * remainder was discarded by the OS. Used in uv_udp_recv_cb. - */ - UV_UDP_PARTIAL = 2, - /* - * Indicates if SO_REUSEADDR will be set when binding the handle. - * This sets the SO_REUSEPORT socket flag on the BSDs and OS X. On other - * Unix platforms, it sets the SO_REUSEADDR flag. What that means is that - * multiple threads or processes can bind to the same address without error - * (provided they all set the flag) but only the last one to bind will receive - * any traffic, in effect "stealing" the port from the previous listener. - */ - UV_UDP_REUSEADDR = 4, - /* - * Indicates that the message was received by recvmmsg, so the buffer provided - * must not be freed by the recv_cb callback. - */ - UV_UDP_MMSG_CHUNK = 8, - /* - * Indicates that the buffer provided has been fully utilized by recvmmsg and - * that it should now be freed by the recv_cb callback. When this flag is set - * in uv_udp_recv_cb, nread will always be 0 and addr will always be NULL. - */ - UV_UDP_MMSG_FREE = 16, - /* - * Indicates if IP_RECVERR/IPV6_RECVERR will be set when binding the handle. - * This sets IP_RECVERR for IPv4 and IPV6_RECVERR for IPv6 UDP sockets on - * Linux. This stops the Linux kernel from suppressing some ICMP error - * messages and enables full ICMP error reporting for faster failover. - * This flag is no-op on platforms other than Linux. - */ - UV_UDP_LINUX_RECVERR = 32, - /* - * Indicates that recvmmsg should be used, if available. - */ - UV_UDP_RECVMMSG = 256 -}; - -typedef void (*uv_udp_send_cb)(uv_udp_send_t* req, int status); -typedef void (*uv_udp_recv_cb)(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* buf, - const struct sockaddr* addr, - unsigned flags); - -/* uv_udp_t is a subclass of uv_handle_t. */ -struct uv_udp_s { - UV_HANDLE_FIELDS - /* read-only */ - /* - * Number of bytes queued for sending. This field strictly shows how much - * information is currently queued. - */ - size_t send_queue_size; - /* - * Number of send requests currently in the queue awaiting to be processed. - */ - size_t send_queue_count; - UV_UDP_PRIVATE_FIELDS -}; - -/* uv_udp_send_t is a subclass of uv_req_t. */ -struct uv_udp_send_s { - UV_REQ_FIELDS - uv_udp_t* handle; - uv_udp_send_cb cb; - UV_UDP_SEND_PRIVATE_FIELDS -}; - -UV_EXTERN int uv_udp_init(uv_loop_t*, uv_udp_t* handle); -UV_EXTERN int uv_udp_init_ex(uv_loop_t*, uv_udp_t* handle, unsigned int flags); -UV_EXTERN int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock); -UV_EXTERN int uv_udp_bind(uv_udp_t* handle, - const struct sockaddr* addr, - unsigned int flags); -UV_EXTERN int uv_udp_connect(uv_udp_t* handle, const struct sockaddr* addr); - -UV_EXTERN int uv_udp_getpeername(const uv_udp_t* handle, - struct sockaddr* name, - int* namelen); -UV_EXTERN int uv_udp_getsockname(const uv_udp_t* handle, - struct sockaddr* name, - int* namelen); -UV_EXTERN int uv_udp_set_membership(uv_udp_t* handle, - const char* multicast_addr, - const char* interface_addr, - uv_membership membership); -UV_EXTERN int uv_udp_set_source_membership(uv_udp_t* handle, - const char* multicast_addr, - const char* interface_addr, - const char* source_addr, - uv_membership membership); -UV_EXTERN int uv_udp_set_multicast_loop(uv_udp_t* handle, int on); -UV_EXTERN int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl); -UV_EXTERN int uv_udp_set_multicast_interface(uv_udp_t* handle, - const char* interface_addr); -UV_EXTERN int uv_udp_set_broadcast(uv_udp_t* handle, int on); -UV_EXTERN int uv_udp_set_ttl(uv_udp_t* handle, int ttl); -UV_EXTERN int uv_udp_send(uv_udp_send_t* req, - uv_udp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - const struct sockaddr* addr, - uv_udp_send_cb send_cb); -UV_EXTERN int uv_udp_try_send(uv_udp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - const struct sockaddr* addr); -UV_EXTERN int uv_udp_recv_start(uv_udp_t* handle, - uv_alloc_cb alloc_cb, - uv_udp_recv_cb recv_cb); -UV_EXTERN int uv_udp_using_recvmmsg(const uv_udp_t* handle); -UV_EXTERN int uv_udp_recv_stop(uv_udp_t* handle); -UV_EXTERN size_t uv_udp_get_send_queue_size(const uv_udp_t* handle); -UV_EXTERN size_t uv_udp_get_send_queue_count(const uv_udp_t* handle); - - -/* - * uv_tty_t is a subclass of uv_stream_t. - * - * Representing a stream for the console. - */ -struct uv_tty_s { - UV_HANDLE_FIELDS - UV_STREAM_FIELDS - UV_TTY_PRIVATE_FIELDS -}; - -typedef enum { - /* Initial/normal terminal mode */ - UV_TTY_MODE_NORMAL, - /* Raw input mode (On Windows, ENABLE_WINDOW_INPUT is also enabled) */ - UV_TTY_MODE_RAW, - /* Binary-safe I/O mode for IPC (Unix-only) */ - UV_TTY_MODE_IO -} uv_tty_mode_t; - -typedef enum { - /* - * The console supports handling of virtual terminal sequences - * (Windows10 new console, ConEmu) - */ - UV_TTY_SUPPORTED, - /* The console cannot process the virtual terminal sequence. (Legacy - * console) - */ - UV_TTY_UNSUPPORTED -} uv_tty_vtermstate_t; - - -UV_EXTERN int uv_tty_init(uv_loop_t*, uv_tty_t*, uv_file fd, int readable); -UV_EXTERN int uv_tty_set_mode(uv_tty_t*, uv_tty_mode_t mode); -UV_EXTERN int uv_tty_reset_mode(void); -UV_EXTERN int uv_tty_get_winsize(uv_tty_t*, int* width, int* height); -UV_EXTERN void uv_tty_set_vterm_state(uv_tty_vtermstate_t state); -UV_EXTERN int uv_tty_get_vterm_state(uv_tty_vtermstate_t* state); - -#ifdef __cplusplus -extern "C++" { - -inline int uv_tty_set_mode(uv_tty_t* handle, int mode) { - return uv_tty_set_mode(handle, static_cast(mode)); -} - -} -#endif - -UV_EXTERN uv_handle_type uv_guess_handle(uv_file file); - -/* - * uv_pipe_t is a subclass of uv_stream_t. - * - * Representing a pipe stream or pipe server. On Windows this is a Named - * Pipe. On Unix this is a Unix domain socket. - */ -struct uv_pipe_s { - UV_HANDLE_FIELDS - UV_STREAM_FIELDS - int ipc; /* non-zero if this pipe is used for passing handles */ - UV_PIPE_PRIVATE_FIELDS -}; - -UV_EXTERN int uv_pipe_init(uv_loop_t*, uv_pipe_t* handle, int ipc); -UV_EXTERN int uv_pipe_open(uv_pipe_t*, uv_file file); -UV_EXTERN int uv_pipe_bind(uv_pipe_t* handle, const char* name); -UV_EXTERN void uv_pipe_connect(uv_connect_t* req, - uv_pipe_t* handle, - const char* name, - uv_connect_cb cb); -UV_EXTERN int uv_pipe_getsockname(const uv_pipe_t* handle, - char* buffer, - size_t* size); -UV_EXTERN int uv_pipe_getpeername(const uv_pipe_t* handle, - char* buffer, - size_t* size); -UV_EXTERN void uv_pipe_pending_instances(uv_pipe_t* handle, int count); -UV_EXTERN int uv_pipe_pending_count(uv_pipe_t* handle); -UV_EXTERN uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle); -UV_EXTERN int uv_pipe_chmod(uv_pipe_t* handle, int flags); - - -struct uv_poll_s { - UV_HANDLE_FIELDS - uv_poll_cb poll_cb; - UV_POLL_PRIVATE_FIELDS -}; - -enum uv_poll_event { - UV_READABLE = 1, - UV_WRITABLE = 2, - UV_DISCONNECT = 4, - UV_PRIORITIZED = 8 -}; - -UV_EXTERN int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd); -UV_EXTERN int uv_poll_init_socket(uv_loop_t* loop, - uv_poll_t* handle, - uv_os_sock_t socket); -UV_EXTERN int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb); -UV_EXTERN int uv_poll_stop(uv_poll_t* handle); - - -struct uv_prepare_s { - UV_HANDLE_FIELDS - UV_PREPARE_PRIVATE_FIELDS -}; - -UV_EXTERN int uv_prepare_init(uv_loop_t*, uv_prepare_t* prepare); -UV_EXTERN int uv_prepare_start(uv_prepare_t* prepare, uv_prepare_cb cb); -UV_EXTERN int uv_prepare_stop(uv_prepare_t* prepare); - - -struct uv_check_s { - UV_HANDLE_FIELDS - UV_CHECK_PRIVATE_FIELDS -}; - -UV_EXTERN int uv_check_init(uv_loop_t*, uv_check_t* check); -UV_EXTERN int uv_check_start(uv_check_t* check, uv_check_cb cb); -UV_EXTERN int uv_check_stop(uv_check_t* check); - - -struct uv_idle_s { - UV_HANDLE_FIELDS - UV_IDLE_PRIVATE_FIELDS -}; - -UV_EXTERN int uv_idle_init(uv_loop_t*, uv_idle_t* idle); -UV_EXTERN int uv_idle_start(uv_idle_t* idle, uv_idle_cb cb); -UV_EXTERN int uv_idle_stop(uv_idle_t* idle); - - -struct uv_async_s { - UV_HANDLE_FIELDS - UV_ASYNC_PRIVATE_FIELDS -}; - -UV_EXTERN int uv_async_init(uv_loop_t*, - uv_async_t* async, - uv_async_cb async_cb); -UV_EXTERN int uv_async_send(uv_async_t* async); - - -/* - * uv_timer_t is a subclass of uv_handle_t. - * - * Used to get woken up at a specified time in the future. - */ -struct uv_timer_s { - UV_HANDLE_FIELDS - UV_TIMER_PRIVATE_FIELDS -}; - -UV_EXTERN int uv_timer_init(uv_loop_t*, uv_timer_t* handle); -UV_EXTERN int uv_timer_start(uv_timer_t* handle, - uv_timer_cb cb, - uint64_t timeout, - uint64_t repeat); -UV_EXTERN int uv_timer_stop(uv_timer_t* handle); -UV_EXTERN int uv_timer_again(uv_timer_t* handle); -UV_EXTERN void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat); -UV_EXTERN uint64_t uv_timer_get_repeat(const uv_timer_t* handle); -UV_EXTERN uint64_t uv_timer_get_due_in(const uv_timer_t* handle); - - -/* - * uv_getaddrinfo_t is a subclass of uv_req_t. - * - * Request object for uv_getaddrinfo. - */ -struct uv_getaddrinfo_s { - UV_REQ_FIELDS - /* read-only */ - uv_loop_t* loop; - /* struct addrinfo* addrinfo is marked as private, but it really isn't. */ - UV_GETADDRINFO_PRIVATE_FIELDS -}; - - -UV_EXTERN int uv_getaddrinfo(uv_loop_t* loop, - uv_getaddrinfo_t* req, - uv_getaddrinfo_cb getaddrinfo_cb, - const char* node, - const char* service, - const struct addrinfo* hints); -UV_EXTERN void uv_freeaddrinfo(struct addrinfo* ai); - - -/* -* uv_getnameinfo_t is a subclass of uv_req_t. -* -* Request object for uv_getnameinfo. -*/ -struct uv_getnameinfo_s { - UV_REQ_FIELDS - /* read-only */ - uv_loop_t* loop; - /* host and service are marked as private, but they really aren't. */ - UV_GETNAMEINFO_PRIVATE_FIELDS -}; - -UV_EXTERN int uv_getnameinfo(uv_loop_t* loop, - uv_getnameinfo_t* req, - uv_getnameinfo_cb getnameinfo_cb, - const struct sockaddr* addr, - int flags); - - -/* uv_spawn() options. */ -typedef enum { - UV_IGNORE = 0x00, - UV_CREATE_PIPE = 0x01, - UV_INHERIT_FD = 0x02, - UV_INHERIT_STREAM = 0x04, - - /* - * When UV_CREATE_PIPE is specified, UV_READABLE_PIPE and UV_WRITABLE_PIPE - * determine the direction of flow, from the child process' perspective. Both - * flags may be specified to create a duplex data stream. - */ - UV_READABLE_PIPE = 0x10, - UV_WRITABLE_PIPE = 0x20, - - /* - * When UV_CREATE_PIPE is specified, specifying UV_NONBLOCK_PIPE opens the - * handle in non-blocking mode in the child. This may cause loss of data, - * if the child is not designed to handle to encounter this mode, - * but can also be significantly more efficient. - */ - UV_NONBLOCK_PIPE = 0x40, - UV_OVERLAPPED_PIPE = 0x40 /* old name, for compatibility */ -} uv_stdio_flags; - -typedef struct uv_stdio_container_s { - uv_stdio_flags flags; - - union { - uv_stream_t* stream; - int fd; - } data; -} uv_stdio_container_t; - -typedef struct uv_process_options_s { - uv_exit_cb exit_cb; /* Called after the process exits. */ - const char* file; /* Path to program to execute. */ - /* - * Command line arguments. args[0] should be the path to the program. On - * Windows this uses CreateProcess which concatenates the arguments into a - * string this can cause some strange errors. See the note at - * windows_verbatim_arguments. - */ - char** args; - /* - * This will be set as the environ variable in the subprocess. If this is - * NULL then the parents environ will be used. - */ - char** env; - /* - * If non-null this represents a directory the subprocess should execute - * in. Stands for current working directory. - */ - const char* cwd; - /* - * Various flags that control how uv_spawn() behaves. See the definition of - * `enum uv_process_flags` below. - */ - unsigned int flags; - /* - * The `stdio` field points to an array of uv_stdio_container_t structs that - * describe the file descriptors that will be made available to the child - * process. The convention is that stdio[0] points to stdin, fd 1 is used for - * stdout, and fd 2 is stderr. - * - * Note that on windows file descriptors greater than 2 are available to the - * child process only if the child processes uses the MSVCRT runtime. - */ - int stdio_count; - uv_stdio_container_t* stdio; - /* - * Libuv can change the child process' user/group id. This happens only when - * the appropriate bits are set in the flags fields. This is not supported on - * windows; uv_spawn() will fail and set the error to UV_ENOTSUP. - */ - uv_uid_t uid; - uv_gid_t gid; -} uv_process_options_t; - -/* - * These are the flags that can be used for the uv_process_options.flags field. - */ -enum uv_process_flags { - /* - * Set the child process' user id. The user id is supplied in the `uid` field - * of the options struct. This does not work on windows; setting this flag - * will cause uv_spawn() to fail. - */ - UV_PROCESS_SETUID = (1 << 0), - /* - * Set the child process' group id. The user id is supplied in the `gid` - * field of the options struct. This does not work on windows; setting this - * flag will cause uv_spawn() to fail. - */ - UV_PROCESS_SETGID = (1 << 1), - /* - * Do not wrap any arguments in quotes, or perform any other escaping, when - * converting the argument list into a command line string. This option is - * only meaningful on Windows systems. On Unix it is silently ignored. - */ - UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS = (1 << 2), - /* - * Spawn the child process in a detached state - this will make it a process - * group leader, and will effectively enable the child to keep running after - * the parent exits. Note that the child process will still keep the - * parent's event loop alive unless the parent process calls uv_unref() on - * the child's process handle. - */ - UV_PROCESS_DETACHED = (1 << 3), - /* - * Hide the subprocess window that would normally be created. This option is - * only meaningful on Windows systems. On Unix it is silently ignored. - */ - UV_PROCESS_WINDOWS_HIDE = (1 << 4), - /* - * Hide the subprocess console window that would normally be created. This - * option is only meaningful on Windows systems. On Unix it is silently - * ignored. - */ - UV_PROCESS_WINDOWS_HIDE_CONSOLE = (1 << 5), - /* - * Hide the subprocess GUI window that would normally be created. This - * option is only meaningful on Windows systems. On Unix it is silently - * ignored. - */ - UV_PROCESS_WINDOWS_HIDE_GUI = (1 << 6) -}; - -/* - * uv_process_t is a subclass of uv_handle_t. - */ -struct uv_process_s { - UV_HANDLE_FIELDS - uv_exit_cb exit_cb; - int pid; - UV_PROCESS_PRIVATE_FIELDS -}; - -UV_EXTERN int uv_spawn(uv_loop_t* loop, - uv_process_t* handle, - const uv_process_options_t* options); -UV_EXTERN int uv_process_kill(uv_process_t*, int signum); -UV_EXTERN int uv_kill(int pid, int signum); -UV_EXTERN uv_pid_t uv_process_get_pid(const uv_process_t*); - - -/* - * uv_work_t is a subclass of uv_req_t. - */ -struct uv_work_s { - UV_REQ_FIELDS - uv_loop_t* loop; - uv_work_cb work_cb; - uv_after_work_cb after_work_cb; - UV_WORK_PRIVATE_FIELDS -}; - -UV_EXTERN int uv_queue_work(uv_loop_t* loop, - uv_work_t* req, - uv_work_cb work_cb, - uv_after_work_cb after_work_cb); - -UV_EXTERN int uv_cancel(uv_req_t* req); - - -struct uv_cpu_times_s { - uint64_t user; /* milliseconds */ - uint64_t nice; /* milliseconds */ - uint64_t sys; /* milliseconds */ - uint64_t idle; /* milliseconds */ - uint64_t irq; /* milliseconds */ -}; - -struct uv_cpu_info_s { - char* model; - int speed; - struct uv_cpu_times_s cpu_times; -}; - -struct uv_interface_address_s { - char* name; - char phys_addr[6]; - int is_internal; - union { - struct sockaddr_in address4; - struct sockaddr_in6 address6; - } address; - union { - struct sockaddr_in netmask4; - struct sockaddr_in6 netmask6; - } netmask; -}; - -struct uv_passwd_s { - char* username; - long uid; - long gid; - char* shell; - char* homedir; -}; - -struct uv_utsname_s { - char sysname[256]; - char release[256]; - char version[256]; - char machine[256]; - /* This struct does not contain the nodename and domainname fields present in - the utsname type. domainname is a GNU extension. Both fields are referred - to as meaningless in the docs. */ -}; - -struct uv_statfs_s { - uint64_t f_type; - uint64_t f_bsize; - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_bavail; - uint64_t f_files; - uint64_t f_ffree; - uint64_t f_spare[4]; -}; - -typedef enum { - UV_DIRENT_UNKNOWN, - UV_DIRENT_FILE, - UV_DIRENT_DIR, - UV_DIRENT_LINK, - UV_DIRENT_FIFO, - UV_DIRENT_SOCKET, - UV_DIRENT_CHAR, - UV_DIRENT_BLOCK -} uv_dirent_type_t; - -struct uv_dirent_s { - const char* name; - uv_dirent_type_t type; -}; - -UV_EXTERN char** uv_setup_args(int argc, char** argv); -UV_EXTERN int uv_get_process_title(char* buffer, size_t size); -UV_EXTERN int uv_set_process_title(const char* title); -UV_EXTERN int uv_resident_set_memory(size_t* rss); -UV_EXTERN int uv_uptime(double* uptime); -UV_EXTERN uv_os_fd_t uv_get_osfhandle(int fd); -UV_EXTERN int uv_open_osfhandle(uv_os_fd_t os_fd); - -typedef struct { - long tv_sec; - long tv_usec; -} uv_timeval_t; - -typedef struct { - int64_t tv_sec; - int32_t tv_usec; -} uv_timeval64_t; - -typedef struct { - uv_timeval_t ru_utime; /* user CPU time used */ - uv_timeval_t ru_stime; /* system CPU time used */ - uint64_t ru_maxrss; /* maximum resident set size */ - uint64_t ru_ixrss; /* integral shared memory size */ - uint64_t ru_idrss; /* integral unshared data size */ - uint64_t ru_isrss; /* integral unshared stack size */ - uint64_t ru_minflt; /* page reclaims (soft page faults) */ - uint64_t ru_majflt; /* page faults (hard page faults) */ - uint64_t ru_nswap; /* swaps */ - uint64_t ru_inblock; /* block input operations */ - uint64_t ru_oublock; /* block output operations */ - uint64_t ru_msgsnd; /* IPC messages sent */ - uint64_t ru_msgrcv; /* IPC messages received */ - uint64_t ru_nsignals; /* signals received */ - uint64_t ru_nvcsw; /* voluntary context switches */ - uint64_t ru_nivcsw; /* involuntary context switches */ -} uv_rusage_t; - -UV_EXTERN int uv_getrusage(uv_rusage_t* rusage); - -UV_EXTERN int uv_os_homedir(char* buffer, size_t* size); -UV_EXTERN int uv_os_tmpdir(char* buffer, size_t* size); -UV_EXTERN int uv_os_get_passwd(uv_passwd_t* pwd); -UV_EXTERN void uv_os_free_passwd(uv_passwd_t* pwd); -UV_EXTERN uv_pid_t uv_os_getpid(void); -UV_EXTERN uv_pid_t uv_os_getppid(void); - -#if defined(__PASE__) -/* On IBM i PASE, the highest process priority is -10 */ -# define UV_PRIORITY_LOW 39 /* RUNPTY(99) */ -# define UV_PRIORITY_BELOW_NORMAL 15 /* RUNPTY(50) */ -# define UV_PRIORITY_NORMAL 0 /* RUNPTY(20) */ -# define UV_PRIORITY_ABOVE_NORMAL -4 /* RUNTY(12) */ -# define UV_PRIORITY_HIGH -7 /* RUNPTY(6) */ -# define UV_PRIORITY_HIGHEST -10 /* RUNPTY(1) */ -#else -# define UV_PRIORITY_LOW 19 -# define UV_PRIORITY_BELOW_NORMAL 10 -# define UV_PRIORITY_NORMAL 0 -# define UV_PRIORITY_ABOVE_NORMAL -7 -# define UV_PRIORITY_HIGH -14 -# define UV_PRIORITY_HIGHEST -20 -#endif - -UV_EXTERN int uv_os_getpriority(uv_pid_t pid, int* priority); -UV_EXTERN int uv_os_setpriority(uv_pid_t pid, int priority); - -UV_EXTERN int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count); -UV_EXTERN void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count); - -UV_EXTERN int uv_interface_addresses(uv_interface_address_t** addresses, - int* count); -UV_EXTERN void uv_free_interface_addresses(uv_interface_address_t* addresses, - int count); - -struct uv_env_item_s { - char* name; - char* value; -}; - -UV_EXTERN int uv_os_environ(uv_env_item_t** envitems, int* count); -UV_EXTERN void uv_os_free_environ(uv_env_item_t* envitems, int count); -UV_EXTERN int uv_os_getenv(const char* name, char* buffer, size_t* size); -UV_EXTERN int uv_os_setenv(const char* name, const char* value); -UV_EXTERN int uv_os_unsetenv(const char* name); - -#ifdef MAXHOSTNAMELEN -# define UV_MAXHOSTNAMESIZE (MAXHOSTNAMELEN + 1) -#else - /* - Fallback for the maximum hostname size, including the null terminator. The - Windows gethostname() documentation states that 256 bytes will always be - large enough to hold the null-terminated hostname. - */ -# define UV_MAXHOSTNAMESIZE 256 -#endif - -UV_EXTERN int uv_os_gethostname(char* buffer, size_t* size); - -UV_EXTERN int uv_os_uname(uv_utsname_t* buffer); - -UV_EXTERN uint64_t uv_metrics_idle_time(uv_loop_t* loop); - -typedef enum { - UV_FS_UNKNOWN = -1, - UV_FS_CUSTOM, - UV_FS_OPEN, - UV_FS_CLOSE, - UV_FS_READ, - UV_FS_WRITE, - UV_FS_SENDFILE, - UV_FS_STAT, - UV_FS_LSTAT, - UV_FS_FSTAT, - UV_FS_FTRUNCATE, - UV_FS_UTIME, - UV_FS_FUTIME, - UV_FS_ACCESS, - UV_FS_CHMOD, - UV_FS_FCHMOD, - UV_FS_FSYNC, - UV_FS_FDATASYNC, - UV_FS_UNLINK, - UV_FS_RMDIR, - UV_FS_MKDIR, - UV_FS_MKDTEMP, - UV_FS_RENAME, - UV_FS_SCANDIR, - UV_FS_LINK, - UV_FS_SYMLINK, - UV_FS_READLINK, - UV_FS_CHOWN, - UV_FS_FCHOWN, - UV_FS_REALPATH, - UV_FS_COPYFILE, - UV_FS_LCHOWN, - UV_FS_OPENDIR, - UV_FS_READDIR, - UV_FS_CLOSEDIR, - UV_FS_STATFS, - UV_FS_MKSTEMP, - UV_FS_LUTIME -} uv_fs_type; - -struct uv_dir_s { - uv_dirent_t* dirents; - size_t nentries; - void* reserved[4]; - UV_DIR_PRIVATE_FIELDS -}; - -/* uv_fs_t is a subclass of uv_req_t. */ -struct uv_fs_s { - UV_REQ_FIELDS - uv_fs_type fs_type; - uv_loop_t* loop; - uv_fs_cb cb; - ssize_t result; - void* ptr; - const char* path; - uv_stat_t statbuf; /* Stores the result of uv_fs_stat() and uv_fs_fstat(). */ - UV_FS_PRIVATE_FIELDS -}; - -UV_EXTERN uv_fs_type uv_fs_get_type(const uv_fs_t*); -UV_EXTERN ssize_t uv_fs_get_result(const uv_fs_t*); -UV_EXTERN int uv_fs_get_system_error(const uv_fs_t*); -UV_EXTERN void* uv_fs_get_ptr(const uv_fs_t*); -UV_EXTERN const char* uv_fs_get_path(const uv_fs_t*); -UV_EXTERN uv_stat_t* uv_fs_get_statbuf(uv_fs_t*); - -UV_EXTERN void uv_fs_req_cleanup(uv_fs_t* req); -UV_EXTERN int uv_fs_close(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - uv_fs_cb cb); -UV_EXTERN int uv_fs_open(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - int flags, - int mode, - uv_fs_cb cb); -UV_EXTERN int uv_fs_read(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - const uv_buf_t bufs[], - unsigned int nbufs, - int64_t offset, - uv_fs_cb cb); -UV_EXTERN int uv_fs_unlink(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_fs_cb cb); -UV_EXTERN int uv_fs_write(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - const uv_buf_t bufs[], - unsigned int nbufs, - int64_t offset, - uv_fs_cb cb); -/* - * This flag can be used with uv_fs_copyfile() to return an error if the - * destination already exists. - */ -#define UV_FS_COPYFILE_EXCL 0x0001 - -/* - * This flag can be used with uv_fs_copyfile() to attempt to create a reflink. - * If copy-on-write is not supported, a fallback copy mechanism is used. - */ -#define UV_FS_COPYFILE_FICLONE 0x0002 - -/* - * This flag can be used with uv_fs_copyfile() to attempt to create a reflink. - * If copy-on-write is not supported, an error is returned. - */ -#define UV_FS_COPYFILE_FICLONE_FORCE 0x0004 - -UV_EXTERN int uv_fs_copyfile(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - const char* new_path, - int flags, - uv_fs_cb cb); -UV_EXTERN int uv_fs_mkdir(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - int mode, - uv_fs_cb cb); -UV_EXTERN int uv_fs_mkdtemp(uv_loop_t* loop, - uv_fs_t* req, - const char* tpl, - uv_fs_cb cb); -UV_EXTERN int uv_fs_mkstemp(uv_loop_t* loop, - uv_fs_t* req, - const char* tpl, - uv_fs_cb cb); -UV_EXTERN int uv_fs_rmdir(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_fs_cb cb); -UV_EXTERN int uv_fs_scandir(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - int flags, - uv_fs_cb cb); -UV_EXTERN int uv_fs_scandir_next(uv_fs_t* req, - uv_dirent_t* ent); -UV_EXTERN int uv_fs_opendir(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_fs_cb cb); -UV_EXTERN int uv_fs_readdir(uv_loop_t* loop, - uv_fs_t* req, - uv_dir_t* dir, - uv_fs_cb cb); -UV_EXTERN int uv_fs_closedir(uv_loop_t* loop, - uv_fs_t* req, - uv_dir_t* dir, - uv_fs_cb cb); -UV_EXTERN int uv_fs_stat(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_fs_cb cb); -UV_EXTERN int uv_fs_fstat(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - uv_fs_cb cb); -UV_EXTERN int uv_fs_rename(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - const char* new_path, - uv_fs_cb cb); -UV_EXTERN int uv_fs_fsync(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - uv_fs_cb cb); -UV_EXTERN int uv_fs_fdatasync(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - uv_fs_cb cb); -UV_EXTERN int uv_fs_ftruncate(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - int64_t offset, - uv_fs_cb cb); -UV_EXTERN int uv_fs_sendfile(uv_loop_t* loop, - uv_fs_t* req, - uv_file out_fd, - uv_file in_fd, - int64_t in_offset, - size_t length, - uv_fs_cb cb); -UV_EXTERN int uv_fs_access(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - int mode, - uv_fs_cb cb); -UV_EXTERN int uv_fs_chmod(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - int mode, - uv_fs_cb cb); -UV_EXTERN int uv_fs_utime(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - double atime, - double mtime, - uv_fs_cb cb); -UV_EXTERN int uv_fs_futime(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - double atime, - double mtime, - uv_fs_cb cb); -UV_EXTERN int uv_fs_lutime(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - double atime, - double mtime, - uv_fs_cb cb); -UV_EXTERN int uv_fs_lstat(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_fs_cb cb); -UV_EXTERN int uv_fs_link(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - const char* new_path, - uv_fs_cb cb); - -/* - * This flag can be used with uv_fs_symlink() on Windows to specify whether - * path argument points to a directory. - */ -#define UV_FS_SYMLINK_DIR 0x0001 - -/* - * This flag can be used with uv_fs_symlink() on Windows to specify whether - * the symlink is to be created using junction points. - */ -#define UV_FS_SYMLINK_JUNCTION 0x0002 - -UV_EXTERN int uv_fs_symlink(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - const char* new_path, - int flags, - uv_fs_cb cb); -UV_EXTERN int uv_fs_readlink(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_fs_cb cb); -UV_EXTERN int uv_fs_realpath(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_fs_cb cb); -UV_EXTERN int uv_fs_fchmod(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - int mode, - uv_fs_cb cb); -UV_EXTERN int uv_fs_chown(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_uid_t uid, - uv_gid_t gid, - uv_fs_cb cb); -UV_EXTERN int uv_fs_fchown(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - uv_uid_t uid, - uv_gid_t gid, - uv_fs_cb cb); -UV_EXTERN int uv_fs_lchown(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_uid_t uid, - uv_gid_t gid, - uv_fs_cb cb); -UV_EXTERN int uv_fs_statfs(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_fs_cb cb); - - -enum uv_fs_event { - UV_RENAME = 1, - UV_CHANGE = 2 -}; - - -struct uv_fs_event_s { - UV_HANDLE_FIELDS - /* private */ - char* path; - UV_FS_EVENT_PRIVATE_FIELDS -}; - - -/* - * uv_fs_stat() based polling file watcher. - */ -struct uv_fs_poll_s { - UV_HANDLE_FIELDS - /* Private, don't touch. */ - void* poll_ctx; -}; - -UV_EXTERN int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle); -UV_EXTERN int uv_fs_poll_start(uv_fs_poll_t* handle, - uv_fs_poll_cb poll_cb, - const char* path, - unsigned int interval); -UV_EXTERN int uv_fs_poll_stop(uv_fs_poll_t* handle); -UV_EXTERN int uv_fs_poll_getpath(uv_fs_poll_t* handle, - char* buffer, - size_t* size); - - -struct uv_signal_s { - UV_HANDLE_FIELDS - uv_signal_cb signal_cb; - int signum; - UV_SIGNAL_PRIVATE_FIELDS -}; - -UV_EXTERN int uv_signal_init(uv_loop_t* loop, uv_signal_t* handle); -UV_EXTERN int uv_signal_start(uv_signal_t* handle, - uv_signal_cb signal_cb, - int signum); -UV_EXTERN int uv_signal_start_oneshot(uv_signal_t* handle, - uv_signal_cb signal_cb, - int signum); -UV_EXTERN int uv_signal_stop(uv_signal_t* handle); - -UV_EXTERN void uv_loadavg(double avg[3]); - - -/* - * Flags to be passed to uv_fs_event_start(). - */ -enum uv_fs_event_flags { - /* - * By default, if the fs event watcher is given a directory name, we will - * watch for all events in that directory. This flags overrides this behavior - * and makes fs_event report only changes to the directory entry itself. This - * flag does not affect individual files watched. - * This flag is currently not implemented yet on any backend. - */ - UV_FS_EVENT_WATCH_ENTRY = 1, - - /* - * By default uv_fs_event will try to use a kernel interface such as inotify - * or kqueue to detect events. This may not work on remote filesystems such - * as NFS mounts. This flag makes fs_event fall back to calling stat() on a - * regular interval. - * This flag is currently not implemented yet on any backend. - */ - UV_FS_EVENT_STAT = 2, - - /* - * By default, event watcher, when watching directory, is not registering - * (is ignoring) changes in it's subdirectories. - * This flag will override this behaviour on platforms that support it. - */ - UV_FS_EVENT_RECURSIVE = 4 -}; - - -UV_EXTERN int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle); -UV_EXTERN int uv_fs_event_start(uv_fs_event_t* handle, - uv_fs_event_cb cb, - const char* path, - unsigned int flags); -UV_EXTERN int uv_fs_event_stop(uv_fs_event_t* handle); -UV_EXTERN int uv_fs_event_getpath(uv_fs_event_t* handle, - char* buffer, - size_t* size); - -UV_EXTERN int uv_ip4_addr(const char* ip, int port, struct sockaddr_in* addr); -UV_EXTERN int uv_ip6_addr(const char* ip, int port, struct sockaddr_in6* addr); - -UV_EXTERN int uv_ip4_name(const struct sockaddr_in* src, char* dst, size_t size); -UV_EXTERN int uv_ip6_name(const struct sockaddr_in6* src, char* dst, size_t size); - -UV_EXTERN int uv_inet_ntop(int af, const void* src, char* dst, size_t size); -UV_EXTERN int uv_inet_pton(int af, const char* src, void* dst); - - -struct uv_random_s { - UV_REQ_FIELDS - /* read-only */ - uv_loop_t* loop; - /* private */ - int status; - void* buf; - size_t buflen; - uv_random_cb cb; - struct uv__work work_req; -}; - -UV_EXTERN int uv_random(uv_loop_t* loop, - uv_random_t* req, - void *buf, - size_t buflen, - unsigned flags, /* For future extension; must be 0. */ - uv_random_cb cb); - -#if defined(IF_NAMESIZE) -# define UV_IF_NAMESIZE (IF_NAMESIZE + 1) -#elif defined(IFNAMSIZ) -# define UV_IF_NAMESIZE (IFNAMSIZ + 1) -#else -# define UV_IF_NAMESIZE (16 + 1) -#endif - -UV_EXTERN int uv_if_indextoname(unsigned int ifindex, - char* buffer, - size_t* size); -UV_EXTERN int uv_if_indextoiid(unsigned int ifindex, - char* buffer, - size_t* size); - -UV_EXTERN int uv_exepath(char* buffer, size_t* size); - -UV_EXTERN int uv_cwd(char* buffer, size_t* size); - -UV_EXTERN int uv_chdir(const char* dir); - -UV_EXTERN uint64_t uv_get_free_memory(void); -UV_EXTERN uint64_t uv_get_total_memory(void); -UV_EXTERN uint64_t uv_get_constrained_memory(void); - -UV_EXTERN uint64_t uv_hrtime(void); -UV_EXTERN void uv_sleep(unsigned int msec); - -UV_EXTERN void uv_disable_stdio_inheritance(void); - -UV_EXTERN int uv_dlopen(const char* filename, uv_lib_t* lib); -UV_EXTERN void uv_dlclose(uv_lib_t* lib); -UV_EXTERN int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr); -UV_EXTERN const char* uv_dlerror(const uv_lib_t* lib); - -UV_EXTERN int uv_mutex_init(uv_mutex_t* handle); -UV_EXTERN int uv_mutex_init_recursive(uv_mutex_t* handle); -UV_EXTERN void uv_mutex_destroy(uv_mutex_t* handle); -UV_EXTERN void uv_mutex_lock(uv_mutex_t* handle); -UV_EXTERN int uv_mutex_trylock(uv_mutex_t* handle); -UV_EXTERN void uv_mutex_unlock(uv_mutex_t* handle); - -UV_EXTERN int uv_rwlock_init(uv_rwlock_t* rwlock); -UV_EXTERN void uv_rwlock_destroy(uv_rwlock_t* rwlock); -UV_EXTERN void uv_rwlock_rdlock(uv_rwlock_t* rwlock); -UV_EXTERN int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock); -UV_EXTERN void uv_rwlock_rdunlock(uv_rwlock_t* rwlock); -UV_EXTERN void uv_rwlock_wrlock(uv_rwlock_t* rwlock); -UV_EXTERN int uv_rwlock_trywrlock(uv_rwlock_t* rwlock); -UV_EXTERN void uv_rwlock_wrunlock(uv_rwlock_t* rwlock); - -UV_EXTERN int uv_sem_init(uv_sem_t* sem, unsigned int value); -UV_EXTERN void uv_sem_destroy(uv_sem_t* sem); -UV_EXTERN void uv_sem_post(uv_sem_t* sem); -UV_EXTERN void uv_sem_wait(uv_sem_t* sem); -UV_EXTERN int uv_sem_trywait(uv_sem_t* sem); - -UV_EXTERN int uv_cond_init(uv_cond_t* cond); -UV_EXTERN void uv_cond_destroy(uv_cond_t* cond); -UV_EXTERN void uv_cond_signal(uv_cond_t* cond); -UV_EXTERN void uv_cond_broadcast(uv_cond_t* cond); - -UV_EXTERN int uv_barrier_init(uv_barrier_t* barrier, unsigned int count); -UV_EXTERN void uv_barrier_destroy(uv_barrier_t* barrier); -UV_EXTERN int uv_barrier_wait(uv_barrier_t* barrier); - -UV_EXTERN void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex); -UV_EXTERN int uv_cond_timedwait(uv_cond_t* cond, - uv_mutex_t* mutex, - uint64_t timeout); - -UV_EXTERN void uv_once(uv_once_t* guard, void (*callback)(void)); - -UV_EXTERN int uv_key_create(uv_key_t* key); -UV_EXTERN void uv_key_delete(uv_key_t* key); -UV_EXTERN void* uv_key_get(uv_key_t* key); -UV_EXTERN void uv_key_set(uv_key_t* key, void* value); - -UV_EXTERN int uv_gettimeofday(uv_timeval64_t* tv); - -typedef void (*uv_thread_cb)(void* arg); - -UV_EXTERN int uv_thread_create(uv_thread_t* tid, uv_thread_cb entry, void* arg); - -typedef enum { - UV_THREAD_NO_FLAGS = 0x00, - UV_THREAD_HAS_STACK_SIZE = 0x01 -} uv_thread_create_flags; - -struct uv_thread_options_s { - unsigned int flags; - size_t stack_size; - /* More fields may be added at any time. */ -}; - -typedef struct uv_thread_options_s uv_thread_options_t; - -UV_EXTERN int uv_thread_create_ex(uv_thread_t* tid, - const uv_thread_options_t* params, - uv_thread_cb entry, - void* arg); -UV_EXTERN uv_thread_t uv_thread_self(void); -UV_EXTERN int uv_thread_join(uv_thread_t *tid); -UV_EXTERN int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2); - -/* The presence of these unions force similar struct layout. */ -#define XX(_, name) uv_ ## name ## _t name; -union uv_any_handle { - UV_HANDLE_TYPE_MAP(XX) -}; - -union uv_any_req { - UV_REQ_TYPE_MAP(XX) -}; -#undef XX - - -struct uv_loop_s { - /* User data - use this for whatever. */ - void* data; - /* Loop reference counting. */ - unsigned int active_handles; - void* handle_queue[2]; - union { - void* unused; - unsigned int count; - } active_reqs; - /* Internal storage for future extensions. */ - void* internal_fields; - /* Internal flag to signal loop stop. */ - unsigned int stop_flag; - UV_LOOP_PRIVATE_FIELDS -}; - -UV_EXTERN void* uv_loop_get_data(const uv_loop_t*); -UV_EXTERN void uv_loop_set_data(uv_loop_t*, void* data); - -/* Don't export the private CPP symbols. */ -#undef UV_HANDLE_TYPE_PRIVATE -#undef UV_REQ_TYPE_PRIVATE -#undef UV_REQ_PRIVATE_FIELDS -#undef UV_STREAM_PRIVATE_FIELDS -#undef UV_TCP_PRIVATE_FIELDS -#undef UV_PREPARE_PRIVATE_FIELDS -#undef UV_CHECK_PRIVATE_FIELDS -#undef UV_IDLE_PRIVATE_FIELDS -#undef UV_ASYNC_PRIVATE_FIELDS -#undef UV_TIMER_PRIVATE_FIELDS -#undef UV_GETADDRINFO_PRIVATE_FIELDS -#undef UV_GETNAMEINFO_PRIVATE_FIELDS -#undef UV_FS_REQ_PRIVATE_FIELDS -#undef UV_WORK_PRIVATE_FIELDS -#undef UV_FS_EVENT_PRIVATE_FIELDS -#undef UV_SIGNAL_PRIVATE_FIELDS -#undef UV_LOOP_PRIVATE_FIELDS -#undef UV_LOOP_PRIVATE_PLATFORM_FIELDS -#undef UV__ERR - -#ifdef __cplusplus -} -#endif -#endif /* UV_H */ diff --git a/libuv/include/uv/aix.h b/libuv/include/uv/aix.h deleted file mode 100644 index 7dc992f..0000000 --- a/libuv/include/uv/aix.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_AIX_H -#define UV_AIX_H - -#define UV_PLATFORM_LOOP_FIELDS \ - int fs_fd; \ - -#define UV_PLATFORM_FS_EVENT_FIELDS \ - uv__io_t event_watcher; \ - char *dir_filename; \ - -#endif /* UV_AIX_H */ diff --git a/libuv/include/uv/android-ifaddrs.h b/libuv/include/uv/android-ifaddrs.h deleted file mode 100644 index 9cd19fe..0000000 --- a/libuv/include/uv/android-ifaddrs.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 1995, 1999 - * Berkeley Software Design, Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED BY Berkeley Software Design, Inc. ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design, Inc. BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * BSDI ifaddrs.h,v 2.5 2000/02/23 14:51:59 dab Exp - */ - -#ifndef _IFADDRS_H_ -#define _IFADDRS_H_ - -struct ifaddrs { - struct ifaddrs *ifa_next; - char *ifa_name; - unsigned int ifa_flags; - struct sockaddr *ifa_addr; - struct sockaddr *ifa_netmask; - struct sockaddr *ifa_dstaddr; - void *ifa_data; -}; - -/* - * This may have been defined in . Note that if is - * to be included it must be included before this header file. - */ -#ifndef ifa_broadaddr -#define ifa_broadaddr ifa_dstaddr /* broadcast address interface */ -#endif - -#include - -__BEGIN_DECLS -extern int getifaddrs(struct ifaddrs **ifap); -extern void freeifaddrs(struct ifaddrs *ifa); -__END_DECLS - -#endif diff --git a/libuv/include/uv/bsd.h b/libuv/include/uv/bsd.h deleted file mode 100644 index 2d72b3d..0000000 --- a/libuv/include/uv/bsd.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_BSD_H -#define UV_BSD_H - -#define UV_PLATFORM_FS_EVENT_FIELDS \ - uv__io_t event_watcher; \ - -#define UV_IO_PRIVATE_PLATFORM_FIELDS \ - int rcount; \ - int wcount; \ - -#define UV_HAVE_KQUEUE 1 - -#endif /* UV_BSD_H */ diff --git a/libuv/include/uv/darwin.h b/libuv/include/uv/darwin.h deleted file mode 100644 index d226415..0000000 --- a/libuv/include/uv/darwin.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_DARWIN_H -#define UV_DARWIN_H - -#if defined(__APPLE__) && defined(__MACH__) -# include -# include -# include -# include -# define UV_PLATFORM_SEM_T semaphore_t -#endif - -#define UV_IO_PRIVATE_PLATFORM_FIELDS \ - int rcount; \ - int wcount; \ - -#define UV_PLATFORM_LOOP_FIELDS \ - uv_thread_t cf_thread; \ - void* _cf_reserved; \ - void* cf_state; \ - uv_mutex_t cf_mutex; \ - uv_sem_t cf_sem; \ - void* cf_signals[2]; \ - -#define UV_PLATFORM_FS_EVENT_FIELDS \ - uv__io_t event_watcher; \ - char* realpath; \ - int realpath_len; \ - int cf_flags; \ - uv_async_t* cf_cb; \ - void* cf_events[2]; \ - void* cf_member[2]; \ - int cf_error; \ - uv_mutex_t cf_mutex; \ - -#define UV_STREAM_PRIVATE_PLATFORM_FIELDS \ - void* select; \ - -#define UV_HAVE_KQUEUE 1 - -#endif /* UV_DARWIN_H */ diff --git a/libuv/include/uv/errno.h b/libuv/include/uv/errno.h deleted file mode 100644 index 71906b3..0000000 --- a/libuv/include/uv/errno.h +++ /dev/null @@ -1,460 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_ERRNO_H_ -#define UV_ERRNO_H_ - -#include -#if EDOM > 0 -# define UV__ERR(x) (-(x)) -#else -# define UV__ERR(x) (x) -#endif - -#define UV__EOF (-4095) -#define UV__UNKNOWN (-4094) - -#define UV__EAI_ADDRFAMILY (-3000) -#define UV__EAI_AGAIN (-3001) -#define UV__EAI_BADFLAGS (-3002) -#define UV__EAI_CANCELED (-3003) -#define UV__EAI_FAIL (-3004) -#define UV__EAI_FAMILY (-3005) -#define UV__EAI_MEMORY (-3006) -#define UV__EAI_NODATA (-3007) -#define UV__EAI_NONAME (-3008) -#define UV__EAI_OVERFLOW (-3009) -#define UV__EAI_SERVICE (-3010) -#define UV__EAI_SOCKTYPE (-3011) -#define UV__EAI_BADHINTS (-3013) -#define UV__EAI_PROTOCOL (-3014) - -/* Only map to the system errno on non-Windows platforms. It's apparently - * a fairly common practice for Windows programmers to redefine errno codes. - */ -#if defined(E2BIG) && !defined(_WIN32) -# define UV__E2BIG UV__ERR(E2BIG) -#else -# define UV__E2BIG (-4093) -#endif - -#if defined(EACCES) && !defined(_WIN32) -# define UV__EACCES UV__ERR(EACCES) -#else -# define UV__EACCES (-4092) -#endif - -#if defined(EADDRINUSE) && !defined(_WIN32) -# define UV__EADDRINUSE UV__ERR(EADDRINUSE) -#else -# define UV__EADDRINUSE (-4091) -#endif - -#if defined(EADDRNOTAVAIL) && !defined(_WIN32) -# define UV__EADDRNOTAVAIL UV__ERR(EADDRNOTAVAIL) -#else -# define UV__EADDRNOTAVAIL (-4090) -#endif - -#if defined(EAFNOSUPPORT) && !defined(_WIN32) -# define UV__EAFNOSUPPORT UV__ERR(EAFNOSUPPORT) -#else -# define UV__EAFNOSUPPORT (-4089) -#endif - -#if defined(EAGAIN) && !defined(_WIN32) -# define UV__EAGAIN UV__ERR(EAGAIN) -#else -# define UV__EAGAIN (-4088) -#endif - -#if defined(EALREADY) && !defined(_WIN32) -# define UV__EALREADY UV__ERR(EALREADY) -#else -# define UV__EALREADY (-4084) -#endif - -#if defined(EBADF) && !defined(_WIN32) -# define UV__EBADF UV__ERR(EBADF) -#else -# define UV__EBADF (-4083) -#endif - -#if defined(EBUSY) && !defined(_WIN32) -# define UV__EBUSY UV__ERR(EBUSY) -#else -# define UV__EBUSY (-4082) -#endif - -#if defined(ECANCELED) && !defined(_WIN32) -# define UV__ECANCELED UV__ERR(ECANCELED) -#else -# define UV__ECANCELED (-4081) -#endif - -#if defined(ECHARSET) && !defined(_WIN32) -# define UV__ECHARSET UV__ERR(ECHARSET) -#else -# define UV__ECHARSET (-4080) -#endif - -#if defined(ECONNABORTED) && !defined(_WIN32) -# define UV__ECONNABORTED UV__ERR(ECONNABORTED) -#else -# define UV__ECONNABORTED (-4079) -#endif - -#if defined(ECONNREFUSED) && !defined(_WIN32) -# define UV__ECONNREFUSED UV__ERR(ECONNREFUSED) -#else -# define UV__ECONNREFUSED (-4078) -#endif - -#if defined(ECONNRESET) && !defined(_WIN32) -# define UV__ECONNRESET UV__ERR(ECONNRESET) -#else -# define UV__ECONNRESET (-4077) -#endif - -#if defined(EDESTADDRREQ) && !defined(_WIN32) -# define UV__EDESTADDRREQ UV__ERR(EDESTADDRREQ) -#else -# define UV__EDESTADDRREQ (-4076) -#endif - -#if defined(EEXIST) && !defined(_WIN32) -# define UV__EEXIST UV__ERR(EEXIST) -#else -# define UV__EEXIST (-4075) -#endif - -#if defined(EFAULT) && !defined(_WIN32) -# define UV__EFAULT UV__ERR(EFAULT) -#else -# define UV__EFAULT (-4074) -#endif - -#if defined(EHOSTUNREACH) && !defined(_WIN32) -# define UV__EHOSTUNREACH UV__ERR(EHOSTUNREACH) -#else -# define UV__EHOSTUNREACH (-4073) -#endif - -#if defined(EINTR) && !defined(_WIN32) -# define UV__EINTR UV__ERR(EINTR) -#else -# define UV__EINTR (-4072) -#endif - -#if defined(EINVAL) && !defined(_WIN32) -# define UV__EINVAL UV__ERR(EINVAL) -#else -# define UV__EINVAL (-4071) -#endif - -#if defined(EIO) && !defined(_WIN32) -# define UV__EIO UV__ERR(EIO) -#else -# define UV__EIO (-4070) -#endif - -#if defined(EISCONN) && !defined(_WIN32) -# define UV__EISCONN UV__ERR(EISCONN) -#else -# define UV__EISCONN (-4069) -#endif - -#if defined(EISDIR) && !defined(_WIN32) -# define UV__EISDIR UV__ERR(EISDIR) -#else -# define UV__EISDIR (-4068) -#endif - -#if defined(ELOOP) && !defined(_WIN32) -# define UV__ELOOP UV__ERR(ELOOP) -#else -# define UV__ELOOP (-4067) -#endif - -#if defined(EMFILE) && !defined(_WIN32) -# define UV__EMFILE UV__ERR(EMFILE) -#else -# define UV__EMFILE (-4066) -#endif - -#if defined(EMSGSIZE) && !defined(_WIN32) -# define UV__EMSGSIZE UV__ERR(EMSGSIZE) -#else -# define UV__EMSGSIZE (-4065) -#endif - -#if defined(ENAMETOOLONG) && !defined(_WIN32) -# define UV__ENAMETOOLONG UV__ERR(ENAMETOOLONG) -#else -# define UV__ENAMETOOLONG (-4064) -#endif - -#if defined(ENETDOWN) && !defined(_WIN32) -# define UV__ENETDOWN UV__ERR(ENETDOWN) -#else -# define UV__ENETDOWN (-4063) -#endif - -#if defined(ENETUNREACH) && !defined(_WIN32) -# define UV__ENETUNREACH UV__ERR(ENETUNREACH) -#else -# define UV__ENETUNREACH (-4062) -#endif - -#if defined(ENFILE) && !defined(_WIN32) -# define UV__ENFILE UV__ERR(ENFILE) -#else -# define UV__ENFILE (-4061) -#endif - -#if defined(ENOBUFS) && !defined(_WIN32) -# define UV__ENOBUFS UV__ERR(ENOBUFS) -#else -# define UV__ENOBUFS (-4060) -#endif - -#if defined(ENODEV) && !defined(_WIN32) -# define UV__ENODEV UV__ERR(ENODEV) -#else -# define UV__ENODEV (-4059) -#endif - -#if defined(ENOENT) && !defined(_WIN32) -# define UV__ENOENT UV__ERR(ENOENT) -#else -# define UV__ENOENT (-4058) -#endif - -#if defined(ENOMEM) && !defined(_WIN32) -# define UV__ENOMEM UV__ERR(ENOMEM) -#else -# define UV__ENOMEM (-4057) -#endif - -#if defined(ENONET) && !defined(_WIN32) -# define UV__ENONET UV__ERR(ENONET) -#else -# define UV__ENONET (-4056) -#endif - -#if defined(ENOSPC) && !defined(_WIN32) -# define UV__ENOSPC UV__ERR(ENOSPC) -#else -# define UV__ENOSPC (-4055) -#endif - -#if defined(ENOSYS) && !defined(_WIN32) -# define UV__ENOSYS UV__ERR(ENOSYS) -#else -# define UV__ENOSYS (-4054) -#endif - -#if defined(ENOTCONN) && !defined(_WIN32) -# define UV__ENOTCONN UV__ERR(ENOTCONN) -#else -# define UV__ENOTCONN (-4053) -#endif - -#if defined(ENOTDIR) && !defined(_WIN32) -# define UV__ENOTDIR UV__ERR(ENOTDIR) -#else -# define UV__ENOTDIR (-4052) -#endif - -#if defined(ENOTEMPTY) && !defined(_WIN32) -# define UV__ENOTEMPTY UV__ERR(ENOTEMPTY) -#else -# define UV__ENOTEMPTY (-4051) -#endif - -#if defined(ENOTSOCK) && !defined(_WIN32) -# define UV__ENOTSOCK UV__ERR(ENOTSOCK) -#else -# define UV__ENOTSOCK (-4050) -#endif - -#if defined(ENOTSUP) && !defined(_WIN32) -# define UV__ENOTSUP UV__ERR(ENOTSUP) -#else -# define UV__ENOTSUP (-4049) -#endif - -#if defined(EPERM) && !defined(_WIN32) -# define UV__EPERM UV__ERR(EPERM) -#else -# define UV__EPERM (-4048) -#endif - -#if defined(EPIPE) && !defined(_WIN32) -# define UV__EPIPE UV__ERR(EPIPE) -#else -# define UV__EPIPE (-4047) -#endif - -#if defined(EPROTO) && !defined(_WIN32) -# define UV__EPROTO UV__ERR(EPROTO) -#else -# define UV__EPROTO (-4046) -#endif - -#if defined(EPROTONOSUPPORT) && !defined(_WIN32) -# define UV__EPROTONOSUPPORT UV__ERR(EPROTONOSUPPORT) -#else -# define UV__EPROTONOSUPPORT (-4045) -#endif - -#if defined(EPROTOTYPE) && !defined(_WIN32) -# define UV__EPROTOTYPE UV__ERR(EPROTOTYPE) -#else -# define UV__EPROTOTYPE (-4044) -#endif - -#if defined(EROFS) && !defined(_WIN32) -# define UV__EROFS UV__ERR(EROFS) -#else -# define UV__EROFS (-4043) -#endif - -#if defined(ESHUTDOWN) && !defined(_WIN32) -# define UV__ESHUTDOWN UV__ERR(ESHUTDOWN) -#else -# define UV__ESHUTDOWN (-4042) -#endif - -#if defined(ESPIPE) && !defined(_WIN32) -# define UV__ESPIPE UV__ERR(ESPIPE) -#else -# define UV__ESPIPE (-4041) -#endif - -#if defined(ESRCH) && !defined(_WIN32) -# define UV__ESRCH UV__ERR(ESRCH) -#else -# define UV__ESRCH (-4040) -#endif - -#if defined(ETIMEDOUT) && !defined(_WIN32) -# define UV__ETIMEDOUT UV__ERR(ETIMEDOUT) -#else -# define UV__ETIMEDOUT (-4039) -#endif - -#if defined(ETXTBSY) && !defined(_WIN32) -# define UV__ETXTBSY UV__ERR(ETXTBSY) -#else -# define UV__ETXTBSY (-4038) -#endif - -#if defined(EXDEV) && !defined(_WIN32) -# define UV__EXDEV UV__ERR(EXDEV) -#else -# define UV__EXDEV (-4037) -#endif - -#if defined(EFBIG) && !defined(_WIN32) -# define UV__EFBIG UV__ERR(EFBIG) -#else -# define UV__EFBIG (-4036) -#endif - -#if defined(ENOPROTOOPT) && !defined(_WIN32) -# define UV__ENOPROTOOPT UV__ERR(ENOPROTOOPT) -#else -# define UV__ENOPROTOOPT (-4035) -#endif - -#if defined(ERANGE) && !defined(_WIN32) -# define UV__ERANGE UV__ERR(ERANGE) -#else -# define UV__ERANGE (-4034) -#endif - -#if defined(ENXIO) && !defined(_WIN32) -# define UV__ENXIO UV__ERR(ENXIO) -#else -# define UV__ENXIO (-4033) -#endif - -#if defined(EMLINK) && !defined(_WIN32) -# define UV__EMLINK UV__ERR(EMLINK) -#else -# define UV__EMLINK (-4032) -#endif - -/* EHOSTDOWN is not visible on BSD-like systems when _POSIX_C_SOURCE is - * defined. Fortunately, its value is always 64 so it's possible albeit - * icky to hard-code it. - */ -#if defined(EHOSTDOWN) && !defined(_WIN32) -# define UV__EHOSTDOWN UV__ERR(EHOSTDOWN) -#elif defined(__APPLE__) || \ - defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__FreeBSD_kernel__) || \ - defined(__NetBSD__) || \ - defined(__OpenBSD__) -# define UV__EHOSTDOWN (-64) -#else -# define UV__EHOSTDOWN (-4031) -#endif - -#if defined(EREMOTEIO) && !defined(_WIN32) -# define UV__EREMOTEIO UV__ERR(EREMOTEIO) -#else -# define UV__EREMOTEIO (-4030) -#endif - -#if defined(ENOTTY) && !defined(_WIN32) -# define UV__ENOTTY UV__ERR(ENOTTY) -#else -# define UV__ENOTTY (-4029) -#endif - -#if defined(EFTYPE) && !defined(_WIN32) -# define UV__EFTYPE UV__ERR(EFTYPE) -#else -# define UV__EFTYPE (-4028) -#endif - -#if defined(EILSEQ) && !defined(_WIN32) -# define UV__EILSEQ UV__ERR(EILSEQ) -#else -# define UV__EILSEQ (-4027) -#endif - -#if defined(EOVERFLOW) && !defined(_WIN32) -# define UV__EOVERFLOW UV__ERR(EOVERFLOW) -#else -# define UV__EOVERFLOW (-4026) -#endif - -#if defined(ESOCKTNOSUPPORT) && !defined(_WIN32) -# define UV__ESOCKTNOSUPPORT UV__ERR(ESOCKTNOSUPPORT) -#else -# define UV__ESOCKTNOSUPPORT (-4025) -#endif - -#endif /* UV_ERRNO_H_ */ diff --git a/libuv/include/uv/linux.h b/libuv/include/uv/linux.h deleted file mode 100644 index 9b38405..0000000 --- a/libuv/include/uv/linux.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_LINUX_H -#define UV_LINUX_H - -#define UV_PLATFORM_LOOP_FIELDS \ - uv__io_t inotify_read_watcher; \ - void* inotify_watchers; \ - int inotify_fd; \ - -#define UV_PLATFORM_FS_EVENT_FIELDS \ - void* watchers[2]; \ - int wd; \ - -#endif /* UV_LINUX_H */ diff --git a/libuv/include/uv/os390.h b/libuv/include/uv/os390.h deleted file mode 100644 index 0267d74..0000000 --- a/libuv/include/uv/os390.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_MVS_H -#define UV_MVS_H - -#define UV_PLATFORM_SEM_T long - -#define UV_PLATFORM_LOOP_FIELDS \ - void* ep; \ - -#define UV_PLATFORM_FS_EVENT_FIELDS \ - char rfis_rftok[8]; \ - -#endif /* UV_MVS_H */ diff --git a/libuv/include/uv/posix.h b/libuv/include/uv/posix.h deleted file mode 100644 index 9a96634..0000000 --- a/libuv/include/uv/posix.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_POSIX_H -#define UV_POSIX_H - -#define UV_PLATFORM_LOOP_FIELDS \ - struct pollfd* poll_fds; \ - size_t poll_fds_used; \ - size_t poll_fds_size; \ - unsigned char poll_fds_iterating; \ - -#endif /* UV_POSIX_H */ diff --git a/libuv/include/uv/stdint-msvc2008.h b/libuv/include/uv/stdint-msvc2008.h deleted file mode 100644 index d02608a..0000000 --- a/libuv/include/uv/stdint-msvc2008.h +++ /dev/null @@ -1,247 +0,0 @@ -// ISO C9x compliant stdint.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006-2008 Alexander Chemeris -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. The name of the author may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _MSC_VER // [ -#error "Use this header only with Microsoft Visual C++ compilers!" -#endif // _MSC_VER ] - -#ifndef _MSC_STDINT_H_ // [ -#define _MSC_STDINT_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include - -// For Visual Studio 6 in C++ mode and for many Visual Studio versions when -// compiling for ARM we should wrap include with 'extern "C++" {}' -// or compiler give many errors like this: -// error C2733: second C linkage of overloaded function 'wmemchr' not allowed -#ifdef __cplusplus -extern "C" { -#endif -# include -#ifdef __cplusplus -} -#endif - -// Define _W64 macros to mark types changing their size, like intptr_t. -#ifndef _W64 -# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 -# define _W64 __w64 -# else -# define _W64 -# endif -#endif - - -// 7.18.1 Integer types - -// 7.18.1.1 Exact-width integer types - -// Visual Studio 6 and Embedded Visual C++ 4 doesn't -// realize that, e.g. char has the same size as __int8 -// so we give up on __intX for them. -#if (_MSC_VER < 1300) - typedef signed char int8_t; - typedef signed short int16_t; - typedef signed int int32_t; - typedef unsigned char uint8_t; - typedef unsigned short uint16_t; - typedef unsigned int uint32_t; -#else - typedef signed __int8 int8_t; - typedef signed __int16 int16_t; - typedef signed __int32 int32_t; - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; -#endif -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; - - -// 7.18.1.2 Minimum-width integer types -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -typedef int64_t int_least64_t; -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -typedef uint64_t uint_least64_t; - -// 7.18.1.3 Fastest minimum-width integer types -typedef int8_t int_fast8_t; -typedef int16_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef int64_t int_fast64_t; -typedef uint8_t uint_fast8_t; -typedef uint16_t uint_fast16_t; -typedef uint32_t uint_fast32_t; -typedef uint64_t uint_fast64_t; - -// 7.18.1.4 Integer types capable of holding object pointers -#ifdef _WIN64 // [ - typedef signed __int64 intptr_t; - typedef unsigned __int64 uintptr_t; -#else // _WIN64 ][ - typedef _W64 signed int intptr_t; - typedef _W64 unsigned int uintptr_t; -#endif // _WIN64 ] - -// 7.18.1.5 Greatest-width integer types -typedef int64_t intmax_t; -typedef uint64_t uintmax_t; - - -// 7.18.2 Limits of specified-width integer types - -#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 - -// 7.18.2.1 Limits of exact-width integer types -#define INT8_MIN ((int8_t)_I8_MIN) -#define INT8_MAX _I8_MAX -#define INT16_MIN ((int16_t)_I16_MIN) -#define INT16_MAX _I16_MAX -#define INT32_MIN ((int32_t)_I32_MIN) -#define INT32_MAX _I32_MAX -#define INT64_MIN ((int64_t)_I64_MIN) -#define INT64_MAX _I64_MAX -#define UINT8_MAX _UI8_MAX -#define UINT16_MAX _UI16_MAX -#define UINT32_MAX _UI32_MAX -#define UINT64_MAX _UI64_MAX - -// 7.18.2.2 Limits of minimum-width integer types -#define INT_LEAST8_MIN INT8_MIN -#define INT_LEAST8_MAX INT8_MAX -#define INT_LEAST16_MIN INT16_MIN -#define INT_LEAST16_MAX INT16_MAX -#define INT_LEAST32_MIN INT32_MIN -#define INT_LEAST32_MAX INT32_MAX -#define INT_LEAST64_MIN INT64_MIN -#define INT_LEAST64_MAX INT64_MAX -#define UINT_LEAST8_MAX UINT8_MAX -#define UINT_LEAST16_MAX UINT16_MAX -#define UINT_LEAST32_MAX UINT32_MAX -#define UINT_LEAST64_MAX UINT64_MAX - -// 7.18.2.3 Limits of fastest minimum-width integer types -#define INT_FAST8_MIN INT8_MIN -#define INT_FAST8_MAX INT8_MAX -#define INT_FAST16_MIN INT16_MIN -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST32_MIN INT32_MIN -#define INT_FAST32_MAX INT32_MAX -#define INT_FAST64_MIN INT64_MIN -#define INT_FAST64_MAX INT64_MAX -#define UINT_FAST8_MAX UINT8_MAX -#define UINT_FAST16_MAX UINT16_MAX -#define UINT_FAST32_MAX UINT32_MAX -#define UINT_FAST64_MAX UINT64_MAX - -// 7.18.2.4 Limits of integer types capable of holding object pointers -#ifdef _WIN64 // [ -# define INTPTR_MIN INT64_MIN -# define INTPTR_MAX INT64_MAX -# define UINTPTR_MAX UINT64_MAX -#else // _WIN64 ][ -# define INTPTR_MIN INT32_MIN -# define INTPTR_MAX INT32_MAX -# define UINTPTR_MAX UINT32_MAX -#endif // _WIN64 ] - -// 7.18.2.5 Limits of greatest-width integer types -#define INTMAX_MIN INT64_MIN -#define INTMAX_MAX INT64_MAX -#define UINTMAX_MAX UINT64_MAX - -// 7.18.3 Limits of other integer types - -#ifdef _WIN64 // [ -# define PTRDIFF_MIN _I64_MIN -# define PTRDIFF_MAX _I64_MAX -#else // _WIN64 ][ -# define PTRDIFF_MIN _I32_MIN -# define PTRDIFF_MAX _I32_MAX -#endif // _WIN64 ] - -#define SIG_ATOMIC_MIN INT_MIN -#define SIG_ATOMIC_MAX INT_MAX - -#ifndef SIZE_MAX // [ -# ifdef _WIN64 // [ -# define SIZE_MAX _UI64_MAX -# else // _WIN64 ][ -# define SIZE_MAX _UI32_MAX -# endif // _WIN64 ] -#endif // SIZE_MAX ] - -// WCHAR_MIN and WCHAR_MAX are also defined in -#ifndef WCHAR_MIN // [ -# define WCHAR_MIN 0 -#endif // WCHAR_MIN ] -#ifndef WCHAR_MAX // [ -# define WCHAR_MAX _UI16_MAX -#endif // WCHAR_MAX ] - -#define WINT_MIN 0 -#define WINT_MAX _UI16_MAX - -#endif // __STDC_LIMIT_MACROS ] - - -// 7.18.4 Limits of other integer types - -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 - -// 7.18.4.1 Macros for minimum-width integer constants - -#define INT8_C(val) val##i8 -#define INT16_C(val) val##i16 -#define INT32_C(val) val##i32 -#define INT64_C(val) val##i64 - -#define UINT8_C(val) val##ui8 -#define UINT16_C(val) val##ui16 -#define UINT32_C(val) val##ui32 -#define UINT64_C(val) val##ui64 - -// 7.18.4.2 Macros for greatest-width integer constants -#define INTMAX_C INT64_C -#define UINTMAX_C UINT64_C - -#endif // __STDC_CONSTANT_MACROS ] - - -#endif // _MSC_STDINT_H_ ] diff --git a/libuv/include/uv/sunos.h b/libuv/include/uv/sunos.h deleted file mode 100644 index 0421664..0000000 --- a/libuv/include/uv/sunos.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_SUNOS_H -#define UV_SUNOS_H - -#include -#include - -/* For the sake of convenience and reduced #ifdef-ery in src/unix/sunos.c, - * add the fs_event fields even when this version of SunOS doesn't support - * file watching. - */ -#define UV_PLATFORM_LOOP_FIELDS \ - uv__io_t fs_event_watcher; \ - int fs_fd; \ - -#if defined(PORT_SOURCE_FILE) - -# define UV_PLATFORM_FS_EVENT_FIELDS \ - file_obj_t fo; \ - int fd; \ - -#endif /* defined(PORT_SOURCE_FILE) */ - -#endif /* UV_SUNOS_H */ diff --git a/libuv/include/uv/threadpool.h b/libuv/include/uv/threadpool.h deleted file mode 100644 index 9708ebd..0000000 --- a/libuv/include/uv/threadpool.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* - * This file is private to libuv. It provides common functionality to both - * Windows and Unix backends. - */ - -#ifndef UV_THREADPOOL_H_ -#define UV_THREADPOOL_H_ - -struct uv__work { - void (*work)(struct uv__work *w); - void (*done)(struct uv__work *w, int status); - struct uv_loop_s* loop; - void* wq[2]; -}; - -#endif /* UV_THREADPOOL_H_ */ diff --git a/libuv/include/uv/tree.h b/libuv/include/uv/tree.h deleted file mode 100644 index 2b28835..0000000 --- a/libuv/include/uv/tree.h +++ /dev/null @@ -1,768 +0,0 @@ -/*- - * Copyright 2002 Niels Provos - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef UV_TREE_H_ -#define UV_TREE_H_ - -#ifndef UV__UNUSED -# if __GNUC__ -# define UV__UNUSED __attribute__((unused)) -# else -# define UV__UNUSED -# endif -#endif - -/* - * This file defines data structures for different types of trees: - * splay trees and red-black trees. - * - * A splay tree is a self-organizing data structure. Every operation - * on the tree causes a splay to happen. The splay moves the requested - * node to the root of the tree and partly rebalances it. - * - * This has the benefit that request locality causes faster lookups as - * the requested nodes move to the top of the tree. On the other hand, - * every lookup causes memory writes. - * - * The Balance Theorem bounds the total access time for m operations - * and n inserts on an initially empty tree as O((m + n)lg n). The - * amortized cost for a sequence of m accesses to a splay tree is O(lg n); - * - * A red-black tree is a binary search tree with the node color as an - * extra attribute. It fulfills a set of conditions: - * - every search path from the root to a leaf consists of the - * same number of black nodes, - * - each red node (except for the root) has a black parent, - * - each leaf node is black. - * - * Every operation on a red-black tree is bounded as O(lg n). - * The maximum height of a red-black tree is 2lg (n+1). - */ - -#define SPLAY_HEAD(name, type) \ -struct name { \ - struct type *sph_root; /* root of the tree */ \ -} - -#define SPLAY_INITIALIZER(root) \ - { NULL } - -#define SPLAY_INIT(root) do { \ - (root)->sph_root = NULL; \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_ENTRY(type) \ -struct { \ - struct type *spe_left; /* left element */ \ - struct type *spe_right; /* right element */ \ -} - -#define SPLAY_LEFT(elm, field) (elm)->field.spe_left -#define SPLAY_RIGHT(elm, field) (elm)->field.spe_right -#define SPLAY_ROOT(head) (head)->sph_root -#define SPLAY_EMPTY(head) (SPLAY_ROOT(head) == NULL) - -/* SPLAY_ROTATE_{LEFT,RIGHT} expect that tmp hold SPLAY_{RIGHT,LEFT} */ -#define SPLAY_ROTATE_RIGHT(head, tmp, field) do { \ - SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field); \ - SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ - (head)->sph_root = tmp; \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_ROTATE_LEFT(head, tmp, field) do { \ - SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field); \ - SPLAY_LEFT(tmp, field) = (head)->sph_root; \ - (head)->sph_root = tmp; \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_LINKLEFT(head, tmp, field) do { \ - SPLAY_LEFT(tmp, field) = (head)->sph_root; \ - tmp = (head)->sph_root; \ - (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_LINKRIGHT(head, tmp, field) do { \ - SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ - tmp = (head)->sph_root; \ - (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_ASSEMBLE(head, node, left, right, field) do { \ - SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field); \ - SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field); \ - SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field); \ - SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field); \ -} while (/*CONSTCOND*/ 0) - -/* Generates prototypes and inline functions */ - -#define SPLAY_PROTOTYPE(name, type, field, cmp) \ -void name##_SPLAY(struct name *, struct type *); \ -void name##_SPLAY_MINMAX(struct name *, int); \ -struct type *name##_SPLAY_INSERT(struct name *, struct type *); \ -struct type *name##_SPLAY_REMOVE(struct name *, struct type *); \ - \ -/* Finds the node with the same key as elm */ \ -static __inline struct type * \ -name##_SPLAY_FIND(struct name *head, struct type *elm) \ -{ \ - if (SPLAY_EMPTY(head)) \ - return(NULL); \ - name##_SPLAY(head, elm); \ - if ((cmp)(elm, (head)->sph_root) == 0) \ - return (head->sph_root); \ - return (NULL); \ -} \ - \ -static __inline struct type * \ -name##_SPLAY_NEXT(struct name *head, struct type *elm) \ -{ \ - name##_SPLAY(head, elm); \ - if (SPLAY_RIGHT(elm, field) != NULL) { \ - elm = SPLAY_RIGHT(elm, field); \ - while (SPLAY_LEFT(elm, field) != NULL) { \ - elm = SPLAY_LEFT(elm, field); \ - } \ - } else \ - elm = NULL; \ - return (elm); \ -} \ - \ -static __inline struct type * \ -name##_SPLAY_MIN_MAX(struct name *head, int val) \ -{ \ - name##_SPLAY_MINMAX(head, val); \ - return (SPLAY_ROOT(head)); \ -} - -/* Main splay operation. - * Moves node close to the key of elm to top - */ -#define SPLAY_GENERATE(name, type, field, cmp) \ -struct type * \ -name##_SPLAY_INSERT(struct name *head, struct type *elm) \ -{ \ - if (SPLAY_EMPTY(head)) { \ - SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL; \ - } else { \ - int __comp; \ - name##_SPLAY(head, elm); \ - __comp = (cmp)(elm, (head)->sph_root); \ - if(__comp < 0) { \ - SPLAY_LEFT(elm, field) = SPLAY_LEFT((head)->sph_root, field); \ - SPLAY_RIGHT(elm, field) = (head)->sph_root; \ - SPLAY_LEFT((head)->sph_root, field) = NULL; \ - } else if (__comp > 0) { \ - SPLAY_RIGHT(elm, field) = SPLAY_RIGHT((head)->sph_root, field); \ - SPLAY_LEFT(elm, field) = (head)->sph_root; \ - SPLAY_RIGHT((head)->sph_root, field) = NULL; \ - } else \ - return ((head)->sph_root); \ - } \ - (head)->sph_root = (elm); \ - return (NULL); \ -} \ - \ -struct type * \ -name##_SPLAY_REMOVE(struct name *head, struct type *elm) \ -{ \ - struct type *__tmp; \ - if (SPLAY_EMPTY(head)) \ - return (NULL); \ - name##_SPLAY(head, elm); \ - if ((cmp)(elm, (head)->sph_root) == 0) { \ - if (SPLAY_LEFT((head)->sph_root, field) == NULL) { \ - (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \ - } else { \ - __tmp = SPLAY_RIGHT((head)->sph_root, field); \ - (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \ - name##_SPLAY(head, elm); \ - SPLAY_RIGHT((head)->sph_root, field) = __tmp; \ - } \ - return (elm); \ - } \ - return (NULL); \ -} \ - \ -void \ -name##_SPLAY(struct name *head, struct type *elm) \ -{ \ - struct type __node, *__left, *__right, *__tmp; \ - int __comp; \ - \ - SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL; \ - __left = __right = &__node; \ - \ - while ((__comp = (cmp)(elm, (head)->sph_root)) != 0) { \ - if (__comp < 0) { \ - __tmp = SPLAY_LEFT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if ((cmp)(elm, __tmp) < 0){ \ - SPLAY_ROTATE_RIGHT(head, __tmp, field); \ - if (SPLAY_LEFT((head)->sph_root, field) == NULL) \ - break; \ - } \ - SPLAY_LINKLEFT(head, __right, field); \ - } else if (__comp > 0) { \ - __tmp = SPLAY_RIGHT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if ((cmp)(elm, __tmp) > 0){ \ - SPLAY_ROTATE_LEFT(head, __tmp, field); \ - if (SPLAY_RIGHT((head)->sph_root, field) == NULL) \ - break; \ - } \ - SPLAY_LINKRIGHT(head, __left, field); \ - } \ - } \ - SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ -} \ - \ -/* Splay with either the minimum or the maximum element \ - * Used to find minimum or maximum element in tree. \ - */ \ -void name##_SPLAY_MINMAX(struct name *head, int __comp) \ -{ \ - struct type __node, *__left, *__right, *__tmp; \ - \ - SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL; \ - __left = __right = &__node; \ - \ - for (;;) { \ - if (__comp < 0) { \ - __tmp = SPLAY_LEFT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if (__comp < 0){ \ - SPLAY_ROTATE_RIGHT(head, __tmp, field); \ - if (SPLAY_LEFT((head)->sph_root, field) == NULL) \ - break; \ - } \ - SPLAY_LINKLEFT(head, __right, field); \ - } else if (__comp > 0) { \ - __tmp = SPLAY_RIGHT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if (__comp > 0) { \ - SPLAY_ROTATE_LEFT(head, __tmp, field); \ - if (SPLAY_RIGHT((head)->sph_root, field) == NULL) \ - break; \ - } \ - SPLAY_LINKRIGHT(head, __left, field); \ - } \ - } \ - SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ -} - -#define SPLAY_NEGINF -1 -#define SPLAY_INF 1 - -#define SPLAY_INSERT(name, x, y) name##_SPLAY_INSERT(x, y) -#define SPLAY_REMOVE(name, x, y) name##_SPLAY_REMOVE(x, y) -#define SPLAY_FIND(name, x, y) name##_SPLAY_FIND(x, y) -#define SPLAY_NEXT(name, x, y) name##_SPLAY_NEXT(x, y) -#define SPLAY_MIN(name, x) (SPLAY_EMPTY(x) ? NULL \ - : name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF)) -#define SPLAY_MAX(name, x) (SPLAY_EMPTY(x) ? NULL \ - : name##_SPLAY_MIN_MAX(x, SPLAY_INF)) - -#define SPLAY_FOREACH(x, name, head) \ - for ((x) = SPLAY_MIN(name, head); \ - (x) != NULL; \ - (x) = SPLAY_NEXT(name, head, x)) - -/* Macros that define a red-black tree */ -#define RB_HEAD(name, type) \ -struct name { \ - struct type *rbh_root; /* root of the tree */ \ -} - -#define RB_INITIALIZER(root) \ - { NULL } - -#define RB_INIT(root) do { \ - (root)->rbh_root = NULL; \ -} while (/*CONSTCOND*/ 0) - -#define RB_BLACK 0 -#define RB_RED 1 -#define RB_ENTRY(type) \ -struct { \ - struct type *rbe_left; /* left element */ \ - struct type *rbe_right; /* right element */ \ - struct type *rbe_parent; /* parent element */ \ - int rbe_color; /* node color */ \ -} - -#define RB_LEFT(elm, field) (elm)->field.rbe_left -#define RB_RIGHT(elm, field) (elm)->field.rbe_right -#define RB_PARENT(elm, field) (elm)->field.rbe_parent -#define RB_COLOR(elm, field) (elm)->field.rbe_color -#define RB_ROOT(head) (head)->rbh_root -#define RB_EMPTY(head) (RB_ROOT(head) == NULL) - -#define RB_SET(elm, parent, field) do { \ - RB_PARENT(elm, field) = parent; \ - RB_LEFT(elm, field) = RB_RIGHT(elm, field) = NULL; \ - RB_COLOR(elm, field) = RB_RED; \ -} while (/*CONSTCOND*/ 0) - -#define RB_SET_BLACKRED(black, red, field) do { \ - RB_COLOR(black, field) = RB_BLACK; \ - RB_COLOR(red, field) = RB_RED; \ -} while (/*CONSTCOND*/ 0) - -#ifndef RB_AUGMENT -#define RB_AUGMENT(x) do {} while (0) -#endif - -#define RB_ROTATE_LEFT(head, elm, tmp, field) do { \ - (tmp) = RB_RIGHT(elm, field); \ - if ((RB_RIGHT(elm, field) = RB_LEFT(tmp, field)) != NULL) { \ - RB_PARENT(RB_LEFT(tmp, field), field) = (elm); \ - } \ - RB_AUGMENT(elm); \ - if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \ - if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ - RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ - else \ - RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ - } else \ - (head)->rbh_root = (tmp); \ - RB_LEFT(tmp, field) = (elm); \ - RB_PARENT(elm, field) = (tmp); \ - RB_AUGMENT(tmp); \ - if ((RB_PARENT(tmp, field))) \ - RB_AUGMENT(RB_PARENT(tmp, field)); \ -} while (/*CONSTCOND*/ 0) - -#define RB_ROTATE_RIGHT(head, elm, tmp, field) do { \ - (tmp) = RB_LEFT(elm, field); \ - if ((RB_LEFT(elm, field) = RB_RIGHT(tmp, field)) != NULL) { \ - RB_PARENT(RB_RIGHT(tmp, field), field) = (elm); \ - } \ - RB_AUGMENT(elm); \ - if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \ - if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ - RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ - else \ - RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ - } else \ - (head)->rbh_root = (tmp); \ - RB_RIGHT(tmp, field) = (elm); \ - RB_PARENT(elm, field) = (tmp); \ - RB_AUGMENT(tmp); \ - if ((RB_PARENT(tmp, field))) \ - RB_AUGMENT(RB_PARENT(tmp, field)); \ -} while (/*CONSTCOND*/ 0) - -/* Generates prototypes and inline functions */ -#define RB_PROTOTYPE(name, type, field, cmp) \ - RB_PROTOTYPE_INTERNAL(name, type, field, cmp,) -#define RB_PROTOTYPE_STATIC(name, type, field, cmp) \ - RB_PROTOTYPE_INTERNAL(name, type, field, cmp, UV__UNUSED static) -#define RB_PROTOTYPE_INTERNAL(name, type, field, cmp, attr) \ -attr void name##_RB_INSERT_COLOR(struct name *, struct type *); \ -attr void name##_RB_REMOVE_COLOR(struct name *, struct type *, struct type *);\ -attr struct type *name##_RB_REMOVE(struct name *, struct type *); \ -attr struct type *name##_RB_INSERT(struct name *, struct type *); \ -attr struct type *name##_RB_FIND(struct name *, struct type *); \ -attr struct type *name##_RB_NFIND(struct name *, struct type *); \ -attr struct type *name##_RB_NEXT(struct type *); \ -attr struct type *name##_RB_PREV(struct type *); \ -attr struct type *name##_RB_MINMAX(struct name *, int); \ - \ - -/* Main rb operation. - * Moves node close to the key of elm to top - */ -#define RB_GENERATE(name, type, field, cmp) \ - RB_GENERATE_INTERNAL(name, type, field, cmp,) -#define RB_GENERATE_STATIC(name, type, field, cmp) \ - RB_GENERATE_INTERNAL(name, type, field, cmp, UV__UNUSED static) -#define RB_GENERATE_INTERNAL(name, type, field, cmp, attr) \ -attr void \ -name##_RB_INSERT_COLOR(struct name *head, struct type *elm) \ -{ \ - struct type *parent, *gparent, *tmp; \ - while ((parent = RB_PARENT(elm, field)) != NULL && \ - RB_COLOR(parent, field) == RB_RED) { \ - gparent = RB_PARENT(parent, field); \ - if (parent == RB_LEFT(gparent, field)) { \ - tmp = RB_RIGHT(gparent, field); \ - if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ - RB_COLOR(tmp, field) = RB_BLACK; \ - RB_SET_BLACKRED(parent, gparent, field); \ - elm = gparent; \ - continue; \ - } \ - if (RB_RIGHT(parent, field) == elm) { \ - RB_ROTATE_LEFT(head, parent, tmp, field); \ - tmp = parent; \ - parent = elm; \ - elm = tmp; \ - } \ - RB_SET_BLACKRED(parent, gparent, field); \ - RB_ROTATE_RIGHT(head, gparent, tmp, field); \ - } else { \ - tmp = RB_LEFT(gparent, field); \ - if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ - RB_COLOR(tmp, field) = RB_BLACK; \ - RB_SET_BLACKRED(parent, gparent, field); \ - elm = gparent; \ - continue; \ - } \ - if (RB_LEFT(parent, field) == elm) { \ - RB_ROTATE_RIGHT(head, parent, tmp, field); \ - tmp = parent; \ - parent = elm; \ - elm = tmp; \ - } \ - RB_SET_BLACKRED(parent, gparent, field); \ - RB_ROTATE_LEFT(head, gparent, tmp, field); \ - } \ - } \ - RB_COLOR(head->rbh_root, field) = RB_BLACK; \ -} \ - \ -attr void \ -name##_RB_REMOVE_COLOR(struct name *head, struct type *parent, \ - struct type *elm) \ -{ \ - struct type *tmp; \ - while ((elm == NULL || RB_COLOR(elm, field) == RB_BLACK) && \ - elm != RB_ROOT(head)) { \ - if (RB_LEFT(parent, field) == elm) { \ - tmp = RB_RIGHT(parent, field); \ - if (RB_COLOR(tmp, field) == RB_RED) { \ - RB_SET_BLACKRED(tmp, parent, field); \ - RB_ROTATE_LEFT(head, parent, tmp, field); \ - tmp = RB_RIGHT(parent, field); \ - } \ - if ((RB_LEFT(tmp, field) == NULL || \ - RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) && \ - (RB_RIGHT(tmp, field) == NULL || \ - RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) { \ - RB_COLOR(tmp, field) = RB_RED; \ - elm = parent; \ - parent = RB_PARENT(elm, field); \ - } else { \ - if (RB_RIGHT(tmp, field) == NULL || \ - RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK) { \ - struct type *oleft; \ - if ((oleft = RB_LEFT(tmp, field)) \ - != NULL) \ - RB_COLOR(oleft, field) = RB_BLACK; \ - RB_COLOR(tmp, field) = RB_RED; \ - RB_ROTATE_RIGHT(head, tmp, oleft, field); \ - tmp = RB_RIGHT(parent, field); \ - } \ - RB_COLOR(tmp, field) = RB_COLOR(parent, field); \ - RB_COLOR(parent, field) = RB_BLACK; \ - if (RB_RIGHT(tmp, field)) \ - RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK; \ - RB_ROTATE_LEFT(head, parent, tmp, field); \ - elm = RB_ROOT(head); \ - break; \ - } \ - } else { \ - tmp = RB_LEFT(parent, field); \ - if (RB_COLOR(tmp, field) == RB_RED) { \ - RB_SET_BLACKRED(tmp, parent, field); \ - RB_ROTATE_RIGHT(head, parent, tmp, field); \ - tmp = RB_LEFT(parent, field); \ - } \ - if ((RB_LEFT(tmp, field) == NULL || \ - RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) && \ - (RB_RIGHT(tmp, field) == NULL || \ - RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) { \ - RB_COLOR(tmp, field) = RB_RED; \ - elm = parent; \ - parent = RB_PARENT(elm, field); \ - } else { \ - if (RB_LEFT(tmp, field) == NULL || \ - RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) { \ - struct type *oright; \ - if ((oright = RB_RIGHT(tmp, field)) \ - != NULL) \ - RB_COLOR(oright, field) = RB_BLACK; \ - RB_COLOR(tmp, field) = RB_RED; \ - RB_ROTATE_LEFT(head, tmp, oright, field); \ - tmp = RB_LEFT(parent, field); \ - } \ - RB_COLOR(tmp, field) = RB_COLOR(parent, field); \ - RB_COLOR(parent, field) = RB_BLACK; \ - if (RB_LEFT(tmp, field)) \ - RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK; \ - RB_ROTATE_RIGHT(head, parent, tmp, field); \ - elm = RB_ROOT(head); \ - break; \ - } \ - } \ - } \ - if (elm) \ - RB_COLOR(elm, field) = RB_BLACK; \ -} \ - \ -attr struct type * \ -name##_RB_REMOVE(struct name *head, struct type *elm) \ -{ \ - struct type *child, *parent, *old = elm; \ - int color; \ - if (RB_LEFT(elm, field) == NULL) \ - child = RB_RIGHT(elm, field); \ - else if (RB_RIGHT(elm, field) == NULL) \ - child = RB_LEFT(elm, field); \ - else { \ - struct type *left; \ - elm = RB_RIGHT(elm, field); \ - while ((left = RB_LEFT(elm, field)) != NULL) \ - elm = left; \ - child = RB_RIGHT(elm, field); \ - parent = RB_PARENT(elm, field); \ - color = RB_COLOR(elm, field); \ - if (child) \ - RB_PARENT(child, field) = parent; \ - if (parent) { \ - if (RB_LEFT(parent, field) == elm) \ - RB_LEFT(parent, field) = child; \ - else \ - RB_RIGHT(parent, field) = child; \ - RB_AUGMENT(parent); \ - } else \ - RB_ROOT(head) = child; \ - if (RB_PARENT(elm, field) == old) \ - parent = elm; \ - (elm)->field = (old)->field; \ - if (RB_PARENT(old, field)) { \ - if (RB_LEFT(RB_PARENT(old, field), field) == old) \ - RB_LEFT(RB_PARENT(old, field), field) = elm; \ - else \ - RB_RIGHT(RB_PARENT(old, field), field) = elm; \ - RB_AUGMENT(RB_PARENT(old, field)); \ - } else \ - RB_ROOT(head) = elm; \ - RB_PARENT(RB_LEFT(old, field), field) = elm; \ - if (RB_RIGHT(old, field)) \ - RB_PARENT(RB_RIGHT(old, field), field) = elm; \ - if (parent) { \ - left = parent; \ - do { \ - RB_AUGMENT(left); \ - } while ((left = RB_PARENT(left, field)) != NULL); \ - } \ - goto color; \ - } \ - parent = RB_PARENT(elm, field); \ - color = RB_COLOR(elm, field); \ - if (child) \ - RB_PARENT(child, field) = parent; \ - if (parent) { \ - if (RB_LEFT(parent, field) == elm) \ - RB_LEFT(parent, field) = child; \ - else \ - RB_RIGHT(parent, field) = child; \ - RB_AUGMENT(parent); \ - } else \ - RB_ROOT(head) = child; \ -color: \ - if (color == RB_BLACK) \ - name##_RB_REMOVE_COLOR(head, parent, child); \ - return (old); \ -} \ - \ -/* Inserts a node into the RB tree */ \ -attr struct type * \ -name##_RB_INSERT(struct name *head, struct type *elm) \ -{ \ - struct type *tmp; \ - struct type *parent = NULL; \ - int comp = 0; \ - tmp = RB_ROOT(head); \ - while (tmp) { \ - parent = tmp; \ - comp = (cmp)(elm, parent); \ - if (comp < 0) \ - tmp = RB_LEFT(tmp, field); \ - else if (comp > 0) \ - tmp = RB_RIGHT(tmp, field); \ - else \ - return (tmp); \ - } \ - RB_SET(elm, parent, field); \ - if (parent != NULL) { \ - if (comp < 0) \ - RB_LEFT(parent, field) = elm; \ - else \ - RB_RIGHT(parent, field) = elm; \ - RB_AUGMENT(parent); \ - } else \ - RB_ROOT(head) = elm; \ - name##_RB_INSERT_COLOR(head, elm); \ - return (NULL); \ -} \ - \ -/* Finds the node with the same key as elm */ \ -attr struct type * \ -name##_RB_FIND(struct name *head, struct type *elm) \ -{ \ - struct type *tmp = RB_ROOT(head); \ - int comp; \ - while (tmp) { \ - comp = cmp(elm, tmp); \ - if (comp < 0) \ - tmp = RB_LEFT(tmp, field); \ - else if (comp > 0) \ - tmp = RB_RIGHT(tmp, field); \ - else \ - return (tmp); \ - } \ - return (NULL); \ -} \ - \ -/* Finds the first node greater than or equal to the search key */ \ -attr struct type * \ -name##_RB_NFIND(struct name *head, struct type *elm) \ -{ \ - struct type *tmp = RB_ROOT(head); \ - struct type *res = NULL; \ - int comp; \ - while (tmp) { \ - comp = cmp(elm, tmp); \ - if (comp < 0) { \ - res = tmp; \ - tmp = RB_LEFT(tmp, field); \ - } \ - else if (comp > 0) \ - tmp = RB_RIGHT(tmp, field); \ - else \ - return (tmp); \ - } \ - return (res); \ -} \ - \ -/* ARGSUSED */ \ -attr struct type * \ -name##_RB_NEXT(struct type *elm) \ -{ \ - if (RB_RIGHT(elm, field)) { \ - elm = RB_RIGHT(elm, field); \ - while (RB_LEFT(elm, field)) \ - elm = RB_LEFT(elm, field); \ - } else { \ - if (RB_PARENT(elm, field) && \ - (elm == RB_LEFT(RB_PARENT(elm, field), field))) \ - elm = RB_PARENT(elm, field); \ - else { \ - while (RB_PARENT(elm, field) && \ - (elm == RB_RIGHT(RB_PARENT(elm, field), field))) \ - elm = RB_PARENT(elm, field); \ - elm = RB_PARENT(elm, field); \ - } \ - } \ - return (elm); \ -} \ - \ -/* ARGSUSED */ \ -attr struct type * \ -name##_RB_PREV(struct type *elm) \ -{ \ - if (RB_LEFT(elm, field)) { \ - elm = RB_LEFT(elm, field); \ - while (RB_RIGHT(elm, field)) \ - elm = RB_RIGHT(elm, field); \ - } else { \ - if (RB_PARENT(elm, field) && \ - (elm == RB_RIGHT(RB_PARENT(elm, field), field))) \ - elm = RB_PARENT(elm, field); \ - else { \ - while (RB_PARENT(elm, field) && \ - (elm == RB_LEFT(RB_PARENT(elm, field), field))) \ - elm = RB_PARENT(elm, field); \ - elm = RB_PARENT(elm, field); \ - } \ - } \ - return (elm); \ -} \ - \ -attr struct type * \ -name##_RB_MINMAX(struct name *head, int val) \ -{ \ - struct type *tmp = RB_ROOT(head); \ - struct type *parent = NULL; \ - while (tmp) { \ - parent = tmp; \ - if (val < 0) \ - tmp = RB_LEFT(tmp, field); \ - else \ - tmp = RB_RIGHT(tmp, field); \ - } \ - return (parent); \ -} - -#define RB_NEGINF -1 -#define RB_INF 1 - -#define RB_INSERT(name, x, y) name##_RB_INSERT(x, y) -#define RB_REMOVE(name, x, y) name##_RB_REMOVE(x, y) -#define RB_FIND(name, x, y) name##_RB_FIND(x, y) -#define RB_NFIND(name, x, y) name##_RB_NFIND(x, y) -#define RB_NEXT(name, x, y) name##_RB_NEXT(y) -#define RB_PREV(name, x, y) name##_RB_PREV(y) -#define RB_MIN(name, x) name##_RB_MINMAX(x, RB_NEGINF) -#define RB_MAX(name, x) name##_RB_MINMAX(x, RB_INF) - -#define RB_FOREACH(x, name, head) \ - for ((x) = RB_MIN(name, head); \ - (x) != NULL; \ - (x) = name##_RB_NEXT(x)) - -#define RB_FOREACH_FROM(x, name, y) \ - for ((x) = (y); \ - ((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \ - (x) = (y)) - -#define RB_FOREACH_SAFE(x, name, head, y) \ - for ((x) = RB_MIN(name, head); \ - ((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \ - (x) = (y)) - -#define RB_FOREACH_REVERSE(x, name, head) \ - for ((x) = RB_MAX(name, head); \ - (x) != NULL; \ - (x) = name##_RB_PREV(x)) - -#define RB_FOREACH_REVERSE_FROM(x, name, y) \ - for ((x) = (y); \ - ((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \ - (x) = (y)) - -#define RB_FOREACH_REVERSE_SAFE(x, name, head, y) \ - for ((x) = RB_MAX(name, head); \ - ((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \ - (x) = (y)) - -#endif /* UV_TREE_H_ */ diff --git a/libuv/include/uv/unix.h b/libuv/include/uv/unix.h deleted file mode 100644 index e3cf7bd..0000000 --- a/libuv/include/uv/unix.h +++ /dev/null @@ -1,507 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_UNIX_H -#define UV_UNIX_H - -#include -#include -#include -#include - -#include -#include -#include -#include -#include /* MAXHOSTNAMELEN on Solaris */ - -#include -#include - -#if !defined(__MVS__) -#include -#include /* MAXHOSTNAMELEN on Linux and the BSDs */ -#endif -#include -#include - -#include "uv/threadpool.h" - -#if defined(__linux__) -# include "uv/linux.h" -#elif defined (__MVS__) -# include "uv/os390.h" -#elif defined(__PASE__) /* __PASE__ and _AIX are both defined on IBM i */ -# include "uv/posix.h" /* IBM i needs uv/posix.h, not uv/aix.h */ -#elif defined(_AIX) -# include "uv/aix.h" -#elif defined(__sun) -# include "uv/sunos.h" -#elif defined(__APPLE__) -# include "uv/darwin.h" -#elif defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__FreeBSD_kernel__) || \ - defined(__OpenBSD__) || \ - defined(__NetBSD__) -# include "uv/bsd.h" -#elif defined(__CYGWIN__) || \ - defined(__MSYS__) || \ - defined(__GNU__) -# include "uv/posix.h" -#elif defined(__HAIKU__) -# include "uv/posix.h" -#elif defined(__QNX__) -# include "uv/posix.h" -#endif - -#ifndef NI_MAXHOST -# define NI_MAXHOST 1025 -#endif - -#ifndef NI_MAXSERV -# define NI_MAXSERV 32 -#endif - -#ifndef UV_IO_PRIVATE_PLATFORM_FIELDS -# define UV_IO_PRIVATE_PLATFORM_FIELDS /* empty */ -#endif - -struct uv__io_s; -struct uv_loop_s; - -typedef void (*uv__io_cb)(struct uv_loop_s* loop, - struct uv__io_s* w, - unsigned int events); -typedef struct uv__io_s uv__io_t; - -struct uv__io_s { - uv__io_cb cb; - void* pending_queue[2]; - void* watcher_queue[2]; - unsigned int pevents; /* Pending event mask i.e. mask at next tick. */ - unsigned int events; /* Current event mask. */ - int fd; - UV_IO_PRIVATE_PLATFORM_FIELDS -}; - -#ifndef UV_PLATFORM_SEM_T -# define UV_PLATFORM_SEM_T sem_t -#endif - -#ifndef UV_PLATFORM_LOOP_FIELDS -# define UV_PLATFORM_LOOP_FIELDS /* empty */ -#endif - -#ifndef UV_PLATFORM_FS_EVENT_FIELDS -# define UV_PLATFORM_FS_EVENT_FIELDS /* empty */ -#endif - -#ifndef UV_STREAM_PRIVATE_PLATFORM_FIELDS -# define UV_STREAM_PRIVATE_PLATFORM_FIELDS /* empty */ -#endif - -/* Note: May be cast to struct iovec. See writev(2). */ -typedef struct uv_buf_t { - char* base; - size_t len; -} uv_buf_t; - -typedef int uv_file; -typedef int uv_os_sock_t; -typedef int uv_os_fd_t; -typedef pid_t uv_pid_t; - -#define UV_ONCE_INIT PTHREAD_ONCE_INIT - -typedef pthread_once_t uv_once_t; -typedef pthread_t uv_thread_t; -typedef pthread_mutex_t uv_mutex_t; -typedef pthread_rwlock_t uv_rwlock_t; -typedef UV_PLATFORM_SEM_T uv_sem_t; -typedef pthread_cond_t uv_cond_t; -typedef pthread_key_t uv_key_t; - -/* Note: guard clauses should match uv_barrier_init's in src/unix/thread.c. */ -#if defined(_AIX) || \ - defined(__OpenBSD__) || \ - !defined(PTHREAD_BARRIER_SERIAL_THREAD) -/* TODO(bnoordhuis) Merge into uv_barrier_t in v2. */ -struct _uv_barrier { - uv_mutex_t mutex; - uv_cond_t cond; - unsigned threshold; - unsigned in; - unsigned out; -}; - -typedef struct { - struct _uv_barrier* b; -# if defined(PTHREAD_BARRIER_SERIAL_THREAD) - /* TODO(bnoordhuis) Remove padding in v2. */ - char pad[sizeof(pthread_barrier_t) - sizeof(struct _uv_barrier*)]; -# endif -} uv_barrier_t; -#else -typedef pthread_barrier_t uv_barrier_t; -#endif - -/* Platform-specific definitions for uv_spawn support. */ -typedef gid_t uv_gid_t; -typedef uid_t uv_uid_t; - -typedef struct dirent uv__dirent_t; - -#define UV_DIR_PRIVATE_FIELDS \ - DIR* dir; - -#if defined(DT_UNKNOWN) -# define HAVE_DIRENT_TYPES -# if defined(DT_REG) -# define UV__DT_FILE DT_REG -# else -# define UV__DT_FILE -1 -# endif -# if defined(DT_DIR) -# define UV__DT_DIR DT_DIR -# else -# define UV__DT_DIR -2 -# endif -# if defined(DT_LNK) -# define UV__DT_LINK DT_LNK -# else -# define UV__DT_LINK -3 -# endif -# if defined(DT_FIFO) -# define UV__DT_FIFO DT_FIFO -# else -# define UV__DT_FIFO -4 -# endif -# if defined(DT_SOCK) -# define UV__DT_SOCKET DT_SOCK -# else -# define UV__DT_SOCKET -5 -# endif -# if defined(DT_CHR) -# define UV__DT_CHAR DT_CHR -# else -# define UV__DT_CHAR -6 -# endif -# if defined(DT_BLK) -# define UV__DT_BLOCK DT_BLK -# else -# define UV__DT_BLOCK -7 -# endif -#endif - -/* Platform-specific definitions for uv_dlopen support. */ -#define UV_DYNAMIC /* empty */ - -typedef struct { - void* handle; - char* errmsg; -} uv_lib_t; - -#define UV_LOOP_PRIVATE_FIELDS \ - unsigned long flags; \ - int backend_fd; \ - void* pending_queue[2]; \ - void* watcher_queue[2]; \ - uv__io_t** watchers; \ - unsigned int nwatchers; \ - unsigned int nfds; \ - void* wq[2]; \ - uv_mutex_t wq_mutex; \ - uv_async_t wq_async; \ - uv_rwlock_t cloexec_lock; \ - uv_handle_t* closing_handles; \ - void* process_handles[2]; \ - void* prepare_handles[2]; \ - void* check_handles[2]; \ - void* idle_handles[2]; \ - void* async_handles[2]; \ - void (*async_unused)(void); /* TODO(bnoordhuis) Remove in libuv v2. */ \ - uv__io_t async_io_watcher; \ - int async_wfd; \ - struct { \ - void* min; \ - unsigned int nelts; \ - } timer_heap; \ - uint64_t timer_counter; \ - uint64_t time; \ - int signal_pipefd[2]; \ - uv__io_t signal_io_watcher; \ - uv_signal_t child_watcher; \ - int emfile_fd; \ - UV_PLATFORM_LOOP_FIELDS \ - -#define UV_REQ_TYPE_PRIVATE /* empty */ - -#define UV_REQ_PRIVATE_FIELDS /* empty */ - -#define UV_PRIVATE_REQ_TYPES /* empty */ - -#define UV_WRITE_PRIVATE_FIELDS \ - void* queue[2]; \ - unsigned int write_index; \ - uv_buf_t* bufs; \ - unsigned int nbufs; \ - int error; \ - uv_buf_t bufsml[4]; \ - -#define UV_CONNECT_PRIVATE_FIELDS \ - void* queue[2]; \ - -#define UV_SHUTDOWN_PRIVATE_FIELDS /* empty */ - -#define UV_UDP_SEND_PRIVATE_FIELDS \ - void* queue[2]; \ - struct sockaddr_storage addr; \ - unsigned int nbufs; \ - uv_buf_t* bufs; \ - ssize_t status; \ - uv_udp_send_cb send_cb; \ - uv_buf_t bufsml[4]; \ - -#define UV_HANDLE_PRIVATE_FIELDS \ - uv_handle_t* next_closing; \ - unsigned int flags; \ - -#define UV_STREAM_PRIVATE_FIELDS \ - uv_connect_t *connect_req; \ - uv_shutdown_t *shutdown_req; \ - uv__io_t io_watcher; \ - void* write_queue[2]; \ - void* write_completed_queue[2]; \ - uv_connection_cb connection_cb; \ - int delayed_error; \ - int accepted_fd; \ - void* queued_fds; \ - UV_STREAM_PRIVATE_PLATFORM_FIELDS \ - -#define UV_TCP_PRIVATE_FIELDS /* empty */ - -#define UV_UDP_PRIVATE_FIELDS \ - uv_alloc_cb alloc_cb; \ - uv_udp_recv_cb recv_cb; \ - uv__io_t io_watcher; \ - void* write_queue[2]; \ - void* write_completed_queue[2]; \ - -#define UV_PIPE_PRIVATE_FIELDS \ - const char* pipe_fname; /* strdup'ed */ - -#define UV_POLL_PRIVATE_FIELDS \ - uv__io_t io_watcher; - -#define UV_PREPARE_PRIVATE_FIELDS \ - uv_prepare_cb prepare_cb; \ - void* queue[2]; \ - -#define UV_CHECK_PRIVATE_FIELDS \ - uv_check_cb check_cb; \ - void* queue[2]; \ - -#define UV_IDLE_PRIVATE_FIELDS \ - uv_idle_cb idle_cb; \ - void* queue[2]; \ - -#define UV_ASYNC_PRIVATE_FIELDS \ - uv_async_cb async_cb; \ - void* queue[2]; \ - int pending; \ - -#define UV_TIMER_PRIVATE_FIELDS \ - uv_timer_cb timer_cb; \ - void* heap_node[3]; \ - uint64_t timeout; \ - uint64_t repeat; \ - uint64_t start_id; - -#define UV_GETADDRINFO_PRIVATE_FIELDS \ - struct uv__work work_req; \ - uv_getaddrinfo_cb cb; \ - struct addrinfo* hints; \ - char* hostname; \ - char* service; \ - struct addrinfo* addrinfo; \ - int retcode; - -#define UV_GETNAMEINFO_PRIVATE_FIELDS \ - struct uv__work work_req; \ - uv_getnameinfo_cb getnameinfo_cb; \ - struct sockaddr_storage storage; \ - int flags; \ - char host[NI_MAXHOST]; \ - char service[NI_MAXSERV]; \ - int retcode; - -#define UV_PROCESS_PRIVATE_FIELDS \ - void* queue[2]; \ - int status; \ - -#define UV_FS_PRIVATE_FIELDS \ - const char *new_path; \ - uv_file file; \ - int flags; \ - mode_t mode; \ - unsigned int nbufs; \ - uv_buf_t* bufs; \ - off_t off; \ - uv_uid_t uid; \ - uv_gid_t gid; \ - double atime; \ - double mtime; \ - struct uv__work work_req; \ - uv_buf_t bufsml[4]; \ - -#define UV_WORK_PRIVATE_FIELDS \ - struct uv__work work_req; - -#define UV_TTY_PRIVATE_FIELDS \ - struct termios orig_termios; \ - int mode; - -#define UV_SIGNAL_PRIVATE_FIELDS \ - /* RB_ENTRY(uv_signal_s) tree_entry; */ \ - struct { \ - struct uv_signal_s* rbe_left; \ - struct uv_signal_s* rbe_right; \ - struct uv_signal_s* rbe_parent; \ - int rbe_color; \ - } tree_entry; \ - /* Use two counters here so we don have to fiddle with atomics. */ \ - unsigned int caught_signals; \ - unsigned int dispatched_signals; - -#define UV_FS_EVENT_PRIVATE_FIELDS \ - uv_fs_event_cb cb; \ - UV_PLATFORM_FS_EVENT_FIELDS \ - -/* fs open() flags supported on this platform: */ -#if defined(O_APPEND) -# define UV_FS_O_APPEND O_APPEND -#else -# define UV_FS_O_APPEND 0 -#endif -#if defined(O_CREAT) -# define UV_FS_O_CREAT O_CREAT -#else -# define UV_FS_O_CREAT 0 -#endif - -#if defined(__linux__) && defined(__arm__) -# define UV_FS_O_DIRECT 0x10000 -#elif defined(__linux__) && defined(__m68k__) -# define UV_FS_O_DIRECT 0x10000 -#elif defined(__linux__) && defined(__mips__) -# define UV_FS_O_DIRECT 0x08000 -#elif defined(__linux__) && defined(__powerpc__) -# define UV_FS_O_DIRECT 0x20000 -#elif defined(__linux__) && defined(__s390x__) -# define UV_FS_O_DIRECT 0x04000 -#elif defined(__linux__) && defined(__x86_64__) -# define UV_FS_O_DIRECT 0x04000 -#elif defined(O_DIRECT) -# define UV_FS_O_DIRECT O_DIRECT -#else -# define UV_FS_O_DIRECT 0 -#endif - -#if defined(O_DIRECTORY) -# define UV_FS_O_DIRECTORY O_DIRECTORY -#else -# define UV_FS_O_DIRECTORY 0 -#endif -#if defined(O_DSYNC) -# define UV_FS_O_DSYNC O_DSYNC -#else -# define UV_FS_O_DSYNC 0 -#endif -#if defined(O_EXCL) -# define UV_FS_O_EXCL O_EXCL -#else -# define UV_FS_O_EXCL 0 -#endif -#if defined(O_EXLOCK) -# define UV_FS_O_EXLOCK O_EXLOCK -#else -# define UV_FS_O_EXLOCK 0 -#endif -#if defined(O_NOATIME) -# define UV_FS_O_NOATIME O_NOATIME -#else -# define UV_FS_O_NOATIME 0 -#endif -#if defined(O_NOCTTY) -# define UV_FS_O_NOCTTY O_NOCTTY -#else -# define UV_FS_O_NOCTTY 0 -#endif -#if defined(O_NOFOLLOW) -# define UV_FS_O_NOFOLLOW O_NOFOLLOW -#else -# define UV_FS_O_NOFOLLOW 0 -#endif -#if defined(O_NONBLOCK) -# define UV_FS_O_NONBLOCK O_NONBLOCK -#else -# define UV_FS_O_NONBLOCK 0 -#endif -#if defined(O_RDONLY) -# define UV_FS_O_RDONLY O_RDONLY -#else -# define UV_FS_O_RDONLY 0 -#endif -#if defined(O_RDWR) -# define UV_FS_O_RDWR O_RDWR -#else -# define UV_FS_O_RDWR 0 -#endif -#if defined(O_SYMLINK) -# define UV_FS_O_SYMLINK O_SYMLINK -#else -# define UV_FS_O_SYMLINK 0 -#endif -#if defined(O_SYNC) -# define UV_FS_O_SYNC O_SYNC -#else -# define UV_FS_O_SYNC 0 -#endif -#if defined(O_TRUNC) -# define UV_FS_O_TRUNC O_TRUNC -#else -# define UV_FS_O_TRUNC 0 -#endif -#if defined(O_WRONLY) -# define UV_FS_O_WRONLY O_WRONLY -#else -# define UV_FS_O_WRONLY 0 -#endif - -/* fs open() flags supported on other platforms: */ -#define UV_FS_O_FILEMAP 0 -#define UV_FS_O_RANDOM 0 -#define UV_FS_O_SHORT_LIVED 0 -#define UV_FS_O_SEQUENTIAL 0 -#define UV_FS_O_TEMPORARY 0 - -#endif /* UV_UNIX_H */ diff --git a/libuv/include/uv/version.h b/libuv/include/uv/version.h deleted file mode 100644 index ab5ed00..0000000 --- a/libuv/include/uv/version.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_VERSION_H -#define UV_VERSION_H - - /* - * Versions with the same major number are ABI stable. API is allowed to - * evolve between minor releases, but only in a backwards compatible way. - * Make sure you update the -soname directives in configure.ac - * whenever you bump UV_VERSION_MAJOR or UV_VERSION_MINOR (but - * not UV_VERSION_PATCH.) - */ - -#define UV_VERSION_MAJOR 1 -#define UV_VERSION_MINOR 42 -#define UV_VERSION_PATCH 1 -#define UV_VERSION_IS_RELEASE 0 -#define UV_VERSION_SUFFIX "dev" - -#define UV_VERSION_HEX ((UV_VERSION_MAJOR << 16) | \ - (UV_VERSION_MINOR << 8) | \ - (UV_VERSION_PATCH)) - -#endif /* UV_VERSION_H */ diff --git a/libuv/include/uv/win.h b/libuv/include/uv/win.h deleted file mode 100644 index f5f1d3a..0000000 --- a/libuv/include/uv/win.h +++ /dev/null @@ -1,691 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef _WIN32_WINNT -# define _WIN32_WINNT 0x0600 -#endif - -#if !defined(_SSIZE_T_) && !defined(_SSIZE_T_DEFINED) -typedef intptr_t ssize_t; -# define SSIZE_MAX INTPTR_MAX -# define _SSIZE_T_ -# define _SSIZE_T_DEFINED -#endif - -#include - -#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) -typedef struct pollfd { - SOCKET fd; - short events; - short revents; -} WSAPOLLFD, *PWSAPOLLFD, *LPWSAPOLLFD; -#endif - -#ifndef LOCALE_INVARIANT -# define LOCALE_INVARIANT 0x007f -#endif - -#include -#include -#include - -#include -#include -#include -#include - -#if defined(_MSC_VER) && _MSC_VER < 1600 -# include "uv/stdint-msvc2008.h" -#else -# include -#endif - -#include "uv/tree.h" -#include "uv/threadpool.h" - -#define MAX_PIPENAME_LEN 256 - -#ifndef S_IFLNK -# define S_IFLNK 0xA000 -#endif - -/* Additional signals supported by uv_signal and or uv_kill. The CRT defines - * the following signals already: - * - * #define SIGINT 2 - * #define SIGILL 4 - * #define SIGABRT_COMPAT 6 - * #define SIGFPE 8 - * #define SIGSEGV 11 - * #define SIGTERM 15 - * #define SIGBREAK 21 - * #define SIGABRT 22 - * - * The additional signals have values that are common on other Unix - * variants (Linux and Darwin) - */ -#define SIGHUP 1 -#define SIGKILL 9 -#define SIGWINCH 28 - -/* Redefine NSIG to take SIGWINCH into consideration */ -#if defined(NSIG) && NSIG <= SIGWINCH -# undef NSIG -#endif -#ifndef NSIG -# define NSIG SIGWINCH + 1 -#endif - -/* The CRT defines SIGABRT_COMPAT as 6, which equals SIGABRT on many unix-like - * platforms. However MinGW doesn't define it, so we do. */ -#ifndef SIGABRT_COMPAT -# define SIGABRT_COMPAT 6 -#endif - -/* - * Guids and typedefs for winsock extension functions - * Mingw32 doesn't have these :-( - */ -#ifndef WSAID_ACCEPTEX -# define WSAID_ACCEPTEX \ - {0xb5367df1, 0xcbac, 0x11cf, \ - {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} - -# define WSAID_CONNECTEX \ - {0x25a207b9, 0xddf3, 0x4660, \ - {0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}} - -# define WSAID_GETACCEPTEXSOCKADDRS \ - {0xb5367df2, 0xcbac, 0x11cf, \ - {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} - -# define WSAID_DISCONNECTEX \ - {0x7fda2e11, 0x8630, 0x436f, \ - {0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57}} - -# define WSAID_TRANSMITFILE \ - {0xb5367df0, 0xcbac, 0x11cf, \ - {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} - - typedef BOOL (PASCAL *LPFN_ACCEPTEX) - (SOCKET sListenSocket, - SOCKET sAcceptSocket, - PVOID lpOutputBuffer, - DWORD dwReceiveDataLength, - DWORD dwLocalAddressLength, - DWORD dwRemoteAddressLength, - LPDWORD lpdwBytesReceived, - LPOVERLAPPED lpOverlapped); - - typedef BOOL (PASCAL *LPFN_CONNECTEX) - (SOCKET s, - const struct sockaddr* name, - int namelen, - PVOID lpSendBuffer, - DWORD dwSendDataLength, - LPDWORD lpdwBytesSent, - LPOVERLAPPED lpOverlapped); - - typedef void (PASCAL *LPFN_GETACCEPTEXSOCKADDRS) - (PVOID lpOutputBuffer, - DWORD dwReceiveDataLength, - DWORD dwLocalAddressLength, - DWORD dwRemoteAddressLength, - LPSOCKADDR* LocalSockaddr, - LPINT LocalSockaddrLength, - LPSOCKADDR* RemoteSockaddr, - LPINT RemoteSockaddrLength); - - typedef BOOL (PASCAL *LPFN_DISCONNECTEX) - (SOCKET hSocket, - LPOVERLAPPED lpOverlapped, - DWORD dwFlags, - DWORD reserved); - - typedef BOOL (PASCAL *LPFN_TRANSMITFILE) - (SOCKET hSocket, - HANDLE hFile, - DWORD nNumberOfBytesToWrite, - DWORD nNumberOfBytesPerSend, - LPOVERLAPPED lpOverlapped, - LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, - DWORD dwFlags); - - typedef PVOID RTL_SRWLOCK; - typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK; -#endif - -typedef int (WSAAPI* LPFN_WSARECV) - (SOCKET socket, - LPWSABUF buffers, - DWORD buffer_count, - LPDWORD bytes, - LPDWORD flags, - LPWSAOVERLAPPED overlapped, - LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); - -typedef int (WSAAPI* LPFN_WSARECVFROM) - (SOCKET socket, - LPWSABUF buffers, - DWORD buffer_count, - LPDWORD bytes, - LPDWORD flags, - struct sockaddr* addr, - LPINT addr_len, - LPWSAOVERLAPPED overlapped, - LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); - -#ifndef _NTDEF_ - typedef LONG NTSTATUS; - typedef NTSTATUS *PNTSTATUS; -#endif - -#ifndef RTL_CONDITION_VARIABLE_INIT - typedef PVOID CONDITION_VARIABLE, *PCONDITION_VARIABLE; -#endif - -typedef struct _AFD_POLL_HANDLE_INFO { - HANDLE Handle; - ULONG Events; - NTSTATUS Status; -} AFD_POLL_HANDLE_INFO, *PAFD_POLL_HANDLE_INFO; - -typedef struct _AFD_POLL_INFO { - LARGE_INTEGER Timeout; - ULONG NumberOfHandles; - ULONG Exclusive; - AFD_POLL_HANDLE_INFO Handles[1]; -} AFD_POLL_INFO, *PAFD_POLL_INFO; - -#define UV_MSAFD_PROVIDER_COUNT 3 - - -/** - * It should be possible to cast uv_buf_t[] to WSABUF[] - * see http://msdn.microsoft.com/en-us/library/ms741542(v=vs.85).aspx - */ -typedef struct uv_buf_t { - ULONG len; - char* base; -} uv_buf_t; - -typedef int uv_file; -typedef SOCKET uv_os_sock_t; -typedef HANDLE uv_os_fd_t; -typedef int uv_pid_t; - -typedef HANDLE uv_thread_t; - -typedef HANDLE uv_sem_t; - -typedef CRITICAL_SECTION uv_mutex_t; - -/* This condition variable implementation is based on the SetEvent solution - * (section 3.2) at http://www.cs.wustl.edu/~schmidt/win32-cv-1.html - * We could not use the SignalObjectAndWait solution (section 3.4) because - * it want the 2nd argument (type uv_mutex_t) of uv_cond_wait() and - * uv_cond_timedwait() to be HANDLEs, but we use CRITICAL_SECTIONs. - */ - -typedef union { - CONDITION_VARIABLE cond_var; - struct { - unsigned int waiters_count; - CRITICAL_SECTION waiters_count_lock; - HANDLE signal_event; - HANDLE broadcast_event; - } unused_; /* TODO: retained for ABI compatibility; remove me in v2.x. */ -} uv_cond_t; - -typedef union { - struct { - unsigned int num_readers_; - CRITICAL_SECTION num_readers_lock_; - HANDLE write_semaphore_; - } state_; - /* TODO: remove me in v2.x. */ - struct { - SRWLOCK unused_; - } unused1_; - /* TODO: remove me in v2.x. */ - struct { - uv_mutex_t unused1_; - uv_mutex_t unused2_; - } unused2_; -} uv_rwlock_t; - -typedef struct { - unsigned int n; - unsigned int count; - uv_mutex_t mutex; - uv_sem_t turnstile1; - uv_sem_t turnstile2; -} uv_barrier_t; - -typedef struct { - DWORD tls_index; -} uv_key_t; - -#define UV_ONCE_INIT { 0, NULL } - -typedef struct uv_once_s { - unsigned char ran; - HANDLE event; -} uv_once_t; - -/* Platform-specific definitions for uv_spawn support. */ -typedef unsigned char uv_uid_t; -typedef unsigned char uv_gid_t; - -typedef struct uv__dirent_s { - int d_type; - char d_name[1]; -} uv__dirent_t; - -#define UV_DIR_PRIVATE_FIELDS \ - HANDLE dir_handle; \ - WIN32_FIND_DATAW find_data; \ - BOOL need_find_call; - -#define HAVE_DIRENT_TYPES -#define UV__DT_DIR UV_DIRENT_DIR -#define UV__DT_FILE UV_DIRENT_FILE -#define UV__DT_LINK UV_DIRENT_LINK -#define UV__DT_FIFO UV_DIRENT_FIFO -#define UV__DT_SOCKET UV_DIRENT_SOCKET -#define UV__DT_CHAR UV_DIRENT_CHAR -#define UV__DT_BLOCK UV_DIRENT_BLOCK - -/* Platform-specific definitions for uv_dlopen support. */ -#define UV_DYNAMIC FAR WINAPI -typedef struct { - HMODULE handle; - char* errmsg; -} uv_lib_t; - -#define UV_LOOP_PRIVATE_FIELDS \ - /* The loop's I/O completion port */ \ - HANDLE iocp; \ - /* The current time according to the event loop. in msecs. */ \ - uint64_t time; \ - /* Tail of a single-linked circular queue of pending reqs. If the queue */ \ - /* is empty, tail_ is NULL. If there is only one item, */ \ - /* tail_->next_req == tail_ */ \ - uv_req_t* pending_reqs_tail; \ - /* Head of a single-linked list of closed handles */ \ - uv_handle_t* endgame_handles; \ - /* TODO(bnoordhuis) Stop heap-allocating |timer_heap| in libuv v2.x. */ \ - void* timer_heap; \ - /* Lists of active loop (prepare / check / idle) watchers */ \ - uv_prepare_t* prepare_handles; \ - uv_check_t* check_handles; \ - uv_idle_t* idle_handles; \ - /* This pointer will refer to the prepare/check/idle handle whose */ \ - /* callback is scheduled to be called next. This is needed to allow */ \ - /* safe removal from one of the lists above while that list being */ \ - /* iterated over. */ \ - uv_prepare_t* next_prepare_handle; \ - uv_check_t* next_check_handle; \ - uv_idle_t* next_idle_handle; \ - /* This handle holds the peer sockets for the fast variant of uv_poll_t */ \ - SOCKET poll_peer_sockets[UV_MSAFD_PROVIDER_COUNT]; \ - /* Counter to keep track of active tcp streams */ \ - unsigned int active_tcp_streams; \ - /* Counter to keep track of active udp streams */ \ - unsigned int active_udp_streams; \ - /* Counter to started timer */ \ - uint64_t timer_counter; \ - /* Threadpool */ \ - void* wq[2]; \ - uv_mutex_t wq_mutex; \ - uv_async_t wq_async; - -#define UV_REQ_TYPE_PRIVATE \ - /* TODO: remove the req suffix */ \ - UV_ACCEPT, \ - UV_FS_EVENT_REQ, \ - UV_POLL_REQ, \ - UV_PROCESS_EXIT, \ - UV_READ, \ - UV_UDP_RECV, \ - UV_WAKEUP, \ - UV_SIGNAL_REQ, - -#define UV_REQ_PRIVATE_FIELDS \ - union { \ - /* Used by I/O operations */ \ - struct { \ - OVERLAPPED overlapped; \ - size_t queued_bytes; \ - } io; \ - } u; \ - struct uv_req_s* next_req; - -#define UV_WRITE_PRIVATE_FIELDS \ - int coalesced; \ - uv_buf_t write_buffer; \ - HANDLE event_handle; \ - HANDLE wait_handle; - -#define UV_CONNECT_PRIVATE_FIELDS \ - /* empty */ - -#define UV_SHUTDOWN_PRIVATE_FIELDS \ - /* empty */ - -#define UV_UDP_SEND_PRIVATE_FIELDS \ - /* empty */ - -#define UV_PRIVATE_REQ_TYPES \ - typedef struct uv_pipe_accept_s { \ - UV_REQ_FIELDS \ - HANDLE pipeHandle; \ - struct uv_pipe_accept_s* next_pending; \ - } uv_pipe_accept_t; \ - \ - typedef struct uv_tcp_accept_s { \ - UV_REQ_FIELDS \ - SOCKET accept_socket; \ - char accept_buffer[sizeof(struct sockaddr_storage) * 2 + 32]; \ - HANDLE event_handle; \ - HANDLE wait_handle; \ - struct uv_tcp_accept_s* next_pending; \ - } uv_tcp_accept_t; \ - \ - typedef struct uv_read_s { \ - UV_REQ_FIELDS \ - HANDLE event_handle; \ - HANDLE wait_handle; \ - } uv_read_t; - -#define uv_stream_connection_fields \ - unsigned int write_reqs_pending; \ - uv_shutdown_t* shutdown_req; - -#define uv_stream_server_fields \ - uv_connection_cb connection_cb; - -#define UV_STREAM_PRIVATE_FIELDS \ - unsigned int reqs_pending; \ - int activecnt; \ - uv_read_t read_req; \ - union { \ - struct { uv_stream_connection_fields } conn; \ - struct { uv_stream_server_fields } serv; \ - } stream; - -#define uv_tcp_server_fields \ - uv_tcp_accept_t* accept_reqs; \ - unsigned int processed_accepts; \ - uv_tcp_accept_t* pending_accepts; \ - LPFN_ACCEPTEX func_acceptex; - -#define uv_tcp_connection_fields \ - uv_buf_t read_buffer; \ - LPFN_CONNECTEX func_connectex; - -#define UV_TCP_PRIVATE_FIELDS \ - SOCKET socket; \ - int delayed_error; \ - union { \ - struct { uv_tcp_server_fields } serv; \ - struct { uv_tcp_connection_fields } conn; \ - } tcp; - -#define UV_UDP_PRIVATE_FIELDS \ - SOCKET socket; \ - unsigned int reqs_pending; \ - int activecnt; \ - uv_req_t recv_req; \ - uv_buf_t recv_buffer; \ - struct sockaddr_storage recv_from; \ - int recv_from_len; \ - uv_udp_recv_cb recv_cb; \ - uv_alloc_cb alloc_cb; \ - LPFN_WSARECV func_wsarecv; \ - LPFN_WSARECVFROM func_wsarecvfrom; - -#define uv_pipe_server_fields \ - int pending_instances; \ - uv_pipe_accept_t* accept_reqs; \ - uv_pipe_accept_t* pending_accepts; - -#define uv_pipe_connection_fields \ - uv_timer_t* eof_timer; \ - uv_write_t dummy; /* TODO: retained for ABI compat; remove this in v2.x. */ \ - DWORD ipc_remote_pid; \ - union { \ - uint32_t payload_remaining; \ - uint64_t dummy; /* TODO: retained for ABI compat; remove this in v2.x. */ \ - } ipc_data_frame; \ - void* ipc_xfer_queue[2]; \ - int ipc_xfer_queue_length; \ - uv_write_t* non_overlapped_writes_tail; \ - CRITICAL_SECTION readfile_thread_lock; \ - volatile HANDLE readfile_thread_handle; - -#define UV_PIPE_PRIVATE_FIELDS \ - HANDLE handle; \ - WCHAR* name; \ - union { \ - struct { uv_pipe_server_fields } serv; \ - struct { uv_pipe_connection_fields } conn; \ - } pipe; - -/* TODO: put the parser states in an union - TTY handles are always half-duplex - * so read-state can safely overlap write-state. */ -#define UV_TTY_PRIVATE_FIELDS \ - HANDLE handle; \ - union { \ - struct { \ - /* Used for readable TTY handles */ \ - /* TODO: remove me in v2.x. */ \ - HANDLE unused_; \ - uv_buf_t read_line_buffer; \ - HANDLE read_raw_wait; \ - /* Fields used for translating win keystrokes into vt100 characters */ \ - char last_key[8]; \ - unsigned char last_key_offset; \ - unsigned char last_key_len; \ - WCHAR last_utf16_high_surrogate; \ - INPUT_RECORD last_input_record; \ - } rd; \ - struct { \ - /* Used for writable TTY handles */ \ - /* utf8-to-utf16 conversion state */ \ - unsigned int utf8_codepoint; \ - unsigned char utf8_bytes_left; \ - /* eol conversion state */ \ - unsigned char previous_eol; \ - /* ansi parser state */ \ - unsigned short ansi_parser_state; \ - unsigned char ansi_csi_argc; \ - unsigned short ansi_csi_argv[4]; \ - COORD saved_position; \ - WORD saved_attributes; \ - } wr; \ - } tty; - -#define UV_POLL_PRIVATE_FIELDS \ - SOCKET socket; \ - /* Used in fast mode */ \ - SOCKET peer_socket; \ - AFD_POLL_INFO afd_poll_info_1; \ - AFD_POLL_INFO afd_poll_info_2; \ - /* Used in fast and slow mode. */ \ - uv_req_t poll_req_1; \ - uv_req_t poll_req_2; \ - unsigned char submitted_events_1; \ - unsigned char submitted_events_2; \ - unsigned char mask_events_1; \ - unsigned char mask_events_2; \ - unsigned char events; - -#define UV_TIMER_PRIVATE_FIELDS \ - void* heap_node[3]; \ - int unused; \ - uint64_t timeout; \ - uint64_t repeat; \ - uint64_t start_id; \ - uv_timer_cb timer_cb; - -#define UV_ASYNC_PRIVATE_FIELDS \ - struct uv_req_s async_req; \ - uv_async_cb async_cb; \ - /* char to avoid alignment issues */ \ - char volatile async_sent; - -#define UV_PREPARE_PRIVATE_FIELDS \ - uv_prepare_t* prepare_prev; \ - uv_prepare_t* prepare_next; \ - uv_prepare_cb prepare_cb; - -#define UV_CHECK_PRIVATE_FIELDS \ - uv_check_t* check_prev; \ - uv_check_t* check_next; \ - uv_check_cb check_cb; - -#define UV_IDLE_PRIVATE_FIELDS \ - uv_idle_t* idle_prev; \ - uv_idle_t* idle_next; \ - uv_idle_cb idle_cb; - -#define UV_HANDLE_PRIVATE_FIELDS \ - uv_handle_t* endgame_next; \ - unsigned int flags; - -#define UV_GETADDRINFO_PRIVATE_FIELDS \ - struct uv__work work_req; \ - uv_getaddrinfo_cb getaddrinfo_cb; \ - void* alloc; \ - WCHAR* node; \ - WCHAR* service; \ - /* The addrinfoW field is used to store a pointer to the hints, and */ \ - /* later on to store the result of GetAddrInfoW. The final result will */ \ - /* be converted to struct addrinfo* and stored in the addrinfo field. */ \ - struct addrinfoW* addrinfow; \ - struct addrinfo* addrinfo; \ - int retcode; - -#define UV_GETNAMEINFO_PRIVATE_FIELDS \ - struct uv__work work_req; \ - uv_getnameinfo_cb getnameinfo_cb; \ - struct sockaddr_storage storage; \ - int flags; \ - char host[NI_MAXHOST]; \ - char service[NI_MAXSERV]; \ - int retcode; - -#define UV_PROCESS_PRIVATE_FIELDS \ - struct uv_process_exit_s { \ - UV_REQ_FIELDS \ - } exit_req; \ - BYTE* child_stdio_buffer; \ - int exit_signal; \ - HANDLE wait_handle; \ - HANDLE process_handle; \ - volatile char exit_cb_pending; - -#define UV_FS_PRIVATE_FIELDS \ - struct uv__work work_req; \ - int flags; \ - DWORD sys_errno_; \ - union { \ - /* TODO: remove me in 0.9. */ \ - WCHAR* pathw; \ - int fd; \ - } file; \ - union { \ - struct { \ - int mode; \ - WCHAR* new_pathw; \ - int file_flags; \ - int fd_out; \ - unsigned int nbufs; \ - uv_buf_t* bufs; \ - int64_t offset; \ - uv_buf_t bufsml[4]; \ - } info; \ - struct { \ - double atime; \ - double mtime; \ - } time; \ - } fs; - -#define UV_WORK_PRIVATE_FIELDS \ - struct uv__work work_req; - -#define UV_FS_EVENT_PRIVATE_FIELDS \ - struct uv_fs_event_req_s { \ - UV_REQ_FIELDS \ - } req; \ - HANDLE dir_handle; \ - int req_pending; \ - uv_fs_event_cb cb; \ - WCHAR* filew; \ - WCHAR* short_filew; \ - WCHAR* dirw; \ - char* buffer; - -#define UV_SIGNAL_PRIVATE_FIELDS \ - RB_ENTRY(uv_signal_s) tree_entry; \ - struct uv_req_s signal_req; \ - unsigned long pending_signum; - -#ifndef F_OK -#define F_OK 0 -#endif -#ifndef R_OK -#define R_OK 4 -#endif -#ifndef W_OK -#define W_OK 2 -#endif -#ifndef X_OK -#define X_OK 1 -#endif - -/* fs open() flags supported on this platform: */ -#define UV_FS_O_APPEND _O_APPEND -#define UV_FS_O_CREAT _O_CREAT -#define UV_FS_O_EXCL _O_EXCL -#define UV_FS_O_FILEMAP 0x20000000 -#define UV_FS_O_RANDOM _O_RANDOM -#define UV_FS_O_RDONLY _O_RDONLY -#define UV_FS_O_RDWR _O_RDWR -#define UV_FS_O_SEQUENTIAL _O_SEQUENTIAL -#define UV_FS_O_SHORT_LIVED _O_SHORT_LIVED -#define UV_FS_O_TEMPORARY _O_TEMPORARY -#define UV_FS_O_TRUNC _O_TRUNC -#define UV_FS_O_WRONLY _O_WRONLY - -/* fs open() flags supported on other platforms (or mapped on this platform): */ -#define UV_FS_O_DIRECT 0x02000000 /* FILE_FLAG_NO_BUFFERING */ -#define UV_FS_O_DIRECTORY 0 -#define UV_FS_O_DSYNC 0x04000000 /* FILE_FLAG_WRITE_THROUGH */ -#define UV_FS_O_EXLOCK 0x10000000 /* EXCLUSIVE SHARING MODE */ -#define UV_FS_O_NOATIME 0 -#define UV_FS_O_NOCTTY 0 -#define UV_FS_O_NOFOLLOW 0 -#define UV_FS_O_NONBLOCK 0 -#define UV_FS_O_SYMLINK 0 -#define UV_FS_O_SYNC 0x08000000 /* FILE_FLAG_WRITE_THROUGH */ diff --git a/libuv/libuv-static.pc.in b/libuv/libuv-static.pc.in deleted file mode 100644 index ea62548..0000000 --- a/libuv/libuv-static.pc.in +++ /dev/null @@ -1,12 +0,0 @@ -prefix=@prefix@ -exec_prefix=${prefix} -libdir=@libdir@ -includedir=@includedir@ - -Name: libuv-static -Version: @PACKAGE_VERSION@ -Description: multi-platform support library with a focus on asynchronous I/O. -URL: http://libuv.org/ - -Libs: -L${libdir} -luv_a @LIBS@ -Cflags: -I${includedir} diff --git a/libuv/libuv.pc.in b/libuv/libuv.pc.in deleted file mode 100644 index 1d7b86f..0000000 --- a/libuv/libuv.pc.in +++ /dev/null @@ -1,12 +0,0 @@ -prefix=@prefix@ -exec_prefix=${prefix} -libdir=@libdir@ -includedir=@includedir@ - -Name: libuv -Version: @PACKAGE_VERSION@ -Description: multi-platform support library with a focus on asynchronous I/O. -URL: http://libuv.org/ - -Libs: -L${libdir} -luv @LIBS@ -Cflags: -I${includedir} diff --git a/libuv/m4/.gitignore b/libuv/m4/.gitignore deleted file mode 100644 index bb91e50..0000000 --- a/libuv/m4/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Ignore libtoolize-generated files. -*.m4 -!as_case.m4 -!ax_pthread.m4 -!libuv-check-flags.m4 diff --git a/libuv/m4/as_case.m4 b/libuv/m4/as_case.m4 deleted file mode 100644 index c7ae0f0..0000000 --- a/libuv/m4/as_case.m4 +++ /dev/null @@ -1,21 +0,0 @@ -# AS_CASE(WORD, [PATTERN1], [IF-MATCHED1]...[DEFAULT]) -# ---------------------------------------------------- -# Expand into -# | case WORD in -# | PATTERN1) IF-MATCHED1 ;; -# | ... -# | *) DEFAULT ;; -# | esac -m4_define([_AS_CASE], -[m4_if([$#], 0, [m4_fatal([$0: too few arguments: $#])], - [$#], 1, [ *) $1 ;;], - [$#], 2, [ $1) m4_default([$2], [:]) ;;], - [ $1) m4_default([$2], [:]) ;; -$0(m4_shiftn(2, $@))])dnl -]) -m4_defun([AS_CASE], -[m4_ifval([$2$3], -[case $1 in -_AS_CASE(m4_shift($@)) -esac])]) - diff --git a/libuv/m4/ax_pthread.m4 b/libuv/m4/ax_pthread.m4 deleted file mode 100644 index 5fbf9fe..0000000 --- a/libuv/m4/ax_pthread.m4 +++ /dev/null @@ -1,485 +0,0 @@ -# =========================================================================== -# https://www.gnu.org/software/autoconf-archive/ax_pthread.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) -# -# DESCRIPTION -# -# This macro figures out how to build C programs using POSIX threads. It -# sets the PTHREAD_LIBS output variable to the threads library and linker -# flags, and the PTHREAD_CFLAGS output variable to any special C compiler -# flags that are needed. (The user can also force certain compiler -# flags/libs to be tested by setting these environment variables.) -# -# Also sets PTHREAD_CC to any special C compiler that is needed for -# multi-threaded programs (defaults to the value of CC otherwise). (This -# is necessary on AIX to use the special cc_r compiler alias.) -# -# NOTE: You are assumed to not only compile your program with these flags, -# but also to link with them as well. For example, you might link with -# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS -# -# If you are only building threaded programs, you may wish to use these -# variables in your default LIBS, CFLAGS, and CC: -# -# LIBS="$PTHREAD_LIBS $LIBS" -# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -# CC="$PTHREAD_CC" -# -# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant -# has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to -# that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). -# -# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the -# PTHREAD_PRIO_INHERIT symbol is defined when compiling with -# PTHREAD_CFLAGS. -# -# ACTION-IF-FOUND is a list of shell commands to run if a threads library -# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it -# is not found. If ACTION-IF-FOUND is not specified, the default action -# will define HAVE_PTHREAD. -# -# Please let the authors know if this macro fails on any platform, or if -# you have any other suggestions or comments. This macro was based on work -# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help -# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by -# Alejandro Forero Cuervo to the autoconf macro repository. We are also -# grateful for the helpful feedback of numerous users. -# -# Updated for Autoconf 2.68 by Daniel Richard G. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2011 Daniel Richard G. -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 24 - -AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) -AC_DEFUN([AX_PTHREAD], [ -AC_REQUIRE([AC_CANONICAL_HOST]) -AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AC_PROG_SED]) -AC_LANG_PUSH([C]) -ax_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on Tru64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then - ax_pthread_save_CC="$CC" - ax_pthread_save_CFLAGS="$CFLAGS" - ax_pthread_save_LIBS="$LIBS" - AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"]) - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS]) - AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes]) - AC_MSG_RESULT([$ax_pthread_ok]) - if test "x$ax_pthread_ok" = "xno"; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - CC="$ax_pthread_save_CC" - CFLAGS="$ax_pthread_save_CFLAGS" - LIBS="$ax_pthread_save_LIBS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 -# (Note: HP C rejects this with "bad form for `-t' option") -# -pthreads: Solaris/gcc (Note: HP C also rejects) -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads and -# -D_REENTRANT too), HP C (must be checked before -lpthread, which -# is present but should not be used directly; and before -mthreads, -# because the compiler interprets this as "-mt" + "-hreads") -# -mthreads: Mingw32/gcc, Lynx/gcc -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case $host_os in - - freebsd*) - - # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) - # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) - - ax_pthread_flags="-kthread lthread $ax_pthread_flags" - ;; - - hpux*) - - # From the cc(1) man page: "[-mt] Sets various -D flags to enable - # multi-threading and also sets -lpthread." - - ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" - ;; - - openedition*) - - # IBM z/OS requires a feature-test macro to be defined in order to - # enable POSIX threads at all, so give the user a hint if this is - # not set. (We don't define these ourselves, as they can affect - # other portions of the system API in unpredictable ways.) - - AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING], - [ -# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) - AX_PTHREAD_ZOS_MISSING -# endif - ], - [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])]) - ;; - - solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (N.B.: The stubs are missing - # pthread_cleanup_push, or rather a function called by this macro, - # so we could check for that, but who knows whether they'll stub - # that too in a future libc.) So we'll check first for the - # standard Solaris way of linking pthreads (-mt -lpthread). - - ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags" - ;; -esac - -# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) - -AS_IF([test "x$GCC" = "xyes"], - [ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"]) - -# The presence of a feature test macro requesting re-entrant function -# definitions is, on some systems, a strong hint that pthreads support is -# correctly enabled - -case $host_os in - darwin* | hpux* | linux* | osf* | solaris*) - ax_pthread_check_macro="_REENTRANT" - ;; - - aix*) - ax_pthread_check_macro="_THREAD_SAFE" - ;; - - *) - ax_pthread_check_macro="--" - ;; -esac -AS_IF([test "x$ax_pthread_check_macro" = "x--"], - [ax_pthread_check_cond=0], - [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"]) - -# Are we compiling with Clang? - -AC_CACHE_CHECK([whether $CC is Clang], - [ax_cv_PTHREAD_CLANG], - [ax_cv_PTHREAD_CLANG=no - # Note that Autoconf sets GCC=yes for Clang as well as GCC - if test "x$GCC" = "xyes"; then - AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG], - [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ -# if defined(__clang__) && defined(__llvm__) - AX_PTHREAD_CC_IS_CLANG -# endif - ], - [ax_cv_PTHREAD_CLANG=yes]) - fi - ]) -ax_pthread_clang="$ax_cv_PTHREAD_CLANG" - -ax_pthread_clang_warning=no - -# Clang needs special handling, because older versions handle the -pthread -# option in a rather... idiosyncratic way - -if test "x$ax_pthread_clang" = "xyes"; then - - # Clang takes -pthread; it has never supported any other flag - - # (Note 1: This will need to be revisited if a system that Clang - # supports has POSIX threads in a separate library. This tends not - # to be the way of modern systems, but it's conceivable.) - - # (Note 2: On some systems, notably Darwin, -pthread is not needed - # to get POSIX threads support; the API is always present and - # active. We could reasonably leave PTHREAD_CFLAGS empty. But - # -pthread does define _REENTRANT, and while the Darwin headers - # ignore this macro, third-party headers might not.) - - PTHREAD_CFLAGS="-pthread" - PTHREAD_LIBS= - - ax_pthread_ok=yes - - # However, older versions of Clang make a point of warning the user - # that, in an invocation where only linking and no compilation is - # taking place, the -pthread option has no effect ("argument unused - # during compilation"). They expect -pthread to be passed in only - # when source code is being compiled. - # - # Problem is, this is at odds with the way Automake and most other - # C build frameworks function, which is that the same flags used in - # compilation (CFLAGS) are also used in linking. Many systems - # supported by AX_PTHREAD require exactly this for POSIX threads - # support, and in fact it is often not straightforward to specify a - # flag that is used only in the compilation phase and not in - # linking. Such a scenario is extremely rare in practice. - # - # Even though use of the -pthread flag in linking would only print - # a warning, this can be a nuisance for well-run software projects - # that build with -Werror. So if the active version of Clang has - # this misfeature, we search for an option to squash it. - - AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread], - [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG], - [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown - # Create an alternate version of $ac_link that compiles and - # links in two steps (.c -> .o, .o -> exe) instead of one - # (.c -> exe), because the warning occurs only in the second - # step - ax_pthread_save_ac_link="$ac_link" - ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' - ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` - ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" - ax_pthread_save_CFLAGS="$CFLAGS" - for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do - AS_IF([test "x$ax_pthread_try" = "xunknown"], [break]) - CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" - ac_link="$ax_pthread_save_ac_link" - AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], - [ac_link="$ax_pthread_2step_ac_link" - AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], - [break]) - ]) - done - ac_link="$ax_pthread_save_ac_link" - CFLAGS="$ax_pthread_save_CFLAGS" - AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no]) - ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" - ]) - - case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in - no | unknown) ;; - *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; - esac - -fi # $ax_pthread_clang = yes - -if test "x$ax_pthread_ok" = "xno"; then -for ax_pthread_try_flag in $ax_pthread_flags; do - - case $ax_pthread_try_flag in - none) - AC_MSG_CHECKING([whether pthreads work without any flags]) - ;; - - -mt,pthread) - AC_MSG_CHECKING([whether pthreads work with -mt -lpthread]) - PTHREAD_CFLAGS="-mt" - PTHREAD_LIBS="-lpthread" - ;; - - -*) - AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag]) - PTHREAD_CFLAGS="$ax_pthread_try_flag" - ;; - - pthread-config) - AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) - AS_IF([test "x$ax_pthread_config" = "xno"], [continue]) - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag]) - PTHREAD_LIBS="-l$ax_pthread_try_flag" - ;; - esac - - ax_pthread_save_CFLAGS="$CFLAGS" - ax_pthread_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - - AC_LINK_IFELSE([AC_LANG_PROGRAM([#include -# if $ax_pthread_check_cond -# error "$ax_pthread_check_macro must be defined" -# endif - static void routine(void *a) { a = 0; } - static void *start_routine(void *a) { return a; }], - [pthread_t th; pthread_attr_t attr; - pthread_create(&th, 0, start_routine, 0); - pthread_join(th, 0); - pthread_attr_init(&attr); - pthread_cleanup_push(routine, 0); - pthread_cleanup_pop(0) /* ; */])], - [ax_pthread_ok=yes], - []) - - CFLAGS="$ax_pthread_save_CFLAGS" - LIBS="$ax_pthread_save_LIBS" - - AC_MSG_RESULT([$ax_pthread_ok]) - AS_IF([test "x$ax_pthread_ok" = "xyes"], [break]) - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$ax_pthread_ok" = "xyes"; then - ax_pthread_save_CFLAGS="$CFLAGS" - ax_pthread_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - AC_CACHE_CHECK([for joinable pthread attribute], - [ax_cv_PTHREAD_JOINABLE_ATTR], - [ax_cv_PTHREAD_JOINABLE_ATTR=unknown - for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], - [int attr = $ax_pthread_attr; return attr /* ; */])], - [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break], - []) - done - ]) - AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ - test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ - test "x$ax_pthread_joinable_attr_defined" != "xyes"], - [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], - [$ax_cv_PTHREAD_JOINABLE_ATTR], - [Define to necessary symbol if this constant - uses a non-standard name on your system.]) - ax_pthread_joinable_attr_defined=yes - ]) - - AC_CACHE_CHECK([whether more special flags are required for pthreads], - [ax_cv_PTHREAD_SPECIAL_FLAGS], - [ax_cv_PTHREAD_SPECIAL_FLAGS=no - case $host_os in - solaris*) - ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" - ;; - esac - ]) - AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ - test "x$ax_pthread_special_flags_added" != "xyes"], - [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" - ax_pthread_special_flags_added=yes]) - - AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], - [ax_cv_PTHREAD_PRIO_INHERIT], - [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[int i = PTHREAD_PRIO_INHERIT;]])], - [ax_cv_PTHREAD_PRIO_INHERIT=yes], - [ax_cv_PTHREAD_PRIO_INHERIT=no]) - ]) - AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ - test "x$ax_pthread_prio_inherit_defined" != "xyes"], - [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.]) - ax_pthread_prio_inherit_defined=yes - ]) - - CFLAGS="$ax_pthread_save_CFLAGS" - LIBS="$ax_pthread_save_LIBS" - - # More AIX lossage: compile with *_r variant - if test "x$GCC" != "xyes"; then - case $host_os in - aix*) - AS_CASE(["x/$CC"], - [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], - [#handle absolute path differently from PATH based program lookup - AS_CASE(["x$CC"], - [x/*], - [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], - [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) - ;; - esac - fi -fi - -test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" - -AC_SUBST([PTHREAD_LIBS]) -AC_SUBST([PTHREAD_CFLAGS]) -AC_SUBST([PTHREAD_CC]) - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test "x$ax_pthread_ok" = "xyes"; then - ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) - : -else - ax_pthread_ok=no - $2 -fi -AC_LANG_POP -])dnl AX_PTHREAD diff --git a/libuv/m4/libuv-check-flags.m4 b/libuv/m4/libuv-check-flags.m4 deleted file mode 100644 index e347056..0000000 --- a/libuv/m4/libuv-check-flags.m4 +++ /dev/null @@ -1,319 +0,0 @@ -dnl Macros to check the presence of generic (non-typed) symbols. -dnl Copyright (c) 2006-2008 Diego Pettenò -dnl Copyright (c) 2006-2008 xine project -dnl -dnl This program is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 3, or (at your option) -dnl any later version. -dnl -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program; if not, write to the Free Software -dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -dnl 02110-1301, USA. -dnl -dnl As a special exception, the copyright owners of the -dnl macro gives unlimited permission to copy, distribute and modify the -dnl configure scripts that are the output of Autoconf when processing the -dnl Macro. You need not follow the terms of the GNU General Public -dnl License when using or distributing such scripts, even though portions -dnl of the text of the Macro appear in them. The GNU General Public -dnl License (GPL) does govern all other use of the material that -dnl constitutes the Autoconf Macro. -dnl -dnl This special exception to the GPL applies to versions of the -dnl Autoconf Macro released by this project. When you make and -dnl distribute a modified version of the Autoconf Macro, you may extend -dnl this special exception to the GPL to apply to your modified version as -dnl well. - -dnl Check if the flag is supported by compiler -dnl CC_CHECK_CFLAGS_SILENT([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) - -AC_DEFUN([CC_CHECK_CFLAGS_SILENT], [ - AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]), - [ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $1" - AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a;])], - [eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"], - [eval "AS_TR_SH([cc_cv_cflags_$1])='no'"]) - CFLAGS="$ac_save_CFLAGS" - ]) - - AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], - [$2], [$3]) -]) - -dnl Check if the flag is supported by compiler (cacheable) -dnl CC_CHECK_CFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) - -AC_DEFUN([CC_CHECK_CFLAGS], [ - AC_CACHE_CHECK([if $CC supports $1 flag], - AS_TR_SH([cc_cv_cflags_$1]), - CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here! - ) - - AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], - [$2], [$3]) -]) - -dnl CC_CHECK_CFLAG_APPEND(FLAG, [action-if-found], [action-if-not-found]) -dnl Check for CFLAG and appends them to CFLAGS if supported -AC_DEFUN([CC_CHECK_CFLAG_APPEND], [ - AC_CACHE_CHECK([if $CC supports $1 flag], - AS_TR_SH([cc_cv_cflags_$1]), - CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here! - ) - - AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], - [CFLAGS="$CFLAGS $1"; DEBUG_CFLAGS="$DEBUG_CFLAGS $1"; $2], [$3]) -]) - -dnl CC_CHECK_CFLAGS_APPEND([FLAG1 FLAG2], [action-if-found], [action-if-not]) -AC_DEFUN([CC_CHECK_CFLAGS_APPEND], [ - for flag in $1; do - CC_CHECK_CFLAG_APPEND($flag, [$2], [$3]) - done -]) - -dnl Check if the flag is supported by linker (cacheable) -dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) - -AC_DEFUN([CC_CHECK_LDFLAGS], [ - AC_CACHE_CHECK([if $CC supports $1 flag], - AS_TR_SH([cc_cv_ldflags_$1]), - [ac_save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $1" - AC_LANG_PUSH([C]) - AC_LINK_IFELSE([AC_LANG_SOURCE([int main() { return 1; }])], - [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"], - [eval "AS_TR_SH([cc_cv_ldflags_$1])="]) - AC_LANG_POP([C]) - LDFLAGS="$ac_save_LDFLAGS" - ]) - - AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes], - [$2], [$3]) -]) - -dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for -dnl the current linker to avoid undefined references in a shared object. -AC_DEFUN([CC_NOUNDEFINED], [ - dnl We check $host for which systems to enable this for. - AC_REQUIRE([AC_CANONICAL_HOST]) - - case $host in - dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads - dnl are requested, as different implementations are present; to avoid problems - dnl use -Wl,-z,defs only for those platform not behaving this way. - *-freebsd* | *-openbsd*) ;; - *) - dnl First of all check for the --no-undefined variant of GNU ld. This allows - dnl for a much more readable commandline, so that people can understand what - dnl it does without going to look for what the heck -z defs does. - for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do - CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"]) - break - done - ;; - esac - - AC_SUBST([LDFLAGS_NOUNDEFINED]) -]) - -dnl Check for a -Werror flag or equivalent. -Werror is the GCC -dnl and ICC flag that tells the compiler to treat all the warnings -dnl as fatal. We usually need this option to make sure that some -dnl constructs (like attributes) are not simply ignored. -dnl -dnl Other compilers don't support -Werror per se, but they support -dnl an equivalent flag: -dnl - Sun Studio compiler supports -errwarn=%all -AC_DEFUN([CC_CHECK_WERROR], [ - AC_CACHE_CHECK( - [for $CC way to treat warnings as errors], - [cc_cv_werror], - [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror], - [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])]) - ]) -]) - -AC_DEFUN([CC_CHECK_ATTRIBUTE], [ - AC_REQUIRE([CC_CHECK_WERROR]) - AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))], - AS_TR_SH([cc_cv_attribute_$1]), - [ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $cc_cv_werror" - AC_LANG_PUSH([C]) - AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])], - [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"], - [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"]) - AC_LANG_POP([C]) - CFLAGS="$ac_save_CFLAGS" - ]) - - AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes], - [AC_DEFINE( - AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1, - [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))] - ) - $4], - [$5]) -]) - -AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [ - CC_CHECK_ATTRIBUTE( - [constructor],, - [void __attribute__((constructor)) ctor() { int a; }], - [$1], [$2]) -]) - -AC_DEFUN([CC_ATTRIBUTE_FORMAT], [ - CC_CHECK_ATTRIBUTE( - [format], [format(printf, n, n)], - [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }], - [$1], [$2]) -]) - -AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [ - CC_CHECK_ATTRIBUTE( - [format_arg], [format_arg(printf)], - [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }], - [$1], [$2]) -]) - -AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [ - CC_CHECK_ATTRIBUTE( - [visibility_$1], [visibility("$1")], - [void __attribute__((visibility("$1"))) $1_function() { }], - [$2], [$3]) -]) - -AC_DEFUN([CC_ATTRIBUTE_NONNULL], [ - CC_CHECK_ATTRIBUTE( - [nonnull], [nonnull()], - [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }], - [$1], [$2]) -]) - -AC_DEFUN([CC_ATTRIBUTE_UNUSED], [ - CC_CHECK_ATTRIBUTE( - [unused], , - [void some_function(void *foo, __attribute__((unused)) void *bar);], - [$1], [$2]) -]) - -AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [ - CC_CHECK_ATTRIBUTE( - [sentinel], , - [void some_function(void *foo, ...) __attribute__((sentinel));], - [$1], [$2]) -]) - -AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [ - CC_CHECK_ATTRIBUTE( - [deprecated], , - [void some_function(void *foo, ...) __attribute__((deprecated));], - [$1], [$2]) -]) - -AC_DEFUN([CC_ATTRIBUTE_ALIAS], [ - CC_CHECK_ATTRIBUTE( - [alias], [weak, alias], - [void other_function(void *foo) { } - void some_function(void *foo) __attribute__((weak, alias("other_function")));], - [$1], [$2]) -]) - -AC_DEFUN([CC_ATTRIBUTE_MALLOC], [ - CC_CHECK_ATTRIBUTE( - [malloc], , - [void * __attribute__((malloc)) my_alloc(int n);], - [$1], [$2]) -]) - -AC_DEFUN([CC_ATTRIBUTE_PACKED], [ - CC_CHECK_ATTRIBUTE( - [packed], , - [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));], - [$1], [$2]) -]) - -AC_DEFUN([CC_ATTRIBUTE_CONST], [ - CC_CHECK_ATTRIBUTE( - [const], , - [int __attribute__((const)) twopow(int n) { return 1 << n; } ], - [$1], [$2]) -]) - -AC_DEFUN([CC_FLAG_VISIBILITY], [ - AC_REQUIRE([CC_CHECK_WERROR]) - AC_CACHE_CHECK([if $CC supports -fvisibility=hidden], - [cc_cv_flag_visibility], - [cc_flag_visibility_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $cc_cv_werror" - CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden], - cc_cv_flag_visibility='yes', - cc_cv_flag_visibility='no') - CFLAGS="$cc_flag_visibility_save_CFLAGS"]) - - AS_IF([test "x$cc_cv_flag_visibility" = "xyes"], - [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1, - [Define this if the compiler supports the -fvisibility flag]) - $1], - [$2]) -]) - -AC_DEFUN([CC_FUNC_EXPECT], [ - AC_REQUIRE([CC_CHECK_WERROR]) - AC_CACHE_CHECK([if compiler has __builtin_expect function], - [cc_cv_func_expect], - [ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $cc_cv_werror" - AC_LANG_PUSH([C]) - AC_COMPILE_IFELSE([AC_LANG_SOURCE( - [int some_function() { - int a = 3; - return (int)__builtin_expect(a, 3); - }])], - [cc_cv_func_expect=yes], - [cc_cv_func_expect=no]) - AC_LANG_POP([C]) - CFLAGS="$ac_save_CFLAGS" - ]) - - AS_IF([test "x$cc_cv_func_expect" = "xyes"], - [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1, - [Define this if the compiler supports __builtin_expect() function]) - $1], - [$2]) -]) - -AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [ - AC_REQUIRE([CC_CHECK_WERROR]) - AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported], - [cc_cv_attribute_aligned], - [ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $cc_cv_werror" - AC_LANG_PUSH([C]) - for cc_attribute_align_try in 64 32 16 8 4 2; do - AC_COMPILE_IFELSE([AC_LANG_SOURCE([ - int main() { - static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0; - return c; - }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break]) - done - AC_LANG_POP([C]) - CFLAGS="$ac_save_CFLAGS" - ]) - - if test "x$cc_cv_attribute_aligned" != "x"; then - AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned], - [Define the highest alignment supported]) - fi -]) diff --git a/libuv/src/fs-poll.c b/libuv/src/fs-poll.c deleted file mode 100644 index 89864e2..0000000 --- a/libuv/src/fs-poll.c +++ /dev/null @@ -1,287 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "uv-common.h" - -#ifdef _WIN32 -#include "win/internal.h" -#include "win/handle-inl.h" -#define uv__make_close_pending(h) uv_want_endgame((h)->loop, (h)) -#else -#include "unix/internal.h" -#endif - -#include -#include -#include - -struct poll_ctx { - uv_fs_poll_t* parent_handle; - int busy_polling; - unsigned int interval; - uint64_t start_time; - uv_loop_t* loop; - uv_fs_poll_cb poll_cb; - uv_timer_t timer_handle; - uv_fs_t fs_req; /* TODO(bnoordhuis) mark fs_req internal */ - uv_stat_t statbuf; - struct poll_ctx* previous; /* context from previous start()..stop() period */ - char path[1]; /* variable length */ -}; - -static int statbuf_eq(const uv_stat_t* a, const uv_stat_t* b); -static void poll_cb(uv_fs_t* req); -static void timer_cb(uv_timer_t* timer); -static void timer_close_cb(uv_handle_t* handle); - -static uv_stat_t zero_statbuf; - - -int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle) { - uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_POLL); - handle->poll_ctx = NULL; - return 0; -} - - -int uv_fs_poll_start(uv_fs_poll_t* handle, - uv_fs_poll_cb cb, - const char* path, - unsigned int interval) { - struct poll_ctx* ctx; - uv_loop_t* loop; - size_t len; - int err; - - if (uv_is_active((uv_handle_t*)handle)) - return 0; - - loop = handle->loop; - len = strlen(path); - ctx = uv__calloc(1, sizeof(*ctx) + len); - - if (ctx == NULL) - return UV_ENOMEM; - - ctx->loop = loop; - ctx->poll_cb = cb; - ctx->interval = interval ? interval : 1; - ctx->start_time = uv_now(loop); - ctx->parent_handle = handle; - memcpy(ctx->path, path, len + 1); - - err = uv_timer_init(loop, &ctx->timer_handle); - if (err < 0) - goto error; - - ctx->timer_handle.flags |= UV_HANDLE_INTERNAL; - uv__handle_unref(&ctx->timer_handle); - - err = uv_fs_stat(loop, &ctx->fs_req, ctx->path, poll_cb); - if (err < 0) - goto error; - - if (handle->poll_ctx != NULL) - ctx->previous = handle->poll_ctx; - handle->poll_ctx = ctx; - uv__handle_start(handle); - - return 0; - -error: - uv__free(ctx); - return err; -} - - -int uv_fs_poll_stop(uv_fs_poll_t* handle) { - struct poll_ctx* ctx; - - if (!uv_is_active((uv_handle_t*)handle)) - return 0; - - ctx = handle->poll_ctx; - assert(ctx != NULL); - assert(ctx->parent_handle == handle); - - /* Close the timer if it's active. If it's inactive, there's a stat request - * in progress and poll_cb will take care of the cleanup. - */ - if (uv_is_active((uv_handle_t*)&ctx->timer_handle)) - uv_close((uv_handle_t*)&ctx->timer_handle, timer_close_cb); - - uv__handle_stop(handle); - - return 0; -} - - -int uv_fs_poll_getpath(uv_fs_poll_t* handle, char* buffer, size_t* size) { - struct poll_ctx* ctx; - size_t required_len; - - if (!uv_is_active((uv_handle_t*)handle)) { - *size = 0; - return UV_EINVAL; - } - - ctx = handle->poll_ctx; - assert(ctx != NULL); - - required_len = strlen(ctx->path); - if (required_len >= *size) { - *size = required_len + 1; - return UV_ENOBUFS; - } - - memcpy(buffer, ctx->path, required_len); - *size = required_len; - buffer[required_len] = '\0'; - - return 0; -} - - -void uv__fs_poll_close(uv_fs_poll_t* handle) { - uv_fs_poll_stop(handle); - - if (handle->poll_ctx == NULL) - uv__make_close_pending((uv_handle_t*)handle); -} - - -static void timer_cb(uv_timer_t* timer) { - struct poll_ctx* ctx; - - ctx = container_of(timer, struct poll_ctx, timer_handle); - assert(ctx->parent_handle != NULL); - assert(ctx->parent_handle->poll_ctx == ctx); - ctx->start_time = uv_now(ctx->loop); - - if (uv_fs_stat(ctx->loop, &ctx->fs_req, ctx->path, poll_cb)) - abort(); -} - - -static void poll_cb(uv_fs_t* req) { - uv_stat_t* statbuf; - struct poll_ctx* ctx; - uint64_t interval; - uv_fs_poll_t* handle; - - ctx = container_of(req, struct poll_ctx, fs_req); - handle = ctx->parent_handle; - - if (!uv_is_active((uv_handle_t*)handle) || uv__is_closing(handle)) - goto out; - - if (req->result != 0) { - if (ctx->busy_polling != req->result) { - ctx->poll_cb(ctx->parent_handle, - req->result, - &ctx->statbuf, - &zero_statbuf); - ctx->busy_polling = req->result; - } - goto out; - } - - statbuf = &req->statbuf; - - if (ctx->busy_polling != 0) - if (ctx->busy_polling < 0 || !statbuf_eq(&ctx->statbuf, statbuf)) - ctx->poll_cb(ctx->parent_handle, 0, &ctx->statbuf, statbuf); - - ctx->statbuf = *statbuf; - ctx->busy_polling = 1; - -out: - uv_fs_req_cleanup(req); - - if (!uv_is_active((uv_handle_t*)handle) || uv__is_closing(handle)) { - uv_close((uv_handle_t*)&ctx->timer_handle, timer_close_cb); - return; - } - - /* Reschedule timer, subtract the delay from doing the stat(). */ - interval = ctx->interval; - interval -= (uv_now(ctx->loop) - ctx->start_time) % interval; - - if (uv_timer_start(&ctx->timer_handle, timer_cb, interval, 0)) - abort(); -} - - -static void timer_close_cb(uv_handle_t* timer) { - struct poll_ctx* ctx; - struct poll_ctx* it; - struct poll_ctx* last; - uv_fs_poll_t* handle; - - ctx = container_of(timer, struct poll_ctx, timer_handle); - handle = ctx->parent_handle; - if (ctx == handle->poll_ctx) { - handle->poll_ctx = ctx->previous; - if (handle->poll_ctx == NULL && uv__is_closing(handle)) - uv__make_close_pending((uv_handle_t*)handle); - } else { - for (last = handle->poll_ctx, it = last->previous; - it != ctx; - last = it, it = it->previous) { - assert(last->previous != NULL); - } - last->previous = ctx->previous; - } - uv__free(ctx); -} - - -static int statbuf_eq(const uv_stat_t* a, const uv_stat_t* b) { - return a->st_ctim.tv_nsec == b->st_ctim.tv_nsec - && a->st_mtim.tv_nsec == b->st_mtim.tv_nsec - && a->st_birthtim.tv_nsec == b->st_birthtim.tv_nsec - && a->st_ctim.tv_sec == b->st_ctim.tv_sec - && a->st_mtim.tv_sec == b->st_mtim.tv_sec - && a->st_birthtim.tv_sec == b->st_birthtim.tv_sec - && a->st_size == b->st_size - && a->st_mode == b->st_mode - && a->st_uid == b->st_uid - && a->st_gid == b->st_gid - && a->st_ino == b->st_ino - && a->st_dev == b->st_dev - && a->st_flags == b->st_flags - && a->st_gen == b->st_gen; -} - - -#if defined(_WIN32) - -#include "win/internal.h" -#include "win/handle-inl.h" - -void uv__fs_poll_endgame(uv_loop_t* loop, uv_fs_poll_t* handle) { - assert(handle->flags & UV_HANDLE_CLOSING); - assert(!(handle->flags & UV_HANDLE_CLOSED)); - uv__handle_close(handle); -} - -#endif /* _WIN32 */ diff --git a/libuv/src/heap-inl.h b/libuv/src/heap-inl.h deleted file mode 100644 index 1e2ed60..0000000 --- a/libuv/src/heap-inl.h +++ /dev/null @@ -1,245 +0,0 @@ -/* Copyright (c) 2013, Ben Noordhuis - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef UV_SRC_HEAP_H_ -#define UV_SRC_HEAP_H_ - -#include /* NULL */ - -#if defined(__GNUC__) -# define HEAP_EXPORT(declaration) __attribute__((unused)) static declaration -#else -# define HEAP_EXPORT(declaration) static declaration -#endif - -struct heap_node { - struct heap_node* left; - struct heap_node* right; - struct heap_node* parent; -}; - -/* A binary min heap. The usual properties hold: the root is the lowest - * element in the set, the height of the tree is at most log2(nodes) and - * it's always a complete binary tree. - * - * The heap function try hard to detect corrupted tree nodes at the cost - * of a minor reduction in performance. Compile with -DNDEBUG to disable. - */ -struct heap { - struct heap_node* min; - unsigned int nelts; -}; - -/* Return non-zero if a < b. */ -typedef int (*heap_compare_fn)(const struct heap_node* a, - const struct heap_node* b); - -/* Public functions. */ -HEAP_EXPORT(void heap_init(struct heap* heap)); -HEAP_EXPORT(struct heap_node* heap_min(const struct heap* heap)); -HEAP_EXPORT(void heap_insert(struct heap* heap, - struct heap_node* newnode, - heap_compare_fn less_than)); -HEAP_EXPORT(void heap_remove(struct heap* heap, - struct heap_node* node, - heap_compare_fn less_than)); -HEAP_EXPORT(void heap_dequeue(struct heap* heap, heap_compare_fn less_than)); - -/* Implementation follows. */ - -HEAP_EXPORT(void heap_init(struct heap* heap)) { - heap->min = NULL; - heap->nelts = 0; -} - -HEAP_EXPORT(struct heap_node* heap_min(const struct heap* heap)) { - return heap->min; -} - -/* Swap parent with child. Child moves closer to the root, parent moves away. */ -static void heap_node_swap(struct heap* heap, - struct heap_node* parent, - struct heap_node* child) { - struct heap_node* sibling; - struct heap_node t; - - t = *parent; - *parent = *child; - *child = t; - - parent->parent = child; - if (child->left == child) { - child->left = parent; - sibling = child->right; - } else { - child->right = parent; - sibling = child->left; - } - if (sibling != NULL) - sibling->parent = child; - - if (parent->left != NULL) - parent->left->parent = parent; - if (parent->right != NULL) - parent->right->parent = parent; - - if (child->parent == NULL) - heap->min = child; - else if (child->parent->left == parent) - child->parent->left = child; - else - child->parent->right = child; -} - -HEAP_EXPORT(void heap_insert(struct heap* heap, - struct heap_node* newnode, - heap_compare_fn less_than)) { - struct heap_node** parent; - struct heap_node** child; - unsigned int path; - unsigned int n; - unsigned int k; - - newnode->left = NULL; - newnode->right = NULL; - newnode->parent = NULL; - - /* Calculate the path from the root to the insertion point. This is a min - * heap so we always insert at the left-most free node of the bottom row. - */ - path = 0; - for (k = 0, n = 1 + heap->nelts; n >= 2; k += 1, n /= 2) - path = (path << 1) | (n & 1); - - /* Now traverse the heap using the path we calculated in the previous step. */ - parent = child = &heap->min; - while (k > 0) { - parent = child; - if (path & 1) - child = &(*child)->right; - else - child = &(*child)->left; - path >>= 1; - k -= 1; - } - - /* Insert the new node. */ - newnode->parent = *parent; - *child = newnode; - heap->nelts += 1; - - /* Walk up the tree and check at each node if the heap property holds. - * It's a min heap so parent < child must be true. - */ - while (newnode->parent != NULL && less_than(newnode, newnode->parent)) - heap_node_swap(heap, newnode->parent, newnode); -} - -HEAP_EXPORT(void heap_remove(struct heap* heap, - struct heap_node* node, - heap_compare_fn less_than)) { - struct heap_node* smallest; - struct heap_node** max; - struct heap_node* child; - unsigned int path; - unsigned int k; - unsigned int n; - - if (heap->nelts == 0) - return; - - /* Calculate the path from the min (the root) to the max, the left-most node - * of the bottom row. - */ - path = 0; - for (k = 0, n = heap->nelts; n >= 2; k += 1, n /= 2) - path = (path << 1) | (n & 1); - - /* Now traverse the heap using the path we calculated in the previous step. */ - max = &heap->min; - while (k > 0) { - if (path & 1) - max = &(*max)->right; - else - max = &(*max)->left; - path >>= 1; - k -= 1; - } - - heap->nelts -= 1; - - /* Unlink the max node. */ - child = *max; - *max = NULL; - - if (child == node) { - /* We're removing either the max or the last node in the tree. */ - if (child == heap->min) { - heap->min = NULL; - } - return; - } - - /* Replace the to be deleted node with the max node. */ - child->left = node->left; - child->right = node->right; - child->parent = node->parent; - - if (child->left != NULL) { - child->left->parent = child; - } - - if (child->right != NULL) { - child->right->parent = child; - } - - if (node->parent == NULL) { - heap->min = child; - } else if (node->parent->left == node) { - node->parent->left = child; - } else { - node->parent->right = child; - } - - /* Walk down the subtree and check at each node if the heap property holds. - * It's a min heap so parent < child must be true. If the parent is bigger, - * swap it with the smallest child. - */ - for (;;) { - smallest = child; - if (child->left != NULL && less_than(child->left, smallest)) - smallest = child->left; - if (child->right != NULL && less_than(child->right, smallest)) - smallest = child->right; - if (smallest == child) - break; - heap_node_swap(heap, child, smallest); - } - - /* Walk up the subtree and check that each parent is less than the node - * this is required, because `max` node is not guaranteed to be the - * actual maximum in tree - */ - while (child->parent != NULL && less_than(child, child->parent)) - heap_node_swap(heap, child->parent, child); -} - -HEAP_EXPORT(void heap_dequeue(struct heap* heap, heap_compare_fn less_than)) { - heap_remove(heap, heap->min, less_than); -} - -#undef HEAP_EXPORT - -#endif /* UV_SRC_HEAP_H_ */ diff --git a/libuv/src/idna.c b/libuv/src/idna.c deleted file mode 100644 index b44cb16..0000000 --- a/libuv/src/idna.c +++ /dev/null @@ -1,314 +0,0 @@ -/* Copyright (c) 2011, 2018 Ben Noordhuis - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/* Derived from https://github.com/bnoordhuis/punycode - * but updated to support IDNA 2008. - */ - -#include "uv.h" -#include "idna.h" -#include -#include - -static unsigned uv__utf8_decode1_slow(const char** p, - const char* pe, - unsigned a) { - unsigned b; - unsigned c; - unsigned d; - unsigned min; - - if (a > 0xF7) - return -1; - - switch (pe - *p) { - default: - if (a > 0xEF) { - min = 0x10000; - a = a & 7; - b = (unsigned char) *(*p)++; - c = (unsigned char) *(*p)++; - d = (unsigned char) *(*p)++; - break; - } - /* Fall through. */ - case 2: - if (a > 0xDF) { - min = 0x800; - b = 0x80 | (a & 15); - c = (unsigned char) *(*p)++; - d = (unsigned char) *(*p)++; - a = 0; - break; - } - /* Fall through. */ - case 1: - if (a > 0xBF) { - min = 0x80; - b = 0x80; - c = 0x80 | (a & 31); - d = (unsigned char) *(*p)++; - a = 0; - break; - } - /* Fall through. */ - case 0: - return -1; /* Invalid continuation byte. */ - } - - if (0x80 != (0xC0 & (b ^ c ^ d))) - return -1; /* Invalid sequence. */ - - b &= 63; - c &= 63; - d &= 63; - a = (a << 18) | (b << 12) | (c << 6) | d; - - if (a < min) - return -1; /* Overlong sequence. */ - - if (a > 0x10FFFF) - return -1; /* Four-byte sequence > U+10FFFF. */ - - if (a >= 0xD800 && a <= 0xDFFF) - return -1; /* Surrogate pair. */ - - return a; -} - -unsigned uv__utf8_decode1(const char** p, const char* pe) { - unsigned a; - - assert(*p < pe); - - a = (unsigned char) *(*p)++; - - if (a < 128) - return a; /* ASCII, common case. */ - - 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"; - const char* ss; - unsigned c; - unsigned h; - unsigned k; - unsigned n; - unsigned m; - unsigned q; - unsigned t; - unsigned x; - unsigned y; - unsigned bias; - unsigned delta; - unsigned todo; - int first; - - h = 0; - ss = s; - todo = 0; - - /* Note: after this loop we've visited all UTF-8 characters and know - * they're legal so we no longer need to check for decode errors. - */ - while (s < se) { - c = uv__utf8_decode1(&s, se); - - if (c == -1u) - return UV_EINVAL; - - if (c < 128) - h++; - else - todo++; - } - - /* Only write "xn--" when there are non-ASCII characters. */ - if (todo > 0) { - if (*d < de) *(*d)++ = 'x'; - if (*d < de) *(*d)++ = 'n'; - if (*d < de) *(*d)++ = '-'; - if (*d < de) *(*d)++ = '-'; - } - - /* Write ASCII characters. */ - x = 0; - s = ss; - while (s < se) { - c = uv__utf8_decode1(&s, se); - assert(c != -1u); - - if (c > 127) - continue; - - if (*d < de) - *(*d)++ = c; - - if (++x == h) - break; /* Visited all ASCII characters. */ - } - - if (todo == 0) - return h; - - /* Only write separator when we've written ASCII characters first. */ - if (h > 0) - if (*d < de) - *(*d)++ = '-'; - - n = 128; - bias = 72; - delta = 0; - first = 1; - - while (todo > 0) { - m = -1; - s = ss; - - while (s < se) { - c = uv__utf8_decode1(&s, se); - assert(c != -1u); - - if (c >= n) - if (c < m) - m = c; - } - - x = m - n; - y = h + 1; - - if (x > ~delta / y) - return UV_E2BIG; /* Overflow. */ - - delta += x * y; - n = m; - - s = ss; - while (s < se) { - c = uv__utf8_decode1(&s, se); - assert(c != -1u); - - if (c < n) - if (++delta == 0) - return UV_E2BIG; /* Overflow. */ - - if (c != n) - continue; - - for (k = 36, q = delta; /* empty */; k += 36) { - t = 1; - - if (k > bias) - t = k - bias; - - if (t > 26) - t = 26; - - if (q < t) - break; - - /* TODO(bnoordhuis) Since 1 <= t <= 26 and therefore - * 10 <= y <= 35, we can optimize the long division - * into a table-based reciprocal multiplication. - */ - x = q - t; - y = 36 - t; /* 10 <= y <= 35 since 1 <= t <= 26. */ - q = x / y; - t = t + x % y; /* 1 <= t <= 35 because of y. */ - - if (*d < de) - *(*d)++ = alphabet[t]; - } - - if (*d < de) - *(*d)++ = alphabet[q]; - - delta /= 2; - - if (first) { - delta /= 350; - first = 0; - } - - /* No overflow check is needed because |delta| was just - * divided by 2 and |delta+delta >= delta + delta/h|. - */ - h++; - delta += delta / h; - - for (bias = 0; delta > 35 * 26 / 2; bias += 36) - delta /= 35; - - bias += 36 * delta / (delta + 38); - delta = 0; - todo--; - } - - delta++; - n++; - } - - return 0; -} - -long uv__idna_toascii(const char* s, const char* se, char* d, char* de) { - const char* si; - const char* st; - unsigned c; - char* ds; - int rc; - - ds = d; - - si = s; - while (si < se) { - st = si; - c = uv__utf8_decode1(&si, se); - - if (c == -1u) - return UV_EINVAL; - - if (c != '.') - if (c != 0x3002) /* 。 */ - if (c != 0xFF0E) /* . */ - if (c != 0xFF61) /* 。 */ - continue; - - rc = uv__idna_toascii_label(s, st, &d, de); - - if (rc < 0) - return rc; - - if (d < de) - *d++ = '.'; - - s = si; - } - - if (s < se) { - rc = uv__idna_toascii_label(s, se, &d, de); - - if (rc < 0) - return rc; - } - - if (d < de) - *d++ = '\0'; - - return d - ds; /* Number of bytes written. */ -} diff --git a/libuv/src/idna.h b/libuv/src/idna.h deleted file mode 100644 index 8e0c592..0000000 --- a/libuv/src/idna.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (c) 2011, 2018 Ben Noordhuis - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef UV_SRC_IDNA_H_ -#define UV_SRC_IDNA_H_ - -/* Decode a single codepoint. Returns the codepoint or UINT32_MAX on error. - * |p| is updated on success _and_ error, i.e., bad multi-byte sequences are - * skipped in their entirety, not just the first bad byte. - */ -unsigned uv__utf8_decode1(const char** p, const char* pe); - -/* Convert a UTF-8 domain name to IDNA 2008 / Punycode. A return value >= 0 - * 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); - -#endif /* UV_SRC_IDNA_H_ */ diff --git a/libuv/src/inet.c b/libuv/src/inet.c deleted file mode 100644 index ddabf22..0000000 --- a/libuv/src/inet.c +++ /dev/null @@ -1,303 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * Copyright (c) 1996-1999 by Internet Software Consortium. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include -#include - -#if defined(_MSC_VER) && _MSC_VER < 1600 -# include "uv/stdint-msvc2008.h" -#else -# include -#endif - -#include "uv.h" -#include "uv-common.h" - -#define UV__INET_ADDRSTRLEN 16 -#define UV__INET6_ADDRSTRLEN 46 - - -static int inet_ntop4(const unsigned char *src, char *dst, size_t size); -static int inet_ntop6(const unsigned char *src, char *dst, size_t size); -static int inet_pton4(const char *src, unsigned char *dst); -static int inet_pton6(const char *src, unsigned char *dst); - - -int uv_inet_ntop(int af, const void* src, char* dst, size_t size) { - switch (af) { - case AF_INET: - return (inet_ntop4(src, dst, size)); - case AF_INET6: - return (inet_ntop6(src, dst, size)); - default: - return UV_EAFNOSUPPORT; - } - /* NOTREACHED */ -} - - -static int inet_ntop4(const unsigned char *src, char *dst, size_t size) { - static const char fmt[] = "%u.%u.%u.%u"; - char tmp[UV__INET_ADDRSTRLEN]; - int l; - - l = snprintf(tmp, sizeof(tmp), fmt, src[0], src[1], src[2], src[3]); - if (l <= 0 || (size_t) l >= size) { - return UV_ENOSPC; - } - uv__strscpy(dst, tmp, size); - return 0; -} - - -static int inet_ntop6(const unsigned char *src, char *dst, size_t size) { - /* - * Note that int32_t and int16_t need only be "at least" large enough - * to contain a value of the specified size. On some systems, like - * Crays, there is no such thing as an integer variable with 16 bits. - * Keep this in mind if you think this function should have been coded - * to use pointer overlays. All the world's not a VAX. - */ - char tmp[UV__INET6_ADDRSTRLEN], *tp; - struct { int base, len; } best, cur; - unsigned int words[sizeof(struct in6_addr) / sizeof(uint16_t)]; - int i; - - /* - * Preprocess: - * Copy the input (bytewise) array into a wordwise array. - * Find the longest run of 0x00's in src[] for :: shorthanding. - */ - memset(words, '\0', sizeof words); - for (i = 0; i < (int) sizeof(struct in6_addr); i++) - words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3)); - best.base = -1; - best.len = 0; - cur.base = -1; - cur.len = 0; - for (i = 0; i < (int) ARRAY_SIZE(words); i++) { - if (words[i] == 0) { - if (cur.base == -1) - cur.base = i, cur.len = 1; - else - cur.len++; - } else { - if (cur.base != -1) { - if (best.base == -1 || cur.len > best.len) - best = cur; - cur.base = -1; - } - } - } - if (cur.base != -1) { - if (best.base == -1 || cur.len > best.len) - best = cur; - } - if (best.base != -1 && best.len < 2) - best.base = -1; - - /* - * Format the result. - */ - tp = tmp; - for (i = 0; i < (int) ARRAY_SIZE(words); i++) { - /* Are we inside the best run of 0x00's? */ - if (best.base != -1 && i >= best.base && - i < (best.base + best.len)) { - if (i == best.base) - *tp++ = ':'; - continue; - } - /* Are we following an initial run of 0x00s or any real hex? */ - if (i != 0) - *tp++ = ':'; - /* Is this address an encapsulated IPv4? */ - if (i == 6 && best.base == 0 && (best.len == 6 || - (best.len == 7 && words[7] != 0x0001) || - (best.len == 5 && words[5] == 0xffff))) { - int err = inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp)); - if (err) - return err; - tp += strlen(tp); - break; - } - tp += sprintf(tp, "%x", words[i]); - } - /* Was it a trailing run of 0x00's? */ - if (best.base != -1 && (best.base + best.len) == ARRAY_SIZE(words)) - *tp++ = ':'; - *tp++ = '\0'; - if ((size_t) (tp - tmp) > size) - return UV_ENOSPC; - uv__strscpy(dst, tmp, size); - return 0; -} - - -int uv_inet_pton(int af, const char* src, void* dst) { - if (src == NULL || dst == NULL) - return UV_EINVAL; - - switch (af) { - case AF_INET: - return (inet_pton4(src, dst)); - case AF_INET6: { - int len; - char tmp[UV__INET6_ADDRSTRLEN], *s, *p; - s = (char*) src; - p = strchr(src, '%'); - if (p != NULL) { - s = tmp; - len = p - src; - if (len > UV__INET6_ADDRSTRLEN-1) - return UV_EINVAL; - memcpy(s, src, len); - s[len] = '\0'; - } - return inet_pton6(s, dst); - } - default: - return UV_EAFNOSUPPORT; - } - /* NOTREACHED */ -} - - -static int inet_pton4(const char *src, unsigned char *dst) { - static const char digits[] = "0123456789"; - int saw_digit, octets, ch; - unsigned char tmp[sizeof(struct in_addr)], *tp; - - saw_digit = 0; - octets = 0; - *(tp = tmp) = 0; - while ((ch = *src++) != '\0') { - const char *pch; - - if ((pch = strchr(digits, ch)) != NULL) { - unsigned int nw = *tp * 10 + (pch - digits); - - if (saw_digit && *tp == 0) - return UV_EINVAL; - if (nw > 255) - return UV_EINVAL; - *tp = nw; - if (!saw_digit) { - if (++octets > 4) - return UV_EINVAL; - saw_digit = 1; - } - } else if (ch == '.' && saw_digit) { - if (octets == 4) - return UV_EINVAL; - *++tp = 0; - saw_digit = 0; - } else - return UV_EINVAL; - } - if (octets < 4) - return UV_EINVAL; - memcpy(dst, tmp, sizeof(struct in_addr)); - return 0; -} - - -static int inet_pton6(const char *src, unsigned char *dst) { - static const char xdigits_l[] = "0123456789abcdef", - xdigits_u[] = "0123456789ABCDEF"; - unsigned char tmp[sizeof(struct in6_addr)], *tp, *endp, *colonp; - const char *xdigits, *curtok; - int ch, seen_xdigits; - unsigned int val; - - memset((tp = tmp), '\0', sizeof tmp); - endp = tp + sizeof tmp; - colonp = NULL; - /* Leading :: requires some special handling. */ - if (*src == ':') - if (*++src != ':') - return UV_EINVAL; - curtok = src; - seen_xdigits = 0; - val = 0; - while ((ch = *src++) != '\0') { - const char *pch; - - if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL) - pch = strchr((xdigits = xdigits_u), ch); - if (pch != NULL) { - val <<= 4; - val |= (pch - xdigits); - if (++seen_xdigits > 4) - return UV_EINVAL; - continue; - } - if (ch == ':') { - curtok = src; - if (!seen_xdigits) { - if (colonp) - return UV_EINVAL; - colonp = tp; - continue; - } else if (*src == '\0') { - return UV_EINVAL; - } - if (tp + sizeof(uint16_t) > endp) - return UV_EINVAL; - *tp++ = (unsigned char) (val >> 8) & 0xff; - *tp++ = (unsigned char) val & 0xff; - seen_xdigits = 0; - val = 0; - continue; - } - if (ch == '.' && ((tp + sizeof(struct in_addr)) <= endp)) { - int err = inet_pton4(curtok, tp); - if (err == 0) { - tp += sizeof(struct in_addr); - seen_xdigits = 0; - break; /*%< '\\0' was seen by inet_pton4(). */ - } - } - return UV_EINVAL; - } - if (seen_xdigits) { - if (tp + sizeof(uint16_t) > endp) - return UV_EINVAL; - *tp++ = (unsigned char) (val >> 8) & 0xff; - *tp++ = (unsigned char) val & 0xff; - } - if (colonp != NULL) { - /* - * Since some memmove()'s erroneously fail to handle - * overlapping regions, we'll do the shift by hand. - */ - const int n = tp - colonp; - int i; - - if (tp == endp) - return UV_EINVAL; - for (i = 1; i <= n; i++) { - endp[- i] = colonp[n - i]; - colonp[n - i] = 0; - } - tp = endp; - } - if (tp != endp) - return UV_EINVAL; - memcpy(dst, tmp, sizeof tmp); - return 0; -} diff --git a/libuv/src/queue.h b/libuv/src/queue.h deleted file mode 100644 index ff3540a..0000000 --- a/libuv/src/queue.h +++ /dev/null @@ -1,108 +0,0 @@ -/* Copyright (c) 2013, Ben Noordhuis - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef QUEUE_H_ -#define QUEUE_H_ - -#include - -typedef void *QUEUE[2]; - -/* Private macros. */ -#define QUEUE_NEXT(q) (*(QUEUE **) &((*(q))[0])) -#define QUEUE_PREV(q) (*(QUEUE **) &((*(q))[1])) -#define QUEUE_PREV_NEXT(q) (QUEUE_NEXT(QUEUE_PREV(q))) -#define QUEUE_NEXT_PREV(q) (QUEUE_PREV(QUEUE_NEXT(q))) - -/* Public macros. */ -#define QUEUE_DATA(ptr, type, field) \ - ((type *) ((char *) (ptr) - offsetof(type, field))) - -/* Important note: mutating the list while QUEUE_FOREACH is - * iterating over its elements results in undefined behavior. - */ -#define QUEUE_FOREACH(q, h) \ - for ((q) = QUEUE_NEXT(h); (q) != (h); (q) = QUEUE_NEXT(q)) - -#define QUEUE_EMPTY(q) \ - ((const QUEUE *) (q) == (const QUEUE *) QUEUE_NEXT(q)) - -#define QUEUE_HEAD(q) \ - (QUEUE_NEXT(q)) - -#define QUEUE_INIT(q) \ - do { \ - QUEUE_NEXT(q) = (q); \ - QUEUE_PREV(q) = (q); \ - } \ - while (0) - -#define QUEUE_ADD(h, n) \ - do { \ - QUEUE_PREV_NEXT(h) = QUEUE_NEXT(n); \ - QUEUE_NEXT_PREV(n) = QUEUE_PREV(h); \ - QUEUE_PREV(h) = QUEUE_PREV(n); \ - QUEUE_PREV_NEXT(h) = (h); \ - } \ - while (0) - -#define QUEUE_SPLIT(h, q, n) \ - do { \ - QUEUE_PREV(n) = QUEUE_PREV(h); \ - QUEUE_PREV_NEXT(n) = (n); \ - QUEUE_NEXT(n) = (q); \ - QUEUE_PREV(h) = QUEUE_PREV(q); \ - QUEUE_PREV_NEXT(h) = (h); \ - QUEUE_PREV(q) = (n); \ - } \ - while (0) - -#define QUEUE_MOVE(h, n) \ - do { \ - if (QUEUE_EMPTY(h)) \ - QUEUE_INIT(n); \ - else { \ - QUEUE* q = QUEUE_HEAD(h); \ - QUEUE_SPLIT(h, q, n); \ - } \ - } \ - while (0) - -#define QUEUE_INSERT_HEAD(h, q) \ - do { \ - QUEUE_NEXT(q) = QUEUE_NEXT(h); \ - QUEUE_PREV(q) = (h); \ - QUEUE_NEXT_PREV(q) = (q); \ - QUEUE_NEXT(h) = (q); \ - } \ - while (0) - -#define QUEUE_INSERT_TAIL(h, q) \ - do { \ - QUEUE_NEXT(q) = (h); \ - QUEUE_PREV(q) = QUEUE_PREV(h); \ - QUEUE_PREV_NEXT(q) = (q); \ - QUEUE_PREV(h) = (q); \ - } \ - while (0) - -#define QUEUE_REMOVE(q) \ - do { \ - QUEUE_PREV_NEXT(q) = QUEUE_NEXT(q); \ - QUEUE_NEXT_PREV(q) = QUEUE_PREV(q); \ - } \ - while (0) - -#endif /* QUEUE_H_ */ diff --git a/libuv/src/random.c b/libuv/src/random.c deleted file mode 100644 index e75f77d..0000000 --- a/libuv/src/random.c +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "uv-common.h" - -#ifdef _WIN32 -# include "win/internal.h" -#else -# include "unix/internal.h" -#endif - -static int uv__random(void* buf, size_t buflen) { - int rc; - -#if defined(__PASE__) - rc = uv__random_readpath("/dev/urandom", buf, buflen); -#elif defined(_AIX) || defined(__QNX__) - rc = uv__random_readpath("/dev/random", buf, buflen); -#elif defined(__APPLE__) || defined(__OpenBSD__) || \ - (defined(__ANDROID_API__) && __ANDROID_API__ >= 28) - rc = uv__random_getentropy(buf, buflen); - if (rc == UV_ENOSYS) - rc = uv__random_devurandom(buf, buflen); -#elif defined(__NetBSD__) - rc = uv__random_sysctl(buf, buflen); -#elif defined(__FreeBSD__) || defined(__linux__) - rc = uv__random_getrandom(buf, buflen); - if (rc == UV_ENOSYS) - rc = uv__random_devurandom(buf, buflen); -# if defined(__linux__) - switch (rc) { - case UV_EACCES: - case UV_EIO: - case UV_ELOOP: - case UV_EMFILE: - case UV_ENFILE: - case UV_ENOENT: - case UV_EPERM: - rc = uv__random_sysctl(buf, buflen); - break; - } -# endif -#elif defined(_WIN32) - uv__once_init(); - rc = uv__random_rtlgenrandom(buf, buflen); -#else - rc = uv__random_devurandom(buf, buflen); -#endif - - return rc; -} - - -static void uv__random_work(struct uv__work* w) { - uv_random_t* req; - - req = container_of(w, uv_random_t, work_req); - req->status = uv__random(req->buf, req->buflen); -} - - -static void uv__random_done(struct uv__work* w, int status) { - uv_random_t* req; - - req = container_of(w, uv_random_t, work_req); - uv__req_unregister(req->loop, req); - - if (status == 0) - status = req->status; - - req->cb(req, status, req->buf, req->buflen); -} - - -int uv_random(uv_loop_t* loop, - uv_random_t* req, - void *buf, - size_t buflen, - unsigned flags, - uv_random_cb cb) { - if (buflen > 0x7FFFFFFFu) - return UV_E2BIG; - - if (flags != 0) - return UV_EINVAL; - - if (cb == NULL) - return uv__random(buf, buflen); - - uv__req_init(loop, req, UV_RANDOM); - req->loop = loop; - req->status = 0; - req->cb = cb; - req->buf = buf; - req->buflen = buflen; - - uv__work_submit(loop, - &req->work_req, - UV__WORK_CPU, - uv__random_work, - uv__random_done); - - return 0; -} diff --git a/libuv/src/strscpy.c b/libuv/src/strscpy.c deleted file mode 100644 index 20df6fc..0000000 --- a/libuv/src/strscpy.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "strscpy.h" -#include /* SSIZE_MAX */ - -ssize_t uv__strscpy(char* d, const char* s, size_t n) { - size_t i; - - for (i = 0; i < n; i++) - if ('\0' == (d[i] = s[i])) - return i > SSIZE_MAX ? UV_E2BIG : (ssize_t) i; - - if (i == 0) - return 0; - - d[--i] = '\0'; - - return UV_E2BIG; -} diff --git a/libuv/src/strscpy.h b/libuv/src/strscpy.h deleted file mode 100644 index cc78149..0000000 --- a/libuv/src/strscpy.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_STRSCPY_H_ -#define UV_STRSCPY_H_ - -/* Include uv.h for its definitions of size_t and ssize_t. - * size_t can be obtained directly from but ssize_t requires - * some hoop jumping on Windows that I didn't want to duplicate here. - */ -#include "uv.h" - -/* Copies up to |n-1| bytes from |d| to |s| and always zero-terminates - * the result, except when |n==0|. Returns the number of bytes copied - * or UV_E2BIG if |d| is too small. - * - * See https://www.kernel.org/doc/htmldocs/kernel-api/API-strscpy.html - */ -ssize_t uv__strscpy(char* d, const char* s, size_t n); - -#endif /* UV_STRSCPY_H_ */ diff --git a/libuv/src/threadpool.c b/libuv/src/threadpool.c deleted file mode 100644 index 869ae95..0000000 --- a/libuv/src/threadpool.c +++ /dev/null @@ -1,386 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv-common.h" - -#if !defined(_WIN32) -# include "unix/internal.h" -#endif - -#include - -#define MAX_THREADPOOL_SIZE 1024 - -static uv_once_t once = UV_ONCE_INIT; -static uv_cond_t cond; -static uv_mutex_t mutex; -static unsigned int idle_threads; -static unsigned int slow_io_work_running; -static unsigned int nthreads; -static uv_thread_t* threads; -static uv_thread_t default_threads[4]; -static QUEUE exit_message; -static QUEUE wq; -static QUEUE run_slow_work_message; -static QUEUE slow_io_pending_wq; - -static unsigned int slow_work_thread_threshold(void) { - return (nthreads + 1) / 2; -} - -static void uv__cancelled(struct uv__work* w) { - abort(); -} - - -/* To avoid deadlock with uv_cancel() it's crucial that the worker - * never holds the global mutex and the loop-local mutex at the same time. - */ -static void worker(void* arg) { - struct uv__work* w; - QUEUE* q; - int is_slow_work; - - uv_sem_post((uv_sem_t*) arg); - arg = NULL; - - uv_mutex_lock(&mutex); - for (;;) { - /* `mutex` should always be locked at this point. */ - - /* Keep waiting while either no work is present or only slow I/O - and we're at the threshold for that. */ - while (QUEUE_EMPTY(&wq) || - (QUEUE_HEAD(&wq) == &run_slow_work_message && - QUEUE_NEXT(&run_slow_work_message) == &wq && - slow_io_work_running >= slow_work_thread_threshold())) { - idle_threads += 1; - uv_cond_wait(&cond, &mutex); - idle_threads -= 1; - } - - q = QUEUE_HEAD(&wq); - if (q == &exit_message) { - uv_cond_signal(&cond); - uv_mutex_unlock(&mutex); - break; - } - - QUEUE_REMOVE(q); - QUEUE_INIT(q); /* Signal uv_cancel() that the work req is executing. */ - - is_slow_work = 0; - if (q == &run_slow_work_message) { - /* If we're at the slow I/O threshold, re-schedule until after all - other work in the queue is done. */ - if (slow_io_work_running >= slow_work_thread_threshold()) { - QUEUE_INSERT_TAIL(&wq, q); - continue; - } - - /* If we encountered a request to run slow I/O work but there is none - to run, that means it's cancelled => Start over. */ - if (QUEUE_EMPTY(&slow_io_pending_wq)) - continue; - - is_slow_work = 1; - slow_io_work_running++; - - q = QUEUE_HEAD(&slow_io_pending_wq); - QUEUE_REMOVE(q); - QUEUE_INIT(q); - - /* If there is more slow I/O work, schedule it to be run as well. */ - if (!QUEUE_EMPTY(&slow_io_pending_wq)) { - QUEUE_INSERT_TAIL(&wq, &run_slow_work_message); - if (idle_threads > 0) - uv_cond_signal(&cond); - } - } - - uv_mutex_unlock(&mutex); - - w = QUEUE_DATA(q, struct uv__work, wq); - w->work(w); - - uv_mutex_lock(&w->loop->wq_mutex); - w->work = NULL; /* Signal uv_cancel() that the work req is done - executing. */ - QUEUE_INSERT_TAIL(&w->loop->wq, &w->wq); - uv_async_send(&w->loop->wq_async); - uv_mutex_unlock(&w->loop->wq_mutex); - - /* Lock `mutex` since that is expected at the start of the next - * iteration. */ - uv_mutex_lock(&mutex); - if (is_slow_work) { - /* `slow_io_work_running` is protected by `mutex`. */ - slow_io_work_running--; - } - } -} - - -static void post(QUEUE* q, enum uv__work_kind kind) { - uv_mutex_lock(&mutex); - if (kind == UV__WORK_SLOW_IO) { - /* Insert into a separate queue. */ - QUEUE_INSERT_TAIL(&slow_io_pending_wq, q); - if (!QUEUE_EMPTY(&run_slow_work_message)) { - /* Running slow I/O tasks is already scheduled => Nothing to do here. - The worker that runs said other task will schedule this one as well. */ - uv_mutex_unlock(&mutex); - return; - } - q = &run_slow_work_message; - } - - QUEUE_INSERT_TAIL(&wq, q); - if (idle_threads > 0) - uv_cond_signal(&cond); - uv_mutex_unlock(&mutex); -} - - -void uv__threadpool_cleanup(void) { - unsigned int i; - - if (nthreads == 0) - return; - - post(&exit_message, UV__WORK_CPU); - - for (i = 0; i < nthreads; i++) - if (uv_thread_join(threads + i)) - abort(); - - if (threads != default_threads) - uv__free(threads); - - uv_mutex_destroy(&mutex); - uv_cond_destroy(&cond); - - threads = NULL; - nthreads = 0; -} - - -static void init_threads(void) { - unsigned int i; - const char* val; - uv_sem_t sem; - - nthreads = ARRAY_SIZE(default_threads); - val = getenv("UV_THREADPOOL_SIZE"); - if (val != NULL) - nthreads = atoi(val); - if (nthreads == 0) - nthreads = 1; - if (nthreads > MAX_THREADPOOL_SIZE) - nthreads = MAX_THREADPOOL_SIZE; - - threads = default_threads; - if (nthreads > ARRAY_SIZE(default_threads)) { - threads = uv__malloc(nthreads * sizeof(threads[0])); - if (threads == NULL) { - nthreads = ARRAY_SIZE(default_threads); - threads = default_threads; - } - } - - if (uv_cond_init(&cond)) - abort(); - - if (uv_mutex_init(&mutex)) - abort(); - - QUEUE_INIT(&wq); - QUEUE_INIT(&slow_io_pending_wq); - QUEUE_INIT(&run_slow_work_message); - - if (uv_sem_init(&sem, 0)) - abort(); - - for (i = 0; i < nthreads; i++) - if (uv_thread_create(threads + i, worker, &sem)) - abort(); - - for (i = 0; i < nthreads; i++) - uv_sem_wait(&sem); - - uv_sem_destroy(&sem); -} - - -#ifndef _WIN32 -static void reset_once(void) { - uv_once_t child_once = UV_ONCE_INIT; - memcpy(&once, &child_once, sizeof(child_once)); -} -#endif - - -static void init_once(void) { -#ifndef _WIN32 - /* Re-initialize the threadpool after fork. - * Note that this discards the global mutex and condition as well - * as the work queue. - */ - if (pthread_atfork(NULL, NULL, &reset_once)) - abort(); -#endif - init_threads(); -} - - -void uv__work_submit(uv_loop_t* loop, - struct uv__work* w, - enum uv__work_kind kind, - void (*work)(struct uv__work* w), - void (*done)(struct uv__work* w, int status)) { - uv_once(&once, init_once); - w->loop = loop; - w->work = work; - w->done = done; - post(&w->wq, kind); -} - - -static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) { - int cancelled; - - uv_mutex_lock(&mutex); - uv_mutex_lock(&w->loop->wq_mutex); - - cancelled = !QUEUE_EMPTY(&w->wq) && w->work != NULL; - if (cancelled) - QUEUE_REMOVE(&w->wq); - - uv_mutex_unlock(&w->loop->wq_mutex); - uv_mutex_unlock(&mutex); - - if (!cancelled) - return UV_EBUSY; - - w->work = uv__cancelled; - uv_mutex_lock(&loop->wq_mutex); - QUEUE_INSERT_TAIL(&loop->wq, &w->wq); - uv_async_send(&loop->wq_async); - uv_mutex_unlock(&loop->wq_mutex); - - return 0; -} - - -void uv__work_done(uv_async_t* handle) { - struct uv__work* w; - uv_loop_t* loop; - QUEUE* q; - QUEUE wq; - int err; - - loop = container_of(handle, uv_loop_t, wq_async); - uv_mutex_lock(&loop->wq_mutex); - QUEUE_MOVE(&loop->wq, &wq); - uv_mutex_unlock(&loop->wq_mutex); - - while (!QUEUE_EMPTY(&wq)) { - q = QUEUE_HEAD(&wq); - QUEUE_REMOVE(q); - - w = container_of(q, struct uv__work, wq); - err = (w->work == uv__cancelled) ? UV_ECANCELED : 0; - w->done(w, err); - } -} - - -static void uv__queue_work(struct uv__work* w) { - uv_work_t* req = container_of(w, uv_work_t, work_req); - - req->work_cb(req); -} - - -static void uv__queue_done(struct uv__work* w, int err) { - uv_work_t* req; - - req = container_of(w, uv_work_t, work_req); - uv__req_unregister(req->loop, req); - - if (req->after_work_cb == NULL) - return; - - req->after_work_cb(req, err); -} - - -int uv_queue_work(uv_loop_t* loop, - uv_work_t* req, - uv_work_cb work_cb, - uv_after_work_cb after_work_cb) { - if (work_cb == NULL) - return UV_EINVAL; - - uv__req_init(loop, req, UV_WORK); - req->loop = loop; - req->work_cb = work_cb; - req->after_work_cb = after_work_cb; - uv__work_submit(loop, - &req->work_req, - UV__WORK_CPU, - uv__queue_work, - uv__queue_done); - return 0; -} - - -int uv_cancel(uv_req_t* req) { - struct uv__work* wreq; - uv_loop_t* loop; - - switch (req->type) { - case UV_FS: - loop = ((uv_fs_t*) req)->loop; - wreq = &((uv_fs_t*) req)->work_req; - break; - case UV_GETADDRINFO: - loop = ((uv_getaddrinfo_t*) req)->loop; - wreq = &((uv_getaddrinfo_t*) req)->work_req; - break; - case UV_GETNAMEINFO: - loop = ((uv_getnameinfo_t*) req)->loop; - wreq = &((uv_getnameinfo_t*) req)->work_req; - break; - case UV_RANDOM: - loop = ((uv_random_t*) req)->loop; - wreq = &((uv_random_t*) req)->work_req; - break; - case UV_WORK: - loop = ((uv_work_t*) req)->loop; - wreq = &((uv_work_t*) req)->work_req; - break; - default: - return UV_EINVAL; - } - - return uv__work_cancel(loop, req, wreq); -} diff --git a/libuv/src/timer.c b/libuv/src/timer.c deleted file mode 100644 index bc680e7..0000000 --- a/libuv/src/timer.c +++ /dev/null @@ -1,185 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "uv-common.h" -#include "heap-inl.h" - -#include -#include - - -static struct heap *timer_heap(const uv_loop_t* loop) { -#ifdef _WIN32 - return (struct heap*) loop->timer_heap; -#else - return (struct heap*) &loop->timer_heap; -#endif -} - - -static int timer_less_than(const struct heap_node* ha, - const struct heap_node* hb) { - const uv_timer_t* a; - const uv_timer_t* b; - - a = container_of(ha, uv_timer_t, heap_node); - b = container_of(hb, uv_timer_t, heap_node); - - if (a->timeout < b->timeout) - return 1; - if (b->timeout < a->timeout) - return 0; - - /* Compare start_id when both have the same timeout. start_id is - * allocated with loop->timer_counter in uv_timer_start(). - */ - return a->start_id < b->start_id; -} - - -int uv_timer_init(uv_loop_t* loop, uv_timer_t* handle) { - uv__handle_init(loop, (uv_handle_t*)handle, UV_TIMER); - handle->timer_cb = NULL; - handle->timeout = 0; - handle->repeat = 0; - return 0; -} - - -int uv_timer_start(uv_timer_t* handle, - uv_timer_cb cb, - uint64_t timeout, - uint64_t repeat) { - uint64_t clamped_timeout; - - if (uv__is_closing(handle) || cb == NULL) - return UV_EINVAL; - - if (uv__is_active(handle)) - uv_timer_stop(handle); - - clamped_timeout = handle->loop->time + timeout; - if (clamped_timeout < timeout) - clamped_timeout = (uint64_t) -1; - - handle->timer_cb = cb; - handle->timeout = clamped_timeout; - handle->repeat = repeat; - /* start_id is the second index to be compared in timer_less_than() */ - handle->start_id = handle->loop->timer_counter++; - - heap_insert(timer_heap(handle->loop), - (struct heap_node*) &handle->heap_node, - timer_less_than); - uv__handle_start(handle); - - return 0; -} - - -int uv_timer_stop(uv_timer_t* handle) { - if (!uv__is_active(handle)) - return 0; - - heap_remove(timer_heap(handle->loop), - (struct heap_node*) &handle->heap_node, - timer_less_than); - uv__handle_stop(handle); - - return 0; -} - - -int uv_timer_again(uv_timer_t* handle) { - if (handle->timer_cb == NULL) - return UV_EINVAL; - - if (handle->repeat) { - uv_timer_stop(handle); - uv_timer_start(handle, handle->timer_cb, handle->repeat, handle->repeat); - } - - return 0; -} - - -void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat) { - handle->repeat = repeat; -} - - -uint64_t uv_timer_get_repeat(const uv_timer_t* handle) { - return handle->repeat; -} - - -uint64_t uv_timer_get_due_in(const uv_timer_t* handle) { - if (handle->loop->time >= handle->timeout) - return 0; - - return handle->timeout - handle->loop->time; -} - - -int uv__next_timeout(const uv_loop_t* loop) { - const struct heap_node* heap_node; - const uv_timer_t* handle; - uint64_t diff; - - heap_node = heap_min(timer_heap(loop)); - if (heap_node == NULL) - return -1; /* block indefinitely */ - - handle = container_of(heap_node, uv_timer_t, heap_node); - if (handle->timeout <= loop->time) - return 0; - - diff = handle->timeout - loop->time; - if (diff > INT_MAX) - diff = INT_MAX; - - return (int) diff; -} - - -void uv__run_timers(uv_loop_t* loop) { - struct heap_node* heap_node; - uv_timer_t* handle; - - for (;;) { - heap_node = heap_min(timer_heap(loop)); - if (heap_node == NULL) - break; - - handle = container_of(heap_node, uv_timer_t, heap_node); - if (handle->timeout > loop->time) - break; - - uv_timer_stop(handle); - uv_timer_again(handle); - handle->timer_cb(handle); - } -} - - -void uv__timer_close(uv_timer_t* handle) { - uv_timer_stop(handle); -} diff --git a/libuv/src/unix/aix-common.c b/libuv/src/unix/aix-common.c deleted file mode 100644 index abc4c90..0000000 --- a/libuv/src/unix/aix-common.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include - -#include - -#include -#include - -#include - -#include - -extern char* original_exepath; -extern uv_mutex_t process_title_mutex; -extern uv_once_t process_title_mutex_once; -extern void init_process_title_mutex_once(void); - -uint64_t uv__hrtime(uv_clocktype_t type) { - uint64_t G = 1000000000; - timebasestruct_t t; - read_wall_time(&t, TIMEBASE_SZ); - time_base_to_time(&t, TIMEBASE_SZ); - return (uint64_t) t.tb_high * G + t.tb_low; -} - - -/* - * We could use a static buffer for the path manipulations that we need outside - * of the function, but this function could be called by multiple consumers and - * we don't want to potentially create a race condition in the use of snprintf. - * There is no direct way of getting the exe path in AIX - either through /procfs - * or through some libc APIs. The below approach is to parse the argv[0]'s pattern - * and use it in conjunction with PATH environment variable to craft one. - */ -int uv_exepath(char* buffer, size_t* size) { - int res; - char args[UV__PATH_MAX]; - size_t cached_len; - struct procsinfo pi; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - uv_once(&process_title_mutex_once, init_process_title_mutex_once); - uv_mutex_lock(&process_title_mutex); - if (original_exepath != NULL) { - cached_len = strlen(original_exepath); - *size -= 1; - if (*size > cached_len) - *size = cached_len; - memcpy(buffer, original_exepath, *size); - buffer[*size] = '\0'; - uv_mutex_unlock(&process_title_mutex); - return 0; - } - uv_mutex_unlock(&process_title_mutex); - pi.pi_pid = getpid(); - res = getargs(&pi, sizeof(pi), args, sizeof(args)); - - if (res < 0) - return UV_EINVAL; - - return uv__search_path(args, buffer, size); -} diff --git a/libuv/src/unix/aix.c b/libuv/src/unix/aix.c deleted file mode 100644 index 6a013d4..0000000 --- a/libuv/src/unix/aix.c +++ /dev/null @@ -1,1304 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include -#include -#ifdef HAVE_SYS_AHAFS_EVPRODS_H -#include -#endif - -#include -#include -#include -#include -#include - -#define RDWR_BUF_SIZE 4096 -#define EQ(a,b) (strcmp(a,b) == 0) - -char* original_exepath = NULL; -uv_mutex_t process_title_mutex; -uv_once_t process_title_mutex_once = UV_ONCE_INIT; -static void* args_mem = NULL; -static char** process_argv = NULL; -static int process_argc = 0; -static char* process_title_ptr = NULL; - -void init_process_title_mutex_once(void) { - uv_mutex_init(&process_title_mutex); -} - - -int uv__platform_loop_init(uv_loop_t* loop) { - loop->fs_fd = -1; - - /* Passing maxfd of -1 should mean the limit is determined - * by the user's ulimit or the global limit as per the doc */ - loop->backend_fd = pollset_create(-1); - - if (loop->backend_fd == -1) - return -1; - - return 0; -} - - -void uv__platform_loop_delete(uv_loop_t* loop) { - if (loop->fs_fd != -1) { - uv__close(loop->fs_fd); - loop->fs_fd = -1; - } - - if (loop->backend_fd != -1) { - pollset_destroy(loop->backend_fd); - loop->backend_fd = -1; - } -} - - -int uv__io_fork(uv_loop_t* loop) { - uv__platform_loop_delete(loop); - - return uv__platform_loop_init(loop); -} - - -int uv__io_check_fd(uv_loop_t* loop, int fd) { - struct poll_ctl pc; - - pc.events = POLLIN; - pc.cmd = PS_MOD; /* Equivalent to PS_ADD if the fd is not in the pollset. */ - pc.fd = fd; - - if (pollset_ctl(loop->backend_fd, &pc, 1)) - return UV__ERR(errno); - - pc.cmd = PS_DELETE; - if (pollset_ctl(loop->backend_fd, &pc, 1)) - abort(); - - return 0; -} - - -void uv__io_poll(uv_loop_t* loop, int timeout) { - struct pollfd events[1024]; - struct pollfd pqry; - struct pollfd* pe; - struct poll_ctl pc; - QUEUE* q; - uv__io_t* w; - uint64_t base; - uint64_t diff; - int have_signals; - int nevents; - int count; - int nfds; - int i; - int rc; - int add_failed; - int user_timeout; - int reset_timeout; - - if (loop->nfds == 0) { - assert(QUEUE_EMPTY(&loop->watcher_queue)); - return; - } - - while (!QUEUE_EMPTY(&loop->watcher_queue)) { - q = QUEUE_HEAD(&loop->watcher_queue); - QUEUE_REMOVE(q); - QUEUE_INIT(q); - - w = QUEUE_DATA(q, uv__io_t, watcher_queue); - assert(w->pevents != 0); - assert(w->fd >= 0); - assert(w->fd < (int) loop->nwatchers); - - pc.events = w->pevents; - pc.fd = w->fd; - - add_failed = 0; - if (w->events == 0) { - pc.cmd = PS_ADD; - if (pollset_ctl(loop->backend_fd, &pc, 1)) { - if (errno != EINVAL) { - assert(0 && "Failed to add file descriptor (pc.fd) to pollset"); - abort(); - } - /* Check if the fd is already in the pollset */ - pqry.fd = pc.fd; - rc = pollset_query(loop->backend_fd, &pqry); - switch (rc) { - case -1: - assert(0 && "Failed to query pollset for file descriptor"); - abort(); - case 0: - assert(0 && "Pollset does not contain file descriptor"); - abort(); - } - /* If we got here then the pollset already contained the file descriptor even though - * we didn't think it should. This probably shouldn't happen, but we can continue. */ - add_failed = 1; - } - } - if (w->events != 0 || add_failed) { - /* Modify, potentially removing events -- need to delete then add. - * Could maybe mod if we knew for sure no events are removed, but - * content of w->events is handled above as not reliable (falls back) - * so may require a pollset_query() which would have to be pretty cheap - * compared to a PS_DELETE to be worth optimizing. Alternatively, could - * lazily remove events, squelching them in the mean time. */ - pc.cmd = PS_DELETE; - if (pollset_ctl(loop->backend_fd, &pc, 1)) { - assert(0 && "Failed to delete file descriptor (pc.fd) from pollset"); - abort(); - } - pc.cmd = PS_ADD; - if (pollset_ctl(loop->backend_fd, &pc, 1)) { - assert(0 && "Failed to add file descriptor (pc.fd) to pollset"); - abort(); - } - } - - w->events = w->pevents; - } - - assert(timeout >= -1); - base = loop->time; - count = 48; /* Benchmarks suggest this gives the best throughput. */ - - if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { - reset_timeout = 1; - user_timeout = timeout; - timeout = 0; - } else { - reset_timeout = 0; - } - - for (;;) { - /* Only need to set the provider_entry_time if timeout != 0. The function - * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. - */ - if (timeout != 0) - uv__metrics_set_provider_entry_time(loop); - - nfds = pollset_poll(loop->backend_fd, - events, - ARRAY_SIZE(events), - timeout); - - /* Update loop->time unconditionally. It's tempting to skip the update when - * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the - * operating system didn't reschedule our process while in the syscall. - */ - SAVE_ERRNO(uv__update_time(loop)); - - if (nfds == 0) { - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - if (timeout == -1) - continue; - if (timeout > 0) - goto update_timeout; - } - - assert(timeout != -1); - return; - } - - if (nfds == -1) { - if (errno != EINTR) { - abort(); - } - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - if (timeout == -1) - continue; - - if (timeout == 0) - return; - - /* Interrupted by a signal. Update timeout and poll again. */ - goto update_timeout; - } - - have_signals = 0; - nevents = 0; - - assert(loop->watchers != NULL); - loop->watchers[loop->nwatchers] = (void*) events; - loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds; - - for (i = 0; i < nfds; i++) { - pe = events + i; - pc.cmd = PS_DELETE; - pc.fd = pe->fd; - - /* Skip invalidated events, see uv__platform_invalidate_fd */ - if (pc.fd == -1) - continue; - - assert(pc.fd >= 0); - assert((unsigned) pc.fd < loop->nwatchers); - - w = loop->watchers[pc.fd]; - - if (w == NULL) { - /* File descriptor that we've stopped watching, disarm it. - * - * Ignore all errors because we may be racing with another thread - * when the file descriptor is closed. - */ - pollset_ctl(loop->backend_fd, &pc, 1); - continue; - } - - /* Run signal watchers last. This also affects child process watchers - * because those are implemented in terms of signal watchers. - */ - if (w == &loop->signal_io_watcher) { - have_signals = 1; - } else { - uv__metrics_update_idle_time(loop); - w->cb(loop, w, pe->revents); - } - - nevents++; - } - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - if (have_signals != 0) { - uv__metrics_update_idle_time(loop); - loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); - } - - loop->watchers[loop->nwatchers] = NULL; - loop->watchers[loop->nwatchers + 1] = NULL; - - if (have_signals != 0) - return; /* Event loop should cycle now so don't poll again. */ - - if (nevents != 0) { - if (nfds == ARRAY_SIZE(events) && --count != 0) { - /* Poll for more events but don't block this time. */ - timeout = 0; - continue; - } - return; - } - - if (timeout == 0) - return; - - if (timeout == -1) - continue; - -update_timeout: - assert(timeout > 0); - - diff = loop->time - base; - if (diff >= (uint64_t) timeout) - return; - - timeout -= diff; - } -} - - -uint64_t uv_get_free_memory(void) { - perfstat_memory_total_t mem_total; - int result = perfstat_memory_total(NULL, &mem_total, sizeof(mem_total), 1); - if (result == -1) { - return 0; - } - return mem_total.real_free * 4096; -} - - -uint64_t uv_get_total_memory(void) { - perfstat_memory_total_t mem_total; - int result = perfstat_memory_total(NULL, &mem_total, sizeof(mem_total), 1); - if (result == -1) { - return 0; - } - return mem_total.real_total * 4096; -} - - -uint64_t uv_get_constrained_memory(void) { - return 0; /* Memory constraints are unknown. */ -} - - -void uv_loadavg(double avg[3]) { - perfstat_cpu_total_t ps_total; - int result = perfstat_cpu_total(NULL, &ps_total, sizeof(ps_total), 1); - if (result == -1) { - avg[0] = 0.; avg[1] = 0.; avg[2] = 0.; - return; - } - avg[0] = ps_total.loadavg[0] / (double)(1 << SBITS); - avg[1] = ps_total.loadavg[1] / (double)(1 << SBITS); - avg[2] = ps_total.loadavg[2] / (double)(1 << SBITS); -} - - -#ifdef HAVE_SYS_AHAFS_EVPRODS_H -static char* uv__rawname(const char* cp, char (*dst)[FILENAME_MAX+1]) { - char* dp; - - dp = rindex(cp, '/'); - if (dp == 0) - return 0; - - snprintf(*dst, sizeof(*dst), "%.*s/r%s", (int) (dp - cp), cp, dp + 1); - return *dst; -} - - -/* - * Determine whether given pathname is a directory - * Returns 0 if the path is a directory, -1 if not - * - * Note: Opportunity here for more detailed error information but - * that requires changing callers of this function as well - */ -static int uv__path_is_a_directory(char* filename) { - struct stat statbuf; - - if (stat(filename, &statbuf) < 0) - return -1; /* failed: not a directory, assume it is a file */ - - if (statbuf.st_type == VDIR) - return 0; - - return -1; -} - - -/* - * Check whether AHAFS is mounted. - * Returns 0 if AHAFS is mounted, or an error code < 0 on failure - */ -static int uv__is_ahafs_mounted(void){ - char rawbuf[FILENAME_MAX+1]; - int rv, i = 2; - struct vmount *p; - int size_multiplier = 10; - size_t siz = sizeof(struct vmount)*size_multiplier; - struct vmount *vmt; - const char *dev = "/aha"; - char *obj, *stub; - - p = uv__malloc(siz); - if (p == NULL) - return UV__ERR(errno); - - /* Retrieve all mounted filesystems */ - rv = mntctl(MCTL_QUERY, siz, (char*)p); - if (rv < 0) - return UV__ERR(errno); - if (rv == 0) { - /* buffer was not large enough, reallocate to correct size */ - siz = *(int*)p; - uv__free(p); - p = uv__malloc(siz); - if (p == NULL) - return UV__ERR(errno); - rv = mntctl(MCTL_QUERY, siz, (char*)p); - if (rv < 0) - return UV__ERR(errno); - } - - /* Look for dev in filesystems mount info */ - for(vmt = p, i = 0; i < rv; i++) { - obj = vmt2dataptr(vmt, VMT_OBJECT); /* device */ - stub = vmt2dataptr(vmt, VMT_STUB); /* mount point */ - - if (EQ(obj, dev) || EQ(uv__rawname(obj, &rawbuf), dev) || EQ(stub, dev)) { - uv__free(p); /* Found a match */ - return 0; - } - vmt = (struct vmount *) ((char *) vmt + vmt->vmt_length); - } - - /* /aha is required for monitoring filesystem changes */ - return -1; -} - -/* - * Recursive call to mkdir() to create intermediate folders, if any - * Returns code from mkdir call - */ -static int uv__makedir_p(const char *dir) { - char tmp[256]; - char *p = NULL; - size_t len; - int err; - - /* TODO(bnoordhuis) Check uv__strscpy() return value. */ - uv__strscpy(tmp, dir, sizeof(tmp)); - len = strlen(tmp); - if (tmp[len - 1] == '/') - tmp[len - 1] = 0; - for (p = tmp + 1; *p; p++) { - if (*p == '/') { - *p = 0; - err = mkdir(tmp, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - if (err != 0 && errno != EEXIST) - return err; - *p = '/'; - } - } - return mkdir(tmp, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -} - -/* - * Creates necessary subdirectories in the AIX Event Infrastructure - * file system for monitoring the object specified. - * Returns code from mkdir call - */ -static int uv__make_subdirs_p(const char *filename) { - char cmd[2048]; - char *p; - int rc = 0; - - /* Strip off the monitor file name */ - p = strrchr(filename, '/'); - - if (p == NULL) - return 0; - - if (uv__path_is_a_directory((char*)filename) == 0) { - sprintf(cmd, "/aha/fs/modDir.monFactory"); - } else { - sprintf(cmd, "/aha/fs/modFile.monFactory"); - } - - strncat(cmd, filename, (p - filename)); - rc = uv__makedir_p(cmd); - - if (rc == -1 && errno != EEXIST){ - return UV__ERR(errno); - } - - return rc; -} - - -/* - * Checks if /aha is mounted, then proceeds to set up the monitoring - * objects for the specified file. - * Returns 0 on success, or an error code < 0 on failure - */ -static int uv__setup_ahafs(const char* filename, int *fd) { - int rc = 0; - char mon_file_write_string[RDWR_BUF_SIZE]; - char mon_file[PATH_MAX]; - int file_is_directory = 0; /* -1 == NO, 0 == YES */ - - /* Create monitor file name for object */ - file_is_directory = uv__path_is_a_directory((char*)filename); - - if (file_is_directory == 0) - sprintf(mon_file, "/aha/fs/modDir.monFactory"); - else - sprintf(mon_file, "/aha/fs/modFile.monFactory"); - - if ((strlen(mon_file) + strlen(filename) + 5) > PATH_MAX) - return UV_ENAMETOOLONG; - - /* Make the necessary subdirectories for the monitor file */ - rc = uv__make_subdirs_p(filename); - if (rc == -1 && errno != EEXIST) - return rc; - - strcat(mon_file, filename); - strcat(mon_file, ".mon"); - - *fd = 0; errno = 0; - - /* Open the monitor file, creating it if necessary */ - *fd = open(mon_file, O_CREAT|O_RDWR); - if (*fd < 0) - return UV__ERR(errno); - - /* Write out the monitoring specifications. - * In this case, we are monitoring for a state change event type - * CHANGED=YES - * We will be waiting in select call, rather than a read: - * WAIT_TYPE=WAIT_IN_SELECT - * We only want minimal information for files: - * INFO_LVL=1 - * For directories, we want more information to track what file - * caused the change - * INFO_LVL=2 - */ - - if (file_is_directory == 0) - sprintf(mon_file_write_string, "CHANGED=YES;WAIT_TYPE=WAIT_IN_SELECT;INFO_LVL=2"); - else - sprintf(mon_file_write_string, "CHANGED=YES;WAIT_TYPE=WAIT_IN_SELECT;INFO_LVL=1"); - - rc = write(*fd, mon_file_write_string, strlen(mon_file_write_string)+1); - if (rc < 0 && errno != EBUSY) - return UV__ERR(errno); - - return 0; -} - -/* - * Skips a specified number of lines in the buffer passed in. - * Walks the buffer pointed to by p and attempts to skip n lines. - * Returns the total number of lines skipped - */ -static int uv__skip_lines(char **p, int n) { - int lines = 0; - - while(n > 0) { - *p = strchr(*p, '\n'); - if (!p) - return lines; - - (*p)++; - n--; - lines++; - } - return lines; -} - - -/* - * Parse the event occurrence data to figure out what event just occurred - * and take proper action. - * - * The buf is a pointer to the buffer containing the event occurrence data - * Returns 0 on success, -1 if unrecoverable error in parsing - * - */ -static int uv__parse_data(char *buf, int *events, uv_fs_event_t* handle) { - int evp_rc, i; - char *p; - char filename[PATH_MAX]; /* To be used when handling directories */ - - p = buf; - *events = 0; - - /* Clean the filename buffer*/ - for(i = 0; i < PATH_MAX; i++) { - filename[i] = 0; - } - i = 0; - - /* Check for BUF_WRAP */ - if (strncmp(buf, "BUF_WRAP", strlen("BUF_WRAP")) == 0) { - assert(0 && "Buffer wrap detected, Some event occurrences lost!"); - return 0; - } - - /* Since we are using the default buffer size (4K), and have specified - * INFO_LVL=1, we won't see any EVENT_OVERFLOW conditions. Applications - * should check for this keyword if they are using an INFO_LVL of 2 or - * higher, and have a buffer size of <= 4K - */ - - /* Skip to RC_FROM_EVPROD */ - if (uv__skip_lines(&p, 9) != 9) - return -1; - - if (sscanf(p, "RC_FROM_EVPROD=%d\nEND_EVENT_DATA", &evp_rc) == 1) { - if (uv__path_is_a_directory(handle->path) == 0) { /* Directory */ - if (evp_rc == AHAFS_MODDIR_UNMOUNT || evp_rc == AHAFS_MODDIR_REMOVE_SELF) { - /* The directory is no longer available for monitoring */ - *events = UV_RENAME; - handle->dir_filename = NULL; - } else { - /* A file was added/removed inside the directory */ - *events = UV_CHANGE; - - /* Get the EVPROD_INFO */ - if (uv__skip_lines(&p, 1) != 1) - return -1; - - /* Scan out the name of the file that triggered the event*/ - if (sscanf(p, "BEGIN_EVPROD_INFO\n%sEND_EVPROD_INFO", filename) == 1) { - handle->dir_filename = uv__strdup((const char*)&filename); - } else - return -1; - } - } else { /* Regular File */ - if (evp_rc == AHAFS_MODFILE_RENAME) - *events = UV_RENAME; - else - *events = UV_CHANGE; - } - } - else - return -1; - - return 0; -} - - -/* This is the internal callback */ -static void uv__ahafs_event(uv_loop_t* loop, uv__io_t* event_watch, unsigned int fflags) { - char result_data[RDWR_BUF_SIZE]; - int bytes, rc = 0; - uv_fs_event_t* handle; - int events = 0; - char fname[PATH_MAX]; - char *p; - - handle = container_of(event_watch, uv_fs_event_t, event_watcher); - - /* At this point, we assume that polling has been done on the - * file descriptor, so we can just read the AHAFS event occurrence - * data and parse its results without having to block anything - */ - bytes = pread(event_watch->fd, result_data, RDWR_BUF_SIZE, 0); - - assert((bytes >= 0) && "uv__ahafs_event - Error reading monitor file"); - - /* In file / directory move cases, AIX Event infrastructure - * produces a second event with no data. - * Ignore it and return gracefully. - */ - if(bytes == 0) - return; - - /* Parse the data */ - if(bytes > 0) - rc = uv__parse_data(result_data, &events, handle); - - /* Unrecoverable error */ - if (rc == -1) - return; - - /* For directory changes, the name of the files that triggered the change - * are never absolute pathnames - */ - if (uv__path_is_a_directory(handle->path) == 0) { - p = handle->dir_filename; - } else { - p = strrchr(handle->path, '/'); - if (p == NULL) - p = handle->path; - else - p++; - } - - /* TODO(bnoordhuis) Check uv__strscpy() return value. */ - uv__strscpy(fname, p, sizeof(fname)); - - handle->cb(handle, fname, events, 0); -} -#endif - - -int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { -#ifdef HAVE_SYS_AHAFS_EVPRODS_H - uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT); - return 0; -#else - return UV_ENOSYS; -#endif -} - - -int uv_fs_event_start(uv_fs_event_t* handle, - uv_fs_event_cb cb, - const char* filename, - unsigned int flags) { -#ifdef HAVE_SYS_AHAFS_EVPRODS_H - int fd, rc, str_offset = 0; - char cwd[PATH_MAX]; - char absolute_path[PATH_MAX]; - char readlink_cwd[PATH_MAX]; - struct timeval zt; - fd_set pollfd; - - - /* Figure out whether filename is absolute or not */ - if (filename[0] == '\0') { - /* Missing a pathname */ - return UV_ENOENT; - } - else if (filename[0] == '/') { - /* We have absolute pathname */ - /* TODO(bnoordhuis) Check uv__strscpy() return value. */ - uv__strscpy(absolute_path, filename, sizeof(absolute_path)); - } else { - /* We have a relative pathname, compose the absolute pathname */ - snprintf(cwd, sizeof(cwd), "/proc/%lu/cwd", (unsigned long) getpid()); - rc = readlink(cwd, readlink_cwd, sizeof(readlink_cwd) - 1); - if (rc < 0) - return rc; - /* readlink does not null terminate our string */ - readlink_cwd[rc] = '\0'; - - if (filename[0] == '.' && filename[1] == '/') - str_offset = 2; - - snprintf(absolute_path, sizeof(absolute_path), "%s%s", readlink_cwd, - filename + str_offset); - } - - if (uv__is_ahafs_mounted() < 0) /* /aha checks failed */ - return UV_ENOSYS; - - /* Setup ahafs */ - rc = uv__setup_ahafs((const char *)absolute_path, &fd); - if (rc != 0) - return rc; - - /* Setup/Initialize all the libuv routines */ - uv__handle_start(handle); - uv__io_init(&handle->event_watcher, uv__ahafs_event, fd); - handle->path = uv__strdup(filename); - handle->cb = cb; - handle->dir_filename = NULL; - - uv__io_start(handle->loop, &handle->event_watcher, POLLIN); - - /* AHAFS wants someone to poll for it to start mointoring. - * so kick-start it so that we don't miss an event in the - * eventuality of an event that occurs in the current loop. */ - do { - memset(&zt, 0, sizeof(zt)); - FD_ZERO(&pollfd); - FD_SET(fd, &pollfd); - rc = select(fd + 1, &pollfd, NULL, NULL, &zt); - } while (rc == -1 && errno == EINTR); - return 0; -#else - return UV_ENOSYS; -#endif -} - - -int uv_fs_event_stop(uv_fs_event_t* handle) { -#ifdef HAVE_SYS_AHAFS_EVPRODS_H - if (!uv__is_active(handle)) - return 0; - - uv__io_close(handle->loop, &handle->event_watcher); - uv__handle_stop(handle); - - if (uv__path_is_a_directory(handle->path) == 0) { - uv__free(handle->dir_filename); - handle->dir_filename = NULL; - } - - uv__free(handle->path); - handle->path = NULL; - uv__close(handle->event_watcher.fd); - handle->event_watcher.fd = -1; - - return 0; -#else - return UV_ENOSYS; -#endif -} - - -void uv__fs_event_close(uv_fs_event_t* handle) { -#ifdef HAVE_SYS_AHAFS_EVPRODS_H - uv_fs_event_stop(handle); -#else - UNREACHABLE(); -#endif -} - - -char** uv_setup_args(int argc, char** argv) { - char exepath[UV__PATH_MAX]; - char** new_argv; - size_t size; - char* s; - int i; - - if (argc <= 0) - return argv; - - /* Save the original pointer to argv. - * AIX uses argv to read the process name. - * (Not the memory pointed to by argv[0..n] as on Linux.) - */ - process_argv = argv; - process_argc = argc; - - /* Use argv[0] to determine value for uv_exepath(). */ - size = sizeof(exepath); - if (uv__search_path(argv[0], exepath, &size) == 0) { - uv_once(&process_title_mutex_once, init_process_title_mutex_once); - uv_mutex_lock(&process_title_mutex); - original_exepath = uv__strdup(exepath); - uv_mutex_unlock(&process_title_mutex); - } - - /* Calculate how much memory we need for the argv strings. */ - size = 0; - for (i = 0; i < argc; i++) - size += strlen(argv[i]) + 1; - - /* Add space for the argv pointers. */ - size += (argc + 1) * sizeof(char*); - - new_argv = uv__malloc(size); - if (new_argv == NULL) - return argv; - args_mem = new_argv; - - /* Copy over the strings and set up the pointer table. */ - s = (char*) &new_argv[argc + 1]; - for (i = 0; i < argc; i++) { - size = strlen(argv[i]) + 1; - memcpy(s, argv[i], size); - new_argv[i] = s; - s += size; - } - new_argv[i] = NULL; - - return new_argv; -} - - -int uv_set_process_title(const char* title) { - char* new_title; - - /* If uv_setup_args wasn't called or failed, we can't continue. */ - if (process_argv == NULL || args_mem == NULL) - return UV_ENOBUFS; - - /* We cannot free this pointer when libuv shuts down, - * the process may still be using it. - */ - new_title = uv__strdup(title); - if (new_title == NULL) - return UV_ENOMEM; - - uv_once(&process_title_mutex_once, init_process_title_mutex_once); - uv_mutex_lock(&process_title_mutex); - - /* If this is the first time this is set, - * don't free and set argv[1] to NULL. - */ - if (process_title_ptr != NULL) - uv__free(process_title_ptr); - - process_title_ptr = new_title; - - process_argv[0] = process_title_ptr; - if (process_argc > 1) - process_argv[1] = NULL; - - uv_mutex_unlock(&process_title_mutex); - - return 0; -} - - -int uv_get_process_title(char* buffer, size_t size) { - size_t len; - if (buffer == NULL || size == 0) - return UV_EINVAL; - - /* If uv_setup_args wasn't called, we can't continue. */ - if (process_argv == NULL) - return UV_ENOBUFS; - - uv_once(&process_title_mutex_once, init_process_title_mutex_once); - uv_mutex_lock(&process_title_mutex); - - len = strlen(process_argv[0]); - if (size <= len) { - uv_mutex_unlock(&process_title_mutex); - return UV_ENOBUFS; - } - - memcpy(buffer, process_argv[0], len); - buffer[len] = '\0'; - - uv_mutex_unlock(&process_title_mutex); - - return 0; -} - - -void uv__process_title_cleanup(void) { - uv__free(args_mem); /* Keep valgrind happy. */ - args_mem = NULL; -} - - -int uv_resident_set_memory(size_t* rss) { - char pp[64]; - psinfo_t psinfo; - int err; - int fd; - - snprintf(pp, sizeof(pp), "/proc/%lu/psinfo", (unsigned long) getpid()); - - fd = open(pp, O_RDONLY); - if (fd == -1) - return UV__ERR(errno); - - /* FIXME(bnoordhuis) Handle EINTR. */ - err = UV_EINVAL; - if (read(fd, &psinfo, sizeof(psinfo)) == sizeof(psinfo)) { - *rss = (size_t)psinfo.pr_rssize * 1024; - err = 0; - } - uv__close(fd); - - return err; -} - - -int uv_uptime(double* uptime) { - struct utmp *utmp_buf; - size_t entries = 0; - time_t boot_time; - - boot_time = 0; - utmpname(UTMP_FILE); - - setutent(); - - while ((utmp_buf = getutent()) != NULL) { - if (utmp_buf->ut_user[0] && utmp_buf->ut_type == USER_PROCESS) - ++entries; - if (utmp_buf->ut_type == BOOT_TIME) - boot_time = utmp_buf->ut_time; - } - - endutent(); - - if (boot_time == 0) - return UV_ENOSYS; - - *uptime = time(NULL) - boot_time; - return 0; -} - - -int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { - uv_cpu_info_t* cpu_info; - perfstat_cpu_total_t ps_total; - perfstat_cpu_t* ps_cpus; - perfstat_id_t cpu_id; - int result, ncpus, idx = 0; - - result = perfstat_cpu_total(NULL, &ps_total, sizeof(ps_total), 1); - if (result == -1) { - return UV_ENOSYS; - } - - ncpus = result = perfstat_cpu(NULL, NULL, sizeof(perfstat_cpu_t), 0); - if (result == -1) { - return UV_ENOSYS; - } - - ps_cpus = (perfstat_cpu_t*) uv__malloc(ncpus * sizeof(perfstat_cpu_t)); - if (!ps_cpus) { - return UV_ENOMEM; - } - - /* TODO(bnoordhuis) Check uv__strscpy() return value. */ - uv__strscpy(cpu_id.name, FIRST_CPU, sizeof(cpu_id.name)); - result = perfstat_cpu(&cpu_id, ps_cpus, sizeof(perfstat_cpu_t), ncpus); - if (result == -1) { - uv__free(ps_cpus); - return UV_ENOSYS; - } - - *cpu_infos = (uv_cpu_info_t*) uv__malloc(ncpus * sizeof(uv_cpu_info_t)); - if (!*cpu_infos) { - uv__free(ps_cpus); - return UV_ENOMEM; - } - - *count = ncpus; - - cpu_info = *cpu_infos; - while (idx < ncpus) { - cpu_info->speed = (int)(ps_total.processorHZ / 1000000); - cpu_info->model = uv__strdup(ps_total.description); - cpu_info->cpu_times.user = ps_cpus[idx].user; - cpu_info->cpu_times.sys = ps_cpus[idx].sys; - cpu_info->cpu_times.idle = ps_cpus[idx].idle; - cpu_info->cpu_times.irq = ps_cpus[idx].wait; - cpu_info->cpu_times.nice = 0; - cpu_info++; - idx++; - } - - uv__free(ps_cpus); - return 0; -} - - -int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { - uv_interface_address_t* address; - int sockfd, sock6fd, inet6, i, r, size = 1; - struct ifconf ifc; - struct ifreq *ifr, *p, flg; - struct in6_ifreq if6; - struct sockaddr_dl* sa_addr; - - ifc.ifc_req = NULL; - sock6fd = -1; - r = 0; - *count = 0; - *addresses = NULL; - - if (0 > (sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP))) { - r = UV__ERR(errno); - goto cleanup; - } - - if (0 > (sock6fd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_IP))) { - r = UV__ERR(errno); - goto cleanup; - } - - if (ioctl(sockfd, SIOCGSIZIFCONF, &size) == -1) { - r = UV__ERR(errno); - goto cleanup; - } - - ifc.ifc_req = (struct ifreq*)uv__malloc(size); - if (ifc.ifc_req == NULL) { - r = UV_ENOMEM; - goto cleanup; - } - ifc.ifc_len = size; - if (ioctl(sockfd, SIOCGIFCONF, &ifc) == -1) { - r = UV__ERR(errno); - goto cleanup; - } - -#define ADDR_SIZE(p) MAX((p).sa_len, sizeof(p)) - - /* Count all up and running ipv4/ipv6 addresses */ - ifr = ifc.ifc_req; - while ((char*)ifr < (char*)ifc.ifc_req + ifc.ifc_len) { - p = ifr; - ifr = (struct ifreq*) - ((char*)ifr + sizeof(ifr->ifr_name) + ADDR_SIZE(ifr->ifr_addr)); - - if (!(p->ifr_addr.sa_family == AF_INET6 || - p->ifr_addr.sa_family == AF_INET)) - continue; - - memcpy(flg.ifr_name, p->ifr_name, sizeof(flg.ifr_name)); - if (ioctl(sockfd, SIOCGIFFLAGS, &flg) == -1) { - r = UV__ERR(errno); - goto cleanup; - } - - if (!(flg.ifr_flags & IFF_UP && flg.ifr_flags & IFF_RUNNING)) - continue; - - (*count)++; - } - - if (*count == 0) - goto cleanup; - - /* Alloc the return interface structs */ - *addresses = uv__calloc(*count, sizeof(**addresses)); - if (!(*addresses)) { - r = UV_ENOMEM; - goto cleanup; - } - address = *addresses; - - ifr = ifc.ifc_req; - while ((char*)ifr < (char*)ifc.ifc_req + ifc.ifc_len) { - p = ifr; - ifr = (struct ifreq*) - ((char*)ifr + sizeof(ifr->ifr_name) + ADDR_SIZE(ifr->ifr_addr)); - - if (!(p->ifr_addr.sa_family == AF_INET6 || - p->ifr_addr.sa_family == AF_INET)) - continue; - - inet6 = (p->ifr_addr.sa_family == AF_INET6); - - memcpy(flg.ifr_name, p->ifr_name, sizeof(flg.ifr_name)); - if (ioctl(sockfd, SIOCGIFFLAGS, &flg) == -1) - goto syserror; - - if (!(flg.ifr_flags & IFF_UP && flg.ifr_flags & IFF_RUNNING)) - continue; - - /* All conditions above must match count loop */ - - address->name = uv__strdup(p->ifr_name); - - if (inet6) - address->address.address6 = *((struct sockaddr_in6*) &p->ifr_addr); - else - address->address.address4 = *((struct sockaddr_in*) &p->ifr_addr); - - if (inet6) { - memset(&if6, 0, sizeof(if6)); - r = uv__strscpy(if6.ifr_name, p->ifr_name, sizeof(if6.ifr_name)); - if (r == UV_E2BIG) - goto cleanup; - r = 0; - memcpy(&if6.ifr_Addr, &p->ifr_addr, sizeof(if6.ifr_Addr)); - if (ioctl(sock6fd, SIOCGIFNETMASK6, &if6) == -1) - goto syserror; - address->netmask.netmask6 = *((struct sockaddr_in6*) &if6.ifr_Addr); - /* Explicitly set family as the ioctl call appears to return it as 0. */ - address->netmask.netmask6.sin6_family = AF_INET6; - } else { - if (ioctl(sockfd, SIOCGIFNETMASK, p) == -1) - goto syserror; - address->netmask.netmask4 = *((struct sockaddr_in*) &p->ifr_addr); - /* Explicitly set family as the ioctl call appears to return it as 0. */ - address->netmask.netmask4.sin_family = AF_INET; - } - - address->is_internal = flg.ifr_flags & IFF_LOOPBACK ? 1 : 0; - - address++; - } - - /* Fill in physical addresses. */ - ifr = ifc.ifc_req; - while ((char*)ifr < (char*)ifc.ifc_req + ifc.ifc_len) { - p = ifr; - ifr = (struct ifreq*) - ((char*)ifr + sizeof(ifr->ifr_name) + ADDR_SIZE(ifr->ifr_addr)); - - if (p->ifr_addr.sa_family != AF_LINK) - continue; - - address = *addresses; - for (i = 0; i < *count; i++) { - if (strcmp(address->name, p->ifr_name) == 0) { - sa_addr = (struct sockaddr_dl*) &p->ifr_addr; - memcpy(address->phys_addr, LLADDR(sa_addr), sizeof(address->phys_addr)); - } - address++; - } - } - -#undef ADDR_SIZE - goto cleanup; - -syserror: - uv_free_interface_addresses(*addresses, *count); - *addresses = NULL; - *count = 0; - r = UV_ENOSYS; - -cleanup: - if (sockfd != -1) - uv__close(sockfd); - if (sock6fd != -1) - uv__close(sock6fd); - uv__free(ifc.ifc_req); - return r; -} - - -void uv_free_interface_addresses(uv_interface_address_t* addresses, - int count) { - int i; - - for (i = 0; i < count; ++i) { - uv__free(addresses[i].name); - } - - uv__free(addresses); -} - - -void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) { - struct pollfd* events; - uintptr_t i; - uintptr_t nfds; - struct poll_ctl pc; - - assert(loop->watchers != NULL); - assert(fd >= 0); - - events = (struct pollfd*) loop->watchers[loop->nwatchers]; - nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1]; - - if (events != NULL) - /* Invalidate events with same file descriptor */ - for (i = 0; i < nfds; i++) - if ((int) events[i].fd == fd) - events[i].fd = -1; - - /* Remove the file descriptor from the poll set */ - pc.events = 0; - pc.cmd = PS_DELETE; - pc.fd = fd; - if(loop->backend_fd >= 0) - pollset_ctl(loop->backend_fd, &pc, 1); -} diff --git a/libuv/src/unix/android-ifaddrs.c b/libuv/src/unix/android-ifaddrs.c deleted file mode 100644 index 4765cc0..0000000 --- a/libuv/src/unix/android-ifaddrs.c +++ /dev/null @@ -1,713 +0,0 @@ -/* -Copyright (c) 2013, Kenneth MacKay -Copyright (c) 2014, Emergya (Cloud4all, FP7/2007-2013 grant agreement #289016) -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "uv/android-ifaddrs.h" -#include "uv-common.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -typedef struct NetlinkList -{ - struct NetlinkList *m_next; - struct nlmsghdr *m_data; - unsigned int m_size; -} NetlinkList; - -static int netlink_socket(pid_t *p_pid) -{ - struct sockaddr_nl l_addr; - socklen_t l_len; - - int l_socket = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE); - if(l_socket < 0) - { - return -1; - } - - memset(&l_addr, 0, sizeof(l_addr)); - l_addr.nl_family = AF_NETLINK; - if(bind(l_socket, (struct sockaddr *)&l_addr, sizeof(l_addr)) < 0) - { - close(l_socket); - return -1; - } - - l_len = sizeof(l_addr); - if(getsockname(l_socket, (struct sockaddr *)&l_addr, &l_len) < 0) - { - close(l_socket); - return -1; - } - *p_pid = l_addr.nl_pid; - - return l_socket; -} - -static int netlink_send(int p_socket, int p_request) -{ - char l_buffer[NLMSG_ALIGN(sizeof(struct nlmsghdr)) + NLMSG_ALIGN(sizeof(struct rtgenmsg))]; - - struct nlmsghdr *l_hdr; - struct rtgenmsg *l_msg; - struct sockaddr_nl l_addr; - - memset(l_buffer, 0, sizeof(l_buffer)); - - l_hdr = (struct nlmsghdr *)l_buffer; - l_msg = (struct rtgenmsg *)NLMSG_DATA(l_hdr); - - l_hdr->nlmsg_len = NLMSG_LENGTH(sizeof(*l_msg)); - l_hdr->nlmsg_type = p_request; - l_hdr->nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST; - l_hdr->nlmsg_pid = 0; - l_hdr->nlmsg_seq = p_socket; - l_msg->rtgen_family = AF_UNSPEC; - - memset(&l_addr, 0, sizeof(l_addr)); - l_addr.nl_family = AF_NETLINK; - return (sendto(p_socket, l_hdr, l_hdr->nlmsg_len, 0, (struct sockaddr *)&l_addr, sizeof(l_addr))); -} - -static int netlink_recv(int p_socket, void *p_buffer, size_t p_len) -{ - struct sockaddr_nl l_addr; - struct msghdr l_msg; - - struct iovec l_iov; - l_iov.iov_base = p_buffer; - l_iov.iov_len = p_len; - - for(;;) - { - int l_result; - l_msg.msg_name = (void *)&l_addr; - l_msg.msg_namelen = sizeof(l_addr); - l_msg.msg_iov = &l_iov; - l_msg.msg_iovlen = 1; - l_msg.msg_control = NULL; - l_msg.msg_controllen = 0; - l_msg.msg_flags = 0; - l_result = recvmsg(p_socket, &l_msg, 0); - - if(l_result < 0) - { - if(errno == EINTR) - { - continue; - } - return -2; - } - - /* Buffer was too small */ - if(l_msg.msg_flags & MSG_TRUNC) - { - return -1; - } - return l_result; - } -} - -static struct nlmsghdr *getNetlinkResponse(int p_socket, pid_t p_pid, int *p_size, int *p_done) -{ - size_t l_size = 4096; - void *l_buffer = NULL; - - for(;;) - { - int l_read; - - uv__free(l_buffer); - l_buffer = uv__malloc(l_size); - if (l_buffer == NULL) - { - return NULL; - } - - l_read = netlink_recv(p_socket, l_buffer, l_size); - *p_size = l_read; - if(l_read == -2) - { - uv__free(l_buffer); - return NULL; - } - if(l_read >= 0) - { - struct nlmsghdr *l_hdr; - for(l_hdr = (struct nlmsghdr *)l_buffer; NLMSG_OK(l_hdr, (unsigned int)l_read); l_hdr = (struct nlmsghdr *)NLMSG_NEXT(l_hdr, l_read)) - { - if((pid_t)l_hdr->nlmsg_pid != p_pid || (int)l_hdr->nlmsg_seq != p_socket) - { - continue; - } - - if(l_hdr->nlmsg_type == NLMSG_DONE) - { - *p_done = 1; - break; - } - - if(l_hdr->nlmsg_type == NLMSG_ERROR) - { - uv__free(l_buffer); - return NULL; - } - } - return l_buffer; - } - - l_size *= 2; - } -} - -static NetlinkList *newListItem(struct nlmsghdr *p_data, unsigned int p_size) -{ - NetlinkList *l_item = uv__malloc(sizeof(NetlinkList)); - if (l_item == NULL) - { - return NULL; - } - - l_item->m_next = NULL; - l_item->m_data = p_data; - l_item->m_size = p_size; - return l_item; -} - -static void freeResultList(NetlinkList *p_list) -{ - NetlinkList *l_cur; - while(p_list) - { - l_cur = p_list; - p_list = p_list->m_next; - uv__free(l_cur->m_data); - uv__free(l_cur); - } -} - -static NetlinkList *getResultList(int p_socket, int p_request, pid_t p_pid) -{ - int l_size; - int l_done; - NetlinkList *l_list; - NetlinkList *l_end; - - if(netlink_send(p_socket, p_request) < 0) - { - return NULL; - } - - l_list = NULL; - l_end = NULL; - - l_done = 0; - while(!l_done) - { - NetlinkList *l_item; - - struct nlmsghdr *l_hdr = getNetlinkResponse(p_socket, p_pid, &l_size, &l_done); - /* Error */ - if(!l_hdr) - { - freeResultList(l_list); - return NULL; - } - - l_item = newListItem(l_hdr, l_size); - if (!l_item) - { - freeResultList(l_list); - return NULL; - } - if(!l_list) - { - l_list = l_item; - } - else - { - l_end->m_next = l_item; - } - l_end = l_item; - } - return l_list; -} - -static size_t maxSize(size_t a, size_t b) -{ - return (a > b ? a : b); -} - -static size_t calcAddrLen(sa_family_t p_family, int p_dataSize) -{ - switch(p_family) - { - case AF_INET: - return sizeof(struct sockaddr_in); - case AF_INET6: - return sizeof(struct sockaddr_in6); - case AF_PACKET: - return maxSize(sizeof(struct sockaddr_ll), offsetof(struct sockaddr_ll, sll_addr) + p_dataSize); - default: - return maxSize(sizeof(struct sockaddr), offsetof(struct sockaddr, sa_data) + p_dataSize); - } -} - -static void makeSockaddr(sa_family_t p_family, struct sockaddr *p_dest, void *p_data, size_t p_size) -{ - switch(p_family) - { - case AF_INET: - memcpy(&((struct sockaddr_in*)p_dest)->sin_addr, p_data, p_size); - break; - case AF_INET6: - memcpy(&((struct sockaddr_in6*)p_dest)->sin6_addr, p_data, p_size); - break; - case AF_PACKET: - memcpy(((struct sockaddr_ll*)p_dest)->sll_addr, p_data, p_size); - ((struct sockaddr_ll*)p_dest)->sll_halen = p_size; - break; - default: - memcpy(p_dest->sa_data, p_data, p_size); - break; - } - p_dest->sa_family = p_family; -} - -static void addToEnd(struct ifaddrs **p_resultList, struct ifaddrs *p_entry) -{ - if(!*p_resultList) - { - *p_resultList = p_entry; - } - else - { - struct ifaddrs *l_cur = *p_resultList; - while(l_cur->ifa_next) - { - l_cur = l_cur->ifa_next; - } - l_cur->ifa_next = p_entry; - } -} - -static int interpretLink(struct nlmsghdr *p_hdr, struct ifaddrs **p_resultList) -{ - struct ifaddrs *l_entry; - - char *l_index; - char *l_name; - char *l_addr; - char *l_data; - - struct ifinfomsg *l_info = (struct ifinfomsg *)NLMSG_DATA(p_hdr); - - size_t l_nameSize = 0; - size_t l_addrSize = 0; - size_t l_dataSize = 0; - - size_t l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifinfomsg)); - struct rtattr *l_rta; - for(l_rta = IFLA_RTA(l_info); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) - { - size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); - switch(l_rta->rta_type) - { - case IFLA_ADDRESS: - case IFLA_BROADCAST: - l_addrSize += NLMSG_ALIGN(calcAddrLen(AF_PACKET, l_rtaDataSize)); - break; - case IFLA_IFNAME: - l_nameSize += NLMSG_ALIGN(l_rtaSize + 1); - break; - case IFLA_STATS: - l_dataSize += NLMSG_ALIGN(l_rtaSize); - break; - default: - break; - } - } - - l_entry = uv__malloc(sizeof(struct ifaddrs) + sizeof(int) + l_nameSize + l_addrSize + l_dataSize); - if (l_entry == NULL) - { - return -1; - } - memset(l_entry, 0, sizeof(struct ifaddrs)); - l_entry->ifa_name = ""; - - l_index = ((char *)l_entry) + sizeof(struct ifaddrs); - l_name = l_index + sizeof(int); - l_addr = l_name + l_nameSize; - l_data = l_addr + l_addrSize; - - /* Save the interface index so we can look it up when handling the - * addresses. - */ - memcpy(l_index, &l_info->ifi_index, sizeof(int)); - - l_entry->ifa_flags = l_info->ifi_flags; - - l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifinfomsg)); - for(l_rta = IFLA_RTA(l_info); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) - { - void *l_rtaData = RTA_DATA(l_rta); - size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); - switch(l_rta->rta_type) - { - case IFLA_ADDRESS: - case IFLA_BROADCAST: - { - size_t l_addrLen = calcAddrLen(AF_PACKET, l_rtaDataSize); - makeSockaddr(AF_PACKET, (struct sockaddr *)l_addr, l_rtaData, l_rtaDataSize); - ((struct sockaddr_ll *)l_addr)->sll_ifindex = l_info->ifi_index; - ((struct sockaddr_ll *)l_addr)->sll_hatype = l_info->ifi_type; - if(l_rta->rta_type == IFLA_ADDRESS) - { - l_entry->ifa_addr = (struct sockaddr *)l_addr; - } - else - { - l_entry->ifa_broadaddr = (struct sockaddr *)l_addr; - } - l_addr += NLMSG_ALIGN(l_addrLen); - break; - } - case IFLA_IFNAME: - strncpy(l_name, l_rtaData, l_rtaDataSize); - l_name[l_rtaDataSize] = '\0'; - l_entry->ifa_name = l_name; - break; - case IFLA_STATS: - memcpy(l_data, l_rtaData, l_rtaDataSize); - l_entry->ifa_data = l_data; - break; - default: - break; - } - } - - addToEnd(p_resultList, l_entry); - return 0; -} - -static struct ifaddrs *findInterface(int p_index, struct ifaddrs **p_links, int p_numLinks) -{ - int l_num = 0; - struct ifaddrs *l_cur = *p_links; - while(l_cur && l_num < p_numLinks) - { - char *l_indexPtr = ((char *)l_cur) + sizeof(struct ifaddrs); - int l_index; - memcpy(&l_index, l_indexPtr, sizeof(int)); - if(l_index == p_index) - { - return l_cur; - } - - l_cur = l_cur->ifa_next; - ++l_num; - } - return NULL; -} - -static int interpretAddr(struct nlmsghdr *p_hdr, struct ifaddrs **p_resultList, int p_numLinks) -{ - struct ifaddrmsg *l_info = (struct ifaddrmsg *)NLMSG_DATA(p_hdr); - struct ifaddrs *l_interface = findInterface(l_info->ifa_index, p_resultList, p_numLinks); - - size_t l_nameSize = 0; - size_t l_addrSize = 0; - - int l_addedNetmask = 0; - - size_t l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifaddrmsg)); - struct rtattr *l_rta; - struct ifaddrs *l_entry; - - char *l_name; - char *l_addr; - - for(l_rta = IFA_RTA(l_info); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) - { - size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); - if(l_info->ifa_family == AF_PACKET) - { - continue; - } - - switch(l_rta->rta_type) - { - case IFA_ADDRESS: - case IFA_LOCAL: - l_addrSize += NLMSG_ALIGN(calcAddrLen(l_info->ifa_family, l_rtaDataSize)); - if((l_info->ifa_family == AF_INET || l_info->ifa_family == AF_INET6) && !l_addedNetmask) - { - /* Make room for netmask */ - l_addrSize += NLMSG_ALIGN(calcAddrLen(l_info->ifa_family, l_rtaDataSize)); - l_addedNetmask = 1; - } - break; - case IFA_BROADCAST: - l_addrSize += NLMSG_ALIGN(calcAddrLen(l_info->ifa_family, l_rtaDataSize)); - break; - case IFA_LABEL: - l_nameSize += NLMSG_ALIGN(l_rtaDataSize + 1); - break; - default: - break; - } - } - - l_entry = uv__malloc(sizeof(struct ifaddrs) + l_nameSize + l_addrSize); - if (l_entry == NULL) - { - return -1; - } - memset(l_entry, 0, sizeof(struct ifaddrs)); - l_entry->ifa_name = (l_interface ? l_interface->ifa_name : ""); - - l_name = ((char *)l_entry) + sizeof(struct ifaddrs); - l_addr = l_name + l_nameSize; - - l_entry->ifa_flags = l_info->ifa_flags; - if(l_interface) - { - l_entry->ifa_flags |= l_interface->ifa_flags; - } - - l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifaddrmsg)); - for(l_rta = IFA_RTA(l_info); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) - { - void *l_rtaData = RTA_DATA(l_rta); - size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); - switch(l_rta->rta_type) - { - case IFA_ADDRESS: - case IFA_BROADCAST: - case IFA_LOCAL: - { - size_t l_addrLen = calcAddrLen(l_info->ifa_family, l_rtaDataSize); - makeSockaddr(l_info->ifa_family, (struct sockaddr *)l_addr, l_rtaData, l_rtaDataSize); - if(l_info->ifa_family == AF_INET6) - { - if(IN6_IS_ADDR_LINKLOCAL((struct in6_addr *)l_rtaData) || IN6_IS_ADDR_MC_LINKLOCAL((struct in6_addr *)l_rtaData)) - { - ((struct sockaddr_in6 *)l_addr)->sin6_scope_id = l_info->ifa_index; - } - } - - /* Apparently in a point-to-point network IFA_ADDRESS contains - * the dest address and IFA_LOCAL contains the local address - */ - if(l_rta->rta_type == IFA_ADDRESS) - { - if(l_entry->ifa_addr) - { - l_entry->ifa_dstaddr = (struct sockaddr *)l_addr; - } - else - { - l_entry->ifa_addr = (struct sockaddr *)l_addr; - } - } - else if(l_rta->rta_type == IFA_LOCAL) - { - if(l_entry->ifa_addr) - { - l_entry->ifa_dstaddr = l_entry->ifa_addr; - } - l_entry->ifa_addr = (struct sockaddr *)l_addr; - } - else - { - l_entry->ifa_broadaddr = (struct sockaddr *)l_addr; - } - l_addr += NLMSG_ALIGN(l_addrLen); - break; - } - case IFA_LABEL: - strncpy(l_name, l_rtaData, l_rtaDataSize); - l_name[l_rtaDataSize] = '\0'; - l_entry->ifa_name = l_name; - break; - default: - break; - } - } - - if(l_entry->ifa_addr && (l_entry->ifa_addr->sa_family == AF_INET || l_entry->ifa_addr->sa_family == AF_INET6)) - { - unsigned l_maxPrefix = (l_entry->ifa_addr->sa_family == AF_INET ? 32 : 128); - unsigned l_prefix = (l_info->ifa_prefixlen > l_maxPrefix ? l_maxPrefix : l_info->ifa_prefixlen); - unsigned char l_mask[16] = {0}; - unsigned i; - for(i=0; i<(l_prefix/8); ++i) - { - l_mask[i] = 0xff; - } - if(l_prefix % 8) - { - l_mask[i] = 0xff << (8 - (l_prefix % 8)); - } - - makeSockaddr(l_entry->ifa_addr->sa_family, (struct sockaddr *)l_addr, l_mask, l_maxPrefix / 8); - l_entry->ifa_netmask = (struct sockaddr *)l_addr; - } - - addToEnd(p_resultList, l_entry); - return 0; -} - -static int interpretLinks(int p_socket, pid_t p_pid, NetlinkList *p_netlinkList, struct ifaddrs **p_resultList) -{ - - int l_numLinks = 0; - for(; p_netlinkList; p_netlinkList = p_netlinkList->m_next) - { - unsigned int l_nlsize = p_netlinkList->m_size; - struct nlmsghdr *l_hdr; - for(l_hdr = p_netlinkList->m_data; NLMSG_OK(l_hdr, l_nlsize); l_hdr = NLMSG_NEXT(l_hdr, l_nlsize)) - { - if((pid_t)l_hdr->nlmsg_pid != p_pid || (int)l_hdr->nlmsg_seq != p_socket) - { - continue; - } - - if(l_hdr->nlmsg_type == NLMSG_DONE) - { - break; - } - - if(l_hdr->nlmsg_type == RTM_NEWLINK) - { - if(interpretLink(l_hdr, p_resultList) == -1) - { - return -1; - } - ++l_numLinks; - } - } - } - return l_numLinks; -} - -static int interpretAddrs(int p_socket, pid_t p_pid, NetlinkList *p_netlinkList, struct ifaddrs **p_resultList, int p_numLinks) -{ - for(; p_netlinkList; p_netlinkList = p_netlinkList->m_next) - { - unsigned int l_nlsize = p_netlinkList->m_size; - struct nlmsghdr *l_hdr; - for(l_hdr = p_netlinkList->m_data; NLMSG_OK(l_hdr, l_nlsize); l_hdr = NLMSG_NEXT(l_hdr, l_nlsize)) - { - if((pid_t)l_hdr->nlmsg_pid != p_pid || (int)l_hdr->nlmsg_seq != p_socket) - { - continue; - } - - if(l_hdr->nlmsg_type == NLMSG_DONE) - { - break; - } - - if(l_hdr->nlmsg_type == RTM_NEWADDR) - { - if (interpretAddr(l_hdr, p_resultList, p_numLinks) == -1) - { - return -1; - } - } - } - } - return 0; -} - -int getifaddrs(struct ifaddrs **ifap) -{ - int l_socket; - int l_result; - int l_numLinks; - pid_t l_pid; - NetlinkList *l_linkResults; - NetlinkList *l_addrResults; - - if(!ifap) - { - return -1; - } - *ifap = NULL; - - l_socket = netlink_socket(&l_pid); - if(l_socket < 0) - { - return -1; - } - - l_linkResults = getResultList(l_socket, RTM_GETLINK, l_pid); - if(!l_linkResults) - { - close(l_socket); - return -1; - } - - l_addrResults = getResultList(l_socket, RTM_GETADDR, l_pid); - if(!l_addrResults) - { - close(l_socket); - freeResultList(l_linkResults); - return -1; - } - - l_result = 0; - l_numLinks = interpretLinks(l_socket, l_pid, l_linkResults, ifap); - if(l_numLinks == -1 || interpretAddrs(l_socket, l_pid, l_addrResults, ifap, l_numLinks) == -1) - { - l_result = -1; - } - - freeResultList(l_linkResults); - freeResultList(l_addrResults); - close(l_socket); - return l_result; -} - -void freeifaddrs(struct ifaddrs *ifa) -{ - struct ifaddrs *l_cur; - while(ifa) - { - l_cur = ifa; - ifa = ifa->ifa_next; - uv__free(l_cur); - } -} diff --git a/libuv/src/unix/async.c b/libuv/src/unix/async.c deleted file mode 100644 index e1805c3..0000000 --- a/libuv/src/unix/async.c +++ /dev/null @@ -1,253 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* This file contains both the uv__async internal infrastructure and the - * user-facing uv_async_t functions. - */ - -#include "uv.h" -#include "internal.h" -#include "atomic-ops.h" - -#include -#include /* snprintf() */ -#include -#include -#include -#include -#include /* sched_yield() */ - -#ifdef __linux__ -#include -#endif - -static void uv__async_send(uv_loop_t* loop); -static int uv__async_start(uv_loop_t* loop); - - -int uv_async_init(uv_loop_t* loop, uv_async_t* handle, uv_async_cb async_cb) { - int err; - - err = uv__async_start(loop); - if (err) - return err; - - uv__handle_init(loop, (uv_handle_t*)handle, UV_ASYNC); - handle->async_cb = async_cb; - handle->pending = 0; - - QUEUE_INSERT_TAIL(&loop->async_handles, &handle->queue); - uv__handle_start(handle); - - return 0; -} - - -int uv_async_send(uv_async_t* handle) { - /* Do a cheap read first. */ - if (ACCESS_ONCE(int, handle->pending) != 0) - return 0; - - /* Tell the other thread we're busy with the handle. */ - if (cmpxchgi(&handle->pending, 0, 1) != 0) - return 0; - - /* Wake up the other thread's event loop. */ - uv__async_send(handle->loop); - - /* Tell the other thread we're done. */ - if (cmpxchgi(&handle->pending, 1, 2) != 1) - abort(); - - return 0; -} - - -/* Only call this from the event loop thread. */ -static int uv__async_spin(uv_async_t* handle) { - int i; - int rc; - - for (;;) { - /* 997 is not completely chosen at random. It's a prime number, acyclical - * by nature, and should therefore hopefully dampen sympathetic resonance. - */ - for (i = 0; i < 997; i++) { - /* rc=0 -- handle is not pending. - * rc=1 -- handle is pending, other thread is still working with it. - * rc=2 -- handle is pending, other thread is done. - */ - rc = cmpxchgi(&handle->pending, 2, 0); - - if (rc != 1) - return rc; - - /* Other thread is busy with this handle, spin until it's done. */ - cpu_relax(); - } - - /* Yield the CPU. We may have preempted the other thread while it's - * inside the critical section and if it's running on the same CPU - * as us, we'll just burn CPU cycles until the end of our time slice. - */ - sched_yield(); - } -} - - -void uv__async_close(uv_async_t* handle) { - uv__async_spin(handle); - QUEUE_REMOVE(&handle->queue); - uv__handle_stop(handle); -} - - -static void uv__async_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { - char buf[1024]; - ssize_t r; - QUEUE queue; - QUEUE* q; - uv_async_t* h; - - assert(w == &loop->async_io_watcher); - - for (;;) { - r = read(w->fd, buf, sizeof(buf)); - - if (r == sizeof(buf)) - continue; - - if (r != -1) - break; - - if (errno == EAGAIN || errno == EWOULDBLOCK) - break; - - if (errno == EINTR) - continue; - - abort(); - } - - QUEUE_MOVE(&loop->async_handles, &queue); - while (!QUEUE_EMPTY(&queue)) { - q = QUEUE_HEAD(&queue); - h = QUEUE_DATA(q, uv_async_t, queue); - - QUEUE_REMOVE(q); - QUEUE_INSERT_TAIL(&loop->async_handles, q); - - if (0 == uv__async_spin(h)) - continue; /* Not pending. */ - - if (h->async_cb == NULL) - continue; - - h->async_cb(h); - } -} - - -static void uv__async_send(uv_loop_t* loop) { - const void* buf; - ssize_t len; - int fd; - int r; - - buf = ""; - len = 1; - fd = loop->async_wfd; - -#if defined(__linux__) - if (fd == -1) { - static const uint64_t val = 1; - buf = &val; - len = sizeof(val); - fd = loop->async_io_watcher.fd; /* eventfd */ - } -#endif - - do - r = write(fd, buf, len); - while (r == -1 && errno == EINTR); - - if (r == len) - return; - - if (r == -1) - if (errno == EAGAIN || errno == EWOULDBLOCK) - return; - - abort(); -} - - -static int uv__async_start(uv_loop_t* loop) { - int pipefd[2]; - int err; - - if (loop->async_io_watcher.fd != -1) - return 0; - -#ifdef __linux__ - err = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); - if (err < 0) - return UV__ERR(errno); - - pipefd[0] = err; - pipefd[1] = -1; -#else - err = uv__make_pipe(pipefd, UV_NONBLOCK_PIPE); - if (err < 0) - return err; -#endif - - uv__io_init(&loop->async_io_watcher, uv__async_io, pipefd[0]); - uv__io_start(loop, &loop->async_io_watcher, POLLIN); - loop->async_wfd = pipefd[1]; - - return 0; -} - - -int uv__async_fork(uv_loop_t* loop) { - if (loop->async_io_watcher.fd == -1) /* never started */ - return 0; - - uv__async_stop(loop); - - return uv__async_start(loop); -} - - -void uv__async_stop(uv_loop_t* loop) { - if (loop->async_io_watcher.fd == -1) - return; - - if (loop->async_wfd != -1) { - if (loop->async_wfd != loop->async_io_watcher.fd) - uv__close(loop->async_wfd); - loop->async_wfd = -1; - } - - uv__io_stop(loop, &loop->async_io_watcher, POLLIN); - uv__close(loop->async_io_watcher.fd); - loop->async_io_watcher.fd = -1; -} diff --git a/libuv/src/unix/atomic-ops.h b/libuv/src/unix/atomic-ops.h deleted file mode 100644 index c48d058..0000000 --- a/libuv/src/unix/atomic-ops.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (c) 2013, Ben Noordhuis - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef UV_ATOMIC_OPS_H_ -#define UV_ATOMIC_OPS_H_ - -#include "internal.h" /* UV_UNUSED */ - -#if defined(__SUNPRO_C) || defined(__SUNPRO_CC) -#include -#endif - -UV_UNUSED(static int cmpxchgi(int* ptr, int oldval, int newval)); -UV_UNUSED(static void cpu_relax(void)); - -/* Prefer hand-rolled assembly over the gcc builtins because the latter also - * issue full memory barriers. - */ -UV_UNUSED(static int cmpxchgi(int* ptr, int oldval, int newval)) { -#if defined(__i386__) || defined(__x86_64__) - int out; - __asm__ __volatile__ ("lock; cmpxchg %2, %1;" - : "=a" (out), "+m" (*(volatile int*) ptr) - : "r" (newval), "0" (oldval) - : "memory"); - return out; -#elif defined(__MVS__) - unsigned int op4; - if (__plo_CSST(ptr, (unsigned int*) &oldval, newval, - (unsigned int*) ptr, *ptr, &op4)) - return oldval; - else - return op4; -#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) - return atomic_cas_uint((uint_t *)ptr, (uint_t)oldval, (uint_t)newval); -#else - return __sync_val_compare_and_swap(ptr, oldval, newval); -#endif -} - -UV_UNUSED(static void cpu_relax(void)) { -#if defined(__i386__) || defined(__x86_64__) - __asm__ __volatile__ ("rep; nop" ::: "memory"); /* a.k.a. PAUSE */ -#elif (defined(__arm__) && __ARM_ARCH >= 7) || defined(__aarch64__) - __asm__ __volatile__ ("yield" ::: "memory"); -#elif defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) - __asm__ __volatile__ ("or 1,1,1; or 2,2,2" ::: "memory"); -#endif -} - -#endif /* UV_ATOMIC_OPS_H_ */ diff --git a/libuv/src/unix/bsd-ifaddrs.c b/libuv/src/unix/bsd-ifaddrs.c deleted file mode 100644 index e48934b..0000000 --- a/libuv/src/unix/bsd-ifaddrs.c +++ /dev/null @@ -1,163 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include - -#include -#include -#if !defined(__CYGWIN__) && !defined(__MSYS__) -#include -#endif - -#if defined(__HAIKU__) -#define IFF_RUNNING IFF_LINK -#endif - -static int uv__ifaddr_exclude(struct ifaddrs *ent, int exclude_type) { - if (!((ent->ifa_flags & IFF_UP) && (ent->ifa_flags & IFF_RUNNING))) - return 1; - if (ent->ifa_addr == NULL) - return 1; -#if !defined(__CYGWIN__) && !defined(__MSYS__) - /* - * If `exclude_type` is `UV__EXCLUDE_IFPHYS`, return whether `sa_family` - * equals `AF_LINK`. Otherwise, the result depends on the operating - * system with `AF_LINK` or `PF_INET`. - */ - if (exclude_type == UV__EXCLUDE_IFPHYS) - return (ent->ifa_addr->sa_family != AF_LINK); -#endif -#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__DragonFly__) || \ - defined(__HAIKU__) - /* - * On BSD getifaddrs returns information related to the raw underlying - * devices. We're not interested in this information. - */ - if (ent->ifa_addr->sa_family == AF_LINK) - return 1; -#elif defined(__NetBSD__) || defined(__OpenBSD__) - if (ent->ifa_addr->sa_family != PF_INET && - ent->ifa_addr->sa_family != PF_INET6) - return 1; -#endif - return 0; -} - -int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { - struct ifaddrs* addrs; - struct ifaddrs* ent; - uv_interface_address_t* address; -#if !(defined(__CYGWIN__) || defined(__MSYS__)) - int i; -#endif - - *count = 0; - *addresses = NULL; - - if (getifaddrs(&addrs) != 0) - return UV__ERR(errno); - - /* Count the number of interfaces */ - for (ent = addrs; ent != NULL; ent = ent->ifa_next) { - if (uv__ifaddr_exclude(ent, UV__EXCLUDE_IFADDR)) - continue; - (*count)++; - } - - if (*count == 0) { - freeifaddrs(addrs); - return 0; - } - - /* Make sure the memory is initiallized to zero using calloc() */ - *addresses = uv__calloc(*count, sizeof(**addresses)); - - if (*addresses == NULL) { - freeifaddrs(addrs); - return UV_ENOMEM; - } - - address = *addresses; - - for (ent = addrs; ent != NULL; ent = ent->ifa_next) { - if (uv__ifaddr_exclude(ent, UV__EXCLUDE_IFADDR)) - continue; - - address->name = uv__strdup(ent->ifa_name); - - if (ent->ifa_addr->sa_family == AF_INET6) { - address->address.address6 = *((struct sockaddr_in6*) ent->ifa_addr); - } else { - address->address.address4 = *((struct sockaddr_in*) ent->ifa_addr); - } - - if (ent->ifa_netmask == NULL) { - memset(&address->netmask, 0, sizeof(address->netmask)); - } else if (ent->ifa_netmask->sa_family == AF_INET6) { - address->netmask.netmask6 = *((struct sockaddr_in6*) ent->ifa_netmask); - } else { - address->netmask.netmask4 = *((struct sockaddr_in*) ent->ifa_netmask); - } - - address->is_internal = !!(ent->ifa_flags & IFF_LOOPBACK); - - address++; - } - -#if !(defined(__CYGWIN__) || defined(__MSYS__)) - /* Fill in physical addresses for each interface */ - for (ent = addrs; ent != NULL; ent = ent->ifa_next) { - if (uv__ifaddr_exclude(ent, UV__EXCLUDE_IFPHYS)) - continue; - - address = *addresses; - - for (i = 0; i < *count; i++) { - if (strcmp(address->name, ent->ifa_name) == 0) { - struct sockaddr_dl* sa_addr; - sa_addr = (struct sockaddr_dl*)(ent->ifa_addr); - memcpy(address->phys_addr, LLADDR(sa_addr), sizeof(address->phys_addr)); - } - address++; - } - } -#endif - - freeifaddrs(addrs); - - return 0; -} - - -void uv_free_interface_addresses(uv_interface_address_t* addresses, - int count) { - int i; - - for (i = 0; i < count; i++) { - uv__free(addresses[i].name); - } - - uv__free(addresses); -} diff --git a/libuv/src/unix/bsd-proctitle.c b/libuv/src/unix/bsd-proctitle.c deleted file mode 100644 index 723b81c..0000000 --- a/libuv/src/unix/bsd-proctitle.c +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include - - -static uv_mutex_t process_title_mutex; -static uv_once_t process_title_mutex_once = UV_ONCE_INIT; -static char* process_title; - - -static void init_process_title_mutex_once(void) { - if (uv_mutex_init(&process_title_mutex)) - abort(); -} - - -void uv__process_title_cleanup(void) { - /* TODO(bnoordhuis) uv_mutex_destroy(&process_title_mutex) - * and reset process_title_mutex_once? - */ -} - - -char** uv_setup_args(int argc, char** argv) { - process_title = argc > 0 ? uv__strdup(argv[0]) : NULL; - return argv; -} - - -int uv_set_process_title(const char* title) { - char* new_title; - - new_title = uv__strdup(title); - if (new_title == NULL) - return UV_ENOMEM; - - uv_once(&process_title_mutex_once, init_process_title_mutex_once); - uv_mutex_lock(&process_title_mutex); - - uv__free(process_title); - process_title = new_title; - setproctitle("%s", title); - - uv_mutex_unlock(&process_title_mutex); - - return 0; -} - - -int uv_get_process_title(char* buffer, size_t size) { - size_t len; - - if (buffer == NULL || size == 0) - return UV_EINVAL; - - uv_once(&process_title_mutex_once, init_process_title_mutex_once); - uv_mutex_lock(&process_title_mutex); - - if (process_title != NULL) { - len = strlen(process_title) + 1; - - if (size < len) { - uv_mutex_unlock(&process_title_mutex); - return UV_ENOBUFS; - } - - memcpy(buffer, process_title, len); - } else { - len = 0; - } - - uv_mutex_unlock(&process_title_mutex); - - buffer[len] = '\0'; - - return 0; -} diff --git a/libuv/src/unix/core.c b/libuv/src/unix/core.c deleted file mode 100644 index 71e9c52..0000000 --- a/libuv/src/unix/core.c +++ /dev/null @@ -1,1623 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include /* NULL */ -#include /* printf */ -#include -#include /* strerror */ -#include -#include -#include -#include -#include -#include /* O_CLOEXEC */ -#include -#include -#include -#include -#include -#include /* INT_MAX, PATH_MAX, IOV_MAX */ -#include /* writev */ -#include /* getrusage */ -#include -#include -#include - -#ifdef __sun -# include -# include -# include -#endif - -#if defined(__APPLE__) -# include -# endif /* defined(__APPLE__) */ - - -#if defined(__APPLE__) && !TARGET_OS_IPHONE -# include -# include /* _NSGetExecutablePath */ -# define environ (*_NSGetEnviron()) -#else /* defined(__APPLE__) && !TARGET_OS_IPHONE */ -extern char** environ; -#endif /* !(defined(__APPLE__) && !TARGET_OS_IPHONE) */ - - -#if defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__FreeBSD_kernel__) || \ - defined(__NetBSD__) || \ - defined(__OpenBSD__) -# include -# include -# include -# if defined(__FreeBSD__) -# define uv__accept4 accept4 -# endif -# if defined(__NetBSD__) -# define uv__accept4(a, b, c, d) paccept((a), (b), (c), NULL, (d)) -# endif -#endif - -#if defined(__MVS__) -#include -#endif - -#if defined(__linux__) -# include -# define uv__accept4 accept4 -#endif - -#if defined(__linux__) && defined(__SANITIZE_THREAD__) && defined(__clang__) -# include -#endif - -static int uv__run_pending(uv_loop_t* loop); - -/* Verify that uv_buf_t is ABI-compatible with struct iovec. */ -STATIC_ASSERT(sizeof(uv_buf_t) == sizeof(struct iovec)); -STATIC_ASSERT(sizeof(&((uv_buf_t*) 0)->base) == - sizeof(((struct iovec*) 0)->iov_base)); -STATIC_ASSERT(sizeof(&((uv_buf_t*) 0)->len) == - sizeof(((struct iovec*) 0)->iov_len)); -STATIC_ASSERT(offsetof(uv_buf_t, base) == offsetof(struct iovec, iov_base)); -STATIC_ASSERT(offsetof(uv_buf_t, len) == offsetof(struct iovec, iov_len)); - - -uint64_t uv_hrtime(void) { - return uv__hrtime(UV_CLOCK_PRECISE); -} - - -void uv_close(uv_handle_t* handle, uv_close_cb close_cb) { - assert(!uv__is_closing(handle)); - - handle->flags |= UV_HANDLE_CLOSING; - handle->close_cb = close_cb; - - switch (handle->type) { - case UV_NAMED_PIPE: - uv__pipe_close((uv_pipe_t*)handle); - break; - - case UV_TTY: - uv__stream_close((uv_stream_t*)handle); - break; - - case UV_TCP: - uv__tcp_close((uv_tcp_t*)handle); - break; - - case UV_UDP: - uv__udp_close((uv_udp_t*)handle); - break; - - case UV_PREPARE: - uv__prepare_close((uv_prepare_t*)handle); - break; - - case UV_CHECK: - uv__check_close((uv_check_t*)handle); - break; - - case UV_IDLE: - uv__idle_close((uv_idle_t*)handle); - break; - - case UV_ASYNC: - uv__async_close((uv_async_t*)handle); - break; - - case UV_TIMER: - uv__timer_close((uv_timer_t*)handle); - break; - - case UV_PROCESS: - uv__process_close((uv_process_t*)handle); - break; - - case UV_FS_EVENT: - uv__fs_event_close((uv_fs_event_t*)handle); - break; - - case UV_POLL: - uv__poll_close((uv_poll_t*)handle); - break; - - case UV_FS_POLL: - uv__fs_poll_close((uv_fs_poll_t*)handle); - /* Poll handles use file system requests, and one of them may still be - * running. The poll code will call uv__make_close_pending() for us. */ - return; - - case UV_SIGNAL: - uv__signal_close((uv_signal_t*) handle); - break; - - default: - assert(0); - } - - uv__make_close_pending(handle); -} - -int uv__socket_sockopt(uv_handle_t* handle, int optname, int* value) { - int r; - int fd; - socklen_t len; - - if (handle == NULL || value == NULL) - return UV_EINVAL; - - if (handle->type == UV_TCP || handle->type == UV_NAMED_PIPE) - fd = uv__stream_fd((uv_stream_t*) handle); - else if (handle->type == UV_UDP) - fd = ((uv_udp_t *) handle)->io_watcher.fd; - else - return UV_ENOTSUP; - - len = sizeof(*value); - - if (*value == 0) - r = getsockopt(fd, SOL_SOCKET, optname, value, &len); - else - r = setsockopt(fd, SOL_SOCKET, optname, (const void*) value, len); - - if (r < 0) - return UV__ERR(errno); - - return 0; -} - -void uv__make_close_pending(uv_handle_t* handle) { - assert(handle->flags & UV_HANDLE_CLOSING); - assert(!(handle->flags & UV_HANDLE_CLOSED)); - handle->next_closing = handle->loop->closing_handles; - handle->loop->closing_handles = handle; -} - -int uv__getiovmax(void) { -#if defined(IOV_MAX) - return IOV_MAX; -#elif defined(_SC_IOV_MAX) - static int iovmax_cached = -1; - int iovmax; - - iovmax = uv__load_relaxed(&iovmax_cached); - if (iovmax != -1) - return iovmax; - - /* On some embedded devices (arm-linux-uclibc based ip camera), - * sysconf(_SC_IOV_MAX) can not get the correct value. The return - * value is -1 and the errno is EINPROGRESS. Degrade the value to 1. - */ - iovmax = sysconf(_SC_IOV_MAX); - if (iovmax == -1) - iovmax = 1; - - uv__store_relaxed(&iovmax_cached, iovmax); - - return iovmax; -#else - return 1024; -#endif -} - - -static void uv__finish_close(uv_handle_t* handle) { - uv_signal_t* sh; - - /* Note: while the handle is in the UV_HANDLE_CLOSING state now, it's still - * possible for it to be active in the sense that uv__is_active() returns - * true. - * - * A good example is when the user calls uv_shutdown(), immediately followed - * by uv_close(). The handle is considered active at this point because the - * completion of the shutdown req is still pending. - */ - assert(handle->flags & UV_HANDLE_CLOSING); - assert(!(handle->flags & UV_HANDLE_CLOSED)); - handle->flags |= UV_HANDLE_CLOSED; - - switch (handle->type) { - case UV_PREPARE: - case UV_CHECK: - case UV_IDLE: - case UV_ASYNC: - case UV_TIMER: - case UV_PROCESS: - case UV_FS_EVENT: - case UV_FS_POLL: - case UV_POLL: - break; - - case UV_SIGNAL: - /* If there are any caught signals "trapped" in the signal pipe, - * we can't call the close callback yet. Reinserting the handle - * into the closing queue makes the event loop spin but that's - * okay because we only need to deliver the pending events. - */ - sh = (uv_signal_t*) handle; - if (sh->caught_signals > sh->dispatched_signals) { - handle->flags ^= UV_HANDLE_CLOSED; - uv__make_close_pending(handle); /* Back into the queue. */ - return; - } - break; - - case UV_NAMED_PIPE: - case UV_TCP: - case UV_TTY: - uv__stream_destroy((uv_stream_t*)handle); - break; - - case UV_UDP: - uv__udp_finish_close((uv_udp_t*)handle); - break; - - default: - assert(0); - break; - } - - uv__handle_unref(handle); - QUEUE_REMOVE(&handle->handle_queue); - - if (handle->close_cb) { - handle->close_cb(handle); - } -} - - -static void uv__run_closing_handles(uv_loop_t* loop) { - uv_handle_t* p; - uv_handle_t* q; - - p = loop->closing_handles; - loop->closing_handles = NULL; - - while (p) { - q = p->next_closing; - uv__finish_close(p); - p = q; - } -} - - -int uv_is_closing(const uv_handle_t* handle) { - return uv__is_closing(handle); -} - - -int uv_backend_fd(const uv_loop_t* loop) { - return loop->backend_fd; -} - - -int uv_backend_timeout(const uv_loop_t* loop) { - if (loop->stop_flag != 0) - return 0; - - if (!uv__has_active_handles(loop) && !uv__has_active_reqs(loop)) - return 0; - - if (!QUEUE_EMPTY(&loop->idle_handles)) - return 0; - - if (!QUEUE_EMPTY(&loop->pending_queue)) - return 0; - - if (loop->closing_handles) - return 0; - - return uv__next_timeout(loop); -} - - -static int uv__loop_alive(const uv_loop_t* loop) { - return uv__has_active_handles(loop) || - uv__has_active_reqs(loop) || - loop->closing_handles != NULL; -} - - -int uv_loop_alive(const uv_loop_t* loop) { - return uv__loop_alive(loop); -} - - -int uv_run(uv_loop_t* loop, uv_run_mode mode) { - int timeout; - int r; - int ran_pending; - - r = uv__loop_alive(loop); - if (!r) - uv__update_time(loop); - - while (r != 0 && loop->stop_flag == 0) { - uv__update_time(loop); - uv__run_timers(loop); - ran_pending = uv__run_pending(loop); - uv__run_idle(loop); - uv__run_prepare(loop); - - timeout = 0; - if ((mode == UV_RUN_ONCE && !ran_pending) || mode == UV_RUN_DEFAULT) - timeout = uv_backend_timeout(loop); - - uv__io_poll(loop, timeout); - - /* Run one final update on the provider_idle_time in case uv__io_poll - * returned because the timeout expired, but no events were received. This - * call will be ignored if the provider_entry_time was either never set (if - * the timeout == 0) or was already updated b/c an event was received. - */ - uv__metrics_update_idle_time(loop); - - uv__run_check(loop); - uv__run_closing_handles(loop); - - if (mode == UV_RUN_ONCE) { - /* UV_RUN_ONCE implies forward progress: at least one callback must have - * been invoked when it returns. uv__io_poll() can return without doing - * I/O (meaning: no callbacks) when its timeout expires - which means we - * have pending timers that satisfy the forward progress constraint. - * - * UV_RUN_NOWAIT makes no guarantees about progress so it's omitted from - * the check. - */ - uv__update_time(loop); - uv__run_timers(loop); - } - - r = uv__loop_alive(loop); - if (mode == UV_RUN_ONCE || mode == UV_RUN_NOWAIT) - break; - } - - /* The if statement lets gcc compile it to a conditional store. Avoids - * dirtying a cache line. - */ - if (loop->stop_flag != 0) - loop->stop_flag = 0; - - return r; -} - - -void uv_update_time(uv_loop_t* loop) { - uv__update_time(loop); -} - - -int uv_is_active(const uv_handle_t* handle) { - return uv__is_active(handle); -} - - -/* Open a socket in non-blocking close-on-exec mode, atomically if possible. */ -int uv__socket(int domain, int type, int protocol) { - int sockfd; - int err; - -#if defined(SOCK_NONBLOCK) && defined(SOCK_CLOEXEC) - sockfd = socket(domain, type | SOCK_NONBLOCK | SOCK_CLOEXEC, protocol); - if (sockfd != -1) - return sockfd; - - if (errno != EINVAL) - return UV__ERR(errno); -#endif - - sockfd = socket(domain, type, protocol); - if (sockfd == -1) - return UV__ERR(errno); - - err = uv__nonblock(sockfd, 1); - if (err == 0) - err = uv__cloexec(sockfd, 1); - - if (err) { - uv__close(sockfd); - return err; - } - -#if defined(SO_NOSIGPIPE) - { - int on = 1; - setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, &on, sizeof(on)); - } -#endif - - return sockfd; -} - -/* get a file pointer to a file in read-only and close-on-exec mode */ -FILE* uv__open_file(const char* path) { - int fd; - FILE* fp; - - fd = uv__open_cloexec(path, O_RDONLY); - if (fd < 0) - return NULL; - - fp = fdopen(fd, "r"); - if (fp == NULL) - uv__close(fd); - - return fp; -} - - -int uv__accept(int sockfd) { - int peerfd; - int err; - - (void) &err; - assert(sockfd >= 0); - - do -#ifdef uv__accept4 - peerfd = uv__accept4(sockfd, NULL, NULL, SOCK_NONBLOCK|SOCK_CLOEXEC); -#else - peerfd = accept(sockfd, NULL, NULL); -#endif - while (peerfd == -1 && errno == EINTR); - - if (peerfd == -1) - return UV__ERR(errno); - -#ifndef uv__accept4 - err = uv__cloexec(peerfd, 1); - if (err == 0) - err = uv__nonblock(peerfd, 1); - - if (err != 0) { - uv__close(peerfd); - return err; - } -#endif - - return peerfd; -} - - -/* close() on macos has the "interesting" quirk that it fails with EINTR - * without closing the file descriptor when a thread is in the cancel state. - * That's why libuv calls close$NOCANCEL() instead. - * - * glibc on linux has a similar issue: close() is a cancellation point and - * will unwind the thread when it's in the cancel state. Work around that - * by making the system call directly. Musl libc is unaffected. - */ -int uv__close_nocancel(int fd) { -#if defined(__APPLE__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdollar-in-identifier-extension" -#if defined(__LP64__) || TARGET_OS_IPHONE - extern int close$NOCANCEL(int); - return close$NOCANCEL(fd); -#else - extern int close$NOCANCEL$UNIX2003(int); - return close$NOCANCEL$UNIX2003(fd); -#endif -#pragma GCC diagnostic pop -#elif defined(__linux__) && defined(__SANITIZE_THREAD__) && defined(__clang__) - long rc; - __sanitizer_syscall_pre_close(fd); - rc = syscall(SYS_close, fd); - __sanitizer_syscall_post_close(rc, fd); - return rc; -#elif defined(__linux__) && !defined(__SANITIZE_THREAD__) - return syscall(SYS_close, fd); -#else - return close(fd); -#endif -} - - -int uv__close_nocheckstdio(int fd) { - int saved_errno; - int rc; - - assert(fd > -1); /* Catch uninitialized io_watcher.fd bugs. */ - - saved_errno = errno; - rc = uv__close_nocancel(fd); - if (rc == -1) { - rc = UV__ERR(errno); - if (rc == UV_EINTR || rc == UV__ERR(EINPROGRESS)) - rc = 0; /* The close is in progress, not an error. */ - errno = saved_errno; - } - - return rc; -} - - -int uv__close(int fd) { - assert(fd > STDERR_FILENO); /* Catch stdio close bugs. */ -#if defined(__MVS__) - SAVE_ERRNO(epoll_file_close(fd)); -#endif - return uv__close_nocheckstdio(fd); -} - -#if UV__NONBLOCK_IS_IOCTL -int uv__nonblock_ioctl(int fd, int set) { - int r; - - do - r = ioctl(fd, FIONBIO, &set); - while (r == -1 && errno == EINTR); - - if (r) - return UV__ERR(errno); - - return 0; -} - - -int uv__cloexec_ioctl(int fd, int set) { - int r; - - do - r = ioctl(fd, set ? FIOCLEX : FIONCLEX); - while (r == -1 && errno == EINTR); - - if (r) - return UV__ERR(errno); - - return 0; -} -#endif - - -int uv__nonblock_fcntl(int fd, int set) { - int flags; - int r; - - do - r = fcntl(fd, F_GETFL); - while (r == -1 && errno == EINTR); - - if (r == -1) - return UV__ERR(errno); - - /* Bail out now if already set/clear. */ - if (!!(r & O_NONBLOCK) == !!set) - return 0; - - if (set) - flags = r | O_NONBLOCK; - else - flags = r & ~O_NONBLOCK; - - do - r = fcntl(fd, F_SETFL, flags); - while (r == -1 && errno == EINTR); - - if (r) - return UV__ERR(errno); - - return 0; -} - - -int uv__cloexec_fcntl(int fd, int set) { - int flags; - int r; - - do - r = fcntl(fd, F_GETFD); - while (r == -1 && errno == EINTR); - - if (r == -1) - return UV__ERR(errno); - - /* Bail out now if already set/clear. */ - if (!!(r & FD_CLOEXEC) == !!set) - return 0; - - if (set) - flags = r | FD_CLOEXEC; - else - flags = r & ~FD_CLOEXEC; - - do - r = fcntl(fd, F_SETFD, flags); - while (r == -1 && errno == EINTR); - - if (r) - return UV__ERR(errno); - - return 0; -} - - -ssize_t uv__recvmsg(int fd, struct msghdr* msg, int flags) { - struct cmsghdr* cmsg; - ssize_t rc; - int* pfd; - int* end; -#if defined(__linux__) - static int no_msg_cmsg_cloexec; - if (0 == uv__load_relaxed(&no_msg_cmsg_cloexec)) { - rc = recvmsg(fd, msg, flags | 0x40000000); /* MSG_CMSG_CLOEXEC */ - if (rc != -1) - return rc; - if (errno != EINVAL) - return UV__ERR(errno); - rc = recvmsg(fd, msg, flags); - if (rc == -1) - return UV__ERR(errno); - uv__store_relaxed(&no_msg_cmsg_cloexec, 1); - } else { - rc = recvmsg(fd, msg, flags); - } -#else - rc = recvmsg(fd, msg, flags); -#endif - if (rc == -1) - return UV__ERR(errno); - if (msg->msg_controllen == 0) - return rc; - for (cmsg = CMSG_FIRSTHDR(msg); cmsg != NULL; cmsg = CMSG_NXTHDR(msg, cmsg)) - if (cmsg->cmsg_type == SCM_RIGHTS) - for (pfd = (int*) CMSG_DATA(cmsg), - end = (int*) ((char*) cmsg + cmsg->cmsg_len); - pfd < end; - pfd += 1) - uv__cloexec(*pfd, 1); - return rc; -} - - -int uv_cwd(char* buffer, size_t* size) { - char scratch[1 + UV__PATH_MAX]; - - if (buffer == NULL || size == NULL) - return UV_EINVAL; - - /* Try to read directly into the user's buffer first... */ - if (getcwd(buffer, *size) != NULL) - goto fixup; - - if (errno != ERANGE) - return UV__ERR(errno); - - /* ...or into scratch space if the user's buffer is too small - * so we can report how much space to provide on the next try. - */ - if (getcwd(scratch, sizeof(scratch)) == NULL) - return UV__ERR(errno); - - buffer = scratch; - -fixup: - - *size = strlen(buffer); - - if (*size > 1 && buffer[*size - 1] == '/') { - *size -= 1; - buffer[*size] = '\0'; - } - - if (buffer == scratch) { - *size += 1; - return UV_ENOBUFS; - } - - return 0; -} - - -int uv_chdir(const char* dir) { - if (chdir(dir)) - return UV__ERR(errno); - - return 0; -} - - -void uv_disable_stdio_inheritance(void) { - int fd; - - /* Set the CLOEXEC flag on all open descriptors. Unconditionally try the - * first 16 file descriptors. After that, bail out after the first error. - */ - for (fd = 0; ; fd++) - if (uv__cloexec(fd, 1) && fd > 15) - break; -} - - -int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd) { - int fd_out; - - switch (handle->type) { - case UV_TCP: - case UV_NAMED_PIPE: - case UV_TTY: - fd_out = uv__stream_fd((uv_stream_t*) handle); - break; - - case UV_UDP: - fd_out = ((uv_udp_t *) handle)->io_watcher.fd; - break; - - case UV_POLL: - fd_out = ((uv_poll_t *) handle)->io_watcher.fd; - break; - - default: - return UV_EINVAL; - } - - if (uv__is_closing(handle) || fd_out == -1) - return UV_EBADF; - - *fd = fd_out; - return 0; -} - - -static int uv__run_pending(uv_loop_t* loop) { - QUEUE* q; - QUEUE pq; - uv__io_t* w; - - if (QUEUE_EMPTY(&loop->pending_queue)) - return 0; - - QUEUE_MOVE(&loop->pending_queue, &pq); - - while (!QUEUE_EMPTY(&pq)) { - q = QUEUE_HEAD(&pq); - QUEUE_REMOVE(q); - QUEUE_INIT(q); - w = QUEUE_DATA(q, uv__io_t, pending_queue); - w->cb(loop, w, POLLOUT); - } - - return 1; -} - - -static unsigned int next_power_of_two(unsigned int val) { - val -= 1; - val |= val >> 1; - val |= val >> 2; - val |= val >> 4; - val |= val >> 8; - val |= val >> 16; - val += 1; - return val; -} - -static void maybe_resize(uv_loop_t* loop, unsigned int len) { - uv__io_t** watchers; - void* fake_watcher_list; - void* fake_watcher_count; - unsigned int nwatchers; - unsigned int i; - - if (len <= loop->nwatchers) - return; - - /* Preserve fake watcher list and count at the end of the watchers */ - if (loop->watchers != NULL) { - fake_watcher_list = loop->watchers[loop->nwatchers]; - fake_watcher_count = loop->watchers[loop->nwatchers + 1]; - } else { - fake_watcher_list = NULL; - fake_watcher_count = NULL; - } - - nwatchers = next_power_of_two(len + 2) - 2; - watchers = uv__reallocf(loop->watchers, - (nwatchers + 2) * sizeof(loop->watchers[0])); - - if (watchers == NULL) - abort(); - for (i = loop->nwatchers; i < nwatchers; i++) - watchers[i] = NULL; - watchers[nwatchers] = fake_watcher_list; - watchers[nwatchers + 1] = fake_watcher_count; - - loop->watchers = watchers; - loop->nwatchers = nwatchers; -} - - -void uv__io_init(uv__io_t* w, uv__io_cb cb, int fd) { - assert(cb != NULL); - assert(fd >= -1); - QUEUE_INIT(&w->pending_queue); - QUEUE_INIT(&w->watcher_queue); - w->cb = cb; - w->fd = fd; - w->events = 0; - w->pevents = 0; - -#if defined(UV_HAVE_KQUEUE) - w->rcount = 0; - w->wcount = 0; -#endif /* defined(UV_HAVE_KQUEUE) */ -} - - -void uv__io_start(uv_loop_t* loop, uv__io_t* w, unsigned int events) { - assert(0 == (events & ~(POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI))); - assert(0 != events); - assert(w->fd >= 0); - assert(w->fd < INT_MAX); - - w->pevents |= events; - maybe_resize(loop, w->fd + 1); - -#if !defined(__sun) - /* The event ports backend needs to rearm all file descriptors on each and - * every tick of the event loop but the other backends allow us to - * short-circuit here if the event mask is unchanged. - */ - if (w->events == w->pevents) - return; -#endif - - if (QUEUE_EMPTY(&w->watcher_queue)) - QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue); - - if (loop->watchers[w->fd] == NULL) { - loop->watchers[w->fd] = w; - loop->nfds++; - } -} - - -void uv__io_stop(uv_loop_t* loop, uv__io_t* w, unsigned int events) { - assert(0 == (events & ~(POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI))); - assert(0 != events); - - if (w->fd == -1) - return; - - assert(w->fd >= 0); - - /* Happens when uv__io_stop() is called on a handle that was never started. */ - if ((unsigned) w->fd >= loop->nwatchers) - return; - - w->pevents &= ~events; - - if (w->pevents == 0) { - QUEUE_REMOVE(&w->watcher_queue); - QUEUE_INIT(&w->watcher_queue); - w->events = 0; - - if (w == loop->watchers[w->fd]) { - assert(loop->nfds > 0); - loop->watchers[w->fd] = NULL; - loop->nfds--; - } - } - else if (QUEUE_EMPTY(&w->watcher_queue)) - QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue); -} - - -void uv__io_close(uv_loop_t* loop, uv__io_t* w) { - uv__io_stop(loop, w, POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI); - QUEUE_REMOVE(&w->pending_queue); - - /* Remove stale events for this file descriptor */ - if (w->fd != -1) - uv__platform_invalidate_fd(loop, w->fd); -} - - -void uv__io_feed(uv_loop_t* loop, uv__io_t* w) { - if (QUEUE_EMPTY(&w->pending_queue)) - QUEUE_INSERT_TAIL(&loop->pending_queue, &w->pending_queue); -} - - -int uv__io_active(const uv__io_t* w, unsigned int events) { - assert(0 == (events & ~(POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI))); - assert(0 != events); - return 0 != (w->pevents & events); -} - - -int uv__fd_exists(uv_loop_t* loop, int fd) { - return (unsigned) fd < loop->nwatchers && loop->watchers[fd] != NULL; -} - - -int uv_getrusage(uv_rusage_t* rusage) { - struct rusage usage; - - if (getrusage(RUSAGE_SELF, &usage)) - return UV__ERR(errno); - - rusage->ru_utime.tv_sec = usage.ru_utime.tv_sec; - rusage->ru_utime.tv_usec = usage.ru_utime.tv_usec; - - rusage->ru_stime.tv_sec = usage.ru_stime.tv_sec; - rusage->ru_stime.tv_usec = usage.ru_stime.tv_usec; - -#if !defined(__MVS__) && !defined(__HAIKU__) - rusage->ru_maxrss = usage.ru_maxrss; - rusage->ru_ixrss = usage.ru_ixrss; - rusage->ru_idrss = usage.ru_idrss; - rusage->ru_isrss = usage.ru_isrss; - rusage->ru_minflt = usage.ru_minflt; - rusage->ru_majflt = usage.ru_majflt; - rusage->ru_nswap = usage.ru_nswap; - rusage->ru_inblock = usage.ru_inblock; - rusage->ru_oublock = usage.ru_oublock; - rusage->ru_msgsnd = usage.ru_msgsnd; - rusage->ru_msgrcv = usage.ru_msgrcv; - rusage->ru_nsignals = usage.ru_nsignals; - rusage->ru_nvcsw = usage.ru_nvcsw; - rusage->ru_nivcsw = usage.ru_nivcsw; -#endif - - return 0; -} - - -int uv__open_cloexec(const char* path, int flags) { -#if defined(O_CLOEXEC) - int fd; - - fd = open(path, flags | O_CLOEXEC); - if (fd == -1) - return UV__ERR(errno); - - return fd; -#else /* O_CLOEXEC */ - int err; - int fd; - - fd = open(path, flags); - if (fd == -1) - return UV__ERR(errno); - - err = uv__cloexec(fd, 1); - if (err) { - uv__close(fd); - return err; - } - - return fd; -#endif /* O_CLOEXEC */ -} - - -int uv__dup2_cloexec(int oldfd, int newfd) { -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__linux__) - int r; - - r = dup3(oldfd, newfd, O_CLOEXEC); - if (r == -1) - return UV__ERR(errno); - - return r; -#else - int err; - int r; - - r = dup2(oldfd, newfd); /* Never retry. */ - if (r == -1) - return UV__ERR(errno); - - err = uv__cloexec(newfd, 1); - if (err != 0) { - uv__close(newfd); - return err; - } - - return r; -#endif -} - - -int uv_os_homedir(char* buffer, size_t* size) { - uv_passwd_t pwd; - size_t len; - int r; - - /* Check if the HOME environment variable is set first. The task of - performing input validation on buffer and size is taken care of by - uv_os_getenv(). */ - r = uv_os_getenv("HOME", buffer, size); - - if (r != UV_ENOENT) - return r; - - /* HOME is not set, so call uv__getpwuid_r() */ - r = uv__getpwuid_r(&pwd); - - if (r != 0) { - return r; - } - - len = strlen(pwd.homedir); - - if (len >= *size) { - *size = len + 1; - uv_os_free_passwd(&pwd); - return UV_ENOBUFS; - } - - memcpy(buffer, pwd.homedir, len + 1); - *size = len; - uv_os_free_passwd(&pwd); - - return 0; -} - - -int uv_os_tmpdir(char* buffer, size_t* size) { - const char* buf; - size_t len; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - -#define CHECK_ENV_VAR(name) \ - do { \ - buf = getenv(name); \ - if (buf != NULL) \ - goto return_buffer; \ - } \ - while (0) - - /* Check the TMPDIR, TMP, TEMP, and TEMPDIR environment variables in order */ - CHECK_ENV_VAR("TMPDIR"); - CHECK_ENV_VAR("TMP"); - CHECK_ENV_VAR("TEMP"); - CHECK_ENV_VAR("TEMPDIR"); - -#undef CHECK_ENV_VAR - - /* No temp environment variables defined */ - #if defined(__ANDROID__) - buf = "/data/local/tmp"; - #else - buf = "/tmp"; - #endif - -return_buffer: - len = strlen(buf); - - if (len >= *size) { - *size = len + 1; - return UV_ENOBUFS; - } - - /* The returned directory should not have a trailing slash. */ - if (len > 1 && buf[len - 1] == '/') { - len--; - } - - memcpy(buffer, buf, len + 1); - buffer[len] = '\0'; - *size = len; - - return 0; -} - - -int uv__getpwuid_r(uv_passwd_t* pwd) { - struct passwd pw; - struct passwd* result; - char* buf; - uid_t uid; - size_t bufsize; - size_t name_size; - size_t homedir_size; - size_t shell_size; - long initsize; - int r; - - if (pwd == NULL) - return UV_EINVAL; - - initsize = sysconf(_SC_GETPW_R_SIZE_MAX); - - if (initsize <= 0) - bufsize = 4096; - else - bufsize = (size_t) initsize; - - uid = geteuid(); - buf = NULL; - - for (;;) { - uv__free(buf); - buf = uv__malloc(bufsize); - - if (buf == NULL) - return UV_ENOMEM; - - do - r = getpwuid_r(uid, &pw, buf, bufsize, &result); - while (r == EINTR); - - if (r != ERANGE) - break; - - bufsize *= 2; - } - - if (r != 0) { - uv__free(buf); - return UV__ERR(r); - } - - if (result == NULL) { - uv__free(buf); - return UV_ENOENT; - } - - /* Allocate memory for the username, shell, and home directory */ - name_size = strlen(pw.pw_name) + 1; - homedir_size = strlen(pw.pw_dir) + 1; - shell_size = strlen(pw.pw_shell) + 1; - pwd->username = uv__malloc(name_size + homedir_size + shell_size); - - if (pwd->username == NULL) { - uv__free(buf); - return UV_ENOMEM; - } - - /* Copy the username */ - memcpy(pwd->username, pw.pw_name, name_size); - - /* Copy the home directory */ - pwd->homedir = pwd->username + name_size; - memcpy(pwd->homedir, pw.pw_dir, homedir_size); - - /* Copy the shell */ - pwd->shell = pwd->homedir + homedir_size; - memcpy(pwd->shell, pw.pw_shell, shell_size); - - /* Copy the uid and gid */ - pwd->uid = pw.pw_uid; - pwd->gid = pw.pw_gid; - - uv__free(buf); - - return 0; -} - - -void uv_os_free_passwd(uv_passwd_t* pwd) { - if (pwd == NULL) - return; - - /* - The memory for name, shell, and homedir are allocated in a single - uv__malloc() call. The base of the pointer is stored in pwd->username, so - that is the field that needs to be freed. - */ - uv__free(pwd->username); - pwd->username = NULL; - pwd->shell = NULL; - pwd->homedir = NULL; -} - - -int uv_os_get_passwd(uv_passwd_t* pwd) { - return uv__getpwuid_r(pwd); -} - - -int uv_translate_sys_error(int sys_errno) { - /* If < 0 then it's already a libuv error. */ - return sys_errno <= 0 ? sys_errno : -sys_errno; -} - - -int uv_os_environ(uv_env_item_t** envitems, int* count) { - int i, j, cnt; - uv_env_item_t* envitem; - - *envitems = NULL; - *count = 0; - - for (i = 0; environ[i] != NULL; i++); - - *envitems = uv__calloc(i, sizeof(**envitems)); - - if (*envitems == NULL) - return UV_ENOMEM; - - for (j = 0, cnt = 0; j < i; j++) { - char* buf; - char* ptr; - - if (environ[j] == NULL) - break; - - buf = uv__strdup(environ[j]); - if (buf == NULL) - goto fail; - - ptr = strchr(buf, '='); - if (ptr == NULL) { - uv__free(buf); - continue; - } - - *ptr = '\0'; - - envitem = &(*envitems)[cnt]; - envitem->name = buf; - envitem->value = ptr + 1; - - cnt++; - } - - *count = cnt; - return 0; - -fail: - for (i = 0; i < cnt; i++) { - envitem = &(*envitems)[cnt]; - uv__free(envitem->name); - } - uv__free(*envitems); - - *envitems = NULL; - *count = 0; - return UV_ENOMEM; -} - - -int uv_os_getenv(const char* name, char* buffer, size_t* size) { - char* var; - size_t len; - - if (name == NULL || buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - var = getenv(name); - - if (var == NULL) - return UV_ENOENT; - - len = strlen(var); - - if (len >= *size) { - *size = len + 1; - return UV_ENOBUFS; - } - - memcpy(buffer, var, len + 1); - *size = len; - - return 0; -} - - -int uv_os_setenv(const char* name, const char* value) { - if (name == NULL || value == NULL) - return UV_EINVAL; - - if (setenv(name, value, 1) != 0) - return UV__ERR(errno); - - return 0; -} - - -int uv_os_unsetenv(const char* name) { - if (name == NULL) - return UV_EINVAL; - - if (unsetenv(name) != 0) - return UV__ERR(errno); - - return 0; -} - - -int uv_os_gethostname(char* buffer, size_t* size) { - /* - On some platforms, if the input buffer is not large enough, gethostname() - succeeds, but truncates the result. libuv can detect this and return ENOBUFS - instead by creating a large enough buffer and comparing the hostname length - to the size input. - */ - char buf[UV_MAXHOSTNAMESIZE]; - size_t len; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - if (gethostname(buf, sizeof(buf)) != 0) - return UV__ERR(errno); - - buf[sizeof(buf) - 1] = '\0'; /* Null terminate, just to be safe. */ - len = strlen(buf); - - if (len >= *size) { - *size = len + 1; - return UV_ENOBUFS; - } - - memcpy(buffer, buf, len + 1); - *size = len; - return 0; -} - - -uv_os_fd_t uv_get_osfhandle(int fd) { - return fd; -} - -int uv_open_osfhandle(uv_os_fd_t os_fd) { - return os_fd; -} - -uv_pid_t uv_os_getpid(void) { - return getpid(); -} - - -uv_pid_t uv_os_getppid(void) { - return getppid(); -} - - -int uv_os_getpriority(uv_pid_t pid, int* priority) { - int r; - - if (priority == NULL) - return UV_EINVAL; - - errno = 0; - r = getpriority(PRIO_PROCESS, (int) pid); - - if (r == -1 && errno != 0) - return UV__ERR(errno); - - *priority = r; - return 0; -} - - -int uv_os_setpriority(uv_pid_t pid, int priority) { - if (priority < UV_PRIORITY_HIGHEST || priority > UV_PRIORITY_LOW) - return UV_EINVAL; - - if (setpriority(PRIO_PROCESS, (int) pid, priority) != 0) - return UV__ERR(errno); - - return 0; -} - - -int uv_os_uname(uv_utsname_t* buffer) { - struct utsname buf; - int r; - - if (buffer == NULL) - return UV_EINVAL; - - if (uname(&buf) == -1) { - r = UV__ERR(errno); - goto error; - } - - r = uv__strscpy(buffer->sysname, buf.sysname, sizeof(buffer->sysname)); - if (r == UV_E2BIG) - goto error; - -#ifdef _AIX - r = snprintf(buffer->release, - sizeof(buffer->release), - "%s.%s", - buf.version, - buf.release); - if (r >= sizeof(buffer->release)) { - r = UV_E2BIG; - goto error; - } -#else - r = uv__strscpy(buffer->release, buf.release, sizeof(buffer->release)); - if (r == UV_E2BIG) - goto error; -#endif - - r = uv__strscpy(buffer->version, buf.version, sizeof(buffer->version)); - if (r == UV_E2BIG) - goto error; - -#if defined(_AIX) || defined(__PASE__) - r = uv__strscpy(buffer->machine, "ppc64", sizeof(buffer->machine)); -#else - r = uv__strscpy(buffer->machine, buf.machine, sizeof(buffer->machine)); -#endif - - if (r == UV_E2BIG) - goto error; - - return 0; - -error: - buffer->sysname[0] = '\0'; - buffer->release[0] = '\0'; - buffer->version[0] = '\0'; - buffer->machine[0] = '\0'; - return r; -} - -int uv__getsockpeername(const uv_handle_t* handle, - uv__peersockfunc func, - struct sockaddr* name, - int* namelen) { - socklen_t socklen; - uv_os_fd_t fd; - int r; - - r = uv_fileno(handle, &fd); - if (r < 0) - return r; - - /* sizeof(socklen_t) != sizeof(int) on some systems. */ - socklen = (socklen_t) *namelen; - - if (func(fd, name, &socklen)) - return UV__ERR(errno); - - *namelen = (int) socklen; - return 0; -} - -int uv_gettimeofday(uv_timeval64_t* tv) { - struct timeval time; - - if (tv == NULL) - return UV_EINVAL; - - if (gettimeofday(&time, NULL) != 0) - return UV__ERR(errno); - - tv->tv_sec = (int64_t) time.tv_sec; - tv->tv_usec = (int32_t) time.tv_usec; - return 0; -} - -void uv_sleep(unsigned int msec) { - struct timespec timeout; - int rc; - - timeout.tv_sec = msec / 1000; - timeout.tv_nsec = (msec % 1000) * 1000 * 1000; - - do - rc = nanosleep(&timeout, &timeout); - while (rc == -1 && errno == EINTR); - - assert(rc == 0); -} - -int uv__search_path(const char* prog, char* buf, size_t* buflen) { - char abspath[UV__PATH_MAX]; - size_t abspath_size; - char trypath[UV__PATH_MAX]; - char* cloned_path; - char* path_env; - char* token; - - if (buf == NULL || buflen == NULL || *buflen == 0) - return UV_EINVAL; - - /* - * Possibilities for prog: - * i) an absolute path such as: /home/user/myprojects/nodejs/node - * ii) a relative path such as: ./node or ../myprojects/nodejs/node - * iii) a bare filename such as "node", after exporting PATH variable - * to its location. - */ - - /* Case i) and ii) absolute or relative paths */ - if (strchr(prog, '/') != NULL) { - if (realpath(prog, abspath) != abspath) - return UV__ERR(errno); - - abspath_size = strlen(abspath); - - *buflen -= 1; - if (*buflen > abspath_size) - *buflen = abspath_size; - - memcpy(buf, abspath, *buflen); - buf[*buflen] = '\0'; - - return 0; - } - - /* Case iii). Search PATH environment variable */ - cloned_path = NULL; - token = NULL; - path_env = getenv("PATH"); - - if (path_env == NULL) - return UV_EINVAL; - - cloned_path = uv__strdup(path_env); - if (cloned_path == NULL) - return UV_ENOMEM; - - token = strtok(cloned_path, ":"); - while (token != NULL) { - snprintf(trypath, sizeof(trypath) - 1, "%s/%s", token, prog); - if (realpath(trypath, abspath) == abspath) { - /* Check the match is executable */ - if (access(abspath, X_OK) == 0) { - abspath_size = strlen(abspath); - - *buflen -= 1; - if (*buflen > abspath_size) - *buflen = abspath_size; - - memcpy(buf, abspath, *buflen); - buf[*buflen] = '\0'; - - uv__free(cloned_path); - return 0; - } - } - token = strtok(NULL, ":"); - } - uv__free(cloned_path); - - /* Out of tokens (path entries), and no match found */ - return UV_EINVAL; -} diff --git a/libuv/src/unix/cygwin.c b/libuv/src/unix/cygwin.c deleted file mode 100644 index 169958d..0000000 --- a/libuv/src/unix/cygwin.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include - -int uv_uptime(double* uptime) { - struct sysinfo info; - - if (sysinfo(&info) < 0) - return UV__ERR(errno); - - *uptime = info.uptime; - return 0; -} - -int uv_resident_set_memory(size_t* rss) { - /* FIXME: read /proc/meminfo? */ - *rss = 0; - return 0; -} - -int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { - /* FIXME: read /proc/stat? */ - *cpu_infos = NULL; - *count = 0; - return UV_ENOSYS; -} - -uint64_t uv_get_constrained_memory(void) { - return 0; /* Memory constraints are unknown. */ -} diff --git a/libuv/src/unix/darwin-proctitle.c b/libuv/src/unix/darwin-proctitle.c deleted file mode 100644 index 5288083..0000000 --- a/libuv/src/unix/darwin-proctitle.c +++ /dev/null @@ -1,192 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include - -#include - -#if !TARGET_OS_IPHONE -#include "darwin-stub.h" -#endif - - -static int uv__pthread_setname_np(const char* name) { - char namebuf[64]; /* MAXTHREADNAMESIZE */ - int err; - - strncpy(namebuf, name, sizeof(namebuf) - 1); - namebuf[sizeof(namebuf) - 1] = '\0'; - - err = pthread_setname_np(namebuf); - if (err) - return UV__ERR(err); - - return 0; -} - - -int uv__set_process_title(const char* title) { -#if TARGET_OS_IPHONE - return uv__pthread_setname_np(title); -#else - CFStringRef (*pCFStringCreateWithCString)(CFAllocatorRef, - const char*, - CFStringEncoding); - CFBundleRef (*pCFBundleGetBundleWithIdentifier)(CFStringRef); - void *(*pCFBundleGetDataPointerForName)(CFBundleRef, CFStringRef); - void *(*pCFBundleGetFunctionPointerForName)(CFBundleRef, CFStringRef); - CFTypeRef (*pLSGetCurrentApplicationASN)(void); - OSStatus (*pLSSetApplicationInformationItem)(int, - CFTypeRef, - CFStringRef, - CFStringRef, - CFDictionaryRef*); - void* application_services_handle; - void* core_foundation_handle; - CFBundleRef launch_services_bundle; - CFStringRef* display_name_key; - CFDictionaryRef (*pCFBundleGetInfoDictionary)(CFBundleRef); - CFBundleRef (*pCFBundleGetMainBundle)(void); - CFDictionaryRef (*pLSApplicationCheckIn)(int, CFDictionaryRef); - void (*pLSSetApplicationLaunchServicesServerConnectionStatus)(uint64_t, - void*); - CFTypeRef asn; - int err; - - err = UV_ENOENT; - application_services_handle = dlopen("/System/Library/Frameworks/" - "ApplicationServices.framework/" - "Versions/A/ApplicationServices", - RTLD_LAZY | RTLD_LOCAL); - core_foundation_handle = dlopen("/System/Library/Frameworks/" - "CoreFoundation.framework/" - "Versions/A/CoreFoundation", - RTLD_LAZY | RTLD_LOCAL); - - if (application_services_handle == NULL || core_foundation_handle == NULL) - goto out; - - *(void **)(&pCFStringCreateWithCString) = - dlsym(core_foundation_handle, "CFStringCreateWithCString"); - *(void **)(&pCFBundleGetBundleWithIdentifier) = - dlsym(core_foundation_handle, "CFBundleGetBundleWithIdentifier"); - *(void **)(&pCFBundleGetDataPointerForName) = - dlsym(core_foundation_handle, "CFBundleGetDataPointerForName"); - *(void **)(&pCFBundleGetFunctionPointerForName) = - dlsym(core_foundation_handle, "CFBundleGetFunctionPointerForName"); - - if (pCFStringCreateWithCString == NULL || - pCFBundleGetBundleWithIdentifier == NULL || - pCFBundleGetDataPointerForName == NULL || - pCFBundleGetFunctionPointerForName == NULL) { - goto out; - } - -#define S(s) pCFStringCreateWithCString(NULL, (s), kCFStringEncodingUTF8) - - launch_services_bundle = - pCFBundleGetBundleWithIdentifier(S("com.apple.LaunchServices")); - - if (launch_services_bundle == NULL) - goto out; - - *(void **)(&pLSGetCurrentApplicationASN) = - pCFBundleGetFunctionPointerForName(launch_services_bundle, - S("_LSGetCurrentApplicationASN")); - - if (pLSGetCurrentApplicationASN == NULL) - goto out; - - *(void **)(&pLSSetApplicationInformationItem) = - pCFBundleGetFunctionPointerForName(launch_services_bundle, - S("_LSSetApplicationInformationItem")); - - if (pLSSetApplicationInformationItem == NULL) - goto out; - - display_name_key = pCFBundleGetDataPointerForName(launch_services_bundle, - S("_kLSDisplayNameKey")); - - if (display_name_key == NULL || *display_name_key == NULL) - goto out; - - *(void **)(&pCFBundleGetInfoDictionary) = dlsym(core_foundation_handle, - "CFBundleGetInfoDictionary"); - *(void **)(&pCFBundleGetMainBundle) = dlsym(core_foundation_handle, - "CFBundleGetMainBundle"); - if (pCFBundleGetInfoDictionary == NULL || pCFBundleGetMainBundle == NULL) - goto out; - - *(void **)(&pLSApplicationCheckIn) = pCFBundleGetFunctionPointerForName( - launch_services_bundle, - S("_LSApplicationCheckIn")); - - if (pLSApplicationCheckIn == NULL) - goto out; - - *(void **)(&pLSSetApplicationLaunchServicesServerConnectionStatus) = - pCFBundleGetFunctionPointerForName( - launch_services_bundle, - S("_LSSetApplicationLaunchServicesServerConnectionStatus")); - - if (pLSSetApplicationLaunchServicesServerConnectionStatus == NULL) - goto out; - - pLSSetApplicationLaunchServicesServerConnectionStatus(0, NULL); - - /* Check into process manager?! */ - pLSApplicationCheckIn(-2, - pCFBundleGetInfoDictionary(pCFBundleGetMainBundle())); - - asn = pLSGetCurrentApplicationASN(); - - err = UV_EBUSY; - if (asn == NULL) - goto out; - - err = UV_EINVAL; - if (pLSSetApplicationInformationItem(-2, /* Magic value. */ - asn, - *display_name_key, - S(title), - NULL) != noErr) { - goto out; - } - - uv__pthread_setname_np(title); /* Don't care if it fails. */ - err = 0; - -out: - if (core_foundation_handle != NULL) - dlclose(core_foundation_handle); - - if (application_services_handle != NULL) - dlclose(application_services_handle); - - return err; -#endif /* !TARGET_OS_IPHONE */ -} diff --git a/libuv/src/unix/darwin-stub.h b/libuv/src/unix/darwin-stub.h deleted file mode 100644 index 433e3ef..0000000 --- a/libuv/src/unix/darwin-stub.h +++ /dev/null @@ -1,113 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_DARWIN_STUB_H_ -#define UV_DARWIN_STUB_H_ - -#include - -struct CFArrayCallBacks; -struct CFRunLoopSourceContext; -struct FSEventStreamContext; -struct CFRange; - -typedef double CFAbsoluteTime; -typedef double CFTimeInterval; -typedef int FSEventStreamEventFlags; -typedef int OSStatus; -typedef long CFIndex; -typedef struct CFArrayCallBacks CFArrayCallBacks; -typedef struct CFRunLoopSourceContext CFRunLoopSourceContext; -typedef struct FSEventStreamContext FSEventStreamContext; -typedef uint32_t FSEventStreamCreateFlags; -typedef uint64_t FSEventStreamEventId; -typedef unsigned CFStringEncoding; -typedef void* CFAllocatorRef; -typedef void* CFArrayRef; -typedef void* CFBundleRef; -typedef void* CFDataRef; -typedef void* CFDictionaryRef; -typedef void* CFMutableDictionaryRef; -typedef struct CFRange CFRange; -typedef void* CFRunLoopRef; -typedef void* CFRunLoopSourceRef; -typedef void* CFStringRef; -typedef void* CFTypeRef; -typedef void* FSEventStreamRef; - -typedef uint32_t IOOptionBits; -typedef unsigned int io_iterator_t; -typedef unsigned int io_object_t; -typedef unsigned int io_service_t; -typedef unsigned int io_registry_entry_t; - - -typedef void (*FSEventStreamCallback)(const FSEventStreamRef, - void*, - size_t, - void*, - const FSEventStreamEventFlags*, - const FSEventStreamEventId*); - -struct CFRunLoopSourceContext { - CFIndex version; - void* info; - void* pad[7]; - void (*perform)(void*); -}; - -struct FSEventStreamContext { - CFIndex version; - void* info; - void* pad[3]; -}; - -struct CFRange { - CFIndex location; - CFIndex length; -}; - -static const CFStringEncoding kCFStringEncodingUTF8 = 0x8000100; -static const OSStatus noErr = 0; - -static const FSEventStreamEventId kFSEventStreamEventIdSinceNow = -1; - -static const int kFSEventStreamCreateFlagNoDefer = 2; -static const int kFSEventStreamCreateFlagFileEvents = 16; - -static const int kFSEventStreamEventFlagEventIdsWrapped = 8; -static const int kFSEventStreamEventFlagHistoryDone = 16; -static const int kFSEventStreamEventFlagItemChangeOwner = 0x4000; -static const int kFSEventStreamEventFlagItemCreated = 0x100; -static const int kFSEventStreamEventFlagItemFinderInfoMod = 0x2000; -static const int kFSEventStreamEventFlagItemInodeMetaMod = 0x400; -static const int kFSEventStreamEventFlagItemIsDir = 0x20000; -static const int kFSEventStreamEventFlagItemModified = 0x1000; -static const int kFSEventStreamEventFlagItemRemoved = 0x200; -static const int kFSEventStreamEventFlagItemRenamed = 0x800; -static const int kFSEventStreamEventFlagItemXattrMod = 0x8000; -static const int kFSEventStreamEventFlagKernelDropped = 4; -static const int kFSEventStreamEventFlagMount = 64; -static const int kFSEventStreamEventFlagRootChanged = 32; -static const int kFSEventStreamEventFlagUnmount = 128; -static const int kFSEventStreamEventFlagUserDropped = 2; - -#endif /* UV_DARWIN_STUB_H_ */ diff --git a/libuv/src/unix/darwin.c b/libuv/src/unix/darwin.c deleted file mode 100644 index a7be0dd..0000000 --- a/libuv/src/unix/darwin.c +++ /dev/null @@ -1,375 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include - -#include -#include -#include -#include /* _NSGetExecutablePath */ -#include -#include -#include /* sysconf */ - -#include "darwin-stub.h" - -static uv_once_t once = UV_ONCE_INIT; -static uint64_t (*time_func)(void); -static mach_timebase_info_data_t timebase; - -typedef unsigned char UInt8; - -int uv__platform_loop_init(uv_loop_t* loop) { - loop->cf_state = NULL; - - if (uv__kqueue_init(loop)) - return UV__ERR(errno); - - return 0; -} - - -void uv__platform_loop_delete(uv_loop_t* loop) { - uv__fsevents_loop_delete(loop); -} - - -static void uv__hrtime_init_once(void) { - if (KERN_SUCCESS != mach_timebase_info(&timebase)) - abort(); - - time_func = (uint64_t (*)(void)) dlsym(RTLD_DEFAULT, "mach_continuous_time"); - if (time_func == NULL) - time_func = mach_absolute_time; -} - - -uint64_t uv__hrtime(uv_clocktype_t type) { - uv_once(&once, uv__hrtime_init_once); - return time_func() * timebase.numer / timebase.denom; -} - - -int uv_exepath(char* buffer, size_t* size) { - /* realpath(exepath) may be > PATH_MAX so double it to be on the safe side. */ - char abspath[PATH_MAX * 2 + 1]; - char exepath[PATH_MAX + 1]; - uint32_t exepath_size; - size_t abspath_size; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - exepath_size = sizeof(exepath); - if (_NSGetExecutablePath(exepath, &exepath_size)) - return UV_EIO; - - if (realpath(exepath, abspath) != abspath) - return UV__ERR(errno); - - abspath_size = strlen(abspath); - if (abspath_size == 0) - return UV_EIO; - - *size -= 1; - if (*size > abspath_size) - *size = abspath_size; - - memcpy(buffer, abspath, *size); - buffer[*size] = '\0'; - - return 0; -} - - -uint64_t uv_get_free_memory(void) { - vm_statistics_data_t info; - mach_msg_type_number_t count = sizeof(info) / sizeof(integer_t); - - if (host_statistics(mach_host_self(), HOST_VM_INFO, - (host_info_t)&info, &count) != KERN_SUCCESS) { - return UV_EINVAL; /* FIXME(bnoordhuis) Translate error. */ - } - - return (uint64_t) info.free_count * sysconf(_SC_PAGESIZE); -} - - -uint64_t uv_get_total_memory(void) { - uint64_t info; - int which[] = {CTL_HW, HW_MEMSIZE}; - size_t size = sizeof(info); - - if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) - return UV__ERR(errno); - - return (uint64_t) info; -} - - -uint64_t uv_get_constrained_memory(void) { - return 0; /* Memory constraints are unknown. */ -} - - -void uv_loadavg(double avg[3]) { - struct loadavg info; - size_t size = sizeof(info); - int which[] = {CTL_VM, VM_LOADAVG}; - - if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0) < 0) return; - - avg[0] = (double) info.ldavg[0] / info.fscale; - avg[1] = (double) info.ldavg[1] / info.fscale; - avg[2] = (double) info.ldavg[2] / info.fscale; -} - - -int uv_resident_set_memory(size_t* rss) { - mach_msg_type_number_t count; - task_basic_info_data_t info; - kern_return_t err; - - count = TASK_BASIC_INFO_COUNT; - err = task_info(mach_task_self(), - TASK_BASIC_INFO, - (task_info_t) &info, - &count); - (void) &err; - /* task_info(TASK_BASIC_INFO) cannot really fail. Anything other than - * KERN_SUCCESS implies a libuv bug. - */ - assert(err == KERN_SUCCESS); - *rss = info.resident_size; - - return 0; -} - - -int uv_uptime(double* uptime) { - time_t now; - struct timeval info; - size_t size = sizeof(info); - static int which[] = {CTL_KERN, KERN_BOOTTIME}; - - if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) - return UV__ERR(errno); - - now = time(NULL); - *uptime = now - info.tv_sec; - - return 0; -} - -static int uv__get_cpu_speed(uint64_t* speed) { - /* IOKit */ - void (*pIOObjectRelease)(io_object_t); - kern_return_t (*pIOMasterPort)(mach_port_t, mach_port_t*); - CFMutableDictionaryRef (*pIOServiceMatching)(const char*); - kern_return_t (*pIOServiceGetMatchingServices)(mach_port_t, - CFMutableDictionaryRef, - io_iterator_t*); - io_service_t (*pIOIteratorNext)(io_iterator_t); - CFTypeRef (*pIORegistryEntryCreateCFProperty)(io_registry_entry_t, - CFStringRef, - CFAllocatorRef, - IOOptionBits); - - /* CoreFoundation */ - CFStringRef (*pCFStringCreateWithCString)(CFAllocatorRef, - const char*, - CFStringEncoding); - CFStringEncoding (*pCFStringGetSystemEncoding)(void); - UInt8 *(*pCFDataGetBytePtr)(CFDataRef); - CFIndex (*pCFDataGetLength)(CFDataRef); - void (*pCFDataGetBytes)(CFDataRef, CFRange, UInt8*); - void (*pCFRelease)(CFTypeRef); - - void* core_foundation_handle; - void* iokit_handle; - int err; - - kern_return_t kr; - mach_port_t mach_port; - io_iterator_t it; - io_object_t service; - - mach_port = 0; - - err = UV_ENOENT; - core_foundation_handle = dlopen("/System/Library/Frameworks/" - "CoreFoundation.framework/" - "CoreFoundation", - RTLD_LAZY | RTLD_LOCAL); - iokit_handle = dlopen("/System/Library/Frameworks/IOKit.framework/" - "IOKit", - RTLD_LAZY | RTLD_LOCAL); - - if (core_foundation_handle == NULL || iokit_handle == NULL) - goto out; - -#define V(handle, symbol) \ - do { \ - *(void **)(&p ## symbol) = dlsym((handle), #symbol); \ - if (p ## symbol == NULL) \ - goto out; \ - } \ - while (0) - V(iokit_handle, IOMasterPort); - V(iokit_handle, IOServiceMatching); - V(iokit_handle, IOServiceGetMatchingServices); - V(iokit_handle, IOIteratorNext); - V(iokit_handle, IOObjectRelease); - V(iokit_handle, IORegistryEntryCreateCFProperty); - V(core_foundation_handle, CFStringCreateWithCString); - V(core_foundation_handle, CFStringGetSystemEncoding); - V(core_foundation_handle, CFDataGetBytePtr); - V(core_foundation_handle, CFDataGetLength); - V(core_foundation_handle, CFDataGetBytes); - V(core_foundation_handle, CFRelease); -#undef V - -#define S(s) pCFStringCreateWithCString(NULL, (s), kCFStringEncodingUTF8) - - kr = pIOMasterPort(MACH_PORT_NULL, &mach_port); - assert(kr == KERN_SUCCESS); - CFMutableDictionaryRef classes_to_match - = pIOServiceMatching("IOPlatformDevice"); - kr = pIOServiceGetMatchingServices(mach_port, classes_to_match, &it); - assert(kr == KERN_SUCCESS); - service = pIOIteratorNext(it); - - CFStringRef device_type_str = S("device_type"); - CFStringRef clock_frequency_str = S("clock-frequency"); - - while (service != 0) { - CFDataRef data; - data = pIORegistryEntryCreateCFProperty(service, - device_type_str, - NULL, - 0); - if (data) { - const UInt8* raw = pCFDataGetBytePtr(data); - if (strncmp((char*)raw, "cpu", 3) == 0 || - strncmp((char*)raw, "processor", 9) == 0) { - CFDataRef freq_ref; - freq_ref = pIORegistryEntryCreateCFProperty(service, - clock_frequency_str, - NULL, - 0); - if (freq_ref) { - uint32_t freq; - CFIndex len = pCFDataGetLength(freq_ref); - CFRange range; - range.location = 0; - range.length = len; - - pCFDataGetBytes(freq_ref, range, (UInt8*)&freq); - *speed = freq; - pCFRelease(freq_ref); - pCFRelease(data); - break; - } - } - pCFRelease(data); - } - - service = pIOIteratorNext(it); - } - - pIOObjectRelease(it); - - err = 0; - - if (device_type_str != NULL) - pCFRelease(device_type_str); - if (clock_frequency_str != NULL) - pCFRelease(clock_frequency_str); - -out: - if (core_foundation_handle != NULL) - dlclose(core_foundation_handle); - - if (iokit_handle != NULL) - dlclose(iokit_handle); - - mach_port_deallocate(mach_task_self(), mach_port); - - return err; -} - -int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { - unsigned int ticks = (unsigned int)sysconf(_SC_CLK_TCK), - multiplier = ((uint64_t)1000L / ticks); - char model[512]; - size_t size; - unsigned int i; - natural_t numcpus; - mach_msg_type_number_t msg_type; - processor_cpu_load_info_data_t *info; - uv_cpu_info_t* cpu_info; - uint64_t cpuspeed; - int err; - - size = sizeof(model); - if (sysctlbyname("machdep.cpu.brand_string", &model, &size, NULL, 0) && - sysctlbyname("hw.model", &model, &size, NULL, 0)) { - return UV__ERR(errno); - } - - err = uv__get_cpu_speed(&cpuspeed); - if (err < 0) - return err; - - if (host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &numcpus, - (processor_info_array_t*)&info, - &msg_type) != KERN_SUCCESS) { - return UV_EINVAL; /* FIXME(bnoordhuis) Translate error. */ - } - - *cpu_infos = uv__malloc(numcpus * sizeof(**cpu_infos)); - if (!(*cpu_infos)) { - vm_deallocate(mach_task_self(), (vm_address_t)info, msg_type); - return UV_ENOMEM; - } - - *count = numcpus; - - for (i = 0; i < numcpus; i++) { - cpu_info = &(*cpu_infos)[i]; - - cpu_info->cpu_times.user = (uint64_t)(info[i].cpu_ticks[0]) * multiplier; - cpu_info->cpu_times.nice = (uint64_t)(info[i].cpu_ticks[3]) * multiplier; - cpu_info->cpu_times.sys = (uint64_t)(info[i].cpu_ticks[1]) * multiplier; - cpu_info->cpu_times.idle = (uint64_t)(info[i].cpu_ticks[2]) * multiplier; - cpu_info->cpu_times.irq = 0; - - cpu_info->model = uv__strdup(model); - cpu_info->speed = cpuspeed/1000000; - } - vm_deallocate(mach_task_self(), (vm_address_t)info, msg_type); - - return 0; -} diff --git a/libuv/src/unix/dl.c b/libuv/src/unix/dl.c deleted file mode 100644 index fc1c052..0000000 --- a/libuv/src/unix/dl.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include - -static int uv__dlerror(uv_lib_t* lib); - - -int uv_dlopen(const char* filename, uv_lib_t* lib) { - dlerror(); /* Reset error status. */ - lib->errmsg = NULL; - lib->handle = dlopen(filename, RTLD_LAZY); - return lib->handle ? 0 : uv__dlerror(lib); -} - - -void uv_dlclose(uv_lib_t* lib) { - uv__free(lib->errmsg); - lib->errmsg = NULL; - - if (lib->handle) { - /* Ignore errors. No good way to signal them without leaking memory. */ - dlclose(lib->handle); - lib->handle = NULL; - } -} - - -int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr) { - dlerror(); /* Reset error status. */ - *ptr = dlsym(lib->handle, name); - return uv__dlerror(lib); -} - - -const char* uv_dlerror(const uv_lib_t* lib) { - return lib->errmsg ? lib->errmsg : "no error"; -} - - -static int uv__dlerror(uv_lib_t* lib) { - const char* errmsg; - - uv__free(lib->errmsg); - - errmsg = dlerror(); - - if (errmsg) { - lib->errmsg = uv__strdup(errmsg); - return -1; - } - else { - lib->errmsg = NULL; - return 0; - } -} diff --git a/libuv/src/unix/epoll.c b/libuv/src/unix/epoll.c deleted file mode 100644 index 97348e2..0000000 --- a/libuv/src/unix/epoll.c +++ /dev/null @@ -1,422 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" -#include -#include - -int uv__epoll_init(uv_loop_t* loop) { - int fd; - fd = epoll_create1(O_CLOEXEC); - - /* epoll_create1() can fail either because it's not implemented (old kernel) - * or because it doesn't understand the O_CLOEXEC flag. - */ - if (fd == -1 && (errno == ENOSYS || errno == EINVAL)) { - fd = epoll_create(256); - - if (fd != -1) - uv__cloexec(fd, 1); - } - - loop->backend_fd = fd; - if (fd == -1) - return UV__ERR(errno); - - return 0; -} - - -void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) { - struct epoll_event* events; - struct epoll_event dummy; - uintptr_t i; - uintptr_t nfds; - - assert(loop->watchers != NULL); - assert(fd >= 0); - - events = (struct epoll_event*) loop->watchers[loop->nwatchers]; - nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1]; - if (events != NULL) - /* Invalidate events with same file descriptor */ - for (i = 0; i < nfds; i++) - if (events[i].data.fd == fd) - events[i].data.fd = -1; - - /* Remove the file descriptor from the epoll. - * This avoids a problem where the same file description remains open - * in another process, causing repeated junk epoll events. - * - * We pass in a dummy epoll_event, to work around a bug in old kernels. - */ - if (loop->backend_fd >= 0) { - /* Work around a bug in kernels 3.10 to 3.19 where passing a struct that - * has the EPOLLWAKEUP flag set generates spurious audit syslog warnings. - */ - memset(&dummy, 0, sizeof(dummy)); - epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, &dummy); - } -} - - -int uv__io_check_fd(uv_loop_t* loop, int fd) { - struct epoll_event e; - int rc; - - memset(&e, 0, sizeof(e)); - e.events = POLLIN; - e.data.fd = -1; - - rc = 0; - if (epoll_ctl(loop->backend_fd, EPOLL_CTL_ADD, fd, &e)) - if (errno != EEXIST) - rc = UV__ERR(errno); - - if (rc == 0) - if (epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, &e)) - abort(); - - return rc; -} - - -void uv__io_poll(uv_loop_t* loop, int timeout) { - /* A bug in kernels < 2.6.37 makes timeouts larger than ~30 minutes - * effectively infinite on 32 bits architectures. To avoid blocking - * indefinitely, we cap the timeout and poll again if necessary. - * - * Note that "30 minutes" is a simplification because it depends on - * the value of CONFIG_HZ. The magic constant assumes CONFIG_HZ=1200, - * that being the largest value I have seen in the wild (and only once.) - */ - static const int max_safe_timeout = 1789569; - static int no_epoll_pwait_cached; - static int no_epoll_wait_cached; - int no_epoll_pwait; - int no_epoll_wait; - struct epoll_event events[1024]; - struct epoll_event* pe; - struct epoll_event e; - int real_timeout; - QUEUE* q; - uv__io_t* w; - sigset_t sigset; - uint64_t sigmask; - uint64_t base; - int have_signals; - int nevents; - int count; - int nfds; - int fd; - int op; - int i; - int user_timeout; - int reset_timeout; - - if (loop->nfds == 0) { - assert(QUEUE_EMPTY(&loop->watcher_queue)); - return; - } - - memset(&e, 0, sizeof(e)); - - while (!QUEUE_EMPTY(&loop->watcher_queue)) { - q = QUEUE_HEAD(&loop->watcher_queue); - QUEUE_REMOVE(q); - QUEUE_INIT(q); - - w = QUEUE_DATA(q, uv__io_t, watcher_queue); - assert(w->pevents != 0); - assert(w->fd >= 0); - assert(w->fd < (int) loop->nwatchers); - - e.events = w->pevents; - e.data.fd = w->fd; - - if (w->events == 0) - op = EPOLL_CTL_ADD; - else - op = EPOLL_CTL_MOD; - - /* XXX Future optimization: do EPOLL_CTL_MOD lazily if we stop watching - * events, skip the syscall and squelch the events after epoll_wait(). - */ - if (epoll_ctl(loop->backend_fd, op, w->fd, &e)) { - if (errno != EEXIST) - abort(); - - assert(op == EPOLL_CTL_ADD); - - /* We've reactivated a file descriptor that's been watched before. */ - if (epoll_ctl(loop->backend_fd, EPOLL_CTL_MOD, w->fd, &e)) - abort(); - } - - w->events = w->pevents; - } - - sigmask = 0; - if (loop->flags & UV_LOOP_BLOCK_SIGPROF) { - sigemptyset(&sigset); - sigaddset(&sigset, SIGPROF); - sigmask |= 1 << (SIGPROF - 1); - } - - assert(timeout >= -1); - base = loop->time; - count = 48; /* Benchmarks suggest this gives the best throughput. */ - real_timeout = timeout; - - if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { - reset_timeout = 1; - user_timeout = timeout; - timeout = 0; - } else { - reset_timeout = 0; - user_timeout = 0; - } - - /* You could argue there is a dependency between these two but - * ultimately we don't care about their ordering with respect - * to one another. Worst case, we make a few system calls that - * could have been avoided because another thread already knows - * they fail with ENOSYS. Hardly the end of the world. - */ - no_epoll_pwait = uv__load_relaxed(&no_epoll_pwait_cached); - no_epoll_wait = uv__load_relaxed(&no_epoll_wait_cached); - - for (;;) { - /* Only need to set the provider_entry_time if timeout != 0. The function - * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. - */ - if (timeout != 0) - uv__metrics_set_provider_entry_time(loop); - - /* See the comment for max_safe_timeout for an explanation of why - * this is necessary. Executive summary: kernel bug workaround. - */ - if (sizeof(int32_t) == sizeof(long) && timeout >= max_safe_timeout) - timeout = max_safe_timeout; - - if (sigmask != 0 && no_epoll_pwait != 0) - if (pthread_sigmask(SIG_BLOCK, &sigset, NULL)) - abort(); - - if (no_epoll_wait != 0 || (sigmask != 0 && no_epoll_pwait == 0)) { - nfds = epoll_pwait(loop->backend_fd, - events, - ARRAY_SIZE(events), - timeout, - &sigset); - if (nfds == -1 && errno == ENOSYS) { - uv__store_relaxed(&no_epoll_pwait_cached, 1); - no_epoll_pwait = 1; - } - } else { - nfds = epoll_wait(loop->backend_fd, - events, - ARRAY_SIZE(events), - timeout); - if (nfds == -1 && errno == ENOSYS) { - uv__store_relaxed(&no_epoll_wait_cached, 1); - no_epoll_wait = 1; - } - } - - if (sigmask != 0 && no_epoll_pwait != 0) - if (pthread_sigmask(SIG_UNBLOCK, &sigset, NULL)) - abort(); - - /* Update loop->time unconditionally. It's tempting to skip the update when - * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the - * operating system didn't reschedule our process while in the syscall. - */ - SAVE_ERRNO(uv__update_time(loop)); - - if (nfds == 0) { - assert(timeout != -1); - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - if (timeout == -1) - continue; - - if (timeout == 0) - return; - - /* 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 == ENOSYS) { - /* epoll_wait() or epoll_pwait() failed, try the other system call. */ - assert(no_epoll_wait == 0 || no_epoll_pwait == 0); - continue; - } - - if (errno != EINTR) - abort(); - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - if (timeout == -1) - continue; - - if (timeout == 0) - return; - - /* Interrupted by a signal. Update timeout and poll again. */ - goto update_timeout; - } - - have_signals = 0; - nevents = 0; - - { - /* Squelch a -Waddress-of-packed-member warning with gcc >= 9. */ - union { - struct epoll_event* events; - uv__io_t* watchers; - } x; - - x.events = events; - assert(loop->watchers != NULL); - loop->watchers[loop->nwatchers] = x.watchers; - loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds; - } - - for (i = 0; i < nfds; i++) { - pe = events + i; - fd = pe->data.fd; - - /* Skip invalidated events, see uv__platform_invalidate_fd */ - if (fd == -1) - continue; - - assert(fd >= 0); - assert((unsigned) fd < loop->nwatchers); - - w = loop->watchers[fd]; - - if (w == NULL) { - /* File descriptor that we've stopped watching, disarm it. - * - * Ignore all errors because we may be racing with another thread - * when the file descriptor is closed. - */ - epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, pe); - continue; - } - - /* Give users only events they're interested in. Prevents spurious - * callbacks when previous callback invocation in this loop has stopped - * the current watcher. Also, filters out events that users has not - * requested us to watch. - */ - pe->events &= w->pevents | POLLERR | POLLHUP; - - /* Work around an epoll quirk where it sometimes reports just the - * EPOLLERR or EPOLLHUP event. In order to force the event loop to - * move forward, we merge in the read/write events that the watcher - * is interested in; uv__read() and uv__write() will then deal with - * the error or hangup in the usual fashion. - * - * Note to self: happens when epoll reports EPOLLIN|EPOLLHUP, the user - * reads the available data, calls uv_read_stop(), then sometime later - * calls uv_read_start() again. By then, libuv has forgotten about the - * hangup and the kernel won't report EPOLLIN again because there's - * nothing left to read. If anything, libuv is to blame here. The - * current hack is just a quick bandaid; to properly fix it, libuv - * needs to remember the error/hangup event. We should get that for - * free when we switch over to edge-triggered I/O. - */ - if (pe->events == POLLERR || pe->events == POLLHUP) - pe->events |= - w->pevents & (POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI); - - if (pe->events != 0) { - /* Run signal watchers last. This also affects child process watchers - * because those are implemented in terms of signal watchers. - */ - if (w == &loop->signal_io_watcher) { - have_signals = 1; - } else { - uv__metrics_update_idle_time(loop); - w->cb(loop, w, pe->events); - } - - nevents++; - } - } - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - if (have_signals != 0) { - uv__metrics_update_idle_time(loop); - loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); - } - - loop->watchers[loop->nwatchers] = NULL; - loop->watchers[loop->nwatchers + 1] = NULL; - - if (have_signals != 0) - return; /* Event loop should cycle now so don't poll again. */ - - if (nevents != 0) { - if (nfds == ARRAY_SIZE(events) && --count != 0) { - /* Poll for more events but don't block this time. */ - timeout = 0; - continue; - } - return; - } - - if (timeout == 0) - return; - - if (timeout == -1) - continue; - -update_timeout: - assert(timeout > 0); - - real_timeout -= (loop->time - base); - if (real_timeout <= 0) - return; - - timeout = real_timeout; - } -} - diff --git a/libuv/src/unix/freebsd.c b/libuv/src/unix/freebsd.c deleted file mode 100644 index 170b897..0000000 --- a/libuv/src/unix/freebsd.c +++ /dev/null @@ -1,289 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include - -#include -#include -#include -#include -#include -#include /* VM_LOADAVG */ -#include -#include -#include /* sysconf */ -#include - -#ifndef CPUSTATES -# define CPUSTATES 5U -#endif -#ifndef CP_USER -# define CP_USER 0 -# define CP_NICE 1 -# define CP_SYS 2 -# define CP_IDLE 3 -# define CP_INTR 4 -#endif - - -int uv__platform_loop_init(uv_loop_t* loop) { - return uv__kqueue_init(loop); -} - - -void uv__platform_loop_delete(uv_loop_t* loop) { -} - -int uv_exepath(char* buffer, size_t* size) { - char abspath[PATH_MAX * 2 + 1]; - int mib[4]; - size_t abspath_size; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - mib[0] = CTL_KERN; - mib[1] = KERN_PROC; - mib[2] = KERN_PROC_PATHNAME; - mib[3] = -1; - - abspath_size = sizeof abspath; - if (sysctl(mib, ARRAY_SIZE(mib), abspath, &abspath_size, NULL, 0)) - return UV__ERR(errno); - - assert(abspath_size > 0); - abspath_size -= 1; - *size -= 1; - - if (*size > abspath_size) - *size = abspath_size; - - memcpy(buffer, abspath, *size); - buffer[*size] = '\0'; - - return 0; -} - -uint64_t uv_get_free_memory(void) { - int freecount; - size_t size = sizeof(freecount); - - if (sysctlbyname("vm.stats.vm.v_free_count", &freecount, &size, NULL, 0)) - return UV__ERR(errno); - - return (uint64_t) freecount * sysconf(_SC_PAGESIZE); - -} - - -uint64_t uv_get_total_memory(void) { - unsigned long info; - int which[] = {CTL_HW, HW_PHYSMEM}; - - size_t size = sizeof(info); - - if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) - return UV__ERR(errno); - - return (uint64_t) info; -} - - -uint64_t uv_get_constrained_memory(void) { - return 0; /* Memory constraints are unknown. */ -} - - -void uv_loadavg(double avg[3]) { - struct loadavg info; - size_t size = sizeof(info); - int which[] = {CTL_VM, VM_LOADAVG}; - - if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0) < 0) return; - - avg[0] = (double) info.ldavg[0] / info.fscale; - avg[1] = (double) info.ldavg[1] / info.fscale; - avg[2] = (double) info.ldavg[2] / info.fscale; -} - - -int uv_resident_set_memory(size_t* rss) { - struct kinfo_proc kinfo; - size_t page_size; - size_t kinfo_size; - int mib[4]; - - mib[0] = CTL_KERN; - mib[1] = KERN_PROC; - mib[2] = KERN_PROC_PID; - mib[3] = getpid(); - - kinfo_size = sizeof(kinfo); - - if (sysctl(mib, ARRAY_SIZE(mib), &kinfo, &kinfo_size, NULL, 0)) - return UV__ERR(errno); - - page_size = getpagesize(); - -#ifdef __DragonFly__ - *rss = kinfo.kp_vm_rssize * page_size; -#else - *rss = kinfo.ki_rssize * page_size; -#endif - - return 0; -} - - -int uv_uptime(double* uptime) { - int r; - struct timespec sp; - r = clock_gettime(CLOCK_MONOTONIC, &sp); - if (r) - return UV__ERR(errno); - - *uptime = sp.tv_sec; - return 0; -} - - -int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { - unsigned int ticks = (unsigned int)sysconf(_SC_CLK_TCK), - multiplier = ((uint64_t)1000L / ticks), cpuspeed, maxcpus, - cur = 0; - uv_cpu_info_t* cpu_info; - const char* maxcpus_key; - const char* cptimes_key; - const char* model_key; - char model[512]; - long* cp_times; - int numcpus; - size_t size; - int i; - -#if defined(__DragonFly__) - /* This is not quite correct but DragonFlyBSD doesn't seem to have anything - * comparable to kern.smp.maxcpus or kern.cp_times (kern.cp_time is a total, - * not per CPU). At least this stops uv_cpu_info() from failing completely. - */ - maxcpus_key = "hw.ncpu"; - cptimes_key = "kern.cp_time"; -#else - maxcpus_key = "kern.smp.maxcpus"; - cptimes_key = "kern.cp_times"; -#endif - -#if defined(__arm__) || defined(__aarch64__) - /* The key hw.model and hw.clockrate are not available on FreeBSD ARM. */ - model_key = "hw.machine"; - cpuspeed = 0; -#else - model_key = "hw.model"; - - size = sizeof(cpuspeed); - if (sysctlbyname("hw.clockrate", &cpuspeed, &size, NULL, 0)) - return -errno; -#endif - - size = sizeof(model); - if (sysctlbyname(model_key, &model, &size, NULL, 0)) - return UV__ERR(errno); - - size = sizeof(numcpus); - if (sysctlbyname("hw.ncpu", &numcpus, &size, NULL, 0)) - return UV__ERR(errno); - - *cpu_infos = uv__malloc(numcpus * sizeof(**cpu_infos)); - if (!(*cpu_infos)) - return UV_ENOMEM; - - *count = numcpus; - - /* kern.cp_times on FreeBSD i386 gives an array up to maxcpus instead of - * ncpu. - */ - size = sizeof(maxcpus); - if (sysctlbyname(maxcpus_key, &maxcpus, &size, NULL, 0)) { - uv__free(*cpu_infos); - return UV__ERR(errno); - } - - size = maxcpus * CPUSTATES * sizeof(long); - - cp_times = uv__malloc(size); - if (cp_times == NULL) { - uv__free(*cpu_infos); - return UV_ENOMEM; - } - - if (sysctlbyname(cptimes_key, cp_times, &size, NULL, 0)) { - uv__free(cp_times); - uv__free(*cpu_infos); - return UV__ERR(errno); - } - - for (i = 0; i < numcpus; i++) { - cpu_info = &(*cpu_infos)[i]; - - cpu_info->cpu_times.user = (uint64_t)(cp_times[CP_USER+cur]) * multiplier; - cpu_info->cpu_times.nice = (uint64_t)(cp_times[CP_NICE+cur]) * multiplier; - cpu_info->cpu_times.sys = (uint64_t)(cp_times[CP_SYS+cur]) * multiplier; - cpu_info->cpu_times.idle = (uint64_t)(cp_times[CP_IDLE+cur]) * multiplier; - cpu_info->cpu_times.irq = (uint64_t)(cp_times[CP_INTR+cur]) * multiplier; - - cpu_info->model = uv__strdup(model); - cpu_info->speed = cpuspeed; - - cur+=CPUSTATES; - } - - uv__free(cp_times); - return 0; -} - - -int uv__sendmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen) { -#if __FreeBSD__ >= 11 && !defined(__DragonFly__) - return sendmmsg(fd, - (struct mmsghdr*) mmsg, - vlen, - 0 /* flags */); -#else - return errno = ENOSYS, -1; -#endif -} - - -int uv__recvmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen) { -#if __FreeBSD__ >= 11 && !defined(__DragonFly__) - return recvmmsg(fd, - (struct mmsghdr*) mmsg, - vlen, - 0 /* flags */, - NULL /* timeout */); -#else - return errno = ENOSYS, -1; -#endif -} diff --git a/libuv/src/unix/fs.c b/libuv/src/unix/fs.c deleted file mode 100644 index eb17fb4..0000000 --- a/libuv/src/unix/fs.c +++ /dev/null @@ -1,2206 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* Caveat emptor: this file deviates from the libuv convention of returning - * negated errno codes. Most uv_fs_*() functions map directly to the system - * call of the same name. For more complex wrappers, it's easier to just - * return -1 with errno set. The dispatcher in uv__fs_work() takes care of - * getting the errno to the right place (req->result or as the return value.) - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include -#include /* PATH_MAX */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__FreeBSD_kernel__) || \ - defined(__OpenBSD__) || \ - defined(__NetBSD__) -# define HAVE_PREADV 1 -#else -# define HAVE_PREADV 0 -#endif - -#if defined(__linux__) -# include "sys/utsname.h" -#endif - -#if defined(__linux__) || defined(__sun) -# include -# include -#endif - -#if defined(__APPLE__) -# include -#elif defined(__linux__) && !defined(FICLONE) -# include -# define FICLONE _IOW(0x94, 9, int) -#endif - -#if defined(_AIX) && !defined(_AIX71) -# include -#endif - -#if defined(__APPLE__) || \ - defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__FreeBSD_kernel__) || \ - defined(__OpenBSD__) || \ - defined(__NetBSD__) -# include -# include -#elif defined(__sun) || \ - defined(__MVS__) || \ - defined(__NetBSD__) || \ - defined(__HAIKU__) || \ - defined(__QNX__) -# include -#else -# include -#endif - -#if defined(_AIX) && _XOPEN_SOURCE <= 600 -extern char *mkdtemp(char *template); /* See issue #740 on AIX < 7 */ -#endif - -#define INIT(subtype) \ - do { \ - if (req == NULL) \ - return UV_EINVAL; \ - UV_REQ_INIT(req, UV_FS); \ - req->fs_type = UV_FS_ ## subtype; \ - req->result = 0; \ - req->ptr = NULL; \ - req->loop = loop; \ - req->path = NULL; \ - req->new_path = NULL; \ - req->bufs = NULL; \ - req->cb = cb; \ - } \ - while (0) - -#define PATH \ - do { \ - assert(path != NULL); \ - if (cb == NULL) { \ - req->path = path; \ - } else { \ - req->path = uv__strdup(path); \ - if (req->path == NULL) \ - return UV_ENOMEM; \ - } \ - } \ - while (0) - -#define PATH2 \ - do { \ - if (cb == NULL) { \ - req->path = path; \ - req->new_path = new_path; \ - } else { \ - size_t path_len; \ - size_t new_path_len; \ - path_len = strlen(path) + 1; \ - new_path_len = strlen(new_path) + 1; \ - req->path = uv__malloc(path_len + new_path_len); \ - if (req->path == NULL) \ - return UV_ENOMEM; \ - req->new_path = req->path + path_len; \ - memcpy((void*) req->path, path, path_len); \ - memcpy((void*) req->new_path, new_path, new_path_len); \ - } \ - } \ - while (0) - -#define POST \ - do { \ - if (cb != NULL) { \ - uv__req_register(loop, req); \ - uv__work_submit(loop, \ - &req->work_req, \ - UV__WORK_FAST_IO, \ - uv__fs_work, \ - uv__fs_done); \ - return 0; \ - } \ - else { \ - uv__fs_work(&req->work_req); \ - return req->result; \ - } \ - } \ - while (0) - - -static int uv__fs_close(int fd) { - int rc; - - rc = uv__close_nocancel(fd); - if (rc == -1) - if (errno == EINTR || errno == EINPROGRESS) - rc = 0; /* The close is in progress, not an error. */ - - return rc; -} - - -static ssize_t uv__fs_fsync(uv_fs_t* req) { -#if defined(__APPLE__) - /* Apple's fdatasync and fsync explicitly do NOT flush the drive write cache - * to the drive platters. This is in contrast to Linux's fdatasync and fsync - * which do, according to recent man pages. F_FULLFSYNC is Apple's equivalent - * for flushing buffered data to permanent storage. If F_FULLFSYNC is not - * supported by the file system we fall back to F_BARRIERFSYNC or fsync(). - * This is the same approach taken by sqlite, except sqlite does not issue - * an F_BARRIERFSYNC call. - */ - int r; - - r = fcntl(req->file, F_FULLFSYNC); - if (r != 0) - r = fcntl(req->file, 85 /* F_BARRIERFSYNC */); /* fsync + barrier */ - if (r != 0) - r = fsync(req->file); - return r; -#else - return fsync(req->file); -#endif -} - - -static ssize_t uv__fs_fdatasync(uv_fs_t* req) { -#if defined(__linux__) || defined(__sun) || defined(__NetBSD__) - return fdatasync(req->file); -#elif defined(__APPLE__) - /* See the comment in uv__fs_fsync. */ - return uv__fs_fsync(req); -#else - return fsync(req->file); -#endif -} - - -UV_UNUSED(static struct timespec uv__fs_to_timespec(double time)) { - struct timespec ts; - ts.tv_sec = time; - ts.tv_nsec = (time - ts.tv_sec) * 1e9; - - /* TODO(bnoordhuis) Remove this. utimesat() has nanosecond resolution but we - * stick to microsecond resolution for the sake of consistency with other - * platforms. I'm the original author of this compatibility hack but I'm - * less convinced it's useful nowadays. - */ - ts.tv_nsec -= ts.tv_nsec % 1000; - - if (ts.tv_nsec < 0) { - ts.tv_nsec += 1e9; - ts.tv_sec -= 1; - } - return ts; -} - -UV_UNUSED(static struct timeval uv__fs_to_timeval(double time)) { - struct timeval tv; - tv.tv_sec = time; - tv.tv_usec = (time - tv.tv_sec) * 1e6; - if (tv.tv_usec < 0) { - tv.tv_usec += 1e6; - tv.tv_sec -= 1; - } - return tv; -} - -static ssize_t uv__fs_futime(uv_fs_t* req) { -#if defined(__linux__) \ - || defined(_AIX71) \ - || defined(__HAIKU__) - struct timespec ts[2]; - ts[0] = uv__fs_to_timespec(req->atime); - ts[1] = uv__fs_to_timespec(req->mtime); - return futimens(req->file, ts); -#elif defined(__APPLE__) \ - || defined(__DragonFly__) \ - || defined(__FreeBSD__) \ - || defined(__FreeBSD_kernel__) \ - || defined(__NetBSD__) \ - || defined(__OpenBSD__) \ - || defined(__sun) - struct timeval tv[2]; - tv[0] = uv__fs_to_timeval(req->atime); - tv[1] = uv__fs_to_timeval(req->mtime); -# if defined(__sun) - return futimesat(req->file, NULL, tv); -# else - return futimes(req->file, tv); -# endif -#elif defined(__MVS__) - attrib_t atr; - memset(&atr, 0, sizeof(atr)); - atr.att_mtimechg = 1; - atr.att_atimechg = 1; - atr.att_mtime = req->mtime; - atr.att_atime = req->atime; - return __fchattr(req->file, &atr, sizeof(atr)); -#else - errno = ENOSYS; - return -1; -#endif -} - - -static ssize_t uv__fs_mkdtemp(uv_fs_t* req) { - return mkdtemp((char*) req->path) ? 0 : -1; -} - - -static int (*uv__mkostemp)(char*, int); - - -static void uv__mkostemp_initonce(void) { - /* z/os doesn't have RTLD_DEFAULT but that's okay - * because it doesn't have mkostemp(O_CLOEXEC) either. - */ -#ifdef RTLD_DEFAULT - uv__mkostemp = (int (*)(char*, int)) dlsym(RTLD_DEFAULT, "mkostemp"); - - /* We don't care about errors, but we do want to clean them up. - * If there has been no error, then dlerror() will just return - * NULL. - */ - dlerror(); -#endif /* RTLD_DEFAULT */ -} - - -static int uv__fs_mkstemp(uv_fs_t* req) { - static uv_once_t once = UV_ONCE_INIT; - int r; -#ifdef O_CLOEXEC - static int no_cloexec_support; -#endif - static const char pattern[] = "XXXXXX"; - static const size_t pattern_size = sizeof(pattern) - 1; - char* path; - size_t path_length; - - path = (char*) req->path; - path_length = strlen(path); - - /* EINVAL can be returned for 2 reasons: - 1. The template's last 6 characters were not XXXXXX - 2. open() didn't support O_CLOEXEC - We want to avoid going to the fallback path in case - of 1, so it's manually checked before. */ - if (path_length < pattern_size || - strcmp(path + path_length - pattern_size, pattern)) { - errno = EINVAL; - r = -1; - goto clobber; - } - - uv_once(&once, uv__mkostemp_initonce); - -#ifdef O_CLOEXEC - if (uv__load_relaxed(&no_cloexec_support) == 0 && uv__mkostemp != NULL) { - r = uv__mkostemp(path, O_CLOEXEC); - - if (r >= 0) - return r; - - /* If mkostemp() returns EINVAL, it means the kernel doesn't - support O_CLOEXEC, so we just fallback to mkstemp() below. */ - if (errno != EINVAL) - goto clobber; - - /* We set the static variable so that next calls don't even - try to use mkostemp. */ - uv__store_relaxed(&no_cloexec_support, 1); - } -#endif /* O_CLOEXEC */ - - if (req->cb != NULL) - uv_rwlock_rdlock(&req->loop->cloexec_lock); - - r = mkstemp(path); - - /* In case of failure `uv__cloexec` will leave error in `errno`, - * so it is enough to just set `r` to `-1`. - */ - if (r >= 0 && uv__cloexec(r, 1) != 0) { - r = uv__close(r); - if (r != 0) - abort(); - r = -1; - } - - if (req->cb != NULL) - uv_rwlock_rdunlock(&req->loop->cloexec_lock); - -clobber: - if (r < 0) - path[0] = '\0'; - return r; -} - - -static ssize_t uv__fs_open(uv_fs_t* req) { -#ifdef O_CLOEXEC - return open(req->path, req->flags | O_CLOEXEC, req->mode); -#else /* O_CLOEXEC */ - int r; - - if (req->cb != NULL) - uv_rwlock_rdlock(&req->loop->cloexec_lock); - - r = open(req->path, req->flags, req->mode); - - /* In case of failure `uv__cloexec` will leave error in `errno`, - * so it is enough to just set `r` to `-1`. - */ - if (r >= 0 && uv__cloexec(r, 1) != 0) { - r = uv__close(r); - if (r != 0) - abort(); - r = -1; - } - - if (req->cb != NULL) - uv_rwlock_rdunlock(&req->loop->cloexec_lock); - - return r; -#endif /* O_CLOEXEC */ -} - - -#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 defined(__linux__) - static int no_preadv; -#endif - unsigned int iovmax; - ssize_t result; - - iovmax = uv__getiovmax(); - if (req->nbufs > iovmax) - req->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); - } 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 defined(__linux__) - if (uv__load_relaxed(&no_preadv)) retry: -# endif - { - result = uv__fs_preadv(req->file, req->bufs, req->nbufs, req->off); - } -# if defined(__linux__) - else { - result = uv__preadv(req->file, - (struct iovec*)req->bufs, - req->nbufs, - req->off); - if (result == -1 && errno == ENOSYS) { - uv__store_relaxed(&no_preadv, 1); - goto retry; - } - } -# endif -#endif - } - -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) { - struct stat buf; - ssize_t rc; - rc = fstat(req->file, &buf); - if (rc == 0 && S_ISDIR(buf.st_mode)) { - errno = EISDIR; - } - } -#endif - - return result; -} - - -#if defined(__APPLE__) && !defined(MAC_OS_X_VERSION_10_8) -#define UV_CONST_DIRENT uv__dirent_t -#else -#define UV_CONST_DIRENT const uv__dirent_t -#endif - - -static int uv__fs_scandir_filter(UV_CONST_DIRENT* dent) { - return strcmp(dent->d_name, ".") != 0 && strcmp(dent->d_name, "..") != 0; -} - - -static int uv__fs_scandir_sort(UV_CONST_DIRENT** a, UV_CONST_DIRENT** b) { - return strcmp((*a)->d_name, (*b)->d_name); -} - - -static ssize_t uv__fs_scandir(uv_fs_t* req) { - uv__dirent_t** dents; - int n; - - dents = NULL; - n = scandir(req->path, &dents, uv__fs_scandir_filter, uv__fs_scandir_sort); - - /* NOTE: We will use nbufs as an index field */ - req->nbufs = 0; - - if (n == 0) { - /* OS X still needs to deallocate some memory. - * Memory was allocated using the system allocator, so use free() here. - */ - free(dents); - dents = NULL; - } else if (n == -1) { - return n; - } - - req->ptr = dents; - - return n; -} - -static int uv__fs_opendir(uv_fs_t* req) { - uv_dir_t* dir; - - dir = uv__malloc(sizeof(*dir)); - if (dir == NULL) - goto error; - - dir->dir = opendir(req->path); - if (dir->dir == NULL) - goto error; - - req->ptr = dir; - return 0; - -error: - uv__free(dir); - req->ptr = NULL; - return -1; -} - -static int uv__fs_readdir(uv_fs_t* req) { - uv_dir_t* dir; - uv_dirent_t* dirent; - struct dirent* res; - unsigned int dirent_idx; - unsigned int i; - - dir = req->ptr; - dirent_idx = 0; - - while (dirent_idx < dir->nentries) { - /* readdir() returns NULL on end of directory, as well as on error. errno - is used to differentiate between the two conditions. */ - errno = 0; - res = readdir(dir->dir); - - if (res == NULL) { - if (errno != 0) - goto error; - break; - } - - if (strcmp(res->d_name, ".") == 0 || strcmp(res->d_name, "..") == 0) - continue; - - dirent = &dir->dirents[dirent_idx]; - dirent->name = uv__strdup(res->d_name); - - if (dirent->name == NULL) - goto error; - - dirent->type = uv__fs_get_dirent_type(res); - ++dirent_idx; - } - - return dirent_idx; - -error: - for (i = 0; i < dirent_idx; ++i) { - uv__free((char*) dir->dirents[i].name); - dir->dirents[i].name = NULL; - } - - return -1; -} - -static int uv__fs_closedir(uv_fs_t* req) { - uv_dir_t* dir; - - dir = req->ptr; - - if (dir->dir != NULL) { - closedir(dir->dir); - dir->dir = NULL; - } - - uv__free(req->ptr); - req->ptr = NULL; - return 0; -} - -static int uv__fs_statfs(uv_fs_t* req) { - uv_statfs_t* stat_fs; -#if defined(__sun) || \ - defined(__MVS__) || \ - defined(__NetBSD__) || \ - defined(__HAIKU__) || \ - defined(__QNX__) - struct statvfs buf; - - if (0 != statvfs(req->path, &buf)) -#else - struct statfs buf; - - if (0 != statfs(req->path, &buf)) -#endif /* defined(__sun) */ - return -1; - - stat_fs = uv__malloc(sizeof(*stat_fs)); - if (stat_fs == NULL) { - errno = ENOMEM; - return -1; - } - -#if defined(__sun) || \ - defined(__MVS__) || \ - defined(__OpenBSD__) || \ - defined(__NetBSD__) || \ - defined(__HAIKU__) || \ - defined(__QNX__) - stat_fs->f_type = 0; /* f_type is not supported. */ -#else - stat_fs->f_type = buf.f_type; -#endif - stat_fs->f_bsize = buf.f_bsize; - stat_fs->f_blocks = buf.f_blocks; - stat_fs->f_bfree = buf.f_bfree; - stat_fs->f_bavail = buf.f_bavail; - stat_fs->f_files = buf.f_files; - stat_fs->f_ffree = buf.f_ffree; - req->ptr = stat_fs; - return 0; -} - -static ssize_t uv__fs_pathmax_size(const char* path) { - ssize_t pathmax; - - pathmax = pathconf(path, _PC_PATH_MAX); - - if (pathmax == -1) - pathmax = UV__PATH_MAX; - - return pathmax; -} - -static ssize_t uv__fs_readlink(uv_fs_t* req) { - ssize_t maxlen; - ssize_t len; - char* buf; - -#if defined(_POSIX_PATH_MAX) || defined(PATH_MAX) - maxlen = uv__fs_pathmax_size(req->path); -#else - /* We may not have a real PATH_MAX. Read size of link. */ - struct stat st; - int ret; - ret = lstat(req->path, &st); - if (ret != 0) - return -1; - if (!S_ISLNK(st.st_mode)) { - errno = EINVAL; - return -1; - } - - maxlen = st.st_size; - - /* According to readlink(2) lstat can report st_size == 0 - for some symlinks, such as those in /proc or /sys. */ - if (maxlen == 0) - maxlen = uv__fs_pathmax_size(req->path); -#endif - - buf = uv__malloc(maxlen); - - if (buf == NULL) { - errno = ENOMEM; - return -1; - } - -#if defined(__MVS__) - len = os390_readlink(req->path, buf, maxlen); -#else - len = readlink(req->path, buf, maxlen); -#endif - - if (len == -1) { - uv__free(buf); - return -1; - } - - /* Uncommon case: resize to make room for the trailing nul byte. */ - if (len == maxlen) { - buf = uv__reallocf(buf, len + 1); - - if (buf == NULL) - return -1; - } - - buf[len] = '\0'; - req->ptr = buf; - - return 0; -} - -static ssize_t uv__fs_realpath(uv_fs_t* req) { - char* buf; - -#if defined(_POSIX_VERSION) && _POSIX_VERSION >= 200809L - buf = realpath(req->path, NULL); - if (buf == NULL) - return -1; -#else - ssize_t len; - - len = uv__fs_pathmax_size(req->path); - buf = uv__malloc(len + 1); - - if (buf == NULL) { - errno = ENOMEM; - return -1; - } - - if (realpath(req->path, buf) == NULL) { - uv__free(buf); - return -1; - } -#endif - - req->ptr = buf; - - return 0; -} - -static ssize_t uv__fs_sendfile_emul(uv_fs_t* req) { - struct pollfd pfd; - int use_pread; - off_t offset; - ssize_t nsent; - ssize_t nread; - ssize_t nwritten; - size_t buflen; - size_t len; - ssize_t n; - int in_fd; - int out_fd; - char buf[8192]; - - len = req->bufsml[0].len; - in_fd = req->flags; - out_fd = req->file; - offset = req->off; - use_pread = 1; - - /* Here are the rules regarding errors: - * - * 1. Read errors are reported only if nsent==0, otherwise we return nsent. - * The user needs to know that some data has already been sent, to stop - * them from sending it twice. - * - * 2. Write errors are always reported. Write errors are bad because they - * mean data loss: we've read data but now we can't write it out. - * - * We try to use pread() and fall back to regular read() if the source fd - * doesn't support positional reads, for example when it's a pipe fd. - * - * If we get EAGAIN when writing to the target fd, we poll() on it until - * it becomes writable again. - * - * FIXME: If we get a write error when use_pread==1, it should be safe to - * return the number of sent bytes instead of an error because pread() - * is, in theory, idempotent. However, special files in /dev or /proc - * may support pread() but not necessarily return the same data on - * successive reads. - * - * FIXME: There is no way now to signal that we managed to send *some* data - * before a write error. - */ - for (nsent = 0; (size_t) nsent < len; ) { - buflen = len - nsent; - - if (buflen > sizeof(buf)) - buflen = sizeof(buf); - - do - if (use_pread) - nread = pread(in_fd, buf, buflen, offset); - else - nread = read(in_fd, buf, buflen); - while (nread == -1 && errno == EINTR); - - if (nread == 0) - goto out; - - if (nread == -1) { - if (use_pread && nsent == 0 && (errno == EIO || errno == ESPIPE)) { - use_pread = 0; - continue; - } - - if (nsent == 0) - nsent = -1; - - goto out; - } - - for (nwritten = 0; nwritten < nread; ) { - do - n = write(out_fd, buf + nwritten, nread - nwritten); - while (n == -1 && errno == EINTR); - - if (n != -1) { - nwritten += n; - continue; - } - - if (errno != EAGAIN && errno != EWOULDBLOCK) { - nsent = -1; - goto out; - } - - pfd.fd = out_fd; - pfd.events = POLLOUT; - pfd.revents = 0; - - do - n = poll(&pfd, 1, -1); - while (n == -1 && errno == EINTR); - - if (n == -1 || (pfd.revents & ~POLLOUT) != 0) { - errno = EIO; - nsent = -1; - goto out; - } - } - - offset += nread; - nsent += nread; - } - -out: - if (nsent != -1) - req->off = offset; - - return nsent; -} - - -#ifdef __linux__ -static unsigned uv__kernel_version(void) { - static unsigned cached_version; - struct utsname u; - unsigned version; - unsigned major; - unsigned minor; - unsigned patch; - - version = uv__load_relaxed(&cached_version); - if (version != 0) - return version; - - if (-1 == uname(&u)) - return 0; - - if (3 != sscanf(u.release, "%u.%u.%u", &major, &minor, &patch)) - return 0; - - version = major * 65536 + minor * 256 + patch; - uv__store_relaxed(&cached_version, version); - - return version; -} - - -/* Pre-4.20 kernels have a bug where CephFS uses the RADOS copy-from command - * in copy_file_range() when it shouldn't. There is no workaround except to - * fall back to a regular copy. - */ -static int uv__is_buggy_cephfs(int fd) { - struct statfs s; - - if (-1 == fstatfs(fd, &s)) - return 0; - - if (s.f_type != /* CephFS */ 0xC36400) - return 0; - - return uv__kernel_version() < /* 4.20.0 */ 0x041400; -} -#endif /* __linux__ */ - - -static ssize_t uv__fs_sendfile(uv_fs_t* req) { - int in_fd; - int out_fd; - - in_fd = req->flags; - out_fd = req->file; - -#if defined(__linux__) || defined(__sun) - { - off_t off; - ssize_t r; - - off = req->off; - -#ifdef __linux__ - { - static int no_copy_file_range_support; - - if (uv__load_relaxed(&no_copy_file_range_support) == 0) { - r = uv__fs_copy_file_range(in_fd, &off, out_fd, NULL, req->bufsml[0].len, 0); - - if (r == -1 && errno == ENOSYS) { - /* ENOSYS - it will never work */ - errno = 0; - uv__store_relaxed(&no_copy_file_range_support, 1); - } else if (r == -1 && errno == EACCES && uv__is_buggy_cephfs(in_fd)) { - /* EACCES - pre-4.20 kernels have a bug where CephFS uses the RADOS - copy-from command when it shouldn't */ - errno = 0; - uv__store_relaxed(&no_copy_file_range_support, 1); - } else if (r == -1 && (errno == ENOTSUP || errno == EXDEV)) { - /* ENOTSUP - it could work on another file system type */ - /* EXDEV - it will not work when in_fd and out_fd are not on the same - mounted filesystem (pre Linux 5.3) */ - errno = 0; - } else { - goto ok; - } - } - } -#endif - - r = sendfile(out_fd, in_fd, &off, req->bufsml[0].len); - -ok: - /* sendfile() on SunOS returns EINVAL if the target fd is not a socket but - * it still writes out data. Fortunately, we can detect it by checking if - * the offset has been updated. - */ - if (r != -1 || off > req->off) { - r = off - req->off; - req->off = off; - return r; - } - - if (errno == EINVAL || - errno == EIO || - errno == ENOTSOCK || - errno == EXDEV) { - errno = 0; - return uv__fs_sendfile_emul(req); - } - - return -1; - } -#elif defined(__APPLE__) || \ - defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__FreeBSD_kernel__) - { - off_t len; - ssize_t r; - - /* sendfile() on FreeBSD and Darwin returns EAGAIN if the target fd is in - * non-blocking mode and not all data could be written. If a non-zero - * number of bytes have been sent, we don't consider it an error. - */ - -#if defined(__FreeBSD__) || defined(__DragonFly__) - len = 0; - r = sendfile(in_fd, out_fd, req->off, req->bufsml[0].len, NULL, &len, 0); -#elif defined(__FreeBSD_kernel__) - len = 0; - r = bsd_sendfile(in_fd, - out_fd, - req->off, - req->bufsml[0].len, - NULL, - &len, - 0); -#else - /* The darwin sendfile takes len as an input for the length to send, - * so make sure to initialize it with the caller's value. */ - len = req->bufsml[0].len; - r = sendfile(in_fd, out_fd, req->off, &len, NULL, 0); -#endif - - /* - * The man page for sendfile(2) on DragonFly states that `len` contains - * a meaningful value ONLY in case of EAGAIN and EINTR. - * Nothing is said about it's value in case of other errors, so better - * not depend on the potential wrong assumption that is was not modified - * by the syscall. - */ - if (r == 0 || ((errno == EAGAIN || errno == EINTR) && len != 0)) { - req->off += len; - return (ssize_t) len; - } - - if (errno == EINVAL || - errno == EIO || - errno == ENOTSOCK || - errno == EXDEV) { - errno = 0; - return uv__fs_sendfile_emul(req); - } - - return -1; - } -#else - /* Squelch compiler warnings. */ - (void) &in_fd; - (void) &out_fd; - - return uv__fs_sendfile_emul(req); -#endif -} - - -static ssize_t uv__fs_utime(uv_fs_t* req) { -#if defined(__linux__) \ - || defined(_AIX71) \ - || defined(__sun) \ - || defined(__HAIKU__) - struct timespec ts[2]; - ts[0] = uv__fs_to_timespec(req->atime); - ts[1] = uv__fs_to_timespec(req->mtime); - return utimensat(AT_FDCWD, req->path, ts, 0); -#elif defined(__APPLE__) \ - || defined(__DragonFly__) \ - || defined(__FreeBSD__) \ - || defined(__FreeBSD_kernel__) \ - || defined(__NetBSD__) \ - || defined(__OpenBSD__) - struct timeval tv[2]; - tv[0] = uv__fs_to_timeval(req->atime); - tv[1] = uv__fs_to_timeval(req->mtime); - return utimes(req->path, tv); -#elif defined(_AIX) \ - && !defined(_AIX71) - struct utimbuf buf; - buf.actime = req->atime; - buf.modtime = req->mtime; - return utime(req->path, &buf); -#elif defined(__MVS__) - attrib_t atr; - memset(&atr, 0, sizeof(atr)); - atr.att_mtimechg = 1; - atr.att_atimechg = 1; - atr.att_mtime = req->mtime; - atr.att_atime = req->atime; - return __lchattr((char*) req->path, &atr, sizeof(atr)); -#else - errno = ENOSYS; - return -1; -#endif -} - - -static ssize_t uv__fs_lutime(uv_fs_t* req) { -#if defined(__linux__) || \ - defined(_AIX71) || \ - defined(__sun) || \ - defined(__HAIKU__) - struct timespec ts[2]; - ts[0] = uv__fs_to_timespec(req->atime); - ts[1] = uv__fs_to_timespec(req->mtime); - return utimensat(AT_FDCWD, req->path, ts, AT_SYMLINK_NOFOLLOW); -#elif defined(__APPLE__) || \ - defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__FreeBSD_kernel__) || \ - defined(__NetBSD__) - struct timeval tv[2]; - tv[0] = uv__fs_to_timeval(req->atime); - tv[1] = uv__fs_to_timeval(req->mtime); - return lutimes(req->path, tv); -#else - errno = ENOSYS; - return -1; -#endif -} - - -static ssize_t uv__fs_write(uv_fs_t* req) { -#if defined(__linux__) - static int no_pwritev; -#endif - ssize_t r; - - /* 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; - - 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); - } 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 defined(__linux__) - if (no_pwritev) retry: -# endif - { - r = pwrite(req->file, req->bufs[0].base, req->bufs[0].len, req->off); - } -# if defined(__linux__) - else { - r = uv__pwritev(req->file, - (struct iovec*) req->bufs, - req->nbufs, - req->off); - if (r == -1 && errno == ENOSYS) { - no_pwritev = 1; - goto retry; - } - } -# endif -#endif - } - -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; - uv_file dstfd; - struct stat src_statsbuf; - struct stat dst_statsbuf; - int dst_flags; - int result; - int err; - off_t bytes_to_send; - off_t in_offset; - off_t bytes_written; - size_t bytes_chunk; - - dstfd = -1; - err = 0; - - /* Open the source file. */ - srcfd = uv_fs_open(NULL, &fs_req, req->path, O_RDONLY, 0, NULL); - uv_fs_req_cleanup(&fs_req); - - if (srcfd < 0) - return srcfd; - - /* Get the source file's mode. */ - if (fstat(srcfd, &src_statsbuf)) { - err = UV__ERR(errno); - goto out; - } - - dst_flags = O_WRONLY | O_CREAT; - - if (req->flags & UV_FS_COPYFILE_EXCL) - dst_flags |= O_EXCL; - - /* Open the destination file. */ - dstfd = uv_fs_open(NULL, - &fs_req, - req->new_path, - dst_flags, - src_statsbuf.st_mode, - NULL); - uv_fs_req_cleanup(&fs_req); - - if (dstfd < 0) { - err = dstfd; - goto out; - } - - /* If the file is not being opened exclusively, verify that the source and - destination are not the same file. If they are the same, bail out early. */ - if ((req->flags & UV_FS_COPYFILE_EXCL) == 0) { - /* Get the destination file's mode. */ - if (fstat(dstfd, &dst_statsbuf)) { - err = UV__ERR(errno); - goto out; - } - - /* Check if srcfd and dstfd refer to the same file */ - if (src_statsbuf.st_dev == dst_statsbuf.st_dev && - src_statsbuf.st_ino == dst_statsbuf.st_ino) { - goto out; - } - - /* Truncate the file in case the destination already existed. */ - if (ftruncate(dstfd, 0) != 0) { - err = UV__ERR(errno); - goto out; - } - } - - if (fchmod(dstfd, src_statsbuf.st_mode) == -1) { - err = UV__ERR(errno); -#ifdef __linux__ - if (err != UV_EPERM) - goto out; - - { - struct statfs s; - - /* fchmod() on CIFS shares always fails with EPERM unless the share is - * mounted with "noperm". As fchmod() is a meaningless operation on such - * shares anyway, detect that condition and squelch the error. - */ - if (fstatfs(dstfd, &s) == -1) - goto out; - - if ((unsigned) s.f_type != /* CIFS */ 0xFF534D42u) - goto out; - } - - err = 0; -#else /* !__linux__ */ - goto out; -#endif /* !__linux__ */ - } - -#ifdef FICLONE - if (req->flags & UV_FS_COPYFILE_FICLONE || - req->flags & UV_FS_COPYFILE_FICLONE_FORCE) { - if (ioctl(dstfd, FICLONE, srcfd) == 0) { - /* ioctl() with FICLONE succeeded. */ - goto out; - } - /* If an error occurred and force was set, return the error to the caller; - * fall back to sendfile() when force was not set. */ - if (req->flags & UV_FS_COPYFILE_FICLONE_FORCE) { - err = UV__ERR(errno); - goto out; - } - } -#else - if (req->flags & UV_FS_COPYFILE_FICLONE_FORCE) { - err = UV_ENOSYS; - goto out; - } -#endif - - bytes_to_send = src_statsbuf.st_size; - in_offset = 0; - while (bytes_to_send != 0) { - bytes_chunk = SSIZE_MAX; - if (bytes_to_send < (off_t) bytes_chunk) - bytes_chunk = bytes_to_send; - uv_fs_sendfile(NULL, &fs_req, dstfd, srcfd, in_offset, bytes_chunk, NULL); - bytes_written = fs_req.result; - uv_fs_req_cleanup(&fs_req); - - if (bytes_written < 0) { - err = bytes_written; - break; - } - - bytes_to_send -= bytes_written; - in_offset += bytes_written; - } - -out: - if (err < 0) - result = err; - else - result = 0; - - /* Close the source file. */ - err = uv__close_nocheckstdio(srcfd); - - /* Don't overwrite any existing errors. */ - if (err != 0 && result == 0) - result = err; - - /* Close the destination file if it is open. */ - if (dstfd >= 0) { - err = uv__close_nocheckstdio(dstfd); - - /* Don't overwrite any existing errors. */ - if (err != 0 && result == 0) - result = err; - - /* Remove the destination file if something went wrong. */ - if (result != 0) { - uv_fs_unlink(NULL, &fs_req, req->new_path, NULL); - /* Ignore the unlink return value, as an error already happened. */ - uv_fs_req_cleanup(&fs_req); - } - } - - if (result == 0) - return 0; - - errno = UV__ERR(result); - return -1; -} - -static void uv__to_stat(struct stat* src, uv_stat_t* dst) { - dst->st_dev = src->st_dev; - dst->st_mode = src->st_mode; - dst->st_nlink = src->st_nlink; - dst->st_uid = src->st_uid; - dst->st_gid = src->st_gid; - dst->st_rdev = src->st_rdev; - dst->st_ino = src->st_ino; - dst->st_size = src->st_size; - dst->st_blksize = src->st_blksize; - dst->st_blocks = src->st_blocks; - -#if defined(__APPLE__) - dst->st_atim.tv_sec = src->st_atimespec.tv_sec; - dst->st_atim.tv_nsec = src->st_atimespec.tv_nsec; - dst->st_mtim.tv_sec = src->st_mtimespec.tv_sec; - dst->st_mtim.tv_nsec = src->st_mtimespec.tv_nsec; - dst->st_ctim.tv_sec = src->st_ctimespec.tv_sec; - dst->st_ctim.tv_nsec = src->st_ctimespec.tv_nsec; - dst->st_birthtim.tv_sec = src->st_birthtimespec.tv_sec; - dst->st_birthtim.tv_nsec = src->st_birthtimespec.tv_nsec; - dst->st_flags = src->st_flags; - dst->st_gen = src->st_gen; -#elif defined(__ANDROID__) - dst->st_atim.tv_sec = src->st_atime; - dst->st_atim.tv_nsec = src->st_atimensec; - dst->st_mtim.tv_sec = src->st_mtime; - dst->st_mtim.tv_nsec = src->st_mtimensec; - dst->st_ctim.tv_sec = src->st_ctime; - dst->st_ctim.tv_nsec = src->st_ctimensec; - dst->st_birthtim.tv_sec = src->st_ctime; - dst->st_birthtim.tv_nsec = src->st_ctimensec; - dst->st_flags = 0; - dst->st_gen = 0; -#elif !defined(_AIX) && \ - !defined(__MVS__) && ( \ - defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__OpenBSD__) || \ - defined(__NetBSD__) || \ - defined(_GNU_SOURCE) || \ - defined(_BSD_SOURCE) || \ - defined(_SVID_SOURCE) || \ - defined(_XOPEN_SOURCE) || \ - defined(_DEFAULT_SOURCE)) - dst->st_atim.tv_sec = src->st_atim.tv_sec; - dst->st_atim.tv_nsec = src->st_atim.tv_nsec; - dst->st_mtim.tv_sec = src->st_mtim.tv_sec; - dst->st_mtim.tv_nsec = src->st_mtim.tv_nsec; - dst->st_ctim.tv_sec = src->st_ctim.tv_sec; - dst->st_ctim.tv_nsec = src->st_ctim.tv_nsec; -# if defined(__FreeBSD__) || \ - defined(__NetBSD__) - dst->st_birthtim.tv_sec = src->st_birthtim.tv_sec; - dst->st_birthtim.tv_nsec = src->st_birthtim.tv_nsec; - dst->st_flags = src->st_flags; - dst->st_gen = src->st_gen; -# else - dst->st_birthtim.tv_sec = src->st_ctim.tv_sec; - dst->st_birthtim.tv_nsec = src->st_ctim.tv_nsec; - dst->st_flags = 0; - dst->st_gen = 0; -# endif -#else - dst->st_atim.tv_sec = src->st_atime; - dst->st_atim.tv_nsec = 0; - dst->st_mtim.tv_sec = src->st_mtime; - dst->st_mtim.tv_nsec = 0; - dst->st_ctim.tv_sec = src->st_ctime; - dst->st_ctim.tv_nsec = 0; - dst->st_birthtim.tv_sec = src->st_ctime; - dst->st_birthtim.tv_nsec = 0; - dst->st_flags = 0; - dst->st_gen = 0; -#endif -} - - -static int uv__fs_statx(int fd, - const char* path, - int is_fstat, - int is_lstat, - uv_stat_t* buf) { - STATIC_ASSERT(UV_ENOSYS != -1); -#ifdef __linux__ - static int no_statx; - struct uv__statx statxbuf; - int dirfd; - int flags; - int mode; - int rc; - - if (uv__load_relaxed(&no_statx)) - return UV_ENOSYS; - - dirfd = AT_FDCWD; - flags = 0; /* AT_STATX_SYNC_AS_STAT */ - mode = 0xFFF; /* STATX_BASIC_STATS + STATX_BTIME */ - - if (is_fstat) { - dirfd = fd; - flags |= 0x1000; /* AT_EMPTY_PATH */ - } - - if (is_lstat) - flags |= AT_SYMLINK_NOFOLLOW; - - rc = uv__statx(dirfd, path, flags, mode, &statxbuf); - - switch (rc) { - case 0: - break; - case -1: - /* EPERM happens when a seccomp filter rejects the system call. - * Has been observed with libseccomp < 2.3.3 and docker < 18.04. - * EOPNOTSUPP is used on DVS exported filesystems - */ - if (errno != EINVAL && errno != EPERM && errno != ENOSYS && errno != EOPNOTSUPP) - return -1; - /* Fall through. */ - default: - /* Normally on success, zero is returned and On error, -1 is returned. - * Observed on S390 RHEL running in a docker container with statx not - * implemented, rc might return 1 with 0 set as the error code in which - * case we return ENOSYS. - */ - uv__store_relaxed(&no_statx, 1); - return UV_ENOSYS; - } - - buf->st_dev = makedev(statxbuf.stx_dev_major, statxbuf.stx_dev_minor); - buf->st_mode = statxbuf.stx_mode; - buf->st_nlink = statxbuf.stx_nlink; - buf->st_uid = statxbuf.stx_uid; - buf->st_gid = statxbuf.stx_gid; - buf->st_rdev = makedev(statxbuf.stx_rdev_major, statxbuf.stx_rdev_minor); - buf->st_ino = statxbuf.stx_ino; - buf->st_size = statxbuf.stx_size; - buf->st_blksize = statxbuf.stx_blksize; - buf->st_blocks = statxbuf.stx_blocks; - buf->st_atim.tv_sec = statxbuf.stx_atime.tv_sec; - buf->st_atim.tv_nsec = statxbuf.stx_atime.tv_nsec; - buf->st_mtim.tv_sec = statxbuf.stx_mtime.tv_sec; - buf->st_mtim.tv_nsec = statxbuf.stx_mtime.tv_nsec; - buf->st_ctim.tv_sec = statxbuf.stx_ctime.tv_sec; - buf->st_ctim.tv_nsec = statxbuf.stx_ctime.tv_nsec; - buf->st_birthtim.tv_sec = statxbuf.stx_btime.tv_sec; - buf->st_birthtim.tv_nsec = statxbuf.stx_btime.tv_nsec; - buf->st_flags = 0; - buf->st_gen = 0; - - return 0; -#else - return UV_ENOSYS; -#endif /* __linux__ */ -} - - -static int uv__fs_stat(const char *path, uv_stat_t *buf) { - struct stat pbuf; - int ret; - - ret = uv__fs_statx(-1, path, /* is_fstat */ 0, /* is_lstat */ 0, buf); - if (ret != UV_ENOSYS) - return ret; - - ret = stat(path, &pbuf); - if (ret == 0) - uv__to_stat(&pbuf, buf); - - return ret; -} - - -static int uv__fs_lstat(const char *path, uv_stat_t *buf) { - struct stat pbuf; - int ret; - - ret = uv__fs_statx(-1, path, /* is_fstat */ 0, /* is_lstat */ 1, buf); - if (ret != UV_ENOSYS) - return ret; - - ret = lstat(path, &pbuf); - if (ret == 0) - uv__to_stat(&pbuf, buf); - - return ret; -} - - -static int uv__fs_fstat(int fd, uv_stat_t *buf) { - struct stat pbuf; - int ret; - - ret = uv__fs_statx(fd, "", /* is_fstat */ 1, /* is_lstat */ 0, buf); - if (ret != UV_ENOSYS) - return ret; - - ret = fstat(fd, &pbuf); - if (ret == 0) - uv__to_stat(&pbuf, buf); - - return ret; -} - -static size_t uv__fs_buf_offset(uv_buf_t* bufs, size_t size) { - size_t offset; - /* Figure out which bufs are done */ - for (offset = 0; size > 0 && bufs[offset].len <= size; ++offset) - size -= bufs[offset].len; - - /* Fix a partial read/write */ - if (size > 0) { - bufs[offset].base += size; - bufs[offset].len -= size; - } - return offset; -} - -static ssize_t uv__fs_write_all(uv_fs_t* req) { - unsigned int iovmax; - unsigned int nbufs; - uv_buf_t* bufs; - ssize_t total; - ssize_t result; - - iovmax = uv__getiovmax(); - nbufs = req->nbufs; - bufs = req->bufs; - total = 0; - - while (nbufs > 0) { - req->nbufs = nbufs; - if (req->nbufs > iovmax) - req->nbufs = iovmax; - - do - result = uv__fs_write(req); - while (result < 0 && errno == EINTR); - - if (result <= 0) { - if (total == 0) - total = result; - break; - } - - if (req->off >= 0) - req->off += result; - - req->nbufs = uv__fs_buf_offset(req->bufs, result); - req->bufs += req->nbufs; - nbufs -= req->nbufs; - total += result; - } - - if (bufs != req->bufsml) - uv__free(bufs); - - req->bufs = NULL; - req->nbufs = 0; - - return total; -} - - -static void uv__fs_work(struct uv__work* w) { - int retry_on_eintr; - uv_fs_t* req; - ssize_t r; - - req = container_of(w, uv_fs_t, work_req); - retry_on_eintr = !(req->fs_type == UV_FS_CLOSE || - req->fs_type == UV_FS_READ); - - do { - errno = 0; - -#define X(type, action) \ - case UV_FS_ ## type: \ - r = action; \ - break; - - switch (req->fs_type) { - X(ACCESS, access(req->path, req->flags)); - X(CHMOD, chmod(req->path, req->mode)); - X(CHOWN, chown(req->path, req->uid, req->gid)); - X(CLOSE, uv__fs_close(req->file)); - X(COPYFILE, uv__fs_copyfile(req)); - X(FCHMOD, fchmod(req->file, req->mode)); - X(FCHOWN, fchown(req->file, req->uid, req->gid)); - X(LCHOWN, lchown(req->path, req->uid, req->gid)); - X(FDATASYNC, uv__fs_fdatasync(req)); - X(FSTAT, uv__fs_fstat(req->file, &req->statbuf)); - X(FSYNC, uv__fs_fsync(req)); - X(FTRUNCATE, ftruncate(req->file, req->off)); - X(FUTIME, uv__fs_futime(req)); - X(LUTIME, uv__fs_lutime(req)); - X(LSTAT, uv__fs_lstat(req->path, &req->statbuf)); - X(LINK, link(req->path, req->new_path)); - X(MKDIR, mkdir(req->path, req->mode)); - X(MKDTEMP, uv__fs_mkdtemp(req)); - X(MKSTEMP, uv__fs_mkstemp(req)); - X(OPEN, uv__fs_open(req)); - X(READ, uv__fs_read(req)); - X(SCANDIR, uv__fs_scandir(req)); - X(OPENDIR, uv__fs_opendir(req)); - X(READDIR, uv__fs_readdir(req)); - X(CLOSEDIR, uv__fs_closedir(req)); - X(READLINK, uv__fs_readlink(req)); - X(REALPATH, uv__fs_realpath(req)); - X(RENAME, rename(req->path, req->new_path)); - X(RMDIR, rmdir(req->path)); - X(SENDFILE, uv__fs_sendfile(req)); - X(STAT, uv__fs_stat(req->path, &req->statbuf)); - X(STATFS, uv__fs_statfs(req)); - X(SYMLINK, symlink(req->path, req->new_path)); - X(UNLINK, unlink(req->path)); - X(UTIME, uv__fs_utime(req)); - X(WRITE, uv__fs_write_all(req)); - default: abort(); - } -#undef X - } while (r == -1 && errno == EINTR && retry_on_eintr); - - if (r == -1) - req->result = UV__ERR(errno); - else - req->result = r; - - if (r == 0 && (req->fs_type == UV_FS_STAT || - req->fs_type == UV_FS_FSTAT || - req->fs_type == UV_FS_LSTAT)) { - req->ptr = &req->statbuf; - } -} - - -static void uv__fs_done(struct uv__work* w, int status) { - uv_fs_t* req; - - req = container_of(w, uv_fs_t, work_req); - uv__req_unregister(req->loop, req); - - if (status == UV_ECANCELED) { - assert(req->result == 0); - req->result = UV_ECANCELED; - } - - req->cb(req); -} - - -int uv_fs_access(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - int flags, - uv_fs_cb cb) { - INIT(ACCESS); - PATH; - req->flags = flags; - POST; -} - - -int uv_fs_chmod(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - int mode, - uv_fs_cb cb) { - INIT(CHMOD); - PATH; - req->mode = mode; - POST; -} - - -int uv_fs_chown(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_uid_t uid, - uv_gid_t gid, - uv_fs_cb cb) { - INIT(CHOWN); - PATH; - req->uid = uid; - req->gid = gid; - POST; -} - - -int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { - INIT(CLOSE); - req->file = file; - POST; -} - - -int uv_fs_fchmod(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - int mode, - uv_fs_cb cb) { - INIT(FCHMOD); - req->file = file; - req->mode = mode; - POST; -} - - -int uv_fs_fchown(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - uv_uid_t uid, - uv_gid_t gid, - uv_fs_cb cb) { - INIT(FCHOWN); - req->file = file; - req->uid = uid; - req->gid = gid; - POST; -} - - -int uv_fs_lchown(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_uid_t uid, - uv_gid_t gid, - uv_fs_cb cb) { - INIT(LCHOWN); - PATH; - req->uid = uid; - req->gid = gid; - POST; -} - - -int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { - INIT(FDATASYNC); - req->file = file; - POST; -} - - -int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { - INIT(FSTAT); - req->file = file; - POST; -} - - -int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { - INIT(FSYNC); - req->file = file; - POST; -} - - -int uv_fs_ftruncate(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - int64_t off, - uv_fs_cb cb) { - INIT(FTRUNCATE); - req->file = file; - req->off = off; - POST; -} - - -int uv_fs_futime(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - double atime, - double mtime, - uv_fs_cb cb) { - INIT(FUTIME); - req->file = file; - req->atime = atime; - req->mtime = mtime; - POST; -} - -int uv_fs_lutime(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - double atime, - double mtime, - uv_fs_cb cb) { - INIT(LUTIME); - PATH; - req->atime = atime; - req->mtime = mtime; - POST; -} - - -int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { - INIT(LSTAT); - PATH; - POST; -} - - -int uv_fs_link(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - const char* new_path, - uv_fs_cb cb) { - INIT(LINK); - PATH2; - POST; -} - - -int uv_fs_mkdir(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - int mode, - uv_fs_cb cb) { - INIT(MKDIR); - PATH; - req->mode = mode; - POST; -} - - -int uv_fs_mkdtemp(uv_loop_t* loop, - uv_fs_t* req, - const char* tpl, - uv_fs_cb cb) { - INIT(MKDTEMP); - req->path = uv__strdup(tpl); - if (req->path == NULL) - return UV_ENOMEM; - POST; -} - - -int uv_fs_mkstemp(uv_loop_t* loop, - uv_fs_t* req, - const char* tpl, - uv_fs_cb cb) { - INIT(MKSTEMP); - req->path = uv__strdup(tpl); - if (req->path == NULL) - return UV_ENOMEM; - POST; -} - - -int uv_fs_open(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - int flags, - int mode, - uv_fs_cb cb) { - INIT(OPEN); - PATH; - req->flags = flags; - req->mode = mode; - POST; -} - - -int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, - uv_file file, - const uv_buf_t bufs[], - unsigned int nbufs, - int64_t off, - uv_fs_cb cb) { - INIT(READ); - - if (bufs == NULL || nbufs == 0) - return UV_EINVAL; - - req->file = file; - - req->nbufs = nbufs; - req->bufs = req->bufsml; - if (nbufs > ARRAY_SIZE(req->bufsml)) - req->bufs = uv__malloc(nbufs * sizeof(*bufs)); - - if (req->bufs == NULL) - return UV_ENOMEM; - - memcpy(req->bufs, bufs, nbufs * sizeof(*bufs)); - - req->off = off; - POST; -} - - -int uv_fs_scandir(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - int flags, - uv_fs_cb cb) { - INIT(SCANDIR); - PATH; - req->flags = flags; - POST; -} - -int uv_fs_opendir(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_fs_cb cb) { - INIT(OPENDIR); - PATH; - POST; -} - -int uv_fs_readdir(uv_loop_t* loop, - uv_fs_t* req, - uv_dir_t* dir, - uv_fs_cb cb) { - INIT(READDIR); - - if (dir == NULL || dir->dir == NULL || dir->dirents == NULL) - return UV_EINVAL; - - req->ptr = dir; - POST; -} - -int uv_fs_closedir(uv_loop_t* loop, - uv_fs_t* req, - uv_dir_t* dir, - uv_fs_cb cb) { - INIT(CLOSEDIR); - - if (dir == NULL) - return UV_EINVAL; - - req->ptr = dir; - POST; -} - -int uv_fs_readlink(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_fs_cb cb) { - INIT(READLINK); - PATH; - POST; -} - - -int uv_fs_realpath(uv_loop_t* loop, - uv_fs_t* req, - const char * path, - uv_fs_cb cb) { - INIT(REALPATH); - PATH; - POST; -} - - -int uv_fs_rename(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - const char* new_path, - uv_fs_cb cb) { - INIT(RENAME); - PATH2; - POST; -} - - -int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { - INIT(RMDIR); - PATH; - POST; -} - - -int uv_fs_sendfile(uv_loop_t* loop, - uv_fs_t* req, - uv_file out_fd, - uv_file in_fd, - int64_t off, - size_t len, - uv_fs_cb cb) { - INIT(SENDFILE); - req->flags = in_fd; /* hack */ - req->file = out_fd; - req->off = off; - req->bufsml[0].len = len; - POST; -} - - -int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { - INIT(STAT); - PATH; - POST; -} - - -int uv_fs_symlink(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - const char* new_path, - int flags, - uv_fs_cb cb) { - INIT(SYMLINK); - PATH2; - req->flags = flags; - POST; -} - - -int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { - INIT(UNLINK); - PATH; - POST; -} - - -int uv_fs_utime(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - double atime, - double mtime, - uv_fs_cb cb) { - INIT(UTIME); - PATH; - req->atime = atime; - req->mtime = mtime; - POST; -} - - -int uv_fs_write(uv_loop_t* loop, - uv_fs_t* req, - uv_file file, - const uv_buf_t bufs[], - unsigned int nbufs, - int64_t off, - uv_fs_cb cb) { - INIT(WRITE); - - if (bufs == NULL || nbufs == 0) - return UV_EINVAL; - - req->file = file; - - req->nbufs = nbufs; - req->bufs = req->bufsml; - if (nbufs > ARRAY_SIZE(req->bufsml)) - req->bufs = uv__malloc(nbufs * sizeof(*bufs)); - - if (req->bufs == NULL) - return UV_ENOMEM; - - memcpy(req->bufs, bufs, nbufs * sizeof(*bufs)); - - req->off = off; - POST; -} - - -void uv_fs_req_cleanup(uv_fs_t* req) { - if (req == NULL) - return; - - /* Only necessary for asychronous requests, i.e., requests with a callback. - * Synchronous ones don't copy their arguments and have req->path and - * req->new_path pointing to user-owned memory. UV_FS_MKDTEMP and - * UV_FS_MKSTEMP are the exception to the rule, they always allocate memory. - */ - if (req->path != NULL && - (req->cb != NULL || - req->fs_type == UV_FS_MKDTEMP || req->fs_type == UV_FS_MKSTEMP)) - uv__free((void*) req->path); /* Memory is shared with req->new_path. */ - - req->path = NULL; - req->new_path = NULL; - - if (req->fs_type == UV_FS_READDIR && req->ptr != NULL) - uv__fs_readdir_cleanup(req); - - if (req->fs_type == UV_FS_SCANDIR && req->ptr != NULL) - uv__fs_scandir_cleanup(req); - - if (req->bufs != req->bufsml) - uv__free(req->bufs); - req->bufs = NULL; - - if (req->fs_type != UV_FS_OPENDIR && req->ptr != &req->statbuf) - uv__free(req->ptr); - req->ptr = NULL; -} - - -int uv_fs_copyfile(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - const char* new_path, - int flags, - uv_fs_cb cb) { - INIT(COPYFILE); - - if (flags & ~(UV_FS_COPYFILE_EXCL | - UV_FS_COPYFILE_FICLONE | - UV_FS_COPYFILE_FICLONE_FORCE)) { - return UV_EINVAL; - } - - PATH2; - req->flags = flags; - POST; -} - - -int uv_fs_statfs(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_fs_cb cb) { - INIT(STATFS); - PATH; - POST; -} - -int uv_fs_get_system_error(const uv_fs_t* req) { - return -req->result; -} diff --git a/libuv/src/unix/fsevents.c b/libuv/src/unix/fsevents.c deleted file mode 100644 index bf4f1f6..0000000 --- a/libuv/src/unix/fsevents.c +++ /dev/null @@ -1,916 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#if TARGET_OS_IPHONE || MAC_OS_X_VERSION_MAX_ALLOWED < 1070 - -/* iOS (currently) doesn't provide the FSEvents-API (nor CoreServices) */ -/* macOS prior to 10.7 doesn't provide the full FSEvents API so use kqueue */ - -int uv__fsevents_init(uv_fs_event_t* handle) { - return 0; -} - - -int uv__fsevents_close(uv_fs_event_t* handle) { - return 0; -} - - -void uv__fsevents_loop_delete(uv_loop_t* loop) { -} - -#else /* TARGET_OS_IPHONE */ - -#include "darwin-stub.h" - -#include -#include -#include -#include - -static const int kFSEventsModified = - kFSEventStreamEventFlagItemChangeOwner | - kFSEventStreamEventFlagItemFinderInfoMod | - kFSEventStreamEventFlagItemInodeMetaMod | - kFSEventStreamEventFlagItemModified | - kFSEventStreamEventFlagItemXattrMod; - -static const int kFSEventsRenamed = - kFSEventStreamEventFlagItemCreated | - kFSEventStreamEventFlagItemRemoved | - kFSEventStreamEventFlagItemRenamed; - -static const int kFSEventsSystem = - kFSEventStreamEventFlagUserDropped | - kFSEventStreamEventFlagKernelDropped | - kFSEventStreamEventFlagEventIdsWrapped | - kFSEventStreamEventFlagHistoryDone | - kFSEventStreamEventFlagMount | - kFSEventStreamEventFlagUnmount | - kFSEventStreamEventFlagRootChanged; - -typedef struct uv__fsevents_event_s uv__fsevents_event_t; -typedef struct uv__cf_loop_signal_s uv__cf_loop_signal_t; -typedef struct uv__cf_loop_state_s uv__cf_loop_state_t; - -enum uv__cf_loop_signal_type_e { - kUVCFLoopSignalRegular, - kUVCFLoopSignalClosing -}; -typedef enum uv__cf_loop_signal_type_e uv__cf_loop_signal_type_t; - -struct uv__cf_loop_signal_s { - QUEUE member; - uv_fs_event_t* handle; - uv__cf_loop_signal_type_t type; -}; - -struct uv__fsevents_event_s { - QUEUE member; - int events; - char path[1]; -}; - -struct uv__cf_loop_state_s { - CFRunLoopRef loop; - CFRunLoopSourceRef signal_source; - int fsevent_need_reschedule; - FSEventStreamRef fsevent_stream; - uv_sem_t fsevent_sem; - uv_mutex_t fsevent_mutex; - void* fsevent_handles[2]; - unsigned int fsevent_handle_count; -}; - -/* Forward declarations */ -static void uv__cf_loop_cb(void* arg); -static void* uv__cf_loop_runner(void* arg); -static int uv__cf_loop_signal(uv_loop_t* loop, - uv_fs_event_t* handle, - uv__cf_loop_signal_type_t type); - -/* Lazy-loaded by uv__fsevents_global_init(). */ -static CFArrayRef (*pCFArrayCreate)(CFAllocatorRef, - const void**, - CFIndex, - const CFArrayCallBacks*); -static void (*pCFRelease)(CFTypeRef); -static void (*pCFRunLoopAddSource)(CFRunLoopRef, - CFRunLoopSourceRef, - CFStringRef); -static CFRunLoopRef (*pCFRunLoopGetCurrent)(void); -static void (*pCFRunLoopRemoveSource)(CFRunLoopRef, - CFRunLoopSourceRef, - CFStringRef); -static void (*pCFRunLoopRun)(void); -static CFRunLoopSourceRef (*pCFRunLoopSourceCreate)(CFAllocatorRef, - CFIndex, - CFRunLoopSourceContext*); -static void (*pCFRunLoopSourceSignal)(CFRunLoopSourceRef); -static void (*pCFRunLoopStop)(CFRunLoopRef); -static void (*pCFRunLoopWakeUp)(CFRunLoopRef); -static CFStringRef (*pCFStringCreateWithFileSystemRepresentation)( - CFAllocatorRef, - const char*); -static CFStringEncoding (*pCFStringGetSystemEncoding)(void); -static CFStringRef (*pkCFRunLoopDefaultMode); -static FSEventStreamRef (*pFSEventStreamCreate)(CFAllocatorRef, - FSEventStreamCallback, - FSEventStreamContext*, - CFArrayRef, - FSEventStreamEventId, - CFTimeInterval, - FSEventStreamCreateFlags); -static void (*pFSEventStreamFlushSync)(FSEventStreamRef); -static void (*pFSEventStreamInvalidate)(FSEventStreamRef); -static void (*pFSEventStreamRelease)(FSEventStreamRef); -static void (*pFSEventStreamScheduleWithRunLoop)(FSEventStreamRef, - CFRunLoopRef, - CFStringRef); -static int (*pFSEventStreamStart)(FSEventStreamRef); -static void (*pFSEventStreamStop)(FSEventStreamRef); - -#define UV__FSEVENTS_PROCESS(handle, block) \ - do { \ - QUEUE events; \ - QUEUE* q; \ - uv__fsevents_event_t* event; \ - int err; \ - uv_mutex_lock(&(handle)->cf_mutex); \ - /* Split-off all events and empty original queue */ \ - QUEUE_MOVE(&(handle)->cf_events, &events); \ - /* Get error (if any) and zero original one */ \ - err = (handle)->cf_error; \ - (handle)->cf_error = 0; \ - uv_mutex_unlock(&(handle)->cf_mutex); \ - /* Loop through events, deallocating each after processing */ \ - while (!QUEUE_EMPTY(&events)) { \ - q = QUEUE_HEAD(&events); \ - event = QUEUE_DATA(q, uv__fsevents_event_t, member); \ - QUEUE_REMOVE(q); \ - /* NOTE: Checking uv__is_active() is required here, because handle \ - * callback may close handle and invoking it after it will lead to \ - * incorrect behaviour */ \ - if (!uv__is_closing((handle)) && uv__is_active((handle))) \ - block \ - /* Free allocated data */ \ - uv__free(event); \ - } \ - if (err != 0 && !uv__is_closing((handle)) && uv__is_active((handle))) \ - (handle)->cb((handle), NULL, 0, err); \ - } while (0) - - -/* Runs in UV loop's thread, when there're events to report to handle */ -static void uv__fsevents_cb(uv_async_t* cb) { - uv_fs_event_t* handle; - - handle = cb->data; - - UV__FSEVENTS_PROCESS(handle, { - handle->cb(handle, event->path[0] ? event->path : NULL, event->events, 0); - }); -} - - -/* Runs in CF thread, pushed event into handle's event list */ -static void uv__fsevents_push_event(uv_fs_event_t* handle, - QUEUE* events, - int err) { - assert(events != NULL || err != 0); - uv_mutex_lock(&handle->cf_mutex); - - /* Concatenate two queues */ - if (events != NULL) - QUEUE_ADD(&handle->cf_events, events); - - /* Propagate error */ - if (err != 0) - handle->cf_error = err; - uv_mutex_unlock(&handle->cf_mutex); - - uv_async_send(handle->cf_cb); -} - - -/* Runs in CF thread, when there're events in FSEventStream */ -static void uv__fsevents_event_cb(const FSEventStreamRef streamRef, - void* info, - size_t numEvents, - void* eventPaths, - const FSEventStreamEventFlags eventFlags[], - const FSEventStreamEventId eventIds[]) { - size_t i; - int len; - char** paths; - char* path; - char* pos; - uv_fs_event_t* handle; - QUEUE* q; - uv_loop_t* loop; - uv__cf_loop_state_t* state; - uv__fsevents_event_t* event; - FSEventStreamEventFlags flags; - QUEUE head; - - loop = info; - state = loop->cf_state; - assert(state != NULL); - paths = eventPaths; - - /* For each handle */ - uv_mutex_lock(&state->fsevent_mutex); - QUEUE_FOREACH(q, &state->fsevent_handles) { - handle = QUEUE_DATA(q, uv_fs_event_t, cf_member); - QUEUE_INIT(&head); - - /* Process and filter out events */ - for (i = 0; i < numEvents; i++) { - flags = eventFlags[i]; - - /* Ignore system events */ - if (flags & kFSEventsSystem) - continue; - - path = paths[i]; - len = strlen(path); - - if (handle->realpath_len == 0) - continue; /* This should be unreachable */ - - /* Filter out paths that are outside handle's request */ - if (len < handle->realpath_len) - continue; - - /* Make sure that realpath actually named a directory, - * (unless watching root, which alone keeps a trailing slash on the realpath) - * or that we matched the whole string */ - if (handle->realpath_len != len && - handle->realpath_len > 1 && - path[handle->realpath_len] != '/') - continue; - - if (memcmp(path, handle->realpath, handle->realpath_len) != 0) - continue; - - if (!(handle->realpath_len == 1 && handle->realpath[0] == '/')) { - /* Remove common prefix, unless the watched folder is "/" */ - path += handle->realpath_len; - len -= handle->realpath_len; - - /* Ignore events with path equal to directory itself */ - if (len <= 1 && (flags & kFSEventStreamEventFlagItemIsDir)) - continue; - - if (len == 0) { - /* Since we're using fsevents to watch the file itself, - * realpath == path, and we now need to get the basename of the file back - * (for commonality with other codepaths and platforms). */ - while (len < handle->realpath_len && path[-1] != '/') { - path--; - len++; - } - /* Created and Removed seem to be always set, but don't make sense */ - flags &= ~kFSEventsRenamed; - } else { - /* Skip forward slash */ - path++; - len--; - } - } - - /* Do not emit events from subdirectories (without option set) */ - if ((handle->cf_flags & UV_FS_EVENT_RECURSIVE) == 0 && *path != '\0') { - pos = strchr(path + 1, '/'); - if (pos != NULL) - continue; - } - - event = uv__malloc(sizeof(*event) + len); - if (event == NULL) - break; - - memset(event, 0, sizeof(*event)); - memcpy(event->path, path, len + 1); - event->events = UV_RENAME; - - if (0 == (flags & kFSEventsRenamed)) { - if (0 != (flags & kFSEventsModified) || - 0 == (flags & kFSEventStreamEventFlagItemIsDir)) - event->events = UV_CHANGE; - } - - QUEUE_INSERT_TAIL(&head, &event->member); - } - - if (!QUEUE_EMPTY(&head)) - uv__fsevents_push_event(handle, &head, 0); - } - uv_mutex_unlock(&state->fsevent_mutex); -} - - -/* Runs in CF thread */ -static int uv__fsevents_create_stream(uv_loop_t* loop, CFArrayRef paths) { - uv__cf_loop_state_t* state; - FSEventStreamContext ctx; - FSEventStreamRef ref; - CFAbsoluteTime latency; - FSEventStreamCreateFlags flags; - - /* Initialize context */ - memset(&ctx, 0, sizeof(ctx)); - ctx.info = loop; - - latency = 0.05; - - /* Explanation of selected flags: - * 1. NoDefer - without this flag, events that are happening continuously - * (i.e. each event is happening after time interval less than `latency`, - * counted from previous event), will be deferred and passed to callback - * once they'll either fill whole OS buffer, or when this continuous stream - * will stop (i.e. there'll be delay between events, bigger than - * `latency`). - * Specifying this flag will invoke callback after `latency` time passed - * since event. - * 2. FileEvents - fire callback for file changes too (by default it is firing - * it only for directory changes). - */ - flags = kFSEventStreamCreateFlagNoDefer | kFSEventStreamCreateFlagFileEvents; - - /* - * NOTE: It might sound like a good idea to remember last seen StreamEventId, - * but in reality one dir might have last StreamEventId less than, the other, - * that is being watched now. Which will cause FSEventStream API to report - * changes to files from the past. - */ - ref = pFSEventStreamCreate(NULL, - &uv__fsevents_event_cb, - &ctx, - paths, - kFSEventStreamEventIdSinceNow, - latency, - flags); - assert(ref != NULL); - - state = loop->cf_state; - pFSEventStreamScheduleWithRunLoop(ref, - state->loop, - *pkCFRunLoopDefaultMode); - if (!pFSEventStreamStart(ref)) { - pFSEventStreamInvalidate(ref); - pFSEventStreamRelease(ref); - return UV_EMFILE; - } - - state->fsevent_stream = ref; - return 0; -} - - -/* Runs in CF thread */ -static void uv__fsevents_destroy_stream(uv_loop_t* loop) { - uv__cf_loop_state_t* state; - - state = loop->cf_state; - - if (state->fsevent_stream == NULL) - return; - - /* Stop emitting events */ - pFSEventStreamStop(state->fsevent_stream); - - /* Release stream */ - pFSEventStreamInvalidate(state->fsevent_stream); - pFSEventStreamRelease(state->fsevent_stream); - state->fsevent_stream = NULL; -} - - -/* Runs in CF thread, when there're new fsevent handles to add to stream */ -static void uv__fsevents_reschedule(uv_fs_event_t* handle, - uv__cf_loop_signal_type_t type) { - uv__cf_loop_state_t* state; - QUEUE* q; - uv_fs_event_t* curr; - CFArrayRef cf_paths; - CFStringRef* paths; - unsigned int i; - int err; - unsigned int path_count; - - state = handle->loop->cf_state; - paths = NULL; - cf_paths = NULL; - err = 0; - /* NOTE: `i` is used in deallocation loop below */ - i = 0; - - /* Optimization to prevent O(n^2) time spent when starting to watch - * many files simultaneously - */ - uv_mutex_lock(&state->fsevent_mutex); - if (state->fsevent_need_reschedule == 0) { - uv_mutex_unlock(&state->fsevent_mutex); - goto final; - } - state->fsevent_need_reschedule = 0; - uv_mutex_unlock(&state->fsevent_mutex); - - /* Destroy previous FSEventStream */ - uv__fsevents_destroy_stream(handle->loop); - - /* Any failure below will be a memory failure */ - err = UV_ENOMEM; - - /* Create list of all watched paths */ - uv_mutex_lock(&state->fsevent_mutex); - path_count = state->fsevent_handle_count; - if (path_count != 0) { - paths = uv__malloc(sizeof(*paths) * path_count); - if (paths == NULL) { - uv_mutex_unlock(&state->fsevent_mutex); - goto final; - } - - q = &state->fsevent_handles; - for (; i < path_count; i++) { - q = QUEUE_NEXT(q); - assert(q != &state->fsevent_handles); - curr = QUEUE_DATA(q, uv_fs_event_t, cf_member); - - assert(curr->realpath != NULL); - paths[i] = - pCFStringCreateWithFileSystemRepresentation(NULL, curr->realpath); - if (paths[i] == NULL) { - uv_mutex_unlock(&state->fsevent_mutex); - goto final; - } - } - } - uv_mutex_unlock(&state->fsevent_mutex); - err = 0; - - if (path_count != 0) { - /* Create new FSEventStream */ - cf_paths = pCFArrayCreate(NULL, (const void**) paths, path_count, NULL); - if (cf_paths == NULL) { - err = UV_ENOMEM; - goto final; - } - err = uv__fsevents_create_stream(handle->loop, cf_paths); - } - -final: - /* Deallocate all paths in case of failure */ - if (err != 0) { - if (cf_paths == NULL) { - while (i != 0) - pCFRelease(paths[--i]); - uv__free(paths); - } else { - /* CFArray takes ownership of both strings and original C-array */ - pCFRelease(cf_paths); - } - - /* Broadcast error to all handles */ - uv_mutex_lock(&state->fsevent_mutex); - QUEUE_FOREACH(q, &state->fsevent_handles) { - curr = QUEUE_DATA(q, uv_fs_event_t, cf_member); - uv__fsevents_push_event(curr, NULL, err); - } - uv_mutex_unlock(&state->fsevent_mutex); - } - - /* - * Main thread will block until the removal of handle from the list, - * we must tell it when we're ready. - * - * NOTE: This is coupled with `uv_sem_wait()` in `uv__fsevents_close` - */ - if (type == kUVCFLoopSignalClosing) - uv_sem_post(&state->fsevent_sem); -} - - -static int uv__fsevents_global_init(void) { - static pthread_mutex_t global_init_mutex = PTHREAD_MUTEX_INITIALIZER; - static void* core_foundation_handle; - static void* core_services_handle; - int err; - - err = 0; - pthread_mutex_lock(&global_init_mutex); - if (core_foundation_handle != NULL) - goto out; - - /* The libraries are never unloaded because we currently don't have a good - * mechanism for keeping a reference count. It's unlikely to be an issue - * but if it ever becomes one, we can turn the dynamic library handles into - * per-event loop properties and have the dynamic linker keep track for us. - */ - err = UV_ENOSYS; - core_foundation_handle = dlopen("/System/Library/Frameworks/" - "CoreFoundation.framework/" - "Versions/A/CoreFoundation", - RTLD_LAZY | RTLD_LOCAL); - if (core_foundation_handle == NULL) - goto out; - - core_services_handle = dlopen("/System/Library/Frameworks/" - "CoreServices.framework/" - "Versions/A/CoreServices", - RTLD_LAZY | RTLD_LOCAL); - if (core_services_handle == NULL) - goto out; - - err = UV_ENOENT; -#define V(handle, symbol) \ - do { \ - *(void **)(&p ## symbol) = dlsym((handle), #symbol); \ - if (p ## symbol == NULL) \ - goto out; \ - } \ - while (0) - V(core_foundation_handle, CFArrayCreate); - V(core_foundation_handle, CFRelease); - V(core_foundation_handle, CFRunLoopAddSource); - V(core_foundation_handle, CFRunLoopGetCurrent); - V(core_foundation_handle, CFRunLoopRemoveSource); - V(core_foundation_handle, CFRunLoopRun); - V(core_foundation_handle, CFRunLoopSourceCreate); - V(core_foundation_handle, CFRunLoopSourceSignal); - V(core_foundation_handle, CFRunLoopStop); - V(core_foundation_handle, CFRunLoopWakeUp); - V(core_foundation_handle, CFStringCreateWithFileSystemRepresentation); - V(core_foundation_handle, CFStringGetSystemEncoding); - V(core_foundation_handle, kCFRunLoopDefaultMode); - V(core_services_handle, FSEventStreamCreate); - V(core_services_handle, FSEventStreamFlushSync); - V(core_services_handle, FSEventStreamInvalidate); - V(core_services_handle, FSEventStreamRelease); - V(core_services_handle, FSEventStreamScheduleWithRunLoop); - V(core_services_handle, FSEventStreamStart); - V(core_services_handle, FSEventStreamStop); -#undef V - err = 0; - -out: - if (err && core_services_handle != NULL) { - dlclose(core_services_handle); - core_services_handle = NULL; - } - - if (err && core_foundation_handle != NULL) { - dlclose(core_foundation_handle); - core_foundation_handle = NULL; - } - - pthread_mutex_unlock(&global_init_mutex); - return err; -} - - -/* Runs in UV loop */ -static int uv__fsevents_loop_init(uv_loop_t* loop) { - CFRunLoopSourceContext ctx; - uv__cf_loop_state_t* state; - pthread_attr_t attr; - int err; - - if (loop->cf_state != NULL) - return 0; - - err = uv__fsevents_global_init(); - if (err) - return err; - - state = uv__calloc(1, sizeof(*state)); - if (state == NULL) - return UV_ENOMEM; - - err = uv_mutex_init(&loop->cf_mutex); - if (err) - goto fail_mutex_init; - - err = uv_sem_init(&loop->cf_sem, 0); - if (err) - goto fail_sem_init; - - QUEUE_INIT(&loop->cf_signals); - - err = uv_sem_init(&state->fsevent_sem, 0); - if (err) - goto fail_fsevent_sem_init; - - err = uv_mutex_init(&state->fsevent_mutex); - if (err) - goto fail_fsevent_mutex_init; - - QUEUE_INIT(&state->fsevent_handles); - state->fsevent_need_reschedule = 0; - state->fsevent_handle_count = 0; - - memset(&ctx, 0, sizeof(ctx)); - ctx.info = loop; - ctx.perform = uv__cf_loop_cb; - state->signal_source = pCFRunLoopSourceCreate(NULL, 0, &ctx); - if (state->signal_source == NULL) { - err = UV_ENOMEM; - goto fail_signal_source_create; - } - - if (pthread_attr_init(&attr)) - abort(); - - if (pthread_attr_setstacksize(&attr, uv__thread_stack_size())) - abort(); - - loop->cf_state = state; - - /* uv_thread_t is an alias for pthread_t. */ - err = UV__ERR(pthread_create(&loop->cf_thread, &attr, uv__cf_loop_runner, loop)); - - if (pthread_attr_destroy(&attr)) - abort(); - - if (err) - goto fail_thread_create; - - /* Synchronize threads */ - uv_sem_wait(&loop->cf_sem); - return 0; - -fail_thread_create: - loop->cf_state = NULL; - -fail_signal_source_create: - uv_mutex_destroy(&state->fsevent_mutex); - -fail_fsevent_mutex_init: - uv_sem_destroy(&state->fsevent_sem); - -fail_fsevent_sem_init: - uv_sem_destroy(&loop->cf_sem); - -fail_sem_init: - uv_mutex_destroy(&loop->cf_mutex); - -fail_mutex_init: - uv__free(state); - return err; -} - - -/* Runs in UV loop */ -void uv__fsevents_loop_delete(uv_loop_t* loop) { - uv__cf_loop_signal_t* s; - uv__cf_loop_state_t* state; - QUEUE* q; - - if (loop->cf_state == NULL) - return; - - if (uv__cf_loop_signal(loop, NULL, kUVCFLoopSignalRegular) != 0) - abort(); - - uv_thread_join(&loop->cf_thread); - uv_sem_destroy(&loop->cf_sem); - uv_mutex_destroy(&loop->cf_mutex); - - /* Free any remaining data */ - while (!QUEUE_EMPTY(&loop->cf_signals)) { - q = QUEUE_HEAD(&loop->cf_signals); - s = QUEUE_DATA(q, uv__cf_loop_signal_t, member); - QUEUE_REMOVE(q); - uv__free(s); - } - - /* Destroy state */ - state = loop->cf_state; - uv_sem_destroy(&state->fsevent_sem); - uv_mutex_destroy(&state->fsevent_mutex); - pCFRelease(state->signal_source); - uv__free(state); - loop->cf_state = NULL; -} - - -/* Runs in CF thread. This is the CF loop's body */ -static void* uv__cf_loop_runner(void* arg) { - uv_loop_t* loop; - uv__cf_loop_state_t* state; - - loop = arg; - state = loop->cf_state; - state->loop = pCFRunLoopGetCurrent(); - - pCFRunLoopAddSource(state->loop, - state->signal_source, - *pkCFRunLoopDefaultMode); - - uv_sem_post(&loop->cf_sem); - - pCFRunLoopRun(); - pCFRunLoopRemoveSource(state->loop, - state->signal_source, - *pkCFRunLoopDefaultMode); - - state->loop = NULL; - - return NULL; -} - - -/* Runs in CF thread, executed after `uv__cf_loop_signal()` */ -static void uv__cf_loop_cb(void* arg) { - uv_loop_t* loop; - uv__cf_loop_state_t* state; - QUEUE* item; - QUEUE split_head; - uv__cf_loop_signal_t* s; - - loop = arg; - state = loop->cf_state; - - uv_mutex_lock(&loop->cf_mutex); - QUEUE_MOVE(&loop->cf_signals, &split_head); - uv_mutex_unlock(&loop->cf_mutex); - - while (!QUEUE_EMPTY(&split_head)) { - item = QUEUE_HEAD(&split_head); - QUEUE_REMOVE(item); - - s = QUEUE_DATA(item, uv__cf_loop_signal_t, member); - - /* This was a termination signal */ - if (s->handle == NULL) - pCFRunLoopStop(state->loop); - else - uv__fsevents_reschedule(s->handle, s->type); - - uv__free(s); - } -} - - -/* Runs in UV loop to notify CF thread */ -int uv__cf_loop_signal(uv_loop_t* loop, - uv_fs_event_t* handle, - uv__cf_loop_signal_type_t type) { - uv__cf_loop_signal_t* item; - uv__cf_loop_state_t* state; - - item = uv__malloc(sizeof(*item)); - if (item == NULL) - return UV_ENOMEM; - - item->handle = handle; - item->type = type; - - uv_mutex_lock(&loop->cf_mutex); - QUEUE_INSERT_TAIL(&loop->cf_signals, &item->member); - - state = loop->cf_state; - assert(state != NULL); - pCFRunLoopSourceSignal(state->signal_source); - pCFRunLoopWakeUp(state->loop); - - uv_mutex_unlock(&loop->cf_mutex); - - return 0; -} - - -/* Runs in UV loop to initialize handle */ -int uv__fsevents_init(uv_fs_event_t* handle) { - int err; - uv__cf_loop_state_t* state; - - err = uv__fsevents_loop_init(handle->loop); - if (err) - return err; - - /* Get absolute path to file */ - handle->realpath = realpath(handle->path, NULL); - if (handle->realpath == NULL) - return UV__ERR(errno); - handle->realpath_len = strlen(handle->realpath); - - /* Initialize event queue */ - QUEUE_INIT(&handle->cf_events); - handle->cf_error = 0; - - /* - * Events will occur in other thread. - * Initialize callback for getting them back into event loop's thread - */ - handle->cf_cb = uv__malloc(sizeof(*handle->cf_cb)); - if (handle->cf_cb == NULL) { - err = UV_ENOMEM; - goto fail_cf_cb_malloc; - } - - handle->cf_cb->data = handle; - uv_async_init(handle->loop, handle->cf_cb, uv__fsevents_cb); - handle->cf_cb->flags |= UV_HANDLE_INTERNAL; - uv_unref((uv_handle_t*) handle->cf_cb); - - err = uv_mutex_init(&handle->cf_mutex); - if (err) - goto fail_cf_mutex_init; - - /* Insert handle into the list */ - state = handle->loop->cf_state; - uv_mutex_lock(&state->fsevent_mutex); - QUEUE_INSERT_TAIL(&state->fsevent_handles, &handle->cf_member); - state->fsevent_handle_count++; - state->fsevent_need_reschedule = 1; - uv_mutex_unlock(&state->fsevent_mutex); - - /* Reschedule FSEventStream */ - assert(handle != NULL); - err = uv__cf_loop_signal(handle->loop, handle, kUVCFLoopSignalRegular); - if (err) - goto fail_loop_signal; - - return 0; - -fail_loop_signal: - uv_mutex_destroy(&handle->cf_mutex); - -fail_cf_mutex_init: - uv__free(handle->cf_cb); - handle->cf_cb = NULL; - -fail_cf_cb_malloc: - uv__free(handle->realpath); - handle->realpath = NULL; - handle->realpath_len = 0; - - return err; -} - - -/* Runs in UV loop to de-initialize handle */ -int uv__fsevents_close(uv_fs_event_t* handle) { - int err; - uv__cf_loop_state_t* state; - - if (handle->cf_cb == NULL) - return UV_EINVAL; - - /* Remove handle from the list */ - state = handle->loop->cf_state; - uv_mutex_lock(&state->fsevent_mutex); - QUEUE_REMOVE(&handle->cf_member); - state->fsevent_handle_count--; - state->fsevent_need_reschedule = 1; - uv_mutex_unlock(&state->fsevent_mutex); - - /* Reschedule FSEventStream */ - assert(handle != NULL); - err = uv__cf_loop_signal(handle->loop, handle, kUVCFLoopSignalClosing); - if (err) - return UV__ERR(err); - - /* Wait for deinitialization */ - uv_sem_wait(&state->fsevent_sem); - - uv_close((uv_handle_t*) handle->cf_cb, (uv_close_cb) uv__free); - handle->cf_cb = NULL; - - /* Free data in queue */ - UV__FSEVENTS_PROCESS(handle, { - /* NOP */ - }); - - uv_mutex_destroy(&handle->cf_mutex); - uv__free(handle->realpath); - handle->realpath = NULL; - handle->realpath_len = 0; - - return 0; -} - -#endif /* TARGET_OS_IPHONE */ diff --git a/libuv/src/unix/getaddrinfo.c b/libuv/src/unix/getaddrinfo.c deleted file mode 100644 index 77337ac..0000000 --- a/libuv/src/unix/getaddrinfo.c +++ /dev/null @@ -1,252 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* Expose glibc-specific EAI_* error codes. Needs to be defined before we - * include any headers. - */ - -#include "uv.h" -#include "internal.h" -#include "idna.h" - -#include -#include /* NULL */ -#include -#include -#include /* if_indextoname() */ - -/* EAI_* constants. */ -#include - - -int uv__getaddrinfo_translate_error(int sys_err) { - switch (sys_err) { - case 0: return 0; -#if defined(EAI_ADDRFAMILY) - case EAI_ADDRFAMILY: return UV_EAI_ADDRFAMILY; -#endif -#if defined(EAI_AGAIN) - case EAI_AGAIN: return UV_EAI_AGAIN; -#endif -#if defined(EAI_BADFLAGS) - case EAI_BADFLAGS: return UV_EAI_BADFLAGS; -#endif -#if defined(EAI_BADHINTS) - case EAI_BADHINTS: return UV_EAI_BADHINTS; -#endif -#if defined(EAI_CANCELED) - case EAI_CANCELED: return UV_EAI_CANCELED; -#endif -#if defined(EAI_FAIL) - case EAI_FAIL: return UV_EAI_FAIL; -#endif -#if defined(EAI_FAMILY) - case EAI_FAMILY: return UV_EAI_FAMILY; -#endif -#if defined(EAI_MEMORY) - case EAI_MEMORY: return UV_EAI_MEMORY; -#endif -#if defined(EAI_NODATA) - case EAI_NODATA: return UV_EAI_NODATA; -#endif -#if defined(EAI_NONAME) -# if !defined(EAI_NODATA) || EAI_NODATA != EAI_NONAME - case EAI_NONAME: return UV_EAI_NONAME; -# endif -#endif -#if defined(EAI_OVERFLOW) - case EAI_OVERFLOW: return UV_EAI_OVERFLOW; -#endif -#if defined(EAI_PROTOCOL) - case EAI_PROTOCOL: return UV_EAI_PROTOCOL; -#endif -#if defined(EAI_SERVICE) - case EAI_SERVICE: return UV_EAI_SERVICE; -#endif -#if defined(EAI_SOCKTYPE) - case EAI_SOCKTYPE: return UV_EAI_SOCKTYPE; -#endif -#if defined(EAI_SYSTEM) - case EAI_SYSTEM: return UV__ERR(errno); -#endif - } - assert(!"unknown EAI_* error code"); - abort(); -#ifndef __SUNPRO_C - return 0; /* Pacify compiler. */ -#endif -} - - -static void uv__getaddrinfo_work(struct uv__work* w) { - uv_getaddrinfo_t* req; - int err; - - req = container_of(w, uv_getaddrinfo_t, work_req); - err = getaddrinfo(req->hostname, req->service, req->hints, &req->addrinfo); - req->retcode = uv__getaddrinfo_translate_error(err); -} - - -static void uv__getaddrinfo_done(struct uv__work* w, int status) { - uv_getaddrinfo_t* req; - - req = container_of(w, uv_getaddrinfo_t, work_req); - uv__req_unregister(req->loop, req); - - /* See initialization in uv_getaddrinfo(). */ - if (req->hints) - uv__free(req->hints); - else if (req->service) - uv__free(req->service); - else if (req->hostname) - uv__free(req->hostname); - else - assert(0); - - req->hints = NULL; - req->service = NULL; - req->hostname = NULL; - - if (status == UV_ECANCELED) { - assert(req->retcode == 0); - req->retcode = UV_EAI_CANCELED; - } - - if (req->cb) - req->cb(req, req->retcode, req->addrinfo); -} - - -int uv_getaddrinfo(uv_loop_t* loop, - uv_getaddrinfo_t* req, - uv_getaddrinfo_cb cb, - const char* hostname, - const char* service, - const struct addrinfo* hints) { - char hostname_ascii[256]; - size_t hostname_len; - size_t service_len; - size_t hints_len; - size_t len; - char* buf; - long rc; - - if (req == NULL || (hostname == NULL && service == NULL)) - return UV_EINVAL; - - /* FIXME(bnoordhuis) IDNA does not seem to work z/OS, - * probably because it uses EBCDIC rather than ASCII. - */ -#ifdef __MVS__ - (void) &hostname_ascii; -#else - if (hostname != NULL) { - rc = uv__idna_toascii(hostname, - hostname + strlen(hostname), - hostname_ascii, - hostname_ascii + sizeof(hostname_ascii)); - if (rc < 0) - return rc; - hostname = hostname_ascii; - } -#endif - - hostname_len = hostname ? strlen(hostname) + 1 : 0; - service_len = service ? strlen(service) + 1 : 0; - hints_len = hints ? sizeof(*hints) : 0; - buf = uv__malloc(hostname_len + service_len + hints_len); - - if (buf == NULL) - return UV_ENOMEM; - - uv__req_init(loop, req, UV_GETADDRINFO); - req->loop = loop; - req->cb = cb; - req->addrinfo = NULL; - req->hints = NULL; - req->service = NULL; - req->hostname = NULL; - req->retcode = 0; - - /* order matters, see uv_getaddrinfo_done() */ - len = 0; - - if (hints) { - req->hints = memcpy(buf + len, hints, sizeof(*hints)); - len += sizeof(*hints); - } - - if (service) { - req->service = memcpy(buf + len, service, service_len); - len += service_len; - } - - if (hostname) - req->hostname = memcpy(buf + len, hostname, hostname_len); - - if (cb) { - uv__work_submit(loop, - &req->work_req, - UV__WORK_SLOW_IO, - uv__getaddrinfo_work, - uv__getaddrinfo_done); - return 0; - } else { - uv__getaddrinfo_work(&req->work_req); - uv__getaddrinfo_done(&req->work_req, 0); - return req->retcode; - } -} - - -void uv_freeaddrinfo(struct addrinfo* ai) { - if (ai) - freeaddrinfo(ai); -} - - -int uv_if_indextoname(unsigned int ifindex, char* buffer, size_t* size) { - char ifname_buf[UV_IF_NAMESIZE]; - size_t len; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - if (if_indextoname(ifindex, ifname_buf) == NULL) - return UV__ERR(errno); - - len = strnlen(ifname_buf, sizeof(ifname_buf)); - - if (*size <= len) { - *size = len + 1; - return UV_ENOBUFS; - } - - memcpy(buffer, ifname_buf, len); - buffer[len] = '\0'; - *size = len; - - return 0; -} - -int uv_if_indextoiid(unsigned int ifindex, char* buffer, size_t* size) { - return uv_if_indextoname(ifindex, buffer, size); -} diff --git a/libuv/src/unix/getnameinfo.c b/libuv/src/unix/getnameinfo.c deleted file mode 100644 index 991002a..0000000 --- a/libuv/src/unix/getnameinfo.c +++ /dev/null @@ -1,121 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to -* deal in the Software without restriction, including without limitation the -* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -* sell copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -* IN THE SOFTWARE. -*/ - -#include -#include -#include -#include - -#include "uv.h" -#include "internal.h" - - -static void uv__getnameinfo_work(struct uv__work* w) { - uv_getnameinfo_t* req; - int err; - socklen_t salen; - - req = container_of(w, uv_getnameinfo_t, work_req); - - if (req->storage.ss_family == AF_INET) - salen = sizeof(struct sockaddr_in); - else if (req->storage.ss_family == AF_INET6) - salen = sizeof(struct sockaddr_in6); - else - abort(); - - err = getnameinfo((struct sockaddr*) &req->storage, - salen, - req->host, - sizeof(req->host), - req->service, - sizeof(req->service), - req->flags); - req->retcode = uv__getaddrinfo_translate_error(err); -} - -static void uv__getnameinfo_done(struct uv__work* w, int status) { - uv_getnameinfo_t* req; - char* host; - char* service; - - req = container_of(w, uv_getnameinfo_t, work_req); - uv__req_unregister(req->loop, req); - host = service = NULL; - - if (status == UV_ECANCELED) { - assert(req->retcode == 0); - req->retcode = UV_EAI_CANCELED; - } else if (req->retcode == 0) { - host = req->host; - service = req->service; - } - - if (req->getnameinfo_cb) - req->getnameinfo_cb(req, req->retcode, host, service); -} - -/* -* Entry point for getnameinfo -* return 0 if a callback will be made -* return error code if validation fails -*/ -int uv_getnameinfo(uv_loop_t* loop, - uv_getnameinfo_t* req, - uv_getnameinfo_cb getnameinfo_cb, - const struct sockaddr* addr, - int flags) { - if (req == NULL || addr == NULL) - return UV_EINVAL; - - if (addr->sa_family == AF_INET) { - memcpy(&req->storage, - addr, - sizeof(struct sockaddr_in)); - } else if (addr->sa_family == AF_INET6) { - memcpy(&req->storage, - addr, - sizeof(struct sockaddr_in6)); - } else { - return UV_EINVAL; - } - - uv__req_init(loop, (uv_req_t*)req, UV_GETNAMEINFO); - - req->getnameinfo_cb = getnameinfo_cb; - req->flags = flags; - req->type = UV_GETNAMEINFO; - req->loop = loop; - req->retcode = 0; - - if (getnameinfo_cb) { - uv__work_submit(loop, - &req->work_req, - UV__WORK_SLOW_IO, - uv__getnameinfo_work, - uv__getnameinfo_done); - return 0; - } else { - uv__getnameinfo_work(&req->work_req); - uv__getnameinfo_done(&req->work_req, 0); - return req->retcode; - } -} diff --git a/libuv/src/unix/haiku.c b/libuv/src/unix/haiku.c deleted file mode 100644 index cf17d83..0000000 --- a/libuv/src/unix/haiku.c +++ /dev/null @@ -1,167 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include /* find_path() */ -#include - - -void uv_loadavg(double avg[3]) { - avg[0] = 0; - avg[1] = 0; - avg[2] = 0; -} - - -int uv_exepath(char* buffer, size_t* size) { - char abspath[B_PATH_NAME_LENGTH]; - status_t status; - ssize_t abspath_len; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - status = find_path(B_APP_IMAGE_SYMBOL, B_FIND_PATH_IMAGE_PATH, NULL, abspath, - sizeof(abspath)); - if (status != B_OK) - return UV__ERR(status); - - abspath_len = uv__strscpy(buffer, abspath, *size); - *size -= 1; - if (abspath_len >= 0 && *size > (size_t)abspath_len) - *size = (size_t)abspath_len; - - return 0; -} - - -uint64_t uv_get_free_memory(void) { - status_t status; - system_info sinfo; - - status = get_system_info(&sinfo); - if (status != B_OK) - return 0; - - return (sinfo.max_pages - sinfo.used_pages) * B_PAGE_SIZE; -} - - -uint64_t uv_get_total_memory(void) { - status_t status; - system_info sinfo; - - status = get_system_info(&sinfo); - if (status != B_OK) - return 0; - - return sinfo.max_pages * B_PAGE_SIZE; -} - - -uint64_t uv_get_constrained_memory(void) { - return 0; /* Memory constraints are unknown. */ -} - - -int uv_resident_set_memory(size_t* rss) { - area_info area; - ssize_t cookie; - status_t status; - thread_info thread; - - status = get_thread_info(find_thread(NULL), &thread); - if (status != B_OK) - return UV__ERR(status); - - cookie = 0; - *rss = 0; - while (get_next_area_info(thread.team, &cookie, &area) == B_OK) - *rss += area.ram_size; - - return 0; -} - - -int uv_uptime(double* uptime) { - /* system_time() returns time since booting in microseconds */ - *uptime = (double)system_time() / 1000000; - return 0; -} - - -int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { - cpu_topology_node_info* topology_infos; - int i; - status_t status; - system_info system; - uint32_t topology_count; - uint64_t cpuspeed; - uv_cpu_info_t* cpu_info; - - if (cpu_infos == NULL || count == NULL) - return UV_EINVAL; - - status = get_cpu_topology_info(NULL, &topology_count); - if (status != B_OK) - return UV__ERR(status); - - topology_infos = uv__malloc(topology_count * sizeof(*topology_infos)); - if (topology_infos == NULL) - return UV_ENOMEM; - - status = get_cpu_topology_info(topology_infos, &topology_count); - if (status != B_OK) { - uv__free(topology_infos); - return UV__ERR(status); - } - - cpuspeed = 0; - for (i = 0; i < (int)topology_count; i++) { - if (topology_infos[i].type == B_TOPOLOGY_CORE) { - cpuspeed = topology_infos[i].data.core.default_frequency; - break; - } - } - - uv__free(topology_infos); - - status = get_system_info(&system); - if (status != B_OK) - return UV__ERR(status); - - *cpu_infos = uv__calloc(system.cpu_count, sizeof(**cpu_infos)); - if (*cpu_infos == NULL) - return UV_ENOMEM; - - /* CPU time and model are not exposed by Haiku. */ - cpu_info = *cpu_infos; - for (i = 0; i < (int)system.cpu_count; i++) { - cpu_info->model = uv__strdup("unknown"); - cpu_info->speed = (int)(cpuspeed / 1000000); - cpu_info++; - } - *count = system.cpu_count; - - return 0; -} diff --git a/libuv/src/unix/ibmi.c b/libuv/src/unix/ibmi.c deleted file mode 100644 index 8c6ae63..0000000 --- a/libuv/src/unix/ibmi.c +++ /dev/null @@ -1,537 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -#include -#include - -char* original_exepath = NULL; -uv_mutex_t process_title_mutex; -uv_once_t process_title_mutex_once = UV_ONCE_INIT; - -typedef struct { - int bytes_available; - int bytes_returned; - char current_date_and_time[8]; - char system_name[8]; - char elapsed_time[6]; - char restricted_state_flag; - char reserved; - int percent_processing_unit_used; - int jobs_in_system; - int percent_permanent_addresses; - int percent_temporary_addresses; - int system_asp; - int percent_system_asp_used; - int total_auxiliary_storage; - int current_unprotected_storage_used; - int maximum_unprotected_storage_used; - int percent_db_capability; - int main_storage_size; - int number_of_partitions; - int partition_identifier; - int reserved1; - int current_processing_capacity; - char processor_sharing_attribute; - char reserved2[3]; - int number_of_processors; - int active_jobs_in_system; - int active_threads_in_system; - int maximum_jobs_in_system; - int percent_temporary_256mb_segments_used; - int percent_temporary_4gb_segments_used; - int percent_permanent_256mb_segments_used; - int percent_permanent_4gb_segments_used; - int percent_current_interactive_performance; - int percent_uncapped_cpu_capacity_used; - int percent_shared_processor_pool_used; - long main_storage_size_long; -} SSTS0200; - - -typedef struct { - char header[208]; - unsigned char loca_adapter_address[12]; -} LIND0500; - - -typedef struct { - int bytes_provided; - int bytes_available; - char msgid[7]; -} errcode_s; - - -static const unsigned char e2a[256] = { - 0, 1, 2, 3, 156, 9, 134, 127, 151, 141, 142, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 157, 133, 8, 135, 24, 25, 146, 143, 28, 29, 30, 31, - 128, 129, 130, 131, 132, 10, 23, 27, 136, 137, 138, 139, 140, 5, 6, 7, - 144, 145, 22, 147, 148, 149, 150, 4, 152, 153, 154, 155, 20, 21, 158, 26, - 32, 160, 161, 162, 163, 164, 165, 166, 167, 168, 91, 46, 60, 40, 43, 33, - 38, 169, 170, 171, 172, 173, 174, 175, 176, 177, 93, 36, 42, 41, 59, 94, - 45, 47, 178, 179, 180, 181, 182, 183, 184, 185, 124, 44, 37, 95, 62, 63, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 96, 58, 35, 64, 39, 61, 34, - 195, 97, 98, 99, 100, 101, 102, 103, 104, 105, 196, 197, 198, 199, 200, 201, - 202, 106, 107, 108, 109, 110, 111, 112, 113, 114, 203, 204, 205, 206, 207, 208, - 209, 126, 115, 116, 117, 118, 119, 120, 121, 122, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 123, 65, 66, 67, 68, 69, 70, 71, 72, 73, 232, 233, 234, 235, 236, 237, - 125, 74, 75, 76, 77, 78, 79, 80, 81, 82, 238, 239, 240, 241, 242, 243, - 92, 159, 83, 84, 85, 86, 87, 88, 89, 90, 244, 245, 246, 247, 248, 249, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 250, 251, 252, 253, 254, 255}; - - -static const unsigned char a2e[256] = { - 0, 1, 2, 3, 55, 45, 46, 47, 22, 5, 37, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 60, 61, 50, 38, 24, 25, 63, 39, 28, 29, 30, 31, - 64, 79, 127, 123, 91, 108, 80, 125, 77, 93, 92, 78, 107, 96, 75, 97, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 122, 94, 76, 126, 110, 111, - 124, 193, 194, 195, 196, 197, 198, 199, 200, 201, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 226, 227, 228, 229, 230, 231, 232, 233, 74, 224, 90, 95, 109, - 121, 129, 130, 131, 132, 133, 134, 135, 136, 137, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 162, 163, 164, 165, 166, 167, 168, 169, 192, 106, 208, 161, 7, - 32, 33, 34, 35, 36, 21, 6, 23, 40, 41, 42, 43, 44, 9, 10, 27, - 48, 49, 26, 51, 52, 53, 54, 8, 56, 57, 58, 59, 4, 20, 62, 225, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 98, 99, 100, 101, 102, 103, 104, 105, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 128, 138, 139, 140, 141, 142, 143, 144, 154, 155, 156, 157, 158, - 159, 160, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 202, 203, 204, 205, 206, 207, 218, 219, - 220, 221, 222, 223, 234, 235, 236, 237, 238, 239, 250, 251, 252, 253, 254, 255}; - - -static void iconv_e2a(unsigned char src[], unsigned char dst[], size_t length) { - size_t i; - for (i = 0; i < length; i++) - dst[i] = e2a[src[i]]; -} - - -static void iconv_a2e(const char* src, unsigned char dst[], size_t length) { - size_t srclen; - size_t i; - - srclen = strlen(src); - if (srclen > length) - srclen = length; - for (i = 0; i < srclen; i++) - dst[i] = a2e[src[i]]; - /* padding the remaining part with spaces */ - for (; i < length; i++) - dst[i] = a2e[' ']; -} - -void init_process_title_mutex_once(void) { - uv_mutex_init(&process_title_mutex); -} - -static int get_ibmi_system_status(SSTS0200* rcvr) { - /* rcvrlen is input parameter 2 to QWCRSSTS */ - unsigned int rcvrlen = sizeof(*rcvr); - unsigned char format[8], reset_status[10]; - - /* format is input parameter 3 to QWCRSSTS */ - iconv_a2e("SSTS0200", format, sizeof(format)); - /* reset_status is input parameter 4 */ - iconv_a2e("*NO", reset_status, sizeof(reset_status)); - - /* errcode is input parameter 5 to QWCRSSTS */ - errcode_s errcode; - - /* qwcrssts_pointer is the 16-byte tagged system pointer to QWCRSSTS */ - ILEpointer __attribute__((aligned(16))) qwcrssts_pointer; - - /* qwcrssts_argv is the array of argument pointers to QWCRSSTS */ - void* qwcrssts_argv[6]; - - /* Set the IBM i pointer to the QSYS/QWCRSSTS *PGM object */ - int rc = _RSLOBJ2(&qwcrssts_pointer, RSLOBJ_TS_PGM, "QWCRSSTS", "QSYS"); - - if (rc != 0) - return rc; - - /* initialize the QWCRSSTS returned info structure */ - memset(rcvr, 0, sizeof(*rcvr)); - - /* initialize the QWCRSSTS error code structure */ - memset(&errcode, 0, sizeof(errcode)); - errcode.bytes_provided = sizeof(errcode); - - /* initialize the array of argument pointers for the QWCRSSTS API */ - qwcrssts_argv[0] = rcvr; - qwcrssts_argv[1] = &rcvrlen; - qwcrssts_argv[2] = &format; - qwcrssts_argv[3] = &reset_status; - qwcrssts_argv[4] = &errcode; - qwcrssts_argv[5] = NULL; - - /* Call the IBM i QWCRSSTS API from PASE */ - rc = _PGMCALL(&qwcrssts_pointer, qwcrssts_argv, 0); - - return rc; -} - - -uint64_t uv_get_free_memory(void) { - SSTS0200 rcvr; - - if (get_ibmi_system_status(&rcvr)) - return 0; - - return (uint64_t)rcvr.main_storage_size * 1024ULL; -} - - -uint64_t uv_get_total_memory(void) { - SSTS0200 rcvr; - - if (get_ibmi_system_status(&rcvr)) - return 0; - - return (uint64_t)rcvr.main_storage_size * 1024ULL; -} - - -uint64_t uv_get_constrained_memory(void) { - return 0; /* Memory constraints are unknown. */ -} - - -void uv_loadavg(double avg[3]) { - SSTS0200 rcvr; - - if (get_ibmi_system_status(&rcvr)) { - avg[0] = avg[1] = avg[2] = 0; - return; - } - - /* The average (in tenths) of the elapsed time during which the processing - * units were in use. For example, a value of 411 in binary would be 41.1%. - * This percentage could be greater than 100% for an uncapped partition. - */ - double processing_unit_used_percent = - rcvr.percent_processing_unit_used / 1000.0; - - avg[0] = avg[1] = avg[2] = processing_unit_used_percent; -} - - -int uv_resident_set_memory(size_t* rss) { - *rss = 0; - return 0; -} - - -int uv_uptime(double* uptime) { - return UV_ENOSYS; -} - - -int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { - unsigned int numcpus, idx = 0; - uv_cpu_info_t* cpu_info; - - *cpu_infos = NULL; - *count = 0; - - numcpus = sysconf(_SC_NPROCESSORS_ONLN); - - *cpu_infos = uv__malloc(numcpus * sizeof(uv_cpu_info_t)); - if (!*cpu_infos) { - return UV_ENOMEM; - } - - cpu_info = *cpu_infos; - for (idx = 0; idx < numcpus; idx++) { - cpu_info->speed = 0; - cpu_info->model = uv__strdup("unknown"); - cpu_info->cpu_times.user = 0; - cpu_info->cpu_times.sys = 0; - cpu_info->cpu_times.idle = 0; - cpu_info->cpu_times.irq = 0; - cpu_info->cpu_times.nice = 0; - cpu_info++; - } - *count = numcpus; - - return 0; -} - - -static int get_ibmi_physical_address(const char* line, char (*phys_addr)[6]) { - LIND0500 rcvr; - /* rcvrlen is input parameter 2 to QDCRLIND */ - unsigned int rcvrlen = sizeof(rcvr); - unsigned char format[8], line_name[10]; - unsigned char mac_addr[sizeof(rcvr.loca_adapter_address)]; - int c[6]; - - /* format is input parameter 3 to QDCRLIND */ - iconv_a2e("LIND0500", format, sizeof(format)); - - /* line_name is input parameter 4 to QDCRLIND */ - iconv_a2e(line, line_name, sizeof(line_name)); - - /* err is input parameter 5 to QDCRLIND */ - errcode_s err; - - /* qwcrssts_pointer is the 16-byte tagged system pointer to QDCRLIND */ - ILEpointer __attribute__((aligned(16))) qdcrlind_pointer; - - /* qwcrssts_argv is the array of argument pointers to QDCRLIND */ - void* qdcrlind_argv[6]; - - /* Set the IBM i pointer to the QSYS/QDCRLIND *PGM object */ - int rc = _RSLOBJ2(&qdcrlind_pointer, RSLOBJ_TS_PGM, "QDCRLIND", "QSYS"); - - if (rc != 0) - return rc; - - /* initialize the QDCRLIND returned info structure */ - memset(&rcvr, 0, sizeof(rcvr)); - - /* initialize the QDCRLIND error code structure */ - memset(&err, 0, sizeof(err)); - err.bytes_provided = sizeof(err); - - /* initialize the array of argument pointers for the QDCRLIND API */ - qdcrlind_argv[0] = &rcvr; - qdcrlind_argv[1] = &rcvrlen; - qdcrlind_argv[2] = &format; - qdcrlind_argv[3] = &line_name; - qdcrlind_argv[4] = &err; - qdcrlind_argv[5] = NULL; - - /* Call the IBM i QDCRLIND API from PASE */ - rc = _PGMCALL(&qdcrlind_pointer, qdcrlind_argv, 0); - if (rc != 0) - return rc; - - if (err.bytes_available > 0) { - return -1; - } - - /* convert ebcdic loca_adapter_address to ascii first */ - iconv_e2a(rcvr.loca_adapter_address, mac_addr, - sizeof(rcvr.loca_adapter_address)); - - /* convert loca_adapter_address(char[12]) to phys_addr(char[6]) */ - int r = sscanf(mac_addr, "%02x%02x%02x%02x%02x%02x", - &c[0], &c[1], &c[2], &c[3], &c[4], &c[5]); - - if (r == ARRAY_SIZE(c)) { - (*phys_addr)[0] = c[0]; - (*phys_addr)[1] = c[1]; - (*phys_addr)[2] = c[2]; - (*phys_addr)[3] = c[3]; - (*phys_addr)[4] = c[4]; - (*phys_addr)[5] = c[5]; - } else { - memset(*phys_addr, 0, sizeof(*phys_addr)); - rc = -1; - } - return rc; -} - - -int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { - uv_interface_address_t* address; - struct ifaddrs_pase *ifap = NULL, *cur; - int inet6, r = 0; - - *count = 0; - *addresses = NULL; - - if (Qp2getifaddrs(&ifap)) - return UV_ENOSYS; - - /* The first loop to get the size of the array to be allocated */ - for (cur = ifap; cur; cur = cur->ifa_next) { - if (!(cur->ifa_addr->sa_family == AF_INET6 || - cur->ifa_addr->sa_family == AF_INET)) - continue; - - if (!(cur->ifa_flags & IFF_UP && cur->ifa_flags & IFF_RUNNING)) - continue; - - (*count)++; - } - - if (*count == 0) { - Qp2freeifaddrs(ifap); - return 0; - } - - /* Alloc the return interface structs */ - *addresses = uv__calloc(*count, sizeof(**addresses)); - if (*addresses == NULL) { - Qp2freeifaddrs(ifap); - return UV_ENOMEM; - } - address = *addresses; - - /* The second loop to fill in the array */ - for (cur = ifap; cur; cur = cur->ifa_next) { - if (!(cur->ifa_addr->sa_family == AF_INET6 || - cur->ifa_addr->sa_family == AF_INET)) - continue; - - if (!(cur->ifa_flags & IFF_UP && cur->ifa_flags & IFF_RUNNING)) - continue; - - address->name = uv__strdup(cur->ifa_name); - - inet6 = (cur->ifa_addr->sa_family == AF_INET6); - - if (inet6) { - address->address.address6 = *((struct sockaddr_in6*)cur->ifa_addr); - address->netmask.netmask6 = *((struct sockaddr_in6*)cur->ifa_netmask); - address->netmask.netmask6.sin6_family = AF_INET6; - } else { - address->address.address4 = *((struct sockaddr_in*)cur->ifa_addr); - address->netmask.netmask4 = *((struct sockaddr_in*)cur->ifa_netmask); - address->netmask.netmask4.sin_family = AF_INET; - } - address->is_internal = cur->ifa_flags & IFF_LOOPBACK ? 1 : 0; - if (!address->is_internal) { - int rc = -1; - size_t name_len = strlen(address->name); - /* To get the associated MAC address, we must convert the address to a - * line description. Normally, the name field contains the line - * description name, but for VLANs it has the VLAN appended with a - * period. Since object names can also contain periods and numbers, there - * is no way to know if a returned name is for a VLAN or not. eg. - * *LIND ETH1.1 and *LIND ETH1, VLAN 1 both have the same name: ETH1.1 - * - * Instead, we apply the same heuristic used by some of the XPF ioctls: - * - names > 10 *must* contain a VLAN - * - assume names <= 10 do not contain a VLAN and try directly - * - if >10 or QDCRLIND returned an error, try to strip off a VLAN - * and try again - * - if we still get an error or couldn't find a period, leave the MAC as - * 00:00:00:00:00:00 - */ - if (name_len <= 10) { - /* Assume name does not contain a VLAN ID */ - rc = get_ibmi_physical_address(address->name, &address->phys_addr); - } - - if (name_len > 10 || rc != 0) { - /* The interface name must contain a VLAN ID suffix. Attempt to strip - * it off so we can get the line description to pass to QDCRLIND. - */ - char* temp_name = uv__strdup(address->name); - char* dot = strrchr(temp_name, '.'); - if (dot != NULL) { - *dot = '\0'; - if (strlen(temp_name) <= 10) { - rc = get_ibmi_physical_address(temp_name, &address->phys_addr); - } - } - uv__free(temp_name); - } - } - - address++; - } - - Qp2freeifaddrs(ifap); - return r; -} - - -void uv_free_interface_addresses(uv_interface_address_t* addresses, int count) { - int i; - - for (i = 0; i < count; ++i) { - uv__free(addresses[i].name); - } - - uv__free(addresses); -} - -char** uv_setup_args(int argc, char** argv) { - char exepath[UV__PATH_MAX]; - char* s; - size_t size; - - if (argc > 0) { - /* Use argv[0] to determine value for uv_exepath(). */ - size = sizeof(exepath); - if (uv__search_path(argv[0], exepath, &size) == 0) { - uv_once(&process_title_mutex_once, init_process_title_mutex_once); - uv_mutex_lock(&process_title_mutex); - original_exepath = uv__strdup(exepath); - uv_mutex_unlock(&process_title_mutex); - } - } - - return argv; -} - -int uv_set_process_title(const char* title) { - return 0; -} - -int uv_get_process_title(char* buffer, size_t size) { - if (buffer == NULL || size == 0) - return UV_EINVAL; - - buffer[0] = '\0'; - return 0; -} - -void uv__process_title_cleanup(void) { -} diff --git a/libuv/src/unix/internal.h b/libuv/src/unix/internal.h deleted file mode 100644 index 12d4da9..0000000 --- a/libuv/src/unix/internal.h +++ /dev/null @@ -1,360 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_UNIX_INTERNAL_H_ -#define UV_UNIX_INTERNAL_H_ - -#include "uv-common.h" - -#include -#include /* _POSIX_PATH_MAX, PATH_MAX */ -#include /* abort */ -#include /* strrchr */ -#include /* O_CLOEXEC and O_NONBLOCK, if supported. */ -#include -#include -#include - -#if defined(__STRICT_ANSI__) -# define inline __inline -#endif - -#if defined(__linux__) -# include "linux-syscalls.h" -#endif /* __linux__ */ - -#if defined(__MVS__) -# include "os390-syscalls.h" -#endif /* __MVS__ */ - -#if defined(__sun) -# include -# include -#endif /* __sun */ - -#if defined(_AIX) -# define reqevents events -# define rtnevents revents -# include -#else -# include -#endif /* _AIX */ - -#if defined(__APPLE__) && !TARGET_OS_IPHONE -# include -#endif - -/* - * Define common detection for active Thread Sanitizer - * - clang uses __has_feature(thread_sanitizer) - * - gcc-7+ uses __SANITIZE_THREAD__ - */ -#if defined(__has_feature) -# if __has_feature(thread_sanitizer) -# define __SANITIZE_THREAD__ 1 -# endif -#endif - -#if defined(PATH_MAX) -# define UV__PATH_MAX PATH_MAX -#else -# define UV__PATH_MAX 8192 -#endif - -#if defined(__ANDROID__) -int uv__pthread_sigmask(int how, const sigset_t* set, sigset_t* oset); -# ifdef pthread_sigmask -# undef pthread_sigmask -# endif -# define pthread_sigmask(how, set, oldset) uv__pthread_sigmask(how, set, oldset) -#endif - -#define ACCESS_ONCE(type, var) \ - (*(volatile type*) &(var)) - -#define ROUND_UP(a, b) \ - ((a) % (b) ? ((a) + (b)) - ((a) % (b)) : (a)) - -#define UNREACHABLE() \ - do { \ - assert(0 && "unreachable code"); \ - abort(); \ - } \ - while (0) - -#define SAVE_ERRNO(block) \ - do { \ - int _saved_errno = errno; \ - do { block; } while (0); \ - errno = _saved_errno; \ - } \ - while (0) - -/* The __clang__ and __INTEL_COMPILER checks are superfluous because they - * define __GNUC__. They are here to convey to you, dear reader, that these - * macros are enabled when compiling with clang or icc. - */ -#if defined(__clang__) || \ - defined(__GNUC__) || \ - defined(__INTEL_COMPILER) -# define UV_UNUSED(declaration) __attribute__((unused)) declaration -#else -# define UV_UNUSED(declaration) declaration -#endif - -/* Leans on the fact that, on Linux, POLLRDHUP == EPOLLRDHUP. */ -#ifdef POLLRDHUP -# define UV__POLLRDHUP POLLRDHUP -#else -# define UV__POLLRDHUP 0x2000 -#endif - -#ifdef POLLPRI -# define UV__POLLPRI POLLPRI -#else -# define UV__POLLPRI 0 -#endif - -#if !defined(O_CLOEXEC) && defined(__FreeBSD__) -/* - * It may be that we are just missing `__POSIX_VISIBLE >= 200809`. - * Try using fixed value const and give up, if it doesn't work - */ -# define O_CLOEXEC 0x00100000 -#endif - -typedef struct uv__stream_queued_fds_s uv__stream_queued_fds_t; - -/* loop flags */ -enum { - UV_LOOP_BLOCK_SIGPROF = 1 -}; - -/* flags of excluding ifaddr */ -enum { - UV__EXCLUDE_IFPHYS, - UV__EXCLUDE_IFADDR -}; - -typedef enum { - UV_CLOCK_PRECISE = 0, /* Use the highest resolution clock available. */ - UV_CLOCK_FAST = 1 /* Use the fastest clock with <= 1ms granularity. */ -} uv_clocktype_t; - -struct uv__stream_queued_fds_s { - unsigned int size; - unsigned int offset; - int fds[1]; -}; - - -#if defined(_AIX) || \ - defined(__APPLE__) || \ - defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__FreeBSD_kernel__) || \ - defined(__linux__) || \ - defined(__OpenBSD__) || \ - defined(__NetBSD__) -#define uv__cloexec uv__cloexec_ioctl -#define uv__nonblock uv__nonblock_ioctl -#define UV__NONBLOCK_IS_IOCTL 1 -#else -#define uv__cloexec uv__cloexec_fcntl -#define uv__nonblock uv__nonblock_fcntl -#define UV__NONBLOCK_IS_IOCTL 0 -#endif - -/* On Linux, uv__nonblock_fcntl() and uv__nonblock_ioctl() do not commute - * when O_NDELAY is not equal to O_NONBLOCK. Case in point: linux/sparc32 - * and linux/sparc64, where O_NDELAY is O_NONBLOCK + another bit. - * - * Libuv uses uv__nonblock_fcntl() directly sometimes so ensure that it - * commutes with uv__nonblock(). - */ -#if defined(__linux__) && O_NDELAY != O_NONBLOCK -#undef uv__nonblock -#define uv__nonblock uv__nonblock_fcntl -#endif - -/* core */ -int uv__cloexec_ioctl(int fd, int set); -int uv__cloexec_fcntl(int fd, int set); -int uv__nonblock_ioctl(int fd, int set); -int uv__nonblock_fcntl(int fd, int set); -int uv__close(int fd); /* preserves errno */ -int uv__close_nocheckstdio(int fd); -int uv__close_nocancel(int fd); -int uv__socket(int domain, int type, int protocol); -ssize_t uv__recvmsg(int fd, struct msghdr *msg, int flags); -void uv__make_close_pending(uv_handle_t* handle); -int uv__getiovmax(void); - -void uv__io_init(uv__io_t* w, uv__io_cb cb, int fd); -void uv__io_start(uv_loop_t* loop, uv__io_t* w, unsigned int events); -void uv__io_stop(uv_loop_t* loop, uv__io_t* w, unsigned int events); -void uv__io_close(uv_loop_t* loop, uv__io_t* w); -void uv__io_feed(uv_loop_t* loop, uv__io_t* w); -int uv__io_active(const uv__io_t* w, unsigned int events); -int uv__io_check_fd(uv_loop_t* loop, int fd); -void uv__io_poll(uv_loop_t* loop, int timeout); /* in milliseconds or -1 */ -int uv__io_fork(uv_loop_t* loop); -int uv__fd_exists(uv_loop_t* loop, int fd); - -/* async */ -void uv__async_stop(uv_loop_t* loop); -int uv__async_fork(uv_loop_t* loop); - - -/* loop */ -void uv__run_idle(uv_loop_t* loop); -void uv__run_check(uv_loop_t* loop); -void uv__run_prepare(uv_loop_t* loop); - -/* stream */ -void uv__stream_init(uv_loop_t* loop, uv_stream_t* stream, - uv_handle_type type); -int uv__stream_open(uv_stream_t*, int fd, int flags); -void uv__stream_destroy(uv_stream_t* stream); -#if defined(__APPLE__) -int uv__stream_try_select(uv_stream_t* stream, int* fd); -#endif /* defined(__APPLE__) */ -void uv__server_io(uv_loop_t* loop, uv__io_t* w, unsigned int events); -int uv__accept(int sockfd); -int uv__dup2_cloexec(int oldfd, int newfd); -int uv__open_cloexec(const char* path, int flags); - -/* tcp */ -int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb); -int uv__tcp_nodelay(int fd, int on); -int uv__tcp_keepalive(int fd, int on, unsigned int delay); - -/* pipe */ -int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb); - -/* signal */ -void uv__signal_close(uv_signal_t* handle); -void uv__signal_global_once_init(void); -void uv__signal_loop_cleanup(uv_loop_t* loop); -int uv__signal_loop_fork(uv_loop_t* loop); - -/* platform specific */ -uint64_t uv__hrtime(uv_clocktype_t type); -int uv__kqueue_init(uv_loop_t* loop); -int uv__epoll_init(uv_loop_t* loop); -int uv__platform_loop_init(uv_loop_t* loop); -void uv__platform_loop_delete(uv_loop_t* loop); -void uv__platform_invalidate_fd(uv_loop_t* loop, int fd); - -/* various */ -void uv__async_close(uv_async_t* handle); -void uv__check_close(uv_check_t* handle); -void uv__fs_event_close(uv_fs_event_t* handle); -void uv__idle_close(uv_idle_t* handle); -void uv__pipe_close(uv_pipe_t* handle); -void uv__poll_close(uv_poll_t* handle); -void uv__prepare_close(uv_prepare_t* handle); -void uv__process_close(uv_process_t* handle); -void uv__stream_close(uv_stream_t* handle); -void uv__tcp_close(uv_tcp_t* handle); -size_t uv__thread_stack_size(void); -void uv__udp_close(uv_udp_t* handle); -void uv__udp_finish_close(uv_udp_t* handle); -uv_handle_type uv__handle_type(int fd); -FILE* uv__open_file(const char* path); -int uv__getpwuid_r(uv_passwd_t* pwd); -int uv__search_path(const char* prog, char* buf, size_t* buflen); - -/* random */ -int uv__random_devurandom(void* buf, size_t buflen); -int uv__random_getrandom(void* buf, size_t buflen); -int uv__random_getentropy(void* buf, size_t buflen); -int uv__random_readpath(const char* path, void* buf, size_t buflen); -int uv__random_sysctl(void* buf, size_t buflen); - -#if defined(__APPLE__) -int uv___stream_fd(const uv_stream_t* handle); -#define uv__stream_fd(handle) (uv___stream_fd((const uv_stream_t*) (handle))) -#else -#define uv__stream_fd(handle) ((handle)->io_watcher.fd) -#endif /* defined(__APPLE__) */ - -int uv__make_pipe(int fds[2], int flags); - -#if defined(__APPLE__) - -int uv__fsevents_init(uv_fs_event_t* handle); -int uv__fsevents_close(uv_fs_event_t* handle); -void uv__fsevents_loop_delete(uv_loop_t* loop); - -#endif /* defined(__APPLE__) */ - -UV_UNUSED(static void uv__update_time(uv_loop_t* loop)) { - /* Use a fast time source if available. We only need millisecond precision. - */ - loop->time = uv__hrtime(UV_CLOCK_FAST) / 1000000; -} - -UV_UNUSED(static char* uv__basename_r(const char* path)) { - char* s; - - s = strrchr(path, '/'); - if (s == NULL) - return (char*) path; - - return s + 1; -} - -#if defined(__linux__) -int uv__inotify_fork(uv_loop_t* loop, void* old_watchers); -#endif - -typedef int (*uv__peersockfunc)(int, struct sockaddr*, socklen_t*); - -int uv__getsockpeername(const uv_handle_t* handle, - uv__peersockfunc func, - struct sockaddr* name, - int* namelen); - -#if defined(__linux__) || \ - defined(__FreeBSD__) || \ - defined(__FreeBSD_kernel__) || \ - defined(__DragonFly__) -#define HAVE_MMSG 1 -struct uv__mmsghdr { - struct msghdr msg_hdr; - unsigned int msg_len; -}; - -int uv__recvmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen); -int uv__sendmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen); -#else -#define HAVE_MMSG 0 -#endif - -#if defined(__sun) -#if !defined(_POSIX_VERSION) || _POSIX_VERSION < 200809L -size_t strnlen(const char* s, size_t maxlen); -#endif -#endif - - -#endif /* UV_UNIX_INTERNAL_H_ */ diff --git a/libuv/src/unix/kqueue.c b/libuv/src/unix/kqueue.c deleted file mode 100644 index bf183d5..0000000 --- a/libuv/src/unix/kqueue.c +++ /dev/null @@ -1,585 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -/* - * Required on - * - Until at least FreeBSD 11.0 - * - Older versions of Mac OS X - * - * http://www.boost.org/doc/libs/1_61_0/boost/asio/detail/kqueue_reactor.hpp - */ -#ifndef EV_OOBAND -#define EV_OOBAND EV_FLAG1 -#endif - -static void uv__fs_event(uv_loop_t* loop, uv__io_t* w, unsigned int fflags); - - -int uv__kqueue_init(uv_loop_t* loop) { - loop->backend_fd = kqueue(); - if (loop->backend_fd == -1) - return UV__ERR(errno); - - uv__cloexec(loop->backend_fd, 1); - - return 0; -} - - -#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 -static int uv__has_forked_with_cfrunloop; -#endif - -int uv__io_fork(uv_loop_t* loop) { - int err; - loop->backend_fd = -1; - err = uv__kqueue_init(loop); - if (err) - return err; - -#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 - if (loop->cf_state != NULL) { - /* We cannot start another CFRunloop and/or thread in the child - process; CF aborts if you try or if you try to touch the thread - at all to kill it. So the best we can do is ignore it from now - on. This means we can't watch directories in the same way - anymore (like other BSDs). It also means we cannot properly - clean up the allocated resources; calling - uv__fsevents_loop_delete from uv_loop_close will crash the - process. So we sidestep the issue by pretending like we never - started it in the first place. - */ - uv__store_relaxed(&uv__has_forked_with_cfrunloop, 1); - uv__free(loop->cf_state); - loop->cf_state = NULL; - } -#endif /* #if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 */ - return err; -} - - -int uv__io_check_fd(uv_loop_t* loop, int fd) { - struct kevent ev; - int rc; - - rc = 0; - EV_SET(&ev, fd, EVFILT_READ, EV_ADD, 0, 0, 0); - if (kevent(loop->backend_fd, &ev, 1, NULL, 0, NULL)) - rc = UV__ERR(errno); - - EV_SET(&ev, fd, EVFILT_READ, EV_DELETE, 0, 0, 0); - if (rc == 0) - if (kevent(loop->backend_fd, &ev, 1, NULL, 0, NULL)) - abort(); - - return rc; -} - - -void uv__io_poll(uv_loop_t* loop, int timeout) { - struct kevent events[1024]; - struct kevent* ev; - struct timespec spec; - unsigned int nevents; - unsigned int revents; - QUEUE* q; - uv__io_t* w; - sigset_t* pset; - sigset_t set; - uint64_t base; - uint64_t diff; - int have_signals; - int filter; - int fflags; - int count; - int nfds; - int fd; - int op; - int i; - int user_timeout; - int reset_timeout; - - if (loop->nfds == 0) { - assert(QUEUE_EMPTY(&loop->watcher_queue)); - return; - } - - nevents = 0; - - while (!QUEUE_EMPTY(&loop->watcher_queue)) { - q = QUEUE_HEAD(&loop->watcher_queue); - QUEUE_REMOVE(q); - QUEUE_INIT(q); - - w = QUEUE_DATA(q, uv__io_t, watcher_queue); - assert(w->pevents != 0); - assert(w->fd >= 0); - assert(w->fd < (int) loop->nwatchers); - - if ((w->events & POLLIN) == 0 && (w->pevents & POLLIN) != 0) { - filter = EVFILT_READ; - fflags = 0; - op = EV_ADD; - - if (w->cb == uv__fs_event) { - filter = EVFILT_VNODE; - fflags = NOTE_ATTRIB | NOTE_WRITE | NOTE_RENAME - | NOTE_DELETE | NOTE_EXTEND | NOTE_REVOKE; - op = EV_ADD | EV_ONESHOT; /* Stop the event from firing repeatedly. */ - } - - EV_SET(events + nevents, w->fd, filter, op, fflags, 0, 0); - - if (++nevents == ARRAY_SIZE(events)) { - if (kevent(loop->backend_fd, events, nevents, NULL, 0, NULL)) - abort(); - nevents = 0; - } - } - - if ((w->events & POLLOUT) == 0 && (w->pevents & POLLOUT) != 0) { - EV_SET(events + nevents, w->fd, EVFILT_WRITE, EV_ADD, 0, 0, 0); - - if (++nevents == ARRAY_SIZE(events)) { - if (kevent(loop->backend_fd, events, nevents, NULL, 0, NULL)) - abort(); - nevents = 0; - } - } - - if ((w->events & UV__POLLPRI) == 0 && (w->pevents & UV__POLLPRI) != 0) { - EV_SET(events + nevents, w->fd, EV_OOBAND, EV_ADD, 0, 0, 0); - - if (++nevents == ARRAY_SIZE(events)) { - if (kevent(loop->backend_fd, events, nevents, NULL, 0, NULL)) - abort(); - nevents = 0; - } - } - - w->events = w->pevents; - } - - pset = NULL; - if (loop->flags & UV_LOOP_BLOCK_SIGPROF) { - pset = &set; - sigemptyset(pset); - sigaddset(pset, SIGPROF); - } - - assert(timeout >= -1); - base = loop->time; - count = 48; /* Benchmarks suggest this gives the best throughput. */ - - if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { - reset_timeout = 1; - user_timeout = timeout; - timeout = 0; - } else { - reset_timeout = 0; - } - - for (;; nevents = 0) { - /* Only need to set the provider_entry_time if timeout != 0. The function - * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. - */ - if (timeout != 0) - uv__metrics_set_provider_entry_time(loop); - - if (timeout != -1) { - spec.tv_sec = timeout / 1000; - spec.tv_nsec = (timeout % 1000) * 1000000; - } - - if (pset != NULL) - pthread_sigmask(SIG_BLOCK, pset, NULL); - - nfds = kevent(loop->backend_fd, - events, - nevents, - events, - ARRAY_SIZE(events), - timeout == -1 ? NULL : &spec); - - if (pset != NULL) - pthread_sigmask(SIG_UNBLOCK, pset, NULL); - - /* Update loop->time unconditionally. It's tempting to skip the update when - * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the - * operating system didn't reschedule our process while in the syscall. - */ - SAVE_ERRNO(uv__update_time(loop)); - - if (nfds == 0) { - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - if (timeout == -1) - continue; - if (timeout > 0) - goto update_timeout; - } - - assert(timeout != -1); - return; - } - - if (nfds == -1) { - if (errno != EINTR) - abort(); - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - if (timeout == 0) - return; - - if (timeout == -1) - continue; - - /* Interrupted by a signal. Update timeout and poll again. */ - goto update_timeout; - } - - have_signals = 0; - nevents = 0; - - assert(loop->watchers != NULL); - loop->watchers[loop->nwatchers] = (void*) events; - loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds; - for (i = 0; i < nfds; i++) { - ev = events + i; - fd = ev->ident; - /* Skip invalidated events, see uv__platform_invalidate_fd */ - if (fd == -1) - continue; - w = loop->watchers[fd]; - - if (w == NULL) { - /* File descriptor that we've stopped watching, disarm it. - * TODO: batch up. */ - struct kevent events[1]; - - EV_SET(events + 0, fd, ev->filter, EV_DELETE, 0, 0, 0); - if (kevent(loop->backend_fd, events, 1, NULL, 0, NULL)) - if (errno != EBADF && errno != ENOENT) - abort(); - - continue; - } - - if (ev->filter == EVFILT_VNODE) { - assert(w->events == POLLIN); - assert(w->pevents == POLLIN); - uv__metrics_update_idle_time(loop); - w->cb(loop, w, ev->fflags); /* XXX always uv__fs_event() */ - nevents++; - continue; - } - - revents = 0; - - if (ev->filter == EVFILT_READ) { - if (w->pevents & POLLIN) { - revents |= POLLIN; - w->rcount = ev->data; - } else { - /* TODO batch up */ - struct kevent events[1]; - EV_SET(events + 0, fd, ev->filter, EV_DELETE, 0, 0, 0); - if (kevent(loop->backend_fd, events, 1, NULL, 0, NULL)) - if (errno != ENOENT) - abort(); - } - } - - if (ev->filter == EV_OOBAND) { - if (w->pevents & UV__POLLPRI) { - revents |= UV__POLLPRI; - w->rcount = ev->data; - } else { - /* TODO batch up */ - struct kevent events[1]; - EV_SET(events + 0, fd, ev->filter, EV_DELETE, 0, 0, 0); - if (kevent(loop->backend_fd, events, 1, NULL, 0, NULL)) - if (errno != ENOENT) - abort(); - } - } - - if (ev->filter == EVFILT_WRITE) { - if (w->pevents & POLLOUT) { - revents |= POLLOUT; - w->wcount = ev->data; - } else { - /* TODO batch up */ - struct kevent events[1]; - EV_SET(events + 0, fd, ev->filter, EV_DELETE, 0, 0, 0); - if (kevent(loop->backend_fd, events, 1, NULL, 0, NULL)) - if (errno != ENOENT) - abort(); - } - } - - if (ev->flags & EV_ERROR) - revents |= POLLERR; - - if ((ev->flags & EV_EOF) && (w->pevents & UV__POLLRDHUP)) - revents |= UV__POLLRDHUP; - - if (revents == 0) - continue; - - /* Run signal watchers last. This also affects child process watchers - * because those are implemented in terms of signal watchers. - */ - if (w == &loop->signal_io_watcher) { - have_signals = 1; - } else { - uv__metrics_update_idle_time(loop); - w->cb(loop, w, revents); - } - - nevents++; - } - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - if (have_signals != 0) { - uv__metrics_update_idle_time(loop); - loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); - } - - loop->watchers[loop->nwatchers] = NULL; - loop->watchers[loop->nwatchers + 1] = NULL; - - if (have_signals != 0) - return; /* Event loop should cycle now so don't poll again. */ - - if (nevents != 0) { - if (nfds == ARRAY_SIZE(events) && --count != 0) { - /* Poll for more events but don't block this time. */ - timeout = 0; - continue; - } - return; - } - - if (timeout == 0) - return; - - if (timeout == -1) - continue; - -update_timeout: - assert(timeout > 0); - - diff = loop->time - base; - if (diff >= (uint64_t) timeout) - return; - - timeout -= diff; - } -} - - -void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) { - struct kevent* events; - uintptr_t i; - uintptr_t nfds; - - assert(loop->watchers != NULL); - assert(fd >= 0); - - events = (struct kevent*) loop->watchers[loop->nwatchers]; - nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1]; - if (events == NULL) - return; - - /* Invalidate events with same file descriptor */ - for (i = 0; i < nfds; i++) - if ((int) events[i].ident == fd) - events[i].ident = -1; -} - - -static void uv__fs_event(uv_loop_t* loop, uv__io_t* w, unsigned int fflags) { - uv_fs_event_t* handle; - struct kevent ev; - int events; - const char* path; -#if defined(F_GETPATH) - /* MAXPATHLEN == PATH_MAX but the former is what XNU calls it internally. */ - char pathbuf[MAXPATHLEN]; -#endif - - handle = container_of(w, uv_fs_event_t, event_watcher); - - if (fflags & (NOTE_ATTRIB | NOTE_EXTEND)) - events = UV_CHANGE; - else - events = UV_RENAME; - - path = NULL; -#if defined(F_GETPATH) - /* Also works when the file has been unlinked from the file system. Passing - * in the path when the file has been deleted is arguably a little strange - * but it's consistent with what the inotify backend does. - */ - if (fcntl(handle->event_watcher.fd, F_GETPATH, pathbuf) == 0) - path = uv__basename_r(pathbuf); -#endif - handle->cb(handle, path, events, 0); - - if (handle->event_watcher.fd == -1) - return; - - /* Watcher operates in one-shot mode, re-arm it. */ - fflags = NOTE_ATTRIB | NOTE_WRITE | NOTE_RENAME - | NOTE_DELETE | NOTE_EXTEND | NOTE_REVOKE; - - EV_SET(&ev, w->fd, EVFILT_VNODE, EV_ADD | EV_ONESHOT, fflags, 0, 0); - - if (kevent(loop->backend_fd, &ev, 1, NULL, 0, NULL)) - abort(); -} - - -int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { - uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT); - return 0; -} - - -int uv_fs_event_start(uv_fs_event_t* handle, - uv_fs_event_cb cb, - const char* path, - unsigned int flags) { - int fd; -#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 - struct stat statbuf; -#endif - - if (uv__is_active(handle)) - return UV_EINVAL; - - handle->cb = cb; - handle->path = uv__strdup(path); - if (handle->path == NULL) - return UV_ENOMEM; - - /* TODO open asynchronously - but how do we report back errors? */ - fd = open(handle->path, O_RDONLY); - if (fd == -1) { - uv__free(handle->path); - handle->path = NULL; - return UV__ERR(errno); - } - -#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 - /* Nullify field to perform checks later */ - handle->cf_cb = NULL; - handle->realpath = NULL; - handle->realpath_len = 0; - handle->cf_flags = flags; - - if (fstat(fd, &statbuf)) - goto fallback; - /* FSEvents works only with directories */ - if (!(statbuf.st_mode & S_IFDIR)) - goto fallback; - - if (0 == uv__load_relaxed(&uv__has_forked_with_cfrunloop)) { - int r; - /* The fallback fd is no longer needed */ - uv__close_nocheckstdio(fd); - handle->event_watcher.fd = -1; - r = uv__fsevents_init(handle); - if (r == 0) { - uv__handle_start(handle); - } else { - uv__free(handle->path); - handle->path = NULL; - } - return r; - } -fallback: -#endif /* #if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 */ - - uv__handle_start(handle); - uv__io_init(&handle->event_watcher, uv__fs_event, fd); - uv__io_start(handle->loop, &handle->event_watcher, POLLIN); - - return 0; -} - - -int uv_fs_event_stop(uv_fs_event_t* handle) { - int r; - r = 0; - - if (!uv__is_active(handle)) - return 0; - - uv__handle_stop(handle); - -#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 - if (0 == uv__load_relaxed(&uv__has_forked_with_cfrunloop)) - if (handle->cf_cb != NULL) - r = uv__fsevents_close(handle); -#endif - - if (handle->event_watcher.fd != -1) { - uv__io_close(handle->loop, &handle->event_watcher); - uv__close(handle->event_watcher.fd); - handle->event_watcher.fd = -1; - } - - uv__free(handle->path); - handle->path = NULL; - - return r; -} - - -void uv__fs_event_close(uv_fs_event_t* handle) { - uv_fs_event_stop(handle); -} diff --git a/libuv/src/unix/linux-core.c b/libuv/src/unix/linux-core.c deleted file mode 100644 index 2716e2b..0000000 --- a/libuv/src/unix/linux-core.c +++ /dev/null @@ -1,766 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* We lean on the fact that POLL{IN,OUT,ERR,HUP} correspond with their - * EPOLL* counterparts. We use the POLL* variants in this file because that - * is what libuv uses elsewhere. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#define HAVE_IFADDRS_H 1 - -#ifdef __UCLIBC__ -# if __UCLIBC_MAJOR__ < 0 && __UCLIBC_MINOR__ < 9 && __UCLIBC_SUBLEVEL__ < 32 -# undef HAVE_IFADDRS_H -# endif -#endif - -#ifdef HAVE_IFADDRS_H -# if defined(__ANDROID__) -# include "uv/android-ifaddrs.h" -# else -# include -# endif -# include -# include -# include -#endif /* HAVE_IFADDRS_H */ - -/* Available from 2.6.32 onwards. */ -#ifndef CLOCK_MONOTONIC_COARSE -# define CLOCK_MONOTONIC_COARSE 6 -#endif - -/* This is rather annoying: CLOCK_BOOTTIME lives in but we can't - * include that file because it conflicts with . We'll just have to - * define it ourselves. - */ -#ifndef CLOCK_BOOTTIME -# define CLOCK_BOOTTIME 7 -#endif - -static int read_models(unsigned int numcpus, uv_cpu_info_t* ci); -static int read_times(FILE* statfile_fp, - unsigned int numcpus, - uv_cpu_info_t* ci); -static void read_speeds(unsigned int numcpus, uv_cpu_info_t* ci); -static uint64_t read_cpufreq(unsigned int cpunum); - -int uv__platform_loop_init(uv_loop_t* loop) { - - loop->inotify_fd = -1; - loop->inotify_watchers = NULL; - - return uv__epoll_init(loop); -} - - -int uv__io_fork(uv_loop_t* loop) { - int err; - void* old_watchers; - - old_watchers = loop->inotify_watchers; - - uv__close(loop->backend_fd); - loop->backend_fd = -1; - uv__platform_loop_delete(loop); - - err = uv__platform_loop_init(loop); - if (err) - return err; - - return uv__inotify_fork(loop, old_watchers); -} - - -void uv__platform_loop_delete(uv_loop_t* loop) { - if (loop->inotify_fd == -1) return; - uv__io_stop(loop, &loop->inotify_read_watcher, POLLIN); - uv__close(loop->inotify_fd); - loop->inotify_fd = -1; -} - - - -uint64_t uv__hrtime(uv_clocktype_t type) { - static clock_t fast_clock_id = -1; - struct timespec t; - clock_t clock_id; - - /* Prefer CLOCK_MONOTONIC_COARSE if available but only when it has - * millisecond granularity or better. CLOCK_MONOTONIC_COARSE is - * serviced entirely from the vDSO, whereas CLOCK_MONOTONIC may - * decide to make a costly system call. - */ - /* TODO(bnoordhuis) Use CLOCK_MONOTONIC_COARSE for UV_CLOCK_PRECISE - * when it has microsecond granularity or better (unlikely). - */ - clock_id = CLOCK_MONOTONIC; - if (type != UV_CLOCK_FAST) - goto done; - - clock_id = uv__load_relaxed(&fast_clock_id); - if (clock_id != -1) - goto done; - - clock_id = CLOCK_MONOTONIC; - if (0 == clock_getres(CLOCK_MONOTONIC_COARSE, &t)) - if (t.tv_nsec <= 1 * 1000 * 1000) - clock_id = CLOCK_MONOTONIC_COARSE; - - uv__store_relaxed(&fast_clock_id, clock_id); - -done: - - if (clock_gettime(clock_id, &t)) - return 0; /* Not really possible. */ - - return t.tv_sec * (uint64_t) 1e9 + t.tv_nsec; -} - - -int uv_resident_set_memory(size_t* rss) { - char buf[1024]; - const char* s; - ssize_t n; - long val; - int fd; - int i; - - do - fd = open("/proc/self/stat", O_RDONLY); - while (fd == -1 && errno == EINTR); - - if (fd == -1) - return UV__ERR(errno); - - do - n = read(fd, buf, sizeof(buf) - 1); - while (n == -1 && errno == EINTR); - - uv__close(fd); - if (n == -1) - return UV__ERR(errno); - buf[n] = '\0'; - - s = strchr(buf, ' '); - if (s == NULL) - goto err; - - s += 1; - if (*s != '(') - goto err; - - s = strchr(s, ')'); - if (s == NULL) - goto err; - - for (i = 1; i <= 22; i++) { - s = strchr(s + 1, ' '); - if (s == NULL) - goto err; - } - - errno = 0; - val = strtol(s, NULL, 10); - if (errno != 0) - goto err; - if (val < 0) - goto err; - - *rss = val * getpagesize(); - return 0; - -err: - return UV_EINVAL; -} - -static int uv__slurp(const char* filename, char* buf, size_t len) { - ssize_t n; - int fd; - - assert(len > 0); - - fd = uv__open_cloexec(filename, O_RDONLY); - if (fd < 0) - return fd; - - do - n = read(fd, buf, len - 1); - while (n == -1 && errno == EINTR); - - if (uv__close_nocheckstdio(fd)) - abort(); - - if (n < 0) - return UV__ERR(errno); - - buf[n] = '\0'; - - return 0; -} - -int uv_uptime(double* uptime) { - static volatile int no_clock_boottime; - char buf[128]; - struct timespec now; - int r; - - /* Try /proc/uptime first, then fallback to clock_gettime(). */ - - if (0 == uv__slurp("/proc/uptime", buf, sizeof(buf))) - if (1 == sscanf(buf, "%lf", uptime)) - return 0; - - /* Try CLOCK_BOOTTIME first, fall back to CLOCK_MONOTONIC if not available - * (pre-2.6.39 kernels). CLOCK_MONOTONIC doesn't increase when the system - * is suspended. - */ - if (no_clock_boottime) { - retry_clock_gettime: r = clock_gettime(CLOCK_MONOTONIC, &now); - } - else if ((r = clock_gettime(CLOCK_BOOTTIME, &now)) && errno == EINVAL) { - no_clock_boottime = 1; - goto retry_clock_gettime; - } - - if (r) - return UV__ERR(errno); - - *uptime = now.tv_sec; - return 0; -} - - -static int uv__cpu_num(FILE* statfile_fp, unsigned int* numcpus) { - unsigned int num; - char buf[1024]; - - if (!fgets(buf, sizeof(buf), statfile_fp)) - return UV_EIO; - - num = 0; - while (fgets(buf, sizeof(buf), statfile_fp)) { - if (strncmp(buf, "cpu", 3)) - break; - num++; - } - - if (num == 0) - return UV_EIO; - - *numcpus = num; - return 0; -} - - -int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { - unsigned int numcpus; - uv_cpu_info_t* ci; - int err; - FILE* statfile_fp; - - *cpu_infos = NULL; - *count = 0; - - statfile_fp = uv__open_file("/proc/stat"); - if (statfile_fp == NULL) - return UV__ERR(errno); - - err = uv__cpu_num(statfile_fp, &numcpus); - if (err < 0) - goto out; - - err = UV_ENOMEM; - ci = uv__calloc(numcpus, sizeof(*ci)); - if (ci == NULL) - goto out; - - err = read_models(numcpus, ci); - if (err == 0) - err = read_times(statfile_fp, numcpus, ci); - - if (err) { - uv_free_cpu_info(ci, numcpus); - goto out; - } - - /* read_models() on x86 also reads the CPU speed from /proc/cpuinfo. - * We don't check for errors here. Worst case, the field is left zero. - */ - if (ci[0].speed == 0) - read_speeds(numcpus, ci); - - *cpu_infos = ci; - *count = numcpus; - err = 0; - -out: - - if (fclose(statfile_fp)) - if (errno != EINTR && errno != EINPROGRESS) - abort(); - - return err; -} - - -static void read_speeds(unsigned int numcpus, uv_cpu_info_t* ci) { - unsigned int num; - - for (num = 0; num < numcpus; num++) - ci[num].speed = read_cpufreq(num) / 1000; -} - - -/* Also reads the CPU frequency on ppc and x86. The other architectures only - * have a BogoMIPS field, which may not be very accurate. - * - * Note: Simply returns on error, uv_cpu_info() takes care of the cleanup. - */ -static int read_models(unsigned int numcpus, uv_cpu_info_t* ci) { -#if defined(__PPC__) - static const char model_marker[] = "cpu\t\t: "; - static const char speed_marker[] = "clock\t\t: "; -#else - static const char model_marker[] = "model name\t: "; - static const char speed_marker[] = "cpu MHz\t\t: "; -#endif - const char* inferred_model; - unsigned int model_idx; - unsigned int speed_idx; - char buf[1024]; - char* model; - FILE* fp; - - /* Most are unused on non-ARM, non-MIPS and non-x86 architectures. */ - (void) &model_marker; - (void) &speed_marker; - (void) &speed_idx; - (void) &model; - (void) &buf; - (void) &fp; - - model_idx = 0; - speed_idx = 0; - -#if defined(__arm__) || \ - defined(__i386__) || \ - defined(__mips__) || \ - defined(__PPC__) || \ - defined(__x86_64__) - fp = uv__open_file("/proc/cpuinfo"); - if (fp == NULL) - return UV__ERR(errno); - - while (fgets(buf, sizeof(buf), fp)) { - if (model_idx < numcpus) { - if (strncmp(buf, model_marker, sizeof(model_marker) - 1) == 0) { - model = buf + sizeof(model_marker) - 1; - model = uv__strndup(model, strlen(model) - 1); /* Strip newline. */ - if (model == NULL) { - fclose(fp); - return UV_ENOMEM; - } - ci[model_idx++].model = model; - continue; - } - } -#if defined(__arm__) || defined(__mips__) - if (model_idx < numcpus) { -#if defined(__arm__) - /* Fallback for pre-3.8 kernels. */ - static const char model_marker[] = "Processor\t: "; -#else /* defined(__mips__) */ - static const char model_marker[] = "cpu model\t\t: "; -#endif - if (strncmp(buf, model_marker, sizeof(model_marker) - 1) == 0) { - model = buf + sizeof(model_marker) - 1; - model = uv__strndup(model, strlen(model) - 1); /* Strip newline. */ - if (model == NULL) { - fclose(fp); - return UV_ENOMEM; - } - ci[model_idx++].model = model; - continue; - } - } -#else /* !__arm__ && !__mips__ */ - if (speed_idx < numcpus) { - if (strncmp(buf, speed_marker, sizeof(speed_marker) - 1) == 0) { - ci[speed_idx++].speed = atoi(buf + sizeof(speed_marker) - 1); - continue; - } - } -#endif /* __arm__ || __mips__ */ - } - - fclose(fp); -#endif /* __arm__ || __i386__ || __mips__ || __PPC__ || __x86_64__ */ - - /* Now we want to make sure that all the models contain *something* because - * it's not safe to leave them as null. Copy the last entry unless there - * isn't one, in that case we simply put "unknown" into everything. - */ - inferred_model = "unknown"; - if (model_idx > 0) - inferred_model = ci[model_idx - 1].model; - - while (model_idx < numcpus) { - model = uv__strndup(inferred_model, strlen(inferred_model)); - if (model == NULL) - return UV_ENOMEM; - ci[model_idx++].model = model; - } - - return 0; -} - - -static int read_times(FILE* statfile_fp, - unsigned int numcpus, - uv_cpu_info_t* ci) { - struct uv_cpu_times_s ts; - unsigned int ticks; - unsigned int multiplier; - uint64_t user; - uint64_t nice; - uint64_t sys; - uint64_t idle; - uint64_t dummy; - uint64_t irq; - uint64_t num; - uint64_t len; - char buf[1024]; - - ticks = (unsigned int)sysconf(_SC_CLK_TCK); - assert(ticks != (unsigned int) -1); - assert(ticks != 0); - multiplier = ((uint64_t)1000L / ticks); - - rewind(statfile_fp); - - if (!fgets(buf, sizeof(buf), statfile_fp)) - abort(); - - num = 0; - - while (fgets(buf, sizeof(buf), statfile_fp)) { - if (num >= numcpus) - break; - - if (strncmp(buf, "cpu", 3)) - break; - - /* skip "cpu " marker */ - { - unsigned int n; - int r = sscanf(buf, "cpu%u ", &n); - assert(r == 1); - (void) r; /* silence build warning */ - for (len = sizeof("cpu0"); n /= 10; len++); - } - - /* Line contains user, nice, system, idle, iowait, irq, softirq, steal, - * guest, guest_nice but we're only interested in the first four + irq. - * - * Don't use %*s to skip fields or %ll to read straight into the uint64_t - * fields, they're not allowed in C89 mode. - */ - if (6 != sscanf(buf + len, - "%" PRIu64 " %" PRIu64 " %" PRIu64 - "%" PRIu64 " %" PRIu64 " %" PRIu64, - &user, - &nice, - &sys, - &idle, - &dummy, - &irq)) - abort(); - - ts.user = user * multiplier; - ts.nice = nice * multiplier; - ts.sys = sys * multiplier; - ts.idle = idle * multiplier; - ts.irq = irq * multiplier; - ci[num++].cpu_times = ts; - } - assert(num == numcpus); - - return 0; -} - - -static uint64_t read_cpufreq(unsigned int cpunum) { - uint64_t val; - char buf[1024]; - FILE* fp; - - snprintf(buf, - sizeof(buf), - "/sys/devices/system/cpu/cpu%u/cpufreq/scaling_cur_freq", - cpunum); - - fp = uv__open_file(buf); - if (fp == NULL) - return 0; - - if (fscanf(fp, "%" PRIu64, &val) != 1) - val = 0; - - fclose(fp); - - return val; -} - - -static int uv__ifaddr_exclude(struct ifaddrs *ent, int exclude_type) { - if (!((ent->ifa_flags & IFF_UP) && (ent->ifa_flags & IFF_RUNNING))) - return 1; - if (ent->ifa_addr == NULL) - return 1; - /* - * On Linux getifaddrs returns information related to the raw underlying - * devices. We're not interested in this information yet. - */ - if (ent->ifa_addr->sa_family == PF_PACKET) - return exclude_type; - return !exclude_type; -} - -int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { -#ifndef HAVE_IFADDRS_H - *count = 0; - *addresses = NULL; - return UV_ENOSYS; -#else - struct ifaddrs *addrs, *ent; - uv_interface_address_t* address; - int i; - struct sockaddr_ll *sll; - - *count = 0; - *addresses = NULL; - - if (getifaddrs(&addrs)) - return UV__ERR(errno); - - /* Count the number of interfaces */ - for (ent = addrs; ent != NULL; ent = ent->ifa_next) { - if (uv__ifaddr_exclude(ent, UV__EXCLUDE_IFADDR)) - continue; - - (*count)++; - } - - if (*count == 0) { - freeifaddrs(addrs); - return 0; - } - - /* Make sure the memory is initiallized to zero using calloc() */ - *addresses = uv__calloc(*count, sizeof(**addresses)); - if (!(*addresses)) { - freeifaddrs(addrs); - return UV_ENOMEM; - } - - address = *addresses; - - for (ent = addrs; ent != NULL; ent = ent->ifa_next) { - if (uv__ifaddr_exclude(ent, UV__EXCLUDE_IFADDR)) - continue; - - address->name = uv__strdup(ent->ifa_name); - - if (ent->ifa_addr->sa_family == AF_INET6) { - address->address.address6 = *((struct sockaddr_in6*) ent->ifa_addr); - } else { - address->address.address4 = *((struct sockaddr_in*) ent->ifa_addr); - } - - if (ent->ifa_netmask->sa_family == AF_INET6) { - address->netmask.netmask6 = *((struct sockaddr_in6*) ent->ifa_netmask); - } else { - address->netmask.netmask4 = *((struct sockaddr_in*) ent->ifa_netmask); - } - - address->is_internal = !!(ent->ifa_flags & IFF_LOOPBACK); - - address++; - } - - /* Fill in physical addresses for each interface */ - for (ent = addrs; ent != NULL; ent = ent->ifa_next) { - if (uv__ifaddr_exclude(ent, UV__EXCLUDE_IFPHYS)) - continue; - - address = *addresses; - - for (i = 0; i < (*count); i++) { - size_t namelen = strlen(ent->ifa_name); - /* Alias interface share the same physical address */ - if (strncmp(address->name, ent->ifa_name, namelen) == 0 && - (address->name[namelen] == 0 || address->name[namelen] == ':')) { - sll = (struct sockaddr_ll*)ent->ifa_addr; - memcpy(address->phys_addr, sll->sll_addr, sizeof(address->phys_addr)); - } - address++; - } - } - - freeifaddrs(addrs); - - return 0; -#endif -} - - -void uv_free_interface_addresses(uv_interface_address_t* addresses, - int count) { - int i; - - for (i = 0; i < count; i++) { - uv__free(addresses[i].name); - } - - uv__free(addresses); -} - - -void uv__set_process_title(const char* title) { -#if defined(PR_SET_NAME) - prctl(PR_SET_NAME, title); /* Only copies first 16 characters. */ -#endif -} - - -static uint64_t uv__read_proc_meminfo(const char* what) { - uint64_t rc; - char* p; - char buf[4096]; /* Large enough to hold all of /proc/meminfo. */ - - if (uv__slurp("/proc/meminfo", buf, sizeof(buf))) - return 0; - - p = strstr(buf, what); - - if (p == NULL) - return 0; - - p += strlen(what); - - rc = 0; - sscanf(p, "%" PRIu64 " kB", &rc); - - return rc * 1024; -} - - -uint64_t uv_get_free_memory(void) { - struct sysinfo info; - uint64_t rc; - - rc = uv__read_proc_meminfo("MemFree:"); - - if (rc != 0) - return rc; - - if (0 == sysinfo(&info)) - return (uint64_t) info.freeram * info.mem_unit; - - return 0; -} - - -uint64_t uv_get_total_memory(void) { - struct sysinfo info; - uint64_t rc; - - rc = uv__read_proc_meminfo("MemTotal:"); - - if (rc != 0) - return rc; - - if (0 == sysinfo(&info)) - return (uint64_t) info.totalram * info.mem_unit; - - return 0; -} - - -static uint64_t uv__read_cgroups_uint64(const char* cgroup, const char* param) { - char filename[256]; - char buf[32]; /* Large enough to hold an encoded uint64_t. */ - uint64_t rc; - - rc = 0; - snprintf(filename, sizeof(filename), "/sys/fs/cgroup/%s/%s", cgroup, param); - if (0 == uv__slurp(filename, buf, sizeof(buf))) - sscanf(buf, "%" PRIu64, &rc); - - return rc; -} - - -uint64_t uv_get_constrained_memory(void) { - /* - * This might return 0 if there was a problem getting the memory limit from - * cgroups. This is OK because a return value of 0 signifies that the memory - * limit is unknown. - */ - return uv__read_cgroups_uint64("memory", "memory.limit_in_bytes"); -} - - -void uv_loadavg(double avg[3]) { - struct sysinfo info; - char buf[128]; /* Large enough to hold all of /proc/loadavg. */ - - if (0 == uv__slurp("/proc/loadavg", buf, sizeof(buf))) - if (3 == sscanf(buf, "%lf %lf %lf", &avg[0], &avg[1], &avg[2])) - return; - - if (sysinfo(&info) < 0) - return; - - avg[0] = (double) info.loads[0] / 65536.0; - avg[1] = (double) info.loads[1] / 65536.0; - avg[2] = (double) info.loads[2] / 65536.0; -} diff --git a/libuv/src/unix/linux-inotify.c b/libuv/src/unix/linux-inotify.c deleted file mode 100644 index c1bd260..0000000 --- a/libuv/src/unix/linux-inotify.c +++ /dev/null @@ -1,327 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "uv/tree.h" -#include "internal.h" - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -struct watcher_list { - RB_ENTRY(watcher_list) entry; - QUEUE watchers; - int iterating; - char* path; - int wd; -}; - -struct watcher_root { - struct watcher_list* rbh_root; -}; -#define CAST(p) ((struct watcher_root*)(p)) - - -static int compare_watchers(const struct watcher_list* a, - const struct watcher_list* b) { - if (a->wd < b->wd) return -1; - if (a->wd > b->wd) return 1; - return 0; -} - - -RB_GENERATE_STATIC(watcher_root, watcher_list, entry, compare_watchers) - - -static void uv__inotify_read(uv_loop_t* loop, - uv__io_t* w, - unsigned int revents); - -static void maybe_free_watcher_list(struct watcher_list* w, - uv_loop_t* loop); - -static int init_inotify(uv_loop_t* loop) { - int fd; - - if (loop->inotify_fd != -1) - return 0; - - fd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC); - if (fd < 0) - return UV__ERR(errno); - - loop->inotify_fd = fd; - uv__io_init(&loop->inotify_read_watcher, uv__inotify_read, loop->inotify_fd); - uv__io_start(loop, &loop->inotify_read_watcher, POLLIN); - - return 0; -} - - -int uv__inotify_fork(uv_loop_t* loop, void* old_watchers) { - /* Open the inotify_fd, and re-arm all the inotify watchers. */ - int err; - struct watcher_list* tmp_watcher_list_iter; - struct watcher_list* watcher_list; - struct watcher_list tmp_watcher_list; - QUEUE queue; - QUEUE* q; - uv_fs_event_t* handle; - char* tmp_path; - - if (old_watchers != NULL) { - /* We must restore the old watcher list to be able to close items - * out of it. - */ - loop->inotify_watchers = old_watchers; - - QUEUE_INIT(&tmp_watcher_list.watchers); - /* Note that the queue we use is shared with the start and stop() - * functions, making QUEUE_FOREACH unsafe to use. So we use the - * QUEUE_MOVE trick to safely iterate. Also don't free the watcher - * list until we're done iterating. c.f. uv__inotify_read. - */ - RB_FOREACH_SAFE(watcher_list, watcher_root, - CAST(&old_watchers), tmp_watcher_list_iter) { - watcher_list->iterating = 1; - QUEUE_MOVE(&watcher_list->watchers, &queue); - while (!QUEUE_EMPTY(&queue)) { - q = QUEUE_HEAD(&queue); - handle = QUEUE_DATA(q, uv_fs_event_t, watchers); - /* It's critical to keep a copy of path here, because it - * will be set to NULL by stop() and then deallocated by - * maybe_free_watcher_list - */ - tmp_path = uv__strdup(handle->path); - assert(tmp_path != NULL); - QUEUE_REMOVE(q); - QUEUE_INSERT_TAIL(&watcher_list->watchers, q); - uv_fs_event_stop(handle); - - QUEUE_INSERT_TAIL(&tmp_watcher_list.watchers, &handle->watchers); - handle->path = tmp_path; - } - watcher_list->iterating = 0; - maybe_free_watcher_list(watcher_list, loop); - } - - QUEUE_MOVE(&tmp_watcher_list.watchers, &queue); - while (!QUEUE_EMPTY(&queue)) { - q = QUEUE_HEAD(&queue); - QUEUE_REMOVE(q); - handle = QUEUE_DATA(q, uv_fs_event_t, watchers); - tmp_path = handle->path; - handle->path = NULL; - err = uv_fs_event_start(handle, handle->cb, tmp_path, 0); - uv__free(tmp_path); - if (err) - return err; - } - } - - return 0; -} - - -static struct watcher_list* find_watcher(uv_loop_t* loop, int wd) { - struct watcher_list w; - w.wd = wd; - return RB_FIND(watcher_root, CAST(&loop->inotify_watchers), &w); -} - -static void maybe_free_watcher_list(struct watcher_list* w, uv_loop_t* loop) { - /* if the watcher_list->watchers is being iterated over, we can't free it. */ - if ((!w->iterating) && QUEUE_EMPTY(&w->watchers)) { - /* No watchers left for this path. Clean up. */ - RB_REMOVE(watcher_root, CAST(&loop->inotify_watchers), w); - inotify_rm_watch(loop->inotify_fd, w->wd); - uv__free(w); - } -} - -static void uv__inotify_read(uv_loop_t* loop, - uv__io_t* dummy, - unsigned int events) { - const struct inotify_event* e; - struct watcher_list* w; - uv_fs_event_t* h; - QUEUE queue; - QUEUE* q; - const char* path; - ssize_t size; - const char *p; - /* needs to be large enough for sizeof(inotify_event) + strlen(path) */ - char buf[4096]; - - for (;;) { - do - size = read(loop->inotify_fd, buf, sizeof(buf)); - while (size == -1 && errno == EINTR); - - if (size == -1) { - assert(errno == EAGAIN || errno == EWOULDBLOCK); - break; - } - - assert(size > 0); /* pre-2.6.21 thing, size=0 == read buffer too small */ - - /* Now we have one or more inotify_event structs. */ - for (p = buf; p < buf + size; p += sizeof(*e) + e->len) { - e = (const struct inotify_event*) p; - - events = 0; - if (e->mask & (IN_ATTRIB|IN_MODIFY)) - events |= UV_CHANGE; - if (e->mask & ~(IN_ATTRIB|IN_MODIFY)) - events |= UV_RENAME; - - w = find_watcher(loop, e->wd); - if (w == NULL) - continue; /* Stale event, no watchers left. */ - - /* inotify does not return the filename when monitoring a single file - * for modifications. Repurpose the filename for API compatibility. - * I'm not convinced this is a good thing, maybe it should go. - */ - path = e->len ? (const char*) (e + 1) : uv__basename_r(w->path); - - /* We're about to iterate over the queue and call user's callbacks. - * What can go wrong? - * A callback could call uv_fs_event_stop() - * and the queue can change under our feet. - * So, we use QUEUE_MOVE() trick to safely iterate over the queue. - * And we don't free the watcher_list until we're done iterating. - * - * First, - * tell uv_fs_event_stop() (that could be called from a user's callback) - * not to free watcher_list. - */ - w->iterating = 1; - QUEUE_MOVE(&w->watchers, &queue); - while (!QUEUE_EMPTY(&queue)) { - q = QUEUE_HEAD(&queue); - h = QUEUE_DATA(q, uv_fs_event_t, watchers); - - QUEUE_REMOVE(q); - QUEUE_INSERT_TAIL(&w->watchers, q); - - h->cb(h, path, events, 0); - } - /* done iterating, time to (maybe) free empty watcher_list */ - w->iterating = 0; - maybe_free_watcher_list(w, loop); - } - } -} - - -int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { - uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT); - return 0; -} - - -int uv_fs_event_start(uv_fs_event_t* handle, - uv_fs_event_cb cb, - const char* path, - unsigned int flags) { - struct watcher_list* w; - size_t len; - int events; - int err; - int wd; - - if (uv__is_active(handle)) - return UV_EINVAL; - - err = init_inotify(handle->loop); - if (err) - return err; - - events = IN_ATTRIB - | IN_CREATE - | IN_MODIFY - | IN_DELETE - | IN_DELETE_SELF - | IN_MOVE_SELF - | IN_MOVED_FROM - | IN_MOVED_TO; - - wd = inotify_add_watch(handle->loop->inotify_fd, path, events); - if (wd == -1) - return UV__ERR(errno); - - w = find_watcher(handle->loop, wd); - if (w) - goto no_insert; - - len = strlen(path) + 1; - w = uv__malloc(sizeof(*w) + len); - if (w == NULL) - return UV_ENOMEM; - - w->wd = wd; - w->path = memcpy(w + 1, path, len); - QUEUE_INIT(&w->watchers); - w->iterating = 0; - RB_INSERT(watcher_root, CAST(&handle->loop->inotify_watchers), w); - -no_insert: - uv__handle_start(handle); - QUEUE_INSERT_TAIL(&w->watchers, &handle->watchers); - handle->path = w->path; - handle->cb = cb; - handle->wd = wd; - - return 0; -} - - -int uv_fs_event_stop(uv_fs_event_t* handle) { - struct watcher_list* w; - - if (!uv__is_active(handle)) - return 0; - - w = find_watcher(handle->loop, handle->wd); - assert(w != NULL); - - handle->wd = -1; - handle->path = NULL; - uv__handle_stop(handle); - QUEUE_REMOVE(&handle->watchers); - - maybe_free_watcher_list(w, handle->loop); - - return 0; -} - - -void uv__fs_event_close(uv_fs_event_t* handle) { - uv_fs_event_stop(handle); -} diff --git a/libuv/src/unix/linux-syscalls.c b/libuv/src/unix/linux-syscalls.c deleted file mode 100644 index 5071cd5..0000000 --- a/libuv/src/unix/linux-syscalls.c +++ /dev/null @@ -1,264 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "linux-syscalls.h" -#include -#include -#include -#include -#include - -#if defined(__arm__) -# if defined(__thumb__) || defined(__ARM_EABI__) -# define UV_SYSCALL_BASE 0 -# else -# define UV_SYSCALL_BASE 0x900000 -# endif -#endif /* __arm__ */ - -#ifndef __NR_recvmmsg -# if defined(__x86_64__) -# define __NR_recvmmsg 299 -# elif defined(__arm__) -# define __NR_recvmmsg (UV_SYSCALL_BASE + 365) -# endif -#endif /* __NR_recvmsg */ - -#ifndef __NR_sendmmsg -# if defined(__x86_64__) -# define __NR_sendmmsg 307 -# elif defined(__arm__) -# define __NR_sendmmsg (UV_SYSCALL_BASE + 374) -# endif -#endif /* __NR_sendmmsg */ - -#ifndef __NR_utimensat -# if defined(__x86_64__) -# define __NR_utimensat 280 -# elif defined(__i386__) -# define __NR_utimensat 320 -# elif defined(__arm__) -# define __NR_utimensat (UV_SYSCALL_BASE + 348) -# endif -#endif /* __NR_utimensat */ - -#ifndef __NR_preadv -# if defined(__x86_64__) -# define __NR_preadv 295 -# elif defined(__i386__) -# define __NR_preadv 333 -# elif defined(__arm__) -# define __NR_preadv (UV_SYSCALL_BASE + 361) -# endif -#endif /* __NR_preadv */ - -#ifndef __NR_pwritev -# if defined(__x86_64__) -# define __NR_pwritev 296 -# elif defined(__i386__) -# define __NR_pwritev 334 -# elif defined(__arm__) -# define __NR_pwritev (UV_SYSCALL_BASE + 362) -# endif -#endif /* __NR_pwritev */ - -#ifndef __NR_dup3 -# if defined(__x86_64__) -# define __NR_dup3 292 -# elif defined(__i386__) -# define __NR_dup3 330 -# elif defined(__arm__) -# define __NR_dup3 (UV_SYSCALL_BASE + 358) -# endif -#endif /* __NR_pwritev */ - -#ifndef __NR_copy_file_range -# if defined(__x86_64__) -# define __NR_copy_file_range 326 -# elif defined(__i386__) -# define __NR_copy_file_range 377 -# elif defined(__s390__) -# define __NR_copy_file_range 375 -# elif defined(__arm__) -# define __NR_copy_file_range (UV_SYSCALL_BASE + 391) -# elif defined(__aarch64__) -# define __NR_copy_file_range 285 -# elif defined(__powerpc__) -# define __NR_copy_file_range 379 -# elif defined(__arc__) -# define __NR_copy_file_range 285 -# endif -#endif /* __NR_copy_file_range */ - -#ifndef __NR_statx -# if defined(__x86_64__) -# define __NR_statx 332 -# elif defined(__i386__) -# define __NR_statx 383 -# elif defined(__aarch64__) -# define __NR_statx 397 -# elif defined(__arm__) -# define __NR_statx (UV_SYSCALL_BASE + 397) -# elif defined(__ppc__) -# define __NR_statx 383 -# elif defined(__s390__) -# define __NR_statx 379 -# endif -#endif /* __NR_statx */ - -#ifndef __NR_getrandom -# if defined(__x86_64__) -# define __NR_getrandom 318 -# elif defined(__i386__) -# define __NR_getrandom 355 -# elif defined(__aarch64__) -# define __NR_getrandom 384 -# elif defined(__arm__) -# define __NR_getrandom (UV_SYSCALL_BASE + 384) -# elif defined(__ppc__) -# define __NR_getrandom 359 -# elif defined(__s390__) -# define __NR_getrandom 349 -# endif -#endif /* __NR_getrandom */ - -struct uv__mmsghdr; - -int uv__sendmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen) { -#if defined(__i386__) - unsigned long args[4]; - int rc; - - args[0] = (unsigned long) fd; - args[1] = (unsigned long) mmsg; - args[2] = (unsigned long) vlen; - args[3] = /* flags */ 0; - - /* socketcall() raises EINVAL when SYS_SENDMMSG is not supported. */ - rc = syscall(/* __NR_socketcall */ 102, 20 /* SYS_SENDMMSG */, args); - if (rc == -1) - if (errno == EINVAL) - errno = ENOSYS; - - return rc; -#elif defined(__NR_sendmmsg) - return syscall(__NR_sendmmsg, fd, mmsg, vlen, /* flags */ 0); -#else - return errno = ENOSYS, -1; -#endif -} - - -int uv__recvmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen) { -#if defined(__i386__) - unsigned long args[5]; - int rc; - - args[0] = (unsigned long) fd; - args[1] = (unsigned long) mmsg; - args[2] = (unsigned long) vlen; - args[3] = /* flags */ 0; - args[4] = /* timeout */ 0; - - /* socketcall() raises EINVAL when SYS_RECVMMSG is not supported. */ - rc = syscall(/* __NR_socketcall */ 102, 19 /* SYS_RECVMMSG */, args); - if (rc == -1) - if (errno == EINVAL) - errno = ENOSYS; - - return rc; -#elif defined(__NR_recvmmsg) - return syscall(__NR_recvmmsg, fd, mmsg, vlen, /* flags */ 0, /* timeout */ 0); -#else - return errno = ENOSYS, -1; -#endif -} - - -ssize_t uv__preadv(int fd, const struct iovec *iov, int iovcnt, int64_t offset) { -#if !defined(__NR_preadv) || defined(__ANDROID_API__) && __ANDROID_API__ < 24 - return errno = ENOSYS, -1; -#else - return syscall(__NR_preadv, fd, iov, iovcnt, (long)offset, (long)(offset >> 32)); -#endif -} - - -ssize_t uv__pwritev(int fd, const struct iovec *iov, int iovcnt, int64_t offset) { -#if !defined(__NR_pwritev) || defined(__ANDROID_API__) && __ANDROID_API__ < 24 - return errno = ENOSYS, -1; -#else - return syscall(__NR_pwritev, fd, iov, iovcnt, (long)offset, (long)(offset >> 32)); -#endif -} - - -int uv__dup3(int oldfd, int newfd, int flags) { -#if !defined(__NR_dup3) || defined(__ANDROID_API__) && __ANDROID_API__ < 21 - return errno = ENOSYS, -1; -#else - return syscall(__NR_dup3, oldfd, newfd, flags); -#endif -} - - -ssize_t -uv__fs_copy_file_range(int fd_in, - off_t* off_in, - int fd_out, - off_t* off_out, - size_t len, - unsigned int flags) -{ -#ifdef __NR_copy_file_range - return syscall(__NR_copy_file_range, - fd_in, - off_in, - fd_out, - off_out, - len, - flags); -#else - return errno = ENOSYS, -1; -#endif -} - - -int uv__statx(int dirfd, - const char* path, - int flags, - unsigned int mask, - struct uv__statx* statxbuf) { -#if !defined(__NR_statx) || defined(__ANDROID_API__) && __ANDROID_API__ < 30 - return errno = ENOSYS, -1; -#else - return syscall(__NR_statx, dirfd, path, flags, mask, statxbuf); -#endif -} - - -ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags) { -#if !defined(__NR_getrandom) || defined(__ANDROID_API__) && __ANDROID_API__ < 28 - return errno = ENOSYS, -1; -#else - return syscall(__NR_getrandom, buf, buflen, flags); -#endif -} diff --git a/libuv/src/unix/linux-syscalls.h b/libuv/src/unix/linux-syscalls.h deleted file mode 100644 index b4d9082..0000000 --- a/libuv/src/unix/linux-syscalls.h +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_LINUX_SYSCALL_H_ -#define UV_LINUX_SYSCALL_H_ - -#include -#include -#include -#include -#include - -struct uv__statx_timestamp { - int64_t tv_sec; - uint32_t tv_nsec; - int32_t unused0; -}; - -struct uv__statx { - uint32_t stx_mask; - uint32_t stx_blksize; - uint64_t stx_attributes; - uint32_t stx_nlink; - uint32_t stx_uid; - uint32_t stx_gid; - uint16_t stx_mode; - uint16_t unused0; - uint64_t stx_ino; - uint64_t stx_size; - uint64_t stx_blocks; - uint64_t stx_attributes_mask; - struct uv__statx_timestamp stx_atime; - struct uv__statx_timestamp stx_btime; - struct uv__statx_timestamp stx_ctime; - struct uv__statx_timestamp stx_mtime; - uint32_t stx_rdev_major; - uint32_t stx_rdev_minor; - uint32_t stx_dev_major; - uint32_t stx_dev_minor; - uint64_t unused1[14]; -}; - -ssize_t uv__preadv(int fd, const struct iovec *iov, int iovcnt, int64_t offset); -ssize_t uv__pwritev(int fd, const struct iovec *iov, int iovcnt, int64_t offset); -int uv__dup3(int oldfd, int newfd, int flags); -ssize_t -uv__fs_copy_file_range(int fd_in, - off_t* off_in, - int fd_out, - off_t* off_out, - size_t len, - unsigned int flags); -int uv__statx(int dirfd, - const char* path, - int flags, - unsigned int mask, - struct uv__statx* statxbuf); -ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags); - -#endif /* UV_LINUX_SYSCALL_H_ */ diff --git a/libuv/src/unix/loop-watcher.c b/libuv/src/unix/loop-watcher.c deleted file mode 100644 index b8c1c2a..0000000 --- a/libuv/src/unix/loop-watcher.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#define UV_LOOP_WATCHER_DEFINE(name, type) \ - int uv_##name##_init(uv_loop_t* loop, uv_##name##_t* handle) { \ - uv__handle_init(loop, (uv_handle_t*)handle, UV_##type); \ - handle->name##_cb = NULL; \ - return 0; \ - } \ - \ - int uv_##name##_start(uv_##name##_t* handle, uv_##name##_cb cb) { \ - if (uv__is_active(handle)) return 0; \ - if (cb == NULL) return UV_EINVAL; \ - QUEUE_INSERT_HEAD(&handle->loop->name##_handles, &handle->queue); \ - handle->name##_cb = cb; \ - uv__handle_start(handle); \ - return 0; \ - } \ - \ - int uv_##name##_stop(uv_##name##_t* handle) { \ - if (!uv__is_active(handle)) return 0; \ - QUEUE_REMOVE(&handle->queue); \ - uv__handle_stop(handle); \ - return 0; \ - } \ - \ - void uv__run_##name(uv_loop_t* loop) { \ - uv_##name##_t* h; \ - QUEUE queue; \ - QUEUE* q; \ - QUEUE_MOVE(&loop->name##_handles, &queue); \ - while (!QUEUE_EMPTY(&queue)) { \ - q = QUEUE_HEAD(&queue); \ - h = QUEUE_DATA(q, uv_##name##_t, queue); \ - QUEUE_REMOVE(q); \ - QUEUE_INSERT_TAIL(&loop->name##_handles, q); \ - h->name##_cb(h); \ - } \ - } \ - \ - void uv__##name##_close(uv_##name##_t* handle) { \ - uv_##name##_stop(handle); \ - } - -UV_LOOP_WATCHER_DEFINE(prepare, PREPARE) -UV_LOOP_WATCHER_DEFINE(check, CHECK) -UV_LOOP_WATCHER_DEFINE(idle, IDLE) diff --git a/libuv/src/unix/loop.c b/libuv/src/unix/loop.c deleted file mode 100644 index a88e71c..0000000 --- a/libuv/src/unix/loop.c +++ /dev/null @@ -1,228 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "uv/tree.h" -#include "internal.h" -#include "heap-inl.h" -#include -#include -#include - -int uv_loop_init(uv_loop_t* loop) { - uv__loop_internal_fields_t* lfields; - void* saved_data; - int err; - - - saved_data = loop->data; - memset(loop, 0, sizeof(*loop)); - loop->data = saved_data; - - lfields = (uv__loop_internal_fields_t*) uv__calloc(1, sizeof(*lfields)); - if (lfields == NULL) - return UV_ENOMEM; - loop->internal_fields = lfields; - - err = uv_mutex_init(&lfields->loop_metrics.lock); - if (err) - goto fail_metrics_mutex_init; - - heap_init((struct heap*) &loop->timer_heap); - QUEUE_INIT(&loop->wq); - QUEUE_INIT(&loop->idle_handles); - QUEUE_INIT(&loop->async_handles); - QUEUE_INIT(&loop->check_handles); - QUEUE_INIT(&loop->prepare_handles); - QUEUE_INIT(&loop->handle_queue); - - loop->active_handles = 0; - loop->active_reqs.count = 0; - loop->nfds = 0; - loop->watchers = NULL; - loop->nwatchers = 0; - QUEUE_INIT(&loop->pending_queue); - QUEUE_INIT(&loop->watcher_queue); - - loop->closing_handles = NULL; - uv__update_time(loop); - loop->async_io_watcher.fd = -1; - loop->async_wfd = -1; - loop->signal_pipefd[0] = -1; - loop->signal_pipefd[1] = -1; - loop->backend_fd = -1; - loop->emfile_fd = -1; - - loop->timer_counter = 0; - loop->stop_flag = 0; - - err = uv__platform_loop_init(loop); - if (err) - goto fail_platform_init; - - uv__signal_global_once_init(); - err = uv_signal_init(loop, &loop->child_watcher); - if (err) - goto fail_signal_init; - - uv__handle_unref(&loop->child_watcher); - loop->child_watcher.flags |= UV_HANDLE_INTERNAL; - QUEUE_INIT(&loop->process_handles); - - err = uv_rwlock_init(&loop->cloexec_lock); - if (err) - goto fail_rwlock_init; - - err = uv_mutex_init(&loop->wq_mutex); - if (err) - goto fail_mutex_init; - - err = uv_async_init(loop, &loop->wq_async, uv__work_done); - if (err) - goto fail_async_init; - - uv__handle_unref(&loop->wq_async); - loop->wq_async.flags |= UV_HANDLE_INTERNAL; - - return 0; - -fail_async_init: - uv_mutex_destroy(&loop->wq_mutex); - -fail_mutex_init: - uv_rwlock_destroy(&loop->cloexec_lock); - -fail_rwlock_init: - uv__signal_loop_cleanup(loop); - -fail_signal_init: - uv__platform_loop_delete(loop); - -fail_platform_init: - uv_mutex_destroy(&lfields->loop_metrics.lock); - -fail_metrics_mutex_init: - uv__free(lfields); - loop->internal_fields = NULL; - - uv__free(loop->watchers); - loop->nwatchers = 0; - return err; -} - - -int uv_loop_fork(uv_loop_t* loop) { - int err; - unsigned int i; - uv__io_t* w; - - err = uv__io_fork(loop); - if (err) - return err; - - err = uv__async_fork(loop); - if (err) - return err; - - err = uv__signal_loop_fork(loop); - if (err) - return err; - - /* Rearm all the watchers that aren't re-queued by the above. */ - for (i = 0; i < loop->nwatchers; i++) { - w = loop->watchers[i]; - if (w == NULL) - continue; - - if (w->pevents != 0 && QUEUE_EMPTY(&w->watcher_queue)) { - w->events = 0; /* Force re-registration in uv__io_poll. */ - QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue); - } - } - - return 0; -} - - -void uv__loop_close(uv_loop_t* loop) { - uv__loop_internal_fields_t* lfields; - - uv__signal_loop_cleanup(loop); - uv__platform_loop_delete(loop); - uv__async_stop(loop); - - if (loop->emfile_fd != -1) { - uv__close(loop->emfile_fd); - loop->emfile_fd = -1; - } - - if (loop->backend_fd != -1) { - uv__close(loop->backend_fd); - loop->backend_fd = -1; - } - - uv_mutex_lock(&loop->wq_mutex); - assert(QUEUE_EMPTY(&loop->wq) && "thread pool work queue not empty!"); - assert(!uv__has_active_reqs(loop)); - uv_mutex_unlock(&loop->wq_mutex); - uv_mutex_destroy(&loop->wq_mutex); - - /* - * Note that all thread pool stuff is finished at this point and - * it is safe to just destroy rw lock - */ - uv_rwlock_destroy(&loop->cloexec_lock); - -#if 0 - assert(QUEUE_EMPTY(&loop->pending_queue)); - assert(QUEUE_EMPTY(&loop->watcher_queue)); - assert(loop->nfds == 0); -#endif - - uv__free(loop->watchers); - loop->watchers = NULL; - loop->nwatchers = 0; - - lfields = uv__get_internal_fields(loop); - uv_mutex_destroy(&lfields->loop_metrics.lock); - uv__free(lfields); - loop->internal_fields = NULL; -} - - -int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) { - uv__loop_internal_fields_t* lfields; - - lfields = uv__get_internal_fields(loop); - if (option == UV_METRICS_IDLE_TIME) { - lfields->flags |= UV_METRICS_IDLE_TIME; - return 0; - } - - if (option != UV_LOOP_BLOCK_SIGNAL) - return UV_ENOSYS; - - if (va_arg(ap, int) != SIGPROF) - return UV_EINVAL; - - loop->flags |= UV_LOOP_BLOCK_SIGPROF; - return 0; -} diff --git a/libuv/src/unix/netbsd.c b/libuv/src/unix/netbsd.c deleted file mode 100644 index c66333f..0000000 --- a/libuv/src/unix/netbsd.c +++ /dev/null @@ -1,259 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include - - -int uv__platform_loop_init(uv_loop_t* loop) { - return uv__kqueue_init(loop); -} - - -void uv__platform_loop_delete(uv_loop_t* loop) { -} - - -void uv_loadavg(double avg[3]) { - struct loadavg info; - size_t size = sizeof(info); - int which[] = {CTL_VM, VM_LOADAVG}; - - if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0) == -1) return; - - avg[0] = (double) info.ldavg[0] / info.fscale; - avg[1] = (double) info.ldavg[1] / info.fscale; - avg[2] = (double) info.ldavg[2] / info.fscale; -} - - -int uv_exepath(char* buffer, size_t* size) { - /* Intermediate buffer, retrieving partial path name does not work - * As of NetBSD-8(beta), vnode->path translator does not handle files - * with longer names than 31 characters. - */ - char int_buf[PATH_MAX]; - size_t int_size; - int mib[4]; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - mib[0] = CTL_KERN; - mib[1] = KERN_PROC_ARGS; - mib[2] = -1; - mib[3] = KERN_PROC_PATHNAME; - int_size = ARRAY_SIZE(int_buf); - - if (sysctl(mib, 4, int_buf, &int_size, NULL, 0)) - return UV__ERR(errno); - - /* Copy string from the intermediate buffer to outer one with appropriate - * length. - */ - /* TODO(bnoordhuis) Check uv__strscpy() return value. */ - uv__strscpy(buffer, int_buf, *size); - - /* Set new size. */ - *size = strlen(buffer); - - return 0; -} - - -uint64_t uv_get_free_memory(void) { - struct uvmexp info; - size_t size = sizeof(info); - int which[] = {CTL_VM, VM_UVMEXP}; - - if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) - return UV__ERR(errno); - - return (uint64_t) info.free * sysconf(_SC_PAGESIZE); -} - - -uint64_t uv_get_total_memory(void) { -#if defined(HW_PHYSMEM64) - uint64_t info; - int which[] = {CTL_HW, HW_PHYSMEM64}; -#else - unsigned int info; - int which[] = {CTL_HW, HW_PHYSMEM}; -#endif - size_t size = sizeof(info); - - if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) - return UV__ERR(errno); - - return (uint64_t) info; -} - - -uint64_t uv_get_constrained_memory(void) { - return 0; /* Memory constraints are unknown. */ -} - - -int uv_resident_set_memory(size_t* rss) { - kvm_t *kd = NULL; - struct kinfo_proc2 *kinfo = NULL; - pid_t pid; - int nprocs; - int max_size = sizeof(struct kinfo_proc2); - int page_size; - - page_size = getpagesize(); - pid = getpid(); - - kd = kvm_open(NULL, NULL, NULL, KVM_NO_FILES, "kvm_open"); - - if (kd == NULL) goto error; - - kinfo = kvm_getproc2(kd, KERN_PROC_PID, pid, max_size, &nprocs); - if (kinfo == NULL) goto error; - - *rss = kinfo->p_vm_rssize * page_size; - - kvm_close(kd); - - return 0; - -error: - if (kd) kvm_close(kd); - return UV_EPERM; -} - - -int uv_uptime(double* uptime) { - time_t now; - struct timeval info; - size_t size = sizeof(info); - static int which[] = {CTL_KERN, KERN_BOOTTIME}; - - if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) - return UV__ERR(errno); - - now = time(NULL); - - *uptime = (double)(now - info.tv_sec); - return 0; -} - - -int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { - unsigned int ticks = (unsigned int)sysconf(_SC_CLK_TCK); - unsigned int multiplier = ((uint64_t)1000L / ticks); - unsigned int cur = 0; - uv_cpu_info_t* cpu_info; - u_int64_t* cp_times; - char model[512]; - u_int64_t cpuspeed; - int numcpus; - size_t size; - int i; - - size = sizeof(model); - if (sysctlbyname("machdep.cpu_brand", &model, &size, NULL, 0) && - sysctlbyname("hw.model", &model, &size, NULL, 0)) { - return UV__ERR(errno); - } - - size = sizeof(numcpus); - if (sysctlbyname("hw.ncpu", &numcpus, &size, NULL, 0)) - return UV__ERR(errno); - *count = numcpus; - - /* Only i386 and amd64 have machdep.tsc_freq */ - size = sizeof(cpuspeed); - if (sysctlbyname("machdep.tsc_freq", &cpuspeed, &size, NULL, 0)) - cpuspeed = 0; - - size = numcpus * CPUSTATES * sizeof(*cp_times); - cp_times = uv__malloc(size); - if (cp_times == NULL) - return UV_ENOMEM; - - if (sysctlbyname("kern.cp_time", cp_times, &size, NULL, 0)) - return UV__ERR(errno); - - *cpu_infos = uv__malloc(numcpus * sizeof(**cpu_infos)); - if (!(*cpu_infos)) { - uv__free(cp_times); - uv__free(*cpu_infos); - return UV_ENOMEM; - } - - for (i = 0; i < numcpus; i++) { - cpu_info = &(*cpu_infos)[i]; - cpu_info->cpu_times.user = (uint64_t)(cp_times[CP_USER+cur]) * multiplier; - cpu_info->cpu_times.nice = (uint64_t)(cp_times[CP_NICE+cur]) * multiplier; - cpu_info->cpu_times.sys = (uint64_t)(cp_times[CP_SYS+cur]) * multiplier; - cpu_info->cpu_times.idle = (uint64_t)(cp_times[CP_IDLE+cur]) * multiplier; - cpu_info->cpu_times.irq = (uint64_t)(cp_times[CP_INTR+cur]) * multiplier; - cpu_info->model = uv__strdup(model); - cpu_info->speed = (int)(cpuspeed/(uint64_t) 1e6); - cur += CPUSTATES; - } - uv__free(cp_times); - return 0; -} - -int uv__random_sysctl(void* buf, size_t len) { - static int name[] = {CTL_KERN, KERN_ARND}; - size_t count, req; - unsigned char* p; - - p = buf; - while (len) { - req = len < 32 ? len : 32; - count = req; - - if (sysctl(name, ARRAY_SIZE(name), p, &count, NULL, 0) == -1) - return UV__ERR(errno); - - if (count != req) - return UV_EIO; /* Can't happen. */ - - p += count; - len -= count; - } - - return 0; -} diff --git a/libuv/src/unix/no-fsevents.c b/libuv/src/unix/no-fsevents.c deleted file mode 100644 index 158643a..0000000 --- a/libuv/src/unix/no-fsevents.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include - -int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { - return UV_ENOSYS; -} - -int uv_fs_event_start(uv_fs_event_t* handle, uv_fs_event_cb cb, - const char* filename, unsigned int flags) { - return UV_ENOSYS; -} - -int uv_fs_event_stop(uv_fs_event_t* handle) { - return UV_ENOSYS; -} - -void uv__fs_event_close(uv_fs_event_t* handle) { - UNREACHABLE(); -} diff --git a/libuv/src/unix/no-proctitle.c b/libuv/src/unix/no-proctitle.c deleted file mode 100644 index 32aa0af..0000000 --- a/libuv/src/unix/no-proctitle.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include - -char** uv_setup_args(int argc, char** argv) { - return argv; -} - -void uv__process_title_cleanup(void) { -} - -int uv_set_process_title(const char* title) { - return 0; -} - -int uv_get_process_title(char* buffer, size_t size) { - if (buffer == NULL || size == 0) - return UV_EINVAL; - - buffer[0] = '\0'; - return 0; -} diff --git a/libuv/src/unix/openbsd.c b/libuv/src/unix/openbsd.c deleted file mode 100644 index f32a94d..0000000 --- a/libuv/src/unix/openbsd.c +++ /dev/null @@ -1,240 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - - -int uv__platform_loop_init(uv_loop_t* loop) { - return uv__kqueue_init(loop); -} - - -void uv__platform_loop_delete(uv_loop_t* loop) { -} - - -void uv_loadavg(double avg[3]) { - struct loadavg info; - size_t size = sizeof(info); - int which[] = {CTL_VM, VM_LOADAVG}; - - if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0) < 0) return; - - avg[0] = (double) info.ldavg[0] / info.fscale; - avg[1] = (double) info.ldavg[1] / info.fscale; - avg[2] = (double) info.ldavg[2] / info.fscale; -} - - -int uv_exepath(char* buffer, size_t* size) { - int mib[4]; - char **argsbuf = NULL; - size_t argsbuf_size = 100U; - size_t exepath_size; - pid_t mypid; - int err; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - mypid = getpid(); - for (;;) { - err = UV_ENOMEM; - argsbuf = uv__reallocf(argsbuf, argsbuf_size); - if (argsbuf == NULL) - goto out; - mib[0] = CTL_KERN; - mib[1] = KERN_PROC_ARGS; - mib[2] = mypid; - mib[3] = KERN_PROC_ARGV; - if (sysctl(mib, ARRAY_SIZE(mib), argsbuf, &argsbuf_size, NULL, 0) == 0) { - break; - } - if (errno != ENOMEM) { - err = UV__ERR(errno); - goto out; - } - argsbuf_size *= 2U; - } - - if (argsbuf[0] == NULL) { - err = UV_EINVAL; /* FIXME(bnoordhuis) More appropriate error. */ - goto out; - } - - *size -= 1; - exepath_size = strlen(argsbuf[0]); - if (*size > exepath_size) - *size = exepath_size; - - memcpy(buffer, argsbuf[0], *size); - buffer[*size] = '\0'; - err = 0; - -out: - uv__free(argsbuf); - - return err; -} - - -uint64_t uv_get_free_memory(void) { - struct uvmexp info; - size_t size = sizeof(info); - int which[] = {CTL_VM, VM_UVMEXP}; - - if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) - return UV__ERR(errno); - - return (uint64_t) info.free * sysconf(_SC_PAGESIZE); -} - - -uint64_t uv_get_total_memory(void) { - uint64_t info; - int which[] = {CTL_HW, HW_PHYSMEM64}; - size_t size = sizeof(info); - - if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) - return UV__ERR(errno); - - return (uint64_t) info; -} - - -uint64_t uv_get_constrained_memory(void) { - return 0; /* Memory constraints are unknown. */ -} - - -int uv_resident_set_memory(size_t* rss) { - struct kinfo_proc kinfo; - size_t page_size = getpagesize(); - size_t size = sizeof(struct kinfo_proc); - int mib[6]; - - mib[0] = CTL_KERN; - mib[1] = KERN_PROC; - mib[2] = KERN_PROC_PID; - mib[3] = getpid(); - mib[4] = sizeof(struct kinfo_proc); - mib[5] = 1; - - if (sysctl(mib, ARRAY_SIZE(mib), &kinfo, &size, NULL, 0) < 0) - return UV__ERR(errno); - - *rss = kinfo.p_vm_rssize * page_size; - return 0; -} - - -int uv_uptime(double* uptime) { - time_t now; - struct timeval info; - size_t size = sizeof(info); - static int which[] = {CTL_KERN, KERN_BOOTTIME}; - - if (sysctl(which, ARRAY_SIZE(which), &info, &size, NULL, 0)) - return UV__ERR(errno); - - now = time(NULL); - - *uptime = (double)(now - info.tv_sec); - return 0; -} - - -int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { - unsigned int ticks = (unsigned int)sysconf(_SC_CLK_TCK), - multiplier = ((uint64_t)1000L / ticks), cpuspeed; - uint64_t info[CPUSTATES]; - char model[512]; - int numcpus = 1; - int which[] = {CTL_HW,HW_MODEL}; - int percpu[] = {CTL_KERN,KERN_CPTIME2,0}; - size_t size; - int i, j; - uv_cpu_info_t* cpu_info; - - size = sizeof(model); - if (sysctl(which, ARRAY_SIZE(which), &model, &size, NULL, 0)) - return UV__ERR(errno); - - which[1] = HW_NCPUONLINE; - size = sizeof(numcpus); - if (sysctl(which, ARRAY_SIZE(which), &numcpus, &size, NULL, 0)) - return UV__ERR(errno); - - *cpu_infos = uv__malloc(numcpus * sizeof(**cpu_infos)); - if (!(*cpu_infos)) - return UV_ENOMEM; - - i = 0; - *count = numcpus; - - which[1] = HW_CPUSPEED; - size = sizeof(cpuspeed); - if (sysctl(which, ARRAY_SIZE(which), &cpuspeed, &size, NULL, 0)) - goto error; - - size = sizeof(info); - for (i = 0; i < numcpus; i++) { - percpu[2] = i; - if (sysctl(percpu, ARRAY_SIZE(percpu), &info, &size, NULL, 0)) - goto error; - - cpu_info = &(*cpu_infos)[i]; - - cpu_info->cpu_times.user = (uint64_t)(info[CP_USER]) * multiplier; - cpu_info->cpu_times.nice = (uint64_t)(info[CP_NICE]) * multiplier; - cpu_info->cpu_times.sys = (uint64_t)(info[CP_SYS]) * multiplier; - cpu_info->cpu_times.idle = (uint64_t)(info[CP_IDLE]) * multiplier; - cpu_info->cpu_times.irq = (uint64_t)(info[CP_INTR]) * multiplier; - - cpu_info->model = uv__strdup(model); - cpu_info->speed = cpuspeed; - } - - return 0; - -error: - *count = 0; - for (j = 0; j < i; j++) - uv__free((*cpu_infos)[j].model); - - uv__free(*cpu_infos); - *cpu_infos = NULL; - return UV__ERR(errno); -} diff --git a/libuv/src/unix/os390-proctitle.c b/libuv/src/unix/os390-proctitle.c deleted file mode 100644 index ccda97c..0000000 --- a/libuv/src/unix/os390-proctitle.c +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include - -static uv_mutex_t process_title_mutex; -static uv_once_t process_title_mutex_once = UV_ONCE_INIT; -static char* process_title = NULL; -static void* args_mem = NULL; - - -static void init_process_title_mutex_once(void) { - uv_mutex_init(&process_title_mutex); -} - - -char** uv_setup_args(int argc, char** argv) { - char** new_argv; - size_t size; - char* s; - int i; - - if (argc <= 0) - return argv; - - /* Calculate how much memory we need for the argv strings. */ - size = 0; - for (i = 0; i < argc; i++) - size += strlen(argv[i]) + 1; - - /* Add space for the argv pointers. */ - size += (argc + 1) * sizeof(char*); - - new_argv = uv__malloc(size); - if (new_argv == NULL) - return argv; - - /* Copy over the strings and set up the pointer table. */ - s = (char*) &new_argv[argc + 1]; - for (i = 0; i < argc; i++) { - size = strlen(argv[i]) + 1; - memcpy(s, argv[i], size); - new_argv[i] = s; - s += size; - } - new_argv[i] = NULL; - - args_mem = new_argv; - process_title = uv__strdup(argv[0]); - - return new_argv; -} - - -int uv_set_process_title(const char* title) { - char* new_title; - - /* If uv_setup_args wasn't called or failed, we can't continue. */ - if (args_mem == NULL) - return UV_ENOBUFS; - - /* We cannot free this pointer when libuv shuts down, - * the process may still be using it. - */ - new_title = uv__strdup(title); - if (new_title == NULL) - return UV_ENOMEM; - - uv_once(&process_title_mutex_once, init_process_title_mutex_once); - uv_mutex_lock(&process_title_mutex); - - if (process_title != NULL) - uv__free(process_title); - - process_title = new_title; - - uv_mutex_unlock(&process_title_mutex); - - return 0; -} - - -int uv_get_process_title(char* buffer, size_t size) { - size_t len; - - if (buffer == NULL || size == 0) - return UV_EINVAL; - - /* If uv_setup_args wasn't called or failed, we can't continue. */ - if (args_mem == NULL || process_title == NULL) - return UV_ENOBUFS; - - uv_once(&process_title_mutex_once, init_process_title_mutex_once); - uv_mutex_lock(&process_title_mutex); - - len = strlen(process_title); - - if (size <= len) { - uv_mutex_unlock(&process_title_mutex); - return UV_ENOBUFS; - } - - strcpy(buffer, process_title); - - uv_mutex_unlock(&process_title_mutex); - - return 0; -} - - -void uv__process_title_cleanup(void) { - uv__free(args_mem); /* Keep valgrind happy. */ - args_mem = NULL; -} diff --git a/libuv/src/unix/os390-syscalls.c b/libuv/src/unix/os390-syscalls.c deleted file mode 100644 index c191553..0000000 --- a/libuv/src/unix/os390-syscalls.c +++ /dev/null @@ -1,529 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -#include "os390-syscalls.h" -#include -#include -#include -#include -#include - -static QUEUE global_epoll_queue; -static uv_mutex_t global_epoll_lock; -static uv_once_t once = UV_ONCE_INIT; - -int scandir(const char* maindir, struct dirent*** namelist, - int (*filter)(const struct dirent*), - int (*compar)(const struct dirent**, - const struct dirent **)) { - struct dirent** nl; - struct dirent** nl_copy; - struct dirent* dirent; - unsigned count; - size_t allocated; - DIR* mdir; - - nl = NULL; - count = 0; - allocated = 0; - mdir = opendir(maindir); - if (!mdir) - return -1; - - for (;;) { - dirent = readdir(mdir); - if (!dirent) - break; - if (!filter || filter(dirent)) { - struct dirent* copy; - copy = uv__malloc(sizeof(*copy)); - if (!copy) - goto error; - memcpy(copy, dirent, sizeof(*copy)); - - nl_copy = uv__realloc(nl, sizeof(*copy) * (count + 1)); - if (nl_copy == NULL) { - uv__free(copy); - goto error; - } - - nl = nl_copy; - nl[count++] = copy; - } - } - - qsort(nl, count, sizeof(struct dirent *), - (int (*)(const void *, const void *)) compar); - - closedir(mdir); - - *namelist = nl; - return count; - -error: - while (count > 0) { - dirent = nl[--count]; - uv__free(dirent); - } - uv__free(nl); - closedir(mdir); - errno = ENOMEM; - return -1; -} - - -static unsigned int next_power_of_two(unsigned int val) { - val -= 1; - val |= val >> 1; - val |= val >> 2; - val |= val >> 4; - val |= val >> 8; - val |= val >> 16; - val += 1; - return val; -} - - -static void maybe_resize(uv__os390_epoll* lst, unsigned int len) { - unsigned int newsize; - unsigned int i; - struct pollfd* newlst; - struct pollfd event; - - if (len <= lst->size) - return; - - if (lst->size == 0) - event.fd = -1; - else { - /* Extract the message queue at the end. */ - event = lst->items[lst->size - 1]; - lst->items[lst->size - 1].fd = -1; - } - - newsize = next_power_of_two(len); - newlst = uv__reallocf(lst->items, newsize * sizeof(lst->items[0])); - - if (newlst == NULL) - abort(); - for (i = lst->size; i < newsize; ++i) - newlst[i].fd = -1; - - /* Restore the message queue at the end */ - newlst[newsize - 1] = event; - - lst->items = newlst; - lst->size = newsize; -} - - -static void init_message_queue(uv__os390_epoll* lst) { - struct { - long int header; - char body; - } msg; - - /* initialize message queue */ - lst->msg_queue = msgget(IPC_PRIVATE, 0600 | IPC_CREAT); - if (lst->msg_queue == -1) - abort(); - - /* - On z/OS, the message queue will be affiliated with the process only - when a send is performed on it. Once this is done, the system - can be queried for all message queues belonging to our process id. - */ - msg.header = 1; - if (msgsnd(lst->msg_queue, &msg, sizeof(msg.body), 0) != 0) - abort(); - - /* Clean up the dummy message sent above */ - if (msgrcv(lst->msg_queue, &msg, sizeof(msg.body), 0, 0) != sizeof(msg.body)) - abort(); -} - - -static void before_fork(void) { - uv_mutex_lock(&global_epoll_lock); -} - - -static void after_fork(void) { - uv_mutex_unlock(&global_epoll_lock); -} - - -static void child_fork(void) { - QUEUE* q; - uv_once_t child_once = UV_ONCE_INIT; - - /* reset once */ - memcpy(&once, &child_once, sizeof(child_once)); - - /* reset epoll list */ - while (!QUEUE_EMPTY(&global_epoll_queue)) { - uv__os390_epoll* lst; - q = QUEUE_HEAD(&global_epoll_queue); - QUEUE_REMOVE(q); - lst = QUEUE_DATA(q, uv__os390_epoll, member); - uv__free(lst->items); - lst->items = NULL; - lst->size = 0; - } - - uv_mutex_unlock(&global_epoll_lock); - uv_mutex_destroy(&global_epoll_lock); -} - - -static void epoll_init(void) { - QUEUE_INIT(&global_epoll_queue); - if (uv_mutex_init(&global_epoll_lock)) - abort(); - - if (pthread_atfork(&before_fork, &after_fork, &child_fork)) - abort(); -} - - -uv__os390_epoll* epoll_create1(int flags) { - uv__os390_epoll* lst; - - lst = uv__malloc(sizeof(*lst)); - if (lst != NULL) { - /* initialize list */ - lst->size = 0; - lst->items = NULL; - init_message_queue(lst); - maybe_resize(lst, 1); - lst->items[lst->size - 1].fd = lst->msg_queue; - lst->items[lst->size - 1].events = POLLIN; - lst->items[lst->size - 1].revents = 0; - uv_once(&once, epoll_init); - uv_mutex_lock(&global_epoll_lock); - QUEUE_INSERT_TAIL(&global_epoll_queue, &lst->member); - uv_mutex_unlock(&global_epoll_lock); - } - - return lst; -} - - -int epoll_ctl(uv__os390_epoll* lst, - int op, - int fd, - struct epoll_event *event) { - uv_mutex_lock(&global_epoll_lock); - - if (op == EPOLL_CTL_DEL) { - if (fd >= lst->size || lst->items[fd].fd == -1) { - uv_mutex_unlock(&global_epoll_lock); - errno = ENOENT; - return -1; - } - lst->items[fd].fd = -1; - } else if (op == EPOLL_CTL_ADD) { - - /* Resizing to 'fd + 1' would expand the list to contain at least - * 'fd'. But we need to guarantee that the last index on the list - * is reserved for the message queue. So specify 'fd + 2' instead. - */ - maybe_resize(lst, fd + 2); - if (lst->items[fd].fd != -1) { - uv_mutex_unlock(&global_epoll_lock); - errno = EEXIST; - return -1; - } - lst->items[fd].fd = fd; - lst->items[fd].events = event->events; - lst->items[fd].revents = 0; - } else if (op == EPOLL_CTL_MOD) { - if (fd >= lst->size - 1 || lst->items[fd].fd == -1) { - uv_mutex_unlock(&global_epoll_lock); - errno = ENOENT; - return -1; - } - lst->items[fd].events = event->events; - lst->items[fd].revents = 0; - } else - abort(); - - uv_mutex_unlock(&global_epoll_lock); - return 0; -} - -#define EP_MAX_PFDS (ULONG_MAX / sizeof(struct pollfd)) -#define EP_MAX_EVENTS (INT_MAX / sizeof(struct epoll_event)) - -int epoll_wait(uv__os390_epoll* lst, struct epoll_event* events, - int maxevents, int timeout) { - nmsgsfds_t size; - struct pollfd* pfds; - int pollret; - int reventcount; - int nevents; - struct pollfd msg_fd; - int i; - - if (!lst || !lst->items || !events) { - errno = EFAULT; - return -1; - } - - if (lst->size > EP_MAX_PFDS) { - errno = EINVAL; - return -1; - } - - if (maxevents <= 0 || maxevents > EP_MAX_EVENTS) { - errno = EINVAL; - return -1; - } - - if (lst->size > 0) - _SET_FDS_MSGS(size, 1, lst->size - 1); - else - _SET_FDS_MSGS(size, 0, 0); - pfds = lst->items; - pollret = poll(pfds, size, timeout); - if (pollret <= 0) - return pollret; - - assert(lst->size > 0); - - pollret = _NFDS(pollret) + _NMSGS(pollret); - - reventcount = 0; - nevents = 0; - msg_fd = pfds[lst->size - 1]; - for (i = 0; - i < lst->size && i < maxevents && reventcount < pollret; ++i) { - struct epoll_event ev; - struct pollfd* pfd; - - pfd = &pfds[i]; - if (pfd->fd == -1 || pfd->revents == 0) - continue; - - ev.fd = pfd->fd; - ev.events = pfd->revents; - ev.is_msg = 0; - if (pfd->revents & POLLIN && pfd->revents & POLLOUT) - reventcount += 2; - else if (pfd->revents & (POLLIN | POLLOUT)) - ++reventcount; - - pfd->revents = 0; - events[nevents++] = ev; - } - - if (msg_fd.revents != 0 && msg_fd.fd != -1) - if (i == lst->size) - events[nevents - 1].is_msg = 1; - - return nevents; -} - - -int epoll_file_close(int fd) { - QUEUE* q; - - uv_once(&once, epoll_init); - uv_mutex_lock(&global_epoll_lock); - QUEUE_FOREACH(q, &global_epoll_queue) { - uv__os390_epoll* lst; - - lst = QUEUE_DATA(q, uv__os390_epoll, member); - if (fd < lst->size && lst->items != NULL && lst->items[fd].fd != -1) - lst->items[fd].fd = -1; - } - - uv_mutex_unlock(&global_epoll_lock); - return 0; -} - -void epoll_queue_close(uv__os390_epoll* lst) { - /* Remove epoll instance from global queue */ - uv_mutex_lock(&global_epoll_lock); - QUEUE_REMOVE(&lst->member); - uv_mutex_unlock(&global_epoll_lock); - - /* Free resources */ - msgctl(lst->msg_queue, IPC_RMID, NULL); - lst->msg_queue = -1; - uv__free(lst->items); - lst->items = NULL; -} - - -char* mkdtemp(char* path) { - static const char* tempchars = - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - static const size_t num_chars = 62; - static const size_t num_x = 6; - char *ep, *cp; - unsigned int tries, i; - size_t len; - uint64_t v; - int fd; - int retval; - int saved_errno; - - len = strlen(path); - ep = path + len; - if (len < num_x || strncmp(ep - num_x, "XXXXXX", num_x)) { - errno = EINVAL; - return NULL; - } - - fd = open("/dev/urandom", O_RDONLY); - if (fd == -1) - return NULL; - - tries = TMP_MAX; - retval = -1; - do { - if (read(fd, &v, sizeof(v)) != sizeof(v)) - break; - - cp = ep - num_x; - for (i = 0; i < num_x; i++) { - *cp++ = tempchars[v % num_chars]; - v /= num_chars; - } - - if (mkdir(path, S_IRWXU) == 0) { - retval = 0; - break; - } - else if (errno != EEXIST) - break; - } while (--tries); - - saved_errno = errno; - uv__close(fd); - if (tries == 0) { - errno = EEXIST; - return NULL; - } - - if (retval == -1) { - errno = saved_errno; - return NULL; - } - - return path; -} - - -ssize_t os390_readlink(const char* path, char* buf, size_t len) { - ssize_t rlen; - ssize_t vlen; - ssize_t plen; - char* delimiter; - char old_delim; - char* tmpbuf; - char realpathstr[PATH_MAX + 1]; - - tmpbuf = uv__malloc(len + 1); - if (tmpbuf == NULL) { - errno = ENOMEM; - return -1; - } - - rlen = readlink(path, tmpbuf, len); - if (rlen < 0) { - uv__free(tmpbuf); - return rlen; - } - - if (rlen < 3 || strncmp("/$", tmpbuf, 2) != 0) { - /* Straightforward readlink. */ - memcpy(buf, tmpbuf, rlen); - uv__free(tmpbuf); - return rlen; - } - - /* - * There is a parmlib variable at the beginning - * which needs interpretation. - */ - tmpbuf[rlen] = '\0'; - delimiter = strchr(tmpbuf + 2, '/'); - if (delimiter == NULL) - /* No slash at the end */ - delimiter = strchr(tmpbuf + 2, '\0'); - - /* Read real path of the variable. */ - old_delim = *delimiter; - *delimiter = '\0'; - if (realpath(tmpbuf, realpathstr) == NULL) { - uv__free(tmpbuf); - return -1; - } - - /* realpathstr is not guaranteed to end with null byte.*/ - realpathstr[PATH_MAX] = '\0'; - - /* Reset the delimiter and fill up the buffer. */ - *delimiter = old_delim; - plen = strlen(delimiter); - vlen = strlen(realpathstr); - rlen = plen + vlen; - if (rlen > len) { - uv__free(tmpbuf); - errno = ENAMETOOLONG; - return -1; - } - memcpy(buf, realpathstr, vlen); - memcpy(buf + vlen, delimiter, plen); - - /* Done using temporary buffer. */ - uv__free(tmpbuf); - - return rlen; -} - - -int sem_init(UV_PLATFORM_SEM_T* semid, int pshared, unsigned int value) { - UNREACHABLE(); -} - - -int sem_destroy(UV_PLATFORM_SEM_T* semid) { - UNREACHABLE(); -} - - -int sem_post(UV_PLATFORM_SEM_T* semid) { - UNREACHABLE(); -} - - -int sem_trywait(UV_PLATFORM_SEM_T* semid) { - UNREACHABLE(); -} - - -int sem_wait(UV_PLATFORM_SEM_T* semid) { - UNREACHABLE(); -} diff --git a/libuv/src/unix/os390-syscalls.h b/libuv/src/unix/os390-syscalls.h deleted file mode 100644 index 7d59b75..0000000 --- a/libuv/src/unix/os390-syscalls.h +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -#ifndef UV_OS390_SYSCALL_H_ -#define UV_OS390_SYSCALL_H_ - -#include "uv.h" -#include "internal.h" -#include -#include -#include -#include "zos-base.h" - -#define EPOLL_CTL_ADD 1 -#define EPOLL_CTL_DEL 2 -#define EPOLL_CTL_MOD 3 -#define MAX_EPOLL_INSTANCES 256 -#define MAX_ITEMS_PER_EPOLL 1024 - -#define UV__O_CLOEXEC 0x80000 - -struct epoll_event { - int events; - int fd; - int is_msg; -}; - -typedef struct { - QUEUE member; - struct pollfd* items; - unsigned long size; - int msg_queue; -} uv__os390_epoll; - -/* epoll api */ -uv__os390_epoll* epoll_create1(int flags); -int epoll_ctl(uv__os390_epoll* ep, int op, int fd, struct epoll_event *event); -int epoll_wait(uv__os390_epoll* ep, struct epoll_event *events, int maxevents, int timeout); -int epoll_file_close(int fd); - -/* utility functions */ -int scandir(const char* maindir, struct dirent*** namelist, - int (*filter)(const struct dirent *), - int (*compar)(const struct dirent **, - const struct dirent **)); -char *mkdtemp(char* path); -ssize_t os390_readlink(const char* path, char* buf, size_t len); -size_t strnlen(const char* str, size_t maxlen); -int sem_init(UV_PLATFORM_SEM_T* semid, int pshared, unsigned int value); -int sem_destroy(UV_PLATFORM_SEM_T* semid); -int sem_post(UV_PLATFORM_SEM_T* semid); -int sem_trywait(UV_PLATFORM_SEM_T* semid); -int sem_wait(UV_PLATFORM_SEM_T* semid); - -#endif /* UV_OS390_SYSCALL_H_ */ diff --git a/libuv/src/unix/os390.c b/libuv/src/unix/os390.c deleted file mode 100644 index bf0448b..0000000 --- a/libuv/src/unix/os390.c +++ /dev/null @@ -1,877 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "internal.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "zos-base.h" -#if defined(__clang__) -#include "csrsic.h" -#else -#include "//'SYS1.SAMPLIB(CSRSIC)'" -#endif - -#define CVT_PTR 0x10 -#define PSA_PTR 0x00 -#define CSD_OFFSET 0x294 - -/* - Long-term average CPU service used by this logical partition, - in millions of service units per hour. If this value is above - the partition's defined capacity, the partition will be capped. - It is calculated using the physical CPU adjustment factor - (RCTPCPUA) so it may not match other measures of service which - are based on the logical CPU adjustment factor. It is available - if the hardware supports LPAR cluster. -*/ -#define RCTLACS_OFFSET 0xC4 - -/* 32-bit count of alive CPUs. This includes both CPs and IFAs */ -#define CSD_NUMBER_ONLINE_CPUS 0xD4 - -/* Address of system resources manager (SRM) control table */ -#define CVTOPCTP_OFFSET 0x25C - -/* Address of the RCT table */ -#define RMCTRCT_OFFSET 0xE4 - -/* Address of the rsm control and enumeration area. */ -#define CVTRCEP_OFFSET 0x490 - -/* 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 - -/* Pointer to rsm address space block extension. */ -#define ASCBRSME 0x16C - -/* - NUMBER OF FRAMES CURRENTLY IN USE BY THIS ADDRESS SPACE. - It does not include 2G frames. -*/ -#define RAXFMCT 0x2C - -/* Thread Entry constants */ -#define PGTH_CURRENT 1 -#define PGTH_LEN 26 -#define PGTHAPATH 0x20 -#pragma linkage(BPX4GTH, OS) -#pragma linkage(BPX1GTH, OS) - -/* TOD Clock resolution in nanoseconds */ -#define TOD_RES 4.096 - -typedef unsigned data_area_ptr_assign_type; - -typedef union { - struct { -#if defined(_LP64) - data_area_ptr_assign_type lower; -#endif - data_area_ptr_assign_type assign; - }; - char* deref; -} data_area_ptr; - - -void uv_loadavg(double avg[3]) { - /* TODO: implement the following */ - avg[0] = 0; - avg[1] = 0; - avg[2] = 0; -} - - -int uv__platform_loop_init(uv_loop_t* loop) { - uv__os390_epoll* ep; - - ep = epoll_create1(0); - loop->ep = ep; - if (ep == NULL) - return UV__ERR(errno); - - return 0; -} - - -void uv__platform_loop_delete(uv_loop_t* loop) { - if (loop->ep != NULL) { - epoll_queue_close(loop->ep); - loop->ep = NULL; - } -} - - -uint64_t uv__hrtime(uv_clocktype_t type) { - unsigned long long timestamp; - __stckf(×tamp); - /* Convert to nanoseconds */ - return timestamp / TOD_RES; -} - - -static int getexe(char* buf, size_t len) { - return uv__strscpy(buf, __getargv()[0], len); -} - - -/* - * We could use a static buffer for the path manipulations that we need outside - * of the function, but this function could be called by multiple consumers and - * we don't want to potentially create a race condition in the use of snprintf. - * There is no direct way of getting the exe path in zOS - either through /procfs - * or through some libc APIs. The below approach is to parse the argv[0]'s pattern - * and use it in conjunction with PATH environment variable to craft one. - */ -int uv_exepath(char* buffer, size_t* size) { - int res; - char args[PATH_MAX]; - int pid; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - res = getexe(args, sizeof(args)); - if (res < 0) - return UV_EINVAL; - - return uv__search_path(args, buffer, size); -} - - -uint64_t uv_get_free_memory(void) { - uint64_t freeram; - - data_area_ptr cvt = {0}; - data_area_ptr rcep = {0}; - cvt.assign = *(data_area_ptr_assign_type*)(CVT_PTR); - rcep.assign = *(data_area_ptr_assign_type*)(cvt.deref + CVTRCEP_OFFSET); - freeram = (uint64_t)*((uint32_t*)(rcep.deref + RCEAFC_OFFSET)) * 4096; - return freeram; -} - - -uint64_t uv_get_total_memory(void) { - /* Use CVTRLSTG to get the size of actual real storage online at IPL in K. */ - return (uint64_t)((int)((char *__ptr32 *__ptr32 *)0)[4][214]) * 1024; -} - - -uint64_t uv_get_constrained_memory(void) { - struct rlimit rl; - - /* RLIMIT_MEMLIMIT return value is in megabytes rather than bytes. */ - if (getrlimit(RLIMIT_MEMLIMIT, &rl) == 0) - return rl.rlim_cur * 1024 * 1024; - - return 0; /* There is no memory limit set. */ -} - - -int uv_resident_set_memory(size_t* rss) { - char* ascb; - char* rax; - size_t nframes; - - ascb = *(char* __ptr32 *)(PSA_PTR + PSAAOLD); - rax = *(char* __ptr32 *)(ascb + ASCBRSME); - nframes = *(unsigned int*)(rax + RAXFMCT); - - *rss = nframes * sysconf(_SC_PAGESIZE); - return 0; -} - - -int uv_uptime(double* uptime) { - struct utmpx u ; - struct utmpx *v; - time64_t t; - - u.ut_type = BOOT_TIME; - v = getutxid(&u); - if (v == NULL) - return -1; - *uptime = difftime64(time64(&t), v->ut_tv.tv_sec); - return 0; -} - - -int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { - uv_cpu_info_t* cpu_info; - int idx; - siv1v2 info; - data_area_ptr cvt = {0}; - data_area_ptr csd = {0}; - data_area_ptr rmctrct = {0}; - data_area_ptr cvtopctp = {0}; - int cpu_usage_avg; - - cvt.assign = *(data_area_ptr_assign_type*)(CVT_PTR); - - csd.assign = *((data_area_ptr_assign_type *) (cvt.deref + CSD_OFFSET)); - cvtopctp.assign = *((data_area_ptr_assign_type *) (cvt.deref + CVTOPCTP_OFFSET)); - rmctrct.assign = *((data_area_ptr_assign_type *) (cvtopctp.deref + RMCTRCT_OFFSET)); - - *count = *((int*) (csd.deref + CSD_NUMBER_ONLINE_CPUS)); - cpu_usage_avg = *((unsigned short int*) (rmctrct.deref + RCTLACS_OFFSET)); - - *cpu_infos = uv__malloc(*count * sizeof(uv_cpu_info_t)); - if (!*cpu_infos) - return UV_ENOMEM; - - cpu_info = *cpu_infos; - 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->cpu_times.user = cpu_usage_avg; - /* TODO: implement the following */ - cpu_info->cpu_times.sys = 0; - cpu_info->cpu_times.idle = 0; - cpu_info->cpu_times.irq = 0; - cpu_info->cpu_times.nice = 0; - ++cpu_info; - ++idx; - } - - return 0; -} - - -static int uv__interface_addresses_v6(uv_interface_address_t** addresses, - int* count) { - uv_interface_address_t* address; - int sockfd; - int maxsize; - __net_ifconf6header_t ifc; - __net_ifconf6entry_t* ifr; - __net_ifconf6entry_t* p; - __net_ifconf6entry_t flg; - - *count = 0; - /* Assume maximum buffer size allowable */ - maxsize = 16384; - - if (0 > (sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP))) - return UV__ERR(errno); - - ifc.__nif6h_version = 1; - ifc.__nif6h_buflen = maxsize; - ifc.__nif6h_buffer = uv__calloc(1, maxsize);; - - if (ioctl(sockfd, SIOCGIFCONF6, &ifc) == -1) { - uv__close(sockfd); - return UV__ERR(errno); - } - - - *count = 0; - ifr = (__net_ifconf6entry_t*)(ifc.__nif6h_buffer); - while ((char*)ifr < (char*)ifc.__nif6h_buffer + ifc.__nif6h_buflen) { - p = ifr; - ifr = (__net_ifconf6entry_t*)((char*)ifr + ifc.__nif6h_entrylen); - - if (!(p->__nif6e_addr.sin6_family == AF_INET6 || - p->__nif6e_addr.sin6_family == AF_INET)) - continue; - - if (!(p->__nif6e_flags & _NIF6E_FLAGS_ON_LINK_ACTIVE)) - continue; - - ++(*count); - } - - /* Alloc the return interface structs */ - *addresses = uv__malloc(*count * sizeof(uv_interface_address_t)); - if (!(*addresses)) { - uv__close(sockfd); - return UV_ENOMEM; - } - address = *addresses; - - ifr = (__net_ifconf6entry_t*)(ifc.__nif6h_buffer); - while ((char*)ifr < (char*)ifc.__nif6h_buffer + ifc.__nif6h_buflen) { - p = ifr; - ifr = (__net_ifconf6entry_t*)((char*)ifr + ifc.__nif6h_entrylen); - - if (!(p->__nif6e_addr.sin6_family == AF_INET6 || - p->__nif6e_addr.sin6_family == AF_INET)) - continue; - - if (!(p->__nif6e_flags & _NIF6E_FLAGS_ON_LINK_ACTIVE)) - continue; - - /* All conditions above must match count loop */ - - address->name = uv__strdup(p->__nif6e_name); - - if (p->__nif6e_addr.sin6_family == AF_INET6) - address->address.address6 = *((struct sockaddr_in6*) &p->__nif6e_addr); - else - address->address.address4 = *((struct sockaddr_in*) &p->__nif6e_addr); - - /* TODO: Retrieve netmask using SIOCGIFNETMASK ioctl */ - - address->is_internal = flg.__nif6e_flags & _NIF6E_FLAGS_LOOPBACK ? 1 : 0; - memset(address->phys_addr, 0, sizeof(address->phys_addr)); - address++; - } - - uv__close(sockfd); - return 0; -} - - -int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { - uv_interface_address_t* address; - int sockfd; - int maxsize; - struct ifconf ifc; - struct ifreq flg; - struct ifreq* ifr; - struct ifreq* p; - int count_v6; - - *count = 0; - *addresses = NULL; - - /* get the ipv6 addresses first */ - uv_interface_address_t* addresses_v6; - uv__interface_addresses_v6(&addresses_v6, &count_v6); - - /* now get the ipv4 addresses */ - - /* Assume maximum buffer size allowable */ - maxsize = 16384; - - sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); - if (0 > sockfd) - return UV__ERR(errno); - - ifc.ifc_req = uv__calloc(1, maxsize); - ifc.ifc_len = maxsize; - if (ioctl(sockfd, SIOCGIFCONF, &ifc) == -1) { - uv__close(sockfd); - return UV__ERR(errno); - } - -#define MAX(a,b) (((a)>(b))?(a):(b)) -#define ADDR_SIZE(p) MAX((p).sa_len, sizeof(p)) - - /* Count all up and running ipv4/ipv6 addresses */ - ifr = ifc.ifc_req; - while ((char*)ifr < (char*)ifc.ifc_req + ifc.ifc_len) { - p = ifr; - ifr = (struct ifreq*) - ((char*)ifr + sizeof(ifr->ifr_name) + ADDR_SIZE(ifr->ifr_addr)); - - if (!(p->ifr_addr.sa_family == AF_INET6 || - p->ifr_addr.sa_family == AF_INET)) - continue; - - memcpy(flg.ifr_name, p->ifr_name, sizeof(flg.ifr_name)); - if (ioctl(sockfd, SIOCGIFFLAGS, &flg) == -1) { - uv__close(sockfd); - return UV__ERR(errno); - } - - if (!(flg.ifr_flags & IFF_UP && flg.ifr_flags & IFF_RUNNING)) - continue; - - (*count)++; - } - - if (*count == 0) { - uv__close(sockfd); - return 0; - } - - /* Alloc the return interface structs */ - *addresses = uv__malloc((*count + count_v6) * - sizeof(uv_interface_address_t)); - - if (!(*addresses)) { - uv__close(sockfd); - return UV_ENOMEM; - } - address = *addresses; - - /* copy over the ipv6 addresses */ - memcpy(address, addresses_v6, count_v6 * sizeof(uv_interface_address_t)); - address += count_v6; - *count += count_v6; - uv__free(addresses_v6); - - ifr = ifc.ifc_req; - while ((char*)ifr < (char*)ifc.ifc_req + ifc.ifc_len) { - p = ifr; - ifr = (struct ifreq*) - ((char*)ifr + sizeof(ifr->ifr_name) + ADDR_SIZE(ifr->ifr_addr)); - - if (!(p->ifr_addr.sa_family == AF_INET6 || - p->ifr_addr.sa_family == AF_INET)) - continue; - - memcpy(flg.ifr_name, p->ifr_name, sizeof(flg.ifr_name)); - if (ioctl(sockfd, SIOCGIFFLAGS, &flg) == -1) { - uv__close(sockfd); - return UV_ENOSYS; - } - - if (!(flg.ifr_flags & IFF_UP && flg.ifr_flags & IFF_RUNNING)) - continue; - - /* All conditions above must match count loop */ - - address->name = uv__strdup(p->ifr_name); - - if (p->ifr_addr.sa_family == AF_INET6) { - address->address.address6 = *((struct sockaddr_in6*) &p->ifr_addr); - } else { - address->address.address4 = *((struct sockaddr_in*) &p->ifr_addr); - } - - address->is_internal = flg.ifr_flags & IFF_LOOPBACK ? 1 : 0; - memset(address->phys_addr, 0, sizeof(address->phys_addr)); - address++; - } - -#undef ADDR_SIZE -#undef MAX - - uv__close(sockfd); - return 0; -} - - -void uv_free_interface_addresses(uv_interface_address_t* addresses, - int count) { - int i; - for (i = 0; i < count; ++i) - uv__free(addresses[i].name); - uv__free(addresses); -} - - -void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) { - struct epoll_event* events; - struct epoll_event dummy; - uintptr_t i; - uintptr_t nfds; - - assert(loop->watchers != NULL); - assert(fd >= 0); - - events = (struct epoll_event*) loop->watchers[loop->nwatchers]; - nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1]; - if (events != NULL) - /* Invalidate events with same file descriptor */ - for (i = 0; i < nfds; i++) - if ((int) events[i].fd == fd) - events[i].fd = -1; - - /* Remove the file descriptor from the epoll. */ - if (loop->ep != NULL) - epoll_ctl(loop->ep, EPOLL_CTL_DEL, fd, &dummy); -} - - -int uv__io_check_fd(uv_loop_t* loop, int fd) { - struct pollfd p[1]; - int rv; - - p[0].fd = fd; - p[0].events = POLLIN; - - do - rv = poll(p, 1, 0); - while (rv == -1 && errno == EINTR); - - if (rv == -1) - abort(); - - if (p[0].revents & POLLNVAL) - return -1; - - return 0; -} - - -void uv__fs_event_close(uv_fs_event_t* handle) { - uv_fs_event_stop(handle); -} - - -int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { - uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT); - return 0; -} - - -int uv_fs_event_start(uv_fs_event_t* handle, uv_fs_event_cb cb, - const char* filename, unsigned int flags) { - uv__os390_epoll* ep; - _RFIS reg_struct; - char* path; - int rc; - - if (uv__is_active(handle)) - return UV_EINVAL; - - ep = handle->loop->ep; - assert(ep->msg_queue != -1); - - reg_struct.__rfis_cmd = _RFIS_REG; - reg_struct.__rfis_qid = ep->msg_queue; - reg_struct.__rfis_type = 1; - memcpy(reg_struct.__rfis_utok, &handle, sizeof(handle)); - - path = uv__strdup(filename); - if (path == NULL) - return UV_ENOMEM; - - rc = __w_pioctl(path, _IOCC_REGFILEINT, sizeof(reg_struct), ®_struct); - if (rc != 0) - return UV__ERR(errno); - - uv__handle_start(handle); - handle->path = path; - handle->cb = cb; - memcpy(handle->rfis_rftok, reg_struct.__rfis_rftok, - sizeof(handle->rfis_rftok)); - - return 0; -} - - -int uv_fs_event_stop(uv_fs_event_t* handle) { - uv__os390_epoll* ep; - _RFIS reg_struct; - int rc; - - if (!uv__is_active(handle)) - return 0; - - ep = handle->loop->ep; - assert(ep->msg_queue != -1); - - reg_struct.__rfis_cmd = _RFIS_UNREG; - reg_struct.__rfis_qid = ep->msg_queue; - reg_struct.__rfis_type = 1; - memcpy(reg_struct.__rfis_rftok, handle->rfis_rftok, - sizeof(handle->rfis_rftok)); - - /* - * This call will take "/" as the path argument in case we - * don't care to supply the correct path. The system will simply - * ignore it. - */ - rc = __w_pioctl("/", _IOCC_REGFILEINT, sizeof(reg_struct), ®_struct); - if (rc != 0 && errno != EALREADY && errno != ENOENT) - abort(); - - uv__handle_stop(handle); - - return 0; -} - - -static int os390_message_queue_handler(uv__os390_epoll* ep) { - uv_fs_event_t* handle; - int msglen; - int events; - _RFIM msg; - - if (ep->msg_queue == -1) - return 0; - - msglen = msgrcv(ep->msg_queue, &msg, sizeof(msg), 0, IPC_NOWAIT); - - if (msglen == -1 && errno == ENOMSG) - return 0; - - if (msglen == -1) - abort(); - - events = 0; - if (msg.__rfim_event == _RFIM_ATTR || msg.__rfim_event == _RFIM_WRITE) - events = UV_CHANGE; - else if (msg.__rfim_event == _RFIM_RENAME) - events = UV_RENAME; - else - /* Some event that we are not interested in. */ - return 0; - - /* `__rfim_utok` is treated as text when it should be treated as binary while - * running in ASCII mode, resulting in an unwanted autoconversion. - */ - __a2e_l(msg.__rfim_utok, sizeof(msg.__rfim_utok)); - handle = *(uv_fs_event_t**)(msg.__rfim_utok); - handle->cb(handle, uv__basename_r(handle->path), events, 0); - return 1; -} - - -void uv__io_poll(uv_loop_t* loop, int timeout) { - static const int max_safe_timeout = 1789569; - struct epoll_event events[1024]; - struct epoll_event* pe; - struct epoll_event e; - uv__os390_epoll* ep; - int real_timeout; - QUEUE* q; - uv__io_t* w; - uint64_t base; - int count; - int nfds; - int fd; - int op; - int i; - int user_timeout; - int reset_timeout; - - if (loop->nfds == 0) { - assert(QUEUE_EMPTY(&loop->watcher_queue)); - return; - } - - while (!QUEUE_EMPTY(&loop->watcher_queue)) { - uv_stream_t* stream; - - q = QUEUE_HEAD(&loop->watcher_queue); - QUEUE_REMOVE(q); - QUEUE_INIT(q); - w = QUEUE_DATA(q, uv__io_t, watcher_queue); - - assert(w->pevents != 0); - assert(w->fd >= 0); - - stream= container_of(w, uv_stream_t, io_watcher); - - assert(w->fd < (int) loop->nwatchers); - - e.events = w->pevents; - e.fd = w->fd; - - if (w->events == 0) - op = EPOLL_CTL_ADD; - else - op = EPOLL_CTL_MOD; - - /* XXX Future optimization: do EPOLL_CTL_MOD lazily if we stop watching - * events, skip the syscall and squelch the events after epoll_wait(). - */ - if (epoll_ctl(loop->ep, op, w->fd, &e)) { - if (errno != EEXIST) - abort(); - - assert(op == EPOLL_CTL_ADD); - - /* We've reactivated a file descriptor that's been watched before. */ - if (epoll_ctl(loop->ep, EPOLL_CTL_MOD, w->fd, &e)) - abort(); - } - - w->events = w->pevents; - } - - assert(timeout >= -1); - base = loop->time; - count = 48; /* Benchmarks suggest this gives the best throughput. */ - real_timeout = timeout; - int nevents = 0; - - if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { - reset_timeout = 1; - user_timeout = timeout; - timeout = 0; - } else { - reset_timeout = 0; - } - - nfds = 0; - for (;;) { - /* Only need to set the provider_entry_time if timeout != 0. The function - * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. - */ - if (timeout != 0) - uv__metrics_set_provider_entry_time(loop); - - if (sizeof(int32_t) == sizeof(long) && timeout >= max_safe_timeout) - timeout = max_safe_timeout; - - nfds = epoll_wait(loop->ep, events, - ARRAY_SIZE(events), timeout); - - /* Update loop->time unconditionally. It's tempting to skip the update when - * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the - * operating system didn't reschedule our process while in the syscall. - */ - base = loop->time; - SAVE_ERRNO(uv__update_time(loop)); - if (nfds == 0) { - assert(timeout != -1); - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - if (timeout == -1) - continue; - - if (timeout == 0) - return; - - /* 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) - return; - - /* Interrupted by a signal. Update timeout and poll again. */ - goto update_timeout; - } - - - assert(loop->watchers != NULL); - loop->watchers[loop->nwatchers] = (void*) events; - loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds; - for (i = 0; i < nfds; i++) { - pe = events + i; - fd = pe->fd; - - /* Skip invalidated events, see uv__platform_invalidate_fd */ - if (fd == -1) - continue; - - ep = loop->ep; - if (pe->is_msg) { - os390_message_queue_handler(ep); - continue; - } - - assert(fd >= 0); - assert((unsigned) fd < loop->nwatchers); - - w = loop->watchers[fd]; - - if (w == NULL) { - /* File descriptor that we've stopped watching, disarm it. - * - * Ignore all errors because we may be racing with another thread - * when the file descriptor is closed. - */ - epoll_ctl(loop->ep, EPOLL_CTL_DEL, fd, pe); - continue; - } - - /* Give users only events they're interested in. Prevents spurious - * callbacks when previous callback invocation in this loop has stopped - * the current watcher. Also, filters out events that users has not - * requested us to watch. - */ - pe->events &= w->pevents | POLLERR | POLLHUP; - - if (pe->events == POLLERR || pe->events == POLLHUP) - pe->events |= w->pevents & (POLLIN | POLLOUT); - - if (pe->events != 0) { - uv__metrics_update_idle_time(loop); - w->cb(loop, w, pe->events); - nevents++; - } - } - loop->watchers[loop->nwatchers] = NULL; - loop->watchers[loop->nwatchers + 1] = NULL; - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - if (nevents != 0) { - if (nfds == ARRAY_SIZE(events) && --count != 0) { - /* Poll for more events but don't block this time. */ - timeout = 0; - continue; - } - return; - } - - if (timeout == 0) - return; - - if (timeout == -1) - continue; - -update_timeout: - assert(timeout > 0); - - real_timeout -= (loop->time - base); - if (real_timeout <= 0) - return; - - timeout = real_timeout; - } -} - - -int uv__io_fork(uv_loop_t* loop) { - /* - Nullify the msg queue but don't close it because - it is still being used by the parent. - */ - loop->ep = NULL; - - uv__platform_loop_delete(loop); - return uv__platform_loop_init(loop); -} diff --git a/libuv/src/unix/pipe.c b/libuv/src/unix/pipe.c deleted file mode 100644 index 788e038..0000000 --- a/libuv/src/unix/pipe.c +++ /dev/null @@ -1,435 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include -#include - - -int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc) { - uv__stream_init(loop, (uv_stream_t*)handle, UV_NAMED_PIPE); - handle->shutdown_req = NULL; - handle->connect_req = NULL; - handle->pipe_fname = NULL; - handle->ipc = ipc; - return 0; -} - - -int uv_pipe_bind(uv_pipe_t* handle, const char* name) { - struct sockaddr_un saddr; - const char* pipe_fname; - int sockfd; - int err; - - pipe_fname = NULL; - - /* Already bound? */ - if (uv__stream_fd(handle) >= 0) - return UV_EINVAL; - - /* Make a copy of the file name, it outlives this function's scope. */ - pipe_fname = uv__strdup(name); - if (pipe_fname == NULL) - return UV_ENOMEM; - - /* We've got a copy, don't touch the original any more. */ - name = NULL; - - err = uv__socket(AF_UNIX, SOCK_STREAM, 0); - if (err < 0) - goto err_socket; - sockfd = err; - - memset(&saddr, 0, sizeof saddr); - uv__strscpy(saddr.sun_path, pipe_fname, sizeof(saddr.sun_path)); - saddr.sun_family = AF_UNIX; - - if (bind(sockfd, (struct sockaddr*)&saddr, sizeof saddr)) { - err = UV__ERR(errno); - /* Convert ENOENT to EACCES for compatibility with Windows. */ - if (err == UV_ENOENT) - err = UV_EACCES; - - uv__close(sockfd); - goto err_socket; - } - - /* Success. */ - handle->flags |= UV_HANDLE_BOUND; - handle->pipe_fname = pipe_fname; /* Is a strdup'ed copy. */ - handle->io_watcher.fd = sockfd; - return 0; - -err_socket: - uv__free((void*)pipe_fname); - return err; -} - - -int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb) { - if (uv__stream_fd(handle) == -1) - return UV_EINVAL; - - if (handle->ipc) - return UV_EINVAL; - -#if defined(__MVS__) || defined(__PASE__) - /* On zOS, backlog=0 has undefined behaviour */ - /* On IBMi PASE, backlog=0 leads to "Connection refused" error */ - if (backlog == 0) - backlog = 1; - else if (backlog < 0) - backlog = SOMAXCONN; -#endif - - if (listen(uv__stream_fd(handle), backlog)) - return UV__ERR(errno); - - handle->connection_cb = cb; - handle->io_watcher.cb = uv__server_io; - uv__io_start(handle->loop, &handle->io_watcher, POLLIN); - return 0; -} - - -void uv__pipe_close(uv_pipe_t* handle) { - if (handle->pipe_fname) { - /* - * Unlink the file system entity before closing the file descriptor. - * Doing it the other way around introduces a race where our process - * unlinks a socket with the same name that's just been created by - * another thread or process. - */ - unlink(handle->pipe_fname); - uv__free((void*)handle->pipe_fname); - handle->pipe_fname = NULL; - } - - uv__stream_close((uv_stream_t*)handle); -} - - -int uv_pipe_open(uv_pipe_t* handle, uv_file fd) { - int flags; - int mode; - int err; - flags = 0; - - if (uv__fd_exists(handle->loop, fd)) - return UV_EEXIST; - - do - mode = fcntl(fd, F_GETFL); - while (mode == -1 && errno == EINTR); - - if (mode == -1) - return UV__ERR(errno); /* according to docs, must be EBADF */ - - err = uv__nonblock(fd, 1); - if (err) - return err; - -#if defined(__APPLE__) - err = uv__stream_try_select((uv_stream_t*) handle, &fd); - if (err) - return err; -#endif /* defined(__APPLE__) */ - - mode &= O_ACCMODE; - if (mode != O_WRONLY) - flags |= UV_HANDLE_READABLE; - if (mode != O_RDONLY) - flags |= UV_HANDLE_WRITABLE; - - return uv__stream_open((uv_stream_t*)handle, fd, flags); -} - - -void uv_pipe_connect(uv_connect_t* req, - uv_pipe_t* handle, - const char* name, - uv_connect_cb cb) { - struct sockaddr_un saddr; - int new_sock; - int err; - int r; - - new_sock = (uv__stream_fd(handle) == -1); - - if (new_sock) { - err = uv__socket(AF_UNIX, SOCK_STREAM, 0); - if (err < 0) - goto out; - handle->io_watcher.fd = err; - } - - memset(&saddr, 0, sizeof saddr); - uv__strscpy(saddr.sun_path, name, sizeof(saddr.sun_path)); - saddr.sun_family = AF_UNIX; - - do { - r = connect(uv__stream_fd(handle), - (struct sockaddr*)&saddr, sizeof saddr); - } - while (r == -1 && errno == EINTR); - - if (r == -1 && errno != EINPROGRESS) { - err = UV__ERR(errno); -#if defined(__CYGWIN__) || defined(__MSYS__) - /* EBADF is supposed to mean that the socket fd is bad, but - Cygwin reports EBADF instead of ENOTSOCK when the file is - not a socket. We do not expect to see a bad fd here - (e.g. due to new_sock), so translate the error. */ - if (err == UV_EBADF) - err = UV_ENOTSOCK; -#endif - goto out; - } - - err = 0; - if (new_sock) { - err = uv__stream_open((uv_stream_t*)handle, - uv__stream_fd(handle), - UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); - } - - if (err == 0) - uv__io_start(handle->loop, &handle->io_watcher, POLLOUT); - -out: - handle->delayed_error = err; - handle->connect_req = req; - - uv__req_init(handle->loop, req, UV_CONNECT); - req->handle = (uv_stream_t*)handle; - req->cb = cb; - QUEUE_INIT(&req->queue); - - /* Force callback to run on next tick in case of error. */ - if (err) - uv__io_feed(handle->loop, &handle->io_watcher); - -} - - -static int uv__pipe_getsockpeername(const uv_pipe_t* handle, - uv__peersockfunc func, - char* buffer, - size_t* size) { - struct sockaddr_un sa; - socklen_t addrlen; - int err; - - addrlen = sizeof(sa); - memset(&sa, 0, addrlen); - err = uv__getsockpeername((const uv_handle_t*) handle, - func, - (struct sockaddr*) &sa, - (int*) &addrlen); - if (err < 0) { - *size = 0; - return err; - } - -#if defined(__linux__) - if (sa.sun_path[0] == 0) - /* Linux abstract namespace */ - addrlen -= offsetof(struct sockaddr_un, sun_path); - else -#endif - addrlen = strlen(sa.sun_path); - - - if ((size_t)addrlen >= *size) { - *size = addrlen + 1; - return UV_ENOBUFS; - } - - memcpy(buffer, sa.sun_path, addrlen); - *size = addrlen; - - /* only null-terminate if it's not an abstract socket */ - if (buffer[0] != '\0') - buffer[addrlen] = '\0'; - - return 0; -} - - -int uv_pipe_getsockname(const uv_pipe_t* handle, char* buffer, size_t* size) { - return uv__pipe_getsockpeername(handle, getsockname, buffer, size); -} - - -int uv_pipe_getpeername(const uv_pipe_t* handle, char* buffer, size_t* size) { - return uv__pipe_getsockpeername(handle, getpeername, buffer, size); -} - - -void uv_pipe_pending_instances(uv_pipe_t* handle, int count) { -} - - -int uv_pipe_pending_count(uv_pipe_t* handle) { - uv__stream_queued_fds_t* queued_fds; - - if (!handle->ipc) - return 0; - - if (handle->accepted_fd == -1) - return 0; - - if (handle->queued_fds == NULL) - return 1; - - queued_fds = handle->queued_fds; - return queued_fds->offset + 1; -} - - -uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle) { - if (!handle->ipc) - return UV_UNKNOWN_HANDLE; - - if (handle->accepted_fd == -1) - return UV_UNKNOWN_HANDLE; - else - return uv__handle_type(handle->accepted_fd); -} - - -int uv_pipe_chmod(uv_pipe_t* handle, int mode) { - unsigned desired_mode; - struct stat pipe_stat; - char* name_buffer; - size_t name_len; - int r; - - if (handle == NULL || uv__stream_fd(handle) == -1) - return UV_EBADF; - - if (mode != UV_READABLE && - mode != UV_WRITABLE && - mode != (UV_WRITABLE | UV_READABLE)) - return UV_EINVAL; - - /* Unfortunately fchmod does not work on all platforms, we will use chmod. */ - name_len = 0; - r = uv_pipe_getsockname(handle, NULL, &name_len); - if (r != UV_ENOBUFS) - return r; - - name_buffer = uv__malloc(name_len); - if (name_buffer == NULL) - return UV_ENOMEM; - - r = uv_pipe_getsockname(handle, name_buffer, &name_len); - if (r != 0) { - uv__free(name_buffer); - return r; - } - - /* stat must be used as fstat has a bug on Darwin */ - if (stat(name_buffer, &pipe_stat) == -1) { - uv__free(name_buffer); - return -errno; - } - - desired_mode = 0; - if (mode & UV_READABLE) - desired_mode |= S_IRUSR | S_IRGRP | S_IROTH; - if (mode & UV_WRITABLE) - desired_mode |= S_IWUSR | S_IWGRP | S_IWOTH; - - /* Exit early if pipe already has desired mode. */ - if ((pipe_stat.st_mode & desired_mode) == desired_mode) { - uv__free(name_buffer); - return 0; - } - - pipe_stat.st_mode |= desired_mode; - - r = chmod(name_buffer, pipe_stat.st_mode); - uv__free(name_buffer); - - return r != -1 ? 0 : UV__ERR(errno); -} - - -int uv_pipe(uv_os_fd_t fds[2], int read_flags, int write_flags) { - uv_os_fd_t temp[2]; - int err; -#if defined(__FreeBSD__) || defined(__linux__) - int flags = O_CLOEXEC; - - if ((read_flags & UV_NONBLOCK_PIPE) && (write_flags & UV_NONBLOCK_PIPE)) - flags |= UV_FS_O_NONBLOCK; - - if (pipe2(temp, flags)) - return UV__ERR(errno); - - if (flags & UV_FS_O_NONBLOCK) { - fds[0] = temp[0]; - fds[1] = temp[1]; - return 0; - } -#else - if (pipe(temp)) - return UV__ERR(errno); - - if ((err = uv__cloexec(temp[0], 1))) - goto fail; - - if ((err = uv__cloexec(temp[1], 1))) - goto fail; -#endif - - if (read_flags & UV_NONBLOCK_PIPE) - if ((err = uv__nonblock(temp[0], 1))) - goto fail; - - if (write_flags & UV_NONBLOCK_PIPE) - if ((err = uv__nonblock(temp[1], 1))) - goto fail; - - fds[0] = temp[0]; - fds[1] = temp[1]; - return 0; - -fail: - uv__close(temp[0]); - uv__close(temp[1]); - return err; -} - - -int uv__make_pipe(int fds[2], int flags) { - return uv_pipe(fds, - flags & UV_NONBLOCK_PIPE, - flags & UV_NONBLOCK_PIPE); -} diff --git a/libuv/src/unix/poll.c b/libuv/src/unix/poll.c deleted file mode 100644 index 7a12e2d..0000000 --- a/libuv/src/unix/poll.c +++ /dev/null @@ -1,160 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include - - -static void uv__poll_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { - uv_poll_t* handle; - int pevents; - - handle = container_of(w, uv_poll_t, io_watcher); - - /* - * As documented in the kernel source fs/kernfs/file.c #780 - * poll will return POLLERR|POLLPRI in case of sysfs - * polling. This does not happen in case of out-of-band - * TCP messages. - * - * The above is the case on (at least) FreeBSD and Linux. - * - * So to properly determine a POLLPRI or a POLLERR we need - * to check for both. - */ - if ((events & POLLERR) && !(events & UV__POLLPRI)) { - uv__io_stop(loop, w, POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI); - uv__handle_stop(handle); - handle->poll_cb(handle, UV_EBADF, 0); - return; - } - - pevents = 0; - if (events & POLLIN) - pevents |= UV_READABLE; - if (events & UV__POLLPRI) - pevents |= UV_PRIORITIZED; - if (events & POLLOUT) - pevents |= UV_WRITABLE; - if (events & UV__POLLRDHUP) - pevents |= UV_DISCONNECT; - - handle->poll_cb(handle, 0, pevents); -} - - -int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd) { - int err; - - if (uv__fd_exists(loop, fd)) - return UV_EEXIST; - - err = uv__io_check_fd(loop, fd); - if (err) - return err; - - /* If ioctl(FIONBIO) reports ENOTTY, try fcntl(F_GETFL) + fcntl(F_SETFL). - * Workaround for e.g. kqueue fds not supporting ioctls. - */ - err = uv__nonblock(fd, 1); -#if UV__NONBLOCK_IS_IOCTL - if (err == UV_ENOTTY) - err = uv__nonblock_fcntl(fd, 1); -#endif - - if (err) - return err; - - uv__handle_init(loop, (uv_handle_t*) handle, UV_POLL); - uv__io_init(&handle->io_watcher, uv__poll_io, fd); - handle->poll_cb = NULL; - return 0; -} - - -int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, - uv_os_sock_t socket) { - return uv_poll_init(loop, handle, socket); -} - - -static void uv__poll_stop(uv_poll_t* handle) { - uv__io_stop(handle->loop, - &handle->io_watcher, - POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI); - uv__handle_stop(handle); - uv__platform_invalidate_fd(handle->loop, handle->io_watcher.fd); -} - - -int uv_poll_stop(uv_poll_t* handle) { - assert(!uv__is_closing(handle)); - uv__poll_stop(handle); - return 0; -} - - -int uv_poll_start(uv_poll_t* handle, int pevents, uv_poll_cb poll_cb) { - uv__io_t** watchers; - uv__io_t* w; - int events; - - assert((pevents & ~(UV_READABLE | UV_WRITABLE | UV_DISCONNECT | - UV_PRIORITIZED)) == 0); - assert(!uv__is_closing(handle)); - - watchers = handle->loop->watchers; - w = &handle->io_watcher; - - if (uv__fd_exists(handle->loop, w->fd)) - if (watchers[w->fd] != w) - return UV_EEXIST; - - uv__poll_stop(handle); - - if (pevents == 0) - return 0; - - events = 0; - if (pevents & UV_READABLE) - events |= POLLIN; - if (pevents & UV_PRIORITIZED) - events |= UV__POLLPRI; - if (pevents & UV_WRITABLE) - events |= POLLOUT; - if (pevents & UV_DISCONNECT) - events |= UV__POLLRDHUP; - - uv__io_start(handle->loop, &handle->io_watcher, events); - uv__handle_start(handle); - handle->poll_cb = poll_cb; - - return 0; -} - - -void uv__poll_close(uv_poll_t* handle) { - uv__poll_stop(handle); -} diff --git a/libuv/src/unix/posix-hrtime.c b/libuv/src/unix/posix-hrtime.c deleted file mode 100644 index 323dfc2..0000000 --- a/libuv/src/unix/posix-hrtime.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include - -#undef NANOSEC -#define NANOSEC ((uint64_t) 1e9) - -uint64_t uv__hrtime(uv_clocktype_t type) { - struct timespec ts; - clock_gettime(CLOCK_MONOTONIC, &ts); - return (((uint64_t) ts.tv_sec) * NANOSEC + ts.tv_nsec); -} diff --git a/libuv/src/unix/posix-poll.c b/libuv/src/unix/posix-poll.c deleted file mode 100644 index 0f4bf93..0000000 --- a/libuv/src/unix/posix-poll.c +++ /dev/null @@ -1,374 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -/* POSIX defines poll() as a portable way to wait on file descriptors. - * Here we maintain a dynamically sized array of file descriptors and - * events to pass as the first argument to poll(). - */ - -#include -#include -#include -#include -#include - -int uv__platform_loop_init(uv_loop_t* loop) { - loop->poll_fds = NULL; - loop->poll_fds_used = 0; - loop->poll_fds_size = 0; - loop->poll_fds_iterating = 0; - return 0; -} - -void uv__platform_loop_delete(uv_loop_t* loop) { - uv__free(loop->poll_fds); - loop->poll_fds = NULL; -} - -int uv__io_fork(uv_loop_t* loop) { - uv__platform_loop_delete(loop); - return uv__platform_loop_init(loop); -} - -/* Allocate or dynamically resize our poll fds array. */ -static void uv__pollfds_maybe_resize(uv_loop_t* loop) { - size_t i; - size_t n; - struct pollfd* p; - - if (loop->poll_fds_used < loop->poll_fds_size) - return; - - n = loop->poll_fds_size ? loop->poll_fds_size * 2 : 64; - p = uv__reallocf(loop->poll_fds, n * sizeof(*loop->poll_fds)); - if (p == NULL) - abort(); - - loop->poll_fds = p; - for (i = loop->poll_fds_size; i < n; i++) { - loop->poll_fds[i].fd = -1; - loop->poll_fds[i].events = 0; - loop->poll_fds[i].revents = 0; - } - loop->poll_fds_size = n; -} - -/* Primitive swap operation on poll fds array elements. */ -static void uv__pollfds_swap(uv_loop_t* loop, size_t l, size_t r) { - struct pollfd pfd; - pfd = loop->poll_fds[l]; - loop->poll_fds[l] = loop->poll_fds[r]; - loop->poll_fds[r] = pfd; -} - -/* Add a watcher's fd to our poll fds array with its pending events. */ -static void uv__pollfds_add(uv_loop_t* loop, uv__io_t* w) { - size_t i; - struct pollfd* pe; - - /* If the fd is already in the set just update its events. */ - assert(!loop->poll_fds_iterating); - for (i = 0; i < loop->poll_fds_used; ++i) { - if (loop->poll_fds[i].fd == w->fd) { - loop->poll_fds[i].events = w->pevents; - return; - } - } - - /* Otherwise, allocate a new slot in the set for the fd. */ - uv__pollfds_maybe_resize(loop); - pe = &loop->poll_fds[loop->poll_fds_used++]; - pe->fd = w->fd; - pe->events = w->pevents; -} - -/* Remove a watcher's fd from our poll fds array. */ -static void uv__pollfds_del(uv_loop_t* loop, int fd) { - size_t i; - assert(!loop->poll_fds_iterating); - for (i = 0; i < loop->poll_fds_used;) { - if (loop->poll_fds[i].fd == fd) { - /* swap to last position and remove */ - --loop->poll_fds_used; - uv__pollfds_swap(loop, i, loop->poll_fds_used); - loop->poll_fds[loop->poll_fds_used].fd = -1; - loop->poll_fds[loop->poll_fds_used].events = 0; - loop->poll_fds[loop->poll_fds_used].revents = 0; - /* This method is called with an fd of -1 to purge the invalidated fds, - * so we may possibly have multiples to remove. - */ - if (-1 != fd) - return; - } else { - /* We must only increment the loop counter when the fds do not match. - * Otherwise, when we are purging an invalidated fd, the value just - * swapped here from the previous end of the array will be skipped. - */ - ++i; - } - } -} - - -void uv__io_poll(uv_loop_t* loop, int timeout) { - sigset_t* pset; - sigset_t set; - uint64_t time_base; - uint64_t time_diff; - QUEUE* q; - uv__io_t* w; - size_t i; - unsigned int nevents; - int nfds; - int have_signals; - struct pollfd* pe; - int fd; - int user_timeout; - int reset_timeout; - - if (loop->nfds == 0) { - assert(QUEUE_EMPTY(&loop->watcher_queue)); - return; - } - - /* Take queued watchers and add their fds to our poll fds array. */ - while (!QUEUE_EMPTY(&loop->watcher_queue)) { - q = QUEUE_HEAD(&loop->watcher_queue); - QUEUE_REMOVE(q); - QUEUE_INIT(q); - - w = QUEUE_DATA(q, uv__io_t, watcher_queue); - assert(w->pevents != 0); - assert(w->fd >= 0); - assert(w->fd < (int) loop->nwatchers); - - uv__pollfds_add(loop, w); - - w->events = w->pevents; - } - - /* Prepare a set of signals to block around poll(), if any. */ - pset = NULL; - if (loop->flags & UV_LOOP_BLOCK_SIGPROF) { - pset = &set; - sigemptyset(pset); - sigaddset(pset, SIGPROF); - } - - assert(timeout >= -1); - time_base = loop->time; - - if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { - reset_timeout = 1; - user_timeout = timeout; - timeout = 0; - } else { - reset_timeout = 0; - } - - /* Loop calls to poll() and processing of results. If we get some - * results from poll() but they turn out not to be interesting to - * our caller then we need to loop around and poll() again. - */ - for (;;) { - /* Only need to set the provider_entry_time if timeout != 0. The function - * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. - */ - if (timeout != 0) - uv__metrics_set_provider_entry_time(loop); - - if (pset != NULL) - if (pthread_sigmask(SIG_BLOCK, pset, NULL)) - abort(); - nfds = poll(loop->poll_fds, (nfds_t)loop->poll_fds_used, timeout); - if (pset != NULL) - if (pthread_sigmask(SIG_UNBLOCK, pset, NULL)) - abort(); - - /* Update loop->time unconditionally. It's tempting to skip the update when - * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the - * operating system didn't reschedule our process while in the syscall. - */ - SAVE_ERRNO(uv__update_time(loop)); - - if (nfds == 0) { - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - if (timeout == -1) - continue; - if (timeout > 0) - goto update_timeout; - } - - assert(timeout != -1); - return; - } - - if (nfds == -1) { - if (errno != EINTR) - abort(); - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - if (timeout == -1) - continue; - - if (timeout == 0) - return; - - /* Interrupted by a signal. Update timeout and poll again. */ - goto update_timeout; - } - - /* Tell uv__platform_invalidate_fd not to manipulate our array - * while we are iterating over it. - */ - loop->poll_fds_iterating = 1; - - /* Initialize a count of events that we care about. */ - nevents = 0; - have_signals = 0; - - /* Loop over the entire poll fds array looking for returned events. */ - for (i = 0; i < loop->poll_fds_used; i++) { - pe = loop->poll_fds + i; - fd = pe->fd; - - /* Skip invalidated events, see uv__platform_invalidate_fd. */ - if (fd == -1) - continue; - - assert(fd >= 0); - assert((unsigned) fd < loop->nwatchers); - - w = loop->watchers[fd]; - - if (w == NULL) { - /* File descriptor that we've stopped watching, ignore. */ - uv__platform_invalidate_fd(loop, fd); - continue; - } - - /* Filter out events that user has not requested us to watch - * (e.g. POLLNVAL). - */ - pe->revents &= w->pevents | POLLERR | POLLHUP; - - if (pe->revents != 0) { - /* Run signal watchers last. */ - if (w == &loop->signal_io_watcher) { - have_signals = 1; - } else { - uv__metrics_update_idle_time(loop); - w->cb(loop, w, pe->revents); - } - - nevents++; - } - } - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - if (have_signals != 0) { - uv__metrics_update_idle_time(loop); - loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); - } - - loop->poll_fds_iterating = 0; - - /* Purge invalidated fds from our poll fds array. */ - uv__pollfds_del(loop, -1); - - if (have_signals != 0) - return; /* Event loop should cycle now so don't poll again. */ - - if (nevents != 0) - return; - - if (timeout == 0) - return; - - if (timeout == -1) - continue; - -update_timeout: - assert(timeout > 0); - - time_diff = loop->time - time_base; - if (time_diff >= (uint64_t) timeout) - return; - - timeout -= time_diff; - } -} - -/* Remove the given fd from our poll fds array because no one - * is interested in its events anymore. - */ -void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) { - size_t i; - - assert(fd >= 0); - - if (loop->poll_fds_iterating) { - /* uv__io_poll is currently iterating. Just invalidate fd. */ - for (i = 0; i < loop->poll_fds_used; i++) - if (loop->poll_fds[i].fd == fd) { - loop->poll_fds[i].fd = -1; - loop->poll_fds[i].events = 0; - loop->poll_fds[i].revents = 0; - } - } else { - /* uv__io_poll is not iterating. Delete fd from the set. */ - uv__pollfds_del(loop, fd); - } -} - -/* Check whether the given fd is supported by poll(). */ -int uv__io_check_fd(uv_loop_t* loop, int fd) { - struct pollfd p[1]; - int rv; - - p[0].fd = fd; - p[0].events = POLLIN; - - do - rv = poll(p, 1, 0); - while (rv == -1 && (errno == EINTR || errno == EAGAIN)); - - if (rv == -1) - return UV__ERR(errno); - - if (p[0].revents & POLLNVAL) - return UV_EINVAL; - - return 0; -} diff --git a/libuv/src/unix/process.c b/libuv/src/unix/process.c deleted file mode 100644 index 91bf3c5..0000000 --- a/libuv/src/unix/process.c +++ /dev/null @@ -1,549 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#if defined(__APPLE__) && !TARGET_OS_IPHONE -# include -# define environ (*_NSGetEnviron()) -#else -extern char **environ; -#endif - -#if defined(__linux__) || defined(__GLIBC__) -# include -#endif - -#if defined(__MVS__) -# include "zos-base.h" -#endif - - -static void uv__chld(uv_signal_t* handle, int signum) { - uv_process_t* process; - uv_loop_t* loop; - int exit_status; - int term_signal; - int status; - pid_t pid; - QUEUE pending; - QUEUE* q; - QUEUE* h; - - assert(signum == SIGCHLD); - - QUEUE_INIT(&pending); - loop = handle->loop; - - h = &loop->process_handles; - q = QUEUE_HEAD(h); - while (q != h) { - process = QUEUE_DATA(q, uv_process_t, queue); - q = QUEUE_NEXT(q); - - do - pid = waitpid(process->pid, &status, WNOHANG); - while (pid == -1 && errno == EINTR); - - if (pid == 0) - continue; - - if (pid == -1) { - if (errno != ECHILD) - abort(); - continue; - } - - process->status = status; - QUEUE_REMOVE(&process->queue); - QUEUE_INSERT_TAIL(&pending, &process->queue); - } - - h = &pending; - q = QUEUE_HEAD(h); - while (q != h) { - process = QUEUE_DATA(q, uv_process_t, queue); - q = QUEUE_NEXT(q); - - QUEUE_REMOVE(&process->queue); - QUEUE_INIT(&process->queue); - uv__handle_stop(process); - - if (process->exit_cb == NULL) - continue; - - exit_status = 0; - if (WIFEXITED(process->status)) - exit_status = WEXITSTATUS(process->status); - - term_signal = 0; - if (WIFSIGNALED(process->status)) - term_signal = WTERMSIG(process->status); - - process->exit_cb(process, exit_status, term_signal); - } - assert(QUEUE_EMPTY(&pending)); -} - -/* - * Used for initializing stdio streams like options.stdin_stream. Returns - * zero on success. See also the cleanup section in uv_spawn(). - */ -static int uv__process_init_stdio(uv_stdio_container_t* container, int fds[2]) { - int mask; - int fd; - - mask = UV_IGNORE | UV_CREATE_PIPE | UV_INHERIT_FD | UV_INHERIT_STREAM; - - switch (container->flags & mask) { - case UV_IGNORE: - return 0; - - case UV_CREATE_PIPE: - assert(container->data.stream != NULL); - if (container->data.stream->type != UV_NAMED_PIPE) - return UV_EINVAL; - else - return uv_socketpair(SOCK_STREAM, 0, fds, 0, 0); - - case UV_INHERIT_FD: - case UV_INHERIT_STREAM: - if (container->flags & UV_INHERIT_FD) - fd = container->data.fd; - else - fd = uv__stream_fd(container->data.stream); - - if (fd == -1) - return UV_EINVAL; - - fds[1] = fd; - return 0; - - default: - assert(0 && "Unexpected flags"); - return UV_EINVAL; - } -} - - -static int uv__process_open_stream(uv_stdio_container_t* container, - int pipefds[2]) { - int flags; - int err; - - if (!(container->flags & UV_CREATE_PIPE) || pipefds[0] < 0) - return 0; - - err = uv__close(pipefds[1]); - if (err != 0) - abort(); - - pipefds[1] = -1; - uv__nonblock(pipefds[0], 1); - - flags = 0; - if (container->flags & UV_WRITABLE_PIPE) - flags |= UV_HANDLE_READABLE; - if (container->flags & UV_READABLE_PIPE) - flags |= UV_HANDLE_WRITABLE; - - return uv__stream_open(container->data.stream, pipefds[0], flags); -} - - -static void uv__process_close_stream(uv_stdio_container_t* container) { - if (!(container->flags & UV_CREATE_PIPE)) return; - uv__stream_close(container->data.stream); -} - - -static void uv__write_int(int fd, int val) { - ssize_t n; - - do - n = write(fd, &val, sizeof(val)); - while (n == -1 && errno == EINTR); - - if (n == -1 && errno == EPIPE) - return; /* parent process has quit */ - - assert(n == sizeof(val)); -} - - -static void uv__write_errno(int error_fd) { - uv__write_int(error_fd, UV__ERR(errno)); - _exit(127); -} - - -#if !(defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH)) -/* execvp is marked __WATCHOS_PROHIBITED __TVOS_PROHIBITED, so must be - * avoided. Since this isn't called on those targets, the function - * doesn't even need to be defined for them. - */ -static void uv__process_child_init(const uv_process_options_t* options, - int stdio_count, - int (*pipes)[2], - int error_fd) { - sigset_t signewset; - int close_fd; - int use_fd; - int fd; - int n; - - /* Reset signal disposition first. Use a hard-coded limit because NSIG is not - * fixed on Linux: it's either 32, 34 or 64, depending on whether RT signals - * are enabled. We are not allowed to touch RT signal handlers, glibc uses - * them internally. - */ - for (n = 1; n < 32; n += 1) { - if (n == SIGKILL || n == SIGSTOP) - continue; /* Can't be changed. */ - -#if defined(__HAIKU__) - if (n == SIGKILLTHR) - continue; /* Can't be changed. */ -#endif - - if (SIG_ERR != signal(n, SIG_DFL)) - continue; - - uv__write_errno(error_fd); - } - - if (options->flags & UV_PROCESS_DETACHED) - setsid(); - - /* First duplicate low numbered fds, since it's not safe to duplicate them, - * they could get replaced. Example: swapping stdout and stderr; without - * this fd 2 (stderr) would be duplicated into fd 1, thus making both - * stdout and stderr go to the same fd, which was not the intention. */ - for (fd = 0; fd < stdio_count; fd++) { - use_fd = pipes[fd][1]; - if (use_fd < 0 || use_fd >= fd) - continue; - pipes[fd][1] = fcntl(use_fd, F_DUPFD, stdio_count); - if (pipes[fd][1] == -1) - uv__write_errno(error_fd); - } - - for (fd = 0; fd < stdio_count; fd++) { - close_fd = pipes[fd][0]; - use_fd = pipes[fd][1]; - - if (use_fd < 0) { - if (fd >= 3) - continue; - else { - /* redirect stdin, stdout and stderr to /dev/null even if UV_IGNORE is - * set - */ - use_fd = open("/dev/null", fd == 0 ? O_RDONLY : O_RDWR); - close_fd = use_fd; - - if (use_fd < 0) - uv__write_errno(error_fd); - } - } - - if (fd == use_fd) - uv__cloexec_fcntl(use_fd, 0); - else - fd = dup2(use_fd, fd); - - if (fd == -1) - uv__write_errno(error_fd); - - if (fd <= 2) - uv__nonblock_fcntl(fd, 0); - - if (close_fd >= stdio_count) - uv__close(close_fd); - } - - for (fd = 0; fd < stdio_count; fd++) { - use_fd = pipes[fd][1]; - - if (use_fd >= stdio_count) - uv__close(use_fd); - } - - if (options->cwd != NULL && chdir(options->cwd)) - uv__write_errno(error_fd); - - if (options->flags & (UV_PROCESS_SETUID | UV_PROCESS_SETGID)) { - /* When dropping privileges from root, the `setgroups` call will - * remove any extraneous groups. If we don't call this, then - * even though our uid has dropped, we may still have groups - * that enable us to do super-user things. This will fail if we - * aren't root, so don't bother checking the return value, this - * is just done as an optimistic privilege dropping function. - */ - SAVE_ERRNO(setgroups(0, NULL)); - } - - if ((options->flags & UV_PROCESS_SETGID) && setgid(options->gid)) - uv__write_errno(error_fd); - - if ((options->flags & UV_PROCESS_SETUID) && setuid(options->uid)) - uv__write_errno(error_fd); - - if (options->env != NULL) { - environ = options->env; - } - - /* Reset signal mask just before exec. */ - sigemptyset(&signewset); - if (sigprocmask(SIG_SETMASK, &signewset, NULL) != 0) - abort(); - -#ifdef __MVS__ - execvpe(options->file, options->args, environ); -#else - execvp(options->file, options->args); -#endif - - uv__write_errno(error_fd); - abort(); -} -#endif - - -int uv_spawn(uv_loop_t* loop, - uv_process_t* process, - const uv_process_options_t* options) { -#if defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH) - /* fork is marked __WATCHOS_PROHIBITED __TVOS_PROHIBITED. */ - return UV_ENOSYS; -#else - sigset_t signewset; - sigset_t sigoldset; - int signal_pipe[2] = { -1, -1 }; - int pipes_storage[8][2]; - int (*pipes)[2]; - int stdio_count; - ssize_t r; - pid_t pid; - int err; - int exec_errorno; - int i; - int status; - - assert(options->file != NULL); - assert(!(options->flags & ~(UV_PROCESS_DETACHED | - UV_PROCESS_SETGID | - UV_PROCESS_SETUID | - UV_PROCESS_WINDOWS_HIDE | - UV_PROCESS_WINDOWS_HIDE_CONSOLE | - UV_PROCESS_WINDOWS_HIDE_GUI | - UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS))); - - uv__handle_init(loop, (uv_handle_t*)process, UV_PROCESS); - QUEUE_INIT(&process->queue); - - stdio_count = options->stdio_count; - if (stdio_count < 3) - stdio_count = 3; - - err = UV_ENOMEM; - pipes = pipes_storage; - if (stdio_count > (int) ARRAY_SIZE(pipes_storage)) - pipes = uv__malloc(stdio_count * sizeof(*pipes)); - - if (pipes == NULL) - goto error; - - for (i = 0; i < stdio_count; i++) { - pipes[i][0] = -1; - pipes[i][1] = -1; - } - - for (i = 0; i < options->stdio_count; i++) { - err = uv__process_init_stdio(options->stdio + i, pipes[i]); - if (err) - goto error; - } - - /* This pipe is used by the parent to wait until - * the child has called `execve()`. We need this - * to avoid the following race condition: - * - * if ((pid = fork()) > 0) { - * kill(pid, SIGTERM); - * } - * else if (pid == 0) { - * execve("/bin/cat", argp, envp); - * } - * - * The parent sends a signal immediately after forking. - * Since the child may not have called `execve()` yet, - * there is no telling what process receives the signal, - * our fork or /bin/cat. - * - * To avoid ambiguity, we create a pipe with both ends - * marked close-on-exec. Then, after the call to `fork()`, - * the parent polls the read end until it EOFs or errors with EPIPE. - */ - err = uv__make_pipe(signal_pipe, 0); - if (err) - goto error; - - uv_signal_start(&loop->child_watcher, uv__chld, SIGCHLD); - - /* Acquire write lock to prevent opening new fds in worker threads */ - uv_rwlock_wrlock(&loop->cloexec_lock); - - /* Start the child with most signals blocked, to avoid any issues before we - * can reset them, but allow program failures to exit (and not hang). */ - sigfillset(&signewset); - sigdelset(&signewset, SIGKILL); - sigdelset(&signewset, SIGSTOP); - sigdelset(&signewset, SIGTRAP); - sigdelset(&signewset, SIGSEGV); - sigdelset(&signewset, SIGBUS); - sigdelset(&signewset, SIGILL); - sigdelset(&signewset, SIGSYS); - sigdelset(&signewset, SIGABRT); - if (pthread_sigmask(SIG_BLOCK, &signewset, &sigoldset) != 0) - abort(); - - pid = fork(); - if (pid == -1) - err = UV__ERR(errno); - - if (pid == 0) - uv__process_child_init(options, stdio_count, pipes, signal_pipe[1]); - - if (pthread_sigmask(SIG_SETMASK, &sigoldset, NULL) != 0) - abort(); - - /* Release lock in parent process */ - uv_rwlock_wrunlock(&loop->cloexec_lock); - - uv__close(signal_pipe[1]); - - if (pid == -1) { - uv__close(signal_pipe[0]); - goto error; - } - - process->status = 0; - exec_errorno = 0; - do - r = read(signal_pipe[0], &exec_errorno, sizeof(exec_errorno)); - while (r == -1 && errno == EINTR); - - if (r == 0) - ; /* okay, EOF */ - else if (r == sizeof(exec_errorno)) { - do - err = waitpid(pid, &status, 0); /* okay, read errorno */ - while (err == -1 && errno == EINTR); - assert(err == pid); - } else if (r == -1 && errno == EPIPE) { - do - err = waitpid(pid, &status, 0); /* okay, got EPIPE */ - while (err == -1 && errno == EINTR); - assert(err == pid); - } else - abort(); - - uv__close_nocheckstdio(signal_pipe[0]); - - for (i = 0; i < options->stdio_count; i++) { - err = uv__process_open_stream(options->stdio + i, pipes[i]); - if (err == 0) - continue; - - while (i--) - uv__process_close_stream(options->stdio + i); - - goto error; - } - - /* Only activate this handle if exec() happened successfully */ - if (exec_errorno == 0) { - QUEUE_INSERT_TAIL(&loop->process_handles, &process->queue); - uv__handle_start(process); - } - - process->pid = pid; - process->exit_cb = options->exit_cb; - - if (pipes != pipes_storage) - uv__free(pipes); - - return exec_errorno; - -error: - if (pipes != NULL) { - for (i = 0; i < stdio_count; i++) { - if (i < options->stdio_count) - if (options->stdio[i].flags & (UV_INHERIT_FD | UV_INHERIT_STREAM)) - continue; - if (pipes[i][0] != -1) - uv__close_nocheckstdio(pipes[i][0]); - if (pipes[i][1] != -1) - uv__close_nocheckstdio(pipes[i][1]); - } - - if (pipes != pipes_storage) - uv__free(pipes); - } - - return err; -#endif -} - - -int uv_process_kill(uv_process_t* process, int signum) { - return uv_kill(process->pid, signum); -} - - -int uv_kill(int pid, int signum) { - if (kill(pid, signum)) - return UV__ERR(errno); - else - return 0; -} - - -void uv__process_close(uv_process_t* handle) { - QUEUE_REMOVE(&handle->queue); - uv__handle_stop(handle); - if (QUEUE_EMPTY(&handle->loop->process_handles)) - uv_signal_stop(&handle->loop->child_watcher); -} diff --git a/libuv/src/unix/procfs-exepath.c b/libuv/src/unix/procfs-exepath.c deleted file mode 100644 index 00dc021..0000000 --- a/libuv/src/unix/procfs-exepath.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include - -int uv_exepath(char* buffer, size_t* size) { - ssize_t n; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - n = *size - 1; - if (n > 0) - n = readlink("/proc/self/exe", buffer, n); - - if (n == -1) - return UV__ERR(errno); - - buffer[n] = '\0'; - *size = n; - - return 0; -} diff --git a/libuv/src/unix/proctitle.c b/libuv/src/unix/proctitle.c deleted file mode 100644 index 9d1f00d..0000000 --- a/libuv/src/unix/proctitle.c +++ /dev/null @@ -1,157 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include - -struct uv__process_title { - char* str; - size_t len; /* Length of the current process title. */ - size_t cap; /* Maximum capacity. Computed once in uv_setup_args(). */ -}; - -extern void uv__set_process_title(const char* title); - -static uv_mutex_t process_title_mutex; -static uv_once_t process_title_mutex_once = UV_ONCE_INIT; -static struct uv__process_title process_title; -static void* args_mem; - - -static void init_process_title_mutex_once(void) { - uv_mutex_init(&process_title_mutex); -} - - -char** uv_setup_args(int argc, char** argv) { - struct uv__process_title pt; - char** new_argv; - size_t size; - char* s; - int i; - - if (argc <= 0) - return argv; - - pt.str = argv[0]; - pt.len = strlen(argv[0]); - pt.cap = pt.len + 1; - - /* Calculate how much memory we need for the argv strings. */ - size = pt.cap; - for (i = 1; i < argc; i++) - size += strlen(argv[i]) + 1; - - /* Add space for the argv pointers. */ - size += (argc + 1) * sizeof(char*); - - new_argv = uv__malloc(size); - if (new_argv == NULL) - return argv; - - /* Copy over the strings and set up the pointer table. */ - i = 0; - s = (char*) &new_argv[argc + 1]; - size = pt.cap; - goto loop; - - for (/* empty */; i < argc; i++) { - size = strlen(argv[i]) + 1; - loop: - memcpy(s, argv[i], size); - new_argv[i] = s; - s += size; - } - new_argv[i] = NULL; - - pt.cap = argv[i - 1] + size - argv[0]; - - args_mem = new_argv; - process_title = pt; - - return new_argv; -} - - -int uv_set_process_title(const char* title) { - struct uv__process_title* pt; - size_t len; - - /* If uv_setup_args wasn't called or failed, we can't continue. */ - if (args_mem == NULL) - return UV_ENOBUFS; - - pt = &process_title; - len = strlen(title); - - uv_once(&process_title_mutex_once, init_process_title_mutex_once); - uv_mutex_lock(&process_title_mutex); - - if (len >= pt->cap) { - len = 0; - if (pt->cap > 0) - len = pt->cap - 1; - } - - memcpy(pt->str, title, len); - memset(pt->str + len, '\0', pt->cap - len); - pt->len = len; - uv__set_process_title(pt->str); - - uv_mutex_unlock(&process_title_mutex); - - return 0; -} - - -int uv_get_process_title(char* buffer, size_t size) { - if (buffer == NULL || size == 0) - return UV_EINVAL; - - /* If uv_setup_args wasn't called or failed, we can't continue. */ - if (args_mem == NULL) - return UV_ENOBUFS; - - uv_once(&process_title_mutex_once, init_process_title_mutex_once); - uv_mutex_lock(&process_title_mutex); - - if (size <= process_title.len) { - uv_mutex_unlock(&process_title_mutex); - return UV_ENOBUFS; - } - - if (process_title.len != 0) - memcpy(buffer, process_title.str, process_title.len + 1); - - buffer[process_title.len] = '\0'; - - uv_mutex_unlock(&process_title_mutex); - - return 0; -} - - -void uv__process_title_cleanup(void) { - uv__free(args_mem); /* Keep valgrind happy. */ - args_mem = NULL; -} diff --git a/libuv/src/unix/pthread-fixes.c b/libuv/src/unix/pthread-fixes.c deleted file mode 100644 index 022d79c..0000000 --- a/libuv/src/unix/pthread-fixes.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (c) 2013, Sony Mobile Communications AB - * Copyright (c) 2012, Google Inc. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* Android versions < 4.1 have a broken pthread_sigmask. */ -#include "uv-common.h" - -#include -#include -#include - -int uv__pthread_sigmask(int how, const sigset_t* set, sigset_t* oset) { - static int workaround; - int err; - - if (uv__load_relaxed(&workaround)) { - return sigprocmask(how, set, oset); - } else { - err = pthread_sigmask(how, set, oset); - if (err) { - if (err == EINVAL && sigprocmask(how, set, oset) == 0) { - uv__store_relaxed(&workaround, 1); - return 0; - } else { - return -1; - } - } - } - - return 0; -} diff --git a/libuv/src/unix/qnx.c b/libuv/src/unix/qnx.c deleted file mode 100644 index ca148d3..0000000 --- a/libuv/src/unix/qnx.c +++ /dev/null @@ -1,137 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include -#include - -static void -get_mem_info(uint64_t* totalmem, uint64_t* freemem) { - mem_info_t msg; - - memset(&msg, 0, sizeof(msg)); - msg.i.type = _MEM_INFO; - msg.i.fd = -1; - - if (MsgSend(MEMMGR_COID, &msg.i, sizeof(msg.i), &msg.o, sizeof(msg.o)) - != -1) { - *totalmem = msg.o.info.__posix_tmi_total; - *freemem = msg.o.info.posix_tmi_length; - } else { - *totalmem = 0; - *freemem = 0; - } -} - - -void uv_loadavg(double avg[3]) { - avg[0] = 0.0; - avg[1] = 0.0; - avg[2] = 0.0; -} - - -int uv_exepath(char* buffer, size_t* size) { - char path[PATH_MAX]; - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - realpath(_cmdname(NULL), path); - strlcpy(buffer, path, *size); - *size = strlen(buffer); - return 0; -} - - -uint64_t uv_get_free_memory(void) { - uint64_t totalmem; - uint64_t freemem; - get_mem_info(&totalmem, &freemem); - return freemem; -} - - -uint64_t uv_get_total_memory(void) { - uint64_t totalmem; - uint64_t freemem; - get_mem_info(&totalmem, &freemem); - return totalmem; -} - - -uint64_t uv_get_constrained_memory(void) { - return 0; -} - - -int uv_resident_set_memory(size_t* rss) { - int fd; - procfs_asinfo asinfo; - - fd = uv__open_cloexec("/proc/self/ctl", O_RDONLY); - if (fd == -1) - return UV__ERR(errno); - - if (devctl(fd, DCMD_PROC_ASINFO, &asinfo, sizeof(asinfo), 0) == -1) { - uv__close(fd); - return UV__ERR(errno); - } - - uv__close(fd); - *rss = asinfo.rss; - return 0; -} - - -int uv_uptime(double* uptime) { - struct qtime_entry* qtime = _SYSPAGE_ENTRY(_syspage_ptr, qtime); - *uptime = (qtime->nsec / 1000000000.0); - return 0; -} - - -int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { - struct cpuinfo_entry* cpuinfo = - (struct cpuinfo_entry*)_SYSPAGE_ENTRY(_syspage_ptr, new_cpuinfo); - size_t cpuinfo_size = _SYSPAGE_ELEMENT_SIZE(_syspage_ptr, cpuinfo); - struct strings_entry* strings = _SYSPAGE_ENTRY(_syspage_ptr, strings); - int num_cpus = _syspage_ptr->num_cpu; - int i; - - *count = num_cpus; - *cpu_infos = uv__malloc(num_cpus * sizeof(**cpu_infos)); - if (*cpu_infos == NULL) - return UV_ENOMEM; - - for (i = 0; i < num_cpus; i++) { - (*cpu_infos)[i].model = strdup(&strings->data[cpuinfo->name]); - (*cpu_infos)[i].speed = cpuinfo->speed; - SYSPAGE_ARRAY_ADJ_OFFSET(cpuinfo, cpuinfo, cpuinfo_size); - } - - return 0; -} diff --git a/libuv/src/unix/random-devurandom.c b/libuv/src/unix/random-devurandom.c deleted file mode 100644 index 05e52a5..0000000 --- a/libuv/src/unix/random-devurandom.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include - -static uv_once_t once = UV_ONCE_INIT; -static int status; - - -int uv__random_readpath(const char* path, void* buf, size_t buflen) { - struct stat s; - size_t pos; - ssize_t n; - int fd; - - fd = uv__open_cloexec(path, O_RDONLY); - - if (fd < 0) - return fd; - - if (fstat(fd, &s)) { - uv__close(fd); - return UV__ERR(errno); - } - - if (!S_ISCHR(s.st_mode)) { - uv__close(fd); - return UV_EIO; - } - - for (pos = 0; pos != buflen; pos += n) { - do - n = read(fd, (char*) buf + pos, buflen - pos); - while (n == -1 && errno == EINTR); - - if (n == -1) { - uv__close(fd); - return UV__ERR(errno); - } - - if (n == 0) { - uv__close(fd); - return UV_EIO; - } - } - - uv__close(fd); - return 0; -} - - -static void uv__random_devurandom_init(void) { - char c; - - /* Linux's random(4) man page suggests applications should read at least - * once from /dev/random before switching to /dev/urandom in order to seed - * the system RNG. Reads from /dev/random can of course block indefinitely - * until entropy is available but that's the point. - */ - status = uv__random_readpath("/dev/random", &c, 1); -} - - -int uv__random_devurandom(void* buf, size_t buflen) { - uv_once(&once, uv__random_devurandom_init); - - if (status != 0) - return status; - - return uv__random_readpath("/dev/urandom", buf, buflen); -} diff --git a/libuv/src/unix/random-getentropy.c b/libuv/src/unix/random-getentropy.c deleted file mode 100644 index c45d9fd..0000000 --- a/libuv/src/unix/random-getentropy.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include - -typedef int (*uv__getentropy_cb)(void *, size_t); - -static uv__getentropy_cb uv__getentropy; -static uv_once_t once = UV_ONCE_INIT; - - -static void uv__random_getentropy_init(void) { - uv__getentropy = (uv__getentropy_cb) dlsym(RTLD_DEFAULT, "getentropy"); -} - - -int uv__random_getentropy(void* buf, size_t buflen) { - size_t pos; - size_t stride; - - uv_once(&once, uv__random_getentropy_init); - - if (uv__getentropy == NULL) - return UV_ENOSYS; - - /* getentropy() returns an error for requests > 256 bytes. */ - for (pos = 0, stride = 256; pos + stride < buflen; pos += stride) - if (uv__getentropy((char *) buf + pos, stride)) - return UV__ERR(errno); - - if (uv__getentropy((char *) buf + pos, buflen - pos)) - return UV__ERR(errno); - - return 0; -} diff --git a/libuv/src/unix/random-getrandom.c b/libuv/src/unix/random-getrandom.c deleted file mode 100644 index bcc9408..0000000 --- a/libuv/src/unix/random-getrandom.c +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#ifdef __linux__ - -#include "linux-syscalls.h" - -#define uv__random_getrandom_init() 0 - -#else /* !__linux__ */ - -#include -#include - -typedef ssize_t (*uv__getrandom_cb)(void *, size_t, unsigned); - -static uv__getrandom_cb uv__getrandom; -static uv_once_t once = UV_ONCE_INIT; - -static void uv__random_getrandom_init_once(void) { - uv__getrandom = (uv__getrandom_cb) dlsym(RTLD_DEFAULT, "getrandom"); -} - -static int uv__random_getrandom_init(void) { - uv_once(&once, uv__random_getrandom_init_once); - - if (uv__getrandom == NULL) - return UV_ENOSYS; - - return 0; -} - -#endif /* !__linux__ */ - -int uv__random_getrandom(void* buf, size_t buflen) { - ssize_t n; - size_t pos; - int rc; - - rc = uv__random_getrandom_init(); - if (rc != 0) - return rc; - - for (pos = 0; pos != buflen; pos += n) { - do { - n = buflen - pos; - - /* Most getrandom() implementations promise that reads <= 256 bytes - * will always succeed and won't be interrupted by signals. - * It's therefore useful to split it up in smaller reads because - * one big read may, in theory, continuously fail with EINTR. - */ - if (n > 256) - n = 256; - - n = uv__getrandom((char *) buf + pos, n, 0); - } while (n == -1 && errno == EINTR); - - if (n == -1) - return UV__ERR(errno); - - if (n == 0) - return UV_EIO; - } - - return 0; -} diff --git a/libuv/src/unix/random-sysctl-linux.c b/libuv/src/unix/random-sysctl-linux.c deleted file mode 100644 index 66ba8d7..0000000 --- a/libuv/src/unix/random-sysctl-linux.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include - -#include -#include - - -struct uv__sysctl_args { - int* name; - int nlen; - void* oldval; - size_t* oldlenp; - void* newval; - size_t newlen; - unsigned long unused[4]; -}; - - -int uv__random_sysctl(void* buf, size_t buflen) { - static int name[] = {1 /*CTL_KERN*/, 40 /*KERN_RANDOM*/, 6 /*RANDOM_UUID*/}; - struct uv__sysctl_args args; - char uuid[16]; - char* p; - char* pe; - size_t n; - - p = buf; - pe = p + buflen; - - while (p < pe) { - memset(&args, 0, sizeof(args)); - - args.name = name; - args.nlen = ARRAY_SIZE(name); - args.oldval = uuid; - args.oldlenp = &n; - n = sizeof(uuid); - - /* Emits a deprecation warning with some kernels but that seems like - * an okay trade-off for the fallback of the fallback: this function is - * only called when neither getrandom(2) nor /dev/urandom are available. - * Fails with ENOSYS on kernels configured without CONFIG_SYSCTL_SYSCALL. - * At least arm64 never had a _sysctl system call and therefore doesn't - * have a SYS__sysctl define either. - */ -#ifdef SYS__sysctl - if (syscall(SYS__sysctl, &args) == -1) - return UV__ERR(errno); -#else - { - (void) &args; - return UV_ENOSYS; - } -#endif - - if (n != sizeof(uuid)) - return UV_EIO; /* Can't happen. */ - - /* uuid[] is now a type 4 UUID. Bytes 6 and 8 (counting from zero) contain - * 4 and 5 bits of entropy, respectively. For ease of use, we skip those - * and only use 14 of the 16 bytes. - */ - uuid[6] = uuid[14]; - uuid[8] = uuid[15]; - - n = pe - p; - if (n > 14) - n = 14; - - memcpy(p, uuid, n); - p += n; - } - - return 0; -} diff --git a/libuv/src/unix/signal.c b/libuv/src/unix/signal.c deleted file mode 100644 index 1133c73..0000000 --- a/libuv/src/unix/signal.c +++ /dev/null @@ -1,558 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include -#include - -#ifndef SA_RESTART -# define SA_RESTART 0 -#endif - -typedef struct { - uv_signal_t* handle; - int signum; -} uv__signal_msg_t; - -RB_HEAD(uv__signal_tree_s, uv_signal_s); - - -static int uv__signal_unlock(void); -static int uv__signal_start(uv_signal_t* handle, - uv_signal_cb signal_cb, - int signum, - int oneshot); -static void uv__signal_event(uv_loop_t* loop, uv__io_t* w, unsigned int events); -static int uv__signal_compare(uv_signal_t* w1, uv_signal_t* w2); -static void uv__signal_stop(uv_signal_t* handle); -static void uv__signal_unregister_handler(int signum); - - -static uv_once_t uv__signal_global_init_guard = UV_ONCE_INIT; -static struct uv__signal_tree_s uv__signal_tree = - RB_INITIALIZER(uv__signal_tree); -static int uv__signal_lock_pipefd[2] = { -1, -1 }; - -RB_GENERATE_STATIC(uv__signal_tree_s, - uv_signal_s, tree_entry, - uv__signal_compare) - -static void uv__signal_global_reinit(void); - -static void uv__signal_global_init(void) { - if (uv__signal_lock_pipefd[0] == -1) - /* pthread_atfork can register before and after handlers, one - * for each child. This only registers one for the child. That - * state is both persistent and cumulative, so if we keep doing - * it the handler functions will be called multiple times. Thus - * we only want to do it once. - */ - if (pthread_atfork(NULL, NULL, &uv__signal_global_reinit)) - abort(); - - uv__signal_global_reinit(); -} - - -void uv__signal_cleanup(void) { - /* We can only use signal-safe functions here. - * That includes read/write and close, fortunately. - * We do all of this directly here instead of resetting - * uv__signal_global_init_guard because - * uv__signal_global_once_init is only called from uv_loop_init - * and this needs to function in existing loops. - */ - if (uv__signal_lock_pipefd[0] != -1) { - uv__close(uv__signal_lock_pipefd[0]); - uv__signal_lock_pipefd[0] = -1; - } - - if (uv__signal_lock_pipefd[1] != -1) { - uv__close(uv__signal_lock_pipefd[1]); - uv__signal_lock_pipefd[1] = -1; - } -} - - -static void uv__signal_global_reinit(void) { - uv__signal_cleanup(); - - if (uv__make_pipe(uv__signal_lock_pipefd, 0)) - abort(); - - if (uv__signal_unlock()) - abort(); -} - - -void uv__signal_global_once_init(void) { - uv_once(&uv__signal_global_init_guard, uv__signal_global_init); -} - - -static int uv__signal_lock(void) { - int r; - char data; - - do { - r = read(uv__signal_lock_pipefd[0], &data, sizeof data); - } while (r < 0 && errno == EINTR); - - return (r < 0) ? -1 : 0; -} - - -static int uv__signal_unlock(void) { - int r; - char data = 42; - - do { - r = write(uv__signal_lock_pipefd[1], &data, sizeof data); - } while (r < 0 && errno == EINTR); - - return (r < 0) ? -1 : 0; -} - - -static void uv__signal_block_and_lock(sigset_t* saved_sigmask) { - sigset_t new_mask; - - if (sigfillset(&new_mask)) - abort(); - - /* to shut up valgrind */ - sigemptyset(saved_sigmask); - if (pthread_sigmask(SIG_SETMASK, &new_mask, saved_sigmask)) - abort(); - - if (uv__signal_lock()) - abort(); -} - - -static void uv__signal_unlock_and_unblock(sigset_t* saved_sigmask) { - if (uv__signal_unlock()) - abort(); - - if (pthread_sigmask(SIG_SETMASK, saved_sigmask, NULL)) - abort(); -} - - -static uv_signal_t* uv__signal_first_handle(int signum) { - /* This function must be called with the signal lock held. */ - uv_signal_t lookup; - uv_signal_t* handle; - - lookup.signum = signum; - lookup.flags = 0; - lookup.loop = NULL; - - handle = RB_NFIND(uv__signal_tree_s, &uv__signal_tree, &lookup); - - if (handle != NULL && handle->signum == signum) - return handle; - - return NULL; -} - - -static void uv__signal_handler(int signum) { - uv__signal_msg_t msg; - uv_signal_t* handle; - int saved_errno; - - saved_errno = errno; - memset(&msg, 0, sizeof msg); - - if (uv__signal_lock()) { - errno = saved_errno; - return; - } - - for (handle = uv__signal_first_handle(signum); - handle != NULL && handle->signum == signum; - handle = RB_NEXT(uv__signal_tree_s, &uv__signal_tree, handle)) { - int r; - - msg.signum = signum; - msg.handle = handle; - - /* write() should be atomic for small data chunks, so the entire message - * should be written at once. In theory the pipe could become full, in - * which case the user is out of luck. - */ - do { - r = write(handle->loop->signal_pipefd[1], &msg, sizeof msg); - } while (r == -1 && errno == EINTR); - - assert(r == sizeof msg || - (r == -1 && (errno == EAGAIN || errno == EWOULDBLOCK))); - - if (r != -1) - handle->caught_signals++; - } - - uv__signal_unlock(); - errno = saved_errno; -} - - -static int uv__signal_register_handler(int signum, int oneshot) { - /* When this function is called, the signal lock must be held. */ - struct sigaction sa; - - /* XXX use a separate signal stack? */ - memset(&sa, 0, sizeof(sa)); - if (sigfillset(&sa.sa_mask)) - abort(); - sa.sa_handler = uv__signal_handler; - sa.sa_flags = SA_RESTART; - if (oneshot) - sa.sa_flags |= SA_RESETHAND; - - /* XXX save old action so we can restore it later on? */ - if (sigaction(signum, &sa, NULL)) - return UV__ERR(errno); - - return 0; -} - - -static void uv__signal_unregister_handler(int signum) { - /* When this function is called, the signal lock must be held. */ - struct sigaction sa; - - memset(&sa, 0, sizeof(sa)); - sa.sa_handler = SIG_DFL; - - /* sigaction can only fail with EINVAL or EFAULT; an attempt to deregister a - * signal implies that it was successfully registered earlier, so EINVAL - * should never happen. - */ - if (sigaction(signum, &sa, NULL)) - abort(); -} - - -static int uv__signal_loop_once_init(uv_loop_t* loop) { - int err; - - /* Return if already initialized. */ - if (loop->signal_pipefd[0] != -1) - return 0; - - err = uv__make_pipe(loop->signal_pipefd, UV_NONBLOCK_PIPE); - if (err) - return err; - - uv__io_init(&loop->signal_io_watcher, - uv__signal_event, - loop->signal_pipefd[0]); - uv__io_start(loop, &loop->signal_io_watcher, POLLIN); - - return 0; -} - - -int uv__signal_loop_fork(uv_loop_t* loop) { - uv__io_stop(loop, &loop->signal_io_watcher, POLLIN); - uv__close(loop->signal_pipefd[0]); - uv__close(loop->signal_pipefd[1]); - loop->signal_pipefd[0] = -1; - loop->signal_pipefd[1] = -1; - return uv__signal_loop_once_init(loop); -} - - -void uv__signal_loop_cleanup(uv_loop_t* loop) { - QUEUE* q; - - /* Stop all the signal watchers that are still attached to this loop. This - * ensures that the (shared) signal tree doesn't contain any invalid entries - * entries, and that signal handlers are removed when appropriate. - * It's safe to use QUEUE_FOREACH here because the handles and the handle - * queue are not modified by uv__signal_stop(). - */ - QUEUE_FOREACH(q, &loop->handle_queue) { - uv_handle_t* handle = QUEUE_DATA(q, uv_handle_t, handle_queue); - - if (handle->type == UV_SIGNAL) - uv__signal_stop((uv_signal_t*) handle); - } - - if (loop->signal_pipefd[0] != -1) { - uv__close(loop->signal_pipefd[0]); - loop->signal_pipefd[0] = -1; - } - - if (loop->signal_pipefd[1] != -1) { - uv__close(loop->signal_pipefd[1]); - loop->signal_pipefd[1] = -1; - } -} - - -int uv_signal_init(uv_loop_t* loop, uv_signal_t* handle) { - int err; - - err = uv__signal_loop_once_init(loop); - if (err) - return err; - - uv__handle_init(loop, (uv_handle_t*) handle, UV_SIGNAL); - handle->signum = 0; - handle->caught_signals = 0; - handle->dispatched_signals = 0; - - return 0; -} - - -void uv__signal_close(uv_signal_t* handle) { - uv__signal_stop(handle); -} - - -int uv_signal_start(uv_signal_t* handle, uv_signal_cb signal_cb, int signum) { - return uv__signal_start(handle, signal_cb, signum, 0); -} - - -int uv_signal_start_oneshot(uv_signal_t* handle, - uv_signal_cb signal_cb, - int signum) { - return uv__signal_start(handle, signal_cb, signum, 1); -} - - -static int uv__signal_start(uv_signal_t* handle, - uv_signal_cb signal_cb, - int signum, - int oneshot) { - sigset_t saved_sigmask; - int err; - uv_signal_t* first_handle; - - assert(!uv__is_closing(handle)); - - /* If the user supplies signum == 0, then return an error already. If the - * signum is otherwise invalid then uv__signal_register will find out - * eventually. - */ - if (signum == 0) - return UV_EINVAL; - - /* Short circuit: if the signal watcher is already watching {signum} don't - * go through the process of deregistering and registering the handler. - * Additionally, this avoids pending signals getting lost in the small - * time frame that handle->signum == 0. - */ - if (signum == handle->signum) { - handle->signal_cb = signal_cb; - return 0; - } - - /* If the signal handler was already active, stop it first. */ - if (handle->signum != 0) { - uv__signal_stop(handle); - } - - uv__signal_block_and_lock(&saved_sigmask); - - /* If at this point there are no active signal watchers for this signum (in - * any of the loops), it's time to try and register a handler for it here. - * Also in case there's only one-shot handlers and a regular handler comes in. - */ - first_handle = uv__signal_first_handle(signum); - if (first_handle == NULL || - (!oneshot && (first_handle->flags & UV_SIGNAL_ONE_SHOT))) { - err = uv__signal_register_handler(signum, oneshot); - if (err) { - /* Registering the signal handler failed. Must be an invalid signal. */ - uv__signal_unlock_and_unblock(&saved_sigmask); - return err; - } - } - - handle->signum = signum; - if (oneshot) - handle->flags |= UV_SIGNAL_ONE_SHOT; - - RB_INSERT(uv__signal_tree_s, &uv__signal_tree, handle); - - uv__signal_unlock_and_unblock(&saved_sigmask); - - handle->signal_cb = signal_cb; - uv__handle_start(handle); - - return 0; -} - - -static void uv__signal_event(uv_loop_t* loop, - uv__io_t* w, - unsigned int events) { - uv__signal_msg_t* msg; - uv_signal_t* handle; - char buf[sizeof(uv__signal_msg_t) * 32]; - size_t bytes, end, i; - int r; - - bytes = 0; - end = 0; - - do { - r = read(loop->signal_pipefd[0], buf + bytes, sizeof(buf) - bytes); - - if (r == -1 && errno == EINTR) - continue; - - if (r == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) { - /* If there are bytes in the buffer already (which really is extremely - * unlikely if possible at all) we can't exit the function here. We'll - * spin until more bytes are read instead. - */ - if (bytes > 0) - continue; - - /* Otherwise, there was nothing there. */ - return; - } - - /* Other errors really should never happen. */ - if (r == -1) - abort(); - - bytes += r; - - /* `end` is rounded down to a multiple of sizeof(uv__signal_msg_t). */ - end = (bytes / sizeof(uv__signal_msg_t)) * sizeof(uv__signal_msg_t); - - for (i = 0; i < end; i += sizeof(uv__signal_msg_t)) { - msg = (uv__signal_msg_t*) (buf + i); - handle = msg->handle; - - if (msg->signum == handle->signum) { - assert(!(handle->flags & UV_HANDLE_CLOSING)); - handle->signal_cb(handle, handle->signum); - } - - handle->dispatched_signals++; - - if (handle->flags & UV_SIGNAL_ONE_SHOT) - uv__signal_stop(handle); - } - - bytes -= end; - - /* If there are any "partial" messages left, move them to the start of the - * the buffer, and spin. This should not happen. - */ - if (bytes) { - memmove(buf, buf + end, bytes); - continue; - } - } while (end == sizeof buf); -} - - -static int uv__signal_compare(uv_signal_t* w1, uv_signal_t* w2) { - int f1; - int f2; - /* Compare signums first so all watchers with the same signnum end up - * adjacent. - */ - if (w1->signum < w2->signum) return -1; - if (w1->signum > w2->signum) return 1; - - /* Handlers without UV_SIGNAL_ONE_SHOT set will come first, so if the first - * handler returned is a one-shot handler, the rest will be too. - */ - f1 = w1->flags & UV_SIGNAL_ONE_SHOT; - f2 = w2->flags & UV_SIGNAL_ONE_SHOT; - if (f1 < f2) return -1; - if (f1 > f2) return 1; - - /* Sort by loop pointer, so we can easily look up the first item after - * { .signum = x, .loop = NULL }. - */ - if (w1->loop < w2->loop) return -1; - if (w1->loop > w2->loop) return 1; - - if (w1 < w2) return -1; - if (w1 > w2) return 1; - - return 0; -} - - -int uv_signal_stop(uv_signal_t* handle) { - assert(!uv__is_closing(handle)); - uv__signal_stop(handle); - return 0; -} - - -static void uv__signal_stop(uv_signal_t* handle) { - uv_signal_t* removed_handle; - sigset_t saved_sigmask; - uv_signal_t* first_handle; - int rem_oneshot; - int first_oneshot; - int ret; - - /* If the watcher wasn't started, this is a no-op. */ - if (handle->signum == 0) - return; - - uv__signal_block_and_lock(&saved_sigmask); - - removed_handle = RB_REMOVE(uv__signal_tree_s, &uv__signal_tree, handle); - assert(removed_handle == handle); - (void) removed_handle; - - /* Check if there are other active signal watchers observing this signal. If - * not, unregister the signal handler. - */ - first_handle = uv__signal_first_handle(handle->signum); - if (first_handle == NULL) { - uv__signal_unregister_handler(handle->signum); - } else { - rem_oneshot = handle->flags & UV_SIGNAL_ONE_SHOT; - first_oneshot = first_handle->flags & UV_SIGNAL_ONE_SHOT; - if (first_oneshot && !rem_oneshot) { - ret = uv__signal_register_handler(handle->signum, 1); - assert(ret == 0); - (void)ret; - } - } - - uv__signal_unlock_and_unblock(&saved_sigmask); - - handle->signum = 0; - uv__handle_stop(handle); -} diff --git a/libuv/src/unix/spinlock.h b/libuv/src/unix/spinlock.h deleted file mode 100644 index a20c83c..0000000 --- a/libuv/src/unix/spinlock.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (c) 2013, Ben Noordhuis - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef UV_SPINLOCK_H_ -#define UV_SPINLOCK_H_ - -#include "internal.h" /* ACCESS_ONCE, UV_UNUSED */ -#include "atomic-ops.h" - -#define UV_SPINLOCK_INITIALIZER { 0 } - -typedef struct { - int lock; -} uv_spinlock_t; - -UV_UNUSED(static void uv_spinlock_init(uv_spinlock_t* spinlock)); -UV_UNUSED(static void uv_spinlock_lock(uv_spinlock_t* spinlock)); -UV_UNUSED(static void uv_spinlock_unlock(uv_spinlock_t* spinlock)); -UV_UNUSED(static int uv_spinlock_trylock(uv_spinlock_t* spinlock)); - -UV_UNUSED(static void uv_spinlock_init(uv_spinlock_t* spinlock)) { - ACCESS_ONCE(int, spinlock->lock) = 0; -} - -UV_UNUSED(static void uv_spinlock_lock(uv_spinlock_t* spinlock)) { - while (!uv_spinlock_trylock(spinlock)) cpu_relax(); -} - -UV_UNUSED(static void uv_spinlock_unlock(uv_spinlock_t* spinlock)) { - ACCESS_ONCE(int, spinlock->lock) = 0; -} - -UV_UNUSED(static int uv_spinlock_trylock(uv_spinlock_t* spinlock)) { - /* TODO(bnoordhuis) Maybe change to a ticket lock to guarantee fair queueing. - * Not really critical until we have locks that are (frequently) contended - * for by several threads. - */ - return 0 == cmpxchgi(&spinlock->lock, 0, 1); -} - -#endif /* UV_SPINLOCK_H_ */ diff --git a/libuv/src/unix/stream.c b/libuv/src/unix/stream.c deleted file mode 100644 index bc64fe8..0000000 --- a/libuv/src/unix/stream.c +++ /dev/null @@ -1,1678 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include /* IOV_MAX */ - -#if defined(__APPLE__) -# include -# include -# include - -/* Forward declaration */ -typedef struct uv__stream_select_s uv__stream_select_t; - -struct uv__stream_select_s { - uv_stream_t* stream; - uv_thread_t thread; - uv_sem_t close_sem; - uv_sem_t async_sem; - uv_async_t async; - int events; - int fake_fd; - int int_fd; - int fd; - fd_set* sread; - size_t sread_sz; - fd_set* swrite; - size_t swrite_sz; -}; - -/* Due to a possible kernel bug at least in OS X 10.10 "Yosemite", - * EPROTOTYPE can be returned while trying to write to a socket that is - * shutting down. If we retry the write, we should get the expected EPIPE - * instead. - */ -# define RETRY_ON_WRITE_ERROR(errno) (errno == EINTR || errno == EPROTOTYPE) -# define IS_TRANSIENT_WRITE_ERROR(errno, send_handle) \ - (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS || \ - (errno == EMSGSIZE && send_handle != NULL)) -#else -# define RETRY_ON_WRITE_ERROR(errno) (errno == EINTR) -# define IS_TRANSIENT_WRITE_ERROR(errno, send_handle) \ - (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS) -#endif /* defined(__APPLE__) */ - -static void uv__stream_connect(uv_stream_t*); -static void uv__write(uv_stream_t* stream); -static void uv__read(uv_stream_t* stream); -static void uv__stream_io(uv_loop_t* loop, uv__io_t* w, unsigned int events); -static void uv__write_callbacks(uv_stream_t* stream); -static size_t uv__write_req_size(uv_write_t* req); - - -void uv__stream_init(uv_loop_t* loop, - uv_stream_t* stream, - uv_handle_type type) { - int err; - - uv__handle_init(loop, (uv_handle_t*)stream, type); - stream->read_cb = NULL; - stream->alloc_cb = NULL; - stream->close_cb = NULL; - stream->connection_cb = NULL; - stream->connect_req = NULL; - stream->shutdown_req = NULL; - stream->accepted_fd = -1; - stream->queued_fds = NULL; - stream->delayed_error = 0; - QUEUE_INIT(&stream->write_queue); - QUEUE_INIT(&stream->write_completed_queue); - stream->write_queue_size = 0; - - if (loop->emfile_fd == -1) { - err = uv__open_cloexec("/dev/null", O_RDONLY); - if (err < 0) - /* In the rare case that "/dev/null" isn't mounted open "/" - * instead. - */ - err = uv__open_cloexec("/", O_RDONLY); - if (err >= 0) - loop->emfile_fd = err; - } - -#if defined(__APPLE__) - stream->select = NULL; -#endif /* defined(__APPLE_) */ - - uv__io_init(&stream->io_watcher, uv__stream_io, -1); -} - - -static void uv__stream_osx_interrupt_select(uv_stream_t* stream) { -#if defined(__APPLE__) - /* Notify select() thread about state change */ - uv__stream_select_t* s; - int r; - - s = stream->select; - if (s == NULL) - return; - - /* Interrupt select() loop - * NOTE: fake_fd and int_fd are socketpair(), thus writing to one will - * emit read event on other side - */ - do - r = write(s->fake_fd, "x", 1); - while (r == -1 && errno == EINTR); - - assert(r == 1); -#else /* !defined(__APPLE__) */ - /* No-op on any other platform */ -#endif /* !defined(__APPLE__) */ -} - - -#if defined(__APPLE__) -static void uv__stream_osx_select(void* arg) { - uv_stream_t* stream; - uv__stream_select_t* s; - char buf[1024]; - int events; - int fd; - int r; - int max_fd; - - stream = arg; - s = stream->select; - fd = s->fd; - - if (fd > s->int_fd) - max_fd = fd; - else - max_fd = s->int_fd; - - for (;;) { - /* Terminate on semaphore */ - if (uv_sem_trywait(&s->close_sem) == 0) - break; - - /* Watch fd using select(2) */ - memset(s->sread, 0, s->sread_sz); - memset(s->swrite, 0, s->swrite_sz); - - if (uv__io_active(&stream->io_watcher, POLLIN)) - FD_SET(fd, s->sread); - if (uv__io_active(&stream->io_watcher, POLLOUT)) - FD_SET(fd, s->swrite); - FD_SET(s->int_fd, s->sread); - - /* Wait indefinitely for fd events */ - r = select(max_fd + 1, s->sread, s->swrite, NULL, NULL); - if (r == -1) { - if (errno == EINTR) - continue; - - /* XXX: Possible?! */ - abort(); - } - - /* Ignore timeouts */ - if (r == 0) - continue; - - /* Empty socketpair's buffer in case of interruption */ - if (FD_ISSET(s->int_fd, s->sread)) - for (;;) { - r = read(s->int_fd, buf, sizeof(buf)); - - if (r == sizeof(buf)) - continue; - - if (r != -1) - break; - - if (errno == EAGAIN || errno == EWOULDBLOCK) - break; - - if (errno == EINTR) - continue; - - abort(); - } - - /* Handle events */ - events = 0; - if (FD_ISSET(fd, s->sread)) - events |= POLLIN; - if (FD_ISSET(fd, s->swrite)) - events |= POLLOUT; - - assert(events != 0 || FD_ISSET(s->int_fd, s->sread)); - if (events != 0) { - ACCESS_ONCE(int, s->events) = events; - - uv_async_send(&s->async); - uv_sem_wait(&s->async_sem); - - /* Should be processed at this stage */ - assert((s->events == 0) || (stream->flags & UV_HANDLE_CLOSING)); - } - } -} - - -static void uv__stream_osx_select_cb(uv_async_t* handle) { - uv__stream_select_t* s; - uv_stream_t* stream; - int events; - - s = container_of(handle, uv__stream_select_t, async); - stream = s->stream; - - /* Get and reset stream's events */ - events = s->events; - ACCESS_ONCE(int, s->events) = 0; - - assert(events != 0); - assert(events == (events & (POLLIN | POLLOUT))); - - /* Invoke callback on event-loop */ - if ((events & POLLIN) && uv__io_active(&stream->io_watcher, POLLIN)) - uv__stream_io(stream->loop, &stream->io_watcher, POLLIN); - - if ((events & POLLOUT) && uv__io_active(&stream->io_watcher, POLLOUT)) - uv__stream_io(stream->loop, &stream->io_watcher, POLLOUT); - - if (stream->flags & UV_HANDLE_CLOSING) - return; - - /* NOTE: It is important to do it here, otherwise `select()` might be called - * before the actual `uv__read()`, leading to the blocking syscall - */ - uv_sem_post(&s->async_sem); -} - - -static void uv__stream_osx_cb_close(uv_handle_t* async) { - uv__stream_select_t* s; - - s = container_of(async, uv__stream_select_t, async); - uv__free(s); -} - - -int uv__stream_try_select(uv_stream_t* stream, int* fd) { - /* - * kqueue doesn't work with some files from /dev mount on osx. - * select(2) in separate thread for those fds - */ - - struct kevent filter[1]; - struct kevent events[1]; - struct timespec timeout; - uv__stream_select_t* s; - int fds[2]; - int err; - int ret; - int kq; - int old_fd; - int max_fd; - size_t sread_sz; - size_t swrite_sz; - - kq = kqueue(); - if (kq == -1) { - perror("(libuv) kqueue()"); - return UV__ERR(errno); - } - - EV_SET(&filter[0], *fd, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, 0); - - /* Use small timeout, because we only want to capture EINVALs */ - timeout.tv_sec = 0; - timeout.tv_nsec = 1; - - do - ret = kevent(kq, filter, 1, events, 1, &timeout); - while (ret == -1 && errno == EINTR); - - uv__close(kq); - - if (ret == -1) - return UV__ERR(errno); - - if (ret == 0 || (events[0].flags & EV_ERROR) == 0 || events[0].data != EINVAL) - return 0; - - /* At this point we definitely know that this fd won't work with kqueue */ - - /* - * Create fds for io watcher and to interrupt the select() loop. - * NOTE: do it ahead of malloc below to allocate enough space for fd_sets - */ - if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds)) - return UV__ERR(errno); - - max_fd = *fd; - if (fds[1] > max_fd) - max_fd = fds[1]; - - sread_sz = ROUND_UP(max_fd + 1, sizeof(uint32_t) * NBBY) / NBBY; - swrite_sz = sread_sz; - - s = uv__malloc(sizeof(*s) + sread_sz + swrite_sz); - if (s == NULL) { - err = UV_ENOMEM; - goto failed_malloc; - } - - s->events = 0; - s->fd = *fd; - s->sread = (fd_set*) ((char*) s + sizeof(*s)); - s->sread_sz = sread_sz; - s->swrite = (fd_set*) ((char*) s->sread + sread_sz); - s->swrite_sz = swrite_sz; - - err = uv_async_init(stream->loop, &s->async, uv__stream_osx_select_cb); - if (err) - goto failed_async_init; - - s->async.flags |= UV_HANDLE_INTERNAL; - uv__handle_unref(&s->async); - - err = uv_sem_init(&s->close_sem, 0); - if (err != 0) - goto failed_close_sem_init; - - err = uv_sem_init(&s->async_sem, 0); - if (err != 0) - goto failed_async_sem_init; - - s->fake_fd = fds[0]; - s->int_fd = fds[1]; - - old_fd = *fd; - s->stream = stream; - stream->select = s; - *fd = s->fake_fd; - - err = uv_thread_create(&s->thread, uv__stream_osx_select, stream); - if (err != 0) - goto failed_thread_create; - - return 0; - -failed_thread_create: - s->stream = NULL; - stream->select = NULL; - *fd = old_fd; - - uv_sem_destroy(&s->async_sem); - -failed_async_sem_init: - uv_sem_destroy(&s->close_sem); - -failed_close_sem_init: - uv__close(fds[0]); - uv__close(fds[1]); - uv_close((uv_handle_t*) &s->async, uv__stream_osx_cb_close); - return err; - -failed_async_init: - uv__free(s); - -failed_malloc: - uv__close(fds[0]); - uv__close(fds[1]); - - return err; -} -#endif /* defined(__APPLE__) */ - - -int uv__stream_open(uv_stream_t* stream, int fd, int flags) { -#if defined(__APPLE__) - int enable; -#endif - - if (!(stream->io_watcher.fd == -1 || stream->io_watcher.fd == fd)) - return UV_EBUSY; - - assert(fd >= 0); - stream->flags |= flags; - - if (stream->type == UV_TCP) { - if ((stream->flags & UV_HANDLE_TCP_NODELAY) && uv__tcp_nodelay(fd, 1)) - return UV__ERR(errno); - - /* TODO Use delay the user passed in. */ - if ((stream->flags & UV_HANDLE_TCP_KEEPALIVE) && - uv__tcp_keepalive(fd, 1, 60)) { - return UV__ERR(errno); - } - } - -#if defined(__APPLE__) - enable = 1; - if (setsockopt(fd, SOL_SOCKET, SO_OOBINLINE, &enable, sizeof(enable)) && - errno != ENOTSOCK && - errno != EINVAL) { - return UV__ERR(errno); - } -#endif - - stream->io_watcher.fd = fd; - - return 0; -} - - -void uv__stream_flush_write_queue(uv_stream_t* stream, int error) { - uv_write_t* req; - QUEUE* q; - while (!QUEUE_EMPTY(&stream->write_queue)) { - q = QUEUE_HEAD(&stream->write_queue); - QUEUE_REMOVE(q); - - req = QUEUE_DATA(q, uv_write_t, queue); - req->error = error; - - QUEUE_INSERT_TAIL(&stream->write_completed_queue, &req->queue); - } -} - - -void uv__stream_destroy(uv_stream_t* stream) { - assert(!uv__io_active(&stream->io_watcher, POLLIN | POLLOUT)); - assert(stream->flags & UV_HANDLE_CLOSED); - - if (stream->connect_req) { - uv__req_unregister(stream->loop, stream->connect_req); - stream->connect_req->cb(stream->connect_req, UV_ECANCELED); - stream->connect_req = NULL; - } - - uv__stream_flush_write_queue(stream, UV_ECANCELED); - uv__write_callbacks(stream); - - if (stream->shutdown_req) { - /* The ECANCELED error code is a lie, the shutdown(2) syscall is a - * fait accompli at this point. Maybe we should revisit this in v0.11. - * A possible reason for leaving it unchanged is that it informs the - * callee that the handle has been destroyed. - */ - uv__req_unregister(stream->loop, stream->shutdown_req); - stream->shutdown_req->cb(stream->shutdown_req, UV_ECANCELED); - stream->shutdown_req = NULL; - } - - assert(stream->write_queue_size == 0); -} - - -/* Implements a best effort approach to mitigating accept() EMFILE errors. - * We have a spare file descriptor stashed away that we close to get below - * the EMFILE limit. Next, we accept all pending connections and close them - * immediately to signal the clients that we're overloaded - and we are, but - * we still keep on trucking. - * - * There is one caveat: it's not reliable in a multi-threaded environment. - * The file descriptor limit is per process. Our party trick fails if another - * thread opens a file or creates a socket in the time window between us - * calling close() and accept(). - */ -static int uv__emfile_trick(uv_loop_t* loop, int accept_fd) { - int err; - int emfile_fd; - - if (loop->emfile_fd == -1) - return UV_EMFILE; - - uv__close(loop->emfile_fd); - loop->emfile_fd = -1; - - do { - err = uv__accept(accept_fd); - if (err >= 0) - uv__close(err); - } while (err >= 0 || err == UV_EINTR); - - emfile_fd = uv__open_cloexec("/", O_RDONLY); - if (emfile_fd >= 0) - loop->emfile_fd = emfile_fd; - - return err; -} - - -#if defined(UV_HAVE_KQUEUE) -# define UV_DEC_BACKLOG(w) w->rcount--; -#else -# define UV_DEC_BACKLOG(w) /* no-op */ -#endif /* defined(UV_HAVE_KQUEUE) */ - - -void uv__server_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { - uv_stream_t* stream; - int err; - - stream = container_of(w, uv_stream_t, io_watcher); - assert(events & POLLIN); - assert(stream->accepted_fd == -1); - assert(!(stream->flags & UV_HANDLE_CLOSING)); - - uv__io_start(stream->loop, &stream->io_watcher, POLLIN); - - /* connection_cb can close the server socket while we're - * in the loop so check it on each iteration. - */ - while (uv__stream_fd(stream) != -1) { - assert(stream->accepted_fd == -1); - -#if defined(UV_HAVE_KQUEUE) - if (w->rcount <= 0) - return; -#endif /* defined(UV_HAVE_KQUEUE) */ - - err = uv__accept(uv__stream_fd(stream)); - if (err < 0) { - if (err == UV_EAGAIN || err == UV__ERR(EWOULDBLOCK)) - return; /* Not an error. */ - - if (err == UV_ECONNABORTED) - continue; /* Ignore. Nothing we can do about that. */ - - if (err == UV_EMFILE || err == UV_ENFILE) { - err = uv__emfile_trick(loop, uv__stream_fd(stream)); - if (err == UV_EAGAIN || err == UV__ERR(EWOULDBLOCK)) - break; - } - - stream->connection_cb(stream, err); - continue; - } - - UV_DEC_BACKLOG(w) - stream->accepted_fd = err; - stream->connection_cb(stream, 0); - - if (stream->accepted_fd != -1) { - /* The user hasn't yet accepted called uv_accept() */ - uv__io_stop(loop, &stream->io_watcher, POLLIN); - return; - } - - if (stream->type == UV_TCP && - (stream->flags & UV_HANDLE_TCP_SINGLE_ACCEPT)) { - /* Give other processes a chance to accept connections. */ - struct timespec timeout = { 0, 1 }; - nanosleep(&timeout, NULL); - } - } -} - - -#undef UV_DEC_BACKLOG - - -int uv_accept(uv_stream_t* server, uv_stream_t* client) { - int err; - - assert(server->loop == client->loop); - - if (server->accepted_fd == -1) - return UV_EAGAIN; - - switch (client->type) { - case UV_NAMED_PIPE: - case UV_TCP: - err = uv__stream_open(client, - server->accepted_fd, - UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); - if (err) { - /* TODO handle error */ - uv__close(server->accepted_fd); - goto done; - } - break; - - case UV_UDP: - err = uv_udp_open((uv_udp_t*) client, server->accepted_fd); - if (err) { - uv__close(server->accepted_fd); - goto done; - } - break; - - default: - return UV_EINVAL; - } - - client->flags |= UV_HANDLE_BOUND; - -done: - /* Process queued fds */ - if (server->queued_fds != NULL) { - uv__stream_queued_fds_t* queued_fds; - - queued_fds = server->queued_fds; - - /* Read first */ - server->accepted_fd = queued_fds->fds[0]; - - /* All read, free */ - assert(queued_fds->offset > 0); - if (--queued_fds->offset == 0) { - uv__free(queued_fds); - server->queued_fds = NULL; - } else { - /* Shift rest */ - memmove(queued_fds->fds, - queued_fds->fds + 1, - queued_fds->offset * sizeof(*queued_fds->fds)); - } - } else { - server->accepted_fd = -1; - if (err == 0) - uv__io_start(server->loop, &server->io_watcher, POLLIN); - } - return err; -} - - -int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb) { - int err; - - switch (stream->type) { - case UV_TCP: - err = uv_tcp_listen((uv_tcp_t*)stream, backlog, cb); - break; - - case UV_NAMED_PIPE: - err = uv_pipe_listen((uv_pipe_t*)stream, backlog, cb); - break; - - default: - err = UV_EINVAL; - } - - if (err == 0) - uv__handle_start(stream); - - return err; -} - - -static void uv__drain(uv_stream_t* stream) { - uv_shutdown_t* req; - int err; - - assert(QUEUE_EMPTY(&stream->write_queue)); - uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT); - uv__stream_osx_interrupt_select(stream); - - /* Shutdown? */ - if ((stream->flags & UV_HANDLE_SHUTTING) && - !(stream->flags & UV_HANDLE_CLOSING) && - !(stream->flags & UV_HANDLE_SHUT)) { - assert(stream->shutdown_req); - - req = stream->shutdown_req; - stream->shutdown_req = NULL; - stream->flags &= ~UV_HANDLE_SHUTTING; - uv__req_unregister(stream->loop, req); - - err = 0; - if (shutdown(uv__stream_fd(stream), SHUT_WR)) - err = UV__ERR(errno); - - if (err == 0) - stream->flags |= UV_HANDLE_SHUT; - - if (req->cb != NULL) - req->cb(req, err); - } -} - - -static ssize_t uv__writev(int fd, struct iovec* vec, size_t n) { - if (n == 1) - return write(fd, vec->iov_base, vec->iov_len); - else - return writev(fd, vec, n); -} - - -static size_t uv__write_req_size(uv_write_t* req) { - size_t size; - - assert(req->bufs != NULL); - size = uv__count_bufs(req->bufs + req->write_index, - req->nbufs - req->write_index); - assert(req->handle->write_queue_size >= size); - - return size; -} - - -/* Returns 1 if all write request data has been written, or 0 if there is still - * more data to write. - * - * Note: the return value only says something about the *current* request. - * There may still be other write requests sitting in the queue. - */ -static int uv__write_req_update(uv_stream_t* stream, - uv_write_t* req, - size_t n) { - uv_buf_t* buf; - size_t len; - - assert(n <= stream->write_queue_size); - stream->write_queue_size -= n; - - buf = req->bufs + req->write_index; - - do { - len = n < buf->len ? n : buf->len; - buf->base += len; - buf->len -= len; - buf += (buf->len == 0); /* Advance to next buffer if this one is empty. */ - n -= len; - } while (n > 0); - - req->write_index = buf - req->bufs; - - return req->write_index == req->nbufs; -} - - -static void uv__write_req_finish(uv_write_t* req) { - uv_stream_t* stream = req->handle; - - /* Pop the req off tcp->write_queue. */ - QUEUE_REMOVE(&req->queue); - - /* Only free when there was no error. On error, we touch up write_queue_size - * right before making the callback. The reason we don't do that right away - * is that a write_queue_size > 0 is our only way to signal to the user that - * they should stop writing - which they should if we got an error. Something - * to revisit in future revisions of the libuv API. - */ - if (req->error == 0) { - if (req->bufs != req->bufsml) - uv__free(req->bufs); - req->bufs = NULL; - } - - /* Add it to the write_completed_queue where it will have its - * callback called in the near future. - */ - QUEUE_INSERT_TAIL(&stream->write_completed_queue, &req->queue); - uv__io_feed(stream->loop, &stream->io_watcher); -} - - -static int uv__handle_fd(uv_handle_t* handle) { - switch (handle->type) { - case UV_NAMED_PIPE: - case UV_TCP: - return ((uv_stream_t*) handle)->io_watcher.fd; - - case UV_UDP: - return ((uv_udp_t*) handle)->io_watcher.fd; - - default: - return -1; - } -} - -static int uv__try_write(uv_stream_t* stream, - const uv_buf_t bufs[], - unsigned int nbufs, - uv_stream_t* send_handle) { - struct iovec* iov; - int iovmax; - int iovcnt; - ssize_t n; - - /* - * Cast to iovec. We had to have our own uv_buf_t instead of iovec - * because Windows's WSABUF is not an iovec. - */ - iov = (struct iovec*) bufs; - iovcnt = nbufs; - - iovmax = uv__getiovmax(); - - /* Limit iov count to avoid EINVALs from writev() */ - if (iovcnt > iovmax) - iovcnt = iovmax; - - /* - * Now do the actual writev. Note that we've been updating the pointers - * inside the iov each time we write. So there is no need to offset it. - */ - if (send_handle != NULL) { - int fd_to_send; - struct msghdr msg; - struct cmsghdr *cmsg; - union { - char data[64]; - struct cmsghdr alias; - } scratch; - - if (uv__is_closing(send_handle)) - return UV_EBADF; - - fd_to_send = uv__handle_fd((uv_handle_t*) send_handle); - - memset(&scratch, 0, sizeof(scratch)); - - assert(fd_to_send >= 0); - - msg.msg_name = NULL; - msg.msg_namelen = 0; - msg.msg_iov = iov; - msg.msg_iovlen = iovcnt; - msg.msg_flags = 0; - - msg.msg_control = &scratch.alias; - msg.msg_controllen = CMSG_SPACE(sizeof(fd_to_send)); - - cmsg = CMSG_FIRSTHDR(&msg); - cmsg->cmsg_level = SOL_SOCKET; - cmsg->cmsg_type = SCM_RIGHTS; - cmsg->cmsg_len = CMSG_LEN(sizeof(fd_to_send)); - - /* silence aliasing warning */ - { - void* pv = CMSG_DATA(cmsg); - int* pi = pv; - *pi = fd_to_send; - } - - do - n = sendmsg(uv__stream_fd(stream), &msg, 0); - while (n == -1 && RETRY_ON_WRITE_ERROR(errno)); - } else { - do - n = uv__writev(uv__stream_fd(stream), iov, iovcnt); - while (n == -1 && RETRY_ON_WRITE_ERROR(errno)); - } - - if (n >= 0) - return n; - - if (IS_TRANSIENT_WRITE_ERROR(errno, send_handle)) - return UV_EAGAIN; - - return UV__ERR(errno); -} - -static void uv__write(uv_stream_t* stream) { - QUEUE* q; - uv_write_t* req; - ssize_t n; - - assert(uv__stream_fd(stream) >= 0); - - for (;;) { - if (QUEUE_EMPTY(&stream->write_queue)) - return; - - q = QUEUE_HEAD(&stream->write_queue); - req = QUEUE_DATA(q, uv_write_t, queue); - assert(req->handle == stream); - - n = uv__try_write(stream, - &(req->bufs[req->write_index]), - req->nbufs - req->write_index, - req->send_handle); - - /* Ensure the handle isn't sent again in case this is a partial write. */ - if (n >= 0) { - req->send_handle = NULL; - if (uv__write_req_update(stream, req, n)) { - uv__write_req_finish(req); - return; /* TODO(bnoordhuis) Start trying to write the next request. */ - } - } else if (n != UV_EAGAIN) - break; - - /* If this is a blocking stream, try again. */ - if (stream->flags & UV_HANDLE_BLOCKING_WRITES) - continue; - - /* We're not done. */ - uv__io_start(stream->loop, &stream->io_watcher, POLLOUT); - - /* Notify select() thread about state change */ - uv__stream_osx_interrupt_select(stream); - - return; - } - - req->error = n; - // XXX(jwn): this must call uv__stream_flush_write_queue(stream, n) here, since we won't generate any more events - uv__write_req_finish(req); - uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT); - uv__stream_osx_interrupt_select(stream); -} - - -static void uv__write_callbacks(uv_stream_t* stream) { - uv_write_t* req; - QUEUE* q; - QUEUE pq; - - if (QUEUE_EMPTY(&stream->write_completed_queue)) - return; - - QUEUE_MOVE(&stream->write_completed_queue, &pq); - - while (!QUEUE_EMPTY(&pq)) { - /* Pop a req off write_completed_queue. */ - q = QUEUE_HEAD(&pq); - req = QUEUE_DATA(q, uv_write_t, queue); - QUEUE_REMOVE(q); - uv__req_unregister(stream->loop, req); - - if (req->bufs != NULL) { - stream->write_queue_size -= uv__write_req_size(req); - if (req->bufs != req->bufsml) - uv__free(req->bufs); - req->bufs = NULL; - } - - /* NOTE: call callback AFTER freeing the request data. */ - if (req->cb) - req->cb(req, req->error); - } -} - - -uv_handle_type uv__handle_type(int fd) { - struct sockaddr_storage ss; - socklen_t sslen; - socklen_t len; - int type; - - memset(&ss, 0, sizeof(ss)); - sslen = sizeof(ss); - - if (getsockname(fd, (struct sockaddr*)&ss, &sslen)) - return UV_UNKNOWN_HANDLE; - - len = sizeof type; - - if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &type, &len)) - return UV_UNKNOWN_HANDLE; - - if (type == SOCK_STREAM) { -#if defined(_AIX) || defined(__DragonFly__) - /* on AIX/DragonFly the getsockname call returns an empty sa structure - * for sockets of type AF_UNIX. For all other types it will - * return a properly filled in structure. - */ - if (sslen == 0) - return UV_NAMED_PIPE; -#endif - switch (ss.ss_family) { - case AF_UNIX: - return UV_NAMED_PIPE; - case AF_INET: - case AF_INET6: - return UV_TCP; - } - } - - if (type == SOCK_DGRAM && - (ss.ss_family == AF_INET || ss.ss_family == AF_INET6)) - return UV_UDP; - - return UV_UNKNOWN_HANDLE; -} - - -static void uv__stream_eof(uv_stream_t* stream, const uv_buf_t* buf) { - stream->flags |= UV_HANDLE_READ_EOF; - stream->flags &= ~UV_HANDLE_READING; - stream->flags &= ~UV_HANDLE_READABLE; - uv__io_stop(stream->loop, &stream->io_watcher, POLLIN); - uv__handle_stop(stream); - uv__stream_osx_interrupt_select(stream); - stream->read_cb(stream, UV_EOF, buf); -} - - -static int uv__stream_queue_fd(uv_stream_t* stream, int fd) { - uv__stream_queued_fds_t* queued_fds; - unsigned int queue_size; - - queued_fds = stream->queued_fds; - if (queued_fds == NULL) { - queue_size = 8; - queued_fds = uv__malloc((queue_size - 1) * sizeof(*queued_fds->fds) + - sizeof(*queued_fds)); - if (queued_fds == NULL) - return UV_ENOMEM; - queued_fds->size = queue_size; - queued_fds->offset = 0; - stream->queued_fds = queued_fds; - - /* Grow */ - } else if (queued_fds->size == queued_fds->offset) { - queue_size = queued_fds->size + 8; - queued_fds = uv__realloc(queued_fds, - (queue_size - 1) * sizeof(*queued_fds->fds) + - sizeof(*queued_fds)); - - /* - * Allocation failure, report back. - * NOTE: if it is fatal - sockets will be closed in uv__stream_close - */ - if (queued_fds == NULL) - return UV_ENOMEM; - queued_fds->size = queue_size; - stream->queued_fds = queued_fds; - } - - /* Put fd in a queue */ - queued_fds->fds[queued_fds->offset++] = fd; - - return 0; -} - - -#if defined(__PASE__) -/* on IBMi PASE the control message length can not exceed 256. */ -# define UV__CMSG_FD_COUNT 60 -#else -# define UV__CMSG_FD_COUNT 64 -#endif -#define UV__CMSG_FD_SIZE (UV__CMSG_FD_COUNT * sizeof(int)) - - -static int uv__stream_recv_cmsg(uv_stream_t* stream, struct msghdr* msg) { - struct cmsghdr* cmsg; - - for (cmsg = CMSG_FIRSTHDR(msg); cmsg != NULL; cmsg = CMSG_NXTHDR(msg, cmsg)) { - char* start; - char* end; - int err; - void* pv; - int* pi; - unsigned int i; - unsigned int count; - - if (cmsg->cmsg_type != SCM_RIGHTS) { - fprintf(stderr, "ignoring non-SCM_RIGHTS ancillary data: %d\n", - cmsg->cmsg_type); - continue; - } - - /* silence aliasing warning */ - pv = CMSG_DATA(cmsg); - pi = pv; - - /* Count available fds */ - start = (char*) cmsg; - end = (char*) cmsg + cmsg->cmsg_len; - count = 0; - while (start + CMSG_LEN(count * sizeof(*pi)) < end) - count++; - assert(start + CMSG_LEN(count * sizeof(*pi)) == end); - - for (i = 0; i < count; i++) { - /* Already has accepted fd, queue now */ - if (stream->accepted_fd != -1) { - err = uv__stream_queue_fd(stream, pi[i]); - if (err != 0) { - /* Close rest */ - for (; i < count; i++) - uv__close(pi[i]); - return err; - } - } else { - stream->accepted_fd = pi[i]; - } - } - } - - return 0; -} - - -#ifdef __clang__ -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-folding-constant" -# pragma clang diagnostic ignored "-Wvla-extension" -#endif - -static void uv__read(uv_stream_t* stream) { - uv_buf_t buf; - ssize_t nread; - struct msghdr msg; - char cmsg_space[CMSG_SPACE(UV__CMSG_FD_SIZE)]; - int count; - int err; - int is_ipc; - - stream->flags &= ~UV_HANDLE_READ_PARTIAL; - - /* Prevent loop starvation when the data comes in as fast as (or faster than) - * we can read it. XXX Need to rearm fd if we switch to edge-triggered I/O. - */ - count = 32; - - is_ipc = stream->type == UV_NAMED_PIPE && ((uv_pipe_t*) stream)->ipc; - - /* XXX: Maybe instead of having UV_HANDLE_READING we just test if - * tcp->read_cb is NULL or not? - */ - while (stream->read_cb - && (stream->flags & UV_HANDLE_READING) - && (count-- > 0)) { - assert(stream->alloc_cb != NULL); - - buf = uv_buf_init(NULL, 0); - stream->alloc_cb((uv_handle_t*)stream, 64 * 1024, &buf); - if (buf.base == NULL || buf.len == 0) { - /* User indicates it can't or won't handle the read. */ - stream->read_cb(stream, UV_ENOBUFS, &buf); - return; - } - - assert(buf.base != NULL); - assert(uv__stream_fd(stream) >= 0); - - if (!is_ipc) { - do { - nread = read(uv__stream_fd(stream), buf.base, buf.len); - } - while (nread < 0 && errno == EINTR); - } else { - /* ipc uses recvmsg */ - msg.msg_flags = 0; - msg.msg_iov = (struct iovec*) &buf; - msg.msg_iovlen = 1; - msg.msg_name = NULL; - msg.msg_namelen = 0; - /* Set up to receive a descriptor even if one isn't in the message */ - msg.msg_controllen = sizeof(cmsg_space); - msg.msg_control = cmsg_space; - - do { - nread = uv__recvmsg(uv__stream_fd(stream), &msg, 0); - } - while (nread < 0 && errno == EINTR); - } - - if (nread < 0) { - /* Error */ - if (errno == EAGAIN || errno == EWOULDBLOCK) { - /* Wait for the next one. */ - if (stream->flags & UV_HANDLE_READING) { - uv__io_start(stream->loop, &stream->io_watcher, POLLIN); - uv__stream_osx_interrupt_select(stream); - } - stream->read_cb(stream, 0, &buf); -#if defined(__CYGWIN__) || defined(__MSYS__) - } else if (errno == ECONNRESET && stream->type == UV_NAMED_PIPE) { - uv__stream_eof(stream, &buf); - return; -#endif - } else { - /* Error. User should call uv_close(). */ - stream->flags &= ~(UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); - stream->read_cb(stream, UV__ERR(errno), &buf); - if (stream->flags & UV_HANDLE_READING) { - stream->flags &= ~UV_HANDLE_READING; - uv__io_stop(stream->loop, &stream->io_watcher, POLLIN); - uv__handle_stop(stream); - uv__stream_osx_interrupt_select(stream); - } - } - return; - } else if (nread == 0) { - uv__stream_eof(stream, &buf); - return; - } else { - /* Successful read */ - ssize_t buflen = buf.len; - - if (is_ipc) { - err = uv__stream_recv_cmsg(stream, &msg); - if (err != 0) { - stream->read_cb(stream, err, &buf); - return; - } - } - -#if defined(__MVS__) - if (is_ipc && msg.msg_controllen > 0) { - uv_buf_t blankbuf; - int nread; - struct iovec *old; - - blankbuf.base = 0; - blankbuf.len = 0; - old = msg.msg_iov; - msg.msg_iov = (struct iovec*) &blankbuf; - nread = 0; - do { - nread = uv__recvmsg(uv__stream_fd(stream), &msg, 0); - err = uv__stream_recv_cmsg(stream, &msg); - if (err != 0) { - stream->read_cb(stream, err, &buf); - msg.msg_iov = old; - return; - } - } while (nread == 0 && msg.msg_controllen > 0); - msg.msg_iov = old; - } -#endif - stream->read_cb(stream, nread, &buf); - - /* Return if we didn't fill the buffer, there is no more data to read. */ - if (nread < buflen) { - stream->flags |= UV_HANDLE_READ_PARTIAL; - return; - } - } - } -} - - -#ifdef __clang__ -# pragma clang diagnostic pop -#endif - -#undef UV__CMSG_FD_COUNT -#undef UV__CMSG_FD_SIZE - - -int uv_shutdown(uv_shutdown_t* req, uv_stream_t* stream, uv_shutdown_cb cb) { - assert(stream->type == UV_TCP || - stream->type == UV_TTY || - stream->type == UV_NAMED_PIPE); - - if (!(stream->flags & UV_HANDLE_WRITABLE) || - stream->flags & UV_HANDLE_SHUT || - stream->flags & UV_HANDLE_SHUTTING || - uv__is_closing(stream)) { - return UV_ENOTCONN; - } - - assert(uv__stream_fd(stream) >= 0); - - /* Initialize request */ - uv__req_init(stream->loop, req, UV_SHUTDOWN); - req->handle = stream; - req->cb = cb; - stream->shutdown_req = req; - stream->flags |= UV_HANDLE_SHUTTING; - stream->flags &= ~UV_HANDLE_WRITABLE; - - uv__io_start(stream->loop, &stream->io_watcher, POLLOUT); - uv__stream_osx_interrupt_select(stream); - - return 0; -} - - -static void uv__stream_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) { - uv_stream_t* stream; - - stream = container_of(w, uv_stream_t, io_watcher); - - assert(stream->type == UV_TCP || - stream->type == UV_NAMED_PIPE || - stream->type == UV_TTY); - assert(!(stream->flags & UV_HANDLE_CLOSING)); - - if (stream->connect_req) { - uv__stream_connect(stream); - return; - } - - assert(uv__stream_fd(stream) >= 0); - - /* Ignore POLLHUP here. Even if it's set, there may still be data to read. */ - if (events & (POLLIN | POLLERR | POLLHUP)) - uv__read(stream); - - if (uv__stream_fd(stream) == -1) - return; /* read_cb closed stream. */ - - /* Short-circuit iff POLLHUP is set, the user is still interested in read - * events and uv__read() reported a partial read but not EOF. If the EOF - * flag is set, uv__read() called read_cb with err=UV_EOF and we don't - * have to do anything. If the partial read flag is not set, we can't - * report the EOF yet because there is still data to read. - */ - if ((events & POLLHUP) && - (stream->flags & UV_HANDLE_READING) && - (stream->flags & UV_HANDLE_READ_PARTIAL) && - !(stream->flags & UV_HANDLE_READ_EOF)) { - uv_buf_t buf = { NULL, 0 }; - uv__stream_eof(stream, &buf); - } - - if (uv__stream_fd(stream) == -1) - return; /* read_cb closed stream. */ - - if (events & (POLLOUT | POLLERR | POLLHUP)) { - uv__write(stream); - uv__write_callbacks(stream); - - /* Write queue drained. */ - if (QUEUE_EMPTY(&stream->write_queue)) - uv__drain(stream); - } -} - - -/** - * We get called here from directly following a call to connect(2). - * In order to determine if we've errored out or succeeded must call - * getsockopt. - */ -static void uv__stream_connect(uv_stream_t* stream) { - int error; - uv_connect_t* req = stream->connect_req; - socklen_t errorsize = sizeof(int); - - assert(stream->type == UV_TCP || stream->type == UV_NAMED_PIPE); - assert(req); - - if (stream->delayed_error) { - /* To smooth over the differences between unixes errors that - * were reported synchronously on the first connect can be delayed - * until the next tick--which is now. - */ - error = stream->delayed_error; - stream->delayed_error = 0; - } else { - /* Normal situation: we need to get the socket error from the kernel. */ - assert(uv__stream_fd(stream) >= 0); - getsockopt(uv__stream_fd(stream), - SOL_SOCKET, - SO_ERROR, - &error, - &errorsize); - error = UV__ERR(error); - } - - if (error == UV__ERR(EINPROGRESS)) - return; - - stream->connect_req = NULL; - uv__req_unregister(stream->loop, req); - - if (error < 0 || QUEUE_EMPTY(&stream->write_queue)) { - uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT); - } - - if (req->cb) - req->cb(req, error); - - if (uv__stream_fd(stream) == -1) - return; - - if (error < 0) { - uv__stream_flush_write_queue(stream, UV_ECANCELED); - uv__write_callbacks(stream); - } -} - - -static int uv__check_before_write(uv_stream_t* stream, - unsigned int nbufs, - uv_stream_t* send_handle) { - assert(nbufs > 0); - assert((stream->type == UV_TCP || - stream->type == UV_NAMED_PIPE || - stream->type == UV_TTY) && - "uv_write (unix) does not yet support other types of streams"); - - if (uv__stream_fd(stream) < 0) - return UV_EBADF; - - if (!(stream->flags & UV_HANDLE_WRITABLE)) - return UV_EPIPE; - - if (send_handle != NULL) { - if (stream->type != UV_NAMED_PIPE || !((uv_pipe_t*)stream)->ipc) - return UV_EINVAL; - - /* XXX We abuse uv_write2() to send over UDP handles to child processes. - * Don't call uv__stream_fd() on those handles, it's a macro that on OS X - * evaluates to a function that operates on a uv_stream_t with a couple of - * OS X specific fields. On other Unices it does (handle)->io_watcher.fd, - * which works but only by accident. - */ - if (uv__handle_fd((uv_handle_t*) send_handle) < 0) - return UV_EBADF; - -#if defined(__CYGWIN__) || defined(__MSYS__) - /* Cygwin recvmsg always sets msg_controllen to zero, so we cannot send it. - See https://github.com/mirror/newlib-cygwin/blob/86fc4bf0/winsup/cygwin/fhandler_socket.cc#L1736-L1743 */ - return UV_ENOSYS; -#endif - } - - return 0; -} - -int uv_write2(uv_write_t* req, - uv_stream_t* stream, - const uv_buf_t bufs[], - unsigned int nbufs, - uv_stream_t* send_handle, - uv_write_cb cb) { - int empty_queue; - int err; - - err = uv__check_before_write(stream, nbufs, send_handle); - if (err < 0) - return err; - - /* It's legal for write_queue_size > 0 even when the write_queue is empty; - * it means there are error-state requests in the write_completed_queue that - * will touch up write_queue_size later, see also uv__write_req_finish(). - * We could check that write_queue is empty instead but that implies making - * a write() syscall when we know that the handle is in error mode. - */ - empty_queue = (stream->write_queue_size == 0); - - /* Initialize the req */ - uv__req_init(stream->loop, req, UV_WRITE); - req->cb = cb; - req->handle = stream; - req->error = 0; - req->send_handle = send_handle; - QUEUE_INIT(&req->queue); - - req->bufs = req->bufsml; - if (nbufs > ARRAY_SIZE(req->bufsml)) - req->bufs = uv__malloc(nbufs * sizeof(bufs[0])); - - if (req->bufs == NULL) - return UV_ENOMEM; - - memcpy(req->bufs, bufs, nbufs * sizeof(bufs[0])); - req->nbufs = nbufs; - req->write_index = 0; - stream->write_queue_size += uv__count_bufs(bufs, nbufs); - - /* Append the request to write_queue. */ - QUEUE_INSERT_TAIL(&stream->write_queue, &req->queue); - - /* If the queue was empty when this function began, we should attempt to - * do the write immediately. Otherwise start the write_watcher and wait - * for the fd to become writable. - */ - if (stream->connect_req) { - /* Still connecting, do nothing. */ - } - else if (empty_queue) { - uv__write(stream); - } - else { - /* - * blocking streams should never have anything in the queue. - * if this assert fires then somehow the blocking stream isn't being - * sufficiently flushed in uv__write. - */ - assert(!(stream->flags & UV_HANDLE_BLOCKING_WRITES)); - uv__io_start(stream->loop, &stream->io_watcher, POLLOUT); - uv__stream_osx_interrupt_select(stream); - } - - return 0; -} - - -/* The buffers to be written must remain valid until the callback is called. - * This is not required for the uv_buf_t array. - */ -int uv_write(uv_write_t* req, - uv_stream_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - uv_write_cb cb) { - return uv_write2(req, handle, bufs, nbufs, NULL, cb); -} - - -int uv_try_write(uv_stream_t* stream, - const uv_buf_t bufs[], - unsigned int nbufs) { - return uv_try_write2(stream, bufs, nbufs, NULL); -} - - -int uv_try_write2(uv_stream_t* stream, - const uv_buf_t bufs[], - unsigned int nbufs, - uv_stream_t* send_handle) { - int err; - - /* Connecting or already writing some data */ - if (stream->connect_req != NULL || stream->write_queue_size != 0) - return UV_EAGAIN; - - err = uv__check_before_write(stream, nbufs, NULL); - if (err < 0) - return err; - - return uv__try_write(stream, bufs, nbufs, send_handle); -} - - -int uv__read_start(uv_stream_t* stream, - uv_alloc_cb alloc_cb, - uv_read_cb read_cb) { - assert(stream->type == UV_TCP || stream->type == UV_NAMED_PIPE || - stream->type == UV_TTY); - - /* The UV_HANDLE_READING flag is irrelevant of the state of the tcp - it just - * expresses the desired state of the user. - */ - stream->flags |= UV_HANDLE_READING; - - /* TODO: try to do the read inline? */ - /* TODO: keep track of tcp state. If we've gotten a EOF then we should - * not start the IO watcher. - */ - assert(uv__stream_fd(stream) >= 0); - assert(alloc_cb); - - stream->read_cb = read_cb; - stream->alloc_cb = alloc_cb; - - uv__io_start(stream->loop, &stream->io_watcher, POLLIN); - uv__handle_start(stream); - uv__stream_osx_interrupt_select(stream); - - return 0; -} - - -int uv_read_stop(uv_stream_t* stream) { - if (!(stream->flags & UV_HANDLE_READING)) - return 0; - - stream->flags &= ~UV_HANDLE_READING; - uv__io_stop(stream->loop, &stream->io_watcher, POLLIN); - uv__handle_stop(stream); - uv__stream_osx_interrupt_select(stream); - - stream->read_cb = NULL; - stream->alloc_cb = NULL; - return 0; -} - - -int uv_is_readable(const uv_stream_t* stream) { - return !!(stream->flags & UV_HANDLE_READABLE); -} - - -int uv_is_writable(const uv_stream_t* stream) { - return !!(stream->flags & UV_HANDLE_WRITABLE); -} - - -#if defined(__APPLE__) -int uv___stream_fd(const uv_stream_t* handle) { - const uv__stream_select_t* s; - - assert(handle->type == UV_TCP || - handle->type == UV_TTY || - handle->type == UV_NAMED_PIPE); - - s = handle->select; - if (s != NULL) - return s->fd; - - return handle->io_watcher.fd; -} -#endif /* defined(__APPLE__) */ - - -void uv__stream_close(uv_stream_t* handle) { - unsigned int i; - uv__stream_queued_fds_t* queued_fds; - -#if defined(__APPLE__) - /* Terminate select loop first */ - if (handle->select != NULL) { - uv__stream_select_t* s; - - s = handle->select; - - uv_sem_post(&s->close_sem); - uv_sem_post(&s->async_sem); - uv__stream_osx_interrupt_select(handle); - uv_thread_join(&s->thread); - uv_sem_destroy(&s->close_sem); - uv_sem_destroy(&s->async_sem); - uv__close(s->fake_fd); - uv__close(s->int_fd); - uv_close((uv_handle_t*) &s->async, uv__stream_osx_cb_close); - - handle->select = NULL; - } -#endif /* defined(__APPLE__) */ - - uv__io_close(handle->loop, &handle->io_watcher); - uv_read_stop(handle); - uv__handle_stop(handle); - handle->flags &= ~(UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); - - if (handle->io_watcher.fd != -1) { - /* Don't close stdio file descriptors. Nothing good comes from it. */ - if (handle->io_watcher.fd > STDERR_FILENO) - uv__close(handle->io_watcher.fd); - handle->io_watcher.fd = -1; - } - - if (handle->accepted_fd != -1) { - uv__close(handle->accepted_fd); - handle->accepted_fd = -1; - } - - /* Close all queued fds */ - if (handle->queued_fds != NULL) { - queued_fds = handle->queued_fds; - for (i = 0; i < queued_fds->offset; i++) - uv__close(queued_fds->fds[i]); - uv__free(handle->queued_fds); - handle->queued_fds = NULL; - } - - assert(!uv__io_active(&handle->io_watcher, POLLIN | POLLOUT)); -} - - -int uv_stream_set_blocking(uv_stream_t* handle, int blocking) { - /* Don't need to check the file descriptor, uv__nonblock() - * will fail with EBADF if it's not valid. - */ - return uv__nonblock(uv__stream_fd(handle), !blocking); -} diff --git a/libuv/src/unix/sunos.c b/libuv/src/unix/sunos.c deleted file mode 100644 index 2bf297e..0000000 --- a/libuv/src/unix/sunos.c +++ /dev/null @@ -1,878 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include -#include - -#ifndef SUNOS_NO_IFADDRS -# include -#endif -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#define PORT_FIRED 0x69 -#define PORT_UNUSED 0x0 -#define PORT_LOADED 0x99 -#define PORT_DELETED -1 - -#if (!defined(_LP64)) && (_FILE_OFFSET_BITS - 0 == 64) -#define PROCFS_FILE_OFFSET_BITS_HACK 1 -#undef _FILE_OFFSET_BITS -#else -#define PROCFS_FILE_OFFSET_BITS_HACK 0 -#endif - -#include - -#if (PROCFS_FILE_OFFSET_BITS_HACK - 0 == 1) -#define _FILE_OFFSET_BITS 64 -#endif - - -int uv__platform_loop_init(uv_loop_t* loop) { - int err; - int fd; - - loop->fs_fd = -1; - loop->backend_fd = -1; - - fd = port_create(); - if (fd == -1) - return UV__ERR(errno); - - err = uv__cloexec(fd, 1); - if (err) { - uv__close(fd); - return err; - } - loop->backend_fd = fd; - - return 0; -} - - -void uv__platform_loop_delete(uv_loop_t* loop) { - if (loop->fs_fd != -1) { - uv__close(loop->fs_fd); - loop->fs_fd = -1; - } - - if (loop->backend_fd != -1) { - uv__close(loop->backend_fd); - loop->backend_fd = -1; - } -} - - -int uv__io_fork(uv_loop_t* loop) { -#if defined(PORT_SOURCE_FILE) - if (loop->fs_fd != -1) { - /* stop the watcher before we blow away its fileno */ - uv__io_stop(loop, &loop->fs_event_watcher, POLLIN); - } -#endif - uv__platform_loop_delete(loop); - return uv__platform_loop_init(loop); -} - - -void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) { - struct port_event* events; - uintptr_t i; - uintptr_t nfds; - - assert(loop->watchers != NULL); - assert(fd >= 0); - - events = (struct port_event*) loop->watchers[loop->nwatchers]; - nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1]; - if (events == NULL) - return; - - /* Invalidate events with same file descriptor */ - for (i = 0; i < nfds; i++) - if ((int) events[i].portev_object == fd) - events[i].portev_object = -1; -} - - -int uv__io_check_fd(uv_loop_t* loop, int fd) { - if (port_associate(loop->backend_fd, PORT_SOURCE_FD, fd, POLLIN, 0)) - return UV__ERR(errno); - - if (port_dissociate(loop->backend_fd, PORT_SOURCE_FD, fd)) { - perror("(libuv) port_dissociate()"); - abort(); - } - - return 0; -} - - -void uv__io_poll(uv_loop_t* loop, int timeout) { - struct port_event events[1024]; - struct port_event* pe; - struct timespec spec; - QUEUE* q; - uv__io_t* w; - sigset_t* pset; - sigset_t set; - uint64_t base; - uint64_t diff; - uint64_t idle_poll; - unsigned int nfds; - unsigned int i; - int saved_errno; - int have_signals; - int nevents; - int count; - int err; - int fd; - int user_timeout; - int reset_timeout; - - if (loop->nfds == 0) { - assert(QUEUE_EMPTY(&loop->watcher_queue)); - return; - } - - while (!QUEUE_EMPTY(&loop->watcher_queue)) { - q = QUEUE_HEAD(&loop->watcher_queue); - QUEUE_REMOVE(q); - QUEUE_INIT(q); - - w = QUEUE_DATA(q, uv__io_t, watcher_queue); - assert(w->pevents != 0); - - if (port_associate(loop->backend_fd, - PORT_SOURCE_FD, - w->fd, - w->pevents, - 0)) { - perror("(libuv) port_associate()"); - abort(); - } - - w->events = w->pevents; - } - - pset = NULL; - if (loop->flags & UV_LOOP_BLOCK_SIGPROF) { - pset = &set; - sigemptyset(pset); - sigaddset(pset, SIGPROF); - } - - assert(timeout >= -1); - base = loop->time; - count = 48; /* Benchmarks suggest this gives the best throughput. */ - - if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { - reset_timeout = 1; - user_timeout = timeout; - timeout = 0; - } else { - reset_timeout = 0; - } - - for (;;) { - /* Only need to set the provider_entry_time if timeout != 0. The function - * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. - */ - if (timeout != 0) - uv__metrics_set_provider_entry_time(loop); - - if (timeout != -1) { - spec.tv_sec = timeout / 1000; - spec.tv_nsec = (timeout % 1000) * 1000000; - } - - /* Work around a kernel bug where nfds is not updated. */ - events[0].portev_source = 0; - - nfds = 1; - saved_errno = 0; - - if (pset != NULL) - pthread_sigmask(SIG_BLOCK, pset, NULL); - - err = port_getn(loop->backend_fd, - events, - ARRAY_SIZE(events), - &nfds, - timeout == -1 ? NULL : &spec); - - if (pset != NULL) - pthread_sigmask(SIG_UNBLOCK, pset, NULL); - - if (err) { - /* Work around another kernel bug: port_getn() may return events even - * on error. - */ - if (errno == EINTR || errno == ETIME) { - saved_errno = errno; - } else { - perror("(libuv) port_getn()"); - abort(); - } - } - - /* Update loop->time unconditionally. It's tempting to skip the update when - * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the - * operating system didn't reschedule our process while in the syscall. - */ - SAVE_ERRNO(uv__update_time(loop)); - - if (events[0].portev_source == 0) { - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - if (timeout == 0) - return; - - if (timeout == -1) - continue; - - goto update_timeout; - } - - if (nfds == 0) { - assert(timeout != -1); - return; - } - - have_signals = 0; - nevents = 0; - - assert(loop->watchers != NULL); - loop->watchers[loop->nwatchers] = (void*) events; - loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds; - for (i = 0; i < nfds; i++) { - pe = events + i; - fd = pe->portev_object; - - /* Skip invalidated events, see uv__platform_invalidate_fd */ - if (fd == -1) - continue; - - assert(fd >= 0); - assert((unsigned) fd < loop->nwatchers); - - w = loop->watchers[fd]; - - /* File descriptor that we've stopped watching, ignore. */ - if (w == NULL) - continue; - - /* Run signal watchers last. This also affects child process watchers - * because those are implemented in terms of signal watchers. - */ - if (w == &loop->signal_io_watcher) { - have_signals = 1; - } else { - uv__metrics_update_idle_time(loop); - w->cb(loop, w, pe->portev_events); - } - - nevents++; - - if (w != loop->watchers[fd]) - continue; /* Disabled by callback. */ - - /* Events Ports operates in oneshot mode, rearm timer on next run. */ - if (w->pevents != 0 && QUEUE_EMPTY(&w->watcher_queue)) - QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue); - } - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - if (have_signals != 0) { - uv__metrics_update_idle_time(loop); - loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); - } - - loop->watchers[loop->nwatchers] = NULL; - loop->watchers[loop->nwatchers + 1] = NULL; - - if (have_signals != 0) - return; /* Event loop should cycle now so don't poll again. */ - - if (nevents != 0) { - if (nfds == ARRAY_SIZE(events) && --count != 0) { - /* Poll for more events but don't block this time. */ - timeout = 0; - continue; - } - return; - } - - if (saved_errno == ETIME) { - assert(timeout != -1); - return; - } - - if (timeout == 0) - return; - - if (timeout == -1) - continue; - -update_timeout: - assert(timeout > 0); - - diff = loop->time - base; - if (diff >= (uint64_t) timeout) - return; - - timeout -= diff; - } -} - - -uint64_t uv__hrtime(uv_clocktype_t type) { - return gethrtime(); -} - - -/* - * We could use a static buffer for the path manipulations that we need outside - * of the function, but this function could be called by multiple consumers and - * we don't want to potentially create a race condition in the use of snprintf. - */ -int uv_exepath(char* buffer, size_t* size) { - ssize_t res; - char buf[128]; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - snprintf(buf, sizeof(buf), "/proc/%lu/path/a.out", (unsigned long) getpid()); - - res = *size - 1; - if (res > 0) - res = readlink(buf, buffer, res); - - if (res == -1) - return UV__ERR(errno); - - buffer[res] = '\0'; - *size = res; - return 0; -} - - -uint64_t uv_get_free_memory(void) { - return (uint64_t) sysconf(_SC_PAGESIZE) * sysconf(_SC_AVPHYS_PAGES); -} - - -uint64_t uv_get_total_memory(void) { - return (uint64_t) sysconf(_SC_PAGESIZE) * sysconf(_SC_PHYS_PAGES); -} - - -uint64_t uv_get_constrained_memory(void) { - return 0; /* Memory constraints are unknown. */ -} - - -void uv_loadavg(double avg[3]) { - (void) getloadavg(avg, 3); -} - - -#if defined(PORT_SOURCE_FILE) - -static int uv__fs_event_rearm(uv_fs_event_t *handle) { - if (handle->fd == -1) - return UV_EBADF; - - if (port_associate(handle->loop->fs_fd, - PORT_SOURCE_FILE, - (uintptr_t) &handle->fo, - FILE_ATTRIB | FILE_MODIFIED, - handle) == -1) { - return UV__ERR(errno); - } - handle->fd = PORT_LOADED; - - return 0; -} - - -static void uv__fs_event_read(uv_loop_t* loop, - uv__io_t* w, - unsigned int revents) { - uv_fs_event_t *handle = NULL; - timespec_t timeout; - port_event_t pe; - int events; - int r; - - (void) w; - (void) revents; - - do { - uint_t n = 1; - - /* - * Note that our use of port_getn() here (and not port_get()) is deliberate: - * there is a bug in event ports (Sun bug 6456558) whereby a zeroed timeout - * causes port_get() to return success instead of ETIME when there aren't - * actually any events (!); by using port_getn() in lieu of port_get(), - * we can at least workaround the bug by checking for zero returned events - * and treating it as we would ETIME. - */ - do { - memset(&timeout, 0, sizeof timeout); - r = port_getn(loop->fs_fd, &pe, 1, &n, &timeout); - } - while (r == -1 && errno == EINTR); - - if ((r == -1 && errno == ETIME) || n == 0) - break; - - handle = (uv_fs_event_t*) pe.portev_user; - assert((r == 0) && "unexpected port_get() error"); - - events = 0; - if (pe.portev_events & (FILE_ATTRIB | FILE_MODIFIED)) - events |= UV_CHANGE; - if (pe.portev_events & ~(FILE_ATTRIB | FILE_MODIFIED)) - events |= UV_RENAME; - assert(events != 0); - handle->fd = PORT_FIRED; - handle->cb(handle, NULL, events, 0); - - if (handle->fd != PORT_DELETED) { - r = uv__fs_event_rearm(handle); - if (r != 0) - handle->cb(handle, NULL, 0, r); - } - } - while (handle->fd != PORT_DELETED); -} - - -int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { - uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT); - return 0; -} - - -int uv_fs_event_start(uv_fs_event_t* handle, - uv_fs_event_cb cb, - const char* path, - unsigned int flags) { - int portfd; - int first_run; - int err; - - if (uv__is_active(handle)) - return UV_EINVAL; - - first_run = 0; - if (handle->loop->fs_fd == -1) { - portfd = port_create(); - if (portfd == -1) - return UV__ERR(errno); - handle->loop->fs_fd = portfd; - first_run = 1; - } - - uv__handle_start(handle); - handle->path = uv__strdup(path); - handle->fd = PORT_UNUSED; - handle->cb = cb; - - memset(&handle->fo, 0, sizeof handle->fo); - handle->fo.fo_name = handle->path; - err = uv__fs_event_rearm(handle); - if (err != 0) { - uv_fs_event_stop(handle); - return err; - } - - if (first_run) { - uv__io_init(&handle->loop->fs_event_watcher, uv__fs_event_read, portfd); - uv__io_start(handle->loop, &handle->loop->fs_event_watcher, POLLIN); - } - - return 0; -} - - -int uv_fs_event_stop(uv_fs_event_t* handle) { - if (!uv__is_active(handle)) - return 0; - - if (handle->fd == PORT_FIRED || handle->fd == PORT_LOADED) { - port_dissociate(handle->loop->fs_fd, - PORT_SOURCE_FILE, - (uintptr_t) &handle->fo); - } - - handle->fd = PORT_DELETED; - uv__free(handle->path); - handle->path = NULL; - handle->fo.fo_name = NULL; - uv__handle_stop(handle); - - return 0; -} - -void uv__fs_event_close(uv_fs_event_t* handle) { - uv_fs_event_stop(handle); -} - -#else /* !defined(PORT_SOURCE_FILE) */ - -int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { - return UV_ENOSYS; -} - - -int uv_fs_event_start(uv_fs_event_t* handle, - uv_fs_event_cb cb, - const char* filename, - unsigned int flags) { - return UV_ENOSYS; -} - - -int uv_fs_event_stop(uv_fs_event_t* handle) { - return UV_ENOSYS; -} - - -void uv__fs_event_close(uv_fs_event_t* handle) { - UNREACHABLE(); -} - -#endif /* defined(PORT_SOURCE_FILE) */ - - -int uv_resident_set_memory(size_t* rss) { - psinfo_t psinfo; - int err; - int fd; - - fd = open("/proc/self/psinfo", O_RDONLY); - if (fd == -1) - return UV__ERR(errno); - - /* FIXME(bnoordhuis) Handle EINTR. */ - err = UV_EINVAL; - if (read(fd, &psinfo, sizeof(psinfo)) == sizeof(psinfo)) { - *rss = (size_t)psinfo.pr_rssize * 1024; - err = 0; - } - uv__close(fd); - - return err; -} - - -int uv_uptime(double* uptime) { - kstat_ctl_t *kc; - kstat_t *ksp; - kstat_named_t *knp; - - long hz = sysconf(_SC_CLK_TCK); - - kc = kstat_open(); - if (kc == NULL) - return UV_EPERM; - - ksp = kstat_lookup(kc, (char*) "unix", 0, (char*) "system_misc"); - if (kstat_read(kc, ksp, NULL) == -1) { - *uptime = -1; - } else { - knp = (kstat_named_t*) kstat_data_lookup(ksp, (char*) "clk_intr"); - *uptime = knp->value.ul / hz; - } - kstat_close(kc); - - return 0; -} - - -int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { - int lookup_instance; - kstat_ctl_t *kc; - kstat_t *ksp; - kstat_named_t *knp; - uv_cpu_info_t* cpu_info; - - kc = kstat_open(); - if (kc == NULL) - return UV_EPERM; - - /* Get count of cpus */ - lookup_instance = 0; - while ((ksp = kstat_lookup(kc, (char*) "cpu_info", lookup_instance, NULL))) { - lookup_instance++; - } - - *cpu_infos = uv__malloc(lookup_instance * sizeof(**cpu_infos)); - if (!(*cpu_infos)) { - kstat_close(kc); - return UV_ENOMEM; - } - - *count = lookup_instance; - - cpu_info = *cpu_infos; - lookup_instance = 0; - while ((ksp = kstat_lookup(kc, (char*) "cpu_info", lookup_instance, NULL))) { - if (kstat_read(kc, ksp, NULL) == -1) { - cpu_info->speed = 0; - cpu_info->model = NULL; - } else { - knp = kstat_data_lookup(ksp, (char*) "clock_MHz"); - assert(knp->data_type == KSTAT_DATA_INT32 || - knp->data_type == KSTAT_DATA_INT64); - cpu_info->speed = (knp->data_type == KSTAT_DATA_INT32) ? knp->value.i32 - : knp->value.i64; - - knp = kstat_data_lookup(ksp, (char*) "brand"); - assert(knp->data_type == KSTAT_DATA_STRING); - cpu_info->model = uv__strdup(KSTAT_NAMED_STR_PTR(knp)); - } - - lookup_instance++; - cpu_info++; - } - - cpu_info = *cpu_infos; - lookup_instance = 0; - for (;;) { - ksp = kstat_lookup(kc, (char*) "cpu", lookup_instance, (char*) "sys"); - - if (ksp == NULL) - break; - - if (kstat_read(kc, ksp, NULL) == -1) { - cpu_info->cpu_times.user = 0; - cpu_info->cpu_times.nice = 0; - cpu_info->cpu_times.sys = 0; - cpu_info->cpu_times.idle = 0; - cpu_info->cpu_times.irq = 0; - } else { - knp = kstat_data_lookup(ksp, (char*) "cpu_ticks_user"); - assert(knp->data_type == KSTAT_DATA_UINT64); - cpu_info->cpu_times.user = knp->value.ui64; - - knp = kstat_data_lookup(ksp, (char*) "cpu_ticks_kernel"); - assert(knp->data_type == KSTAT_DATA_UINT64); - cpu_info->cpu_times.sys = knp->value.ui64; - - knp = kstat_data_lookup(ksp, (char*) "cpu_ticks_idle"); - assert(knp->data_type == KSTAT_DATA_UINT64); - cpu_info->cpu_times.idle = knp->value.ui64; - - knp = kstat_data_lookup(ksp, (char*) "intr"); - assert(knp->data_type == KSTAT_DATA_UINT64); - cpu_info->cpu_times.irq = knp->value.ui64; - cpu_info->cpu_times.nice = 0; - } - - lookup_instance++; - cpu_info++; - } - - kstat_close(kc); - - return 0; -} - - -#ifdef SUNOS_NO_IFADDRS -int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { - *count = 0; - *addresses = NULL; - return UV_ENOSYS; -} -#else /* SUNOS_NO_IFADDRS */ -/* - * Inspired By: - * https://blogs.oracle.com/paulie/entry/retrieving_mac_address_in_solaris - * http://www.pauliesworld.org/project/getmac.c - */ -static int uv__set_phys_addr(uv_interface_address_t* address, - struct ifaddrs* ent) { - - struct sockaddr_dl* sa_addr; - int sockfd; - size_t i; - struct arpreq arpreq; - - /* This appears to only work as root */ - sa_addr = (struct sockaddr_dl*)(ent->ifa_addr); - memcpy(address->phys_addr, LLADDR(sa_addr), sizeof(address->phys_addr)); - for (i = 0; i < sizeof(address->phys_addr); i++) { - /* Check that all bytes of phys_addr are zero. */ - if (address->phys_addr[i] != 0) - return 0; - } - memset(&arpreq, 0, sizeof(arpreq)); - if (address->address.address4.sin_family == AF_INET) { - struct sockaddr_in* sin = ((struct sockaddr_in*)&arpreq.arp_pa); - sin->sin_addr.s_addr = address->address.address4.sin_addr.s_addr; - } else if (address->address.address4.sin_family == AF_INET6) { - struct sockaddr_in6* sin = ((struct sockaddr_in6*)&arpreq.arp_pa); - memcpy(sin->sin6_addr.s6_addr, - address->address.address6.sin6_addr.s6_addr, - sizeof(address->address.address6.sin6_addr.s6_addr)); - } else { - return 0; - } - - sockfd = socket(AF_INET, SOCK_DGRAM, 0); - if (sockfd < 0) - return UV__ERR(errno); - - if (ioctl(sockfd, SIOCGARP, (char*)&arpreq) == -1) { - uv__close(sockfd); - return UV__ERR(errno); - } - memcpy(address->phys_addr, arpreq.arp_ha.sa_data, sizeof(address->phys_addr)); - uv__close(sockfd); - return 0; -} - - -static int uv__ifaddr_exclude(struct ifaddrs *ent) { - if (!((ent->ifa_flags & IFF_UP) && (ent->ifa_flags & IFF_RUNNING))) - return 1; - if (ent->ifa_addr == NULL) - return 1; - if (ent->ifa_addr->sa_family != AF_INET && - ent->ifa_addr->sa_family != AF_INET6) - return 1; - return 0; -} - -int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { - uv_interface_address_t* address; - struct ifaddrs* addrs; - struct ifaddrs* ent; - - *count = 0; - *addresses = NULL; - - if (getifaddrs(&addrs)) - return UV__ERR(errno); - - /* Count the number of interfaces */ - for (ent = addrs; ent != NULL; ent = ent->ifa_next) { - if (uv__ifaddr_exclude(ent)) - continue; - (*count)++; - } - - if (*count == 0) { - freeifaddrs(addrs); - return 0; - } - - *addresses = uv__malloc(*count * sizeof(**addresses)); - if (!(*addresses)) { - freeifaddrs(addrs); - return UV_ENOMEM; - } - - address = *addresses; - - for (ent = addrs; ent != NULL; ent = ent->ifa_next) { - if (uv__ifaddr_exclude(ent)) - continue; - - address->name = uv__strdup(ent->ifa_name); - - if (ent->ifa_addr->sa_family == AF_INET6) { - address->address.address6 = *((struct sockaddr_in6*) ent->ifa_addr); - } else { - address->address.address4 = *((struct sockaddr_in*) ent->ifa_addr); - } - - if (ent->ifa_netmask->sa_family == AF_INET6) { - address->netmask.netmask6 = *((struct sockaddr_in6*) ent->ifa_netmask); - } else { - address->netmask.netmask4 = *((struct sockaddr_in*) ent->ifa_netmask); - } - - address->is_internal = !!((ent->ifa_flags & IFF_PRIVATE) || - (ent->ifa_flags & IFF_LOOPBACK)); - - uv__set_phys_addr(address, ent); - address++; - } - - freeifaddrs(addrs); - - return 0; -} -#endif /* SUNOS_NO_IFADDRS */ - -void uv_free_interface_addresses(uv_interface_address_t* addresses, - int count) { - int i; - - for (i = 0; i < count; i++) { - uv__free(addresses[i].name); - } - - uv__free(addresses); -} - - -#if !defined(_POSIX_VERSION) || _POSIX_VERSION < 200809L -size_t strnlen(const char* s, size_t maxlen) { - const char* end; - end = memchr(s, '\0', maxlen); - if (end == NULL) - return maxlen; - return end - s; -} -#endif diff --git a/libuv/src/unix/sysinfo-loadavg.c b/libuv/src/unix/sysinfo-loadavg.c deleted file mode 100644 index ebad0e8..0000000 --- a/libuv/src/unix/sysinfo-loadavg.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include - -void uv_loadavg(double avg[3]) { - struct sysinfo info; - - if (sysinfo(&info) < 0) return; - - avg[0] = (double) info.loads[0] / 65536.0; - avg[1] = (double) info.loads[1] / 65536.0; - avg[2] = (double) info.loads[2] / 65536.0; -} diff --git a/libuv/src/unix/sysinfo-memory.c b/libuv/src/unix/sysinfo-memory.c deleted file mode 100644 index 23b4fc6..0000000 --- a/libuv/src/unix/sysinfo-memory.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include - -uint64_t uv_get_free_memory(void) { - struct sysinfo info; - - if (sysinfo(&info) == 0) - return (uint64_t) info.freeram * info.mem_unit; - return 0; -} - -uint64_t uv_get_total_memory(void) { - struct sysinfo info; - - if (sysinfo(&info) == 0) - return (uint64_t) info.totalram * info.mem_unit; - return 0; -} diff --git a/libuv/src/unix/tcp.c b/libuv/src/unix/tcp.c deleted file mode 100644 index bc0fb66..0000000 --- a/libuv/src/unix/tcp.c +++ /dev/null @@ -1,510 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include - - -static int new_socket(uv_tcp_t* handle, int domain, unsigned long flags) { - struct sockaddr_storage saddr; - socklen_t slen; - int sockfd; - int err; - - err = uv__socket(domain, SOCK_STREAM, 0); - if (err < 0) - return err; - sockfd = err; - - err = uv__stream_open((uv_stream_t*) handle, sockfd, flags); - if (err) { - uv__close(sockfd); - return err; - } - - if (flags & UV_HANDLE_BOUND) { - /* Bind this new socket to an arbitrary port */ - slen = sizeof(saddr); - memset(&saddr, 0, sizeof(saddr)); - if (getsockname(uv__stream_fd(handle), (struct sockaddr*) &saddr, &slen)) { - uv__close(sockfd); - return UV__ERR(errno); - } - - if (bind(uv__stream_fd(handle), (struct sockaddr*) &saddr, slen)) { - uv__close(sockfd); - return UV__ERR(errno); - } - } - - return 0; -} - - -static int maybe_new_socket(uv_tcp_t* handle, int domain, unsigned long flags) { - struct sockaddr_storage saddr; - socklen_t slen; - - if (domain == AF_UNSPEC) { - handle->flags |= flags; - return 0; - } - - if (uv__stream_fd(handle) != -1) { - - if (flags & UV_HANDLE_BOUND) { - - if (handle->flags & UV_HANDLE_BOUND) { - /* It is already bound to a port. */ - handle->flags |= flags; - return 0; - } - - /* Query to see if tcp socket is bound. */ - slen = sizeof(saddr); - memset(&saddr, 0, sizeof(saddr)); - if (getsockname(uv__stream_fd(handle), (struct sockaddr*) &saddr, &slen)) - return UV__ERR(errno); - - if ((saddr.ss_family == AF_INET6 && - ((struct sockaddr_in6*) &saddr)->sin6_port != 0) || - (saddr.ss_family == AF_INET && - ((struct sockaddr_in*) &saddr)->sin_port != 0)) { - /* Handle is already bound to a port. */ - handle->flags |= flags; - return 0; - } - - /* Bind to arbitrary port */ - if (bind(uv__stream_fd(handle), (struct sockaddr*) &saddr, slen)) - return UV__ERR(errno); - } - - handle->flags |= flags; - return 0; - } - - return new_socket(handle, domain, flags); -} - - -int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* tcp, unsigned int flags) { - int domain; - - /* Use the lower 8 bits for the domain */ - domain = flags & 0xFF; - if (domain != AF_INET && domain != AF_INET6 && domain != AF_UNSPEC) - return UV_EINVAL; - - if (flags & ~0xFF) - return UV_EINVAL; - - uv__stream_init(loop, (uv_stream_t*)tcp, UV_TCP); - - /* If anything fails beyond this point we need to remove the handle from - * the handle queue, since it was added by uv__handle_init in uv_stream_init. - */ - - if (domain != AF_UNSPEC) { - int err = maybe_new_socket(tcp, domain, 0); - if (err) { - QUEUE_REMOVE(&tcp->handle_queue); - return err; - } - } - - return 0; -} - - -int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* tcp) { - return uv_tcp_init_ex(loop, tcp, AF_UNSPEC); -} - - -int uv__tcp_bind(uv_tcp_t* tcp, - const struct sockaddr* addr, - unsigned int addrlen, - unsigned int flags) { - int err; - int on; - - /* Cannot set IPv6-only mode on non-IPv6 socket. */ - if ((flags & UV_TCP_IPV6ONLY) && addr->sa_family != AF_INET6) - return UV_EINVAL; - - err = maybe_new_socket(tcp, addr->sa_family, 0); - if (err) - return err; - - on = 1; - if (setsockopt(tcp->io_watcher.fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) - return UV__ERR(errno); - -#ifndef __OpenBSD__ -#ifdef IPV6_V6ONLY - if (addr->sa_family == AF_INET6) { - on = (flags & UV_TCP_IPV6ONLY) != 0; - if (setsockopt(tcp->io_watcher.fd, - IPPROTO_IPV6, - IPV6_V6ONLY, - &on, - sizeof on) == -1) { -#if defined(__MVS__) - if (errno == EOPNOTSUPP) - return UV_EINVAL; -#endif - return UV__ERR(errno); - } - } -#endif -#endif - - errno = 0; - if (bind(tcp->io_watcher.fd, addr, addrlen) && errno != EADDRINUSE) { - if (errno == EAFNOSUPPORT) - /* OSX, other BSDs and SunoS fail with EAFNOSUPPORT when binding a - * socket created with AF_INET to an AF_INET6 address or vice versa. */ - return UV_EINVAL; - return UV__ERR(errno); - } - tcp->delayed_error = UV__ERR(errno); - - tcp->flags |= UV_HANDLE_BOUND; - if (addr->sa_family == AF_INET6) - tcp->flags |= UV_HANDLE_IPV6; - - return 0; -} - - -int uv__tcp_connect(uv_connect_t* req, - uv_tcp_t* handle, - const struct sockaddr* addr, - unsigned int addrlen, - uv_connect_cb cb) { - int err; - int r; - - assert(handle->type == UV_TCP); - - if (handle->connect_req != NULL) - return UV_EALREADY; /* FIXME(bnoordhuis) UV_EINVAL or maybe UV_EBUSY. */ - - if (handle->delayed_error != 0) - goto out; - - err = maybe_new_socket(handle, - addr->sa_family, - UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); - if (err) - return err; - - do { - errno = 0; - r = connect(uv__stream_fd(handle), addr, addrlen); - } while (r == -1 && errno == EINTR); - - /* We not only check the return value, but also check the errno != 0. - * Because in rare cases connect() will return -1 but the errno - * is 0 (for example, on Android 4.3, OnePlus phone A0001_12_150227) - * and actually the tcp three-way handshake is completed. - */ - if (r == -1 && errno != 0) { - if (errno == EINPROGRESS) - ; /* not an error */ - else if (errno == ECONNREFUSED -#if defined(__OpenBSD__) - || errno == EINVAL -#endif - ) - /* If we get ECONNREFUSED (Solaris) or EINVAL (OpenBSD) wait until the - * next tick to report the error. Solaris and OpenBSD wants to report - * immediately -- other unixes want to wait. - */ - handle->delayed_error = UV__ERR(ECONNREFUSED); - else - return UV__ERR(errno); - } - -out: - - uv__req_init(handle->loop, req, UV_CONNECT); - req->cb = cb; - req->handle = (uv_stream_t*) handle; - QUEUE_INIT(&req->queue); - handle->connect_req = req; - - uv__io_start(handle->loop, &handle->io_watcher, POLLOUT); - - if (handle->delayed_error) - uv__io_feed(handle->loop, &handle->io_watcher); - - return 0; -} - - -int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock) { - int err; - - if (uv__fd_exists(handle->loop, sock)) - return UV_EEXIST; - - err = uv__nonblock(sock, 1); - if (err) - return err; - - return uv__stream_open((uv_stream_t*)handle, - sock, - UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); -} - - -int uv_tcp_getsockname(const uv_tcp_t* handle, - struct sockaddr* name, - int* namelen) { - - if (handle->delayed_error) - return handle->delayed_error; - - return uv__getsockpeername((const uv_handle_t*) handle, - getsockname, - name, - namelen); -} - - -int uv_tcp_getpeername(const uv_tcp_t* handle, - struct sockaddr* name, - int* namelen) { - - if (handle->delayed_error) - return handle->delayed_error; - - return uv__getsockpeername((const uv_handle_t*) handle, - getpeername, - name, - namelen); -} - - -int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb) { - int fd; - struct linger l = { 1, 0 }; - - /* Disallow setting SO_LINGER to zero due to some platform inconsistencies */ - if (handle->flags & UV_HANDLE_SHUTTING) - return UV_EINVAL; - - fd = uv__stream_fd(handle); - if (0 != setsockopt(fd, SOL_SOCKET, SO_LINGER, &l, sizeof(l))) - return UV__ERR(errno); - - uv_close((uv_handle_t*) handle, close_cb); - return 0; -} - - -int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) { - static int single_accept_cached = -1; - unsigned long flags; - int single_accept; - int err; - - if (tcp->delayed_error) - return tcp->delayed_error; - - single_accept = uv__load_relaxed(&single_accept_cached); - if (single_accept == -1) { - const char* val = getenv("UV_TCP_SINGLE_ACCEPT"); - single_accept = (val != NULL && atoi(val) != 0); /* Off by default. */ - uv__store_relaxed(&single_accept_cached, single_accept); - } - - if (single_accept) - tcp->flags |= UV_HANDLE_TCP_SINGLE_ACCEPT; - - flags = 0; -#if defined(__MVS__) - /* on zOS the listen call does not bind automatically - if the socket is unbound. Hence the manual binding to - an arbitrary port is required to be done manually - */ - flags |= UV_HANDLE_BOUND; -#endif - err = maybe_new_socket(tcp, AF_INET, flags); - if (err) - return err; - - if (listen(tcp->io_watcher.fd, backlog)) - return UV__ERR(errno); - - tcp->connection_cb = cb; - tcp->flags |= UV_HANDLE_BOUND; - - /* Start listening for connections. */ - tcp->io_watcher.cb = uv__server_io; - uv__io_start(tcp->loop, &tcp->io_watcher, POLLIN); - - return 0; -} - - -int uv__tcp_nodelay(int fd, int on) { - if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on))) - return UV__ERR(errno); - return 0; -} - - -int uv__tcp_keepalive(int fd, int on, unsigned int delay) { - if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on))) - return UV__ERR(errno); - -#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); - } -#endif - - /* Solaris/SmartOS, if you don't support keep-alive, - * then don't advertise it in your system headers... - */ - /* FIXME(bnoordhuis) That's possibly because sizeof(delay) should be 1. */ -#if defined(TCP_KEEPALIVE) && !defined(__sun) - if (on && setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE, &delay, sizeof(delay))) - return UV__ERR(errno); -#endif - - return 0; -} - - -int uv_tcp_nodelay(uv_tcp_t* handle, int on) { - int err; - - if (uv__stream_fd(handle) != -1) { - err = uv__tcp_nodelay(uv__stream_fd(handle), on); - if (err) - return err; - } - - if (on) - handle->flags |= UV_HANDLE_TCP_NODELAY; - else - handle->flags &= ~UV_HANDLE_TCP_NODELAY; - - return 0; -} - - -int uv_tcp_keepalive(uv_tcp_t* handle, int on, unsigned int delay) { - int err; - - if (uv__stream_fd(handle) != -1) { - err =uv__tcp_keepalive(uv__stream_fd(handle), on, delay); - if (err) - return err; - } - - if (on) - handle->flags |= UV_HANDLE_TCP_KEEPALIVE; - else - handle->flags &= ~UV_HANDLE_TCP_KEEPALIVE; - - /* TODO Store delay if uv__stream_fd(handle) == -1 but don't want to enlarge - * uv_tcp_t with an int that's almost never used... - */ - - return 0; -} - - -int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable) { - if (enable) - handle->flags &= ~UV_HANDLE_TCP_SINGLE_ACCEPT; - else - handle->flags |= UV_HANDLE_TCP_SINGLE_ACCEPT; - return 0; -} - - -void uv__tcp_close(uv_tcp_t* handle) { - uv__stream_close((uv_stream_t*)handle); -} - - -int uv_socketpair(int type, int protocol, uv_os_sock_t fds[2], int flags0, int flags1) { - uv_os_sock_t temp[2]; - int err; -#if defined(__FreeBSD__) || defined(__linux__) - int flags; - - flags = type | SOCK_CLOEXEC; - if ((flags0 & UV_NONBLOCK_PIPE) && (flags1 & UV_NONBLOCK_PIPE)) - flags |= SOCK_NONBLOCK; - - if (socketpair(AF_UNIX, flags, protocol, temp)) - return UV__ERR(errno); - - if (flags & UV_FS_O_NONBLOCK) { - fds[0] = temp[0]; - fds[1] = temp[1]; - return 0; - } -#else - if (socketpair(AF_UNIX, type, protocol, temp)) - return UV__ERR(errno); - - if ((err = uv__cloexec(temp[0], 1))) - goto fail; - if ((err = uv__cloexec(temp[1], 1))) - goto fail; -#endif - - if (flags0 & UV_NONBLOCK_PIPE) - if ((err = uv__nonblock(temp[0], 1))) - goto fail; - if (flags1 & UV_NONBLOCK_PIPE) - if ((err = uv__nonblock(temp[1], 1))) - goto fail; - - fds[0] = temp[0]; - fds[1] = temp[1]; - return 0; - -fail: - uv__close(temp[0]); - uv__close(temp[1]); - return err; -} diff --git a/libuv/src/unix/thread.c b/libuv/src/unix/thread.c deleted file mode 100644 index c46450c..0000000 --- a/libuv/src/unix/thread.c +++ /dev/null @@ -1,842 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include - -#include -#include /* getrlimit() */ -#include /* getpagesize() */ - -#include - -#ifdef __MVS__ -#include -#include -#endif - -#if defined(__GLIBC__) && !defined(__UCLIBC__) -#include /* gnu_get_libc_version() */ -#endif - -#undef NANOSEC -#define NANOSEC ((uint64_t) 1e9) - -#if defined(PTHREAD_BARRIER_SERIAL_THREAD) -STATIC_ASSERT(sizeof(uv_barrier_t) == sizeof(pthread_barrier_t)); -#endif - -/* Note: guard clauses should match uv_barrier_t's in include/uv/unix.h. */ -#if defined(_AIX) || \ - defined(__OpenBSD__) || \ - !defined(PTHREAD_BARRIER_SERIAL_THREAD) -int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) { - struct _uv_barrier* b; - int rc; - - if (barrier == NULL || count == 0) - return UV_EINVAL; - - b = uv__malloc(sizeof(*b)); - if (b == NULL) - return UV_ENOMEM; - - b->in = 0; - b->out = 0; - b->threshold = count; - - rc = uv_mutex_init(&b->mutex); - if (rc != 0) - goto error2; - - rc = uv_cond_init(&b->cond); - if (rc != 0) - goto error; - - barrier->b = b; - return 0; - -error: - uv_mutex_destroy(&b->mutex); -error2: - uv__free(b); - return rc; -} - - -int uv_barrier_wait(uv_barrier_t* barrier) { - struct _uv_barrier* b; - int last; - - if (barrier == NULL || barrier->b == NULL) - return UV_EINVAL; - - b = barrier->b; - uv_mutex_lock(&b->mutex); - - if (++b->in == b->threshold) { - b->in = 0; - b->out = b->threshold; - uv_cond_signal(&b->cond); - } else { - do - uv_cond_wait(&b->cond, &b->mutex); - while (b->in != 0); - } - - last = (--b->out == 0); - uv_cond_signal(&b->cond); - - uv_mutex_unlock(&b->mutex); - return last; -} - - -void uv_barrier_destroy(uv_barrier_t* barrier) { - struct _uv_barrier* b; - - b = barrier->b; - uv_mutex_lock(&b->mutex); - - assert(b->in == 0); - while (b->out != 0) - uv_cond_wait(&b->cond, &b->mutex); - - if (b->in != 0) - abort(); - - uv_mutex_unlock(&b->mutex); - uv_mutex_destroy(&b->mutex); - uv_cond_destroy(&b->cond); - - uv__free(barrier->b); - barrier->b = NULL; -} - -#else - -int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) { - return UV__ERR(pthread_barrier_init(barrier, NULL, count)); -} - - -int uv_barrier_wait(uv_barrier_t* barrier) { - int rc; - - rc = pthread_barrier_wait(barrier); - if (rc != 0) - if (rc != PTHREAD_BARRIER_SERIAL_THREAD) - abort(); - - return rc == PTHREAD_BARRIER_SERIAL_THREAD; -} - - -void uv_barrier_destroy(uv_barrier_t* barrier) { - if (pthread_barrier_destroy(barrier)) - abort(); -} - -#endif - - -/* On MacOS, threads other than the main thread are created with a reduced - * stack size by default. Adjust to RLIMIT_STACK aligned to the page size. - * - * On Linux, threads created by musl have a much smaller stack than threads - * created by glibc (80 vs. 2048 or 4096 kB.) Follow glibc for consistency. - */ -size_t uv__thread_stack_size(void) { -#if defined(__APPLE__) || defined(__linux__) - struct rlimit lim; - - /* getrlimit() can fail on some aarch64 systems due to a glibc bug where - * the system call wrapper invokes the wrong system call. Don't treat - * that as fatal, just use the default stack size instead. - */ - if (0 == getrlimit(RLIMIT_STACK, &lim) && lim.rlim_cur != RLIM_INFINITY) { - /* pthread_attr_setstacksize() expects page-aligned values. */ - lim.rlim_cur -= lim.rlim_cur % (rlim_t) getpagesize(); - - /* Musl's PTHREAD_STACK_MIN is 2 KB on all architectures, which is - * too small to safely receive signals on. - * - * Musl's PTHREAD_STACK_MIN + MINSIGSTKSZ == 8192 on arm64 (which has - * the largest MINSIGSTKSZ of the architectures that musl supports) so - * let's use that as a lower bound. - * - * We use a hardcoded value because PTHREAD_STACK_MIN + MINSIGSTKSZ - * is between 28 and 133 KB when compiling against glibc, depending - * on the architecture. - */ - if (lim.rlim_cur >= 8192) - if (lim.rlim_cur >= PTHREAD_STACK_MIN) - return lim.rlim_cur; - } -#endif - -#if !defined(__linux__) - return 0; -#elif defined(__PPC__) || defined(__ppc__) || defined(__powerpc__) - return 4 << 20; /* glibc default. */ -#else - return 2 << 20; /* glibc default. */ -#endif -} - - -int uv_thread_create(uv_thread_t *tid, void (*entry)(void *arg), void *arg) { - uv_thread_options_t params; - params.flags = UV_THREAD_NO_FLAGS; - return uv_thread_create_ex(tid, ¶ms, entry, arg); -} - -int uv_thread_create_ex(uv_thread_t* tid, - const uv_thread_options_t* params, - void (*entry)(void *arg), - void *arg) { - int err; - pthread_attr_t* attr; - pthread_attr_t attr_storage; - size_t pagesize; - size_t stack_size; - - /* Used to squelch a -Wcast-function-type warning. */ - union { - void (*in)(void*); - void* (*out)(void*); - } f; - - stack_size = - params->flags & UV_THREAD_HAS_STACK_SIZE ? params->stack_size : 0; - - attr = NULL; - if (stack_size == 0) { - stack_size = uv__thread_stack_size(); - } else { - pagesize = (size_t)getpagesize(); - /* Round up to the nearest page boundary. */ - stack_size = (stack_size + pagesize - 1) &~ (pagesize - 1); -#ifdef PTHREAD_STACK_MIN - if (stack_size < PTHREAD_STACK_MIN) - stack_size = PTHREAD_STACK_MIN; -#endif - } - - if (stack_size > 0) { - attr = &attr_storage; - - if (pthread_attr_init(attr)) - abort(); - - if (pthread_attr_setstacksize(attr, stack_size)) - abort(); - } - - f.in = entry; - err = pthread_create(tid, attr, f.out, arg); - - if (attr != NULL) - pthread_attr_destroy(attr); - - return UV__ERR(err); -} - - -uv_thread_t uv_thread_self(void) { - return pthread_self(); -} - -int uv_thread_join(uv_thread_t *tid) { - return UV__ERR(pthread_join(*tid, NULL)); -} - - -int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2) { - return pthread_equal(*t1, *t2); -} - - -int uv_mutex_init(uv_mutex_t* mutex) { -#if defined(NDEBUG) || !defined(PTHREAD_MUTEX_ERRORCHECK) - return UV__ERR(pthread_mutex_init(mutex, NULL)); -#else - pthread_mutexattr_t attr; - int err; - - if (pthread_mutexattr_init(&attr)) - abort(); - - if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK)) - abort(); - - err = pthread_mutex_init(mutex, &attr); - - if (pthread_mutexattr_destroy(&attr)) - abort(); - - return UV__ERR(err); -#endif -} - - -int uv_mutex_init_recursive(uv_mutex_t* mutex) { - pthread_mutexattr_t attr; - int err; - - if (pthread_mutexattr_init(&attr)) - abort(); - - if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE)) - abort(); - - err = pthread_mutex_init(mutex, &attr); - - if (pthread_mutexattr_destroy(&attr)) - abort(); - - return UV__ERR(err); -} - - -void uv_mutex_destroy(uv_mutex_t* mutex) { - if (pthread_mutex_destroy(mutex)) - abort(); -} - - -void uv_mutex_lock(uv_mutex_t* mutex) { - if (pthread_mutex_lock(mutex)) - abort(); -} - - -int uv_mutex_trylock(uv_mutex_t* mutex) { - int err; - - err = pthread_mutex_trylock(mutex); - if (err) { - if (err != EBUSY && err != EAGAIN) - abort(); - return UV_EBUSY; - } - - return 0; -} - - -void uv_mutex_unlock(uv_mutex_t* mutex) { - if (pthread_mutex_unlock(mutex)) - abort(); -} - - -int uv_rwlock_init(uv_rwlock_t* rwlock) { - return UV__ERR(pthread_rwlock_init(rwlock, NULL)); -} - - -void uv_rwlock_destroy(uv_rwlock_t* rwlock) { - if (pthread_rwlock_destroy(rwlock)) - abort(); -} - - -void uv_rwlock_rdlock(uv_rwlock_t* rwlock) { - if (pthread_rwlock_rdlock(rwlock)) - abort(); -} - - -int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock) { - int err; - - err = pthread_rwlock_tryrdlock(rwlock); - if (err) { - if (err != EBUSY && err != EAGAIN) - abort(); - return UV_EBUSY; - } - - return 0; -} - - -void uv_rwlock_rdunlock(uv_rwlock_t* rwlock) { - if (pthread_rwlock_unlock(rwlock)) - abort(); -} - - -void uv_rwlock_wrlock(uv_rwlock_t* rwlock) { - if (pthread_rwlock_wrlock(rwlock)) - abort(); -} - - -int uv_rwlock_trywrlock(uv_rwlock_t* rwlock) { - int err; - - err = pthread_rwlock_trywrlock(rwlock); - if (err) { - if (err != EBUSY && err != EAGAIN) - abort(); - return UV_EBUSY; - } - - return 0; -} - - -void uv_rwlock_wrunlock(uv_rwlock_t* rwlock) { - if (pthread_rwlock_unlock(rwlock)) - abort(); -} - - -void uv_once(uv_once_t* guard, void (*callback)(void)) { - if (pthread_once(guard, callback)) - abort(); -} - -#if defined(__APPLE__) && defined(__MACH__) - -int uv_sem_init(uv_sem_t* sem, unsigned int value) { - kern_return_t err; - - err = semaphore_create(mach_task_self(), sem, SYNC_POLICY_FIFO, value); - if (err == KERN_SUCCESS) - return 0; - if (err == KERN_INVALID_ARGUMENT) - return UV_EINVAL; - if (err == KERN_RESOURCE_SHORTAGE) - return UV_ENOMEM; - - abort(); - return UV_EINVAL; /* Satisfy the compiler. */ -} - - -void uv_sem_destroy(uv_sem_t* sem) { - if (semaphore_destroy(mach_task_self(), *sem)) - abort(); -} - - -void uv_sem_post(uv_sem_t* sem) { - if (semaphore_signal(*sem)) - abort(); -} - - -void uv_sem_wait(uv_sem_t* sem) { - int r; - - do - r = semaphore_wait(*sem); - while (r == KERN_ABORTED); - - if (r != KERN_SUCCESS) - abort(); -} - - -int uv_sem_trywait(uv_sem_t* sem) { - mach_timespec_t interval; - kern_return_t err; - - interval.tv_sec = 0; - interval.tv_nsec = 0; - - err = semaphore_timedwait(*sem, interval); - if (err == KERN_SUCCESS) - return 0; - if (err == KERN_OPERATION_TIMED_OUT) - return UV_EAGAIN; - - abort(); - return UV_EINVAL; /* Satisfy the compiler. */ -} - -#else /* !(defined(__APPLE__) && defined(__MACH__)) */ - -#if defined(__GLIBC__) && !defined(__UCLIBC__) - -/* Hack around https://sourceware.org/bugzilla/show_bug.cgi?id=12674 - * by providing a custom implementation for glibc < 2.21 in terms of other - * concurrency primitives. - * Refs: https://github.com/nodejs/node/issues/19903 */ - -/* To preserve ABI compatibility, we treat the uv_sem_t as storage for - * a pointer to the actual struct we're using underneath. */ - -static uv_once_t glibc_version_check_once = UV_ONCE_INIT; -static int platform_needs_custom_semaphore = 0; - -static void glibc_version_check(void) { - const char* version = gnu_get_libc_version(); - platform_needs_custom_semaphore = - version[0] == '2' && version[1] == '.' && - atoi(version + 2) < 21; -} - -#elif defined(__MVS__) - -#define platform_needs_custom_semaphore 1 - -#else /* !defined(__GLIBC__) && !defined(__MVS__) */ - -#define platform_needs_custom_semaphore 0 - -#endif - -typedef struct uv_semaphore_s { - uv_mutex_t mutex; - uv_cond_t cond; - unsigned int value; -} uv_semaphore_t; - -#if (defined(__GLIBC__) && !defined(__UCLIBC__)) || \ - platform_needs_custom_semaphore -STATIC_ASSERT(sizeof(uv_sem_t) >= sizeof(uv_semaphore_t*)); -#endif - -static int uv__custom_sem_init(uv_sem_t* sem_, unsigned int value) { - int err; - uv_semaphore_t* sem; - - sem = uv__malloc(sizeof(*sem)); - if (sem == NULL) - return UV_ENOMEM; - - if ((err = uv_mutex_init(&sem->mutex)) != 0) { - uv__free(sem); - return err; - } - - if ((err = uv_cond_init(&sem->cond)) != 0) { - uv_mutex_destroy(&sem->mutex); - uv__free(sem); - return err; - } - - sem->value = value; - *(uv_semaphore_t**)sem_ = sem; - return 0; -} - - -static void uv__custom_sem_destroy(uv_sem_t* sem_) { - uv_semaphore_t* sem; - - sem = *(uv_semaphore_t**)sem_; - uv_cond_destroy(&sem->cond); - uv_mutex_destroy(&sem->mutex); - uv__free(sem); -} - - -static void uv__custom_sem_post(uv_sem_t* sem_) { - uv_semaphore_t* sem; - - sem = *(uv_semaphore_t**)sem_; - uv_mutex_lock(&sem->mutex); - sem->value++; - if (sem->value == 1) - uv_cond_signal(&sem->cond); - uv_mutex_unlock(&sem->mutex); -} - - -static void uv__custom_sem_wait(uv_sem_t* sem_) { - uv_semaphore_t* sem; - - sem = *(uv_semaphore_t**)sem_; - uv_mutex_lock(&sem->mutex); - while (sem->value == 0) - uv_cond_wait(&sem->cond, &sem->mutex); - sem->value--; - uv_mutex_unlock(&sem->mutex); -} - - -static int uv__custom_sem_trywait(uv_sem_t* sem_) { - uv_semaphore_t* sem; - - sem = *(uv_semaphore_t**)sem_; - if (uv_mutex_trylock(&sem->mutex) != 0) - return UV_EAGAIN; - - if (sem->value == 0) { - uv_mutex_unlock(&sem->mutex); - return UV_EAGAIN; - } - - sem->value--; - uv_mutex_unlock(&sem->mutex); - - return 0; -} - -static int uv__sem_init(uv_sem_t* sem, unsigned int value) { - if (sem_init(sem, 0, value)) - return UV__ERR(errno); - return 0; -} - - -static void uv__sem_destroy(uv_sem_t* sem) { - if (sem_destroy(sem)) - abort(); -} - - -static void uv__sem_post(uv_sem_t* sem) { - if (sem_post(sem)) - abort(); -} - - -static void uv__sem_wait(uv_sem_t* sem) { - int r; - - do - r = sem_wait(sem); - while (r == -1 && errno == EINTR); - - if (r) - abort(); -} - - -static int uv__sem_trywait(uv_sem_t* sem) { - int r; - - do - r = sem_trywait(sem); - while (r == -1 && errno == EINTR); - - if (r) { - if (errno == EAGAIN) - return UV_EAGAIN; - abort(); - } - - return 0; -} - -int uv_sem_init(uv_sem_t* sem, unsigned int value) { -#if defined(__GLIBC__) && !defined(__UCLIBC__) - uv_once(&glibc_version_check_once, glibc_version_check); -#endif - - if (platform_needs_custom_semaphore) - return uv__custom_sem_init(sem, value); - else - return uv__sem_init(sem, value); -} - - -void uv_sem_destroy(uv_sem_t* sem) { - if (platform_needs_custom_semaphore) - uv__custom_sem_destroy(sem); - else - uv__sem_destroy(sem); -} - - -void uv_sem_post(uv_sem_t* sem) { - if (platform_needs_custom_semaphore) - uv__custom_sem_post(sem); - else - uv__sem_post(sem); -} - - -void uv_sem_wait(uv_sem_t* sem) { - if (platform_needs_custom_semaphore) - uv__custom_sem_wait(sem); - else - uv__sem_wait(sem); -} - - -int uv_sem_trywait(uv_sem_t* sem) { - if (platform_needs_custom_semaphore) - return uv__custom_sem_trywait(sem); - else - return uv__sem_trywait(sem); -} - -#endif /* defined(__APPLE__) && defined(__MACH__) */ - - -#if defined(__APPLE__) && defined(__MACH__) || defined(__MVS__) - -int uv_cond_init(uv_cond_t* cond) { - return UV__ERR(pthread_cond_init(cond, NULL)); -} - -#else /* !(defined(__APPLE__) && defined(__MACH__)) */ - -int uv_cond_init(uv_cond_t* cond) { - pthread_condattr_t attr; - int err; - - err = pthread_condattr_init(&attr); - if (err) - return UV__ERR(err); - - err = pthread_condattr_setclock(&attr, CLOCK_MONOTONIC); - if (err) - goto error2; - - err = pthread_cond_init(cond, &attr); - if (err) - goto error2; - - err = pthread_condattr_destroy(&attr); - if (err) - goto error; - - return 0; - -error: - pthread_cond_destroy(cond); -error2: - pthread_condattr_destroy(&attr); - return UV__ERR(err); -} - -#endif /* defined(__APPLE__) && defined(__MACH__) */ - -void uv_cond_destroy(uv_cond_t* cond) { -#if defined(__APPLE__) && defined(__MACH__) - /* It has been reported that destroying condition variables that have been - * signalled but not waited on can sometimes result in application crashes. - * See https://codereview.chromium.org/1323293005. - */ - pthread_mutex_t mutex; - struct timespec ts; - int err; - - if (pthread_mutex_init(&mutex, NULL)) - abort(); - - if (pthread_mutex_lock(&mutex)) - abort(); - - ts.tv_sec = 0; - ts.tv_nsec = 1; - - err = pthread_cond_timedwait_relative_np(cond, &mutex, &ts); - if (err != 0 && err != ETIMEDOUT) - abort(); - - if (pthread_mutex_unlock(&mutex)) - abort(); - - if (pthread_mutex_destroy(&mutex)) - abort(); -#endif /* defined(__APPLE__) && defined(__MACH__) */ - - if (pthread_cond_destroy(cond)) - abort(); -} - -void uv_cond_signal(uv_cond_t* cond) { - if (pthread_cond_signal(cond)) - abort(); -} - -void uv_cond_broadcast(uv_cond_t* cond) { - if (pthread_cond_broadcast(cond)) - abort(); -} - -void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) { - if (pthread_cond_wait(cond, mutex)) - abort(); -} - - -int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout) { - int r; - struct timespec ts; -#if defined(__MVS__) - struct timeval tv; -#endif - -#if defined(__APPLE__) && defined(__MACH__) - ts.tv_sec = timeout / NANOSEC; - ts.tv_nsec = timeout % NANOSEC; - r = pthread_cond_timedwait_relative_np(cond, mutex, &ts); -#else -#if defined(__MVS__) - if (gettimeofday(&tv, NULL)) - abort(); - timeout += tv.tv_sec * NANOSEC + tv.tv_usec * 1e3; -#else - timeout += uv__hrtime(UV_CLOCK_PRECISE); -#endif - ts.tv_sec = timeout / NANOSEC; - ts.tv_nsec = timeout % NANOSEC; - r = pthread_cond_timedwait(cond, mutex, &ts); -#endif - - - if (r == 0) - return 0; - - if (r == ETIMEDOUT) - return UV_ETIMEDOUT; - - abort(); -#ifndef __SUNPRO_C - return UV_EINVAL; /* Satisfy the compiler. */ -#endif -} - - -int uv_key_create(uv_key_t* key) { - return UV__ERR(pthread_key_create(key, NULL)); -} - - -void uv_key_delete(uv_key_t* key) { - if (pthread_key_delete(*key)) - abort(); -} - - -void* uv_key_get(uv_key_t* key) { - return pthread_getspecific(*key); -} - - -void uv_key_set(uv_key_t* key, void* value) { - if (pthread_setspecific(*key, value)) - abort(); -} diff --git a/libuv/src/unix/tty.c b/libuv/src/unix/tty.c deleted file mode 100644 index 9442cf1..0000000 --- a/libuv/src/unix/tty.c +++ /dev/null @@ -1,420 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" -#include "spinlock.h" - -#include -#include -#include -#include -#include -#include - -#if defined(__MVS__) && !defined(IMAXBEL) -#define IMAXBEL 0 -#endif - -#if defined(__PASE__) -/* On IBM i PASE, for better compatibility with running interactive programs in - * a 5250 environment, isatty() will return true for the stdin/stdout/stderr - * streams created by QSH/QP2TERM. - * - * For more, see docs on PASE_STDIO_ISATTY in - * https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/apis/pase_environ.htm - * - * This behavior causes problems for Node as it expects that if isatty() returns - * true that TTY ioctls will be supported by that fd (which is not an - * unreasonable expectation) and when they don't it crashes with assertion - * errors. - * - * Here, we create our own version of isatty() that uses ioctl() to identify - * whether the fd is *really* a TTY or not. - */ -static int isreallyatty(int file) { - int rc; - - rc = !ioctl(file, TXISATTY + 0x81, NULL); - if (!rc && errno != EBADF) - errno = ENOTTY; - - return rc; -} -#define isatty(fd) isreallyatty(fd) -#endif - -static int orig_termios_fd = -1; -static struct termios orig_termios; -static uv_spinlock_t termios_spinlock = UV_SPINLOCK_INITIALIZER; - -static int uv__tty_is_slave(const int fd) { - int result; -#if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) - int dummy; - - result = ioctl(fd, TIOCGPTN, &dummy) != 0; -#elif defined(__APPLE__) - char dummy[256]; - - result = ioctl(fd, TIOCPTYGNAME, &dummy) != 0; -#elif defined(__NetBSD__) - /* - * NetBSD as an extension returns with ptsname(3) and ptsname_r(3) the slave - * device name for both descriptors, the master one and slave one. - * - * Implement function to compare major device number with pts devices. - * - * The major numbers are machine-dependent, on NetBSD/amd64 they are - * respectively: - * - master tty: ptc - major 6 - * - slave tty: pts - major 5 - */ - - struct stat sb; - /* Lookup device's major for the pts driver and cache it. */ - static devmajor_t pts = NODEVMAJOR; - - if (pts == NODEVMAJOR) { - pts = getdevmajor("pts", S_IFCHR); - if (pts == NODEVMAJOR) - abort(); - } - - /* Lookup stat structure behind the file descriptor. */ - if (fstat(fd, &sb) != 0) - abort(); - - /* Assert character device. */ - if (!S_ISCHR(sb.st_mode)) - abort(); - - /* Assert valid major. */ - if (major(sb.st_rdev) == NODEVMAJOR) - abort(); - - result = (pts == major(sb.st_rdev)); -#else - /* Fallback to ptsname - */ - result = ptsname(fd) == NULL; -#endif - return result; -} - -int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, int fd, int unused) { - uv_handle_type type; - int flags; - int newfd; - int r; - int saved_flags; - int mode; - char path[256]; - (void)unused; /* deprecated parameter is no longer needed */ - - /* File descriptors that refer to files cannot be monitored with epoll. - * That restriction also applies to character devices like /dev/random - * (but obviously not /dev/tty.) - */ - type = uv_guess_handle(fd); - if (type == UV_FILE || type == UV_UNKNOWN_HANDLE) - return UV_EINVAL; - - flags = 0; - newfd = -1; - - /* Save the fd flags in case we need to restore them due to an error. */ - do - saved_flags = fcntl(fd, F_GETFL); - while (saved_flags == -1 && errno == EINTR); - - if (saved_flags == -1) - return UV__ERR(errno); - mode = saved_flags & O_ACCMODE; - - /* Reopen the file descriptor when it refers to a tty. This lets us put the - * tty in non-blocking mode without affecting other processes that share it - * with us. - * - * Example: `node | cat` - if we put our fd 0 in non-blocking mode, it also - * affects fd 1 of `cat` because both file descriptors refer to the same - * struct file in the kernel. When we reopen our fd 0, it points to a - * different struct file, hence changing its properties doesn't affect - * other processes. - */ - if (type == UV_TTY) { - /* Reopening a pty in master mode won't work either because the reopened - * pty will be in slave mode (*BSD) or reopening will allocate a new - * master/slave pair (Linux). Therefore check if the fd points to a - * slave device. - */ - if (uv__tty_is_slave(fd) && ttyname_r(fd, path, sizeof(path)) == 0) - r = uv__open_cloexec(path, mode | O_NOCTTY); - else - r = -1; - - if (r < 0) { - /* fallback to using blocking writes */ - if (mode != O_RDONLY) - flags |= UV_HANDLE_BLOCKING_WRITES; - goto skip; - } - - newfd = r; - - r = uv__dup2_cloexec(newfd, fd); - if (r < 0 && r != UV_EINVAL) { - /* EINVAL means newfd == fd which could conceivably happen if another - * thread called close(fd) between our calls to isatty() and open(). - * That's a rather unlikely event but let's handle it anyway. - */ - uv__close(newfd); - return r; - } - - fd = newfd; - } - -skip: - uv__stream_init(loop, (uv_stream_t*) tty, UV_TTY); - - /* If anything fails beyond this point we need to remove the handle from - * the handle queue, since it was added by uv__handle_init in uv_stream_init. - */ - - if (!(flags & UV_HANDLE_BLOCKING_WRITES)) - uv__nonblock(fd, 1); - -#if defined(__APPLE__) - r = uv__stream_try_select((uv_stream_t*) tty, &fd); - if (r) { - int rc = r; - if (newfd != -1) - uv__close(newfd); - QUEUE_REMOVE(&tty->handle_queue); - do - r = fcntl(fd, F_SETFL, saved_flags); - while (r == -1 && errno == EINTR); - return rc; - } -#endif - - if (mode != O_WRONLY) - flags |= UV_HANDLE_READABLE; - if (mode != O_RDONLY) - flags |= UV_HANDLE_WRITABLE; - - uv__stream_open((uv_stream_t*) tty, fd, flags); - tty->mode = UV_TTY_MODE_NORMAL; - - return 0; -} - -static void uv__tty_make_raw(struct termios* tio) { - assert(tio != NULL); - -#if defined __sun || defined __MVS__ - /* - * This implementation of cfmakeraw for Solaris and derivatives is taken from - * http://www.perkin.org.uk/posts/solaris-portability-cfmakeraw.html. - */ - tio->c_iflag &= ~(IMAXBEL | IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | - IGNCR | ICRNL | IXON); - tio->c_oflag &= ~OPOST; - tio->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); - tio->c_cflag &= ~(CSIZE | PARENB); - tio->c_cflag |= CS8; - - /* - * By default, most software expects a pending read to block until at - * least one byte becomes available. As per termio(7I), this requires - * setting the MIN and TIME parameters appropriately. - * - * As a somewhat unfortunate artifact of history, the MIN and TIME slots - * in the control character array overlap with the EOF and EOL slots used - * for canonical mode processing. Because the EOF character needs to be - * the ASCII EOT value (aka Control-D), it has the byte value 4. When - * switching to raw mode, this is interpreted as a MIN value of 4; i.e., - * reads will block until at least four bytes have been input. - * - * Other platforms with a distinct MIN slot like Linux and FreeBSD appear - * to default to a MIN value of 1, so we'll force that value here: - */ - tio->c_cc[VMIN] = 1; - tio->c_cc[VTIME] = 0; -#else - cfmakeraw(tio); -#endif /* #ifdef __sun */ -} - -int uv_tty_set_mode(uv_tty_t* tty, uv_tty_mode_t mode) { - struct termios tmp; - int fd; - - if (tty->mode == (int) mode) - return 0; - - fd = uv__stream_fd(tty); - if (tty->mode == UV_TTY_MODE_NORMAL && mode != UV_TTY_MODE_NORMAL) { - if (tcgetattr(fd, &tty->orig_termios)) - return UV__ERR(errno); - - /* This is used for uv_tty_reset_mode() */ - uv_spinlock_lock(&termios_spinlock); - if (orig_termios_fd == -1) { - orig_termios = tty->orig_termios; - orig_termios_fd = fd; - } - uv_spinlock_unlock(&termios_spinlock); - } - - tmp = tty->orig_termios; - switch (mode) { - case UV_TTY_MODE_NORMAL: - break; - case UV_TTY_MODE_RAW: - tmp.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); - tmp.c_oflag |= (ONLCR); - tmp.c_cflag |= (CS8); - tmp.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); - tmp.c_cc[VMIN] = 1; - tmp.c_cc[VTIME] = 0; - break; - case UV_TTY_MODE_IO: - uv__tty_make_raw(&tmp); - break; - } - - /* Apply changes after draining */ - if (tcsetattr(fd, TCSADRAIN, &tmp)) - return UV__ERR(errno); - - tty->mode = mode; - return 0; -} - - -int uv_tty_get_winsize(uv_tty_t* tty, int* width, int* height) { - struct winsize ws; - int err; - - do - err = ioctl(uv__stream_fd(tty), TIOCGWINSZ, &ws); - while (err == -1 && errno == EINTR); - - if (err == -1) - return UV__ERR(errno); - - *width = ws.ws_col; - *height = ws.ws_row; - - return 0; -} - - -uv_handle_type uv_guess_handle(uv_file file) { - struct sockaddr sa; - struct stat s; - socklen_t len; - int type; - - if (file < 0) - return UV_UNKNOWN_HANDLE; - - if (isatty(file)) - return UV_TTY; - - if (fstat(file, &s)) - return UV_UNKNOWN_HANDLE; - - if (S_ISREG(s.st_mode)) - return UV_FILE; - - if (S_ISCHR(s.st_mode)) - return UV_FILE; /* XXX UV_NAMED_PIPE? */ - - if (S_ISFIFO(s.st_mode)) - return UV_NAMED_PIPE; - - if (!S_ISSOCK(s.st_mode)) - return UV_UNKNOWN_HANDLE; - - len = sizeof(type); - if (getsockopt(file, SOL_SOCKET, SO_TYPE, &type, &len)) - return UV_UNKNOWN_HANDLE; - - len = sizeof(sa); - if (getsockname(file, &sa, &len)) - return UV_UNKNOWN_HANDLE; - - if (type == SOCK_DGRAM) - if (sa.sa_family == AF_INET || sa.sa_family == AF_INET6) - return UV_UDP; - - if (type == SOCK_STREAM) { -#if defined(_AIX) || defined(__DragonFly__) - /* on AIX/DragonFly the getsockname call returns an empty sa structure - * for sockets of type AF_UNIX. For all other types it will - * return a properly filled in structure. - */ - if (len == 0) - return UV_NAMED_PIPE; -#endif /* defined(_AIX) || defined(__DragonFly__) */ - - if (sa.sa_family == AF_INET || sa.sa_family == AF_INET6) - return UV_TCP; - if (sa.sa_family == AF_UNIX) - return UV_NAMED_PIPE; - } - - return UV_UNKNOWN_HANDLE; -} - - -/* This function is async signal-safe, meaning that it's safe to call from - * inside a signal handler _unless_ execution was inside uv_tty_set_mode()'s - * critical section when the signal was raised. - */ -int uv_tty_reset_mode(void) { - int saved_errno; - int err; - - saved_errno = errno; - if (!uv_spinlock_trylock(&termios_spinlock)) - return UV_EBUSY; /* In uv_tty_set_mode(). */ - - err = 0; - if (orig_termios_fd != -1) - if (tcsetattr(orig_termios_fd, TCSANOW, &orig_termios)) - err = UV__ERR(errno); - - uv_spinlock_unlock(&termios_spinlock); - errno = saved_errno; - - return err; -} - -void uv_tty_set_vterm_state(uv_tty_vtermstate_t state) { -} - -int uv_tty_get_vterm_state(uv_tty_vtermstate_t* state) { - return UV_ENOTSUP; -} diff --git a/libuv/src/unix/udp.c b/libuv/src/unix/udp.c deleted file mode 100644 index 49051c0..0000000 --- a/libuv/src/unix/udp.c +++ /dev/null @@ -1,1358 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -#include -#include -#include -#include -#include -#if defined(__MVS__) -#include -#endif -#include - -#if defined(IPV6_JOIN_GROUP) && !defined(IPV6_ADD_MEMBERSHIP) -# define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP -#endif - -#if defined(IPV6_LEAVE_GROUP) && !defined(IPV6_DROP_MEMBERSHIP) -# define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP -#endif - -union uv__sockaddr { - struct sockaddr_in6 in6; - struct sockaddr_in in; - struct sockaddr addr; -}; - -static void uv__udp_run_completed(uv_udp_t* handle); -static void uv__udp_io(uv_loop_t* loop, uv__io_t* w, unsigned int revents); -static void uv__udp_recvmsg(uv_udp_t* handle); -static void uv__udp_sendmsg(uv_udp_t* handle); -static int uv__udp_maybe_deferred_bind(uv_udp_t* handle, - int domain, - unsigned int flags); - -#if HAVE_MMSG - -#define UV__MMSG_MAXWIDTH 20 - -static int uv__udp_recvmmsg(uv_udp_t* handle, uv_buf_t* buf); -static void uv__udp_sendmmsg(uv_udp_t* handle); - -static int uv__recvmmsg_avail; -static int uv__sendmmsg_avail; -static uv_once_t once = UV_ONCE_INIT; - -static void uv__udp_mmsg_init(void) { - int ret; - int s; - s = uv__socket(AF_INET, SOCK_DGRAM, 0); - if (s < 0) - return; - ret = uv__sendmmsg(s, NULL, 0); - if (ret == 0 || errno != ENOSYS) { - uv__sendmmsg_avail = 1; - uv__recvmmsg_avail = 1; - } else { - ret = uv__recvmmsg(s, NULL, 0); - if (ret == 0 || errno != ENOSYS) - uv__recvmmsg_avail = 1; - } - uv__close(s); -} - -#endif - -void uv__udp_close(uv_udp_t* handle) { - uv__io_close(handle->loop, &handle->io_watcher); - uv__handle_stop(handle); - - if (handle->io_watcher.fd != -1) { - uv__close(handle->io_watcher.fd); - handle->io_watcher.fd = -1; - } -} - - -void uv__udp_finish_close(uv_udp_t* handle) { - uv_udp_send_t* req; - QUEUE* q; - - assert(!uv__io_active(&handle->io_watcher, POLLIN | POLLOUT)); - assert(handle->io_watcher.fd == -1); - - while (!QUEUE_EMPTY(&handle->write_queue)) { - q = QUEUE_HEAD(&handle->write_queue); - QUEUE_REMOVE(q); - - req = QUEUE_DATA(q, uv_udp_send_t, queue); - req->status = UV_ECANCELED; - QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue); - } - - uv__udp_run_completed(handle); - - assert(handle->send_queue_size == 0); - assert(handle->send_queue_count == 0); - - /* Now tear down the handle. */ - handle->recv_cb = NULL; - handle->alloc_cb = NULL; - /* but _do not_ touch close_cb */ -} - - -static void uv__udp_run_completed(uv_udp_t* handle) { - uv_udp_send_t* req; - QUEUE* q; - - assert(!(handle->flags & UV_HANDLE_UDP_PROCESSING)); - handle->flags |= UV_HANDLE_UDP_PROCESSING; - - while (!QUEUE_EMPTY(&handle->write_completed_queue)) { - q = QUEUE_HEAD(&handle->write_completed_queue); - QUEUE_REMOVE(q); - - req = QUEUE_DATA(q, uv_udp_send_t, queue); - uv__req_unregister(handle->loop, req); - - handle->send_queue_size -= uv__count_bufs(req->bufs, req->nbufs); - handle->send_queue_count--; - - if (req->bufs != req->bufsml) - uv__free(req->bufs); - req->bufs = NULL; - - if (req->send_cb == NULL) - continue; - - /* req->status >= 0 == bytes written - * req->status < 0 == errno - */ - if (req->status >= 0) - req->send_cb(req, 0); - else - req->send_cb(req, req->status); - } - - if (QUEUE_EMPTY(&handle->write_queue)) { - /* Pending queue and completion queue empty, stop watcher. */ - uv__io_stop(handle->loop, &handle->io_watcher, POLLOUT); - if (!uv__io_active(&handle->io_watcher, POLLIN)) - uv__handle_stop(handle); - } - - handle->flags &= ~UV_HANDLE_UDP_PROCESSING; -} - - -static void uv__udp_io(uv_loop_t* loop, uv__io_t* w, unsigned int revents) { - uv_udp_t* handle; - - handle = container_of(w, uv_udp_t, io_watcher); - assert(handle->type == UV_UDP); - - if (revents & POLLIN) - uv__udp_recvmsg(handle); - - if (revents & POLLOUT) { - uv__udp_sendmsg(handle); - uv__udp_run_completed(handle); - } -} - -#if HAVE_MMSG -static int uv__udp_recvmmsg(uv_udp_t* handle, uv_buf_t* buf) { - struct sockaddr_in6 peers[UV__MMSG_MAXWIDTH]; - struct iovec iov[UV__MMSG_MAXWIDTH]; - struct uv__mmsghdr msgs[UV__MMSG_MAXWIDTH]; - ssize_t nread; - uv_buf_t chunk_buf; - size_t chunks; - int flags; - size_t k; - - /* prepare structures for recvmmsg */ - chunks = buf->len / UV__UDP_DGRAM_MAXSIZE; - if (chunks > ARRAY_SIZE(iov)) - chunks = ARRAY_SIZE(iov); - for (k = 0; k < chunks; ++k) { - iov[k].iov_base = buf->base + k * UV__UDP_DGRAM_MAXSIZE; - iov[k].iov_len = UV__UDP_DGRAM_MAXSIZE; - msgs[k].msg_hdr.msg_iov = iov + k; - msgs[k].msg_hdr.msg_iovlen = 1; - msgs[k].msg_hdr.msg_name = peers + k; - msgs[k].msg_hdr.msg_namelen = sizeof(peers[0]); - msgs[k].msg_hdr.msg_control = NULL; - msgs[k].msg_hdr.msg_controllen = 0; - msgs[k].msg_hdr.msg_flags = 0; - } - - do - nread = uv__recvmmsg(handle->io_watcher.fd, msgs, chunks); - while (nread == -1 && errno == EINTR); - - if (nread < 1) { - if (nread == 0 || errno == EAGAIN || errno == EWOULDBLOCK) - handle->recv_cb(handle, 0, buf, NULL, 0); - else - handle->recv_cb(handle, UV__ERR(errno), buf, NULL, 0); - } else { - /* pass each chunk to the application */ - for (k = 0; k < (size_t) nread && handle->recv_cb != NULL; k++) { - flags = UV_UDP_MMSG_CHUNK; - if (msgs[k].msg_hdr.msg_flags & MSG_TRUNC) - flags |= UV_UDP_PARTIAL; - - chunk_buf = uv_buf_init(iov[k].iov_base, iov[k].iov_len); - handle->recv_cb(handle, - msgs[k].msg_len, - &chunk_buf, - msgs[k].msg_hdr.msg_name, - flags); - } - - /* one last callback so the original buffer is freed */ - if (handle->recv_cb != NULL) - handle->recv_cb(handle, 0, buf, NULL, UV_UDP_MMSG_FREE); - } - return nread; -} -#endif - -static void uv__udp_recvmsg(uv_udp_t* handle) { - struct sockaddr_storage peer; - struct msghdr h; - ssize_t nread; - uv_buf_t buf; - int flags; - int count; - - assert(handle->recv_cb != NULL); - assert(handle->alloc_cb != NULL); - - /* Prevent loop starvation when the data comes in as fast as (or faster than) - * we can read it. XXX Need to rearm fd if we switch to edge-triggered I/O. - */ - count = 32; - - do { - buf = uv_buf_init(NULL, 0); - handle->alloc_cb((uv_handle_t*) handle, UV__UDP_DGRAM_MAXSIZE, &buf); - if (buf.base == NULL || buf.len == 0) { - handle->recv_cb(handle, UV_ENOBUFS, &buf, NULL, 0); - return; - } - assert(buf.base != NULL); - -#if HAVE_MMSG - if (uv_udp_using_recvmmsg(handle)) { - nread = uv__udp_recvmmsg(handle, &buf); - if (nread > 0) - count -= nread; - continue; - } -#endif - - memset(&h, 0, sizeof(h)); - memset(&peer, 0, sizeof(peer)); - h.msg_name = &peer; - h.msg_namelen = sizeof(peer); - h.msg_iov = (void*) &buf; - h.msg_iovlen = 1; - - do { - nread = recvmsg(handle->io_watcher.fd, &h, 0); - } - while (nread == -1 && errno == EINTR); - - if (nread == -1) { - if (errno == EAGAIN || errno == EWOULDBLOCK) - handle->recv_cb(handle, 0, &buf, NULL, 0); - else - handle->recv_cb(handle, UV__ERR(errno), &buf, NULL, 0); - } - else { - flags = 0; - if (h.msg_flags & MSG_TRUNC) - flags |= UV_UDP_PARTIAL; - - handle->recv_cb(handle, nread, &buf, (const struct sockaddr*) &peer, flags); - } - count--; - } - /* recv_cb callback may decide to pause or close the handle */ - while (nread != -1 - && count > 0 - && handle->io_watcher.fd != -1 - && handle->recv_cb != NULL); -} - -#if HAVE_MMSG -static void uv__udp_sendmmsg(uv_udp_t* handle) { - uv_udp_send_t* req; - struct uv__mmsghdr h[UV__MMSG_MAXWIDTH]; - struct uv__mmsghdr *p; - QUEUE* q; - ssize_t npkts; - size_t pkts; - size_t i; - - if (QUEUE_EMPTY(&handle->write_queue)) - return; - -write_queue_drain: - for (pkts = 0, q = QUEUE_HEAD(&handle->write_queue); - pkts < UV__MMSG_MAXWIDTH && q != &handle->write_queue; - ++pkts, q = QUEUE_HEAD(q)) { - assert(q != NULL); - req = QUEUE_DATA(q, uv_udp_send_t, queue); - assert(req != NULL); - - p = &h[pkts]; - memset(p, 0, sizeof(*p)); - if (req->addr.ss_family == AF_UNSPEC) { - p->msg_hdr.msg_name = NULL; - p->msg_hdr.msg_namelen = 0; - } else { - p->msg_hdr.msg_name = &req->addr; - if (req->addr.ss_family == AF_INET6) - p->msg_hdr.msg_namelen = sizeof(struct sockaddr_in6); - else if (req->addr.ss_family == AF_INET) - p->msg_hdr.msg_namelen = sizeof(struct sockaddr_in); - else if (req->addr.ss_family == AF_UNIX) - p->msg_hdr.msg_namelen = sizeof(struct sockaddr_un); - else { - assert(0 && "unsupported address family"); - abort(); - } - } - h[pkts].msg_hdr.msg_iov = (struct iovec*) req->bufs; - h[pkts].msg_hdr.msg_iovlen = req->nbufs; - } - - do - npkts = uv__sendmmsg(handle->io_watcher.fd, h, pkts); - while (npkts == -1 && errno == EINTR); - - if (npkts < 1) { - if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS) - return; - for (i = 0, q = QUEUE_HEAD(&handle->write_queue); - i < pkts && q != &handle->write_queue; - ++i, q = QUEUE_HEAD(&handle->write_queue)) { - assert(q != NULL); - req = QUEUE_DATA(q, uv_udp_send_t, queue); - assert(req != NULL); - - req->status = UV__ERR(errno); - QUEUE_REMOVE(&req->queue); - QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue); - } - uv__io_feed(handle->loop, &handle->io_watcher); - return; - } - - for (i = 0, q = QUEUE_HEAD(&handle->write_queue); - i < pkts && q != &handle->write_queue; - ++i, q = QUEUE_HEAD(&handle->write_queue)) { - assert(q != NULL); - req = QUEUE_DATA(q, uv_udp_send_t, queue); - assert(req != NULL); - - req->status = req->bufs[0].len; - - /* Sending a datagram is an atomic operation: either all data - * is written or nothing is (and EMSGSIZE is raised). That is - * why we don't handle partial writes. Just pop the request - * off the write queue and onto the completed queue, done. - */ - QUEUE_REMOVE(&req->queue); - QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue); - } - - /* couldn't batch everything, continue sending (jump to avoid stack growth) */ - if (!QUEUE_EMPTY(&handle->write_queue)) - goto write_queue_drain; - uv__io_feed(handle->loop, &handle->io_watcher); - return; -} -#endif - -static void uv__udp_sendmsg(uv_udp_t* handle) { - uv_udp_send_t* req; - struct msghdr h; - QUEUE* q; - ssize_t size; - -#if HAVE_MMSG - uv_once(&once, uv__udp_mmsg_init); - if (uv__sendmmsg_avail) { - uv__udp_sendmmsg(handle); - return; - } -#endif - - while (!QUEUE_EMPTY(&handle->write_queue)) { - q = QUEUE_HEAD(&handle->write_queue); - assert(q != NULL); - - req = QUEUE_DATA(q, uv_udp_send_t, queue); - assert(req != NULL); - - memset(&h, 0, sizeof h); - if (req->addr.ss_family == AF_UNSPEC) { - h.msg_name = NULL; - h.msg_namelen = 0; - } else { - h.msg_name = &req->addr; - if (req->addr.ss_family == AF_INET6) - h.msg_namelen = sizeof(struct sockaddr_in6); - else if (req->addr.ss_family == AF_INET) - h.msg_namelen = sizeof(struct sockaddr_in); - else if (req->addr.ss_family == AF_UNIX) - h.msg_namelen = sizeof(struct sockaddr_un); - else { - assert(0 && "unsupported address family"); - abort(); - } - } - h.msg_iov = (struct iovec*) req->bufs; - h.msg_iovlen = req->nbufs; - - do { - size = sendmsg(handle->io_watcher.fd, &h, 0); - } while (size == -1 && errno == EINTR); - - if (size == -1) { - if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS) - break; - } - - req->status = (size == -1 ? UV__ERR(errno) : size); - - /* Sending a datagram is an atomic operation: either all data - * is written or nothing is (and EMSGSIZE is raised). That is - * why we don't handle partial writes. Just pop the request - * off the write queue and onto the completed queue, done. - */ - QUEUE_REMOVE(&req->queue); - QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue); - uv__io_feed(handle->loop, &handle->io_watcher); - } -} - -/* On the BSDs, SO_REUSEPORT implies SO_REUSEADDR but with some additional - * refinements for programs that use multicast. - * - * Linux as of 3.9 has a SO_REUSEPORT socket option but with semantics that - * are different from the BSDs: it _shares_ the port rather than steal it - * from the current listener. While useful, it's not something we can emulate - * on other platforms so we don't enable it. - * - * zOS does not support getsockname with SO_REUSEPORT option when using - * AF_UNIX. - */ -static int uv__set_reuse(int fd) { - int yes; - yes = 1; - -#if defined(SO_REUSEPORT) && defined(__MVS__) - struct sockaddr_in sockfd; - unsigned int sockfd_len = sizeof(sockfd); - if (getsockname(fd, (struct sockaddr*) &sockfd, &sockfd_len) == -1) - return UV__ERR(errno); - if (sockfd.sin_family == AF_UNIX) { - if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes))) - return UV__ERR(errno); - } else { - if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof(yes))) - return UV__ERR(errno); - } -#elif defined(SO_REUSEPORT) && !defined(__linux__) - if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof(yes))) - return UV__ERR(errno); -#else - if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes))) - return UV__ERR(errno); -#endif - - return 0; -} - -/* - * The Linux kernel suppresses some ICMP error messages by default for UDP - * sockets. Setting IP_RECVERR/IPV6_RECVERR on the socket enables full ICMP - * error reporting, hopefully resulting in faster failover to working name - * servers. - */ -static int uv__set_recverr(int fd, sa_family_t ss_family) { -#if defined(__linux__) - int yes; - - yes = 1; - if (ss_family == AF_INET) { - if (setsockopt(fd, IPPROTO_IP, IP_RECVERR, &yes, sizeof(yes))) - return UV__ERR(errno); - } else if (ss_family == AF_INET6) { - if (setsockopt(fd, IPPROTO_IPV6, IPV6_RECVERR, &yes, sizeof(yes))) - return UV__ERR(errno); - } -#endif - return 0; -} - - -int uv__udp_bind(uv_udp_t* handle, - const struct sockaddr* addr, - unsigned int addrlen, - unsigned int flags) { - int err; - int yes; - int fd; - - /* Check for bad flags. */ - if (flags & ~(UV_UDP_IPV6ONLY | UV_UDP_REUSEADDR | UV_UDP_LINUX_RECVERR)) - return UV_EINVAL; - - /* Cannot set IPv6-only mode on non-IPv6 socket. */ - if ((flags & UV_UDP_IPV6ONLY) && addr->sa_family != AF_INET6) - return UV_EINVAL; - - fd = handle->io_watcher.fd; - if (fd == -1) { - err = uv__socket(addr->sa_family, SOCK_DGRAM, 0); - if (err < 0) - return err; - fd = err; - handle->io_watcher.fd = fd; - } - - if (flags & UV_UDP_LINUX_RECVERR) { - err = uv__set_recverr(fd, addr->sa_family); - if (err) - return err; - } - - if (flags & UV_UDP_REUSEADDR) { - err = uv__set_reuse(fd); - if (err) - return err; - } - - if (flags & UV_UDP_IPV6ONLY) { -#ifdef IPV6_V6ONLY - yes = 1; - if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &yes, sizeof yes) == -1) { - err = UV__ERR(errno); - return err; - } -#else - err = UV_ENOTSUP; - return err; -#endif - } - - if (bind(fd, addr, addrlen)) { - err = UV__ERR(errno); - if (errno == EAFNOSUPPORT) - /* OSX, other BSDs and SunoS fail with EAFNOSUPPORT when binding a - * socket created with AF_INET to an AF_INET6 address or vice versa. */ - err = UV_EINVAL; - return err; - } - - if (addr->sa_family == AF_INET6) - handle->flags |= UV_HANDLE_IPV6; - - handle->flags |= UV_HANDLE_BOUND; - return 0; -} - - -static int uv__udp_maybe_deferred_bind(uv_udp_t* handle, - int domain, - unsigned int flags) { - union uv__sockaddr taddr; - socklen_t addrlen; - - if (handle->io_watcher.fd != -1) - return 0; - - switch (domain) { - case AF_INET: - { - struct sockaddr_in* addr = &taddr.in; - memset(addr, 0, sizeof *addr); - addr->sin_family = AF_INET; - addr->sin_addr.s_addr = INADDR_ANY; - addrlen = sizeof *addr; - break; - } - case AF_INET6: - { - struct sockaddr_in6* addr = &taddr.in6; - memset(addr, 0, sizeof *addr); - addr->sin6_family = AF_INET6; - addr->sin6_addr = in6addr_any; - addrlen = sizeof *addr; - break; - } - default: - assert(0 && "unsupported address family"); - abort(); - } - - return uv__udp_bind(handle, &taddr.addr, addrlen, flags); -} - - -int uv__udp_connect(uv_udp_t* handle, - const struct sockaddr* addr, - unsigned int addrlen) { - int err; - - err = uv__udp_maybe_deferred_bind(handle, addr->sa_family, 0); - if (err) - return err; - - do { - errno = 0; - err = connect(handle->io_watcher.fd, addr, addrlen); - } while (err == -1 && errno == EINTR); - - if (err) - return UV__ERR(errno); - - handle->flags |= UV_HANDLE_UDP_CONNECTED; - - return 0; -} - - -int uv__udp_disconnect(uv_udp_t* handle) { - int r; - struct sockaddr addr; - - memset(&addr, 0, sizeof(addr)); - - addr.sa_family = AF_UNSPEC; - - do { - errno = 0; - r = connect(handle->io_watcher.fd, &addr, sizeof(addr)); - } while (r == -1 && errno == EINTR); - - if (r == -1 && errno != EAFNOSUPPORT) - return UV__ERR(errno); - - handle->flags &= ~UV_HANDLE_UDP_CONNECTED; - return 0; -} - - -int uv__udp_send(uv_udp_send_t* req, - uv_udp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - const struct sockaddr* addr, - unsigned int addrlen, - uv_udp_send_cb send_cb) { - int err; - int empty_queue; - - assert(nbufs > 0); - - if (addr) { - err = uv__udp_maybe_deferred_bind(handle, addr->sa_family, 0); - if (err) - return err; - } - - /* It's legal for send_queue_count > 0 even when the write_queue is empty; - * it means there are error-state requests in the write_completed_queue that - * will touch up send_queue_size/count later. - */ - empty_queue = (handle->send_queue_count == 0); - - uv__req_init(handle->loop, req, UV_UDP_SEND); - assert(addrlen <= sizeof(req->addr)); - if (addr == NULL) - req->addr.ss_family = AF_UNSPEC; - else - memcpy(&req->addr, addr, addrlen); - req->send_cb = send_cb; - req->handle = handle; - req->nbufs = nbufs; - - req->bufs = req->bufsml; - if (nbufs > ARRAY_SIZE(req->bufsml)) - req->bufs = uv__malloc(nbufs * sizeof(bufs[0])); - - if (req->bufs == NULL) { - uv__req_unregister(handle->loop, req); - return UV_ENOMEM; - } - - memcpy(req->bufs, bufs, nbufs * sizeof(bufs[0])); - handle->send_queue_size += uv__count_bufs(req->bufs, req->nbufs); - handle->send_queue_count++; - QUEUE_INSERT_TAIL(&handle->write_queue, &req->queue); - uv__handle_start(handle); - - if (empty_queue && !(handle->flags & UV_HANDLE_UDP_PROCESSING)) { - uv__udp_sendmsg(handle); - - /* `uv__udp_sendmsg` may not be able to do non-blocking write straight - * away. In such cases the `io_watcher` has to be queued for asynchronous - * write. - */ - if (!QUEUE_EMPTY(&handle->write_queue)) - uv__io_start(handle->loop, &handle->io_watcher, POLLOUT); - } else { - uv__io_start(handle->loop, &handle->io_watcher, POLLOUT); - } - - return 0; -} - - -int uv__udp_try_send(uv_udp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - const struct sockaddr* addr, - unsigned int addrlen) { - int err; - struct msghdr h; - ssize_t size; - - assert(nbufs > 0); - - /* already sending a message */ - if (handle->send_queue_count != 0) - return UV_EAGAIN; - - if (addr) { - err = uv__udp_maybe_deferred_bind(handle, addr->sa_family, 0); - if (err) - return err; - } else { - assert(handle->flags & UV_HANDLE_UDP_CONNECTED); - } - - memset(&h, 0, sizeof h); - h.msg_name = (struct sockaddr*) addr; - h.msg_namelen = addrlen; - h.msg_iov = (struct iovec*) bufs; - h.msg_iovlen = nbufs; - - do { - size = sendmsg(handle->io_watcher.fd, &h, 0); - } while (size == -1 && errno == EINTR); - - if (size == -1) { - if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS) - return UV_EAGAIN; - else - return UV__ERR(errno); - } - - return size; -} - - -static int uv__udp_set_membership4(uv_udp_t* handle, - const struct sockaddr_in* multicast_addr, - const char* interface_addr, - uv_membership membership) { - struct ip_mreq mreq; - int optname; - int err; - - memset(&mreq, 0, sizeof mreq); - - if (interface_addr) { - err = uv_inet_pton(AF_INET, interface_addr, &mreq.imr_interface.s_addr); - if (err) - return err; - } else { - mreq.imr_interface.s_addr = htonl(INADDR_ANY); - } - - mreq.imr_multiaddr.s_addr = multicast_addr->sin_addr.s_addr; - - switch (membership) { - case UV_JOIN_GROUP: - optname = IP_ADD_MEMBERSHIP; - break; - case UV_LEAVE_GROUP: - optname = IP_DROP_MEMBERSHIP; - break; - default: - return UV_EINVAL; - } - - if (setsockopt(handle->io_watcher.fd, - IPPROTO_IP, - optname, - &mreq, - sizeof(mreq))) { -#if defined(__MVS__) - if (errno == ENXIO) - return UV_ENODEV; -#endif - return UV__ERR(errno); - } - - return 0; -} - - -static int uv__udp_set_membership6(uv_udp_t* handle, - const struct sockaddr_in6* multicast_addr, - const char* interface_addr, - uv_membership membership) { - int optname; - struct ipv6_mreq mreq; - struct sockaddr_in6 addr6; - - memset(&mreq, 0, sizeof mreq); - - if (interface_addr) { - if (uv_ip6_addr(interface_addr, 0, &addr6)) - return UV_EINVAL; - mreq.ipv6mr_interface = addr6.sin6_scope_id; - } else { - mreq.ipv6mr_interface = 0; - } - - mreq.ipv6mr_multiaddr = multicast_addr->sin6_addr; - - switch (membership) { - case UV_JOIN_GROUP: - optname = IPV6_ADD_MEMBERSHIP; - break; - case UV_LEAVE_GROUP: - optname = IPV6_DROP_MEMBERSHIP; - break; - default: - return UV_EINVAL; - } - - if (setsockopt(handle->io_watcher.fd, - IPPROTO_IPV6, - optname, - &mreq, - sizeof(mreq))) { -#if defined(__MVS__) - if (errno == ENXIO) - return UV_ENODEV; -#endif - return UV__ERR(errno); - } - - return 0; -} - - -#if !defined(__OpenBSD__) && \ - !defined(__NetBSD__) && \ - !defined(__ANDROID__) && \ - !defined(__DragonFly__) & \ - !defined(__QNX__) -static int uv__udp_set_source_membership4(uv_udp_t* handle, - const struct sockaddr_in* multicast_addr, - const char* interface_addr, - const struct sockaddr_in* source_addr, - uv_membership membership) { - struct ip_mreq_source mreq; - int optname; - int err; - - err = uv__udp_maybe_deferred_bind(handle, AF_INET, UV_UDP_REUSEADDR); - if (err) - return err; - - memset(&mreq, 0, sizeof(mreq)); - - if (interface_addr != NULL) { - err = uv_inet_pton(AF_INET, interface_addr, &mreq.imr_interface.s_addr); - if (err) - return err; - } else { - mreq.imr_interface.s_addr = htonl(INADDR_ANY); - } - - mreq.imr_multiaddr.s_addr = multicast_addr->sin_addr.s_addr; - mreq.imr_sourceaddr.s_addr = source_addr->sin_addr.s_addr; - - if (membership == UV_JOIN_GROUP) - optname = IP_ADD_SOURCE_MEMBERSHIP; - else if (membership == UV_LEAVE_GROUP) - optname = IP_DROP_SOURCE_MEMBERSHIP; - else - return UV_EINVAL; - - if (setsockopt(handle->io_watcher.fd, - IPPROTO_IP, - optname, - &mreq, - sizeof(mreq))) { - return UV__ERR(errno); - } - - return 0; -} - - -static int uv__udp_set_source_membership6(uv_udp_t* handle, - const struct sockaddr_in6* multicast_addr, - const char* interface_addr, - const struct sockaddr_in6* source_addr, - uv_membership membership) { - struct group_source_req mreq; - struct sockaddr_in6 addr6; - int optname; - int err; - - err = uv__udp_maybe_deferred_bind(handle, AF_INET6, UV_UDP_REUSEADDR); - if (err) - return err; - - memset(&mreq, 0, sizeof(mreq)); - - if (interface_addr != NULL) { - err = uv_ip6_addr(interface_addr, 0, &addr6); - if (err) - return err; - mreq.gsr_interface = addr6.sin6_scope_id; - } else { - mreq.gsr_interface = 0; - } - - STATIC_ASSERT(sizeof(mreq.gsr_group) >= sizeof(*multicast_addr)); - STATIC_ASSERT(sizeof(mreq.gsr_source) >= sizeof(*source_addr)); - memcpy(&mreq.gsr_group, multicast_addr, sizeof(*multicast_addr)); - memcpy(&mreq.gsr_source, source_addr, sizeof(*source_addr)); - - if (membership == UV_JOIN_GROUP) - optname = MCAST_JOIN_SOURCE_GROUP; - else if (membership == UV_LEAVE_GROUP) - optname = MCAST_LEAVE_SOURCE_GROUP; - else - return UV_EINVAL; - - if (setsockopt(handle->io_watcher.fd, - IPPROTO_IPV6, - optname, - &mreq, - sizeof(mreq))) { - return UV__ERR(errno); - } - - return 0; -} -#endif - - -int uv__udp_init_ex(uv_loop_t* loop, - uv_udp_t* handle, - unsigned flags, - int domain) { - int fd; - - fd = -1; - if (domain != AF_UNSPEC) { - fd = uv__socket(domain, SOCK_DGRAM, 0); - if (fd < 0) - return fd; - } - - uv__handle_init(loop, (uv_handle_t*)handle, UV_UDP); - handle->alloc_cb = NULL; - handle->recv_cb = NULL; - handle->send_queue_size = 0; - handle->send_queue_count = 0; - uv__io_init(&handle->io_watcher, uv__udp_io, fd); - QUEUE_INIT(&handle->write_queue); - QUEUE_INIT(&handle->write_completed_queue); - - return 0; -} - - -int uv_udp_using_recvmmsg(const uv_udp_t* handle) { -#if HAVE_MMSG - if (handle->flags & UV_HANDLE_UDP_RECVMMSG) { - uv_once(&once, uv__udp_mmsg_init); - return uv__recvmmsg_avail; - } -#endif - return 0; -} - - -int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) { - int err; - - /* Check for already active socket. */ - if (handle->io_watcher.fd != -1) - return UV_EBUSY; - - if (uv__fd_exists(handle->loop, sock)) - return UV_EEXIST; - - err = uv__nonblock(sock, 1); - if (err) - return err; - - err = uv__set_reuse(sock); - if (err) - return err; - - handle->io_watcher.fd = sock; - if (uv__udp_is_connected(handle)) - handle->flags |= UV_HANDLE_UDP_CONNECTED; - - return 0; -} - - -int uv_udp_set_membership(uv_udp_t* handle, - const char* multicast_addr, - const char* interface_addr, - uv_membership membership) { - int err; - struct sockaddr_in addr4; - struct sockaddr_in6 addr6; - - if (uv_ip4_addr(multicast_addr, 0, &addr4) == 0) { - err = uv__udp_maybe_deferred_bind(handle, AF_INET, UV_UDP_REUSEADDR); - if (err) - return err; - return uv__udp_set_membership4(handle, &addr4, interface_addr, membership); - } else if (uv_ip6_addr(multicast_addr, 0, &addr6) == 0) { - err = uv__udp_maybe_deferred_bind(handle, AF_INET6, UV_UDP_REUSEADDR); - if (err) - return err; - return uv__udp_set_membership6(handle, &addr6, interface_addr, membership); - } else { - return UV_EINVAL; - } -} - - -int uv_udp_set_source_membership(uv_udp_t* handle, - const char* multicast_addr, - const char* interface_addr, - const char* source_addr, - uv_membership membership) { -#if !defined(__OpenBSD__) && \ - !defined(__NetBSD__) && \ - !defined(__ANDROID__) && \ - !defined(__DragonFly__) && \ - !defined(__QNX__) - int err; - union uv__sockaddr mcast_addr; - union uv__sockaddr src_addr; - - err = uv_ip4_addr(multicast_addr, 0, &mcast_addr.in); - if (err) { - err = uv_ip6_addr(multicast_addr, 0, &mcast_addr.in6); - if (err) - return err; - err = uv_ip6_addr(source_addr, 0, &src_addr.in6); - if (err) - return err; - return uv__udp_set_source_membership6(handle, - &mcast_addr.in6, - interface_addr, - &src_addr.in6, - membership); - } - - err = uv_ip4_addr(source_addr, 0, &src_addr.in); - if (err) - return err; - return uv__udp_set_source_membership4(handle, - &mcast_addr.in, - interface_addr, - &src_addr.in, - membership); -#else - return UV_ENOSYS; -#endif -} - - -static int uv__setsockopt(uv_udp_t* handle, - int option4, - int option6, - const void* val, - socklen_t size) { - int r; - - if (handle->flags & UV_HANDLE_IPV6) - r = setsockopt(handle->io_watcher.fd, - IPPROTO_IPV6, - option6, - val, - size); - else - r = setsockopt(handle->io_watcher.fd, - IPPROTO_IP, - option4, - val, - size); - if (r) - return UV__ERR(errno); - - return 0; -} - -static int uv__setsockopt_maybe_char(uv_udp_t* handle, - int option4, - int option6, - int val) { -#if defined(__sun) || defined(_AIX) || defined(__MVS__) - char arg = val; -#elif defined(__OpenBSD__) - unsigned char arg = val; -#else - int arg = val; -#endif - - if (val < 0 || val > 255) - return UV_EINVAL; - - return uv__setsockopt(handle, option4, option6, &arg, sizeof(arg)); -} - - -int uv_udp_set_broadcast(uv_udp_t* handle, int on) { - if (setsockopt(handle->io_watcher.fd, - SOL_SOCKET, - SO_BROADCAST, - &on, - sizeof(on))) { - return UV__ERR(errno); - } - - return 0; -} - - -int uv_udp_set_ttl(uv_udp_t* handle, int ttl) { - if (ttl < 1 || ttl > 255) - return UV_EINVAL; - -#if defined(__MVS__) - if (!(handle->flags & UV_HANDLE_IPV6)) - return UV_ENOTSUP; /* zOS does not support setting ttl for IPv4 */ -#endif - -/* - * On Solaris and derivatives such as SmartOS, the length of socket options - * is sizeof(int) for IP_TTL and IPV6_UNICAST_HOPS, - * so hardcode the size of these options on this platform, - * and use the general uv__setsockopt_maybe_char call on other platforms. - */ -#if defined(__sun) || defined(_AIX) || defined(__OpenBSD__) || \ - defined(__MVS__) || defined(__QNX__) - - return uv__setsockopt(handle, - IP_TTL, - IPV6_UNICAST_HOPS, - &ttl, - sizeof(ttl)); - -#else /* !(defined(__sun) || defined(_AIX) || defined (__OpenBSD__) || - defined(__MVS__) || defined(__QNX__)) */ - - return uv__setsockopt_maybe_char(handle, - IP_TTL, - IPV6_UNICAST_HOPS, - ttl); - -#endif /* defined(__sun) || defined(_AIX) || defined (__OpenBSD__) || - defined(__MVS__) || defined(__QNX__) */ -} - - -int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl) { -/* - * On Solaris and derivatives such as SmartOS, the length of socket options - * is sizeof(int) for IPV6_MULTICAST_HOPS and sizeof(char) for - * IP_MULTICAST_TTL, so hardcode the size of the option in the IPv6 case, - * and use the general uv__setsockopt_maybe_char call otherwise. - */ -#if defined(__sun) || defined(_AIX) || defined(__OpenBSD__) || \ - defined(__MVS__) || defined(__QNX__) - if (handle->flags & UV_HANDLE_IPV6) - return uv__setsockopt(handle, - IP_MULTICAST_TTL, - IPV6_MULTICAST_HOPS, - &ttl, - sizeof(ttl)); -#endif /* defined(__sun) || defined(_AIX) || defined(__OpenBSD__) || \ - defined(__MVS__) || defined(__QNX__) */ - - return uv__setsockopt_maybe_char(handle, - IP_MULTICAST_TTL, - IPV6_MULTICAST_HOPS, - ttl); -} - - -int uv_udp_set_multicast_loop(uv_udp_t* handle, int on) { -/* - * On Solaris and derivatives such as SmartOS, the length of socket options - * is sizeof(int) for IPV6_MULTICAST_LOOP and sizeof(char) for - * IP_MULTICAST_LOOP, so hardcode the size of the option in the IPv6 case, - * and use the general uv__setsockopt_maybe_char call otherwise. - */ -#if defined(__sun) || defined(_AIX) || defined(__OpenBSD__) || \ - defined(__MVS__) || defined(__QNX__) - if (handle->flags & UV_HANDLE_IPV6) - return uv__setsockopt(handle, - IP_MULTICAST_LOOP, - IPV6_MULTICAST_LOOP, - &on, - sizeof(on)); -#endif /* defined(__sun) || defined(_AIX) ||defined(__OpenBSD__) || - defined(__MVS__) || defined(__QNX__) */ - - return uv__setsockopt_maybe_char(handle, - IP_MULTICAST_LOOP, - IPV6_MULTICAST_LOOP, - on); -} - -int uv_udp_set_multicast_interface(uv_udp_t* handle, const char* interface_addr) { - struct sockaddr_storage addr_st; - struct sockaddr_in* addr4; - struct sockaddr_in6* addr6; - - addr4 = (struct sockaddr_in*) &addr_st; - addr6 = (struct sockaddr_in6*) &addr_st; - - if (!interface_addr) { - memset(&addr_st, 0, sizeof addr_st); - if (handle->flags & UV_HANDLE_IPV6) { - addr_st.ss_family = AF_INET6; - addr6->sin6_scope_id = 0; - } else { - addr_st.ss_family = AF_INET; - addr4->sin_addr.s_addr = htonl(INADDR_ANY); - } - } else if (uv_ip4_addr(interface_addr, 0, addr4) == 0) { - /* nothing, address was parsed */ - } else if (uv_ip6_addr(interface_addr, 0, addr6) == 0) { - /* nothing, address was parsed */ - } else { - return UV_EINVAL; - } - - if (addr_st.ss_family == AF_INET) { - if (setsockopt(handle->io_watcher.fd, - IPPROTO_IP, - IP_MULTICAST_IF, - (void*) &addr4->sin_addr, - sizeof(addr4->sin_addr)) == -1) { - return UV__ERR(errno); - } - } else if (addr_st.ss_family == AF_INET6) { - if (setsockopt(handle->io_watcher.fd, - IPPROTO_IPV6, - IPV6_MULTICAST_IF, - &addr6->sin6_scope_id, - sizeof(addr6->sin6_scope_id)) == -1) { - return UV__ERR(errno); - } - } else { - assert(0 && "unexpected address family"); - abort(); - } - - return 0; -} - -int uv_udp_getpeername(const uv_udp_t* handle, - struct sockaddr* name, - int* namelen) { - - return uv__getsockpeername((const uv_handle_t*) handle, - getpeername, - name, - namelen); -} - -int uv_udp_getsockname(const uv_udp_t* handle, - struct sockaddr* name, - int* namelen) { - - return uv__getsockpeername((const uv_handle_t*) handle, - getsockname, - name, - namelen); -} - - -int uv__udp_recv_start(uv_udp_t* handle, - uv_alloc_cb alloc_cb, - uv_udp_recv_cb recv_cb) { - int err; - - if (alloc_cb == NULL || recv_cb == NULL) - return UV_EINVAL; - - if (uv__io_active(&handle->io_watcher, POLLIN)) - return UV_EALREADY; /* FIXME(bnoordhuis) Should be UV_EBUSY. */ - - err = uv__udp_maybe_deferred_bind(handle, AF_INET, 0); - if (err) - return err; - - handle->alloc_cb = alloc_cb; - handle->recv_cb = recv_cb; - - uv__io_start(handle->loop, &handle->io_watcher, POLLIN); - uv__handle_start(handle); - - return 0; -} - - -int uv__udp_recv_stop(uv_udp_t* handle) { - uv__io_stop(handle->loop, &handle->io_watcher, POLLIN); - - if (!uv__io_active(&handle->io_watcher, POLLOUT)) - uv__handle_stop(handle); - - handle->alloc_cb = NULL; - handle->recv_cb = NULL; - - return 0; -} diff --git a/libuv/src/uv-common.c b/libuv/src/uv-common.c deleted file mode 100644 index e81ed79..0000000 --- a/libuv/src/uv-common.c +++ /dev/null @@ -1,951 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "uv-common.h" - -#include -#include -#include -#include /* NULL */ -#include -#include /* malloc */ -#include /* memset */ - -#if defined(_WIN32) -# include /* malloc */ -#else -# include /* if_nametoindex */ -# include /* AF_UNIX, sockaddr_un */ -#endif - - -typedef struct { - uv_malloc_func local_malloc; - uv_realloc_func local_realloc; - uv_calloc_func local_calloc; - uv_free_func local_free; -} uv__allocator_t; - -static uv__allocator_t uv__allocator = { - malloc, - realloc, - calloc, - free, -}; - -char* uv__strdup(const char* s) { - size_t len = strlen(s) + 1; - char* m = uv__malloc(len); - if (m == NULL) - return NULL; - return memcpy(m, s, len); -} - -char* uv__strndup(const char* s, size_t n) { - char* m; - size_t len = strlen(s); - if (n < len) - len = n; - m = uv__malloc(len + 1); - if (m == NULL) - return NULL; - m[len] = '\0'; - return memcpy(m, s, len); -} - -void* uv__malloc(size_t size) { - if (size > 0) - return uv__allocator.local_malloc(size); - return NULL; -} - -void uv__free(void* ptr) { - int saved_errno; - - /* Libuv expects that free() does not clobber errno. The system allocator - * honors that assumption but custom allocators may not be so careful. - */ - saved_errno = errno; - uv__allocator.local_free(ptr); - errno = saved_errno; -} - -void* uv__calloc(size_t count, size_t size) { - return uv__allocator.local_calloc(count, size); -} - -void* uv__realloc(void* ptr, size_t size) { - if (size > 0) - return uv__allocator.local_realloc(ptr, size); - uv__free(ptr); - return NULL; -} - -void* uv__reallocf(void* ptr, size_t size) { - void* newptr; - - newptr = uv__realloc(ptr, size); - if (newptr == NULL) - if (size > 0) - uv__free(ptr); - - return newptr; -} - -int uv_replace_allocator(uv_malloc_func malloc_func, - uv_realloc_func realloc_func, - uv_calloc_func calloc_func, - uv_free_func free_func) { - if (malloc_func == NULL || realloc_func == NULL || - calloc_func == NULL || free_func == NULL) { - return UV_EINVAL; - } - - uv__allocator.local_malloc = malloc_func; - uv__allocator.local_realloc = realloc_func; - uv__allocator.local_calloc = calloc_func; - uv__allocator.local_free = free_func; - - return 0; -} - -#define XX(uc, lc) case UV_##uc: return sizeof(uv_##lc##_t); - -size_t uv_handle_size(uv_handle_type type) { - switch (type) { - UV_HANDLE_TYPE_MAP(XX) - default: - return -1; - } -} - -size_t uv_req_size(uv_req_type type) { - switch(type) { - UV_REQ_TYPE_MAP(XX) - default: - return -1; - } -} - -#undef XX - - -size_t uv_loop_size(void) { - return sizeof(uv_loop_t); -} - - -uv_buf_t uv_buf_init(char* base, unsigned int len) { - uv_buf_t buf; - buf.base = base; - buf.len = len; - return buf; -} - - -static const char* uv__unknown_err_code(int err) { - char buf[32]; - char* copy; - - snprintf(buf, sizeof(buf), "Unknown system error %d", err); - copy = uv__strdup(buf); - - return copy != NULL ? copy : "Unknown system error"; -} - -#define UV_ERR_NAME_GEN_R(name, _) \ -case UV_## name: \ - uv__strscpy(buf, #name, buflen); break; -char* uv_err_name_r(int err, char* buf, size_t buflen) { - switch (err) { - UV_ERRNO_MAP(UV_ERR_NAME_GEN_R) - default: snprintf(buf, buflen, "Unknown system error %d", err); - } - return buf; -} -#undef UV_ERR_NAME_GEN_R - - -#define UV_ERR_NAME_GEN(name, _) case UV_ ## name: return #name; -const char* uv_err_name(int err) { - switch (err) { - UV_ERRNO_MAP(UV_ERR_NAME_GEN) - } - return uv__unknown_err_code(err); -} -#undef UV_ERR_NAME_GEN - - -#define UV_STRERROR_GEN_R(name, msg) \ -case UV_ ## name: \ - snprintf(buf, buflen, "%s", msg); break; -char* uv_strerror_r(int err, char* buf, size_t buflen) { - switch (err) { - UV_ERRNO_MAP(UV_STRERROR_GEN_R) - default: snprintf(buf, buflen, "Unknown system error %d", err); - } - return buf; -} -#undef UV_STRERROR_GEN_R - - -#define UV_STRERROR_GEN(name, msg) case UV_ ## name: return msg; -const char* uv_strerror(int err) { - switch (err) { - UV_ERRNO_MAP(UV_STRERROR_GEN) - } - return uv__unknown_err_code(err); -} -#undef UV_STRERROR_GEN - - -int uv_ip4_addr(const char* ip, int port, struct sockaddr_in* addr) { - memset(addr, 0, sizeof(*addr)); - addr->sin_family = AF_INET; - addr->sin_port = htons(port); -#ifdef SIN6_LEN - addr->sin_len = sizeof(*addr); -#endif - return uv_inet_pton(AF_INET, ip, &(addr->sin_addr.s_addr)); -} - - -int uv_ip6_addr(const char* ip, int port, struct sockaddr_in6* addr) { - char address_part[40]; - size_t address_part_size; - const char* zone_index; - - memset(addr, 0, sizeof(*addr)); - addr->sin6_family = AF_INET6; - addr->sin6_port = htons(port); -#ifdef SIN6_LEN - addr->sin6_len = sizeof(*addr); -#endif - - zone_index = strchr(ip, '%'); - if (zone_index != NULL) { - address_part_size = zone_index - ip; - if (address_part_size >= sizeof(address_part)) - address_part_size = sizeof(address_part) - 1; - - memcpy(address_part, ip, address_part_size); - address_part[address_part_size] = '\0'; - ip = address_part; - - zone_index++; /* skip '%' */ - /* NOTE: unknown interface (id=0) is silently ignored */ -#ifdef _WIN32 - addr->sin6_scope_id = atoi(zone_index); -#else - addr->sin6_scope_id = if_nametoindex(zone_index); -#endif - } - - return uv_inet_pton(AF_INET6, ip, &addr->sin6_addr); -} - - -int uv_ip4_name(const struct sockaddr_in* src, char* dst, size_t size) { - return uv_inet_ntop(AF_INET, &src->sin_addr, dst, size); -} - - -int uv_ip6_name(const struct sockaddr_in6* src, char* dst, size_t size) { - return uv_inet_ntop(AF_INET6, &src->sin6_addr, dst, size); -} - - -int uv_tcp_bind(uv_tcp_t* handle, - const struct sockaddr* addr, - unsigned int flags) { - unsigned int addrlen; - - if (handle->type != UV_TCP) - return UV_EINVAL; - - if (addr->sa_family == AF_INET) - addrlen = sizeof(struct sockaddr_in); - else if (addr->sa_family == AF_INET6) - addrlen = sizeof(struct sockaddr_in6); - else - return UV_EINVAL; - - return uv__tcp_bind(handle, addr, addrlen, flags); -} - - -int uv_udp_init_ex(uv_loop_t* loop, uv_udp_t* handle, unsigned flags) { - unsigned extra_flags; - int domain; - int rc; - - /* Use the lower 8 bits for the domain. */ - domain = flags & 0xFF; - if (domain != AF_INET && domain != AF_INET6 && domain != AF_UNSPEC) - return UV_EINVAL; - - /* Use the higher bits for extra flags. */ - extra_flags = flags & ~0xFF; - if (extra_flags & ~UV_UDP_RECVMMSG) - return UV_EINVAL; - - rc = uv__udp_init_ex(loop, handle, flags, domain); - - if (rc == 0) - if (extra_flags & UV_UDP_RECVMMSG) - handle->flags |= UV_HANDLE_UDP_RECVMMSG; - - return rc; -} - - -int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle) { - return uv_udp_init_ex(loop, handle, AF_UNSPEC); -} - - -int uv_udp_bind(uv_udp_t* handle, - const struct sockaddr* addr, - unsigned int flags) { - unsigned int addrlen; - - if (handle->type != UV_UDP) - return UV_EINVAL; - - if (addr->sa_family == AF_INET) - addrlen = sizeof(struct sockaddr_in); - else if (addr->sa_family == AF_INET6) - addrlen = sizeof(struct sockaddr_in6); - else - return UV_EINVAL; - - return uv__udp_bind(handle, addr, addrlen, flags); -} - - -int uv_tcp_connect(uv_connect_t* req, - uv_tcp_t* handle, - const struct sockaddr* addr, - uv_connect_cb cb) { - unsigned int addrlen; - - if (handle->type != UV_TCP) - return UV_EINVAL; - - if (addr->sa_family == AF_INET) - addrlen = sizeof(struct sockaddr_in); - else if (addr->sa_family == AF_INET6) - addrlen = sizeof(struct sockaddr_in6); - else - return UV_EINVAL; - - return uv__tcp_connect(req, handle, addr, addrlen, cb); -} - - -int uv_udp_connect(uv_udp_t* handle, const struct sockaddr* addr) { - unsigned int addrlen; - - if (handle->type != UV_UDP) - return UV_EINVAL; - - /* Disconnect the handle */ - if (addr == NULL) { - if (!(handle->flags & UV_HANDLE_UDP_CONNECTED)) - return UV_ENOTCONN; - - return uv__udp_disconnect(handle); - } - - if (addr->sa_family == AF_INET) - addrlen = sizeof(struct sockaddr_in); - else if (addr->sa_family == AF_INET6) - addrlen = sizeof(struct sockaddr_in6); - else - return UV_EINVAL; - - if (handle->flags & UV_HANDLE_UDP_CONNECTED) - return UV_EISCONN; - - return uv__udp_connect(handle, addr, addrlen); -} - - -int uv__udp_is_connected(uv_udp_t* handle) { - struct sockaddr_storage addr; - int addrlen; - if (handle->type != UV_UDP) - return 0; - - addrlen = sizeof(addr); - if (uv_udp_getpeername(handle, (struct sockaddr*) &addr, &addrlen) != 0) - return 0; - - return addrlen > 0; -} - - -int uv__udp_check_before_send(uv_udp_t* handle, const struct sockaddr* addr) { - unsigned int addrlen; - - if (handle->type != UV_UDP) - return UV_EINVAL; - - if (addr != NULL && (handle->flags & UV_HANDLE_UDP_CONNECTED)) - return UV_EISCONN; - - if (addr == NULL && !(handle->flags & UV_HANDLE_UDP_CONNECTED)) - return UV_EDESTADDRREQ; - - if (addr != NULL) { - if (addr->sa_family == AF_INET) - addrlen = sizeof(struct sockaddr_in); - else if (addr->sa_family == AF_INET6) - addrlen = sizeof(struct sockaddr_in6); -#if defined(AF_UNIX) && !defined(_WIN32) - else if (addr->sa_family == AF_UNIX) - addrlen = sizeof(struct sockaddr_un); -#endif - else - return UV_EINVAL; - } else { - addrlen = 0; - } - - return addrlen; -} - - -int uv_udp_send(uv_udp_send_t* req, - uv_udp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - const struct sockaddr* addr, - uv_udp_send_cb send_cb) { - int addrlen; - - addrlen = uv__udp_check_before_send(handle, addr); - if (addrlen < 0) - return addrlen; - - return uv__udp_send(req, handle, bufs, nbufs, addr, addrlen, send_cb); -} - - -int uv_udp_try_send(uv_udp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - const struct sockaddr* addr) { - int addrlen; - - addrlen = uv__udp_check_before_send(handle, addr); - if (addrlen < 0) - return addrlen; - - return uv__udp_try_send(handle, bufs, nbufs, addr, addrlen); -} - - -int uv_udp_recv_start(uv_udp_t* handle, - uv_alloc_cb alloc_cb, - uv_udp_recv_cb recv_cb) { - if (handle->type != UV_UDP || alloc_cb == NULL || recv_cb == NULL) - return UV_EINVAL; - else - return uv__udp_recv_start(handle, alloc_cb, recv_cb); -} - - -int uv_udp_recv_stop(uv_udp_t* handle) { - if (handle->type != UV_UDP) - return UV_EINVAL; - else - return uv__udp_recv_stop(handle); -} - - -void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) { - QUEUE queue; - QUEUE* q; - uv_handle_t* h; - - QUEUE_MOVE(&loop->handle_queue, &queue); - while (!QUEUE_EMPTY(&queue)) { - q = QUEUE_HEAD(&queue); - h = QUEUE_DATA(q, uv_handle_t, handle_queue); - - QUEUE_REMOVE(q); - QUEUE_INSERT_TAIL(&loop->handle_queue, q); - - if (h->flags & UV_HANDLE_INTERNAL) continue; - walk_cb(h, arg); - } -} - - -static void uv__print_handles(uv_loop_t* loop, int only_active, FILE* stream) { - const char* type; - QUEUE* q; - uv_handle_t* h; - - if (loop == NULL) - loop = uv_default_loop(); - - QUEUE_FOREACH(q, &loop->handle_queue) { - h = QUEUE_DATA(q, uv_handle_t, handle_queue); - - if (only_active && !uv__is_active(h)) - continue; - - switch (h->type) { -#define X(uc, lc) case UV_##uc: type = #lc; break; - UV_HANDLE_TYPE_MAP(X) -#undef X - default: type = ""; - } - - fprintf(stream, - "[%c%c%c] %-8s %p\n", - "R-"[!(h->flags & UV_HANDLE_REF)], - "A-"[!(h->flags & UV_HANDLE_ACTIVE)], - "I-"[!(h->flags & UV_HANDLE_INTERNAL)], - type, - (void*)h); - } -} - - -void uv_print_all_handles(uv_loop_t* loop, FILE* stream) { - uv__print_handles(loop, 0, stream); -} - - -void uv_print_active_handles(uv_loop_t* loop, FILE* stream) { - uv__print_handles(loop, 1, stream); -} - - -void uv_ref(uv_handle_t* handle) { - uv__handle_ref(handle); -} - - -void uv_unref(uv_handle_t* handle) { - uv__handle_unref(handle); -} - - -int uv_has_ref(const uv_handle_t* handle) { - return uv__has_ref(handle); -} - - -void uv_stop(uv_loop_t* loop) { - loop->stop_flag = 1; -} - - -uint64_t uv_now(const uv_loop_t* loop) { - return loop->time; -} - - - -size_t uv__count_bufs(const uv_buf_t bufs[], unsigned int nbufs) { - unsigned int i; - size_t bytes; - - bytes = 0; - for (i = 0; i < nbufs; i++) - bytes += (size_t) bufs[i].len; - - return bytes; -} - -int uv_recv_buffer_size(uv_handle_t* handle, int* value) { - return uv__socket_sockopt(handle, SO_RCVBUF, value); -} - -int uv_send_buffer_size(uv_handle_t* handle, int *value) { - return uv__socket_sockopt(handle, SO_SNDBUF, value); -} - -int uv_fs_event_getpath(uv_fs_event_t* handle, char* buffer, size_t* size) { - size_t required_len; - - if (!uv__is_active(handle)) { - *size = 0; - return UV_EINVAL; - } - - required_len = strlen(handle->path); - if (required_len >= *size) { - *size = required_len + 1; - return UV_ENOBUFS; - } - - memcpy(buffer, handle->path, required_len); - *size = required_len; - buffer[required_len] = '\0'; - - return 0; -} - -/* The windows implementation does not have the same structure layout as - * the unix implementation (nbufs is not directly inside req but is - * contained in a nested union/struct) so this function locates it. -*/ -static unsigned int* uv__get_nbufs(uv_fs_t* req) { -#ifdef _WIN32 - return &req->fs.info.nbufs; -#else - return &req->nbufs; -#endif -} - -/* uv_fs_scandir() uses the system allocator to allocate memory on non-Windows - * systems. So, the memory should be released using free(). On Windows, - * uv__malloc() is used, so use uv__free() to free memory. -*/ -#ifdef _WIN32 -# define uv__fs_scandir_free uv__free -#else -# define uv__fs_scandir_free free -#endif - -void uv__fs_scandir_cleanup(uv_fs_t* req) { - uv__dirent_t** dents; - - unsigned int* nbufs = uv__get_nbufs(req); - - dents = req->ptr; - if (*nbufs > 0 && *nbufs != (unsigned int) req->result) - (*nbufs)--; - for (; *nbufs < (unsigned int) req->result; (*nbufs)++) - uv__fs_scandir_free(dents[*nbufs]); - - uv__fs_scandir_free(req->ptr); - req->ptr = NULL; -} - - -int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent) { - uv__dirent_t** dents; - uv__dirent_t* dent; - unsigned int* nbufs; - - /* Check to see if req passed */ - if (req->result < 0) - return req->result; - - /* Ptr will be null if req was canceled or no files found */ - if (!req->ptr) - return UV_EOF; - - nbufs = uv__get_nbufs(req); - assert(nbufs); - - dents = req->ptr; - - /* Free previous entity */ - if (*nbufs > 0) - uv__fs_scandir_free(dents[*nbufs - 1]); - - /* End was already reached */ - if (*nbufs == (unsigned int) req->result) { - uv__fs_scandir_free(dents); - req->ptr = NULL; - return UV_EOF; - } - - dent = dents[(*nbufs)++]; - - ent->name = dent->d_name; - ent->type = uv__fs_get_dirent_type(dent); - - return 0; -} - -uv_dirent_type_t uv__fs_get_dirent_type(uv__dirent_t* dent) { - uv_dirent_type_t type; - -#ifdef HAVE_DIRENT_TYPES - switch (dent->d_type) { - case UV__DT_DIR: - type = UV_DIRENT_DIR; - break; - case UV__DT_FILE: - type = UV_DIRENT_FILE; - break; - case UV__DT_LINK: - type = UV_DIRENT_LINK; - break; - case UV__DT_FIFO: - type = UV_DIRENT_FIFO; - break; - case UV__DT_SOCKET: - type = UV_DIRENT_SOCKET; - break; - case UV__DT_CHAR: - type = UV_DIRENT_CHAR; - break; - case UV__DT_BLOCK: - type = UV_DIRENT_BLOCK; - break; - default: - type = UV_DIRENT_UNKNOWN; - } -#else - type = UV_DIRENT_UNKNOWN; -#endif - - return type; -} - -void uv__fs_readdir_cleanup(uv_fs_t* req) { - uv_dir_t* dir; - uv_dirent_t* dirents; - int i; - - if (req->ptr == NULL) - return; - - dir = req->ptr; - dirents = dir->dirents; - req->ptr = NULL; - - if (dirents == NULL) - return; - - for (i = 0; i < req->result; ++i) { - uv__free((char*) dirents[i].name); - dirents[i].name = NULL; - } -} - - -int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...) { - va_list ap; - int err; - - va_start(ap, option); - /* Any platform-agnostic options should be handled here. */ - err = uv__loop_configure(loop, option, ap); - va_end(ap); - - return err; -} - - -static uv_loop_t default_loop_struct; -static uv_loop_t* default_loop_ptr; - - -uv_loop_t* uv_default_loop(void) { - if (default_loop_ptr != NULL) - return default_loop_ptr; - - if (uv_loop_init(&default_loop_struct)) - return NULL; - - default_loop_ptr = &default_loop_struct; - return default_loop_ptr; -} - - -uv_loop_t* uv_loop_new(void) { - uv_loop_t* loop; - - loop = uv__malloc(sizeof(*loop)); - if (loop == NULL) - return NULL; - - if (uv_loop_init(loop)) { - uv__free(loop); - return NULL; - } - - return loop; -} - - -int uv_loop_close(uv_loop_t* loop) { - QUEUE* q; - uv_handle_t* h; -#ifndef NDEBUG - void* saved_data; -#endif - - if (uv__has_active_reqs(loop)) - return UV_EBUSY; - - QUEUE_FOREACH(q, &loop->handle_queue) { - h = QUEUE_DATA(q, uv_handle_t, handle_queue); - if (!(h->flags & UV_HANDLE_INTERNAL)) - return UV_EBUSY; - } - - uv__loop_close(loop); - -#ifndef NDEBUG - saved_data = loop->data; - memset(loop, -1, sizeof(*loop)); - loop->data = saved_data; -#endif - if (loop == default_loop_ptr) - default_loop_ptr = NULL; - - return 0; -} - - -void uv_loop_delete(uv_loop_t* loop) { - uv_loop_t* default_loop; - int err; - - default_loop = default_loop_ptr; - - err = uv_loop_close(loop); - (void) err; /* Squelch compiler warnings. */ - assert(err == 0); - if (loop != default_loop) - uv__free(loop); -} - - -int uv_read_start(uv_stream_t* stream, - uv_alloc_cb alloc_cb, - uv_read_cb read_cb) { - if (stream == NULL || alloc_cb == NULL || read_cb == NULL) - return UV_EINVAL; - - if (stream->flags & UV_HANDLE_CLOSING) - return UV_EINVAL; - - if (stream->flags & UV_HANDLE_READING) - return UV_EALREADY; - - if (!(stream->flags & UV_HANDLE_READABLE)) - return UV_ENOTCONN; - - return uv__read_start(stream, alloc_cb, read_cb); -} - - -void uv_os_free_environ(uv_env_item_t* envitems, int count) { - int i; - - for (i = 0; i < count; i++) { - uv__free(envitems[i].name); - } - - uv__free(envitems); -} - - -void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) { - int i; - - for (i = 0; i < count; i++) - uv__free(cpu_infos[i].model); - - uv__free(cpu_infos); -} - - -/* Also covers __clang__ and __INTEL_COMPILER. Disabled on Windows because - * threads have already been forcibly terminated by the operating system - * by the time destructors run, ergo, it's not safe to try to clean them up. - */ -#if defined(__GNUC__) && !defined(_WIN32) -__attribute__((destructor)) -#endif -void uv_library_shutdown(void) { - static int was_shutdown; - - if (uv__load_relaxed(&was_shutdown)) - return; - - uv__process_title_cleanup(); - uv__signal_cleanup(); - uv__threadpool_cleanup(); - uv__store_relaxed(&was_shutdown, 1); -} - - -void uv__metrics_update_idle_time(uv_loop_t* loop) { - uv__loop_metrics_t* loop_metrics; - uint64_t entry_time; - uint64_t exit_time; - - if (!(uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME)) - return; - - loop_metrics = uv__get_loop_metrics(loop); - - /* The thread running uv__metrics_update_idle_time() is always the same - * thread that sets provider_entry_time. So it's unnecessary to lock before - * retrieving this value. - */ - if (loop_metrics->provider_entry_time == 0) - return; - - exit_time = uv_hrtime(); - - uv_mutex_lock(&loop_metrics->lock); - entry_time = loop_metrics->provider_entry_time; - loop_metrics->provider_entry_time = 0; - loop_metrics->provider_idle_time += exit_time - entry_time; - uv_mutex_unlock(&loop_metrics->lock); -} - - -void uv__metrics_set_provider_entry_time(uv_loop_t* loop) { - uv__loop_metrics_t* loop_metrics; - uint64_t now; - - if (!(uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME)) - return; - - now = uv_hrtime(); - loop_metrics = uv__get_loop_metrics(loop); - uv_mutex_lock(&loop_metrics->lock); - loop_metrics->provider_entry_time = now; - uv_mutex_unlock(&loop_metrics->lock); -} - - -uint64_t uv_metrics_idle_time(uv_loop_t* loop) { - uv__loop_metrics_t* loop_metrics; - uint64_t entry_time; - uint64_t idle_time; - - loop_metrics = uv__get_loop_metrics(loop); - uv_mutex_lock(&loop_metrics->lock); - idle_time = loop_metrics->provider_idle_time; - entry_time = loop_metrics->provider_entry_time; - uv_mutex_unlock(&loop_metrics->lock); - - if (entry_time > 0) - idle_time += uv_hrtime() - entry_time; - return idle_time; -} diff --git a/libuv/src/uv-common.h b/libuv/src/uv-common.h deleted file mode 100644 index 8a190bf..0000000 --- a/libuv/src/uv-common.h +++ /dev/null @@ -1,373 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* - * This file is private to libuv. It provides common functionality to both - * Windows and Unix backends. - */ - -#ifndef UV_COMMON_H_ -#define UV_COMMON_H_ - -#include -#include -#include - -#if defined(_MSC_VER) && _MSC_VER < 1600 -# include "uv/stdint-msvc2008.h" -#else -# include -#endif - -#include "uv.h" -#include "uv/tree.h" -#include "queue.h" -#include "strscpy.h" - -#if EDOM > 0 -# define UV__ERR(x) (-(x)) -#else -# define UV__ERR(x) (x) -#endif - -#if !defined(snprintf) && defined(_MSC_VER) && _MSC_VER < 1900 -extern int snprintf(char*, size_t, const char*, ...); -#endif - -#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) - -#define container_of(ptr, type, member) \ - ((type *) ((char *) (ptr) - offsetof(type, member))) - -#define STATIC_ASSERT(expr) \ - void uv__static_assert(int static_assert_failed[1 - 2 * !(expr)]) - -#if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 7) -#define uv__load_relaxed(p) __atomic_load_n(p, __ATOMIC_RELAXED) -#define uv__store_relaxed(p, v) __atomic_store_n(p, v, __ATOMIC_RELAXED) -#else -#define uv__load_relaxed(p) (*p) -#define uv__store_relaxed(p, v) do *p = v; while (0) -#endif - -#define UV__UDP_DGRAM_MAXSIZE (64 * 1024) - -/* Handle flags. Some flags are specific to Windows or UNIX. */ -enum { - /* Used by all handles. */ - UV_HANDLE_CLOSING = 0x00000001, - UV_HANDLE_CLOSED = 0x00000002, - UV_HANDLE_ACTIVE = 0x00000004, - UV_HANDLE_REF = 0x00000008, - UV_HANDLE_INTERNAL = 0x00000010, - UV_HANDLE_ENDGAME_QUEUED = 0x00000020, - - /* Used by streams. */ - UV_HANDLE_LISTENING = 0x00000040, - UV_HANDLE_CONNECTION = 0x00000080, - UV_HANDLE_SHUTTING = 0x00000100, - UV_HANDLE_SHUT = 0x00000200, - UV_HANDLE_READ_PARTIAL = 0x00000400, - UV_HANDLE_READ_EOF = 0x00000800, - - /* Used by streams and UDP handles. */ - UV_HANDLE_READING = 0x00001000, - UV_HANDLE_BOUND = 0x00002000, - UV_HANDLE_READABLE = 0x00004000, - UV_HANDLE_WRITABLE = 0x00008000, - UV_HANDLE_READ_PENDING = 0x00010000, - UV_HANDLE_SYNC_BYPASS_IOCP = 0x00020000, - UV_HANDLE_ZERO_READ = 0x00040000, - UV_HANDLE_EMULATE_IOCP = 0x00080000, - UV_HANDLE_BLOCKING_WRITES = 0x00100000, - UV_HANDLE_CANCELLATION_PENDING = 0x00200000, - - /* Used by uv_tcp_t and uv_udp_t handles */ - UV_HANDLE_IPV6 = 0x00400000, - - /* Only used by uv_tcp_t handles. */ - UV_HANDLE_TCP_NODELAY = 0x01000000, - UV_HANDLE_TCP_KEEPALIVE = 0x02000000, - UV_HANDLE_TCP_SINGLE_ACCEPT = 0x04000000, - UV_HANDLE_TCP_ACCEPT_STATE_CHANGING = 0x08000000, - UV_HANDLE_SHARED_TCP_SOCKET = 0x10000000, - - /* Only used by uv_udp_t handles. */ - UV_HANDLE_UDP_PROCESSING = 0x01000000, - UV_HANDLE_UDP_CONNECTED = 0x02000000, - UV_HANDLE_UDP_RECVMMSG = 0x04000000, - - /* Only used by uv_pipe_t handles. */ - UV_HANDLE_NON_OVERLAPPED_PIPE = 0x01000000, - UV_HANDLE_PIPESERVER = 0x02000000, - - /* Only used by uv_tty_t handles. */ - UV_HANDLE_TTY_READABLE = 0x01000000, - UV_HANDLE_TTY_RAW = 0x02000000, - UV_HANDLE_TTY_SAVED_POSITION = 0x04000000, - UV_HANDLE_TTY_SAVED_ATTRIBUTES = 0x08000000, - - /* Only used by uv_signal_t handles. */ - UV_SIGNAL_ONE_SHOT_DISPATCHED = 0x01000000, - UV_SIGNAL_ONE_SHOT = 0x02000000, - - /* Only used by uv_poll_t handles. */ - UV_HANDLE_POLL_SLOW = 0x01000000 -}; - -int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap); - -void uv__loop_close(uv_loop_t* loop); - -int uv__read_start(uv_stream_t* stream, - uv_alloc_cb alloc_cb, - uv_read_cb read_cb); - -int uv__tcp_bind(uv_tcp_t* tcp, - const struct sockaddr* addr, - unsigned int addrlen, - unsigned int flags); - -int uv__tcp_connect(uv_connect_t* req, - uv_tcp_t* handle, - const struct sockaddr* addr, - unsigned int addrlen, - uv_connect_cb cb); - -int uv__udp_init_ex(uv_loop_t* loop, - uv_udp_t* handle, - unsigned flags, - int domain); - -int uv__udp_bind(uv_udp_t* handle, - const struct sockaddr* addr, - unsigned int addrlen, - unsigned int flags); - -int uv__udp_connect(uv_udp_t* handle, - const struct sockaddr* addr, - unsigned int addrlen); - -int uv__udp_disconnect(uv_udp_t* handle); - -int uv__udp_is_connected(uv_udp_t* handle); - -int uv__udp_send(uv_udp_send_t* req, - uv_udp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - const struct sockaddr* addr, - unsigned int addrlen, - uv_udp_send_cb send_cb); - -int uv__udp_try_send(uv_udp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - const struct sockaddr* addr, - unsigned int addrlen); - -int uv__udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloccb, - uv_udp_recv_cb recv_cb); - -int uv__udp_recv_stop(uv_udp_t* handle); - -void uv__fs_poll_close(uv_fs_poll_t* handle); - -int uv__getaddrinfo_translate_error(int sys_err); /* EAI_* error. */ - -enum uv__work_kind { - UV__WORK_CPU, - UV__WORK_FAST_IO, - UV__WORK_SLOW_IO -}; - -void uv__work_submit(uv_loop_t* loop, - struct uv__work *w, - enum uv__work_kind kind, - void (*work)(struct uv__work *w), - void (*done)(struct uv__work *w, int status)); - -void uv__work_done(uv_async_t* handle); - -size_t uv__count_bufs(const uv_buf_t bufs[], unsigned int nbufs); - -int uv__socket_sockopt(uv_handle_t* handle, int optname, int* value); - -void uv__fs_scandir_cleanup(uv_fs_t* req); -void uv__fs_readdir_cleanup(uv_fs_t* req); -uv_dirent_type_t uv__fs_get_dirent_type(uv__dirent_t* dent); - -int uv__next_timeout(const uv_loop_t* loop); -void uv__run_timers(uv_loop_t* loop); -void uv__timer_close(uv_timer_t* handle); - -void uv__process_title_cleanup(void); -void uv__signal_cleanup(void); -void uv__threadpool_cleanup(void); - -#define uv__has_active_reqs(loop) \ - ((loop)->active_reqs.count > 0) - -#define uv__req_register(loop, req) \ - do { \ - (loop)->active_reqs.count++; \ - } \ - while (0) - -#define uv__req_unregister(loop, req) \ - do { \ - assert(uv__has_active_reqs(loop)); \ - (loop)->active_reqs.count--; \ - } \ - while (0) - -#define uv__has_active_handles(loop) \ - ((loop)->active_handles > 0) - -#define uv__active_handle_add(h) \ - do { \ - (h)->loop->active_handles++; \ - } \ - while (0) - -#define uv__active_handle_rm(h) \ - do { \ - (h)->loop->active_handles--; \ - } \ - while (0) - -#define uv__is_active(h) \ - (((h)->flags & UV_HANDLE_ACTIVE) != 0) - -#define uv__is_closing(h) \ - (((h)->flags & (UV_HANDLE_CLOSING | UV_HANDLE_CLOSED)) != 0) - -#define uv__handle_start(h) \ - do { \ - if (((h)->flags & UV_HANDLE_ACTIVE) != 0) break; \ - (h)->flags |= UV_HANDLE_ACTIVE; \ - if (((h)->flags & UV_HANDLE_REF) != 0) uv__active_handle_add(h); \ - } \ - while (0) - -#define uv__handle_stop(h) \ - do { \ - if (((h)->flags & UV_HANDLE_ACTIVE) == 0) break; \ - (h)->flags &= ~UV_HANDLE_ACTIVE; \ - if (((h)->flags & UV_HANDLE_REF) != 0) uv__active_handle_rm(h); \ - } \ - while (0) - -#define uv__handle_ref(h) \ - do { \ - if (((h)->flags & UV_HANDLE_REF) != 0) break; \ - (h)->flags |= UV_HANDLE_REF; \ - if (((h)->flags & UV_HANDLE_CLOSING) != 0) break; \ - if (((h)->flags & UV_HANDLE_ACTIVE) != 0) uv__active_handle_add(h); \ - } \ - while (0) - -#define uv__handle_unref(h) \ - do { \ - if (((h)->flags & UV_HANDLE_REF) == 0) break; \ - (h)->flags &= ~UV_HANDLE_REF; \ - if (((h)->flags & UV_HANDLE_CLOSING) != 0) break; \ - if (((h)->flags & UV_HANDLE_ACTIVE) != 0) uv__active_handle_rm(h); \ - } \ - while (0) - -#define uv__has_ref(h) \ - (((h)->flags & UV_HANDLE_REF) != 0) - -#if defined(_WIN32) -# define uv__handle_platform_init(h) ((h)->u.fd = -1) -#else -# define uv__handle_platform_init(h) ((h)->next_closing = NULL) -#endif - -#define uv__handle_init(loop_, h, type_) \ - do { \ - (h)->loop = (loop_); \ - (h)->type = (type_); \ - (h)->flags = UV_HANDLE_REF; /* Ref the loop when active. */ \ - QUEUE_INSERT_TAIL(&(loop_)->handle_queue, &(h)->handle_queue); \ - uv__handle_platform_init(h); \ - } \ - while (0) - -/* Note: uses an open-coded version of SET_REQ_SUCCESS() because of - * a circular dependency between src/uv-common.h and src/win/internal.h. - */ -#if defined(_WIN32) -# define UV_REQ_INIT(req, typ) \ - do { \ - (req)->type = (typ); \ - (req)->u.io.overlapped.Internal = 0; /* SET_REQ_SUCCESS() */ \ - } \ - while (0) -#else -# define UV_REQ_INIT(req, typ) \ - do { \ - (req)->type = (typ); \ - } \ - while (0) -#endif - -#define uv__req_init(loop, req, typ) \ - do { \ - UV_REQ_INIT(req, typ); \ - uv__req_register(loop, req); \ - } \ - while (0) - -#define uv__get_internal_fields(loop) \ - ((uv__loop_internal_fields_t*) loop->internal_fields) - -#define uv__get_loop_metrics(loop) \ - (&uv__get_internal_fields(loop)->loop_metrics) - -/* Allocator prototypes */ -void *uv__calloc(size_t count, size_t size); -char *uv__strdup(const char* s); -char *uv__strndup(const char* s, size_t n); -void* uv__malloc(size_t size); -void uv__free(void* ptr); -void* uv__realloc(void* ptr, size_t size); -void* uv__reallocf(void* ptr, size_t size); - -typedef struct uv__loop_metrics_s uv__loop_metrics_t; -typedef struct uv__loop_internal_fields_s uv__loop_internal_fields_t; - -struct uv__loop_metrics_s { - uint64_t provider_entry_time; - uint64_t provider_idle_time; - uv_mutex_t lock; -}; - -void uv__metrics_update_idle_time(uv_loop_t* loop); -void uv__metrics_set_provider_entry_time(uv_loop_t* loop); - -struct uv__loop_internal_fields_s { - unsigned int flags; - uv__loop_metrics_t loop_metrics; -}; - -#endif /* UV_COMMON_H_ */ diff --git a/libuv/src/uv-data-getter-setters.c b/libuv/src/uv-data-getter-setters.c deleted file mode 100644 index 0bd0448..0000000 --- a/libuv/src/uv-data-getter-setters.c +++ /dev/null @@ -1,119 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" - -const char* uv_handle_type_name(uv_handle_type type) { - switch (type) { -#define XX(uc,lc) case UV_##uc: return #lc; - UV_HANDLE_TYPE_MAP(XX) -#undef XX - case UV_FILE: return "file"; - case UV_HANDLE_TYPE_MAX: - case UV_UNKNOWN_HANDLE: return NULL; - } - return NULL; -} - -uv_handle_type uv_handle_get_type(const uv_handle_t* handle) { - return handle->type; -} - -void* uv_handle_get_data(const uv_handle_t* handle) { - return handle->data; -} - -uv_loop_t* uv_handle_get_loop(const uv_handle_t* handle) { - return handle->loop; -} - -void uv_handle_set_data(uv_handle_t* handle, void* data) { - handle->data = data; -} - -const char* uv_req_type_name(uv_req_type type) { - switch (type) { -#define XX(uc,lc) case UV_##uc: return #lc; - UV_REQ_TYPE_MAP(XX) -#undef XX - case UV_REQ_TYPE_MAX: - case UV_UNKNOWN_REQ: - default: /* UV_REQ_TYPE_PRIVATE */ - break; - } - return NULL; -} - -uv_req_type uv_req_get_type(const uv_req_t* req) { - return req->type; -} - -void* uv_req_get_data(const uv_req_t* req) { - return req->data; -} - -void uv_req_set_data(uv_req_t* req, void* data) { - req->data = data; -} - -size_t uv_stream_get_write_queue_size(const uv_stream_t* stream) { - return stream->write_queue_size; -} - -size_t uv_udp_get_send_queue_size(const uv_udp_t* handle) { - return handle->send_queue_size; -} - -size_t uv_udp_get_send_queue_count(const uv_udp_t* handle) { - return handle->send_queue_count; -} - -uv_pid_t uv_process_get_pid(const uv_process_t* proc) { - return proc->pid; -} - -uv_fs_type uv_fs_get_type(const uv_fs_t* req) { - return req->fs_type; -} - -ssize_t uv_fs_get_result(const uv_fs_t* req) { - return req->result; -} - -void* uv_fs_get_ptr(const uv_fs_t* req) { - return req->ptr; -} - -const char* uv_fs_get_path(const uv_fs_t* req) { - return req->path; -} - -uv_stat_t* uv_fs_get_statbuf(uv_fs_t* req) { - return &req->statbuf; -} - -void* uv_loop_get_data(const uv_loop_t* loop) { - return loop->data; -} - -void uv_loop_set_data(uv_loop_t* loop, void* data) { - loop->data = data; -} diff --git a/libuv/src/version.c b/libuv/src/version.c deleted file mode 100644 index 686dedd..0000000 --- a/libuv/src/version.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" - -#define UV_STRINGIFY(v) UV_STRINGIFY_HELPER(v) -#define UV_STRINGIFY_HELPER(v) #v - -#define UV_VERSION_STRING_BASE UV_STRINGIFY(UV_VERSION_MAJOR) "." \ - UV_STRINGIFY(UV_VERSION_MINOR) "." \ - UV_STRINGIFY(UV_VERSION_PATCH) - -#if UV_VERSION_IS_RELEASE -# define UV_VERSION_STRING UV_VERSION_STRING_BASE -#else -# define UV_VERSION_STRING UV_VERSION_STRING_BASE "-" UV_VERSION_SUFFIX -#endif - - -unsigned int uv_version(void) { - return UV_VERSION_HEX; -} - - -const char* uv_version_string(void) { - return UV_VERSION_STRING; -} diff --git a/libuv/src/win/async.c b/libuv/src/win/async.c deleted file mode 100644 index d787f66..0000000 --- a/libuv/src/win/async.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include - -#include "uv.h" -#include "internal.h" -#include "atomicops-inl.h" -#include "handle-inl.h" -#include "req-inl.h" - - -void uv_async_endgame(uv_loop_t* loop, uv_async_t* handle) { - if (handle->flags & UV_HANDLE_CLOSING && - !handle->async_sent) { - assert(!(handle->flags & UV_HANDLE_CLOSED)); - uv__handle_close(handle); - } -} - - -int uv_async_init(uv_loop_t* loop, uv_async_t* handle, uv_async_cb async_cb) { - uv_req_t* req; - - uv__handle_init(loop, (uv_handle_t*) handle, UV_ASYNC); - handle->async_sent = 0; - handle->async_cb = async_cb; - - req = &handle->async_req; - UV_REQ_INIT(req, UV_WAKEUP); - req->data = handle; - - uv__handle_start(handle); - - return 0; -} - - -void uv_async_close(uv_loop_t* loop, uv_async_t* handle) { - if (!((uv_async_t*)handle)->async_sent) { - uv_want_endgame(loop, (uv_handle_t*) handle); - } - - uv__handle_closing(handle); -} - - -int uv_async_send(uv_async_t* handle) { - uv_loop_t* loop = handle->loop; - - if (handle->type != UV_ASYNC) { - /* Can't set errno because that's not thread-safe. */ - return -1; - } - - /* The user should make sure never to call uv_async_send to a closing or - * closed handle. */ - assert(!(handle->flags & UV_HANDLE_CLOSING)); - - if (!uv__atomic_exchange_set(&handle->async_sent)) { - POST_COMPLETION_FOR_REQ(loop, &handle->async_req); - } - - return 0; -} - - -void uv_process_async_wakeup_req(uv_loop_t* loop, uv_async_t* handle, - uv_req_t* req) { - assert(handle->type == UV_ASYNC); - assert(req->type == UV_WAKEUP); - - handle->async_sent = 0; - - if (handle->flags & UV_HANDLE_CLOSING) { - uv_want_endgame(loop, (uv_handle_t*)handle); - } else if (handle->async_cb != NULL) { - handle->async_cb(handle); - } -} diff --git a/libuv/src/win/atomicops-inl.h b/libuv/src/win/atomicops-inl.h deleted file mode 100644 index 2f984c6..0000000 --- a/libuv/src/win/atomicops-inl.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_WIN_ATOMICOPS_INL_H_ -#define UV_WIN_ATOMICOPS_INL_H_ - -#include "uv.h" -#include "internal.h" - - -/* Atomic set operation on char */ -#ifdef _MSC_VER /* MSVC */ - -/* _InterlockedOr8 is supported by MSVC on x32 and x64. It is slightly less - * efficient than InterlockedExchange, but InterlockedExchange8 does not exist, - * and interlocked operations on larger targets might require the target to be - * aligned. */ -#pragma intrinsic(_InterlockedOr8) - -static char INLINE uv__atomic_exchange_set(char volatile* target) { - return _InterlockedOr8(target, 1); -} - -#else /* GCC, Clang in mingw mode */ - -static inline char uv__atomic_exchange_set(char volatile* target) { -#if defined(__i386__) || defined(__x86_64__) - /* Mingw-32 version, hopefully this works for 64-bit gcc as well. */ - const char one = 1; - char old_value; - __asm__ __volatile__ ("lock xchgb %0, %1\n\t" - : "=r"(old_value), "=m"(*target) - : "0"(one), "m"(*target) - : "memory"); - return old_value; -#else - return __sync_fetch_and_or(target, 1); -#endif -} - -#endif - -#endif /* UV_WIN_ATOMICOPS_INL_H_ */ diff --git a/libuv/src/win/core.c b/libuv/src/win/core.c deleted file mode 100644 index e53a0f8..0000000 --- a/libuv/src/win/core.c +++ /dev/null @@ -1,748 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include -#include -#include -#include -#if defined(_MSC_VER) || defined(__MINGW64_VERSION_MAJOR) -#include -#endif - -#include "uv.h" -#include "internal.h" -#include "queue.h" -#include "handle-inl.h" -#include "heap-inl.h" -#include "req-inl.h" - -/* uv_once initialization guards */ -static uv_once_t uv_init_guard_ = UV_ONCE_INIT; - - -#if defined(_DEBUG) && (defined(_MSC_VER) || defined(__MINGW64_VERSION_MAJOR)) -/* Our crt debug report handler allows us to temporarily disable asserts - * just for the current thread. - */ - -UV_THREAD_LOCAL int uv__crt_assert_enabled = TRUE; - -static int uv__crt_dbg_report_handler(int report_type, char *message, int *ret_val) { - if (uv__crt_assert_enabled || report_type != _CRT_ASSERT) - return FALSE; - - if (ret_val) { - /* Set ret_val to 0 to continue with normal execution. - * Set ret_val to 1 to trigger a breakpoint. - */ - - if(IsDebuggerPresent()) - *ret_val = 1; - else - *ret_val = 0; - } - - /* Don't call _CrtDbgReport. */ - return TRUE; -} -#else -UV_THREAD_LOCAL int uv__crt_assert_enabled = FALSE; -#endif - - -#if !defined(__MINGW32__) || __MSVCRT_VERSION__ >= 0x800 -static void uv__crt_invalid_parameter_handler(const wchar_t* expression, - const wchar_t* function, const wchar_t * file, unsigned int line, - uintptr_t reserved) { - /* No-op. */ -} -#endif - -static uv_loop_t** uv__loops; -static int uv__loops_size; -static int uv__loops_capacity; -#define UV__LOOPS_CHUNK_SIZE 8 -static uv_mutex_t uv__loops_lock; - -static void uv__loops_init(void) { - uv_mutex_init(&uv__loops_lock); -} - -static int uv__loops_add(uv_loop_t* loop) { - uv_loop_t** new_loops; - int new_capacity, i; - - uv_mutex_lock(&uv__loops_lock); - - if (uv__loops_size == uv__loops_capacity) { - new_capacity = uv__loops_capacity + UV__LOOPS_CHUNK_SIZE; - new_loops = uv__realloc(uv__loops, sizeof(uv_loop_t*) * new_capacity); - if (!new_loops) - goto failed_loops_realloc; - uv__loops = new_loops; - for (i = uv__loops_capacity; i < new_capacity; ++i) - uv__loops[i] = NULL; - uv__loops_capacity = new_capacity; - } - uv__loops[uv__loops_size] = loop; - ++uv__loops_size; - - uv_mutex_unlock(&uv__loops_lock); - return 0; - -failed_loops_realloc: - uv_mutex_unlock(&uv__loops_lock); - return ERROR_OUTOFMEMORY; -} - -static void uv__loops_remove(uv_loop_t* loop) { - int loop_index; - int smaller_capacity; - uv_loop_t** new_loops; - - uv_mutex_lock(&uv__loops_lock); - - for (loop_index = 0; loop_index < uv__loops_size; ++loop_index) { - if (uv__loops[loop_index] == loop) - break; - } - /* If loop was not found, ignore */ - if (loop_index == uv__loops_size) - goto loop_removed; - - uv__loops[loop_index] = uv__loops[uv__loops_size - 1]; - uv__loops[uv__loops_size - 1] = NULL; - --uv__loops_size; - - if (uv__loops_size == 0) { - uv__loops_capacity = 0; - uv__free(uv__loops); - uv__loops = NULL; - goto loop_removed; - } - - /* If we didn't grow to big skip downsizing */ - if (uv__loops_capacity < 4 * UV__LOOPS_CHUNK_SIZE) - goto loop_removed; - - /* Downsize only if more than half of buffer is free */ - smaller_capacity = uv__loops_capacity / 2; - if (uv__loops_size >= smaller_capacity) - goto loop_removed; - new_loops = uv__realloc(uv__loops, sizeof(uv_loop_t*) * smaller_capacity); - if (!new_loops) - goto loop_removed; - uv__loops = new_loops; - uv__loops_capacity = smaller_capacity; - -loop_removed: - uv_mutex_unlock(&uv__loops_lock); -} - -void uv__wake_all_loops(void) { - int i; - uv_loop_t* loop; - - uv_mutex_lock(&uv__loops_lock); - for (i = 0; i < uv__loops_size; ++i) { - loop = uv__loops[i]; - assert(loop); - if (loop->iocp != INVALID_HANDLE_VALUE) - PostQueuedCompletionStatus(loop->iocp, 0, 0, NULL); - } - uv_mutex_unlock(&uv__loops_lock); -} - -static void uv_init(void) { - /* Tell Windows that we will handle critical errors. */ - SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | - SEM_NOOPENFILEERRORBOX); - - /* Tell the CRT to not exit the application when an invalid parameter is - * passed. The main issue is that invalid FDs will trigger this behavior. - */ -#if !defined(__MINGW32__) || __MSVCRT_VERSION__ >= 0x800 - _set_invalid_parameter_handler(uv__crt_invalid_parameter_handler); -#endif - - /* We also need to setup our debug report handler because some CRT - * functions (eg _get_osfhandle) raise an assert when called with invalid - * FDs even though they return the proper error code in the release build. - */ -#if defined(_DEBUG) && (defined(_MSC_VER) || defined(__MINGW64_VERSION_MAJOR)) - _CrtSetReportHook(uv__crt_dbg_report_handler); -#endif - - /* Initialize tracking of all uv loops */ - uv__loops_init(); - - /* Fetch winapi function pointers. This must be done first because other - * initialization code might need these function pointers to be loaded. - */ - uv_winapi_init(); - - /* Initialize winsock */ - uv_winsock_init(); - - /* Initialize FS */ - uv_fs_init(); - - /* Initialize signal stuff */ - uv_signals_init(); - - /* Initialize console */ - uv_console_init(); - - /* Initialize utilities */ - uv__util_init(); - - /* Initialize system wakeup detection */ - uv__init_detect_system_wakeup(); -} - - -int uv_loop_init(uv_loop_t* loop) { - uv__loop_internal_fields_t* lfields; - struct heap* timer_heap; - int err; - - /* Initialize libuv itself first */ - uv__once_init(); - - /* Create an I/O completion port */ - loop->iocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 1); - if (loop->iocp == NULL) - return uv_translate_sys_error(GetLastError()); - - lfields = (uv__loop_internal_fields_t*) uv__calloc(1, sizeof(*lfields)); - if (lfields == NULL) - return UV_ENOMEM; - loop->internal_fields = lfields; - - err = uv_mutex_init(&lfields->loop_metrics.lock); - if (err) - goto fail_metrics_mutex_init; - - /* To prevent uninitialized memory access, loop->time must be initialized - * to zero before calling uv_update_time for the first time. - */ - loop->time = 0; - uv_update_time(loop); - - QUEUE_INIT(&loop->wq); - QUEUE_INIT(&loop->handle_queue); - loop->active_reqs.count = 0; - loop->active_handles = 0; - - loop->pending_reqs_tail = NULL; - - loop->endgame_handles = NULL; - - loop->timer_heap = timer_heap = uv__malloc(sizeof(*timer_heap)); - if (timer_heap == NULL) { - err = UV_ENOMEM; - goto fail_timers_alloc; - } - - heap_init(timer_heap); - - loop->check_handles = NULL; - loop->prepare_handles = NULL; - loop->idle_handles = NULL; - - loop->next_prepare_handle = NULL; - loop->next_check_handle = NULL; - loop->next_idle_handle = NULL; - - memset(&loop->poll_peer_sockets, 0, sizeof loop->poll_peer_sockets); - - loop->active_tcp_streams = 0; - loop->active_udp_streams = 0; - - loop->timer_counter = 0; - loop->stop_flag = 0; - - err = uv_mutex_init(&loop->wq_mutex); - if (err) - goto fail_mutex_init; - - err = uv_async_init(loop, &loop->wq_async, uv__work_done); - if (err) - goto fail_async_init; - - uv__handle_unref(&loop->wq_async); - loop->wq_async.flags |= UV_HANDLE_INTERNAL; - - err = uv__loops_add(loop); - if (err) - goto fail_async_init; - - return 0; - -fail_async_init: - uv_mutex_destroy(&loop->wq_mutex); - -fail_mutex_init: - uv__free(timer_heap); - loop->timer_heap = NULL; - -fail_timers_alloc: - uv_mutex_destroy(&lfields->loop_metrics.lock); - -fail_metrics_mutex_init: - uv__free(lfields); - loop->internal_fields = NULL; - CloseHandle(loop->iocp); - loop->iocp = INVALID_HANDLE_VALUE; - - return err; -} - - -void uv_update_time(uv_loop_t* loop) { - uint64_t new_time = uv__hrtime(1000); - assert(new_time >= loop->time); - loop->time = new_time; -} - - -void uv__once_init(void) { - uv_once(&uv_init_guard_, uv_init); -} - - -void uv__loop_close(uv_loop_t* loop) { - uv__loop_internal_fields_t* lfields; - size_t i; - - uv__loops_remove(loop); - - /* Close the async handle without needing an extra loop iteration. - * We might have a pending message, but we're just going to destroy the IOCP - * soon, so we can just discard it now without the usual risk of a getting - * another notification from GetQueuedCompletionStatusEx after calling the - * close_cb (which we also skip defining). We'll assert later that queue was - * actually empty and all reqs handled. */ - loop->wq_async.async_sent = 0; - loop->wq_async.close_cb = NULL; - uv__handle_closing(&loop->wq_async); - uv__handle_close(&loop->wq_async); - - for (i = 0; i < ARRAY_SIZE(loop->poll_peer_sockets); i++) { - SOCKET sock = loop->poll_peer_sockets[i]; - if (sock != 0 && sock != INVALID_SOCKET) - closesocket(sock); - } - - uv_mutex_lock(&loop->wq_mutex); - assert(QUEUE_EMPTY(&loop->wq) && "thread pool work queue not empty!"); - assert(!uv__has_active_reqs(loop)); - uv_mutex_unlock(&loop->wq_mutex); - uv_mutex_destroy(&loop->wq_mutex); - - uv__free(loop->timer_heap); - loop->timer_heap = NULL; - - lfields = uv__get_internal_fields(loop); - uv_mutex_destroy(&lfields->loop_metrics.lock); - uv__free(lfields); - loop->internal_fields = NULL; - - CloseHandle(loop->iocp); -} - - -int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) { - uv__loop_internal_fields_t* lfields; - - lfields = uv__get_internal_fields(loop); - if (option == UV_METRICS_IDLE_TIME) { - lfields->flags |= UV_METRICS_IDLE_TIME; - return 0; - } - - return UV_ENOSYS; -} - - -int uv_backend_fd(const uv_loop_t* loop) { - return -1; -} - - -int uv_loop_fork(uv_loop_t* loop) { - return UV_ENOSYS; -} - - -int uv_backend_timeout(const uv_loop_t* loop) { - if (loop->stop_flag != 0) - return 0; - - if (!uv__has_active_handles(loop) && !uv__has_active_reqs(loop)) - return 0; - - if (loop->pending_reqs_tail) - return 0; - - if (loop->endgame_handles) - return 0; - - if (loop->idle_handles) - return 0; - - return uv__next_timeout(loop); -} - - -static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) { - DWORD bytes; - ULONG_PTR key; - OVERLAPPED* overlapped; - uv_req_t* req; - int repeat; - uint64_t timeout_time; - uint64_t user_timeout; - int reset_timeout; - - timeout_time = loop->time + timeout; - - if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { - reset_timeout = 1; - user_timeout = timeout; - timeout = 0; - } else { - reset_timeout = 0; - } - - for (repeat = 0; ; repeat++) { - /* Only need to set the provider_entry_time if timeout != 0. The function - * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. - */ - if (timeout != 0) - uv__metrics_set_provider_entry_time(loop); - - GetQueuedCompletionStatus(loop->iocp, - &bytes, - &key, - &overlapped, - timeout); - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - /* Placed here because on success the loop will break whether there is an - * empty package or not, or if GetQueuedCompletionStatus returned early then - * the timeout will be updated and the loop will run again. In either case - * the idle time will need to be updated. - */ - uv__metrics_update_idle_time(loop); - - if (overlapped) { - /* Package was dequeued */ - req = uv_overlapped_to_req(overlapped); - uv_insert_pending_req(loop, req); - - /* Some time might have passed waiting for I/O, - * so update the loop time here. - */ - uv_update_time(loop); - } else if (GetLastError() != WAIT_TIMEOUT) { - /* Serious error */ - uv_fatal_error(GetLastError(), "GetQueuedCompletionStatus"); - } else if (timeout > 0) { - /* GetQueuedCompletionStatus can occasionally return a little early. - * Make sure that the desired timeout target time is reached. - */ - uv_update_time(loop); - if (timeout_time > loop->time) { - timeout = (DWORD)(timeout_time - loop->time); - /* The first call to GetQueuedCompletionStatus should return very - * close to the target time and the second should reach it, but - * this is not stated in the documentation. To make sure a busy - * loop cannot happen, the timeout is increased exponentially - * starting on the third round. - */ - timeout += repeat ? (1 << (repeat - 1)) : 0; - continue; - } - } - break; - } -} - - -static void uv__poll(uv_loop_t* loop, DWORD timeout) { - BOOL success; - uv_req_t* req; - OVERLAPPED_ENTRY overlappeds[128]; - ULONG count; - ULONG i; - int repeat; - uint64_t timeout_time; - uint64_t user_timeout; - int reset_timeout; - - timeout_time = loop->time + timeout; - - if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { - reset_timeout = 1; - user_timeout = timeout; - timeout = 0; - } else { - reset_timeout = 0; - } - - for (repeat = 0; ; repeat++) { - /* Only need to set the provider_entry_time if timeout != 0. The function - * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. - */ - if (timeout != 0) - uv__metrics_set_provider_entry_time(loop); - - success = pGetQueuedCompletionStatusEx(loop->iocp, - overlappeds, - ARRAY_SIZE(overlappeds), - &count, - timeout, - FALSE); - - if (reset_timeout != 0) { - timeout = user_timeout; - reset_timeout = 0; - } - - /* Placed here because on success the loop will break whether there is an - * empty package or not, or if GetQueuedCompletionStatus returned early then - * the timeout will be updated and the loop will run again. In either case - * the idle time will need to be updated. - */ - uv__metrics_update_idle_time(loop); - - if (success) { - for (i = 0; i < count; i++) { - /* Package was dequeued, but see if it is not a empty package - * meant only to wake us up. - */ - if (overlappeds[i].lpOverlapped) { - req = uv_overlapped_to_req(overlappeds[i].lpOverlapped); - uv_insert_pending_req(loop, req); - } - } - - /* Some time might have passed waiting for I/O, - * so update the loop time here. - */ - uv_update_time(loop); - } else if (GetLastError() != WAIT_TIMEOUT) { - /* Serious error */ - uv_fatal_error(GetLastError(), "GetQueuedCompletionStatusEx"); - } else if (timeout > 0) { - /* GetQueuedCompletionStatus can occasionally return a little early. - * Make sure that the desired timeout target time is reached. - */ - uv_update_time(loop); - if (timeout_time > loop->time) { - timeout = (DWORD)(timeout_time - loop->time); - /* The first call to GetQueuedCompletionStatus should return very - * close to the target time and the second should reach it, but - * this is not stated in the documentation. To make sure a busy - * loop cannot happen, the timeout is increased exponentially - * starting on the third round. - */ - timeout += repeat ? (1 << (repeat - 1)) : 0; - continue; - } - } - break; - } -} - - -static int uv__loop_alive(const uv_loop_t* loop) { - return uv__has_active_handles(loop) || - uv__has_active_reqs(loop) || - loop->endgame_handles != NULL; -} - - -int uv_loop_alive(const uv_loop_t* loop) { - return uv__loop_alive(loop); -} - - -int uv_run(uv_loop_t *loop, uv_run_mode mode) { - DWORD timeout; - int r; - int ran_pending; - - r = uv__loop_alive(loop); - if (!r) - uv_update_time(loop); - - while (r != 0 && loop->stop_flag == 0) { - uv_update_time(loop); - uv__run_timers(loop); - - ran_pending = uv_process_reqs(loop); - uv_idle_invoke(loop); - uv_prepare_invoke(loop); - - timeout = 0; - if ((mode == UV_RUN_ONCE && !ran_pending) || mode == UV_RUN_DEFAULT) - timeout = uv_backend_timeout(loop); - - if (pGetQueuedCompletionStatusEx) - uv__poll(loop, timeout); - else - uv__poll_wine(loop, timeout); - - /* Run one final update on the provider_idle_time in case uv__poll* - * returned because the timeout expired, but no events were received. This - * call will be ignored if the provider_entry_time was either never set (if - * the timeout == 0) or was already updated b/c an event was received. - */ - uv__metrics_update_idle_time(loop); - - uv_check_invoke(loop); - uv_process_endgames(loop); - - if (mode == UV_RUN_ONCE) { - /* UV_RUN_ONCE implies forward progress: at least one callback must have - * been invoked when it returns. uv__io_poll() can return without doing - * I/O (meaning: no callbacks) when its timeout expires - which means we - * have pending timers that satisfy the forward progress constraint. - * - * UV_RUN_NOWAIT makes no guarantees about progress so it's omitted from - * the check. - */ - uv__run_timers(loop); - } - - r = uv__loop_alive(loop); - if (mode == UV_RUN_ONCE || mode == UV_RUN_NOWAIT) - break; - } - - /* The if statement lets the compiler compile it to a conditional store. - * Avoids dirtying a cache line. - */ - if (loop->stop_flag != 0) - loop->stop_flag = 0; - - return r; -} - - -int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd) { - uv_os_fd_t fd_out; - - switch (handle->type) { - case UV_TCP: - fd_out = (uv_os_fd_t)((uv_tcp_t*) handle)->socket; - break; - - case UV_NAMED_PIPE: - fd_out = ((uv_pipe_t*) handle)->handle; - break; - - case UV_TTY: - fd_out = ((uv_tty_t*) handle)->handle; - break; - - case UV_UDP: - fd_out = (uv_os_fd_t)((uv_udp_t*) handle)->socket; - break; - - case UV_POLL: - fd_out = (uv_os_fd_t)((uv_poll_t*) handle)->socket; - break; - - default: - return UV_EINVAL; - } - - if (uv_is_closing(handle) || fd_out == INVALID_HANDLE_VALUE) - return UV_EBADF; - - *fd = fd_out; - return 0; -} - - -int uv__socket_sockopt(uv_handle_t* handle, int optname, int* value) { - int r; - int len; - SOCKET socket; - - if (handle == NULL || value == NULL) - return UV_EINVAL; - - if (handle->type == UV_TCP) - socket = ((uv_tcp_t*) handle)->socket; - else if (handle->type == UV_UDP) - socket = ((uv_udp_t*) handle)->socket; - else - return UV_ENOTSUP; - - len = sizeof(*value); - - if (*value == 0) - r = getsockopt(socket, SOL_SOCKET, optname, (char*) value, &len); - else - r = setsockopt(socket, SOL_SOCKET, optname, (const char*) value, len); - - if (r == SOCKET_ERROR) - return uv_translate_sys_error(WSAGetLastError()); - - return 0; -} - -int uv_cpumask_size(void) { - return (int)(sizeof(DWORD_PTR) * 8); -} - -int uv__getsockpeername(const uv_handle_t* handle, - uv__peersockfunc func, - struct sockaddr* name, - int* namelen, - int delayed_error) { - - int result; - uv_os_fd_t fd; - - result = uv_fileno(handle, &fd); - if (result != 0) - return result; - - if (delayed_error) - return uv_translate_sys_error(delayed_error); - - result = func((SOCKET) fd, name, namelen); - if (result != 0) - return uv_translate_sys_error(WSAGetLastError()); - - return 0; -} diff --git a/libuv/src/win/detect-wakeup.c b/libuv/src/win/detect-wakeup.c deleted file mode 100644 index ab19361..0000000 --- a/libuv/src/win/detect-wakeup.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" -#include "winapi.h" - -static void uv__register_system_resume_callback(void); - -void uv__init_detect_system_wakeup(void) { - /* Try registering system power event callback. This is the cleanest - * method, but it will only work on Win8 and above. - */ - uv__register_system_resume_callback(); -} - -static ULONG CALLBACK uv__system_resume_callback(PVOID Context, - ULONG Type, - PVOID Setting) { - if (Type == PBT_APMRESUMESUSPEND || Type == PBT_APMRESUMEAUTOMATIC) - uv__wake_all_loops(); - - return 0; -} - -static void uv__register_system_resume_callback(void) { - _DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS recipient; - _HPOWERNOTIFY registration_handle; - - if (pPowerRegisterSuspendResumeNotification == NULL) - return; - - recipient.Callback = uv__system_resume_callback; - recipient.Context = NULL; - (*pPowerRegisterSuspendResumeNotification)(DEVICE_NOTIFY_CALLBACK, - &recipient, - ®istration_handle); -} diff --git a/libuv/src/win/dl.c b/libuv/src/win/dl.c deleted file mode 100644 index 676be4d..0000000 --- a/libuv/src/win/dl.c +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "internal.h" - -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]; - - 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()); - } - - lib->handle = LoadLibraryExW(filename_w, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); - if (lib->handle == NULL) { - return uv__dlerror(lib, filename, GetLastError()); - } - - return 0; -} - - -void uv_dlclose(uv_lib_t* lib) { - if (lib->errmsg) { - LocalFree((void*)lib->errmsg); - lib->errmsg = NULL; - } - - if (lib->handle) { - /* Ignore errors. No good way to signal them without leaking memory. */ - FreeLibrary(lib->handle); - lib->handle = NULL; - } -} - - -int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr) { - /* Cast though integer to suppress pedantic warning about forbidden cast. */ - *ptr = (void*)(uintptr_t) GetProcAddress(lib->handle, name); - return uv__dlerror(lib, "", *ptr ? 0 : GetLastError()); -} - - -const char* uv_dlerror(const uv_lib_t* lib) { - return lib->errmsg ? lib->errmsg : "no error"; -} - - -static void uv__format_fallback_error(uv_lib_t* lib, int errorno){ - static const CHAR fallback_error[] = "error: %1!d!"; - DWORD_PTR args[1]; - args[0] = (DWORD_PTR) errorno; - - FormatMessageA(FORMAT_MESSAGE_FROM_STRING | - FORMAT_MESSAGE_ARGUMENT_ARRAY | - FORMAT_MESSAGE_ALLOCATE_BUFFER, - fallback_error, 0, 0, - (LPSTR) &lib->errmsg, - 0, (va_list*) args); -} - - - -static int uv__dlerror(uv_lib_t* lib, const char* filename, DWORD errorno) { - DWORD_PTR arg; - DWORD res; - char* msg; - - if (lib->errmsg) { - LocalFree(lib->errmsg); - lib->errmsg = NULL; - } - - if (errorno == 0) - return 0; - - res = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errorno, - MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), - (LPSTR) &lib->errmsg, 0, NULL); - - if (!res && (GetLastError() == ERROR_MUI_FILE_NOT_FOUND || - GetLastError() == ERROR_RESOURCE_TYPE_NOT_FOUND)) { - res = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errorno, - 0, (LPSTR) &lib->errmsg, 0, NULL); - } - - if (res && errorno == ERROR_BAD_EXE_FORMAT && strstr(lib->errmsg, "%1")) { - msg = lib->errmsg; - lib->errmsg = NULL; - arg = (DWORD_PTR) filename; - res = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_ARGUMENT_ARRAY | - FORMAT_MESSAGE_FROM_STRING, - msg, - 0, 0, (LPSTR) &lib->errmsg, 0, (va_list*) &arg); - LocalFree(msg); - } - - if (!res) - uv__format_fallback_error(lib, errorno); - - return -1; -} diff --git a/libuv/src/win/error.c b/libuv/src/win/error.c deleted file mode 100644 index 3a269da..0000000 --- a/libuv/src/win/error.c +++ /dev/null @@ -1,173 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include -#include -#include - -#include "uv.h" -#include "internal.h" - - -/* - * Display an error message and abort the event loop. - */ -void uv_fatal_error(const int errorno, const char* syscall) { - char* buf = NULL; - const char* errmsg; - - FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errorno, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buf, 0, NULL); - - if (buf) { - errmsg = buf; - } else { - errmsg = "Unknown error"; - } - - /* FormatMessage messages include a newline character already, so don't add - * another. */ - if (syscall) { - fprintf(stderr, "%s: (%d) %s", syscall, errorno, errmsg); - } else { - fprintf(stderr, "(%d) %s", errorno, errmsg); - } - - if (buf) { - LocalFree(buf); - } - - DebugBreak(); - abort(); -} - - -int uv_translate_sys_error(int sys_errno) { - if (sys_errno <= 0) { - return sys_errno; /* If < 0 then it's already a libuv error. */ - } - - switch (sys_errno) { - case ERROR_NOACCESS: return UV_EACCES; - case WSAEACCES: return UV_EACCES; - case ERROR_ELEVATION_REQUIRED: return UV_EACCES; - case ERROR_CANT_ACCESS_FILE: return UV_EACCES; - case ERROR_ADDRESS_ALREADY_ASSOCIATED: return UV_EADDRINUSE; - case WSAEADDRINUSE: return UV_EADDRINUSE; - case WSAEADDRNOTAVAIL: return UV_EADDRNOTAVAIL; - case WSAEAFNOSUPPORT: return UV_EAFNOSUPPORT; - case WSAEWOULDBLOCK: return UV_EAGAIN; - case WSAEALREADY: return UV_EALREADY; - case ERROR_INVALID_FLAGS: return UV_EBADF; - case ERROR_INVALID_HANDLE: return UV_EBADF; - case ERROR_LOCK_VIOLATION: return UV_EBUSY; - case ERROR_PIPE_BUSY: return UV_EBUSY; - case ERROR_SHARING_VIOLATION: return UV_EBUSY; - case ERROR_OPERATION_ABORTED: return UV_ECANCELED; - case WSAEINTR: return UV_ECANCELED; - case ERROR_NO_UNICODE_TRANSLATION: return UV_ECHARSET; - case ERROR_CONNECTION_ABORTED: return UV_ECONNABORTED; - case WSAECONNABORTED: return UV_ECONNABORTED; - case ERROR_CONNECTION_REFUSED: return UV_ECONNREFUSED; - case WSAECONNREFUSED: return UV_ECONNREFUSED; - case ERROR_NETNAME_DELETED: return UV_ECONNRESET; - case WSAECONNRESET: return UV_ECONNRESET; - case ERROR_ALREADY_EXISTS: return UV_EEXIST; - case ERROR_FILE_EXISTS: return UV_EEXIST; - case ERROR_BUFFER_OVERFLOW: return UV_EFAULT; - case WSAEFAULT: return UV_EFAULT; - case ERROR_HOST_UNREACHABLE: return UV_EHOSTUNREACH; - case WSAEHOSTUNREACH: return UV_EHOSTUNREACH; - case ERROR_INSUFFICIENT_BUFFER: return UV_EINVAL; - case ERROR_INVALID_DATA: return UV_EINVAL; - case ERROR_INVALID_PARAMETER: return UV_EINVAL; - case ERROR_SYMLINK_NOT_SUPPORTED: return UV_EINVAL; - case WSAEINVAL: return UV_EINVAL; - case WSAEPFNOSUPPORT: return UV_EINVAL; - case ERROR_BEGINNING_OF_MEDIA: return UV_EIO; - case ERROR_BUS_RESET: return UV_EIO; - case ERROR_CRC: return UV_EIO; - case ERROR_DEVICE_DOOR_OPEN: return UV_EIO; - case ERROR_DEVICE_REQUIRES_CLEANING: return UV_EIO; - case ERROR_DISK_CORRUPT: return UV_EIO; - case ERROR_EOM_OVERFLOW: return UV_EIO; - case ERROR_FILEMARK_DETECTED: return UV_EIO; - case ERROR_GEN_FAILURE: return UV_EIO; - case ERROR_INVALID_BLOCK_LENGTH: return UV_EIO; - case ERROR_IO_DEVICE: return UV_EIO; - case ERROR_NO_DATA_DETECTED: return UV_EIO; - case ERROR_NO_SIGNAL_SENT: return UV_EIO; - case ERROR_OPEN_FAILED: return UV_EIO; - case ERROR_SETMARK_DETECTED: return UV_EIO; - case ERROR_SIGNAL_REFUSED: return UV_EIO; - case WSAEISCONN: return UV_EISCONN; - case ERROR_CANT_RESOLVE_FILENAME: return UV_ELOOP; - case ERROR_TOO_MANY_OPEN_FILES: return UV_EMFILE; - case WSAEMFILE: return UV_EMFILE; - case WSAEMSGSIZE: return UV_EMSGSIZE; - case ERROR_FILENAME_EXCED_RANGE: return UV_ENAMETOOLONG; - case ERROR_NETWORK_UNREACHABLE: return UV_ENETUNREACH; - case WSAENETUNREACH: return UV_ENETUNREACH; - case WSAENOBUFS: return UV_ENOBUFS; - case ERROR_BAD_PATHNAME: return UV_ENOENT; - case ERROR_DIRECTORY: return UV_ENOENT; - case ERROR_ENVVAR_NOT_FOUND: return UV_ENOENT; - case ERROR_FILE_NOT_FOUND: return UV_ENOENT; - case ERROR_INVALID_NAME: return UV_ENOENT; - case ERROR_INVALID_DRIVE: return UV_ENOENT; - case ERROR_INVALID_REPARSE_DATA: return UV_ENOENT; - case ERROR_MOD_NOT_FOUND: return UV_ENOENT; - case ERROR_PATH_NOT_FOUND: return UV_ENOENT; - case WSAHOST_NOT_FOUND: return UV_ENOENT; - case WSANO_DATA: return UV_ENOENT; - case ERROR_NOT_ENOUGH_MEMORY: return UV_ENOMEM; - case ERROR_OUTOFMEMORY: return UV_ENOMEM; - case ERROR_CANNOT_MAKE: return UV_ENOSPC; - case ERROR_DISK_FULL: return UV_ENOSPC; - case ERROR_EA_TABLE_FULL: return UV_ENOSPC; - case ERROR_END_OF_MEDIA: return UV_ENOSPC; - case ERROR_HANDLE_DISK_FULL: return UV_ENOSPC; - case ERROR_NOT_CONNECTED: return UV_ENOTCONN; - case WSAENOTCONN: return UV_ENOTCONN; - case ERROR_DIR_NOT_EMPTY: return UV_ENOTEMPTY; - case WSAENOTSOCK: return UV_ENOTSOCK; - case ERROR_NOT_SUPPORTED: return UV_ENOTSUP; - case ERROR_BROKEN_PIPE: return UV_EOF; - case ERROR_ACCESS_DENIED: return UV_EPERM; - case ERROR_PRIVILEGE_NOT_HELD: return UV_EPERM; - case ERROR_BAD_PIPE: return UV_EPIPE; - case ERROR_NO_DATA: return UV_EPIPE; - case ERROR_PIPE_NOT_CONNECTED: return UV_EPIPE; - case WSAESHUTDOWN: return UV_EPIPE; - case WSAEPROTONOSUPPORT: return UV_EPROTONOSUPPORT; - case ERROR_WRITE_PROTECT: return UV_EROFS; - case ERROR_SEM_TIMEOUT: return UV_ETIMEDOUT; - case WSAETIMEDOUT: return UV_ETIMEDOUT; - case ERROR_NOT_SAME_DEVICE: return UV_EXDEV; - case ERROR_INVALID_FUNCTION: return UV_EISDIR; - case ERROR_META_EXPANSION_TOO_LONG: return UV_E2BIG; - case WSAESOCKTNOSUPPORT: return UV_ESOCKTNOSUPPORT; - default: return UV_UNKNOWN; - } -} diff --git a/libuv/src/win/fs-event.c b/libuv/src/win/fs-event.c deleted file mode 100644 index 0126c5e..0000000 --- a/libuv/src/win/fs-event.c +++ /dev/null @@ -1,608 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include -#include - -#include "uv.h" -#include "internal.h" -#include "handle-inl.h" -#include "req-inl.h" - - -const unsigned int uv_directory_watcher_buffer_size = 4096; - - -static void uv_fs_event_queue_readdirchanges(uv_loop_t* loop, - uv_fs_event_t* handle) { - assert(handle->dir_handle != INVALID_HANDLE_VALUE); - assert(!handle->req_pending); - - memset(&(handle->req.u.io.overlapped), 0, - sizeof(handle->req.u.io.overlapped)); - if (!ReadDirectoryChangesW(handle->dir_handle, - handle->buffer, - uv_directory_watcher_buffer_size, - (handle->flags & UV_FS_EVENT_RECURSIVE) ? TRUE : FALSE, - FILE_NOTIFY_CHANGE_FILE_NAME | - FILE_NOTIFY_CHANGE_DIR_NAME | - FILE_NOTIFY_CHANGE_ATTRIBUTES | - FILE_NOTIFY_CHANGE_SIZE | - FILE_NOTIFY_CHANGE_LAST_WRITE | - FILE_NOTIFY_CHANGE_LAST_ACCESS | - FILE_NOTIFY_CHANGE_CREATION | - FILE_NOTIFY_CHANGE_SECURITY, - NULL, - &handle->req.u.io.overlapped, - NULL)) { - /* Make this req pending reporting an error. */ - SET_REQ_ERROR(&handle->req, GetLastError()); - uv_insert_pending_req(loop, (uv_req_t*)&handle->req); - } - - handle->req_pending = 1; -} - -static void uv_relative_path(const WCHAR* filename, - const WCHAR* dir, - WCHAR** relpath) { - size_t relpathlen; - size_t filenamelen = wcslen(filename); - size_t dirlen = wcslen(dir); - assert(!_wcsnicmp(filename, dir, dirlen)); - if (dirlen > 0 && dir[dirlen - 1] == '\\') - dirlen--; - relpathlen = filenamelen - dirlen - 1; - *relpath = uv__malloc((relpathlen + 1) * sizeof(WCHAR)); - if (!*relpath) - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - wcsncpy(*relpath, filename + dirlen + 1, relpathlen); - (*relpath)[relpathlen] = L'\0'; -} - -static int uv_split_path(const WCHAR* filename, WCHAR** dir, - WCHAR** file) { - size_t len, i; - DWORD dir_len; - - if (filename == NULL) { - if (dir != NULL) - *dir = NULL; - *file = NULL; - return 0; - } - - len = wcslen(filename); - i = len; - while (i > 0 && filename[--i] != '\\' && filename[i] != '/'); - - if (i == 0) { - if (dir) { - dir_len = GetCurrentDirectoryW(0, NULL); - if (dir_len == 0) { - return -1; - } - *dir = (WCHAR*)uv__malloc(dir_len * sizeof(WCHAR)); - if (!*dir) { - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - } - - if (!GetCurrentDirectoryW(dir_len, *dir)) { - uv__free(*dir); - *dir = NULL; - return -1; - } - } - - *file = wcsdup(filename); - } else { - if (dir) { - *dir = (WCHAR*)uv__malloc((i + 2) * sizeof(WCHAR)); - if (!*dir) { - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - } - wcsncpy(*dir, filename, i + 1); - (*dir)[i + 1] = L'\0'; - } - - *file = (WCHAR*)uv__malloc((len - i) * sizeof(WCHAR)); - if (!*file) { - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - } - wcsncpy(*file, filename + i + 1, len - i - 1); - (*file)[len - i - 1] = L'\0'; - } - - return 0; -} - - -int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) { - uv__handle_init(loop, (uv_handle_t*) handle, UV_FS_EVENT); - handle->dir_handle = INVALID_HANDLE_VALUE; - handle->buffer = NULL; - handle->req_pending = 0; - handle->filew = NULL; - handle->short_filew = NULL; - handle->dirw = NULL; - - UV_REQ_INIT(&handle->req, UV_FS_EVENT_REQ); - handle->req.data = handle; - - return 0; -} - - -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; - DWORD attr, last_error; - WCHAR* dir = NULL, *dir_to_watch, *pathw = NULL; - DWORD short_path_buffer_len; - WCHAR *short_path_buffer; - WCHAR* short_path, *long_path; - - short_path = NULL; - if (uv__is_active(handle)) - return UV_EINVAL; - - handle->cb = cb; - handle->path = uv__strdup(path); - if (!handle->path) { - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - } - - 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()); - } - - /* Determine whether path is a file or a directory. */ - attr = GetFileAttributesW(pathw); - if (attr == INVALID_FILE_ATTRIBUTES) { - last_error = GetLastError(); - goto error; - } - - is_path_dir = (attr & FILE_ATTRIBUTE_DIRECTORY) ? 1 : 0; - - if (is_path_dir) { - /* path is a directory, so that's the directory that we will watch. */ - - /* Convert to long path. */ - size = GetLongPathNameW(pathw, NULL, 0); - - if (size) { - long_path = (WCHAR*)uv__malloc(size * sizeof(WCHAR)); - if (!long_path) { - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - } - - size = GetLongPathNameW(pathw, long_path, size); - if (size) { - long_path[size] = '\0'; - } else { - uv__free(long_path); - long_path = NULL; - } - - if (long_path) { - uv__free(pathw); - pathw = long_path; - } - } - - dir_to_watch = pathw; - } else { - /* - * path is a file. So we split path into dir & file parts, and - * watch the dir directory. - */ - - /* Convert to short path. */ - short_path_buffer = NULL; - short_path_buffer_len = GetShortPathNameW(pathw, NULL, 0); - if (short_path_buffer_len == 0) { - goto short_path_done; - } - short_path_buffer = uv__malloc(short_path_buffer_len * sizeof(WCHAR)); - if (short_path_buffer == NULL) { - goto short_path_done; - } - if (GetShortPathNameW(pathw, - short_path_buffer, - short_path_buffer_len) == 0) { - uv__free(short_path_buffer); - short_path_buffer = NULL; - } -short_path_done: - short_path = short_path_buffer; - - if (uv_split_path(pathw, &dir, &handle->filew) != 0) { - last_error = GetLastError(); - goto error; - } - - if (uv_split_path(short_path, NULL, &handle->short_filew) != 0) { - last_error = GetLastError(); - goto error; - } - - dir_to_watch = dir; - uv__free(pathw); - pathw = NULL; - } - - handle->dir_handle = CreateFileW(dir_to_watch, - FILE_LIST_DIRECTORY, - FILE_SHARE_READ | FILE_SHARE_DELETE | - FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS | - FILE_FLAG_OVERLAPPED, - NULL); - - if (dir) { - uv__free(dir); - dir = NULL; - } - - if (handle->dir_handle == INVALID_HANDLE_VALUE) { - last_error = GetLastError(); - goto error; - } - - if (CreateIoCompletionPort(handle->dir_handle, - handle->loop->iocp, - (ULONG_PTR)handle, - 0) == NULL) { - last_error = GetLastError(); - goto error; - } - - if (!handle->buffer) { - handle->buffer = (char*)uv__malloc(uv_directory_watcher_buffer_size); - } - if (!handle->buffer) { - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - } - - memset(&(handle->req.u.io.overlapped), 0, - sizeof(handle->req.u.io.overlapped)); - - if (!ReadDirectoryChangesW(handle->dir_handle, - handle->buffer, - uv_directory_watcher_buffer_size, - (flags & UV_FS_EVENT_RECURSIVE) ? TRUE : FALSE, - FILE_NOTIFY_CHANGE_FILE_NAME | - FILE_NOTIFY_CHANGE_DIR_NAME | - FILE_NOTIFY_CHANGE_ATTRIBUTES | - FILE_NOTIFY_CHANGE_SIZE | - FILE_NOTIFY_CHANGE_LAST_WRITE | - FILE_NOTIFY_CHANGE_LAST_ACCESS | - FILE_NOTIFY_CHANGE_CREATION | - FILE_NOTIFY_CHANGE_SECURITY, - NULL, - &handle->req.u.io.overlapped, - NULL)) { - last_error = GetLastError(); - goto error; - } - - assert(is_path_dir ? pathw != NULL : pathw == NULL); - handle->dirw = pathw; - handle->req_pending = 1; - return 0; - -error: - if (handle->path) { - uv__free(handle->path); - handle->path = NULL; - } - - if (handle->filew) { - uv__free(handle->filew); - handle->filew = NULL; - } - - if (handle->short_filew) { - uv__free(handle->short_filew); - handle->short_filew = NULL; - } - - uv__free(pathw); - - if (handle->dir_handle != INVALID_HANDLE_VALUE) { - CloseHandle(handle->dir_handle); - handle->dir_handle = INVALID_HANDLE_VALUE; - } - - if (handle->buffer) { - uv__free(handle->buffer); - handle->buffer = NULL; - } - - if (uv__is_active(handle)) - uv__handle_stop(handle); - - uv__free(short_path); - - return uv_translate_sys_error(last_error); -} - - -int uv_fs_event_stop(uv_fs_event_t* handle) { - if (!uv__is_active(handle)) - return 0; - - if (handle->dir_handle != INVALID_HANDLE_VALUE) { - CloseHandle(handle->dir_handle); - handle->dir_handle = INVALID_HANDLE_VALUE; - } - - uv__handle_stop(handle); - - if (handle->filew) { - uv__free(handle->filew); - handle->filew = NULL; - } - - if (handle->short_filew) { - uv__free(handle->short_filew); - handle->short_filew = NULL; - } - - if (handle->path) { - uv__free(handle->path); - handle->path = NULL; - } - - if (handle->dirw) { - uv__free(handle->dirw); - handle->dirw = NULL; - } - - return 0; -} - - -static int file_info_cmp(WCHAR* str, WCHAR* file_name, size_t file_name_len) { - size_t str_len; - - if (str == NULL) - return -1; - - str_len = wcslen(str); - - /* - Since we only care about equality, return early if the strings - aren't the same length - */ - if (str_len != (file_name_len / sizeof(WCHAR))) - return -1; - - return _wcsnicmp(str, file_name, str_len); -} - - -void uv_process_fs_event_req(uv_loop_t* loop, uv_req_t* req, - uv_fs_event_t* handle) { - FILE_NOTIFY_INFORMATION* file_info; - int err, sizew, size; - char* filename = NULL; - WCHAR* filenamew = NULL; - WCHAR* long_filenamew = NULL; - DWORD offset = 0; - - assert(req->type == UV_FS_EVENT_REQ); - assert(handle->req_pending); - handle->req_pending = 0; - - /* Don't report any callbacks if: - * - We're closing, just push the handle onto the endgame queue - * - We are not active, just ignore the callback - */ - if (!uv__is_active(handle)) { - if (handle->flags & UV_HANDLE_CLOSING) { - uv_want_endgame(loop, (uv_handle_t*) handle); - } - return; - } - - file_info = (FILE_NOTIFY_INFORMATION*)(handle->buffer + offset); - - if (REQ_SUCCESS(req)) { - if (req->u.io.overlapped.InternalHigh > 0) { - do { - file_info = (FILE_NOTIFY_INFORMATION*)((char*)file_info + offset); - assert(!filename); - assert(!filenamew); - assert(!long_filenamew); - - /* - * Fire the event only if we were asked to watch a directory, - * or if the filename filter matches. - */ - if (handle->dirw || - file_info_cmp(handle->filew, - file_info->FileName, - file_info->FileNameLength) == 0 || - file_info_cmp(handle->short_filew, - file_info->FileName, - file_info->FileNameLength) == 0) { - - if (handle->dirw) { - /* - * We attempt to resolve the long form of the file name explicitly. - * We only do this for file names that might still exist on disk. - * If this fails, we use the name given by ReadDirectoryChangesW. - * This may be the long form or the 8.3 short name in some cases. - */ - if (file_info->Action != FILE_ACTION_REMOVED && - file_info->Action != FILE_ACTION_RENAMED_OLD_NAME) { - /* Construct a full path to the file. */ - size = wcslen(handle->dirw) + - file_info->FileNameLength / sizeof(WCHAR) + 2; - - filenamew = (WCHAR*)uv__malloc(size * sizeof(WCHAR)); - if (!filenamew) { - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - } - - _snwprintf(filenamew, size, L"%s\\%.*s", handle->dirw, - file_info->FileNameLength / (DWORD)sizeof(WCHAR), - file_info->FileName); - - filenamew[size - 1] = L'\0'; - - /* Convert to long name. */ - size = GetLongPathNameW(filenamew, NULL, 0); - - if (size) { - long_filenamew = (WCHAR*)uv__malloc(size * sizeof(WCHAR)); - if (!long_filenamew) { - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - } - - size = GetLongPathNameW(filenamew, long_filenamew, size); - if (size) { - long_filenamew[size] = '\0'; - } else { - uv__free(long_filenamew); - long_filenamew = NULL; - } - } - - uv__free(filenamew); - - if (long_filenamew) { - /* Get the file name out of the long path. */ - uv_relative_path(long_filenamew, - handle->dirw, - &filenamew); - uv__free(long_filenamew); - long_filenamew = filenamew; - sizew = -1; - } else { - /* We couldn't get the long filename, use the one reported. */ - filenamew = file_info->FileName; - sizew = file_info->FileNameLength / sizeof(WCHAR); - } - } else { - /* - * Removed or renamed events cannot be resolved to the long form. - * We therefore use the name given by ReadDirectoryChangesW. - * This may be the long form or the 8.3 short name in some cases. - */ - filenamew = file_info->FileName; - sizew = file_info->FileNameLength / sizeof(WCHAR); - } - } else { - /* We already have the long name of the file, so just use it. */ - filenamew = handle->filew; - sizew = -1; - } - - /* Convert the filename to utf8. */ - uv__convert_utf16_to_utf8(filenamew, sizew, &filename); - - switch (file_info->Action) { - case FILE_ACTION_ADDED: - case FILE_ACTION_REMOVED: - case FILE_ACTION_RENAMED_OLD_NAME: - case FILE_ACTION_RENAMED_NEW_NAME: - handle->cb(handle, filename, UV_RENAME, 0); - break; - - case FILE_ACTION_MODIFIED: - handle->cb(handle, filename, UV_CHANGE, 0); - break; - } - - uv__free(filename); - filename = NULL; - uv__free(long_filenamew); - long_filenamew = NULL; - filenamew = NULL; - } - - offset = file_info->NextEntryOffset; - } while (offset && !(handle->flags & UV_HANDLE_CLOSING)); - } else { - handle->cb(handle, NULL, UV_CHANGE, 0); - } - } else { - err = GET_REQ_ERROR(req); - handle->cb(handle, NULL, 0, uv_translate_sys_error(err)); - } - - if (!(handle->flags & UV_HANDLE_CLOSING)) { - uv_fs_event_queue_readdirchanges(loop, handle); - } else { - uv_want_endgame(loop, (uv_handle_t*)handle); - } -} - - -void uv_fs_event_close(uv_loop_t* loop, uv_fs_event_t* handle) { - uv_fs_event_stop(handle); - - uv__handle_closing(handle); - - if (!handle->req_pending) { - uv_want_endgame(loop, (uv_handle_t*)handle); - } - -} - - -void uv_fs_event_endgame(uv_loop_t* loop, uv_fs_event_t* handle) { - if ((handle->flags & UV_HANDLE_CLOSING) && !handle->req_pending) { - assert(!(handle->flags & UV_HANDLE_CLOSED)); - - if (handle->buffer) { - uv__free(handle->buffer); - handle->buffer = NULL; - } - - uv__handle_close(handle); - } -} diff --git a/libuv/src/win/fs-fd-hash-inl.h b/libuv/src/win/fs-fd-hash-inl.h deleted file mode 100644 index 0b532af..0000000 --- a/libuv/src/win/fs-fd-hash-inl.h +++ /dev/null @@ -1,200 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_WIN_FS_FD_HASH_INL_H_ -#define UV_WIN_FS_FD_HASH_INL_H_ - -#include "uv.h" -#include "internal.h" - -/* Files are only inserted in uv__fd_hash when the UV_FS_O_FILEMAP flag is - * specified. Thus, when uv__fd_hash_get returns true, the file mapping in the - * info structure should be used for read/write operations. - * - * If the file is empty, the mapping field will be set to - * INVALID_HANDLE_VALUE. This is not an issue since the file mapping needs to - * be created anyway when the file size changes. - * - * Since file descriptors are sequential integers, the modulo operator is used - * as hashing function. For each bucket, a single linked list of arrays is - * kept to minimize allocations. A statically allocated memory buffer is kept - * for the first array in each bucket. */ - - -#define UV__FD_HASH_SIZE 256 -#define UV__FD_HASH_GROUP_SIZE 16 - -struct uv__fd_info_s { - int flags; - BOOLEAN is_directory; - HANDLE mapping; - LARGE_INTEGER size; - LARGE_INTEGER current_pos; -}; - -struct uv__fd_hash_entry_s { - uv_file fd; - struct uv__fd_info_s info; -}; - -struct uv__fd_hash_entry_group_s { - struct uv__fd_hash_entry_s entries[UV__FD_HASH_GROUP_SIZE]; - struct uv__fd_hash_entry_group_s* next; -}; - -struct uv__fd_hash_bucket_s { - size_t size; - struct uv__fd_hash_entry_group_s* data; -}; - - -static uv_mutex_t uv__fd_hash_mutex; - -static struct uv__fd_hash_entry_group_s - uv__fd_hash_entry_initial[UV__FD_HASH_SIZE * UV__FD_HASH_GROUP_SIZE]; -static struct uv__fd_hash_bucket_s uv__fd_hash[UV__FD_HASH_SIZE]; - - -INLINE static void uv__fd_hash_init(void) { - size_t i; - int err; - - err = uv_mutex_init(&uv__fd_hash_mutex); - if (err) { - uv_fatal_error(err, "uv_mutex_init"); - } - - for (i = 0; i < ARRAY_SIZE(uv__fd_hash); ++i) { - uv__fd_hash[i].size = 0; - uv__fd_hash[i].data = - uv__fd_hash_entry_initial + i * UV__FD_HASH_GROUP_SIZE; - } -} - -#define FIND_COMMON_VARIABLES \ - unsigned i; \ - unsigned bucket = fd % ARRAY_SIZE(uv__fd_hash); \ - struct uv__fd_hash_entry_s* entry_ptr = NULL; \ - struct uv__fd_hash_entry_group_s* group_ptr; \ - struct uv__fd_hash_bucket_s* bucket_ptr = &uv__fd_hash[bucket]; - -#define FIND_IN_GROUP_PTR(group_size) \ - do { \ - for (i = 0; i < group_size; ++i) { \ - if (group_ptr->entries[i].fd == fd) { \ - entry_ptr = &group_ptr->entries[i]; \ - break; \ - } \ - } \ - } while (0) - -#define FIND_IN_BUCKET_PTR() \ - do { \ - size_t first_group_size = bucket_ptr->size % UV__FD_HASH_GROUP_SIZE; \ - if (bucket_ptr->size != 0 && first_group_size == 0) \ - first_group_size = UV__FD_HASH_GROUP_SIZE; \ - group_ptr = bucket_ptr->data; \ - FIND_IN_GROUP_PTR(first_group_size); \ - for (group_ptr = group_ptr->next; \ - group_ptr != NULL && entry_ptr == NULL; \ - group_ptr = group_ptr->next) \ - FIND_IN_GROUP_PTR(UV__FD_HASH_GROUP_SIZE); \ - } while (0) - -INLINE static int uv__fd_hash_get(int fd, struct uv__fd_info_s* info) { - FIND_COMMON_VARIABLES - - uv_mutex_lock(&uv__fd_hash_mutex); - - FIND_IN_BUCKET_PTR(); - - if (entry_ptr != NULL) { - *info = entry_ptr->info; - } - - uv_mutex_unlock(&uv__fd_hash_mutex); - return entry_ptr != NULL; -} - -INLINE static void uv__fd_hash_add(int fd, struct uv__fd_info_s* info) { - FIND_COMMON_VARIABLES - - uv_mutex_lock(&uv__fd_hash_mutex); - - FIND_IN_BUCKET_PTR(); - - if (entry_ptr == NULL) { - i = bucket_ptr->size % UV__FD_HASH_GROUP_SIZE; - - if (bucket_ptr->size != 0 && i == 0) { - struct uv__fd_hash_entry_group_s* new_group_ptr = - uv__malloc(sizeof(*new_group_ptr)); - if (new_group_ptr == NULL) { - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - } - new_group_ptr->next = bucket_ptr->data; - bucket_ptr->data = new_group_ptr; - } - - bucket_ptr->size += 1; - entry_ptr = &bucket_ptr->data->entries[i]; - entry_ptr->fd = fd; - } - - entry_ptr->info = *info; - - uv_mutex_unlock(&uv__fd_hash_mutex); -} - -INLINE static int uv__fd_hash_remove(int fd, struct uv__fd_info_s* info) { - FIND_COMMON_VARIABLES - - uv_mutex_lock(&uv__fd_hash_mutex); - - FIND_IN_BUCKET_PTR(); - - if (entry_ptr != NULL) { - *info = entry_ptr->info; - - bucket_ptr->size -= 1; - - i = bucket_ptr->size % UV__FD_HASH_GROUP_SIZE; - if (entry_ptr != &bucket_ptr->data->entries[i]) { - *entry_ptr = bucket_ptr->data->entries[i]; - } - - if (bucket_ptr->size != 0 && - bucket_ptr->size % UV__FD_HASH_GROUP_SIZE == 0) { - struct uv__fd_hash_entry_group_s* old_group_ptr = bucket_ptr->data; - bucket_ptr->data = old_group_ptr->next; - uv__free(old_group_ptr); - } - } - - uv_mutex_unlock(&uv__fd_hash_mutex); - return entry_ptr != NULL; -} - -#undef FIND_COMMON_VARIABLES -#undef FIND_IN_GROUP_PTR -#undef FIND_IN_BUCKET_PTR - -#endif /* UV_WIN_FS_FD_HASH_INL_H_ */ diff --git a/libuv/src/win/fs.c b/libuv/src/win/fs.c deleted file mode 100644 index 6740704..0000000 --- a/libuv/src/win/fs.c +++ /dev/null @@ -1,3427 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "uv.h" -#include "internal.h" -#include "req-inl.h" -#include "handle-inl.h" -#include "fs-fd-hash-inl.h" - - -#define UV_FS_FREE_PATHS 0x0002 -#define UV_FS_FREE_PTR 0x0008 -#define UV_FS_CLEANEDUP 0x0010 - - -#define INIT(subtype) \ - do { \ - if (req == NULL) \ - return UV_EINVAL; \ - uv_fs_req_init(loop, req, subtype, cb); \ - } \ - while (0) - -#define POST \ - do { \ - if (cb != NULL) { \ - uv__req_register(loop, req); \ - uv__work_submit(loop, \ - &req->work_req, \ - UV__WORK_FAST_IO, \ - uv__fs_work, \ - uv__fs_done); \ - return 0; \ - } else { \ - uv__fs_work(&req->work_req); \ - return req->result; \ - } \ - } \ - while (0) - -#define SET_REQ_RESULT(req, result_value) \ - do { \ - req->result = (result_value); \ - assert(req->result != -1); \ - } while (0) - -#define SET_REQ_WIN32_ERROR(req, sys_errno) \ - do { \ - req->sys_errno_ = (sys_errno); \ - req->result = uv_translate_sys_error(req->sys_errno_); \ - } while (0) - -#define SET_REQ_UV_ERROR(req, uv_errno, sys_errno) \ - do { \ - req->result = (uv_errno); \ - req->sys_errno_ = (sys_errno); \ - } while (0) - -#define VERIFY_FD(fd, req) \ - if (fd == -1) { \ - req->result = UV_EBADF; \ - req->sys_errno_ = ERROR_INVALID_HANDLE; \ - return; \ - } - -#define MILLION ((int64_t) 1000 * 1000) -#define BILLION ((int64_t) 1000 * 1000 * 1000) - -static void uv__filetime_to_timespec(uv_timespec_t *ts, int64_t filetime) { - filetime -= 116444736 * BILLION; - ts->tv_sec = (long) (filetime / (10 * MILLION)); - ts->tv_nsec = (long) ((filetime - ts->tv_sec * 10 * MILLION) * 100U); - if (ts->tv_nsec < 0) { - ts->tv_sec -= 1; - ts->tv_nsec += 1e9; - } -} - -#define TIME_T_TO_FILETIME(time, filetime_ptr) \ - do { \ - int64_t bigtime = ((time) * 10 * MILLION + 116444736 * BILLION); \ - (filetime_ptr)->dwLowDateTime = (uint64_t) bigtime & 0xFFFFFFFF; \ - (filetime_ptr)->dwHighDateTime = (uint64_t) bigtime >> 32; \ - } while(0) - -#define IS_SLASH(c) ((c) == L'\\' || (c) == L'/') -#define IS_LETTER(c) (((c) >= L'a' && (c) <= L'z') || \ - ((c) >= L'A' && (c) <= L'Z')) - -#define MIN(a,b) (((a) < (b)) ? (a) : (b)) - -const WCHAR JUNCTION_PREFIX[] = L"\\??\\"; -const WCHAR JUNCTION_PREFIX_LEN = 4; - -const WCHAR LONG_PATH_PREFIX[] = L"\\\\?\\"; -const WCHAR LONG_PATH_PREFIX_LEN = 4; - -const WCHAR UNC_PATH_PREFIX[] = L"\\\\?\\UNC\\"; -const WCHAR UNC_PATH_PREFIX_LEN = 8; - -static int uv__file_symlink_usermode_flag = SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE; - -static DWORD uv__allocation_granularity; - - -void uv_fs_init(void) { - SYSTEM_INFO system_info; - - GetSystemInfo(&system_info); - uv__allocation_granularity = system_info.dwAllocationGranularity; - - uv__fd_hash_init(); -} - - -INLINE static int fs__capture_path(uv_fs_t* req, const char* path, - const char* new_path, const int copy_path) { - char* buf; - char* pos; - ssize_t buf_sz = 0, path_len = 0, pathw_len = 0, 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 = MultiByteToWideChar(CP_UTF8, - 0, - path, - -1, - NULL, - 0); - if (pathw_len == 0) { - return GetLastError(); - } - - 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 = MultiByteToWideChar(CP_UTF8, - 0, - new_path, - -1, - NULL, - 0); - if (new_pathw_len == 0) { - return GetLastError(); - } - - 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 = (char*) uv__malloc(buf_sz); - if (buf == NULL) { - return ERROR_OUTOFMEMORY; - } - - pos = buf; - - if (path != NULL) { - DWORD r = MultiByteToWideChar(CP_UTF8, - 0, - path, - -1, - (WCHAR*) pos, - pathw_len); - assert(r == (DWORD) pathw_len); - req->file.pathw = (WCHAR*) pos; - pos += r * sizeof(WCHAR); - } else { - req->file.pathw = NULL; - } - - if (new_path != NULL) { - DWORD r = MultiByteToWideChar(CP_UTF8, - 0, - new_path, - -1, - (WCHAR*) pos, - new_pathw_len); - assert(r == (DWORD) new_pathw_len); - req->fs.info.new_pathw = (WCHAR*) pos; - pos += r * sizeof(WCHAR); - } 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)); - req->path = 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 int fs__wide_to_utf8(WCHAR* w_source_ptr, - DWORD w_source_len, - char** target_ptr, - uint64_t* target_len_ptr) { - int r; - int target_len; - char* target; - target_len = WideCharToMultiByte(CP_UTF8, - 0, - w_source_ptr, - w_source_len, - NULL, - 0, - NULL, - NULL); - - if (target_len == 0) { - return -1; - } - - if (target_len_ptr != NULL) { - *target_len_ptr = target_len; - } - - if (target_ptr == NULL) { - return 0; - } - - target = uv__malloc(target_len + 1); - if (target == NULL) { - SetLastError(ERROR_OUTOFMEMORY); - return -1; - } - - r = WideCharToMultiByte(CP_UTF8, - 0, - w_source_ptr, - w_source_len, - target, - target_len, - NULL, - NULL); - assert(r == target_len); - target[target_len] = '\0'; - *target_ptr = target; - return 0; -} - - -INLINE static int fs__readlink_handle(HANDLE handle, char** target_ptr, - uint64_t* target_len_ptr) { - char buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; - REPARSE_DATA_BUFFER* reparse_data = (REPARSE_DATA_BUFFER*) buffer; - WCHAR* w_target; - DWORD w_target_len; - DWORD bytes; - size_t i; - size_t len; - - if (!DeviceIoControl(handle, - FSCTL_GET_REPARSE_POINT, - NULL, - 0, - buffer, - sizeof buffer, - &bytes, - NULL)) { - return -1; - } - - if (reparse_data->ReparseTag == IO_REPARSE_TAG_SYMLINK) { - /* Real symlink */ - w_target = reparse_data->SymbolicLinkReparseBuffer.PathBuffer + - (reparse_data->SymbolicLinkReparseBuffer.SubstituteNameOffset / - sizeof(WCHAR)); - w_target_len = - reparse_data->SymbolicLinkReparseBuffer.SubstituteNameLength / - sizeof(WCHAR); - - /* Real symlinks can contain pretty much everything, but the only thing we - * really care about is undoing the implicit conversion to an NT namespaced - * path that CreateSymbolicLink will perform on absolute paths. If the path - * is win32-namespaced then the user must have explicitly made it so, and - * we better just return the unmodified reparse data. */ - if (w_target_len >= 4 && - w_target[0] == L'\\' && - w_target[1] == L'?' && - w_target[2] == L'?' && - w_target[3] == L'\\') { - /* Starts with \??\ */ - if (w_target_len >= 6 && - ((w_target[4] >= L'A' && w_target[4] <= L'Z') || - (w_target[4] >= L'a' && w_target[4] <= L'z')) && - w_target[5] == L':' && - (w_target_len == 6 || w_target[6] == L'\\')) { - /* \??\:\ */ - w_target += 4; - w_target_len -= 4; - - } else if (w_target_len >= 8 && - (w_target[4] == L'U' || w_target[4] == L'u') && - (w_target[5] == L'N' || w_target[5] == L'n') && - (w_target[6] == L'C' || w_target[6] == L'c') && - w_target[7] == L'\\') { - /* \??\UNC\\\ - make sure the final path looks like - * \\\\ */ - w_target += 6; - w_target[0] = L'\\'; - w_target_len -= 6; - } - } - - } else if (reparse_data->ReparseTag == IO_REPARSE_TAG_MOUNT_POINT) { - /* Junction. */ - w_target = reparse_data->MountPointReparseBuffer.PathBuffer + - (reparse_data->MountPointReparseBuffer.SubstituteNameOffset / - sizeof(WCHAR)); - w_target_len = reparse_data->MountPointReparseBuffer.SubstituteNameLength / - sizeof(WCHAR); - - /* Only treat junctions that look like \??\:\ as symlink. Junctions - * can also be used as mount points, like \??\Volume{}, but that's - * confusing for programs since they wouldn't be able to actually - * understand such a path when returned by uv_readlink(). UNC paths are - * never valid for junctions so we don't care about them. */ - if (!(w_target_len >= 6 && - w_target[0] == L'\\' && - w_target[1] == L'?' && - w_target[2] == L'?' && - w_target[3] == L'\\' && - ((w_target[4] >= L'A' && w_target[4] <= L'Z') || - (w_target[4] >= L'a' && w_target[4] <= L'z')) && - w_target[5] == L':' && - (w_target_len == 6 || w_target[6] == L'\\'))) { - SetLastError(ERROR_SYMLINK_NOT_SUPPORTED); - return -1; - } - - /* Remove leading \??\ */ - w_target += 4; - w_target_len -= 4; - - } else if (reparse_data->ReparseTag == IO_REPARSE_TAG_APPEXECLINK) { - /* String #3 in the list has the target filename. */ - if (reparse_data->AppExecLinkReparseBuffer.StringCount < 3) { - SetLastError(ERROR_SYMLINK_NOT_SUPPORTED); - return -1; - } - w_target = reparse_data->AppExecLinkReparseBuffer.StringList; - /* The StringList buffer contains a list of strings separated by "\0", */ - /* with "\0\0" terminating the list. Move to the 3rd string in the list: */ - for (i = 0; i < 2; ++i) { - len = wcslen(w_target); - if (len == 0) { - SetLastError(ERROR_SYMLINK_NOT_SUPPORTED); - return -1; - } - w_target += len + 1; - } - w_target_len = wcslen(w_target); - if (w_target_len == 0) { - SetLastError(ERROR_SYMLINK_NOT_SUPPORTED); - return -1; - } - /* Make sure it is an absolute path. */ - if (!(w_target_len >= 3 && - ((w_target[0] >= L'a' && w_target[0] <= L'z') || - (w_target[0] >= L'A' && w_target[0] <= L'Z')) && - w_target[1] == L':' && - w_target[2] == L'\\')) { - SetLastError(ERROR_SYMLINK_NOT_SUPPORTED); - return -1; - } - - } else { - /* Reparse tag does not indicate a symlink. */ - SetLastError(ERROR_SYMLINK_NOT_SUPPORTED); - return -1; - } - - return fs__wide_to_utf8(w_target, w_target_len, target_ptr, target_len_ptr); -} - - -void fs__open(uv_fs_t* req) { - DWORD access; - DWORD share; - DWORD disposition; - DWORD attributes = 0; - HANDLE file; - int fd, current_umask; - int flags = req->fs.info.file_flags; - struct uv__fd_info_s fd_info; - - /* Adjust flags to be compatible with the memory file mapping. Save the - * original flags to emulate the correct behavior. */ - if (flags & UV_FS_O_FILEMAP) { - fd_info.flags = flags; - fd_info.current_pos.QuadPart = 0; - - if ((flags & (UV_FS_O_RDONLY | UV_FS_O_WRONLY | UV_FS_O_RDWR)) == - UV_FS_O_WRONLY) { - /* CreateFileMapping always needs read access */ - flags = (flags & ~UV_FS_O_WRONLY) | UV_FS_O_RDWR; - } - - if (flags & UV_FS_O_APPEND) { - /* Clear the append flag and ensure RDRW mode */ - flags &= ~UV_FS_O_APPEND; - flags &= ~(UV_FS_O_RDONLY | UV_FS_O_WRONLY | UV_FS_O_RDWR); - flags |= UV_FS_O_RDWR; - } - } - - /* Obtain the active umask. umask() never fails and returns the previous - * umask. */ - current_umask = umask(0); - umask(current_umask); - - /* convert flags and mode to CreateFile parameters */ - switch (flags & (UV_FS_O_RDONLY | UV_FS_O_WRONLY | UV_FS_O_RDWR)) { - case UV_FS_O_RDONLY: - access = FILE_GENERIC_READ; - break; - case UV_FS_O_WRONLY: - access = FILE_GENERIC_WRITE; - break; - case UV_FS_O_RDWR: - access = FILE_GENERIC_READ | FILE_GENERIC_WRITE; - break; - default: - goto einval; - } - - if (flags & UV_FS_O_APPEND) { - access &= ~FILE_WRITE_DATA; - access |= FILE_APPEND_DATA; - } - - /* - * Here is where we deviate significantly from what CRT's _open() - * does. We indiscriminately use all the sharing modes, to match - * UNIX semantics. In particular, this ensures that the file can - * be deleted even whilst it's open, fixing issue - * https://github.com/nodejs/node-v0.x-archive/issues/1449. - * We still support exclusive sharing mode, since it is necessary - * for opening raw block devices, otherwise Windows will prevent - * any attempt to write past the master boot record. - */ - if (flags & UV_FS_O_EXLOCK) { - share = 0; - } else { - share = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE; - } - - switch (flags & (UV_FS_O_CREAT | UV_FS_O_EXCL | UV_FS_O_TRUNC)) { - case 0: - case UV_FS_O_EXCL: - disposition = OPEN_EXISTING; - break; - case UV_FS_O_CREAT: - disposition = OPEN_ALWAYS; - break; - case UV_FS_O_CREAT | UV_FS_O_EXCL: - case UV_FS_O_CREAT | UV_FS_O_TRUNC | UV_FS_O_EXCL: - disposition = CREATE_NEW; - break; - case UV_FS_O_TRUNC: - case UV_FS_O_TRUNC | UV_FS_O_EXCL: - disposition = TRUNCATE_EXISTING; - break; - case UV_FS_O_CREAT | UV_FS_O_TRUNC: - disposition = CREATE_ALWAYS; - break; - default: - goto einval; - } - - attributes |= FILE_ATTRIBUTE_NORMAL; - if (flags & UV_FS_O_CREAT) { - if (!((req->fs.info.mode & ~current_umask) & _S_IWRITE)) { - attributes |= FILE_ATTRIBUTE_READONLY; - } - } - - if (flags & UV_FS_O_TEMPORARY ) { - attributes |= FILE_FLAG_DELETE_ON_CLOSE | FILE_ATTRIBUTE_TEMPORARY; - access |= DELETE; - } - - if (flags & UV_FS_O_SHORT_LIVED) { - attributes |= FILE_ATTRIBUTE_TEMPORARY; - } - - switch (flags & (UV_FS_O_SEQUENTIAL | UV_FS_O_RANDOM)) { - case 0: - break; - case UV_FS_O_SEQUENTIAL: - attributes |= FILE_FLAG_SEQUENTIAL_SCAN; - break; - case UV_FS_O_RANDOM: - attributes |= FILE_FLAG_RANDOM_ACCESS; - break; - default: - goto einval; - } - - if (flags & UV_FS_O_DIRECT) { - /* - * FILE_APPEND_DATA and FILE_FLAG_NO_BUFFERING are mutually exclusive. - * Windows returns 87, ERROR_INVALID_PARAMETER if these are combined. - * - * FILE_APPEND_DATA is included in FILE_GENERIC_WRITE: - * - * FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE | - * FILE_WRITE_DATA | - * FILE_WRITE_ATTRIBUTES | - * FILE_WRITE_EA | - * FILE_APPEND_DATA | - * SYNCHRONIZE - * - * Note: Appends are also permitted by FILE_WRITE_DATA. - * - * In order for direct writes and direct appends to succeed, we therefore - * exclude FILE_APPEND_DATA if FILE_WRITE_DATA is specified, and otherwise - * fail if the user's sole permission is a direct append, since this - * particular combination is invalid. - */ - if (access & FILE_APPEND_DATA) { - if (access & FILE_WRITE_DATA) { - access &= ~FILE_APPEND_DATA; - } else { - goto einval; - } - } - attributes |= FILE_FLAG_NO_BUFFERING; - } - - switch (flags & (UV_FS_O_DSYNC | UV_FS_O_SYNC)) { - case 0: - break; - case UV_FS_O_DSYNC: - case UV_FS_O_SYNC: - attributes |= FILE_FLAG_WRITE_THROUGH; - break; - default: - goto einval; - } - - /* Setting this flag makes it possible to open a directory. */ - attributes |= FILE_FLAG_BACKUP_SEMANTICS; - - file = CreateFileW(req->file.pathw, - access, - share, - NULL, - disposition, - attributes, - NULL); - if (file == INVALID_HANDLE_VALUE) { - DWORD error = GetLastError(); - if (error == ERROR_FILE_EXISTS && (flags & UV_FS_O_CREAT) && - !(flags & UV_FS_O_EXCL)) { - /* Special case: when ERROR_FILE_EXISTS happens and UV_FS_O_CREAT was - * specified, it means the path referred to a directory. */ - SET_REQ_UV_ERROR(req, UV_EISDIR, error); - } else { - SET_REQ_WIN32_ERROR(req, GetLastError()); - } - return; - } - - fd = _open_osfhandle((intptr_t) file, flags); - if (fd < 0) { - /* The only known failure mode for _open_osfhandle() is EMFILE, in which - * case GetLastError() will return zero. However we'll try to handle other - * errors as well, should they ever occur. - */ - if (errno == EMFILE) - SET_REQ_UV_ERROR(req, UV_EMFILE, ERROR_TOO_MANY_OPEN_FILES); - else if (GetLastError() != ERROR_SUCCESS) - SET_REQ_WIN32_ERROR(req, GetLastError()); - else - SET_REQ_WIN32_ERROR(req, (DWORD) UV_UNKNOWN); - CloseHandle(file); - return; - } - - if (flags & UV_FS_O_FILEMAP) { - FILE_STANDARD_INFO file_info; - if (!GetFileInformationByHandleEx(file, - FileStandardInfo, - &file_info, - sizeof file_info)) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - CloseHandle(file); - return; - } - fd_info.is_directory = file_info.Directory; - - if (fd_info.is_directory) { - fd_info.size.QuadPart = 0; - fd_info.mapping = INVALID_HANDLE_VALUE; - } else { - if (!GetFileSizeEx(file, &fd_info.size)) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - CloseHandle(file); - return; - } - - if (fd_info.size.QuadPart == 0) { - fd_info.mapping = INVALID_HANDLE_VALUE; - } else { - DWORD flProtect = (fd_info.flags & (UV_FS_O_RDONLY | UV_FS_O_WRONLY | - UV_FS_O_RDWR)) == UV_FS_O_RDONLY ? PAGE_READONLY : PAGE_READWRITE; - fd_info.mapping = CreateFileMapping(file, - NULL, - flProtect, - fd_info.size.HighPart, - fd_info.size.LowPart, - NULL); - if (fd_info.mapping == NULL) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - CloseHandle(file); - return; - } - } - } - - uv__fd_hash_add(fd, &fd_info); - } - - SET_REQ_RESULT(req, fd); - return; - - einval: - SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); -} - -void fs__close(uv_fs_t* req) { - int fd = req->file.fd; - int result; - struct uv__fd_info_s fd_info; - - VERIFY_FD(fd, req); - - if (uv__fd_hash_remove(fd, &fd_info)) { - if (fd_info.mapping != INVALID_HANDLE_VALUE) { - CloseHandle(fd_info.mapping); - } - } - - if (fd > 2) - result = _close(fd); - else - result = 0; - - /* _close doesn't set _doserrno on failure, but it does always set errno - * to EBADF on failure. - */ - if (result == -1) { - assert(errno == EBADF); - SET_REQ_UV_ERROR(req, UV_EBADF, ERROR_INVALID_HANDLE); - } else { - SET_REQ_RESULT(req, 0); - } -} - - -LONG fs__filemap_ex_filter(LONG excode, PEXCEPTION_POINTERS pep, - int* perror) { - if (excode != (LONG)EXCEPTION_IN_PAGE_ERROR) { - return EXCEPTION_CONTINUE_SEARCH; - } - - assert(perror != NULL); - if (pep != NULL && pep->ExceptionRecord != NULL && - pep->ExceptionRecord->NumberParameters >= 3) { - NTSTATUS status = (NTSTATUS)pep->ExceptionRecord->ExceptionInformation[3]; - *perror = pRtlNtStatusToDosError(status); - if (*perror != ERROR_SUCCESS) { - return EXCEPTION_EXECUTE_HANDLER; - } - } - *perror = UV_UNKNOWN; - return EXCEPTION_EXECUTE_HANDLER; -} - - -void fs__read_filemap(uv_fs_t* req, struct uv__fd_info_s* fd_info) { - int fd = req->file.fd; /* VERIFY_FD done in fs__read */ - int rw_flags = fd_info->flags & - (UV_FS_O_RDONLY | UV_FS_O_WRONLY | UV_FS_O_RDWR); - size_t read_size, done_read; - unsigned int index; - LARGE_INTEGER pos, end_pos; - size_t view_offset; - LARGE_INTEGER view_base; - void* view; - - if (rw_flags == UV_FS_O_WRONLY) { - SET_REQ_WIN32_ERROR(req, ERROR_ACCESS_DENIED); - return; - } - if (fd_info->is_directory) { - SET_REQ_WIN32_ERROR(req, ERROR_INVALID_FUNCTION); - return; - } - - if (req->fs.info.offset == -1) { - pos = fd_info->current_pos; - } else { - pos.QuadPart = req->fs.info.offset; - } - - /* Make sure we wont read past EOF. */ - if (pos.QuadPart >= fd_info->size.QuadPart) { - SET_REQ_RESULT(req, 0); - return; - } - - read_size = 0; - for (index = 0; index < req->fs.info.nbufs; ++index) { - read_size += req->fs.info.bufs[index].len; - } - read_size = (size_t) MIN((LONGLONG) read_size, - fd_info->size.QuadPart - pos.QuadPart); - if (read_size == 0) { - SET_REQ_RESULT(req, 0); - return; - } - - end_pos.QuadPart = pos.QuadPart + read_size; - - view_offset = pos.QuadPart % uv__allocation_granularity; - view_base.QuadPart = pos.QuadPart - view_offset; - view = MapViewOfFile(fd_info->mapping, - FILE_MAP_READ, - view_base.HighPart, - view_base.LowPart, - view_offset + read_size); - if (view == NULL) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - return; - } - - done_read = 0; - for (index = 0; - index < req->fs.info.nbufs && done_read < read_size; - ++index) { - size_t this_read_size = MIN(req->fs.info.bufs[index].len, - read_size - done_read); -#ifdef _MSC_VER - int err = 0; - __try { -#endif - memcpy(req->fs.info.bufs[index].base, - (char*)view + view_offset + done_read, - this_read_size); -#ifdef _MSC_VER - } - __except (fs__filemap_ex_filter(GetExceptionCode(), - GetExceptionInformation(), &err)) { - SET_REQ_WIN32_ERROR(req, err); - UnmapViewOfFile(view); - return; - } -#endif - done_read += this_read_size; - } - assert(done_read == read_size); - - if (!UnmapViewOfFile(view)) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - return; - } - - if (req->fs.info.offset == -1) { - fd_info->current_pos = end_pos; - uv__fd_hash_add(fd, fd_info); - } - - SET_REQ_RESULT(req, read_size); - return; -} - -void fs__read(uv_fs_t* req) { - int fd = req->file.fd; - int64_t offset = req->fs.info.offset; - HANDLE handle; - OVERLAPPED overlapped, *overlapped_ptr; - LARGE_INTEGER offset_; - DWORD bytes; - DWORD error; - int result; - unsigned int index; - LARGE_INTEGER original_position; - LARGE_INTEGER zero_offset; - int restore_position; - struct uv__fd_info_s fd_info; - - VERIFY_FD(fd, req); - - if (uv__fd_hash_get(fd, &fd_info)) { - fs__read_filemap(req, &fd_info); - return; - } - - zero_offset.QuadPart = 0; - restore_position = 0; - handle = uv__get_osfhandle(fd); - - if (handle == INVALID_HANDLE_VALUE) { - SET_REQ_WIN32_ERROR(req, ERROR_INVALID_HANDLE); - return; - } - - if (offset != -1) { - memset(&overlapped, 0, sizeof overlapped); - overlapped_ptr = &overlapped; - if (SetFilePointerEx(handle, zero_offset, &original_position, - FILE_CURRENT)) { - restore_position = 1; - } - } else { - overlapped_ptr = NULL; - } - - index = 0; - bytes = 0; - do { - DWORD incremental_bytes; - - if (offset != -1) { - offset_.QuadPart = offset + bytes; - overlapped.Offset = offset_.LowPart; - overlapped.OffsetHigh = offset_.HighPart; - } - - result = ReadFile(handle, - req->fs.info.bufs[index].base, - req->fs.info.bufs[index].len, - &incremental_bytes, - overlapped_ptr); - bytes += incremental_bytes; - ++index; - } while (result && index < req->fs.info.nbufs); - - if (restore_position) - SetFilePointerEx(handle, original_position, NULL, FILE_BEGIN); - - if (result || bytes > 0) { - SET_REQ_RESULT(req, bytes); - } else { - error = GetLastError(); - if (error == ERROR_HANDLE_EOF) { - SET_REQ_RESULT(req, bytes); - } else { - SET_REQ_WIN32_ERROR(req, error); - } - } -} - - -void fs__write_filemap(uv_fs_t* req, HANDLE file, - struct uv__fd_info_s* fd_info) { - int fd = req->file.fd; /* VERIFY_FD done in fs__write */ - int force_append = fd_info->flags & UV_FS_O_APPEND; - int rw_flags = fd_info->flags & - (UV_FS_O_RDONLY | UV_FS_O_WRONLY | UV_FS_O_RDWR); - size_t write_size, done_write; - unsigned int index; - LARGE_INTEGER pos, end_pos; - size_t view_offset; - LARGE_INTEGER view_base; - void* view; - FILETIME ft; - - if (rw_flags == UV_FS_O_RDONLY) { - SET_REQ_WIN32_ERROR(req, ERROR_ACCESS_DENIED); - return; - } - if (fd_info->is_directory) { - SET_REQ_WIN32_ERROR(req, ERROR_INVALID_FUNCTION); - return; - } - - write_size = 0; - for (index = 0; index < req->fs.info.nbufs; ++index) { - write_size += req->fs.info.bufs[index].len; - } - - if (write_size == 0) { - SET_REQ_RESULT(req, 0); - return; - } - - if (force_append) { - pos = fd_info->size; - } else if (req->fs.info.offset == -1) { - pos = fd_info->current_pos; - } else { - pos.QuadPart = req->fs.info.offset; - } - - end_pos.QuadPart = pos.QuadPart + write_size; - - /* Recreate the mapping to enlarge the file if needed */ - if (end_pos.QuadPart > fd_info->size.QuadPart) { - if (fd_info->mapping != INVALID_HANDLE_VALUE) { - CloseHandle(fd_info->mapping); - } - - fd_info->mapping = CreateFileMapping(file, - NULL, - PAGE_READWRITE, - end_pos.HighPart, - end_pos.LowPart, - NULL); - if (fd_info->mapping == NULL) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - CloseHandle(file); - fd_info->mapping = INVALID_HANDLE_VALUE; - fd_info->size.QuadPart = 0; - fd_info->current_pos.QuadPart = 0; - uv__fd_hash_add(fd, fd_info); - return; - } - - fd_info->size = end_pos; - uv__fd_hash_add(fd, fd_info); - } - - view_offset = pos.QuadPart % uv__allocation_granularity; - view_base.QuadPart = pos.QuadPart - view_offset; - view = MapViewOfFile(fd_info->mapping, - FILE_MAP_WRITE, - view_base.HighPart, - view_base.LowPart, - view_offset + write_size); - if (view == NULL) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - return; - } - - done_write = 0; - for (index = 0; index < req->fs.info.nbufs; ++index) { -#ifdef _MSC_VER - int err = 0; - __try { -#endif - memcpy((char*)view + view_offset + done_write, - req->fs.info.bufs[index].base, - req->fs.info.bufs[index].len); -#ifdef _MSC_VER - } - __except (fs__filemap_ex_filter(GetExceptionCode(), - GetExceptionInformation(), &err)) { - SET_REQ_WIN32_ERROR(req, err); - UnmapViewOfFile(view); - return; - } -#endif - done_write += req->fs.info.bufs[index].len; - } - assert(done_write == write_size); - - if (!FlushViewOfFile(view, 0)) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - UnmapViewOfFile(view); - return; - } - if (!UnmapViewOfFile(view)) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - return; - } - - if (req->fs.info.offset == -1) { - fd_info->current_pos = end_pos; - uv__fd_hash_add(fd, fd_info); - } - - GetSystemTimeAsFileTime(&ft); - SetFileTime(file, NULL, NULL, &ft); - - SET_REQ_RESULT(req, done_write); -} - -void fs__write(uv_fs_t* req) { - int fd = req->file.fd; - int64_t offset = req->fs.info.offset; - HANDLE handle; - OVERLAPPED overlapped, *overlapped_ptr; - LARGE_INTEGER offset_; - DWORD bytes; - int result; - unsigned int index; - LARGE_INTEGER original_position; - LARGE_INTEGER zero_offset; - int restore_position; - struct uv__fd_info_s fd_info; - - VERIFY_FD(fd, req); - - zero_offset.QuadPart = 0; - restore_position = 0; - handle = uv__get_osfhandle(fd); - if (handle == INVALID_HANDLE_VALUE) { - SET_REQ_WIN32_ERROR(req, ERROR_INVALID_HANDLE); - return; - } - - if (uv__fd_hash_get(fd, &fd_info)) { - fs__write_filemap(req, handle, &fd_info); - return; - } - - if (offset != -1) { - memset(&overlapped, 0, sizeof overlapped); - overlapped_ptr = &overlapped; - if (SetFilePointerEx(handle, zero_offset, &original_position, - FILE_CURRENT)) { - restore_position = 1; - } - } else { - overlapped_ptr = NULL; - } - - index = 0; - bytes = 0; - do { - DWORD incremental_bytes; - - if (offset != -1) { - offset_.QuadPart = offset + bytes; - overlapped.Offset = offset_.LowPart; - overlapped.OffsetHigh = offset_.HighPart; - } - - result = WriteFile(handle, - req->fs.info.bufs[index].base, - req->fs.info.bufs[index].len, - &incremental_bytes, - overlapped_ptr); - bytes += incremental_bytes; - ++index; - } while (result && index < req->fs.info.nbufs); - - if (restore_position) - SetFilePointerEx(handle, original_position, NULL, FILE_BEGIN); - - if (result || bytes > 0) { - SET_REQ_RESULT(req, bytes); - } else { - SET_REQ_WIN32_ERROR(req, GetLastError()); - } -} - - -void fs__rmdir(uv_fs_t* req) { - int result = _wrmdir(req->file.pathw); - if (result == -1) - SET_REQ_WIN32_ERROR(req, _doserrno); - else - SET_REQ_RESULT(req, 0); -} - - -void fs__unlink(uv_fs_t* req) { - const WCHAR* pathw = req->file.pathw; - HANDLE handle; - BY_HANDLE_FILE_INFORMATION info; - FILE_DISPOSITION_INFORMATION disposition; - IO_STATUS_BLOCK iosb; - NTSTATUS status; - - handle = CreateFileW(pathw, - FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES | DELETE, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - NULL, - OPEN_EXISTING, - FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, - NULL); - - if (handle == INVALID_HANDLE_VALUE) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - return; - } - - if (!GetFileInformationByHandle(handle, &info)) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - CloseHandle(handle); - return; - } - - if (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { - /* Do not allow deletion of directories, unless it is a symlink. When the - * path refers to a non-symlink directory, report EPERM as mandated by - * POSIX.1. */ - - /* Check if it is a reparse point. If it's not, it's a normal directory. */ - if (!(info.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) { - SET_REQ_WIN32_ERROR(req, ERROR_ACCESS_DENIED); - CloseHandle(handle); - return; - } - - /* Read the reparse point and check if it is a valid symlink. If not, don't - * unlink. */ - if (fs__readlink_handle(handle, NULL, NULL) < 0) { - DWORD error = GetLastError(); - if (error == ERROR_SYMLINK_NOT_SUPPORTED) - error = ERROR_ACCESS_DENIED; - SET_REQ_WIN32_ERROR(req, error); - CloseHandle(handle); - return; - } - } - - if (info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { - /* Remove read-only attribute */ - FILE_BASIC_INFORMATION basic = { 0 }; - - basic.FileAttributes = (info.dwFileAttributes & ~FILE_ATTRIBUTE_READONLY) | - FILE_ATTRIBUTE_ARCHIVE; - - status = pNtSetInformationFile(handle, - &iosb, - &basic, - sizeof basic, - FileBasicInformation); - if (!NT_SUCCESS(status)) { - SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(status)); - CloseHandle(handle); - return; - } - } - - /* Try to set the delete flag. */ - disposition.DeleteFile = TRUE; - status = pNtSetInformationFile(handle, - &iosb, - &disposition, - sizeof disposition, - FileDispositionInformation); - if (NT_SUCCESS(status)) { - SET_REQ_SUCCESS(req); - } else { - SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(status)); - } - - CloseHandle(handle); -} - - -void fs__mkdir(uv_fs_t* req) { - /* TODO: use req->mode. */ - if (CreateDirectoryW(req->file.pathw, NULL)) { - SET_REQ_RESULT(req, 0); - } else { - SET_REQ_WIN32_ERROR(req, GetLastError()); - if (req->sys_errno_ == ERROR_INVALID_NAME || - req->sys_errno_ == ERROR_DIRECTORY) - req->result = UV_EINVAL; - } -} - -typedef int (*uv__fs_mktemp_func)(uv_fs_t* req); - -/* OpenBSD original: lib/libc/stdio/mktemp.c */ -void fs__mktemp(uv_fs_t* req, uv__fs_mktemp_func func) { - static const WCHAR *tempchars = - L"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - static const size_t num_chars = 62; - static const size_t num_x = 6; - WCHAR *cp, *ep; - unsigned int tries, i; - size_t len; - uint64_t v; - char* path; - - path = (char*)req->path; - len = wcslen(req->file.pathw); - ep = req->file.pathw + len; - if (len < num_x || wcsncmp(ep - num_x, L"XXXXXX", num_x)) { - SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); - goto clobber; - } - - tries = TMP_MAX; - do { - if (uv__random_rtlgenrandom((void *)&v, sizeof(v)) < 0) { - SET_REQ_UV_ERROR(req, UV_EIO, ERROR_IO_DEVICE); - goto clobber; - } - - cp = ep - num_x; - for (i = 0; i < num_x; i++) { - *cp++ = tempchars[v % num_chars]; - v /= num_chars; - } - - if (func(req)) { - if (req->result >= 0) { - len = strlen(path); - wcstombs(path + len - num_x, ep - num_x, num_x); - } - return; - } - } while (--tries); - - SET_REQ_WIN32_ERROR(req, GetLastError()); - -clobber: - path[0] = '\0'; -} - - -static int fs__mkdtemp_func(uv_fs_t* req) { - DWORD error; - if (CreateDirectoryW(req->file.pathw, NULL)) { - SET_REQ_RESULT(req, 0); - return 1; - } - error = GetLastError(); - if (error != ERROR_ALREADY_EXISTS) { - SET_REQ_WIN32_ERROR(req, error); - return 1; - } - - return 0; -} - - -void fs__mkdtemp(uv_fs_t* req) { - fs__mktemp(req, fs__mkdtemp_func); -} - - -static int fs__mkstemp_func(uv_fs_t* req) { - HANDLE file; - int fd; - - file = CreateFileW(req->file.pathw, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - NULL, - CREATE_NEW, - FILE_ATTRIBUTE_NORMAL, - NULL); - - if (file == INVALID_HANDLE_VALUE) { - DWORD error; - error = GetLastError(); - - /* If the file exists, the main fs__mktemp() function - will retry. If it's another error, we want to stop. */ - if (error != ERROR_FILE_EXISTS) { - SET_REQ_WIN32_ERROR(req, error); - return 1; - } - - return 0; - } - - fd = _open_osfhandle((intptr_t) file, 0); - if (fd < 0) { - /* The only known failure mode for _open_osfhandle() is EMFILE, in which - * case GetLastError() will return zero. However we'll try to handle other - * errors as well, should they ever occur. - */ - if (errno == EMFILE) - SET_REQ_UV_ERROR(req, UV_EMFILE, ERROR_TOO_MANY_OPEN_FILES); - else if (GetLastError() != ERROR_SUCCESS) - SET_REQ_WIN32_ERROR(req, GetLastError()); - else - SET_REQ_WIN32_ERROR(req, UV_UNKNOWN); - CloseHandle(file); - return 1; - } - - SET_REQ_RESULT(req, fd); - - return 1; -} - - -void fs__mkstemp(uv_fs_t* req) { - fs__mktemp(req, fs__mkstemp_func); -} - - -void fs__scandir(uv_fs_t* req) { - static const size_t dirents_initial_size = 32; - - HANDLE dir_handle = INVALID_HANDLE_VALUE; - - uv__dirent_t** dirents = NULL; - size_t dirents_size = 0; - size_t dirents_used = 0; - - IO_STATUS_BLOCK iosb; - NTSTATUS status; - - /* Buffer to hold directory entries returned by NtQueryDirectoryFile. - * It's important that this buffer can hold at least one entry, regardless - * of the length of the file names present in the enumerated directory. - * A file name is at most 256 WCHARs long. - * According to MSDN, the buffer must be aligned at an 8-byte boundary. - */ -#if _MSC_VER - __declspec(align(8)) char buffer[8192]; -#else - __attribute__ ((aligned (8))) char buffer[8192]; -#endif - - STATIC_ASSERT(sizeof buffer >= - sizeof(FILE_DIRECTORY_INFORMATION) + 256 * sizeof(WCHAR)); - - /* Open the directory. */ - dir_handle = - CreateFileW(req->file.pathw, - FILE_LIST_DIRECTORY | SYNCHRONIZE, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - NULL, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, - NULL); - if (dir_handle == INVALID_HANDLE_VALUE) - goto win32_error; - - /* Read the first chunk. */ - status = pNtQueryDirectoryFile(dir_handle, - NULL, - NULL, - NULL, - &iosb, - &buffer, - sizeof buffer, - FileDirectoryInformation, - FALSE, - NULL, - TRUE); - - /* If the handle is not a directory, we'll get STATUS_INVALID_PARAMETER. - * This should be reported back as UV_ENOTDIR. - */ - if (status == (NTSTATUS)STATUS_INVALID_PARAMETER) - goto not_a_directory_error; - - while (NT_SUCCESS(status)) { - char* position = buffer; - size_t next_entry_offset = 0; - - do { - FILE_DIRECTORY_INFORMATION* info; - uv__dirent_t* dirent; - - size_t wchar_len; - size_t utf8_len; - - /* Obtain a pointer to the current directory entry. */ - position += next_entry_offset; - info = (FILE_DIRECTORY_INFORMATION*) position; - - /* Fetch the offset to the next directory entry. */ - next_entry_offset = info->NextEntryOffset; - - /* Compute the length of the filename in WCHARs. */ - wchar_len = info->FileNameLength / sizeof info->FileName[0]; - - /* Skip over '.' and '..' entries. It has been reported that - * the SharePoint driver includes the terminating zero byte in - * the filename length. Strip those first. - */ - while (wchar_len > 0 && info->FileName[wchar_len - 1] == L'\0') - wchar_len -= 1; - - if (wchar_len == 0) - continue; - if (wchar_len == 1 && info->FileName[0] == L'.') - continue; - if (wchar_len == 2 && info->FileName[0] == L'.' && - info->FileName[1] == L'.') - continue; - - /* Compute the space required to store the filename as UTF-8. */ - utf8_len = WideCharToMultiByte( - CP_UTF8, 0, &info->FileName[0], wchar_len, NULL, 0, NULL, NULL); - if (utf8_len == 0) - goto win32_error; - - /* Resize the dirent array if needed. */ - if (dirents_used >= dirents_size) { - size_t new_dirents_size = - dirents_size == 0 ? dirents_initial_size : dirents_size << 1; - uv__dirent_t** new_dirents = - uv__realloc(dirents, new_dirents_size * sizeof *dirents); - - if (new_dirents == NULL) - goto out_of_memory_error; - - dirents_size = new_dirents_size; - dirents = new_dirents; - } - - /* Allocate space for the uv dirent structure. The dirent structure - * includes room for the first character of the filename, but `utf8_len` - * doesn't count the NULL terminator at this point. - */ - dirent = uv__malloc(sizeof *dirent + utf8_len); - if (dirent == NULL) - goto out_of_memory_error; - - dirents[dirents_used++] = dirent; - - /* Convert file name to UTF-8. */ - if (WideCharToMultiByte(CP_UTF8, - 0, - &info->FileName[0], - wchar_len, - &dirent->d_name[0], - utf8_len, - NULL, - NULL) == 0) - goto win32_error; - - /* Add a null terminator to the filename. */ - dirent->d_name[utf8_len] = '\0'; - - /* Fill out the type field. */ - if (info->FileAttributes & FILE_ATTRIBUTE_DEVICE) - dirent->d_type = UV__DT_CHAR; - else if (info->FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) - dirent->d_type = UV__DT_LINK; - else if (info->FileAttributes & FILE_ATTRIBUTE_DIRECTORY) - dirent->d_type = UV__DT_DIR; - else - dirent->d_type = UV__DT_FILE; - } while (next_entry_offset != 0); - - /* Read the next chunk. */ - status = pNtQueryDirectoryFile(dir_handle, - NULL, - NULL, - NULL, - &iosb, - &buffer, - sizeof buffer, - FileDirectoryInformation, - FALSE, - NULL, - FALSE); - - /* After the first pNtQueryDirectoryFile call, the function may return - * STATUS_SUCCESS even if the buffer was too small to hold at least one - * directory entry. - */ - if (status == STATUS_SUCCESS && iosb.Information == 0) - status = STATUS_BUFFER_OVERFLOW; - } - - if (status != STATUS_NO_MORE_FILES) - goto nt_error; - - CloseHandle(dir_handle); - - /* Store the result in the request object. */ - req->ptr = dirents; - if (dirents != NULL) - req->flags |= UV_FS_FREE_PTR; - - SET_REQ_RESULT(req, dirents_used); - - /* `nbufs` will be used as index by uv_fs_scandir_next. */ - req->fs.info.nbufs = 0; - - return; - -nt_error: - SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(status)); - goto cleanup; - -win32_error: - SET_REQ_WIN32_ERROR(req, GetLastError()); - goto cleanup; - -not_a_directory_error: - SET_REQ_UV_ERROR(req, UV_ENOTDIR, ERROR_DIRECTORY); - goto cleanup; - -out_of_memory_error: - SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); - goto cleanup; - -cleanup: - if (dir_handle != INVALID_HANDLE_VALUE) - CloseHandle(dir_handle); - while (dirents_used > 0) - uv__free(dirents[--dirents_used]); - if (dirents != NULL) - uv__free(dirents); -} - -void fs__opendir(uv_fs_t* req) { - WCHAR* pathw; - size_t len; - const WCHAR* fmt; - WCHAR* find_path; - uv_dir_t* dir; - - pathw = req->file.pathw; - dir = NULL; - find_path = NULL; - - /* Figure out whether path is a file or a directory. */ - if (!(GetFileAttributesW(pathw) & FILE_ATTRIBUTE_DIRECTORY)) { - SET_REQ_UV_ERROR(req, UV_ENOTDIR, ERROR_DIRECTORY); - goto error; - } - - dir = uv__malloc(sizeof(*dir)); - if (dir == NULL) { - SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); - goto error; - } - - len = wcslen(pathw); - - if (len == 0) - fmt = L"./*"; - else if (IS_SLASH(pathw[len - 1])) - fmt = L"%s*"; - else - fmt = L"%s\\*"; - - find_path = uv__malloc(sizeof(WCHAR) * (len + 4)); - if (find_path == NULL) { - SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); - goto error; - } - - _snwprintf(find_path, len + 3, fmt, pathw); - dir->dir_handle = FindFirstFileW(find_path, &dir->find_data); - uv__free(find_path); - find_path = NULL; - if (dir->dir_handle == INVALID_HANDLE_VALUE && - GetLastError() != ERROR_FILE_NOT_FOUND) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - goto error; - } - - dir->need_find_call = FALSE; - req->ptr = dir; - SET_REQ_RESULT(req, 0); - return; - -error: - uv__free(dir); - uv__free(find_path); - req->ptr = NULL; -} - -void fs__readdir(uv_fs_t* req) { - uv_dir_t* dir; - uv_dirent_t* dirents; - uv__dirent_t dent; - unsigned int dirent_idx; - PWIN32_FIND_DATAW find_data; - unsigned int i; - int r; - - req->flags |= UV_FS_FREE_PTR; - dir = req->ptr; - dirents = dir->dirents; - memset(dirents, 0, dir->nentries * sizeof(*dir->dirents)); - find_data = &dir->find_data; - dirent_idx = 0; - - while (dirent_idx < dir->nentries) { - if (dir->need_find_call && FindNextFileW(dir->dir_handle, find_data) == 0) { - if (GetLastError() == ERROR_NO_MORE_FILES) - break; - goto error; - } - - /* Skip "." and ".." entries. */ - if (find_data->cFileName[0] == L'.' && - (find_data->cFileName[1] == L'\0' || - (find_data->cFileName[1] == L'.' && - find_data->cFileName[2] == L'\0'))) { - dir->need_find_call = TRUE; - continue; - } - - r = uv__convert_utf16_to_utf8((const WCHAR*) &find_data->cFileName, - -1, - (char**) &dirents[dirent_idx].name); - if (r != 0) - goto error; - - /* Copy file type. */ - if ((find_data->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) - dent.d_type = UV__DT_DIR; - else if ((find_data->dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0) - dent.d_type = UV__DT_LINK; - else if ((find_data->dwFileAttributes & FILE_ATTRIBUTE_DEVICE) != 0) - dent.d_type = UV__DT_CHAR; - else - dent.d_type = UV__DT_FILE; - - dirents[dirent_idx].type = uv__fs_get_dirent_type(&dent); - dir->need_find_call = TRUE; - ++dirent_idx; - } - - SET_REQ_RESULT(req, dirent_idx); - return; - -error: - SET_REQ_WIN32_ERROR(req, GetLastError()); - for (i = 0; i < dirent_idx; ++i) { - uv__free((char*) dirents[i].name); - dirents[i].name = NULL; - } -} - -void fs__closedir(uv_fs_t* req) { - uv_dir_t* dir; - - dir = req->ptr; - FindClose(dir->dir_handle); - uv__free(req->ptr); - SET_REQ_RESULT(req, 0); -} - -INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf, - int do_lstat) { - FILE_ALL_INFORMATION file_info; - FILE_FS_VOLUME_INFORMATION volume_info; - NTSTATUS nt_status; - IO_STATUS_BLOCK io_status; - - nt_status = pNtQueryInformationFile(handle, - &io_status, - &file_info, - sizeof file_info, - FileAllInformation); - - /* Buffer overflow (a warning status code) is expected here. */ - if (NT_ERROR(nt_status)) { - SetLastError(pRtlNtStatusToDosError(nt_status)); - return -1; - } - - nt_status = pNtQueryVolumeInformationFile(handle, - &io_status, - &volume_info, - sizeof volume_info, - FileFsVolumeInformation); - - /* Buffer overflow (a warning status code) is expected here. */ - if (io_status.Status == STATUS_NOT_IMPLEMENTED) { - statbuf->st_dev = 0; - } else if (NT_ERROR(nt_status)) { - SetLastError(pRtlNtStatusToDosError(nt_status)); - return -1; - } else { - statbuf->st_dev = volume_info.VolumeSerialNumber; - } - - /* Todo: st_mode should probably always be 0666 for everyone. We might also - * want to report 0777 if the file is a .exe or a directory. - * - * Currently it's based on whether the 'readonly' attribute is set, which - * makes little sense because the semantics are so different: the 'read-only' - * flag is just a way for a user to protect against accidental deletion, and - * serves no security purpose. Windows uses ACLs for that. - * - * Also people now use uv_fs_chmod() to take away the writable bit for good - * reasons. Windows however just makes the file read-only, which makes it - * impossible to delete the file afterwards, since read-only files can't be - * deleted. - * - * IOW it's all just a clusterfuck and we should think of something that - * makes slightly more sense. - * - * And uv_fs_chmod should probably just fail on windows or be a total no-op. - * There's nothing sensible it can do anyway. - */ - statbuf->st_mode = 0; - - /* - * On Windows, FILE_ATTRIBUTE_REPARSE_POINT is a general purpose mechanism - * by which filesystem drivers can intercept and alter file system requests. - * - * The only reparse points we care about are symlinks and mount points, both - * of which are treated as POSIX symlinks. Further, we only care when - * invoked via lstat, which seeks information about the link instead of its - * target. Otherwise, reparse points must be treated as regular files. - */ - if (do_lstat && - (file_info.BasicInformation.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) { - /* - * If reading the link fails, the reparse point is not a symlink and needs - * to be treated as a regular file. The higher level lstat function will - * detect this failure and retry without do_lstat if appropriate. - */ - if (fs__readlink_handle(handle, NULL, &statbuf->st_size) != 0) - return -1; - statbuf->st_mode |= S_IFLNK; - } - - if (statbuf->st_mode == 0) { - if (file_info.BasicInformation.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) { - statbuf->st_mode |= _S_IFDIR; - statbuf->st_size = 0; - } else { - statbuf->st_mode |= _S_IFREG; - statbuf->st_size = file_info.StandardInformation.EndOfFile.QuadPart; - } - } - - if (file_info.BasicInformation.FileAttributes & FILE_ATTRIBUTE_READONLY) - statbuf->st_mode |= _S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6); - else - statbuf->st_mode |= (_S_IREAD | _S_IWRITE) | ((_S_IREAD | _S_IWRITE) >> 3) | - ((_S_IREAD | _S_IWRITE) >> 6); - - uv__filetime_to_timespec(&statbuf->st_atim, - file_info.BasicInformation.LastAccessTime.QuadPart); - uv__filetime_to_timespec(&statbuf->st_ctim, - file_info.BasicInformation.ChangeTime.QuadPart); - uv__filetime_to_timespec(&statbuf->st_mtim, - file_info.BasicInformation.LastWriteTime.QuadPart); - uv__filetime_to_timespec(&statbuf->st_birthtim, - file_info.BasicInformation.CreationTime.QuadPart); - - statbuf->st_ino = file_info.InternalInformation.IndexNumber.QuadPart; - - /* st_blocks contains the on-disk allocation size in 512-byte units. */ - statbuf->st_blocks = - (uint64_t) file_info.StandardInformation.AllocationSize.QuadPart >> 9; - - statbuf->st_nlink = file_info.StandardInformation.NumberOfLinks; - - /* The st_blksize is supposed to be the 'optimal' number of bytes for reading - * and writing to the disk. That is, for any definition of 'optimal' - it's - * supposed to at least avoid read-update-write behavior when writing to the - * disk. - * - * However nobody knows this and even fewer people actually use this value, - * and in order to fill it out we'd have to make another syscall to query the - * volume for FILE_FS_SECTOR_SIZE_INFORMATION. - * - * Therefore we'll just report a sensible value that's quite commonly okay - * on modern hardware. - * - * 4096 is the minimum required to be compatible with newer Advanced Format - * drives (which have 4096 bytes per physical sector), and to be backwards - * compatible with older drives (which have 512 bytes per physical sector). - */ - statbuf->st_blksize = 4096; - - /* Todo: set st_flags to something meaningful. Also provide a wrapper for - * chattr(2). - */ - statbuf->st_flags = 0; - - /* Windows has nothing sensible to say about these values, so they'll just - * remain empty. - */ - statbuf->st_gid = 0; - statbuf->st_uid = 0; - statbuf->st_rdev = 0; - statbuf->st_gen = 0; - - return 0; -} - - -INLINE static void fs__stat_prepare_path(WCHAR* pathw) { - size_t len = wcslen(pathw); - - /* TODO: ignore namespaced paths. */ - if (len > 1 && pathw[len - 2] != L':' && - (pathw[len - 1] == L'\\' || pathw[len - 1] == L'/')) { - pathw[len - 1] = '\0'; - } -} - - -INLINE static DWORD fs__stat_impl_from_path(WCHAR* path, - int do_lstat, - uv_stat_t* statbuf) { - HANDLE handle; - DWORD flags; - DWORD ret; - - flags = FILE_FLAG_BACKUP_SEMANTICS; - if (do_lstat) - flags |= FILE_FLAG_OPEN_REPARSE_POINT; - - handle = CreateFileW(path, - FILE_READ_ATTRIBUTES, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - NULL, - OPEN_EXISTING, - flags, - NULL); - - if (handle == INVALID_HANDLE_VALUE) - ret = GetLastError(); - else if (fs__stat_handle(handle, statbuf, do_lstat) != 0) - ret = GetLastError(); - else - ret = 0; - - CloseHandle(handle); - return ret; -} - - -INLINE static void fs__stat_impl(uv_fs_t* req, int do_lstat) { - DWORD error; - - error = fs__stat_impl_from_path(req->file.pathw, do_lstat, &req->statbuf); - if (error != 0) { - if (do_lstat && - (error == ERROR_SYMLINK_NOT_SUPPORTED || - error == ERROR_NOT_A_REPARSE_POINT)) { - /* We opened a reparse point but it was not a symlink. Try again. */ - fs__stat_impl(req, 0); - } else { - /* Stat failed. */ - SET_REQ_WIN32_ERROR(req, error); - } - - return; - } - - req->ptr = &req->statbuf; - SET_REQ_RESULT(req, 0); -} - - -static void fs__stat(uv_fs_t* req) { - fs__stat_prepare_path(req->file.pathw); - fs__stat_impl(req, 0); -} - - -static void fs__lstat(uv_fs_t* req) { - fs__stat_prepare_path(req->file.pathw); - fs__stat_impl(req, 1); -} - - -static void fs__fstat(uv_fs_t* req) { - int fd = req->file.fd; - HANDLE handle; - - VERIFY_FD(fd, req); - - handle = uv__get_osfhandle(fd); - - if (handle == INVALID_HANDLE_VALUE) { - SET_REQ_WIN32_ERROR(req, ERROR_INVALID_HANDLE); - return; - } - - if (fs__stat_handle(handle, &req->statbuf, 0) != 0) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - return; - } - - req->ptr = &req->statbuf; - SET_REQ_RESULT(req, 0); -} - - -static void fs__rename(uv_fs_t* req) { - if (!MoveFileExW(req->file.pathw, req->fs.info.new_pathw, MOVEFILE_REPLACE_EXISTING)) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - return; - } - - SET_REQ_RESULT(req, 0); -} - - -INLINE static void fs__sync_impl(uv_fs_t* req) { - int fd = req->file.fd; - int result; - - VERIFY_FD(fd, req); - - result = FlushFileBuffers(uv__get_osfhandle(fd)) ? 0 : -1; - if (result == -1) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - } else { - SET_REQ_RESULT(req, result); - } -} - - -static void fs__fsync(uv_fs_t* req) { - fs__sync_impl(req); -} - - -static void fs__fdatasync(uv_fs_t* req) { - fs__sync_impl(req); -} - - -static void fs__ftruncate(uv_fs_t* req) { - int fd = req->file.fd; - HANDLE handle; - struct uv__fd_info_s fd_info = { 0 }; - NTSTATUS status; - IO_STATUS_BLOCK io_status; - FILE_END_OF_FILE_INFORMATION eof_info; - - VERIFY_FD(fd, req); - - handle = uv__get_osfhandle(fd); - - if (uv__fd_hash_get(fd, &fd_info)) { - if (fd_info.is_directory) { - SET_REQ_WIN32_ERROR(req, ERROR_ACCESS_DENIED); - return; - } - - if (fd_info.mapping != INVALID_HANDLE_VALUE) { - CloseHandle(fd_info.mapping); - } - } - - eof_info.EndOfFile.QuadPart = req->fs.info.offset; - - status = pNtSetInformationFile(handle, - &io_status, - &eof_info, - sizeof eof_info, - FileEndOfFileInformation); - - if (NT_SUCCESS(status)) { - SET_REQ_RESULT(req, 0); - } else { - SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(status)); - - if (fd_info.flags) { - CloseHandle(handle); - fd_info.mapping = INVALID_HANDLE_VALUE; - fd_info.size.QuadPart = 0; - fd_info.current_pos.QuadPart = 0; - uv__fd_hash_add(fd, &fd_info); - return; - } - } - - if (fd_info.flags) { - fd_info.size = eof_info.EndOfFile; - - if (fd_info.size.QuadPart == 0) { - fd_info.mapping = INVALID_HANDLE_VALUE; - } else { - DWORD flProtect = (fd_info.flags & (UV_FS_O_RDONLY | UV_FS_O_WRONLY | - UV_FS_O_RDWR)) == UV_FS_O_RDONLY ? PAGE_READONLY : PAGE_READWRITE; - fd_info.mapping = CreateFileMapping(handle, - NULL, - flProtect, - fd_info.size.HighPart, - fd_info.size.LowPart, - NULL); - if (fd_info.mapping == NULL) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - CloseHandle(handle); - fd_info.mapping = INVALID_HANDLE_VALUE; - fd_info.size.QuadPart = 0; - fd_info.current_pos.QuadPart = 0; - uv__fd_hash_add(fd, &fd_info); - return; - } - } - - uv__fd_hash_add(fd, &fd_info); - } -} - - -static void fs__copyfile(uv_fs_t* req) { - int flags; - int overwrite; - uv_stat_t statbuf; - uv_stat_t new_statbuf; - - flags = req->fs.info.file_flags; - - if (flags & UV_FS_COPYFILE_FICLONE_FORCE) { - SET_REQ_UV_ERROR(req, UV_ENOSYS, ERROR_NOT_SUPPORTED); - return; - } - - overwrite = flags & UV_FS_COPYFILE_EXCL; - - if (CopyFileW(req->file.pathw, req->fs.info.new_pathw, overwrite) != 0) { - SET_REQ_RESULT(req, 0); - return; - } - - SET_REQ_WIN32_ERROR(req, GetLastError()); - if (req->result != UV_EBUSY) - return; - - /* if error UV_EBUSY check if src and dst file are the same */ - if (fs__stat_impl_from_path(req->file.pathw, 0, &statbuf) != 0 || - fs__stat_impl_from_path(req->fs.info.new_pathw, 0, &new_statbuf) != 0) { - return; - } - - if (statbuf.st_dev == new_statbuf.st_dev && - statbuf.st_ino == new_statbuf.st_ino) { - SET_REQ_RESULT(req, 0); - } -} - - -static void fs__sendfile(uv_fs_t* req) { - int fd_in = req->file.fd, fd_out = req->fs.info.fd_out; - size_t length = req->fs.info.bufsml[0].len; - int64_t offset = req->fs.info.offset; - const size_t max_buf_size = 65536; - size_t buf_size = length < max_buf_size ? length : max_buf_size; - int n, result = 0; - int64_t result_offset = 0; - char* buf = (char*) uv__malloc(buf_size); - if (!buf) { - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - } - - if (offset != -1) { - result_offset = _lseeki64(fd_in, offset, SEEK_SET); - } - - if (result_offset == -1) { - result = -1; - } else { - while (length > 0) { - n = _read(fd_in, buf, length < buf_size ? length : buf_size); - if (n == 0) { - break; - } else if (n == -1) { - result = -1; - break; - } - - length -= n; - - n = _write(fd_out, buf, n); - if (n == -1) { - result = -1; - break; - } - - result += n; - } - } - - uv__free(buf); - - SET_REQ_RESULT(req, result); -} - - -static void fs__access(uv_fs_t* req) { - DWORD attr = GetFileAttributesW(req->file.pathw); - - if (attr == INVALID_FILE_ATTRIBUTES) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - return; - } - - /* - * Access is possible if - * - write access wasn't requested, - * - or the file isn't read-only, - * - or it's a directory. - * (Directories cannot be read-only on Windows.) - */ - if (!(req->fs.info.mode & W_OK) || - !(attr & FILE_ATTRIBUTE_READONLY) || - (attr & FILE_ATTRIBUTE_DIRECTORY)) { - SET_REQ_RESULT(req, 0); - } else { - SET_REQ_WIN32_ERROR(req, UV_EPERM); - } - -} - - -static void fs__chmod(uv_fs_t* req) { - int result = _wchmod(req->file.pathw, req->fs.info.mode); - if (result == -1) - SET_REQ_WIN32_ERROR(req, _doserrno); - else - SET_REQ_RESULT(req, 0); -} - - -static void fs__fchmod(uv_fs_t* req) { - int fd = req->file.fd; - int clear_archive_flag; - HANDLE handle; - NTSTATUS nt_status; - IO_STATUS_BLOCK io_status; - FILE_BASIC_INFORMATION file_info; - - VERIFY_FD(fd, req); - - handle = ReOpenFile(uv__get_osfhandle(fd), FILE_WRITE_ATTRIBUTES, 0, 0); - if (handle == INVALID_HANDLE_VALUE) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - return; - } - - nt_status = pNtQueryInformationFile(handle, - &io_status, - &file_info, - sizeof file_info, - FileBasicInformation); - - if (!NT_SUCCESS(nt_status)) { - SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(nt_status)); - goto fchmod_cleanup; - } - - /* Test if the Archive attribute is cleared */ - if ((file_info.FileAttributes & FILE_ATTRIBUTE_ARCHIVE) == 0) { - /* Set Archive flag, otherwise setting or clearing the read-only - flag will not work */ - file_info.FileAttributes |= FILE_ATTRIBUTE_ARCHIVE; - nt_status = pNtSetInformationFile(handle, - &io_status, - &file_info, - sizeof file_info, - FileBasicInformation); - if (!NT_SUCCESS(nt_status)) { - SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(nt_status)); - goto fchmod_cleanup; - } - /* Remeber to clear the flag later on */ - clear_archive_flag = 1; - } else { - clear_archive_flag = 0; - } - - if (req->fs.info.mode & _S_IWRITE) { - file_info.FileAttributes &= ~FILE_ATTRIBUTE_READONLY; - } else { - file_info.FileAttributes |= FILE_ATTRIBUTE_READONLY; - } - - nt_status = pNtSetInformationFile(handle, - &io_status, - &file_info, - sizeof file_info, - FileBasicInformation); - - if (!NT_SUCCESS(nt_status)) { - SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(nt_status)); - goto fchmod_cleanup; - } - - if (clear_archive_flag) { - file_info.FileAttributes &= ~FILE_ATTRIBUTE_ARCHIVE; - if (file_info.FileAttributes == 0) { - file_info.FileAttributes = FILE_ATTRIBUTE_NORMAL; - } - nt_status = pNtSetInformationFile(handle, - &io_status, - &file_info, - sizeof file_info, - FileBasicInformation); - if (!NT_SUCCESS(nt_status)) { - SET_REQ_WIN32_ERROR(req, pRtlNtStatusToDosError(nt_status)); - goto fchmod_cleanup; - } - } - - SET_REQ_SUCCESS(req); -fchmod_cleanup: - CloseHandle(handle); -} - - -INLINE static int fs__utime_handle(HANDLE handle, double atime, double mtime) { - FILETIME filetime_a, filetime_m; - - TIME_T_TO_FILETIME(atime, &filetime_a); - TIME_T_TO_FILETIME(mtime, &filetime_m); - - if (!SetFileTime(handle, NULL, &filetime_a, &filetime_m)) { - return -1; - } - - return 0; -} - -INLINE static DWORD fs__utime_impl_from_path(WCHAR* path, - double atime, - double mtime, - int do_lutime) { - HANDLE handle; - DWORD flags; - DWORD ret; - - flags = FILE_FLAG_BACKUP_SEMANTICS; - if (do_lutime) { - flags |= FILE_FLAG_OPEN_REPARSE_POINT; - } - - handle = CreateFileW(path, - FILE_WRITE_ATTRIBUTES, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - NULL, - OPEN_EXISTING, - flags, - NULL); - - if (handle == INVALID_HANDLE_VALUE) { - ret = GetLastError(); - } else if (fs__utime_handle(handle, atime, mtime) != 0) { - ret = GetLastError(); - } else { - ret = 0; - } - - CloseHandle(handle); - return ret; -} - -INLINE static void fs__utime_impl(uv_fs_t* req, int do_lutime) { - DWORD error; - - error = fs__utime_impl_from_path(req->file.pathw, - req->fs.time.atime, - req->fs.time.mtime, - do_lutime); - - if (error != 0) { - if (do_lutime && - (error == ERROR_SYMLINK_NOT_SUPPORTED || - error == ERROR_NOT_A_REPARSE_POINT)) { - /* Opened file is a reparse point but not a symlink. Try again. */ - fs__utime_impl(req, 0); - } else { - /* utime failed. */ - SET_REQ_WIN32_ERROR(req, error); - } - - return; - } - - SET_REQ_RESULT(req, 0); -} - -static void fs__utime(uv_fs_t* req) { - fs__utime_impl(req, /* do_lutime */ 0); -} - - -static void fs__futime(uv_fs_t* req) { - int fd = req->file.fd; - HANDLE handle; - VERIFY_FD(fd, req); - - handle = uv__get_osfhandle(fd); - - if (handle == INVALID_HANDLE_VALUE) { - SET_REQ_WIN32_ERROR(req, ERROR_INVALID_HANDLE); - return; - } - - if (fs__utime_handle(handle, req->fs.time.atime, req->fs.time.mtime) != 0) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - return; - } - - SET_REQ_RESULT(req, 0); -} - -static void fs__lutime(uv_fs_t* req) { - fs__utime_impl(req, /* do_lutime */ 1); -} - - -static void fs__link(uv_fs_t* req) { - DWORD r = CreateHardLinkW(req->fs.info.new_pathw, req->file.pathw, NULL); - if (r == 0) - SET_REQ_WIN32_ERROR(req, GetLastError()); - else - SET_REQ_RESULT(req, 0); -} - - -static void fs__create_junction(uv_fs_t* req, const WCHAR* path, - const WCHAR* new_path) { - HANDLE handle = INVALID_HANDLE_VALUE; - REPARSE_DATA_BUFFER *buffer = NULL; - int created = 0; - int target_len; - int is_absolute, is_long_path; - int needed_buf_size, used_buf_size, used_data_size, path_buf_len; - int start, len, i; - int add_slash; - DWORD bytes; - WCHAR* path_buf; - - target_len = wcslen(path); - is_long_path = wcsncmp(path, LONG_PATH_PREFIX, LONG_PATH_PREFIX_LEN) == 0; - - if (is_long_path) { - is_absolute = 1; - } else { - is_absolute = target_len >= 3 && IS_LETTER(path[0]) && - path[1] == L':' && IS_SLASH(path[2]); - } - - if (!is_absolute) { - /* Not supporting relative paths */ - SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_NOT_SUPPORTED); - return; - } - - /* Do a pessimistic calculation of the required buffer size */ - needed_buf_size = - FIELD_OFFSET(REPARSE_DATA_BUFFER, MountPointReparseBuffer.PathBuffer) + - JUNCTION_PREFIX_LEN * sizeof(WCHAR) + - 2 * (target_len + 2) * sizeof(WCHAR); - - /* Allocate the buffer */ - buffer = (REPARSE_DATA_BUFFER*)uv__malloc(needed_buf_size); - if (!buffer) { - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - } - - /* Grab a pointer to the part of the buffer where filenames go */ - path_buf = (WCHAR*)&(buffer->MountPointReparseBuffer.PathBuffer); - path_buf_len = 0; - - /* Copy the substitute (internal) target path */ - start = path_buf_len; - - wcsncpy((WCHAR*)&path_buf[path_buf_len], JUNCTION_PREFIX, - JUNCTION_PREFIX_LEN); - path_buf_len += JUNCTION_PREFIX_LEN; - - add_slash = 0; - for (i = is_long_path ? LONG_PATH_PREFIX_LEN : 0; path[i] != L'\0'; i++) { - if (IS_SLASH(path[i])) { - add_slash = 1; - continue; - } - - if (add_slash) { - path_buf[path_buf_len++] = L'\\'; - add_slash = 0; - } - - path_buf[path_buf_len++] = path[i]; - } - path_buf[path_buf_len++] = L'\\'; - len = path_buf_len - start; - - /* Set the info about the substitute name */ - buffer->MountPointReparseBuffer.SubstituteNameOffset = start * sizeof(WCHAR); - buffer->MountPointReparseBuffer.SubstituteNameLength = len * sizeof(WCHAR); - - /* Insert null terminator */ - path_buf[path_buf_len++] = L'\0'; - - /* Copy the print name of the target path */ - start = path_buf_len; - add_slash = 0; - for (i = is_long_path ? LONG_PATH_PREFIX_LEN : 0; path[i] != L'\0'; i++) { - if (IS_SLASH(path[i])) { - add_slash = 1; - continue; - } - - if (add_slash) { - path_buf[path_buf_len++] = L'\\'; - add_slash = 0; - } - - path_buf[path_buf_len++] = path[i]; - } - len = path_buf_len - start; - if (len == 2) { - path_buf[path_buf_len++] = L'\\'; - len++; - } - - /* Set the info about the print name */ - buffer->MountPointReparseBuffer.PrintNameOffset = start * sizeof(WCHAR); - buffer->MountPointReparseBuffer.PrintNameLength = len * sizeof(WCHAR); - - /* Insert another null terminator */ - path_buf[path_buf_len++] = L'\0'; - - /* Calculate how much buffer space was actually used */ - used_buf_size = FIELD_OFFSET(REPARSE_DATA_BUFFER, MountPointReparseBuffer.PathBuffer) + - path_buf_len * sizeof(WCHAR); - used_data_size = used_buf_size - - FIELD_OFFSET(REPARSE_DATA_BUFFER, MountPointReparseBuffer); - - /* Put general info in the data buffer */ - buffer->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT; - buffer->ReparseDataLength = used_data_size; - buffer->Reserved = 0; - - /* Create a new directory */ - if (!CreateDirectoryW(new_path, NULL)) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - goto error; - } - created = 1; - - /* Open the directory */ - handle = CreateFileW(new_path, - GENERIC_WRITE, - 0, - NULL, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS | - FILE_FLAG_OPEN_REPARSE_POINT, - NULL); - if (handle == INVALID_HANDLE_VALUE) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - goto error; - } - - /* Create the actual reparse point */ - if (!DeviceIoControl(handle, - FSCTL_SET_REPARSE_POINT, - buffer, - used_buf_size, - NULL, - 0, - &bytes, - NULL)) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - goto error; - } - - /* Clean up */ - CloseHandle(handle); - uv__free(buffer); - - SET_REQ_RESULT(req, 0); - return; - -error: - uv__free(buffer); - - if (handle != INVALID_HANDLE_VALUE) { - CloseHandle(handle); - } - - if (created) { - RemoveDirectoryW(new_path); - } -} - - -static void fs__symlink(uv_fs_t* req) { - WCHAR* pathw; - WCHAR* new_pathw; - int flags; - int err; - - pathw = req->file.pathw; - new_pathw = req->fs.info.new_pathw; - - if (req->fs.info.file_flags & UV_FS_SYMLINK_JUNCTION) { - fs__create_junction(req, pathw, new_pathw); - return; - } - - if (req->fs.info.file_flags & UV_FS_SYMLINK_DIR) - flags = SYMBOLIC_LINK_FLAG_DIRECTORY | uv__file_symlink_usermode_flag; - else - flags = uv__file_symlink_usermode_flag; - - if (CreateSymbolicLinkW(new_pathw, pathw, flags)) { - SET_REQ_RESULT(req, 0); - return; - } - - /* Something went wrong. We will test if it is because of user-mode - * symlinks. - */ - err = GetLastError(); - if (err == ERROR_INVALID_PARAMETER && - flags & SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE) { - /* This system does not support user-mode symlinks. We will clear the - * unsupported flag and retry. - */ - uv__file_symlink_usermode_flag = 0; - fs__symlink(req); - } else { - SET_REQ_WIN32_ERROR(req, err); - } -} - - -static void fs__readlink(uv_fs_t* req) { - HANDLE handle; - - handle = CreateFileW(req->file.pathw, - 0, - 0, - NULL, - OPEN_EXISTING, - FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, - NULL); - - if (handle == INVALID_HANDLE_VALUE) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - return; - } - - if (fs__readlink_handle(handle, (char**) &req->ptr, NULL) != 0) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - CloseHandle(handle); - return; - } - - req->flags |= UV_FS_FREE_PTR; - SET_REQ_RESULT(req, 0); - - CloseHandle(handle); -} - - -static ssize_t fs__realpath_handle(HANDLE handle, char** realpath_ptr) { - int r; - DWORD w_realpath_len; - WCHAR* w_realpath_ptr = NULL; - WCHAR* w_realpath_buf; - - w_realpath_len = GetFinalPathNameByHandleW(handle, NULL, 0, VOLUME_NAME_DOS); - if (w_realpath_len == 0) { - return -1; - } - - w_realpath_buf = uv__malloc((w_realpath_len + 1) * sizeof(WCHAR)); - if (w_realpath_buf == NULL) { - SetLastError(ERROR_OUTOFMEMORY); - return -1; - } - w_realpath_ptr = w_realpath_buf; - - if (GetFinalPathNameByHandleW( - handle, w_realpath_ptr, w_realpath_len, VOLUME_NAME_DOS) == 0) { - uv__free(w_realpath_buf); - SetLastError(ERROR_INVALID_HANDLE); - return -1; - } - - /* convert UNC path to long path */ - if (wcsncmp(w_realpath_ptr, - UNC_PATH_PREFIX, - UNC_PATH_PREFIX_LEN) == 0) { - w_realpath_ptr += 6; - *w_realpath_ptr = L'\\'; - w_realpath_len -= 6; - } else if (wcsncmp(w_realpath_ptr, - LONG_PATH_PREFIX, - LONG_PATH_PREFIX_LEN) == 0) { - w_realpath_ptr += 4; - w_realpath_len -= 4; - } else { - uv__free(w_realpath_buf); - SetLastError(ERROR_INVALID_HANDLE); - return -1; - } - - r = fs__wide_to_utf8(w_realpath_ptr, w_realpath_len, realpath_ptr, NULL); - uv__free(w_realpath_buf); - return r; -} - -static void fs__realpath(uv_fs_t* req) { - HANDLE handle; - - handle = CreateFileW(req->file.pathw, - 0, - 0, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, - NULL); - if (handle == INVALID_HANDLE_VALUE) { - SET_REQ_WIN32_ERROR(req, GetLastError()); - return; - } - - if (fs__realpath_handle(handle, (char**) &req->ptr) == -1) { - CloseHandle(handle); - SET_REQ_WIN32_ERROR(req, GetLastError()); - return; - } - - CloseHandle(handle); - req->flags |= UV_FS_FREE_PTR; - SET_REQ_RESULT(req, 0); -} - - -static void fs__chown(uv_fs_t* req) { - SET_REQ_RESULT(req, 0); -} - - -static void fs__fchown(uv_fs_t* req) { - SET_REQ_RESULT(req, 0); -} - - -static void fs__lchown(uv_fs_t* req) { - SET_REQ_RESULT(req, 0); -} - - -static void fs__statfs(uv_fs_t* req) { - uv_statfs_t* stat_fs; - DWORD sectors_per_cluster; - DWORD bytes_per_sector; - DWORD free_clusters; - DWORD total_clusters; - WCHAR* pathw; - - pathw = req->file.pathw; -retry_get_disk_free_space: - if (0 == GetDiskFreeSpaceW(pathw, - §ors_per_cluster, - &bytes_per_sector, - &free_clusters, - &total_clusters)) { - DWORD err; - WCHAR* fpart; - size_t len; - DWORD ret; - BOOL is_second; - - err = GetLastError(); - is_second = pathw != req->file.pathw; - if (err != ERROR_DIRECTORY || is_second) { - if (is_second) - uv__free(pathw); - - SET_REQ_WIN32_ERROR(req, err); - return; - } - - len = MAX_PATH + 1; - pathw = uv__malloc(len * sizeof(*pathw)); - if (pathw == NULL) { - SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); - return; - } -retry_get_full_path_name: - ret = GetFullPathNameW(req->file.pathw, - len, - pathw, - &fpart); - if (ret == 0) { - uv__free(pathw); - SET_REQ_WIN32_ERROR(req, err); - return; - } else if (ret > len) { - len = ret; - pathw = uv__reallocf(pathw, len * sizeof(*pathw)); - if (pathw == NULL) { - SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); - return; - } - goto retry_get_full_path_name; - } - if (fpart != 0) - *fpart = L'\0'; - - goto retry_get_disk_free_space; - } - if (pathw != req->file.pathw) { - uv__free(pathw); - } - - stat_fs = uv__malloc(sizeof(*stat_fs)); - if (stat_fs == NULL) { - SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); - return; - } - - stat_fs->f_type = 0; - stat_fs->f_bsize = bytes_per_sector * sectors_per_cluster; - stat_fs->f_blocks = total_clusters; - stat_fs->f_bfree = free_clusters; - stat_fs->f_bavail = free_clusters; - stat_fs->f_files = 0; - stat_fs->f_ffree = 0; - req->ptr = stat_fs; - req->flags |= UV_FS_FREE_PTR; - SET_REQ_RESULT(req, 0); -} - - -static void uv__fs_work(struct uv__work* w) { - uv_fs_t* req; - - req = container_of(w, uv_fs_t, work_req); - assert(req->type == UV_FS); - -#define XX(uc, lc) case UV_FS_##uc: fs__##lc(req); break; - switch (req->fs_type) { - XX(OPEN, open) - XX(CLOSE, close) - XX(READ, read) - XX(WRITE, write) - XX(COPYFILE, copyfile) - XX(SENDFILE, sendfile) - XX(STAT, stat) - XX(LSTAT, lstat) - XX(FSTAT, fstat) - XX(FTRUNCATE, ftruncate) - XX(UTIME, utime) - XX(FUTIME, futime) - XX(LUTIME, lutime) - XX(ACCESS, access) - XX(CHMOD, chmod) - XX(FCHMOD, fchmod) - XX(FSYNC, fsync) - XX(FDATASYNC, fdatasync) - XX(UNLINK, unlink) - XX(RMDIR, rmdir) - XX(MKDIR, mkdir) - XX(MKDTEMP, mkdtemp) - XX(MKSTEMP, mkstemp) - XX(RENAME, rename) - XX(SCANDIR, scandir) - XX(READDIR, readdir) - XX(OPENDIR, opendir) - XX(CLOSEDIR, closedir) - XX(LINK, link) - XX(SYMLINK, symlink) - XX(READLINK, readlink) - XX(REALPATH, realpath) - XX(CHOWN, chown) - XX(FCHOWN, fchown) - XX(LCHOWN, lchown) - XX(STATFS, statfs) - default: - assert(!"bad uv_fs_type"); - } -} - - -static void uv__fs_done(struct uv__work* w, int status) { - uv_fs_t* req; - - req = container_of(w, uv_fs_t, work_req); - uv__req_unregister(req->loop, req); - - if (status == UV_ECANCELED) { - assert(req->result == 0); - SET_REQ_UV_ERROR(req, UV_ECANCELED, 0); - } - - req->cb(req); -} - - -void uv_fs_req_cleanup(uv_fs_t* req) { - if (req == NULL) - return; - - if (req->flags & UV_FS_CLEANEDUP) - return; - - if (req->flags & UV_FS_FREE_PATHS) - uv__free(req->file.pathw); - - if (req->flags & UV_FS_FREE_PTR) { - if (req->fs_type == UV_FS_SCANDIR && req->ptr != NULL) - uv__fs_scandir_cleanup(req); - else if (req->fs_type == UV_FS_READDIR) - uv__fs_readdir_cleanup(req); - else - uv__free(req->ptr); - } - - if (req->fs.info.bufs != req->fs.info.bufsml) - uv__free(req->fs.info.bufs); - - req->path = NULL; - req->file.pathw = NULL; - req->fs.info.new_pathw = NULL; - req->fs.info.bufs = NULL; - req->ptr = NULL; - - req->flags |= UV_FS_CLEANEDUP; -} - - -int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, - int mode, uv_fs_cb cb) { - int err; - - INIT(UV_FS_OPEN); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - req->fs.info.file_flags = flags; - req->fs.info.mode = mode; - POST; -} - - -int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) { - INIT(UV_FS_CLOSE); - req->file.fd = fd; - POST; -} - - -int uv_fs_read(uv_loop_t* loop, - uv_fs_t* req, - uv_file fd, - const uv_buf_t bufs[], - unsigned int nbufs, - int64_t offset, - uv_fs_cb cb) { - INIT(UV_FS_READ); - - if (bufs == NULL || nbufs == 0) { - SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); - return UV_EINVAL; - } - - req->file.fd = fd; - - req->fs.info.nbufs = nbufs; - req->fs.info.bufs = req->fs.info.bufsml; - if (nbufs > ARRAY_SIZE(req->fs.info.bufsml)) - req->fs.info.bufs = uv__malloc(nbufs * sizeof(*bufs)); - - if (req->fs.info.bufs == NULL) { - SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); - return UV_ENOMEM; - } - - memcpy(req->fs.info.bufs, bufs, nbufs * sizeof(*bufs)); - - req->fs.info.offset = offset; - POST; -} - - -int uv_fs_write(uv_loop_t* loop, - uv_fs_t* req, - uv_file fd, - const uv_buf_t bufs[], - unsigned int nbufs, - int64_t offset, - uv_fs_cb cb) { - INIT(UV_FS_WRITE); - - if (bufs == NULL || nbufs == 0) { - SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); - return UV_EINVAL; - } - - req->file.fd = fd; - - req->fs.info.nbufs = nbufs; - req->fs.info.bufs = req->fs.info.bufsml; - if (nbufs > ARRAY_SIZE(req->fs.info.bufsml)) - req->fs.info.bufs = uv__malloc(nbufs * sizeof(*bufs)); - - if (req->fs.info.bufs == NULL) { - SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY); - return UV_ENOMEM; - } - - memcpy(req->fs.info.bufs, bufs, nbufs * sizeof(*bufs)); - - req->fs.info.offset = offset; - POST; -} - - -int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, - uv_fs_cb cb) { - int err; - - INIT(UV_FS_UNLINK); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - POST; -} - - -int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, - uv_fs_cb cb) { - int err; - - INIT(UV_FS_MKDIR); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - req->fs.info.mode = mode; - POST; -} - - -int uv_fs_mkdtemp(uv_loop_t* loop, - uv_fs_t* req, - const char* tpl, - uv_fs_cb cb) { - int err; - - INIT(UV_FS_MKDTEMP); - err = fs__capture_path(req, tpl, NULL, TRUE); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - POST; -} - - -int uv_fs_mkstemp(uv_loop_t* loop, - uv_fs_t* req, - const char* tpl, - uv_fs_cb cb) { - int err; - - INIT(UV_FS_MKSTEMP); - err = fs__capture_path(req, tpl, NULL, TRUE); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - POST; -} - - -int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { - int err; - - INIT(UV_FS_RMDIR); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - POST; -} - - -int uv_fs_scandir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, - uv_fs_cb cb) { - int err; - - INIT(UV_FS_SCANDIR); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - req->fs.info.file_flags = flags; - POST; -} - -int uv_fs_opendir(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_fs_cb cb) { - int err; - - INIT(UV_FS_OPENDIR); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - POST; -} - -int uv_fs_readdir(uv_loop_t* loop, - uv_fs_t* req, - uv_dir_t* dir, - uv_fs_cb cb) { - INIT(UV_FS_READDIR); - - if (dir == NULL || - dir->dirents == NULL || - dir->dir_handle == INVALID_HANDLE_VALUE) { - SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); - return UV_EINVAL; - } - - req->ptr = dir; - POST; -} - -int uv_fs_closedir(uv_loop_t* loop, - uv_fs_t* req, - uv_dir_t* dir, - uv_fs_cb cb) { - INIT(UV_FS_CLOSEDIR); - if (dir == NULL) { - SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); - return UV_EINVAL; - } - req->ptr = dir; - POST; -} - -int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char* path, - const char* new_path, uv_fs_cb cb) { - int err; - - INIT(UV_FS_LINK); - err = fs__capture_path(req, path, new_path, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - POST; -} - - -int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char* path, - const char* new_path, int flags, uv_fs_cb cb) { - int err; - - INIT(UV_FS_SYMLINK); - err = fs__capture_path(req, path, new_path, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - req->fs.info.file_flags = flags; - POST; -} - - -int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, - uv_fs_cb cb) { - int err; - - INIT(UV_FS_READLINK); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - POST; -} - - -int uv_fs_realpath(uv_loop_t* loop, uv_fs_t* req, const char* path, - uv_fs_cb cb) { - int err; - - INIT(UV_FS_REALPATH); - - if (!path) { - SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); - return UV_EINVAL; - } - - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - POST; -} - - -int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_uid_t uid, - uv_gid_t gid, uv_fs_cb cb) { - int err; - - INIT(UV_FS_CHOWN); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - POST; -} - - -int uv_fs_fchown(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_uid_t uid, - uv_gid_t gid, uv_fs_cb cb) { - INIT(UV_FS_FCHOWN); - POST; -} - - -int uv_fs_lchown(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_uid_t uid, - uv_gid_t gid, uv_fs_cb cb) { - int err; - - INIT(UV_FS_LCHOWN); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - POST; -} - - -int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { - int err; - - INIT(UV_FS_STAT); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - POST; -} - - -int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { - int err; - - INIT(UV_FS_LSTAT); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - POST; -} - - -int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) { - INIT(UV_FS_FSTAT); - req->file.fd = fd; - POST; -} - - -int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char* path, - const char* new_path, uv_fs_cb cb) { - int err; - - INIT(UV_FS_RENAME); - err = fs__capture_path(req, path, new_path, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - POST; -} - - -int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) { - INIT(UV_FS_FSYNC); - req->file.fd = fd; - POST; -} - - -int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) { - INIT(UV_FS_FDATASYNC); - req->file.fd = fd; - POST; -} - - -int uv_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req, uv_file fd, - int64_t offset, uv_fs_cb cb) { - INIT(UV_FS_FTRUNCATE); - req->file.fd = fd; - req->fs.info.offset = offset; - POST; -} - - -int uv_fs_copyfile(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - const char* new_path, - int flags, - uv_fs_cb cb) { - int err; - - INIT(UV_FS_COPYFILE); - - if (flags & ~(UV_FS_COPYFILE_EXCL | - UV_FS_COPYFILE_FICLONE | - UV_FS_COPYFILE_FICLONE_FORCE)) { - SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); - return UV_EINVAL; - } - - err = fs__capture_path(req, path, new_path, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - req->fs.info.file_flags = flags; - POST; -} - - -int uv_fs_sendfile(uv_loop_t* loop, uv_fs_t* req, uv_file fd_out, - uv_file fd_in, int64_t in_offset, size_t length, uv_fs_cb cb) { - INIT(UV_FS_SENDFILE); - req->file.fd = fd_in; - req->fs.info.fd_out = fd_out; - req->fs.info.offset = in_offset; - req->fs.info.bufsml[0].len = length; - POST; -} - - -int uv_fs_access(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - int flags, - uv_fs_cb cb) { - int err; - - INIT(UV_FS_ACCESS); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - req->fs.info.mode = flags; - POST; -} - - -int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, - uv_fs_cb cb) { - int err; - - INIT(UV_FS_CHMOD); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - req->fs.info.mode = mode; - POST; -} - - -int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file fd, int mode, - uv_fs_cb cb) { - INIT(UV_FS_FCHMOD); - req->file.fd = fd; - req->fs.info.mode = mode; - POST; -} - - -int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, - double mtime, uv_fs_cb cb) { - int err; - - INIT(UV_FS_UTIME); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - req->fs.time.atime = atime; - req->fs.time.mtime = mtime; - POST; -} - - -int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file fd, double atime, - double mtime, uv_fs_cb cb) { - INIT(UV_FS_FUTIME); - req->file.fd = fd; - req->fs.time.atime = atime; - req->fs.time.mtime = mtime; - POST; -} - -int uv_fs_lutime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, - double mtime, uv_fs_cb cb) { - int err; - - INIT(UV_FS_LUTIME); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - req->fs.time.atime = atime; - req->fs.time.mtime = mtime; - POST; -} - - -int uv_fs_statfs(uv_loop_t* loop, - uv_fs_t* req, - const char* path, - uv_fs_cb cb) { - int err; - - INIT(UV_FS_STATFS); - err = fs__capture_path(req, path, NULL, cb != NULL); - if (err) { - SET_REQ_WIN32_ERROR(req, err); - return req->result; - } - - POST; -} - -int uv_fs_get_system_error(const uv_fs_t* req) { - return req->sys_errno_; -} diff --git a/libuv/src/win/getaddrinfo.c b/libuv/src/win/getaddrinfo.c deleted file mode 100644 index dfab860..0000000 --- a/libuv/src/win/getaddrinfo.c +++ /dev/null @@ -1,463 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include - -#include "uv.h" -#include "internal.h" -#include "req-inl.h" -#include "idna.h" - -/* EAI_* constants. */ -#include - -/* Needed for ConvertInterfaceIndexToLuid and ConvertInterfaceLuidToNameA */ -#include - -int uv__getaddrinfo_translate_error(int sys_err) { - switch (sys_err) { - case 0: return 0; - case WSATRY_AGAIN: return UV_EAI_AGAIN; - case WSAEINVAL: return UV_EAI_BADFLAGS; - case WSANO_RECOVERY: return UV_EAI_FAIL; - case WSAEAFNOSUPPORT: return UV_EAI_FAMILY; - case WSA_NOT_ENOUGH_MEMORY: return UV_EAI_MEMORY; - case WSAHOST_NOT_FOUND: return UV_EAI_NONAME; - case WSATYPE_NOT_FOUND: return UV_EAI_SERVICE; - case WSAESOCKTNOSUPPORT: return UV_EAI_SOCKTYPE; - default: return uv_translate_sys_error(sys_err); - } -} - - -/* - * MinGW is missing this - */ -#if !defined(_MSC_VER) && !defined(__MINGW64_VERSION_MAJOR) - typedef struct addrinfoW { - int ai_flags; - int ai_family; - int ai_socktype; - int ai_protocol; - size_t ai_addrlen; - WCHAR* ai_canonname; - struct sockaddr* ai_addr; - struct addrinfoW* ai_next; - } ADDRINFOW, *PADDRINFOW; - - DECLSPEC_IMPORT int WSAAPI GetAddrInfoW(const WCHAR* node, - const WCHAR* service, - const ADDRINFOW* hints, - PADDRINFOW* result); - - DECLSPEC_IMPORT void WSAAPI FreeAddrInfoW(PADDRINFOW pAddrInfo); -#endif - - -/* Adjust size value to be multiple of 4. Use to keep pointer aligned. - * Do we need different versions of this for different architectures? */ -#define ALIGNED_SIZE(X) ((((X) + 3) >> 2) << 2) - -#ifndef NDIS_IF_MAX_STRING_SIZE -#define NDIS_IF_MAX_STRING_SIZE IF_MAX_STRING_SIZE -#endif - -static void uv__getaddrinfo_work(struct uv__work* w) { - uv_getaddrinfo_t* req; - struct addrinfoW* hints; - int err; - - req = container_of(w, uv_getaddrinfo_t, work_req); - hints = req->addrinfow; - req->addrinfow = NULL; - err = GetAddrInfoW(req->node, req->service, hints, &req->addrinfow); - req->retcode = uv__getaddrinfo_translate_error(err); -} - - -/* - * Called from uv_run when complete. Call user specified callback - * then free returned addrinfo - * Returned addrinfo strings are converted from UTF-16 to UTF-8. - * - * To minimize allocation we calculate total size required, - * and copy all structs and referenced strings into the one block. - * Each size calculation is adjusted to avoid unaligned pointers. - */ -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_struct_len = ALIGNED_SIZE(sizeof(struct addrinfo)); - struct addrinfoW* addrinfow_ptr; - struct addrinfo* addrinfo_ptr; - char* alloc_ptr = NULL; - char* cur_ptr = NULL; - - req = container_of(w, uv_getaddrinfo_t, work_req); - - /* release input parameter memory */ - uv__free(req->alloc); - req->alloc = NULL; - - if (status == UV_ECANCELED) { - assert(req->retcode == 0); - req->retcode = UV_EAI_CANCELED; - goto complete; - } - - if (req->retcode == 0) { - /* Convert addrinfoW to addrinfo. First calculate required length. */ - addrinfow_ptr = req->addrinfow; - while (addrinfow_ptr != NULL) { - 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()); - goto complete; - } - addrinfo_len += ALIGNED_SIZE(name_len); - } - addrinfow_ptr = addrinfow_ptr->ai_next; - } - - /* allocate memory for addrinfo results */ - alloc_ptr = (char*)uv__malloc(addrinfo_len); - - /* do conversions */ - if (alloc_ptr != NULL) { - cur_ptr = alloc_ptr; - addrinfow_ptr = req->addrinfow; - - while (addrinfow_ptr != NULL) { - /* copy addrinfo struct data */ - assert(cur_ptr + addrinfo_struct_len <= alloc_ptr + addrinfo_len); - addrinfo_ptr = (struct addrinfo*)cur_ptr; - addrinfo_ptr->ai_family = addrinfow_ptr->ai_family; - addrinfo_ptr->ai_socktype = addrinfow_ptr->ai_socktype; - addrinfo_ptr->ai_protocol = addrinfow_ptr->ai_protocol; - addrinfo_ptr->ai_flags = addrinfow_ptr->ai_flags; - addrinfo_ptr->ai_addrlen = addrinfow_ptr->ai_addrlen; - addrinfo_ptr->ai_canonname = NULL; - addrinfo_ptr->ai_addr = NULL; - addrinfo_ptr->ai_next = NULL; - - cur_ptr += addrinfo_struct_len; - - /* copy sockaddr */ - if (addrinfo_ptr->ai_addrlen > 0) { - assert(cur_ptr + addrinfo_ptr->ai_addrlen <= - alloc_ptr + addrinfo_len); - memcpy(cur_ptr, addrinfow_ptr->ai_addr, addrinfo_ptr->ai_addrlen); - addrinfo_ptr->ai_addr = (struct sockaddr*)cur_ptr; - cur_ptr += ALIGNED_SIZE(addrinfo_ptr->ai_addrlen); - } - - /* 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); - addrinfo_ptr->ai_canonname = cur_ptr; - cur_ptr += ALIGNED_SIZE(name_len); - } - assert(cur_ptr <= alloc_ptr + addrinfo_len); - - /* set next ptr */ - addrinfow_ptr = addrinfow_ptr->ai_next; - if (addrinfow_ptr != NULL) { - addrinfo_ptr->ai_next = (struct addrinfo*)cur_ptr; - } - } - req->addrinfo = (struct addrinfo*)alloc_ptr; - } else { - req->retcode = UV_EAI_MEMORY; - } - } - - /* return memory to system */ - if (req->addrinfow != NULL) { - FreeAddrInfoW(req->addrinfow); - req->addrinfow = NULL; - } - -complete: - uv__req_unregister(req->loop, req); - - /* finally do callback with converted result */ - if (req->getaddrinfo_cb) - req->getaddrinfo_cb(req, req->retcode, req->addrinfo); -} - - -void uv_freeaddrinfo(struct addrinfo* ai) { - char* alloc_ptr = (char*)ai; - - /* release copied result memory */ - uv__free(alloc_ptr); -} - - -/* - * Entry point for getaddrinfo - * we convert the UTF-8 strings to UNICODE - * and save the UNICODE string pointers in the req - * We also copy hints so that caller does not need to keep memory until the - * callback. - * return 0 if a callback will be made - * return error code if validation fails - * - * To minimize allocation we calculate total size required, - * and copy all structs and referenced strings into the one block. - * Each size calculation is adjusted to avoid unaligned pointers. - */ -int uv_getaddrinfo(uv_loop_t* loop, - uv_getaddrinfo_t* req, - uv_getaddrinfo_cb getaddrinfo_cb, - const char* node, - const char* service, - const struct addrinfo* hints) { - char hostname_ascii[256]; - int nodesize = 0; - int servicesize = 0; - int hintssize = 0; - char* alloc_ptr = NULL; - int err; - long rc; - - if (req == NULL || (node == NULL && service == NULL)) { - return UV_EINVAL; - } - - UV_REQ_INIT(req, UV_GETADDRINFO); - req->getaddrinfo_cb = getaddrinfo_cb; - req->addrinfo = NULL; - req->loop = loop; - req->retcode = 0; - - /* calculate required memory size for all input values */ - if (node != NULL) { - rc = uv__idna_toascii(node, - node + strlen(node), - hostname_ascii, - 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; - } - 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; - } - } - 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; - } - - /* save alloc_ptr now so we can free if error */ - req->alloc = (void*)alloc_ptr; - - /* Convert node string to UTF16 into allocated memory and save pointer in the - * request. */ - 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; - } else { - req->node = NULL; - } - - /* 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; - } 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->ai_family = hints->ai_family; - req->addrinfow->ai_socktype = hints->ai_socktype; - req->addrinfow->ai_protocol = hints->ai_protocol; - req->addrinfow->ai_flags = hints->ai_flags; - req->addrinfow->ai_addrlen = 0; - req->addrinfow->ai_canonname = NULL; - req->addrinfow->ai_addr = NULL; - req->addrinfow->ai_next = NULL; - } else { - req->addrinfow = NULL; - } - - uv__req_register(loop, req); - - if (getaddrinfo_cb) { - uv__work_submit(loop, - &req->work_req, - UV__WORK_SLOW_IO, - uv__getaddrinfo_work, - uv__getaddrinfo_done); - return 0; - } else { - uv__getaddrinfo_work(&req->work_req); - 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) - return UV_EINVAL; - - r = ConvertInterfaceIndexToLuid(ifindex, &luid); - - if (r != 0) - return uv_translate_sys_error(r); - - r = ConvertInterfaceLuidToNameW(&luid, wname, ARRAY_SIZE(wname)); - - 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; -} - -int uv_if_indextoiid(unsigned int ifindex, char* buffer, size_t* size) { - int r; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - r = snprintf(buffer, *size, "%d", ifindex); - - if (r < 0) - return uv_translate_sys_error(r); - - if (r >= (int) *size) { - *size = r + 1; - return UV_ENOBUFS; - } - - *size = r; - return 0; -} diff --git a/libuv/src/win/getnameinfo.c b/libuv/src/win/getnameinfo.c deleted file mode 100644 index b377338..0000000 --- a/libuv/src/win/getnameinfo.c +++ /dev/null @@ -1,157 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to -* deal in the Software without restriction, including without limitation the -* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -* sell copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -* IN THE SOFTWARE. -*/ - -#include -#include - -#include "uv.h" -#include "internal.h" -#include "req-inl.h" - -#ifndef GetNameInfo -int WSAAPI GetNameInfoW( - const SOCKADDR *pSockaddr, - socklen_t SockaddrLength, - PWCHAR pNodeBuffer, - DWORD NodeBufferSize, - PWCHAR pServiceBuffer, - DWORD ServiceBufferSize, - INT Flags -); -#endif - -static void uv__getnameinfo_work(struct uv__work* w) { - uv_getnameinfo_t* req; - WCHAR host[NI_MAXHOST]; - WCHAR service[NI_MAXSERV]; - int ret; - - req = container_of(w, uv_getnameinfo_t, work_req); - if (GetNameInfoW((struct sockaddr*)&req->storage, - sizeof(req->storage), - host, - ARRAY_SIZE(host), - service, - ARRAY_SIZE(service), - req->flags)) { - ret = WSAGetLastError(); - req->retcode = uv__getaddrinfo_translate_error(ret); - 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()); - 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()); - } -} - - -/* -* Called from uv_run when complete. -*/ -static void uv__getnameinfo_done(struct uv__work* w, int status) { - uv_getnameinfo_t* req; - char* host; - char* service; - - req = container_of(w, uv_getnameinfo_t, work_req); - uv__req_unregister(req->loop, req); - host = service = NULL; - - if (status == UV_ECANCELED) { - assert(req->retcode == 0); - req->retcode = UV_EAI_CANCELED; - } else if (req->retcode == 0) { - host = req->host; - service = req->service; - } - - if (req->getnameinfo_cb) - req->getnameinfo_cb(req, req->retcode, host, service); -} - - -/* -* Entry point for getnameinfo -* return 0 if a callback will be made -* return error code if validation fails -*/ -int uv_getnameinfo(uv_loop_t* loop, - uv_getnameinfo_t* req, - uv_getnameinfo_cb getnameinfo_cb, - const struct sockaddr* addr, - int flags) { - if (req == NULL || addr == NULL) - return UV_EINVAL; - - if (addr->sa_family == AF_INET) { - memcpy(&req->storage, - addr, - sizeof(struct sockaddr_in)); - } else if (addr->sa_family == AF_INET6) { - memcpy(&req->storage, - addr, - sizeof(struct sockaddr_in6)); - } else { - return UV_EINVAL; - } - - UV_REQ_INIT(req, UV_GETNAMEINFO); - uv__req_register(loop, req); - - req->getnameinfo_cb = getnameinfo_cb; - req->flags = flags; - req->loop = loop; - req->retcode = 0; - - if (getnameinfo_cb) { - uv__work_submit(loop, - &req->work_req, - UV__WORK_SLOW_IO, - uv__getnameinfo_work, - uv__getnameinfo_done); - return 0; - } else { - uv__getnameinfo_work(&req->work_req); - uv__getnameinfo_done(&req->work_req, 0); - return req->retcode; - } -} diff --git a/libuv/src/win/handle-inl.h b/libuv/src/win/handle-inl.h deleted file mode 100644 index 82c657d..0000000 --- a/libuv/src/win/handle-inl.h +++ /dev/null @@ -1,180 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_WIN_HANDLE_INL_H_ -#define UV_WIN_HANDLE_INL_H_ - -#include -#include - -#include "uv.h" -#include "internal.h" - - -#define DECREASE_ACTIVE_COUNT(loop, handle) \ - do { \ - if (--(handle)->activecnt == 0 && \ - !((handle)->flags & UV_HANDLE_CLOSING)) { \ - uv__handle_stop((handle)); \ - } \ - assert((handle)->activecnt >= 0); \ - } while (0) - - -#define INCREASE_ACTIVE_COUNT(loop, handle) \ - do { \ - if ((handle)->activecnt++ == 0) { \ - uv__handle_start((handle)); \ - } \ - assert((handle)->activecnt > 0); \ - } while (0) - - -#define DECREASE_PENDING_REQ_COUNT(handle) \ - do { \ - assert(handle->reqs_pending > 0); \ - handle->reqs_pending--; \ - \ - if (handle->flags & UV_HANDLE_CLOSING && \ - handle->reqs_pending == 0) { \ - uv_want_endgame(loop, (uv_handle_t*)handle); \ - } \ - } while (0) - - -#define uv__handle_closing(handle) \ - do { \ - assert(!((handle)->flags & UV_HANDLE_CLOSING)); \ - \ - if (!(((handle)->flags & UV_HANDLE_ACTIVE) && \ - ((handle)->flags & UV_HANDLE_REF))) \ - uv__active_handle_add((uv_handle_t*) (handle)); \ - \ - (handle)->flags |= UV_HANDLE_CLOSING; \ - (handle)->flags &= ~UV_HANDLE_ACTIVE; \ - } while (0) - - -#define uv__handle_close(handle) \ - do { \ - QUEUE_REMOVE(&(handle)->handle_queue); \ - uv__active_handle_rm((uv_handle_t*) (handle)); \ - \ - (handle)->flags |= UV_HANDLE_CLOSED; \ - \ - if ((handle)->close_cb) \ - (handle)->close_cb((uv_handle_t*) (handle)); \ - } while (0) - - -INLINE static void uv_want_endgame(uv_loop_t* loop, uv_handle_t* handle) { - if (!(handle->flags & UV_HANDLE_ENDGAME_QUEUED)) { - handle->flags |= UV_HANDLE_ENDGAME_QUEUED; - - handle->endgame_next = loop->endgame_handles; - loop->endgame_handles = handle; - } -} - - -INLINE static void uv_process_endgames(uv_loop_t* loop) { - uv_handle_t* handle; - - while (loop->endgame_handles) { - handle = loop->endgame_handles; - loop->endgame_handles = handle->endgame_next; - - handle->flags &= ~UV_HANDLE_ENDGAME_QUEUED; - - switch (handle->type) { - case UV_TCP: - uv_tcp_endgame(loop, (uv_tcp_t*) handle); - break; - - case UV_NAMED_PIPE: - uv_pipe_endgame(loop, (uv_pipe_t*) handle); - break; - - case UV_TTY: - uv_tty_endgame(loop, (uv_tty_t*) handle); - break; - - case UV_UDP: - uv_udp_endgame(loop, (uv_udp_t*) handle); - break; - - case UV_POLL: - uv_poll_endgame(loop, (uv_poll_t*) handle); - break; - - case UV_TIMER: - uv__timer_close((uv_timer_t*) handle); - uv__handle_close(handle); - break; - - case UV_PREPARE: - case UV_CHECK: - case UV_IDLE: - uv_loop_watcher_endgame(loop, handle); - break; - - case UV_ASYNC: - uv_async_endgame(loop, (uv_async_t*) handle); - break; - - case UV_SIGNAL: - uv_signal_endgame(loop, (uv_signal_t*) handle); - break; - - case UV_PROCESS: - uv_process_endgame(loop, (uv_process_t*) handle); - break; - - case UV_FS_EVENT: - uv_fs_event_endgame(loop, (uv_fs_event_t*) handle); - break; - - case UV_FS_POLL: - uv__fs_poll_endgame(loop, (uv_fs_poll_t*) handle); - break; - - default: - assert(0); - break; - } - } -} - -INLINE static HANDLE uv__get_osfhandle(int fd) -{ - /* _get_osfhandle() raises an assert in debug builds if the FD is invalid. - * But it also correctly checks the FD and returns INVALID_HANDLE_VALUE for - * invalid FDs in release builds (or if you let the assert continue). So this - * wrapper function disables asserts when calling _get_osfhandle. */ - - HANDLE handle; - UV_BEGIN_DISABLE_CRT_ASSERT(); - handle = (HANDLE) _get_osfhandle(fd); - UV_END_DISABLE_CRT_ASSERT(); - return handle; -} - -#endif /* UV_WIN_HANDLE_INL_H_ */ diff --git a/libuv/src/win/handle.c b/libuv/src/win/handle.c deleted file mode 100644 index 61e4df6..0000000 --- a/libuv/src/win/handle.c +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include - -#include "uv.h" -#include "internal.h" -#include "handle-inl.h" - - -uv_handle_type uv_guess_handle(uv_file file) { - HANDLE handle; - DWORD mode; - - if (file < 0) { - return UV_UNKNOWN_HANDLE; - } - - handle = uv__get_osfhandle(file); - - switch (GetFileType(handle)) { - case FILE_TYPE_CHAR: - if (GetConsoleMode(handle, &mode)) { - return UV_TTY; - } else { - return UV_FILE; - } - - case FILE_TYPE_PIPE: - return UV_NAMED_PIPE; - - case FILE_TYPE_DISK: - return UV_FILE; - - default: - return UV_UNKNOWN_HANDLE; - } -} - - -int uv_is_active(const uv_handle_t* handle) { - return (handle->flags & UV_HANDLE_ACTIVE) && - !(handle->flags & UV_HANDLE_CLOSING); -} - - -void uv_close(uv_handle_t* handle, uv_close_cb cb) { - uv_loop_t* loop = handle->loop; - - if (handle->flags & UV_HANDLE_CLOSING) { - assert(0); - return; - } - - handle->close_cb = cb; - - /* Handle-specific close actions */ - switch (handle->type) { - case UV_TCP: - uv_tcp_close(loop, (uv_tcp_t*)handle); - return; - - case UV_NAMED_PIPE: - uv_pipe_close(loop, (uv_pipe_t*) handle); - return; - - case UV_TTY: - uv_tty_close((uv_tty_t*) handle); - return; - - case UV_UDP: - uv_udp_close(loop, (uv_udp_t*) handle); - return; - - case UV_POLL: - uv_poll_close(loop, (uv_poll_t*) handle); - return; - - case UV_TIMER: - uv_timer_stop((uv_timer_t*)handle); - uv__handle_closing(handle); - uv_want_endgame(loop, handle); - return; - - case UV_PREPARE: - uv_prepare_stop((uv_prepare_t*)handle); - uv__handle_closing(handle); - uv_want_endgame(loop, handle); - return; - - case UV_CHECK: - uv_check_stop((uv_check_t*)handle); - uv__handle_closing(handle); - uv_want_endgame(loop, handle); - return; - - case UV_IDLE: - uv_idle_stop((uv_idle_t*)handle); - uv__handle_closing(handle); - uv_want_endgame(loop, handle); - return; - - case UV_ASYNC: - uv_async_close(loop, (uv_async_t*) handle); - return; - - case UV_SIGNAL: - uv_signal_close(loop, (uv_signal_t*) handle); - return; - - case UV_PROCESS: - uv_process_close(loop, (uv_process_t*) handle); - return; - - case UV_FS_EVENT: - uv_fs_event_close(loop, (uv_fs_event_t*) handle); - return; - - case UV_FS_POLL: - uv__fs_poll_close((uv_fs_poll_t*) handle); - uv__handle_closing(handle); - return; - - default: - /* Not supported */ - abort(); - } -} - - -int uv_is_closing(const uv_handle_t* handle) { - return !!(handle->flags & (UV_HANDLE_CLOSING | UV_HANDLE_CLOSED)); -} - - -uv_os_fd_t uv_get_osfhandle(int fd) { - return uv__get_osfhandle(fd); -} - -int uv_open_osfhandle(uv_os_fd_t os_fd) { - return _open_osfhandle((intptr_t) os_fd, 0); -} diff --git a/libuv/src/win/internal.h b/libuv/src/win/internal.h deleted file mode 100644 index b1b25b4..0000000 --- a/libuv/src/win/internal.h +++ /dev/null @@ -1,344 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_WIN_INTERNAL_H_ -#define UV_WIN_INTERNAL_H_ - -#include "uv.h" -#include "../uv-common.h" - -#include "uv/tree.h" -#include "winapi.h" -#include "winsock.h" - -#ifdef _MSC_VER -# define INLINE __inline -# define UV_THREAD_LOCAL __declspec( thread ) -#else -# define INLINE inline -# define UV_THREAD_LOCAL __thread -#endif - - -#ifdef _DEBUG - -extern UV_THREAD_LOCAL int uv__crt_assert_enabled; - -#define UV_BEGIN_DISABLE_CRT_ASSERT() \ - { \ - int uv__saved_crt_assert_enabled = uv__crt_assert_enabled; \ - uv__crt_assert_enabled = FALSE; - - -#define UV_END_DISABLE_CRT_ASSERT() \ - uv__crt_assert_enabled = uv__saved_crt_assert_enabled; \ - } - -#else -#define UV_BEGIN_DISABLE_CRT_ASSERT() -#define UV_END_DISABLE_CRT_ASSERT() -#endif - -/* - * TCP - */ - -typedef enum { - UV__IPC_SOCKET_XFER_NONE = 0, - UV__IPC_SOCKET_XFER_TCP_CONNECTION, - UV__IPC_SOCKET_XFER_TCP_SERVER -} uv__ipc_socket_xfer_type_t; - -typedef struct { - WSAPROTOCOL_INFOW socket_info; - uint32_t delayed_error; -} uv__ipc_socket_xfer_info_t; - -int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb); -int uv_tcp_accept(uv_tcp_t* server, uv_tcp_t* client); -int uv_tcp_read_start(uv_tcp_t* handle, uv_alloc_cb alloc_cb, - uv_read_cb read_cb); -int uv_tcp_write(uv_loop_t* loop, uv_write_t* req, uv_tcp_t* handle, - const uv_buf_t bufs[], unsigned int nbufs, uv_write_cb cb); -int uv__tcp_try_write(uv_tcp_t* handle, const uv_buf_t bufs[], - unsigned int nbufs); - -void uv_process_tcp_read_req(uv_loop_t* loop, uv_tcp_t* handle, uv_req_t* req); -void uv_process_tcp_write_req(uv_loop_t* loop, uv_tcp_t* handle, - uv_write_t* req); -void uv_process_tcp_accept_req(uv_loop_t* loop, uv_tcp_t* handle, - uv_req_t* req); -void uv_process_tcp_connect_req(uv_loop_t* loop, uv_tcp_t* handle, - uv_connect_t* req); - -void uv_tcp_close(uv_loop_t* loop, uv_tcp_t* tcp); -void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle); - -int uv__tcp_xfer_export(uv_tcp_t* handle, - int pid, - uv__ipc_socket_xfer_type_t* xfer_type, - uv__ipc_socket_xfer_info_t* xfer_info); -int uv__tcp_xfer_import(uv_tcp_t* tcp, - uv__ipc_socket_xfer_type_t xfer_type, - uv__ipc_socket_xfer_info_t* xfer_info); - - -/* - * UDP - */ -void uv_process_udp_recv_req(uv_loop_t* loop, uv_udp_t* handle, uv_req_t* req); -void uv_process_udp_send_req(uv_loop_t* loop, uv_udp_t* handle, - uv_udp_send_t* req); - -void uv_udp_close(uv_loop_t* loop, uv_udp_t* handle); -void uv_udp_endgame(uv_loop_t* loop, uv_udp_t* handle); - - -/* - * Pipes - */ -int uv__create_stdio_pipe_pair(uv_loop_t* loop, - uv_pipe_t* parent_pipe, HANDLE* child_pipe_ptr, unsigned int flags); - -int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb); -int uv_pipe_accept(uv_pipe_t* server, uv_stream_t* client); -int uv_pipe_read_start(uv_pipe_t* handle, uv_alloc_cb alloc_cb, - uv_read_cb read_cb); -void uv__pipe_read_stop(uv_pipe_t* handle); -int uv__pipe_write(uv_loop_t* loop, - uv_write_t* req, - uv_pipe_t* handle, - const uv_buf_t bufs[], - size_t nbufs, - uv_stream_t* send_handle, - uv_write_cb cb); - -void uv_process_pipe_read_req(uv_loop_t* loop, uv_pipe_t* handle, - uv_req_t* req); -void uv_process_pipe_write_req(uv_loop_t* loop, uv_pipe_t* handle, - uv_write_t* req); -void uv_process_pipe_accept_req(uv_loop_t* loop, uv_pipe_t* handle, - uv_req_t* raw_req); -void uv_process_pipe_connect_req(uv_loop_t* loop, uv_pipe_t* handle, - uv_connect_t* req); -void uv_process_pipe_shutdown_req(uv_loop_t* loop, uv_pipe_t* handle, - uv_shutdown_t* req); - -void uv_pipe_close(uv_loop_t* loop, uv_pipe_t* handle); -void uv_pipe_cleanup(uv_loop_t* loop, uv_pipe_t* handle); -void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle); - - -/* - * TTY - */ -void uv_console_init(void); - -int uv_tty_read_start(uv_tty_t* handle, uv_alloc_cb alloc_cb, - uv_read_cb read_cb); -int uv_tty_read_stop(uv_tty_t* handle); -int uv_tty_write(uv_loop_t* loop, uv_write_t* req, uv_tty_t* handle, - const uv_buf_t bufs[], unsigned int nbufs, uv_write_cb cb); -int uv__tty_try_write(uv_tty_t* handle, const uv_buf_t bufs[], - unsigned int nbufs); -void uv_tty_close(uv_tty_t* handle); - -void uv_process_tty_read_req(uv_loop_t* loop, uv_tty_t* handle, - uv_req_t* req); -void uv_process_tty_write_req(uv_loop_t* loop, uv_tty_t* handle, - uv_write_t* req); -/* - * uv_process_tty_accept_req() is a stub to keep DELEGATE_STREAM_REQ working - * TODO: find a way to remove it - */ -void uv_process_tty_accept_req(uv_loop_t* loop, uv_tty_t* handle, - uv_req_t* raw_req); -/* - * uv_process_tty_connect_req() is a stub to keep DELEGATE_STREAM_REQ working - * TODO: find a way to remove it - */ -void uv_process_tty_connect_req(uv_loop_t* loop, uv_tty_t* handle, - uv_connect_t* req); - -void uv_tty_endgame(uv_loop_t* loop, uv_tty_t* handle); - - -/* - * Poll watchers - */ -void uv_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, - uv_req_t* req); - -int uv_poll_close(uv_loop_t* loop, uv_poll_t* handle); -void uv_poll_endgame(uv_loop_t* loop, uv_poll_t* handle); - - -/* - * Loop watchers - */ -void uv_loop_watcher_endgame(uv_loop_t* loop, uv_handle_t* handle); - -void uv_prepare_invoke(uv_loop_t* loop); -void uv_check_invoke(uv_loop_t* loop); -void uv_idle_invoke(uv_loop_t* loop); - -void uv__once_init(void); - - -/* - * Async watcher - */ -void uv_async_close(uv_loop_t* loop, uv_async_t* handle); -void uv_async_endgame(uv_loop_t* loop, uv_async_t* handle); - -void uv_process_async_wakeup_req(uv_loop_t* loop, uv_async_t* handle, - uv_req_t* req); - - -/* - * Signal watcher - */ -void uv_signals_init(void); -int uv__signal_dispatch(int signum); - -void uv_signal_close(uv_loop_t* loop, uv_signal_t* handle); -void uv_signal_endgame(uv_loop_t* loop, uv_signal_t* handle); - -void uv_process_signal_req(uv_loop_t* loop, uv_signal_t* handle, - uv_req_t* req); - - -/* - * Spawn - */ -void uv_process_proc_exit(uv_loop_t* loop, uv_process_t* handle); -void uv_process_close(uv_loop_t* loop, uv_process_t* handle); -void uv_process_endgame(uv_loop_t* loop, uv_process_t* handle); - - -/* - * Error - */ -int uv_translate_sys_error(int sys_errno); - - -/* - * FS - */ -void uv_fs_init(void); - - -/* - * FS Event - */ -void uv_process_fs_event_req(uv_loop_t* loop, uv_req_t* req, - uv_fs_event_t* handle); -void uv_fs_event_close(uv_loop_t* loop, uv_fs_event_t* handle); -void uv_fs_event_endgame(uv_loop_t* loop, uv_fs_event_t* handle); - - -/* - * Stat poller. - */ -void uv__fs_poll_endgame(uv_loop_t* loop, uv_fs_poll_t* handle); - - -/* - * Utilities. - */ -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__getpwuid_r(uv_passwd_t* pwd); -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); - -typedef int (WINAPI *uv__peersockfunc)(SOCKET, struct sockaddr*, int*); - -int uv__getsockpeername(const uv_handle_t* handle, - uv__peersockfunc func, - struct sockaddr* name, - int* namelen, - int delayed_error); - -int uv__random_rtlgenrandom(void* buf, size_t buflen); - - -/* - * Process stdio handles. - */ -int uv__stdio_create(uv_loop_t* loop, - const uv_process_options_t* options, - BYTE** buffer_ptr); -void uv__stdio_destroy(BYTE* buffer); -void uv__stdio_noinherit(BYTE* buffer); -int uv__stdio_verify(BYTE* buffer, WORD size); -WORD uv__stdio_size(BYTE* buffer); -HANDLE uv__stdio_handle(BYTE* buffer, int fd); - - -/* - * Winapi and ntapi utility functions - */ -void uv_winapi_init(void); - - -/* - * Winsock utility functions - */ -void uv_winsock_init(void); - -int uv_ntstatus_to_winsock_error(NTSTATUS status); - -BOOL uv_get_acceptex_function(SOCKET socket, LPFN_ACCEPTEX* target); -BOOL uv_get_connectex_function(SOCKET socket, LPFN_CONNECTEX* target); - -int WSAAPI uv_wsarecv_workaround(SOCKET socket, WSABUF* buffers, - DWORD buffer_count, DWORD* bytes, DWORD* flags, WSAOVERLAPPED *overlapped, - LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); -int WSAAPI uv_wsarecvfrom_workaround(SOCKET socket, WSABUF* buffers, - DWORD buffer_count, DWORD* bytes, DWORD* flags, struct sockaddr* addr, - int* addr_len, WSAOVERLAPPED *overlapped, - LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); - -int WSAAPI uv_msafd_poll(SOCKET socket, AFD_POLL_INFO* info_in, - AFD_POLL_INFO* info_out, OVERLAPPED* overlapped); - -/* Whether there are any non-IFS LSPs stacked on TCP */ -extern int uv_tcp_non_ifs_lsp_ipv4; -extern int uv_tcp_non_ifs_lsp_ipv6; - -/* Ip address used to bind to any port at any interface */ -extern struct sockaddr_in uv_addr_ip4_any_; -extern struct sockaddr_in6 uv_addr_ip6_any_; - -/* - * Wake all loops with fake message - */ -void uv__wake_all_loops(void); - -/* - * Init system wake-up detection - */ -void uv__init_detect_system_wakeup(void); - -#endif /* UV_WIN_INTERNAL_H_ */ diff --git a/libuv/src/win/loop-watcher.c b/libuv/src/win/loop-watcher.c deleted file mode 100644 index ad7fbea..0000000 --- a/libuv/src/win/loop-watcher.c +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include - -#include "uv.h" -#include "internal.h" -#include "handle-inl.h" - - -void uv_loop_watcher_endgame(uv_loop_t* loop, uv_handle_t* handle) { - if (handle->flags & UV_HANDLE_CLOSING) { - assert(!(handle->flags & UV_HANDLE_CLOSED)); - handle->flags |= UV_HANDLE_CLOSED; - uv__handle_close(handle); - } -} - - -#define UV_LOOP_WATCHER_DEFINE(name, NAME) \ - int uv_##name##_init(uv_loop_t* loop, uv_##name##_t* handle) { \ - uv__handle_init(loop, (uv_handle_t*) handle, UV_##NAME); \ - \ - return 0; \ - } \ - \ - \ - int uv_##name##_start(uv_##name##_t* handle, uv_##name##_cb cb) { \ - uv_loop_t* loop = handle->loop; \ - uv_##name##_t* old_head; \ - \ - assert(handle->type == UV_##NAME); \ - \ - if (uv__is_active(handle)) \ - return 0; \ - \ - if (cb == NULL) \ - return UV_EINVAL; \ - \ - old_head = loop->name##_handles; \ - \ - handle->name##_next = old_head; \ - handle->name##_prev = NULL; \ - \ - if (old_head) { \ - old_head->name##_prev = handle; \ - } \ - \ - loop->name##_handles = handle; \ - \ - handle->name##_cb = cb; \ - uv__handle_start(handle); \ - \ - return 0; \ - } \ - \ - \ - int uv_##name##_stop(uv_##name##_t* handle) { \ - uv_loop_t* loop = handle->loop; \ - \ - assert(handle->type == UV_##NAME); \ - \ - if (!uv__is_active(handle)) \ - return 0; \ - \ - /* Update loop head if needed */ \ - if (loop->name##_handles == handle) { \ - loop->name##_handles = handle->name##_next; \ - } \ - \ - /* Update the iterator-next pointer of needed */ \ - if (loop->next_##name##_handle == handle) { \ - loop->next_##name##_handle = handle->name##_next; \ - } \ - \ - if (handle->name##_prev) { \ - handle->name##_prev->name##_next = handle->name##_next; \ - } \ - if (handle->name##_next) { \ - handle->name##_next->name##_prev = handle->name##_prev; \ - } \ - \ - uv__handle_stop(handle); \ - \ - return 0; \ - } \ - \ - \ - void uv_##name##_invoke(uv_loop_t* loop) { \ - uv_##name##_t* handle; \ - \ - (loop)->next_##name##_handle = (loop)->name##_handles; \ - \ - while ((loop)->next_##name##_handle != NULL) { \ - handle = (loop)->next_##name##_handle; \ - (loop)->next_##name##_handle = handle->name##_next; \ - \ - handle->name##_cb(handle); \ - } \ - } - -UV_LOOP_WATCHER_DEFINE(prepare, PREPARE) -UV_LOOP_WATCHER_DEFINE(check, CHECK) -UV_LOOP_WATCHER_DEFINE(idle, IDLE) diff --git a/libuv/src/win/pipe.c b/libuv/src/win/pipe.c deleted file mode 100644 index 88ba99b..0000000 --- a/libuv/src/win/pipe.c +++ /dev/null @@ -1,2591 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include -#include -#include - -#include "handle-inl.h" -#include "internal.h" -#include "req-inl.h" -#include "stream-inl.h" -#include "uv-common.h" -#include "uv.h" - -#include -#include - -/* A zero-size buffer for use by uv_pipe_read */ -static char uv_zero_[] = ""; - -/* Null uv_buf_t */ -static const uv_buf_t uv_null_buf_ = { 0, NULL }; - -/* The timeout that the pipe will wait for the remote end to write data when - * the local ends wants to shut it down. */ -static const int64_t eof_timeout = 50; /* ms */ - -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; - -/* IPC incoming xfer queue item. */ -typedef struct { - uv__ipc_socket_xfer_type_t xfer_type; - uv__ipc_socket_xfer_info_t xfer_info; - QUEUE member; -} uv__ipc_xfer_queue_item_t; - -/* IPC frame header flags. */ -/* clang-format off */ -enum { - UV__IPC_FRAME_HAS_DATA = 0x01, - UV__IPC_FRAME_HAS_SOCKET_XFER = 0x02, - UV__IPC_FRAME_XFER_IS_TCP_CONNECTION = 0x04, - /* These are combinations of the flags above. */ - UV__IPC_FRAME_XFER_FLAGS = 0x06, - UV__IPC_FRAME_VALID_FLAGS = 0x07 -}; -/* clang-format on */ - -/* IPC frame header. */ -typedef struct { - uint32_t flags; - uint32_t reserved1; /* Ignored. */ - uint32_t data_length; /* Must be zero if there is no data. */ - uint32_t reserved2; /* Must be zero. */ -} uv__ipc_frame_header_t; - -/* To implement the IPC protocol correctly, these structures must have exactly - * the right size. */ -STATIC_ASSERT(sizeof(uv__ipc_frame_header_t) == 16); -STATIC_ASSERT(sizeof(uv__ipc_socket_xfer_info_t) == 632); - -/* Coalesced write request. */ -typedef struct { - uv_write_t req; /* Internal heap-allocated write request. */ - uv_write_t* user_req; /* Pointer to user-specified uv_write_t. */ -} uv__coalesced_write_t; - - -static void eof_timer_init(uv_pipe_t* pipe); -static void eof_timer_start(uv_pipe_t* pipe); -static void eof_timer_stop(uv_pipe_t* pipe); -static void eof_timer_cb(uv_timer_t* timer); -static void eof_timer_destroy(uv_pipe_t* pipe); -static void eof_timer_close_cb(uv_handle_t* handle); - - -static void uv_unique_pipe_name(char* ptr, char* name, size_t size) { - snprintf(name, size, "\\\\?\\pipe\\uv\\%p-%lu", ptr, GetCurrentProcessId()); -} - - -int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc) { - uv_stream_init(loop, (uv_stream_t*)handle, UV_NAMED_PIPE); - - handle->reqs_pending = 0; - handle->handle = INVALID_HANDLE_VALUE; - handle->name = NULL; - handle->pipe.conn.ipc_remote_pid = 0; - handle->pipe.conn.ipc_data_frame.payload_remaining = 0; - QUEUE_INIT(&handle->pipe.conn.ipc_xfer_queue); - handle->pipe.conn.ipc_xfer_queue_length = 0; - handle->ipc = ipc; - handle->pipe.conn.non_overlapped_writes_tail = NULL; - - return 0; -} - - -static void uv_pipe_connection_init(uv_pipe_t* handle) { - uv_connection_init((uv_stream_t*) handle); - handle->read_req.data = handle; - handle->pipe.conn.eof_timer = NULL; - assert(!(handle->flags & UV_HANDLE_PIPESERVER)); - if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) { - handle->pipe.conn.readfile_thread_handle = NULL; - InitializeCriticalSection(&handle->pipe.conn.readfile_thread_lock); - } -} - - -static HANDLE open_named_pipe(const WCHAR* name, DWORD* duplex_flags) { - HANDLE pipeHandle; - - /* - * Assume that we have a duplex pipe first, so attempt to - * connect with GENERIC_READ | GENERIC_WRITE. - */ - pipeHandle = CreateFileW(name, - GENERIC_READ | GENERIC_WRITE, - 0, - NULL, - OPEN_EXISTING, - FILE_FLAG_OVERLAPPED, - NULL); - if (pipeHandle != INVALID_HANDLE_VALUE) { - *duplex_flags = UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; - return pipeHandle; - } - - /* - * If the pipe is not duplex CreateFileW fails with - * ERROR_ACCESS_DENIED. In that case try to connect - * as a read-only or write-only. - */ - if (GetLastError() == ERROR_ACCESS_DENIED) { - pipeHandle = CreateFileW(name, - GENERIC_READ | FILE_WRITE_ATTRIBUTES, - 0, - NULL, - OPEN_EXISTING, - FILE_FLAG_OVERLAPPED, - NULL); - - if (pipeHandle != INVALID_HANDLE_VALUE) { - *duplex_flags = UV_HANDLE_READABLE; - return pipeHandle; - } - } - - if (GetLastError() == ERROR_ACCESS_DENIED) { - pipeHandle = CreateFileW(name, - GENERIC_WRITE | FILE_READ_ATTRIBUTES, - 0, - NULL, - OPEN_EXISTING, - FILE_FLAG_OVERLAPPED, - NULL); - - if (pipeHandle != INVALID_HANDLE_VALUE) { - *duplex_flags = UV_HANDLE_WRITABLE; - return pipeHandle; - } - } - - return INVALID_HANDLE_VALUE; -} - - -static void close_pipe(uv_pipe_t* pipe) { - assert(pipe->u.fd == -1 || pipe->u.fd > 2); - if (pipe->u.fd == -1) - CloseHandle(pipe->handle); - else - close(pipe->u.fd); - - pipe->u.fd = -1; - pipe->handle = INVALID_HANDLE_VALUE; -} - - -static int uv__pipe_server( - HANDLE* pipeHandle_ptr, DWORD access, - char* name, size_t nameSize, char* random) { - HANDLE pipeHandle; - int err; - - for (;;) { - uv_unique_pipe_name(random, name, nameSize); - - pipeHandle = CreateNamedPipeA(name, - access | FILE_FLAG_FIRST_PIPE_INSTANCE, - PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, 1, 65536, 65536, 0, - NULL); - - if (pipeHandle != INVALID_HANDLE_VALUE) { - /* No name collisions. We're done. */ - break; - } - - err = GetLastError(); - if (err != ERROR_PIPE_BUSY && err != ERROR_ACCESS_DENIED) { - goto error; - } - - /* Pipe name collision. Increment the random number and try again. */ - random++; - } - - *pipeHandle_ptr = pipeHandle; - - return 0; - - error: - if (pipeHandle != INVALID_HANDLE_VALUE) - CloseHandle(pipeHandle); - - return err; -} - - -static int uv__create_pipe_pair( - HANDLE* server_pipe_ptr, HANDLE* client_pipe_ptr, - unsigned int server_flags, unsigned int client_flags, - int inherit_client, char* random) { - /* allowed flags are: UV_READABLE_PIPE | UV_WRITABLE_PIPE | UV_NONBLOCK_PIPE */ - char pipe_name[64]; - SECURITY_ATTRIBUTES sa; - DWORD server_access; - DWORD client_access; - HANDLE server_pipe; - HANDLE client_pipe; - int err; - - server_pipe = INVALID_HANDLE_VALUE; - client_pipe = INVALID_HANDLE_VALUE; - - server_access = 0; - if (server_flags & UV_READABLE_PIPE) - server_access |= PIPE_ACCESS_INBOUND; - if (server_flags & UV_WRITABLE_PIPE) - server_access |= PIPE_ACCESS_OUTBOUND; - if (server_flags & UV_NONBLOCK_PIPE) - server_access |= FILE_FLAG_OVERLAPPED; - server_access |= WRITE_DAC; - - client_access = 0; - if (client_flags & UV_READABLE_PIPE) - client_access |= GENERIC_READ; - else - client_access |= FILE_READ_ATTRIBUTES; - if (client_flags & UV_WRITABLE_PIPE) - client_access |= GENERIC_WRITE; - else - client_access |= FILE_WRITE_ATTRIBUTES; - client_access |= WRITE_DAC; - - /* Create server pipe handle. */ - err = uv__pipe_server(&server_pipe, - server_access, - pipe_name, - sizeof(pipe_name), - random); - if (err) - goto error; - - /* Create client pipe handle. */ - sa.nLength = sizeof sa; - sa.lpSecurityDescriptor = NULL; - sa.bInheritHandle = inherit_client; - - client_pipe = CreateFileA(pipe_name, - client_access, - 0, - &sa, - OPEN_EXISTING, - (client_flags & UV_NONBLOCK_PIPE) ? FILE_FLAG_OVERLAPPED : 0, - NULL); - if (client_pipe == INVALID_HANDLE_VALUE) { - err = GetLastError(); - goto error; - } - -#ifndef NDEBUG - /* Validate that the pipe was opened in the right mode. */ - { - DWORD mode; - BOOL r; - r = GetNamedPipeHandleState(client_pipe, &mode, NULL, NULL, NULL, NULL, 0); - if (r == TRUE) { - assert(mode == (PIPE_READMODE_BYTE | PIPE_WAIT)); - } else { - fprintf(stderr, "libuv assertion failure: GetNamedPipeHandleState failed\n"); - } - } -#endif - - /* Do a blocking ConnectNamedPipe. This should not block because we have - * both ends of the pipe created. */ - if (!ConnectNamedPipe(server_pipe, NULL)) { - if (GetLastError() != ERROR_PIPE_CONNECTED) { - err = GetLastError(); - goto error; - } - } - - *client_pipe_ptr = client_pipe; - *server_pipe_ptr = server_pipe; - return 0; - - error: - if (server_pipe != INVALID_HANDLE_VALUE) - CloseHandle(server_pipe); - - if (client_pipe != INVALID_HANDLE_VALUE) - CloseHandle(client_pipe); - - return err; -} - - -int uv_pipe(uv_file fds[2], int read_flags, int write_flags) { - uv_file temp[2]; - int err; - HANDLE readh; - HANDLE writeh; - - /* Make the server side the inbound (read) end, */ - /* so that both ends will have FILE_READ_ATTRIBUTES permission. */ - /* TODO: better source of local randomness than &fds? */ - read_flags |= UV_READABLE_PIPE; - write_flags |= UV_WRITABLE_PIPE; - err = uv__create_pipe_pair(&readh, &writeh, read_flags, write_flags, 0, (char*) &fds[0]); - if (err != 0) - return err; - temp[0] = _open_osfhandle((intptr_t) readh, 0); - if (temp[0] == -1) { - if (errno == UV_EMFILE) - err = UV_EMFILE; - else - err = UV_UNKNOWN; - CloseHandle(readh); - CloseHandle(writeh); - return err; - } - temp[1] = _open_osfhandle((intptr_t) writeh, 0); - if (temp[1] == -1) { - if (errno == UV_EMFILE) - err = UV_EMFILE; - else - err = UV_UNKNOWN; - _close(temp[0]); - CloseHandle(writeh); - return err; - } - fds[0] = temp[0]; - fds[1] = temp[1]; - return 0; -} - - -int uv__create_stdio_pipe_pair(uv_loop_t* loop, - uv_pipe_t* parent_pipe, HANDLE* child_pipe_ptr, unsigned int flags) { - /* The parent_pipe is always the server_pipe and kept by libuv. - * The child_pipe is always the client_pipe and is passed to the child. - * The flags are specified with respect to their usage in the child. */ - HANDLE server_pipe; - HANDLE client_pipe; - unsigned int server_flags; - unsigned int client_flags; - int err; - - server_pipe = INVALID_HANDLE_VALUE; - client_pipe = INVALID_HANDLE_VALUE; - - server_flags = 0; - client_flags = 0; - if (flags & UV_READABLE_PIPE) { - /* The server needs inbound (read) access too, otherwise CreateNamedPipe() - * won't give us the FILE_READ_ATTRIBUTES permission. We need that to probe - * the state of the write buffer when we're trying to shutdown the pipe. */ - server_flags |= UV_READABLE_PIPE | UV_WRITABLE_PIPE; - client_flags |= UV_READABLE_PIPE; - } - if (flags & UV_WRITABLE_PIPE) { - server_flags |= UV_READABLE_PIPE; - client_flags |= UV_WRITABLE_PIPE; - } - server_flags |= UV_NONBLOCK_PIPE; - if (flags & UV_NONBLOCK_PIPE || parent_pipe->ipc) { - client_flags |= UV_NONBLOCK_PIPE; - } - - err = uv__create_pipe_pair(&server_pipe, &client_pipe, - server_flags, client_flags, 1, (char*) server_pipe); - if (err) - goto error; - - if (CreateIoCompletionPort(server_pipe, - loop->iocp, - (ULONG_PTR) parent_pipe, - 0) == NULL) { - err = GetLastError(); - goto error; - } - - uv_pipe_connection_init(parent_pipe); - parent_pipe->handle = server_pipe; - *child_pipe_ptr = client_pipe; - - /* The server end is now readable and/or writable. */ - if (flags & UV_READABLE_PIPE) - parent_pipe->flags |= UV_HANDLE_WRITABLE; - if (flags & UV_WRITABLE_PIPE) - parent_pipe->flags |= UV_HANDLE_READABLE; - - return 0; - - error: - if (server_pipe != INVALID_HANDLE_VALUE) - CloseHandle(server_pipe); - - if (client_pipe != INVALID_HANDLE_VALUE) - CloseHandle(client_pipe); - - return err; -} - - -static int uv_set_pipe_handle(uv_loop_t* loop, - uv_pipe_t* handle, - HANDLE pipeHandle, - int fd, - DWORD duplex_flags) { - NTSTATUS nt_status; - IO_STATUS_BLOCK io_status; - FILE_MODE_INFORMATION mode_info; - DWORD mode = PIPE_READMODE_BYTE | PIPE_WAIT; - DWORD current_mode = 0; - DWORD err = 0; - - if (handle->flags & UV_HANDLE_PIPESERVER) - return UV_EINVAL; - if (handle->handle != INVALID_HANDLE_VALUE) - return UV_EBUSY; - - if (!SetNamedPipeHandleState(pipeHandle, &mode, NULL, NULL)) { - err = GetLastError(); - if (err == ERROR_ACCESS_DENIED) { - /* - * SetNamedPipeHandleState can fail if the handle doesn't have either - * GENERIC_WRITE or FILE_WRITE_ATTRIBUTES. - * But if the handle already has the desired wait and blocking modes - * we can continue. - */ - if (!GetNamedPipeHandleState(pipeHandle, ¤t_mode, NULL, NULL, - NULL, NULL, 0)) { - return -1; - } else if (current_mode & PIPE_NOWAIT) { - SetLastError(ERROR_ACCESS_DENIED); - return -1; - } - } else { - /* If this returns ERROR_INVALID_PARAMETER we probably opened - * something that is not a pipe. */ - if (err == ERROR_INVALID_PARAMETER) { - SetLastError(WSAENOTSOCK); - } - return -1; - } - } - - /* Check if the pipe was created with FILE_FLAG_OVERLAPPED. */ - nt_status = pNtQueryInformationFile(pipeHandle, - &io_status, - &mode_info, - sizeof(mode_info), - FileModeInformation); - if (nt_status != STATUS_SUCCESS) { - return -1; - } - - if (mode_info.Mode & FILE_SYNCHRONOUS_IO_ALERT || - mode_info.Mode & FILE_SYNCHRONOUS_IO_NONALERT) { - /* Non-overlapped pipe. */ - handle->flags |= UV_HANDLE_NON_OVERLAPPED_PIPE; - } else { - /* Overlapped pipe. Try to associate with IOCP. */ - if (CreateIoCompletionPort(pipeHandle, - loop->iocp, - (ULONG_PTR) handle, - 0) == NULL) { - handle->flags |= UV_HANDLE_EMULATE_IOCP; - } - } - - handle->handle = pipeHandle; - handle->u.fd = fd; - handle->flags |= duplex_flags; - - return 0; -} - - -static int pipe_alloc_accept(uv_loop_t* loop, uv_pipe_t* handle, - uv_pipe_accept_t* req, BOOL firstInstance) { - assert(req->pipeHandle == INVALID_HANDLE_VALUE); - - req->pipeHandle = - CreateNamedPipeW(handle->name, - PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED | WRITE_DAC | - (firstInstance ? FILE_FLAG_FIRST_PIPE_INSTANCE : 0), - PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, - PIPE_UNLIMITED_INSTANCES, 65536, 65536, 0, NULL); - - if (req->pipeHandle == INVALID_HANDLE_VALUE) { - return 0; - } - - /* Associate it with IOCP so we can get events. */ - if (CreateIoCompletionPort(req->pipeHandle, - loop->iocp, - (ULONG_PTR) handle, - 0) == NULL) { - uv_fatal_error(GetLastError(), "CreateIoCompletionPort"); - } - - /* Stash a handle in the server object for use from places such as - * getsockname and chmod. As we transfer ownership of these to client - * objects, we'll allocate new ones here. */ - handle->handle = req->pipeHandle; - - return 1; -} - - -static DWORD WINAPI pipe_shutdown_thread_proc(void* parameter) { - uv_loop_t* loop; - uv_pipe_t* handle; - uv_shutdown_t* req; - - req = (uv_shutdown_t*) parameter; - assert(req); - handle = (uv_pipe_t*) req->handle; - assert(handle); - loop = handle->loop; - assert(loop); - - FlushFileBuffers(handle->handle); - - /* Post completed */ - POST_COMPLETION_FOR_REQ(loop, req); - - return 0; -} - - -void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) { - int err; - DWORD result; - uv_shutdown_t* req; - NTSTATUS nt_status; - IO_STATUS_BLOCK io_status; - FILE_PIPE_LOCAL_INFORMATION pipe_info; - uv__ipc_xfer_queue_item_t* xfer_queue_item; - - if ((handle->flags & UV_HANDLE_CONNECTION) && - handle->stream.conn.shutdown_req != NULL && - handle->stream.conn.write_reqs_pending == 0) { - req = handle->stream.conn.shutdown_req; - - /* Clear the shutdown_req field so we don't go here again. */ - handle->stream.conn.shutdown_req = NULL; - - if (handle->flags & UV_HANDLE_CLOSING) { - UNREGISTER_HANDLE_REQ(loop, handle, req); - - /* Already closing. Cancel the shutdown. */ - if (req->cb) { - req->cb(req, UV_ECANCELED); - } - - DECREASE_PENDING_REQ_COUNT(handle); - return; - } - - /* Try to avoid flushing the pipe buffer in the thread pool. */ - nt_status = pNtQueryInformationFile(handle->handle, - &io_status, - &pipe_info, - sizeof pipe_info, - FilePipeLocalInformation); - - if (nt_status != STATUS_SUCCESS) { - /* Failure */ - UNREGISTER_HANDLE_REQ(loop, handle, req); - - handle->flags |= UV_HANDLE_WRITABLE; /* Questionable */ - if (req->cb) { - err = pRtlNtStatusToDosError(nt_status); - req->cb(req, uv_translate_sys_error(err)); - } - - DECREASE_PENDING_REQ_COUNT(handle); - return; - } - - if (pipe_info.OutboundQuota == pipe_info.WriteQuotaAvailable) { - /* Short-circuit, no need to call FlushFileBuffers. */ - uv_insert_pending_req(loop, (uv_req_t*) req); - return; - } - - /* Run FlushFileBuffers in the thread pool. */ - result = QueueUserWorkItem(pipe_shutdown_thread_proc, - req, - WT_EXECUTELONGFUNCTION); - if (result) { - return; - - } else { - /* Failure. */ - UNREGISTER_HANDLE_REQ(loop, handle, req); - - handle->flags |= UV_HANDLE_WRITABLE; /* Questionable */ - if (req->cb) { - err = GetLastError(); - req->cb(req, uv_translate_sys_error(err)); - } - - DECREASE_PENDING_REQ_COUNT(handle); - return; - } - } - - if (handle->flags & UV_HANDLE_CLOSING && - handle->reqs_pending == 0) { - assert(!(handle->flags & UV_HANDLE_CLOSED)); - - if (handle->flags & UV_HANDLE_CONNECTION) { - /* Free pending sockets */ - while (!QUEUE_EMPTY(&handle->pipe.conn.ipc_xfer_queue)) { - QUEUE* q; - SOCKET socket; - - q = QUEUE_HEAD(&handle->pipe.conn.ipc_xfer_queue); - QUEUE_REMOVE(q); - xfer_queue_item = QUEUE_DATA(q, uv__ipc_xfer_queue_item_t, member); - - /* Materialize socket and close it */ - socket = WSASocketW(FROM_PROTOCOL_INFO, - FROM_PROTOCOL_INFO, - FROM_PROTOCOL_INFO, - &xfer_queue_item->xfer_info.socket_info, - 0, - WSA_FLAG_OVERLAPPED); - uv__free(xfer_queue_item); - - if (socket != INVALID_SOCKET) - closesocket(socket); - } - handle->pipe.conn.ipc_xfer_queue_length = 0; - - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - if (handle->read_req.wait_handle != INVALID_HANDLE_VALUE) { - UnregisterWait(handle->read_req.wait_handle); - handle->read_req.wait_handle = INVALID_HANDLE_VALUE; - } - if (handle->read_req.event_handle != NULL) { - CloseHandle(handle->read_req.event_handle); - handle->read_req.event_handle = NULL; - } - } - - if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) - DeleteCriticalSection(&handle->pipe.conn.readfile_thread_lock); - } - - if (handle->flags & UV_HANDLE_PIPESERVER) { - assert(handle->pipe.serv.accept_reqs); - uv__free(handle->pipe.serv.accept_reqs); - handle->pipe.serv.accept_reqs = NULL; - } - - uv__handle_close(handle); - } -} - - -void uv_pipe_pending_instances(uv_pipe_t* handle, int count) { - if (handle->flags & UV_HANDLE_BOUND) - return; - handle->pipe.serv.pending_instances = count; - handle->flags |= UV_HANDLE_PIPESERVER; -} - - -/* Creates a pipe server. */ -int uv_pipe_bind(uv_pipe_t* handle, const char* name) { - uv_loop_t* loop = handle->loop; - int i, err, nameSize; - uv_pipe_accept_t* req; - - if (handle->flags & UV_HANDLE_BOUND) { - return UV_EINVAL; - } - - if (!name) { - return UV_EINVAL; - } - - if (!(handle->flags & UV_HANDLE_PIPESERVER)) { - handle->pipe.serv.pending_instances = default_pending_pipe_instances; - } - - 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"); - } - - for (i = 0; i < handle->pipe.serv.pending_instances; i++) { - req = &handle->pipe.serv.accept_reqs[i]; - UV_REQ_INIT(req, UV_ACCEPT); - req->data = handle; - req->pipeHandle = INVALID_HANDLE_VALUE; - 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; - } - - /* - * Attempt to create the first pipe with FILE_FLAG_FIRST_PIPE_INSTANCE. - * If this fails then there's already a pipe server for the given pipe name. - */ - if (!pipe_alloc_accept(loop, - handle, - &handle->pipe.serv.accept_reqs[0], - TRUE)) { - err = GetLastError(); - if (err == ERROR_ACCESS_DENIED) { - err = WSAEADDRINUSE; /* Translates to UV_EADDRINUSE. */ - } else if (err == ERROR_PATH_NOT_FOUND || err == ERROR_INVALID_NAME) { - err = WSAEACCES; /* Translates to UV_EACCES. */ - } - goto error; - } - - handle->pipe.serv.pending_accepts = NULL; - handle->flags |= UV_HANDLE_PIPESERVER; - handle->flags |= UV_HANDLE_BOUND; - - return 0; - -error: - if (handle->name) { - uv__free(handle->name); - handle->name = NULL; - } - - return uv_translate_sys_error(err); -} - - -static DWORD WINAPI pipe_connect_thread_proc(void* parameter) { - uv_loop_t* loop; - uv_pipe_t* handle; - uv_connect_t* req; - HANDLE pipeHandle = INVALID_HANDLE_VALUE; - DWORD duplex_flags; - - req = (uv_connect_t*) parameter; - assert(req); - handle = (uv_pipe_t*) req->handle; - assert(handle); - loop = handle->loop; - assert(loop); - - /* We're here because CreateFile on a pipe returned ERROR_PIPE_BUSY. We wait - * for the pipe to become available with WaitNamedPipe. */ - while (WaitNamedPipeW(handle->name, 30000)) { - /* The pipe is now available, try to connect. */ - pipeHandle = open_named_pipe(handle->name, &duplex_flags); - if (pipeHandle != INVALID_HANDLE_VALUE) - break; - - SwitchToThread(); - } - - if (pipeHandle != INVALID_HANDLE_VALUE && - !uv_set_pipe_handle(loop, handle, pipeHandle, -1, duplex_flags)) { - SET_REQ_SUCCESS(req); - } else { - SET_REQ_ERROR(req, GetLastError()); - } - - /* Post completed */ - POST_COMPLETION_FOR_REQ(loop, req); - - return 0; -} - - -void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, - const char* name, uv_connect_cb cb) { - uv_loop_t* loop = handle->loop; - int err, nameSize; - HANDLE pipeHandle = INVALID_HANDLE_VALUE; - DWORD duplex_flags; - - UV_REQ_INIT(req, UV_CONNECT); - req->handle = (uv_stream_t*) handle; - req->cb = cb; - - /* 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; - } - - pipeHandle = open_named_pipe(handle->name, &duplex_flags); - if (pipeHandle == INVALID_HANDLE_VALUE) { - if (GetLastError() == ERROR_PIPE_BUSY) { - /* Wait for the server to make a pipe instance available. */ - if (!QueueUserWorkItem(&pipe_connect_thread_proc, - req, - WT_EXECUTELONGFUNCTION)) { - err = GetLastError(); - goto error; - } - - REGISTER_HANDLE_REQ(loop, handle, req); - handle->reqs_pending++; - - return; - } - - err = GetLastError(); - goto error; - } - - assert(pipeHandle != INVALID_HANDLE_VALUE); - - if (uv_set_pipe_handle(loop, - (uv_pipe_t*) req->handle, - pipeHandle, - -1, - duplex_flags)) { - err = GetLastError(); - goto error; - } - - SET_REQ_SUCCESS(req); - uv_insert_pending_req(loop, (uv_req_t*) req); - handle->reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); - return; - -error: - if (handle->name) { - uv__free(handle->name); - handle->name = NULL; - } - - if (pipeHandle != INVALID_HANDLE_VALUE) - CloseHandle(pipeHandle); - - /* Make this req pending reporting an error. */ - SET_REQ_ERROR(req, err); - uv_insert_pending_req(loop, (uv_req_t*) req); - handle->reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); - return; -} - - -void uv__pipe_interrupt_read(uv_pipe_t* handle) { - BOOL r; - - if (!(handle->flags & UV_HANDLE_READ_PENDING)) - return; /* No pending reads. */ - if (handle->flags & UV_HANDLE_CANCELLATION_PENDING) - return; /* Already cancelled. */ - if (handle->handle == INVALID_HANDLE_VALUE) - return; /* Pipe handle closed. */ - - if (!(handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE)) { - /* Cancel asynchronous read. */ - r = CancelIoEx(handle->handle, &handle->read_req.u.io.overlapped); - assert(r || GetLastError() == ERROR_NOT_FOUND); - - } else { - /* Cancel synchronous read (which is happening in the thread pool). */ - HANDLE thread; - volatile HANDLE* thread_ptr = &handle->pipe.conn.readfile_thread_handle; - - EnterCriticalSection(&handle->pipe.conn.readfile_thread_lock); - - thread = *thread_ptr; - if (thread == NULL) { - /* The thread pool thread has not yet reached the point of blocking, we - * can pre-empt it by setting thread_handle to INVALID_HANDLE_VALUE. */ - *thread_ptr = INVALID_HANDLE_VALUE; - - } else { - /* Spin until the thread has acknowledged (by setting the thread to - * INVALID_HANDLE_VALUE) that it is past the point of blocking. */ - while (thread != INVALID_HANDLE_VALUE) { - r = CancelSynchronousIo(thread); - assert(r || GetLastError() == ERROR_NOT_FOUND); - SwitchToThread(); /* Yield thread. */ - thread = *thread_ptr; - } - } - - LeaveCriticalSection(&handle->pipe.conn.readfile_thread_lock); - } - - /* Set flag to indicate that read has been cancelled. */ - handle->flags |= UV_HANDLE_CANCELLATION_PENDING; -} - - -void uv__pipe_read_stop(uv_pipe_t* handle) { - handle->flags &= ~UV_HANDLE_READING; - DECREASE_ACTIVE_COUNT(handle->loop, handle); - - uv__pipe_interrupt_read(handle); -} - - -/* Cleans up uv_pipe_t (server or connection) and all resources associated with - * it. */ -void uv_pipe_cleanup(uv_loop_t* loop, uv_pipe_t* handle) { - int i; - HANDLE pipeHandle; - - uv__pipe_interrupt_read(handle); - - if (handle->name) { - uv__free(handle->name); - handle->name = NULL; - } - - if (handle->flags & UV_HANDLE_PIPESERVER) { - for (i = 0; i < handle->pipe.serv.pending_instances; i++) { - pipeHandle = handle->pipe.serv.accept_reqs[i].pipeHandle; - if (pipeHandle != INVALID_HANDLE_VALUE) { - CloseHandle(pipeHandle); - handle->pipe.serv.accept_reqs[i].pipeHandle = INVALID_HANDLE_VALUE; - } - } - handle->handle = INVALID_HANDLE_VALUE; - } - - if (handle->flags & UV_HANDLE_CONNECTION) { - handle->flags &= ~UV_HANDLE_WRITABLE; - eof_timer_destroy(handle); - } - - if ((handle->flags & UV_HANDLE_CONNECTION) - && handle->handle != INVALID_HANDLE_VALUE) - close_pipe(handle); -} - - -void uv_pipe_close(uv_loop_t* loop, uv_pipe_t* handle) { - if (handle->flags & UV_HANDLE_READING) { - handle->flags &= ~UV_HANDLE_READING; - DECREASE_ACTIVE_COUNT(loop, handle); - } - - if (handle->flags & UV_HANDLE_LISTENING) { - handle->flags &= ~UV_HANDLE_LISTENING; - DECREASE_ACTIVE_COUNT(loop, handle); - } - - uv_pipe_cleanup(loop, handle); - - if (handle->reqs_pending == 0) { - uv_want_endgame(loop, (uv_handle_t*) handle); - } - - handle->flags &= ~(UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); - uv__handle_closing(handle); -} - - -static void uv_pipe_queue_accept(uv_loop_t* loop, uv_pipe_t* handle, - uv_pipe_accept_t* req, BOOL firstInstance) { - assert(handle->flags & UV_HANDLE_LISTENING); - - if (!firstInstance && !pipe_alloc_accept(loop, handle, req, FALSE)) { - SET_REQ_ERROR(req, GetLastError()); - uv_insert_pending_req(loop, (uv_req_t*) req); - handle->reqs_pending++; - return; - } - - assert(req->pipeHandle != INVALID_HANDLE_VALUE); - - /* Prepare the overlapped structure. */ - memset(&(req->u.io.overlapped), 0, sizeof(req->u.io.overlapped)); - - if (!ConnectNamedPipe(req->pipeHandle, &req->u.io.overlapped) && - GetLastError() != ERROR_IO_PENDING) { - if (GetLastError() == ERROR_PIPE_CONNECTED) { - SET_REQ_SUCCESS(req); - } else { - CloseHandle(req->pipeHandle); - req->pipeHandle = INVALID_HANDLE_VALUE; - /* Make this req pending reporting an error. */ - SET_REQ_ERROR(req, GetLastError()); - } - uv_insert_pending_req(loop, (uv_req_t*) req); - handle->reqs_pending++; - return; - } - - /* Wait for completion via IOCP */ - handle->reqs_pending++; -} - - -int uv_pipe_accept(uv_pipe_t* server, uv_stream_t* client) { - uv_loop_t* loop = server->loop; - uv_pipe_t* pipe_client; - uv_pipe_accept_t* req; - QUEUE* q; - uv__ipc_xfer_queue_item_t* item; - int err; - - if (server->ipc) { - if (QUEUE_EMPTY(&server->pipe.conn.ipc_xfer_queue)) { - /* No valid pending sockets. */ - return WSAEWOULDBLOCK; - } - - q = QUEUE_HEAD(&server->pipe.conn.ipc_xfer_queue); - QUEUE_REMOVE(q); - server->pipe.conn.ipc_xfer_queue_length--; - item = QUEUE_DATA(q, uv__ipc_xfer_queue_item_t, member); - - err = uv__tcp_xfer_import( - (uv_tcp_t*) client, item->xfer_type, &item->xfer_info); - if (err != 0) - return err; - - uv__free(item); - - } else { - pipe_client = (uv_pipe_t*) client; - - /* Find a connection instance that has been connected, but not yet - * accepted. */ - req = server->pipe.serv.pending_accepts; - - if (!req) { - /* No valid connections found, so we error out. */ - return WSAEWOULDBLOCK; - } - - /* Initialize the client handle and copy the pipeHandle to the client */ - uv_pipe_connection_init(pipe_client); - pipe_client->handle = req->pipeHandle; - pipe_client->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; - - /* Prepare the req to pick up a new connection */ - server->pipe.serv.pending_accepts = req->next_pending; - req->next_pending = NULL; - req->pipeHandle = INVALID_HANDLE_VALUE; - - server->handle = INVALID_HANDLE_VALUE; - if (!(server->flags & UV_HANDLE_CLOSING)) { - uv_pipe_queue_accept(loop, server, req, FALSE); - } - } - - return 0; -} - - -/* Starts listening for connections for the given pipe. */ -int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb) { - uv_loop_t* loop = handle->loop; - int i; - - if (handle->flags & UV_HANDLE_LISTENING) { - handle->stream.serv.connection_cb = cb; - } - - if (!(handle->flags & UV_HANDLE_BOUND)) { - return WSAEINVAL; - } - - if (handle->flags & UV_HANDLE_READING) { - return WSAEISCONN; - } - - if (!(handle->flags & UV_HANDLE_PIPESERVER)) { - return ERROR_NOT_SUPPORTED; - } - - if (handle->ipc) { - return WSAEINVAL; - } - - handle->flags |= UV_HANDLE_LISTENING; - INCREASE_ACTIVE_COUNT(loop, handle); - handle->stream.serv.connection_cb = cb; - - /* First pipe handle should have already been created in uv_pipe_bind */ - assert(handle->pipe.serv.accept_reqs[0].pipeHandle != INVALID_HANDLE_VALUE); - - for (i = 0; i < handle->pipe.serv.pending_instances; i++) { - uv_pipe_queue_accept(loop, handle, &handle->pipe.serv.accept_reqs[i], i == 0); - } - - return 0; -} - - -static DWORD WINAPI uv_pipe_zero_readfile_thread_proc(void* arg) { - uv_read_t* req = (uv_read_t*) arg; - uv_pipe_t* handle = (uv_pipe_t*) req->data; - uv_loop_t* loop = handle->loop; - volatile HANDLE* thread_ptr = &handle->pipe.conn.readfile_thread_handle; - CRITICAL_SECTION* lock = &handle->pipe.conn.readfile_thread_lock; - HANDLE thread; - DWORD bytes; - DWORD err; - - assert(req->type == UV_READ); - assert(handle->type == UV_NAMED_PIPE); - - err = 0; - - /* Create a handle to the current thread. */ - if (!DuplicateHandle(GetCurrentProcess(), - GetCurrentThread(), - GetCurrentProcess(), - &thread, - 0, - FALSE, - DUPLICATE_SAME_ACCESS)) { - err = GetLastError(); - goto out1; - } - - /* The lock needs to be held when thread handle is modified. */ - EnterCriticalSection(lock); - if (*thread_ptr == INVALID_HANDLE_VALUE) { - /* uv__pipe_interrupt_read() cancelled reading before we got here. */ - err = ERROR_OPERATION_ABORTED; - } else { - /* Let main thread know which worker thread is doing the blocking read. */ - assert(*thread_ptr == NULL); - *thread_ptr = thread; - } - LeaveCriticalSection(lock); - - if (err) - goto out2; - - /* Block the thread until data is available on the pipe, or the read is - * cancelled. */ - if (!ReadFile(handle->handle, &uv_zero_, 0, &bytes, NULL)) - err = GetLastError(); - - /* Let the main thread know the worker is past the point of blocking. */ - assert(thread == *thread_ptr); - *thread_ptr = INVALID_HANDLE_VALUE; - - /* Briefly acquire the mutex. Since the main thread holds the lock while it - * is spinning trying to cancel this thread's I/O, we will block here until - * it stops doing that. */ - EnterCriticalSection(lock); - LeaveCriticalSection(lock); - -out2: - /* Close the handle to the current thread. */ - CloseHandle(thread); - -out1: - /* Set request status and post a completion record to the IOCP. */ - if (err) - SET_REQ_ERROR(req, err); - else - SET_REQ_SUCCESS(req); - POST_COMPLETION_FOR_REQ(loop, req); - - return 0; -} - - -static DWORD WINAPI uv_pipe_writefile_thread_proc(void* parameter) { - int result; - DWORD bytes; - uv_write_t* req = (uv_write_t*) parameter; - uv_pipe_t* handle = (uv_pipe_t*) req->handle; - uv_loop_t* loop = handle->loop; - - assert(req != NULL); - assert(req->type == UV_WRITE); - assert(handle->type == UV_NAMED_PIPE); - assert(req->write_buffer.base); - - result = WriteFile(handle->handle, - req->write_buffer.base, - req->write_buffer.len, - &bytes, - NULL); - - if (!result) { - SET_REQ_ERROR(req, GetLastError()); - } - - POST_COMPLETION_FOR_REQ(loop, req); - return 0; -} - - -static void CALLBACK post_completion_read_wait(void* context, BOOLEAN timed_out) { - uv_read_t* req; - uv_tcp_t* handle; - - req = (uv_read_t*) context; - assert(req != NULL); - handle = (uv_tcp_t*)req->data; - assert(handle != NULL); - assert(!timed_out); - - if (!PostQueuedCompletionStatus(handle->loop->iocp, - req->u.io.overlapped.InternalHigh, - 0, - &req->u.io.overlapped)) { - uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus"); - } -} - - -static void CALLBACK post_completion_write_wait(void* context, BOOLEAN timed_out) { - uv_write_t* req; - uv_tcp_t* handle; - - req = (uv_write_t*) context; - assert(req != NULL); - handle = (uv_tcp_t*)req->handle; - assert(handle != NULL); - assert(!timed_out); - - if (!PostQueuedCompletionStatus(handle->loop->iocp, - req->u.io.overlapped.InternalHigh, - 0, - &req->u.io.overlapped)) { - uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus"); - } -} - - -static void uv_pipe_queue_read(uv_loop_t* loop, uv_pipe_t* handle) { - uv_read_t* req; - int result; - - assert(handle->flags & UV_HANDLE_READING); - assert(!(handle->flags & UV_HANDLE_READ_PENDING)); - - assert(handle->handle != INVALID_HANDLE_VALUE); - - req = &handle->read_req; - - if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) { - handle->pipe.conn.readfile_thread_handle = NULL; /* Reset cancellation. */ - if (!QueueUserWorkItem(&uv_pipe_zero_readfile_thread_proc, - req, - WT_EXECUTELONGFUNCTION)) { - /* Make this req pending reporting an error. */ - SET_REQ_ERROR(req, GetLastError()); - goto error; - } - } else { - memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - assert(req->event_handle != NULL); - req->u.io.overlapped.hEvent = (HANDLE) ((uintptr_t) req->event_handle | 1); - } - - /* Do 0-read */ - result = ReadFile(handle->handle, - &uv_zero_, - 0, - NULL, - &req->u.io.overlapped); - - if (!result && GetLastError() != ERROR_IO_PENDING) { - /* Make this req pending reporting an error. */ - SET_REQ_ERROR(req, GetLastError()); - goto error; - } - - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - if (req->wait_handle == INVALID_HANDLE_VALUE) { - if (!RegisterWaitForSingleObject(&req->wait_handle, - req->event_handle, post_completion_read_wait, (void*) req, - INFINITE, WT_EXECUTEINWAITTHREAD)) { - SET_REQ_ERROR(req, GetLastError()); - goto error; - } - } - } - } - - /* Start the eof timer if there is one */ - eof_timer_start(handle); - handle->flags |= UV_HANDLE_READ_PENDING; - handle->reqs_pending++; - return; - -error: - uv_insert_pending_req(loop, (uv_req_t*)req); - handle->flags |= UV_HANDLE_READ_PENDING; - handle->reqs_pending++; -} - - -int uv_pipe_read_start(uv_pipe_t* handle, - uv_alloc_cb alloc_cb, - uv_read_cb read_cb) { - uv_loop_t* loop = handle->loop; - - handle->flags |= UV_HANDLE_READING; - INCREASE_ACTIVE_COUNT(loop, handle); - handle->read_cb = read_cb; - handle->alloc_cb = alloc_cb; - - /* If reading was stopped and then started again, there could still be a read - * request pending. */ - if (!(handle->flags & UV_HANDLE_READ_PENDING)) { - if (handle->flags & UV_HANDLE_EMULATE_IOCP && - handle->read_req.event_handle == NULL) { - handle->read_req.event_handle = CreateEvent(NULL, 0, 0, NULL); - if (handle->read_req.event_handle == NULL) { - uv_fatal_error(GetLastError(), "CreateEvent"); - } - } - uv_pipe_queue_read(loop, handle); - } - - return 0; -} - - -static void uv_insert_non_overlapped_write_req(uv_pipe_t* handle, - uv_write_t* req) { - req->next_req = NULL; - if (handle->pipe.conn.non_overlapped_writes_tail) { - req->next_req = - handle->pipe.conn.non_overlapped_writes_tail->next_req; - handle->pipe.conn.non_overlapped_writes_tail->next_req = (uv_req_t*)req; - handle->pipe.conn.non_overlapped_writes_tail = req; - } else { - req->next_req = (uv_req_t*)req; - handle->pipe.conn.non_overlapped_writes_tail = req; - } -} - - -static uv_write_t* uv_remove_non_overlapped_write_req(uv_pipe_t* handle) { - uv_write_t* req; - - if (handle->pipe.conn.non_overlapped_writes_tail) { - req = (uv_write_t*)handle->pipe.conn.non_overlapped_writes_tail->next_req; - - if (req == handle->pipe.conn.non_overlapped_writes_tail) { - handle->pipe.conn.non_overlapped_writes_tail = NULL; - } else { - handle->pipe.conn.non_overlapped_writes_tail->next_req = - req->next_req; - } - - return req; - } else { - /* queue empty */ - return NULL; - } -} - - -static void uv_queue_non_overlapped_write(uv_pipe_t* handle) { - uv_write_t* req = uv_remove_non_overlapped_write_req(handle); - if (req) { - if (!QueueUserWorkItem(&uv_pipe_writefile_thread_proc, - req, - WT_EXECUTELONGFUNCTION)) { - uv_fatal_error(GetLastError(), "QueueUserWorkItem"); - } - } -} - - -static int uv__build_coalesced_write_req(uv_write_t* user_req, - const uv_buf_t bufs[], - size_t nbufs, - uv_write_t** req_out, - uv_buf_t* write_buf_out) { - /* Pack into a single heap-allocated buffer: - * (a) a uv_write_t structure where libuv stores the actual state. - * (b) a pointer to the original uv_write_t. - * (c) data from all `bufs` entries. - */ - char* heap_buffer; - size_t heap_buffer_length, heap_buffer_offset; - uv__coalesced_write_t* coalesced_write_req; /* (a) + (b) */ - char* data_start; /* (c) */ - size_t data_length; - unsigned int i; - - /* Compute combined size of all combined buffers from `bufs`. */ - data_length = 0; - for (i = 0; i < nbufs; i++) - data_length += bufs[i].len; - - /* The total combined size of data buffers should not exceed UINT32_MAX, - * because WriteFile() won't accept buffers larger than that. */ - if (data_length > UINT32_MAX) - return WSAENOBUFS; /* Maps to UV_ENOBUFS. */ - - /* Compute heap buffer size. */ - heap_buffer_length = sizeof *coalesced_write_req + /* (a) + (b) */ - data_length; /* (c) */ - - /* Allocate buffer. */ - heap_buffer = uv__malloc(heap_buffer_length); - if (heap_buffer == NULL) - return ERROR_NOT_ENOUGH_MEMORY; /* Maps to UV_ENOMEM. */ - - /* Copy uv_write_t information to the buffer. */ - coalesced_write_req = (uv__coalesced_write_t*) heap_buffer; - coalesced_write_req->req = *user_req; /* copy (a) */ - coalesced_write_req->req.coalesced = 1; - coalesced_write_req->user_req = user_req; /* copy (b) */ - heap_buffer_offset = sizeof *coalesced_write_req; /* offset (a) + (b) */ - - /* Copy data buffers to the heap buffer. */ - data_start = &heap_buffer[heap_buffer_offset]; - for (i = 0; i < nbufs; i++) { - memcpy(&heap_buffer[heap_buffer_offset], - bufs[i].base, - bufs[i].len); /* copy (c) */ - heap_buffer_offset += bufs[i].len; /* offset (c) */ - } - assert(heap_buffer_offset == heap_buffer_length); - - /* Set out arguments and return. */ - *req_out = &coalesced_write_req->req; - *write_buf_out = uv_buf_init(data_start, (unsigned int) data_length); - return 0; -} - - -static int uv__pipe_write_data(uv_loop_t* loop, - uv_write_t* req, - uv_pipe_t* handle, - const uv_buf_t bufs[], - size_t nbufs, - uv_write_cb cb, - int copy_always) { - int err; - int result; - uv_buf_t write_buf; - - assert(handle->handle != INVALID_HANDLE_VALUE); - - UV_REQ_INIT(req, UV_WRITE); - req->handle = (uv_stream_t*) handle; - req->send_handle = NULL; - req->cb = cb; - /* Private fields. */ - req->coalesced = 0; - req->event_handle = NULL; - req->wait_handle = INVALID_HANDLE_VALUE; - - /* Prepare the overlapped structure. */ - memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); - if (handle->flags & (UV_HANDLE_EMULATE_IOCP | UV_HANDLE_BLOCKING_WRITES)) { - req->event_handle = CreateEvent(NULL, 0, 0, NULL); - if (req->event_handle == NULL) { - uv_fatal_error(GetLastError(), "CreateEvent"); - } - req->u.io.overlapped.hEvent = (HANDLE) ((uintptr_t) req->event_handle | 1); - } - req->write_buffer = uv_null_buf_; - - if (nbufs == 0) { - /* Write empty buffer. */ - write_buf = uv_null_buf_; - } else if (nbufs == 1 && !copy_always) { - /* Write directly from bufs[0]. */ - write_buf = bufs[0]; - } else { - /* Coalesce all `bufs` into one big buffer. This also creates a new - * write-request structure that replaces the old one. */ - err = uv__build_coalesced_write_req(req, bufs, nbufs, &req, &write_buf); - if (err != 0) - return err; - } - - if ((handle->flags & - (UV_HANDLE_BLOCKING_WRITES | UV_HANDLE_NON_OVERLAPPED_PIPE)) == - (UV_HANDLE_BLOCKING_WRITES | UV_HANDLE_NON_OVERLAPPED_PIPE)) { - DWORD bytes; - result = - WriteFile(handle->handle, write_buf.base, write_buf.len, &bytes, NULL); - - if (!result) { - err = GetLastError(); - return err; - } else { - /* Request completed immediately. */ - req->u.io.queued_bytes = 0; - } - - REGISTER_HANDLE_REQ(loop, handle, req); - handle->reqs_pending++; - handle->stream.conn.write_reqs_pending++; - POST_COMPLETION_FOR_REQ(loop, req); - return 0; - } else if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) { - req->write_buffer = write_buf; - uv_insert_non_overlapped_write_req(handle, req); - if (handle->stream.conn.write_reqs_pending == 0) { - uv_queue_non_overlapped_write(handle); - } - - /* Request queued by the kernel. */ - req->u.io.queued_bytes = write_buf.len; - handle->write_queue_size += req->u.io.queued_bytes; - } else if (handle->flags & UV_HANDLE_BLOCKING_WRITES) { - /* Using overlapped IO, but wait for completion before returning */ - result = WriteFile(handle->handle, - write_buf.base, - write_buf.len, - NULL, - &req->u.io.overlapped); - - if (!result && GetLastError() != ERROR_IO_PENDING) { - err = GetLastError(); - CloseHandle(req->event_handle); - req->event_handle = NULL; - return err; - } - - if (result) { - /* Request completed immediately. */ - req->u.io.queued_bytes = 0; - } else { - /* Request queued by the kernel. */ - req->u.io.queued_bytes = write_buf.len; - handle->write_queue_size += req->u.io.queued_bytes; - if (WaitForSingleObject(req->event_handle, INFINITE) != - WAIT_OBJECT_0) { - err = GetLastError(); - CloseHandle(req->event_handle); - req->event_handle = NULL; - return err; - } - } - CloseHandle(req->event_handle); - req->event_handle = NULL; - - REGISTER_HANDLE_REQ(loop, handle, req); - handle->reqs_pending++; - handle->stream.conn.write_reqs_pending++; - return 0; - } else { - result = WriteFile(handle->handle, - write_buf.base, - write_buf.len, - NULL, - &req->u.io.overlapped); - - if (!result && GetLastError() != ERROR_IO_PENDING) { - return GetLastError(); - } - - if (result) { - /* Request completed immediately. */ - req->u.io.queued_bytes = 0; - } else { - /* Request queued by the kernel. */ - req->u.io.queued_bytes = write_buf.len; - handle->write_queue_size += req->u.io.queued_bytes; - } - - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - if (!RegisterWaitForSingleObject(&req->wait_handle, - req->event_handle, post_completion_write_wait, (void*) req, - INFINITE, WT_EXECUTEINWAITTHREAD)) { - return GetLastError(); - } - } - } - - REGISTER_HANDLE_REQ(loop, handle, req); - handle->reqs_pending++; - handle->stream.conn.write_reqs_pending++; - - return 0; -} - - -static DWORD uv__pipe_get_ipc_remote_pid(uv_pipe_t* handle) { - DWORD* pid = &handle->pipe.conn.ipc_remote_pid; - - /* If the both ends of the IPC pipe are owned by the same process, - * the remote end pid may not yet be set. If so, do it here. - * TODO: this is weird; it'd probably better to use a handshake. */ - if (*pid == 0) - *pid = GetCurrentProcessId(); - - return *pid; -} - - -int uv__pipe_write_ipc(uv_loop_t* loop, - uv_write_t* req, - uv_pipe_t* handle, - const uv_buf_t data_bufs[], - size_t data_buf_count, - uv_stream_t* send_handle, - uv_write_cb cb) { - uv_buf_t stack_bufs[6]; - uv_buf_t* bufs; - size_t buf_count, buf_index; - uv__ipc_frame_header_t frame_header; - uv__ipc_socket_xfer_type_t xfer_type = UV__IPC_SOCKET_XFER_NONE; - uv__ipc_socket_xfer_info_t xfer_info; - uint64_t data_length; - size_t i; - int err; - - /* Compute the combined size of data buffers. */ - data_length = 0; - for (i = 0; i < data_buf_count; i++) - data_length += data_bufs[i].len; - if (data_length > UINT32_MAX) - return WSAENOBUFS; /* Maps to UV_ENOBUFS. */ - - /* Prepare the frame's socket xfer payload. */ - if (send_handle != NULL) { - uv_tcp_t* send_tcp_handle = (uv_tcp_t*) send_handle; - - /* Verify that `send_handle` it is indeed a tcp handle. */ - if (send_tcp_handle->type != UV_TCP) - return ERROR_NOT_SUPPORTED; - - /* Export the tcp handle. */ - err = uv__tcp_xfer_export(send_tcp_handle, - uv__pipe_get_ipc_remote_pid(handle), - &xfer_type, - &xfer_info); - if (err != 0) - return err; - } - - /* Compute the number of uv_buf_t's required. */ - buf_count = 1 + data_buf_count; /* Frame header and data buffers. */ - if (send_handle != NULL) - buf_count += 1; /* One extra for the socket xfer information. */ - - /* Use the on-stack buffer array if it is big enough; otherwise allocate - * space for it on the heap. */ - if (buf_count < ARRAY_SIZE(stack_bufs)) { - /* Use on-stack buffer array. */ - bufs = stack_bufs; - } else { - /* Use heap-allocated buffer array. */ - bufs = uv__calloc(buf_count, sizeof(uv_buf_t)); - if (bufs == NULL) - return ERROR_NOT_ENOUGH_MEMORY; /* Maps to UV_ENOMEM. */ - } - buf_index = 0; - - /* Initialize frame header and add it to the buffers list. */ - memset(&frame_header, 0, sizeof frame_header); - bufs[buf_index++] = uv_buf_init((char*) &frame_header, sizeof frame_header); - - if (send_handle != NULL) { - /* Add frame header flags. */ - switch (xfer_type) { - case UV__IPC_SOCKET_XFER_TCP_CONNECTION: - frame_header.flags |= UV__IPC_FRAME_HAS_SOCKET_XFER | - UV__IPC_FRAME_XFER_IS_TCP_CONNECTION; - break; - case UV__IPC_SOCKET_XFER_TCP_SERVER: - frame_header.flags |= UV__IPC_FRAME_HAS_SOCKET_XFER; - break; - default: - assert(0); /* Unreachable. */ - } - /* Add xfer info buffer. */ - bufs[buf_index++] = uv_buf_init((char*) &xfer_info, sizeof xfer_info); - } - - if (data_length > 0) { - /* Update frame header. */ - frame_header.flags |= UV__IPC_FRAME_HAS_DATA; - frame_header.data_length = (uint32_t) data_length; - /* Add data buffers to buffers list. */ - for (i = 0; i < data_buf_count; i++) - bufs[buf_index++] = data_bufs[i]; - } - - /* Write buffers. We set the `always_copy` flag, so it is not a problem that - * some of the written data lives on the stack. */ - err = uv__pipe_write_data(loop, req, handle, bufs, buf_count, cb, 1); - - /* If we had to heap-allocate the bufs array, free it now. */ - if (bufs != stack_bufs) { - uv__free(bufs); - } - - return err; -} - - -int uv__pipe_write(uv_loop_t* loop, - uv_write_t* req, - uv_pipe_t* handle, - const uv_buf_t bufs[], - size_t nbufs, - uv_stream_t* send_handle, - uv_write_cb cb) { - if (handle->ipc) { - /* IPC pipe write: use framing protocol. */ - return uv__pipe_write_ipc(loop, req, handle, bufs, nbufs, send_handle, cb); - } else { - /* Non-IPC pipe write: put data on the wire directly. */ - assert(send_handle == NULL); - return uv__pipe_write_data(loop, req, handle, bufs, nbufs, cb, 0); - } -} - - -static void uv_pipe_read_eof(uv_loop_t* loop, uv_pipe_t* handle, - uv_buf_t buf) { - /* If there is an eof timer running, we don't need it any more, so discard - * it. */ - eof_timer_destroy(handle); - - handle->flags &= ~UV_HANDLE_READABLE; - uv_read_stop((uv_stream_t*) handle); - - handle->read_cb((uv_stream_t*) handle, UV_EOF, &buf); -} - - -static void uv_pipe_read_error(uv_loop_t* loop, uv_pipe_t* handle, int error, - uv_buf_t buf) { - /* If there is an eof timer running, we don't need it any more, so discard - * it. */ - eof_timer_destroy(handle); - - uv_read_stop((uv_stream_t*) handle); - - handle->read_cb((uv_stream_t*)handle, uv_translate_sys_error(error), &buf); -} - - -static void uv_pipe_read_error_or_eof(uv_loop_t* loop, uv_pipe_t* handle, - int error, uv_buf_t buf) { - if (error == ERROR_BROKEN_PIPE) { - uv_pipe_read_eof(loop, handle, buf); - } else { - uv_pipe_read_error(loop, handle, error, buf); - } -} - - -static void uv__pipe_queue_ipc_xfer_info( - uv_pipe_t* handle, - uv__ipc_socket_xfer_type_t xfer_type, - uv__ipc_socket_xfer_info_t* xfer_info) { - uv__ipc_xfer_queue_item_t* item; - - item = (uv__ipc_xfer_queue_item_t*) uv__malloc(sizeof(*item)); - if (item == NULL) - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - - item->xfer_type = xfer_type; - item->xfer_info = *xfer_info; - - QUEUE_INSERT_TAIL(&handle->pipe.conn.ipc_xfer_queue, &item->member); - handle->pipe.conn.ipc_xfer_queue_length++; -} - - -/* Read an exact number of bytes from a pipe. If an error or end-of-file is - * encountered before the requested number of bytes are read, an error is - * returned. */ -static int uv__pipe_read_exactly(HANDLE h, void* buffer, DWORD count) { - DWORD bytes_read, bytes_read_now; - - bytes_read = 0; - while (bytes_read < count) { - if (!ReadFile(h, - (char*) buffer + bytes_read, - count - bytes_read, - &bytes_read_now, - NULL)) { - return GetLastError(); - } - - bytes_read += bytes_read_now; - } - - assert(bytes_read == count); - return 0; -} - - -static DWORD uv__pipe_read_data(uv_loop_t* loop, - uv_pipe_t* handle, - DWORD suggested_bytes, - DWORD max_bytes) { - DWORD bytes_read; - uv_buf_t buf; - - /* Ask the user for a buffer to read data into. */ - buf = uv_buf_init(NULL, 0); - handle->alloc_cb((uv_handle_t*) handle, suggested_bytes, &buf); - if (buf.base == NULL || buf.len == 0) { - handle->read_cb((uv_stream_t*) handle, UV_ENOBUFS, &buf); - return 0; /* Break out of read loop. */ - } - - /* Ensure we read at most the smaller of: - * (a) the length of the user-allocated buffer. - * (b) the maximum data length as specified by the `max_bytes` argument. - */ - if (max_bytes > buf.len) - max_bytes = buf.len; - - /* Read into the user buffer. */ - if (!ReadFile(handle->handle, buf.base, max_bytes, &bytes_read, NULL)) { - uv_pipe_read_error_or_eof(loop, handle, GetLastError(), buf); - return 0; /* Break out of read loop. */ - } - - /* Call the read callback. */ - handle->read_cb((uv_stream_t*) handle, bytes_read, &buf); - - return bytes_read; -} - - -static DWORD uv__pipe_read_ipc(uv_loop_t* loop, uv_pipe_t* handle) { - uint32_t* data_remaining = &handle->pipe.conn.ipc_data_frame.payload_remaining; - int err; - - if (*data_remaining > 0) { - /* Read frame data payload. */ - DWORD bytes_read = - uv__pipe_read_data(loop, handle, *data_remaining, *data_remaining); - *data_remaining -= bytes_read; - return bytes_read; - - } else { - /* Start of a new IPC frame. */ - uv__ipc_frame_header_t frame_header; - uint32_t xfer_flags; - uv__ipc_socket_xfer_type_t xfer_type; - uv__ipc_socket_xfer_info_t xfer_info; - - /* Read the IPC frame header. */ - err = uv__pipe_read_exactly( - handle->handle, &frame_header, sizeof frame_header); - if (err) - goto error; - - /* Validate that flags are valid. */ - if ((frame_header.flags & ~UV__IPC_FRAME_VALID_FLAGS) != 0) - goto invalid; - /* Validate that reserved2 is zero. */ - if (frame_header.reserved2 != 0) - goto invalid; - - /* Parse xfer flags. */ - xfer_flags = frame_header.flags & UV__IPC_FRAME_XFER_FLAGS; - if (xfer_flags & UV__IPC_FRAME_HAS_SOCKET_XFER) { - /* Socket coming -- determine the type. */ - xfer_type = xfer_flags & UV__IPC_FRAME_XFER_IS_TCP_CONNECTION - ? UV__IPC_SOCKET_XFER_TCP_CONNECTION - : UV__IPC_SOCKET_XFER_TCP_SERVER; - } else if (xfer_flags == 0) { - /* No socket. */ - xfer_type = UV__IPC_SOCKET_XFER_NONE; - } else { - /* Invalid flags. */ - goto invalid; - } - - /* Parse data frame information. */ - if (frame_header.flags & UV__IPC_FRAME_HAS_DATA) { - *data_remaining = frame_header.data_length; - } else if (frame_header.data_length != 0) { - /* Data length greater than zero but data flag not set -- invalid. */ - goto invalid; - } - - /* If no socket xfer info follows, return here. Data will be read in a - * subsequent invocation of uv__pipe_read_ipc(). */ - if (xfer_type == UV__IPC_SOCKET_XFER_NONE) - return sizeof frame_header; /* Number of bytes read. */ - - /* Read transferred socket information. */ - err = uv__pipe_read_exactly(handle->handle, &xfer_info, sizeof xfer_info); - if (err) - goto error; - - /* Store the pending socket info. */ - uv__pipe_queue_ipc_xfer_info(handle, xfer_type, &xfer_info); - - /* Return number of bytes read. */ - return sizeof frame_header + sizeof xfer_info; - } - -invalid: - /* Invalid frame. */ - err = WSAECONNABORTED; /* Maps to UV_ECONNABORTED. */ - -error: - uv_pipe_read_error_or_eof(loop, handle, err, uv_null_buf_); - return 0; /* Break out of read loop. */ -} - - -void uv_process_pipe_read_req(uv_loop_t* loop, - uv_pipe_t* handle, - uv_req_t* req) { - assert(handle->type == UV_NAMED_PIPE); - - handle->flags &= ~(UV_HANDLE_READ_PENDING | UV_HANDLE_CANCELLATION_PENDING); - DECREASE_PENDING_REQ_COUNT(handle); - eof_timer_stop(handle); - - /* At this point, we're done with bookkeeping. If the user has stopped - * reading the pipe in the meantime, there is nothing left to do, since there - * is no callback that we can call. */ - if (!(handle->flags & UV_HANDLE_READING)) - return; - - if (!REQ_SUCCESS(req)) { - /* An error occurred doing the zero-read. */ - DWORD err = GET_REQ_ERROR(req); - - /* If the read was cancelled by uv__pipe_interrupt_read(), the request may - * indicate an ERROR_OPERATION_ABORTED error. This error isn't relevant to - * the user; we'll start a new zero-read at the end of this function. */ - if (err != ERROR_OPERATION_ABORTED) - uv_pipe_read_error_or_eof(loop, handle, err, uv_null_buf_); - - } else { - /* The zero-read completed without error, indicating there is data - * available in the kernel buffer. */ - DWORD avail; - - /* Get the number of bytes available. */ - avail = 0; - if (!PeekNamedPipe(handle->handle, NULL, 0, NULL, &avail, NULL)) - uv_pipe_read_error_or_eof(loop, handle, GetLastError(), uv_null_buf_); - - /* Read until we've either read all the bytes available, or the 'reading' - * flag is cleared. */ - while (avail > 0 && handle->flags & UV_HANDLE_READING) { - /* Depending on the type of pipe, read either IPC frames or raw data. */ - DWORD bytes_read = - handle->ipc ? uv__pipe_read_ipc(loop, handle) - : uv__pipe_read_data(loop, handle, avail, (DWORD) -1); - - /* If no bytes were read, treat this as an indication that an error - * occurred, and break out of the read loop. */ - if (bytes_read == 0) - break; - - /* It is possible that more bytes were read than we thought were - * available. To prevent `avail` from underflowing, break out of the loop - * if this is the case. */ - if (bytes_read > avail) - break; - - /* Recompute the number of bytes available. */ - avail -= bytes_read; - } - } - - /* Start another zero-read request if necessary. */ - if ((handle->flags & UV_HANDLE_READING) && - !(handle->flags & UV_HANDLE_READ_PENDING)) { - uv_pipe_queue_read(loop, handle); - } -} - - -void uv_process_pipe_write_req(uv_loop_t* loop, uv_pipe_t* handle, - uv_write_t* req) { - int err; - - assert(handle->type == UV_NAMED_PIPE); - - assert(handle->write_queue_size >= req->u.io.queued_bytes); - handle->write_queue_size -= req->u.io.queued_bytes; - - UNREGISTER_HANDLE_REQ(loop, handle, req); - - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - if (req->wait_handle != INVALID_HANDLE_VALUE) { - UnregisterWait(req->wait_handle); - req->wait_handle = INVALID_HANDLE_VALUE; - } - if (req->event_handle) { - CloseHandle(req->event_handle); - req->event_handle = NULL; - } - } - - err = GET_REQ_ERROR(req); - - /* If this was a coalesced write, extract pointer to the user_provided - * uv_write_t structure so we can pass the expected pointer to the callback, - * then free the heap-allocated write req. */ - if (req->coalesced) { - uv__coalesced_write_t* coalesced_write = - container_of(req, uv__coalesced_write_t, req); - req = coalesced_write->user_req; - uv__free(coalesced_write); - } - if (req->cb) { - req->cb(req, uv_translate_sys_error(err)); - } - - handle->stream.conn.write_reqs_pending--; - - if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE && - handle->pipe.conn.non_overlapped_writes_tail) { - assert(handle->stream.conn.write_reqs_pending > 0); - uv_queue_non_overlapped_write(handle); - } - - if (handle->stream.conn.shutdown_req != NULL && - handle->stream.conn.write_reqs_pending == 0) { - uv_want_endgame(loop, (uv_handle_t*)handle); - } - - DECREASE_PENDING_REQ_COUNT(handle); -} - - -void uv_process_pipe_accept_req(uv_loop_t* loop, uv_pipe_t* handle, - uv_req_t* raw_req) { - uv_pipe_accept_t* req = (uv_pipe_accept_t*) raw_req; - - assert(handle->type == UV_NAMED_PIPE); - - if (handle->flags & UV_HANDLE_CLOSING) { - /* The req->pipeHandle should be freed already in uv_pipe_cleanup(). */ - assert(req->pipeHandle == INVALID_HANDLE_VALUE); - DECREASE_PENDING_REQ_COUNT(handle); - return; - } - - if (REQ_SUCCESS(req)) { - assert(req->pipeHandle != INVALID_HANDLE_VALUE); - req->next_pending = handle->pipe.serv.pending_accepts; - handle->pipe.serv.pending_accepts = req; - - if (handle->stream.serv.connection_cb) { - handle->stream.serv.connection_cb((uv_stream_t*)handle, 0); - } - } else { - if (req->pipeHandle != INVALID_HANDLE_VALUE) { - CloseHandle(req->pipeHandle); - req->pipeHandle = INVALID_HANDLE_VALUE; - } - if (!(handle->flags & UV_HANDLE_CLOSING)) { - uv_pipe_queue_accept(loop, handle, req, FALSE); - } - } - - DECREASE_PENDING_REQ_COUNT(handle); -} - - -void uv_process_pipe_connect_req(uv_loop_t* loop, uv_pipe_t* handle, - uv_connect_t* req) { - int err; - - assert(handle->type == UV_NAMED_PIPE); - - UNREGISTER_HANDLE_REQ(loop, handle, req); - - if (req->cb) { - err = 0; - if (REQ_SUCCESS(req)) { - uv_pipe_connection_init(handle); - } else { - err = GET_REQ_ERROR(req); - } - req->cb(req, uv_translate_sys_error(err)); - } - - DECREASE_PENDING_REQ_COUNT(handle); -} - - -void uv_process_pipe_shutdown_req(uv_loop_t* loop, uv_pipe_t* handle, - uv_shutdown_t* req) { - assert(handle->type == UV_NAMED_PIPE); - - UNREGISTER_HANDLE_REQ(loop, handle, req); - - if (handle->flags & UV_HANDLE_READABLE) { - /* Initialize and optionally start the eof timer. Only do this if the pipe - * is readable and we haven't seen EOF come in ourselves. */ - eof_timer_init(handle); - - /* If reading start the timer right now. Otherwise uv_pipe_queue_read will - * start it. */ - if (handle->flags & UV_HANDLE_READ_PENDING) { - eof_timer_start(handle); - } - - } else { - /* This pipe is not readable. We can just close it to let the other end - * know that we're done writing. */ - close_pipe(handle); - } - - if (req->cb) { - req->cb(req, 0); - } - - DECREASE_PENDING_REQ_COUNT(handle); -} - - -static void eof_timer_init(uv_pipe_t* pipe) { - int r; - - assert(pipe->pipe.conn.eof_timer == NULL); - assert(pipe->flags & UV_HANDLE_CONNECTION); - - pipe->pipe.conn.eof_timer = (uv_timer_t*) uv__malloc(sizeof *pipe->pipe.conn.eof_timer); - - r = uv_timer_init(pipe->loop, pipe->pipe.conn.eof_timer); - assert(r == 0); /* timers can't fail */ - pipe->pipe.conn.eof_timer->data = pipe; - uv_unref((uv_handle_t*) pipe->pipe.conn.eof_timer); -} - - -static void eof_timer_start(uv_pipe_t* pipe) { - assert(pipe->flags & UV_HANDLE_CONNECTION); - - if (pipe->pipe.conn.eof_timer != NULL) { - uv_timer_start(pipe->pipe.conn.eof_timer, eof_timer_cb, eof_timeout, 0); - } -} - - -static void eof_timer_stop(uv_pipe_t* pipe) { - assert(pipe->flags & UV_HANDLE_CONNECTION); - - if (pipe->pipe.conn.eof_timer != NULL) { - uv_timer_stop(pipe->pipe.conn.eof_timer); - } -} - - -static void eof_timer_cb(uv_timer_t* timer) { - uv_pipe_t* pipe = (uv_pipe_t*) timer->data; - uv_loop_t* loop = timer->loop; - - assert(pipe->type == UV_NAMED_PIPE); - - /* This should always be true, since we start the timer only in - * uv_pipe_queue_read after successfully calling ReadFile, or in - * uv_process_pipe_shutdown_req if a read is pending, and we always - * immediately stop the timer in uv_process_pipe_read_req. */ - assert(pipe->flags & UV_HANDLE_READ_PENDING); - - /* If there are many packets coming off the iocp then the timer callback may - * be called before the read request is coming off the queue. Therefore we - * check here if the read request has completed but will be processed later. - */ - if ((pipe->flags & UV_HANDLE_READ_PENDING) && - HasOverlappedIoCompleted(&pipe->read_req.u.io.overlapped)) { - return; - } - - /* Force both ends off the pipe. */ - close_pipe(pipe); - - /* Stop reading, so the pending read that is going to fail will not be - * reported to the user. */ - uv_read_stop((uv_stream_t*) pipe); - - /* Report the eof and update flags. This will get reported even if the user - * stopped reading in the meantime. TODO: is that okay? */ - uv_pipe_read_eof(loop, pipe, uv_null_buf_); -} - - -static void eof_timer_destroy(uv_pipe_t* pipe) { - assert(pipe->flags & UV_HANDLE_CONNECTION); - - if (pipe->pipe.conn.eof_timer) { - uv_close((uv_handle_t*) pipe->pipe.conn.eof_timer, eof_timer_close_cb); - pipe->pipe.conn.eof_timer = NULL; - } -} - - -static void eof_timer_close_cb(uv_handle_t* handle) { - assert(handle->type == UV_TIMER); - uv__free(handle); -} - - -int uv_pipe_open(uv_pipe_t* pipe, uv_file file) { - HANDLE os_handle = uv__get_osfhandle(file); - NTSTATUS nt_status; - IO_STATUS_BLOCK io_status; - FILE_ACCESS_INFORMATION access; - DWORD duplex_flags = 0; - - if (os_handle == INVALID_HANDLE_VALUE) - return UV_EBADF; - - uv__once_init(); - /* In order to avoid closing a stdio file descriptor 0-2, duplicate the - * underlying OS handle and forget about the original fd. - * We could also opt to use the original OS handle and just never close it, - * but then there would be no reliable way to cancel pending read operations - * upon close. - */ - if (file <= 2) { - if (!DuplicateHandle(INVALID_HANDLE_VALUE, - os_handle, - INVALID_HANDLE_VALUE, - &os_handle, - 0, - FALSE, - DUPLICATE_SAME_ACCESS)) - return uv_translate_sys_error(GetLastError()); - file = -1; - } - - /* Determine what kind of permissions we have on this handle. - * Cygwin opens the pipe in message mode, but we can support it, - * just query the access flags and set the stream flags accordingly. - */ - nt_status = pNtQueryInformationFile(os_handle, - &io_status, - &access, - sizeof(access), - FileAccessInformation); - if (nt_status != STATUS_SUCCESS) - return UV_EINVAL; - - if (pipe->ipc) { - if (!(access.AccessFlags & FILE_WRITE_DATA) || - !(access.AccessFlags & FILE_READ_DATA)) { - return UV_EINVAL; - } - } - - if (access.AccessFlags & FILE_WRITE_DATA) - duplex_flags |= UV_HANDLE_WRITABLE; - if (access.AccessFlags & FILE_READ_DATA) - duplex_flags |= UV_HANDLE_READABLE; - - if (os_handle == INVALID_HANDLE_VALUE || - uv_set_pipe_handle(pipe->loop, - pipe, - os_handle, - file, - duplex_flags) == -1) { - return UV_EINVAL; - } - - uv_pipe_connection_init(pipe); - - if (pipe->ipc) { - assert(!(pipe->flags & UV_HANDLE_NON_OVERLAPPED_PIPE)); - pipe->pipe.conn.ipc_remote_pid = uv_os_getppid(); - assert(pipe->pipe.conn.ipc_remote_pid != (DWORD)(uv_pid_t) -1); - } - return 0; -} - - -static int uv__pipe_getname(const uv_pipe_t* handle, char* buffer, size_t* size) { - NTSTATUS nt_status; - IO_STATUS_BLOCK io_status; - 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; - - uv__once_init(); - name_info = NULL; - - if (handle->handle == INVALID_HANDLE_VALUE) { - *size = 0; - return UV_EINVAL; - } - - /* NtQueryInformationFile will block if another thread is performing a - * blocking operation on the queried handle. If the pipe handle is - * synchronous, there may be a worker thread currently calling ReadFile() on - * the pipe handle, which could cause a deadlock. To avoid this, interrupt - * the read. */ - if (handle->flags & UV_HANDLE_CONNECTION && - handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) { - uv__pipe_interrupt_read((uv_pipe_t*) handle); /* cast away const warning */ - } - - nt_status = pNtQueryInformationFile(handle->handle, - &io_status, - &tmp_name_info, - sizeof tmp_name_info, - FileNameInformation); - if (nt_status == STATUS_BUFFER_OVERFLOW) { - name_size = sizeof(*name_info) + tmp_name_info.FileNameLength; - name_info = uv__malloc(name_size); - if (!name_info) { - *size = 0; - err = UV_ENOMEM; - goto cleanup; - } - - nt_status = pNtQueryInformationFile(handle->handle, - &io_status, - name_info, - name_size, - FileNameInformation); - } - - if (nt_status != STATUS_SUCCESS) { - *size = 0; - err = uv_translate_sys_error(pRtlNtStatusToDosError(nt_status)); - goto error; - } - - if (!name_info) { - /* the struct on stack was used */ - name_buf = tmp_name_info.FileName; - name_len = tmp_name_info.FileNameLength; - } else { - name_buf = name_info->FileName; - name_len = name_info->FileNameLength; - } - - if (name_len == 0) { - *size = 0; - err = 0; - goto error; - } - - 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) { - *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; - } - - addrlen += pipe_prefix_len; - *size = addrlen; - buffer[addrlen] = '\0'; - - err = 0; - -error: - uv__free(name_info); - -cleanup: - return err; -} - - -int uv_pipe_pending_count(uv_pipe_t* handle) { - if (!handle->ipc) - return 0; - return handle->pipe.conn.ipc_xfer_queue_length; -} - - -int uv_pipe_getsockname(const uv_pipe_t* handle, char* buffer, size_t* size) { - if (handle->flags & UV_HANDLE_BOUND) - return uv__pipe_getname(handle, buffer, size); - - if (handle->flags & UV_HANDLE_CONNECTION || - handle->handle != INVALID_HANDLE_VALUE) { - *size = 0; - return 0; - } - - return UV_EBADF; -} - - -int uv_pipe_getpeername(const uv_pipe_t* handle, char* buffer, size_t* size) { - /* emulate unix behaviour */ - if (handle->flags & UV_HANDLE_BOUND) - return UV_ENOTCONN; - - if (handle->handle != INVALID_HANDLE_VALUE) - return uv__pipe_getname(handle, buffer, size); - - return UV_EBADF; -} - - -uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle) { - if (!handle->ipc) - return UV_UNKNOWN_HANDLE; - if (handle->pipe.conn.ipc_xfer_queue_length == 0) - return UV_UNKNOWN_HANDLE; - else - return UV_TCP; -} - -int uv_pipe_chmod(uv_pipe_t* handle, int mode) { - SID_IDENTIFIER_AUTHORITY sid_world = { SECURITY_WORLD_SID_AUTHORITY }; - PACL old_dacl, new_dacl; - PSECURITY_DESCRIPTOR sd; - EXPLICIT_ACCESS ea; - PSID everyone; - int error; - - if (handle == NULL || handle->handle == INVALID_HANDLE_VALUE) - return UV_EBADF; - - if (mode != UV_READABLE && - mode != UV_WRITABLE && - mode != (UV_WRITABLE | UV_READABLE)) - return UV_EINVAL; - - if (!AllocateAndInitializeSid(&sid_world, - 1, - SECURITY_WORLD_RID, - 0, 0, 0, 0, 0, 0, 0, - &everyone)) { - error = GetLastError(); - goto done; - } - - if (GetSecurityInfo(handle->handle, - SE_KERNEL_OBJECT, - DACL_SECURITY_INFORMATION, - NULL, - NULL, - &old_dacl, - NULL, - &sd)) { - error = GetLastError(); - goto clean_sid; - } - - memset(&ea, 0, sizeof(EXPLICIT_ACCESS)); - if (mode & UV_READABLE) - ea.grfAccessPermissions |= GENERIC_READ | FILE_WRITE_ATTRIBUTES; - if (mode & UV_WRITABLE) - ea.grfAccessPermissions |= GENERIC_WRITE | FILE_READ_ATTRIBUTES; - ea.grfAccessPermissions |= SYNCHRONIZE; - ea.grfAccessMode = SET_ACCESS; - ea.grfInheritance = NO_INHERITANCE; - ea.Trustee.TrusteeForm = TRUSTEE_IS_SID; - ea.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP; - ea.Trustee.ptstrName = (LPTSTR)everyone; - - if (SetEntriesInAcl(1, &ea, old_dacl, &new_dacl)) { - error = GetLastError(); - goto clean_sd; - } - - if (SetSecurityInfo(handle->handle, - SE_KERNEL_OBJECT, - DACL_SECURITY_INFORMATION, - NULL, - NULL, - new_dacl, - NULL)) { - error = GetLastError(); - goto clean_dacl; - } - - error = 0; - -clean_dacl: - LocalFree((HLOCAL) new_dacl); -clean_sd: - LocalFree((HLOCAL) sd); -clean_sid: - FreeSid(everyone); -done: - return uv_translate_sys_error(error); -} diff --git a/libuv/src/win/poll.c b/libuv/src/win/poll.c deleted file mode 100644 index 9d37759..0000000 --- a/libuv/src/win/poll.c +++ /dev/null @@ -1,585 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include - -#include "uv.h" -#include "internal.h" -#include "handle-inl.h" -#include "req-inl.h" - - -static const GUID uv_msafd_provider_ids[UV_MSAFD_PROVIDER_COUNT] = { - {0xe70f1aa0, 0xab8b, 0x11cf, - {0x8c, 0xa3, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}}, - {0xf9eab0c0, 0x26d4, 0x11d0, - {0xbb, 0xbf, 0x00, 0xaa, 0x00, 0x6c, 0x34, 0xe4}}, - {0x9fc48064, 0x7298, 0x43e4, - {0xb7, 0xbd, 0x18, 0x1f, 0x20, 0x89, 0x79, 0x2a}} -}; - -typedef struct uv_single_fd_set_s { - unsigned int fd_count; - SOCKET fd_array[1]; -} uv_single_fd_set_t; - - -static OVERLAPPED overlapped_dummy_; -static uv_once_t overlapped_dummy_init_guard_ = UV_ONCE_INIT; - -static AFD_POLL_INFO afd_poll_info_dummy_; - - -static void uv__init_overlapped_dummy(void) { - HANDLE event; - - event = CreateEvent(NULL, TRUE, TRUE, NULL); - if (event == NULL) - uv_fatal_error(GetLastError(), "CreateEvent"); - - memset(&overlapped_dummy_, 0, sizeof overlapped_dummy_); - overlapped_dummy_.hEvent = (HANDLE) ((uintptr_t) event | 1); -} - - -static OVERLAPPED* uv__get_overlapped_dummy(void) { - uv_once(&overlapped_dummy_init_guard_, uv__init_overlapped_dummy); - return &overlapped_dummy_; -} - - -static AFD_POLL_INFO* uv__get_afd_poll_info_dummy(void) { - return &afd_poll_info_dummy_; -} - - -static void uv__fast_poll_submit_poll_req(uv_loop_t* loop, uv_poll_t* handle) { - uv_req_t* req; - AFD_POLL_INFO* afd_poll_info; - int result; - - /* Find a yet unsubmitted req to submit. */ - if (handle->submitted_events_1 == 0) { - req = &handle->poll_req_1; - afd_poll_info = &handle->afd_poll_info_1; - handle->submitted_events_1 = handle->events; - handle->mask_events_1 = 0; - handle->mask_events_2 = handle->events; - } else if (handle->submitted_events_2 == 0) { - req = &handle->poll_req_2; - afd_poll_info = &handle->afd_poll_info_2; - handle->submitted_events_2 = handle->events; - handle->mask_events_1 = handle->events; - handle->mask_events_2 = 0; - } else { - /* Just wait until there's an unsubmitted req. This will happen almost - * immediately as one of the 2 outstanding requests is about to return. - * When this happens, uv__fast_poll_process_poll_req will be called, and - * the pending events, if needed, will be processed in a subsequent - * request. */ - return; - } - - /* Setting Exclusive to TRUE makes the other poll request return if there is - * any. */ - afd_poll_info->Exclusive = TRUE; - afd_poll_info->NumberOfHandles = 1; - afd_poll_info->Timeout.QuadPart = INT64_MAX; - afd_poll_info->Handles[0].Handle = (HANDLE) handle->socket; - afd_poll_info->Handles[0].Status = 0; - afd_poll_info->Handles[0].Events = 0; - - if (handle->events & UV_READABLE) { - afd_poll_info->Handles[0].Events |= AFD_POLL_RECEIVE | - AFD_POLL_DISCONNECT | AFD_POLL_ACCEPT | AFD_POLL_ABORT; - } else { - if (handle->events & UV_DISCONNECT) { - afd_poll_info->Handles[0].Events |= AFD_POLL_DISCONNECT; - } - } - if (handle->events & UV_WRITABLE) { - afd_poll_info->Handles[0].Events |= AFD_POLL_SEND | AFD_POLL_CONNECT_FAIL; - } - - memset(&req->u.io.overlapped, 0, sizeof req->u.io.overlapped); - - result = uv_msafd_poll((SOCKET) handle->peer_socket, - afd_poll_info, - afd_poll_info, - &req->u.io.overlapped); - if (result != 0 && WSAGetLastError() != WSA_IO_PENDING) { - /* Queue this req, reporting an error. */ - SET_REQ_ERROR(req, WSAGetLastError()); - uv_insert_pending_req(loop, req); - } -} - - -static void uv__fast_poll_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, - uv_req_t* req) { - unsigned char mask_events; - AFD_POLL_INFO* afd_poll_info; - - if (req == &handle->poll_req_1) { - afd_poll_info = &handle->afd_poll_info_1; - handle->submitted_events_1 = 0; - mask_events = handle->mask_events_1; - } else if (req == &handle->poll_req_2) { - afd_poll_info = &handle->afd_poll_info_2; - handle->submitted_events_2 = 0; - mask_events = handle->mask_events_2; - } else { - assert(0); - return; - } - - /* Report an error unless the select was just interrupted. */ - if (!REQ_SUCCESS(req)) { - DWORD error = GET_REQ_SOCK_ERROR(req); - if (error != WSAEINTR && handle->events != 0) { - handle->events = 0; /* Stop the watcher */ - handle->poll_cb(handle, uv_translate_sys_error(error), 0); - } - - } else if (afd_poll_info->NumberOfHandles >= 1) { - unsigned char events = 0; - - if ((afd_poll_info->Handles[0].Events & (AFD_POLL_RECEIVE | - AFD_POLL_DISCONNECT | AFD_POLL_ACCEPT | AFD_POLL_ABORT)) != 0) { - events |= UV_READABLE; - if ((afd_poll_info->Handles[0].Events & AFD_POLL_DISCONNECT) != 0) { - events |= UV_DISCONNECT; - } - } - if ((afd_poll_info->Handles[0].Events & (AFD_POLL_SEND | - AFD_POLL_CONNECT_FAIL)) != 0) { - events |= UV_WRITABLE; - } - - events &= handle->events & ~mask_events; - - if (afd_poll_info->Handles[0].Events & AFD_POLL_LOCAL_CLOSE) { - /* Stop polling. */ - handle->events = 0; - if (uv__is_active(handle)) - uv__handle_stop(handle); - } - - if (events != 0) { - handle->poll_cb(handle, 0, events); - } - } - - if ((handle->events & ~(handle->submitted_events_1 | - handle->submitted_events_2)) != 0) { - uv__fast_poll_submit_poll_req(loop, handle); - } else if ((handle->flags & UV_HANDLE_CLOSING) && - handle->submitted_events_1 == 0 && - handle->submitted_events_2 == 0) { - uv_want_endgame(loop, (uv_handle_t*) handle); - } -} - - -static SOCKET uv__fast_poll_create_peer_socket(HANDLE iocp, - WSAPROTOCOL_INFOW* protocol_info) { - SOCKET sock = 0; - - sock = WSASocketW(protocol_info->iAddressFamily, - protocol_info->iSocketType, - protocol_info->iProtocol, - protocol_info, - 0, - WSA_FLAG_OVERLAPPED); - if (sock == INVALID_SOCKET) { - return INVALID_SOCKET; - } - - if (!SetHandleInformation((HANDLE) sock, HANDLE_FLAG_INHERIT, 0)) { - goto error; - }; - - if (CreateIoCompletionPort((HANDLE) sock, - iocp, - (ULONG_PTR) sock, - 0) == NULL) { - goto error; - } - - return sock; - - error: - closesocket(sock); - return INVALID_SOCKET; -} - - -static SOCKET uv__fast_poll_get_peer_socket(uv_loop_t* loop, - WSAPROTOCOL_INFOW* protocol_info) { - int index, i; - SOCKET peer_socket; - - index = -1; - for (i = 0; (size_t) i < ARRAY_SIZE(uv_msafd_provider_ids); i++) { - if (memcmp((void*) &protocol_info->ProviderId, - (void*) &uv_msafd_provider_ids[i], - sizeof protocol_info->ProviderId) == 0) { - index = i; - } - } - - /* Check if the protocol uses an msafd socket. */ - if (index < 0) { - return INVALID_SOCKET; - } - - /* If we didn't (try) to create a peer socket yet, try to make one. Don't try - * again if the peer socket creation failed earlier for the same protocol. */ - peer_socket = loop->poll_peer_sockets[index]; - if (peer_socket == 0) { - peer_socket = uv__fast_poll_create_peer_socket(loop->iocp, protocol_info); - loop->poll_peer_sockets[index] = peer_socket; - } - - return peer_socket; -} - - -static DWORD WINAPI uv__slow_poll_thread_proc(void* arg) { - uv_req_t* req = (uv_req_t*) arg; - uv_poll_t* handle = (uv_poll_t*) req->data; - unsigned char reported_events; - int r; - uv_single_fd_set_t rfds, wfds, efds; - struct timeval timeout; - - assert(handle->type == UV_POLL); - assert(req->type == UV_POLL_REQ); - - if (handle->events & UV_READABLE) { - rfds.fd_count = 1; - rfds.fd_array[0] = handle->socket; - } else { - rfds.fd_count = 0; - } - - if (handle->events & UV_WRITABLE) { - wfds.fd_count = 1; - wfds.fd_array[0] = handle->socket; - efds.fd_count = 1; - efds.fd_array[0] = handle->socket; - } else { - wfds.fd_count = 0; - efds.fd_count = 0; - } - - /* Make the select() time out after 3 minutes. If select() hangs because the - * user closed the socket, we will at least not hang indefinitely. */ - timeout.tv_sec = 3 * 60; - timeout.tv_usec = 0; - - r = select(1, (fd_set*) &rfds, (fd_set*) &wfds, (fd_set*) &efds, &timeout); - if (r == SOCKET_ERROR) { - /* Queue this req, reporting an error. */ - SET_REQ_ERROR(&handle->poll_req_1, WSAGetLastError()); - POST_COMPLETION_FOR_REQ(handle->loop, req); - return 0; - } - - reported_events = 0; - - if (r > 0) { - if (rfds.fd_count > 0) { - assert(rfds.fd_count == 1); - assert(rfds.fd_array[0] == handle->socket); - reported_events |= UV_READABLE; - } - - if (wfds.fd_count > 0) { - assert(wfds.fd_count == 1); - assert(wfds.fd_array[0] == handle->socket); - reported_events |= UV_WRITABLE; - } else if (efds.fd_count > 0) { - assert(efds.fd_count == 1); - assert(efds.fd_array[0] == handle->socket); - reported_events |= UV_WRITABLE; - } - } - - SET_REQ_SUCCESS(req); - req->u.io.overlapped.InternalHigh = (DWORD) reported_events; - POST_COMPLETION_FOR_REQ(handle->loop, req); - - return 0; -} - - -static void uv__slow_poll_submit_poll_req(uv_loop_t* loop, uv_poll_t* handle) { - uv_req_t* req; - - /* Find a yet unsubmitted req to submit. */ - if (handle->submitted_events_1 == 0) { - req = &handle->poll_req_1; - handle->submitted_events_1 = handle->events; - handle->mask_events_1 = 0; - handle->mask_events_2 = handle->events; - } else if (handle->submitted_events_2 == 0) { - req = &handle->poll_req_2; - handle->submitted_events_2 = handle->events; - handle->mask_events_1 = handle->events; - handle->mask_events_2 = 0; - } else { - assert(0); - return; - } - - if (!QueueUserWorkItem(uv__slow_poll_thread_proc, - (void*) req, - WT_EXECUTELONGFUNCTION)) { - /* Make this req pending, reporting an error. */ - SET_REQ_ERROR(req, GetLastError()); - uv_insert_pending_req(loop, req); - } -} - - - -static void uv__slow_poll_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, - uv_req_t* req) { - unsigned char mask_events; - int err; - - if (req == &handle->poll_req_1) { - handle->submitted_events_1 = 0; - mask_events = handle->mask_events_1; - } else if (req == &handle->poll_req_2) { - handle->submitted_events_2 = 0; - mask_events = handle->mask_events_2; - } else { - assert(0); - return; - } - - if (!REQ_SUCCESS(req)) { - /* Error. */ - if (handle->events != 0) { - err = GET_REQ_ERROR(req); - handle->events = 0; /* Stop the watcher */ - handle->poll_cb(handle, uv_translate_sys_error(err), 0); - } - } else { - /* Got some events. */ - int events = req->u.io.overlapped.InternalHigh & handle->events & ~mask_events; - if (events != 0) { - handle->poll_cb(handle, 0, events); - } - } - - if ((handle->events & ~(handle->submitted_events_1 | - handle->submitted_events_2)) != 0) { - uv__slow_poll_submit_poll_req(loop, handle); - } else if ((handle->flags & UV_HANDLE_CLOSING) && - handle->submitted_events_1 == 0 && - handle->submitted_events_2 == 0) { - uv_want_endgame(loop, (uv_handle_t*) handle); - } -} - - -int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd) { - return uv_poll_init_socket(loop, handle, (SOCKET) uv__get_osfhandle(fd)); -} - - -int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, - uv_os_sock_t socket) { - WSAPROTOCOL_INFOW protocol_info; - int len; - SOCKET peer_socket, base_socket; - DWORD bytes; - DWORD yes = 1; - - /* Set the socket to nonblocking mode */ - if (ioctlsocket(socket, FIONBIO, &yes) == SOCKET_ERROR) - return uv_translate_sys_error(WSAGetLastError()); - -/* Try to obtain a base handle for the socket. This increases this chances that - * we find an AFD handle and are able to use the fast poll mechanism. This will - * always fail on windows XP/2k3, since they don't support the. SIO_BASE_HANDLE - * ioctl. */ -#ifndef NDEBUG - base_socket = INVALID_SOCKET; -#endif - - if (WSAIoctl(socket, - SIO_BASE_HANDLE, - NULL, - 0, - &base_socket, - sizeof base_socket, - &bytes, - NULL, - NULL) == 0) { - assert(base_socket != 0 && base_socket != INVALID_SOCKET); - socket = base_socket; - } - - uv__handle_init(loop, (uv_handle_t*) handle, UV_POLL); - handle->socket = socket; - handle->events = 0; - - /* Obtain protocol information about the socket. */ - len = sizeof protocol_info; - if (getsockopt(socket, - SOL_SOCKET, - SO_PROTOCOL_INFOW, - (char*) &protocol_info, - &len) != 0) { - return uv_translate_sys_error(WSAGetLastError()); - } - - /* Get the peer socket that is needed to enable fast poll. If the returned - * value is NULL, the protocol is not implemented by MSAFD and we'll have to - * use slow mode. */ - peer_socket = uv__fast_poll_get_peer_socket(loop, &protocol_info); - - if (peer_socket != INVALID_SOCKET) { - /* Initialize fast poll specific fields. */ - handle->peer_socket = peer_socket; - } else { - /* Initialize slow poll specific fields. */ - handle->flags |= UV_HANDLE_POLL_SLOW; - } - - /* Initialize 2 poll reqs. */ - handle->submitted_events_1 = 0; - UV_REQ_INIT(&handle->poll_req_1, UV_POLL_REQ); - handle->poll_req_1.data = handle; - - handle->submitted_events_2 = 0; - UV_REQ_INIT(&handle->poll_req_2, UV_POLL_REQ); - handle->poll_req_2.data = handle; - - return 0; -} - - -static int uv__poll_set(uv_poll_t* handle, int events, uv_poll_cb cb) { - int submitted_events; - - assert(handle->type == UV_POLL); - assert(!(handle->flags & UV_HANDLE_CLOSING)); - assert((events & ~(UV_READABLE | UV_WRITABLE | UV_DISCONNECT | - UV_PRIORITIZED)) == 0); - - handle->events = events; - handle->poll_cb = cb; - - if (handle->events == 0) { - uv__handle_stop(handle); - return 0; - } - - uv__handle_start(handle); - submitted_events = handle->submitted_events_1 | handle->submitted_events_2; - - if (handle->events & ~submitted_events) { - if (handle->flags & UV_HANDLE_POLL_SLOW) { - uv__slow_poll_submit_poll_req(handle->loop, handle); - } else { - uv__fast_poll_submit_poll_req(handle->loop, handle); - } - } - - return 0; -} - - -int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb) { - return uv__poll_set(handle, events, cb); -} - - -int uv_poll_stop(uv_poll_t* handle) { - return uv__poll_set(handle, 0, handle->poll_cb); -} - - -void uv_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, uv_req_t* req) { - if (!(handle->flags & UV_HANDLE_POLL_SLOW)) { - uv__fast_poll_process_poll_req(loop, handle, req); - } else { - uv__slow_poll_process_poll_req(loop, handle, req); - } -} - - -int uv_poll_close(uv_loop_t* loop, uv_poll_t* handle) { - AFD_POLL_INFO afd_poll_info; - DWORD error; - int result; - - handle->events = 0; - uv__handle_closing(handle); - - if (handle->submitted_events_1 == 0 && - handle->submitted_events_2 == 0) { - uv_want_endgame(loop, (uv_handle_t*) handle); - return 0; - } - - if (handle->flags & UV_HANDLE_POLL_SLOW) - return 0; - - /* Cancel outstanding poll requests by executing another, unique poll - * request that forces the outstanding ones to return. */ - afd_poll_info.Exclusive = TRUE; - afd_poll_info.NumberOfHandles = 1; - afd_poll_info.Timeout.QuadPart = INT64_MAX; - afd_poll_info.Handles[0].Handle = (HANDLE) handle->socket; - afd_poll_info.Handles[0].Status = 0; - afd_poll_info.Handles[0].Events = AFD_POLL_ALL; - - result = uv_msafd_poll(handle->socket, - &afd_poll_info, - uv__get_afd_poll_info_dummy(), - uv__get_overlapped_dummy()); - - if (result == SOCKET_ERROR) { - error = WSAGetLastError(); - if (error != WSA_IO_PENDING) - return uv_translate_sys_error(error); - } - - return 0; -} - - -void uv_poll_endgame(uv_loop_t* loop, uv_poll_t* handle) { - assert(handle->flags & UV_HANDLE_CLOSING); - assert(!(handle->flags & UV_HANDLE_CLOSED)); - - assert(handle->submitted_events_1 == 0); - assert(handle->submitted_events_2 == 0); - - uv__handle_close(handle); -} diff --git a/libuv/src/win/process-stdio.c b/libuv/src/win/process-stdio.c deleted file mode 100644 index 0db3572..0000000 --- a/libuv/src/win/process-stdio.c +++ /dev/null @@ -1,416 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include -#include - -#include "uv.h" -#include "internal.h" -#include "handle-inl.h" - - -/* - * The `child_stdio_buffer` buffer has the following layout: - * int number_of_fds - * unsigned char crt_flags[number_of_fds] - * HANDLE os_handle[number_of_fds] - */ -#define CHILD_STDIO_SIZE(count) \ - (sizeof(int) + \ - sizeof(unsigned char) * (count) + \ - sizeof(uintptr_t) * (count)) - -#define CHILD_STDIO_COUNT(buffer) \ - *((unsigned int*) (buffer)) - -#define CHILD_STDIO_CRT_FLAGS(buffer, fd) \ - *((unsigned char*) (buffer) + sizeof(int) + fd) - -#define CHILD_STDIO_HANDLE(buffer, fd) \ - *((HANDLE*) ((unsigned char*) (buffer) + \ - sizeof(int) + \ - sizeof(unsigned char) * \ - CHILD_STDIO_COUNT((buffer)) + \ - sizeof(HANDLE) * (fd))) - - -/* CRT file descriptor mode flags */ -#define FOPEN 0x01 -#define FEOFLAG 0x02 -#define FCRLF 0x04 -#define FPIPE 0x08 -#define FNOINHERIT 0x10 -#define FAPPEND 0x20 -#define FDEV 0x40 -#define FTEXT 0x80 - - -/* - * Clear the HANDLE_FLAG_INHERIT flag from all HANDLEs that were inherited - * the parent process. Don't check for errors - the stdio handles may not be - * valid, or may be closed already. There is no guarantee that this function - * does a perfect job. - */ -void uv_disable_stdio_inheritance(void) { - HANDLE handle; - STARTUPINFOW si; - - /* Make the windows stdio handles non-inheritable. */ - handle = GetStdHandle(STD_INPUT_HANDLE); - if (handle != NULL && handle != INVALID_HANDLE_VALUE) - SetHandleInformation(handle, HANDLE_FLAG_INHERIT, 0); - - handle = GetStdHandle(STD_OUTPUT_HANDLE); - if (handle != NULL && handle != INVALID_HANDLE_VALUE) - SetHandleInformation(handle, HANDLE_FLAG_INHERIT, 0); - - handle = GetStdHandle(STD_ERROR_HANDLE); - if (handle != NULL && handle != INVALID_HANDLE_VALUE) - SetHandleInformation(handle, HANDLE_FLAG_INHERIT, 0); - - /* Make inherited CRT FDs non-inheritable. */ - GetStartupInfoW(&si); - if (uv__stdio_verify(si.lpReserved2, si.cbReserved2)) - uv__stdio_noinherit(si.lpReserved2); -} - - -static int uv__duplicate_handle(uv_loop_t* loop, HANDLE handle, HANDLE* dup) { - HANDLE current_process; - - - /* _get_osfhandle will sometimes return -2 in case of an error. This seems to - * happen when fd <= 2 and the process' corresponding stdio handle is set to - * NULL. Unfortunately DuplicateHandle will happily duplicate (HANDLE) -2, so - * this situation goes unnoticed until someone tries to use the duplicate. - * Therefore we filter out known-invalid handles here. */ - if (handle == INVALID_HANDLE_VALUE || - handle == NULL || - handle == (HANDLE) -2) { - *dup = INVALID_HANDLE_VALUE; - return ERROR_INVALID_HANDLE; - } - - current_process = GetCurrentProcess(); - - if (!DuplicateHandle(current_process, - handle, - current_process, - dup, - 0, - TRUE, - DUPLICATE_SAME_ACCESS)) { - *dup = INVALID_HANDLE_VALUE; - return GetLastError(); - } - - return 0; -} - - -static int uv__duplicate_fd(uv_loop_t* loop, int fd, HANDLE* dup) { - HANDLE handle; - - if (fd == -1) { - *dup = INVALID_HANDLE_VALUE; - return ERROR_INVALID_HANDLE; - } - - handle = uv__get_osfhandle(fd); - return uv__duplicate_handle(loop, handle, dup); -} - - -int uv__create_nul_handle(HANDLE* handle_ptr, - DWORD access) { - HANDLE handle; - SECURITY_ATTRIBUTES sa; - - sa.nLength = sizeof sa; - sa.lpSecurityDescriptor = NULL; - sa.bInheritHandle = TRUE; - - handle = CreateFileW(L"NUL", - access, - FILE_SHARE_READ | FILE_SHARE_WRITE, - &sa, - OPEN_EXISTING, - 0, - NULL); - if (handle == INVALID_HANDLE_VALUE) { - return GetLastError(); - } - - *handle_ptr = handle; - return 0; -} - - -int uv__stdio_create(uv_loop_t* loop, - const uv_process_options_t* options, - BYTE** buffer_ptr) { - BYTE* buffer; - int count, i; - int err; - - count = options->stdio_count; - - if (count < 0 || count > 255) { - /* Only support FDs 0-255 */ - return ERROR_NOT_SUPPORTED; - } else if (count < 3) { - /* There should always be at least 3 stdio handles. */ - count = 3; - } - - /* Allocate the child stdio buffer */ - buffer = (BYTE*) uv__malloc(CHILD_STDIO_SIZE(count)); - if (buffer == NULL) { - return ERROR_OUTOFMEMORY; - } - - /* Prepopulate the buffer with INVALID_HANDLE_VALUE handles so we can clean - * up on failure. */ - CHILD_STDIO_COUNT(buffer) = count; - for (i = 0; i < count; i++) { - CHILD_STDIO_CRT_FLAGS(buffer, i) = 0; - CHILD_STDIO_HANDLE(buffer, i) = INVALID_HANDLE_VALUE; - } - - for (i = 0; i < count; i++) { - uv_stdio_container_t fdopt; - if (i < options->stdio_count) { - fdopt = options->stdio[i]; - } else { - fdopt.flags = UV_IGNORE; - } - - switch (fdopt.flags & (UV_IGNORE | UV_CREATE_PIPE | UV_INHERIT_FD | - UV_INHERIT_STREAM)) { - case UV_IGNORE: - /* Starting a process with no stdin/stout/stderr can confuse it. So no - * matter what the user specified, we make sure the first three FDs are - * always open in their typical modes, e. g. stdin be readable and - * stdout/err should be writable. For FDs > 2, don't do anything - all - * handles in the stdio buffer are initialized with. - * INVALID_HANDLE_VALUE, which should be okay. */ - if (i <= 2) { - DWORD access = (i == 0) ? FILE_GENERIC_READ : - FILE_GENERIC_WRITE | FILE_READ_ATTRIBUTES; - - err = uv__create_nul_handle(&CHILD_STDIO_HANDLE(buffer, i), - access); - if (err) - goto error; - - CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN | FDEV; - } - break; - - case UV_CREATE_PIPE: { - /* Create a pair of two connected pipe ends; one end is turned into an - * uv_pipe_t for use by the parent. The other one is given to the - * child. */ - uv_pipe_t* parent_pipe = (uv_pipe_t*) fdopt.data.stream; - HANDLE child_pipe = INVALID_HANDLE_VALUE; - - /* Create a new, connected pipe pair. stdio[i]. stream should point to - * an uninitialized, but not connected pipe handle. */ - assert(fdopt.data.stream->type == UV_NAMED_PIPE); - assert(!(fdopt.data.stream->flags & UV_HANDLE_CONNECTION)); - assert(!(fdopt.data.stream->flags & UV_HANDLE_PIPESERVER)); - - err = uv__create_stdio_pipe_pair(loop, - parent_pipe, - &child_pipe, - fdopt.flags); - if (err) - goto error; - - CHILD_STDIO_HANDLE(buffer, i) = child_pipe; - CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN | FPIPE; - break; - } - - case UV_INHERIT_FD: { - /* Inherit a raw FD. */ - HANDLE child_handle; - - /* Make an inheritable duplicate of the handle. */ - err = uv__duplicate_fd(loop, fdopt.data.fd, &child_handle); - if (err) { - /* If fdopt. data. fd is not valid and fd <= 2, then ignore the - * error. */ - if (fdopt.data.fd <= 2 && err == ERROR_INVALID_HANDLE) { - CHILD_STDIO_CRT_FLAGS(buffer, i) = 0; - CHILD_STDIO_HANDLE(buffer, i) = INVALID_HANDLE_VALUE; - break; - } - goto error; - } - - /* Figure out what the type is. */ - switch (GetFileType(child_handle)) { - case FILE_TYPE_DISK: - CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN; - break; - - case FILE_TYPE_PIPE: - CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN | FPIPE; - break; - - case FILE_TYPE_CHAR: - case FILE_TYPE_REMOTE: - CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN | FDEV; - break; - - case FILE_TYPE_UNKNOWN: - if (GetLastError() != 0) { - err = GetLastError(); - CloseHandle(child_handle); - goto error; - } - CHILD_STDIO_CRT_FLAGS(buffer, i) = FOPEN | FDEV; - break; - - default: - assert(0); - return -1; - } - - CHILD_STDIO_HANDLE(buffer, i) = child_handle; - break; - } - - case UV_INHERIT_STREAM: { - /* Use an existing stream as the stdio handle for the child. */ - HANDLE stream_handle, child_handle; - unsigned char crt_flags; - uv_stream_t* stream = fdopt.data.stream; - - /* Leech the handle out of the stream. */ - if (stream->type == UV_TTY) { - stream_handle = ((uv_tty_t*) stream)->handle; - crt_flags = FOPEN | FDEV; - } else if (stream->type == UV_NAMED_PIPE && - stream->flags & UV_HANDLE_CONNECTION) { - stream_handle = ((uv_pipe_t*) stream)->handle; - crt_flags = FOPEN | FPIPE; - } else { - stream_handle = INVALID_HANDLE_VALUE; - crt_flags = 0; - } - - if (stream_handle == NULL || - stream_handle == INVALID_HANDLE_VALUE) { - /* The handle is already closed, or not yet created, or the stream - * type is not supported. */ - err = ERROR_NOT_SUPPORTED; - goto error; - } - - /* Make an inheritable copy of the handle. */ - err = uv__duplicate_handle(loop, stream_handle, &child_handle); - if (err) - goto error; - - CHILD_STDIO_HANDLE(buffer, i) = child_handle; - CHILD_STDIO_CRT_FLAGS(buffer, i) = crt_flags; - break; - } - - default: - assert(0); - return -1; - } - } - - *buffer_ptr = buffer; - return 0; - - error: - uv__stdio_destroy(buffer); - return err; -} - - -void uv__stdio_destroy(BYTE* buffer) { - int i, count; - - count = CHILD_STDIO_COUNT(buffer); - for (i = 0; i < count; i++) { - HANDLE handle = CHILD_STDIO_HANDLE(buffer, i); - if (handle != INVALID_HANDLE_VALUE) { - CloseHandle(handle); - } - } - - uv__free(buffer); -} - - -void uv__stdio_noinherit(BYTE* buffer) { - int i, count; - - count = CHILD_STDIO_COUNT(buffer); - for (i = 0; i < count; i++) { - HANDLE handle = CHILD_STDIO_HANDLE(buffer, i); - if (handle != INVALID_HANDLE_VALUE) { - SetHandleInformation(handle, HANDLE_FLAG_INHERIT, 0); - } - } -} - - -int uv__stdio_verify(BYTE* buffer, WORD size) { - unsigned int count; - - /* Check the buffer pointer. */ - if (buffer == NULL) - return 0; - - /* Verify that the buffer is at least big enough to hold the count. */ - if (size < CHILD_STDIO_SIZE(0)) - return 0; - - /* Verify if the count is within range. */ - count = CHILD_STDIO_COUNT(buffer); - if (count > 256) - return 0; - - /* Verify that the buffer size is big enough to hold info for N FDs. */ - if (size < CHILD_STDIO_SIZE(count)) - return 0; - - return 1; -} - - -WORD uv__stdio_size(BYTE* buffer) { - return (WORD) CHILD_STDIO_SIZE(CHILD_STDIO_COUNT((buffer))); -} - - -HANDLE uv__stdio_handle(BYTE* buffer, int fd) { - return CHILD_STDIO_HANDLE(buffer, fd); -} diff --git a/libuv/src/win/process.c b/libuv/src/win/process.c deleted file mode 100644 index 4038fbf..0000000 --- a/libuv/src/win/process.c +++ /dev/null @@ -1,1281 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include -#include -#include -#include -#include -#include /* alloca */ - -#include "uv.h" -#include "internal.h" -#include "handle-inl.h" -#include "req-inl.h" - - -#define SIGKILL 9 - - -typedef struct env_var { - const WCHAR* const wide; - const WCHAR* const wide_eq; - const size_t len; /* including null or '=' */ -} env_var_t; - -#define E_V(str) { L##str, L##str L"=", sizeof(str) } - -static const env_var_t required_vars[] = { /* keep me sorted */ - E_V("HOMEDRIVE"), - E_V("HOMEPATH"), - E_V("LOGONSERVER"), - E_V("PATH"), - E_V("SYSTEMDRIVE"), - E_V("SYSTEMROOT"), - E_V("TEMP"), - E_V("USERDOMAIN"), - E_V("USERNAME"), - E_V("USERPROFILE"), - E_V("WINDIR"), -}; - - -static HANDLE uv_global_job_handle_; -static uv_once_t uv_global_job_handle_init_guard_ = UV_ONCE_INIT; - - -static void uv__init_global_job_handle(void) { - /* Create a job object and set it up to kill all contained processes when - * it's closed. Since this handle is made non-inheritable and we're not - * giving it to anyone, we're the only process holding a reference to it. - * That means that if this process exits it is closed and all the processes - * it contains are killed. All processes created with uv_spawn that are not - * spawned with the UV_PROCESS_DETACHED flag are assigned to this job. - * - * We're setting the JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK flag so only the - * processes that we explicitly add are affected, and *their* subprocesses - * are not. This ensures that our child processes are not limited in their - * ability to use job control on Windows versions that don't deal with - * nested jobs (prior to Windows 8 / Server 2012). It also lets our child - * processes created detached processes without explicitly breaking away - * from job control (which uv_spawn doesn't, either). - */ - SECURITY_ATTRIBUTES attr; - JOBOBJECT_EXTENDED_LIMIT_INFORMATION info; - - memset(&attr, 0, sizeof attr); - attr.bInheritHandle = FALSE; - - memset(&info, 0, sizeof info); - info.BasicLimitInformation.LimitFlags = - JOB_OBJECT_LIMIT_BREAKAWAY_OK | - JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK | - JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION | - JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; - - uv_global_job_handle_ = CreateJobObjectW(&attr, NULL); - if (uv_global_job_handle_ == NULL) - uv_fatal_error(GetLastError(), "CreateJobObjectW"); - - if (!SetInformationJobObject(uv_global_job_handle_, - JobObjectExtendedLimitInformation, - &info, - sizeof info)) - uv_fatal_error(GetLastError(), "SetInformationJobObject"); -} - - -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; -} - - -static void uv_process_init(uv_loop_t* loop, uv_process_t* handle) { - uv__handle_init(loop, (uv_handle_t*) handle, UV_PROCESS); - handle->exit_cb = NULL; - handle->pid = 0; - handle->exit_signal = 0; - handle->wait_handle = INVALID_HANDLE_VALUE; - handle->process_handle = INVALID_HANDLE_VALUE; - handle->child_stdio_buffer = NULL; - handle->exit_cb_pending = 0; - - UV_REQ_INIT(&handle->exit_req, UV_PROCESS_EXIT); - handle->exit_req.data = handle; -} - - -/* - * Path search functions - */ - -/* - * Helper function for search_path - */ -static WCHAR* search_path_join_test(const WCHAR* dir, - size_t dir_len, - const WCHAR* name, - size_t name_len, - const WCHAR* ext, - size_t ext_len, - const WCHAR* cwd, - size_t cwd_len) { - WCHAR *result, *result_pos; - DWORD attrs; - if (dir_len > 2 && dir[0] == L'\\' && dir[1] == L'\\') { - /* It's a UNC path so ignore cwd */ - cwd_len = 0; - } else if (dir_len >= 1 && (dir[0] == L'/' || dir[0] == L'\\')) { - /* It's a full path without drive letter, use cwd's drive letter only */ - cwd_len = 2; - } else if (dir_len >= 2 && dir[1] == L':' && - (dir_len < 3 || (dir[2] != L'/' && dir[2] != L'\\'))) { - /* It's a relative path with drive letter (ext.g. D:../some/file) - * Replace drive letter in dir by full cwd if it points to the same drive, - * otherwise use the dir only. - */ - if (cwd_len < 2 || _wcsnicmp(cwd, dir, 2) != 0) { - cwd_len = 0; - } else { - dir += 2; - dir_len -= 2; - } - } else if (dir_len > 2 && dir[1] == L':') { - /* It's an absolute path with drive letter - * Don't use the cwd at all - */ - cwd_len = 0; - } - - /* Allocate buffer for output */ - result = result_pos = (WCHAR*)uv__malloc(sizeof(WCHAR) * - (cwd_len + 1 + dir_len + 1 + name_len + 1 + ext_len + 1)); - - /* Copy cwd */ - wcsncpy(result_pos, cwd, cwd_len); - result_pos += cwd_len; - - /* Add a path separator if cwd didn't end with one */ - if (cwd_len && wcsrchr(L"\\/:", result_pos[-1]) == NULL) { - result_pos[0] = L'\\'; - result_pos++; - } - - /* Copy dir */ - wcsncpy(result_pos, dir, dir_len); - result_pos += dir_len; - - /* Add a separator if the dir didn't end with one */ - if (dir_len && wcsrchr(L"\\/:", result_pos[-1]) == NULL) { - result_pos[0] = L'\\'; - result_pos++; - } - - /* Copy filename */ - wcsncpy(result_pos, name, name_len); - result_pos += name_len; - - if (ext_len) { - /* Add a dot if the filename didn't end with one */ - if (name_len && result_pos[-1] != '.') { - result_pos[0] = L'.'; - result_pos++; - } - - /* Copy extension */ - wcsncpy(result_pos, ext, ext_len); - result_pos += ext_len; - } - - /* Null terminator */ - result_pos[0] = L'\0'; - - attrs = GetFileAttributesW(result); - - if (attrs != INVALID_FILE_ATTRIBUTES && - !(attrs & FILE_ATTRIBUTE_DIRECTORY)) { - return result; - } - - uv__free(result); - return NULL; -} - - -/* - * Helper function for search_path - */ -static WCHAR* path_search_walk_ext(const WCHAR *dir, - size_t dir_len, - const WCHAR *name, - size_t name_len, - WCHAR *cwd, - size_t cwd_len, - int name_has_ext) { - WCHAR* result; - - /* If the name itself has a nonempty extension, try this extension first */ - if (name_has_ext) { - result = search_path_join_test(dir, dir_len, - name, name_len, - L"", 0, - cwd, cwd_len); - if (result != NULL) { - return result; - } - } - - /* Try .com extension */ - result = search_path_join_test(dir, dir_len, - name, name_len, - L"com", 3, - cwd, cwd_len); - if (result != NULL) { - return result; - } - - /* Try .exe extension */ - result = search_path_join_test(dir, dir_len, - name, name_len, - L"exe", 3, - cwd, cwd_len); - if (result != NULL) { - return result; - } - - return NULL; -} - - -/* - * search_path searches the system path for an executable filename - - * the windows API doesn't provide this as a standalone function nor as an - * option to CreateProcess. - * - * It tries to return an absolute filename. - * - * Furthermore, it tries to follow the semantics that cmd.exe, with this - * exception that PATHEXT environment variable isn't used. Since CreateProcess - * can start only .com and .exe files, only those extensions are tried. This - * behavior equals that of msvcrt's spawn functions. - * - * - Do not search the path if the filename already contains a path (either - * relative or absolute). - * - * - If there's really only a filename, check the current directory for file, - * then search all path directories. - * - * - If filename specified has *any* extension, search for the file with the - * specified extension first. - * - * - If the literal filename is not found in a directory, try *appending* - * (not replacing) .com first and then .exe. - * - * - The path variable may contain relative paths; relative paths are relative - * to the cwd. - * - * - Directories in path may or may not end with a trailing backslash. - * - * - CMD does not trim leading/trailing whitespace from path/pathex entries - * nor from the environment variables as a whole. - * - * - When cmd.exe cannot read a directory, it will just skip it and go on - * searching. However, unlike posix-y systems, it will happily try to run a - * file that is not readable/executable; if the spawn fails it will not - * continue searching. - * - * UNC path support: we are dealing with UNC paths in both the path and the - * filename. This is a deviation from what cmd.exe does (it does not let you - * start a program by specifying an UNC path on the command line) but this is - * really a pointless restriction. - * - */ -static WCHAR* search_path(const WCHAR *file, - WCHAR *cwd, - const WCHAR *path) { - int file_has_dir; - WCHAR* result = NULL; - WCHAR *file_name_start; - WCHAR *dot; - const WCHAR *dir_start, *dir_end, *dir_path; - size_t dir_len; - int name_has_ext; - - size_t file_len = wcslen(file); - size_t cwd_len = wcslen(cwd); - - /* If the caller supplies an empty filename, - * we're not gonna return c:\windows\.exe -- GFY! - */ - if (file_len == 0 - || (file_len == 1 && file[0] == L'.')) { - return NULL; - } - - /* Find the start of the filename so we can split the directory from the - * name. */ - for (file_name_start = (WCHAR*)file + file_len; - file_name_start > file - && file_name_start[-1] != L'\\' - && file_name_start[-1] != L'/' - && file_name_start[-1] != L':'; - file_name_start--); - - file_has_dir = file_name_start != file; - - /* Check if the filename includes an extension */ - dot = wcschr(file_name_start, L'.'); - name_has_ext = (dot != NULL && dot[1] != L'\0'); - - if (file_has_dir) { - /* The file has a path inside, don't use path */ - result = path_search_walk_ext( - file, file_name_start - file, - file_name_start, file_len - (file_name_start - file), - cwd, cwd_len, - name_has_ext); - - } else { - dir_end = path; - - /* The file is really only a name; look in cwd first, then scan path */ - result = path_search_walk_ext(L"", 0, - file, file_len, - cwd, cwd_len, - name_has_ext); - - while (result == NULL) { - if (*dir_end == L'\0') { - break; - } - - /* Skip the separator that dir_end now points to */ - if (dir_end != path || *path == L';') { - dir_end++; - } - - /* Next slice starts just after where the previous one ended */ - dir_start = dir_end; - - /* If path is quoted, find quote end */ - if (*dir_start == L'"' || *dir_start == L'\'') { - dir_end = wcschr(dir_start + 1, *dir_start); - if (dir_end == NULL) { - dir_end = wcschr(dir_start, L'\0'); - } - } - /* Slice until the next ; or \0 is found */ - dir_end = wcschr(dir_end, L';'); - if (dir_end == NULL) { - dir_end = wcschr(dir_start, L'\0'); - } - - /* If the slice is zero-length, don't bother */ - if (dir_end - dir_start == 0) { - continue; - } - - dir_path = dir_start; - dir_len = dir_end - dir_start; - - /* Adjust if the path is quoted. */ - if (dir_path[0] == '"' || dir_path[0] == '\'') { - ++dir_path; - --dir_len; - } - - if (dir_path[dir_len - 1] == '"' || dir_path[dir_len - 1] == '\'') { - --dir_len; - } - - result = path_search_walk_ext(dir_path, dir_len, - file, file_len, - cwd, cwd_len, - name_has_ext); - } - } - - return result; -} - - -/* - * Quotes command line arguments - * Returns a pointer to the end (next char to be written) of the buffer - */ -WCHAR* quote_cmd_arg(const WCHAR *source, WCHAR *target) { - size_t len = wcslen(source); - size_t i; - int quote_hit; - WCHAR* start; - - if (len == 0) { - /* Need double quotation for empty argument */ - *(target++) = L'"'; - *(target++) = L'"'; - return target; - } - - if (NULL == wcspbrk(source, L" \t\"")) { - /* No quotation needed */ - wcsncpy(target, source, len); - target += len; - return target; - } - - if (NULL == wcspbrk(source, L"\"\\")) { - /* - * No embedded double quotes or backlashes, so I can just wrap - * quote marks around the whole thing. - */ - *(target++) = L'"'; - wcsncpy(target, source, len); - target += len; - *(target++) = L'"'; - return target; - } - - /* - * Expected input/output: - * input : hello"world - * output: "hello\"world" - * input : hello""world - * output: "hello\"\"world" - * input : hello\world - * output: hello\world - * input : hello\\world - * output: hello\\world - * input : hello\"world - * output: "hello\\\"world" - * input : hello\\"world - * output: "hello\\\\\"world" - * input : hello world\ - * output: "hello world\\" - */ - - *(target++) = L'"'; - start = target; - quote_hit = 1; - - for (i = len; i > 0; --i) { - *(target++) = source[i - 1]; - - if (quote_hit && source[i - 1] == L'\\') { - *(target++) = L'\\'; - } else if(source[i - 1] == L'"') { - quote_hit = 1; - *(target++) = L'\\'; - } else { - quote_hit = 0; - } - } - target[0] = L'\0'; - wcsrev(start); - *(target++) = L'"'; - return target; -} - - -int make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) { - char** arg; - WCHAR* dst = NULL; - WCHAR* temp_buffer = NULL; - size_t dst_len = 0; - size_t temp_buffer_len = 0; - WCHAR* pos; - int arg_count = 0; - int err = 0; - - /* Count the required size. */ - for (arg = args; *arg; arg++) { - DWORD arg_len; - - arg_len = MultiByteToWideChar(CP_UTF8, - 0, - *arg, - -1, - NULL, - 0); - if (arg_len == 0) { - return GetLastError(); - } - - dst_len += arg_len; - - if (arg_len > temp_buffer_len) - temp_buffer_len = arg_len; - - arg_count++; - } - - /* Adjust for potential quotes. Also assume the worst-case scenario that - * every character needs escaping, so we need twice as much space. */ - dst_len = dst_len * 2 + arg_count * 2; - - /* Allocate buffer for the final command line. */ - dst = (WCHAR*) uv__malloc(dst_len * sizeof(WCHAR)); - if (dst == NULL) { - err = ERROR_OUTOFMEMORY; - goto error; - } - - /* Allocate temporary working buffer. */ - temp_buffer = (WCHAR*) uv__malloc(temp_buffer_len * sizeof(WCHAR)); - if (temp_buffer == NULL) { - err = ERROR_OUTOFMEMORY; - goto error; - } - - pos = dst; - for (arg = args; *arg; arg++) { - DWORD 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; - } - - if (verbatim_arguments) { - /* Copy verbatim. */ - wcscpy(pos, temp_buffer); - pos += arg_len - 1; - } else { - /* Quote/escape, if needed. */ - pos = quote_cmd_arg(temp_buffer, pos); - } - - *pos++ = *(arg + 1) ? L' ' : L'\0'; - } - - uv__free(temp_buffer); - - *dst_ptr = dst; - return 0; - -error: - uv__free(dst); - uv__free(temp_buffer); - return err; -} - - -int env_strncmp(const wchar_t* a, int na, const wchar_t* b) { - wchar_t* a_eq; - wchar_t* b_eq; - wchar_t* A; - wchar_t* B; - int nb; - int r; - - if (na < 0) { - a_eq = wcschr(a, L'='); - assert(a_eq); - na = (int)(long)(a_eq - a); - } else { - na--; - } - b_eq = wcschr(b, L'='); - assert(b_eq); - nb = b_eq - b; - - A = alloca((na+1) * sizeof(wchar_t)); - B = alloca((nb+1) * sizeof(wchar_t)); - - r = LCMapStringW(LOCALE_INVARIANT, LCMAP_UPPERCASE, a, na, A, na); - assert(r==na); - A[na] = L'\0'; - r = LCMapStringW(LOCALE_INVARIANT, LCMAP_UPPERCASE, b, nb, B, nb); - assert(r==nb); - B[nb] = L'\0'; - - for (;;) { - wchar_t AA = *A++; - wchar_t BB = *B++; - if (AA < BB) { - return -1; - } else if (AA > BB) { - return 1; - } else if (!AA && !BB) { - return 0; - } - } -} - - -static int qsort_wcscmp(const void *a, const void *b) { - wchar_t* astr = *(wchar_t* const*)a; - wchar_t* bstr = *(wchar_t* const*)b; - return env_strncmp(astr, -1, bstr); -} - - -/* - * The way windows takes environment variables is different than what C does; - * Windows wants a contiguous block of null-terminated strings, terminated - * with an additional null. - * - * Windows has a few "essential" environment variables. winsock will fail - * to initialize if SYSTEMROOT is not defined; some APIs make reference to - * TEMP. SYSTEMDRIVE is probably also important. We therefore ensure that - * these get defined if the input environment block does not contain any - * values for them. - * - * Also add variables known to Cygwin to be required for correct - * subprocess operation in many cases: - * https://github.com/Alexpux/Cygwin/blob/b266b04fbbd3a595f02ea149e4306d3ab9b1fe3d/winsup/cygwin/environ.cc#L955 - * - */ -int make_program_env(char* env_block[], WCHAR** dst_ptr) { - WCHAR* dst; - WCHAR* ptr; - char** env; - size_t env_len = 0; - int len; - size_t i; - DWORD 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)]; - - /* first pass: determine size in UTF-16 */ - for (env = env_block; *env; env++) { - int len; - if (strchr(*env, '=')) { - len = MultiByteToWideChar(CP_UTF8, - 0, - *env, - -1, - NULL, - 0); - if (len <= 0) { - return GetLastError(); - } - env_len += len; - env_block_count++; - } - } - - /* second pass: copy to UTF-16 environment block */ - dst_copy = (WCHAR*)uv__malloc(env_len * sizeof(WCHAR)); - if (dst_copy == NULL && env_len > 0) { - return ERROR_OUTOFMEMORY; - } - env_copy = alloca(env_block_count * sizeof(WCHAR*)); - - ptr = dst_copy; - ptr_copy = env_copy; - for (env = env_block; *env; env++) { - 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; - } - *ptr_copy++ = ptr; - ptr += len; - } - } - *ptr_copy = NULL; - assert(env_len == 0 || env_len == (size_t) (ptr - dst_copy)); - - /* sort our (UTF-16) copy */ - qsort(env_copy, env_block_count-1, sizeof(wchar_t*), qsort_wcscmp); - - /* third pass: check for required variables */ - for (ptr_copy = env_copy, i = 0; i < ARRAY_SIZE(required_vars); ) { - int cmp; - if (!*ptr_copy) { - cmp = -1; - } else { - cmp = env_strncmp(required_vars[i].wide_eq, - required_vars[i].len, - *ptr_copy); - } - if (cmp < 0) { - /* missing required var */ - var_size = GetEnvironmentVariableW(required_vars[i].wide, NULL, 0); - required_vars_value_len[i] = var_size; - if (var_size != 0) { - env_len += required_vars[i].len; - env_len += var_size; - } - i++; - } else { - ptr_copy++; - if (cmp == 0) - i++; - } - } - - /* final pass: copy, in sort order, and inserting required variables */ - dst = uv__malloc((1+env_len) * sizeof(WCHAR)); - if (!dst) { - uv__free(dst_copy); - return ERROR_OUTOFMEMORY; - } - - for (ptr = dst, ptr_copy = env_copy, i = 0; - *ptr_copy || i < ARRAY_SIZE(required_vars); - ptr += len) { - int cmp; - if (i >= ARRAY_SIZE(required_vars)) { - cmp = 1; - } else if (!*ptr_copy) { - cmp = -1; - } else { - cmp = env_strncmp(required_vars[i].wide_eq, - required_vars[i].len, - *ptr_copy); - } - if (cmp < 0) { - /* missing required var */ - len = required_vars_value_len[i]; - if (len) { - wcscpy(ptr, required_vars[i].wide_eq); - ptr += required_vars[i].len; - var_size = GetEnvironmentVariableW(required_vars[i].wide, - ptr, - (int) (env_len - (ptr - dst))); - if (var_size != (DWORD) (len - 1)) { /* TODO: handle race condition? */ - uv_fatal_error(GetLastError(), "GetEnvironmentVariableW"); - } - } - i++; - } else { - /* copy var from env_block */ - len = wcslen(*ptr_copy) + 1; - wmemcpy(ptr, *ptr_copy, len); - ptr_copy++; - if (cmp == 0) - i++; - } - } - - /* Terminate with an extra NULL. */ - assert(env_len == (size_t) (ptr - dst)); - *ptr = L'\0'; - - uv__free(dst_copy); - *dst_ptr = dst; - return 0; -} - -/* - * Attempt to find the value of the PATH environment variable in the child's - * preprocessed environment. - * - * If found, a pointer into `env` is returned. If not found, NULL is returned. - */ -static WCHAR* find_path(WCHAR *env) { - for (; env != NULL && *env != 0; env += wcslen(env) + 1) { - if ((env[0] == L'P' || env[0] == L'p') && - (env[1] == L'A' || env[1] == L'a') && - (env[2] == L'T' || env[2] == L't') && - (env[3] == L'H' || env[3] == L'h') && - (env[4] == L'=')) { - return &env[5]; - } - } - - return NULL; -} - -/* - * Called on Windows thread-pool thread to indicate that - * a child process has exited. - */ -static void CALLBACK exit_wait_callback(void* data, BOOLEAN didTimeout) { - uv_process_t* process = (uv_process_t*) data; - uv_loop_t* loop = process->loop; - - assert(didTimeout == FALSE); - assert(process); - assert(!process->exit_cb_pending); - - process->exit_cb_pending = 1; - - /* Post completed */ - POST_COMPLETION_FOR_REQ(loop, &process->exit_req); -} - - -/* Called on main thread after a child process has exited. */ -void uv_process_proc_exit(uv_loop_t* loop, uv_process_t* handle) { - int64_t exit_code; - DWORD status; - - assert(handle->exit_cb_pending); - handle->exit_cb_pending = 0; - - /* If we're closing, don't call the exit callback. Just schedule a close - * callback now. */ - if (handle->flags & UV_HANDLE_CLOSING) { - uv_want_endgame(loop, (uv_handle_t*) handle); - return; - } - - /* Unregister from process notification. */ - if (handle->wait_handle != INVALID_HANDLE_VALUE) { - UnregisterWait(handle->wait_handle); - handle->wait_handle = INVALID_HANDLE_VALUE; - } - - /* Set the handle to inactive: no callbacks will be made after the exit - * callback. */ - uv__handle_stop(handle); - - if (GetExitCodeProcess(handle->process_handle, &status)) { - exit_code = status; - } else { - /* Unable to obtain the exit code. This should never happen. */ - exit_code = uv_translate_sys_error(GetLastError()); - } - - /* Fire the exit callback. */ - if (handle->exit_cb) { - handle->exit_cb(handle, exit_code, handle->exit_signal); - } -} - - -void uv_process_close(uv_loop_t* loop, uv_process_t* handle) { - uv__handle_closing(handle); - - if (handle->wait_handle != INVALID_HANDLE_VALUE) { - /* This blocks until either the wait was cancelled, or the callback has - * completed. */ - BOOL r = UnregisterWaitEx(handle->wait_handle, INVALID_HANDLE_VALUE); - if (!r) { - /* This should never happen, and if it happens, we can't recover... */ - uv_fatal_error(GetLastError(), "UnregisterWaitEx"); - } - - handle->wait_handle = INVALID_HANDLE_VALUE; - } - - if (!handle->exit_cb_pending) { - uv_want_endgame(loop, (uv_handle_t*)handle); - } -} - - -void uv_process_endgame(uv_loop_t* loop, uv_process_t* handle) { - assert(!handle->exit_cb_pending); - assert(handle->flags & UV_HANDLE_CLOSING); - assert(!(handle->flags & UV_HANDLE_CLOSED)); - - /* Clean-up the process handle. */ - CloseHandle(handle->process_handle); - - uv__handle_close(handle); -} - - -int uv_spawn(uv_loop_t* loop, - uv_process_t* process, - const uv_process_options_t* options) { - int i; - int err = 0; - WCHAR* path = NULL, *alloc_path = NULL; - BOOL result; - WCHAR* application_path = NULL, *application = NULL, *arguments = NULL, - *env = NULL, *cwd = NULL; - STARTUPINFOW startup; - PROCESS_INFORMATION info; - DWORD process_flags; - - uv_process_init(loop, process); - process->exit_cb = options->exit_cb; - - if (options->flags & (UV_PROCESS_SETGID | UV_PROCESS_SETUID)) { - return UV_ENOTSUP; - } - - if (options->file == NULL || - options->args == NULL) { - return UV_EINVAL; - } - - assert(options->file != NULL); - assert(!(options->flags & ~(UV_PROCESS_DETACHED | - UV_PROCESS_SETGID | - UV_PROCESS_SETUID | - UV_PROCESS_WINDOWS_HIDE | - UV_PROCESS_WINDOWS_HIDE_CONSOLE | - UV_PROCESS_WINDOWS_HIDE_GUI | - UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS))); - - err = uv_utf8_to_utf16_alloc(options->file, &application); - if (err) - goto done; - - err = make_program_args( - options->args, - options->flags & UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS, - &arguments); - if (err) - goto done; - - if (options->env) { - err = make_program_env(options->env, &env); - if (err) - goto done; - } - - if (options->cwd) { - /* Explicit cwd */ - err = uv_utf8_to_utf16_alloc(options->cwd, &cwd); - if (err) - goto done; - - } else { - /* Inherit cwd */ - DWORD cwd_len, r; - - cwd_len = GetCurrentDirectoryW(0, NULL); - if (!cwd_len) { - err = GetLastError(); - goto done; - } - - cwd = (WCHAR*) uv__malloc(cwd_len * sizeof(WCHAR)); - if (cwd == NULL) { - err = ERROR_OUTOFMEMORY; - goto done; - } - - r = GetCurrentDirectoryW(cwd_len, cwd); - if (r == 0 || r >= cwd_len) { - err = GetLastError(); - goto done; - } - } - - /* Get PATH environment variable. */ - path = find_path(env); - if (path == NULL) { - DWORD path_len, r; - - path_len = GetEnvironmentVariableW(L"PATH", NULL, 0); - if (path_len == 0) { - err = GetLastError(); - goto done; - } - - 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; - } - } - - err = uv__stdio_create(loop, options, &process->child_stdio_buffer); - if (err) - goto done; - - application_path = search_path(application, - cwd, - path); - if (application_path == NULL) { - /* Not found. */ - err = ERROR_FILE_NOT_FOUND; - goto done; - } - - startup.cb = sizeof(startup); - startup.lpReserved = NULL; - startup.lpDesktop = NULL; - startup.lpTitle = NULL; - startup.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; - - startup.cbReserved2 = uv__stdio_size(process->child_stdio_buffer); - startup.lpReserved2 = (BYTE*) process->child_stdio_buffer; - - startup.hStdInput = uv__stdio_handle(process->child_stdio_buffer, 0); - startup.hStdOutput = uv__stdio_handle(process->child_stdio_buffer, 1); - startup.hStdError = uv__stdio_handle(process->child_stdio_buffer, 2); - - process_flags = CREATE_UNICODE_ENVIRONMENT; - - if ((options->flags & UV_PROCESS_WINDOWS_HIDE_CONSOLE) || - (options->flags & UV_PROCESS_WINDOWS_HIDE)) { - /* Avoid creating console window if stdio is not inherited. */ - for (i = 0; i < options->stdio_count; i++) { - if (options->stdio[i].flags & UV_INHERIT_FD) - break; - if (i == options->stdio_count - 1) - process_flags |= CREATE_NO_WINDOW; - } - } - if ((options->flags & UV_PROCESS_WINDOWS_HIDE_GUI) || - (options->flags & UV_PROCESS_WINDOWS_HIDE)) { - /* Use SW_HIDE to avoid any potential process window. */ - startup.wShowWindow = SW_HIDE; - } else { - startup.wShowWindow = SW_SHOWDEFAULT; - } - - if (options->flags & UV_PROCESS_DETACHED) { - /* Note that we're not setting the CREATE_BREAKAWAY_FROM_JOB flag. That - * means that libuv might not let you create a fully daemonized process - * when run under job control. However the type of job control that libuv - * itself creates doesn't trickle down to subprocesses so they can still - * daemonize. - * - * A reason to not do this is that CREATE_BREAKAWAY_FROM_JOB makes the - * CreateProcess call fail if we're under job control that doesn't allow - * breakaway. - */ - process_flags |= DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP; - } - - if (!CreateProcessW(application_path, - arguments, - NULL, - NULL, - 1, - process_flags, - env, - cwd, - &startup, - &info)) { - /* CreateProcessW failed. */ - err = GetLastError(); - 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)) { - uv_once(&uv_global_job_handle_init_guard_, uv__init_global_job_handle); - - if (!AssignProcessToJobObject(uv_global_job_handle_, info.hProcess)) { - /* AssignProcessToJobObject might fail if this process is under job - * control and the job doesn't have the - * JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK flag set, on a Windows version - * that doesn't support nested jobs. - * - * When that happens we just swallow the error and continue without - * establishing a kill-child-on-parent-exit relationship, otherwise - * there would be no way for libuv applications run under job control - * to spawn processes at all. - */ - DWORD err = GetLastError(); - if (err != ERROR_ACCESS_DENIED) - uv_fatal_error(err, "AssignProcessToJobObject"); - } - } - - /* Set IPC pid to all IPC pipes. */ - for (i = 0; i < options->stdio_count; i++) { - const uv_stdio_container_t* fdopt = &options->stdio[i]; - if (fdopt->flags & UV_CREATE_PIPE && - fdopt->data.stream->type == UV_NAMED_PIPE && - ((uv_pipe_t*) fdopt->data.stream)->ipc) { - ((uv_pipe_t*) fdopt->data.stream)->pipe.conn.ipc_remote_pid = - info.dwProcessId; - } - } - - /* Setup notifications for when the child process exits. */ - result = RegisterWaitForSingleObject(&process->wait_handle, - process->process_handle, exit_wait_callback, (void*)process, INFINITE, - WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE); - if (!result) { - uv_fatal_error(GetLastError(), "RegisterWaitForSingleObject"); - } - - CloseHandle(info.hThread); - - assert(!err); - - /* Make the handle active. It will remain active until the exit callback is - * made or the handle is closed, whichever happens first. */ - uv__handle_start(process); - - /* Cleanup, whether we succeeded or failed. */ - done: - uv__free(application); - uv__free(application_path); - uv__free(arguments); - uv__free(cwd); - uv__free(env); - uv__free(alloc_path); - - if (process->child_stdio_buffer != NULL) { - /* Clean up child stdio handles. */ - uv__stdio_destroy(process->child_stdio_buffer); - process->child_stdio_buffer = NULL; - } - - return uv_translate_sys_error(err); -} - - -static int uv__kill(HANDLE process_handle, int signum) { - if (signum < 0 || signum >= NSIG) { - return UV_EINVAL; - } - - switch (signum) { - case SIGTERM: - case SIGKILL: - case SIGINT: { - /* Unconditionally terminate the process. On Windows, killed processes - * normally return 1. */ - DWORD status; - int err; - - if (TerminateProcess(process_handle, 1)) - return 0; - - /* If the process already exited before TerminateProcess was called,. - * TerminateProcess will fail with ERROR_ACCESS_DENIED. */ - err = GetLastError(); - if (err == ERROR_ACCESS_DENIED && - GetExitCodeProcess(process_handle, &status) && - status != STILL_ACTIVE) { - return UV_ESRCH; - } - - return uv_translate_sys_error(err); - } - - case 0: { - /* Health check: is the process still alive? */ - DWORD status; - - if (!GetExitCodeProcess(process_handle, &status)) - return uv_translate_sys_error(GetLastError()); - - if (status != STILL_ACTIVE) - return UV_ESRCH; - - return 0; - } - - default: - /* Unsupported signal. */ - return UV_ENOSYS; - } -} - - -int uv_process_kill(uv_process_t* process, int signum) { - int err; - - if (process->process_handle == INVALID_HANDLE_VALUE) { - return UV_EINVAL; - } - - err = uv__kill(process->process_handle, signum); - if (err) { - return err; /* err is already translated. */ - } - - process->exit_signal = signum; - - return 0; -} - - -int uv_kill(int pid, int signum) { - int err; - HANDLE process_handle; - - if (pid == 0) { - process_handle = GetCurrentProcess(); - } else { - process_handle = OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION, - FALSE, - pid); - } - - if (process_handle == NULL) { - err = GetLastError(); - if (err == ERROR_INVALID_PARAMETER) { - return UV_ESRCH; - } else { - return uv_translate_sys_error(err); - } - } - - err = uv__kill(process_handle, signum); - CloseHandle(process_handle); - - return err; /* err is already translated. */ -} diff --git a/libuv/src/win/req-inl.h b/libuv/src/win/req-inl.h deleted file mode 100644 index f2513b7..0000000 --- a/libuv/src/win/req-inl.h +++ /dev/null @@ -1,221 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_WIN_REQ_INL_H_ -#define UV_WIN_REQ_INL_H_ - -#include - -#include "uv.h" -#include "internal.h" - - -#define SET_REQ_STATUS(req, status) \ - (req)->u.io.overlapped.Internal = (ULONG_PTR) (status) - -#define SET_REQ_ERROR(req, error) \ - SET_REQ_STATUS((req), NTSTATUS_FROM_WIN32((error))) - -/* Note: used open-coded in UV_REQ_INIT() because of a circular dependency - * between src/uv-common.h and src/win/internal.h. - */ -#define SET_REQ_SUCCESS(req) \ - SET_REQ_STATUS((req), STATUS_SUCCESS) - -#define GET_REQ_STATUS(req) \ - ((NTSTATUS) (req)->u.io.overlapped.Internal) - -#define REQ_SUCCESS(req) \ - (NT_SUCCESS(GET_REQ_STATUS((req)))) - -#define GET_REQ_ERROR(req) \ - (pRtlNtStatusToDosError(GET_REQ_STATUS((req)))) - -#define GET_REQ_SOCK_ERROR(req) \ - (uv_ntstatus_to_winsock_error(GET_REQ_STATUS((req)))) - - -#define REGISTER_HANDLE_REQ(loop, handle, req) \ - do { \ - INCREASE_ACTIVE_COUNT((loop), (handle)); \ - uv__req_register((loop), (req)); \ - } while (0) - -#define UNREGISTER_HANDLE_REQ(loop, handle, req) \ - do { \ - DECREASE_ACTIVE_COUNT((loop), (handle)); \ - uv__req_unregister((loop), (req)); \ - } while (0) - - -#define UV_SUCCEEDED_WITHOUT_IOCP(result) \ - ((result) && (handle->flags & UV_HANDLE_SYNC_BYPASS_IOCP)) - -#define UV_SUCCEEDED_WITH_IOCP(result) \ - ((result) || (GetLastError() == ERROR_IO_PENDING)) - - -#define POST_COMPLETION_FOR_REQ(loop, req) \ - if (!PostQueuedCompletionStatus((loop)->iocp, \ - 0, \ - 0, \ - &((req)->u.io.overlapped))) { \ - uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus"); \ - } - - -INLINE static uv_req_t* uv_overlapped_to_req(OVERLAPPED* overlapped) { - return CONTAINING_RECORD(overlapped, uv_req_t, u.io.overlapped); -} - - -INLINE static void uv_insert_pending_req(uv_loop_t* loop, uv_req_t* req) { - req->next_req = NULL; - if (loop->pending_reqs_tail) { -#ifdef _DEBUG - /* Ensure the request is not already in the queue, or the queue - * will get corrupted. - */ - uv_req_t* current = loop->pending_reqs_tail; - do { - assert(req != current); - current = current->next_req; - } while(current != loop->pending_reqs_tail); -#endif - - req->next_req = loop->pending_reqs_tail->next_req; - loop->pending_reqs_tail->next_req = req; - loop->pending_reqs_tail = req; - } else { - req->next_req = req; - loop->pending_reqs_tail = req; - } -} - - -#define DELEGATE_STREAM_REQ(loop, req, method, handle_at) \ - do { \ - switch (((uv_handle_t*) (req)->handle_at)->type) { \ - case UV_TCP: \ - uv_process_tcp_##method##_req(loop, \ - (uv_tcp_t*) ((req)->handle_at), \ - req); \ - break; \ - \ - case UV_NAMED_PIPE: \ - uv_process_pipe_##method##_req(loop, \ - (uv_pipe_t*) ((req)->handle_at), \ - req); \ - break; \ - \ - case UV_TTY: \ - uv_process_tty_##method##_req(loop, \ - (uv_tty_t*) ((req)->handle_at), \ - req); \ - break; \ - \ - default: \ - assert(0); \ - } \ - } while (0) - - -INLINE static int uv_process_reqs(uv_loop_t* loop) { - uv_req_t* req; - uv_req_t* first; - uv_req_t* next; - - if (loop->pending_reqs_tail == NULL) - return 0; - - first = loop->pending_reqs_tail->next_req; - next = first; - loop->pending_reqs_tail = NULL; - - while (next != NULL) { - req = next; - next = req->next_req != first ? req->next_req : NULL; - - switch (req->type) { - case UV_READ: - DELEGATE_STREAM_REQ(loop, req, read, data); - break; - - case UV_WRITE: - DELEGATE_STREAM_REQ(loop, (uv_write_t*) req, write, handle); - break; - - case UV_ACCEPT: - DELEGATE_STREAM_REQ(loop, req, accept, data); - break; - - case UV_CONNECT: - DELEGATE_STREAM_REQ(loop, (uv_connect_t*) req, connect, handle); - break; - - case UV_SHUTDOWN: - /* Tcp shutdown requests don't come here. */ - assert(((uv_shutdown_t*) req)->handle->type == UV_NAMED_PIPE); - uv_process_pipe_shutdown_req( - loop, - (uv_pipe_t*) ((uv_shutdown_t*) req)->handle, - (uv_shutdown_t*) req); - break; - - case UV_UDP_RECV: - uv_process_udp_recv_req(loop, (uv_udp_t*) req->data, req); - break; - - case UV_UDP_SEND: - uv_process_udp_send_req(loop, - ((uv_udp_send_t*) req)->handle, - (uv_udp_send_t*) req); - break; - - case UV_WAKEUP: - uv_process_async_wakeup_req(loop, (uv_async_t*) req->data, req); - break; - - case UV_SIGNAL_REQ: - uv_process_signal_req(loop, (uv_signal_t*) req->data, req); - break; - - case UV_POLL_REQ: - uv_process_poll_req(loop, (uv_poll_t*) req->data, req); - break; - - case UV_PROCESS_EXIT: - uv_process_proc_exit(loop, (uv_process_t*) req->data); - break; - - case UV_FS_EVENT_REQ: - uv_process_fs_event_req(loop, req, (uv_fs_event_t*) req->data); - break; - - default: - assert(0); - } - } - - return 1; -} - -#endif /* UV_WIN_REQ_INL_H_ */ diff --git a/libuv/src/win/signal.c b/libuv/src/win/signal.c deleted file mode 100644 index 3d9f92c..0000000 --- a/libuv/src/win/signal.c +++ /dev/null @@ -1,282 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include - -#include "uv.h" -#include "internal.h" -#include "handle-inl.h" -#include "req-inl.h" - - -RB_HEAD(uv_signal_tree_s, uv_signal_s); - -static struct uv_signal_tree_s uv__signal_tree = RB_INITIALIZER(uv__signal_tree); -static CRITICAL_SECTION uv__signal_lock; - -static BOOL WINAPI uv__signal_control_handler(DWORD type); - -int uv__signal_start(uv_signal_t* handle, - uv_signal_cb signal_cb, - int signum, - int oneshot); - -void uv_signals_init(void) { - InitializeCriticalSection(&uv__signal_lock); - if (!SetConsoleCtrlHandler(uv__signal_control_handler, TRUE)) - abort(); -} - - -void uv__signal_cleanup(void) { - /* TODO(bnoordhuis) Undo effects of uv_signal_init()? */ -} - - -static int uv__signal_compare(uv_signal_t* w1, uv_signal_t* w2) { - /* Compare signums first so all watchers with the same signnum end up - * adjacent. */ - if (w1->signum < w2->signum) return -1; - if (w1->signum > w2->signum) return 1; - - /* Sort by loop pointer, so we can easily look up the first item after - * { .signum = x, .loop = NULL }. */ - if ((uintptr_t) w1->loop < (uintptr_t) w2->loop) return -1; - if ((uintptr_t) w1->loop > (uintptr_t) w2->loop) return 1; - - if ((uintptr_t) w1 < (uintptr_t) w2) return -1; - if ((uintptr_t) w1 > (uintptr_t) w2) return 1; - - return 0; -} - - -RB_GENERATE_STATIC(uv_signal_tree_s, uv_signal_s, tree_entry, uv__signal_compare) - - -/* - * Dispatches signal {signum} to all active uv_signal_t watchers in all loops. - * Returns 1 if the signal was dispatched to any watcher, or 0 if there were - * no active signal watchers observing this signal. - */ -int uv__signal_dispatch(int signum) { - uv_signal_t lookup; - uv_signal_t* handle; - int dispatched; - - dispatched = 0; - - EnterCriticalSection(&uv__signal_lock); - - lookup.signum = signum; - lookup.loop = NULL; - - for (handle = RB_NFIND(uv_signal_tree_s, &uv__signal_tree, &lookup); - handle != NULL && handle->signum == signum; - handle = RB_NEXT(uv_signal_tree_s, &uv__signal_tree, handle)) { - unsigned long previous = InterlockedExchange( - (volatile LONG*) &handle->pending_signum, signum); - - if (handle->flags & UV_SIGNAL_ONE_SHOT_DISPATCHED) - continue; - - if (!previous) { - POST_COMPLETION_FOR_REQ(handle->loop, &handle->signal_req); - } - - dispatched = 1; - if (handle->flags & UV_SIGNAL_ONE_SHOT) - handle->flags |= UV_SIGNAL_ONE_SHOT_DISPATCHED; - } - - LeaveCriticalSection(&uv__signal_lock); - - return dispatched; -} - - -static BOOL WINAPI uv__signal_control_handler(DWORD type) { - switch (type) { - case CTRL_C_EVENT: - return uv__signal_dispatch(SIGINT); - - case CTRL_BREAK_EVENT: - return uv__signal_dispatch(SIGBREAK); - - case CTRL_CLOSE_EVENT: - if (uv__signal_dispatch(SIGHUP)) { - /* Windows will terminate the process after the control handler - * returns. After that it will just terminate our process. Therefore - * block the signal handler so the main loop has some time to pick up - * the signal and do something for a few seconds. */ - Sleep(INFINITE); - return TRUE; - } - return FALSE; - - case CTRL_LOGOFF_EVENT: - case CTRL_SHUTDOWN_EVENT: - /* These signals are only sent to services. Services have their own - * notification mechanism, so there's no point in handling these. */ - - default: - /* We don't handle these. */ - return FALSE; - } -} - - -int uv_signal_init(uv_loop_t* loop, uv_signal_t* handle) { - uv__handle_init(loop, (uv_handle_t*) handle, UV_SIGNAL); - handle->pending_signum = 0; - handle->signum = 0; - handle->signal_cb = NULL; - - UV_REQ_INIT(&handle->signal_req, UV_SIGNAL_REQ); - handle->signal_req.data = handle; - - return 0; -} - - -int uv_signal_stop(uv_signal_t* handle) { - uv_signal_t* removed_handle; - - /* If the watcher wasn't started, this is a no-op. */ - if (handle->signum == 0) - return 0; - - EnterCriticalSection(&uv__signal_lock); - - removed_handle = RB_REMOVE(uv_signal_tree_s, &uv__signal_tree, handle); - assert(removed_handle == handle); - - LeaveCriticalSection(&uv__signal_lock); - - handle->signum = 0; - uv__handle_stop(handle); - - return 0; -} - - -int uv_signal_start(uv_signal_t* handle, uv_signal_cb signal_cb, int signum) { - return uv__signal_start(handle, signal_cb, signum, 0); -} - - -int uv_signal_start_oneshot(uv_signal_t* handle, - uv_signal_cb signal_cb, - int signum) { - return uv__signal_start(handle, signal_cb, signum, 1); -} - - -int uv__signal_start(uv_signal_t* handle, - uv_signal_cb signal_cb, - int signum, - int oneshot) { - /* Test for invalid signal values. */ - if (signum <= 0 || signum >= NSIG) - return UV_EINVAL; - - /* Short circuit: if the signal watcher is already watching {signum} don't go - * through the process of deregistering and registering the handler. - * Additionally, this avoids pending signals getting lost in the (small) time - * frame that handle->signum == 0. */ - if (signum == handle->signum) { - handle->signal_cb = signal_cb; - return 0; - } - - /* If the signal handler was already active, stop it first. */ - if (handle->signum != 0) { - int r = uv_signal_stop(handle); - /* uv_signal_stop is infallible. */ - assert(r == 0); - } - - EnterCriticalSection(&uv__signal_lock); - - handle->signum = signum; - if (oneshot) - handle->flags |= UV_SIGNAL_ONE_SHOT; - - RB_INSERT(uv_signal_tree_s, &uv__signal_tree, handle); - - LeaveCriticalSection(&uv__signal_lock); - - handle->signal_cb = signal_cb; - uv__handle_start(handle); - - return 0; -} - - -void uv_process_signal_req(uv_loop_t* loop, uv_signal_t* handle, - uv_req_t* req) { - long dispatched_signum; - - assert(handle->type == UV_SIGNAL); - assert(req->type == UV_SIGNAL_REQ); - - dispatched_signum = InterlockedExchange( - (volatile LONG*) &handle->pending_signum, 0); - assert(dispatched_signum != 0); - - /* Check if the pending signal equals the signum that we are watching for. - * These can get out of sync when the handler is stopped and restarted while - * the signal_req is pending. */ - if (dispatched_signum == handle->signum) - handle->signal_cb(handle, dispatched_signum); - - if (handle->flags & UV_SIGNAL_ONE_SHOT) - uv_signal_stop(handle); - - if (handle->flags & UV_HANDLE_CLOSING) { - /* When it is closing, it must be stopped at this point. */ - assert(handle->signum == 0); - uv_want_endgame(loop, (uv_handle_t*) handle); - } -} - - -void uv_signal_close(uv_loop_t* loop, uv_signal_t* handle) { - uv_signal_stop(handle); - uv__handle_closing(handle); - - if (handle->pending_signum == 0) { - uv_want_endgame(loop, (uv_handle_t*) handle); - } -} - - -void uv_signal_endgame(uv_loop_t* loop, uv_signal_t* handle) { - assert(handle->flags & UV_HANDLE_CLOSING); - assert(!(handle->flags & UV_HANDLE_CLOSED)); - - assert(handle->signum == 0); - assert(handle->pending_signum == 0); - - handle->flags |= UV_HANDLE_CLOSED; - - uv__handle_close(handle); -} diff --git a/libuv/src/win/snprintf.c b/libuv/src/win/snprintf.c deleted file mode 100644 index 776c0e3..0000000 --- a/libuv/src/win/snprintf.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright the libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#if defined(_MSC_VER) && _MSC_VER < 1900 - -#include -#include - -/* Emulate snprintf() on MSVC<2015, _snprintf() doesn't zero-terminate the buffer - * on overflow... - */ -int snprintf(char* buf, size_t len, const char* fmt, ...) { - int n; - va_list ap; - va_start(ap, fmt); - - n = _vscprintf(fmt, ap); - vsnprintf_s(buf, len, _TRUNCATE, fmt, ap); - - va_end(ap); - return n; -} - -#endif diff --git a/libuv/src/win/stream-inl.h b/libuv/src/win/stream-inl.h deleted file mode 100644 index 40f5ddd..0000000 --- a/libuv/src/win/stream-inl.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_WIN_STREAM_INL_H_ -#define UV_WIN_STREAM_INL_H_ - -#include - -#include "uv.h" -#include "internal.h" -#include "handle-inl.h" -#include "req-inl.h" - - -INLINE static void uv_stream_init(uv_loop_t* loop, - uv_stream_t* handle, - uv_handle_type type) { - uv__handle_init(loop, (uv_handle_t*) handle, type); - handle->write_queue_size = 0; - handle->activecnt = 0; - handle->stream.conn.shutdown_req = NULL; - handle->stream.conn.write_reqs_pending = 0; - - UV_REQ_INIT(&handle->read_req, UV_READ); - handle->read_req.event_handle = NULL; - handle->read_req.wait_handle = INVALID_HANDLE_VALUE; - handle->read_req.data = handle; -} - - -INLINE static void uv_connection_init(uv_stream_t* handle) { - handle->flags |= UV_HANDLE_CONNECTION; -} - - -#endif /* UV_WIN_STREAM_INL_H_ */ diff --git a/libuv/src/win/stream.c b/libuv/src/win/stream.c deleted file mode 100644 index abf477f..0000000 --- a/libuv/src/win/stream.c +++ /dev/null @@ -1,246 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include - -#include "uv.h" -#include "internal.h" -#include "handle-inl.h" -#include "req-inl.h" - - -int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb) { - int err; - - err = ERROR_INVALID_PARAMETER; - switch (stream->type) { - case UV_TCP: - err = uv_tcp_listen((uv_tcp_t*)stream, backlog, cb); - break; - case UV_NAMED_PIPE: - err = uv_pipe_listen((uv_pipe_t*)stream, backlog, cb); - break; - default: - assert(0); - } - - return uv_translate_sys_error(err); -} - - -int uv_accept(uv_stream_t* server, uv_stream_t* client) { - int err; - - err = ERROR_INVALID_PARAMETER; - switch (server->type) { - case UV_TCP: - err = uv_tcp_accept((uv_tcp_t*)server, (uv_tcp_t*)client); - break; - case UV_NAMED_PIPE: - err = uv_pipe_accept((uv_pipe_t*)server, client); - break; - default: - assert(0); - } - - return uv_translate_sys_error(err); -} - - -int uv__read_start(uv_stream_t* handle, - uv_alloc_cb alloc_cb, - uv_read_cb read_cb) { - int err; - - err = ERROR_INVALID_PARAMETER; - switch (handle->type) { - case UV_TCP: - err = uv_tcp_read_start((uv_tcp_t*)handle, alloc_cb, read_cb); - break; - case UV_NAMED_PIPE: - err = uv_pipe_read_start((uv_pipe_t*)handle, alloc_cb, read_cb); - break; - case UV_TTY: - err = uv_tty_read_start((uv_tty_t*) handle, alloc_cb, read_cb); - break; - default: - assert(0); - } - - return uv_translate_sys_error(err); -} - - -int uv_read_stop(uv_stream_t* handle) { - int err; - - if (!(handle->flags & UV_HANDLE_READING)) - return 0; - - err = 0; - if (handle->type == UV_TTY) { - err = uv_tty_read_stop((uv_tty_t*) handle); - } else if (handle->type == UV_NAMED_PIPE) { - uv__pipe_read_stop((uv_pipe_t*) handle); - } else { - handle->flags &= ~UV_HANDLE_READING; - DECREASE_ACTIVE_COUNT(handle->loop, handle); - } - - return uv_translate_sys_error(err); -} - - -int uv_write(uv_write_t* req, - uv_stream_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - uv_write_cb cb) { - uv_loop_t* loop = handle->loop; - int err; - - if (!(handle->flags & UV_HANDLE_WRITABLE)) { - return UV_EPIPE; - } - - err = ERROR_INVALID_PARAMETER; - switch (handle->type) { - case UV_TCP: - err = uv_tcp_write(loop, req, (uv_tcp_t*) handle, bufs, nbufs, cb); - break; - case UV_NAMED_PIPE: - err = uv__pipe_write( - loop, req, (uv_pipe_t*) handle, bufs, nbufs, NULL, cb); - break; - case UV_TTY: - err = uv_tty_write(loop, req, (uv_tty_t*) handle, bufs, nbufs, cb); - break; - default: - assert(0); - } - - return uv_translate_sys_error(err); -} - - -int uv_write2(uv_write_t* req, - uv_stream_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - uv_stream_t* send_handle, - uv_write_cb cb) { - uv_loop_t* loop = handle->loop; - int err; - - if (send_handle == NULL) { - return uv_write(req, handle, bufs, nbufs, cb); - } - - if (handle->type != UV_NAMED_PIPE || !((uv_pipe_t*) handle)->ipc) { - return UV_EINVAL; - } else if (!(handle->flags & UV_HANDLE_WRITABLE)) { - return UV_EPIPE; - } - - err = uv__pipe_write( - loop, req, (uv_pipe_t*) handle, bufs, nbufs, send_handle, cb); - return uv_translate_sys_error(err); -} - - -int uv_try_write(uv_stream_t* stream, - const uv_buf_t bufs[], - unsigned int nbufs) { - if (stream->flags & UV_HANDLE_CLOSING) - return UV_EBADF; - if (!(stream->flags & UV_HANDLE_WRITABLE)) - return UV_EPIPE; - - switch (stream->type) { - case UV_TCP: - return uv__tcp_try_write((uv_tcp_t*) stream, bufs, nbufs); - case UV_TTY: - return uv__tty_try_write((uv_tty_t*) stream, bufs, nbufs); - case UV_NAMED_PIPE: - return UV_EAGAIN; - default: - assert(0); - return UV_ENOSYS; - } -} - - -int uv_try_write2(uv_stream_t* stream, - const uv_buf_t bufs[], - unsigned int nbufs, - uv_stream_t* send_handle) { - if (send_handle != NULL) - return UV_EAGAIN; - return uv_try_write(stream, bufs, nbufs); -} - - -int uv_shutdown(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb cb) { - uv_loop_t* loop = handle->loop; - - if (!(handle->flags & UV_HANDLE_WRITABLE) || - handle->flags & UV_HANDLE_SHUTTING || - uv__is_closing(handle)) { - return UV_ENOTCONN; - } - - UV_REQ_INIT(req, UV_SHUTDOWN); - req->handle = handle; - req->cb = cb; - - handle->flags &= ~UV_HANDLE_WRITABLE; - handle->flags |= UV_HANDLE_SHUTTING; - handle->stream.conn.shutdown_req = req; - handle->reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); - - uv_want_endgame(loop, (uv_handle_t*)handle); - - return 0; -} - - -int uv_is_readable(const uv_stream_t* handle) { - return !!(handle->flags & UV_HANDLE_READABLE); -} - - -int uv_is_writable(const uv_stream_t* handle) { - return !!(handle->flags & UV_HANDLE_WRITABLE); -} - - -int uv_stream_set_blocking(uv_stream_t* handle, int blocking) { - if (handle->type != UV_NAMED_PIPE) - return UV_EINVAL; - - if (blocking != 0) - handle->flags |= UV_HANDLE_BLOCKING_WRITES; - else - handle->flags &= ~UV_HANDLE_BLOCKING_WRITES; - - return 0; -} diff --git a/libuv/src/win/tcp.c b/libuv/src/win/tcp.c deleted file mode 100644 index cf2dbd8..0000000 --- a/libuv/src/win/tcp.c +++ /dev/null @@ -1,1697 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include - -#include "uv.h" -#include "internal.h" -#include "handle-inl.h" -#include "stream-inl.h" -#include "req-inl.h" - - -/* - * Threshold of active tcp streams for which to preallocate tcp read buffers. - * (Due to node slab allocator performing poorly under this pattern, - * the optimization is temporarily disabled (threshold=0). This will be - * revisited once node allocator is improved.) - */ -const unsigned int uv_active_tcp_streams_threshold = 0; - -/* - * Number of simultaneous pending AcceptEx calls. - */ -const unsigned int uv_simultaneous_server_accepts = 32; - -/* A zero-size buffer for use by uv_tcp_read */ -static char uv_zero_[] = ""; - -static int uv__tcp_nodelay(uv_tcp_t* handle, SOCKET socket, int enable) { - if (setsockopt(socket, - IPPROTO_TCP, - TCP_NODELAY, - (const char*)&enable, - sizeof enable) == -1) { - return WSAGetLastError(); - } - return 0; -} - - -static int uv__tcp_keepalive(uv_tcp_t* handle, SOCKET socket, int enable, unsigned int delay) { - if (setsockopt(socket, - SOL_SOCKET, - SO_KEEPALIVE, - (const char*)&enable, - sizeof enable) == -1) { - return WSAGetLastError(); - } - - if (enable && setsockopt(socket, - IPPROTO_TCP, - TCP_KEEPALIVE, - (const char*)&delay, - sizeof delay) == -1) { - return WSAGetLastError(); - } - - return 0; -} - - -static int uv_tcp_set_socket(uv_loop_t* loop, - uv_tcp_t* handle, - SOCKET socket, - int family, - int imported) { - DWORD yes = 1; - int non_ifs_lsp; - int err; - - if (handle->socket != INVALID_SOCKET) - return UV_EBUSY; - - /* Set the socket to nonblocking mode */ - if (ioctlsocket(socket, FIONBIO, &yes) == SOCKET_ERROR) { - return WSAGetLastError(); - } - - /* Make the socket non-inheritable */ - if (!SetHandleInformation((HANDLE) socket, HANDLE_FLAG_INHERIT, 0)) - return GetLastError(); - - /* Associate it with the I/O completion port. Use uv_handle_t pointer as - * completion key. */ - if (CreateIoCompletionPort((HANDLE)socket, - loop->iocp, - (ULONG_PTR)socket, - 0) == NULL) { - if (imported) { - handle->flags |= UV_HANDLE_EMULATE_IOCP; - } else { - return GetLastError(); - } - } - - if (family == AF_INET6) { - non_ifs_lsp = uv_tcp_non_ifs_lsp_ipv6; - } else { - non_ifs_lsp = uv_tcp_non_ifs_lsp_ipv4; - } - - if (!(handle->flags & UV_HANDLE_EMULATE_IOCP) && !non_ifs_lsp) { - UCHAR sfcnm_flags = - FILE_SKIP_SET_EVENT_ON_HANDLE | FILE_SKIP_COMPLETION_PORT_ON_SUCCESS; - if (!SetFileCompletionNotificationModes((HANDLE) socket, sfcnm_flags)) - return GetLastError(); - handle->flags |= UV_HANDLE_SYNC_BYPASS_IOCP; - } - - if (handle->flags & UV_HANDLE_TCP_NODELAY) { - err = uv__tcp_nodelay(handle, socket, 1); - if (err) - return err; - } - - /* TODO: Use stored delay. */ - if (handle->flags & UV_HANDLE_TCP_KEEPALIVE) { - err = uv__tcp_keepalive(handle, socket, 1, 60); - if (err) - return err; - } - - handle->socket = socket; - - if (family == AF_INET6) { - handle->flags |= UV_HANDLE_IPV6; - } else { - assert(!(handle->flags & UV_HANDLE_IPV6)); - } - - return 0; -} - - -int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags) { - int domain; - - /* Use the lower 8 bits for the domain */ - domain = flags & 0xFF; - if (domain != AF_INET && domain != AF_INET6 && domain != AF_UNSPEC) - return UV_EINVAL; - - if (flags & ~0xFF) - return UV_EINVAL; - - uv_stream_init(loop, (uv_stream_t*) handle, UV_TCP); - handle->tcp.serv.accept_reqs = NULL; - handle->tcp.serv.pending_accepts = NULL; - handle->socket = INVALID_SOCKET; - handle->reqs_pending = 0; - handle->tcp.serv.func_acceptex = NULL; - handle->tcp.conn.func_connectex = NULL; - handle->tcp.serv.processed_accepts = 0; - handle->delayed_error = 0; - - /* If anything fails beyond this point we need to remove the handle from - * the handle queue, since it was added by uv__handle_init in uv_stream_init. - */ - - if (domain != AF_UNSPEC) { - SOCKET sock; - DWORD err; - - sock = socket(domain, SOCK_STREAM, 0); - if (sock == INVALID_SOCKET) { - err = WSAGetLastError(); - QUEUE_REMOVE(&handle->handle_queue); - return uv_translate_sys_error(err); - } - - err = uv_tcp_set_socket(handle->loop, handle, sock, domain, 0); - if (err) { - closesocket(sock); - QUEUE_REMOVE(&handle->handle_queue); - return uv_translate_sys_error(err); - } - - } - - return 0; -} - - -int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle) { - return uv_tcp_init_ex(loop, handle, AF_UNSPEC); -} - - -void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle) { - int err; - unsigned int i; - uv_tcp_accept_t* req; - - if (handle->flags & UV_HANDLE_CONNECTION && - handle->stream.conn.shutdown_req != NULL && - handle->stream.conn.write_reqs_pending == 0) { - - UNREGISTER_HANDLE_REQ(loop, handle, handle->stream.conn.shutdown_req); - - err = 0; - if (handle->flags & UV_HANDLE_CLOSING) { - err = ERROR_OPERATION_ABORTED; - } else if (shutdown(handle->socket, SD_SEND) == SOCKET_ERROR) { - err = WSAGetLastError(); - } - - if (handle->stream.conn.shutdown_req->cb) { - handle->stream.conn.shutdown_req->cb(handle->stream.conn.shutdown_req, - uv_translate_sys_error(err)); - } - - handle->stream.conn.shutdown_req = NULL; - DECREASE_PENDING_REQ_COUNT(handle); - return; - } - - if (handle->flags & UV_HANDLE_CLOSING && - handle->reqs_pending == 0) { - assert(!(handle->flags & UV_HANDLE_CLOSED)); - assert(handle->socket == INVALID_SOCKET); - - if (!(handle->flags & UV_HANDLE_CONNECTION) && handle->tcp.serv.accept_reqs) { - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - for (i = 0; i < uv_simultaneous_server_accepts; i++) { - req = &handle->tcp.serv.accept_reqs[i]; - if (req->wait_handle != INVALID_HANDLE_VALUE) { - UnregisterWait(req->wait_handle); - req->wait_handle = INVALID_HANDLE_VALUE; - } - if (req->event_handle != NULL) { - CloseHandle(req->event_handle); - req->event_handle = NULL; - } - } - } - - uv__free(handle->tcp.serv.accept_reqs); - handle->tcp.serv.accept_reqs = NULL; - } - - if (handle->flags & UV_HANDLE_CONNECTION && - handle->flags & UV_HANDLE_EMULATE_IOCP) { - if (handle->read_req.wait_handle != INVALID_HANDLE_VALUE) { - UnregisterWait(handle->read_req.wait_handle); - handle->read_req.wait_handle = INVALID_HANDLE_VALUE; - } - if (handle->read_req.event_handle != NULL) { - CloseHandle(handle->read_req.event_handle); - handle->read_req.event_handle = NULL; - } - } - - uv__handle_close(handle); - loop->active_tcp_streams--; - } -} - - -/* Unlike on Unix, here we don't set SO_REUSEADDR, because it doesn't just - * allow binding to addresses that are in use by sockets in TIME_WAIT, it - * effectively allows 'stealing' a port which is in use by another application. - * - * SO_EXCLUSIVEADDRUSE is also not good here because it does check all sockets, - * regardless of state, so we'd get an error even if the port is in use by a - * socket in TIME_WAIT state. - * - * See issue #1360. - * - */ -static int uv_tcp_try_bind(uv_tcp_t* handle, - const struct sockaddr* addr, - unsigned int addrlen, - unsigned int flags) { - DWORD err; - int r; - - if (handle->socket == INVALID_SOCKET) { - SOCKET sock; - - /* Cannot set IPv6-only mode on non-IPv6 socket. */ - if ((flags & UV_TCP_IPV6ONLY) && addr->sa_family != AF_INET6) - return ERROR_INVALID_PARAMETER; - - sock = socket(addr->sa_family, SOCK_STREAM, 0); - if (sock == INVALID_SOCKET) { - return WSAGetLastError(); - } - - err = uv_tcp_set_socket(handle->loop, handle, sock, addr->sa_family, 0); - if (err) { - closesocket(sock); - return err; - } - } - -#ifdef IPV6_V6ONLY - if (addr->sa_family == AF_INET6) { - int on; - - on = (flags & UV_TCP_IPV6ONLY) != 0; - - /* TODO: how to handle errors? This may fail if there is no ipv4 stack - * available, or when run on XP/2003 which have no support for dualstack - * sockets. For now we're silently ignoring the error. */ - setsockopt(handle->socket, - IPPROTO_IPV6, - IPV6_V6ONLY, - (const char*)&on, - sizeof on); - } -#endif - - r = bind(handle->socket, addr, addrlen); - - if (r == SOCKET_ERROR) { - err = WSAGetLastError(); - if (err == WSAEADDRINUSE) { - /* Some errors are not to be reported until connect() or listen() */ - handle->delayed_error = err; - } else { - return err; - } - } - - handle->flags |= UV_HANDLE_BOUND; - - return 0; -} - - -static void CALLBACK post_completion(void* context, BOOLEAN timed_out) { - uv_req_t* req; - uv_tcp_t* handle; - - req = (uv_req_t*) context; - assert(req != NULL); - handle = (uv_tcp_t*)req->data; - assert(handle != NULL); - assert(!timed_out); - - if (!PostQueuedCompletionStatus(handle->loop->iocp, - req->u.io.overlapped.InternalHigh, - 0, - &req->u.io.overlapped)) { - uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus"); - } -} - - -static void CALLBACK post_write_completion(void* context, BOOLEAN timed_out) { - uv_write_t* req; - uv_tcp_t* handle; - - req = (uv_write_t*) context; - assert(req != NULL); - handle = (uv_tcp_t*)req->handle; - assert(handle != NULL); - assert(!timed_out); - - if (!PostQueuedCompletionStatus(handle->loop->iocp, - req->u.io.overlapped.InternalHigh, - 0, - &req->u.io.overlapped)) { - uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus"); - } -} - - -static void uv_tcp_queue_accept(uv_tcp_t* handle, uv_tcp_accept_t* req) { - uv_loop_t* loop = handle->loop; - BOOL success; - DWORD bytes; - SOCKET accept_socket; - short family; - - assert(handle->flags & UV_HANDLE_LISTENING); - assert(req->accept_socket == INVALID_SOCKET); - - /* choose family and extension function */ - if (handle->flags & UV_HANDLE_IPV6) { - family = AF_INET6; - } else { - family = AF_INET; - } - - /* Open a socket for the accepted connection. */ - accept_socket = socket(family, SOCK_STREAM, 0); - if (accept_socket == INVALID_SOCKET) { - SET_REQ_ERROR(req, WSAGetLastError()); - uv_insert_pending_req(loop, (uv_req_t*)req); - handle->reqs_pending++; - return; - } - - /* Make the socket non-inheritable */ - if (!SetHandleInformation((HANDLE) accept_socket, HANDLE_FLAG_INHERIT, 0)) { - SET_REQ_ERROR(req, GetLastError()); - uv_insert_pending_req(loop, (uv_req_t*)req); - handle->reqs_pending++; - closesocket(accept_socket); - return; - } - - /* Prepare the overlapped structure. */ - memset(&(req->u.io.overlapped), 0, sizeof(req->u.io.overlapped)); - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - assert(req->event_handle != NULL); - req->u.io.overlapped.hEvent = (HANDLE) ((ULONG_PTR) req->event_handle | 1); - } - - success = handle->tcp.serv.func_acceptex(handle->socket, - accept_socket, - (void*)req->accept_buffer, - 0, - sizeof(struct sockaddr_storage), - sizeof(struct sockaddr_storage), - &bytes, - &req->u.io.overlapped); - - if (UV_SUCCEEDED_WITHOUT_IOCP(success)) { - /* Process the req without IOCP. */ - req->accept_socket = accept_socket; - handle->reqs_pending++; - uv_insert_pending_req(loop, (uv_req_t*)req); - } else if (UV_SUCCEEDED_WITH_IOCP(success)) { - /* The req will be processed with IOCP. */ - req->accept_socket = accept_socket; - handle->reqs_pending++; - if (handle->flags & UV_HANDLE_EMULATE_IOCP && - req->wait_handle == INVALID_HANDLE_VALUE && - !RegisterWaitForSingleObject(&req->wait_handle, - req->event_handle, post_completion, (void*) req, - INFINITE, WT_EXECUTEINWAITTHREAD)) { - SET_REQ_ERROR(req, GetLastError()); - uv_insert_pending_req(loop, (uv_req_t*)req); - } - } else { - /* Make this req pending reporting an error. */ - SET_REQ_ERROR(req, WSAGetLastError()); - uv_insert_pending_req(loop, (uv_req_t*)req); - handle->reqs_pending++; - /* Destroy the preallocated client socket. */ - closesocket(accept_socket); - /* Destroy the event handle */ - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - CloseHandle(req->event_handle); - req->event_handle = NULL; - } - } -} - - -static void uv_tcp_queue_read(uv_loop_t* loop, uv_tcp_t* handle) { - uv_read_t* req; - uv_buf_t buf; - int result; - DWORD bytes, flags; - - assert(handle->flags & UV_HANDLE_READING); - assert(!(handle->flags & UV_HANDLE_READ_PENDING)); - - req = &handle->read_req; - memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); - - /* - * Preallocate a read buffer if the number of active streams is below - * the threshold. - */ - if (loop->active_tcp_streams < uv_active_tcp_streams_threshold) { - handle->flags &= ~UV_HANDLE_ZERO_READ; - handle->tcp.conn.read_buffer = uv_buf_init(NULL, 0); - handle->alloc_cb((uv_handle_t*) handle, 65536, &handle->tcp.conn.read_buffer); - if (handle->tcp.conn.read_buffer.base == NULL || - handle->tcp.conn.read_buffer.len == 0) { - handle->read_cb((uv_stream_t*) handle, UV_ENOBUFS, &handle->tcp.conn.read_buffer); - return; - } - assert(handle->tcp.conn.read_buffer.base != NULL); - buf = handle->tcp.conn.read_buffer; - } else { - handle->flags |= UV_HANDLE_ZERO_READ; - buf.base = (char*) &uv_zero_; - buf.len = 0; - } - - /* Prepare the overlapped structure. */ - memset(&(req->u.io.overlapped), 0, sizeof(req->u.io.overlapped)); - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - assert(req->event_handle != NULL); - req->u.io.overlapped.hEvent = (HANDLE) ((ULONG_PTR) req->event_handle | 1); - } - - flags = 0; - result = WSARecv(handle->socket, - (WSABUF*)&buf, - 1, - &bytes, - &flags, - &req->u.io.overlapped, - NULL); - - handle->flags |= UV_HANDLE_READ_PENDING; - handle->reqs_pending++; - - if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) { - /* Process the req without IOCP. */ - req->u.io.overlapped.InternalHigh = bytes; - uv_insert_pending_req(loop, (uv_req_t*)req); - } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { - /* The req will be processed with IOCP. */ - if (handle->flags & UV_HANDLE_EMULATE_IOCP && - req->wait_handle == INVALID_HANDLE_VALUE && - !RegisterWaitForSingleObject(&req->wait_handle, - req->event_handle, post_completion, (void*) req, - INFINITE, WT_EXECUTEINWAITTHREAD)) { - SET_REQ_ERROR(req, GetLastError()); - uv_insert_pending_req(loop, (uv_req_t*)req); - } - } else { - /* Make this req pending reporting an error. */ - SET_REQ_ERROR(req, WSAGetLastError()); - uv_insert_pending_req(loop, (uv_req_t*)req); - } -} - - -int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb) { - struct linger l = { 1, 0 }; - - /* Disallow setting SO_LINGER to zero due to some platform inconsistencies */ - if (handle->flags & UV_HANDLE_SHUTTING) - return UV_EINVAL; - - if (0 != setsockopt(handle->socket, SOL_SOCKET, SO_LINGER, (const char*)&l, sizeof(l))) - return uv_translate_sys_error(WSAGetLastError()); - - uv_close((uv_handle_t*) handle, close_cb); - return 0; -} - - -int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb) { - unsigned int i, simultaneous_accepts; - uv_tcp_accept_t* req; - int err; - - assert(backlog > 0); - - if (handle->flags & UV_HANDLE_LISTENING) { - handle->stream.serv.connection_cb = cb; - } - - if (handle->flags & UV_HANDLE_READING) { - return WSAEISCONN; - } - - if (handle->delayed_error) { - return handle->delayed_error; - } - - if (!(handle->flags & UV_HANDLE_BOUND)) { - err = uv_tcp_try_bind(handle, - (const struct sockaddr*) &uv_addr_ip4_any_, - sizeof(uv_addr_ip4_any_), - 0); - if (err) - return err; - if (handle->delayed_error) - return handle->delayed_error; - } - - if (!handle->tcp.serv.func_acceptex) { - if (!uv_get_acceptex_function(handle->socket, &handle->tcp.serv.func_acceptex)) { - return WSAEAFNOSUPPORT; - } - } - - /* If this flag is set, we already made this listen call in xfer. */ - if (!(handle->flags & UV_HANDLE_SHARED_TCP_SOCKET) && - listen(handle->socket, backlog) == SOCKET_ERROR) { - return WSAGetLastError(); - } - - handle->flags |= UV_HANDLE_LISTENING; - handle->stream.serv.connection_cb = cb; - INCREASE_ACTIVE_COUNT(loop, handle); - - simultaneous_accepts = handle->flags & UV_HANDLE_TCP_SINGLE_ACCEPT ? 1 - : uv_simultaneous_server_accepts; - - if (handle->tcp.serv.accept_reqs == NULL) { - handle->tcp.serv.accept_reqs = - uv__malloc(uv_simultaneous_server_accepts * sizeof(uv_tcp_accept_t)); - if (!handle->tcp.serv.accept_reqs) { - uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); - } - - for (i = 0; i < simultaneous_accepts; i++) { - req = &handle->tcp.serv.accept_reqs[i]; - UV_REQ_INIT(req, UV_ACCEPT); - req->accept_socket = INVALID_SOCKET; - req->data = handle; - - req->wait_handle = INVALID_HANDLE_VALUE; - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - req->event_handle = CreateEvent(NULL, 0, 0, NULL); - if (req->event_handle == NULL) { - uv_fatal_error(GetLastError(), "CreateEvent"); - } - } else { - req->event_handle = NULL; - } - - uv_tcp_queue_accept(handle, req); - } - - /* Initialize other unused requests too, because uv_tcp_endgame doesn't - * know how many requests were initialized, so it will try to clean up - * {uv_simultaneous_server_accepts} requests. */ - for (i = simultaneous_accepts; i < uv_simultaneous_server_accepts; i++) { - req = &handle->tcp.serv.accept_reqs[i]; - UV_REQ_INIT(req, UV_ACCEPT); - req->accept_socket = INVALID_SOCKET; - req->data = handle; - req->wait_handle = INVALID_HANDLE_VALUE; - req->event_handle = NULL; - } - } - - return 0; -} - - -int uv_tcp_accept(uv_tcp_t* server, uv_tcp_t* client) { - uv_loop_t* loop = server->loop; - int err = 0; - int family; - - uv_tcp_accept_t* req = server->tcp.serv.pending_accepts; - - if (!req) { - /* No valid connections found, so we error out. */ - return WSAEWOULDBLOCK; - } - - if (req->accept_socket == INVALID_SOCKET) { - return WSAENOTCONN; - } - - if (server->flags & UV_HANDLE_IPV6) { - family = AF_INET6; - } else { - family = AF_INET; - } - - err = uv_tcp_set_socket(client->loop, - client, - req->accept_socket, - family, - 0); - if (err) { - closesocket(req->accept_socket); - } else { - uv_connection_init((uv_stream_t*) client); - /* AcceptEx() implicitly binds the accepted socket. */ - client->flags |= UV_HANDLE_BOUND | UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; - } - - /* Prepare the req to pick up a new connection */ - server->tcp.serv.pending_accepts = req->next_pending; - req->next_pending = NULL; - req->accept_socket = INVALID_SOCKET; - - if (!(server->flags & UV_HANDLE_CLOSING)) { - /* Check if we're in a middle of changing the number of pending accepts. */ - if (!(server->flags & UV_HANDLE_TCP_ACCEPT_STATE_CHANGING)) { - uv_tcp_queue_accept(server, req); - } else { - /* We better be switching to a single pending accept. */ - assert(server->flags & UV_HANDLE_TCP_SINGLE_ACCEPT); - - server->tcp.serv.processed_accepts++; - - if (server->tcp.serv.processed_accepts >= uv_simultaneous_server_accepts) { - server->tcp.serv.processed_accepts = 0; - /* - * All previously queued accept requests are now processed. - * We now switch to queueing just a single accept. - */ - uv_tcp_queue_accept(server, &server->tcp.serv.accept_reqs[0]); - server->flags &= ~UV_HANDLE_TCP_ACCEPT_STATE_CHANGING; - server->flags |= UV_HANDLE_TCP_SINGLE_ACCEPT; - } - } - } - - loop->active_tcp_streams++; - - return err; -} - - -int uv_tcp_read_start(uv_tcp_t* handle, uv_alloc_cb alloc_cb, - uv_read_cb read_cb) { - uv_loop_t* loop = handle->loop; - - handle->flags |= UV_HANDLE_READING; - handle->read_cb = read_cb; - handle->alloc_cb = alloc_cb; - INCREASE_ACTIVE_COUNT(loop, handle); - - /* If reading was stopped and then started again, there could still be a read - * request pending. */ - if (!(handle->flags & UV_HANDLE_READ_PENDING)) { - if (handle->flags & UV_HANDLE_EMULATE_IOCP && - handle->read_req.event_handle == NULL) { - handle->read_req.event_handle = CreateEvent(NULL, 0, 0, NULL); - if (handle->read_req.event_handle == NULL) { - uv_fatal_error(GetLastError(), "CreateEvent"); - } - } - uv_tcp_queue_read(loop, handle); - } - - return 0; -} - -static int uv__is_loopback(const struct sockaddr_storage* storage) { - const struct sockaddr_in* in4; - const struct sockaddr_in6* in6; - int i; - - if (storage->ss_family == AF_INET) { - in4 = (const struct sockaddr_in*) storage; - return in4->sin_addr.S_un.S_un_b.s_b1 == 127; - } - if (storage->ss_family == AF_INET6) { - in6 = (const struct sockaddr_in6*) storage; - for (i = 0; i < 7; ++i) { - if (in6->sin6_addr.u.Word[i] != 0) - return 0; - } - return in6->sin6_addr.u.Word[7] == htons(1); - } - return 0; -} - -// Check if Windows version is 10.0.16299 or later -static int uv__is_fast_loopback_fail_supported(void) { - OSVERSIONINFOW os_info; - if (!pRtlGetVersion) - return 0; - pRtlGetVersion(&os_info); - if (os_info.dwMajorVersion < 10) - return 0; - if (os_info.dwMajorVersion > 10) - return 1; - if (os_info.dwMinorVersion > 0) - return 1; - return os_info.dwBuildNumber >= 16299; -} - -static int uv_tcp_try_connect(uv_connect_t* req, - uv_tcp_t* handle, - const struct sockaddr* addr, - unsigned int addrlen, - uv_connect_cb cb) { - uv_loop_t* loop = handle->loop; - TCP_INITIAL_RTO_PARAMETERS retransmit_ioctl; - const struct sockaddr* bind_addr; - struct sockaddr_storage converted; - BOOL success; - DWORD bytes; - int err; - - err = uv__convert_to_localhost_if_unspecified(addr, &converted); - if (err) - return err; - - if (handle->delayed_error != 0) - goto out; - - if (!(handle->flags & UV_HANDLE_BOUND)) { - if (addrlen == sizeof(uv_addr_ip4_any_)) { - bind_addr = (const struct sockaddr*) &uv_addr_ip4_any_; - } else if (addrlen == sizeof(uv_addr_ip6_any_)) { - bind_addr = (const struct sockaddr*) &uv_addr_ip6_any_; - } else { - abort(); - } - err = uv_tcp_try_bind(handle, bind_addr, addrlen, 0); - if (err) - return err; - if (handle->delayed_error != 0) - goto out; - } - - if (!handle->tcp.conn.func_connectex) { - if (!uv_get_connectex_function(handle->socket, &handle->tcp.conn.func_connectex)) { - return WSAEAFNOSUPPORT; - } - } - - /* This makes connect() fail instantly if the target port on the localhost - * is not reachable, instead of waiting for 2s. We do not care if this fails. - * This only works on Windows version 10.0.16299 and later. - */ - if (uv__is_fast_loopback_fail_supported() && uv__is_loopback(&converted)) { - memset(&retransmit_ioctl, 0, sizeof(retransmit_ioctl)); - retransmit_ioctl.Rtt = TCP_INITIAL_RTO_NO_SYN_RETRANSMISSIONS; - retransmit_ioctl.MaxSynRetransmissions = TCP_INITIAL_RTO_NO_SYN_RETRANSMISSIONS; - WSAIoctl(handle->socket, - SIO_TCP_INITIAL_RTO, - &retransmit_ioctl, - sizeof(retransmit_ioctl), - NULL, - 0, - &bytes, - NULL, - NULL); - } - -out: - - UV_REQ_INIT(req, UV_CONNECT); - req->handle = (uv_stream_t*) handle; - req->cb = cb; - memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); - - if (handle->delayed_error != 0) { - /* Process the req without IOCP. */ - handle->reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); - uv_insert_pending_req(loop, (uv_req_t*)req); - return 0; - } - - success = handle->tcp.conn.func_connectex(handle->socket, - (const struct sockaddr*) &converted, - addrlen, - NULL, - 0, - &bytes, - &req->u.io.overlapped); - - if (UV_SUCCEEDED_WITHOUT_IOCP(success)) { - /* Process the req without IOCP. */ - handle->reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); - uv_insert_pending_req(loop, (uv_req_t*)req); - } else if (UV_SUCCEEDED_WITH_IOCP(success)) { - /* The req will be processed with IOCP. */ - handle->reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); - } else { - return WSAGetLastError(); - } - - return 0; -} - - -int uv_tcp_getsockname(const uv_tcp_t* handle, - struct sockaddr* name, - int* namelen) { - - return uv__getsockpeername((const uv_handle_t*) handle, - getsockname, - name, - namelen, - handle->delayed_error); -} - - -int uv_tcp_getpeername(const uv_tcp_t* handle, - struct sockaddr* name, - int* namelen) { - - return uv__getsockpeername((const uv_handle_t*) handle, - getpeername, - name, - namelen, - handle->delayed_error); -} - - -int uv_tcp_write(uv_loop_t* loop, - uv_write_t* req, - uv_tcp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - uv_write_cb cb) { - int result; - DWORD bytes; - - UV_REQ_INIT(req, UV_WRITE); - req->handle = (uv_stream_t*) handle; - req->cb = cb; - - /* Prepare the overlapped structure. */ - memset(&(req->u.io.overlapped), 0, sizeof(req->u.io.overlapped)); - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - req->event_handle = CreateEvent(NULL, 0, 0, NULL); - if (req->event_handle == NULL) { - uv_fatal_error(GetLastError(), "CreateEvent"); - } - req->u.io.overlapped.hEvent = (HANDLE) ((ULONG_PTR) req->event_handle | 1); - req->wait_handle = INVALID_HANDLE_VALUE; - } - - result = WSASend(handle->socket, - (WSABUF*) bufs, - nbufs, - &bytes, - 0, - &req->u.io.overlapped, - NULL); - - if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) { - /* Request completed immediately. */ - req->u.io.queued_bytes = 0; - handle->reqs_pending++; - handle->stream.conn.write_reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); - uv_insert_pending_req(loop, (uv_req_t*) req); - } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { - /* Request queued by the kernel. */ - req->u.io.queued_bytes = uv__count_bufs(bufs, nbufs); - handle->reqs_pending++; - handle->stream.conn.write_reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); - handle->write_queue_size += req->u.io.queued_bytes; - if (handle->flags & UV_HANDLE_EMULATE_IOCP && - !RegisterWaitForSingleObject(&req->wait_handle, - req->event_handle, post_write_completion, (void*) req, - INFINITE, WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE)) { - SET_REQ_ERROR(req, GetLastError()); - uv_insert_pending_req(loop, (uv_req_t*)req); - } - } else { - /* Send failed due to an error, report it later */ - req->u.io.queued_bytes = 0; - handle->reqs_pending++; - handle->stream.conn.write_reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); - SET_REQ_ERROR(req, WSAGetLastError()); - uv_insert_pending_req(loop, (uv_req_t*) req); - } - - return 0; -} - - -int uv__tcp_try_write(uv_tcp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs) { - int result; - DWORD bytes; - - if (handle->stream.conn.write_reqs_pending > 0) - return UV_EAGAIN; - - result = WSASend(handle->socket, - (WSABUF*) bufs, - nbufs, - &bytes, - 0, - NULL, - NULL); - - if (result == SOCKET_ERROR) - return uv_translate_sys_error(WSAGetLastError()); - else - return bytes; -} - - -void uv_process_tcp_read_req(uv_loop_t* loop, uv_tcp_t* handle, - uv_req_t* req) { - DWORD bytes, flags, err; - uv_buf_t buf; - int count; - - assert(handle->type == UV_TCP); - - handle->flags &= ~UV_HANDLE_READ_PENDING; - - if (!REQ_SUCCESS(req)) { - /* An error occurred doing the read. */ - if ((handle->flags & UV_HANDLE_READING) || - !(handle->flags & UV_HANDLE_ZERO_READ)) { - handle->flags &= ~UV_HANDLE_READING; - DECREASE_ACTIVE_COUNT(loop, handle); - buf = (handle->flags & UV_HANDLE_ZERO_READ) ? - uv_buf_init(NULL, 0) : handle->tcp.conn.read_buffer; - - err = GET_REQ_SOCK_ERROR(req); - - if (err == WSAECONNABORTED) { - /* Turn WSAECONNABORTED into UV_ECONNRESET to be consistent with Unix. - */ - err = WSAECONNRESET; - } - handle->flags &= ~(UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); - - handle->read_cb((uv_stream_t*)handle, - uv_translate_sys_error(err), - &buf); - } - } else { - if (!(handle->flags & UV_HANDLE_ZERO_READ)) { - /* The read was done with a non-zero buffer length. */ - if (req->u.io.overlapped.InternalHigh > 0) { - /* Successful read */ - handle->read_cb((uv_stream_t*)handle, - req->u.io.overlapped.InternalHigh, - &handle->tcp.conn.read_buffer); - /* Read again only if bytes == buf.len */ - if (req->u.io.overlapped.InternalHigh < handle->tcp.conn.read_buffer.len) { - goto done; - } - } else { - /* Connection closed */ - if (handle->flags & UV_HANDLE_READING) { - handle->flags &= ~UV_HANDLE_READING; - DECREASE_ACTIVE_COUNT(loop, handle); - } - handle->flags &= ~UV_HANDLE_READABLE; - - buf.base = 0; - buf.len = 0; - handle->read_cb((uv_stream_t*)handle, UV_EOF, &handle->tcp.conn.read_buffer); - goto done; - } - } - - /* Do nonblocking reads until the buffer is empty */ - count = 32; - while ((handle->flags & UV_HANDLE_READING) && (count-- > 0)) { - buf = uv_buf_init(NULL, 0); - handle->alloc_cb((uv_handle_t*) handle, 65536, &buf); - if (buf.base == NULL || buf.len == 0) { - handle->read_cb((uv_stream_t*) handle, UV_ENOBUFS, &buf); - break; - } - assert(buf.base != NULL); - - flags = 0; - if (WSARecv(handle->socket, - (WSABUF*)&buf, - 1, - &bytes, - &flags, - NULL, - NULL) != SOCKET_ERROR) { - if (bytes > 0) { - /* Successful read */ - handle->read_cb((uv_stream_t*)handle, bytes, &buf); - /* Read again only if bytes == buf.len */ - if (bytes < buf.len) { - break; - } - } else { - /* Connection closed */ - handle->flags &= ~(UV_HANDLE_READING | UV_HANDLE_READABLE); - DECREASE_ACTIVE_COUNT(loop, handle); - - handle->read_cb((uv_stream_t*)handle, UV_EOF, &buf); - break; - } - } else { - err = WSAGetLastError(); - if (err == WSAEWOULDBLOCK) { - /* Read buffer was completely empty, report a 0-byte read. */ - handle->read_cb((uv_stream_t*)handle, 0, &buf); - } else { - /* Ouch! serious error. */ - handle->flags &= ~UV_HANDLE_READING; - DECREASE_ACTIVE_COUNT(loop, handle); - - if (err == WSAECONNABORTED) { - /* Turn WSAECONNABORTED into UV_ECONNRESET to be consistent with - * Unix. */ - err = WSAECONNRESET; - } - handle->flags &= ~(UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); - - handle->read_cb((uv_stream_t*)handle, - uv_translate_sys_error(err), - &buf); - } - break; - } - } - -done: - /* Post another read if still reading and not closing. */ - if ((handle->flags & UV_HANDLE_READING) && - !(handle->flags & UV_HANDLE_READ_PENDING)) { - uv_tcp_queue_read(loop, handle); - } - } - - DECREASE_PENDING_REQ_COUNT(handle); -} - - -void uv_process_tcp_write_req(uv_loop_t* loop, uv_tcp_t* handle, - uv_write_t* req) { - int err; - - assert(handle->type == UV_TCP); - - assert(handle->write_queue_size >= req->u.io.queued_bytes); - handle->write_queue_size -= req->u.io.queued_bytes; - - UNREGISTER_HANDLE_REQ(loop, handle, req); - - if (handle->flags & UV_HANDLE_EMULATE_IOCP) { - if (req->wait_handle != INVALID_HANDLE_VALUE) { - UnregisterWait(req->wait_handle); - req->wait_handle = INVALID_HANDLE_VALUE; - } - if (req->event_handle != NULL) { - CloseHandle(req->event_handle); - req->event_handle = NULL; - } - } - - if (req->cb) { - err = uv_translate_sys_error(GET_REQ_SOCK_ERROR(req)); - if (err == UV_ECONNABORTED) { - /* use UV_ECANCELED for consistency with Unix */ - err = UV_ECANCELED; - } - req->cb(req, err); - } - - handle->stream.conn.write_reqs_pending--; - if (handle->stream.conn.write_reqs_pending == 0) { - if (handle->flags & UV_HANDLE_CLOSING) { - closesocket(handle->socket); - handle->socket = INVALID_SOCKET; - } - if (handle->stream.conn.shutdown_req != NULL) { - uv_want_endgame(loop, (uv_handle_t*)handle); - } - } - - DECREASE_PENDING_REQ_COUNT(handle); -} - - -void uv_process_tcp_accept_req(uv_loop_t* loop, uv_tcp_t* handle, - uv_req_t* raw_req) { - uv_tcp_accept_t* req = (uv_tcp_accept_t*) raw_req; - int err; - - assert(handle->type == UV_TCP); - - /* If handle->accepted_socket is not a valid socket, then uv_queue_accept - * must have failed. This is a serious error. We stop accepting connections - * and report this error to the connection callback. */ - if (req->accept_socket == INVALID_SOCKET) { - if (handle->flags & UV_HANDLE_LISTENING) { - handle->flags &= ~UV_HANDLE_LISTENING; - DECREASE_ACTIVE_COUNT(loop, handle); - if (handle->stream.serv.connection_cb) { - err = GET_REQ_SOCK_ERROR(req); - handle->stream.serv.connection_cb((uv_stream_t*)handle, - uv_translate_sys_error(err)); - } - } - } else if (REQ_SUCCESS(req) && - setsockopt(req->accept_socket, - SOL_SOCKET, - SO_UPDATE_ACCEPT_CONTEXT, - (char*)&handle->socket, - sizeof(handle->socket)) == 0) { - req->next_pending = handle->tcp.serv.pending_accepts; - handle->tcp.serv.pending_accepts = req; - - /* Accept and SO_UPDATE_ACCEPT_CONTEXT were successful. */ - if (handle->stream.serv.connection_cb) { - handle->stream.serv.connection_cb((uv_stream_t*)handle, 0); - } - } else { - /* Error related to accepted socket is ignored because the server socket - * may still be healthy. If the server socket is broken uv_queue_accept - * will detect it. */ - closesocket(req->accept_socket); - req->accept_socket = INVALID_SOCKET; - if (handle->flags & UV_HANDLE_LISTENING) { - uv_tcp_queue_accept(handle, req); - } - } - - DECREASE_PENDING_REQ_COUNT(handle); -} - - -void uv_process_tcp_connect_req(uv_loop_t* loop, uv_tcp_t* handle, - uv_connect_t* req) { - int err; - - assert(handle->type == UV_TCP); - - UNREGISTER_HANDLE_REQ(loop, handle, req); - - err = 0; - if (handle->delayed_error) { - /* To smooth over the differences between unixes errors that - * were reported synchronously on the first connect can be delayed - * until the next tick--which is now. - */ - err = handle->delayed_error; - handle->delayed_error = 0; - } else if (REQ_SUCCESS(req)) { - if (handle->flags & UV_HANDLE_CLOSING) { - /* use UV_ECANCELED for consistency with Unix */ - err = ERROR_OPERATION_ABORTED; - } else if (setsockopt(handle->socket, - SOL_SOCKET, - SO_UPDATE_CONNECT_CONTEXT, - NULL, - 0) == 0) { - uv_connection_init((uv_stream_t*)handle); - handle->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; - loop->active_tcp_streams++; - } else { - err = WSAGetLastError(); - } - } else { - err = GET_REQ_SOCK_ERROR(req); - } - req->cb(req, uv_translate_sys_error(err)); - - DECREASE_PENDING_REQ_COUNT(handle); -} - - -int uv__tcp_xfer_export(uv_tcp_t* handle, - int target_pid, - uv__ipc_socket_xfer_type_t* xfer_type, - uv__ipc_socket_xfer_info_t* xfer_info) { - if (handle->flags & UV_HANDLE_CONNECTION) { - *xfer_type = UV__IPC_SOCKET_XFER_TCP_CONNECTION; - } else { - *xfer_type = UV__IPC_SOCKET_XFER_TCP_SERVER; - /* We're about to share the socket with another process. Because this is a - * listening socket, we assume that the other process will be accepting - * connections on it. Thus, before sharing the socket with another process, - * we call listen here in the parent process. */ - if (!(handle->flags & UV_HANDLE_LISTENING)) { - if (!(handle->flags & UV_HANDLE_BOUND)) { - return ERROR_NOT_SUPPORTED; - } - if (handle->delayed_error == 0 && - listen(handle->socket, SOMAXCONN) == SOCKET_ERROR) { - handle->delayed_error = WSAGetLastError(); - } - } - } - - if (WSADuplicateSocketW(handle->socket, target_pid, &xfer_info->socket_info)) - return WSAGetLastError(); - xfer_info->delayed_error = handle->delayed_error; - - /* Mark the local copy of the handle as 'shared' so we behave in a way that's - * friendly to the process(es) that we share the socket with. */ - handle->flags |= UV_HANDLE_SHARED_TCP_SOCKET; - - return 0; -} - - -int uv__tcp_xfer_import(uv_tcp_t* tcp, - uv__ipc_socket_xfer_type_t xfer_type, - uv__ipc_socket_xfer_info_t* xfer_info) { - int err; - SOCKET socket; - - assert(xfer_type == UV__IPC_SOCKET_XFER_TCP_SERVER || - xfer_type == UV__IPC_SOCKET_XFER_TCP_CONNECTION); - - socket = WSASocketW(FROM_PROTOCOL_INFO, - FROM_PROTOCOL_INFO, - FROM_PROTOCOL_INFO, - &xfer_info->socket_info, - 0, - WSA_FLAG_OVERLAPPED); - - if (socket == INVALID_SOCKET) { - return WSAGetLastError(); - } - - err = uv_tcp_set_socket( - tcp->loop, tcp, socket, xfer_info->socket_info.iAddressFamily, 1); - if (err) { - closesocket(socket); - return err; - } - - tcp->delayed_error = xfer_info->delayed_error; - tcp->flags |= UV_HANDLE_BOUND | UV_HANDLE_SHARED_TCP_SOCKET; - - if (xfer_type == UV__IPC_SOCKET_XFER_TCP_CONNECTION) { - uv_connection_init((uv_stream_t*)tcp); - tcp->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; - } - - tcp->loop->active_tcp_streams++; - return 0; -} - - -int uv_tcp_nodelay(uv_tcp_t* handle, int enable) { - int err; - - if (handle->socket != INVALID_SOCKET) { - err = uv__tcp_nodelay(handle, handle->socket, enable); - if (err) - return uv_translate_sys_error(err); - } - - if (enable) { - handle->flags |= UV_HANDLE_TCP_NODELAY; - } else { - handle->flags &= ~UV_HANDLE_TCP_NODELAY; - } - - return 0; -} - - -int uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay) { - int err; - - if (handle->socket != INVALID_SOCKET) { - err = uv__tcp_keepalive(handle, handle->socket, enable, delay); - if (err) - return uv_translate_sys_error(err); - } - - if (enable) { - handle->flags |= UV_HANDLE_TCP_KEEPALIVE; - } else { - handle->flags &= ~UV_HANDLE_TCP_KEEPALIVE; - } - - /* TODO: Store delay if handle->socket isn't created yet. */ - - return 0; -} - - -int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable) { - if (handle->flags & UV_HANDLE_CONNECTION) { - return UV_EINVAL; - } - - /* Check if we're already in the desired mode. */ - if ((enable && !(handle->flags & UV_HANDLE_TCP_SINGLE_ACCEPT)) || - (!enable && handle->flags & UV_HANDLE_TCP_SINGLE_ACCEPT)) { - return 0; - } - - /* Don't allow switching from single pending accept to many. */ - if (enable) { - return UV_ENOTSUP; - } - - /* Check if we're in a middle of changing the number of pending accepts. */ - if (handle->flags & UV_HANDLE_TCP_ACCEPT_STATE_CHANGING) { - return 0; - } - - handle->flags |= UV_HANDLE_TCP_SINGLE_ACCEPT; - - /* Flip the changing flag if we have already queued multiple accepts. */ - if (handle->flags & UV_HANDLE_LISTENING) { - handle->flags |= UV_HANDLE_TCP_ACCEPT_STATE_CHANGING; - } - - return 0; -} - - -static void uv_tcp_try_cancel_reqs(uv_tcp_t* tcp) { - SOCKET socket; - int non_ifs_lsp; - int reading; - int writing; - - socket = tcp->socket; - reading = tcp->flags & UV_HANDLE_READING; - writing = tcp->stream.conn.write_reqs_pending > 0; - if (!reading && !writing) - return; - - /* TODO: in libuv v2, keep explicit track of write_reqs, so we can cancel - * them each explicitly with CancelIoEx (like unix). */ - if (reading) - CancelIoEx((HANDLE) socket, &tcp->read_req.u.io.overlapped); - if (writing) - CancelIo((HANDLE) socket); - - /* Check if we have any non-IFS LSPs stacked on top of TCP */ - non_ifs_lsp = (tcp->flags & UV_HANDLE_IPV6) ? uv_tcp_non_ifs_lsp_ipv6 : - uv_tcp_non_ifs_lsp_ipv4; - - /* If there are non-ifs LSPs then try to obtain a base handle for the socket. - * This will always fail on Windows XP/3k. */ - if (non_ifs_lsp) { - DWORD bytes; - if (WSAIoctl(socket, - SIO_BASE_HANDLE, - NULL, - 0, - &socket, - sizeof socket, - &bytes, - NULL, - NULL) != 0) { - /* Failed. We can't do CancelIo. */ - return; - } - } - - assert(socket != 0 && socket != INVALID_SOCKET); - - if (socket != tcp->socket) { - if (reading) - CancelIoEx((HANDLE) socket, &tcp->read_req.u.io.overlapped); - if (writing) - CancelIo((HANDLE) socket); - } -} - - -void uv_tcp_close(uv_loop_t* loop, uv_tcp_t* tcp) { - if (tcp->flags & UV_HANDLE_CONNECTION) { - uv_tcp_try_cancel_reqs(tcp); - if (tcp->flags & UV_HANDLE_READING) { - uv_read_stop((uv_stream_t*) tcp); - } - } else { - if (tcp->tcp.serv.accept_reqs != NULL) { - /* First close the incoming sockets to cancel the accept operations before - * we free their resources. */ - unsigned int i; - for (i = 0; i < uv_simultaneous_server_accepts; i++) { - uv_tcp_accept_t* req = &tcp->tcp.serv.accept_reqs[i]; - if (req->accept_socket != INVALID_SOCKET) { - closesocket(req->accept_socket); - req->accept_socket = INVALID_SOCKET; - } - } - } - assert(!(tcp->flags & UV_HANDLE_READING)); - } - - if (tcp->flags & UV_HANDLE_LISTENING) { - tcp->flags &= ~UV_HANDLE_LISTENING; - DECREASE_ACTIVE_COUNT(loop, tcp); - } - - /* If any overlapped req failed to cancel, calling `closesocket` now would - * cause Win32 to send an RST packet. Try to avoid that for writes, if - * possibly applicable, by waiting to process the completion notifications - * first (which typically should be cancellations). There's not much we can - * do about canceled reads, which also will generate an RST packet. */ - if (!(tcp->flags & UV_HANDLE_CONNECTION) || - tcp->stream.conn.write_reqs_pending == 0) { - closesocket(tcp->socket); - tcp->socket = INVALID_SOCKET; - } - - tcp->flags &= ~(UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); - uv__handle_closing(tcp); - - if (tcp->reqs_pending == 0) { - uv_want_endgame(tcp->loop, (uv_handle_t*)tcp); - } -} - - -int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock) { - WSAPROTOCOL_INFOW protocol_info; - int opt_len; - int err; - struct sockaddr_storage saddr; - int saddr_len; - - /* Detect the address family of the socket. */ - opt_len = (int) sizeof protocol_info; - if (getsockopt(sock, - SOL_SOCKET, - SO_PROTOCOL_INFOW, - (char*) &protocol_info, - &opt_len) == SOCKET_ERROR) { - return uv_translate_sys_error(GetLastError()); - } - - err = uv_tcp_set_socket(handle->loop, - handle, - sock, - protocol_info.iAddressFamily, - 1); - if (err) { - return uv_translate_sys_error(err); - } - - /* Support already active socket. */ - saddr_len = sizeof(saddr); - if (!uv_tcp_getsockname(handle, (struct sockaddr*) &saddr, &saddr_len)) { - /* Socket is already bound. */ - handle->flags |= UV_HANDLE_BOUND; - saddr_len = sizeof(saddr); - if (!uv_tcp_getpeername(handle, (struct sockaddr*) &saddr, &saddr_len)) { - /* Socket is already connected. */ - uv_connection_init((uv_stream_t*) handle); - handle->flags |= UV_HANDLE_READABLE | UV_HANDLE_WRITABLE; - } - } - - return 0; -} - - -/* This function is an egress point, i.e. it returns libuv errors rather than - * system errors. - */ -int uv__tcp_bind(uv_tcp_t* handle, - const struct sockaddr* addr, - unsigned int addrlen, - unsigned int flags) { - int err; - - err = uv_tcp_try_bind(handle, addr, addrlen, flags); - if (err) - return uv_translate_sys_error(err); - - return 0; -} - - -/* This function is an egress point, i.e. it returns libuv errors rather than - * system errors. - */ -int uv__tcp_connect(uv_connect_t* req, - uv_tcp_t* handle, - const struct sockaddr* addr, - unsigned int addrlen, - uv_connect_cb cb) { - int err; - - err = uv_tcp_try_connect(req, handle, addr, addrlen, cb); - if (err) - return uv_translate_sys_error(err); - - return 0; -} - -#ifndef WSA_FLAG_NO_HANDLE_INHERIT -/* Added in Windows 7 SP1. Specify this to avoid race conditions, */ -/* but also manually clear the inherit flag in case this failed. */ -#define WSA_FLAG_NO_HANDLE_INHERIT 0x80 -#endif - -int uv_socketpair(int type, int protocol, uv_os_sock_t fds[2], int flags0, int flags1) { - SOCKET server = INVALID_SOCKET; - SOCKET client0 = INVALID_SOCKET; - SOCKET client1 = INVALID_SOCKET; - SOCKADDR_IN name; - LPFN_ACCEPTEX func_acceptex; - WSAOVERLAPPED overlap; - char accept_buffer[sizeof(struct sockaddr_storage) * 2 + 32]; - int namelen; - int err; - DWORD bytes; - DWORD flags; - DWORD client0_flags = WSA_FLAG_NO_HANDLE_INHERIT; - DWORD client1_flags = WSA_FLAG_NO_HANDLE_INHERIT; - - if (flags0 & UV_NONBLOCK_PIPE) - client0_flags |= WSA_FLAG_OVERLAPPED; - if (flags1 & UV_NONBLOCK_PIPE) - client1_flags |= WSA_FLAG_OVERLAPPED; - - server = WSASocketW(AF_INET, type, protocol, NULL, 0, - WSA_FLAG_OVERLAPPED | WSA_FLAG_NO_HANDLE_INHERIT); - if (server == INVALID_SOCKET) - goto wsaerror; - if (!SetHandleInformation((HANDLE) server, HANDLE_FLAG_INHERIT, 0)) - goto error; - name.sin_family = AF_INET; - name.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - name.sin_port = 0; - if (bind(server, (SOCKADDR*) &name, sizeof(name)) != 0) - goto wsaerror; - if (listen(server, 1) != 0) - goto wsaerror; - namelen = sizeof(name); - if (getsockname(server, (SOCKADDR*) &name, &namelen) != 0) - goto wsaerror; - client0 = WSASocketW(AF_INET, type, protocol, NULL, 0, client0_flags); - if (client0 == INVALID_SOCKET) - goto wsaerror; - if (!SetHandleInformation((HANDLE) client0, HANDLE_FLAG_INHERIT, 0)) - goto error; - if (connect(client0, (SOCKADDR*) &name, sizeof(name)) != 0) - goto wsaerror; - client1 = WSASocketW(AF_INET, type, protocol, NULL, 0, client1_flags); - if (client1 == INVALID_SOCKET) - goto wsaerror; - if (!SetHandleInformation((HANDLE) client1, HANDLE_FLAG_INHERIT, 0)) - goto error; - if (!uv_get_acceptex_function(server, &func_acceptex)) { - err = WSAEAFNOSUPPORT; - goto cleanup; - } - memset(&overlap, 0, sizeof(overlap)); - if (!func_acceptex(server, - client1, - accept_buffer, - 0, - sizeof(struct sockaddr_storage), - sizeof(struct sockaddr_storage), - &bytes, - &overlap)) { - err = WSAGetLastError(); - if (err == ERROR_IO_PENDING) { - /* Result should complete immediately, since we already called connect, - * but emperically, we sometimes have to poll the kernel a couple times - * until it notices that. */ - while (!WSAGetOverlappedResult(client1, &overlap, &bytes, FALSE, &flags)) { - err = WSAGetLastError(); - if (err != WSA_IO_INCOMPLETE) - goto cleanup; - SwitchToThread(); - } - } - else { - goto cleanup; - } - } - if (setsockopt(client1, SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT, - (char*) &server, sizeof(server)) != 0) { - goto wsaerror; - } - - closesocket(server); - - fds[0] = client0; - fds[1] = client1; - - return 0; - - wsaerror: - err = WSAGetLastError(); - goto cleanup; - - error: - err = GetLastError(); - goto cleanup; - - cleanup: - if (server != INVALID_SOCKET) - closesocket(server); - if (client0 != INVALID_SOCKET) - closesocket(client0); - if (client1 != INVALID_SOCKET) - closesocket(client1); - - assert(err); - return uv_translate_sys_error(err); -} diff --git a/libuv/src/win/thread.c b/libuv/src/win/thread.c deleted file mode 100644 index 89c53ad..0000000 --- a/libuv/src/win/thread.c +++ /dev/null @@ -1,520 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include - -#if defined(__MINGW64_VERSION_MAJOR) -/* MemoryBarrier expands to __mm_mfence in some cases (x86+sse2), which may - * require this header in some versions of mingw64. */ -#include -#endif - -#include "uv.h" -#include "internal.h" - -static void uv__once_inner(uv_once_t* guard, void (*callback)(void)) { - DWORD result; - HANDLE existing_event, created_event; - - created_event = CreateEvent(NULL, 1, 0, NULL); - if (created_event == 0) { - /* Could fail in a low-memory situation? */ - uv_fatal_error(GetLastError(), "CreateEvent"); - } - - existing_event = InterlockedCompareExchangePointer(&guard->event, - created_event, - NULL); - - if (existing_event == NULL) { - /* We won the race */ - callback(); - - result = SetEvent(created_event); - assert(result); - guard->ran = 1; - - } else { - /* We lost the race. Destroy the event we created and wait for the existing - * one to become signaled. */ - CloseHandle(created_event); - result = WaitForSingleObject(existing_event, INFINITE); - assert(result == WAIT_OBJECT_0); - } -} - - -void uv_once(uv_once_t* guard, void (*callback)(void)) { - /* Fast case - avoid WaitForSingleObject. */ - if (guard->ran) { - return; - } - - uv__once_inner(guard, callback); -} - - -/* Verify that uv_thread_t can be stored in a TLS slot. */ -STATIC_ASSERT(sizeof(uv_thread_t) <= sizeof(void*)); - -static uv_key_t uv__current_thread_key; -static uv_once_t uv__current_thread_init_guard = UV_ONCE_INIT; - - -static void uv__init_current_thread_key(void) { - if (uv_key_create(&uv__current_thread_key)) - abort(); -} - - -struct thread_ctx { - void (*entry)(void* arg); - void* arg; - uv_thread_t self; -}; - - -static UINT __stdcall uv__thread_start(void* arg) { - struct thread_ctx *ctx_p; - struct thread_ctx ctx; - - ctx_p = arg; - ctx = *ctx_p; - uv__free(ctx_p); - - uv_once(&uv__current_thread_init_guard, uv__init_current_thread_key); - uv_key_set(&uv__current_thread_key, (void*) ctx.self); - - ctx.entry(ctx.arg); - - return 0; -} - - -int uv_thread_create(uv_thread_t *tid, void (*entry)(void *arg), void *arg) { - uv_thread_options_t params; - params.flags = UV_THREAD_NO_FLAGS; - return uv_thread_create_ex(tid, ¶ms, entry, arg); -} - -int uv_thread_create_ex(uv_thread_t* tid, - const uv_thread_options_t* params, - void (*entry)(void *arg), - void *arg) { - struct thread_ctx* ctx; - int err; - HANDLE thread; - SYSTEM_INFO sysinfo; - size_t stack_size; - size_t pagesize; - - stack_size = - params->flags & UV_THREAD_HAS_STACK_SIZE ? params->stack_size : 0; - - if (stack_size != 0) { - GetNativeSystemInfo(&sysinfo); - pagesize = (size_t)sysinfo.dwPageSize; - /* Round up to the nearest page boundary. */ - stack_size = (stack_size + pagesize - 1) &~ (pagesize - 1); - - if ((unsigned)stack_size != stack_size) - return UV_EINVAL; - } - - ctx = uv__malloc(sizeof(*ctx)); - if (ctx == NULL) - return UV_ENOMEM; - - ctx->entry = entry; - ctx->arg = arg; - - /* Create the thread in suspended state so we have a chance to pass - * its own creation handle to it */ - thread = (HANDLE) _beginthreadex(NULL, - (unsigned)stack_size, - uv__thread_start, - ctx, - CREATE_SUSPENDED, - NULL); - if (thread == NULL) { - err = errno; - uv__free(ctx); - } else { - err = 0; - *tid = thread; - ctx->self = thread; - ResumeThread(thread); - } - - switch (err) { - case 0: - return 0; - case EACCES: - return UV_EACCES; - case EAGAIN: - return UV_EAGAIN; - case EINVAL: - return UV_EINVAL; - } - - return UV_EIO; -} - - -uv_thread_t uv_thread_self(void) { - uv_once(&uv__current_thread_init_guard, uv__init_current_thread_key); - return (uv_thread_t) uv_key_get(&uv__current_thread_key); -} - - -int uv_thread_join(uv_thread_t *tid) { - if (WaitForSingleObject(*tid, INFINITE)) - return uv_translate_sys_error(GetLastError()); - else { - CloseHandle(*tid); - *tid = 0; - MemoryBarrier(); /* For feature parity with pthread_join(). */ - return 0; - } -} - - -int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2) { - return *t1 == *t2; -} - - -int uv_mutex_init(uv_mutex_t* mutex) { - InitializeCriticalSection(mutex); - return 0; -} - - -int uv_mutex_init_recursive(uv_mutex_t* mutex) { - return uv_mutex_init(mutex); -} - - -void uv_mutex_destroy(uv_mutex_t* mutex) { - DeleteCriticalSection(mutex); -} - - -void uv_mutex_lock(uv_mutex_t* mutex) { - EnterCriticalSection(mutex); -} - - -int uv_mutex_trylock(uv_mutex_t* mutex) { - if (TryEnterCriticalSection(mutex)) - return 0; - else - return UV_EBUSY; -} - - -void uv_mutex_unlock(uv_mutex_t* mutex) { - LeaveCriticalSection(mutex); -} - - -int uv_rwlock_init(uv_rwlock_t* rwlock) { - /* Initialize the semaphore that acts as the write lock. */ - HANDLE handle = CreateSemaphoreW(NULL, 1, 1, NULL); - if (handle == NULL) - return uv_translate_sys_error(GetLastError()); - rwlock->state_.write_semaphore_ = handle; - - /* Initialize the critical section protecting the reader count. */ - InitializeCriticalSection(&rwlock->state_.num_readers_lock_); - - /* Initialize the reader count. */ - rwlock->state_.num_readers_ = 0; - - return 0; -} - - -void uv_rwlock_destroy(uv_rwlock_t* rwlock) { - DeleteCriticalSection(&rwlock->state_.num_readers_lock_); - CloseHandle(rwlock->state_.write_semaphore_); -} - - -void uv_rwlock_rdlock(uv_rwlock_t* rwlock) { - /* Acquire the lock that protects the reader count. */ - EnterCriticalSection(&rwlock->state_.num_readers_lock_); - - /* Increase the reader count, and lock for write if this is the first - * reader. - */ - if (++rwlock->state_.num_readers_ == 1) { - DWORD r = WaitForSingleObject(rwlock->state_.write_semaphore_, INFINITE); - if (r != WAIT_OBJECT_0) - uv_fatal_error(GetLastError(), "WaitForSingleObject"); - } - - /* Release the lock that protects the reader count. */ - LeaveCriticalSection(&rwlock->state_.num_readers_lock_); -} - - -int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock) { - int err; - - if (!TryEnterCriticalSection(&rwlock->state_.num_readers_lock_)) - return UV_EBUSY; - - err = 0; - - if (rwlock->state_.num_readers_ == 0) { - /* Currently there are no other readers, which means that the write lock - * needs to be acquired. - */ - DWORD r = WaitForSingleObject(rwlock->state_.write_semaphore_, 0); - if (r == WAIT_OBJECT_0) - rwlock->state_.num_readers_++; - else if (r == WAIT_TIMEOUT) - err = UV_EBUSY; - else if (r == WAIT_FAILED) - uv_fatal_error(GetLastError(), "WaitForSingleObject"); - - } else { - /* The write lock has already been acquired because there are other - * active readers. - */ - rwlock->state_.num_readers_++; - } - - LeaveCriticalSection(&rwlock->state_.num_readers_lock_); - return err; -} - - -void uv_rwlock_rdunlock(uv_rwlock_t* rwlock) { - EnterCriticalSection(&rwlock->state_.num_readers_lock_); - - if (--rwlock->state_.num_readers_ == 0) { - if (!ReleaseSemaphore(rwlock->state_.write_semaphore_, 1, NULL)) - uv_fatal_error(GetLastError(), "ReleaseSemaphore"); - } - - LeaveCriticalSection(&rwlock->state_.num_readers_lock_); -} - - -void uv_rwlock_wrlock(uv_rwlock_t* rwlock) { - DWORD r = WaitForSingleObject(rwlock->state_.write_semaphore_, INFINITE); - if (r != WAIT_OBJECT_0) - uv_fatal_error(GetLastError(), "WaitForSingleObject"); -} - - -int uv_rwlock_trywrlock(uv_rwlock_t* rwlock) { - DWORD r = WaitForSingleObject(rwlock->state_.write_semaphore_, 0); - if (r == WAIT_OBJECT_0) - return 0; - else if (r == WAIT_TIMEOUT) - return UV_EBUSY; - else - uv_fatal_error(GetLastError(), "WaitForSingleObject"); -} - - -void uv_rwlock_wrunlock(uv_rwlock_t* rwlock) { - if (!ReleaseSemaphore(rwlock->state_.write_semaphore_, 1, NULL)) - uv_fatal_error(GetLastError(), "ReleaseSemaphore"); -} - - -int uv_sem_init(uv_sem_t* sem, unsigned int value) { - *sem = CreateSemaphore(NULL, value, INT_MAX, NULL); - if (*sem == NULL) - return uv_translate_sys_error(GetLastError()); - else - return 0; -} - - -void uv_sem_destroy(uv_sem_t* sem) { - if (!CloseHandle(*sem)) - abort(); -} - - -void uv_sem_post(uv_sem_t* sem) { - if (!ReleaseSemaphore(*sem, 1, NULL)) - abort(); -} - - -void uv_sem_wait(uv_sem_t* sem) { - if (WaitForSingleObject(*sem, INFINITE) != WAIT_OBJECT_0) - abort(); -} - - -int uv_sem_trywait(uv_sem_t* sem) { - DWORD r = WaitForSingleObject(*sem, 0); - - if (r == WAIT_OBJECT_0) - return 0; - - if (r == WAIT_TIMEOUT) - return UV_EAGAIN; - - abort(); - return -1; /* Satisfy the compiler. */ -} - - -int uv_cond_init(uv_cond_t* cond) { - InitializeConditionVariable(&cond->cond_var); - return 0; -} - - -void uv_cond_destroy(uv_cond_t* cond) { - /* nothing to do */ - (void) &cond; -} - - -void uv_cond_signal(uv_cond_t* cond) { - WakeConditionVariable(&cond->cond_var); -} - - -void uv_cond_broadcast(uv_cond_t* cond) { - WakeAllConditionVariable(&cond->cond_var); -} - - -void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) { - if (!SleepConditionVariableCS(&cond->cond_var, mutex, INFINITE)) - abort(); -} - -int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout) { - if (SleepConditionVariableCS(&cond->cond_var, mutex, (DWORD)(timeout / 1e6))) - return 0; - if (GetLastError() != ERROR_TIMEOUT) - abort(); - return UV_ETIMEDOUT; -} - - -int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) { - int err; - - barrier->n = count; - barrier->count = 0; - - err = uv_mutex_init(&barrier->mutex); - if (err) - return err; - - err = uv_sem_init(&barrier->turnstile1, 0); - if (err) - goto error2; - - err = uv_sem_init(&barrier->turnstile2, 1); - if (err) - goto error; - - return 0; - -error: - uv_sem_destroy(&barrier->turnstile1); -error2: - uv_mutex_destroy(&barrier->mutex); - return err; - -} - - -void uv_barrier_destroy(uv_barrier_t* barrier) { - uv_sem_destroy(&barrier->turnstile2); - uv_sem_destroy(&barrier->turnstile1); - uv_mutex_destroy(&barrier->mutex); -} - - -int uv_barrier_wait(uv_barrier_t* barrier) { - int serial_thread; - - uv_mutex_lock(&barrier->mutex); - if (++barrier->count == barrier->n) { - uv_sem_wait(&barrier->turnstile2); - uv_sem_post(&barrier->turnstile1); - } - uv_mutex_unlock(&barrier->mutex); - - uv_sem_wait(&barrier->turnstile1); - uv_sem_post(&barrier->turnstile1); - - uv_mutex_lock(&barrier->mutex); - serial_thread = (--barrier->count == 0); - if (serial_thread) { - uv_sem_wait(&barrier->turnstile1); - uv_sem_post(&barrier->turnstile2); - } - uv_mutex_unlock(&barrier->mutex); - - uv_sem_wait(&barrier->turnstile2); - uv_sem_post(&barrier->turnstile2); - return serial_thread; -} - - -int uv_key_create(uv_key_t* key) { - key->tls_index = TlsAlloc(); - if (key->tls_index == TLS_OUT_OF_INDEXES) - return UV_ENOMEM; - return 0; -} - - -void uv_key_delete(uv_key_t* key) { - if (TlsFree(key->tls_index) == FALSE) - abort(); - key->tls_index = TLS_OUT_OF_INDEXES; -} - - -void* uv_key_get(uv_key_t* key) { - void* value; - - value = TlsGetValue(key->tls_index); - if (value == NULL) - if (GetLastError() != ERROR_SUCCESS) - abort(); - - return value; -} - - -void uv_key_set(uv_key_t* key, void* value) { - if (TlsSetValue(key->tls_index, value) == FALSE) - abort(); -} diff --git a/libuv/src/win/tty.c b/libuv/src/win/tty.c deleted file mode 100644 index 1b9d4f8..0000000 --- a/libuv/src/win/tty.c +++ /dev/null @@ -1,2452 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include -#include - -#if defined(_MSC_VER) && _MSC_VER < 1600 -# include "uv/stdint-msvc2008.h" -#else -# include -#endif - -#ifndef COMMON_LVB_REVERSE_VIDEO -# define COMMON_LVB_REVERSE_VIDEO 0x4000 -#endif - -#include "uv.h" -#include "internal.h" -#include "handle-inl.h" -#include "stream-inl.h" -#include "req-inl.h" - -#ifndef InterlockedOr -# define InterlockedOr _InterlockedOr -#endif - -#define UNICODE_REPLACEMENT_CHARACTER (0xfffd) - -#define ANSI_NORMAL 0x0000 -#define ANSI_ESCAPE_SEEN 0x0002 -#define ANSI_CSI 0x0004 -#define ANSI_ST_CONTROL 0x0008 -#define ANSI_IGNORE 0x0010 -#define ANSI_IN_ARG 0x0020 -#define ANSI_IN_STRING 0x0040 -#define ANSI_BACKSLASH_SEEN 0x0080 -#define ANSI_EXTENSION 0x0100 -#define ANSI_DECSCUSR 0x0200 - -#define MAX_INPUT_BUFFER_LENGTH 8192 -#define MAX_CONSOLE_CHAR 8192 - -#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING -#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 -#endif - -#define CURSOR_SIZE_SMALL 25 -#define CURSOR_SIZE_LARGE 100 - -static void uv_tty_capture_initial_style( - CONSOLE_SCREEN_BUFFER_INFO* screen_buffer_info, - CONSOLE_CURSOR_INFO* cursor_info); -static void uv_tty_update_virtual_window(CONSOLE_SCREEN_BUFFER_INFO* info); -static int uv__cancel_read_console(uv_tty_t* handle); - - -/* Null uv_buf_t */ -static const uv_buf_t uv_null_buf_ = { 0, NULL }; - -enum uv__read_console_status_e { - NOT_STARTED, - IN_PROGRESS, - TRAP_REQUESTED, - COMPLETED -}; - -static volatile LONG uv__read_console_status = NOT_STARTED; -static volatile LONG uv__restore_screen_state; -static CONSOLE_SCREEN_BUFFER_INFO uv__saved_screen_state; - - -/* - * The console virtual window. - * - * Normally cursor movement in windows is relative to the console screen buffer, - * e.g. the application is allowed to overwrite the 'history'. This is very - * inconvenient, it makes absolute cursor movement pretty useless. There is - * also the concept of 'client rect' which is defined by the actual size of - * the console window and the scroll position of the screen buffer, but it's - * very volatile because it changes when the user scrolls. - * - * To make cursor movement behave sensibly we define a virtual window to which - * cursor movement is confined. The virtual window is always as wide as the - * console screen buffer, but it's height is defined by the size of the - * console window. The top of the virtual window aligns with the position - * of the caret when the first stdout/err handle is created, unless that would - * mean that it would extend beyond the bottom of the screen buffer - in that - * that case it's located as far down as possible. - * - * When the user writes a long text or many newlines, such that the output - * reaches beyond the bottom of the virtual window, the virtual window is - * shifted downwards, but not resized. - * - * Since all tty i/o happens on the same console, this window is shared - * between all stdout/stderr handles. - */ - -static int uv_tty_virtual_offset = -1; -static int uv_tty_virtual_height = -1; -static int uv_tty_virtual_width = -1; - -/* The console window size - * We keep this separate from uv_tty_virtual_*. We use those values to only - * handle signalling SIGWINCH - */ - -static HANDLE uv__tty_console_handle = INVALID_HANDLE_VALUE; -static int uv__tty_console_height = -1; -static int uv__tty_console_width = -1; -static HANDLE uv__tty_console_resized = INVALID_HANDLE_VALUE; -static uv_mutex_t uv__tty_console_resize_mutex; - -static DWORD WINAPI uv__tty_console_resize_message_loop_thread(void* param); -static void CALLBACK uv__tty_console_resize_event(HWINEVENTHOOK hWinEventHook, - DWORD event, - HWND hwnd, - LONG idObject, - LONG idChild, - DWORD dwEventThread, - DWORD dwmsEventTime); -static DWORD WINAPI uv__tty_console_resize_watcher_thread(void* param); -static void uv__tty_console_signal_resize(void); - -/* We use a semaphore rather than a mutex or critical section because in some - cases (uv__cancel_read_console) we need take the lock in the main thread and - release it in another thread. Using a semaphore ensures that in such - scenario the main thread will still block when trying to acquire the lock. */ -static uv_sem_t uv_tty_output_lock; - -static WORD uv_tty_default_text_attributes = - FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; - -static char uv_tty_default_fg_color = 7; -static char uv_tty_default_bg_color = 0; -static char uv_tty_default_fg_bright = 0; -static char uv_tty_default_bg_bright = 0; -static char uv_tty_default_inverse = 0; - -static CONSOLE_CURSOR_INFO uv_tty_default_cursor_info; - -/* Determine whether or not ANSI support is enabled. */ -static BOOL uv__need_check_vterm_state = TRUE; -static uv_tty_vtermstate_t uv__vterm_state = UV_TTY_UNSUPPORTED; -static void uv__determine_vterm_state(HANDLE handle); - -void uv_console_init(void) { - if (uv_sem_init(&uv_tty_output_lock, 1)) - abort(); - uv__tty_console_handle = CreateFileW(L"CONOUT$", - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_WRITE, - 0, - OPEN_EXISTING, - 0, - 0); - if (uv__tty_console_handle != INVALID_HANDLE_VALUE) { - CONSOLE_SCREEN_BUFFER_INFO sb_info; - QueueUserWorkItem(uv__tty_console_resize_message_loop_thread, - NULL, - WT_EXECUTELONGFUNCTION); - uv_mutex_init(&uv__tty_console_resize_mutex); - if (GetConsoleScreenBufferInfo(uv__tty_console_handle, &sb_info)) { - uv__tty_console_width = sb_info.dwSize.X; - uv__tty_console_height = sb_info.srWindow.Bottom - sb_info.srWindow.Top + 1; - } - } -} - - -int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, uv_file fd, int unused) { - BOOL readable; - DWORD NumberOfEvents; - HANDLE handle; - CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info; - CONSOLE_CURSOR_INFO cursor_info; - (void)unused; - - uv__once_init(); - handle = (HANDLE) uv__get_osfhandle(fd); - if (handle == INVALID_HANDLE_VALUE) - return UV_EBADF; - - if (fd <= 2) { - /* In order to avoid closing a stdio file descriptor 0-2, duplicate the - * underlying OS handle and forget about the original fd. - * We could also opt to use the original OS handle and just never close it, - * but then there would be no reliable way to cancel pending read operations - * upon close. - */ - if (!DuplicateHandle(INVALID_HANDLE_VALUE, - handle, - INVALID_HANDLE_VALUE, - &handle, - 0, - FALSE, - DUPLICATE_SAME_ACCESS)) - return uv_translate_sys_error(GetLastError()); - fd = -1; - } - - readable = GetNumberOfConsoleInputEvents(handle, &NumberOfEvents); - if (!readable) { - /* Obtain the screen buffer info with the output handle. */ - if (!GetConsoleScreenBufferInfo(handle, &screen_buffer_info)) { - return uv_translate_sys_error(GetLastError()); - } - - /* Obtain the cursor info with the output handle. */ - if (!GetConsoleCursorInfo(handle, &cursor_info)) { - return uv_translate_sys_error(GetLastError()); - } - - /* Obtain the tty_output_lock because the virtual window state is shared - * between all uv_tty_t handles. */ - uv_sem_wait(&uv_tty_output_lock); - - if (uv__need_check_vterm_state) - uv__determine_vterm_state(handle); - - /* Remember the original console text attributes and cursor info. */ - uv_tty_capture_initial_style(&screen_buffer_info, &cursor_info); - - uv_tty_update_virtual_window(&screen_buffer_info); - - uv_sem_post(&uv_tty_output_lock); - } - - - uv_stream_init(loop, (uv_stream_t*) tty, UV_TTY); - uv_connection_init((uv_stream_t*) tty); - - tty->handle = handle; - tty->u.fd = fd; - tty->reqs_pending = 0; - tty->flags |= UV_HANDLE_BOUND; - - if (readable) { - /* Initialize TTY input specific fields. */ - tty->flags |= UV_HANDLE_TTY_READABLE | UV_HANDLE_READABLE; - /* TODO: remove me in v2.x. */ - tty->tty.rd.unused_ = NULL; - tty->tty.rd.read_line_buffer = uv_null_buf_; - tty->tty.rd.read_raw_wait = NULL; - - /* Init keycode-to-vt100 mapper state. */ - tty->tty.rd.last_key_len = 0; - tty->tty.rd.last_key_offset = 0; - tty->tty.rd.last_utf16_high_surrogate = 0; - memset(&tty->tty.rd.last_input_record, 0, sizeof tty->tty.rd.last_input_record); - } else { - /* TTY output specific fields. */ - tty->flags |= UV_HANDLE_WRITABLE; - - /* Init utf8-to-utf16 conversion state. */ - tty->tty.wr.utf8_bytes_left = 0; - tty->tty.wr.utf8_codepoint = 0; - - /* Initialize eol conversion state */ - tty->tty.wr.previous_eol = 0; - - /* Init ANSI parser state. */ - tty->tty.wr.ansi_parser_state = ANSI_NORMAL; - } - - return 0; -} - - -/* Set the default console text attributes based on how the console was - * configured when libuv started. - */ -static void uv_tty_capture_initial_style( - CONSOLE_SCREEN_BUFFER_INFO* screen_buffer_info, - CONSOLE_CURSOR_INFO* cursor_info) { - static int style_captured = 0; - - /* Only do this once. - Assumption: Caller has acquired uv_tty_output_lock. */ - if (style_captured) - return; - - /* Save raw win32 attributes. */ - uv_tty_default_text_attributes = screen_buffer_info->wAttributes; - - /* Convert black text on black background to use white text. */ - if (uv_tty_default_text_attributes == 0) - uv_tty_default_text_attributes = 7; - - /* Convert Win32 attributes to ANSI colors. */ - uv_tty_default_fg_color = 0; - uv_tty_default_bg_color = 0; - uv_tty_default_fg_bright = 0; - uv_tty_default_bg_bright = 0; - uv_tty_default_inverse = 0; - - if (uv_tty_default_text_attributes & FOREGROUND_RED) - uv_tty_default_fg_color |= 1; - - if (uv_tty_default_text_attributes & FOREGROUND_GREEN) - uv_tty_default_fg_color |= 2; - - if (uv_tty_default_text_attributes & FOREGROUND_BLUE) - uv_tty_default_fg_color |= 4; - - if (uv_tty_default_text_attributes & BACKGROUND_RED) - uv_tty_default_bg_color |= 1; - - if (uv_tty_default_text_attributes & BACKGROUND_GREEN) - uv_tty_default_bg_color |= 2; - - if (uv_tty_default_text_attributes & BACKGROUND_BLUE) - uv_tty_default_bg_color |= 4; - - if (uv_tty_default_text_attributes & FOREGROUND_INTENSITY) - uv_tty_default_fg_bright = 1; - - if (uv_tty_default_text_attributes & BACKGROUND_INTENSITY) - uv_tty_default_bg_bright = 1; - - if (uv_tty_default_text_attributes & COMMON_LVB_REVERSE_VIDEO) - uv_tty_default_inverse = 1; - - /* Save the cursor size and the cursor state. */ - uv_tty_default_cursor_info = *cursor_info; - - style_captured = 1; -} - - -int uv_tty_set_mode(uv_tty_t* tty, uv_tty_mode_t mode) { - DWORD flags; - unsigned char was_reading; - uv_alloc_cb alloc_cb; - uv_read_cb read_cb; - int err; - - if (!(tty->flags & UV_HANDLE_TTY_READABLE)) { - return UV_EINVAL; - } - - if (!!mode == !!(tty->flags & UV_HANDLE_TTY_RAW)) { - return 0; - } - - switch (mode) { - case UV_TTY_MODE_NORMAL: - flags = ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT; - break; - case UV_TTY_MODE_RAW: - flags = ENABLE_WINDOW_INPUT; - break; - case UV_TTY_MODE_IO: - return UV_ENOTSUP; - default: - return UV_EINVAL; - } - - /* If currently reading, stop, and restart reading. */ - if (tty->flags & UV_HANDLE_READING) { - was_reading = 1; - alloc_cb = tty->alloc_cb; - read_cb = tty->read_cb; - err = uv_tty_read_stop(tty); - if (err) { - return uv_translate_sys_error(err); - } - } else { - was_reading = 0; - alloc_cb = NULL; - read_cb = NULL; - } - - uv_sem_wait(&uv_tty_output_lock); - if (!SetConsoleMode(tty->handle, flags)) { - err = uv_translate_sys_error(GetLastError()); - uv_sem_post(&uv_tty_output_lock); - return err; - } - uv_sem_post(&uv_tty_output_lock); - - /* Update flag. */ - tty->flags &= ~UV_HANDLE_TTY_RAW; - tty->flags |= mode ? UV_HANDLE_TTY_RAW : 0; - - /* If we just stopped reading, restart. */ - if (was_reading) { - err = uv_tty_read_start(tty, alloc_cb, read_cb); - if (err) { - return uv_translate_sys_error(err); - } - } - - return 0; -} - - -int uv_tty_get_winsize(uv_tty_t* tty, int* width, int* height) { - CONSOLE_SCREEN_BUFFER_INFO info; - - if (!GetConsoleScreenBufferInfo(tty->handle, &info)) { - return uv_translate_sys_error(GetLastError()); - } - - uv_sem_wait(&uv_tty_output_lock); - uv_tty_update_virtual_window(&info); - uv_sem_post(&uv_tty_output_lock); - - *width = uv_tty_virtual_width; - *height = uv_tty_virtual_height; - - return 0; -} - - -static void CALLBACK uv_tty_post_raw_read(void* data, BOOLEAN didTimeout) { - uv_loop_t* loop; - uv_tty_t* handle; - uv_req_t* req; - - assert(data); - assert(!didTimeout); - - req = (uv_req_t*) data; - handle = (uv_tty_t*) req->data; - loop = handle->loop; - - UnregisterWait(handle->tty.rd.read_raw_wait); - handle->tty.rd.read_raw_wait = NULL; - - SET_REQ_SUCCESS(req); - POST_COMPLETION_FOR_REQ(loop, req); -} - - -static void uv_tty_queue_read_raw(uv_loop_t* loop, uv_tty_t* handle) { - uv_read_t* req; - BOOL r; - - assert(handle->flags & UV_HANDLE_READING); - assert(!(handle->flags & UV_HANDLE_READ_PENDING)); - - assert(handle->handle && handle->handle != INVALID_HANDLE_VALUE); - - handle->tty.rd.read_line_buffer = uv_null_buf_; - - req = &handle->read_req; - memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); - - r = RegisterWaitForSingleObject(&handle->tty.rd.read_raw_wait, - handle->handle, - uv_tty_post_raw_read, - (void*) req, - INFINITE, - WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE); - if (!r) { - handle->tty.rd.read_raw_wait = NULL; - SET_REQ_ERROR(req, GetLastError()); - uv_insert_pending_req(loop, (uv_req_t*)req); - } - - handle->flags |= UV_HANDLE_READ_PENDING; - handle->reqs_pending++; -} - - -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; - WCHAR utf16[MAX_INPUT_BUFFER_LENGTH / 3]; - DWORD chars, read_chars; - LONG status; - COORD pos; - BOOL read_console_success; - - assert(data); - - req = (uv_req_t*) data; - handle = (uv_tty_t*) req->data; - loop = handle->loop; - - assert(handle->tty.rd.read_line_buffer.base != NULL); - assert(handle->tty.rd.read_line_buffer.len > 0); - - /* ReadConsole can't handle big buffers. */ - if (handle->tty.rd.read_line_buffer.len < MAX_INPUT_BUFFER_LENGTH) { - bytes = handle->tty.rd.read_line_buffer.len; - } else { - bytes = MAX_INPUT_BUFFER_LENGTH; - } - - /* At last, unicode! One utf-16 codeunit never takes more than 3 utf-8 - * codeunits to encode. */ - chars = bytes / 3; - - status = InterlockedExchange(&uv__read_console_status, IN_PROGRESS); - if (status == TRAP_REQUESTED) { - SET_REQ_SUCCESS(req); - InterlockedExchange(&uv__read_console_status, COMPLETED); - req->u.io.overlapped.InternalHigh = 0; - POST_COMPLETION_FOR_REQ(loop, req); - return 0; - } - - read_console_success = ReadConsoleW(handle->handle, - (void*) utf16, - chars, - &read_chars, - NULL); - - if (read_console_success) { - read_bytes = WideCharToMultiByte(CP_UTF8, - 0, - utf16, - read_chars, - handle->tty.rd.read_line_buffer.base, - bytes, - NULL, - NULL); - SET_REQ_SUCCESS(req); - req->u.io.overlapped.InternalHigh = read_bytes; - } else { - SET_REQ_ERROR(req, GetLastError()); - } - - status = InterlockedExchange(&uv__read_console_status, COMPLETED); - - if (status == TRAP_REQUESTED) { - /* If we canceled the read by sending a VK_RETURN event, restore the - screen state to undo the visual effect of the VK_RETURN */ - if (read_console_success && InterlockedOr(&uv__restore_screen_state, 0)) { - HANDLE active_screen_buffer; - active_screen_buffer = CreateFileA("conout$", - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - if (active_screen_buffer != INVALID_HANDLE_VALUE) { - pos = uv__saved_screen_state.dwCursorPosition; - - /* If the cursor was at the bottom line of the screen buffer, the - VK_RETURN would have caused the buffer contents to scroll up by one - line. The right position to reset the cursor to is therefore one line - higher */ - if (pos.Y == uv__saved_screen_state.dwSize.Y - 1) - pos.Y--; - - SetConsoleCursorPosition(active_screen_buffer, pos); - CloseHandle(active_screen_buffer); - } - } - uv_sem_post(&uv_tty_output_lock); - } - POST_COMPLETION_FOR_REQ(loop, req); - return 0; -} - - -static void uv_tty_queue_read_line(uv_loop_t* loop, uv_tty_t* handle) { - uv_read_t* req; - BOOL r; - - assert(handle->flags & UV_HANDLE_READING); - assert(!(handle->flags & UV_HANDLE_READ_PENDING)); - assert(handle->handle && handle->handle != INVALID_HANDLE_VALUE); - - req = &handle->read_req; - memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); - - handle->tty.rd.read_line_buffer = uv_buf_init(NULL, 0); - handle->alloc_cb((uv_handle_t*) handle, 8192, &handle->tty.rd.read_line_buffer); - if (handle->tty.rd.read_line_buffer.base == NULL || - handle->tty.rd.read_line_buffer.len == 0) { - handle->read_cb((uv_stream_t*) handle, - UV_ENOBUFS, - &handle->tty.rd.read_line_buffer); - return; - } - assert(handle->tty.rd.read_line_buffer.base != NULL); - - /* Reset flags No locking is required since there cannot be a line read - in progress. We are also relying on the memory barrier provided by - QueueUserWorkItem*/ - uv__restore_screen_state = FALSE; - uv__read_console_status = NOT_STARTED; - r = QueueUserWorkItem(uv_tty_line_read_thread, - (void*) req, - WT_EXECUTELONGFUNCTION); - if (!r) { - SET_REQ_ERROR(req, GetLastError()); - uv_insert_pending_req(loop, (uv_req_t*)req); - } - - handle->flags |= UV_HANDLE_READ_PENDING; - handle->reqs_pending++; -} - - -static void uv_tty_queue_read(uv_loop_t* loop, uv_tty_t* handle) { - if (handle->flags & UV_HANDLE_TTY_RAW) { - uv_tty_queue_read_raw(loop, handle); - } else { - uv_tty_queue_read_line(loop, handle); - } -} - - -static const char* get_vt100_fn_key(DWORD code, char shift, char ctrl, - size_t* len) { -#define VK_CASE(vk, normal_str, shift_str, ctrl_str, shift_ctrl_str) \ - case (vk): \ - if (shift && ctrl) { \ - *len = sizeof shift_ctrl_str; \ - return "\033" shift_ctrl_str; \ - } else if (shift) { \ - *len = sizeof shift_str ; \ - return "\033" shift_str; \ - } else if (ctrl) { \ - *len = sizeof ctrl_str; \ - return "\033" ctrl_str; \ - } else { \ - *len = sizeof normal_str; \ - return "\033" normal_str; \ - } - - switch (code) { - /* These mappings are the same as Cygwin's. Unmodified and alt-modified - * keypad keys comply with linux console, modifiers comply with xterm - * modifier usage. F1. f12 and shift-f1. f10 comply with linux console, f6. - * f12 with and without modifiers comply with rxvt. */ - VK_CASE(VK_INSERT, "[2~", "[2;2~", "[2;5~", "[2;6~") - VK_CASE(VK_END, "[4~", "[4;2~", "[4;5~", "[4;6~") - VK_CASE(VK_DOWN, "[B", "[1;2B", "[1;5B", "[1;6B") - VK_CASE(VK_NEXT, "[6~", "[6;2~", "[6;5~", "[6;6~") - VK_CASE(VK_LEFT, "[D", "[1;2D", "[1;5D", "[1;6D") - VK_CASE(VK_CLEAR, "[G", "[1;2G", "[1;5G", "[1;6G") - VK_CASE(VK_RIGHT, "[C", "[1;2C", "[1;5C", "[1;6C") - VK_CASE(VK_UP, "[A", "[1;2A", "[1;5A", "[1;6A") - VK_CASE(VK_HOME, "[1~", "[1;2~", "[1;5~", "[1;6~") - VK_CASE(VK_PRIOR, "[5~", "[5;2~", "[5;5~", "[5;6~") - VK_CASE(VK_DELETE, "[3~", "[3;2~", "[3;5~", "[3;6~") - VK_CASE(VK_NUMPAD0, "[2~", "[2;2~", "[2;5~", "[2;6~") - VK_CASE(VK_NUMPAD1, "[4~", "[4;2~", "[4;5~", "[4;6~") - VK_CASE(VK_NUMPAD2, "[B", "[1;2B", "[1;5B", "[1;6B") - VK_CASE(VK_NUMPAD3, "[6~", "[6;2~", "[6;5~", "[6;6~") - VK_CASE(VK_NUMPAD4, "[D", "[1;2D", "[1;5D", "[1;6D") - VK_CASE(VK_NUMPAD5, "[G", "[1;2G", "[1;5G", "[1;6G") - VK_CASE(VK_NUMPAD6, "[C", "[1;2C", "[1;5C", "[1;6C") - VK_CASE(VK_NUMPAD7, "[A", "[1;2A", "[1;5A", "[1;6A") - VK_CASE(VK_NUMPAD8, "[1~", "[1;2~", "[1;5~", "[1;6~") - VK_CASE(VK_NUMPAD9, "[5~", "[5;2~", "[5;5~", "[5;6~") - VK_CASE(VK_DECIMAL, "[3~", "[3;2~", "[3;5~", "[3;6~") - VK_CASE(VK_F1, "[[A", "[23~", "[11^", "[23^" ) - VK_CASE(VK_F2, "[[B", "[24~", "[12^", "[24^" ) - VK_CASE(VK_F3, "[[C", "[25~", "[13^", "[25^" ) - VK_CASE(VK_F4, "[[D", "[26~", "[14^", "[26^" ) - VK_CASE(VK_F5, "[[E", "[28~", "[15^", "[28^" ) - VK_CASE(VK_F6, "[17~", "[29~", "[17^", "[29^" ) - VK_CASE(VK_F7, "[18~", "[31~", "[18^", "[31^" ) - VK_CASE(VK_F8, "[19~", "[32~", "[19^", "[32^" ) - VK_CASE(VK_F9, "[20~", "[33~", "[20^", "[33^" ) - VK_CASE(VK_F10, "[21~", "[34~", "[21^", "[34^" ) - VK_CASE(VK_F11, "[23~", "[23$", "[23^", "[23@" ) - VK_CASE(VK_F12, "[24~", "[24$", "[24^", "[24@" ) - - default: - *len = 0; - return NULL; - } -#undef VK_CASE -} - - -void uv_process_tty_read_raw_req(uv_loop_t* loop, uv_tty_t* handle, - uv_req_t* req) { - /* Shortcut for handle->tty.rd.last_input_record.Event.KeyEvent. */ -#define KEV handle->tty.rd.last_input_record.Event.KeyEvent - - DWORD records_left, records_read; - uv_buf_t buf; - off_t buf_used; - - assert(handle->type == UV_TTY); - assert(handle->flags & UV_HANDLE_TTY_READABLE); - handle->flags &= ~UV_HANDLE_READ_PENDING; - - if (!(handle->flags & UV_HANDLE_READING) || - !(handle->flags & UV_HANDLE_TTY_RAW)) { - goto out; - } - - if (!REQ_SUCCESS(req)) { - /* An error occurred while waiting for the event. */ - if ((handle->flags & UV_HANDLE_READING)) { - handle->flags &= ~UV_HANDLE_READING; - handle->read_cb((uv_stream_t*)handle, - uv_translate_sys_error(GET_REQ_ERROR(req)), - &uv_null_buf_); - } - goto out; - } - - /* Fetch the number of events */ - if (!GetNumberOfConsoleInputEvents(handle->handle, &records_left)) { - handle->flags &= ~UV_HANDLE_READING; - DECREASE_ACTIVE_COUNT(loop, handle); - handle->read_cb((uv_stream_t*)handle, - uv_translate_sys_error(GetLastError()), - &uv_null_buf_); - goto out; - } - - /* Windows sends a lot of events that we're not interested in, so buf will be - * allocated on demand, when there's actually something to emit. */ - buf = uv_null_buf_; - buf_used = 0; - - while ((records_left > 0 || handle->tty.rd.last_key_len > 0) && - (handle->flags & UV_HANDLE_READING)) { - if (handle->tty.rd.last_key_len == 0) { - /* Read the next input record */ - if (!ReadConsoleInputW(handle->handle, - &handle->tty.rd.last_input_record, - 1, - &records_read)) { - handle->flags &= ~UV_HANDLE_READING; - DECREASE_ACTIVE_COUNT(loop, handle); - handle->read_cb((uv_stream_t*) handle, - uv_translate_sys_error(GetLastError()), - &buf); - goto out; - } - records_left--; - - /* We might be not subscribed to EVENT_CONSOLE_LAYOUT or we might be - * running under some TTY emulator that does not send those events. */ - if (handle->tty.rd.last_input_record.EventType == WINDOW_BUFFER_SIZE_EVENT) { - uv__tty_console_signal_resize(); - } - - /* Ignore other events that are not key events. */ - if (handle->tty.rd.last_input_record.EventType != KEY_EVENT) { - continue; - } - - /* Ignore keyup events, unless the left alt key was held and a valid - * unicode character was emitted. */ - if (!KEV.bKeyDown && - (KEV.wVirtualKeyCode != VK_MENU || - KEV.uChar.UnicodeChar == 0)) { - continue; - } - - /* Ignore keypresses to numpad number keys if the left alt is held - * because the user is composing a character, or windows simulating this. - */ - if ((KEV.dwControlKeyState & LEFT_ALT_PRESSED) && - !(KEV.dwControlKeyState & ENHANCED_KEY) && - (KEV.wVirtualKeyCode == VK_INSERT || - KEV.wVirtualKeyCode == VK_END || - KEV.wVirtualKeyCode == VK_DOWN || - KEV.wVirtualKeyCode == VK_NEXT || - KEV.wVirtualKeyCode == VK_LEFT || - KEV.wVirtualKeyCode == VK_CLEAR || - KEV.wVirtualKeyCode == VK_RIGHT || - KEV.wVirtualKeyCode == VK_HOME || - KEV.wVirtualKeyCode == VK_UP || - KEV.wVirtualKeyCode == VK_PRIOR || - KEV.wVirtualKeyCode == VK_NUMPAD0 || - KEV.wVirtualKeyCode == VK_NUMPAD1 || - KEV.wVirtualKeyCode == VK_NUMPAD2 || - KEV.wVirtualKeyCode == VK_NUMPAD3 || - KEV.wVirtualKeyCode == VK_NUMPAD4 || - KEV.wVirtualKeyCode == VK_NUMPAD5 || - KEV.wVirtualKeyCode == VK_NUMPAD6 || - KEV.wVirtualKeyCode == VK_NUMPAD7 || - KEV.wVirtualKeyCode == VK_NUMPAD8 || - KEV.wVirtualKeyCode == VK_NUMPAD9)) { - continue; - } - - if (KEV.uChar.UnicodeChar != 0) { - int prefix_len, char_len; - - /* Character key pressed */ - if (KEV.uChar.UnicodeChar >= 0xD800 && - KEV.uChar.UnicodeChar < 0xDC00) { - /* UTF-16 high surrogate */ - handle->tty.rd.last_utf16_high_surrogate = KEV.uChar.UnicodeChar; - continue; - } - - /* Prefix with \u033 if alt was held, but alt was not used as part a - * compose sequence. */ - if ((KEV.dwControlKeyState & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED)) - && !(KEV.dwControlKeyState & (LEFT_CTRL_PRESSED | - RIGHT_CTRL_PRESSED)) && KEV.bKeyDown) { - handle->tty.rd.last_key[0] = '\033'; - prefix_len = 1; - } else { - prefix_len = 0; - } - - if (KEV.uChar.UnicodeChar >= 0xDC00 && - KEV.uChar.UnicodeChar < 0xE000) { - /* 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); - } 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); - } - - /* 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) { - handle->flags &= ~UV_HANDLE_READING; - DECREASE_ACTIVE_COUNT(loop, handle); - handle->read_cb((uv_stream_t*) handle, - uv_translate_sys_error(GetLastError()), - &buf); - goto out; - } - - handle->tty.rd.last_key_len = (unsigned char) (prefix_len + char_len); - handle->tty.rd.last_key_offset = 0; - continue; - - } else { - /* Function key pressed */ - const char* vt100; - size_t prefix_len, vt100_len; - - vt100 = get_vt100_fn_key(KEV.wVirtualKeyCode, - !!(KEV.dwControlKeyState & SHIFT_PRESSED), - !!(KEV.dwControlKeyState & ( - LEFT_CTRL_PRESSED | - RIGHT_CTRL_PRESSED)), - &vt100_len); - - /* If we were unable to map to a vt100 sequence, just ignore. */ - if (!vt100) { - continue; - } - - /* Prefix with \x033 when the alt key was held. */ - if (KEV.dwControlKeyState & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED)) { - handle->tty.rd.last_key[0] = '\033'; - prefix_len = 1; - } else { - prefix_len = 0; - } - - /* Copy the vt100 sequence to the handle buffer. */ - assert(prefix_len + vt100_len < sizeof handle->tty.rd.last_key); - memcpy(&handle->tty.rd.last_key[prefix_len], vt100, vt100_len); - - handle->tty.rd.last_key_len = (unsigned char) (prefix_len + vt100_len); - handle->tty.rd.last_key_offset = 0; - continue; - } - } else { - /* Copy any bytes left from the last keypress to the user buffer. */ - if (handle->tty.rd.last_key_offset < handle->tty.rd.last_key_len) { - /* Allocate a buffer if needed */ - if (buf_used == 0) { - buf = uv_buf_init(NULL, 0); - handle->alloc_cb((uv_handle_t*) handle, 1024, &buf); - if (buf.base == NULL || buf.len == 0) { - handle->read_cb((uv_stream_t*) handle, UV_ENOBUFS, &buf); - goto out; - } - assert(buf.base != NULL); - } - - buf.base[buf_used++] = handle->tty.rd.last_key[handle->tty.rd.last_key_offset++]; - - /* If the buffer is full, emit it */ - if ((size_t) buf_used == buf.len) { - handle->read_cb((uv_stream_t*) handle, buf_used, &buf); - buf = uv_null_buf_; - buf_used = 0; - } - - continue; - } - - /* Apply dwRepeat from the last input record. */ - if (--KEV.wRepeatCount > 0) { - handle->tty.rd.last_key_offset = 0; - continue; - } - - handle->tty.rd.last_key_len = 0; - continue; - } - } - - /* Send the buffer back to the user */ - if (buf_used > 0) { - handle->read_cb((uv_stream_t*) handle, buf_used, &buf); - } - - out: - /* Wait for more input events. */ - if ((handle->flags & UV_HANDLE_READING) && - !(handle->flags & UV_HANDLE_READ_PENDING)) { - uv_tty_queue_read(loop, handle); - } - - DECREASE_PENDING_REQ_COUNT(handle); - -#undef KEV -} - - - -void uv_process_tty_read_line_req(uv_loop_t* loop, uv_tty_t* handle, - uv_req_t* req) { - uv_buf_t buf; - - assert(handle->type == UV_TTY); - assert(handle->flags & UV_HANDLE_TTY_READABLE); - - buf = handle->tty.rd.read_line_buffer; - - handle->flags &= ~UV_HANDLE_READ_PENDING; - handle->tty.rd.read_line_buffer = uv_null_buf_; - - if (!REQ_SUCCESS(req)) { - /* Read was not successful */ - if (handle->flags & UV_HANDLE_READING) { - /* Real error */ - handle->flags &= ~UV_HANDLE_READING; - DECREASE_ACTIVE_COUNT(loop, handle); - handle->read_cb((uv_stream_t*) handle, - uv_translate_sys_error(GET_REQ_ERROR(req)), - &buf); - } - } else { - if (!(handle->flags & UV_HANDLE_CANCELLATION_PENDING) && - req->u.io.overlapped.InternalHigh != 0) { - /* Read successful. TODO: read unicode, convert to utf-8 */ - DWORD bytes = req->u.io.overlapped.InternalHigh; - handle->read_cb((uv_stream_t*) handle, bytes, &buf); - } - handle->flags &= ~UV_HANDLE_CANCELLATION_PENDING; - } - - /* Wait for more input events. */ - if ((handle->flags & UV_HANDLE_READING) && - !(handle->flags & UV_HANDLE_READ_PENDING)) { - uv_tty_queue_read(loop, handle); - } - - DECREASE_PENDING_REQ_COUNT(handle); -} - - -void uv_process_tty_read_req(uv_loop_t* loop, uv_tty_t* handle, - uv_req_t* req) { - assert(handle->type == UV_TTY); - assert(handle->flags & UV_HANDLE_TTY_READABLE); - - /* If the read_line_buffer member is zero, it must have been an raw read. - * Otherwise it was a line-buffered read. FIXME: This is quite obscure. Use a - * flag or something. */ - if (handle->tty.rd.read_line_buffer.len == 0) { - uv_process_tty_read_raw_req(loop, handle, req); - } else { - uv_process_tty_read_line_req(loop, handle, req); - } -} - - -int uv_tty_read_start(uv_tty_t* handle, uv_alloc_cb alloc_cb, - uv_read_cb read_cb) { - uv_loop_t* loop = handle->loop; - - if (!(handle->flags & UV_HANDLE_TTY_READABLE)) { - return ERROR_INVALID_PARAMETER; - } - - handle->flags |= UV_HANDLE_READING; - INCREASE_ACTIVE_COUNT(loop, handle); - handle->read_cb = read_cb; - handle->alloc_cb = alloc_cb; - - /* If reading was stopped and then started again, there could still be a read - * request pending. */ - if (handle->flags & UV_HANDLE_READ_PENDING) { - return 0; - } - - /* Maybe the user stopped reading half-way while processing key events. - * Short-circuit if this could be the case. */ - if (handle->tty.rd.last_key_len > 0) { - SET_REQ_SUCCESS(&handle->read_req); - uv_insert_pending_req(handle->loop, (uv_req_t*) &handle->read_req); - /* Make sure no attempt is made to insert it again until it's handled. */ - handle->flags |= UV_HANDLE_READ_PENDING; - handle->reqs_pending++; - return 0; - } - - uv_tty_queue_read(loop, handle); - - return 0; -} - - -int uv_tty_read_stop(uv_tty_t* handle) { - INPUT_RECORD record; - DWORD written, err; - - handle->flags &= ~UV_HANDLE_READING; - DECREASE_ACTIVE_COUNT(handle->loop, handle); - - if (!(handle->flags & UV_HANDLE_READ_PENDING)) - return 0; - - if (handle->flags & UV_HANDLE_TTY_RAW) { - /* Cancel raw read. Write some bullshit event to force the console wait to - * return. */ - memset(&record, 0, sizeof record); - record.EventType = FOCUS_EVENT; - if (!WriteConsoleInputW(handle->handle, &record, 1, &written)) { - return GetLastError(); - } - } else if (!(handle->flags & UV_HANDLE_CANCELLATION_PENDING)) { - /* Cancel line-buffered read if not already pending */ - err = uv__cancel_read_console(handle); - if (err) - return err; - - handle->flags |= UV_HANDLE_CANCELLATION_PENDING; - } - - return 0; -} - -static int uv__cancel_read_console(uv_tty_t* handle) { - HANDLE active_screen_buffer = INVALID_HANDLE_VALUE; - INPUT_RECORD record; - DWORD written; - DWORD err = 0; - LONG status; - - assert(!(handle->flags & UV_HANDLE_CANCELLATION_PENDING)); - - /* Hold the output lock during the cancellation, to ensure that further - writes don't interfere with the screen state. It will be the ReadConsole - thread's responsibility to release the lock. */ - uv_sem_wait(&uv_tty_output_lock); - status = InterlockedExchange(&uv__read_console_status, TRAP_REQUESTED); - if (status != IN_PROGRESS) { - /* Either we have managed to set a trap for the other thread before - ReadConsole is called, or ReadConsole has returned because the user - has pressed ENTER. In either case, there is nothing else to do. */ - uv_sem_post(&uv_tty_output_lock); - return 0; - } - - /* Save screen state before sending the VK_RETURN event */ - active_screen_buffer = CreateFileA("conout$", - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - - if (active_screen_buffer != INVALID_HANDLE_VALUE && - GetConsoleScreenBufferInfo(active_screen_buffer, - &uv__saved_screen_state)) { - InterlockedOr(&uv__restore_screen_state, 1); - } - - /* Write enter key event to force the console wait to return. */ - record.EventType = KEY_EVENT; - record.Event.KeyEvent.bKeyDown = TRUE; - record.Event.KeyEvent.wRepeatCount = 1; - record.Event.KeyEvent.wVirtualKeyCode = VK_RETURN; - record.Event.KeyEvent.wVirtualScanCode = - MapVirtualKeyW(VK_RETURN, MAPVK_VK_TO_VSC); - record.Event.KeyEvent.uChar.UnicodeChar = L'\r'; - record.Event.KeyEvent.dwControlKeyState = 0; - if (!WriteConsoleInputW(handle->handle, &record, 1, &written)) - err = GetLastError(); - - if (active_screen_buffer != INVALID_HANDLE_VALUE) - CloseHandle(active_screen_buffer); - - return err; -} - - -static void uv_tty_update_virtual_window(CONSOLE_SCREEN_BUFFER_INFO* info) { - uv_tty_virtual_width = info->dwSize.X; - uv_tty_virtual_height = info->srWindow.Bottom - info->srWindow.Top + 1; - - /* Recompute virtual window offset row. */ - if (uv_tty_virtual_offset == -1) { - uv_tty_virtual_offset = info->dwCursorPosition.Y; - } else if (uv_tty_virtual_offset < info->dwCursorPosition.Y - - uv_tty_virtual_height + 1) { - /* If suddenly find the cursor outside of the virtual window, it must have - * somehow scrolled. Update the virtual window offset. */ - uv_tty_virtual_offset = info->dwCursorPosition.Y - - uv_tty_virtual_height + 1; - } - if (uv_tty_virtual_offset + uv_tty_virtual_height > info->dwSize.Y) { - uv_tty_virtual_offset = info->dwSize.Y - uv_tty_virtual_height; - } - if (uv_tty_virtual_offset < 0) { - uv_tty_virtual_offset = 0; - } -} - - -static COORD uv_tty_make_real_coord(uv_tty_t* handle, - CONSOLE_SCREEN_BUFFER_INFO* info, int x, unsigned char x_relative, int y, - unsigned char y_relative) { - COORD result; - - uv_tty_update_virtual_window(info); - - /* Adjust y position */ - if (y_relative) { - y = info->dwCursorPosition.Y + y; - } else { - y = uv_tty_virtual_offset + y; - } - /* Clip y to virtual client rectangle */ - if (y < uv_tty_virtual_offset) { - y = uv_tty_virtual_offset; - } else if (y >= uv_tty_virtual_offset + uv_tty_virtual_height) { - y = uv_tty_virtual_offset + uv_tty_virtual_height - 1; - } - - /* Adjust x */ - if (x_relative) { - x = info->dwCursorPosition.X + x; - } - /* Clip x */ - if (x < 0) { - x = 0; - } else if (x >= uv_tty_virtual_width) { - x = uv_tty_virtual_width - 1; - } - - result.X = (unsigned short) x; - result.Y = (unsigned short) y; - return result; -} - - -static int uv_tty_emit_text(uv_tty_t* handle, WCHAR buffer[], DWORD length, - DWORD* error) { - DWORD written; - - if (*error != ERROR_SUCCESS) { - return -1; - } - - if (!WriteConsoleW(handle->handle, - (void*) buffer, - length, - &written, - NULL)) { - *error = GetLastError(); - return -1; - } - - return 0; -} - - -static int uv_tty_move_caret(uv_tty_t* handle, int x, unsigned char x_relative, - int y, unsigned char y_relative, DWORD* error) { - CONSOLE_SCREEN_BUFFER_INFO info; - COORD pos; - - if (*error != ERROR_SUCCESS) { - return -1; - } - - retry: - if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { - *error = GetLastError(); - } - - pos = uv_tty_make_real_coord(handle, &info, x, x_relative, y, y_relative); - - if (!SetConsoleCursorPosition(handle->handle, pos)) { - if (GetLastError() == ERROR_INVALID_PARAMETER) { - /* The console may be resized - retry */ - goto retry; - } else { - *error = GetLastError(); - return -1; - } - } - - return 0; -} - - -static int uv_tty_reset(uv_tty_t* handle, DWORD* error) { - const COORD origin = {0, 0}; - const WORD char_attrs = uv_tty_default_text_attributes; - CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info; - DWORD count, written; - - if (*error != ERROR_SUCCESS) { - return -1; - } - - /* Reset original text attributes. */ - if (!SetConsoleTextAttribute(handle->handle, char_attrs)) { - *error = GetLastError(); - return -1; - } - - /* Move the cursor position to (0, 0). */ - if (!SetConsoleCursorPosition(handle->handle, origin)) { - *error = GetLastError(); - return -1; - } - - /* Clear the screen buffer. */ - retry: - if (!GetConsoleScreenBufferInfo(handle->handle, &screen_buffer_info)) { - *error = GetLastError(); - return -1; - } - - count = screen_buffer_info.dwSize.X * screen_buffer_info.dwSize.Y; - - if (!(FillConsoleOutputCharacterW(handle->handle, - L'\x20', - count, - origin, - &written) && - FillConsoleOutputAttribute(handle->handle, - char_attrs, - written, - origin, - &written))) { - if (GetLastError() == ERROR_INVALID_PARAMETER) { - /* The console may be resized - retry */ - goto retry; - } else { - *error = GetLastError(); - return -1; - } - } - - /* Move the virtual window up to the top. */ - uv_tty_virtual_offset = 0; - uv_tty_update_virtual_window(&screen_buffer_info); - - /* Reset the cursor size and the cursor state. */ - if (!SetConsoleCursorInfo(handle->handle, &uv_tty_default_cursor_info)) { - *error = GetLastError(); - return -1; - } - - return 0; -} - - -static int uv_tty_clear(uv_tty_t* handle, int dir, char entire_screen, - DWORD* error) { - CONSOLE_SCREEN_BUFFER_INFO info; - COORD start, end; - DWORD count, written; - - int x1, x2, y1, y2; - int x1r, x2r, y1r, y2r; - - if (*error != ERROR_SUCCESS) { - return -1; - } - - if (dir == 0) { - /* Clear from current position */ - x1 = 0; - x1r = 1; - } else { - /* Clear from column 0 */ - x1 = 0; - x1r = 0; - } - - if (dir == 1) { - /* Clear to current position */ - x2 = 0; - x2r = 1; - } else { - /* Clear to end of row. We pretend the console is 65536 characters wide, - * uv_tty_make_real_coord will clip it to the actual console width. */ - x2 = 0xffff; - x2r = 0; - } - - if (!entire_screen) { - /* Stay on our own row */ - y1 = y2 = 0; - y1r = y2r = 1; - } else { - /* Apply columns direction to row */ - y1 = x1; - y1r = x1r; - y2 = x2; - y2r = x2r; - } - - retry: - if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { - *error = GetLastError(); - return -1; - } - - start = uv_tty_make_real_coord(handle, &info, x1, x1r, y1, y1r); - end = uv_tty_make_real_coord(handle, &info, x2, x2r, y2, y2r); - count = (end.Y * info.dwSize.X + end.X) - - (start.Y * info.dwSize.X + start.X) + 1; - - if (!(FillConsoleOutputCharacterW(handle->handle, - L'\x20', - count, - start, - &written) && - FillConsoleOutputAttribute(handle->handle, - info.wAttributes, - written, - start, - &written))) { - if (GetLastError() == ERROR_INVALID_PARAMETER) { - /* The console may be resized - retry */ - goto retry; - } else { - *error = GetLastError(); - return -1; - } - } - - return 0; -} - -#define FLIP_FGBG \ - do { \ - WORD fg = info.wAttributes & 0xF; \ - WORD bg = info.wAttributes & 0xF0; \ - info.wAttributes &= 0xFF00; \ - info.wAttributes |= fg << 4; \ - info.wAttributes |= bg >> 4; \ - } while (0) - -static int uv_tty_set_style(uv_tty_t* handle, DWORD* error) { - unsigned short argc = handle->tty.wr.ansi_csi_argc; - unsigned short* argv = handle->tty.wr.ansi_csi_argv; - int i; - CONSOLE_SCREEN_BUFFER_INFO info; - - char fg_color = -1, bg_color = -1; - char fg_bright = -1, bg_bright = -1; - char inverse = -1; - - if (argc == 0) { - /* Reset mode */ - fg_color = uv_tty_default_fg_color; - bg_color = uv_tty_default_bg_color; - fg_bright = uv_tty_default_fg_bright; - bg_bright = uv_tty_default_bg_bright; - inverse = uv_tty_default_inverse; - } - - for (i = 0; i < argc; i++) { - short arg = argv[i]; - - if (arg == 0) { - /* Reset mode */ - fg_color = uv_tty_default_fg_color; - bg_color = uv_tty_default_bg_color; - fg_bright = uv_tty_default_fg_bright; - bg_bright = uv_tty_default_bg_bright; - inverse = uv_tty_default_inverse; - - } else if (arg == 1) { - /* Foreground bright on */ - fg_bright = 1; - - } else if (arg == 2) { - /* Both bright off */ - fg_bright = 0; - bg_bright = 0; - - } else if (arg == 5) { - /* Background bright on */ - bg_bright = 1; - - } else if (arg == 7) { - /* Inverse: on */ - inverse = 1; - - } else if (arg == 21 || arg == 22) { - /* Foreground bright off */ - fg_bright = 0; - - } else if (arg == 25) { - /* Background bright off */ - bg_bright = 0; - - } else if (arg == 27) { - /* Inverse: off */ - inverse = 0; - - } else if (arg >= 30 && arg <= 37) { - /* Set foreground color */ - fg_color = arg - 30; - - } else if (arg == 39) { - /* Default text color */ - fg_color = uv_tty_default_fg_color; - fg_bright = uv_tty_default_fg_bright; - - } else if (arg >= 40 && arg <= 47) { - /* Set background color */ - bg_color = arg - 40; - - } else if (arg == 49) { - /* Default background color */ - bg_color = uv_tty_default_bg_color; - bg_bright = uv_tty_default_bg_bright; - - } else if (arg >= 90 && arg <= 97) { - /* Set bold foreground color */ - fg_bright = 1; - fg_color = arg - 90; - - } else if (arg >= 100 && arg <= 107) { - /* Set bold background color */ - bg_bright = 1; - bg_color = arg - 100; - - } - } - - if (fg_color == -1 && bg_color == -1 && fg_bright == -1 && - bg_bright == -1 && inverse == -1) { - /* Nothing changed */ - return 0; - } - - if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { - *error = GetLastError(); - return -1; - } - - if ((info.wAttributes & COMMON_LVB_REVERSE_VIDEO) > 0) { - FLIP_FGBG; - } - - if (fg_color != -1) { - info.wAttributes &= ~(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); - if (fg_color & 1) info.wAttributes |= FOREGROUND_RED; - if (fg_color & 2) info.wAttributes |= FOREGROUND_GREEN; - if (fg_color & 4) info.wAttributes |= FOREGROUND_BLUE; - } - - if (fg_bright != -1) { - if (fg_bright) { - info.wAttributes |= FOREGROUND_INTENSITY; - } else { - info.wAttributes &= ~FOREGROUND_INTENSITY; - } - } - - if (bg_color != -1) { - info.wAttributes &= ~(BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE); - if (bg_color & 1) info.wAttributes |= BACKGROUND_RED; - if (bg_color & 2) info.wAttributes |= BACKGROUND_GREEN; - if (bg_color & 4) info.wAttributes |= BACKGROUND_BLUE; - } - - if (bg_bright != -1) { - if (bg_bright) { - info.wAttributes |= BACKGROUND_INTENSITY; - } else { - info.wAttributes &= ~BACKGROUND_INTENSITY; - } - } - - if (inverse != -1) { - if (inverse) { - info.wAttributes |= COMMON_LVB_REVERSE_VIDEO; - } else { - info.wAttributes &= ~COMMON_LVB_REVERSE_VIDEO; - } - } - - if ((info.wAttributes & COMMON_LVB_REVERSE_VIDEO) > 0) { - FLIP_FGBG; - } - - if (!SetConsoleTextAttribute(handle->handle, info.wAttributes)) { - *error = GetLastError(); - return -1; - } - - return 0; -} - - -static int uv_tty_save_state(uv_tty_t* handle, unsigned char save_attributes, - DWORD* error) { - CONSOLE_SCREEN_BUFFER_INFO info; - - if (*error != ERROR_SUCCESS) { - return -1; - } - - if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { - *error = GetLastError(); - return -1; - } - - uv_tty_update_virtual_window(&info); - - handle->tty.wr.saved_position.X = info.dwCursorPosition.X; - handle->tty.wr.saved_position.Y = info.dwCursorPosition.Y - uv_tty_virtual_offset; - handle->flags |= UV_HANDLE_TTY_SAVED_POSITION; - - if (save_attributes) { - handle->tty.wr.saved_attributes = info.wAttributes & - (FOREGROUND_INTENSITY | BACKGROUND_INTENSITY); - handle->flags |= UV_HANDLE_TTY_SAVED_ATTRIBUTES; - } - - return 0; -} - - -static int uv_tty_restore_state(uv_tty_t* handle, - unsigned char restore_attributes, DWORD* error) { - CONSOLE_SCREEN_BUFFER_INFO info; - WORD new_attributes; - - if (*error != ERROR_SUCCESS) { - return -1; - } - - if (handle->flags & UV_HANDLE_TTY_SAVED_POSITION) { - if (uv_tty_move_caret(handle, - handle->tty.wr.saved_position.X, - 0, - handle->tty.wr.saved_position.Y, - 0, - error) != 0) { - return -1; - } - } - - if (restore_attributes && - (handle->flags & UV_HANDLE_TTY_SAVED_ATTRIBUTES)) { - if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { - *error = GetLastError(); - return -1; - } - - new_attributes = info.wAttributes; - new_attributes &= ~(FOREGROUND_INTENSITY | BACKGROUND_INTENSITY); - new_attributes |= handle->tty.wr.saved_attributes; - - if (!SetConsoleTextAttribute(handle->handle, new_attributes)) { - *error = GetLastError(); - return -1; - } - } - - return 0; -} - -static int uv_tty_set_cursor_visibility(uv_tty_t* handle, - BOOL visible, - DWORD* error) { - CONSOLE_CURSOR_INFO cursor_info; - - if (!GetConsoleCursorInfo(handle->handle, &cursor_info)) { - *error = GetLastError(); - return -1; - } - - cursor_info.bVisible = visible; - - if (!SetConsoleCursorInfo(handle->handle, &cursor_info)) { - *error = GetLastError(); - return -1; - } - - return 0; -} - -static int uv_tty_set_cursor_shape(uv_tty_t* handle, int style, DWORD* error) { - CONSOLE_CURSOR_INFO cursor_info; - - if (!GetConsoleCursorInfo(handle->handle, &cursor_info)) { - *error = GetLastError(); - return -1; - } - - if (style == 0) { - cursor_info.dwSize = uv_tty_default_cursor_info.dwSize; - } else if (style <= 2) { - cursor_info.dwSize = CURSOR_SIZE_LARGE; - } else { - cursor_info.dwSize = CURSOR_SIZE_SMALL; - } - - if (!SetConsoleCursorInfo(handle->handle, &cursor_info)) { - *error = GetLastError(); - return -1; - } - - return 0; -} - - -static int uv_tty_write_bufs(uv_tty_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - DWORD* error) { - /* We can only write 8k characters at a time. Windows can't handle much more - * characters in a single console write anyway. */ - WCHAR utf16_buf[MAX_CONSOLE_CHAR]; - DWORD utf16_buf_used = 0; - unsigned int i; - -#define FLUSH_TEXT() \ - do { \ - if (utf16_buf_used > 0) { \ - uv_tty_emit_text(handle, utf16_buf, utf16_buf_used, error); \ - utf16_buf_used = 0; \ - } \ - } while (0) - -#define ENSURE_BUFFER_SPACE(wchars_needed) \ - if (wchars_needed > ARRAY_SIZE(utf16_buf) - utf16_buf_used) { \ - FLUSH_TEXT(); \ - } - - /* Cache for fast access */ - unsigned char utf8_bytes_left = handle->tty.wr.utf8_bytes_left; - unsigned int utf8_codepoint = handle->tty.wr.utf8_codepoint; - unsigned char previous_eol = handle->tty.wr.previous_eol; - unsigned short ansi_parser_state = handle->tty.wr.ansi_parser_state; - - /* Store the error here. If we encounter an error, stop trying to do i/o but - * keep parsing the buffer so we leave the parser in a consistent state. */ - *error = ERROR_SUCCESS; - - uv_sem_wait(&uv_tty_output_lock); - - for (i = 0; i < nbufs; i++) { - uv_buf_t buf = bufs[i]; - unsigned int j; - - for (j = 0; j < buf.len; j++) { - unsigned char c = buf.base[j]; - - /* Run the character through the utf8 decoder We happily accept non - * shortest form encodings and invalid code points - there's no real harm - * that can be done. */ - if (utf8_bytes_left == 0) { - /* Read utf-8 start byte */ - DWORD first_zero_bit; - unsigned char not_c = ~c; -#ifdef _MSC_VER /* msvc */ - if (_BitScanReverse(&first_zero_bit, not_c)) { -#else /* assume gcc */ - if (c != 0) { - first_zero_bit = (sizeof(int) * 8) - 1 - __builtin_clz(not_c); -#endif - if (first_zero_bit == 7) { - /* Ascii - pass right through */ - utf8_codepoint = (unsigned int) c; - - } else if (first_zero_bit <= 5) { - /* Multibyte sequence */ - utf8_codepoint = (0xff >> (8 - first_zero_bit)) & c; - utf8_bytes_left = (char) (6 - first_zero_bit); - - } else { - /* Invalid continuation */ - utf8_codepoint = UNICODE_REPLACEMENT_CHARACTER; - } - - } else { - /* 0xff -- invalid */ - utf8_codepoint = UNICODE_REPLACEMENT_CHARACTER; - } - - } else if ((c & 0xc0) == 0x80) { - /* Valid continuation of utf-8 multibyte sequence */ - utf8_bytes_left--; - utf8_codepoint <<= 6; - utf8_codepoint |= ((unsigned int) c & 0x3f); - - } else { - /* Start byte where continuation was expected. */ - utf8_bytes_left = 0; - utf8_codepoint = UNICODE_REPLACEMENT_CHARACTER; - /* Patch buf offset so this character will be parsed again as a start - * byte. */ - j--; - } - - /* Maybe we need to parse more bytes to find a character. */ - if (utf8_bytes_left != 0) { - continue; - } - - /* Parse vt100/ansi escape codes */ - if (uv__vterm_state == UV_TTY_SUPPORTED) { - /* Pass through escape codes if conhost supports them. */ - } else if (ansi_parser_state == ANSI_NORMAL) { - switch (utf8_codepoint) { - case '\033': - ansi_parser_state = ANSI_ESCAPE_SEEN; - continue; - - case 0233: - ansi_parser_state = ANSI_CSI; - handle->tty.wr.ansi_csi_argc = 0; - continue; - } - - } else if (ansi_parser_state == ANSI_ESCAPE_SEEN) { - switch (utf8_codepoint) { - case '[': - ansi_parser_state = ANSI_CSI; - handle->tty.wr.ansi_csi_argc = 0; - continue; - - case '^': - case '_': - case 'P': - case ']': - /* Not supported, but we'll have to parse until we see a stop code, - * e. g. ESC \ or BEL. */ - ansi_parser_state = ANSI_ST_CONTROL; - continue; - - case '\033': - /* Ignore double escape. */ - continue; - - case 'c': - /* Full console reset. */ - FLUSH_TEXT(); - uv_tty_reset(handle, error); - ansi_parser_state = ANSI_NORMAL; - continue; - - case '7': - /* Save the cursor position and text attributes. */ - FLUSH_TEXT(); - uv_tty_save_state(handle, 1, error); - ansi_parser_state = ANSI_NORMAL; - continue; - - case '8': - /* Restore the cursor position and text attributes */ - FLUSH_TEXT(); - uv_tty_restore_state(handle, 1, error); - ansi_parser_state = ANSI_NORMAL; - continue; - - default: - if (utf8_codepoint >= '@' && utf8_codepoint <= '_') { - /* Single-char control. */ - ansi_parser_state = ANSI_NORMAL; - continue; - } else { - /* Invalid - proceed as normal, */ - ansi_parser_state = ANSI_NORMAL; - } - } - - } else if (ansi_parser_state == ANSI_IGNORE) { - /* We're ignoring this command. Stop only on command character. */ - if (utf8_codepoint >= '@' && utf8_codepoint <= '~') { - ansi_parser_state = ANSI_NORMAL; - } - continue; - - } else if (ansi_parser_state == ANSI_DECSCUSR) { - /* So far we've the sequence `ESC [ arg space`, and we're waiting for - * the final command byte. */ - if (utf8_codepoint >= '@' && utf8_codepoint <= '~') { - /* Command byte */ - if (utf8_codepoint == 'q') { - /* Change the cursor shape */ - int style = handle->tty.wr.ansi_csi_argc - ? handle->tty.wr.ansi_csi_argv[0] : 1; - if (style >= 0 && style <= 6) { - FLUSH_TEXT(); - uv_tty_set_cursor_shape(handle, style, error); - } - } - - /* Sequence ended - go back to normal state. */ - ansi_parser_state = ANSI_NORMAL; - continue; - } - /* Unexpected character, but sequence hasn't ended yet. Ignore the rest - * of the sequence. */ - ansi_parser_state = ANSI_IGNORE; - - } else if (ansi_parser_state & ANSI_CSI) { - /* So far we've seen `ESC [`, and we may or may not have already parsed - * some of the arguments that follow. */ - - if (utf8_codepoint >= '0' && utf8_codepoint <= '9') { - /* Parse a numerical argument. */ - if (!(ansi_parser_state & ANSI_IN_ARG)) { - /* We were not currently parsing a number, add a new one. */ - /* Check for that there are too many arguments. */ - if (handle->tty.wr.ansi_csi_argc >= - ARRAY_SIZE(handle->tty.wr.ansi_csi_argv)) { - ansi_parser_state = ANSI_IGNORE; - continue; - } - ansi_parser_state |= ANSI_IN_ARG; - handle->tty.wr.ansi_csi_argc++; - handle->tty.wr.ansi_csi_argv[handle->tty.wr.ansi_csi_argc - 1] = - (unsigned short) utf8_codepoint - '0'; - continue; - - } else { - /* We were already parsing a number. Parse next digit. */ - uint32_t value = 10 * - handle->tty.wr.ansi_csi_argv[handle->tty.wr.ansi_csi_argc - 1]; - - /* Check for overflow. */ - if (value > UINT16_MAX) { - ansi_parser_state = ANSI_IGNORE; - continue; - } - - handle->tty.wr.ansi_csi_argv[handle->tty.wr.ansi_csi_argc - 1] = - (unsigned short) value + (utf8_codepoint - '0'); - continue; - } - - } else if (utf8_codepoint == ';') { - /* Denotes the end of an argument. */ - if (ansi_parser_state & ANSI_IN_ARG) { - ansi_parser_state &= ~ANSI_IN_ARG; - continue; - - } else { - /* If ANSI_IN_ARG is not set, add another argument and default - * it to 0. */ - - /* Check for too many arguments */ - if (handle->tty.wr.ansi_csi_argc >= - - ARRAY_SIZE(handle->tty.wr.ansi_csi_argv)) { - ansi_parser_state = ANSI_IGNORE; - continue; - } - - handle->tty.wr.ansi_csi_argc++; - handle->tty.wr.ansi_csi_argv[handle->tty.wr.ansi_csi_argc - 1] = 0; - continue; - } - - } else if (utf8_codepoint == '?' && - !(ansi_parser_state & ANSI_IN_ARG) && - !(ansi_parser_state & ANSI_EXTENSION) && - handle->tty.wr.ansi_csi_argc == 0) { - /* Pass through '?' if it is the first character after CSI */ - /* This is an extension character from the VT100 codeset */ - /* that is supported and used by most ANSI terminals today. */ - ansi_parser_state |= ANSI_EXTENSION; - continue; - - } else if (utf8_codepoint == ' ' && - !(ansi_parser_state & ANSI_EXTENSION)) { - /* We expect a command byte to follow after this space. The only - * command that we current support is 'set cursor style'. */ - ansi_parser_state = ANSI_DECSCUSR; - continue; - - } else if (utf8_codepoint >= '@' && utf8_codepoint <= '~') { - /* Command byte */ - if (ansi_parser_state & ANSI_EXTENSION) { - /* Sequence is `ESC [ ? args command`. */ - switch (utf8_codepoint) { - case 'l': - /* Hide the cursor */ - if (handle->tty.wr.ansi_csi_argc == 1 && - handle->tty.wr.ansi_csi_argv[0] == 25) { - FLUSH_TEXT(); - uv_tty_set_cursor_visibility(handle, 0, error); - } - break; - - case 'h': - /* Show the cursor */ - if (handle->tty.wr.ansi_csi_argc == 1 && - handle->tty.wr.ansi_csi_argv[0] == 25) { - FLUSH_TEXT(); - uv_tty_set_cursor_visibility(handle, 1, error); - } - break; - } - - } else { - /* Sequence is `ESC [ args command`. */ - int x, y, d; - switch (utf8_codepoint) { - case 'A': - /* cursor up */ - FLUSH_TEXT(); - y = -(handle->tty.wr.ansi_csi_argc - ? handle->tty.wr.ansi_csi_argv[0] : 1); - uv_tty_move_caret(handle, 0, 1, y, 1, error); - break; - - case 'B': - /* cursor down */ - FLUSH_TEXT(); - y = handle->tty.wr.ansi_csi_argc - ? handle->tty.wr.ansi_csi_argv[0] : 1; - uv_tty_move_caret(handle, 0, 1, y, 1, error); - break; - - case 'C': - /* cursor forward */ - FLUSH_TEXT(); - x = handle->tty.wr.ansi_csi_argc - ? handle->tty.wr.ansi_csi_argv[0] : 1; - uv_tty_move_caret(handle, x, 1, 0, 1, error); - break; - - case 'D': - /* cursor back */ - FLUSH_TEXT(); - x = -(handle->tty.wr.ansi_csi_argc - ? handle->tty.wr.ansi_csi_argv[0] : 1); - uv_tty_move_caret(handle, x, 1, 0, 1, error); - break; - - case 'E': - /* cursor next line */ - FLUSH_TEXT(); - y = handle->tty.wr.ansi_csi_argc - ? handle->tty.wr.ansi_csi_argv[0] : 1; - uv_tty_move_caret(handle, 0, 0, y, 1, error); - break; - - case 'F': - /* cursor previous line */ - FLUSH_TEXT(); - y = -(handle->tty.wr.ansi_csi_argc - ? handle->tty.wr.ansi_csi_argv[0] : 1); - uv_tty_move_caret(handle, 0, 0, y, 1, error); - break; - - case 'G': - /* cursor horizontal move absolute */ - FLUSH_TEXT(); - x = (handle->tty.wr.ansi_csi_argc >= 1 && - handle->tty.wr.ansi_csi_argv[0]) - ? handle->tty.wr.ansi_csi_argv[0] - 1 : 0; - uv_tty_move_caret(handle, x, 0, 0, 1, error); - break; - - case 'H': - case 'f': - /* cursor move absolute */ - FLUSH_TEXT(); - y = (handle->tty.wr.ansi_csi_argc >= 1 && - handle->tty.wr.ansi_csi_argv[0]) - ? handle->tty.wr.ansi_csi_argv[0] - 1 : 0; - x = (handle->tty.wr.ansi_csi_argc >= 2 && - handle->tty.wr.ansi_csi_argv[1]) - ? handle->tty.wr.ansi_csi_argv[1] - 1 : 0; - uv_tty_move_caret(handle, x, 0, y, 0, error); - break; - - case 'J': - /* Erase screen */ - FLUSH_TEXT(); - d = handle->tty.wr.ansi_csi_argc - ? handle->tty.wr.ansi_csi_argv[0] : 0; - if (d >= 0 && d <= 2) { - uv_tty_clear(handle, d, 1, error); - } - break; - - case 'K': - /* Erase line */ - FLUSH_TEXT(); - d = handle->tty.wr.ansi_csi_argc - ? handle->tty.wr.ansi_csi_argv[0] : 0; - if (d >= 0 && d <= 2) { - uv_tty_clear(handle, d, 0, error); - } - break; - - case 'm': - /* Set style */ - FLUSH_TEXT(); - uv_tty_set_style(handle, error); - break; - - case 's': - /* Save the cursor position. */ - FLUSH_TEXT(); - uv_tty_save_state(handle, 0, error); - break; - - case 'u': - /* Restore the cursor position */ - FLUSH_TEXT(); - uv_tty_restore_state(handle, 0, error); - break; - } - } - - /* Sequence ended - go back to normal state. */ - ansi_parser_state = ANSI_NORMAL; - continue; - - } else { - /* We don't support commands that use private mode characters or - * intermediaries. Ignore the rest of the sequence. */ - ansi_parser_state = ANSI_IGNORE; - continue; - } - - } else if (ansi_parser_state & ANSI_ST_CONTROL) { - /* Unsupported control code. - * Ignore everything until we see `BEL` or `ESC \`. */ - if (ansi_parser_state & ANSI_IN_STRING) { - if (!(ansi_parser_state & ANSI_BACKSLASH_SEEN)) { - if (utf8_codepoint == '"') { - ansi_parser_state &= ~ANSI_IN_STRING; - } else if (utf8_codepoint == '\\') { - ansi_parser_state |= ANSI_BACKSLASH_SEEN; - } - } else { - ansi_parser_state &= ~ANSI_BACKSLASH_SEEN; - } - } else { - if (utf8_codepoint == '\007' || (utf8_codepoint == '\\' && - (ansi_parser_state & ANSI_ESCAPE_SEEN))) { - /* End of sequence */ - ansi_parser_state = ANSI_NORMAL; - } else if (utf8_codepoint == '\033') { - /* Escape character */ - ansi_parser_state |= ANSI_ESCAPE_SEEN; - } else if (utf8_codepoint == '"') { - /* String starting */ - ansi_parser_state |= ANSI_IN_STRING; - ansi_parser_state &= ~ANSI_ESCAPE_SEEN; - ansi_parser_state &= ~ANSI_BACKSLASH_SEEN; - } else { - ansi_parser_state &= ~ANSI_ESCAPE_SEEN; - } - } - continue; - } else { - /* Inconsistent state */ - abort(); - } - - if (utf8_codepoint == 0x0a || utf8_codepoint == 0x0d) { - /* EOL conversion - emit \r\n when we see \n. */ - - if (utf8_codepoint == 0x0a && previous_eol != 0x0d) { - /* \n was not preceded by \r; print \r\n. */ - ENSURE_BUFFER_SPACE(2); - utf16_buf[utf16_buf_used++] = L'\r'; - utf16_buf[utf16_buf_used++] = L'\n'; - } else if (utf8_codepoint == 0x0d && previous_eol == 0x0a) { - /* \n was followed by \r; do not print the \r, since the source was - * either \r\n\r (so the second \r is redundant) or was \n\r (so the - * \n was processed by the last case and an \r automatically - * inserted). */ - } else { - /* \r without \n; print \r as-is. */ - ENSURE_BUFFER_SPACE(1); - utf16_buf[utf16_buf_used++] = (WCHAR) utf8_codepoint; - } - - previous_eol = (char) utf8_codepoint; - - } else if (utf8_codepoint <= 0xffff) { - /* Encode character into utf-16 buffer. */ - ENSURE_BUFFER_SPACE(1); - utf16_buf[utf16_buf_used++] = (WCHAR) utf8_codepoint; - previous_eol = 0; - } else { - ENSURE_BUFFER_SPACE(2); - utf8_codepoint -= 0x10000; - utf16_buf[utf16_buf_used++] = (WCHAR) (utf8_codepoint / 0x400 + 0xD800); - utf16_buf[utf16_buf_used++] = (WCHAR) (utf8_codepoint % 0x400 + 0xDC00); - previous_eol = 0; - } - } - } - - /* Flush remaining characters */ - FLUSH_TEXT(); - - /* Copy cached values back to struct. */ - handle->tty.wr.utf8_bytes_left = utf8_bytes_left; - handle->tty.wr.utf8_codepoint = utf8_codepoint; - handle->tty.wr.previous_eol = previous_eol; - handle->tty.wr.ansi_parser_state = ansi_parser_state; - - uv_sem_post(&uv_tty_output_lock); - - if (*error == STATUS_SUCCESS) { - return 0; - } else { - return -1; - } - -#undef FLUSH_TEXT -} - - -int uv_tty_write(uv_loop_t* loop, - uv_write_t* req, - uv_tty_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - uv_write_cb cb) { - DWORD error; - - UV_REQ_INIT(req, UV_WRITE); - req->handle = (uv_stream_t*) handle; - req->cb = cb; - - handle->reqs_pending++; - handle->stream.conn.write_reqs_pending++; - REGISTER_HANDLE_REQ(loop, handle, req); - - req->u.io.queued_bytes = 0; - - if (!uv_tty_write_bufs(handle, bufs, nbufs, &error)) { - SET_REQ_SUCCESS(req); - } else { - SET_REQ_ERROR(req, error); - } - - uv_insert_pending_req(loop, (uv_req_t*) req); - - return 0; -} - - -int uv__tty_try_write(uv_tty_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs) { - DWORD error; - - if (handle->stream.conn.write_reqs_pending > 0) - return UV_EAGAIN; - - if (uv_tty_write_bufs(handle, bufs, nbufs, &error)) - return uv_translate_sys_error(error); - - return uv__count_bufs(bufs, nbufs); -} - - -void uv_process_tty_write_req(uv_loop_t* loop, uv_tty_t* handle, - uv_write_t* req) { - int err; - - handle->write_queue_size -= req->u.io.queued_bytes; - UNREGISTER_HANDLE_REQ(loop, handle, req); - - if (req->cb) { - err = GET_REQ_ERROR(req); - req->cb(req, uv_translate_sys_error(err)); - } - - handle->stream.conn.write_reqs_pending--; - if (handle->stream.conn.shutdown_req != NULL && - handle->stream.conn.write_reqs_pending == 0) { - uv_want_endgame(loop, (uv_handle_t*)handle); - } - - DECREASE_PENDING_REQ_COUNT(handle); -} - - -void uv_tty_close(uv_tty_t* handle) { - assert(handle->u.fd == -1 || handle->u.fd > 2); - if (handle->flags & UV_HANDLE_READING) - uv_tty_read_stop(handle); - - if (handle->u.fd == -1) - CloseHandle(handle->handle); - else - close(handle->u.fd); - - handle->u.fd = -1; - handle->handle = INVALID_HANDLE_VALUE; - handle->flags &= ~(UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); - uv__handle_closing(handle); - - if (handle->reqs_pending == 0) { - uv_want_endgame(handle->loop, (uv_handle_t*) handle); - } -} - - -void uv_tty_endgame(uv_loop_t* loop, uv_tty_t* handle) { - if (!(handle->flags & UV_HANDLE_TTY_READABLE) && - handle->stream.conn.shutdown_req != NULL && - handle->stream.conn.write_reqs_pending == 0) { - UNREGISTER_HANDLE_REQ(loop, handle, handle->stream.conn.shutdown_req); - - /* TTY shutdown is really just a no-op */ - if (handle->stream.conn.shutdown_req->cb) { - if (handle->flags & UV_HANDLE_CLOSING) { - handle->stream.conn.shutdown_req->cb(handle->stream.conn.shutdown_req, UV_ECANCELED); - } else { - handle->stream.conn.shutdown_req->cb(handle->stream.conn.shutdown_req, 0); - } - } - - handle->stream.conn.shutdown_req = NULL; - - DECREASE_PENDING_REQ_COUNT(handle); - return; - } - - if (handle->flags & UV_HANDLE_CLOSING && - handle->reqs_pending == 0) { - /* The wait handle used for raw reading should be unregistered when the - * wait callback runs. */ - assert(!(handle->flags & UV_HANDLE_TTY_READABLE) || - handle->tty.rd.read_raw_wait == NULL); - - assert(!(handle->flags & UV_HANDLE_CLOSED)); - uv__handle_close(handle); - } -} - - -/* - * uv_process_tty_accept_req() is a stub to keep DELEGATE_STREAM_REQ working - * TODO: find a way to remove it - */ -void uv_process_tty_accept_req(uv_loop_t* loop, uv_tty_t* handle, - uv_req_t* raw_req) { - abort(); -} - - -/* - * uv_process_tty_connect_req() is a stub to keep DELEGATE_STREAM_REQ working - * TODO: find a way to remove it - */ -void uv_process_tty_connect_req(uv_loop_t* loop, uv_tty_t* handle, - uv_connect_t* req) { - abort(); -} - - -int uv_tty_reset_mode(void) { - /* Not necessary to do anything. */ - return 0; -} - -/* Determine whether or not this version of windows supports - * proper ANSI color codes. Should be supported as of windows - * 10 version 1511, build number 10.0.10586. - */ -static void uv__determine_vterm_state(HANDLE handle) { - DWORD dwMode = 0; - - uv__need_check_vterm_state = FALSE; - if (!GetConsoleMode(handle, &dwMode)) { - return; - } - - dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; - if (!SetConsoleMode(handle, dwMode)) { - return; - } - - uv__vterm_state = UV_TTY_SUPPORTED; -} - -static DWORD WINAPI uv__tty_console_resize_message_loop_thread(void* param) { - NTSTATUS status; - ULONG_PTR conhost_pid; - MSG msg; - - if (pSetWinEventHook == NULL || pNtQueryInformationProcess == NULL) - return 0; - - status = pNtQueryInformationProcess(GetCurrentProcess(), - ProcessConsoleHostProcess, - &conhost_pid, - sizeof(conhost_pid), - NULL); - - if (!NT_SUCCESS(status)) { - /* We couldn't retrieve our console host process, probably because this - * is a 32-bit process running on 64-bit Windows. Fall back to receiving - * console events from the input stream only. */ - return 0; - } - - /* Ensure the PID is a multiple of 4, which is required by SetWinEventHook */ - conhost_pid &= ~(ULONG_PTR)0x3; - - uv__tty_console_resized = CreateEvent(NULL, TRUE, FALSE, NULL); - if (uv__tty_console_resized == NULL) - return 0; - if (QueueUserWorkItem(uv__tty_console_resize_watcher_thread, - NULL, - WT_EXECUTELONGFUNCTION) == 0) - return 0; - - if (!pSetWinEventHook(EVENT_CONSOLE_LAYOUT, - EVENT_CONSOLE_LAYOUT, - NULL, - uv__tty_console_resize_event, - (DWORD)conhost_pid, - 0, - WINEVENT_OUTOFCONTEXT)) - return 0; - - while (GetMessage(&msg, NULL, 0, 0)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - return 0; -} - -static void CALLBACK uv__tty_console_resize_event(HWINEVENTHOOK hWinEventHook, - DWORD event, - HWND hwnd, - LONG idObject, - LONG idChild, - DWORD dwEventThread, - DWORD dwmsEventTime) { - SetEvent(uv__tty_console_resized); -} - -static DWORD WINAPI uv__tty_console_resize_watcher_thread(void* param) { - for (;;) { - /* Make sure to not overwhelm the system with resize events */ - Sleep(33); - WaitForSingleObject(uv__tty_console_resized, INFINITE); - uv__tty_console_signal_resize(); - ResetEvent(uv__tty_console_resized); - } - return 0; -} - -static void uv__tty_console_signal_resize(void) { - CONSOLE_SCREEN_BUFFER_INFO sb_info; - int width, height; - - if (!GetConsoleScreenBufferInfo(uv__tty_console_handle, &sb_info)) - return; - - width = sb_info.dwSize.X; - height = sb_info.srWindow.Bottom - sb_info.srWindow.Top + 1; - - uv_mutex_lock(&uv__tty_console_resize_mutex); - assert(uv__tty_console_width != -1 && uv__tty_console_height != -1); - if (width != uv__tty_console_width || height != uv__tty_console_height) { - uv__tty_console_width = width; - uv__tty_console_height = height; - uv_mutex_unlock(&uv__tty_console_resize_mutex); - uv__signal_dispatch(SIGWINCH); - } else { - uv_mutex_unlock(&uv__tty_console_resize_mutex); - } -} - -void uv_tty_set_vterm_state(uv_tty_vtermstate_t state) { - uv_sem_wait(&uv_tty_output_lock); - uv__need_check_vterm_state = FALSE; - uv__vterm_state = state; - uv_sem_post(&uv_tty_output_lock); -} - -int uv_tty_get_vterm_state(uv_tty_vtermstate_t* state) { - uv_sem_wait(&uv_tty_output_lock); - *state = uv__vterm_state; - uv_sem_post(&uv_tty_output_lock); - return 0; -} diff --git a/libuv/src/win/udp.c b/libuv/src/win/udp.c deleted file mode 100644 index 3043f2d..0000000 --- a/libuv/src/win/udp.c +++ /dev/null @@ -1,1181 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include - -#include "uv.h" -#include "internal.h" -#include "handle-inl.h" -#include "stream-inl.h" -#include "req-inl.h" - - -/* - * Threshold of active udp streams for which to preallocate udp read buffers. - */ -const unsigned int uv_active_udp_streams_threshold = 0; - -/* A zero-size buffer for use by uv_udp_read */ -static char uv_zero_[] = ""; -int uv_udp_getpeername(const uv_udp_t* handle, - struct sockaddr* name, - int* namelen) { - - return uv__getsockpeername((const uv_handle_t*) handle, - getpeername, - name, - namelen, - 0); -} - - -int uv_udp_getsockname(const uv_udp_t* handle, - struct sockaddr* name, - int* namelen) { - - return uv__getsockpeername((const uv_handle_t*) handle, - getsockname, - name, - namelen, - 0); -} - - -static int uv_udp_set_socket(uv_loop_t* loop, uv_udp_t* handle, SOCKET socket, - int family) { - DWORD yes = 1; - WSAPROTOCOL_INFOW info; - int opt_len; - - if (handle->socket != INVALID_SOCKET) - return UV_EBUSY; - - /* Set the socket to nonblocking mode */ - if (ioctlsocket(socket, FIONBIO, &yes) == SOCKET_ERROR) { - return WSAGetLastError(); - } - - /* Make the socket non-inheritable */ - if (!SetHandleInformation((HANDLE)socket, HANDLE_FLAG_INHERIT, 0)) { - return GetLastError(); - } - - /* Associate it with the I/O completion port. Use uv_handle_t pointer as - * completion key. */ - if (CreateIoCompletionPort((HANDLE)socket, - loop->iocp, - (ULONG_PTR)socket, - 0) == NULL) { - return GetLastError(); - } - - /* All known Windows that support SetFileCompletionNotificationModes have a - * bug that makes it impossible to use this function in conjunction with - * datagram sockets. We can work around that but only if the user is using - * the default UDP driver (AFD) and has no other. LSPs stacked on top. Here - * we check whether that is the case. */ - opt_len = (int) sizeof info; - if (getsockopt( - socket, SOL_SOCKET, SO_PROTOCOL_INFOW, (char*) &info, &opt_len) == - SOCKET_ERROR) { - return GetLastError(); - } - - if (info.ProtocolChain.ChainLen == 1) { - if (SetFileCompletionNotificationModes( - (HANDLE) socket, - FILE_SKIP_SET_EVENT_ON_HANDLE | - FILE_SKIP_COMPLETION_PORT_ON_SUCCESS)) { - handle->flags |= UV_HANDLE_SYNC_BYPASS_IOCP; - handle->func_wsarecv = uv_wsarecv_workaround; - handle->func_wsarecvfrom = uv_wsarecvfrom_workaround; - } else if (GetLastError() != ERROR_INVALID_FUNCTION) { - return GetLastError(); - } - } - - handle->socket = socket; - - if (family == AF_INET6) { - handle->flags |= UV_HANDLE_IPV6; - } else { - assert(!(handle->flags & UV_HANDLE_IPV6)); - } - - return 0; -} - - -int uv__udp_init_ex(uv_loop_t* loop, - uv_udp_t* handle, - unsigned flags, - int domain) { - uv__handle_init(loop, (uv_handle_t*) handle, UV_UDP); - handle->socket = INVALID_SOCKET; - handle->reqs_pending = 0; - handle->activecnt = 0; - handle->func_wsarecv = WSARecv; - handle->func_wsarecvfrom = WSARecvFrom; - handle->send_queue_size = 0; - handle->send_queue_count = 0; - UV_REQ_INIT(&handle->recv_req, UV_UDP_RECV); - handle->recv_req.data = handle; - - /* If anything fails beyond this point we need to remove the handle from - * the handle queue, since it was added by uv__handle_init. - */ - - if (domain != AF_UNSPEC) { - SOCKET sock; - DWORD err; - - sock = socket(domain, SOCK_DGRAM, 0); - if (sock == INVALID_SOCKET) { - err = WSAGetLastError(); - QUEUE_REMOVE(&handle->handle_queue); - return uv_translate_sys_error(err); - } - - err = uv_udp_set_socket(handle->loop, handle, sock, domain); - if (err) { - closesocket(sock); - QUEUE_REMOVE(&handle->handle_queue); - return uv_translate_sys_error(err); - } - } - - return 0; -} - - -void uv_udp_close(uv_loop_t* loop, uv_udp_t* handle) { - uv_udp_recv_stop(handle); - closesocket(handle->socket); - handle->socket = INVALID_SOCKET; - - uv__handle_closing(handle); - - if (handle->reqs_pending == 0) { - uv_want_endgame(loop, (uv_handle_t*) handle); - } -} - - -void uv_udp_endgame(uv_loop_t* loop, uv_udp_t* handle) { - if (handle->flags & UV_HANDLE_CLOSING && - handle->reqs_pending == 0) { - assert(!(handle->flags & UV_HANDLE_CLOSED)); - uv__handle_close(handle); - } -} - - -int uv_udp_using_recvmmsg(const uv_udp_t* handle) { - return 0; -} - - -static int uv_udp_maybe_bind(uv_udp_t* handle, - const struct sockaddr* addr, - unsigned int addrlen, - unsigned int flags) { - int r; - int err; - DWORD no = 0; - - if (handle->flags & UV_HANDLE_BOUND) - return 0; - - if ((flags & UV_UDP_IPV6ONLY) && addr->sa_family != AF_INET6) { - /* UV_UDP_IPV6ONLY is supported only for IPV6 sockets */ - return ERROR_INVALID_PARAMETER; - } - - if (handle->socket == INVALID_SOCKET) { - SOCKET sock = socket(addr->sa_family, SOCK_DGRAM, 0); - if (sock == INVALID_SOCKET) { - return WSAGetLastError(); - } - - err = uv_udp_set_socket(handle->loop, handle, sock, addr->sa_family); - if (err) { - closesocket(sock); - return err; - } - } - - if (flags & UV_UDP_REUSEADDR) { - DWORD yes = 1; - /* Set SO_REUSEADDR on the socket. */ - if (setsockopt(handle->socket, - SOL_SOCKET, - SO_REUSEADDR, - (char*) &yes, - sizeof yes) == SOCKET_ERROR) { - err = WSAGetLastError(); - return err; - } - } - - if (addr->sa_family == AF_INET6) - handle->flags |= UV_HANDLE_IPV6; - - if (addr->sa_family == AF_INET6 && !(flags & UV_UDP_IPV6ONLY)) { - /* On windows IPV6ONLY is on by default. If the user doesn't specify it - * libuv turns it off. */ - - /* TODO: how to handle errors? This may fail if there is no ipv4 stack - * available, or when run on XP/2003 which have no support for dualstack - * sockets. For now we're silently ignoring the error. */ - setsockopt(handle->socket, - IPPROTO_IPV6, - IPV6_V6ONLY, - (char*) &no, - sizeof no); - } - - r = bind(handle->socket, addr, addrlen); - if (r == SOCKET_ERROR) { - return WSAGetLastError(); - } - - handle->flags |= UV_HANDLE_BOUND; - - return 0; -} - - -static void uv_udp_queue_recv(uv_loop_t* loop, uv_udp_t* handle) { - uv_req_t* req; - uv_buf_t buf; - DWORD bytes, flags; - int result; - - assert(handle->flags & UV_HANDLE_READING); - assert(!(handle->flags & UV_HANDLE_READ_PENDING)); - - req = &handle->recv_req; - memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); - - /* - * Preallocate a read buffer if the number of active streams is below - * the threshold. - */ - if (loop->active_udp_streams < uv_active_udp_streams_threshold) { - handle->flags &= ~UV_HANDLE_ZERO_READ; - - handle->recv_buffer = uv_buf_init(NULL, 0); - handle->alloc_cb((uv_handle_t*) handle, UV__UDP_DGRAM_MAXSIZE, &handle->recv_buffer); - if (handle->recv_buffer.base == NULL || handle->recv_buffer.len == 0) { - handle->recv_cb(handle, UV_ENOBUFS, &handle->recv_buffer, NULL, 0); - return; - } - assert(handle->recv_buffer.base != NULL); - - buf = handle->recv_buffer; - memset(&handle->recv_from, 0, sizeof handle->recv_from); - handle->recv_from_len = sizeof handle->recv_from; - flags = 0; - - result = handle->func_wsarecvfrom(handle->socket, - (WSABUF*) &buf, - 1, - &bytes, - &flags, - (struct sockaddr*) &handle->recv_from, - &handle->recv_from_len, - &req->u.io.overlapped, - NULL); - - if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) { - /* Process the req without IOCP. */ - handle->flags |= UV_HANDLE_READ_PENDING; - req->u.io.overlapped.InternalHigh = bytes; - handle->reqs_pending++; - uv_insert_pending_req(loop, req); - } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { - /* The req will be processed with IOCP. */ - handle->flags |= UV_HANDLE_READ_PENDING; - handle->reqs_pending++; - } else { - /* Make this req pending reporting an error. */ - SET_REQ_ERROR(req, WSAGetLastError()); - uv_insert_pending_req(loop, req); - handle->reqs_pending++; - } - - } else { - handle->flags |= UV_HANDLE_ZERO_READ; - - buf.base = (char*) uv_zero_; - buf.len = 0; - flags = MSG_PEEK; - - result = handle->func_wsarecv(handle->socket, - (WSABUF*) &buf, - 1, - &bytes, - &flags, - &req->u.io.overlapped, - NULL); - - if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) { - /* Process the req without IOCP. */ - handle->flags |= UV_HANDLE_READ_PENDING; - req->u.io.overlapped.InternalHigh = bytes; - handle->reqs_pending++; - uv_insert_pending_req(loop, req); - } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { - /* The req will be processed with IOCP. */ - handle->flags |= UV_HANDLE_READ_PENDING; - handle->reqs_pending++; - } else { - /* Make this req pending reporting an error. */ - SET_REQ_ERROR(req, WSAGetLastError()); - uv_insert_pending_req(loop, req); - handle->reqs_pending++; - } - } -} - - -int uv__udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, - uv_udp_recv_cb recv_cb) { - uv_loop_t* loop = handle->loop; - int err; - - if (handle->flags & UV_HANDLE_READING) { - return UV_EALREADY; - } - - err = uv_udp_maybe_bind(handle, - (const struct sockaddr*) &uv_addr_ip4_any_, - sizeof(uv_addr_ip4_any_), - 0); - if (err) - return uv_translate_sys_error(err); - - handle->flags |= UV_HANDLE_READING; - INCREASE_ACTIVE_COUNT(loop, handle); - loop->active_udp_streams++; - - handle->recv_cb = recv_cb; - handle->alloc_cb = alloc_cb; - - /* If reading was stopped and then started again, there could still be a recv - * request pending. */ - if (!(handle->flags & UV_HANDLE_READ_PENDING)) - uv_udp_queue_recv(loop, handle); - - return 0; -} - - -int uv__udp_recv_stop(uv_udp_t* handle) { - if (handle->flags & UV_HANDLE_READING) { - handle->flags &= ~UV_HANDLE_READING; - handle->loop->active_udp_streams--; - DECREASE_ACTIVE_COUNT(loop, handle); - } - - return 0; -} - - -static int uv__send(uv_udp_send_t* req, - uv_udp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - const struct sockaddr* addr, - unsigned int addrlen, - uv_udp_send_cb cb) { - uv_loop_t* loop = handle->loop; - DWORD result, bytes; - - UV_REQ_INIT(req, UV_UDP_SEND); - req->handle = handle; - req->cb = cb; - memset(&req->u.io.overlapped, 0, sizeof(req->u.io.overlapped)); - - result = WSASendTo(handle->socket, - (WSABUF*)bufs, - nbufs, - &bytes, - 0, - addr, - addrlen, - &req->u.io.overlapped, - NULL); - - if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) { - /* Request completed immediately. */ - req->u.io.queued_bytes = 0; - handle->reqs_pending++; - handle->send_queue_size += req->u.io.queued_bytes; - handle->send_queue_count++; - REGISTER_HANDLE_REQ(loop, handle, req); - uv_insert_pending_req(loop, (uv_req_t*)req); - } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { - /* Request queued by the kernel. */ - req->u.io.queued_bytes = uv__count_bufs(bufs, nbufs); - handle->reqs_pending++; - handle->send_queue_size += req->u.io.queued_bytes; - handle->send_queue_count++; - REGISTER_HANDLE_REQ(loop, handle, req); - } else { - /* Send failed due to an error. */ - return WSAGetLastError(); - } - - return 0; -} - - -void uv_process_udp_recv_req(uv_loop_t* loop, uv_udp_t* handle, - uv_req_t* req) { - uv_buf_t buf; - int partial; - - assert(handle->type == UV_UDP); - - handle->flags &= ~UV_HANDLE_READ_PENDING; - - if (!REQ_SUCCESS(req)) { - DWORD err = GET_REQ_SOCK_ERROR(req); - if (err == WSAEMSGSIZE) { - /* Not a real error, it just indicates that the received packet was - * bigger than the receive buffer. */ - } else if (err == WSAECONNRESET || err == WSAENETRESET) { - /* A previous sendto operation failed; ignore this error. If zero-reading - * we need to call WSARecv/WSARecvFrom _without_ the. MSG_PEEK flag to - * clear out the error queue. For nonzero reads, immediately queue a new - * receive. */ - if (!(handle->flags & UV_HANDLE_ZERO_READ)) { - goto done; - } - } else { - /* A real error occurred. Report the error to the user only if we're - * currently reading. */ - if (handle->flags & UV_HANDLE_READING) { - uv_udp_recv_stop(handle); - buf = (handle->flags & UV_HANDLE_ZERO_READ) ? - uv_buf_init(NULL, 0) : handle->recv_buffer; - handle->recv_cb(handle, uv_translate_sys_error(err), &buf, NULL, 0); - } - goto done; - } - } - - if (!(handle->flags & UV_HANDLE_ZERO_READ)) { - /* Successful read */ - partial = !REQ_SUCCESS(req); - handle->recv_cb(handle, - req->u.io.overlapped.InternalHigh, - &handle->recv_buffer, - (const struct sockaddr*) &handle->recv_from, - partial ? UV_UDP_PARTIAL : 0); - } else if (handle->flags & UV_HANDLE_READING) { - DWORD bytes, err, flags; - struct sockaddr_storage from; - int from_len; - - /* Do a nonblocking receive. - * TODO: try to read multiple datagrams at once. FIONREAD maybe? */ - buf = uv_buf_init(NULL, 0); - handle->alloc_cb((uv_handle_t*) handle, UV__UDP_DGRAM_MAXSIZE, &buf); - if (buf.base == NULL || buf.len == 0) { - handle->recv_cb(handle, UV_ENOBUFS, &buf, NULL, 0); - goto done; - } - assert(buf.base != NULL); - - memset(&from, 0, sizeof from); - from_len = sizeof from; - - flags = 0; - - if (WSARecvFrom(handle->socket, - (WSABUF*)&buf, - 1, - &bytes, - &flags, - (struct sockaddr*) &from, - &from_len, - NULL, - NULL) != SOCKET_ERROR) { - - /* Message received */ - handle->recv_cb(handle, bytes, &buf, (const struct sockaddr*) &from, 0); - } else { - err = WSAGetLastError(); - if (err == WSAEMSGSIZE) { - /* Message truncated */ - handle->recv_cb(handle, - bytes, - &buf, - (const struct sockaddr*) &from, - UV_UDP_PARTIAL); - } else if (err == WSAEWOULDBLOCK) { - /* Kernel buffer empty */ - handle->recv_cb(handle, 0, &buf, NULL, 0); - } else if (err == WSAECONNRESET || err == WSAENETRESET) { - /* WSAECONNRESET/WSANETRESET is ignored because this just indicates - * that a previous sendto operation failed. - */ - handle->recv_cb(handle, 0, &buf, NULL, 0); - } else { - /* Any other error that we want to report back to the user. */ - uv_udp_recv_stop(handle); - handle->recv_cb(handle, uv_translate_sys_error(err), &buf, NULL, 0); - } - } - } - -done: - /* Post another read if still reading and not closing. */ - if ((handle->flags & UV_HANDLE_READING) && - !(handle->flags & UV_HANDLE_READ_PENDING)) { - uv_udp_queue_recv(loop, handle); - } - - DECREASE_PENDING_REQ_COUNT(handle); -} - - -void uv_process_udp_send_req(uv_loop_t* loop, uv_udp_t* handle, - uv_udp_send_t* req) { - int err; - - assert(handle->type == UV_UDP); - - assert(handle->send_queue_size >= req->u.io.queued_bytes); - assert(handle->send_queue_count >= 1); - handle->send_queue_size -= req->u.io.queued_bytes; - handle->send_queue_count--; - - UNREGISTER_HANDLE_REQ(loop, handle, req); - - if (req->cb) { - err = 0; - if (!REQ_SUCCESS(req)) { - err = GET_REQ_SOCK_ERROR(req); - } - req->cb(req, uv_translate_sys_error(err)); - } - - DECREASE_PENDING_REQ_COUNT(handle); -} - - -static int uv__udp_set_membership4(uv_udp_t* handle, - const struct sockaddr_in* multicast_addr, - const char* interface_addr, - uv_membership membership) { - int err; - int optname; - struct ip_mreq mreq; - - if (handle->flags & UV_HANDLE_IPV6) - return UV_EINVAL; - - /* If the socket is unbound, bind to inaddr_any. */ - err = uv_udp_maybe_bind(handle, - (const struct sockaddr*) &uv_addr_ip4_any_, - sizeof(uv_addr_ip4_any_), - UV_UDP_REUSEADDR); - if (err) - return uv_translate_sys_error(err); - - memset(&mreq, 0, sizeof mreq); - - if (interface_addr) { - err = uv_inet_pton(AF_INET, interface_addr, &mreq.imr_interface.s_addr); - if (err) - return err; - } else { - mreq.imr_interface.s_addr = htonl(INADDR_ANY); - } - - mreq.imr_multiaddr.s_addr = multicast_addr->sin_addr.s_addr; - - switch (membership) { - case UV_JOIN_GROUP: - optname = IP_ADD_MEMBERSHIP; - break; - case UV_LEAVE_GROUP: - optname = IP_DROP_MEMBERSHIP; - break; - default: - return UV_EINVAL; - } - - if (setsockopt(handle->socket, - IPPROTO_IP, - optname, - (char*) &mreq, - sizeof mreq) == SOCKET_ERROR) { - return uv_translate_sys_error(WSAGetLastError()); - } - - return 0; -} - - -int uv__udp_set_membership6(uv_udp_t* handle, - const struct sockaddr_in6* multicast_addr, - const char* interface_addr, - uv_membership membership) { - int optname; - int err; - struct ipv6_mreq mreq; - struct sockaddr_in6 addr6; - - if ((handle->flags & UV_HANDLE_BOUND) && !(handle->flags & UV_HANDLE_IPV6)) - return UV_EINVAL; - - err = uv_udp_maybe_bind(handle, - (const struct sockaddr*) &uv_addr_ip6_any_, - sizeof(uv_addr_ip6_any_), - UV_UDP_REUSEADDR); - - if (err) - return uv_translate_sys_error(err); - - memset(&mreq, 0, sizeof(mreq)); - - if (interface_addr) { - if (uv_ip6_addr(interface_addr, 0, &addr6)) - return UV_EINVAL; - mreq.ipv6mr_interface = addr6.sin6_scope_id; - } else { - mreq.ipv6mr_interface = 0; - } - - mreq.ipv6mr_multiaddr = multicast_addr->sin6_addr; - - switch (membership) { - case UV_JOIN_GROUP: - optname = IPV6_ADD_MEMBERSHIP; - break; - case UV_LEAVE_GROUP: - optname = IPV6_DROP_MEMBERSHIP; - break; - default: - return UV_EINVAL; - } - - if (setsockopt(handle->socket, - IPPROTO_IPV6, - optname, - (char*) &mreq, - sizeof mreq) == SOCKET_ERROR) { - return uv_translate_sys_error(WSAGetLastError()); - } - - return 0; -} - - -static int uv__udp_set_source_membership4(uv_udp_t* handle, - const struct sockaddr_in* multicast_addr, - const char* interface_addr, - const struct sockaddr_in* source_addr, - uv_membership membership) { - struct ip_mreq_source mreq; - int optname; - int err; - - if (handle->flags & UV_HANDLE_IPV6) - return UV_EINVAL; - - /* If the socket is unbound, bind to inaddr_any. */ - err = uv_udp_maybe_bind(handle, - (const struct sockaddr*) &uv_addr_ip4_any_, - sizeof(uv_addr_ip4_any_), - UV_UDP_REUSEADDR); - if (err) - return uv_translate_sys_error(err); - - memset(&mreq, 0, sizeof(mreq)); - - if (interface_addr != NULL) { - err = uv_inet_pton(AF_INET, interface_addr, &mreq.imr_interface.s_addr); - if (err) - return err; - } else { - mreq.imr_interface.s_addr = htonl(INADDR_ANY); - } - - mreq.imr_multiaddr.s_addr = multicast_addr->sin_addr.s_addr; - mreq.imr_sourceaddr.s_addr = source_addr->sin_addr.s_addr; - - if (membership == UV_JOIN_GROUP) - optname = IP_ADD_SOURCE_MEMBERSHIP; - else if (membership == UV_LEAVE_GROUP) - optname = IP_DROP_SOURCE_MEMBERSHIP; - else - return UV_EINVAL; - - if (setsockopt(handle->socket, - IPPROTO_IP, - optname, - (char*) &mreq, - sizeof(mreq)) == SOCKET_ERROR) { - return uv_translate_sys_error(WSAGetLastError()); - } - - return 0; -} - - -int uv__udp_set_source_membership6(uv_udp_t* handle, - const struct sockaddr_in6* multicast_addr, - const char* interface_addr, - const struct sockaddr_in6* source_addr, - uv_membership membership) { - struct group_source_req mreq; - struct sockaddr_in6 addr6; - int optname; - int err; - - STATIC_ASSERT(sizeof(mreq.gsr_group) >= sizeof(*multicast_addr)); - STATIC_ASSERT(sizeof(mreq.gsr_source) >= sizeof(*source_addr)); - - if ((handle->flags & UV_HANDLE_BOUND) && !(handle->flags & UV_HANDLE_IPV6)) - return UV_EINVAL; - - err = uv_udp_maybe_bind(handle, - (const struct sockaddr*) &uv_addr_ip6_any_, - sizeof(uv_addr_ip6_any_), - UV_UDP_REUSEADDR); - - if (err) - return uv_translate_sys_error(err); - - memset(&mreq, 0, sizeof(mreq)); - - if (interface_addr != NULL) { - err = uv_ip6_addr(interface_addr, 0, &addr6); - if (err) - return err; - mreq.gsr_interface = addr6.sin6_scope_id; - } else { - mreq.gsr_interface = 0; - } - - memcpy(&mreq.gsr_group, multicast_addr, sizeof(*multicast_addr)); - memcpy(&mreq.gsr_source, source_addr, sizeof(*source_addr)); - - if (membership == UV_JOIN_GROUP) - optname = MCAST_JOIN_SOURCE_GROUP; - else if (membership == UV_LEAVE_GROUP) - optname = MCAST_LEAVE_SOURCE_GROUP; - else - return UV_EINVAL; - - if (setsockopt(handle->socket, - IPPROTO_IPV6, - optname, - (char*) &mreq, - sizeof(mreq)) == SOCKET_ERROR) { - return uv_translate_sys_error(WSAGetLastError()); - } - - return 0; -} - - -int uv_udp_set_membership(uv_udp_t* handle, - const char* multicast_addr, - const char* interface_addr, - uv_membership membership) { - struct sockaddr_in addr4; - struct sockaddr_in6 addr6; - - if (uv_ip4_addr(multicast_addr, 0, &addr4) == 0) - return uv__udp_set_membership4(handle, &addr4, interface_addr, membership); - else if (uv_ip6_addr(multicast_addr, 0, &addr6) == 0) - return uv__udp_set_membership6(handle, &addr6, interface_addr, membership); - else - return UV_EINVAL; -} - - -int uv_udp_set_source_membership(uv_udp_t* handle, - const char* multicast_addr, - const char* interface_addr, - const char* source_addr, - uv_membership membership) { - int err; - struct sockaddr_storage mcast_addr; - struct sockaddr_in* mcast_addr4; - struct sockaddr_in6* mcast_addr6; - struct sockaddr_storage src_addr; - struct sockaddr_in* src_addr4; - struct sockaddr_in6* src_addr6; - - mcast_addr4 = (struct sockaddr_in*)&mcast_addr; - mcast_addr6 = (struct sockaddr_in6*)&mcast_addr; - src_addr4 = (struct sockaddr_in*)&src_addr; - src_addr6 = (struct sockaddr_in6*)&src_addr; - - err = uv_ip4_addr(multicast_addr, 0, mcast_addr4); - if (err) { - err = uv_ip6_addr(multicast_addr, 0, mcast_addr6); - if (err) - return err; - err = uv_ip6_addr(source_addr, 0, src_addr6); - if (err) - return err; - return uv__udp_set_source_membership6(handle, - mcast_addr6, - interface_addr, - src_addr6, - membership); - } - - err = uv_ip4_addr(source_addr, 0, src_addr4); - if (err) - return err; - return uv__udp_set_source_membership4(handle, - mcast_addr4, - interface_addr, - src_addr4, - membership); -} - - -int uv_udp_set_multicast_interface(uv_udp_t* handle, const char* interface_addr) { - struct sockaddr_storage addr_st; - struct sockaddr_in* addr4; - struct sockaddr_in6* addr6; - - addr4 = (struct sockaddr_in*) &addr_st; - addr6 = (struct sockaddr_in6*) &addr_st; - - if (!interface_addr) { - memset(&addr_st, 0, sizeof addr_st); - if (handle->flags & UV_HANDLE_IPV6) { - addr_st.ss_family = AF_INET6; - addr6->sin6_scope_id = 0; - } else { - addr_st.ss_family = AF_INET; - addr4->sin_addr.s_addr = htonl(INADDR_ANY); - } - } else if (uv_ip4_addr(interface_addr, 0, addr4) == 0) { - /* nothing, address was parsed */ - } else if (uv_ip6_addr(interface_addr, 0, addr6) == 0) { - /* nothing, address was parsed */ - } else { - return UV_EINVAL; - } - - if (handle->socket == INVALID_SOCKET) - return UV_EBADF; - - if (addr_st.ss_family == AF_INET) { - if (setsockopt(handle->socket, - IPPROTO_IP, - IP_MULTICAST_IF, - (char*) &addr4->sin_addr, - sizeof(addr4->sin_addr)) == SOCKET_ERROR) { - return uv_translate_sys_error(WSAGetLastError()); - } - } else if (addr_st.ss_family == AF_INET6) { - if (setsockopt(handle->socket, - IPPROTO_IPV6, - IPV6_MULTICAST_IF, - (char*) &addr6->sin6_scope_id, - sizeof(addr6->sin6_scope_id)) == SOCKET_ERROR) { - return uv_translate_sys_error(WSAGetLastError()); - } - } else { - assert(0 && "unexpected address family"); - abort(); - } - - return 0; -} - - -int uv_udp_set_broadcast(uv_udp_t* handle, int value) { - BOOL optval = (BOOL) value; - - if (handle->socket == INVALID_SOCKET) - return UV_EBADF; - - if (setsockopt(handle->socket, - SOL_SOCKET, - SO_BROADCAST, - (char*) &optval, - sizeof optval)) { - return uv_translate_sys_error(WSAGetLastError()); - } - - return 0; -} - - -int uv__udp_is_bound(uv_udp_t* handle) { - struct sockaddr_storage addr; - int addrlen; - - addrlen = sizeof(addr); - if (uv_udp_getsockname(handle, (struct sockaddr*) &addr, &addrlen) != 0) - return 0; - - return addrlen > 0; -} - - -int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) { - WSAPROTOCOL_INFOW protocol_info; - int opt_len; - int err; - - /* Detect the address family of the socket. */ - opt_len = (int) sizeof protocol_info; - if (getsockopt(sock, - SOL_SOCKET, - SO_PROTOCOL_INFOW, - (char*) &protocol_info, - &opt_len) == SOCKET_ERROR) { - return uv_translate_sys_error(GetLastError()); - } - - err = uv_udp_set_socket(handle->loop, - handle, - sock, - protocol_info.iAddressFamily); - if (err) - return uv_translate_sys_error(err); - - if (uv__udp_is_bound(handle)) - handle->flags |= UV_HANDLE_BOUND; - - if (uv__udp_is_connected(handle)) - handle->flags |= UV_HANDLE_UDP_CONNECTED; - - return 0; -} - - -#define SOCKOPT_SETTER(name, option4, option6, validate) \ - int uv_udp_set_##name(uv_udp_t* handle, int value) { \ - DWORD optval = (DWORD) value; \ - \ - if (!(validate(value))) { \ - return UV_EINVAL; \ - } \ - \ - if (handle->socket == INVALID_SOCKET) \ - return UV_EBADF; \ - \ - if (!(handle->flags & UV_HANDLE_IPV6)) { \ - /* Set IPv4 socket option */ \ - if (setsockopt(handle->socket, \ - IPPROTO_IP, \ - option4, \ - (char*) &optval, \ - sizeof optval)) { \ - return uv_translate_sys_error(WSAGetLastError()); \ - } \ - } else { \ - /* Set IPv6 socket option */ \ - if (setsockopt(handle->socket, \ - IPPROTO_IPV6, \ - option6, \ - (char*) &optval, \ - sizeof optval)) { \ - return uv_translate_sys_error(WSAGetLastError()); \ - } \ - } \ - return 0; \ - } - -#define VALIDATE_TTL(value) ((value) >= 1 && (value) <= 255) -#define VALIDATE_MULTICAST_TTL(value) ((value) >= -1 && (value) <= 255) -#define VALIDATE_MULTICAST_LOOP(value) (1) - -SOCKOPT_SETTER(ttl, - IP_TTL, - IPV6_HOPLIMIT, - VALIDATE_TTL) -SOCKOPT_SETTER(multicast_ttl, - IP_MULTICAST_TTL, - IPV6_MULTICAST_HOPS, - VALIDATE_MULTICAST_TTL) -SOCKOPT_SETTER(multicast_loop, - IP_MULTICAST_LOOP, - IPV6_MULTICAST_LOOP, - VALIDATE_MULTICAST_LOOP) - -#undef SOCKOPT_SETTER -#undef VALIDATE_TTL -#undef VALIDATE_MULTICAST_TTL -#undef VALIDATE_MULTICAST_LOOP - - -/* This function is an egress point, i.e. it returns libuv errors rather than - * system errors. - */ -int uv__udp_bind(uv_udp_t* handle, - const struct sockaddr* addr, - unsigned int addrlen, - unsigned int flags) { - int err; - - err = uv_udp_maybe_bind(handle, addr, addrlen, flags); - if (err) - return uv_translate_sys_error(err); - - return 0; -} - - -int uv__udp_connect(uv_udp_t* handle, - const struct sockaddr* addr, - unsigned int addrlen) { - const struct sockaddr* bind_addr; - int err; - - if (!(handle->flags & UV_HANDLE_BOUND)) { - if (addrlen == sizeof(uv_addr_ip4_any_)) - bind_addr = (const struct sockaddr*) &uv_addr_ip4_any_; - else if (addrlen == sizeof(uv_addr_ip6_any_)) - bind_addr = (const struct sockaddr*) &uv_addr_ip6_any_; - else - return UV_EINVAL; - - err = uv_udp_maybe_bind(handle, bind_addr, addrlen, 0); - if (err) - return uv_translate_sys_error(err); - } - - err = connect(handle->socket, addr, addrlen); - if (err) - return uv_translate_sys_error(WSAGetLastError()); - - handle->flags |= UV_HANDLE_UDP_CONNECTED; - - return 0; -} - - -int uv__udp_disconnect(uv_udp_t* handle) { - int err; - struct sockaddr addr; - - memset(&addr, 0, sizeof(addr)); - - err = connect(handle->socket, &addr, sizeof(addr)); - if (err) - return uv_translate_sys_error(WSAGetLastError()); - - handle->flags &= ~UV_HANDLE_UDP_CONNECTED; - return 0; -} - - -/* This function is an egress point, i.e. it returns libuv errors rather than - * system errors. - */ -int uv__udp_send(uv_udp_send_t* req, - uv_udp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - const struct sockaddr* addr, - unsigned int addrlen, - uv_udp_send_cb send_cb) { - const struct sockaddr* bind_addr; - int err; - - if (!(handle->flags & UV_HANDLE_BOUND)) { - if (addrlen == sizeof(uv_addr_ip4_any_)) - bind_addr = (const struct sockaddr*) &uv_addr_ip4_any_; - else if (addrlen == sizeof(uv_addr_ip6_any_)) - bind_addr = (const struct sockaddr*) &uv_addr_ip6_any_; - else - return UV_EINVAL; - - err = uv_udp_maybe_bind(handle, bind_addr, addrlen, 0); - if (err) - return uv_translate_sys_error(err); - } - - err = uv__send(req, handle, bufs, nbufs, addr, addrlen, send_cb); - if (err) - return uv_translate_sys_error(err); - - return 0; -} - - -int uv__udp_try_send(uv_udp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - const struct sockaddr* addr, - unsigned int addrlen) { - DWORD bytes; - const struct sockaddr* bind_addr; - struct sockaddr_storage converted; - int err; - - assert(nbufs > 0); - - if (addr != NULL) { - err = uv__convert_to_localhost_if_unspecified(addr, &converted); - if (err) - return err; - } - - /* Already sending a message.*/ - if (handle->send_queue_count != 0) - return UV_EAGAIN; - - if (!(handle->flags & UV_HANDLE_BOUND)) { - if (addrlen == sizeof(uv_addr_ip4_any_)) - bind_addr = (const struct sockaddr*) &uv_addr_ip4_any_; - else if (addrlen == sizeof(uv_addr_ip6_any_)) - bind_addr = (const struct sockaddr*) &uv_addr_ip6_any_; - else - return UV_EINVAL; - err = uv_udp_maybe_bind(handle, bind_addr, addrlen, 0); - if (err) - return uv_translate_sys_error(err); - } - - err = WSASendTo(handle->socket, - (WSABUF*)bufs, - nbufs, - &bytes, - 0, - (const struct sockaddr*) &converted, - addrlen, - NULL, - NULL); - - if (err) - return uv_translate_sys_error(WSAGetLastError()); - - return bytes; -} diff --git a/libuv/src/win/util.c b/libuv/src/win/util.c deleted file mode 100644 index 88602c7..0000000 --- a/libuv/src/win/util.c +++ /dev/null @@ -1,1984 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "uv.h" -#include "internal.h" - -/* clang-format off */ -#include -#include -#include -#include -#include -#include -/* clang-format on */ -#include -#include - -/* - * Max title length; the only thing MSDN tells us about the maximum length - * of the console title is that it is smaller than 64K. However in practice - * it is much smaller, and there is no way to figure out what the exact length - * of the title is or can be, at least not on XP. To make it even more - * annoying, GetConsoleTitle fails when the buffer to be read into is bigger - * than the actual maximum length. So we make a conservative guess here; - * just don't put the novel you're writing in the title, unless the plot - * survives truncation. - */ -#define MAX_TITLE_LENGTH 8192 - -/* The number of nanoseconds in one second. */ -#define UV__NANOSEC 1000000000 - -/* Max user name length, from iphlpapi.h */ -#ifndef UNLEN -# define UNLEN 256 -#endif - - -/* A RtlGenRandom() by any other name... */ -extern BOOLEAN NTAPI SystemFunction036(PVOID Buffer, ULONG BufferLength); - -/* Cached copy of the process title, plus a mutex guarding it. */ -static char *process_title; -static CRITICAL_SECTION process_title_lock; - -/* Frequency of the high-resolution clock. */ -static uint64_t hrtime_frequency_ = 0; - - -/* - * One-time initialization code for functionality defined in util.c. - */ -void uv__util_init(void) { - LARGE_INTEGER perf_frequency; - - /* Initialize process title access mutex. */ - InitializeCriticalSection(&process_title_lock); - - /* Retrieve high-resolution timer frequency - * and precompute its reciprocal. - */ - if (QueryPerformanceFrequency(&perf_frequency)) { - hrtime_frequency_ = perf_frequency.QuadPart; - } else { - uv_fatal_error(GetLastError(), "QueryPerformanceFrequency"); - } -} - - -int uv_exepath(char* buffer, size_t* size_ptr) { - int utf8_len, utf16_buffer_len, utf16_len; - WCHAR* utf16_buffer; - int err; - - if (buffer == NULL || size_ptr == NULL || *size_ptr == 0) { - return UV_EINVAL; - } - - if (*size_ptr > 32768) { - /* Windows paths can never be longer than this. */ - utf16_buffer_len = 32768; - } else { - utf16_buffer_len = (int) *size_ptr; - } - - utf16_buffer = (WCHAR*) uv__malloc(sizeof(WCHAR) * utf16_buffer_len); - if (!utf16_buffer) { - return UV_ENOMEM; - } - - /* Get the path as UTF-16. */ - utf16_len = GetModuleFileNameW(NULL, utf16_buffer, utf16_buffer_len); - if (utf16_len <= 0) { - err = GetLastError(); - goto error; - } - - /* utf16_len contains the length, *not* including the terminating null. */ - utf16_buffer[utf16_len] = L'\0'; - - /* 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; - } - - 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; - - error: - uv__free(utf16_buffer); - return uv_translate_sys_error(err); -} - - -int uv_cwd(char* buffer, size_t* size) { - DWORD utf16_len; - WCHAR *utf16_buffer; - int r; - - if (buffer == NULL || size == NULL) { - return UV_EINVAL; - } - - utf16_len = GetCurrentDirectoryW(0, NULL); - 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; - } - - utf16_len = GetCurrentDirectoryW(utf16_len, utf16_buffer); - if (utf16_len == 0) { - uv__free(utf16_buffer); - return uv_translate_sys_error(GetLastError()); - } - - /* utf16_len contains the length, *not* including the terminating null. */ - utf16_buffer[utf16_len] = L'\0'; - - /* The returned directory should not have a trailing slash, unless it points - * at a drive root, like c:\. Remove it if needed. */ - if (utf16_buffer[utf16_len - 1] == L'\\' && - !(utf16_len == 3 && utf16_buffer[1] == L':')) { - utf16_len--; - utf16_buffer[utf16_len] = L'\0'; - } - - /* 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; - } - - /* 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; -} - - -int uv_chdir(const char* dir) { - WCHAR *utf16_buffer; - size_t utf16_len, new_utf16_len; - WCHAR drive_letter, env_var[4]; - - 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()); - } - - if (!SetCurrentDirectoryW(utf16_buffer)) { - uv__free(utf16_buffer); - return uv_translate_sys_error(GetLastError()); - } - - /* Windows stores the drive-local path in an "hidden" environment variable, - * which has the form "=C:=C:\Windows". SetCurrentDirectory does not update - * this, so we'll have to do it. */ - new_utf16_len = GetCurrentDirectoryW(utf16_len, utf16_buffer); - if (new_utf16_len > utf16_len ) { - uv__free(utf16_buffer); - utf16_buffer = uv__malloc(new_utf16_len * sizeof(WCHAR)); - if (utf16_buffer == NULL) { - /* When updating the environment variable fails, return UV_OK anyway. - * We did successfully change current working directory, only updating - * hidden env variable failed. */ - return 0; - } - new_utf16_len = GetCurrentDirectoryW(new_utf16_len, utf16_buffer); - } - if (utf16_len == 0) { - uv__free(utf16_buffer); - return 0; - } - - /* The returned directory should not have a trailing slash, unless it points - * at a drive root, like c:\. Remove it if needed. */ - if (utf16_buffer[utf16_len - 1] == L'\\' && - !(utf16_len == 3 && utf16_buffer[1] == L':')) { - utf16_len--; - utf16_buffer[utf16_len] = L'\0'; - } - - if (utf16_len < 2 || utf16_buffer[1] != L':') { - /* Doesn't look like a drive letter could be there - probably an UNC path. - * TODO: Need to handle win32 namespaces like \\?\C:\ ? */ - drive_letter = 0; - } else if (utf16_buffer[0] >= L'A' && utf16_buffer[0] <= L'Z') { - drive_letter = utf16_buffer[0]; - } else if (utf16_buffer[0] >= L'a' && utf16_buffer[0] <= L'z') { - /* Convert to uppercase. */ - drive_letter = utf16_buffer[0] - L'a' + L'A'; - } else { - /* Not valid. */ - drive_letter = 0; - } - - if (drive_letter != 0) { - /* Construct the environment variable name and set it. */ - env_var[0] = L'='; - env_var[1] = drive_letter; - env_var[2] = L':'; - env_var[3] = L'\0'; - - SetEnvironmentVariableW(env_var, utf16_buffer); - } - - uv__free(utf16_buffer); - return 0; -} - - -void uv_loadavg(double avg[3]) { - /* Can't be implemented */ - avg[0] = avg[1] = avg[2] = 0; -} - - -uint64_t uv_get_free_memory(void) { - MEMORYSTATUSEX memory_status; - memory_status.dwLength = sizeof(memory_status); - - if (!GlobalMemoryStatusEx(&memory_status)) { - return -1; - } - - return (uint64_t)memory_status.ullAvailPhys; -} - - -uint64_t uv_get_total_memory(void) { - MEMORYSTATUSEX memory_status; - memory_status.dwLength = sizeof(memory_status); - - if (!GlobalMemoryStatusEx(&memory_status)) { - return -1; - } - - return (uint64_t)memory_status.ullTotalPhys; -} - - -uint64_t uv_get_constrained_memory(void) { - return 0; /* Memory constraints are unknown. */ -} - - -uv_pid_t uv_os_getpid(void) { - return GetCurrentProcessId(); -} - - -uv_pid_t uv_os_getppid(void) { - int parent_pid = -1; - HANDLE handle; - PROCESSENTRY32 pe; - DWORD current_pid = GetCurrentProcessId(); - - pe.dwSize = sizeof(PROCESSENTRY32); - handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); - - if (Process32First(handle, &pe)) { - do { - if (pe.th32ProcessID == current_pid) { - parent_pid = pe.th32ParentProcessID; - break; - } - } while( Process32Next(handle, &pe)); - } - - CloseHandle(handle); - return parent_pid; -} - - -char** uv_setup_args(int argc, char** argv) { - return argv; -} - - -void uv__process_title_cleanup(void) { -} - - -int uv_set_process_title(const char* title) { - int err; - int length; - WCHAR* title_w = NULL; - - 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; - } - - /* If the title must be truncated insert a \0 terminator there */ - if (length > MAX_TITLE_LENGTH) { - title_w[MAX_TITLE_LENGTH - 1] = L'\0'; - } - - if (!SetConsoleTitleW(title_w)) { - err = GetLastError(); - goto done; - } - - EnterCriticalSection(&process_title_lock); - uv__free(process_title); - process_title = uv__strdup(title); - LeaveCriticalSection(&process_title_lock); - - err = 0; - -done: - uv__free(title_w); - return uv_translate_sys_error(err); -} - - -static int uv__get_process_title(void) { - WCHAR title_w[MAX_TITLE_LENGTH]; - - if (!GetConsoleTitleW(title_w, sizeof(title_w) / sizeof(WCHAR))) { - return -1; - } - - if (uv__convert_utf16_to_utf8(title_w, -1, &process_title) != 0) - return -1; - - return 0; -} - - -int uv_get_process_title(char* buffer, size_t size) { - size_t len; - - if (buffer == NULL || size == 0) - return UV_EINVAL; - - uv__once_init(); - - EnterCriticalSection(&process_title_lock); - /* - * 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()); - } - - assert(process_title); - len = strlen(process_title) + 1; - - if (size < len) { - LeaveCriticalSection(&process_title_lock); - return UV_ENOBUFS; - } - - memcpy(buffer, process_title, len); - LeaveCriticalSection(&process_title_lock); - - return 0; -} - - -uint64_t uv_hrtime(void) { - uv__once_init(); - return uv__hrtime(UV__NANOSEC); -} - -uint64_t uv__hrtime(unsigned int scale) { - LARGE_INTEGER counter; - double scaled_freq; - double result; - - assert(hrtime_frequency_ != 0); - assert(scale != 0); - if (!QueryPerformanceCounter(&counter)) { - uv_fatal_error(GetLastError(), "QueryPerformanceCounter"); - } - assert(counter.QuadPart != 0); - - /* Because we have no guarantee about the order of magnitude of the - * performance counter interval, integer math could cause this computation - * to overflow. Therefore we resort to floating point math. - */ - scaled_freq = (double) hrtime_frequency_ / scale; - result = (double) counter.QuadPart / scaled_freq; - return (uint64_t) result; -} - - -int uv_resident_set_memory(size_t* rss) { - HANDLE current_process; - PROCESS_MEMORY_COUNTERS pmc; - - current_process = GetCurrentProcess(); - - if (!GetProcessMemoryInfo(current_process, &pmc, sizeof(pmc))) { - return uv_translate_sys_error(GetLastError()); - } - - *rss = pmc.WorkingSetSize; - - return 0; -} - - -int uv_uptime(double* uptime) { - BYTE stack_buffer[4096]; - BYTE* malloced_buffer = NULL; - BYTE* buffer = (BYTE*) stack_buffer; - size_t buffer_size = sizeof(stack_buffer); - DWORD data_size; - - PERF_DATA_BLOCK* data_block; - PERF_OBJECT_TYPE* object_type; - PERF_COUNTER_DEFINITION* counter_definition; - - DWORD i; - - for (;;) { - LONG result; - - data_size = (DWORD) buffer_size; - result = RegQueryValueExW(HKEY_PERFORMANCE_DATA, - L"2", - NULL, - NULL, - buffer, - &data_size); - if (result == ERROR_SUCCESS) { - break; - } else if (result != ERROR_MORE_DATA) { - *uptime = 0; - return uv_translate_sys_error(result); - } - - buffer_size *= 2; - /* Don't let the buffer grow infinitely. */ - if (buffer_size > 1 << 20) { - goto internalError; - } - - uv__free(malloced_buffer); - - buffer = malloced_buffer = (BYTE*) uv__malloc(buffer_size); - if (malloced_buffer == NULL) { - *uptime = 0; - return UV_ENOMEM; - } - } - - if (data_size < sizeof(*data_block)) - goto internalError; - - data_block = (PERF_DATA_BLOCK*) buffer; - - if (wmemcmp(data_block->Signature, L"PERF", 4) != 0) - goto internalError; - - if (data_size < data_block->HeaderLength + sizeof(*object_type)) - goto internalError; - - object_type = (PERF_OBJECT_TYPE*) (buffer + data_block->HeaderLength); - - if (object_type->NumInstances != PERF_NO_INSTANCES) - goto internalError; - - counter_definition = (PERF_COUNTER_DEFINITION*) (buffer + - data_block->HeaderLength + object_type->HeaderLength); - for (i = 0; i < object_type->NumCounters; i++) { - if ((BYTE*) counter_definition + sizeof(*counter_definition) > - buffer + data_size) { - break; - } - - if (counter_definition->CounterNameTitleIndex == 674 && - counter_definition->CounterSize == sizeof(uint64_t)) { - if (counter_definition->CounterOffset + sizeof(uint64_t) > data_size || - !(counter_definition->CounterType & PERF_OBJECT_TIMER)) { - goto internalError; - } else { - BYTE* address = (BYTE*) object_type + object_type->DefinitionLength + - counter_definition->CounterOffset; - uint64_t value = *((uint64_t*) address); - *uptime = floor((double) (object_type->PerfTime.QuadPart - value) / - (double) object_type->PerfFreq.QuadPart); - uv__free(malloced_buffer); - return 0; - } - } - - counter_definition = (PERF_COUNTER_DEFINITION*) - ((BYTE*) counter_definition + counter_definition->ByteLength); - } - - /* If we get here, the uptime value was not found. */ - uv__free(malloced_buffer); - *uptime = 0; - return UV_ENOSYS; - - internalError: - uv__free(malloced_buffer); - *uptime = 0; - return UV_EIO; -} - - -int uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) { - uv_cpu_info_t* cpu_infos; - SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION* sppi; - DWORD sppi_size; - SYSTEM_INFO system_info; - DWORD cpu_count, i; - NTSTATUS status; - ULONG result_size; - int err; - uv_cpu_info_t* cpu_info; - - cpu_infos = NULL; - cpu_count = 0; - sppi = NULL; - - uv__once_init(); - - GetSystemInfo(&system_info); - cpu_count = system_info.dwNumberOfProcessors; - - cpu_infos = uv__calloc(cpu_count, sizeof *cpu_infos); - if (cpu_infos == NULL) { - err = ERROR_OUTOFMEMORY; - goto error; - } - - sppi_size = cpu_count * sizeof(*sppi); - sppi = uv__malloc(sppi_size); - if (sppi == NULL) { - err = ERROR_OUTOFMEMORY; - goto error; - } - - status = pNtQuerySystemInformation(SystemProcessorPerformanceInformation, - sppi, - sppi_size, - &result_size); - if (!NT_SUCCESS(status)) { - err = pRtlNtStatusToDosError(status); - goto error; - } - - assert(result_size == sppi_size); - - for (i = 0; i < cpu_count; i++) { - WCHAR key_name[128]; - HKEY processor_key; - DWORD cpu_speed; - DWORD cpu_speed_size = sizeof(cpu_speed); - WCHAR cpu_brand[256]; - DWORD cpu_brand_size = sizeof(cpu_brand); - size_t len; - - len = _snwprintf(key_name, - ARRAY_SIZE(key_name), - L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\%d", - i); - - assert(len > 0 && len < ARRAY_SIZE(key_name)); - - err = RegOpenKeyExW(HKEY_LOCAL_MACHINE, - key_name, - 0, - KEY_QUERY_VALUE, - &processor_key); - if (err != ERROR_SUCCESS) { - goto error; - } - - err = RegQueryValueExW(processor_key, - L"~MHz", - NULL, - NULL, - (BYTE*)&cpu_speed, - &cpu_speed_size); - if (err != ERROR_SUCCESS) { - RegCloseKey(processor_key); - goto error; - } - - err = RegQueryValueExW(processor_key, - L"ProcessorNameString", - NULL, - NULL, - (BYTE*)&cpu_brand, - &cpu_brand_size); - RegCloseKey(processor_key); - if (err != ERROR_SUCCESS) - goto error; - - cpu_info = &cpu_infos[i]; - cpu_info->speed = cpu_speed; - cpu_info->cpu_times.user = sppi[i].UserTime.QuadPart / 10000; - cpu_info->cpu_times.sys = (sppi[i].KernelTime.QuadPart - - sppi[i].IdleTime.QuadPart) / 10000; - cpu_info->cpu_times.idle = sppi[i].IdleTime.QuadPart / 10000; - cpu_info->cpu_times.irq = sppi[i].InterruptTime.QuadPart / 10000; - cpu_info->cpu_times.nice = 0; - - uv__convert_utf16_to_utf8(cpu_brand, - cpu_brand_size / sizeof(WCHAR), - &(cpu_info->model)); - } - - uv__free(sppi); - - *cpu_count_ptr = cpu_count; - *cpu_infos_ptr = cpu_infos; - - return 0; - - error: - if (cpu_infos != NULL) { - /* This is safe because the cpu_infos array is zeroed on allocation. */ - for (i = 0; i < cpu_count; i++) - uv__free(cpu_infos[i].model); - } - - uv__free(cpu_infos); - uv__free(sppi); - - return uv_translate_sys_error(err); -} - - -static int is_windows_version_or_greater(DWORD os_major, - DWORD os_minor, - WORD service_pack_major, - WORD service_pack_minor) { - OSVERSIONINFOEX osvi; - DWORDLONG condition_mask = 0; - int op = VER_GREATER_EQUAL; - - /* Initialize the OSVERSIONINFOEX structure. */ - ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); - osvi.dwMajorVersion = os_major; - osvi.dwMinorVersion = os_minor; - osvi.wServicePackMajor = service_pack_major; - osvi.wServicePackMinor = service_pack_minor; - - /* Initialize the condition mask. */ - VER_SET_CONDITION(condition_mask, VER_MAJORVERSION, op); - VER_SET_CONDITION(condition_mask, VER_MINORVERSION, op); - VER_SET_CONDITION(condition_mask, VER_SERVICEPACKMAJOR, op); - VER_SET_CONDITION(condition_mask, VER_SERVICEPACKMINOR, op); - - /* Perform the test. */ - return (int) VerifyVersionInfo( - &osvi, - VER_MAJORVERSION | VER_MINORVERSION | - VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - condition_mask); -} - - -static int address_prefix_match(int family, - struct sockaddr* address, - struct sockaddr* prefix_address, - int prefix_len) { - uint8_t* address_data; - uint8_t* prefix_address_data; - int i; - - assert(address->sa_family == family); - assert(prefix_address->sa_family == family); - - if (family == AF_INET6) { - address_data = (uint8_t*) &(((struct sockaddr_in6 *) address)->sin6_addr); - prefix_address_data = - (uint8_t*) &(((struct sockaddr_in6 *) prefix_address)->sin6_addr); - } else { - address_data = (uint8_t*) &(((struct sockaddr_in *) address)->sin_addr); - prefix_address_data = - (uint8_t*) &(((struct sockaddr_in *) prefix_address)->sin_addr); - } - - for (i = 0; i < prefix_len >> 3; i++) { - if (address_data[i] != prefix_address_data[i]) - return 0; - } - - if (prefix_len % 8) - return prefix_address_data[i] == - (address_data[i] & (0xff << (8 - prefix_len % 8))); - - return 1; -} - - -int uv_interface_addresses(uv_interface_address_t** addresses_ptr, - int* count_ptr) { - IP_ADAPTER_ADDRESSES* win_address_buf; - ULONG win_address_buf_size; - IP_ADAPTER_ADDRESSES* adapter; - - uv_interface_address_t* uv_address_buf; - char* name_buf; - size_t uv_address_buf_size; - uv_interface_address_t* uv_address; - - int count; - - int is_vista_or_greater; - ULONG flags; - - *addresses_ptr = NULL; - *count_ptr = 0; - - is_vista_or_greater = is_windows_version_or_greater(6, 0, 0, 0); - if (is_vista_or_greater) { - flags = GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST | - GAA_FLAG_SKIP_DNS_SERVER; - } else { - /* We need at least XP SP1. */ - if (!is_windows_version_or_greater(5, 1, 1, 0)) - return UV_ENOTSUP; - - flags = GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST | - GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_INCLUDE_PREFIX; - } - - - /* Fetch the size of the adapters reported by windows, and then get the list - * itself. */ - win_address_buf_size = 0; - win_address_buf = NULL; - - for (;;) { - ULONG r; - - /* If win_address_buf is 0, then GetAdaptersAddresses will fail with. - * ERROR_BUFFER_OVERFLOW, and the required buffer size will be stored in - * win_address_buf_size. */ - r = GetAdaptersAddresses(AF_UNSPEC, - flags, - NULL, - win_address_buf, - &win_address_buf_size); - - if (r == ERROR_SUCCESS) - break; - - uv__free(win_address_buf); - - switch (r) { - case ERROR_BUFFER_OVERFLOW: - /* This happens when win_address_buf is NULL or too small to hold all - * adapters. */ - win_address_buf = uv__malloc(win_address_buf_size); - if (win_address_buf == NULL) - return UV_ENOMEM; - - continue; - - case ERROR_NO_DATA: { - /* No adapters were found. */ - uv_address_buf = uv__malloc(1); - if (uv_address_buf == NULL) - return UV_ENOMEM; - - *count_ptr = 0; - *addresses_ptr = uv_address_buf; - - return 0; - } - - case ERROR_ADDRESS_NOT_ASSOCIATED: - return UV_EAGAIN; - - case ERROR_INVALID_PARAMETER: - /* MSDN says: - * "This error is returned for any of the following conditions: the - * SizePointer parameter is NULL, the Address parameter is not - * AF_INET, AF_INET6, or AF_UNSPEC, or the address information for - * the parameters requested is greater than ULONG_MAX." - * Since the first two conditions are not met, it must be that the - * adapter data is too big. - */ - return UV_ENOBUFS; - - default: - /* Other (unspecified) errors can happen, but we don't have any special - * meaning for them. */ - assert(r != ERROR_SUCCESS); - return uv_translate_sys_error(r); - } - } - - /* Count the number of enabled interfaces and compute how much space is - * needed to store their info. */ - count = 0; - uv_address_buf_size = 0; - - for (adapter = win_address_buf; - adapter != NULL; - adapter = adapter->Next) { - IP_ADAPTER_UNICAST_ADDRESS* unicast_address; - int name_size; - - /* Interfaces that are not 'up' should not be reported. Also skip - * interfaces that have no associated unicast address, as to avoid - * allocating space for the name for this interface. */ - if (adapter->OperStatus != IfOperStatusUp || - adapter->FirstUnicastAddress == NULL) - 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; - - /* Count the number of addresses associated with this interface, and - * compute the size. */ - for (unicast_address = (IP_ADAPTER_UNICAST_ADDRESS*) - adapter->FirstUnicastAddress; - unicast_address != NULL; - unicast_address = unicast_address->Next) { - count++; - uv_address_buf_size += sizeof(uv_interface_address_t); - } - } - - /* Allocate space to store interface data plus adapter names. */ - uv_address_buf = uv__malloc(uv_address_buf_size); - if (uv_address_buf == NULL) { - uv__free(win_address_buf); - return UV_ENOMEM; - } - - /* Compute the start of the uv_interface_address_t array, and the place in - * the buffer where the interface names will be stored. */ - uv_address = uv_address_buf; - name_buf = (char*) (uv_address_buf + count); - - /* Fill out the output buffer. */ - for (adapter = win_address_buf; - adapter != NULL; - adapter = adapter->Next) { - IP_ADAPTER_UNICAST_ADDRESS* unicast_address; - int name_size; - size_t max_name_size; - - 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) { - uv__free(win_address_buf); - uv__free(uv_address_buf); - return uv_translate_sys_error(GetLastError()); - } - - /* Add an uv_interface_address_t element for every unicast address. */ - for (unicast_address = (IP_ADAPTER_UNICAST_ADDRESS*) - adapter->FirstUnicastAddress; - unicast_address != NULL; - unicast_address = unicast_address->Next) { - struct sockaddr* sa; - ULONG prefix_len; - - sa = unicast_address->Address.lpSockaddr; - - /* XP has no OnLinkPrefixLength field. */ - if (is_vista_or_greater) { - prefix_len = - ((IP_ADAPTER_UNICAST_ADDRESS_LH*) unicast_address)->OnLinkPrefixLength; - } else { - /* Prior to Windows Vista the FirstPrefix pointed to the list with - * single prefix for each IP address assigned to the adapter. - * Order of FirstPrefix does not match order of FirstUnicastAddress, - * so we need to find corresponding prefix. - */ - IP_ADAPTER_PREFIX* prefix; - prefix_len = 0; - - for (prefix = adapter->FirstPrefix; prefix; prefix = prefix->Next) { - /* We want the longest matching prefix. */ - if (prefix->Address.lpSockaddr->sa_family != sa->sa_family || - prefix->PrefixLength <= prefix_len) - continue; - - if (address_prefix_match(sa->sa_family, sa, - prefix->Address.lpSockaddr, prefix->PrefixLength)) { - prefix_len = prefix->PrefixLength; - } - } - - /* If there is no matching prefix information, return a single-host - * subnet mask (e.g. 255.255.255.255 for IPv4). - */ - if (!prefix_len) - prefix_len = (sa->sa_family == AF_INET6) ? 128 : 32; - } - - memset(uv_address, 0, sizeof *uv_address); - - uv_address->name = name_buf; - - if (adapter->PhysicalAddressLength == sizeof(uv_address->phys_addr)) { - memcpy(uv_address->phys_addr, - adapter->PhysicalAddress, - sizeof(uv_address->phys_addr)); - } - - uv_address->is_internal = - (adapter->IfType == IF_TYPE_SOFTWARE_LOOPBACK); - - if (sa->sa_family == AF_INET6) { - uv_address->address.address6 = *((struct sockaddr_in6 *) sa); - - uv_address->netmask.netmask6.sin6_family = AF_INET6; - memset(uv_address->netmask.netmask6.sin6_addr.s6_addr, 0xff, prefix_len >> 3); - /* This check ensures that we don't write past the size of the data. */ - if (prefix_len % 8) { - uv_address->netmask.netmask6.sin6_addr.s6_addr[prefix_len >> 3] = - 0xff << (8 - prefix_len % 8); - } - - } else { - uv_address->address.address4 = *((struct sockaddr_in *) sa); - - uv_address->netmask.netmask4.sin_family = AF_INET; - uv_address->netmask.netmask4.sin_addr.s_addr = (prefix_len > 0) ? - htonl(0xffffffff << (32 - prefix_len)) : 0; - } - - uv_address++; - } - - name_buf += name_size; - } - - uv__free(win_address_buf); - - *addresses_ptr = uv_address_buf; - *count_ptr = count; - - return 0; -} - - -void uv_free_interface_addresses(uv_interface_address_t* addresses, - int count) { - uv__free(addresses); -} - - -int uv_getrusage(uv_rusage_t *uv_rusage) { - FILETIME createTime, exitTime, kernelTime, userTime; - SYSTEMTIME kernelSystemTime, userSystemTime; - PROCESS_MEMORY_COUNTERS memCounters; - IO_COUNTERS ioCounters; - int ret; - - ret = GetProcessTimes(GetCurrentProcess(), &createTime, &exitTime, &kernelTime, &userTime); - if (ret == 0) { - return uv_translate_sys_error(GetLastError()); - } - - ret = FileTimeToSystemTime(&kernelTime, &kernelSystemTime); - if (ret == 0) { - return uv_translate_sys_error(GetLastError()); - } - - ret = FileTimeToSystemTime(&userTime, &userSystemTime); - if (ret == 0) { - return uv_translate_sys_error(GetLastError()); - } - - ret = GetProcessMemoryInfo(GetCurrentProcess(), - &memCounters, - sizeof(memCounters)); - if (ret == 0) { - return uv_translate_sys_error(GetLastError()); - } - - ret = GetProcessIoCounters(GetCurrentProcess(), &ioCounters); - if (ret == 0) { - return uv_translate_sys_error(GetLastError()); - } - - memset(uv_rusage, 0, sizeof(*uv_rusage)); - - uv_rusage->ru_utime.tv_sec = userSystemTime.wHour * 3600 + - userSystemTime.wMinute * 60 + - userSystemTime.wSecond; - uv_rusage->ru_utime.tv_usec = userSystemTime.wMilliseconds * 1000; - - uv_rusage->ru_stime.tv_sec = kernelSystemTime.wHour * 3600 + - kernelSystemTime.wMinute * 60 + - kernelSystemTime.wSecond; - uv_rusage->ru_stime.tv_usec = kernelSystemTime.wMilliseconds * 1000; - - uv_rusage->ru_majflt = (uint64_t) memCounters.PageFaultCount; - uv_rusage->ru_maxrss = (uint64_t) memCounters.PeakWorkingSetSize / 1024; - - uv_rusage->ru_oublock = (uint64_t) ioCounters.WriteOperationCount; - uv_rusage->ru_inblock = (uint64_t) ioCounters.ReadOperationCount; - - return 0; -} - - -int uv_os_homedir(char* buffer, size_t* size) { - uv_passwd_t pwd; - size_t len; - int r; - - /* Check if the USERPROFILE environment variable is set first. The task of - performing input validation on buffer and size is taken care of by - uv_os_getenv(). */ - r = uv_os_getenv("USERPROFILE", buffer, size); - - /* Don't return an error if USERPROFILE was not found. */ - if (r != UV_ENOENT) - return r; - - /* USERPROFILE is not set, so call uv__getpwuid_r() */ - r = uv__getpwuid_r(&pwd); - - if (r != 0) { - return r; - } - - len = strlen(pwd.homedir); - - if (len >= *size) { - *size = len + 1; - uv_os_free_passwd(&pwd); - return UV_ENOBUFS; - } - - memcpy(buffer, pwd.homedir, len + 1); - *size = len; - uv_os_free_passwd(&pwd); - - return 0; -} - - -int uv_os_tmpdir(char* buffer, size_t* size) { - wchar_t *path; - DWORD bufsize; - size_t len; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - len = 0; - len = GetTempPathW(0, NULL); - if (len == 0) { - return uv_translate_sys_error(GetLastError()); - } - /* Include space for terminating null char. */ - len += 1; - path = uv__malloc(len * sizeof(wchar_t)); - if (path == NULL) { - return UV_ENOMEM; - } - len = GetTempPathW(len, path); - - if (len == 0) { - uv__free(path); - return uv_translate_sys_error(GetLastError()); - } - - /* The returned directory should not have a trailing slash, unless it points - * at a drive root, like c:\. Remove it if needed. */ - if (path[len - 1] == L'\\' && - !(len == 3 && path[1] == L':')) { - len--; - 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; -} - - -void uv_os_free_passwd(uv_passwd_t* pwd) { - if (pwd == NULL) - return; - - uv__free(pwd->username); - uv__free(pwd->homedir); - pwd->username = NULL; - pwd->homedir = NULL; -} - - -/* - * Converts a UTF-16 string into a UTF-8 one. The resulting string is - * null-terminated. - * - * 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; - - 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; -} - - -/* - * 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 bufsize; - - if (utf8 == NULL) - return UV_EINVAL; - - /* Check how much space we need */ - bufsize = MultiByteToWideChar(CP_UTF8, 0, utf8, utf8len, NULL, 0); - - 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)); - - if (*utf16 == NULL) - return UV_ENOMEM; - - /* Convert to UTF-16 */ - bufsize = MultiByteToWideChar(CP_UTF8, 0, utf8, utf8len, *utf16, bufsize); - - if (bufsize == 0) { - uv__free(*utf16); - *utf16 = NULL; - return uv_translate_sys_error(GetLastError()); - } - - (*utf16)[bufsize] = L'\0'; - return 0; -} - - -int uv__getpwuid_r(uv_passwd_t* pwd) { - HANDLE token; - wchar_t username[UNLEN + 1]; - wchar_t *path; - DWORD bufsize; - int r; - - if (pwd == NULL) - return UV_EINVAL; - - /* Get the home directory using GetUserProfileDirectoryW() */ - if (OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &token) == 0) - return uv_translate_sys_error(GetLastError()); - - bufsize = 0; - GetUserProfileDirectoryW(token, NULL, &bufsize); - if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) { - r = GetLastError(); - CloseHandle(token); - return uv_translate_sys_error(r); - } - - path = uv__malloc(bufsize * sizeof(wchar_t)); - if (path == NULL) { - CloseHandle(token); - return UV_ENOMEM; - } - - if (!GetUserProfileDirectoryW(token, path, &bufsize)) { - r = GetLastError(); - CloseHandle(token); - uv__free(path); - return uv_translate_sys_error(r); - } - - CloseHandle(token); - - /* Get the username using GetUserNameW() */ - bufsize = ARRAY_SIZE(username); - if (!GetUserNameW(username, &bufsize)) { - r = GetLastError(); - uv__free(path); - - /* This should not be possible */ - if (r == ERROR_INSUFFICIENT_BUFFER) - return UV_ENOMEM; - - return uv_translate_sys_error(r); - } - - pwd->homedir = NULL; - r = uv__convert_utf16_to_utf8(path, -1, &pwd->homedir); - uv__free(path); - - if (r != 0) - return r; - - pwd->username = NULL; - r = uv__convert_utf16_to_utf8(username, -1, &pwd->username); - - if (r != 0) { - uv__free(pwd->homedir); - return r; - } - - pwd->shell = NULL; - pwd->uid = -1; - pwd->gid = -1; - - return 0; -} - - -int uv_os_get_passwd(uv_passwd_t* pwd) { - return uv__getpwuid_r(pwd); -} - - -int uv_os_environ(uv_env_item_t** envitems, int* count) { - wchar_t* env; - wchar_t* penv; - int i, cnt; - uv_env_item_t* envitem; - - *envitems = NULL; - *count = 0; - - env = GetEnvironmentStringsW(); - if (env == NULL) - return 0; - - for (penv = env, i = 0; *penv != L'\0'; penv += wcslen(penv) + 1, i++); - - *envitems = uv__calloc(i, sizeof(**envitems)); - if (*envitems == NULL) { - FreeEnvironmentStringsW(env); - return UV_ENOMEM; - } - - penv = env; - cnt = 0; - - while (*penv != L'\0' && cnt < i) { - char* buf; - char* ptr; - - if (uv__convert_utf16_to_utf8(penv, -1, &buf) != 0) - goto fail; - - /* Using buf + 1 here because we know that `buf` has length at least 1, - * and some special environment variables on Windows start with a = sign. */ - ptr = strchr(buf + 1, '='); - if (ptr == NULL) { - uv__free(buf); - goto do_continue; - } - - *ptr = '\0'; - - envitem = &(*envitems)[cnt]; - envitem->name = buf; - envitem->value = ptr + 1; - - cnt++; - - do_continue: - penv += wcslen(penv) + 1; - } - - FreeEnvironmentStringsW(env); - - *count = cnt; - return 0; - -fail: - FreeEnvironmentStringsW(env); - - for (i = 0; i < cnt; i++) { - envitem = &(*envitems)[cnt]; - uv__free(envitem->name); - } - uv__free(*envitems); - - *envitems = NULL; - *count = 0; - return UV_ENOMEM; -} - - -int uv_os_getenv(const char* name, char* buffer, size_t* size) { - wchar_t fastvar[512]; - 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); - - if (r != 0) - return r; - - var = fastvar; - varlen = ARRAY_SIZE(fastvar); - - for (;;) { - SetLastError(ERROR_SUCCESS); - len = GetEnvironmentVariableW(name_w, var, varlen); - - if (len < varlen) - break; - - /* Try repeatedly because we might have been preempted by another thread - * modifying the environment variable just as we're trying to read it. - */ - if (var != fastvar) - uv__free(var); - - varlen = 1 + len; - var = uv__malloc(varlen * sizeof(*var)); - - if (var == NULL) { - r = UV_ENOMEM; - goto fail; - } - } - - uv__free(name_w); - name_w = NULL; - - if (len == 0) { - r = GetLastError(); - if (r != ERROR_SUCCESS) { - r = uv_translate_sys_error(r); - goto fail; - } - } - - /* 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; - -fail: - - if (name_w != NULL) - uv__free(name_w); - - if (var != fastvar) - uv__free(var); - - return r; -} - - -int uv_os_setenv(const char* name, const char* value) { - wchar_t* name_w; - wchar_t* value_w; - int r; - - if (name == NULL || value == NULL) - return UV_EINVAL; - - r = uv__convert_utf8_to_utf16(name, -1, &name_w); - - if (r != 0) - return r; - - r = uv__convert_utf8_to_utf16(value, -1, &value_w); - - if (r != 0) { - uv__free(name_w); - return r; - } - - r = SetEnvironmentVariableW(name_w, value_w); - uv__free(name_w); - uv__free(value_w); - - if (r == 0) - return uv_translate_sys_error(GetLastError()); - - return 0; -} - - -int uv_os_unsetenv(const char* name) { - wchar_t* name_w; - int r; - - if (name == NULL) - return UV_EINVAL; - - r = uv__convert_utf8_to_utf16(name, -1, &name_w); - - if (r != 0) - return r; - - r = SetEnvironmentVariableW(name_w, NULL); - uv__free(name_w); - - if (r == 0) - return uv_translate_sys_error(GetLastError()); - - return 0; -} - - -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; - - uv__once_init(); /* Initialize winsock */ - - if (GetHostNameW(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; -} - - -static int uv__get_handle(uv_pid_t pid, int access, HANDLE* handle) { - int r; - - if (pid == 0) - *handle = GetCurrentProcess(); - else - *handle = OpenProcess(access, FALSE, pid); - - if (*handle == NULL) { - r = GetLastError(); - - if (r == ERROR_INVALID_PARAMETER) - return UV_ESRCH; - else - return uv_translate_sys_error(r); - } - - return 0; -} - - -int uv_os_getpriority(uv_pid_t pid, int* priority) { - HANDLE handle; - int r; - - if (priority == NULL) - return UV_EINVAL; - - r = uv__get_handle(pid, PROCESS_QUERY_LIMITED_INFORMATION, &handle); - - if (r != 0) - return r; - - r = GetPriorityClass(handle); - - if (r == 0) { - r = uv_translate_sys_error(GetLastError()); - } else { - /* Map Windows priority classes to Unix nice values. */ - if (r == REALTIME_PRIORITY_CLASS) - *priority = UV_PRIORITY_HIGHEST; - else if (r == HIGH_PRIORITY_CLASS) - *priority = UV_PRIORITY_HIGH; - else if (r == ABOVE_NORMAL_PRIORITY_CLASS) - *priority = UV_PRIORITY_ABOVE_NORMAL; - else if (r == NORMAL_PRIORITY_CLASS) - *priority = UV_PRIORITY_NORMAL; - else if (r == BELOW_NORMAL_PRIORITY_CLASS) - *priority = UV_PRIORITY_BELOW_NORMAL; - else /* IDLE_PRIORITY_CLASS */ - *priority = UV_PRIORITY_LOW; - - r = 0; - } - - CloseHandle(handle); - return r; -} - - -int uv_os_setpriority(uv_pid_t pid, int priority) { - HANDLE handle; - int priority_class; - int r; - - /* Map Unix nice values to Windows priority classes. */ - if (priority < UV_PRIORITY_HIGHEST || priority > UV_PRIORITY_LOW) - return UV_EINVAL; - else if (priority < UV_PRIORITY_HIGH) - priority_class = REALTIME_PRIORITY_CLASS; - else if (priority < UV_PRIORITY_ABOVE_NORMAL) - priority_class = HIGH_PRIORITY_CLASS; - else if (priority < UV_PRIORITY_NORMAL) - priority_class = ABOVE_NORMAL_PRIORITY_CLASS; - else if (priority < UV_PRIORITY_BELOW_NORMAL) - priority_class = NORMAL_PRIORITY_CLASS; - else if (priority < UV_PRIORITY_LOW) - priority_class = BELOW_NORMAL_PRIORITY_CLASS; - else - priority_class = IDLE_PRIORITY_CLASS; - - r = uv__get_handle(pid, PROCESS_SET_INFORMATION, &handle); - - if (r != 0) - return r; - - if (SetPriorityClass(handle, priority_class) == 0) - r = uv_translate_sys_error(GetLastError()); - - CloseHandle(handle); - return r; -} - - -int uv_os_uname(uv_utsname_t* buffer) { - /* Implementation loosely based on - https://github.com/gagern/gnulib/blob/master/lib/uname.c */ - OSVERSIONINFOW os_info; - SYSTEM_INFO system_info; - HKEY registry_key; - WCHAR product_name_w[256]; - DWORD product_name_w_size; - int version_size; - int processor_level; - int r; - - if (buffer == NULL) - return UV_EINVAL; - - uv__once_init(); - os_info.dwOSVersionInfoSize = sizeof(os_info); - os_info.szCSDVersion[0] = L'\0'; - - /* Try calling RtlGetVersion(), and fall back to the deprecated GetVersionEx() - if RtlGetVersion() is not available. */ - if (pRtlGetVersion) { - pRtlGetVersion(&os_info); - } else { - /* Silence GetVersionEx() deprecation warning. */ - #ifdef _MSC_VER - #pragma warning(suppress : 4996) - #endif - if (GetVersionExW(&os_info) == 0) { - r = uv_translate_sys_error(GetLastError()); - goto error; - } - } - - /* Populate the version field. */ - version_size = 0; - r = RegOpenKeyExW(HKEY_LOCAL_MACHINE, - L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", - 0, - KEY_QUERY_VALUE, - ®istry_key); - - if (r == ERROR_SUCCESS) { - product_name_w_size = sizeof(product_name_w); - r = RegGetValueW(registry_key, - NULL, - L"ProductName", - RRF_RT_REG_SZ, - NULL, - (PVOID) product_name_w, - &product_name_w_size); - RegCloseKey(registry_key); - - if (r == ERROR_SUCCESS) { - 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()); - 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] = ' '; - - 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()); - goto error; - } - } - - /* Populate the sysname field. */ -#ifdef __MINGW32__ - r = snprintf(buffer->sysname, - sizeof(buffer->sysname), - "MINGW32_NT-%u.%u", - (unsigned int) os_info.dwMajorVersion, - (unsigned int) os_info.dwMinorVersion); - assert((size_t)r < sizeof(buffer->sysname)); -#else - uv__strscpy(buffer->sysname, "Windows_NT", sizeof(buffer->sysname)); -#endif - - /* Populate the release field. */ - r = snprintf(buffer->release, - sizeof(buffer->release), - "%d.%d.%d", - (unsigned int) os_info.dwMajorVersion, - (unsigned int) os_info.dwMinorVersion, - (unsigned int) os_info.dwBuildNumber); - assert((size_t)r < sizeof(buffer->release)); - - /* Populate the machine field. */ - GetSystemInfo(&system_info); - - switch (system_info.wProcessorArchitecture) { - case PROCESSOR_ARCHITECTURE_AMD64: - uv__strscpy(buffer->machine, "x86_64", sizeof(buffer->machine)); - break; - case PROCESSOR_ARCHITECTURE_IA64: - uv__strscpy(buffer->machine, "ia64", sizeof(buffer->machine)); - break; - case PROCESSOR_ARCHITECTURE_INTEL: - uv__strscpy(buffer->machine, "i386", sizeof(buffer->machine)); - - if (system_info.wProcessorLevel > 3) { - processor_level = system_info.wProcessorLevel < 6 ? - system_info.wProcessorLevel : 6; - buffer->machine[1] = '0' + processor_level; - } - - break; - case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64: - uv__strscpy(buffer->machine, "i686", sizeof(buffer->machine)); - break; - case PROCESSOR_ARCHITECTURE_MIPS: - uv__strscpy(buffer->machine, "mips", sizeof(buffer->machine)); - break; - case PROCESSOR_ARCHITECTURE_ALPHA: - case PROCESSOR_ARCHITECTURE_ALPHA64: - uv__strscpy(buffer->machine, "alpha", sizeof(buffer->machine)); - break; - case PROCESSOR_ARCHITECTURE_PPC: - uv__strscpy(buffer->machine, "powerpc", sizeof(buffer->machine)); - break; - case PROCESSOR_ARCHITECTURE_SHX: - uv__strscpy(buffer->machine, "sh", sizeof(buffer->machine)); - break; - case PROCESSOR_ARCHITECTURE_ARM: - uv__strscpy(buffer->machine, "arm", sizeof(buffer->machine)); - break; - default: - uv__strscpy(buffer->machine, "unknown", sizeof(buffer->machine)); - break; - } - - return 0; - -error: - buffer->sysname[0] = '\0'; - buffer->release[0] = '\0'; - buffer->version[0] = '\0'; - buffer->machine[0] = '\0'; - return r; -} - -int uv_gettimeofday(uv_timeval64_t* tv) { - /* Based on https://doxygen.postgresql.org/gettimeofday_8c_source.html */ - const uint64_t epoch = (uint64_t) 116444736000000000ULL; - FILETIME file_time; - ULARGE_INTEGER ularge; - - if (tv == NULL) - return UV_EINVAL; - - GetSystemTimeAsFileTime(&file_time); - ularge.LowPart = file_time.dwLowDateTime; - ularge.HighPart = file_time.dwHighDateTime; - tv->tv_sec = (int64_t) ((ularge.QuadPart - epoch) / 10000000L); - tv->tv_usec = (int32_t) (((ularge.QuadPart - epoch) % 10000000L) / 10); - return 0; -} - -int uv__random_rtlgenrandom(void* buf, size_t buflen) { - if (buflen == 0) - return 0; - - if (SystemFunction036(buf, buflen) == FALSE) - return UV_EIO; - - return 0; -} - -void uv_sleep(unsigned int msec) { - Sleep(msec); -} diff --git a/libuv/src/win/winapi.c b/libuv/src/win/winapi.c deleted file mode 100644 index bb86ec8..0000000 --- a/libuv/src/win/winapi.c +++ /dev/null @@ -1,137 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include - -#include "uv.h" -#include "internal.h" - - -/* Ntdll function pointers */ -sRtlGetVersion pRtlGetVersion; -sRtlNtStatusToDosError pRtlNtStatusToDosError; -sNtDeviceIoControlFile pNtDeviceIoControlFile; -sNtQueryInformationFile pNtQueryInformationFile; -sNtSetInformationFile pNtSetInformationFile; -sNtQueryVolumeInformationFile pNtQueryVolumeInformationFile; -sNtQueryDirectoryFile pNtQueryDirectoryFile; -sNtQuerySystemInformation pNtQuerySystemInformation; -sNtQueryInformationProcess pNtQueryInformationProcess; - -/* Kernel32 function pointers */ -sGetQueuedCompletionStatusEx pGetQueuedCompletionStatusEx; - -/* Powrprof.dll function pointer */ -sPowerRegisterSuspendResumeNotification pPowerRegisterSuspendResumeNotification; - -/* User32.dll function pointer */ -sSetWinEventHook pSetWinEventHook; - - -void uv_winapi_init(void) { - HMODULE ntdll_module; - HMODULE powrprof_module; - HMODULE user32_module; - HMODULE kernel32_module; - - ntdll_module = GetModuleHandleA("ntdll.dll"); - if (ntdll_module == NULL) { - uv_fatal_error(GetLastError(), "GetModuleHandleA"); - } - - pRtlGetVersion = (sRtlGetVersion) GetProcAddress(ntdll_module, - "RtlGetVersion"); - - pRtlNtStatusToDosError = (sRtlNtStatusToDosError) GetProcAddress( - ntdll_module, - "RtlNtStatusToDosError"); - if (pRtlNtStatusToDosError == NULL) { - uv_fatal_error(GetLastError(), "GetProcAddress"); - } - - pNtDeviceIoControlFile = (sNtDeviceIoControlFile) GetProcAddress( - ntdll_module, - "NtDeviceIoControlFile"); - if (pNtDeviceIoControlFile == NULL) { - uv_fatal_error(GetLastError(), "GetProcAddress"); - } - - pNtQueryInformationFile = (sNtQueryInformationFile) GetProcAddress( - ntdll_module, - "NtQueryInformationFile"); - if (pNtQueryInformationFile == NULL) { - uv_fatal_error(GetLastError(), "GetProcAddress"); - } - - pNtSetInformationFile = (sNtSetInformationFile) GetProcAddress( - ntdll_module, - "NtSetInformationFile"); - if (pNtSetInformationFile == NULL) { - uv_fatal_error(GetLastError(), "GetProcAddress"); - } - - pNtQueryVolumeInformationFile = (sNtQueryVolumeInformationFile) - GetProcAddress(ntdll_module, "NtQueryVolumeInformationFile"); - if (pNtQueryVolumeInformationFile == NULL) { - uv_fatal_error(GetLastError(), "GetProcAddress"); - } - - pNtQueryDirectoryFile = (sNtQueryDirectoryFile) - GetProcAddress(ntdll_module, "NtQueryDirectoryFile"); - if (pNtQueryVolumeInformationFile == NULL) { - uv_fatal_error(GetLastError(), "GetProcAddress"); - } - - pNtQuerySystemInformation = (sNtQuerySystemInformation) GetProcAddress( - ntdll_module, - "NtQuerySystemInformation"); - if (pNtQuerySystemInformation == NULL) { - uv_fatal_error(GetLastError(), "GetProcAddress"); - } - - pNtQueryInformationProcess = (sNtQueryInformationProcess) GetProcAddress( - ntdll_module, - "NtQueryInformationProcess"); - if (pNtQueryInformationProcess == NULL) { - uv_fatal_error(GetLastError(), "GetProcAddress"); - } - - kernel32_module = GetModuleHandleA("kernel32.dll"); - if (kernel32_module == NULL) { - uv_fatal_error(GetLastError(), "GetModuleHandleA"); - } - - pGetQueuedCompletionStatusEx = (sGetQueuedCompletionStatusEx) GetProcAddress( - kernel32_module, - "GetQueuedCompletionStatusEx"); - - powrprof_module = LoadLibraryA("powrprof.dll"); - if (powrprof_module != NULL) { - pPowerRegisterSuspendResumeNotification = (sPowerRegisterSuspendResumeNotification) - GetProcAddress(powrprof_module, "PowerRegisterSuspendResumeNotification"); - } - - user32_module = LoadLibraryA("user32.dll"); - if (user32_module != NULL) { - pSetWinEventHook = (sSetWinEventHook) - GetProcAddress(user32_module, "SetWinEventHook"); - } -} diff --git a/libuv/src/win/winapi.h b/libuv/src/win/winapi.h deleted file mode 100644 index 0b66b56..0000000 --- a/libuv/src/win/winapi.h +++ /dev/null @@ -1,4762 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_WIN_WINAPI_H_ -#define UV_WIN_WINAPI_H_ - -#include - - -/* - * Ntdll headers - */ -#ifndef STATUS_SEVERITY_SUCCESS -# define STATUS_SEVERITY_SUCCESS 0x0 -#endif - -#ifndef STATUS_SEVERITY_INFORMATIONAL -# define STATUS_SEVERITY_INFORMATIONAL 0x1 -#endif - -#ifndef STATUS_SEVERITY_WARNING -# define STATUS_SEVERITY_WARNING 0x2 -#endif - -#ifndef STATUS_SEVERITY_ERROR -# define STATUS_SEVERITY_ERROR 0x3 -#endif - -#ifndef FACILITY_NTWIN32 -# define FACILITY_NTWIN32 0x7 -#endif - -#ifndef NT_SUCCESS -# define NT_SUCCESS(status) (((NTSTATUS) (status)) >= 0) -#endif - -#ifndef NT_INFORMATION -# define NT_INFORMATION(status) ((((ULONG) (status)) >> 30) == 1) -#endif - -#ifndef NT_WARNING -# define NT_WARNING(status) ((((ULONG) (status)) >> 30) == 2) -#endif - -#ifndef NT_ERROR -# define NT_ERROR(status) ((((ULONG) (status)) >> 30) == 3) -#endif - -#ifndef STATUS_SUCCESS -# define STATUS_SUCCESS ((NTSTATUS) 0x00000000L) -#endif - -#ifndef STATUS_WAIT_0 -# define STATUS_WAIT_0 ((NTSTATUS) 0x00000000L) -#endif - -#ifndef STATUS_WAIT_1 -# define STATUS_WAIT_1 ((NTSTATUS) 0x00000001L) -#endif - -#ifndef STATUS_WAIT_2 -# define STATUS_WAIT_2 ((NTSTATUS) 0x00000002L) -#endif - -#ifndef STATUS_WAIT_3 -# define STATUS_WAIT_3 ((NTSTATUS) 0x00000003L) -#endif - -#ifndef STATUS_WAIT_63 -# define STATUS_WAIT_63 ((NTSTATUS) 0x0000003FL) -#endif - -#ifndef STATUS_ABANDONED -# define STATUS_ABANDONED ((NTSTATUS) 0x00000080L) -#endif - -#ifndef STATUS_ABANDONED_WAIT_0 -# define STATUS_ABANDONED_WAIT_0 ((NTSTATUS) 0x00000080L) -#endif - -#ifndef STATUS_ABANDONED_WAIT_63 -# define STATUS_ABANDONED_WAIT_63 ((NTSTATUS) 0x000000BFL) -#endif - -#ifndef STATUS_USER_APC -# define STATUS_USER_APC ((NTSTATUS) 0x000000C0L) -#endif - -#ifndef STATUS_KERNEL_APC -# define STATUS_KERNEL_APC ((NTSTATUS) 0x00000100L) -#endif - -#ifndef STATUS_ALERTED -# define STATUS_ALERTED ((NTSTATUS) 0x00000101L) -#endif - -#ifndef STATUS_TIMEOUT -# define STATUS_TIMEOUT ((NTSTATUS) 0x00000102L) -#endif - -#ifndef STATUS_PENDING -# define STATUS_PENDING ((NTSTATUS) 0x00000103L) -#endif - -#ifndef STATUS_REPARSE -# define STATUS_REPARSE ((NTSTATUS) 0x00000104L) -#endif - -#ifndef STATUS_MORE_ENTRIES -# define STATUS_MORE_ENTRIES ((NTSTATUS) 0x00000105L) -#endif - -#ifndef STATUS_NOT_ALL_ASSIGNED -# define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS) 0x00000106L) -#endif - -#ifndef STATUS_SOME_NOT_MAPPED -# define STATUS_SOME_NOT_MAPPED ((NTSTATUS) 0x00000107L) -#endif - -#ifndef STATUS_OPLOCK_BREAK_IN_PROGRESS -# define STATUS_OPLOCK_BREAK_IN_PROGRESS ((NTSTATUS) 0x00000108L) -#endif - -#ifndef STATUS_VOLUME_MOUNTED -# define STATUS_VOLUME_MOUNTED ((NTSTATUS) 0x00000109L) -#endif - -#ifndef STATUS_RXACT_COMMITTED -# define STATUS_RXACT_COMMITTED ((NTSTATUS) 0x0000010AL) -#endif - -#ifndef STATUS_NOTIFY_CLEANUP -# define STATUS_NOTIFY_CLEANUP ((NTSTATUS) 0x0000010BL) -#endif - -#ifndef STATUS_NOTIFY_ENUM_DIR -# define STATUS_NOTIFY_ENUM_DIR ((NTSTATUS) 0x0000010CL) -#endif - -#ifndef STATUS_NO_QUOTAS_FOR_ACCOUNT -# define STATUS_NO_QUOTAS_FOR_ACCOUNT ((NTSTATUS) 0x0000010DL) -#endif - -#ifndef STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED -# define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED ((NTSTATUS) 0x0000010EL) -#endif - -#ifndef STATUS_PAGE_FAULT_TRANSITION -# define STATUS_PAGE_FAULT_TRANSITION ((NTSTATUS) 0x00000110L) -#endif - -#ifndef STATUS_PAGE_FAULT_DEMAND_ZERO -# define STATUS_PAGE_FAULT_DEMAND_ZERO ((NTSTATUS) 0x00000111L) -#endif - -#ifndef STATUS_PAGE_FAULT_COPY_ON_WRITE -# define STATUS_PAGE_FAULT_COPY_ON_WRITE ((NTSTATUS) 0x00000112L) -#endif - -#ifndef STATUS_PAGE_FAULT_GUARD_PAGE -# define STATUS_PAGE_FAULT_GUARD_PAGE ((NTSTATUS) 0x00000113L) -#endif - -#ifndef STATUS_PAGE_FAULT_PAGING_FILE -# define STATUS_PAGE_FAULT_PAGING_FILE ((NTSTATUS) 0x00000114L) -#endif - -#ifndef STATUS_CACHE_PAGE_LOCKED -# define STATUS_CACHE_PAGE_LOCKED ((NTSTATUS) 0x00000115L) -#endif - -#ifndef STATUS_CRASH_DUMP -# define STATUS_CRASH_DUMP ((NTSTATUS) 0x00000116L) -#endif - -#ifndef STATUS_BUFFER_ALL_ZEROS -# define STATUS_BUFFER_ALL_ZEROS ((NTSTATUS) 0x00000117L) -#endif - -#ifndef STATUS_REPARSE_OBJECT -# define STATUS_REPARSE_OBJECT ((NTSTATUS) 0x00000118L) -#endif - -#ifndef STATUS_RESOURCE_REQUIREMENTS_CHANGED -# define STATUS_RESOURCE_REQUIREMENTS_CHANGED ((NTSTATUS) 0x00000119L) -#endif - -#ifndef STATUS_TRANSLATION_COMPLETE -# define STATUS_TRANSLATION_COMPLETE ((NTSTATUS) 0x00000120L) -#endif - -#ifndef STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY -# define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY ((NTSTATUS) 0x00000121L) -#endif - -#ifndef STATUS_NOTHING_TO_TERMINATE -# define STATUS_NOTHING_TO_TERMINATE ((NTSTATUS) 0x00000122L) -#endif - -#ifndef STATUS_PROCESS_NOT_IN_JOB -# define STATUS_PROCESS_NOT_IN_JOB ((NTSTATUS) 0x00000123L) -#endif - -#ifndef STATUS_PROCESS_IN_JOB -# define STATUS_PROCESS_IN_JOB ((NTSTATUS) 0x00000124L) -#endif - -#ifndef STATUS_VOLSNAP_HIBERNATE_READY -# define STATUS_VOLSNAP_HIBERNATE_READY ((NTSTATUS) 0x00000125L) -#endif - -#ifndef STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY -# define STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY ((NTSTATUS) 0x00000126L) -#endif - -#ifndef STATUS_INTERRUPT_VECTOR_ALREADY_CONNECTED -# define STATUS_INTERRUPT_VECTOR_ALREADY_CONNECTED ((NTSTATUS) 0x00000127L) -#endif - -#ifndef STATUS_INTERRUPT_STILL_CONNECTED -# define STATUS_INTERRUPT_STILL_CONNECTED ((NTSTATUS) 0x00000128L) -#endif - -#ifndef STATUS_PROCESS_CLONED -# define STATUS_PROCESS_CLONED ((NTSTATUS) 0x00000129L) -#endif - -#ifndef STATUS_FILE_LOCKED_WITH_ONLY_READERS -# define STATUS_FILE_LOCKED_WITH_ONLY_READERS ((NTSTATUS) 0x0000012AL) -#endif - -#ifndef STATUS_FILE_LOCKED_WITH_WRITERS -# define STATUS_FILE_LOCKED_WITH_WRITERS ((NTSTATUS) 0x0000012BL) -#endif - -#ifndef STATUS_RESOURCEMANAGER_READ_ONLY -# define STATUS_RESOURCEMANAGER_READ_ONLY ((NTSTATUS) 0x00000202L) -#endif - -#ifndef STATUS_RING_PREVIOUSLY_EMPTY -# define STATUS_RING_PREVIOUSLY_EMPTY ((NTSTATUS) 0x00000210L) -#endif - -#ifndef STATUS_RING_PREVIOUSLY_FULL -# define STATUS_RING_PREVIOUSLY_FULL ((NTSTATUS) 0x00000211L) -#endif - -#ifndef STATUS_RING_PREVIOUSLY_ABOVE_QUOTA -# define STATUS_RING_PREVIOUSLY_ABOVE_QUOTA ((NTSTATUS) 0x00000212L) -#endif - -#ifndef STATUS_RING_NEWLY_EMPTY -# define STATUS_RING_NEWLY_EMPTY ((NTSTATUS) 0x00000213L) -#endif - -#ifndef STATUS_RING_SIGNAL_OPPOSITE_ENDPOINT -# define STATUS_RING_SIGNAL_OPPOSITE_ENDPOINT ((NTSTATUS) 0x00000214L) -#endif - -#ifndef STATUS_OPLOCK_SWITCHED_TO_NEW_HANDLE -# define STATUS_OPLOCK_SWITCHED_TO_NEW_HANDLE ((NTSTATUS) 0x00000215L) -#endif - -#ifndef STATUS_OPLOCK_HANDLE_CLOSED -# define STATUS_OPLOCK_HANDLE_CLOSED ((NTSTATUS) 0x00000216L) -#endif - -#ifndef STATUS_WAIT_FOR_OPLOCK -# define STATUS_WAIT_FOR_OPLOCK ((NTSTATUS) 0x00000367L) -#endif - -#ifndef STATUS_OBJECT_NAME_EXISTS -# define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS) 0x40000000L) -#endif - -#ifndef STATUS_THREAD_WAS_SUSPENDED -# define STATUS_THREAD_WAS_SUSPENDED ((NTSTATUS) 0x40000001L) -#endif - -#ifndef STATUS_WORKING_SET_LIMIT_RANGE -# define STATUS_WORKING_SET_LIMIT_RANGE ((NTSTATUS) 0x40000002L) -#endif - -#ifndef STATUS_IMAGE_NOT_AT_BASE -# define STATUS_IMAGE_NOT_AT_BASE ((NTSTATUS) 0x40000003L) -#endif - -#ifndef STATUS_RXACT_STATE_CREATED -# define STATUS_RXACT_STATE_CREATED ((NTSTATUS) 0x40000004L) -#endif - -#ifndef STATUS_SEGMENT_NOTIFICATION -# define STATUS_SEGMENT_NOTIFICATION ((NTSTATUS) 0x40000005L) -#endif - -#ifndef STATUS_LOCAL_USER_SESSION_KEY -# define STATUS_LOCAL_USER_SESSION_KEY ((NTSTATUS) 0x40000006L) -#endif - -#ifndef STATUS_BAD_CURRENT_DIRECTORY -# define STATUS_BAD_CURRENT_DIRECTORY ((NTSTATUS) 0x40000007L) -#endif - -#ifndef STATUS_SERIAL_MORE_WRITES -# define STATUS_SERIAL_MORE_WRITES ((NTSTATUS) 0x40000008L) -#endif - -#ifndef STATUS_REGISTRY_RECOVERED -# define STATUS_REGISTRY_RECOVERED ((NTSTATUS) 0x40000009L) -#endif - -#ifndef STATUS_FT_READ_RECOVERY_FROM_BACKUP -# define STATUS_FT_READ_RECOVERY_FROM_BACKUP ((NTSTATUS) 0x4000000AL) -#endif - -#ifndef STATUS_FT_WRITE_RECOVERY -# define STATUS_FT_WRITE_RECOVERY ((NTSTATUS) 0x4000000BL) -#endif - -#ifndef STATUS_SERIAL_COUNTER_TIMEOUT -# define STATUS_SERIAL_COUNTER_TIMEOUT ((NTSTATUS) 0x4000000CL) -#endif - -#ifndef STATUS_NULL_LM_PASSWORD -# define STATUS_NULL_LM_PASSWORD ((NTSTATUS) 0x4000000DL) -#endif - -#ifndef STATUS_IMAGE_MACHINE_TYPE_MISMATCH -# define STATUS_IMAGE_MACHINE_TYPE_MISMATCH ((NTSTATUS) 0x4000000EL) -#endif - -#ifndef STATUS_RECEIVE_PARTIAL -# define STATUS_RECEIVE_PARTIAL ((NTSTATUS) 0x4000000FL) -#endif - -#ifndef STATUS_RECEIVE_EXPEDITED -# define STATUS_RECEIVE_EXPEDITED ((NTSTATUS) 0x40000010L) -#endif - -#ifndef STATUS_RECEIVE_PARTIAL_EXPEDITED -# define STATUS_RECEIVE_PARTIAL_EXPEDITED ((NTSTATUS) 0x40000011L) -#endif - -#ifndef STATUS_EVENT_DONE -# define STATUS_EVENT_DONE ((NTSTATUS) 0x40000012L) -#endif - -#ifndef STATUS_EVENT_PENDING -# define STATUS_EVENT_PENDING ((NTSTATUS) 0x40000013L) -#endif - -#ifndef STATUS_CHECKING_FILE_SYSTEM -# define STATUS_CHECKING_FILE_SYSTEM ((NTSTATUS) 0x40000014L) -#endif - -#ifndef STATUS_FATAL_APP_EXIT -# define STATUS_FATAL_APP_EXIT ((NTSTATUS) 0x40000015L) -#endif - -#ifndef STATUS_PREDEFINED_HANDLE -# define STATUS_PREDEFINED_HANDLE ((NTSTATUS) 0x40000016L) -#endif - -#ifndef STATUS_WAS_UNLOCKED -# define STATUS_WAS_UNLOCKED ((NTSTATUS) 0x40000017L) -#endif - -#ifndef STATUS_SERVICE_NOTIFICATION -# define STATUS_SERVICE_NOTIFICATION ((NTSTATUS) 0x40000018L) -#endif - -#ifndef STATUS_WAS_LOCKED -# define STATUS_WAS_LOCKED ((NTSTATUS) 0x40000019L) -#endif - -#ifndef STATUS_LOG_HARD_ERROR -# define STATUS_LOG_HARD_ERROR ((NTSTATUS) 0x4000001AL) -#endif - -#ifndef STATUS_ALREADY_WIN32 -# define STATUS_ALREADY_WIN32 ((NTSTATUS) 0x4000001BL) -#endif - -#ifndef STATUS_WX86_UNSIMULATE -# define STATUS_WX86_UNSIMULATE ((NTSTATUS) 0x4000001CL) -#endif - -#ifndef STATUS_WX86_CONTINUE -# define STATUS_WX86_CONTINUE ((NTSTATUS) 0x4000001DL) -#endif - -#ifndef STATUS_WX86_SINGLE_STEP -# define STATUS_WX86_SINGLE_STEP ((NTSTATUS) 0x4000001EL) -#endif - -#ifndef STATUS_WX86_BREAKPOINT -# define STATUS_WX86_BREAKPOINT ((NTSTATUS) 0x4000001FL) -#endif - -#ifndef STATUS_WX86_EXCEPTION_CONTINUE -# define STATUS_WX86_EXCEPTION_CONTINUE ((NTSTATUS) 0x40000020L) -#endif - -#ifndef STATUS_WX86_EXCEPTION_LASTCHANCE -# define STATUS_WX86_EXCEPTION_LASTCHANCE ((NTSTATUS) 0x40000021L) -#endif - -#ifndef STATUS_WX86_EXCEPTION_CHAIN -# define STATUS_WX86_EXCEPTION_CHAIN ((NTSTATUS) 0x40000022L) -#endif - -#ifndef STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE -# define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE ((NTSTATUS) 0x40000023L) -#endif - -#ifndef STATUS_NO_YIELD_PERFORMED -# define STATUS_NO_YIELD_PERFORMED ((NTSTATUS) 0x40000024L) -#endif - -#ifndef STATUS_TIMER_RESUME_IGNORED -# define STATUS_TIMER_RESUME_IGNORED ((NTSTATUS) 0x40000025L) -#endif - -#ifndef STATUS_ARBITRATION_UNHANDLED -# define STATUS_ARBITRATION_UNHANDLED ((NTSTATUS) 0x40000026L) -#endif - -#ifndef STATUS_CARDBUS_NOT_SUPPORTED -# define STATUS_CARDBUS_NOT_SUPPORTED ((NTSTATUS) 0x40000027L) -#endif - -#ifndef STATUS_WX86_CREATEWX86TIB -# define STATUS_WX86_CREATEWX86TIB ((NTSTATUS) 0x40000028L) -#endif - -#ifndef STATUS_MP_PROCESSOR_MISMATCH -# define STATUS_MP_PROCESSOR_MISMATCH ((NTSTATUS) 0x40000029L) -#endif - -#ifndef STATUS_HIBERNATED -# define STATUS_HIBERNATED ((NTSTATUS) 0x4000002AL) -#endif - -#ifndef STATUS_RESUME_HIBERNATION -# define STATUS_RESUME_HIBERNATION ((NTSTATUS) 0x4000002BL) -#endif - -#ifndef STATUS_FIRMWARE_UPDATED -# define STATUS_FIRMWARE_UPDATED ((NTSTATUS) 0x4000002CL) -#endif - -#ifndef STATUS_DRIVERS_LEAKING_LOCKED_PAGES -# define STATUS_DRIVERS_LEAKING_LOCKED_PAGES ((NTSTATUS) 0x4000002DL) -#endif - -#ifndef STATUS_MESSAGE_RETRIEVED -# define STATUS_MESSAGE_RETRIEVED ((NTSTATUS) 0x4000002EL) -#endif - -#ifndef STATUS_SYSTEM_POWERSTATE_TRANSITION -# define STATUS_SYSTEM_POWERSTATE_TRANSITION ((NTSTATUS) 0x4000002FL) -#endif - -#ifndef STATUS_ALPC_CHECK_COMPLETION_LIST -# define STATUS_ALPC_CHECK_COMPLETION_LIST ((NTSTATUS) 0x40000030L) -#endif - -#ifndef STATUS_SYSTEM_POWERSTATE_COMPLEX_TRANSITION -# define STATUS_SYSTEM_POWERSTATE_COMPLEX_TRANSITION ((NTSTATUS) 0x40000031L) -#endif - -#ifndef STATUS_ACCESS_AUDIT_BY_POLICY -# define STATUS_ACCESS_AUDIT_BY_POLICY ((NTSTATUS) 0x40000032L) -#endif - -#ifndef STATUS_ABANDON_HIBERFILE -# define STATUS_ABANDON_HIBERFILE ((NTSTATUS) 0x40000033L) -#endif - -#ifndef STATUS_BIZRULES_NOT_ENABLED -# define STATUS_BIZRULES_NOT_ENABLED ((NTSTATUS) 0x40000034L) -#endif - -#ifndef STATUS_GUARD_PAGE_VIOLATION -# define STATUS_GUARD_PAGE_VIOLATION ((NTSTATUS) 0x80000001L) -#endif - -#ifndef STATUS_DATATYPE_MISALIGNMENT -# define STATUS_DATATYPE_MISALIGNMENT ((NTSTATUS) 0x80000002L) -#endif - -#ifndef STATUS_BREAKPOINT -# define STATUS_BREAKPOINT ((NTSTATUS) 0x80000003L) -#endif - -#ifndef STATUS_SINGLE_STEP -# define STATUS_SINGLE_STEP ((NTSTATUS) 0x80000004L) -#endif - -#ifndef STATUS_BUFFER_OVERFLOW -# define STATUS_BUFFER_OVERFLOW ((NTSTATUS) 0x80000005L) -#endif - -#ifndef STATUS_NO_MORE_FILES -# define STATUS_NO_MORE_FILES ((NTSTATUS) 0x80000006L) -#endif - -#ifndef STATUS_WAKE_SYSTEM_DEBUGGER -# define STATUS_WAKE_SYSTEM_DEBUGGER ((NTSTATUS) 0x80000007L) -#endif - -#ifndef STATUS_HANDLES_CLOSED -# define STATUS_HANDLES_CLOSED ((NTSTATUS) 0x8000000AL) -#endif - -#ifndef STATUS_NO_INHERITANCE -# define STATUS_NO_INHERITANCE ((NTSTATUS) 0x8000000BL) -#endif - -#ifndef STATUS_GUID_SUBSTITUTION_MADE -# define STATUS_GUID_SUBSTITUTION_MADE ((NTSTATUS) 0x8000000CL) -#endif - -#ifndef STATUS_PARTIAL_COPY -# define STATUS_PARTIAL_COPY ((NTSTATUS) 0x8000000DL) -#endif - -#ifndef STATUS_DEVICE_PAPER_EMPTY -# define STATUS_DEVICE_PAPER_EMPTY ((NTSTATUS) 0x8000000EL) -#endif - -#ifndef STATUS_DEVICE_POWERED_OFF -# define STATUS_DEVICE_POWERED_OFF ((NTSTATUS) 0x8000000FL) -#endif - -#ifndef STATUS_DEVICE_OFF_LINE -# define STATUS_DEVICE_OFF_LINE ((NTSTATUS) 0x80000010L) -#endif - -#ifndef STATUS_DEVICE_BUSY -# define STATUS_DEVICE_BUSY ((NTSTATUS) 0x80000011L) -#endif - -#ifndef STATUS_NO_MORE_EAS -# define STATUS_NO_MORE_EAS ((NTSTATUS) 0x80000012L) -#endif - -#ifndef STATUS_INVALID_EA_NAME -# define STATUS_INVALID_EA_NAME ((NTSTATUS) 0x80000013L) -#endif - -#ifndef STATUS_EA_LIST_INCONSISTENT -# define STATUS_EA_LIST_INCONSISTENT ((NTSTATUS) 0x80000014L) -#endif - -#ifndef STATUS_INVALID_EA_FLAG -# define STATUS_INVALID_EA_FLAG ((NTSTATUS) 0x80000015L) -#endif - -#ifndef STATUS_VERIFY_REQUIRED -# define STATUS_VERIFY_REQUIRED ((NTSTATUS) 0x80000016L) -#endif - -#ifndef STATUS_EXTRANEOUS_INFORMATION -# define STATUS_EXTRANEOUS_INFORMATION ((NTSTATUS) 0x80000017L) -#endif - -#ifndef STATUS_RXACT_COMMIT_NECESSARY -# define STATUS_RXACT_COMMIT_NECESSARY ((NTSTATUS) 0x80000018L) -#endif - -#ifndef STATUS_NO_MORE_ENTRIES -# define STATUS_NO_MORE_ENTRIES ((NTSTATUS) 0x8000001AL) -#endif - -#ifndef STATUS_FILEMARK_DETECTED -# define STATUS_FILEMARK_DETECTED ((NTSTATUS) 0x8000001BL) -#endif - -#ifndef STATUS_MEDIA_CHANGED -# define STATUS_MEDIA_CHANGED ((NTSTATUS) 0x8000001CL) -#endif - -#ifndef STATUS_BUS_RESET -# define STATUS_BUS_RESET ((NTSTATUS) 0x8000001DL) -#endif - -#ifndef STATUS_END_OF_MEDIA -# define STATUS_END_OF_MEDIA ((NTSTATUS) 0x8000001EL) -#endif - -#ifndef STATUS_BEGINNING_OF_MEDIA -# define STATUS_BEGINNING_OF_MEDIA ((NTSTATUS) 0x8000001FL) -#endif - -#ifndef STATUS_MEDIA_CHECK -# define STATUS_MEDIA_CHECK ((NTSTATUS) 0x80000020L) -#endif - -#ifndef STATUS_SETMARK_DETECTED -# define STATUS_SETMARK_DETECTED ((NTSTATUS) 0x80000021L) -#endif - -#ifndef STATUS_NO_DATA_DETECTED -# define STATUS_NO_DATA_DETECTED ((NTSTATUS) 0x80000022L) -#endif - -#ifndef STATUS_REDIRECTOR_HAS_OPEN_HANDLES -# define STATUS_REDIRECTOR_HAS_OPEN_HANDLES ((NTSTATUS) 0x80000023L) -#endif - -#ifndef STATUS_SERVER_HAS_OPEN_HANDLES -# define STATUS_SERVER_HAS_OPEN_HANDLES ((NTSTATUS) 0x80000024L) -#endif - -#ifndef STATUS_ALREADY_DISCONNECTED -# define STATUS_ALREADY_DISCONNECTED ((NTSTATUS) 0x80000025L) -#endif - -#ifndef STATUS_LONGJUMP -# define STATUS_LONGJUMP ((NTSTATUS) 0x80000026L) -#endif - -#ifndef STATUS_CLEANER_CARTRIDGE_INSTALLED -# define STATUS_CLEANER_CARTRIDGE_INSTALLED ((NTSTATUS) 0x80000027L) -#endif - -#ifndef STATUS_PLUGPLAY_QUERY_VETOED -# define STATUS_PLUGPLAY_QUERY_VETOED ((NTSTATUS) 0x80000028L) -#endif - -#ifndef STATUS_UNWIND_CONSOLIDATE -# define STATUS_UNWIND_CONSOLIDATE ((NTSTATUS) 0x80000029L) -#endif - -#ifndef STATUS_REGISTRY_HIVE_RECOVERED -# define STATUS_REGISTRY_HIVE_RECOVERED ((NTSTATUS) 0x8000002AL) -#endif - -#ifndef STATUS_DLL_MIGHT_BE_INSECURE -# define STATUS_DLL_MIGHT_BE_INSECURE ((NTSTATUS) 0x8000002BL) -#endif - -#ifndef STATUS_DLL_MIGHT_BE_INCOMPATIBLE -# define STATUS_DLL_MIGHT_BE_INCOMPATIBLE ((NTSTATUS) 0x8000002CL) -#endif - -#ifndef STATUS_STOPPED_ON_SYMLINK -# define STATUS_STOPPED_ON_SYMLINK ((NTSTATUS) 0x8000002DL) -#endif - -#ifndef STATUS_CANNOT_GRANT_REQUESTED_OPLOCK -# define STATUS_CANNOT_GRANT_REQUESTED_OPLOCK ((NTSTATUS) 0x8000002EL) -#endif - -#ifndef STATUS_NO_ACE_CONDITION -# define STATUS_NO_ACE_CONDITION ((NTSTATUS) 0x8000002FL) -#endif - -#ifndef STATUS_UNSUCCESSFUL -# define STATUS_UNSUCCESSFUL ((NTSTATUS) 0xC0000001L) -#endif - -#ifndef STATUS_NOT_IMPLEMENTED -# define STATUS_NOT_IMPLEMENTED ((NTSTATUS) 0xC0000002L) -#endif - -#ifndef STATUS_INVALID_INFO_CLASS -# define STATUS_INVALID_INFO_CLASS ((NTSTATUS) 0xC0000003L) -#endif - -#ifndef STATUS_INFO_LENGTH_MISMATCH -# define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xC0000004L) -#endif - -#ifndef STATUS_ACCESS_VIOLATION -# define STATUS_ACCESS_VIOLATION ((NTSTATUS) 0xC0000005L) -#endif - -#ifndef STATUS_IN_PAGE_ERROR -# define STATUS_IN_PAGE_ERROR ((NTSTATUS) 0xC0000006L) -#endif - -#ifndef STATUS_PAGEFILE_QUOTA -# define STATUS_PAGEFILE_QUOTA ((NTSTATUS) 0xC0000007L) -#endif - -#ifndef STATUS_INVALID_HANDLE -# define STATUS_INVALID_HANDLE ((NTSTATUS) 0xC0000008L) -#endif - -#ifndef STATUS_BAD_INITIAL_STACK -# define STATUS_BAD_INITIAL_STACK ((NTSTATUS) 0xC0000009L) -#endif - -#ifndef STATUS_BAD_INITIAL_PC -# define STATUS_BAD_INITIAL_PC ((NTSTATUS) 0xC000000AL) -#endif - -#ifndef STATUS_INVALID_CID -# define STATUS_INVALID_CID ((NTSTATUS) 0xC000000BL) -#endif - -#ifndef STATUS_TIMER_NOT_CANCELED -# define STATUS_TIMER_NOT_CANCELED ((NTSTATUS) 0xC000000CL) -#endif - -#ifndef STATUS_INVALID_PARAMETER -# define STATUS_INVALID_PARAMETER ((NTSTATUS) 0xC000000DL) -#endif - -#ifndef STATUS_NO_SUCH_DEVICE -# define STATUS_NO_SUCH_DEVICE ((NTSTATUS) 0xC000000EL) -#endif - -#ifndef STATUS_NO_SUCH_FILE -# define STATUS_NO_SUCH_FILE ((NTSTATUS) 0xC000000FL) -#endif - -#ifndef STATUS_INVALID_DEVICE_REQUEST -# define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS) 0xC0000010L) -#endif - -#ifndef STATUS_END_OF_FILE -# define STATUS_END_OF_FILE ((NTSTATUS) 0xC0000011L) -#endif - -#ifndef STATUS_WRONG_VOLUME -# define STATUS_WRONG_VOLUME ((NTSTATUS) 0xC0000012L) -#endif - -#ifndef STATUS_NO_MEDIA_IN_DEVICE -# define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS) 0xC0000013L) -#endif - -#ifndef STATUS_UNRECOGNIZED_MEDIA -# define STATUS_UNRECOGNIZED_MEDIA ((NTSTATUS) 0xC0000014L) -#endif - -#ifndef STATUS_NONEXISTENT_SECTOR -# define STATUS_NONEXISTENT_SECTOR ((NTSTATUS) 0xC0000015L) -#endif - -#ifndef STATUS_MORE_PROCESSING_REQUIRED -# define STATUS_MORE_PROCESSING_REQUIRED ((NTSTATUS) 0xC0000016L) -#endif - -#ifndef STATUS_NO_MEMORY -# define STATUS_NO_MEMORY ((NTSTATUS) 0xC0000017L) -#endif - -#ifndef STATUS_CONFLICTING_ADDRESSES -# define STATUS_CONFLICTING_ADDRESSES ((NTSTATUS) 0xC0000018L) -#endif - -#ifndef STATUS_NOT_MAPPED_VIEW -# define STATUS_NOT_MAPPED_VIEW ((NTSTATUS) 0xC0000019L) -#endif - -#ifndef STATUS_UNABLE_TO_FREE_VM -# define STATUS_UNABLE_TO_FREE_VM ((NTSTATUS) 0xC000001AL) -#endif - -#ifndef STATUS_UNABLE_TO_DELETE_SECTION -# define STATUS_UNABLE_TO_DELETE_SECTION ((NTSTATUS) 0xC000001BL) -#endif - -#ifndef STATUS_INVALID_SYSTEM_SERVICE -# define STATUS_INVALID_SYSTEM_SERVICE ((NTSTATUS) 0xC000001CL) -#endif - -#ifndef STATUS_ILLEGAL_INSTRUCTION -# define STATUS_ILLEGAL_INSTRUCTION ((NTSTATUS) 0xC000001DL) -#endif - -#ifndef STATUS_INVALID_LOCK_SEQUENCE -# define STATUS_INVALID_LOCK_SEQUENCE ((NTSTATUS) 0xC000001EL) -#endif - -#ifndef STATUS_INVALID_VIEW_SIZE -# define STATUS_INVALID_VIEW_SIZE ((NTSTATUS) 0xC000001FL) -#endif - -#ifndef STATUS_INVALID_FILE_FOR_SECTION -# define STATUS_INVALID_FILE_FOR_SECTION ((NTSTATUS) 0xC0000020L) -#endif - -#ifndef STATUS_ALREADY_COMMITTED -# define STATUS_ALREADY_COMMITTED ((NTSTATUS) 0xC0000021L) -#endif - -#ifndef STATUS_ACCESS_DENIED -# define STATUS_ACCESS_DENIED ((NTSTATUS) 0xC0000022L) -#endif - -#ifndef STATUS_BUFFER_TOO_SMALL -# define STATUS_BUFFER_TOO_SMALL ((NTSTATUS) 0xC0000023L) -#endif - -#ifndef STATUS_OBJECT_TYPE_MISMATCH -# define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS) 0xC0000024L) -#endif - -#ifndef STATUS_NONCONTINUABLE_EXCEPTION -# define STATUS_NONCONTINUABLE_EXCEPTION ((NTSTATUS) 0xC0000025L) -#endif - -#ifndef STATUS_INVALID_DISPOSITION -# define STATUS_INVALID_DISPOSITION ((NTSTATUS) 0xC0000026L) -#endif - -#ifndef STATUS_UNWIND -# define STATUS_UNWIND ((NTSTATUS) 0xC0000027L) -#endif - -#ifndef STATUS_BAD_STACK -# define STATUS_BAD_STACK ((NTSTATUS) 0xC0000028L) -#endif - -#ifndef STATUS_INVALID_UNWIND_TARGET -# define STATUS_INVALID_UNWIND_TARGET ((NTSTATUS) 0xC0000029L) -#endif - -#ifndef STATUS_NOT_LOCKED -# define STATUS_NOT_LOCKED ((NTSTATUS) 0xC000002AL) -#endif - -#ifndef STATUS_PARITY_ERROR -# define STATUS_PARITY_ERROR ((NTSTATUS) 0xC000002BL) -#endif - -#ifndef STATUS_UNABLE_TO_DECOMMIT_VM -# define STATUS_UNABLE_TO_DECOMMIT_VM ((NTSTATUS) 0xC000002CL) -#endif - -#ifndef STATUS_NOT_COMMITTED -# define STATUS_NOT_COMMITTED ((NTSTATUS) 0xC000002DL) -#endif - -#ifndef STATUS_INVALID_PORT_ATTRIBUTES -# define STATUS_INVALID_PORT_ATTRIBUTES ((NTSTATUS) 0xC000002EL) -#endif - -#ifndef STATUS_PORT_MESSAGE_TOO_LONG -# define STATUS_PORT_MESSAGE_TOO_LONG ((NTSTATUS) 0xC000002FL) -#endif - -#ifndef STATUS_INVALID_PARAMETER_MIX -# define STATUS_INVALID_PARAMETER_MIX ((NTSTATUS) 0xC0000030L) -#endif - -#ifndef STATUS_INVALID_QUOTA_LOWER -# define STATUS_INVALID_QUOTA_LOWER ((NTSTATUS) 0xC0000031L) -#endif - -#ifndef STATUS_DISK_CORRUPT_ERROR -# define STATUS_DISK_CORRUPT_ERROR ((NTSTATUS) 0xC0000032L) -#endif - -#ifndef STATUS_OBJECT_NAME_INVALID -# define STATUS_OBJECT_NAME_INVALID ((NTSTATUS) 0xC0000033L) -#endif - -#ifndef STATUS_OBJECT_NAME_NOT_FOUND -# define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS) 0xC0000034L) -#endif - -#ifndef STATUS_OBJECT_NAME_COLLISION -# define STATUS_OBJECT_NAME_COLLISION ((NTSTATUS) 0xC0000035L) -#endif - -#ifndef STATUS_PORT_DISCONNECTED -# define STATUS_PORT_DISCONNECTED ((NTSTATUS) 0xC0000037L) -#endif - -#ifndef STATUS_DEVICE_ALREADY_ATTACHED -# define STATUS_DEVICE_ALREADY_ATTACHED ((NTSTATUS) 0xC0000038L) -#endif - -#ifndef STATUS_OBJECT_PATH_INVALID -# define STATUS_OBJECT_PATH_INVALID ((NTSTATUS) 0xC0000039L) -#endif - -#ifndef STATUS_OBJECT_PATH_NOT_FOUND -# define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS) 0xC000003AL) -#endif - -#ifndef STATUS_OBJECT_PATH_SYNTAX_BAD -# define STATUS_OBJECT_PATH_SYNTAX_BAD ((NTSTATUS) 0xC000003BL) -#endif - -#ifndef STATUS_DATA_OVERRUN -# define STATUS_DATA_OVERRUN ((NTSTATUS) 0xC000003CL) -#endif - -#ifndef STATUS_DATA_LATE_ERROR -# define STATUS_DATA_LATE_ERROR ((NTSTATUS) 0xC000003DL) -#endif - -#ifndef STATUS_DATA_ERROR -# define STATUS_DATA_ERROR ((NTSTATUS) 0xC000003EL) -#endif - -#ifndef STATUS_CRC_ERROR -# define STATUS_CRC_ERROR ((NTSTATUS) 0xC000003FL) -#endif - -#ifndef STATUS_SECTION_TOO_BIG -# define STATUS_SECTION_TOO_BIG ((NTSTATUS) 0xC0000040L) -#endif - -#ifndef STATUS_PORT_CONNECTION_REFUSED -# define STATUS_PORT_CONNECTION_REFUSED ((NTSTATUS) 0xC0000041L) -#endif - -#ifndef STATUS_INVALID_PORT_HANDLE -# define STATUS_INVALID_PORT_HANDLE ((NTSTATUS) 0xC0000042L) -#endif - -#ifndef STATUS_SHARING_VIOLATION -# define STATUS_SHARING_VIOLATION ((NTSTATUS) 0xC0000043L) -#endif - -#ifndef STATUS_QUOTA_EXCEEDED -# define STATUS_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000044L) -#endif - -#ifndef STATUS_INVALID_PAGE_PROTECTION -# define STATUS_INVALID_PAGE_PROTECTION ((NTSTATUS) 0xC0000045L) -#endif - -#ifndef STATUS_MUTANT_NOT_OWNED -# define STATUS_MUTANT_NOT_OWNED ((NTSTATUS) 0xC0000046L) -#endif - -#ifndef STATUS_SEMAPHORE_LIMIT_EXCEEDED -# define STATUS_SEMAPHORE_LIMIT_EXCEEDED ((NTSTATUS) 0xC0000047L) -#endif - -#ifndef STATUS_PORT_ALREADY_SET -# define STATUS_PORT_ALREADY_SET ((NTSTATUS) 0xC0000048L) -#endif - -#ifndef STATUS_SECTION_NOT_IMAGE -# define STATUS_SECTION_NOT_IMAGE ((NTSTATUS) 0xC0000049L) -#endif - -#ifndef STATUS_SUSPEND_COUNT_EXCEEDED -# define STATUS_SUSPEND_COUNT_EXCEEDED ((NTSTATUS) 0xC000004AL) -#endif - -#ifndef STATUS_THREAD_IS_TERMINATING -# define STATUS_THREAD_IS_TERMINATING ((NTSTATUS) 0xC000004BL) -#endif - -#ifndef STATUS_BAD_WORKING_SET_LIMIT -# define STATUS_BAD_WORKING_SET_LIMIT ((NTSTATUS) 0xC000004CL) -#endif - -#ifndef STATUS_INCOMPATIBLE_FILE_MAP -# define STATUS_INCOMPATIBLE_FILE_MAP ((NTSTATUS) 0xC000004DL) -#endif - -#ifndef STATUS_SECTION_PROTECTION -# define STATUS_SECTION_PROTECTION ((NTSTATUS) 0xC000004EL) -#endif - -#ifndef STATUS_EAS_NOT_SUPPORTED -# define STATUS_EAS_NOT_SUPPORTED ((NTSTATUS) 0xC000004FL) -#endif - -#ifndef STATUS_EA_TOO_LARGE -# define STATUS_EA_TOO_LARGE ((NTSTATUS) 0xC0000050L) -#endif - -#ifndef STATUS_NONEXISTENT_EA_ENTRY -# define STATUS_NONEXISTENT_EA_ENTRY ((NTSTATUS) 0xC0000051L) -#endif - -#ifndef STATUS_NO_EAS_ON_FILE -# define STATUS_NO_EAS_ON_FILE ((NTSTATUS) 0xC0000052L) -#endif - -#ifndef STATUS_EA_CORRUPT_ERROR -# define STATUS_EA_CORRUPT_ERROR ((NTSTATUS) 0xC0000053L) -#endif - -#ifndef STATUS_FILE_LOCK_CONFLICT -# define STATUS_FILE_LOCK_CONFLICT ((NTSTATUS) 0xC0000054L) -#endif - -#ifndef STATUS_LOCK_NOT_GRANTED -# define STATUS_LOCK_NOT_GRANTED ((NTSTATUS) 0xC0000055L) -#endif - -#ifndef STATUS_DELETE_PENDING -# define STATUS_DELETE_PENDING ((NTSTATUS) 0xC0000056L) -#endif - -#ifndef STATUS_CTL_FILE_NOT_SUPPORTED -# define STATUS_CTL_FILE_NOT_SUPPORTED ((NTSTATUS) 0xC0000057L) -#endif - -#ifndef STATUS_UNKNOWN_REVISION -# define STATUS_UNKNOWN_REVISION ((NTSTATUS) 0xC0000058L) -#endif - -#ifndef STATUS_REVISION_MISMATCH -# define STATUS_REVISION_MISMATCH ((NTSTATUS) 0xC0000059L) -#endif - -#ifndef STATUS_INVALID_OWNER -# define STATUS_INVALID_OWNER ((NTSTATUS) 0xC000005AL) -#endif - -#ifndef STATUS_INVALID_PRIMARY_GROUP -# define STATUS_INVALID_PRIMARY_GROUP ((NTSTATUS) 0xC000005BL) -#endif - -#ifndef STATUS_NO_IMPERSONATION_TOKEN -# define STATUS_NO_IMPERSONATION_TOKEN ((NTSTATUS) 0xC000005CL) -#endif - -#ifndef STATUS_CANT_DISABLE_MANDATORY -# define STATUS_CANT_DISABLE_MANDATORY ((NTSTATUS) 0xC000005DL) -#endif - -#ifndef STATUS_NO_LOGON_SERVERS -# define STATUS_NO_LOGON_SERVERS ((NTSTATUS) 0xC000005EL) -#endif - -#ifndef STATUS_NO_SUCH_LOGON_SESSION -# define STATUS_NO_SUCH_LOGON_SESSION ((NTSTATUS) 0xC000005FL) -#endif - -#ifndef STATUS_NO_SUCH_PRIVILEGE -# define STATUS_NO_SUCH_PRIVILEGE ((NTSTATUS) 0xC0000060L) -#endif - -#ifndef STATUS_PRIVILEGE_NOT_HELD -# define STATUS_PRIVILEGE_NOT_HELD ((NTSTATUS) 0xC0000061L) -#endif - -#ifndef STATUS_INVALID_ACCOUNT_NAME -# define STATUS_INVALID_ACCOUNT_NAME ((NTSTATUS) 0xC0000062L) -#endif - -#ifndef STATUS_USER_EXISTS -# define STATUS_USER_EXISTS ((NTSTATUS) 0xC0000063L) -#endif - -#ifndef STATUS_NO_SUCH_USER -# define STATUS_NO_SUCH_USER ((NTSTATUS) 0xC0000064L) -#endif - -#ifndef STATUS_GROUP_EXISTS -# define STATUS_GROUP_EXISTS ((NTSTATUS) 0xC0000065L) -#endif - -#ifndef STATUS_NO_SUCH_GROUP -# define STATUS_NO_SUCH_GROUP ((NTSTATUS) 0xC0000066L) -#endif - -#ifndef STATUS_MEMBER_IN_GROUP -# define STATUS_MEMBER_IN_GROUP ((NTSTATUS) 0xC0000067L) -#endif - -#ifndef STATUS_MEMBER_NOT_IN_GROUP -# define STATUS_MEMBER_NOT_IN_GROUP ((NTSTATUS) 0xC0000068L) -#endif - -#ifndef STATUS_LAST_ADMIN -# define STATUS_LAST_ADMIN ((NTSTATUS) 0xC0000069L) -#endif - -#ifndef STATUS_WRONG_PASSWORD -# define STATUS_WRONG_PASSWORD ((NTSTATUS) 0xC000006AL) -#endif - -#ifndef STATUS_ILL_FORMED_PASSWORD -# define STATUS_ILL_FORMED_PASSWORD ((NTSTATUS) 0xC000006BL) -#endif - -#ifndef STATUS_PASSWORD_RESTRICTION -# define STATUS_PASSWORD_RESTRICTION ((NTSTATUS) 0xC000006CL) -#endif - -#ifndef STATUS_LOGON_FAILURE -# define STATUS_LOGON_FAILURE ((NTSTATUS) 0xC000006DL) -#endif - -#ifndef STATUS_ACCOUNT_RESTRICTION -# define STATUS_ACCOUNT_RESTRICTION ((NTSTATUS) 0xC000006EL) -#endif - -#ifndef STATUS_INVALID_LOGON_HOURS -# define STATUS_INVALID_LOGON_HOURS ((NTSTATUS) 0xC000006FL) -#endif - -#ifndef STATUS_INVALID_WORKSTATION -# define STATUS_INVALID_WORKSTATION ((NTSTATUS) 0xC0000070L) -#endif - -#ifndef STATUS_PASSWORD_EXPIRED -# define STATUS_PASSWORD_EXPIRED ((NTSTATUS) 0xC0000071L) -#endif - -#ifndef STATUS_ACCOUNT_DISABLED -# define STATUS_ACCOUNT_DISABLED ((NTSTATUS) 0xC0000072L) -#endif - -#ifndef STATUS_NONE_MAPPED -# define STATUS_NONE_MAPPED ((NTSTATUS) 0xC0000073L) -#endif - -#ifndef STATUS_TOO_MANY_LUIDS_REQUESTED -# define STATUS_TOO_MANY_LUIDS_REQUESTED ((NTSTATUS) 0xC0000074L) -#endif - -#ifndef STATUS_LUIDS_EXHAUSTED -# define STATUS_LUIDS_EXHAUSTED ((NTSTATUS) 0xC0000075L) -#endif - -#ifndef STATUS_INVALID_SUB_AUTHORITY -# define STATUS_INVALID_SUB_AUTHORITY ((NTSTATUS) 0xC0000076L) -#endif - -#ifndef STATUS_INVALID_ACL -# define STATUS_INVALID_ACL ((NTSTATUS) 0xC0000077L) -#endif - -#ifndef STATUS_INVALID_SID -# define STATUS_INVALID_SID ((NTSTATUS) 0xC0000078L) -#endif - -#ifndef STATUS_INVALID_SECURITY_DESCR -# define STATUS_INVALID_SECURITY_DESCR ((NTSTATUS) 0xC0000079L) -#endif - -#ifndef STATUS_PROCEDURE_NOT_FOUND -# define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS) 0xC000007AL) -#endif - -#ifndef STATUS_INVALID_IMAGE_FORMAT -# define STATUS_INVALID_IMAGE_FORMAT ((NTSTATUS) 0xC000007BL) -#endif - -#ifndef STATUS_NO_TOKEN -# define STATUS_NO_TOKEN ((NTSTATUS) 0xC000007CL) -#endif - -#ifndef STATUS_BAD_INHERITANCE_ACL -# define STATUS_BAD_INHERITANCE_ACL ((NTSTATUS) 0xC000007DL) -#endif - -#ifndef STATUS_RANGE_NOT_LOCKED -# define STATUS_RANGE_NOT_LOCKED ((NTSTATUS) 0xC000007EL) -#endif - -#ifndef STATUS_DISK_FULL -# define STATUS_DISK_FULL ((NTSTATUS) 0xC000007FL) -#endif - -#ifndef STATUS_SERVER_DISABLED -# define STATUS_SERVER_DISABLED ((NTSTATUS) 0xC0000080L) -#endif - -#ifndef STATUS_SERVER_NOT_DISABLED -# define STATUS_SERVER_NOT_DISABLED ((NTSTATUS) 0xC0000081L) -#endif - -#ifndef STATUS_TOO_MANY_GUIDS_REQUESTED -# define STATUS_TOO_MANY_GUIDS_REQUESTED ((NTSTATUS) 0xC0000082L) -#endif - -#ifndef STATUS_GUIDS_EXHAUSTED -# define STATUS_GUIDS_EXHAUSTED ((NTSTATUS) 0xC0000083L) -#endif - -#ifndef STATUS_INVALID_ID_AUTHORITY -# define STATUS_INVALID_ID_AUTHORITY ((NTSTATUS) 0xC0000084L) -#endif - -#ifndef STATUS_AGENTS_EXHAUSTED -# define STATUS_AGENTS_EXHAUSTED ((NTSTATUS) 0xC0000085L) -#endif - -#ifndef STATUS_INVALID_VOLUME_LABEL -# define STATUS_INVALID_VOLUME_LABEL ((NTSTATUS) 0xC0000086L) -#endif - -#ifndef STATUS_SECTION_NOT_EXTENDED -# define STATUS_SECTION_NOT_EXTENDED ((NTSTATUS) 0xC0000087L) -#endif - -#ifndef STATUS_NOT_MAPPED_DATA -# define STATUS_NOT_MAPPED_DATA ((NTSTATUS) 0xC0000088L) -#endif - -#ifndef STATUS_RESOURCE_DATA_NOT_FOUND -# define STATUS_RESOURCE_DATA_NOT_FOUND ((NTSTATUS) 0xC0000089L) -#endif - -#ifndef STATUS_RESOURCE_TYPE_NOT_FOUND -# define STATUS_RESOURCE_TYPE_NOT_FOUND ((NTSTATUS) 0xC000008AL) -#endif - -#ifndef STATUS_RESOURCE_NAME_NOT_FOUND -# define STATUS_RESOURCE_NAME_NOT_FOUND ((NTSTATUS) 0xC000008BL) -#endif - -#ifndef STATUS_ARRAY_BOUNDS_EXCEEDED -# define STATUS_ARRAY_BOUNDS_EXCEEDED ((NTSTATUS) 0xC000008CL) -#endif - -#ifndef STATUS_FLOAT_DENORMAL_OPERAND -# define STATUS_FLOAT_DENORMAL_OPERAND ((NTSTATUS) 0xC000008DL) -#endif - -#ifndef STATUS_FLOAT_DIVIDE_BY_ZERO -# define STATUS_FLOAT_DIVIDE_BY_ZERO ((NTSTATUS) 0xC000008EL) -#endif - -#ifndef STATUS_FLOAT_INEXACT_RESULT -# define STATUS_FLOAT_INEXACT_RESULT ((NTSTATUS) 0xC000008FL) -#endif - -#ifndef STATUS_FLOAT_INVALID_OPERATION -# define STATUS_FLOAT_INVALID_OPERATION ((NTSTATUS) 0xC0000090L) -#endif - -#ifndef STATUS_FLOAT_OVERFLOW -# define STATUS_FLOAT_OVERFLOW ((NTSTATUS) 0xC0000091L) -#endif - -#ifndef STATUS_FLOAT_STACK_CHECK -# define STATUS_FLOAT_STACK_CHECK ((NTSTATUS) 0xC0000092L) -#endif - -#ifndef STATUS_FLOAT_UNDERFLOW -# define STATUS_FLOAT_UNDERFLOW ((NTSTATUS) 0xC0000093L) -#endif - -#ifndef STATUS_INTEGER_DIVIDE_BY_ZERO -# define STATUS_INTEGER_DIVIDE_BY_ZERO ((NTSTATUS) 0xC0000094L) -#endif - -#ifndef STATUS_INTEGER_OVERFLOW -# define STATUS_INTEGER_OVERFLOW ((NTSTATUS) 0xC0000095L) -#endif - -#ifndef STATUS_PRIVILEGED_INSTRUCTION -# define STATUS_PRIVILEGED_INSTRUCTION ((NTSTATUS) 0xC0000096L) -#endif - -#ifndef STATUS_TOO_MANY_PAGING_FILES -# define STATUS_TOO_MANY_PAGING_FILES ((NTSTATUS) 0xC0000097L) -#endif - -#ifndef STATUS_FILE_INVALID -# define STATUS_FILE_INVALID ((NTSTATUS) 0xC0000098L) -#endif - -#ifndef STATUS_ALLOTTED_SPACE_EXCEEDED -# define STATUS_ALLOTTED_SPACE_EXCEEDED ((NTSTATUS) 0xC0000099L) -#endif - -#ifndef STATUS_INSUFFICIENT_RESOURCES -# define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS) 0xC000009AL) -#endif - -#ifndef STATUS_DFS_EXIT_PATH_FOUND -# define STATUS_DFS_EXIT_PATH_FOUND ((NTSTATUS) 0xC000009BL) -#endif - -#ifndef STATUS_DEVICE_DATA_ERROR -# define STATUS_DEVICE_DATA_ERROR ((NTSTATUS) 0xC000009CL) -#endif - -#ifndef STATUS_DEVICE_NOT_CONNECTED -# define STATUS_DEVICE_NOT_CONNECTED ((NTSTATUS) 0xC000009DL) -#endif - -#ifndef STATUS_DEVICE_POWER_FAILURE -# define STATUS_DEVICE_POWER_FAILURE ((NTSTATUS) 0xC000009EL) -#endif - -#ifndef STATUS_FREE_VM_NOT_AT_BASE -# define STATUS_FREE_VM_NOT_AT_BASE ((NTSTATUS) 0xC000009FL) -#endif - -#ifndef STATUS_MEMORY_NOT_ALLOCATED -# define STATUS_MEMORY_NOT_ALLOCATED ((NTSTATUS) 0xC00000A0L) -#endif - -#ifndef STATUS_WORKING_SET_QUOTA -# define STATUS_WORKING_SET_QUOTA ((NTSTATUS) 0xC00000A1L) -#endif - -#ifndef STATUS_MEDIA_WRITE_PROTECTED -# define STATUS_MEDIA_WRITE_PROTECTED ((NTSTATUS) 0xC00000A2L) -#endif - -#ifndef STATUS_DEVICE_NOT_READY -# define STATUS_DEVICE_NOT_READY ((NTSTATUS) 0xC00000A3L) -#endif - -#ifndef STATUS_INVALID_GROUP_ATTRIBUTES -# define STATUS_INVALID_GROUP_ATTRIBUTES ((NTSTATUS) 0xC00000A4L) -#endif - -#ifndef STATUS_BAD_IMPERSONATION_LEVEL -# define STATUS_BAD_IMPERSONATION_LEVEL ((NTSTATUS) 0xC00000A5L) -#endif - -#ifndef STATUS_CANT_OPEN_ANONYMOUS -# define STATUS_CANT_OPEN_ANONYMOUS ((NTSTATUS) 0xC00000A6L) -#endif - -#ifndef STATUS_BAD_VALIDATION_CLASS -# define STATUS_BAD_VALIDATION_CLASS ((NTSTATUS) 0xC00000A7L) -#endif - -#ifndef STATUS_BAD_TOKEN_TYPE -# define STATUS_BAD_TOKEN_TYPE ((NTSTATUS) 0xC00000A8L) -#endif - -#ifndef STATUS_BAD_MASTER_BOOT_RECORD -# define STATUS_BAD_MASTER_BOOT_RECORD ((NTSTATUS) 0xC00000A9L) -#endif - -#ifndef STATUS_INSTRUCTION_MISALIGNMENT -# define STATUS_INSTRUCTION_MISALIGNMENT ((NTSTATUS) 0xC00000AAL) -#endif - -#ifndef STATUS_INSTANCE_NOT_AVAILABLE -# define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS) 0xC00000ABL) -#endif - -#ifndef STATUS_PIPE_NOT_AVAILABLE -# define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS) 0xC00000ACL) -#endif - -#ifndef STATUS_INVALID_PIPE_STATE -# define STATUS_INVALID_PIPE_STATE ((NTSTATUS) 0xC00000ADL) -#endif - -#ifndef STATUS_PIPE_BUSY -# define STATUS_PIPE_BUSY ((NTSTATUS) 0xC00000AEL) -#endif - -#ifndef STATUS_ILLEGAL_FUNCTION -# define STATUS_ILLEGAL_FUNCTION ((NTSTATUS) 0xC00000AFL) -#endif - -#ifndef STATUS_PIPE_DISCONNECTED -# define STATUS_PIPE_DISCONNECTED ((NTSTATUS) 0xC00000B0L) -#endif - -#ifndef STATUS_PIPE_CLOSING -# define STATUS_PIPE_CLOSING ((NTSTATUS) 0xC00000B1L) -#endif - -#ifndef STATUS_PIPE_CONNECTED -# define STATUS_PIPE_CONNECTED ((NTSTATUS) 0xC00000B2L) -#endif - -#ifndef STATUS_PIPE_LISTENING -# define STATUS_PIPE_LISTENING ((NTSTATUS) 0xC00000B3L) -#endif - -#ifndef STATUS_INVALID_READ_MODE -# define STATUS_INVALID_READ_MODE ((NTSTATUS) 0xC00000B4L) -#endif - -#ifndef STATUS_IO_TIMEOUT -# define STATUS_IO_TIMEOUT ((NTSTATUS) 0xC00000B5L) -#endif - -#ifndef STATUS_FILE_FORCED_CLOSED -# define STATUS_FILE_FORCED_CLOSED ((NTSTATUS) 0xC00000B6L) -#endif - -#ifndef STATUS_PROFILING_NOT_STARTED -# define STATUS_PROFILING_NOT_STARTED ((NTSTATUS) 0xC00000B7L) -#endif - -#ifndef STATUS_PROFILING_NOT_STOPPED -# define STATUS_PROFILING_NOT_STOPPED ((NTSTATUS) 0xC00000B8L) -#endif - -#ifndef STATUS_COULD_NOT_INTERPRET -# define STATUS_COULD_NOT_INTERPRET ((NTSTATUS) 0xC00000B9L) -#endif - -#ifndef STATUS_FILE_IS_A_DIRECTORY -# define STATUS_FILE_IS_A_DIRECTORY ((NTSTATUS) 0xC00000BAL) -#endif - -#ifndef STATUS_NOT_SUPPORTED -# define STATUS_NOT_SUPPORTED ((NTSTATUS) 0xC00000BBL) -#endif - -#ifndef STATUS_REMOTE_NOT_LISTENING -# define STATUS_REMOTE_NOT_LISTENING ((NTSTATUS) 0xC00000BCL) -#endif - -#ifndef STATUS_DUPLICATE_NAME -# define STATUS_DUPLICATE_NAME ((NTSTATUS) 0xC00000BDL) -#endif - -#ifndef STATUS_BAD_NETWORK_PATH -# define STATUS_BAD_NETWORK_PATH ((NTSTATUS) 0xC00000BEL) -#endif - -#ifndef STATUS_NETWORK_BUSY -# define STATUS_NETWORK_BUSY ((NTSTATUS) 0xC00000BFL) -#endif - -#ifndef STATUS_DEVICE_DOES_NOT_EXIST -# define STATUS_DEVICE_DOES_NOT_EXIST ((NTSTATUS) 0xC00000C0L) -#endif - -#ifndef STATUS_TOO_MANY_COMMANDS -# define STATUS_TOO_MANY_COMMANDS ((NTSTATUS) 0xC00000C1L) -#endif - -#ifndef STATUS_ADAPTER_HARDWARE_ERROR -# define STATUS_ADAPTER_HARDWARE_ERROR ((NTSTATUS) 0xC00000C2L) -#endif - -#ifndef STATUS_INVALID_NETWORK_RESPONSE -# define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS) 0xC00000C3L) -#endif - -#ifndef STATUS_UNEXPECTED_NETWORK_ERROR -# define STATUS_UNEXPECTED_NETWORK_ERROR ((NTSTATUS) 0xC00000C4L) -#endif - -#ifndef STATUS_BAD_REMOTE_ADAPTER -# define STATUS_BAD_REMOTE_ADAPTER ((NTSTATUS) 0xC00000C5L) -#endif - -#ifndef STATUS_PRINT_QUEUE_FULL -# define STATUS_PRINT_QUEUE_FULL ((NTSTATUS) 0xC00000C6L) -#endif - -#ifndef STATUS_NO_SPOOL_SPACE -# define STATUS_NO_SPOOL_SPACE ((NTSTATUS) 0xC00000C7L) -#endif - -#ifndef STATUS_PRINT_CANCELLED -# define STATUS_PRINT_CANCELLED ((NTSTATUS) 0xC00000C8L) -#endif - -#ifndef STATUS_NETWORK_NAME_DELETED -# define STATUS_NETWORK_NAME_DELETED ((NTSTATUS) 0xC00000C9L) -#endif - -#ifndef STATUS_NETWORK_ACCESS_DENIED -# define STATUS_NETWORK_ACCESS_DENIED ((NTSTATUS) 0xC00000CAL) -#endif - -#ifndef STATUS_BAD_DEVICE_TYPE -# define STATUS_BAD_DEVICE_TYPE ((NTSTATUS) 0xC00000CBL) -#endif - -#ifndef STATUS_BAD_NETWORK_NAME -# define STATUS_BAD_NETWORK_NAME ((NTSTATUS) 0xC00000CCL) -#endif - -#ifndef STATUS_TOO_MANY_NAMES -# define STATUS_TOO_MANY_NAMES ((NTSTATUS) 0xC00000CDL) -#endif - -#ifndef STATUS_TOO_MANY_SESSIONS -# define STATUS_TOO_MANY_SESSIONS ((NTSTATUS) 0xC00000CEL) -#endif - -#ifndef STATUS_SHARING_PAUSED -# define STATUS_SHARING_PAUSED ((NTSTATUS) 0xC00000CFL) -#endif - -#ifndef STATUS_REQUEST_NOT_ACCEPTED -# define STATUS_REQUEST_NOT_ACCEPTED ((NTSTATUS) 0xC00000D0L) -#endif - -#ifndef STATUS_REDIRECTOR_PAUSED -# define STATUS_REDIRECTOR_PAUSED ((NTSTATUS) 0xC00000D1L) -#endif - -#ifndef STATUS_NET_WRITE_FAULT -# define STATUS_NET_WRITE_FAULT ((NTSTATUS) 0xC00000D2L) -#endif - -#ifndef STATUS_PROFILING_AT_LIMIT -# define STATUS_PROFILING_AT_LIMIT ((NTSTATUS) 0xC00000D3L) -#endif - -#ifndef STATUS_NOT_SAME_DEVICE -# define STATUS_NOT_SAME_DEVICE ((NTSTATUS) 0xC00000D4L) -#endif - -#ifndef STATUS_FILE_RENAMED -# define STATUS_FILE_RENAMED ((NTSTATUS) 0xC00000D5L) -#endif - -#ifndef STATUS_VIRTUAL_CIRCUIT_CLOSED -# define STATUS_VIRTUAL_CIRCUIT_CLOSED ((NTSTATUS) 0xC00000D6L) -#endif - -#ifndef STATUS_NO_SECURITY_ON_OBJECT -# define STATUS_NO_SECURITY_ON_OBJECT ((NTSTATUS) 0xC00000D7L) -#endif - -#ifndef STATUS_CANT_WAIT -# define STATUS_CANT_WAIT ((NTSTATUS) 0xC00000D8L) -#endif - -#ifndef STATUS_PIPE_EMPTY -# define STATUS_PIPE_EMPTY ((NTSTATUS) 0xC00000D9L) -#endif - -#ifndef STATUS_CANT_ACCESS_DOMAIN_INFO -# define STATUS_CANT_ACCESS_DOMAIN_INFO ((NTSTATUS) 0xC00000DAL) -#endif - -#ifndef STATUS_CANT_TERMINATE_SELF -# define STATUS_CANT_TERMINATE_SELF ((NTSTATUS) 0xC00000DBL) -#endif - -#ifndef STATUS_INVALID_SERVER_STATE -# define STATUS_INVALID_SERVER_STATE ((NTSTATUS) 0xC00000DCL) -#endif - -#ifndef STATUS_INVALID_DOMAIN_STATE -# define STATUS_INVALID_DOMAIN_STATE ((NTSTATUS) 0xC00000DDL) -#endif - -#ifndef STATUS_INVALID_DOMAIN_ROLE -# define STATUS_INVALID_DOMAIN_ROLE ((NTSTATUS) 0xC00000DEL) -#endif - -#ifndef STATUS_NO_SUCH_DOMAIN -# define STATUS_NO_SUCH_DOMAIN ((NTSTATUS) 0xC00000DFL) -#endif - -#ifndef STATUS_DOMAIN_EXISTS -# define STATUS_DOMAIN_EXISTS ((NTSTATUS) 0xC00000E0L) -#endif - -#ifndef STATUS_DOMAIN_LIMIT_EXCEEDED -# define STATUS_DOMAIN_LIMIT_EXCEEDED ((NTSTATUS) 0xC00000E1L) -#endif - -#ifndef STATUS_OPLOCK_NOT_GRANTED -# define STATUS_OPLOCK_NOT_GRANTED ((NTSTATUS) 0xC00000E2L) -#endif - -#ifndef STATUS_INVALID_OPLOCK_PROTOCOL -# define STATUS_INVALID_OPLOCK_PROTOCOL ((NTSTATUS) 0xC00000E3L) -#endif - -#ifndef STATUS_INTERNAL_DB_CORRUPTION -# define STATUS_INTERNAL_DB_CORRUPTION ((NTSTATUS) 0xC00000E4L) -#endif - -#ifndef STATUS_INTERNAL_ERROR -# define STATUS_INTERNAL_ERROR ((NTSTATUS) 0xC00000E5L) -#endif - -#ifndef STATUS_GENERIC_NOT_MAPPED -# define STATUS_GENERIC_NOT_MAPPED ((NTSTATUS) 0xC00000E6L) -#endif - -#ifndef STATUS_BAD_DESCRIPTOR_FORMAT -# define STATUS_BAD_DESCRIPTOR_FORMAT ((NTSTATUS) 0xC00000E7L) -#endif - -#ifndef STATUS_INVALID_USER_BUFFER -# define STATUS_INVALID_USER_BUFFER ((NTSTATUS) 0xC00000E8L) -#endif - -#ifndef STATUS_UNEXPECTED_IO_ERROR -# define STATUS_UNEXPECTED_IO_ERROR ((NTSTATUS) 0xC00000E9L) -#endif - -#ifndef STATUS_UNEXPECTED_MM_CREATE_ERR -# define STATUS_UNEXPECTED_MM_CREATE_ERR ((NTSTATUS) 0xC00000EAL) -#endif - -#ifndef STATUS_UNEXPECTED_MM_MAP_ERROR -# define STATUS_UNEXPECTED_MM_MAP_ERROR ((NTSTATUS) 0xC00000EBL) -#endif - -#ifndef STATUS_UNEXPECTED_MM_EXTEND_ERR -# define STATUS_UNEXPECTED_MM_EXTEND_ERR ((NTSTATUS) 0xC00000ECL) -#endif - -#ifndef STATUS_NOT_LOGON_PROCESS -# define STATUS_NOT_LOGON_PROCESS ((NTSTATUS) 0xC00000EDL) -#endif - -#ifndef STATUS_LOGON_SESSION_EXISTS -# define STATUS_LOGON_SESSION_EXISTS ((NTSTATUS) 0xC00000EEL) -#endif - -#ifndef STATUS_INVALID_PARAMETER_1 -# define STATUS_INVALID_PARAMETER_1 ((NTSTATUS) 0xC00000EFL) -#endif - -#ifndef STATUS_INVALID_PARAMETER_2 -# define STATUS_INVALID_PARAMETER_2 ((NTSTATUS) 0xC00000F0L) -#endif - -#ifndef STATUS_INVALID_PARAMETER_3 -# define STATUS_INVALID_PARAMETER_3 ((NTSTATUS) 0xC00000F1L) -#endif - -#ifndef STATUS_INVALID_PARAMETER_4 -# define STATUS_INVALID_PARAMETER_4 ((NTSTATUS) 0xC00000F2L) -#endif - -#ifndef STATUS_INVALID_PARAMETER_5 -# define STATUS_INVALID_PARAMETER_5 ((NTSTATUS) 0xC00000F3L) -#endif - -#ifndef STATUS_INVALID_PARAMETER_6 -# define STATUS_INVALID_PARAMETER_6 ((NTSTATUS) 0xC00000F4L) -#endif - -#ifndef STATUS_INVALID_PARAMETER_7 -# define STATUS_INVALID_PARAMETER_7 ((NTSTATUS) 0xC00000F5L) -#endif - -#ifndef STATUS_INVALID_PARAMETER_8 -# define STATUS_INVALID_PARAMETER_8 ((NTSTATUS) 0xC00000F6L) -#endif - -#ifndef STATUS_INVALID_PARAMETER_9 -# define STATUS_INVALID_PARAMETER_9 ((NTSTATUS) 0xC00000F7L) -#endif - -#ifndef STATUS_INVALID_PARAMETER_10 -# define STATUS_INVALID_PARAMETER_10 ((NTSTATUS) 0xC00000F8L) -#endif - -#ifndef STATUS_INVALID_PARAMETER_11 -# define STATUS_INVALID_PARAMETER_11 ((NTSTATUS) 0xC00000F9L) -#endif - -#ifndef STATUS_INVALID_PARAMETER_12 -# define STATUS_INVALID_PARAMETER_12 ((NTSTATUS) 0xC00000FAL) -#endif - -#ifndef STATUS_REDIRECTOR_NOT_STARTED -# define STATUS_REDIRECTOR_NOT_STARTED ((NTSTATUS) 0xC00000FBL) -#endif - -#ifndef STATUS_REDIRECTOR_STARTED -# define STATUS_REDIRECTOR_STARTED ((NTSTATUS) 0xC00000FCL) -#endif - -#ifndef STATUS_STACK_OVERFLOW -# define STATUS_STACK_OVERFLOW ((NTSTATUS) 0xC00000FDL) -#endif - -#ifndef STATUS_NO_SUCH_PACKAGE -# define STATUS_NO_SUCH_PACKAGE ((NTSTATUS) 0xC00000FEL) -#endif - -#ifndef STATUS_BAD_FUNCTION_TABLE -# define STATUS_BAD_FUNCTION_TABLE ((NTSTATUS) 0xC00000FFL) -#endif - -#ifndef STATUS_VARIABLE_NOT_FOUND -# define STATUS_VARIABLE_NOT_FOUND ((NTSTATUS) 0xC0000100L) -#endif - -#ifndef STATUS_DIRECTORY_NOT_EMPTY -# define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS) 0xC0000101L) -#endif - -#ifndef STATUS_FILE_CORRUPT_ERROR -# define STATUS_FILE_CORRUPT_ERROR ((NTSTATUS) 0xC0000102L) -#endif - -#ifndef STATUS_NOT_A_DIRECTORY -# define STATUS_NOT_A_DIRECTORY ((NTSTATUS) 0xC0000103L) -#endif - -#ifndef STATUS_BAD_LOGON_SESSION_STATE -# define STATUS_BAD_LOGON_SESSION_STATE ((NTSTATUS) 0xC0000104L) -#endif - -#ifndef STATUS_LOGON_SESSION_COLLISION -# define STATUS_LOGON_SESSION_COLLISION ((NTSTATUS) 0xC0000105L) -#endif - -#ifndef STATUS_NAME_TOO_LONG -# define STATUS_NAME_TOO_LONG ((NTSTATUS) 0xC0000106L) -#endif - -#ifndef STATUS_FILES_OPEN -# define STATUS_FILES_OPEN ((NTSTATUS) 0xC0000107L) -#endif - -#ifndef STATUS_CONNECTION_IN_USE -# define STATUS_CONNECTION_IN_USE ((NTSTATUS) 0xC0000108L) -#endif - -#ifndef STATUS_MESSAGE_NOT_FOUND -# define STATUS_MESSAGE_NOT_FOUND ((NTSTATUS) 0xC0000109L) -#endif - -#ifndef STATUS_PROCESS_IS_TERMINATING -# define STATUS_PROCESS_IS_TERMINATING ((NTSTATUS) 0xC000010AL) -#endif - -#ifndef STATUS_INVALID_LOGON_TYPE -# define STATUS_INVALID_LOGON_TYPE ((NTSTATUS) 0xC000010BL) -#endif - -#ifndef STATUS_NO_GUID_TRANSLATION -# define STATUS_NO_GUID_TRANSLATION ((NTSTATUS) 0xC000010CL) -#endif - -#ifndef STATUS_CANNOT_IMPERSONATE -# define STATUS_CANNOT_IMPERSONATE ((NTSTATUS) 0xC000010DL) -#endif - -#ifndef STATUS_IMAGE_ALREADY_LOADED -# define STATUS_IMAGE_ALREADY_LOADED ((NTSTATUS) 0xC000010EL) -#endif - -#ifndef STATUS_ABIOS_NOT_PRESENT -# define STATUS_ABIOS_NOT_PRESENT ((NTSTATUS) 0xC000010FL) -#endif - -#ifndef STATUS_ABIOS_LID_NOT_EXIST -# define STATUS_ABIOS_LID_NOT_EXIST ((NTSTATUS) 0xC0000110L) -#endif - -#ifndef STATUS_ABIOS_LID_ALREADY_OWNED -# define STATUS_ABIOS_LID_ALREADY_OWNED ((NTSTATUS) 0xC0000111L) -#endif - -#ifndef STATUS_ABIOS_NOT_LID_OWNER -# define STATUS_ABIOS_NOT_LID_OWNER ((NTSTATUS) 0xC0000112L) -#endif - -#ifndef STATUS_ABIOS_INVALID_COMMAND -# define STATUS_ABIOS_INVALID_COMMAND ((NTSTATUS) 0xC0000113L) -#endif - -#ifndef STATUS_ABIOS_INVALID_LID -# define STATUS_ABIOS_INVALID_LID ((NTSTATUS) 0xC0000114L) -#endif - -#ifndef STATUS_ABIOS_SELECTOR_NOT_AVAILABLE -# define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE ((NTSTATUS) 0xC0000115L) -#endif - -#ifndef STATUS_ABIOS_INVALID_SELECTOR -# define STATUS_ABIOS_INVALID_SELECTOR ((NTSTATUS) 0xC0000116L) -#endif - -#ifndef STATUS_NO_LDT -# define STATUS_NO_LDT ((NTSTATUS) 0xC0000117L) -#endif - -#ifndef STATUS_INVALID_LDT_SIZE -# define STATUS_INVALID_LDT_SIZE ((NTSTATUS) 0xC0000118L) -#endif - -#ifndef STATUS_INVALID_LDT_OFFSET -# define STATUS_INVALID_LDT_OFFSET ((NTSTATUS) 0xC0000119L) -#endif - -#ifndef STATUS_INVALID_LDT_DESCRIPTOR -# define STATUS_INVALID_LDT_DESCRIPTOR ((NTSTATUS) 0xC000011AL) -#endif - -#ifndef STATUS_INVALID_IMAGE_NE_FORMAT -# define STATUS_INVALID_IMAGE_NE_FORMAT ((NTSTATUS) 0xC000011BL) -#endif - -#ifndef STATUS_RXACT_INVALID_STATE -# define STATUS_RXACT_INVALID_STATE ((NTSTATUS) 0xC000011CL) -#endif - -#ifndef STATUS_RXACT_COMMIT_FAILURE -# define STATUS_RXACT_COMMIT_FAILURE ((NTSTATUS) 0xC000011DL) -#endif - -#ifndef STATUS_MAPPED_FILE_SIZE_ZERO -# define STATUS_MAPPED_FILE_SIZE_ZERO ((NTSTATUS) 0xC000011EL) -#endif - -#ifndef STATUS_TOO_MANY_OPENED_FILES -# define STATUS_TOO_MANY_OPENED_FILES ((NTSTATUS) 0xC000011FL) -#endif - -#ifndef STATUS_CANCELLED -# define STATUS_CANCELLED ((NTSTATUS) 0xC0000120L) -#endif - -#ifndef STATUS_CANNOT_DELETE -# define STATUS_CANNOT_DELETE ((NTSTATUS) 0xC0000121L) -#endif - -#ifndef STATUS_INVALID_COMPUTER_NAME -# define STATUS_INVALID_COMPUTER_NAME ((NTSTATUS) 0xC0000122L) -#endif - -#ifndef STATUS_FILE_DELETED -# define STATUS_FILE_DELETED ((NTSTATUS) 0xC0000123L) -#endif - -#ifndef STATUS_SPECIAL_ACCOUNT -# define STATUS_SPECIAL_ACCOUNT ((NTSTATUS) 0xC0000124L) -#endif - -#ifndef STATUS_SPECIAL_GROUP -# define STATUS_SPECIAL_GROUP ((NTSTATUS) 0xC0000125L) -#endif - -#ifndef STATUS_SPECIAL_USER -# define STATUS_SPECIAL_USER ((NTSTATUS) 0xC0000126L) -#endif - -#ifndef STATUS_MEMBERS_PRIMARY_GROUP -# define STATUS_MEMBERS_PRIMARY_GROUP ((NTSTATUS) 0xC0000127L) -#endif - -#ifndef STATUS_FILE_CLOSED -# define STATUS_FILE_CLOSED ((NTSTATUS) 0xC0000128L) -#endif - -#ifndef STATUS_TOO_MANY_THREADS -# define STATUS_TOO_MANY_THREADS ((NTSTATUS) 0xC0000129L) -#endif - -#ifndef STATUS_THREAD_NOT_IN_PROCESS -# define STATUS_THREAD_NOT_IN_PROCESS ((NTSTATUS) 0xC000012AL) -#endif - -#ifndef STATUS_TOKEN_ALREADY_IN_USE -# define STATUS_TOKEN_ALREADY_IN_USE ((NTSTATUS) 0xC000012BL) -#endif - -#ifndef STATUS_PAGEFILE_QUOTA_EXCEEDED -# define STATUS_PAGEFILE_QUOTA_EXCEEDED ((NTSTATUS) 0xC000012CL) -#endif - -#ifndef STATUS_COMMITMENT_LIMIT -# define STATUS_COMMITMENT_LIMIT ((NTSTATUS) 0xC000012DL) -#endif - -#ifndef STATUS_INVALID_IMAGE_LE_FORMAT -# define STATUS_INVALID_IMAGE_LE_FORMAT ((NTSTATUS) 0xC000012EL) -#endif - -#ifndef STATUS_INVALID_IMAGE_NOT_MZ -# define STATUS_INVALID_IMAGE_NOT_MZ ((NTSTATUS) 0xC000012FL) -#endif - -#ifndef STATUS_INVALID_IMAGE_PROTECT -# define STATUS_INVALID_IMAGE_PROTECT ((NTSTATUS) 0xC0000130L) -#endif - -#ifndef STATUS_INVALID_IMAGE_WIN_16 -# define STATUS_INVALID_IMAGE_WIN_16 ((NTSTATUS) 0xC0000131L) -#endif - -#ifndef STATUS_LOGON_SERVER_CONFLICT -# define STATUS_LOGON_SERVER_CONFLICT ((NTSTATUS) 0xC0000132L) -#endif - -#ifndef STATUS_TIME_DIFFERENCE_AT_DC -# define STATUS_TIME_DIFFERENCE_AT_DC ((NTSTATUS) 0xC0000133L) -#endif - -#ifndef STATUS_SYNCHRONIZATION_REQUIRED -# define STATUS_SYNCHRONIZATION_REQUIRED ((NTSTATUS) 0xC0000134L) -#endif - -#ifndef STATUS_DLL_NOT_FOUND -# define STATUS_DLL_NOT_FOUND ((NTSTATUS) 0xC0000135L) -#endif - -#ifndef STATUS_OPEN_FAILED -# define STATUS_OPEN_FAILED ((NTSTATUS) 0xC0000136L) -#endif - -#ifndef STATUS_IO_PRIVILEGE_FAILED -# define STATUS_IO_PRIVILEGE_FAILED ((NTSTATUS) 0xC0000137L) -#endif - -#ifndef STATUS_ORDINAL_NOT_FOUND -# define STATUS_ORDINAL_NOT_FOUND ((NTSTATUS) 0xC0000138L) -#endif - -#ifndef STATUS_ENTRYPOINT_NOT_FOUND -# define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xC0000139L) -#endif - -#ifndef STATUS_CONTROL_C_EXIT -# define STATUS_CONTROL_C_EXIT ((NTSTATUS) 0xC000013AL) -#endif - -#ifndef STATUS_LOCAL_DISCONNECT -# define STATUS_LOCAL_DISCONNECT ((NTSTATUS) 0xC000013BL) -#endif - -#ifndef STATUS_REMOTE_DISCONNECT -# define STATUS_REMOTE_DISCONNECT ((NTSTATUS) 0xC000013CL) -#endif - -#ifndef STATUS_REMOTE_RESOURCES -# define STATUS_REMOTE_RESOURCES ((NTSTATUS) 0xC000013DL) -#endif - -#ifndef STATUS_LINK_FAILED -# define STATUS_LINK_FAILED ((NTSTATUS) 0xC000013EL) -#endif - -#ifndef STATUS_LINK_TIMEOUT -# define STATUS_LINK_TIMEOUT ((NTSTATUS) 0xC000013FL) -#endif - -#ifndef STATUS_INVALID_CONNECTION -# define STATUS_INVALID_CONNECTION ((NTSTATUS) 0xC0000140L) -#endif - -#ifndef STATUS_INVALID_ADDRESS -# define STATUS_INVALID_ADDRESS ((NTSTATUS) 0xC0000141L) -#endif - -#ifndef STATUS_DLL_INIT_FAILED -# define STATUS_DLL_INIT_FAILED ((NTSTATUS) 0xC0000142L) -#endif - -#ifndef STATUS_MISSING_SYSTEMFILE -# define STATUS_MISSING_SYSTEMFILE ((NTSTATUS) 0xC0000143L) -#endif - -#ifndef STATUS_UNHANDLED_EXCEPTION -# define STATUS_UNHANDLED_EXCEPTION ((NTSTATUS) 0xC0000144L) -#endif - -#ifndef STATUS_APP_INIT_FAILURE -# define STATUS_APP_INIT_FAILURE ((NTSTATUS) 0xC0000145L) -#endif - -#ifndef STATUS_PAGEFILE_CREATE_FAILED -# define STATUS_PAGEFILE_CREATE_FAILED ((NTSTATUS) 0xC0000146L) -#endif - -#ifndef STATUS_NO_PAGEFILE -# define STATUS_NO_PAGEFILE ((NTSTATUS) 0xC0000147L) -#endif - -#ifndef STATUS_INVALID_LEVEL -# define STATUS_INVALID_LEVEL ((NTSTATUS) 0xC0000148L) -#endif - -#ifndef STATUS_WRONG_PASSWORD_CORE -# define STATUS_WRONG_PASSWORD_CORE ((NTSTATUS) 0xC0000149L) -#endif - -#ifndef STATUS_ILLEGAL_FLOAT_CONTEXT -# define STATUS_ILLEGAL_FLOAT_CONTEXT ((NTSTATUS) 0xC000014AL) -#endif - -#ifndef STATUS_PIPE_BROKEN -# define STATUS_PIPE_BROKEN ((NTSTATUS) 0xC000014BL) -#endif - -#ifndef STATUS_REGISTRY_CORRUPT -# define STATUS_REGISTRY_CORRUPT ((NTSTATUS) 0xC000014CL) -#endif - -#ifndef STATUS_REGISTRY_IO_FAILED -# define STATUS_REGISTRY_IO_FAILED ((NTSTATUS) 0xC000014DL) -#endif - -#ifndef STATUS_NO_EVENT_PAIR -# define STATUS_NO_EVENT_PAIR ((NTSTATUS) 0xC000014EL) -#endif - -#ifndef STATUS_UNRECOGNIZED_VOLUME -# define STATUS_UNRECOGNIZED_VOLUME ((NTSTATUS) 0xC000014FL) -#endif - -#ifndef STATUS_SERIAL_NO_DEVICE_INITED -# define STATUS_SERIAL_NO_DEVICE_INITED ((NTSTATUS) 0xC0000150L) -#endif - -#ifndef STATUS_NO_SUCH_ALIAS -# define STATUS_NO_SUCH_ALIAS ((NTSTATUS) 0xC0000151L) -#endif - -#ifndef STATUS_MEMBER_NOT_IN_ALIAS -# define STATUS_MEMBER_NOT_IN_ALIAS ((NTSTATUS) 0xC0000152L) -#endif - -#ifndef STATUS_MEMBER_IN_ALIAS -# define STATUS_MEMBER_IN_ALIAS ((NTSTATUS) 0xC0000153L) -#endif - -#ifndef STATUS_ALIAS_EXISTS -# define STATUS_ALIAS_EXISTS ((NTSTATUS) 0xC0000154L) -#endif - -#ifndef STATUS_LOGON_NOT_GRANTED -# define STATUS_LOGON_NOT_GRANTED ((NTSTATUS) 0xC0000155L) -#endif - -#ifndef STATUS_TOO_MANY_SECRETS -# define STATUS_TOO_MANY_SECRETS ((NTSTATUS) 0xC0000156L) -#endif - -#ifndef STATUS_SECRET_TOO_LONG -# define STATUS_SECRET_TOO_LONG ((NTSTATUS) 0xC0000157L) -#endif - -#ifndef STATUS_INTERNAL_DB_ERROR -# define STATUS_INTERNAL_DB_ERROR ((NTSTATUS) 0xC0000158L) -#endif - -#ifndef STATUS_FULLSCREEN_MODE -# define STATUS_FULLSCREEN_MODE ((NTSTATUS) 0xC0000159L) -#endif - -#ifndef STATUS_TOO_MANY_CONTEXT_IDS -# define STATUS_TOO_MANY_CONTEXT_IDS ((NTSTATUS) 0xC000015AL) -#endif - -#ifndef STATUS_LOGON_TYPE_NOT_GRANTED -# define STATUS_LOGON_TYPE_NOT_GRANTED ((NTSTATUS) 0xC000015BL) -#endif - -#ifndef STATUS_NOT_REGISTRY_FILE -# define STATUS_NOT_REGISTRY_FILE ((NTSTATUS) 0xC000015CL) -#endif - -#ifndef STATUS_NT_CROSS_ENCRYPTION_REQUIRED -# define STATUS_NT_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS) 0xC000015DL) -#endif - -#ifndef STATUS_DOMAIN_CTRLR_CONFIG_ERROR -# define STATUS_DOMAIN_CTRLR_CONFIG_ERROR ((NTSTATUS) 0xC000015EL) -#endif - -#ifndef STATUS_FT_MISSING_MEMBER -# define STATUS_FT_MISSING_MEMBER ((NTSTATUS) 0xC000015FL) -#endif - -#ifndef STATUS_ILL_FORMED_SERVICE_ENTRY -# define STATUS_ILL_FORMED_SERVICE_ENTRY ((NTSTATUS) 0xC0000160L) -#endif - -#ifndef STATUS_ILLEGAL_CHARACTER -# define STATUS_ILLEGAL_CHARACTER ((NTSTATUS) 0xC0000161L) -#endif - -#ifndef STATUS_UNMAPPABLE_CHARACTER -# define STATUS_UNMAPPABLE_CHARACTER ((NTSTATUS) 0xC0000162L) -#endif - -#ifndef STATUS_UNDEFINED_CHARACTER -# define STATUS_UNDEFINED_CHARACTER ((NTSTATUS) 0xC0000163L) -#endif - -#ifndef STATUS_FLOPPY_VOLUME -# define STATUS_FLOPPY_VOLUME ((NTSTATUS) 0xC0000164L) -#endif - -#ifndef STATUS_FLOPPY_ID_MARK_NOT_FOUND -# define STATUS_FLOPPY_ID_MARK_NOT_FOUND ((NTSTATUS) 0xC0000165L) -#endif - -#ifndef STATUS_FLOPPY_WRONG_CYLINDER -# define STATUS_FLOPPY_WRONG_CYLINDER ((NTSTATUS) 0xC0000166L) -#endif - -#ifndef STATUS_FLOPPY_UNKNOWN_ERROR -# define STATUS_FLOPPY_UNKNOWN_ERROR ((NTSTATUS) 0xC0000167L) -#endif - -#ifndef STATUS_FLOPPY_BAD_REGISTERS -# define STATUS_FLOPPY_BAD_REGISTERS ((NTSTATUS) 0xC0000168L) -#endif - -#ifndef STATUS_DISK_RECALIBRATE_FAILED -# define STATUS_DISK_RECALIBRATE_FAILED ((NTSTATUS) 0xC0000169L) -#endif - -#ifndef STATUS_DISK_OPERATION_FAILED -# define STATUS_DISK_OPERATION_FAILED ((NTSTATUS) 0xC000016AL) -#endif - -#ifndef STATUS_DISK_RESET_FAILED -# define STATUS_DISK_RESET_FAILED ((NTSTATUS) 0xC000016BL) -#endif - -#ifndef STATUS_SHARED_IRQ_BUSY -# define STATUS_SHARED_IRQ_BUSY ((NTSTATUS) 0xC000016CL) -#endif - -#ifndef STATUS_FT_ORPHANING -# define STATUS_FT_ORPHANING ((NTSTATUS) 0xC000016DL) -#endif - -#ifndef STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT -# define STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT ((NTSTATUS) 0xC000016EL) -#endif - -#ifndef STATUS_PARTITION_FAILURE -# define STATUS_PARTITION_FAILURE ((NTSTATUS) 0xC0000172L) -#endif - -#ifndef STATUS_INVALID_BLOCK_LENGTH -# define STATUS_INVALID_BLOCK_LENGTH ((NTSTATUS) 0xC0000173L) -#endif - -#ifndef STATUS_DEVICE_NOT_PARTITIONED -# define STATUS_DEVICE_NOT_PARTITIONED ((NTSTATUS) 0xC0000174L) -#endif - -#ifndef STATUS_UNABLE_TO_LOCK_MEDIA -# define STATUS_UNABLE_TO_LOCK_MEDIA ((NTSTATUS) 0xC0000175L) -#endif - -#ifndef STATUS_UNABLE_TO_UNLOAD_MEDIA -# define STATUS_UNABLE_TO_UNLOAD_MEDIA ((NTSTATUS) 0xC0000176L) -#endif - -#ifndef STATUS_EOM_OVERFLOW -# define STATUS_EOM_OVERFLOW ((NTSTATUS) 0xC0000177L) -#endif - -#ifndef STATUS_NO_MEDIA -# define STATUS_NO_MEDIA ((NTSTATUS) 0xC0000178L) -#endif - -#ifndef STATUS_NO_SUCH_MEMBER -# define STATUS_NO_SUCH_MEMBER ((NTSTATUS) 0xC000017AL) -#endif - -#ifndef STATUS_INVALID_MEMBER -# define STATUS_INVALID_MEMBER ((NTSTATUS) 0xC000017BL) -#endif - -#ifndef STATUS_KEY_DELETED -# define STATUS_KEY_DELETED ((NTSTATUS) 0xC000017CL) -#endif - -#ifndef STATUS_NO_LOG_SPACE -# define STATUS_NO_LOG_SPACE ((NTSTATUS) 0xC000017DL) -#endif - -#ifndef STATUS_TOO_MANY_SIDS -# define STATUS_TOO_MANY_SIDS ((NTSTATUS) 0xC000017EL) -#endif - -#ifndef STATUS_LM_CROSS_ENCRYPTION_REQUIRED -# define STATUS_LM_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS) 0xC000017FL) -#endif - -#ifndef STATUS_KEY_HAS_CHILDREN -# define STATUS_KEY_HAS_CHILDREN ((NTSTATUS) 0xC0000180L) -#endif - -#ifndef STATUS_CHILD_MUST_BE_VOLATILE -# define STATUS_CHILD_MUST_BE_VOLATILE ((NTSTATUS) 0xC0000181L) -#endif - -#ifndef STATUS_DEVICE_CONFIGURATION_ERROR -# define STATUS_DEVICE_CONFIGURATION_ERROR ((NTSTATUS) 0xC0000182L) -#endif - -#ifndef STATUS_DRIVER_INTERNAL_ERROR -# define STATUS_DRIVER_INTERNAL_ERROR ((NTSTATUS) 0xC0000183L) -#endif - -#ifndef STATUS_INVALID_DEVICE_STATE -# define STATUS_INVALID_DEVICE_STATE ((NTSTATUS) 0xC0000184L) -#endif - -#ifndef STATUS_IO_DEVICE_ERROR -# define STATUS_IO_DEVICE_ERROR ((NTSTATUS) 0xC0000185L) -#endif - -#ifndef STATUS_DEVICE_PROTOCOL_ERROR -# define STATUS_DEVICE_PROTOCOL_ERROR ((NTSTATUS) 0xC0000186L) -#endif - -#ifndef STATUS_BACKUP_CONTROLLER -# define STATUS_BACKUP_CONTROLLER ((NTSTATUS) 0xC0000187L) -#endif - -#ifndef STATUS_LOG_FILE_FULL -# define STATUS_LOG_FILE_FULL ((NTSTATUS) 0xC0000188L) -#endif - -#ifndef STATUS_TOO_LATE -# define STATUS_TOO_LATE ((NTSTATUS) 0xC0000189L) -#endif - -#ifndef STATUS_NO_TRUST_LSA_SECRET -# define STATUS_NO_TRUST_LSA_SECRET ((NTSTATUS) 0xC000018AL) -#endif - -#ifndef STATUS_NO_TRUST_SAM_ACCOUNT -# define STATUS_NO_TRUST_SAM_ACCOUNT ((NTSTATUS) 0xC000018BL) -#endif - -#ifndef STATUS_TRUSTED_DOMAIN_FAILURE -# define STATUS_TRUSTED_DOMAIN_FAILURE ((NTSTATUS) 0xC000018CL) -#endif - -#ifndef STATUS_TRUSTED_RELATIONSHIP_FAILURE -# define STATUS_TRUSTED_RELATIONSHIP_FAILURE ((NTSTATUS) 0xC000018DL) -#endif - -#ifndef STATUS_EVENTLOG_FILE_CORRUPT -# define STATUS_EVENTLOG_FILE_CORRUPT ((NTSTATUS) 0xC000018EL) -#endif - -#ifndef STATUS_EVENTLOG_CANT_START -# define STATUS_EVENTLOG_CANT_START ((NTSTATUS) 0xC000018FL) -#endif - -#ifndef STATUS_TRUST_FAILURE -# define STATUS_TRUST_FAILURE ((NTSTATUS) 0xC0000190L) -#endif - -#ifndef STATUS_MUTANT_LIMIT_EXCEEDED -# define STATUS_MUTANT_LIMIT_EXCEEDED ((NTSTATUS) 0xC0000191L) -#endif - -#ifndef STATUS_NETLOGON_NOT_STARTED -# define STATUS_NETLOGON_NOT_STARTED ((NTSTATUS) 0xC0000192L) -#endif - -#ifndef STATUS_ACCOUNT_EXPIRED -# define STATUS_ACCOUNT_EXPIRED ((NTSTATUS) 0xC0000193L) -#endif - -#ifndef STATUS_POSSIBLE_DEADLOCK -# define STATUS_POSSIBLE_DEADLOCK ((NTSTATUS) 0xC0000194L) -#endif - -#ifndef STATUS_NETWORK_CREDENTIAL_CONFLICT -# define STATUS_NETWORK_CREDENTIAL_CONFLICT ((NTSTATUS) 0xC0000195L) -#endif - -#ifndef STATUS_REMOTE_SESSION_LIMIT -# define STATUS_REMOTE_SESSION_LIMIT ((NTSTATUS) 0xC0000196L) -#endif - -#ifndef STATUS_EVENTLOG_FILE_CHANGED -# define STATUS_EVENTLOG_FILE_CHANGED ((NTSTATUS) 0xC0000197L) -#endif - -#ifndef STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT -# define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT ((NTSTATUS) 0xC0000198L) -#endif - -#ifndef STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT -# define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT ((NTSTATUS) 0xC0000199L) -#endif - -#ifndef STATUS_NOLOGON_SERVER_TRUST_ACCOUNT -# define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT ((NTSTATUS) 0xC000019AL) -#endif - -#ifndef STATUS_DOMAIN_TRUST_INCONSISTENT -# define STATUS_DOMAIN_TRUST_INCONSISTENT ((NTSTATUS) 0xC000019BL) -#endif - -#ifndef STATUS_FS_DRIVER_REQUIRED -# define STATUS_FS_DRIVER_REQUIRED ((NTSTATUS) 0xC000019CL) -#endif - -#ifndef STATUS_IMAGE_ALREADY_LOADED_AS_DLL -# define STATUS_IMAGE_ALREADY_LOADED_AS_DLL ((NTSTATUS) 0xC000019DL) -#endif - -#ifndef STATUS_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING -# define STATUS_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING ((NTSTATUS) 0xC000019EL) -#endif - -#ifndef STATUS_SHORT_NAMES_NOT_ENABLED_ON_VOLUME -# define STATUS_SHORT_NAMES_NOT_ENABLED_ON_VOLUME ((NTSTATUS) 0xC000019FL) -#endif - -#ifndef STATUS_SECURITY_STREAM_IS_INCONSISTENT -# define STATUS_SECURITY_STREAM_IS_INCONSISTENT ((NTSTATUS) 0xC00001A0L) -#endif - -#ifndef STATUS_INVALID_LOCK_RANGE -# define STATUS_INVALID_LOCK_RANGE ((NTSTATUS) 0xC00001A1L) -#endif - -#ifndef STATUS_INVALID_ACE_CONDITION -# define STATUS_INVALID_ACE_CONDITION ((NTSTATUS) 0xC00001A2L) -#endif - -#ifndef STATUS_IMAGE_SUBSYSTEM_NOT_PRESENT -# define STATUS_IMAGE_SUBSYSTEM_NOT_PRESENT ((NTSTATUS) 0xC00001A3L) -#endif - -#ifndef STATUS_NOTIFICATION_GUID_ALREADY_DEFINED -# define STATUS_NOTIFICATION_GUID_ALREADY_DEFINED ((NTSTATUS) 0xC00001A4L) -#endif - -#ifndef STATUS_NETWORK_OPEN_RESTRICTION -# define STATUS_NETWORK_OPEN_RESTRICTION ((NTSTATUS) 0xC0000201L) -#endif - -#ifndef STATUS_NO_USER_SESSION_KEY -# define STATUS_NO_USER_SESSION_KEY ((NTSTATUS) 0xC0000202L) -#endif - -#ifndef STATUS_USER_SESSION_DELETED -# define STATUS_USER_SESSION_DELETED ((NTSTATUS) 0xC0000203L) -#endif - -#ifndef STATUS_RESOURCE_LANG_NOT_FOUND -# define STATUS_RESOURCE_LANG_NOT_FOUND ((NTSTATUS) 0xC0000204L) -#endif - -#ifndef STATUS_INSUFF_SERVER_RESOURCES -# define STATUS_INSUFF_SERVER_RESOURCES ((NTSTATUS) 0xC0000205L) -#endif - -#ifndef STATUS_INVALID_BUFFER_SIZE -# define STATUS_INVALID_BUFFER_SIZE ((NTSTATUS) 0xC0000206L) -#endif - -#ifndef STATUS_INVALID_ADDRESS_COMPONENT -# define STATUS_INVALID_ADDRESS_COMPONENT ((NTSTATUS) 0xC0000207L) -#endif - -#ifndef STATUS_INVALID_ADDRESS_WILDCARD -# define STATUS_INVALID_ADDRESS_WILDCARD ((NTSTATUS) 0xC0000208L) -#endif - -#ifndef STATUS_TOO_MANY_ADDRESSES -# define STATUS_TOO_MANY_ADDRESSES ((NTSTATUS) 0xC0000209L) -#endif - -#ifndef STATUS_ADDRESS_ALREADY_EXISTS -# define STATUS_ADDRESS_ALREADY_EXISTS ((NTSTATUS) 0xC000020AL) -#endif - -#ifndef STATUS_ADDRESS_CLOSED -# define STATUS_ADDRESS_CLOSED ((NTSTATUS) 0xC000020BL) -#endif - -#ifndef STATUS_CONNECTION_DISCONNECTED -# define STATUS_CONNECTION_DISCONNECTED ((NTSTATUS) 0xC000020CL) -#endif - -#ifndef STATUS_CONNECTION_RESET -# define STATUS_CONNECTION_RESET ((NTSTATUS) 0xC000020DL) -#endif - -#ifndef STATUS_TOO_MANY_NODES -# define STATUS_TOO_MANY_NODES ((NTSTATUS) 0xC000020EL) -#endif - -#ifndef STATUS_TRANSACTION_ABORTED -# define STATUS_TRANSACTION_ABORTED ((NTSTATUS) 0xC000020FL) -#endif - -#ifndef STATUS_TRANSACTION_TIMED_OUT -# define STATUS_TRANSACTION_TIMED_OUT ((NTSTATUS) 0xC0000210L) -#endif - -#ifndef STATUS_TRANSACTION_NO_RELEASE -# define STATUS_TRANSACTION_NO_RELEASE ((NTSTATUS) 0xC0000211L) -#endif - -#ifndef STATUS_TRANSACTION_NO_MATCH -# define STATUS_TRANSACTION_NO_MATCH ((NTSTATUS) 0xC0000212L) -#endif - -#ifndef STATUS_TRANSACTION_RESPONDED -# define STATUS_TRANSACTION_RESPONDED ((NTSTATUS) 0xC0000213L) -#endif - -#ifndef STATUS_TRANSACTION_INVALID_ID -# define STATUS_TRANSACTION_INVALID_ID ((NTSTATUS) 0xC0000214L) -#endif - -#ifndef STATUS_TRANSACTION_INVALID_TYPE -# define STATUS_TRANSACTION_INVALID_TYPE ((NTSTATUS) 0xC0000215L) -#endif - -#ifndef STATUS_NOT_SERVER_SESSION -# define STATUS_NOT_SERVER_SESSION ((NTSTATUS) 0xC0000216L) -#endif - -#ifndef STATUS_NOT_CLIENT_SESSION -# define STATUS_NOT_CLIENT_SESSION ((NTSTATUS) 0xC0000217L) -#endif - -#ifndef STATUS_CANNOT_LOAD_REGISTRY_FILE -# define STATUS_CANNOT_LOAD_REGISTRY_FILE ((NTSTATUS) 0xC0000218L) -#endif - -#ifndef STATUS_DEBUG_ATTACH_FAILED -# define STATUS_DEBUG_ATTACH_FAILED ((NTSTATUS) 0xC0000219L) -#endif - -#ifndef STATUS_SYSTEM_PROCESS_TERMINATED -# define STATUS_SYSTEM_PROCESS_TERMINATED ((NTSTATUS) 0xC000021AL) -#endif - -#ifndef STATUS_DATA_NOT_ACCEPTED -# define STATUS_DATA_NOT_ACCEPTED ((NTSTATUS) 0xC000021BL) -#endif - -#ifndef STATUS_NO_BROWSER_SERVERS_FOUND -# define STATUS_NO_BROWSER_SERVERS_FOUND ((NTSTATUS) 0xC000021CL) -#endif - -#ifndef STATUS_VDM_HARD_ERROR -# define STATUS_VDM_HARD_ERROR ((NTSTATUS) 0xC000021DL) -#endif - -#ifndef STATUS_DRIVER_CANCEL_TIMEOUT -# define STATUS_DRIVER_CANCEL_TIMEOUT ((NTSTATUS) 0xC000021EL) -#endif - -#ifndef STATUS_REPLY_MESSAGE_MISMATCH -# define STATUS_REPLY_MESSAGE_MISMATCH ((NTSTATUS) 0xC000021FL) -#endif - -#ifndef STATUS_MAPPED_ALIGNMENT -# define STATUS_MAPPED_ALIGNMENT ((NTSTATUS) 0xC0000220L) -#endif - -#ifndef STATUS_IMAGE_CHECKSUM_MISMATCH -# define STATUS_IMAGE_CHECKSUM_MISMATCH ((NTSTATUS) 0xC0000221L) -#endif - -#ifndef STATUS_LOST_WRITEBEHIND_DATA -# define STATUS_LOST_WRITEBEHIND_DATA ((NTSTATUS) 0xC0000222L) -#endif - -#ifndef STATUS_CLIENT_SERVER_PARAMETERS_INVALID -# define STATUS_CLIENT_SERVER_PARAMETERS_INVALID ((NTSTATUS) 0xC0000223L) -#endif - -#ifndef STATUS_PASSWORD_MUST_CHANGE -# define STATUS_PASSWORD_MUST_CHANGE ((NTSTATUS) 0xC0000224L) -#endif - -#ifndef STATUS_NOT_FOUND -# define STATUS_NOT_FOUND ((NTSTATUS) 0xC0000225L) -#endif - -#ifndef STATUS_NOT_TINY_STREAM -# define STATUS_NOT_TINY_STREAM ((NTSTATUS) 0xC0000226L) -#endif - -#ifndef STATUS_RECOVERY_FAILURE -# define STATUS_RECOVERY_FAILURE ((NTSTATUS) 0xC0000227L) -#endif - -#ifndef STATUS_STACK_OVERFLOW_READ -# define STATUS_STACK_OVERFLOW_READ ((NTSTATUS) 0xC0000228L) -#endif - -#ifndef STATUS_FAIL_CHECK -# define STATUS_FAIL_CHECK ((NTSTATUS) 0xC0000229L) -#endif - -#ifndef STATUS_DUPLICATE_OBJECTID -# define STATUS_DUPLICATE_OBJECTID ((NTSTATUS) 0xC000022AL) -#endif - -#ifndef STATUS_OBJECTID_EXISTS -# define STATUS_OBJECTID_EXISTS ((NTSTATUS) 0xC000022BL) -#endif - -#ifndef STATUS_CONVERT_TO_LARGE -# define STATUS_CONVERT_TO_LARGE ((NTSTATUS) 0xC000022CL) -#endif - -#ifndef STATUS_RETRY -# define STATUS_RETRY ((NTSTATUS) 0xC000022DL) -#endif - -#ifndef STATUS_FOUND_OUT_OF_SCOPE -# define STATUS_FOUND_OUT_OF_SCOPE ((NTSTATUS) 0xC000022EL) -#endif - -#ifndef STATUS_ALLOCATE_BUCKET -# define STATUS_ALLOCATE_BUCKET ((NTSTATUS) 0xC000022FL) -#endif - -#ifndef STATUS_PROPSET_NOT_FOUND -# define STATUS_PROPSET_NOT_FOUND ((NTSTATUS) 0xC0000230L) -#endif - -#ifndef STATUS_MARSHALL_OVERFLOW -# define STATUS_MARSHALL_OVERFLOW ((NTSTATUS) 0xC0000231L) -#endif - -#ifndef STATUS_INVALID_VARIANT -# define STATUS_INVALID_VARIANT ((NTSTATUS) 0xC0000232L) -#endif - -#ifndef STATUS_DOMAIN_CONTROLLER_NOT_FOUND -# define STATUS_DOMAIN_CONTROLLER_NOT_FOUND ((NTSTATUS) 0xC0000233L) -#endif - -#ifndef STATUS_ACCOUNT_LOCKED_OUT -# define STATUS_ACCOUNT_LOCKED_OUT ((NTSTATUS) 0xC0000234L) -#endif - -#ifndef STATUS_HANDLE_NOT_CLOSABLE -# define STATUS_HANDLE_NOT_CLOSABLE ((NTSTATUS) 0xC0000235L) -#endif - -#ifndef STATUS_CONNECTION_REFUSED -# define STATUS_CONNECTION_REFUSED ((NTSTATUS) 0xC0000236L) -#endif - -#ifndef STATUS_GRACEFUL_DISCONNECT -# define STATUS_GRACEFUL_DISCONNECT ((NTSTATUS) 0xC0000237L) -#endif - -#ifndef STATUS_ADDRESS_ALREADY_ASSOCIATED -# define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS) 0xC0000238L) -#endif - -#ifndef STATUS_ADDRESS_NOT_ASSOCIATED -# define STATUS_ADDRESS_NOT_ASSOCIATED ((NTSTATUS) 0xC0000239L) -#endif - -#ifndef STATUS_CONNECTION_INVALID -# define STATUS_CONNECTION_INVALID ((NTSTATUS) 0xC000023AL) -#endif - -#ifndef STATUS_CONNECTION_ACTIVE -# define STATUS_CONNECTION_ACTIVE ((NTSTATUS) 0xC000023BL) -#endif - -#ifndef STATUS_NETWORK_UNREACHABLE -# define STATUS_NETWORK_UNREACHABLE ((NTSTATUS) 0xC000023CL) -#endif - -#ifndef STATUS_HOST_UNREACHABLE -# define STATUS_HOST_UNREACHABLE ((NTSTATUS) 0xC000023DL) -#endif - -#ifndef STATUS_PROTOCOL_UNREACHABLE -# define STATUS_PROTOCOL_UNREACHABLE ((NTSTATUS) 0xC000023EL) -#endif - -#ifndef STATUS_PORT_UNREACHABLE -# define STATUS_PORT_UNREACHABLE ((NTSTATUS) 0xC000023FL) -#endif - -#ifndef STATUS_REQUEST_ABORTED -# define STATUS_REQUEST_ABORTED ((NTSTATUS) 0xC0000240L) -#endif - -#ifndef STATUS_CONNECTION_ABORTED -# define STATUS_CONNECTION_ABORTED ((NTSTATUS) 0xC0000241L) -#endif - -#ifndef STATUS_BAD_COMPRESSION_BUFFER -# define STATUS_BAD_COMPRESSION_BUFFER ((NTSTATUS) 0xC0000242L) -#endif - -#ifndef STATUS_USER_MAPPED_FILE -# define STATUS_USER_MAPPED_FILE ((NTSTATUS) 0xC0000243L) -#endif - -#ifndef STATUS_AUDIT_FAILED -# define STATUS_AUDIT_FAILED ((NTSTATUS) 0xC0000244L) -#endif - -#ifndef STATUS_TIMER_RESOLUTION_NOT_SET -# define STATUS_TIMER_RESOLUTION_NOT_SET ((NTSTATUS) 0xC0000245L) -#endif - -#ifndef STATUS_CONNECTION_COUNT_LIMIT -# define STATUS_CONNECTION_COUNT_LIMIT ((NTSTATUS) 0xC0000246L) -#endif - -#ifndef STATUS_LOGIN_TIME_RESTRICTION -# define STATUS_LOGIN_TIME_RESTRICTION ((NTSTATUS) 0xC0000247L) -#endif - -#ifndef STATUS_LOGIN_WKSTA_RESTRICTION -# define STATUS_LOGIN_WKSTA_RESTRICTION ((NTSTATUS) 0xC0000248L) -#endif - -#ifndef STATUS_IMAGE_MP_UP_MISMATCH -# define STATUS_IMAGE_MP_UP_MISMATCH ((NTSTATUS) 0xC0000249L) -#endif - -#ifndef STATUS_INSUFFICIENT_LOGON_INFO -# define STATUS_INSUFFICIENT_LOGON_INFO ((NTSTATUS) 0xC0000250L) -#endif - -#ifndef STATUS_BAD_DLL_ENTRYPOINT -# define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS) 0xC0000251L) -#endif - -#ifndef STATUS_BAD_SERVICE_ENTRYPOINT -# define STATUS_BAD_SERVICE_ENTRYPOINT ((NTSTATUS) 0xC0000252L) -#endif - -#ifndef STATUS_LPC_REPLY_LOST -# define STATUS_LPC_REPLY_LOST ((NTSTATUS) 0xC0000253L) -#endif - -#ifndef STATUS_IP_ADDRESS_CONFLICT1 -# define STATUS_IP_ADDRESS_CONFLICT1 ((NTSTATUS) 0xC0000254L) -#endif - -#ifndef STATUS_IP_ADDRESS_CONFLICT2 -# define STATUS_IP_ADDRESS_CONFLICT2 ((NTSTATUS) 0xC0000255L) -#endif - -#ifndef STATUS_REGISTRY_QUOTA_LIMIT -# define STATUS_REGISTRY_QUOTA_LIMIT ((NTSTATUS) 0xC0000256L) -#endif - -#ifndef STATUS_PATH_NOT_COVERED -# define STATUS_PATH_NOT_COVERED ((NTSTATUS) 0xC0000257L) -#endif - -#ifndef STATUS_NO_CALLBACK_ACTIVE -# define STATUS_NO_CALLBACK_ACTIVE ((NTSTATUS) 0xC0000258L) -#endif - -#ifndef STATUS_LICENSE_QUOTA_EXCEEDED -# define STATUS_LICENSE_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000259L) -#endif - -#ifndef STATUS_PWD_TOO_SHORT -# define STATUS_PWD_TOO_SHORT ((NTSTATUS) 0xC000025AL) -#endif - -#ifndef STATUS_PWD_TOO_RECENT -# define STATUS_PWD_TOO_RECENT ((NTSTATUS) 0xC000025BL) -#endif - -#ifndef STATUS_PWD_HISTORY_CONFLICT -# define STATUS_PWD_HISTORY_CONFLICT ((NTSTATUS) 0xC000025CL) -#endif - -#ifndef STATUS_PLUGPLAY_NO_DEVICE -# define STATUS_PLUGPLAY_NO_DEVICE ((NTSTATUS) 0xC000025EL) -#endif - -#ifndef STATUS_UNSUPPORTED_COMPRESSION -# define STATUS_UNSUPPORTED_COMPRESSION ((NTSTATUS) 0xC000025FL) -#endif - -#ifndef STATUS_INVALID_HW_PROFILE -# define STATUS_INVALID_HW_PROFILE ((NTSTATUS) 0xC0000260L) -#endif - -#ifndef STATUS_INVALID_PLUGPLAY_DEVICE_PATH -# define STATUS_INVALID_PLUGPLAY_DEVICE_PATH ((NTSTATUS) 0xC0000261L) -#endif - -#ifndef STATUS_DRIVER_ORDINAL_NOT_FOUND -# define STATUS_DRIVER_ORDINAL_NOT_FOUND ((NTSTATUS) 0xC0000262L) -#endif - -#ifndef STATUS_DRIVER_ENTRYPOINT_NOT_FOUND -# define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xC0000263L) -#endif - -#ifndef STATUS_RESOURCE_NOT_OWNED -# define STATUS_RESOURCE_NOT_OWNED ((NTSTATUS) 0xC0000264L) -#endif - -#ifndef STATUS_TOO_MANY_LINKS -# define STATUS_TOO_MANY_LINKS ((NTSTATUS) 0xC0000265L) -#endif - -#ifndef STATUS_QUOTA_LIST_INCONSISTENT -# define STATUS_QUOTA_LIST_INCONSISTENT ((NTSTATUS) 0xC0000266L) -#endif - -#ifndef STATUS_FILE_IS_OFFLINE -# define STATUS_FILE_IS_OFFLINE ((NTSTATUS) 0xC0000267L) -#endif - -#ifndef STATUS_EVALUATION_EXPIRATION -# define STATUS_EVALUATION_EXPIRATION ((NTSTATUS) 0xC0000268L) -#endif - -#ifndef STATUS_ILLEGAL_DLL_RELOCATION -# define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS) 0xC0000269L) -#endif - -#ifndef STATUS_LICENSE_VIOLATION -# define STATUS_LICENSE_VIOLATION ((NTSTATUS) 0xC000026AL) -#endif - -#ifndef STATUS_DLL_INIT_FAILED_LOGOFF -# define STATUS_DLL_INIT_FAILED_LOGOFF ((NTSTATUS) 0xC000026BL) -#endif - -#ifndef STATUS_DRIVER_UNABLE_TO_LOAD -# define STATUS_DRIVER_UNABLE_TO_LOAD ((NTSTATUS) 0xC000026CL) -#endif - -#ifndef STATUS_DFS_UNAVAILABLE -# define STATUS_DFS_UNAVAILABLE ((NTSTATUS) 0xC000026DL) -#endif - -#ifndef STATUS_VOLUME_DISMOUNTED -# define STATUS_VOLUME_DISMOUNTED ((NTSTATUS) 0xC000026EL) -#endif - -#ifndef STATUS_WX86_INTERNAL_ERROR -# define STATUS_WX86_INTERNAL_ERROR ((NTSTATUS) 0xC000026FL) -#endif - -#ifndef STATUS_WX86_FLOAT_STACK_CHECK -# define STATUS_WX86_FLOAT_STACK_CHECK ((NTSTATUS) 0xC0000270L) -#endif - -#ifndef STATUS_VALIDATE_CONTINUE -# define STATUS_VALIDATE_CONTINUE ((NTSTATUS) 0xC0000271L) -#endif - -#ifndef STATUS_NO_MATCH -# define STATUS_NO_MATCH ((NTSTATUS) 0xC0000272L) -#endif - -#ifndef STATUS_NO_MORE_MATCHES -# define STATUS_NO_MORE_MATCHES ((NTSTATUS) 0xC0000273L) -#endif - -#ifndef STATUS_NOT_A_REPARSE_POINT -# define STATUS_NOT_A_REPARSE_POINT ((NTSTATUS) 0xC0000275L) -#endif - -#ifndef STATUS_IO_REPARSE_TAG_INVALID -# define STATUS_IO_REPARSE_TAG_INVALID ((NTSTATUS) 0xC0000276L) -#endif - -#ifndef STATUS_IO_REPARSE_TAG_MISMATCH -# define STATUS_IO_REPARSE_TAG_MISMATCH ((NTSTATUS) 0xC0000277L) -#endif - -#ifndef STATUS_IO_REPARSE_DATA_INVALID -# define STATUS_IO_REPARSE_DATA_INVALID ((NTSTATUS) 0xC0000278L) -#endif - -#ifndef STATUS_IO_REPARSE_TAG_NOT_HANDLED -# define STATUS_IO_REPARSE_TAG_NOT_HANDLED ((NTSTATUS) 0xC0000279L) -#endif - -#ifndef STATUS_REPARSE_POINT_NOT_RESOLVED -# define STATUS_REPARSE_POINT_NOT_RESOLVED ((NTSTATUS) 0xC0000280L) -#endif - -#ifndef STATUS_DIRECTORY_IS_A_REPARSE_POINT -# define STATUS_DIRECTORY_IS_A_REPARSE_POINT ((NTSTATUS) 0xC0000281L) -#endif - -#ifndef STATUS_RANGE_LIST_CONFLICT -# define STATUS_RANGE_LIST_CONFLICT ((NTSTATUS) 0xC0000282L) -#endif - -#ifndef STATUS_SOURCE_ELEMENT_EMPTY -# define STATUS_SOURCE_ELEMENT_EMPTY ((NTSTATUS) 0xC0000283L) -#endif - -#ifndef STATUS_DESTINATION_ELEMENT_FULL -# define STATUS_DESTINATION_ELEMENT_FULL ((NTSTATUS) 0xC0000284L) -#endif - -#ifndef STATUS_ILLEGAL_ELEMENT_ADDRESS -# define STATUS_ILLEGAL_ELEMENT_ADDRESS ((NTSTATUS) 0xC0000285L) -#endif - -#ifndef STATUS_MAGAZINE_NOT_PRESENT -# define STATUS_MAGAZINE_NOT_PRESENT ((NTSTATUS) 0xC0000286L) -#endif - -#ifndef STATUS_REINITIALIZATION_NEEDED -# define STATUS_REINITIALIZATION_NEEDED ((NTSTATUS) 0xC0000287L) -#endif - -#ifndef STATUS_DEVICE_REQUIRES_CLEANING -# define STATUS_DEVICE_REQUIRES_CLEANING ((NTSTATUS) 0x80000288L) -#endif - -#ifndef STATUS_DEVICE_DOOR_OPEN -# define STATUS_DEVICE_DOOR_OPEN ((NTSTATUS) 0x80000289L) -#endif - -#ifndef STATUS_ENCRYPTION_FAILED -# define STATUS_ENCRYPTION_FAILED ((NTSTATUS) 0xC000028AL) -#endif - -#ifndef STATUS_DECRYPTION_FAILED -# define STATUS_DECRYPTION_FAILED ((NTSTATUS) 0xC000028BL) -#endif - -#ifndef STATUS_RANGE_NOT_FOUND -# define STATUS_RANGE_NOT_FOUND ((NTSTATUS) 0xC000028CL) -#endif - -#ifndef STATUS_NO_RECOVERY_POLICY -# define STATUS_NO_RECOVERY_POLICY ((NTSTATUS) 0xC000028DL) -#endif - -#ifndef STATUS_NO_EFS -# define STATUS_NO_EFS ((NTSTATUS) 0xC000028EL) -#endif - -#ifndef STATUS_WRONG_EFS -# define STATUS_WRONG_EFS ((NTSTATUS) 0xC000028FL) -#endif - -#ifndef STATUS_NO_USER_KEYS -# define STATUS_NO_USER_KEYS ((NTSTATUS) 0xC0000290L) -#endif - -#ifndef STATUS_FILE_NOT_ENCRYPTED -# define STATUS_FILE_NOT_ENCRYPTED ((NTSTATUS) 0xC0000291L) -#endif - -#ifndef STATUS_NOT_EXPORT_FORMAT -# define STATUS_NOT_EXPORT_FORMAT ((NTSTATUS) 0xC0000292L) -#endif - -#ifndef STATUS_FILE_ENCRYPTED -# define STATUS_FILE_ENCRYPTED ((NTSTATUS) 0xC0000293L) -#endif - -#ifndef STATUS_WAKE_SYSTEM -# define STATUS_WAKE_SYSTEM ((NTSTATUS) 0x40000294L) -#endif - -#ifndef STATUS_WMI_GUID_NOT_FOUND -# define STATUS_WMI_GUID_NOT_FOUND ((NTSTATUS) 0xC0000295L) -#endif - -#ifndef STATUS_WMI_INSTANCE_NOT_FOUND -# define STATUS_WMI_INSTANCE_NOT_FOUND ((NTSTATUS) 0xC0000296L) -#endif - -#ifndef STATUS_WMI_ITEMID_NOT_FOUND -# define STATUS_WMI_ITEMID_NOT_FOUND ((NTSTATUS) 0xC0000297L) -#endif - -#ifndef STATUS_WMI_TRY_AGAIN -# define STATUS_WMI_TRY_AGAIN ((NTSTATUS) 0xC0000298L) -#endif - -#ifndef STATUS_SHARED_POLICY -# define STATUS_SHARED_POLICY ((NTSTATUS) 0xC0000299L) -#endif - -#ifndef STATUS_POLICY_OBJECT_NOT_FOUND -# define STATUS_POLICY_OBJECT_NOT_FOUND ((NTSTATUS) 0xC000029AL) -#endif - -#ifndef STATUS_POLICY_ONLY_IN_DS -# define STATUS_POLICY_ONLY_IN_DS ((NTSTATUS) 0xC000029BL) -#endif - -#ifndef STATUS_VOLUME_NOT_UPGRADED -# define STATUS_VOLUME_NOT_UPGRADED ((NTSTATUS) 0xC000029CL) -#endif - -#ifndef STATUS_REMOTE_STORAGE_NOT_ACTIVE -# define STATUS_REMOTE_STORAGE_NOT_ACTIVE ((NTSTATUS) 0xC000029DL) -#endif - -#ifndef STATUS_REMOTE_STORAGE_MEDIA_ERROR -# define STATUS_REMOTE_STORAGE_MEDIA_ERROR ((NTSTATUS) 0xC000029EL) -#endif - -#ifndef STATUS_NO_TRACKING_SERVICE -# define STATUS_NO_TRACKING_SERVICE ((NTSTATUS) 0xC000029FL) -#endif - -#ifndef STATUS_SERVER_SID_MISMATCH -# define STATUS_SERVER_SID_MISMATCH ((NTSTATUS) 0xC00002A0L) -#endif - -#ifndef STATUS_DS_NO_ATTRIBUTE_OR_VALUE -# define STATUS_DS_NO_ATTRIBUTE_OR_VALUE ((NTSTATUS) 0xC00002A1L) -#endif - -#ifndef STATUS_DS_INVALID_ATTRIBUTE_SYNTAX -# define STATUS_DS_INVALID_ATTRIBUTE_SYNTAX ((NTSTATUS) 0xC00002A2L) -#endif - -#ifndef STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED -# define STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED ((NTSTATUS) 0xC00002A3L) -#endif - -#ifndef STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS -# define STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS ((NTSTATUS) 0xC00002A4L) -#endif - -#ifndef STATUS_DS_BUSY -# define STATUS_DS_BUSY ((NTSTATUS) 0xC00002A5L) -#endif - -#ifndef STATUS_DS_UNAVAILABLE -# define STATUS_DS_UNAVAILABLE ((NTSTATUS) 0xC00002A6L) -#endif - -#ifndef STATUS_DS_NO_RIDS_ALLOCATED -# define STATUS_DS_NO_RIDS_ALLOCATED ((NTSTATUS) 0xC00002A7L) -#endif - -#ifndef STATUS_DS_NO_MORE_RIDS -# define STATUS_DS_NO_MORE_RIDS ((NTSTATUS) 0xC00002A8L) -#endif - -#ifndef STATUS_DS_INCORRECT_ROLE_OWNER -# define STATUS_DS_INCORRECT_ROLE_OWNER ((NTSTATUS) 0xC00002A9L) -#endif - -#ifndef STATUS_DS_RIDMGR_INIT_ERROR -# define STATUS_DS_RIDMGR_INIT_ERROR ((NTSTATUS) 0xC00002AAL) -#endif - -#ifndef STATUS_DS_OBJ_CLASS_VIOLATION -# define STATUS_DS_OBJ_CLASS_VIOLATION ((NTSTATUS) 0xC00002ABL) -#endif - -#ifndef STATUS_DS_CANT_ON_NON_LEAF -# define STATUS_DS_CANT_ON_NON_LEAF ((NTSTATUS) 0xC00002ACL) -#endif - -#ifndef STATUS_DS_CANT_ON_RDN -# define STATUS_DS_CANT_ON_RDN ((NTSTATUS) 0xC00002ADL) -#endif - -#ifndef STATUS_DS_CANT_MOD_OBJ_CLASS -# define STATUS_DS_CANT_MOD_OBJ_CLASS ((NTSTATUS) 0xC00002AEL) -#endif - -#ifndef STATUS_DS_CROSS_DOM_MOVE_FAILED -# define STATUS_DS_CROSS_DOM_MOVE_FAILED ((NTSTATUS) 0xC00002AFL) -#endif - -#ifndef STATUS_DS_GC_NOT_AVAILABLE -# define STATUS_DS_GC_NOT_AVAILABLE ((NTSTATUS) 0xC00002B0L) -#endif - -#ifndef STATUS_DIRECTORY_SERVICE_REQUIRED -# define STATUS_DIRECTORY_SERVICE_REQUIRED ((NTSTATUS) 0xC00002B1L) -#endif - -#ifndef STATUS_REPARSE_ATTRIBUTE_CONFLICT -# define STATUS_REPARSE_ATTRIBUTE_CONFLICT ((NTSTATUS) 0xC00002B2L) -#endif - -#ifndef STATUS_CANT_ENABLE_DENY_ONLY -# define STATUS_CANT_ENABLE_DENY_ONLY ((NTSTATUS) 0xC00002B3L) -#endif - -#ifndef STATUS_FLOAT_MULTIPLE_FAULTS -# define STATUS_FLOAT_MULTIPLE_FAULTS ((NTSTATUS) 0xC00002B4L) -#endif - -#ifndef STATUS_FLOAT_MULTIPLE_TRAPS -# define STATUS_FLOAT_MULTIPLE_TRAPS ((NTSTATUS) 0xC00002B5L) -#endif - -#ifndef STATUS_DEVICE_REMOVED -# define STATUS_DEVICE_REMOVED ((NTSTATUS) 0xC00002B6L) -#endif - -#ifndef STATUS_JOURNAL_DELETE_IN_PROGRESS -# define STATUS_JOURNAL_DELETE_IN_PROGRESS ((NTSTATUS) 0xC00002B7L) -#endif - -#ifndef STATUS_JOURNAL_NOT_ACTIVE -# define STATUS_JOURNAL_NOT_ACTIVE ((NTSTATUS) 0xC00002B8L) -#endif - -#ifndef STATUS_NOINTERFACE -# define STATUS_NOINTERFACE ((NTSTATUS) 0xC00002B9L) -#endif - -#ifndef STATUS_DS_ADMIN_LIMIT_EXCEEDED -# define STATUS_DS_ADMIN_LIMIT_EXCEEDED ((NTSTATUS) 0xC00002C1L) -#endif - -#ifndef STATUS_DRIVER_FAILED_SLEEP -# define STATUS_DRIVER_FAILED_SLEEP ((NTSTATUS) 0xC00002C2L) -#endif - -#ifndef STATUS_MUTUAL_AUTHENTICATION_FAILED -# define STATUS_MUTUAL_AUTHENTICATION_FAILED ((NTSTATUS) 0xC00002C3L) -#endif - -#ifndef STATUS_CORRUPT_SYSTEM_FILE -# define STATUS_CORRUPT_SYSTEM_FILE ((NTSTATUS) 0xC00002C4L) -#endif - -#ifndef STATUS_DATATYPE_MISALIGNMENT_ERROR -# define STATUS_DATATYPE_MISALIGNMENT_ERROR ((NTSTATUS) 0xC00002C5L) -#endif - -#ifndef STATUS_WMI_READ_ONLY -# define STATUS_WMI_READ_ONLY ((NTSTATUS) 0xC00002C6L) -#endif - -#ifndef STATUS_WMI_SET_FAILURE -# define STATUS_WMI_SET_FAILURE ((NTSTATUS) 0xC00002C7L) -#endif - -#ifndef STATUS_COMMITMENT_MINIMUM -# define STATUS_COMMITMENT_MINIMUM ((NTSTATUS) 0xC00002C8L) -#endif - -#ifndef STATUS_REG_NAT_CONSUMPTION -# define STATUS_REG_NAT_CONSUMPTION ((NTSTATUS) 0xC00002C9L) -#endif - -#ifndef STATUS_TRANSPORT_FULL -# define STATUS_TRANSPORT_FULL ((NTSTATUS) 0xC00002CAL) -#endif - -#ifndef STATUS_DS_SAM_INIT_FAILURE -# define STATUS_DS_SAM_INIT_FAILURE ((NTSTATUS) 0xC00002CBL) -#endif - -#ifndef STATUS_ONLY_IF_CONNECTED -# define STATUS_ONLY_IF_CONNECTED ((NTSTATUS) 0xC00002CCL) -#endif - -#ifndef STATUS_DS_SENSITIVE_GROUP_VIOLATION -# define STATUS_DS_SENSITIVE_GROUP_VIOLATION ((NTSTATUS) 0xC00002CDL) -#endif - -#ifndef STATUS_PNP_RESTART_ENUMERATION -# define STATUS_PNP_RESTART_ENUMERATION ((NTSTATUS) 0xC00002CEL) -#endif - -#ifndef STATUS_JOURNAL_ENTRY_DELETED -# define STATUS_JOURNAL_ENTRY_DELETED ((NTSTATUS) 0xC00002CFL) -#endif - -#ifndef STATUS_DS_CANT_MOD_PRIMARYGROUPID -# define STATUS_DS_CANT_MOD_PRIMARYGROUPID ((NTSTATUS) 0xC00002D0L) -#endif - -#ifndef STATUS_SYSTEM_IMAGE_BAD_SIGNATURE -# define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE ((NTSTATUS) 0xC00002D1L) -#endif - -#ifndef STATUS_PNP_REBOOT_REQUIRED -# define STATUS_PNP_REBOOT_REQUIRED ((NTSTATUS) 0xC00002D2L) -#endif - -#ifndef STATUS_POWER_STATE_INVALID -# define STATUS_POWER_STATE_INVALID ((NTSTATUS) 0xC00002D3L) -#endif - -#ifndef STATUS_DS_INVALID_GROUP_TYPE -# define STATUS_DS_INVALID_GROUP_TYPE ((NTSTATUS) 0xC00002D4L) -#endif - -#ifndef STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN -# define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN ((NTSTATUS) 0xC00002D5L) -#endif - -#ifndef STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN -# define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN ((NTSTATUS) 0xC00002D6L) -#endif - -#ifndef STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER -# define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS) 0xC00002D7L) -#endif - -#ifndef STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER -# define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS) 0xC00002D8L) -#endif - -#ifndef STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER -# define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS) 0xC00002D9L) -#endif - -#ifndef STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER -# define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER ((NTSTATUS) 0xC00002DAL) -#endif - -#ifndef STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER -# define STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER ((NTSTATUS) 0xC00002DBL) -#endif - -#ifndef STATUS_DS_HAVE_PRIMARY_MEMBERS -# define STATUS_DS_HAVE_PRIMARY_MEMBERS ((NTSTATUS) 0xC00002DCL) -#endif - -#ifndef STATUS_WMI_NOT_SUPPORTED -# define STATUS_WMI_NOT_SUPPORTED ((NTSTATUS) 0xC00002DDL) -#endif - -#ifndef STATUS_INSUFFICIENT_POWER -# define STATUS_INSUFFICIENT_POWER ((NTSTATUS) 0xC00002DEL) -#endif - -#ifndef STATUS_SAM_NEED_BOOTKEY_PASSWORD -# define STATUS_SAM_NEED_BOOTKEY_PASSWORD ((NTSTATUS) 0xC00002DFL) -#endif - -#ifndef STATUS_SAM_NEED_BOOTKEY_FLOPPY -# define STATUS_SAM_NEED_BOOTKEY_FLOPPY ((NTSTATUS) 0xC00002E0L) -#endif - -#ifndef STATUS_DS_CANT_START -# define STATUS_DS_CANT_START ((NTSTATUS) 0xC00002E1L) -#endif - -#ifndef STATUS_DS_INIT_FAILURE -# define STATUS_DS_INIT_FAILURE ((NTSTATUS) 0xC00002E2L) -#endif - -#ifndef STATUS_SAM_INIT_FAILURE -# define STATUS_SAM_INIT_FAILURE ((NTSTATUS) 0xC00002E3L) -#endif - -#ifndef STATUS_DS_GC_REQUIRED -# define STATUS_DS_GC_REQUIRED ((NTSTATUS) 0xC00002E4L) -#endif - -#ifndef STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY -# define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY ((NTSTATUS) 0xC00002E5L) -#endif - -#ifndef STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS -# define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS ((NTSTATUS) 0xC00002E6L) -#endif - -#ifndef STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED -# define STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED ((NTSTATUS) 0xC00002E7L) -#endif - -#ifndef STATUS_MULTIPLE_FAULT_VIOLATION -# define STATUS_MULTIPLE_FAULT_VIOLATION ((NTSTATUS) 0xC00002E8L) -#endif - -#ifndef STATUS_CURRENT_DOMAIN_NOT_ALLOWED -# define STATUS_CURRENT_DOMAIN_NOT_ALLOWED ((NTSTATUS) 0xC00002E9L) -#endif - -#ifndef STATUS_CANNOT_MAKE -# define STATUS_CANNOT_MAKE ((NTSTATUS) 0xC00002EAL) -#endif - -#ifndef STATUS_SYSTEM_SHUTDOWN -# define STATUS_SYSTEM_SHUTDOWN ((NTSTATUS) 0xC00002EBL) -#endif - -#ifndef STATUS_DS_INIT_FAILURE_CONSOLE -# define STATUS_DS_INIT_FAILURE_CONSOLE ((NTSTATUS) 0xC00002ECL) -#endif - -#ifndef STATUS_DS_SAM_INIT_FAILURE_CONSOLE -# define STATUS_DS_SAM_INIT_FAILURE_CONSOLE ((NTSTATUS) 0xC00002EDL) -#endif - -#ifndef STATUS_UNFINISHED_CONTEXT_DELETED -# define STATUS_UNFINISHED_CONTEXT_DELETED ((NTSTATUS) 0xC00002EEL) -#endif - -#ifndef STATUS_NO_TGT_REPLY -# define STATUS_NO_TGT_REPLY ((NTSTATUS) 0xC00002EFL) -#endif - -#ifndef STATUS_OBJECTID_NOT_FOUND -# define STATUS_OBJECTID_NOT_FOUND ((NTSTATUS) 0xC00002F0L) -#endif - -#ifndef STATUS_NO_IP_ADDRESSES -# define STATUS_NO_IP_ADDRESSES ((NTSTATUS) 0xC00002F1L) -#endif - -#ifndef STATUS_WRONG_CREDENTIAL_HANDLE -# define STATUS_WRONG_CREDENTIAL_HANDLE ((NTSTATUS) 0xC00002F2L) -#endif - -#ifndef STATUS_CRYPTO_SYSTEM_INVALID -# define STATUS_CRYPTO_SYSTEM_INVALID ((NTSTATUS) 0xC00002F3L) -#endif - -#ifndef STATUS_MAX_REFERRALS_EXCEEDED -# define STATUS_MAX_REFERRALS_EXCEEDED ((NTSTATUS) 0xC00002F4L) -#endif - -#ifndef STATUS_MUST_BE_KDC -# define STATUS_MUST_BE_KDC ((NTSTATUS) 0xC00002F5L) -#endif - -#ifndef STATUS_STRONG_CRYPTO_NOT_SUPPORTED -# define STATUS_STRONG_CRYPTO_NOT_SUPPORTED ((NTSTATUS) 0xC00002F6L) -#endif - -#ifndef STATUS_TOO_MANY_PRINCIPALS -# define STATUS_TOO_MANY_PRINCIPALS ((NTSTATUS) 0xC00002F7L) -#endif - -#ifndef STATUS_NO_PA_DATA -# define STATUS_NO_PA_DATA ((NTSTATUS) 0xC00002F8L) -#endif - -#ifndef STATUS_PKINIT_NAME_MISMATCH -# define STATUS_PKINIT_NAME_MISMATCH ((NTSTATUS) 0xC00002F9L) -#endif - -#ifndef STATUS_SMARTCARD_LOGON_REQUIRED -# define STATUS_SMARTCARD_LOGON_REQUIRED ((NTSTATUS) 0xC00002FAL) -#endif - -#ifndef STATUS_KDC_INVALID_REQUEST -# define STATUS_KDC_INVALID_REQUEST ((NTSTATUS) 0xC00002FBL) -#endif - -#ifndef STATUS_KDC_UNABLE_TO_REFER -# define STATUS_KDC_UNABLE_TO_REFER ((NTSTATUS) 0xC00002FCL) -#endif - -#ifndef STATUS_KDC_UNKNOWN_ETYPE -# define STATUS_KDC_UNKNOWN_ETYPE ((NTSTATUS) 0xC00002FDL) -#endif - -#ifndef STATUS_SHUTDOWN_IN_PROGRESS -# define STATUS_SHUTDOWN_IN_PROGRESS ((NTSTATUS) 0xC00002FEL) -#endif - -#ifndef STATUS_SERVER_SHUTDOWN_IN_PROGRESS -# define STATUS_SERVER_SHUTDOWN_IN_PROGRESS ((NTSTATUS) 0xC00002FFL) -#endif - -#ifndef STATUS_NOT_SUPPORTED_ON_SBS -# define STATUS_NOT_SUPPORTED_ON_SBS ((NTSTATUS) 0xC0000300L) -#endif - -#ifndef STATUS_WMI_GUID_DISCONNECTED -# define STATUS_WMI_GUID_DISCONNECTED ((NTSTATUS) 0xC0000301L) -#endif - -#ifndef STATUS_WMI_ALREADY_DISABLED -# define STATUS_WMI_ALREADY_DISABLED ((NTSTATUS) 0xC0000302L) -#endif - -#ifndef STATUS_WMI_ALREADY_ENABLED -# define STATUS_WMI_ALREADY_ENABLED ((NTSTATUS) 0xC0000303L) -#endif - -#ifndef STATUS_MFT_TOO_FRAGMENTED -# define STATUS_MFT_TOO_FRAGMENTED ((NTSTATUS) 0xC0000304L) -#endif - -#ifndef STATUS_COPY_PROTECTION_FAILURE -# define STATUS_COPY_PROTECTION_FAILURE ((NTSTATUS) 0xC0000305L) -#endif - -#ifndef STATUS_CSS_AUTHENTICATION_FAILURE -# define STATUS_CSS_AUTHENTICATION_FAILURE ((NTSTATUS) 0xC0000306L) -#endif - -#ifndef STATUS_CSS_KEY_NOT_PRESENT -# define STATUS_CSS_KEY_NOT_PRESENT ((NTSTATUS) 0xC0000307L) -#endif - -#ifndef STATUS_CSS_KEY_NOT_ESTABLISHED -# define STATUS_CSS_KEY_NOT_ESTABLISHED ((NTSTATUS) 0xC0000308L) -#endif - -#ifndef STATUS_CSS_SCRAMBLED_SECTOR -# define STATUS_CSS_SCRAMBLED_SECTOR ((NTSTATUS) 0xC0000309L) -#endif - -#ifndef STATUS_CSS_REGION_MISMATCH -# define STATUS_CSS_REGION_MISMATCH ((NTSTATUS) 0xC000030AL) -#endif - -#ifndef STATUS_CSS_RESETS_EXHAUSTED -# define STATUS_CSS_RESETS_EXHAUSTED ((NTSTATUS) 0xC000030BL) -#endif - -#ifndef STATUS_PKINIT_FAILURE -# define STATUS_PKINIT_FAILURE ((NTSTATUS) 0xC0000320L) -#endif - -#ifndef STATUS_SMARTCARD_SUBSYSTEM_FAILURE -# define STATUS_SMARTCARD_SUBSYSTEM_FAILURE ((NTSTATUS) 0xC0000321L) -#endif - -#ifndef STATUS_NO_KERB_KEY -# define STATUS_NO_KERB_KEY ((NTSTATUS) 0xC0000322L) -#endif - -#ifndef STATUS_HOST_DOWN -# define STATUS_HOST_DOWN ((NTSTATUS) 0xC0000350L) -#endif - -#ifndef STATUS_UNSUPPORTED_PREAUTH -# define STATUS_UNSUPPORTED_PREAUTH ((NTSTATUS) 0xC0000351L) -#endif - -#ifndef STATUS_EFS_ALG_BLOB_TOO_BIG -# define STATUS_EFS_ALG_BLOB_TOO_BIG ((NTSTATUS) 0xC0000352L) -#endif - -#ifndef STATUS_PORT_NOT_SET -# define STATUS_PORT_NOT_SET ((NTSTATUS) 0xC0000353L) -#endif - -#ifndef STATUS_DEBUGGER_INACTIVE -# define STATUS_DEBUGGER_INACTIVE ((NTSTATUS) 0xC0000354L) -#endif - -#ifndef STATUS_DS_VERSION_CHECK_FAILURE -# define STATUS_DS_VERSION_CHECK_FAILURE ((NTSTATUS) 0xC0000355L) -#endif - -#ifndef STATUS_AUDITING_DISABLED -# define STATUS_AUDITING_DISABLED ((NTSTATUS) 0xC0000356L) -#endif - -#ifndef STATUS_PRENT4_MACHINE_ACCOUNT -# define STATUS_PRENT4_MACHINE_ACCOUNT ((NTSTATUS) 0xC0000357L) -#endif - -#ifndef STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER -# define STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS) 0xC0000358L) -#endif - -#ifndef STATUS_INVALID_IMAGE_WIN_32 -# define STATUS_INVALID_IMAGE_WIN_32 ((NTSTATUS) 0xC0000359L) -#endif - -#ifndef STATUS_INVALID_IMAGE_WIN_64 -# define STATUS_INVALID_IMAGE_WIN_64 ((NTSTATUS) 0xC000035AL) -#endif - -#ifndef STATUS_BAD_BINDINGS -# define STATUS_BAD_BINDINGS ((NTSTATUS) 0xC000035BL) -#endif - -#ifndef STATUS_NETWORK_SESSION_EXPIRED -# define STATUS_NETWORK_SESSION_EXPIRED ((NTSTATUS) 0xC000035CL) -#endif - -#ifndef STATUS_APPHELP_BLOCK -# define STATUS_APPHELP_BLOCK ((NTSTATUS) 0xC000035DL) -#endif - -#ifndef STATUS_ALL_SIDS_FILTERED -# define STATUS_ALL_SIDS_FILTERED ((NTSTATUS) 0xC000035EL) -#endif - -#ifndef STATUS_NOT_SAFE_MODE_DRIVER -# define STATUS_NOT_SAFE_MODE_DRIVER ((NTSTATUS) 0xC000035FL) -#endif - -#ifndef STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT -# define STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT ((NTSTATUS) 0xC0000361L) -#endif - -#ifndef STATUS_ACCESS_DISABLED_BY_POLICY_PATH -# define STATUS_ACCESS_DISABLED_BY_POLICY_PATH ((NTSTATUS) 0xC0000362L) -#endif - -#ifndef STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER -# define STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER ((NTSTATUS) 0xC0000363L) -#endif - -#ifndef STATUS_ACCESS_DISABLED_BY_POLICY_OTHER -# define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER ((NTSTATUS) 0xC0000364L) -#endif - -#ifndef STATUS_FAILED_DRIVER_ENTRY -# define STATUS_FAILED_DRIVER_ENTRY ((NTSTATUS) 0xC0000365L) -#endif - -#ifndef STATUS_DEVICE_ENUMERATION_ERROR -# define STATUS_DEVICE_ENUMERATION_ERROR ((NTSTATUS) 0xC0000366L) -#endif - -#ifndef STATUS_MOUNT_POINT_NOT_RESOLVED -# define STATUS_MOUNT_POINT_NOT_RESOLVED ((NTSTATUS) 0xC0000368L) -#endif - -#ifndef STATUS_INVALID_DEVICE_OBJECT_PARAMETER -# define STATUS_INVALID_DEVICE_OBJECT_PARAMETER ((NTSTATUS) 0xC0000369L) -#endif - -#ifndef STATUS_MCA_OCCURED -# define STATUS_MCA_OCCURED ((NTSTATUS) 0xC000036AL) -#endif - -#ifndef STATUS_DRIVER_BLOCKED_CRITICAL -# define STATUS_DRIVER_BLOCKED_CRITICAL ((NTSTATUS) 0xC000036BL) -#endif - -#ifndef STATUS_DRIVER_BLOCKED -# define STATUS_DRIVER_BLOCKED ((NTSTATUS) 0xC000036CL) -#endif - -#ifndef STATUS_DRIVER_DATABASE_ERROR -# define STATUS_DRIVER_DATABASE_ERROR ((NTSTATUS) 0xC000036DL) -#endif - -#ifndef STATUS_SYSTEM_HIVE_TOO_LARGE -# define STATUS_SYSTEM_HIVE_TOO_LARGE ((NTSTATUS) 0xC000036EL) -#endif - -#ifndef STATUS_INVALID_IMPORT_OF_NON_DLL -# define STATUS_INVALID_IMPORT_OF_NON_DLL ((NTSTATUS) 0xC000036FL) -#endif - -#ifndef STATUS_DS_SHUTTING_DOWN -# define STATUS_DS_SHUTTING_DOWN ((NTSTATUS) 0x40000370L) -#endif - -#ifndef STATUS_NO_SECRETS -# define STATUS_NO_SECRETS ((NTSTATUS) 0xC0000371L) -#endif - -#ifndef STATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY -# define STATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY ((NTSTATUS) 0xC0000372L) -#endif - -#ifndef STATUS_FAILED_STACK_SWITCH -# define STATUS_FAILED_STACK_SWITCH ((NTSTATUS) 0xC0000373L) -#endif - -#ifndef STATUS_HEAP_CORRUPTION -# define STATUS_HEAP_CORRUPTION ((NTSTATUS) 0xC0000374L) -#endif - -#ifndef STATUS_SMARTCARD_WRONG_PIN -# define STATUS_SMARTCARD_WRONG_PIN ((NTSTATUS) 0xC0000380L) -#endif - -#ifndef STATUS_SMARTCARD_CARD_BLOCKED -# define STATUS_SMARTCARD_CARD_BLOCKED ((NTSTATUS) 0xC0000381L) -#endif - -#ifndef STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED -# define STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED ((NTSTATUS) 0xC0000382L) -#endif - -#ifndef STATUS_SMARTCARD_NO_CARD -# define STATUS_SMARTCARD_NO_CARD ((NTSTATUS) 0xC0000383L) -#endif - -#ifndef STATUS_SMARTCARD_NO_KEY_CONTAINER -# define STATUS_SMARTCARD_NO_KEY_CONTAINER ((NTSTATUS) 0xC0000384L) -#endif - -#ifndef STATUS_SMARTCARD_NO_CERTIFICATE -# define STATUS_SMARTCARD_NO_CERTIFICATE ((NTSTATUS) 0xC0000385L) -#endif - -#ifndef STATUS_SMARTCARD_NO_KEYSET -# define STATUS_SMARTCARD_NO_KEYSET ((NTSTATUS) 0xC0000386L) -#endif - -#ifndef STATUS_SMARTCARD_IO_ERROR -# define STATUS_SMARTCARD_IO_ERROR ((NTSTATUS) 0xC0000387L) -#endif - -#ifndef STATUS_DOWNGRADE_DETECTED -# define STATUS_DOWNGRADE_DETECTED ((NTSTATUS) 0xC0000388L) -#endif - -#ifndef STATUS_SMARTCARD_CERT_REVOKED -# define STATUS_SMARTCARD_CERT_REVOKED ((NTSTATUS) 0xC0000389L) -#endif - -#ifndef STATUS_ISSUING_CA_UNTRUSTED -# define STATUS_ISSUING_CA_UNTRUSTED ((NTSTATUS) 0xC000038AL) -#endif - -#ifndef STATUS_REVOCATION_OFFLINE_C -# define STATUS_REVOCATION_OFFLINE_C ((NTSTATUS) 0xC000038BL) -#endif - -#ifndef STATUS_PKINIT_CLIENT_FAILURE -# define STATUS_PKINIT_CLIENT_FAILURE ((NTSTATUS) 0xC000038CL) -#endif - -#ifndef STATUS_SMARTCARD_CERT_EXPIRED -# define STATUS_SMARTCARD_CERT_EXPIRED ((NTSTATUS) 0xC000038DL) -#endif - -#ifndef STATUS_DRIVER_FAILED_PRIOR_UNLOAD -# define STATUS_DRIVER_FAILED_PRIOR_UNLOAD ((NTSTATUS) 0xC000038EL) -#endif - -#ifndef STATUS_SMARTCARD_SILENT_CONTEXT -# define STATUS_SMARTCARD_SILENT_CONTEXT ((NTSTATUS) 0xC000038FL) -#endif - -#ifndef STATUS_PER_USER_TRUST_QUOTA_EXCEEDED -# define STATUS_PER_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000401L) -#endif - -#ifndef STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED -# define STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000402L) -#endif - -#ifndef STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED -# define STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000403L) -#endif - -#ifndef STATUS_DS_NAME_NOT_UNIQUE -# define STATUS_DS_NAME_NOT_UNIQUE ((NTSTATUS) 0xC0000404L) -#endif - -#ifndef STATUS_DS_DUPLICATE_ID_FOUND -# define STATUS_DS_DUPLICATE_ID_FOUND ((NTSTATUS) 0xC0000405L) -#endif - -#ifndef STATUS_DS_GROUP_CONVERSION_ERROR -# define STATUS_DS_GROUP_CONVERSION_ERROR ((NTSTATUS) 0xC0000406L) -#endif - -#ifndef STATUS_VOLSNAP_PREPARE_HIBERNATE -# define STATUS_VOLSNAP_PREPARE_HIBERNATE ((NTSTATUS) 0xC0000407L) -#endif - -#ifndef STATUS_USER2USER_REQUIRED -# define STATUS_USER2USER_REQUIRED ((NTSTATUS) 0xC0000408L) -#endif - -#ifndef STATUS_STACK_BUFFER_OVERRUN -# define STATUS_STACK_BUFFER_OVERRUN ((NTSTATUS) 0xC0000409L) -#endif - -#ifndef STATUS_NO_S4U_PROT_SUPPORT -# define STATUS_NO_S4U_PROT_SUPPORT ((NTSTATUS) 0xC000040AL) -#endif - -#ifndef STATUS_CROSSREALM_DELEGATION_FAILURE -# define STATUS_CROSSREALM_DELEGATION_FAILURE ((NTSTATUS) 0xC000040BL) -#endif - -#ifndef STATUS_REVOCATION_OFFLINE_KDC -# define STATUS_REVOCATION_OFFLINE_KDC ((NTSTATUS) 0xC000040CL) -#endif - -#ifndef STATUS_ISSUING_CA_UNTRUSTED_KDC -# define STATUS_ISSUING_CA_UNTRUSTED_KDC ((NTSTATUS) 0xC000040DL) -#endif - -#ifndef STATUS_KDC_CERT_EXPIRED -# define STATUS_KDC_CERT_EXPIRED ((NTSTATUS) 0xC000040EL) -#endif - -#ifndef STATUS_KDC_CERT_REVOKED -# define STATUS_KDC_CERT_REVOKED ((NTSTATUS) 0xC000040FL) -#endif - -#ifndef STATUS_PARAMETER_QUOTA_EXCEEDED -# define STATUS_PARAMETER_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000410L) -#endif - -#ifndef STATUS_HIBERNATION_FAILURE -# define STATUS_HIBERNATION_FAILURE ((NTSTATUS) 0xC0000411L) -#endif - -#ifndef STATUS_DELAY_LOAD_FAILED -# define STATUS_DELAY_LOAD_FAILED ((NTSTATUS) 0xC0000412L) -#endif - -#ifndef STATUS_AUTHENTICATION_FIREWALL_FAILED -# define STATUS_AUTHENTICATION_FIREWALL_FAILED ((NTSTATUS) 0xC0000413L) -#endif - -#ifndef STATUS_VDM_DISALLOWED -# define STATUS_VDM_DISALLOWED ((NTSTATUS) 0xC0000414L) -#endif - -#ifndef STATUS_HUNG_DISPLAY_DRIVER_THREAD -# define STATUS_HUNG_DISPLAY_DRIVER_THREAD ((NTSTATUS) 0xC0000415L) -#endif - -#ifndef STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE -# define STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE ((NTSTATUS) 0xC0000416L) -#endif - -#ifndef STATUS_INVALID_CRUNTIME_PARAMETER -# define STATUS_INVALID_CRUNTIME_PARAMETER ((NTSTATUS) 0xC0000417L) -#endif - -#ifndef STATUS_NTLM_BLOCKED -# define STATUS_NTLM_BLOCKED ((NTSTATUS) 0xC0000418L) -#endif - -#ifndef STATUS_DS_SRC_SID_EXISTS_IN_FOREST -# define STATUS_DS_SRC_SID_EXISTS_IN_FOREST ((NTSTATUS) 0xC0000419L) -#endif - -#ifndef STATUS_DS_DOMAIN_NAME_EXISTS_IN_FOREST -# define STATUS_DS_DOMAIN_NAME_EXISTS_IN_FOREST ((NTSTATUS) 0xC000041AL) -#endif - -#ifndef STATUS_DS_FLAT_NAME_EXISTS_IN_FOREST -# define STATUS_DS_FLAT_NAME_EXISTS_IN_FOREST ((NTSTATUS) 0xC000041BL) -#endif - -#ifndef STATUS_INVALID_USER_PRINCIPAL_NAME -# define STATUS_INVALID_USER_PRINCIPAL_NAME ((NTSTATUS) 0xC000041CL) -#endif - -#ifndef STATUS_FATAL_USER_CALLBACK_EXCEPTION -# define STATUS_FATAL_USER_CALLBACK_EXCEPTION ((NTSTATUS) 0xC000041DL) -#endif - -#ifndef STATUS_ASSERTION_FAILURE -# define STATUS_ASSERTION_FAILURE ((NTSTATUS) 0xC0000420L) -#endif - -#ifndef STATUS_VERIFIER_STOP -# define STATUS_VERIFIER_STOP ((NTSTATUS) 0xC0000421L) -#endif - -#ifndef STATUS_CALLBACK_POP_STACK -# define STATUS_CALLBACK_POP_STACK ((NTSTATUS) 0xC0000423L) -#endif - -#ifndef STATUS_INCOMPATIBLE_DRIVER_BLOCKED -# define STATUS_INCOMPATIBLE_DRIVER_BLOCKED ((NTSTATUS) 0xC0000424L) -#endif - -#ifndef STATUS_HIVE_UNLOADED -# define STATUS_HIVE_UNLOADED ((NTSTATUS) 0xC0000425L) -#endif - -#ifndef STATUS_COMPRESSION_DISABLED -# define STATUS_COMPRESSION_DISABLED ((NTSTATUS) 0xC0000426L) -#endif - -#ifndef STATUS_FILE_SYSTEM_LIMITATION -# define STATUS_FILE_SYSTEM_LIMITATION ((NTSTATUS) 0xC0000427L) -#endif - -#ifndef STATUS_INVALID_IMAGE_HASH -# define STATUS_INVALID_IMAGE_HASH ((NTSTATUS) 0xC0000428L) -#endif - -#ifndef STATUS_NOT_CAPABLE -# define STATUS_NOT_CAPABLE ((NTSTATUS) 0xC0000429L) -#endif - -#ifndef STATUS_REQUEST_OUT_OF_SEQUENCE -# define STATUS_REQUEST_OUT_OF_SEQUENCE ((NTSTATUS) 0xC000042AL) -#endif - -#ifndef STATUS_IMPLEMENTATION_LIMIT -# define STATUS_IMPLEMENTATION_LIMIT ((NTSTATUS) 0xC000042BL) -#endif - -#ifndef STATUS_ELEVATION_REQUIRED -# define STATUS_ELEVATION_REQUIRED ((NTSTATUS) 0xC000042CL) -#endif - -#ifndef STATUS_NO_SECURITY_CONTEXT -# define STATUS_NO_SECURITY_CONTEXT ((NTSTATUS) 0xC000042DL) -#endif - -#ifndef STATUS_PKU2U_CERT_FAILURE -# define STATUS_PKU2U_CERT_FAILURE ((NTSTATUS) 0xC000042FL) -#endif - -#ifndef STATUS_BEYOND_VDL -# define STATUS_BEYOND_VDL ((NTSTATUS) 0xC0000432L) -#endif - -#ifndef STATUS_ENCOUNTERED_WRITE_IN_PROGRESS -# define STATUS_ENCOUNTERED_WRITE_IN_PROGRESS ((NTSTATUS) 0xC0000433L) -#endif - -#ifndef STATUS_PTE_CHANGED -# define STATUS_PTE_CHANGED ((NTSTATUS) 0xC0000434L) -#endif - -#ifndef STATUS_PURGE_FAILED -# define STATUS_PURGE_FAILED ((NTSTATUS) 0xC0000435L) -#endif - -#ifndef STATUS_CRED_REQUIRES_CONFIRMATION -# define STATUS_CRED_REQUIRES_CONFIRMATION ((NTSTATUS) 0xC0000440L) -#endif - -#ifndef STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE -# define STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE ((NTSTATUS) 0xC0000441L) -#endif - -#ifndef STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER -# define STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER ((NTSTATUS) 0xC0000442L) -#endif - -#ifndef STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE -# define STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE ((NTSTATUS) 0xC0000443L) -#endif - -#ifndef STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE -# define STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE ((NTSTATUS) 0xC0000444L) -#endif - -#ifndef STATUS_CS_ENCRYPTION_FILE_NOT_CSE -# define STATUS_CS_ENCRYPTION_FILE_NOT_CSE ((NTSTATUS) 0xC0000445L) -#endif - -#ifndef STATUS_INVALID_LABEL -# define STATUS_INVALID_LABEL ((NTSTATUS) 0xC0000446L) -#endif - -#ifndef STATUS_DRIVER_PROCESS_TERMINATED -# define STATUS_DRIVER_PROCESS_TERMINATED ((NTSTATUS) 0xC0000450L) -#endif - -#ifndef STATUS_AMBIGUOUS_SYSTEM_DEVICE -# define STATUS_AMBIGUOUS_SYSTEM_DEVICE ((NTSTATUS) 0xC0000451L) -#endif - -#ifndef STATUS_SYSTEM_DEVICE_NOT_FOUND -# define STATUS_SYSTEM_DEVICE_NOT_FOUND ((NTSTATUS) 0xC0000452L) -#endif - -#ifndef STATUS_RESTART_BOOT_APPLICATION -# define STATUS_RESTART_BOOT_APPLICATION ((NTSTATUS) 0xC0000453L) -#endif - -#ifndef STATUS_INSUFFICIENT_NVRAM_RESOURCES -# define STATUS_INSUFFICIENT_NVRAM_RESOURCES ((NTSTATUS) 0xC0000454L) -#endif - -#ifndef STATUS_INVALID_TASK_NAME -# define STATUS_INVALID_TASK_NAME ((NTSTATUS) 0xC0000500L) -#endif - -#ifndef STATUS_INVALID_TASK_INDEX -# define STATUS_INVALID_TASK_INDEX ((NTSTATUS) 0xC0000501L) -#endif - -#ifndef STATUS_THREAD_ALREADY_IN_TASK -# define STATUS_THREAD_ALREADY_IN_TASK ((NTSTATUS) 0xC0000502L) -#endif - -#ifndef STATUS_CALLBACK_BYPASS -# define STATUS_CALLBACK_BYPASS ((NTSTATUS) 0xC0000503L) -#endif - -#ifndef STATUS_FAIL_FAST_EXCEPTION -# define STATUS_FAIL_FAST_EXCEPTION ((NTSTATUS) 0xC0000602L) -#endif - -#ifndef STATUS_IMAGE_CERT_REVOKED -# define STATUS_IMAGE_CERT_REVOKED ((NTSTATUS) 0xC0000603L) -#endif - -#ifndef STATUS_PORT_CLOSED -# define STATUS_PORT_CLOSED ((NTSTATUS) 0xC0000700L) -#endif - -#ifndef STATUS_MESSAGE_LOST -# define STATUS_MESSAGE_LOST ((NTSTATUS) 0xC0000701L) -#endif - -#ifndef STATUS_INVALID_MESSAGE -# define STATUS_INVALID_MESSAGE ((NTSTATUS) 0xC0000702L) -#endif - -#ifndef STATUS_REQUEST_CANCELED -# define STATUS_REQUEST_CANCELED ((NTSTATUS) 0xC0000703L) -#endif - -#ifndef STATUS_RECURSIVE_DISPATCH -# define STATUS_RECURSIVE_DISPATCH ((NTSTATUS) 0xC0000704L) -#endif - -#ifndef STATUS_LPC_RECEIVE_BUFFER_EXPECTED -# define STATUS_LPC_RECEIVE_BUFFER_EXPECTED ((NTSTATUS) 0xC0000705L) -#endif - -#ifndef STATUS_LPC_INVALID_CONNECTION_USAGE -# define STATUS_LPC_INVALID_CONNECTION_USAGE ((NTSTATUS) 0xC0000706L) -#endif - -#ifndef STATUS_LPC_REQUESTS_NOT_ALLOWED -# define STATUS_LPC_REQUESTS_NOT_ALLOWED ((NTSTATUS) 0xC0000707L) -#endif - -#ifndef STATUS_RESOURCE_IN_USE -# define STATUS_RESOURCE_IN_USE ((NTSTATUS) 0xC0000708L) -#endif - -#ifndef STATUS_HARDWARE_MEMORY_ERROR -# define STATUS_HARDWARE_MEMORY_ERROR ((NTSTATUS) 0xC0000709L) -#endif - -#ifndef STATUS_THREADPOOL_HANDLE_EXCEPTION -# define STATUS_THREADPOOL_HANDLE_EXCEPTION ((NTSTATUS) 0xC000070AL) -#endif - -#ifndef STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED -# define STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070BL) -#endif - -#ifndef STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED -# define STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070CL) -#endif - -#ifndef STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED -# define STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070DL) -#endif - -#ifndef STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED -# define STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070EL) -#endif - -#ifndef STATUS_THREADPOOL_RELEASED_DURING_OPERATION -# define STATUS_THREADPOOL_RELEASED_DURING_OPERATION ((NTSTATUS) 0xC000070FL) -#endif - -#ifndef STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING -# define STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING ((NTSTATUS) 0xC0000710L) -#endif - -#ifndef STATUS_APC_RETURNED_WHILE_IMPERSONATING -# define STATUS_APC_RETURNED_WHILE_IMPERSONATING ((NTSTATUS) 0xC0000711L) -#endif - -#ifndef STATUS_PROCESS_IS_PROTECTED -# define STATUS_PROCESS_IS_PROTECTED ((NTSTATUS) 0xC0000712L) -#endif - -#ifndef STATUS_MCA_EXCEPTION -# define STATUS_MCA_EXCEPTION ((NTSTATUS) 0xC0000713L) -#endif - -#ifndef STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE -# define STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE ((NTSTATUS) 0xC0000714L) -#endif - -#ifndef STATUS_SYMLINK_CLASS_DISABLED -# define STATUS_SYMLINK_CLASS_DISABLED ((NTSTATUS) 0xC0000715L) -#endif - -#ifndef STATUS_INVALID_IDN_NORMALIZATION -# define STATUS_INVALID_IDN_NORMALIZATION ((NTSTATUS) 0xC0000716L) -#endif - -#ifndef STATUS_NO_UNICODE_TRANSLATION -# define STATUS_NO_UNICODE_TRANSLATION ((NTSTATUS) 0xC0000717L) -#endif - -#ifndef STATUS_ALREADY_REGISTERED -# define STATUS_ALREADY_REGISTERED ((NTSTATUS) 0xC0000718L) -#endif - -#ifndef STATUS_CONTEXT_MISMATCH -# define STATUS_CONTEXT_MISMATCH ((NTSTATUS) 0xC0000719L) -#endif - -#ifndef STATUS_PORT_ALREADY_HAS_COMPLETION_LIST -# define STATUS_PORT_ALREADY_HAS_COMPLETION_LIST ((NTSTATUS) 0xC000071AL) -#endif - -#ifndef STATUS_CALLBACK_RETURNED_THREAD_PRIORITY -# define STATUS_CALLBACK_RETURNED_THREAD_PRIORITY ((NTSTATUS) 0xC000071BL) -#endif - -#ifndef STATUS_INVALID_THREAD -# define STATUS_INVALID_THREAD ((NTSTATUS) 0xC000071CL) -#endif - -#ifndef STATUS_CALLBACK_RETURNED_TRANSACTION -# define STATUS_CALLBACK_RETURNED_TRANSACTION ((NTSTATUS) 0xC000071DL) -#endif - -#ifndef STATUS_CALLBACK_RETURNED_LDR_LOCK -# define STATUS_CALLBACK_RETURNED_LDR_LOCK ((NTSTATUS) 0xC000071EL) -#endif - -#ifndef STATUS_CALLBACK_RETURNED_LANG -# define STATUS_CALLBACK_RETURNED_LANG ((NTSTATUS) 0xC000071FL) -#endif - -#ifndef STATUS_CALLBACK_RETURNED_PRI_BACK -# define STATUS_CALLBACK_RETURNED_PRI_BACK ((NTSTATUS) 0xC0000720L) -#endif - -#ifndef STATUS_CALLBACK_RETURNED_THREAD_AFFINITY -# define STATUS_CALLBACK_RETURNED_THREAD_AFFINITY ((NTSTATUS) 0xC0000721L) -#endif - -#ifndef STATUS_DISK_REPAIR_DISABLED -# define STATUS_DISK_REPAIR_DISABLED ((NTSTATUS) 0xC0000800L) -#endif - -#ifndef STATUS_DS_DOMAIN_RENAME_IN_PROGRESS -# define STATUS_DS_DOMAIN_RENAME_IN_PROGRESS ((NTSTATUS) 0xC0000801L) -#endif - -#ifndef STATUS_DISK_QUOTA_EXCEEDED -# define STATUS_DISK_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000802L) -#endif - -#ifndef STATUS_DATA_LOST_REPAIR -# define STATUS_DATA_LOST_REPAIR ((NTSTATUS) 0x80000803L) -#endif - -#ifndef STATUS_CONTENT_BLOCKED -# define STATUS_CONTENT_BLOCKED ((NTSTATUS) 0xC0000804L) -#endif - -#ifndef STATUS_BAD_CLUSTERS -# define STATUS_BAD_CLUSTERS ((NTSTATUS) 0xC0000805L) -#endif - -#ifndef STATUS_VOLUME_DIRTY -# define STATUS_VOLUME_DIRTY ((NTSTATUS) 0xC0000806L) -#endif - -#ifndef STATUS_FILE_CHECKED_OUT -# define STATUS_FILE_CHECKED_OUT ((NTSTATUS) 0xC0000901L) -#endif - -#ifndef STATUS_CHECKOUT_REQUIRED -# define STATUS_CHECKOUT_REQUIRED ((NTSTATUS) 0xC0000902L) -#endif - -#ifndef STATUS_BAD_FILE_TYPE -# define STATUS_BAD_FILE_TYPE ((NTSTATUS) 0xC0000903L) -#endif - -#ifndef STATUS_FILE_TOO_LARGE -# define STATUS_FILE_TOO_LARGE ((NTSTATUS) 0xC0000904L) -#endif - -#ifndef STATUS_FORMS_AUTH_REQUIRED -# define STATUS_FORMS_AUTH_REQUIRED ((NTSTATUS) 0xC0000905L) -#endif - -#ifndef STATUS_VIRUS_INFECTED -# define STATUS_VIRUS_INFECTED ((NTSTATUS) 0xC0000906L) -#endif - -#ifndef STATUS_VIRUS_DELETED -# define STATUS_VIRUS_DELETED ((NTSTATUS) 0xC0000907L) -#endif - -#ifndef STATUS_BAD_MCFG_TABLE -# define STATUS_BAD_MCFG_TABLE ((NTSTATUS) 0xC0000908L) -#endif - -#ifndef STATUS_CANNOT_BREAK_OPLOCK -# define STATUS_CANNOT_BREAK_OPLOCK ((NTSTATUS) 0xC0000909L) -#endif - -#ifndef STATUS_WOW_ASSERTION -# define STATUS_WOW_ASSERTION ((NTSTATUS) 0xC0009898L) -#endif - -#ifndef STATUS_INVALID_SIGNATURE -# define STATUS_INVALID_SIGNATURE ((NTSTATUS) 0xC000A000L) -#endif - -#ifndef STATUS_HMAC_NOT_SUPPORTED -# define STATUS_HMAC_NOT_SUPPORTED ((NTSTATUS) 0xC000A001L) -#endif - -#ifndef STATUS_AUTH_TAG_MISMATCH -# define STATUS_AUTH_TAG_MISMATCH ((NTSTATUS) 0xC000A002L) -#endif - -#ifndef STATUS_IPSEC_QUEUE_OVERFLOW -# define STATUS_IPSEC_QUEUE_OVERFLOW ((NTSTATUS) 0xC000A010L) -#endif - -#ifndef STATUS_ND_QUEUE_OVERFLOW -# define STATUS_ND_QUEUE_OVERFLOW ((NTSTATUS) 0xC000A011L) -#endif - -#ifndef STATUS_HOPLIMIT_EXCEEDED -# define STATUS_HOPLIMIT_EXCEEDED ((NTSTATUS) 0xC000A012L) -#endif - -#ifndef STATUS_PROTOCOL_NOT_SUPPORTED -# define STATUS_PROTOCOL_NOT_SUPPORTED ((NTSTATUS) 0xC000A013L) -#endif - -#ifndef STATUS_FASTPATH_REJECTED -# define STATUS_FASTPATH_REJECTED ((NTSTATUS) 0xC000A014L) -#endif - -#ifndef STATUS_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED -# define STATUS_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED ((NTSTATUS) 0xC000A080L) -#endif - -#ifndef STATUS_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR -# define STATUS_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR ((NTSTATUS) 0xC000A081L) -#endif - -#ifndef STATUS_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR -# define STATUS_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR ((NTSTATUS) 0xC000A082L) -#endif - -#ifndef STATUS_XML_PARSE_ERROR -# define STATUS_XML_PARSE_ERROR ((NTSTATUS) 0xC000A083L) -#endif - -#ifndef STATUS_XMLDSIG_ERROR -# define STATUS_XMLDSIG_ERROR ((NTSTATUS) 0xC000A084L) -#endif - -#ifndef STATUS_WRONG_COMPARTMENT -# define STATUS_WRONG_COMPARTMENT ((NTSTATUS) 0xC000A085L) -#endif - -#ifndef STATUS_AUTHIP_FAILURE -# define STATUS_AUTHIP_FAILURE ((NTSTATUS) 0xC000A086L) -#endif - -#ifndef STATUS_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS -# define STATUS_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS ((NTSTATUS) 0xC000A087L) -#endif - -#ifndef STATUS_DS_OID_NOT_FOUND -# define STATUS_DS_OID_NOT_FOUND ((NTSTATUS) 0xC000A088L) -#endif - -#ifndef STATUS_HASH_NOT_SUPPORTED -# define STATUS_HASH_NOT_SUPPORTED ((NTSTATUS) 0xC000A100L) -#endif - -#ifndef STATUS_HASH_NOT_PRESENT -# define STATUS_HASH_NOT_PRESENT ((NTSTATUS) 0xC000A101L) -#endif - -/* This is not the NTSTATUS_FROM_WIN32 that the DDK provides, because the DDK - * got it wrong! */ -#ifdef NTSTATUS_FROM_WIN32 -# undef NTSTATUS_FROM_WIN32 -#endif -#define NTSTATUS_FROM_WIN32(error) ((NTSTATUS) (error) <= 0 ? \ - ((NTSTATUS) (error)) : ((NTSTATUS) (((error) & 0x0000FFFF) | \ - (FACILITY_NTWIN32 << 16) | ERROR_SEVERITY_WARNING))) - -#ifndef JOB_OBJECT_LIMIT_PROCESS_MEMORY -# define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100 -#endif -#ifndef JOB_OBJECT_LIMIT_JOB_MEMORY -# define JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200 -#endif -#ifndef JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION -# define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400 -#endif -#ifndef JOB_OBJECT_LIMIT_BREAKAWAY_OK -# define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800 -#endif -#ifndef JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK -# define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000 -#endif -#ifndef JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE -# define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000 -#endif - -#ifndef SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE -# define SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE 0x00000002 -#endif - -/* from winternl.h */ -#if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32__) -#define __UNICODE_STRING_DEFINED -#endif -typedef struct _UNICODE_STRING { - USHORT Length; - USHORT MaximumLength; - PWSTR Buffer; -} UNICODE_STRING, *PUNICODE_STRING; - -typedef const UNICODE_STRING *PCUNICODE_STRING; - -/* from ntifs.h */ -#ifndef DEVICE_TYPE -# define DEVICE_TYPE DWORD -#endif - -/* MinGW already has a definition for REPARSE_DATA_BUFFER, but mingw-w64 does - * not. - */ -#if defined(_MSC_VER) || defined(__MINGW64_VERSION_MAJOR) - typedef struct _REPARSE_DATA_BUFFER { - ULONG ReparseTag; - USHORT ReparseDataLength; - USHORT Reserved; - union { - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - ULONG Flags; - WCHAR PathBuffer[1]; - } SymbolicLinkReparseBuffer; - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - WCHAR PathBuffer[1]; - } MountPointReparseBuffer; - struct { - UCHAR DataBuffer[1]; - } GenericReparseBuffer; - struct { - ULONG StringCount; - WCHAR StringList[1]; - } AppExecLinkReparseBuffer; - }; - } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; -#endif - -typedef struct _IO_STATUS_BLOCK { - union { - NTSTATUS Status; - PVOID Pointer; - }; - ULONG_PTR Information; -} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; - -typedef enum _FILE_INFORMATION_CLASS { - FileDirectoryInformation = 1, - FileFullDirectoryInformation, - FileBothDirectoryInformation, - FileBasicInformation, - FileStandardInformation, - FileInternalInformation, - FileEaInformation, - FileAccessInformation, - FileNameInformation, - FileRenameInformation, - FileLinkInformation, - FileNamesInformation, - FileDispositionInformation, - FilePositionInformation, - FileFullEaInformation, - FileModeInformation, - FileAlignmentInformation, - FileAllInformation, - FileAllocationInformation, - FileEndOfFileInformation, - FileAlternateNameInformation, - FileStreamInformation, - FilePipeInformation, - FilePipeLocalInformation, - FilePipeRemoteInformation, - FileMailslotQueryInformation, - FileMailslotSetInformation, - FileCompressionInformation, - FileObjectIdInformation, - FileCompletionInformation, - FileMoveClusterInformation, - FileQuotaInformation, - FileReparsePointInformation, - FileNetworkOpenInformation, - FileAttributeTagInformation, - FileTrackingInformation, - FileIdBothDirectoryInformation, - FileIdFullDirectoryInformation, - FileValidDataLengthInformation, - FileShortNameInformation, - FileIoCompletionNotificationInformation, - FileIoStatusBlockRangeInformation, - FileIoPriorityHintInformation, - FileSfioReserveInformation, - FileSfioVolumeInformation, - FileHardLinkInformation, - FileProcessIdsUsingFileInformation, - FileNormalizedNameInformation, - FileNetworkPhysicalNameInformation, - FileIdGlobalTxDirectoryInformation, - FileIsRemoteDeviceInformation, - FileAttributeCacheInformation, - FileNumaNodeInformation, - FileStandardLinkInformation, - FileRemoteProtocolInformation, - FileMaximumInformation -} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; - -typedef struct _FILE_DIRECTORY_INFORMATION { - ULONG NextEntryOffset; - ULONG FileIndex; - LARGE_INTEGER CreationTime; - LARGE_INTEGER LastAccessTime; - LARGE_INTEGER LastWriteTime; - LARGE_INTEGER ChangeTime; - LARGE_INTEGER EndOfFile; - LARGE_INTEGER AllocationSize; - ULONG FileAttributes; - ULONG FileNameLength; - WCHAR FileName[1]; -} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; - -typedef struct _FILE_BOTH_DIR_INFORMATION { - ULONG NextEntryOffset; - ULONG FileIndex; - LARGE_INTEGER CreationTime; - LARGE_INTEGER LastAccessTime; - LARGE_INTEGER LastWriteTime; - LARGE_INTEGER ChangeTime; - LARGE_INTEGER EndOfFile; - LARGE_INTEGER AllocationSize; - ULONG FileAttributes; - ULONG FileNameLength; - ULONG EaSize; - CCHAR ShortNameLength; - WCHAR ShortName[12]; - WCHAR FileName[1]; -} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION; - -typedef struct _FILE_BASIC_INFORMATION { - LARGE_INTEGER CreationTime; - LARGE_INTEGER LastAccessTime; - LARGE_INTEGER LastWriteTime; - LARGE_INTEGER ChangeTime; - DWORD FileAttributes; -} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; - -typedef struct _FILE_STANDARD_INFORMATION { - LARGE_INTEGER AllocationSize; - LARGE_INTEGER EndOfFile; - ULONG NumberOfLinks; - BOOLEAN DeletePending; - BOOLEAN Directory; -} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; - -typedef struct _FILE_INTERNAL_INFORMATION { - LARGE_INTEGER IndexNumber; -} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; - -typedef struct _FILE_EA_INFORMATION { - ULONG EaSize; -} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; - -typedef struct _FILE_ACCESS_INFORMATION { - ACCESS_MASK AccessFlags; -} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; - -typedef struct _FILE_POSITION_INFORMATION { - LARGE_INTEGER CurrentByteOffset; -} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; - -typedef struct _FILE_MODE_INFORMATION { - ULONG Mode; -} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; - -typedef struct _FILE_ALIGNMENT_INFORMATION { - ULONG AlignmentRequirement; -} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; - -typedef struct _FILE_NAME_INFORMATION { - ULONG FileNameLength; - WCHAR FileName[1]; -} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; - -typedef struct _FILE_END_OF_FILE_INFORMATION { - LARGE_INTEGER EndOfFile; -} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; - -typedef struct _FILE_ALL_INFORMATION { - FILE_BASIC_INFORMATION BasicInformation; - FILE_STANDARD_INFORMATION StandardInformation; - FILE_INTERNAL_INFORMATION InternalInformation; - FILE_EA_INFORMATION EaInformation; - FILE_ACCESS_INFORMATION AccessInformation; - FILE_POSITION_INFORMATION PositionInformation; - FILE_MODE_INFORMATION ModeInformation; - FILE_ALIGNMENT_INFORMATION AlignmentInformation; - FILE_NAME_INFORMATION NameInformation; -} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; - -typedef struct _FILE_DISPOSITION_INFORMATION { - BOOLEAN DeleteFile; -} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; - -typedef struct _FILE_PIPE_LOCAL_INFORMATION { - ULONG NamedPipeType; - ULONG NamedPipeConfiguration; - ULONG MaximumInstances; - ULONG CurrentInstances; - ULONG InboundQuota; - ULONG ReadDataAvailable; - ULONG OutboundQuota; - ULONG WriteQuotaAvailable; - ULONG NamedPipeState; - ULONG NamedPipeEnd; -} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; - -#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 -#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 - -typedef enum _FS_INFORMATION_CLASS { - FileFsVolumeInformation = 1, - FileFsLabelInformation = 2, - FileFsSizeInformation = 3, - FileFsDeviceInformation = 4, - FileFsAttributeInformation = 5, - FileFsControlInformation = 6, - FileFsFullSizeInformation = 7, - FileFsObjectIdInformation = 8, - FileFsDriverPathInformation = 9, - FileFsVolumeFlagsInformation = 10, - FileFsSectorSizeInformation = 11 -} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; - -typedef struct _FILE_FS_VOLUME_INFORMATION { - LARGE_INTEGER VolumeCreationTime; - ULONG VolumeSerialNumber; - ULONG VolumeLabelLength; - BOOLEAN SupportsObjects; - WCHAR VolumeLabel[1]; -} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; - -typedef struct _FILE_FS_LABEL_INFORMATION { - ULONG VolumeLabelLength; - WCHAR VolumeLabel[1]; -} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION; - -typedef struct _FILE_FS_SIZE_INFORMATION { - LARGE_INTEGER TotalAllocationUnits; - LARGE_INTEGER AvailableAllocationUnits; - ULONG SectorsPerAllocationUnit; - ULONG BytesPerSector; -} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; - -typedef struct _FILE_FS_DEVICE_INFORMATION { - DEVICE_TYPE DeviceType; - ULONG Characteristics; -} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; - -typedef struct _FILE_FS_ATTRIBUTE_INFORMATION { - ULONG FileSystemAttributes; - LONG MaximumComponentNameLength; - ULONG FileSystemNameLength; - WCHAR FileSystemName[1]; -} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; - -typedef struct _FILE_FS_CONTROL_INFORMATION { - LARGE_INTEGER FreeSpaceStartFiltering; - LARGE_INTEGER FreeSpaceThreshold; - LARGE_INTEGER FreeSpaceStopFiltering; - LARGE_INTEGER DefaultQuotaThreshold; - LARGE_INTEGER DefaultQuotaLimit; - ULONG FileSystemControlFlags; -} FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION; - -typedef struct _FILE_FS_FULL_SIZE_INFORMATION { - LARGE_INTEGER TotalAllocationUnits; - LARGE_INTEGER CallerAvailableAllocationUnits; - LARGE_INTEGER ActualAvailableAllocationUnits; - ULONG SectorsPerAllocationUnit; - ULONG BytesPerSector; -} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; - -typedef struct _FILE_FS_OBJECTID_INFORMATION { - UCHAR ObjectId[16]; - UCHAR ExtendedInfo[48]; -} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION; - -typedef struct _FILE_FS_DRIVER_PATH_INFORMATION { - BOOLEAN DriverInPath; - ULONG DriverNameLength; - WCHAR DriverName[1]; -} FILE_FS_DRIVER_PATH_INFORMATION, *PFILE_FS_DRIVER_PATH_INFORMATION; - -typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION { - ULONG Flags; -} FILE_FS_VOLUME_FLAGS_INFORMATION, *PFILE_FS_VOLUME_FLAGS_INFORMATION; - -typedef struct _FILE_FS_SECTOR_SIZE_INFORMATION { - ULONG LogicalBytesPerSector; - ULONG PhysicalBytesPerSectorForAtomicity; - ULONG PhysicalBytesPerSectorForPerformance; - ULONG FileSystemEffectivePhysicalBytesPerSectorForAtomicity; - ULONG Flags; - ULONG ByteOffsetForSectorAlignment; - ULONG ByteOffsetForPartitionAlignment; -} FILE_FS_SECTOR_SIZE_INFORMATION, *PFILE_FS_SECTOR_SIZE_INFORMATION; - -typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION { - LARGE_INTEGER IdleTime; - LARGE_INTEGER KernelTime; - LARGE_INTEGER UserTime; - LARGE_INTEGER DpcTime; - LARGE_INTEGER InterruptTime; - ULONG InterruptCount; -} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION; - -#ifndef SystemProcessorPerformanceInformation -# define SystemProcessorPerformanceInformation 8 -#endif - -#ifndef ProcessConsoleHostProcess -# define ProcessConsoleHostProcess 49 -#endif - -#ifndef FILE_DEVICE_FILE_SYSTEM -# define FILE_DEVICE_FILE_SYSTEM 0x00000009 -#endif - -#ifndef FILE_DEVICE_NETWORK -# define FILE_DEVICE_NETWORK 0x00000012 -#endif - -#ifndef METHOD_BUFFERED -# define METHOD_BUFFERED 0 -#endif - -#ifndef METHOD_IN_DIRECT -# define METHOD_IN_DIRECT 1 -#endif - -#ifndef METHOD_OUT_DIRECT -# define METHOD_OUT_DIRECT 2 -#endif - -#ifndef METHOD_NEITHER -#define METHOD_NEITHER 3 -#endif - -#ifndef METHOD_DIRECT_TO_HARDWARE -# define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT -#endif - -#ifndef METHOD_DIRECT_FROM_HARDWARE -# define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT -#endif - -#ifndef FILE_ANY_ACCESS -# define FILE_ANY_ACCESS 0 -#endif - -#ifndef FILE_SPECIAL_ACCESS -# define FILE_SPECIAL_ACCESS (FILE_ANY_ACCESS) -#endif - -#ifndef FILE_READ_ACCESS -# define FILE_READ_ACCESS 0x0001 -#endif - -#ifndef FILE_WRITE_ACCESS -# define FILE_WRITE_ACCESS 0x0002 -#endif - -#ifndef CTL_CODE -# define CTL_CODE(device_type, function, method, access) \ - (((device_type) << 16) | ((access) << 14) | ((function) << 2) | (method)) -#endif - -#ifndef FSCTL_SET_REPARSE_POINT -# define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, \ - 41, \ - METHOD_BUFFERED, \ - FILE_SPECIAL_ACCESS) -#endif - -#ifndef FSCTL_GET_REPARSE_POINT -# define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, \ - 42, \ - METHOD_BUFFERED, \ - FILE_ANY_ACCESS) -#endif - -#ifndef FSCTL_DELETE_REPARSE_POINT -# define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, \ - 43, \ - METHOD_BUFFERED, \ - FILE_SPECIAL_ACCESS) -#endif - -#ifndef IO_REPARSE_TAG_SYMLINK -# define IO_REPARSE_TAG_SYMLINK (0xA000000CL) -#endif -#ifndef IO_REPARSE_TAG_APPEXECLINK -# define IO_REPARSE_TAG_APPEXECLINK (0x8000001BL) -#endif - -typedef VOID (NTAPI *PIO_APC_ROUTINE) - (PVOID ApcContext, - PIO_STATUS_BLOCK IoStatusBlock, - ULONG Reserved); - -typedef NTSTATUS (NTAPI *sRtlGetVersion) - (PRTL_OSVERSIONINFOW lpVersionInformation); - -typedef ULONG (NTAPI *sRtlNtStatusToDosError) - (NTSTATUS Status); - -typedef NTSTATUS (NTAPI *sNtDeviceIoControlFile) - (HANDLE FileHandle, - HANDLE Event, - PIO_APC_ROUTINE ApcRoutine, - PVOID ApcContext, - PIO_STATUS_BLOCK IoStatusBlock, - ULONG IoControlCode, - PVOID InputBuffer, - ULONG InputBufferLength, - PVOID OutputBuffer, - ULONG OutputBufferLength); - -typedef NTSTATUS (NTAPI *sNtQueryInformationFile) - (HANDLE FileHandle, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FileInformation, - ULONG Length, - FILE_INFORMATION_CLASS FileInformationClass); - -typedef NTSTATUS (NTAPI *sNtSetInformationFile) - (HANDLE FileHandle, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FileInformation, - ULONG Length, - FILE_INFORMATION_CLASS FileInformationClass); - -typedef NTSTATUS (NTAPI *sNtQueryVolumeInformationFile) - (HANDLE FileHandle, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FsInformation, - ULONG Length, - FS_INFORMATION_CLASS FsInformationClass); - -typedef NTSTATUS (NTAPI *sNtQuerySystemInformation) - (UINT SystemInformationClass, - PVOID SystemInformation, - ULONG SystemInformationLength, - PULONG ReturnLength); - -typedef NTSTATUS (NTAPI *sNtQueryDirectoryFile) - (HANDLE FileHandle, - HANDLE Event, - PIO_APC_ROUTINE ApcRoutine, - PVOID ApcContext, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FileInformation, - ULONG Length, - FILE_INFORMATION_CLASS FileInformationClass, - BOOLEAN ReturnSingleEntry, - PUNICODE_STRING FileName, - BOOLEAN RestartScan - ); - -typedef NTSTATUS (NTAPI *sNtQueryInformationProcess) - (HANDLE ProcessHandle, - UINT ProcessInformationClass, - PVOID ProcessInformation, - ULONG Length, - PULONG ReturnLength); - -/* - * Kernel32 headers - */ -#ifndef FILE_SKIP_COMPLETION_PORT_ON_SUCCESS -# define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1 -#endif - -#ifndef FILE_SKIP_SET_EVENT_ON_HANDLE -# define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2 -#endif - -#ifndef SYMBOLIC_LINK_FLAG_DIRECTORY -# define SYMBOLIC_LINK_FLAG_DIRECTORY 0x1 -#endif - -#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) - typedef struct _OVERLAPPED_ENTRY { - ULONG_PTR lpCompletionKey; - LPOVERLAPPED lpOverlapped; - ULONG_PTR Internal; - DWORD dwNumberOfBytesTransferred; - } OVERLAPPED_ENTRY, *LPOVERLAPPED_ENTRY; -#endif - -/* from wincon.h */ -#ifndef ENABLE_INSERT_MODE -# define ENABLE_INSERT_MODE 0x20 -#endif - -#ifndef ENABLE_QUICK_EDIT_MODE -# define ENABLE_QUICK_EDIT_MODE 0x40 -#endif - -#ifndef ENABLE_EXTENDED_FLAGS -# define ENABLE_EXTENDED_FLAGS 0x80 -#endif - -/* from winerror.h */ -#ifndef ERROR_ELEVATION_REQUIRED -# define ERROR_ELEVATION_REQUIRED 740 -#endif - -#ifndef ERROR_SYMLINK_NOT_SUPPORTED -# define ERROR_SYMLINK_NOT_SUPPORTED 1464 -#endif - -#ifndef ERROR_MUI_FILE_NOT_FOUND -# define ERROR_MUI_FILE_NOT_FOUND 15100 -#endif - -#ifndef ERROR_MUI_INVALID_FILE -# define ERROR_MUI_INVALID_FILE 15101 -#endif - -#ifndef ERROR_MUI_INVALID_RC_CONFIG -# define ERROR_MUI_INVALID_RC_CONFIG 15102 -#endif - -#ifndef ERROR_MUI_INVALID_LOCALE_NAME -# define ERROR_MUI_INVALID_LOCALE_NAME 15103 -#endif - -#ifndef ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME -# define ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME 15104 -#endif - -#ifndef ERROR_MUI_FILE_NOT_LOADED -# define ERROR_MUI_FILE_NOT_LOADED 15105 -#endif - -typedef BOOL (WINAPI *sGetQueuedCompletionStatusEx) - (HANDLE CompletionPort, - LPOVERLAPPED_ENTRY lpCompletionPortEntries, - ULONG ulCount, - PULONG ulNumEntriesRemoved, - DWORD dwMilliseconds, - BOOL fAlertable); - -/* from powerbase.h */ -#ifndef DEVICE_NOTIFY_CALLBACK -# define DEVICE_NOTIFY_CALLBACK 2 -#endif - -#ifndef PBT_APMRESUMEAUTOMATIC -# define PBT_APMRESUMEAUTOMATIC 18 -#endif - -#ifndef PBT_APMRESUMESUSPEND -# define PBT_APMRESUMESUSPEND 7 -#endif - -typedef ULONG CALLBACK _DEVICE_NOTIFY_CALLBACK_ROUTINE( - PVOID Context, - ULONG Type, - PVOID Setting -); -typedef _DEVICE_NOTIFY_CALLBACK_ROUTINE* _PDEVICE_NOTIFY_CALLBACK_ROUTINE; - -typedef struct _DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS { - _PDEVICE_NOTIFY_CALLBACK_ROUTINE Callback; - PVOID Context; -} _DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS, *_PDEVICE_NOTIFY_SUBSCRIBE_PARAMETERS; - -typedef PVOID _HPOWERNOTIFY; -typedef _HPOWERNOTIFY *_PHPOWERNOTIFY; - -typedef DWORD (WINAPI *sPowerRegisterSuspendResumeNotification) - (DWORD Flags, - HANDLE Recipient, - _PHPOWERNOTIFY RegistrationHandle); - -/* from Winuser.h */ -typedef VOID (CALLBACK* WINEVENTPROC) - (HWINEVENTHOOK hWinEventHook, - DWORD event, - HWND hwnd, - LONG idObject, - LONG idChild, - DWORD idEventThread, - DWORD dwmsEventTime); - -typedef HWINEVENTHOOK (WINAPI *sSetWinEventHook) - (UINT eventMin, - UINT eventMax, - HMODULE hmodWinEventProc, - WINEVENTPROC lpfnWinEventProc, - DWORD idProcess, - DWORD idThread, - UINT dwflags); - -/* From mstcpip.h */ -typedef struct _TCP_INITIAL_RTO_PARAMETERS { - USHORT Rtt; - UCHAR MaxSynRetransmissions; -} TCP_INITIAL_RTO_PARAMETERS, *PTCP_INITIAL_RTO_PARAMETERS; - -#ifndef TCP_INITIAL_RTO_NO_SYN_RETRANSMISSIONS -# define TCP_INITIAL_RTO_NO_SYN_RETRANSMISSIONS ((UCHAR) -2) -#endif -#ifndef SIO_TCP_INITIAL_RTO -# define SIO_TCP_INITIAL_RTO _WSAIOW(IOC_VENDOR,17) -#endif - -/* Ntdll function pointers */ -extern sRtlGetVersion pRtlGetVersion; -extern sRtlNtStatusToDosError pRtlNtStatusToDosError; -extern sNtDeviceIoControlFile pNtDeviceIoControlFile; -extern sNtQueryInformationFile pNtQueryInformationFile; -extern sNtSetInformationFile pNtSetInformationFile; -extern sNtQueryVolumeInformationFile pNtQueryVolumeInformationFile; -extern sNtQueryDirectoryFile pNtQueryDirectoryFile; -extern sNtQuerySystemInformation pNtQuerySystemInformation; -extern sNtQueryInformationProcess pNtQueryInformationProcess; - -/* Kernel32 function pointers */ -extern sGetQueuedCompletionStatusEx pGetQueuedCompletionStatusEx; - -/* Powrprof.dll function pointer */ -extern sPowerRegisterSuspendResumeNotification pPowerRegisterSuspendResumeNotification; - -/* User32.dll function pointer */ -extern sSetWinEventHook pSetWinEventHook; - -#endif /* UV_WIN_WINAPI_H_ */ diff --git a/libuv/src/win/winsock.c b/libuv/src/win/winsock.c deleted file mode 100644 index 4cf6e6b..0000000 --- a/libuv/src/win/winsock.c +++ /dev/null @@ -1,575 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include - -#include "uv.h" -#include "internal.h" - - -/* Whether there are any non-IFS LSPs stacked on TCP */ -int uv_tcp_non_ifs_lsp_ipv4; -int uv_tcp_non_ifs_lsp_ipv6; - -/* Ip address used to bind to any port at any interface */ -struct sockaddr_in uv_addr_ip4_any_; -struct sockaddr_in6 uv_addr_ip6_any_; - - -/* - * Retrieves the pointer to a winsock extension function. - */ -static BOOL uv_get_extension_function(SOCKET socket, GUID guid, - void **target) { - int result; - DWORD bytes; - - result = WSAIoctl(socket, - SIO_GET_EXTENSION_FUNCTION_POINTER, - &guid, - sizeof(guid), - (void*)target, - sizeof(*target), - &bytes, - NULL, - NULL); - - if (result == SOCKET_ERROR) { - *target = NULL; - return FALSE; - } else { - return TRUE; - } -} - - -BOOL uv_get_acceptex_function(SOCKET socket, LPFN_ACCEPTEX* target) { - const GUID wsaid_acceptex = WSAID_ACCEPTEX; - return uv_get_extension_function(socket, wsaid_acceptex, (void**)target); -} - - -BOOL uv_get_connectex_function(SOCKET socket, LPFN_CONNECTEX* target) { - const GUID wsaid_connectex = WSAID_CONNECTEX; - return uv_get_extension_function(socket, wsaid_connectex, (void**)target); -} - - - -void uv_winsock_init(void) { - WSADATA wsa_data; - int errorno; - SOCKET dummy; - WSAPROTOCOL_INFOW protocol_info; - int opt_len; - - /* Set implicit binding address used by connectEx */ - if (uv_ip4_addr("0.0.0.0", 0, &uv_addr_ip4_any_)) { - abort(); - } - - if (uv_ip6_addr("::", 0, &uv_addr_ip6_any_)) { - abort(); - } - - /* Skip initialization in safe mode without network support */ - if (1 == GetSystemMetrics(SM_CLEANBOOT)) return; - - /* Initialize winsock */ - errorno = WSAStartup(MAKEWORD(2, 2), &wsa_data); - if (errorno != 0) { - uv_fatal_error(errorno, "WSAStartup"); - } - - /* Try to detect non-IFS LSPs */ - uv_tcp_non_ifs_lsp_ipv4 = 1; - dummy = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); - if (dummy != INVALID_SOCKET) { - opt_len = (int) sizeof protocol_info; - if (getsockopt(dummy, - SOL_SOCKET, - SO_PROTOCOL_INFOW, - (char*) &protocol_info, - &opt_len) == 0) { - if (protocol_info.dwServiceFlags1 & XP1_IFS_HANDLES) - uv_tcp_non_ifs_lsp_ipv4 = 0; - } - closesocket(dummy); - } - - /* Try to detect IPV6 support and non-IFS LSPs */ - uv_tcp_non_ifs_lsp_ipv6 = 1; - dummy = socket(AF_INET6, SOCK_STREAM, IPPROTO_IP); - if (dummy != INVALID_SOCKET) { - opt_len = (int) sizeof protocol_info; - if (getsockopt(dummy, - SOL_SOCKET, - SO_PROTOCOL_INFOW, - (char*) &protocol_info, - &opt_len) == 0) { - if (protocol_info.dwServiceFlags1 & XP1_IFS_HANDLES) - uv_tcp_non_ifs_lsp_ipv6 = 0; - } - closesocket(dummy); - } -} - - -int uv_ntstatus_to_winsock_error(NTSTATUS status) { - switch (status) { - case STATUS_SUCCESS: - return ERROR_SUCCESS; - - case STATUS_PENDING: - return ERROR_IO_PENDING; - - case STATUS_INVALID_HANDLE: - case STATUS_OBJECT_TYPE_MISMATCH: - return WSAENOTSOCK; - - case STATUS_INSUFFICIENT_RESOURCES: - case STATUS_PAGEFILE_QUOTA: - case STATUS_COMMITMENT_LIMIT: - case STATUS_WORKING_SET_QUOTA: - case STATUS_NO_MEMORY: - case STATUS_QUOTA_EXCEEDED: - case STATUS_TOO_MANY_PAGING_FILES: - case STATUS_REMOTE_RESOURCES: - return WSAENOBUFS; - - case STATUS_TOO_MANY_ADDRESSES: - case STATUS_SHARING_VIOLATION: - case STATUS_ADDRESS_ALREADY_EXISTS: - return WSAEADDRINUSE; - - case STATUS_LINK_TIMEOUT: - case STATUS_IO_TIMEOUT: - case STATUS_TIMEOUT: - return WSAETIMEDOUT; - - case STATUS_GRACEFUL_DISCONNECT: - return WSAEDISCON; - - case STATUS_REMOTE_DISCONNECT: - case STATUS_CONNECTION_RESET: - case STATUS_LINK_FAILED: - case STATUS_CONNECTION_DISCONNECTED: - case STATUS_PORT_UNREACHABLE: - case STATUS_HOPLIMIT_EXCEEDED: - return WSAECONNRESET; - - case STATUS_LOCAL_DISCONNECT: - case STATUS_TRANSACTION_ABORTED: - case STATUS_CONNECTION_ABORTED: - return WSAECONNABORTED; - - case STATUS_BAD_NETWORK_PATH: - case STATUS_NETWORK_UNREACHABLE: - case STATUS_PROTOCOL_UNREACHABLE: - return WSAENETUNREACH; - - case STATUS_HOST_UNREACHABLE: - return WSAEHOSTUNREACH; - - case STATUS_CANCELLED: - case STATUS_REQUEST_ABORTED: - return WSAEINTR; - - case STATUS_BUFFER_OVERFLOW: - case STATUS_INVALID_BUFFER_SIZE: - return WSAEMSGSIZE; - - case STATUS_BUFFER_TOO_SMALL: - case STATUS_ACCESS_VIOLATION: - return WSAEFAULT; - - case STATUS_DEVICE_NOT_READY: - case STATUS_REQUEST_NOT_ACCEPTED: - return WSAEWOULDBLOCK; - - case STATUS_INVALID_NETWORK_RESPONSE: - case STATUS_NETWORK_BUSY: - case STATUS_NO_SUCH_DEVICE: - case STATUS_NO_SUCH_FILE: - case STATUS_OBJECT_PATH_NOT_FOUND: - case STATUS_OBJECT_NAME_NOT_FOUND: - case STATUS_UNEXPECTED_NETWORK_ERROR: - return WSAENETDOWN; - - case STATUS_INVALID_CONNECTION: - return WSAENOTCONN; - - case STATUS_REMOTE_NOT_LISTENING: - case STATUS_CONNECTION_REFUSED: - return WSAECONNREFUSED; - - case STATUS_PIPE_DISCONNECTED: - return WSAESHUTDOWN; - - case STATUS_CONFLICTING_ADDRESSES: - case STATUS_INVALID_ADDRESS: - case STATUS_INVALID_ADDRESS_COMPONENT: - return WSAEADDRNOTAVAIL; - - case STATUS_NOT_SUPPORTED: - case STATUS_NOT_IMPLEMENTED: - return WSAEOPNOTSUPP; - - case STATUS_ACCESS_DENIED: - return WSAEACCES; - - default: - if ((status & (FACILITY_NTWIN32 << 16)) == (FACILITY_NTWIN32 << 16) && - (status & (ERROR_SEVERITY_ERROR | ERROR_SEVERITY_WARNING))) { - /* It's a windows error that has been previously mapped to an ntstatus - * code. */ - return (DWORD) (status & 0xffff); - } else { - /* The default fallback for unmappable ntstatus codes. */ - return WSAEINVAL; - } - } -} - - -/* - * This function provides a workaround for a bug in the winsock implementation - * of WSARecv. The problem is that when SetFileCompletionNotificationModes is - * used to avoid IOCP notifications of completed reads, WSARecv does not - * reliably indicate whether we can expect a completion package to be posted - * when the receive buffer is smaller than the received datagram. - * - * However it is desirable to use SetFileCompletionNotificationModes because - * it yields a massive performance increase. - * - * This function provides a workaround for that bug, but it only works for the - * specific case that we need it for. E.g. it assumes that the "avoid iocp" - * bit has been set, and supports only overlapped operation. It also requires - * the user to use the default msafd driver, doesn't work when other LSPs are - * stacked on top of it. - */ -int WSAAPI uv_wsarecv_workaround(SOCKET socket, WSABUF* buffers, - DWORD buffer_count, DWORD* bytes, DWORD* flags, WSAOVERLAPPED *overlapped, - LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine) { - NTSTATUS status; - void* apc_context; - IO_STATUS_BLOCK* iosb = (IO_STATUS_BLOCK*) &overlapped->Internal; - AFD_RECV_INFO info; - DWORD error; - - if (overlapped == NULL || completion_routine != NULL) { - WSASetLastError(WSAEINVAL); - return SOCKET_ERROR; - } - - info.BufferArray = buffers; - info.BufferCount = buffer_count; - info.AfdFlags = AFD_OVERLAPPED; - info.TdiFlags = TDI_RECEIVE_NORMAL; - - if (*flags & MSG_PEEK) { - info.TdiFlags |= TDI_RECEIVE_PEEK; - } - - if (*flags & MSG_PARTIAL) { - info.TdiFlags |= TDI_RECEIVE_PARTIAL; - } - - if (!((intptr_t) overlapped->hEvent & 1)) { - apc_context = (void*) overlapped; - } else { - apc_context = NULL; - } - - iosb->Status = STATUS_PENDING; - iosb->Pointer = 0; - - status = pNtDeviceIoControlFile((HANDLE) socket, - overlapped->hEvent, - NULL, - apc_context, - iosb, - IOCTL_AFD_RECEIVE, - &info, - sizeof(info), - NULL, - 0); - - *flags = 0; - *bytes = (DWORD) iosb->Information; - - switch (status) { - case STATUS_SUCCESS: - error = ERROR_SUCCESS; - break; - - case STATUS_PENDING: - error = WSA_IO_PENDING; - break; - - case STATUS_BUFFER_OVERFLOW: - error = WSAEMSGSIZE; - break; - - case STATUS_RECEIVE_EXPEDITED: - error = ERROR_SUCCESS; - *flags = MSG_OOB; - break; - - case STATUS_RECEIVE_PARTIAL_EXPEDITED: - error = ERROR_SUCCESS; - *flags = MSG_PARTIAL | MSG_OOB; - break; - - case STATUS_RECEIVE_PARTIAL: - error = ERROR_SUCCESS; - *flags = MSG_PARTIAL; - break; - - default: - error = uv_ntstatus_to_winsock_error(status); - break; - } - - WSASetLastError(error); - - if (error == ERROR_SUCCESS) { - return 0; - } else { - return SOCKET_ERROR; - } -} - - -/* See description of uv_wsarecv_workaround. */ -int WSAAPI uv_wsarecvfrom_workaround(SOCKET socket, WSABUF* buffers, - DWORD buffer_count, DWORD* bytes, DWORD* flags, struct sockaddr* addr, - int* addr_len, WSAOVERLAPPED *overlapped, - LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine) { - NTSTATUS status; - void* apc_context; - IO_STATUS_BLOCK* iosb = (IO_STATUS_BLOCK*) &overlapped->Internal; - AFD_RECV_DATAGRAM_INFO info; - DWORD error; - - if (overlapped == NULL || addr == NULL || addr_len == NULL || - completion_routine != NULL) { - WSASetLastError(WSAEINVAL); - return SOCKET_ERROR; - } - - info.BufferArray = buffers; - info.BufferCount = buffer_count; - info.AfdFlags = AFD_OVERLAPPED; - info.TdiFlags = TDI_RECEIVE_NORMAL; - info.Address = addr; - info.AddressLength = addr_len; - - if (*flags & MSG_PEEK) { - info.TdiFlags |= TDI_RECEIVE_PEEK; - } - - if (*flags & MSG_PARTIAL) { - info.TdiFlags |= TDI_RECEIVE_PARTIAL; - } - - if (!((intptr_t) overlapped->hEvent & 1)) { - apc_context = (void*) overlapped; - } else { - apc_context = NULL; - } - - iosb->Status = STATUS_PENDING; - iosb->Pointer = 0; - - status = pNtDeviceIoControlFile((HANDLE) socket, - overlapped->hEvent, - NULL, - apc_context, - iosb, - IOCTL_AFD_RECEIVE_DATAGRAM, - &info, - sizeof(info), - NULL, - 0); - - *flags = 0; - *bytes = (DWORD) iosb->Information; - - switch (status) { - case STATUS_SUCCESS: - error = ERROR_SUCCESS; - break; - - case STATUS_PENDING: - error = WSA_IO_PENDING; - break; - - case STATUS_BUFFER_OVERFLOW: - error = WSAEMSGSIZE; - break; - - case STATUS_RECEIVE_EXPEDITED: - error = ERROR_SUCCESS; - *flags = MSG_OOB; - break; - - case STATUS_RECEIVE_PARTIAL_EXPEDITED: - error = ERROR_SUCCESS; - *flags = MSG_PARTIAL | MSG_OOB; - break; - - case STATUS_RECEIVE_PARTIAL: - error = ERROR_SUCCESS; - *flags = MSG_PARTIAL; - break; - - default: - error = uv_ntstatus_to_winsock_error(status); - break; - } - - WSASetLastError(error); - - if (error == ERROR_SUCCESS) { - return 0; - } else { - return SOCKET_ERROR; - } -} - - -int WSAAPI uv_msafd_poll(SOCKET socket, AFD_POLL_INFO* info_in, - AFD_POLL_INFO* info_out, OVERLAPPED* overlapped) { - IO_STATUS_BLOCK iosb; - IO_STATUS_BLOCK* iosb_ptr; - HANDLE event = NULL; - void* apc_context; - NTSTATUS status; - DWORD error; - - if (overlapped != NULL) { - /* Overlapped operation. */ - iosb_ptr = (IO_STATUS_BLOCK*) &overlapped->Internal; - event = overlapped->hEvent; - - /* Do not report iocp completion if hEvent is tagged. */ - if ((uintptr_t) event & 1) { - event = (HANDLE)((uintptr_t) event & ~(uintptr_t) 1); - apc_context = NULL; - } else { - apc_context = overlapped; - } - - } else { - /* Blocking operation. */ - iosb_ptr = &iosb; - event = CreateEvent(NULL, FALSE, FALSE, NULL); - if (event == NULL) { - return SOCKET_ERROR; - } - apc_context = NULL; - } - - iosb_ptr->Status = STATUS_PENDING; - status = pNtDeviceIoControlFile((HANDLE) socket, - event, - NULL, - apc_context, - iosb_ptr, - IOCTL_AFD_POLL, - info_in, - sizeof *info_in, - info_out, - sizeof *info_out); - - if (overlapped == NULL) { - /* If this is a blocking operation, wait for the event to become signaled, - * and then grab the real status from the io status block. */ - if (status == STATUS_PENDING) { - DWORD r = WaitForSingleObject(event, INFINITE); - - if (r == WAIT_FAILED) { - DWORD saved_error = GetLastError(); - CloseHandle(event); - WSASetLastError(saved_error); - return SOCKET_ERROR; - } - - status = iosb.Status; - } - - CloseHandle(event); - } - - switch (status) { - case STATUS_SUCCESS: - error = ERROR_SUCCESS; - break; - - case STATUS_PENDING: - error = WSA_IO_PENDING; - break; - - default: - error = uv_ntstatus_to_winsock_error(status); - break; - } - - WSASetLastError(error); - - if (error == ERROR_SUCCESS) { - return 0; - } else { - return SOCKET_ERROR; - } -} - -int uv__convert_to_localhost_if_unspecified(const struct sockaddr* addr, - struct sockaddr_storage* storage) { - struct sockaddr_in* dest4; - struct sockaddr_in6* dest6; - - if (addr == NULL) - return UV_EINVAL; - - switch (addr->sa_family) { - case AF_INET: - dest4 = (struct sockaddr_in*) storage; - memcpy(dest4, addr, sizeof(*dest4)); - if (dest4->sin_addr.s_addr == 0) - dest4->sin_addr.s_addr = htonl(INADDR_LOOPBACK); - return 0; - case AF_INET6: - dest6 = (struct sockaddr_in6*) storage; - memcpy(dest6, addr, sizeof(*dest6)); - if (memcmp(&dest6->sin6_addr, - &uv_addr_ip6_any_.sin6_addr, - sizeof(uv_addr_ip6_any_.sin6_addr)) == 0) { - struct in6_addr init_sin6_addr = IN6ADDR_LOOPBACK_INIT; - dest6->sin6_addr = init_sin6_addr; - } - return 0; - default: - return UV_EINVAL; - } -} diff --git a/libuv/src/win/winsock.h b/libuv/src/win/winsock.h deleted file mode 100644 index 2af9588..0000000 --- a/libuv/src/win/winsock.h +++ /dev/null @@ -1,201 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef UV_WIN_WINSOCK_H_ -#define UV_WIN_WINSOCK_H_ - -#include -#include -#include -#include -#include - -#include "winapi.h" - - -/* - * MinGW is missing these too - */ -#ifndef SO_UPDATE_CONNECT_CONTEXT -# define SO_UPDATE_CONNECT_CONTEXT 0x7010 -#endif - -#ifndef TCP_KEEPALIVE -# define TCP_KEEPALIVE 3 -#endif - -#ifndef IPV6_V6ONLY -# define IPV6_V6ONLY 27 -#endif - -#ifndef IPV6_HOPLIMIT -# define IPV6_HOPLIMIT 21 -#endif - -#ifndef SIO_BASE_HANDLE -# define SIO_BASE_HANDLE 0x48000022 -#endif - -#ifndef MCAST_JOIN_SOURCE_GROUP -# define MCAST_JOIN_SOURCE_GROUP 45 -#endif - -#ifndef MCAST_LEAVE_SOURCE_GROUP -# define MCAST_LEAVE_SOURCE_GROUP 46 -#endif - -/* - * TDI defines that are only in the DDK. - * We only need receive flags so far. - */ -#ifndef TDI_RECEIVE_NORMAL - #define TDI_RECEIVE_BROADCAST 0x00000004 - #define TDI_RECEIVE_MULTICAST 0x00000008 - #define TDI_RECEIVE_PARTIAL 0x00000010 - #define TDI_RECEIVE_NORMAL 0x00000020 - #define TDI_RECEIVE_EXPEDITED 0x00000040 - #define TDI_RECEIVE_PEEK 0x00000080 - #define TDI_RECEIVE_NO_RESPONSE_EXP 0x00000100 - #define TDI_RECEIVE_COPY_LOOKAHEAD 0x00000200 - #define TDI_RECEIVE_ENTIRE_MESSAGE 0x00000400 - #define TDI_RECEIVE_AT_DISPATCH_LEVEL 0x00000800 - #define TDI_RECEIVE_CONTROL_INFO 0x00001000 - #define TDI_RECEIVE_FORCE_INDICATION 0x00002000 - #define TDI_RECEIVE_NO_PUSH 0x00004000 -#endif - -/* - * The "Auxiliary Function Driver" is the windows kernel-mode driver that does - * TCP, UDP etc. Winsock is just a layer that dispatches requests to it. - * Having these definitions allows us to bypass winsock and make an AFD kernel - * call directly, avoiding a bug in winsock's recvfrom implementation. - */ - -#define AFD_NO_FAST_IO 0x00000001 -#define AFD_OVERLAPPED 0x00000002 -#define AFD_IMMEDIATE 0x00000004 - -#define AFD_POLL_RECEIVE_BIT 0 -#define AFD_POLL_RECEIVE (1 << AFD_POLL_RECEIVE_BIT) -#define AFD_POLL_RECEIVE_EXPEDITED_BIT 1 -#define AFD_POLL_RECEIVE_EXPEDITED (1 << AFD_POLL_RECEIVE_EXPEDITED_BIT) -#define AFD_POLL_SEND_BIT 2 -#define AFD_POLL_SEND (1 << AFD_POLL_SEND_BIT) -#define AFD_POLL_DISCONNECT_BIT 3 -#define AFD_POLL_DISCONNECT (1 << AFD_POLL_DISCONNECT_BIT) -#define AFD_POLL_ABORT_BIT 4 -#define AFD_POLL_ABORT (1 << AFD_POLL_ABORT_BIT) -#define AFD_POLL_LOCAL_CLOSE_BIT 5 -#define AFD_POLL_LOCAL_CLOSE (1 << AFD_POLL_LOCAL_CLOSE_BIT) -#define AFD_POLL_CONNECT_BIT 6 -#define AFD_POLL_CONNECT (1 << AFD_POLL_CONNECT_BIT) -#define AFD_POLL_ACCEPT_BIT 7 -#define AFD_POLL_ACCEPT (1 << AFD_POLL_ACCEPT_BIT) -#define AFD_POLL_CONNECT_FAIL_BIT 8 -#define AFD_POLL_CONNECT_FAIL (1 << AFD_POLL_CONNECT_FAIL_BIT) -#define AFD_POLL_QOS_BIT 9 -#define AFD_POLL_QOS (1 << AFD_POLL_QOS_BIT) -#define AFD_POLL_GROUP_QOS_BIT 10 -#define AFD_POLL_GROUP_QOS (1 << AFD_POLL_GROUP_QOS_BIT) - -#define AFD_NUM_POLL_EVENTS 11 -#define AFD_POLL_ALL ((1 << AFD_NUM_POLL_EVENTS) - 1) - -typedef struct _AFD_RECV_DATAGRAM_INFO { - LPWSABUF BufferArray; - ULONG BufferCount; - ULONG AfdFlags; - ULONG TdiFlags; - struct sockaddr* Address; - int* AddressLength; -} AFD_RECV_DATAGRAM_INFO, *PAFD_RECV_DATAGRAM_INFO; - -typedef struct _AFD_RECV_INFO { - LPWSABUF BufferArray; - ULONG BufferCount; - ULONG AfdFlags; - ULONG TdiFlags; -} AFD_RECV_INFO, *PAFD_RECV_INFO; - - -#define _AFD_CONTROL_CODE(operation, method) \ - ((FSCTL_AFD_BASE) << 12 | (operation << 2) | method) - -#define FSCTL_AFD_BASE FILE_DEVICE_NETWORK - -#define AFD_RECEIVE 5 -#define AFD_RECEIVE_DATAGRAM 6 -#define AFD_POLL 9 - -#define IOCTL_AFD_RECEIVE \ - _AFD_CONTROL_CODE(AFD_RECEIVE, METHOD_NEITHER) - -#define IOCTL_AFD_RECEIVE_DATAGRAM \ - _AFD_CONTROL_CODE(AFD_RECEIVE_DATAGRAM, METHOD_NEITHER) - -#define IOCTL_AFD_POLL \ - _AFD_CONTROL_CODE(AFD_POLL, METHOD_BUFFERED) - -#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) -typedef struct _IP_ADAPTER_UNICAST_ADDRESS_XP { - /* FIXME: __C89_NAMELESS was removed */ - /* __C89_NAMELESS */ union { - ULONGLONG Alignment; - /* __C89_NAMELESS */ struct { - ULONG Length; - DWORD Flags; - }; - }; - struct _IP_ADAPTER_UNICAST_ADDRESS_XP *Next; - SOCKET_ADDRESS Address; - IP_PREFIX_ORIGIN PrefixOrigin; - IP_SUFFIX_ORIGIN SuffixOrigin; - IP_DAD_STATE DadState; - ULONG ValidLifetime; - ULONG PreferredLifetime; - ULONG LeaseLifetime; -} IP_ADAPTER_UNICAST_ADDRESS_XP,*PIP_ADAPTER_UNICAST_ADDRESS_XP; - -typedef struct _IP_ADAPTER_UNICAST_ADDRESS_LH { - union { - ULONGLONG Alignment; - struct { - ULONG Length; - DWORD Flags; - }; - }; - struct _IP_ADAPTER_UNICAST_ADDRESS_LH *Next; - SOCKET_ADDRESS Address; - IP_PREFIX_ORIGIN PrefixOrigin; - IP_SUFFIX_ORIGIN SuffixOrigin; - IP_DAD_STATE DadState; - ULONG ValidLifetime; - ULONG PreferredLifetime; - ULONG LeaseLifetime; - UINT8 OnLinkPrefixLength; -} IP_ADAPTER_UNICAST_ADDRESS_LH,*PIP_ADAPTER_UNICAST_ADDRESS_LH; - -#endif - -int uv__convert_to_localhost_if_unspecified(const struct sockaddr* addr, - struct sockaddr_storage* storage); - -#endif /* UV_WIN_WINSOCK_H_ */ diff --git a/libuv/test/benchmark-async-pummel.c b/libuv/test/benchmark-async-pummel.c deleted file mode 100644 index 49660a6..0000000 --- a/libuv/test/benchmark-async-pummel.c +++ /dev/null @@ -1,119 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" -#include "uv.h" - -#include -#include - -#define NUM_PINGS (1000 * 1000) -#define ACCESS_ONCE(type, var) (*(volatile type*) &(var)) - -static unsigned int callbacks; -static volatile int done; - -static const char running[] = "running"; -static const char stop[] = "stop"; -static const char stopped[] = "stopped"; - - -static void async_cb(uv_async_t* handle) { - if (++callbacks == NUM_PINGS) { - /* Tell the pummel thread to stop. */ - ACCESS_ONCE(const char*, handle->data) = stop; - - /* Wait for the pummel thread to acknowledge that it has stoppped. */ - while (ACCESS_ONCE(const char*, handle->data) != stopped) - uv_sleep(0); - - uv_close((uv_handle_t*) handle, NULL); - } -} - - -static void pummel(void* arg) { - uv_async_t* handle = (uv_async_t*) arg; - - while (ACCESS_ONCE(const char*, handle->data) == running) - uv_async_send(handle); - - /* Acknowledge that we've seen handle->data change. */ - ACCESS_ONCE(const char*, handle->data) = stopped; -} - - -static int test_async_pummel(int nthreads) { - uv_thread_t* tids; - uv_async_t handle; - uint64_t time; - int i; - - tids = calloc(nthreads, sizeof(tids[0])); - ASSERT_NOT_NULL(tids); - - ASSERT(0 == 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)); - - time = uv_hrtime(); - - ASSERT(0 == 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)); - - printf("async_pummel_%d: %s callbacks in %.2f seconds (%s/sec)\n", - nthreads, - fmt(callbacks), - time / 1e9, - fmt(callbacks / (time / 1e9))); - - free(tids); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -BENCHMARK_IMPL(async_pummel_1) { - return test_async_pummel(1); -} - - -BENCHMARK_IMPL(async_pummel_2) { - return test_async_pummel(2); -} - - -BENCHMARK_IMPL(async_pummel_4) { - return test_async_pummel(4); -} - - -BENCHMARK_IMPL(async_pummel_8) { - return test_async_pummel(8); -} diff --git a/libuv/test/benchmark-async.c b/libuv/test/benchmark-async.c deleted file mode 100644 index 5167ecb..0000000 --- a/libuv/test/benchmark-async.c +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" -#include "uv.h" - -#include -#include - -#define NUM_PINGS (1000 * 1000) - -struct ctx { - uv_loop_t loop; - uv_thread_t thread; - uv_async_t main_async; /* wake up main thread */ - uv_async_t worker_async; /* wake up worker */ - unsigned int nthreads; - unsigned int main_sent; - unsigned int main_seen; - unsigned int worker_sent; - unsigned int worker_seen; -}; - - -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)); - ctx->worker_sent++; - ctx->worker_seen++; - - if (ctx->worker_sent >= NUM_PINGS) - uv_close((uv_handle_t*) &ctx->worker_async, NULL); -} - - -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)); - ctx->main_sent++; - ctx->main_seen++; - - if (ctx->main_sent >= NUM_PINGS) - uv_close((uv_handle_t*) &ctx->main_async, NULL); -} - - -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)); - uv_loop_close(&ctx->loop); -} - - -static int test_async(int nthreads) { - struct ctx* threads; - struct ctx* ctx; - uint64_t time; - int i; - - threads = calloc(nthreads, sizeof(threads[0])); - ASSERT_NOT_NULL(threads); - - 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)); - } - - time = uv_hrtime(); - - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - for (i = 0; i < nthreads; i++) - ASSERT(0 == 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); - } - - printf("async%d: %.2f sec (%s/sec)\n", - nthreads, - time / 1e9, - fmt(NUM_PINGS / (time / 1e9))); - - free(threads); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -BENCHMARK_IMPL(async1) { - return test_async(1); -} - - -BENCHMARK_IMPL(async2) { - return test_async(2); -} - - -BENCHMARK_IMPL(async4) { - return test_async(4); -} - - -BENCHMARK_IMPL(async8) { - return test_async(8); -} diff --git a/libuv/test/benchmark-fs-stat.c b/libuv/test/benchmark-fs-stat.c deleted file mode 100644 index 32d2589..0000000 --- a/libuv/test/benchmark-fs-stat.c +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" -#include "uv.h" - -#include -#include - -#define NUM_SYNC_REQS (10 * 1e5) -#define NUM_ASYNC_REQS (1 * (int) 1e5) -#define MAX_CONCURRENT_REQS 32 - -#define sync_stat(req, path) \ - do { \ - uv_fs_stat(NULL, (req), (path), NULL); \ - uv_fs_req_cleanup((req)); \ - } \ - while (0) - -struct async_req { - const char* path; - uv_fs_t fs_req; - int* count; -}; - - -static void warmup(const char* path) { - uv_fs_t reqs[MAX_CONCURRENT_REQS]; - unsigned int i; - - /* warm up the thread pool */ - for (i = 0; i < ARRAY_SIZE(reqs); i++) - uv_fs_stat(uv_default_loop(), reqs + i, path, uv_fs_req_cleanup); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - /* warm up the OS dirent cache */ - for (i = 0; i < 16; i++) - sync_stat(reqs + 0, path); -} - - -static void sync_bench(const char* path) { - uint64_t before; - uint64_t after; - uv_fs_t req; - int i; - - /* do the sync benchmark */ - before = uv_hrtime(); - - for (i = 0; i < NUM_SYNC_REQS; i++) - sync_stat(&req, path); - - after = uv_hrtime(); - - printf("%s stats (sync): %.2fs (%s/s)\n", - fmt(1.0 * NUM_SYNC_REQS), - (after - before) / 1e9, - fmt((1.0 * NUM_SYNC_REQS) / ((after - before) / 1e9))); - fflush(stdout); -} - - -static void stat_cb(uv_fs_t* fs_req) { - struct async_req* req = container_of(fs_req, struct async_req, fs_req); - uv_fs_req_cleanup(&req->fs_req); - if (*req->count == 0) return; - uv_fs_stat(uv_default_loop(), &req->fs_req, req->path, stat_cb); - (*req->count)--; -} - - -static void async_bench(const char* path) { - struct async_req reqs[MAX_CONCURRENT_REQS]; - struct async_req* req; - uint64_t before; - uint64_t after; - int count; - int i; - - for (i = 1; i <= MAX_CONCURRENT_REQS; i++) { - count = NUM_ASYNC_REQS; - - for (req = reqs; req < reqs + i; req++) { - req->path = path; - req->count = &count; - uv_fs_stat(uv_default_loop(), &req->fs_req, req->path, stat_cb); - } - - before = uv_hrtime(); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - after = uv_hrtime(); - - printf("%s stats (%d concurrent): %.2fs (%s/s)\n", - fmt(1.0 * NUM_ASYNC_REQS), - i, - (after - before) / 1e9, - fmt((1.0 * NUM_ASYNC_REQS) / ((after - before) / 1e9))); - fflush(stdout); - } -} - - -/* This benchmark aims to measure the overhead of doing I/O syscalls from - * the thread pool. The stat() syscall was chosen because its results are - * easy for the operating system to cache, taking the actual I/O overhead - * out of the equation. - */ -BENCHMARK_IMPL(fs_stat) { - const char path[] = "."; - warmup(path); - sync_bench(path); - async_bench(path); - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/benchmark-getaddrinfo.c b/libuv/test/benchmark-getaddrinfo.c deleted file mode 100644 index 1dbc23d..0000000 --- a/libuv/test/benchmark-getaddrinfo.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - -#define CONCURRENT_CALLS 10 -#define TOTAL_CALLS 10000 - -static const char* name = "localhost"; - -static uv_loop_t* loop; - -static uv_getaddrinfo_t handles[CONCURRENT_CALLS]; - -static int calls_initiated = 0; -static int calls_completed = 0; -static int64_t start_time; -static int64_t end_time; - - -static void getaddrinfo_initiate(uv_getaddrinfo_t* handle); - - -static void getaddrinfo_cb(uv_getaddrinfo_t* handle, int status, - struct addrinfo* res) { - ASSERT(status == 0); - calls_completed++; - if (calls_initiated < TOTAL_CALLS) { - getaddrinfo_initiate(handle); - } - - uv_freeaddrinfo(res); -} - - -static void getaddrinfo_initiate(uv_getaddrinfo_t* handle) { - int r; - - calls_initiated++; - - r = uv_getaddrinfo(loop, handle, &getaddrinfo_cb, name, NULL, NULL); - ASSERT(r == 0); -} - - -BENCHMARK_IMPL(getaddrinfo) { - int i; - - loop = uv_default_loop(); - - uv_update_time(loop); - start_time = uv_now(loop); - - for (i = 0; i < CONCURRENT_CALLS; i++) { - getaddrinfo_initiate(&handles[i]); - } - - uv_run(loop, UV_RUN_DEFAULT); - - uv_update_time(loop); - end_time = uv_now(loop); - - ASSERT(calls_initiated == TOTAL_CALLS); - ASSERT(calls_completed == TOTAL_CALLS); - - fprintf(stderr, "getaddrinfo: %.0f req/s\n", - (double) calls_completed / (double) (end_time - start_time) * 1000.0); - fflush(stderr); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/benchmark-list.h b/libuv/test/benchmark-list.h deleted file mode 100644 index 29e44c3..0000000 --- a/libuv/test/benchmark-list.h +++ /dev/null @@ -1,164 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -BENCHMARK_DECLARE (sizes) -BENCHMARK_DECLARE (loop_count) -BENCHMARK_DECLARE (loop_count_timed) -BENCHMARK_DECLARE (ping_pongs) -BENCHMARK_DECLARE (ping_udp) -BENCHMARK_DECLARE (tcp_write_batch) -BENCHMARK_DECLARE (tcp4_pound_100) -BENCHMARK_DECLARE (tcp4_pound_1000) -BENCHMARK_DECLARE (pipe_pound_100) -BENCHMARK_DECLARE (pipe_pound_1000) -BENCHMARK_DECLARE (tcp_pump100_client) -BENCHMARK_DECLARE (tcp_pump1_client) -BENCHMARK_DECLARE (pipe_pump100_client) -BENCHMARK_DECLARE (pipe_pump1_client) - -BENCHMARK_DECLARE (tcp_multi_accept2) -BENCHMARK_DECLARE (tcp_multi_accept4) -BENCHMARK_DECLARE (tcp_multi_accept8) - -/* Run until X packets have been sent/received. */ -BENCHMARK_DECLARE (udp_pummel_1v1) -BENCHMARK_DECLARE (udp_pummel_1v10) -BENCHMARK_DECLARE (udp_pummel_1v100) -BENCHMARK_DECLARE (udp_pummel_1v1000) -BENCHMARK_DECLARE (udp_pummel_10v10) -BENCHMARK_DECLARE (udp_pummel_10v100) -BENCHMARK_DECLARE (udp_pummel_10v1000) -BENCHMARK_DECLARE (udp_pummel_100v100) -BENCHMARK_DECLARE (udp_pummel_100v1000) -BENCHMARK_DECLARE (udp_pummel_1000v1000) - -/* Run until X seconds have elapsed. */ -BENCHMARK_DECLARE (udp_timed_pummel_1v1) -BENCHMARK_DECLARE (udp_timed_pummel_1v10) -BENCHMARK_DECLARE (udp_timed_pummel_1v100) -BENCHMARK_DECLARE (udp_timed_pummel_1v1000) -BENCHMARK_DECLARE (udp_timed_pummel_10v10) -BENCHMARK_DECLARE (udp_timed_pummel_10v100) -BENCHMARK_DECLARE (udp_timed_pummel_10v1000) -BENCHMARK_DECLARE (udp_timed_pummel_100v100) -BENCHMARK_DECLARE (udp_timed_pummel_100v1000) -BENCHMARK_DECLARE (udp_timed_pummel_1000v1000) - -BENCHMARK_DECLARE (getaddrinfo) -BENCHMARK_DECLARE (fs_stat) -BENCHMARK_DECLARE (async1) -BENCHMARK_DECLARE (async2) -BENCHMARK_DECLARE (async4) -BENCHMARK_DECLARE (async8) -BENCHMARK_DECLARE (async_pummel_1) -BENCHMARK_DECLARE (async_pummel_2) -BENCHMARK_DECLARE (async_pummel_4) -BENCHMARK_DECLARE (async_pummel_8) -BENCHMARK_DECLARE (spawn) -BENCHMARK_DECLARE (thread_create) -BENCHMARK_DECLARE (million_async) -BENCHMARK_DECLARE (million_timers) -HELPER_DECLARE (tcp4_blackhole_server) -HELPER_DECLARE (tcp_pump_server) -HELPER_DECLARE (pipe_pump_server) -HELPER_DECLARE (tcp4_echo_server) -HELPER_DECLARE (pipe_echo_server) -HELPER_DECLARE (dns_server) - -TASK_LIST_START - BENCHMARK_ENTRY (sizes) - BENCHMARK_ENTRY (loop_count) - BENCHMARK_ENTRY (loop_count_timed) - - BENCHMARK_ENTRY (ping_pongs) - BENCHMARK_HELPER (ping_pongs, tcp4_echo_server) - - BENCHMARK_ENTRY (tcp_write_batch) - BENCHMARK_HELPER (tcp_write_batch, tcp4_blackhole_server) - - BENCHMARK_ENTRY (tcp_pump100_client) - BENCHMARK_HELPER (tcp_pump100_client, tcp_pump_server) - - BENCHMARK_ENTRY (tcp_pump1_client) - BENCHMARK_HELPER (tcp_pump1_client, tcp_pump_server) - - BENCHMARK_ENTRY (tcp4_pound_100) - BENCHMARK_HELPER (tcp4_pound_100, tcp4_echo_server) - - BENCHMARK_ENTRY (tcp4_pound_1000) - BENCHMARK_HELPER (tcp4_pound_1000, tcp4_echo_server) - - BENCHMARK_ENTRY (pipe_pump100_client) - BENCHMARK_HELPER (pipe_pump100_client, pipe_pump_server) - - BENCHMARK_ENTRY (pipe_pump1_client) - BENCHMARK_HELPER (pipe_pump1_client, pipe_pump_server) - - BENCHMARK_ENTRY (pipe_pound_100) - BENCHMARK_HELPER (pipe_pound_100, pipe_echo_server) - - BENCHMARK_ENTRY (pipe_pound_1000) - BENCHMARK_HELPER (pipe_pound_1000, pipe_echo_server) - - BENCHMARK_ENTRY (tcp_multi_accept2) - BENCHMARK_ENTRY (tcp_multi_accept4) - BENCHMARK_ENTRY (tcp_multi_accept8) - - BENCHMARK_ENTRY (udp_pummel_1v1) - BENCHMARK_ENTRY (udp_pummel_1v10) - BENCHMARK_ENTRY (udp_pummel_1v100) - BENCHMARK_ENTRY (udp_pummel_1v1000) - BENCHMARK_ENTRY (udp_pummel_10v10) - BENCHMARK_ENTRY (udp_pummel_10v100) - BENCHMARK_ENTRY (udp_pummel_10v1000) - BENCHMARK_ENTRY (udp_pummel_100v100) - BENCHMARK_ENTRY (udp_pummel_100v1000) - BENCHMARK_ENTRY (udp_pummel_1000v1000) - - BENCHMARK_ENTRY (udp_timed_pummel_1v1) - BENCHMARK_ENTRY (udp_timed_pummel_1v10) - BENCHMARK_ENTRY (udp_timed_pummel_1v100) - BENCHMARK_ENTRY (udp_timed_pummel_1v1000) - BENCHMARK_ENTRY (udp_timed_pummel_10v10) - BENCHMARK_ENTRY (udp_timed_pummel_10v100) - BENCHMARK_ENTRY (udp_timed_pummel_10v1000) - BENCHMARK_ENTRY (udp_timed_pummel_100v100) - BENCHMARK_ENTRY (udp_timed_pummel_100v1000) - BENCHMARK_ENTRY (udp_timed_pummel_1000v1000) - - BENCHMARK_ENTRY (getaddrinfo) - - BENCHMARK_ENTRY (fs_stat) - - BENCHMARK_ENTRY (async1) - BENCHMARK_ENTRY (async2) - BENCHMARK_ENTRY (async4) - BENCHMARK_ENTRY (async8) - BENCHMARK_ENTRY (async_pummel_1) - BENCHMARK_ENTRY (async_pummel_2) - BENCHMARK_ENTRY (async_pummel_4) - BENCHMARK_ENTRY (async_pummel_8) - - BENCHMARK_ENTRY (spawn) - BENCHMARK_ENTRY (thread_create) - BENCHMARK_ENTRY (million_async) - BENCHMARK_ENTRY (million_timers) -TASK_LIST_END diff --git a/libuv/test/benchmark-loop-count.c b/libuv/test/benchmark-loop-count.c deleted file mode 100644 index 970a94c..0000000 --- a/libuv/test/benchmark-loop-count.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" -#include "uv.h" - -#include -#include - -#define NUM_TICKS (2 * 1000 * 1000) - -static unsigned long ticks; -static uv_idle_t idle_handle; -static uv_timer_t timer_handle; - - -static void idle_cb(uv_idle_t* handle) { - if (++ticks == NUM_TICKS) - uv_idle_stop(handle); -} - - -static void idle2_cb(uv_idle_t* handle) { - ticks++; -} - - -static void timer_cb(uv_timer_t* handle) { - uv_idle_stop(&idle_handle); - uv_timer_stop(&timer_handle); -} - - -BENCHMARK_IMPL(loop_count) { - uv_loop_t* loop = uv_default_loop(); - uint64_t ns; - - uv_idle_init(loop, &idle_handle); - uv_idle_start(&idle_handle, idle_cb); - - ns = uv_hrtime(); - uv_run(loop, UV_RUN_DEFAULT); - ns = uv_hrtime() - ns; - - ASSERT(ticks == NUM_TICKS); - - fprintf(stderr, "loop_count: %d ticks in %.2fs (%.0f/s)\n", - NUM_TICKS, - ns / 1e9, - NUM_TICKS / (ns / 1e9)); - fflush(stderr); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -BENCHMARK_IMPL(loop_count_timed) { - uv_loop_t* loop = uv_default_loop(); - - uv_idle_init(loop, &idle_handle); - uv_idle_start(&idle_handle, idle2_cb); - - uv_timer_init(loop, &timer_handle); - uv_timer_start(&timer_handle, timer_cb, 5000, 0); - - uv_run(loop, UV_RUN_DEFAULT); - - fprintf(stderr, "loop_count: %lu ticks (%.0f ticks/s)\n", ticks, ticks / 5.0); - fflush(stderr); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/benchmark-million-async.c b/libuv/test/benchmark-million-async.c deleted file mode 100644 index 937a12f..0000000 --- a/libuv/test/benchmark-million-async.c +++ /dev/null @@ -1,112 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" -#include "uv.h" - -struct async_container { - unsigned async_events; - unsigned handles_seen; - uv_async_t async_handles[1024 * 1024]; -}; - -static volatile int done; -static uv_thread_t thread_id; -static struct async_container* container; - - -static unsigned fastrand(void) { - static unsigned g = 0; - g = g * 214013 + 2531011; - return g; -} - - -static void thread_cb(void* arg) { - unsigned i; - - while (done == 0) { - i = fastrand() % ARRAY_SIZE(container->async_handles); - uv_async_send(container->async_handles + i); - } -} - - -static void async_cb(uv_async_t* handle) { - container->async_events++; - handle->data = handle; -} - - -static void timer_cb(uv_timer_t* handle) { - unsigned i; - - done = 1; - ASSERT(0 == uv_thread_join(&thread_id)); - - for (i = 0; i < ARRAY_SIZE(container->async_handles); i++) { - uv_async_t* handle = container->async_handles + i; - - if (handle->data != NULL) - container->handles_seen++; - - uv_close((uv_handle_t*) handle, NULL); - } - - uv_close((uv_handle_t*) handle, NULL); -} - - -BENCHMARK_IMPL(million_async) { - uv_timer_t timer_handle; - uv_async_t* handle; - uv_loop_t* loop; - int timeout; - unsigned i; - - loop = uv_default_loop(); - timeout = 5000; - - container = malloc(sizeof(*container)); - ASSERT_NOT_NULL(container); - container->async_events = 0; - container->handles_seen = 0; - - for (i = 0; i < ARRAY_SIZE(container->async_handles); i++) { - handle = container->async_handles + i; - ASSERT(0 == 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)); - printf("%s async events in %.1f seconds (%s/s, %s unique handles seen)\n", - fmt(container->async_events), - timeout / 1000., - fmt(container->async_events / (timeout / 1000.)), - fmt(container->handles_seen)); - free(container); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/benchmark-million-timers.c b/libuv/test/benchmark-million-timers.c deleted file mode 100644 index ef25c20..0000000 --- a/libuv/test/benchmark-million-timers.c +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" -#include "uv.h" - -#define NUM_TIMERS (10 * 1000 * 1000) - -static int timer_cb_called; -static int close_cb_called; - - -static void timer_cb(uv_timer_t* handle) { - timer_cb_called++; -} - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - - -BENCHMARK_IMPL(million_timers) { - uv_timer_t* timers; - uv_loop_t* loop; - uint64_t before_all; - uint64_t before_run; - uint64_t after_run; - uint64_t after_all; - int timeout; - int i; - - timers = malloc(NUM_TIMERS * sizeof(timers[0])); - ASSERT_NOT_NULL(timers); - - loop = uv_default_loop(); - timeout = 0; - - 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)); - } - - before_run = uv_hrtime(); - ASSERT(0 == 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)); - after_all = uv_hrtime(); - - ASSERT(timer_cb_called == NUM_TIMERS); - ASSERT(close_cb_called == NUM_TIMERS); - free(timers); - - fprintf(stderr, "%.2f seconds total\n", (after_all - before_all) / 1e9); - fprintf(stderr, "%.2f seconds init\n", (before_run - before_all) / 1e9); - fprintf(stderr, "%.2f seconds dispatch\n", (after_run - before_run) / 1e9); - fprintf(stderr, "%.2f seconds cleanup\n", (after_all - after_run) / 1e9); - fflush(stderr); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/benchmark-multi-accept.c b/libuv/test/benchmark-multi-accept.c deleted file mode 100644 index 86b7da5..0000000 --- a/libuv/test/benchmark-multi-accept.c +++ /dev/null @@ -1,451 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" -#include "uv.h" - -#define IPC_PIPE_NAME TEST_PIPENAME -#define NUM_CONNECTS (250 * 1000) - -union stream_handle { - uv_pipe_t pipe; - uv_tcp_t tcp; -}; - -/* Use as (uv_stream_t *) &handle_storage -- it's kind of clunky but it - * avoids aliasing warnings. - */ -typedef unsigned char handle_storage_t[sizeof(union stream_handle)]; - -/* Used for passing around the listen handle, not part of the benchmark proper. - * We have an overabundance of server types here. It works like this: - * - * 1. The main thread starts an IPC pipe server. - * 2. The worker threads connect to the IPC server and obtain a listen handle. - * 3. The worker threads start accepting requests on the listen handle. - * 4. The main thread starts connecting repeatedly. - * - * Step #4 should perhaps be farmed out over several threads. - */ -struct ipc_server_ctx { - handle_storage_t server_handle; - unsigned int num_connects; - uv_pipe_t ipc_pipe; -}; - -struct ipc_peer_ctx { - handle_storage_t peer_handle; - uv_write_t write_req; -}; - -struct ipc_client_ctx { - uv_connect_t connect_req; - uv_stream_t* server_handle; - uv_pipe_t ipc_pipe; - char scratch[16]; -}; - -/* Used in the actual benchmark. */ -struct server_ctx { - handle_storage_t server_handle; - unsigned int num_connects; - uv_async_t async_handle; - uv_thread_t thread_id; - uv_sem_t semaphore; -}; - -struct client_ctx { - handle_storage_t client_handle; - unsigned int num_connects; - uv_connect_t connect_req; - uv_idle_t idle_handle; -}; - -static void ipc_connection_cb(uv_stream_t* ipc_pipe, int status); -static void ipc_write_cb(uv_write_t* req, int status); -static void ipc_close_cb(uv_handle_t* handle); -static void ipc_connect_cb(uv_connect_t* req, int status); -static void ipc_read_cb(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf); -static void ipc_alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf); - -static void sv_async_cb(uv_async_t* handle); -static void sv_connection_cb(uv_stream_t* server_handle, int status); -static void sv_read_cb(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf); -static void sv_alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf); - -static void cl_connect_cb(uv_connect_t* req, int status); -static void cl_idle_cb(uv_idle_t* handle); -static void cl_close_cb(uv_handle_t* handle); - -static struct sockaddr_in listen_addr; - - -static void ipc_connection_cb(uv_stream_t* ipc_pipe, int status) { - struct ipc_server_ctx* sc; - struct ipc_peer_ctx* pc; - uv_loop_t* loop; - uv_buf_t buf; - - loop = ipc_pipe->loop; - buf = uv_buf_init("PING", 4); - sc = container_of(ipc_pipe, struct ipc_server_ctx, ipc_pipe); - pc = calloc(1, sizeof(*pc)); - ASSERT_NOT_NULL(pc); - - if (ipc_pipe->type == UV_TCP) - ASSERT(0 == 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)); - 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)); - - if (--sc->num_connects == 0) - uv_close((uv_handle_t*) ipc_pipe, NULL); -} - - -static void ipc_write_cb(uv_write_t* req, int status) { - struct ipc_peer_ctx* ctx; - ctx = container_of(req, struct ipc_peer_ctx, write_req); - uv_close((uv_handle_t*) &ctx->peer_handle, ipc_close_cb); -} - - -static void ipc_close_cb(uv_handle_t* handle) { - struct ipc_peer_ctx* ctx; - ctx = container_of(handle, struct ipc_peer_ctx, peer_handle); - free(ctx); -} - - -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)); -} - - -static void ipc_alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - struct ipc_client_ctx* ctx; - ctx = container_of(handle, struct ipc_client_ctx, ipc_pipe); - buf->base = ctx->scratch; - buf->len = sizeof(ctx->scratch); -} - - -static void ipc_read_cb(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - struct ipc_client_ctx* ctx; - uv_loop_t* loop; - uv_handle_type type; - uv_pipe_t* ipc_pipe; - - ipc_pipe = (uv_pipe_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)); - type = uv_pipe_pending_type(ipc_pipe); - if (type == UV_TCP) - ASSERT(0 == 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)); - else - ASSERT(0); - - ASSERT(0 == uv_accept(handle, ctx->server_handle)); - uv_close((uv_handle_t*) &ctx->ipc_pipe, NULL); -} - - -/* Set up an IPC pipe server that hands out listen sockets to the worker - * threads. It's kind of cumbersome for such a simple operation, maybe we - * should revive uv_import() and uv_export(). - */ -static void send_listen_handles(uv_handle_type type, - unsigned int num_servers, - struct server_ctx* servers) { - struct ipc_server_ctx ctx; - uv_loop_t* loop; - unsigned int i; - - loop = uv_default_loop(); - 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)); - } - else - ASSERT(0); - /* We need to initialize this pipe with ipc=0 - this is not a uv_pipe we'll - * be sending handles over, it's just for listening for new connections. - * 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)); - - for (i = 0; i < num_servers; i++) - uv_sem_post(&servers[i].semaphore); - - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - uv_close((uv_handle_t*) &ctx.server_handle, NULL); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - - for (i = 0; i < num_servers; i++) - uv_sem_wait(&servers[i].semaphore); -} - - -static void get_listen_handle(uv_loop_t* loop, uv_stream_t* server_handle) { - struct ipc_client_ctx ctx; - - ctx.server_handle = server_handle; - ctx.server_handle->data = "server handle"; - - ASSERT(0 == 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)); -} - - -static void server_cb(void *arg) { - struct server_ctx *ctx; - uv_loop_t loop; - - ctx = arg; - ASSERT(0 == uv_loop_init(&loop)); - - ASSERT(0 == 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. */ - uv_sem_wait(&ctx->semaphore); - get_listen_handle(&loop, (uv_stream_t*) &ctx->server_handle); - 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)); - - uv_loop_close(&loop); -} - - -static void sv_async_cb(uv_async_t* handle) { - struct server_ctx* ctx; - ctx = container_of(handle, struct server_ctx, async_handle); - uv_close((uv_handle_t*) &ctx->server_handle, NULL); - uv_close((uv_handle_t*) &ctx->async_handle, NULL); -} - - -static void sv_connection_cb(uv_stream_t* server_handle, int status) { - handle_storage_t* storage; - struct server_ctx* ctx; - - ctx = container_of(server_handle, struct server_ctx, server_handle); - ASSERT(status == 0); - - 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)); - else if (server_handle->type == UV_NAMED_PIPE) - ASSERT(0 == 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)); - ctx->num_connects++; -} - - -static void sv_alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[32]; - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void sv_read_cb(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - ASSERT(nread == UV_EOF); - uv_close((uv_handle_t*) handle, (uv_close_cb) free); -} - - -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); -} - - -static void cl_idle_cb(uv_idle_t* handle) { - struct client_ctx* ctx = container_of(handle, struct client_ctx, idle_handle); - uv_close((uv_handle_t*) &ctx->client_handle, cl_close_cb); - uv_idle_stop(&ctx->idle_handle); -} - - -static void cl_close_cb(uv_handle_t* handle) { - struct client_ctx* ctx; - - ctx = container_of(handle, struct client_ctx, client_handle); - - if (--ctx->num_connects == 0) { - uv_close((uv_handle_t*) &ctx->idle_handle, NULL); - 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)); -} - - -static int test_tcp(unsigned int num_servers, unsigned int num_clients) { - struct server_ctx* servers; - struct client_ctx* clients; - uv_loop_t* loop; - uv_tcp_t* handle; - unsigned int i; - double time; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &listen_addr)); - loop = uv_default_loop(); - - servers = calloc(num_servers, sizeof(servers[0])); - clients = calloc(num_clients, sizeof(clients[0])); - ASSERT_NOT_NULL(servers); - ASSERT_NOT_NULL(clients); - - /* We're making the assumption here that from the perspective of the - * OS scheduler, threads are functionally equivalent to and interchangeable - * with full-blown processes. - */ - 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)); - } - - send_listen_handles(UV_TCP, num_servers, servers); - - for (i = 0; i < num_clients; i++) { - struct client_ctx* ctx = clients + i; - 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)); - } - - { - uint64_t t = uv_hrtime(); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - t = uv_hrtime() - t; - time = t / 1e9; - } - - 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)); - uv_sem_destroy(&ctx->semaphore); - } - - printf("accept%u: %.0f accepts/sec (%u total)\n", - num_servers, - NUM_CONNECTS / time, - NUM_CONNECTS); - - for (i = 0; i < num_servers; i++) { - struct server_ctx* ctx = servers + i; - printf(" thread #%u: %.0f accepts/sec (%u total, %.1f%%)\n", - i, - ctx->num_connects / time, - ctx->num_connects, - ctx->num_connects * 100.0 / NUM_CONNECTS); - } - - free(clients); - free(servers); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -BENCHMARK_IMPL(tcp_multi_accept2) { - return test_tcp(2, 40); -} - - -BENCHMARK_IMPL(tcp_multi_accept4) { - return test_tcp(4, 40); -} - - -BENCHMARK_IMPL(tcp_multi_accept8) { - return test_tcp(8, 40); -} diff --git a/libuv/test/benchmark-ping-pongs.c b/libuv/test/benchmark-ping-pongs.c deleted file mode 100644 index 646a7df..0000000 --- a/libuv/test/benchmark-ping-pongs.c +++ /dev/null @@ -1,221 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -/* Run the benchmark for this many ms */ -#define TIME 5000 - - -typedef struct { - int pongs; - int state; - uv_tcp_t tcp; - uv_connect_t connect_req; - uv_shutdown_t shutdown_req; -} pinger_t; - -typedef struct buf_s { - uv_buf_t uv_buf_t; - struct buf_s* next; -} buf_t; - - -static char PING[] = "PING\n"; - -static uv_loop_t* loop; - -static buf_t* buf_freelist = NULL; -static int pinger_shutdown_cb_called; -static int completed_pingers = 0; -static int64_t start_time; - - -static void buf_alloc(uv_handle_t* tcp, size_t size, uv_buf_t* buf) { - buf_t* ab; - - ab = buf_freelist; - if (ab != NULL) - buf_freelist = ab->next; - else { - ab = malloc(size + sizeof(*ab)); - ab->uv_buf_t.len = size; - ab->uv_buf_t.base = (char*) (ab + 1); - } - - *buf = ab->uv_buf_t; -} - - -static void buf_free(const uv_buf_t* buf) { - buf_t* ab = (buf_t*) buf->base - 1; - ab->next = buf_freelist; - buf_freelist = ab; -} - - -static void pinger_close_cb(uv_handle_t* handle) { - pinger_t* pinger; - - pinger = (pinger_t*)handle->data; - fprintf(stderr, "ping_pongs: %d roundtrips/s\n", (1000 * pinger->pongs) / TIME); - fflush(stderr); - - free(pinger); - - completed_pingers++; -} - - -static void pinger_write_cb(uv_write_t* req, int status) { - ASSERT(status == 0); - - free(req); -} - - -static void pinger_write_ping(pinger_t* pinger) { - uv_write_t* req; - uv_buf_t buf; - - buf = uv_buf_init(PING, sizeof(PING) - 1); - - req = malloc(sizeof *req); - if (uv_write(req, (uv_stream_t*) &pinger->tcp, &buf, 1, pinger_write_cb)) { - FATAL("uv_write failed"); - } -} - - -static void pinger_shutdown_cb(uv_shutdown_t* req, int status) { - ASSERT(status == 0); - 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); -} - - -static void pinger_read_cb(uv_stream_t* tcp, - ssize_t nread, - const uv_buf_t* buf) { - ssize_t i; - pinger_t* pinger; - - pinger = (pinger_t*)tcp->data; - - if (nread < 0) { - ASSERT(nread == UV_EOF); - - if (buf->base) { - buf_free(buf); - } - - ASSERT(pinger_shutdown_cb_called == 1); - uv_close((uv_handle_t*)tcp, pinger_close_cb); - - return; - } - - /* Now we count the pings */ - for (i = 0; i < nread; i++) { - ASSERT(buf->base[i] == PING[pinger->state]); - pinger->state = (pinger->state + 1) % (sizeof(PING) - 1); - if (pinger->state == 0) { - pinger->pongs++; - if (uv_now(loop) - start_time > TIME) { - uv_shutdown(&pinger->shutdown_req, - (uv_stream_t*) tcp, - pinger_shutdown_cb); - break; - } else { - pinger_write_ping(pinger); - } - } - } - - buf_free(buf); -} - - -static void pinger_connect_cb(uv_connect_t* req, int status) { - pinger_t *pinger = (pinger_t*)req->handle->data; - - ASSERT(status == 0); - - pinger_write_ping(pinger); - - if (uv_read_start(req->handle, buf_alloc, pinger_read_cb)) { - FATAL("uv_read_start failed"); - } -} - - -static void pinger_new(void) { - struct sockaddr_in client_addr; - struct sockaddr_in server_addr; - 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)); - pinger = malloc(sizeof(*pinger)); - pinger->state = 0; - pinger->pongs = 0; - - /* Try to connect to the server and do NUM_PINGS ping-pongs. */ - r = uv_tcp_init(loop, &pinger->tcp); - ASSERT(!r); - - pinger->tcp.data = pinger; - - ASSERT(0 == uv_tcp_bind(&pinger->tcp, - (const struct sockaddr*) &client_addr, - 0)); - - r = uv_tcp_connect(&pinger->connect_req, - &pinger->tcp, - (const struct sockaddr*) &server_addr, - pinger_connect_cb); - ASSERT(!r); -} - - -BENCHMARK_IMPL(ping_pongs) { - loop = uv_default_loop(); - - start_time = uv_now(loop); - - pinger_new(); - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(completed_pingers == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/benchmark-ping-udp.c b/libuv/test/benchmark-ping-udp.c deleted file mode 100644 index a29502a..0000000 --- a/libuv/test/benchmark-ping-udp.c +++ /dev/null @@ -1,163 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -/* Run the benchmark for this many ms */ -#define TIME 5000 - -typedef struct { - int pongs; - int state; - uv_udp_t udp; - struct sockaddr_in server_addr; -} pinger_t; - -typedef struct buf_s { - uv_buf_t uv_buf_t; - struct buf_s* next; -} buf_t; - -static char PING[] = "PING\n"; - -static uv_loop_t* loop; - -static int completed_pingers; -static unsigned long completed_pings; -static int64_t start_time; - - -static void buf_alloc(uv_handle_t* tcp, size_t size, uv_buf_t* buf) { - static char slab[64 * 1024]; - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void buf_free(const uv_buf_t* buf) { -} - - -static void pinger_close_cb(uv_handle_t* handle) { - pinger_t* pinger; - - pinger = (pinger_t*)handle->data; -#if DEBUG - fprintf(stderr, "ping_pongs: %d roundtrips/s\n", - pinger->pongs / (TIME / 1000)); -#endif - - completed_pings += pinger->pongs; - completed_pingers++; - free(pinger); -} - -static void pinger_write_ping(pinger_t* pinger) { - uv_buf_t buf; - int r; - - buf = uv_buf_init(PING, sizeof(PING) - 1); - r = uv_udp_try_send(&pinger->udp, &buf, 1, - (const struct sockaddr*) &pinger->server_addr); - if (r < 0) - FATAL("uv_udp_send failed"); -} - -static void pinger_read_cb(uv_udp_t* udp, - ssize_t nread, - const uv_buf_t* buf, - const struct sockaddr* addr, - unsigned flags) { - ssize_t i; - pinger_t* pinger; - pinger = (pinger_t*)udp->data; - - /* Now we count the pings */ - for (i = 0; i < nread; i++) { - ASSERT(buf->base[i] == PING[pinger->state]); - pinger->state = (pinger->state + 1) % (sizeof(PING) - 1); - if (pinger->state == 0) { - pinger->pongs++; - if (uv_now(loop) - start_time > TIME) { - uv_close((uv_handle_t*)udp, pinger_close_cb); - break; - } - pinger_write_ping(pinger); - } - } - - buf_free(buf); -} - -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)); - 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); - - pinger->udp.data = pinger; - - /* Start pinging */ - if (0 != uv_udp_recv_start(&pinger->udp, buf_alloc, pinger_read_cb)) { - FATAL("uv_udp_read_start failed"); - } - pinger_write_ping(pinger); -} - -static int ping_udp(unsigned pingers) { - unsigned i; - - loop = uv_default_loop(); - start_time = uv_now(loop); - - for (i = 0; i < pingers; ++i) { - udp_pinger_new(); - } - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(completed_pingers >= 1); - - fprintf(stderr, "ping_pongs: %d pingers, ~ %lu roundtrips/s\n", - completed_pingers, completed_pings / (TIME/1000)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#define X(PINGERS) \ -BENCHMARK_IMPL(ping_udp##PINGERS) {\ - return ping_udp(PINGERS); \ -} - -X(1) -X(10) -X(100) - -#undef X diff --git a/libuv/test/benchmark-pound.c b/libuv/test/benchmark-pound.c deleted file mode 100644 index 830bc55..0000000 --- a/libuv/test/benchmark-pound.c +++ /dev/null @@ -1,351 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" -#include "uv.h" - -/* Update this is you're going to run > 1000 concurrent requests. */ -#define MAX_CONNS 1000 - -#undef NANOSEC -#define NANOSEC ((uint64_t) 1e9) - -#undef DEBUG -#define DEBUG 0 - -struct conn_rec_s; - -typedef void (*setup_fn)(int num, void* arg); -typedef void (*make_connect_fn)(struct conn_rec_s* conn); -typedef int (*connect_fn)(int num, make_connect_fn make_connect, void* arg); - -/* Base class for tcp_conn_rec and pipe_conn_rec. - * The ordering of fields matters! - */ -typedef struct conn_rec_s { - int i; - uv_connect_t conn_req; - uv_write_t write_req; - make_connect_fn make_connect; - uv_stream_t stream; -} conn_rec; - -typedef struct { - int i; - uv_connect_t conn_req; - uv_write_t write_req; - make_connect_fn make_connect; - uv_tcp_t stream; -} tcp_conn_rec; - -typedef struct { - int i; - uv_connect_t conn_req; - uv_write_t write_req; - make_connect_fn make_connect; - uv_pipe_t stream; -} pipe_conn_rec; - -static char buffer[] = "QS"; - -static uv_loop_t* loop; - -static tcp_conn_rec tcp_conns[MAX_CONNS]; -static pipe_conn_rec pipe_conns[MAX_CONNS]; - -static uint64_t start; /* in ms */ -static int closed_streams; -static int conns_failed; - -static void alloc_cb(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf); -static void connect_cb(uv_connect_t* conn_req, int status); -static void read_cb(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf); -static void close_cb(uv_handle_t* handle); - - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[65536]; - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void after_write(uv_write_t* req, int status) { - if (status != 0) { - fprintf(stderr, "write error %s\n", uv_err_name(status)); - uv_close((uv_handle_t*)req->handle, close_cb); - conns_failed++; - return; - } -} - - -static void connect_cb(uv_connect_t* req, int status) { - conn_rec* conn; - uv_buf_t buf; - int r; - - if (status != 0) { -#if DEBUG - fprintf(stderr, "connect error %s\n", uv_err_name(status)); -#endif - uv_close((uv_handle_t*)req->handle, close_cb); - conns_failed++; - return; - } - - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - - conn = (conn_rec*)req->data; - ASSERT_NOT_NULL(conn); - -#if DEBUG - printf("connect_cb %d\n", conn->i); -#endif - - r = uv_read_start(&conn->stream, alloc_cb, read_cb); - ASSERT(r == 0); - - buf.base = buffer; - buf.len = sizeof(buffer) - 1; - - r = uv_write(&conn->write_req, &conn->stream, &buf, 1, after_write); - ASSERT(r == 0); -} - - -static void read_cb(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) { - - ASSERT_NOT_NULL(stream); - -#if DEBUG - printf("read_cb %d\n", p->i); -#endif - - uv_close((uv_handle_t*)stream, close_cb); - - if (nread < 0) { - if (nread == UV_EOF) { - ; - } else if (nread == UV_ECONNRESET) { - conns_failed++; - } else { - fprintf(stderr, "read error %s\n", uv_err_name(nread)); - ASSERT(0); - } - } -} - - -static void close_cb(uv_handle_t* handle) { - conn_rec* p = (conn_rec*)handle->data; - - ASSERT_NOT_NULL(handle); - closed_streams++; - -#if DEBUG - printf("close_cb %d\n", p->i); -#endif - - if (uv_now(loop) - start < 10000) { - p->make_connect(p); - } -} - - -static void tcp_do_setup(int num, void* arg) { - int i; - - for (i = 0; i < num; i++) { - tcp_conns[i].i = i; - } -} - - -static void pipe_do_setup(int num, void* arg) { - int i; - - for (i = 0; i < num; i++) { - pipe_conns[i].i = i; - } -} - - -static void tcp_make_connect(conn_rec* p) { - struct sockaddr_in addr; - tcp_conn_rec* tp; - int r; - - tp = (tcp_conn_rec*) p; - - r = uv_tcp_init(loop, (uv_tcp_t*)&p->stream); - ASSERT(r == 0); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_tcp_connect(&tp->conn_req, - (uv_tcp_t*) &p->stream, - (const struct sockaddr*) &addr, - connect_cb); - if (r) { - fprintf(stderr, "uv_tcp_connect error %s\n", uv_err_name(r)); - ASSERT(0); - } - -#if DEBUG - printf("make connect %d\n", p->i); -#endif - - p->conn_req.data = p; - p->write_req.data = p; - p->stream.data = p; -} - - -static void pipe_make_connect(conn_rec* p) { - int r; - - r = uv_pipe_init(loop, (uv_pipe_t*)&p->stream, 0); - ASSERT(r == 0); - - uv_pipe_connect(&((pipe_conn_rec*) p)->conn_req, - (uv_pipe_t*) &p->stream, - TEST_PIPENAME, - connect_cb); - -#if DEBUG - printf("make connect %d\n", p->i); -#endif - - p->conn_req.data = p; - p->write_req.data = p; - p->stream.data = p; -} - - -static int tcp_do_connect(int num, make_connect_fn make_connect, void* arg) { - int i; - - for (i = 0; i < num; i++) { - tcp_make_connect((conn_rec*)&tcp_conns[i]); - tcp_conns[i].make_connect = make_connect; - } - - return 0; -} - - -static int pipe_do_connect(int num, make_connect_fn make_connect, void* arg) { - int i; - - for (i = 0; i < num; i++) { - pipe_make_connect((conn_rec*)&pipe_conns[i]); - pipe_conns[i].make_connect = make_connect; - } - - return 0; -} - - -static int pound_it(int concurrency, - const char* type, - setup_fn do_setup, - connect_fn do_connect, - make_connect_fn make_connect, - void* arg) { - double secs; - int r; - uint64_t start_time; /* in ns */ - uint64_t end_time; - - loop = uv_default_loop(); - - uv_update_time(loop); - start = uv_now(loop); - - /* Run benchmark for at least five seconds. */ - start_time = uv_hrtime(); - - do_setup(concurrency, arg); - - r = do_connect(concurrency, make_connect, arg); - ASSERT(!r); - - uv_run(loop, UV_RUN_DEFAULT); - - end_time = uv_hrtime(); - - /* Number of fractional seconds it took to run the benchmark. */ - secs = (double)(end_time - start_time) / NANOSEC; - - fprintf(stderr, "%s-conn-pound-%d: %.0f accepts/s (%d failed)\n", - type, - concurrency, - closed_streams / secs, - conns_failed); - fflush(stderr); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -BENCHMARK_IMPL(tcp4_pound_100) { - return pound_it(100, - "tcp", - tcp_do_setup, - tcp_do_connect, - tcp_make_connect, - NULL); -} - - -BENCHMARK_IMPL(tcp4_pound_1000) { - return pound_it(1000, - "tcp", - tcp_do_setup, - tcp_do_connect, - tcp_make_connect, - NULL); -} - - -BENCHMARK_IMPL(pipe_pound_100) { - return pound_it(100, - "pipe", - pipe_do_setup, - pipe_do_connect, - pipe_make_connect, - NULL); -} - - -BENCHMARK_IMPL(pipe_pound_1000) { - return pound_it(1000, - "pipe", - pipe_do_setup, - pipe_do_connect, - pipe_make_connect, - NULL); -} diff --git a/libuv/test/benchmark-pump.c b/libuv/test/benchmark-pump.c deleted file mode 100644 index 7d3977d..0000000 --- a/libuv/test/benchmark-pump.c +++ /dev/null @@ -1,478 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" -#include "uv.h" - -#include -#include - - -static int TARGET_CONNECTIONS; -#define WRITE_BUFFER_SIZE 8192 -#define MAX_SIMULTANEOUS_CONNECTS 100 - -#define PRINT_STATS 0 -#define STATS_INTERVAL 1000 /* msec */ -#define STATS_COUNT 5 - - -static void do_write(uv_stream_t*); -static void maybe_connect_some(void); - -static uv_req_t* req_alloc(void); -static void req_free(uv_req_t* uv_req); - -static void buf_alloc(uv_handle_t* handle, size_t size, uv_buf_t* buf); -static void buf_free(const uv_buf_t* buf); - -static uv_loop_t* loop; - -static uv_tcp_t tcpServer; -static uv_pipe_t pipeServer; -static uv_stream_t* server; -static struct sockaddr_in listen_addr; -static struct sockaddr_in connect_addr; - -static int64_t start_time; - -static int max_connect_socket = 0; -static int max_read_sockets = 0; -static int read_sockets = 0; -static int write_sockets = 0; - -static int64_t nrecv = 0; -static int64_t nrecv_total = 0; -static int64_t nsent = 0; -static int64_t nsent_total = 0; - -static int stats_left = 0; - -static char write_buffer[WRITE_BUFFER_SIZE]; - -/* Make this as large as you need. */ -#define MAX_WRITE_HANDLES 1000 - -static stream_type type; - -static uv_tcp_t tcp_write_handles[MAX_WRITE_HANDLES]; -static uv_pipe_t pipe_write_handles[MAX_WRITE_HANDLES]; - -static uv_timer_t timer_handle; - - -static double gbit(int64_t bytes, int64_t passed_ms) { - double gbits = ((double)bytes / (1024 * 1024 * 1024)) * 8; - return gbits / ((double)passed_ms / 1000); -} - - -static void show_stats(uv_timer_t* handle) { - int64_t diff; - int i; - -#if PRINT_STATS - fprintf(stderr, "connections: %d, write: %.1f gbit/s\n", - write_sockets, - gbit(nsent, STATS_INTERVAL)); - fflush(stderr); -#endif - - /* Exit if the show is over */ - if (!--stats_left) { - - uv_update_time(loop); - diff = uv_now(loop) - start_time; - - fprintf(stderr, "%s_pump%d_client: %.1f gbit/s\n", - type == TCP ? "tcp" : "pipe", - write_sockets, - gbit(nsent_total, diff)); - fflush(stderr); - - for (i = 0; i < write_sockets; i++) { - if (type == TCP) - uv_close((uv_handle_t*) &tcp_write_handles[i], NULL); - else - uv_close((uv_handle_t*) &pipe_write_handles[i], NULL); - } - - exit(0); - } - - /* Reset read and write counters */ - nrecv = 0; - nsent = 0; -} - - -static void read_show_stats(void) { - int64_t diff; - - uv_update_time(loop); - diff = uv_now(loop) - start_time; - - fprintf(stderr, "%s_pump%d_server: %.1f gbit/s\n", - type == TCP ? "tcp" : "pipe", - max_read_sockets, - gbit(nrecv_total, diff)); - fflush(stderr); -} - - - -static void read_sockets_close_cb(uv_handle_t* handle) { - free(handle); - read_sockets--; - - /* If it's past the first second and everyone has closed their connection - * Then print stats. - */ - if (uv_now(loop) - start_time > 1000 && read_sockets == 0) { - read_show_stats(); - uv_close((uv_handle_t*)server, NULL); - } -} - - -static void start_stats_collection(void) { - int r; - - /* Show-stats timer */ - stats_left = STATS_COUNT; - r = uv_timer_init(loop, &timer_handle); - ASSERT(r == 0); - r = uv_timer_start(&timer_handle, show_stats, STATS_INTERVAL, STATS_INTERVAL); - ASSERT(r == 0); - - uv_update_time(loop); - start_time = uv_now(loop); -} - - -static void read_cb(uv_stream_t* stream, ssize_t bytes, const uv_buf_t* buf) { - if (nrecv_total == 0) { - ASSERT(start_time == 0); - uv_update_time(loop); - start_time = uv_now(loop); - } - - if (bytes < 0) { - uv_close((uv_handle_t*)stream, read_sockets_close_cb); - return; - } - - buf_free(buf); - - nrecv += bytes; - nrecv_total += bytes; -} - - -static void write_cb(uv_write_t* req, int status) { - ASSERT(status == 0); - - req_free((uv_req_t*) req); - - nsent += sizeof write_buffer; - nsent_total += sizeof write_buffer; - - do_write((uv_stream_t*) req->handle); -} - - -static void do_write(uv_stream_t* stream) { - uv_write_t* req; - uv_buf_t buf; - int r; - - buf.base = (char*) &write_buffer; - buf.len = sizeof write_buffer; - - req = (uv_write_t*) req_alloc(); - r = uv_write(req, stream, &buf, 1, write_cb); - ASSERT(r == 0); -} - - -static void connect_cb(uv_connect_t* req, int status) { - int i; - - if (status) { - fprintf(stderr, "%s", uv_strerror(status)); - fflush(stderr); - } - ASSERT(status == 0); - - write_sockets++; - req_free((uv_req_t*) req); - - maybe_connect_some(); - - if (write_sockets == TARGET_CONNECTIONS) { - start_stats_collection(); - - /* Yay! start writing */ - for (i = 0; i < write_sockets; i++) { - if (type == TCP) - do_write((uv_stream_t*) &tcp_write_handles[i]); - else - do_write((uv_stream_t*) &pipe_write_handles[i]); - } - } -} - - -static void maybe_connect_some(void) { - uv_connect_t* req; - uv_tcp_t* tcp; - uv_pipe_t* pipe; - int r; - - while (max_connect_socket < TARGET_CONNECTIONS && - max_connect_socket < write_sockets + MAX_SIMULTANEOUS_CONNECTS) { - if (type == TCP) { - tcp = &tcp_write_handles[max_connect_socket++]; - - r = uv_tcp_init(loop, tcp); - ASSERT(r == 0); - - req = (uv_connect_t*) req_alloc(); - r = uv_tcp_connect(req, - tcp, - (const struct sockaddr*) &connect_addr, - connect_cb); - ASSERT(r == 0); - } else { - pipe = &pipe_write_handles[max_connect_socket++]; - - r = uv_pipe_init(loop, pipe, 0); - ASSERT(r == 0); - - req = (uv_connect_t*) req_alloc(); - uv_pipe_connect(req, pipe, TEST_PIPENAME, connect_cb); - } - } -} - - -static void connection_cb(uv_stream_t* s, int status) { - uv_stream_t* stream; - int r; - - ASSERT(server == s); - ASSERT(status == 0); - - if (type == TCP) { - stream = (uv_stream_t*)malloc(sizeof(uv_tcp_t)); - r = uv_tcp_init(loop, (uv_tcp_t*)stream); - ASSERT(r == 0); - } else { - stream = (uv_stream_t*)malloc(sizeof(uv_pipe_t)); - r = uv_pipe_init(loop, (uv_pipe_t*)stream, 0); - ASSERT(r == 0); - } - - r = uv_accept(s, stream); - ASSERT(r == 0); - - r = uv_read_start(stream, buf_alloc, read_cb); - ASSERT(r == 0); - - read_sockets++; - max_read_sockets++; -} - - -/* - * Request allocator - */ - -typedef struct req_list_s { - union uv_any_req uv_req; - struct req_list_s* next; -} req_list_t; - - -static req_list_t* req_freelist = NULL; - - -static uv_req_t* req_alloc(void) { - req_list_t* req; - - req = req_freelist; - if (req != NULL) { - req_freelist = req->next; - return (uv_req_t*) req; - } - - req = (req_list_t*) malloc(sizeof *req); - return (uv_req_t*) req; -} - - -static void req_free(uv_req_t* uv_req) { - req_list_t* req = (req_list_t*) uv_req; - - req->next = req_freelist; - req_freelist = req; -} - - -/* - * Buffer allocator - */ - -typedef struct buf_list_s { - uv_buf_t uv_buf_t; - struct buf_list_s* next; -} buf_list_t; - - -static buf_list_t* buf_freelist = NULL; - - -static void buf_alloc(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - buf_list_t* ab; - - ab = buf_freelist; - if (ab != NULL) - buf_freelist = ab->next; - else { - ab = malloc(size + sizeof(*ab)); - ab->uv_buf_t.len = size; - ab->uv_buf_t.base = (char*) (ab + 1); - } - - *buf = ab->uv_buf_t; -} - - -static void buf_free(const uv_buf_t* buf) { - buf_list_t* ab = (buf_list_t*) buf->base - 1; - ab->next = buf_freelist; - buf_freelist = ab; -} - - -HELPER_IMPL(tcp_pump_server) { - int r; - - type = TCP; - loop = uv_default_loop(); - - ASSERT(0 == 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); - r = uv_tcp_bind(&tcpServer, (const struct sockaddr*) &listen_addr, 0); - ASSERT(r == 0); - r = uv_listen((uv_stream_t*)&tcpServer, MAX_WRITE_HANDLES, connection_cb); - ASSERT(r == 0); - - notify_parent_process(); - uv_run(loop, UV_RUN_DEFAULT); - - return 0; -} - - -HELPER_IMPL(pipe_pump_server) { - int r; - type = PIPE; - - loop = uv_default_loop(); - - /* Server */ - server = (uv_stream_t*)&pipeServer; - r = uv_pipe_init(loop, &pipeServer, 0); - ASSERT(r == 0); - r = uv_pipe_bind(&pipeServer, TEST_PIPENAME); - ASSERT(r == 0); - r = uv_listen((uv_stream_t*)&pipeServer, MAX_WRITE_HANDLES, connection_cb); - ASSERT(r == 0); - - notify_parent_process(); - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void tcp_pump(int n) { - ASSERT(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)); - - /* Start making connections */ - maybe_connect_some(); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); -} - - -static void pipe_pump(int n) { - ASSERT(n <= MAX_WRITE_HANDLES); - TARGET_CONNECTIONS = n; - type = PIPE; - - loop = uv_default_loop(); - - /* Start making connections */ - maybe_connect_some(); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); -} - - -BENCHMARK_IMPL(tcp_pump100_client) { - tcp_pump(100); - return 0; -} - - -BENCHMARK_IMPL(tcp_pump1_client) { - tcp_pump(1); - return 0; -} - - -BENCHMARK_IMPL(pipe_pump100_client) { - pipe_pump(100); - return 0; -} - - -BENCHMARK_IMPL(pipe_pump1_client) { - pipe_pump(1); - return 0; -} diff --git a/libuv/test/benchmark-sizes.c b/libuv/test/benchmark-sizes.c deleted file mode 100644 index 9bf42f9..0000000 --- a/libuv/test/benchmark-sizes.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" -#include "uv.h" - - -BENCHMARK_IMPL(sizes) { - fprintf(stderr, "uv_shutdown_t: %u bytes\n", (unsigned int) sizeof(uv_shutdown_t)); - fprintf(stderr, "uv_write_t: %u bytes\n", (unsigned int) sizeof(uv_write_t)); - fprintf(stderr, "uv_connect_t: %u bytes\n", (unsigned int) sizeof(uv_connect_t)); - fprintf(stderr, "uv_udp_send_t: %u bytes\n", (unsigned int) sizeof(uv_udp_send_t)); - fprintf(stderr, "uv_tcp_t: %u bytes\n", (unsigned int) sizeof(uv_tcp_t)); - fprintf(stderr, "uv_pipe_t: %u bytes\n", (unsigned int) sizeof(uv_pipe_t)); - fprintf(stderr, "uv_tty_t: %u bytes\n", (unsigned int) sizeof(uv_tty_t)); - fprintf(stderr, "uv_prepare_t: %u bytes\n", (unsigned int) sizeof(uv_prepare_t)); - fprintf(stderr, "uv_check_t: %u bytes\n", (unsigned int) sizeof(uv_check_t)); - fprintf(stderr, "uv_idle_t: %u bytes\n", (unsigned int) sizeof(uv_idle_t)); - fprintf(stderr, "uv_async_t: %u bytes\n", (unsigned int) sizeof(uv_async_t)); - fprintf(stderr, "uv_timer_t: %u bytes\n", (unsigned int) sizeof(uv_timer_t)); - fprintf(stderr, "uv_fs_poll_t: %u bytes\n", (unsigned int) sizeof(uv_fs_poll_t)); - fprintf(stderr, "uv_fs_event_t: %u bytes\n", (unsigned int) sizeof(uv_fs_event_t)); - fprintf(stderr, "uv_process_t: %u bytes\n", (unsigned int) sizeof(uv_process_t)); - fprintf(stderr, "uv_poll_t: %u bytes\n", (unsigned int) sizeof(uv_poll_t)); - fprintf(stderr, "uv_loop_t: %u bytes\n", (unsigned int) sizeof(uv_loop_t)); - fflush(stderr); - return 0; -} diff --git a/libuv/test/benchmark-spawn.c b/libuv/test/benchmark-spawn.c deleted file mode 100644 index ed9ad60..0000000 --- a/libuv/test/benchmark-spawn.c +++ /dev/null @@ -1,164 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* This benchmark spawns itself 1000 times. */ - -#include "task.h" -#include "uv.h" - -static uv_loop_t* loop; - -static int N = 1000; -static int done; - -static uv_process_t process; -static uv_process_options_t options; -static char exepath[1024]; -static size_t exepath_size = 1024; -static char* args[3]; -static uv_pipe_t out; - -#define OUTPUT_SIZE 1024 -static char output[OUTPUT_SIZE]; -static int output_used; - -static int process_open; -static int pipe_open; - - -static void spawn(void); - - -static void maybe_spawn(void) { - if (process_open == 0 && pipe_open == 0) { - done++; - if (done < N) { - spawn(); - } - } -} - - -static void process_close_cb(uv_handle_t* handle) { - ASSERT(process_open == 1); - process_open = 0; - maybe_spawn(); -} - - -static void exit_cb(uv_process_t* process, - int64_t exit_status, - int term_signal) { - ASSERT(exit_status == 42); - ASSERT(term_signal == 0); - uv_close((uv_handle_t*)process, process_close_cb); -} - - -static void on_alloc(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - buf->base = output + output_used; - buf->len = OUTPUT_SIZE - output_used; -} - - -static void pipe_close_cb(uv_handle_t* pipe) { - ASSERT(pipe_open == 1); - pipe_open = 0; - maybe_spawn(); -} - - -static void on_read(uv_stream_t* pipe, ssize_t nread, const uv_buf_t* buf) { - if (nread > 0) { - ASSERT(pipe_open == 1); - output_used += nread; - } else if (nread < 0) { - if (nread == UV_EOF) { - uv_close((uv_handle_t*)pipe, pipe_close_cb); - } - } -} - - -static void spawn(void) { - uv_stdio_container_t stdio[2]; - int r; - - ASSERT(process_open == 0); - ASSERT(pipe_open == 0); - - args[0] = exepath; - args[1] = "spawn_helper"; - args[2] = NULL; - options.file = exepath; - options.args = args; - options.exit_cb = exit_cb; - - uv_pipe_init(loop, &out, 0); - - options.stdio = stdio; - options.stdio_count = 2; - options.stdio[0].flags = UV_IGNORE; - options.stdio[1].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE; - options.stdio[1].data.stream = (uv_stream_t*)&out; - - r = uv_spawn(loop, &process, &options); - ASSERT(r == 0); - - process_open = 1; - pipe_open = 1; - output_used = 0; - - r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read); - ASSERT(r == 0); -} - - -BENCHMARK_IMPL(spawn) { - int r; - static int64_t start_time, end_time; - - loop = uv_default_loop(); - - r = uv_exepath(exepath, &exepath_size); - ASSERT(r == 0); - exepath[exepath_size] = '\0'; - - uv_update_time(loop); - start_time = uv_now(loop); - - spawn(); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - uv_update_time(loop); - end_time = uv_now(loop); - - fprintf(stderr, "spawn: %.0f spawns/s\n", - (double) N / (double) (end_time - start_time) * 1000.0); - fflush(stderr); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/benchmark-tcp-write-batch.c b/libuv/test/benchmark-tcp-write-batch.c deleted file mode 100644 index 16aa72f..0000000 --- a/libuv/test/benchmark-tcp-write-batch.c +++ /dev/null @@ -1,144 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -#define WRITE_REQ_DATA "Hello, world." -#define NUM_WRITE_REQS (1000 * 1000) - -typedef struct { - uv_write_t req; - uv_buf_t buf; -} write_req; - - -static write_req* write_reqs; -static uv_tcp_t tcp_client; -static uv_connect_t connect_req; -static uv_shutdown_t shutdown_req; - -static int shutdown_cb_called = 0; -static int connect_cb_called = 0; -static int write_cb_called = 0; -static int close_cb_called = 0; - -static void connect_cb(uv_connect_t* req, int status); -static void write_cb(uv_write_t* req, int status); -static void shutdown_cb(uv_shutdown_t* req, int status); -static void close_cb(uv_handle_t* handle); - - -static void connect_cb(uv_connect_t* req, int status) { - write_req* w; - int i; - int r; - - ASSERT(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); - } - - r = uv_shutdown(&shutdown_req, req->handle, shutdown_cb); - ASSERT(r == 0); - - connect_cb_called++; -} - - -static void write_cb(uv_write_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - 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); - - uv_close((uv_handle_t*)req->handle, close_cb); - free(write_reqs); - - shutdown_cb_called++; -} - - -static void close_cb(uv_handle_t* handle) { - ASSERT(handle == (uv_handle_t*)&tcp_client); - close_cb_called++; -} - - -BENCHMARK_IMPL(tcp_write_batch) { - struct sockaddr_in addr; - uv_loop_t* loop; - uint64_t start; - uint64_t stop; - int i; - int r; - - write_reqs = malloc(sizeof(*write_reqs) * NUM_WRITE_REQS); - ASSERT_NOT_NULL(write_reqs); - - /* Prepare the data to write out. */ - for (i = 0; i < NUM_WRITE_REQS; i++) { - write_reqs[i].buf = uv_buf_init(WRITE_REQ_DATA, - sizeof(WRITE_REQ_DATA) - 1); - } - - loop = uv_default_loop(); - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_tcp_init(loop, &tcp_client); - ASSERT(r == 0); - - r = uv_tcp_connect(&connect_req, - &tcp_client, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); - - start = uv_hrtime(); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - 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); - - printf("%ld write requests in %.2fs.\n", - (long)NUM_WRITE_REQS, - (stop - start) / 1e9); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/benchmark-thread.c b/libuv/test/benchmark-thread.c deleted file mode 100644 index b37a7fd..0000000 --- a/libuv/test/benchmark-thread.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -#define NUM_THREADS (20 * 1000) - -static volatile int num_threads; - - -static void thread_entry(void* arg) { - ASSERT(arg == (void *) 42); - num_threads++; - /* FIXME write barrier? */ -} - - -BENCHMARK_IMPL(thread_create) { - uint64_t start_time; - double duration; - uv_thread_t tid; - int i, r; - - start_time = uv_hrtime(); - - for (i = 0; i < NUM_THREADS; i++) { - r = uv_thread_create(&tid, thread_entry, (void *) 42); - ASSERT(r == 0); - - r = uv_thread_join(&tid); - ASSERT(r == 0); - } - - duration = (uv_hrtime() - start_time) / 1e9; - - ASSERT(num_threads == NUM_THREADS); - - printf("%d threads created in %.2f seconds (%.0f/s)\n", - NUM_THREADS, duration, NUM_THREADS / duration); - - return 0; -} diff --git a/libuv/test/benchmark-udp-pummel.c b/libuv/test/benchmark-udp-pummel.c deleted file mode 100644 index 1a22057..0000000 --- a/libuv/test/benchmark-udp-pummel.c +++ /dev/null @@ -1,243 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" -#include "uv.h" - -#include -#include -#include - -#define EXPECTED "RANG TANG DING DONG I AM THE JAPANESE SANDMAN" - -#define TEST_DURATION 5000 /* ms */ - -#define BASE_PORT 12345 - -struct sender_state { - struct sockaddr_in addr; - uv_udp_send_t send_req; - uv_udp_t udp_handle; -}; - -struct receiver_state { - struct sockaddr_in addr; - uv_udp_t udp_handle; -}; - -/* not used in timed mode */ -static unsigned int packet_counter = (unsigned int) 1e6; - -static int n_senders_; -static int n_receivers_; -static uv_buf_t bufs[5]; -static struct sender_state senders[1024]; -static struct receiver_state receivers[1024]; - -static unsigned int send_cb_called; -static unsigned int recv_cb_called; -static unsigned int close_cb_called; -static int timed; -static int exiting; - - -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)); - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void send_cb(uv_udp_send_t* req, int status) { - struct sender_state* s; - - ASSERT_NOT_NULL(req); - - if (status != 0) { - ASSERT(status == UV_ECANCELED); - return; - } - - if (exiting) - return; - - s = container_of(req, struct sender_state, send_req); - ASSERT(req->handle == &s->udp_handle); - - if (timed) - goto send; - - if (packet_counter == 0) { - uv_close((uv_handle_t*)&s->udp_handle, NULL); - return; - } - - 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)); - send_cb_called++; -} - - -static void recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* buf, - const struct sockaddr* addr, - unsigned flags) { - if (nread == 0) - return; - - if (nread < 0) { - ASSERT(nread == UV_ECANCELED); - return; - } - - ASSERT(addr->sa_family == AF_INET); - ASSERT(!memcmp(buf->base, EXPECTED, nread)); - - recv_cb_called++; -} - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -static void timeout_cb(uv_timer_t* timer) { - int i; - - exiting = 1; - - for (i = 0; i < n_senders_; i++) - uv_close((uv_handle_t*)&senders[i].udp_handle, close_cb); - - for (i = 0; i < n_receivers_; i++) - uv_close((uv_handle_t*)&receivers[i].udp_handle, close_cb); -} - - -static int pummel(unsigned int n_senders, - unsigned int n_receivers, - unsigned long timeout) { - uv_timer_t timer_handle; - uint64_t duration; - uv_loop_t* loop; - unsigned int i; - - ASSERT(n_senders <= ARRAY_SIZE(senders)); - ASSERT(n_receivers <= ARRAY_SIZE(receivers)); - - loop = uv_default_loop(); - - n_senders_ = 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)); - /* Timer should not keep loop alive. */ - uv_unref((uv_handle_t*)&timer_handle); - timed = 1; - } - - 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)); - uv_unref((uv_handle_t*)&s->udp_handle); - } - - bufs[0] = uv_buf_init(&EXPECTED[0], 10); - bufs[1] = uv_buf_init(&EXPECTED[10], 10); - bufs[2] = uv_buf_init(&EXPECTED[20], 10); - bufs[3] = uv_buf_init(&EXPECTED[30], 10); - bufs[4] = uv_buf_init(&EXPECTED[40], 5); - - 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)); - } - - duration = uv_hrtime(); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - duration = uv_hrtime() - duration; - /* convert from nanoseconds to milliseconds */ - duration = duration / (uint64_t) 1e6; - - printf("udp_pummel_%dv%d: %.0f/s received, %.0f/s sent. " - "%u received, %u sent in %.1f seconds.\n", - n_receivers, - n_senders, - recv_cb_called / (duration / 1000.0), - send_cb_called / (duration / 1000.0), - recv_cb_called, - send_cb_called, - duration / 1000.0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -#define X(a, b) \ - BENCHMARK_IMPL(udp_pummel_##a##v##b) { \ - return pummel(a, b, 0); \ - } \ - BENCHMARK_IMPL(udp_timed_pummel_##a##v##b) { \ - return pummel(a, b, TEST_DURATION); \ - } - -X(1, 1) -X(1, 10) -X(1, 100) -X(1, 1000) -X(10, 10) -X(10, 100) -X(10, 1000) -X(100, 10) -X(100, 100) -X(100, 1000) -X(1000, 1000) - -#undef X diff --git a/libuv/test/blackhole-server.c b/libuv/test/blackhole-server.c deleted file mode 100644 index 0a8758e..0000000 --- a/libuv/test/blackhole-server.c +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -typedef struct { - uv_tcp_t handle; - uv_shutdown_t shutdown_req; -} conn_rec; - -static uv_tcp_t tcp_server; - -static void connection_cb(uv_stream_t* stream, int status); -static void alloc_cb(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf); -static void read_cb(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf); -static void shutdown_cb(uv_shutdown_t* req, int status); -static void close_cb(uv_handle_t* handle); - - -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); - - conn = malloc(sizeof *conn); - ASSERT_NOT_NULL(conn); - - r = uv_tcp_init(stream->loop, &conn->handle); - ASSERT(r == 0); - - r = uv_accept(stream, (uv_stream_t*)&conn->handle); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*)&conn->handle, alloc_cb, read_cb); - ASSERT(r == 0); -} - - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[65536]; - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void read_cb(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) { - conn_rec* conn; - int r; - - if (nread >= 0) - return; - - ASSERT(nread == UV_EOF); - - conn = container_of(stream, conn_rec, handle); - - r = uv_shutdown(&conn->shutdown_req, stream, shutdown_cb); - ASSERT(r == 0); -} - - -static void shutdown_cb(uv_shutdown_t* req, int status) { - conn_rec* conn = container_of(req, conn_rec, shutdown_req); - uv_close((uv_handle_t*)&conn->handle, close_cb); -} - - -static void close_cb(uv_handle_t* handle) { - conn_rec* conn = container_of(handle, conn_rec, handle); - free(conn); -} - - -HELPER_IMPL(tcp4_blackhole_server) { - struct sockaddr_in addr; - uv_loop_t* loop; - int r; - - loop = uv_default_loop(); - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_tcp_init(loop, &tcp_server); - ASSERT(r == 0); - - r = uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*)&tcp_server, 128, connection_cb); - ASSERT(r == 0); - - notify_parent_process(); - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(0 && "Blackhole server dropped out of event loop."); - - return 0; -} diff --git a/libuv/test/dns-server.c b/libuv/test/dns-server.c deleted file mode 100644 index f8ca87f..0000000 --- a/libuv/test/dns-server.c +++ /dev/null @@ -1,340 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include -#include - - -typedef struct { - uv_write_t req; - uv_buf_t buf; -} write_req_t; - - -/* used to track multiple DNS requests received */ -typedef struct { - char* prevbuf_ptr; - int prevbuf_pos; - int prevbuf_rem; -} dnsstate; - - -/* modify handle to append dnsstate */ -typedef struct { - uv_tcp_t handle; - dnsstate state; -} dnshandle; - - -static uv_loop_t* loop; - - -static uv_tcp_t server; - - -static void after_write(uv_write_t* req, int status); -static void after_read(uv_stream_t*, ssize_t nread, const uv_buf_t* buf); -static void on_close(uv_handle_t* peer); -static void on_connection(uv_stream_t*, int status); - -#define WRITE_BUF_LEN (64*1024) -#define DNSREC_LEN (4) - -#define LEN_OFFSET 0 -#define QUERYID_OFFSET 2 - -static unsigned char DNSRsp[] = { - 0, 43, 0, 0, 0x81, 0x80, 0, 1, 0, 1, 0, 0, 0, 0 -}; - -static unsigned char qrecord[] = { - 5, 'e', 'c', 'h', 'o', 's', 3, 's', 'r', 'v', 0, 0, 1, 0, 1 -}; - -static unsigned char arecord[] = { - 0xc0, 0x0c, 0, 1, 0, 1, 0, 0, 5, 0xbd, 0, 4, 10, 0, 1, 1 -}; - - -static void after_write(uv_write_t* req, int status) { - write_req_t* wr; - - if (status) { - fprintf(stderr, "uv_write error: %s\n", uv_strerror(status)); - ASSERT(0); - } - - wr = (write_req_t*) req; - - /* Free the read/write buffer and the request */ - free(wr->buf.base); - free(wr); -} - - -static void after_shutdown(uv_shutdown_t* req, int status) { - uv_close((uv_handle_t*) req->handle, on_close); - free(req); -} - - -static void addrsp(write_req_t* wr, char* hdr) { - char * dnsrsp; - short int rsplen; - short int* reclen; - - rsplen = sizeof(DNSRsp) + sizeof(qrecord) + sizeof(arecord); - - ASSERT (rsplen + wr->buf.len < WRITE_BUF_LEN); - - dnsrsp = wr->buf.base + wr->buf.len; - - /* copy stock response */ - memcpy(dnsrsp, DNSRsp, sizeof(DNSRsp)); - memcpy(dnsrsp + sizeof(DNSRsp), qrecord, sizeof(qrecord)); - memcpy(dnsrsp + sizeof(DNSRsp) + sizeof(qrecord), arecord, sizeof(arecord)); - - /* overwrite with network order length and id from request header */ - reclen = (short int*)dnsrsp; - *reclen = htons(rsplen-2); - dnsrsp[QUERYID_OFFSET] = hdr[QUERYID_OFFSET]; - dnsrsp[QUERYID_OFFSET+1] = hdr[QUERYID_OFFSET+1]; - - wr->buf.len += rsplen; -} - -static void process_req(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - write_req_t* wr; - dnshandle* dns = (dnshandle*)handle; - char hdrbuf[DNSREC_LEN]; - int hdrbuf_remaining = DNSREC_LEN; - int rec_remaining = 0; - int readbuf_remaining; - char* dnsreq; - char* hdrstart; - int usingprev = 0; - - wr = (write_req_t*) malloc(sizeof *wr); - wr->buf.base = (char*)malloc(WRITE_BUF_LEN); - wr->buf.len = 0; - - if (dns->state.prevbuf_ptr != NULL) { - dnsreq = dns->state.prevbuf_ptr + dns->state.prevbuf_pos; - readbuf_remaining = dns->state.prevbuf_rem; - usingprev = 1; - } else { - dnsreq = buf->base; - readbuf_remaining = nread; - } - hdrstart = dnsreq; - - while (dnsreq != NULL) { - /* something to process */ - while (readbuf_remaining > 0) { - /* something to process in current buffer */ - if (hdrbuf_remaining > 0) { - /* process len and id */ - if (readbuf_remaining < hdrbuf_remaining) { - /* too little to get request header. save for next buffer */ - memcpy(&hdrbuf[DNSREC_LEN - hdrbuf_remaining], - dnsreq, - readbuf_remaining); - hdrbuf_remaining = DNSREC_LEN - readbuf_remaining; - break; - } else { - /* save header */ - memcpy(&hdrbuf[DNSREC_LEN - hdrbuf_remaining], - dnsreq, - hdrbuf_remaining); - dnsreq += hdrbuf_remaining; - readbuf_remaining -= hdrbuf_remaining; - hdrbuf_remaining = 0; - - /* get record length */ - rec_remaining = (unsigned) hdrbuf[0] * 256 + (unsigned) hdrbuf[1]; - rec_remaining -= (DNSREC_LEN - 2); - } - } - - if (rec_remaining <= readbuf_remaining) { - /* prepare reply */ - addrsp(wr, hdrbuf); - - /* move to next record */ - dnsreq += rec_remaining; - hdrstart = dnsreq; - readbuf_remaining -= rec_remaining; - rec_remaining = 0; - hdrbuf_remaining = DNSREC_LEN; - } else { - /* otherwise this buffer is done. */ - rec_remaining -= readbuf_remaining; - break; - } - } - - /* If we had to use bytes from prev buffer, start processing the current - * one. - */ - if (usingprev == 1) { - /* free previous buffer */ - free(dns->state.prevbuf_ptr); - dnsreq = buf->base; - readbuf_remaining = nread; - usingprev = 0; - } else { - dnsreq = NULL; - } - } - - /* send write buffer */ - if (wr->buf.len > 0) { - if (uv_write((uv_write_t*) &wr->req, handle, &wr->buf, 1, after_write)) { - FATAL("uv_write failed"); - } - } - - if (readbuf_remaining > 0) { - /* save start of record position, so we can continue on next read */ - dns->state.prevbuf_ptr = buf->base; - dns->state.prevbuf_pos = hdrstart - buf->base; - dns->state.prevbuf_rem = nread - dns->state.prevbuf_pos; - } else { - /* nothing left in this buffer */ - dns->state.prevbuf_ptr = NULL; - dns->state.prevbuf_pos = 0; - dns->state.prevbuf_rem = 0; - free(buf->base); - } -} - -static void after_read(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - uv_shutdown_t* req; - - if (nread < 0) { - /* Error or EOF */ - ASSERT(nread == UV_EOF); - - if (buf->base) { - free(buf->base); - } - - req = malloc(sizeof *req); - uv_shutdown(req, handle, after_shutdown); - - return; - } - - if (nread == 0) { - /* Everything OK, but nothing read. */ - free(buf->base); - return; - } - /* process requests and send responses */ - process_req(handle, nread, buf); -} - - -static void on_close(uv_handle_t* peer) { - free(peer); -} - - -static void buf_alloc(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - buf->base = malloc(suggested_size); - buf->len = suggested_size; -} - - -static void on_connection(uv_stream_t* server, int status) { - dnshandle* handle; - int r; - - ASSERT(status == 0); - - handle = (dnshandle*) malloc(sizeof *handle); - ASSERT_NOT_NULL(handle); - - /* initialize read buffer state */ - handle->state.prevbuf_ptr = 0; - handle->state.prevbuf_pos = 0; - handle->state.prevbuf_rem = 0; - - r = uv_tcp_init(loop, (uv_tcp_t*)handle); - ASSERT(r == 0); - - r = uv_accept(server, (uv_stream_t*)handle); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*)handle, buf_alloc, after_read); - ASSERT(r == 0); -} - - -static int dns_start(int port) { - struct sockaddr_in addr; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", port, &addr)); - - r = uv_tcp_init(loop, &server); - if (r) { - /* TODO: Error codes */ - fprintf(stderr, "Socket creation error\n"); - return 1; - } - - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr, 0); - if (r) { - /* TODO: Error codes */ - fprintf(stderr, "Bind error\n"); - return 1; - } - - r = uv_listen((uv_stream_t*)&server, 128, on_connection); - if (r) { - /* TODO: Error codes */ - fprintf(stderr, "Listen error\n"); - return 1; - } - - return 0; -} - - -HELPER_IMPL(dns_server) { - loop = uv_default_loop(); - - if (dns_start(TEST_PORT_2)) - return 1; - - uv_run(loop, UV_RUN_DEFAULT); - return 0; -} diff --git a/libuv/test/echo-server.c b/libuv/test/echo-server.c deleted file mode 100644 index 058c992..0000000 --- a/libuv/test/echo-server.c +++ /dev/null @@ -1,431 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - -typedef struct { - uv_write_t req; - uv_buf_t buf; -} write_req_t; - -static uv_loop_t* loop; - -static int server_closed; -static stream_type serverType; -static uv_tcp_t tcpServer; -static uv_udp_t udpServer; -static uv_pipe_t pipeServer; -static uv_handle_t* server; -static uv_udp_send_t* send_freelist; - -static void after_write(uv_write_t* req, int status); -static void after_read(uv_stream_t*, ssize_t nread, const uv_buf_t* buf); -static void on_close(uv_handle_t* peer); -static void on_server_close(uv_handle_t* handle); -static void on_connection(uv_stream_t*, int status); - - -static void after_write(uv_write_t* req, int status) { - write_req_t* wr; - - /* Free the read/write buffer and the request */ - wr = (write_req_t*) req; - free(wr->buf.base); - free(wr); - - if (status == 0) - return; - - fprintf(stderr, - "uv_write error: %s - %s\n", - uv_err_name(status), - uv_strerror(status)); -} - - -static void after_shutdown(uv_shutdown_t* req, int status) { - ASSERT_EQ(status, 0); - 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); - free(req); -} - - -static void after_read(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - int i; - write_req_t *wr; - uv_shutdown_t* sreq; - int shutdown = 0; - - if (nread < 0) { - /* Error or EOF */ - ASSERT_EQ(nread, UV_EOF); - - free(buf->base); - sreq = malloc(sizeof* sreq); - if (uv_is_writable(handle)) { - ASSERT_EQ(0, uv_shutdown(sreq, handle, after_shutdown)); - } - return; - } - - if (nread == 0) { - /* Everything OK, but nothing read. */ - free(buf->base); - return; - } - - /* - * Scan for the letter Q which signals that we should quit the server. - * If we get QS it means close the stream. - * If we get QSS it means shutdown the stream. - * If we get QSH it means disable linger before close the socket. - */ - for (i = 0; i < nread; i++) { - if (buf->base[i] == 'Q') { - if (i + 1 < nread && buf->base[i + 1] == 'S') { - int reset = 0; - if (i + 2 < nread && buf->base[i + 2] == 'S') - shutdown = 1; - 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)); - else if (shutdown) - break; - else - uv_close((uv_handle_t*) handle, on_close); - free(buf->base); - return; - } else if (!server_closed) { - uv_close(server, on_server_close); - server_closed = 1; - } - } - } - - wr = (write_req_t*) malloc(sizeof *wr); - ASSERT_NOT_NULL(wr); - wr->buf = uv_buf_init(buf->base, nread); - - if (uv_write(&wr->req, handle, &wr->buf, 1, after_write)) { - FATAL("uv_write failed"); - } - - if (shutdown) - ASSERT_EQ(0, uv_shutdown(malloc(sizeof* sreq), handle, on_shutdown)); -} - - -static void on_close(uv_handle_t* peer) { - free(peer); -} - - -static void echo_alloc(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - buf->base = malloc(suggested_size); - buf->len = suggested_size; -} - -static void slab_alloc(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - /* up to 16 datagrams at once */ - static char slab[16 * 64 * 1024]; - buf->base = slab; - buf->len = sizeof(slab); -} - -static void on_connection(uv_stream_t* server, int status) { - uv_stream_t* stream; - int r; - - if (status != 0) { - fprintf(stderr, "Connect error %s\n", uv_err_name(status)); - } - ASSERT(status == 0); - - 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); - 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); - break; - - default: - ASSERT(0 && "Bad serverType"); - abort(); - } - - /* associate server with stream */ - stream->data = server; - - r = uv_accept(server, stream); - ASSERT(r == 0); - - r = uv_read_start(stream, echo_alloc, after_read); - ASSERT(r == 0); -} - - -static void on_server_close(uv_handle_t* handle) { - ASSERT(handle == server); -} - -static uv_udp_send_t* send_alloc(void) { - uv_udp_send_t* req = send_freelist; - if (req != NULL) - send_freelist = req->data; - else - req = malloc(sizeof(*req)); - return req; -} - -static void on_send(uv_udp_send_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - req->data = send_freelist; - send_freelist = req; -} - -static void on_recv(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* rcvbuf, - const struct sockaddr* addr, - unsigned flags) { - uv_buf_t sndbuf; - uv_udp_send_t* req; - - if (nread == 0) { - /* Everything OK, but nothing read. */ - return; - } - - ASSERT(nread > 0); - ASSERT(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)); -} - -static int tcp4_echo_start(int port) { - struct sockaddr_in addr; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", port, &addr)); - - server = (uv_handle_t*)&tcpServer; - serverType = TCP; - - r = uv_tcp_init(loop, &tcpServer); - if (r) { - /* TODO: Error codes */ - fprintf(stderr, "Socket creation error\n"); - return 1; - } - - r = uv_tcp_bind(&tcpServer, (const struct sockaddr*) &addr, 0); - if (r) { - /* TODO: Error codes */ - fprintf(stderr, "Bind error\n"); - return 1; - } - - r = uv_listen((uv_stream_t*)&tcpServer, SOMAXCONN, on_connection); - if (r) { - /* TODO: Error codes */ - fprintf(stderr, "Listen error %s\n", uv_err_name(r)); - return 1; - } - - return 0; -} - - -static int tcp6_echo_start(int port) { - struct sockaddr_in6 addr6; - int r; - - ASSERT(0 == uv_ip6_addr("::1", port, &addr6)); - - server = (uv_handle_t*)&tcpServer; - serverType = TCP; - - r = uv_tcp_init(loop, &tcpServer); - if (r) { - /* TODO: Error codes */ - fprintf(stderr, "Socket creation error\n"); - return 1; - } - - /* IPv6 is optional as not all platforms support it */ - r = uv_tcp_bind(&tcpServer, (const struct sockaddr*) &addr6, 0); - if (r) { - /* show message but return OK */ - fprintf(stderr, "IPv6 not supported\n"); - return 0; - } - - r = uv_listen((uv_stream_t*)&tcpServer, SOMAXCONN, on_connection); - if (r) { - /* TODO: Error codes */ - fprintf(stderr, "Listen error\n"); - return 1; - } - - return 0; -} - - -static int udp4_echo_start(int port) { - struct sockaddr_in addr; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", port, &addr)); - server = (uv_handle_t*)&udpServer; - serverType = UDP; - - r = uv_udp_init(loop, &udpServer); - if (r) { - fprintf(stderr, "uv_udp_init: %s\n", uv_strerror(r)); - return 1; - } - - r = uv_udp_bind(&udpServer, (const struct sockaddr*) &addr, 0); - if (r) { - fprintf(stderr, "uv_udp_bind: %s\n", uv_strerror(r)); - return 1; - } - - r = uv_udp_recv_start(&udpServer, slab_alloc, on_recv); - if (r) { - fprintf(stderr, "uv_udp_recv_start: %s\n", uv_strerror(r)); - return 1; - } - - return 0; -} - - -static int pipe_echo_start(char* pipeName) { - int r; - -#ifndef _WIN32 - { - uv_fs_t req; - uv_fs_unlink(NULL, &req, pipeName, NULL); - uv_fs_req_cleanup(&req); - } -#endif - - server = (uv_handle_t*)&pipeServer; - serverType = PIPE; - - r = uv_pipe_init(loop, &pipeServer, 0); - if (r) { - fprintf(stderr, "uv_pipe_init: %s\n", uv_strerror(r)); - return 1; - } - - r = uv_pipe_bind(&pipeServer, pipeName); - if (r) { - fprintf(stderr, "uv_pipe_bind: %s\n", uv_strerror(r)); - return 1; - } - - r = uv_listen((uv_stream_t*)&pipeServer, SOMAXCONN, on_connection); - if (r) { - fprintf(stderr, "uv_pipe_listen: %s\n", uv_strerror(r)); - return 1; - } - - return 0; -} - - -HELPER_IMPL(tcp4_echo_server) { - loop = uv_default_loop(); - - if (tcp4_echo_start(TEST_PORT)) - return 1; - - notify_parent_process(); - uv_run(loop, UV_RUN_DEFAULT); - return 0; -} - - -HELPER_IMPL(tcp6_echo_server) { - loop = uv_default_loop(); - - if (tcp6_echo_start(TEST_PORT)) - return 1; - - notify_parent_process(); - uv_run(loop, UV_RUN_DEFAULT); - return 0; -} - - -HELPER_IMPL(pipe_echo_server) { - loop = uv_default_loop(); - - if (pipe_echo_start(TEST_PIPENAME)) - return 1; - - notify_parent_process(); - uv_run(loop, UV_RUN_DEFAULT); - return 0; -} - - -HELPER_IMPL(udp4_echo_server) { - loop = uv_default_loop(); - - if (udp4_echo_start(TEST_PORT)) - return 1; - - notify_parent_process(); - uv_run(loop, UV_RUN_DEFAULT); - return 0; -} diff --git a/libuv/test/fixtures/empty_file b/libuv/test/fixtures/empty_file deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/test/fixtures/load_error.node b/libuv/test/fixtures/load_error.node deleted file mode 100644 index 323fae0..0000000 --- a/libuv/test/fixtures/load_error.node +++ /dev/null @@ -1 +0,0 @@ -foobar diff --git a/libuv/test/fixtures/lorem_ipsum.txt b/libuv/test/fixtures/lorem_ipsum.txt deleted file mode 100644 index 1b37687..0000000 --- a/libuv/test/fixtures/lorem_ipsum.txt +++ /dev/null @@ -1 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. diff --git a/libuv/test/run-benchmarks.c b/libuv/test/run-benchmarks.c deleted file mode 100644 index 2b343da..0000000 --- a/libuv/test/run-benchmarks.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include - -#include "runner.h" -#include "task.h" - -/* Actual benchmarks and helpers are defined in benchmark-list.h */ -#include "benchmark-list.h" - -#ifdef __MVS__ -#include "zos-base.h" -/* Initialize environment and zoslib */ -__attribute__((constructor)) void init() { - zoslib_config_t config; - init_zoslib_config(&config); - init_zoslib(config); -} -#endif - - -static int maybe_run_test(int argc, char **argv); - - -int main(int argc, char **argv) { - platform_init(argc, argv); - - switch (argc) { - case 1: return run_tests(1); - case 2: return maybe_run_test(argc, argv); - case 3: return run_test_part(argv[1], argv[2]); - default: - fprintf(stderr, "Too many arguments.\n"); - fflush(stderr); - return EXIT_FAILURE; - } -} - - -static int maybe_run_test(int argc, char **argv) { - if (strcmp(argv[1], "--list") == 0) { - print_tests(stdout); - return 0; - } - - if (strcmp(argv[1], "spawn_helper") == 0) { - printf("hello world\n"); - return 42; - } - - return run_test(argv[1], 1, 1); -} diff --git a/libuv/test/run-tests.c b/libuv/test/run-tests.c deleted file mode 100644 index 5e53aaa..0000000 --- a/libuv/test/run-tests.c +++ /dev/null @@ -1,276 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include - -#ifdef _WIN32 -# include -#else -# include -#endif - -#include "uv.h" -#include "runner.h" -#include "task.h" - -/* Actual tests and helpers are defined in test-list.h */ -#include "test-list.h" - -#ifdef __MVS__ -#include "zos-base.h" -/* Initialize environment and zoslib */ -__attribute__((constructor)) void init() { - zoslib_config_t config; - init_zoslib_config(&config); - init_zoslib(config); -} -#endif - -int ipc_helper(int listen_after_write); -int ipc_helper_heavy_traffic_deadlock_bug(void); -int ipc_helper_tcp_connection(void); -int ipc_helper_closed_handle(void); -int ipc_send_recv_helper(void); -int ipc_helper_bind_twice(void); -int ipc_helper_send_zero(void); -int stdio_over_pipes_helper(void); -void spawn_stdin_stdout(void); -void process_title_big_argv(void); -int spawn_tcp_server_helper(void); - -static int maybe_run_test(int argc, char **argv); - -#ifdef _WIN32 -typedef BOOL (WINAPI *sCompareObjectHandles)(_In_ HANDLE, _In_ HANDLE); -#endif - - -int main(int argc, char **argv) { -#ifndef _WIN32 - if (0 == geteuid() && NULL == getenv("UV_RUN_AS_ROOT")) { - fprintf(stderr, "The libuv test suite cannot be run as root.\n"); - return EXIT_FAILURE; - } -#endif - - platform_init(argc, argv); - argv = uv_setup_args(argc, argv); - - switch (argc) { - case 1: return run_tests(0); - case 2: return maybe_run_test(argc, argv); - case 3: return run_test_part(argv[1], argv[2]); - case 4: return maybe_run_test(argc, argv); - default: - fprintf(stderr, "Too many arguments.\n"); - fflush(stderr); - return EXIT_FAILURE; - } - -#ifndef __SUNPRO_C - return EXIT_SUCCESS; -#endif -} - - -static int maybe_run_test(int argc, char **argv) { - if (strcmp(argv[1], "--list") == 0) { - print_tests(stdout); - return 0; - } - - if (strcmp(argv[1], "ipc_helper_listen_before_write") == 0) { - return ipc_helper(0); - } - - if (strcmp(argv[1], "ipc_helper_listen_after_write") == 0) { - return ipc_helper(1); - } - - if (strcmp(argv[1], "ipc_helper_heavy_traffic_deadlock_bug") == 0) { - return ipc_helper_heavy_traffic_deadlock_bug(); - } - - if (strcmp(argv[1], "ipc_send_recv_helper") == 0) { - return ipc_send_recv_helper(); - } - - if (strcmp(argv[1], "ipc_helper_tcp_connection") == 0) { - return ipc_helper_tcp_connection(); - } - - if (strcmp(argv[1], "ipc_helper_closed_handle") == 0) { - return ipc_helper_closed_handle(); - } - - if (strcmp(argv[1], "ipc_helper_bind_twice") == 0) { - return ipc_helper_bind_twice(); - } - - if (strcmp(argv[1], "ipc_helper_send_zero") == 0) { - return ipc_helper_send_zero(); - } - - if (strcmp(argv[1], "stdio_over_pipes_helper") == 0) { - return stdio_over_pipes_helper(); - } - - if (strcmp(argv[1], "spawn_helper1") == 0) { - notify_parent_process(); - return 1; - } - - if (strcmp(argv[1], "spawn_helper2") == 0) { - notify_parent_process(); - printf("hello world\n"); - return 1; - } - - if (strcmp(argv[1], "spawn_tcp_server_helper") == 0) { - notify_parent_process(); - return spawn_tcp_server_helper(); - } - - if (strcmp(argv[1], "spawn_helper3") == 0) { - char buffer[256]; - notify_parent_process(); - ASSERT(buffer == fgets(buffer, sizeof(buffer) - 1, stdin)); - buffer[sizeof(buffer) - 1] = '\0'; - fputs(buffer, stdout); - return 1; - } - - if (strcmp(argv[1], "spawn_helper4") == 0) { - notify_parent_process(); - /* Never surrender, never return! */ - for (;;) uv_sleep(10000); - } - - if (strcmp(argv[1], "spawn_helper5") == 0) { - const char out[] = "fourth stdio!\n"; - notify_parent_process(); - { -#ifdef _WIN32 - DWORD bytes; - WriteFile((HANDLE) _get_osfhandle(3), out, sizeof(out) - 1, &bytes, NULL); -#else - ssize_t r; - - do - r = write(3, out, sizeof(out) - 1); - while (r == -1 && errno == EINTR); - - fsync(3); -#endif - } - return 1; - } - - if (strcmp(argv[1], "spawn_helper6") == 0) { - int r; - - notify_parent_process(); - - r = fprintf(stdout, "hello world\n"); - ASSERT(r > 0); - - r = fprintf(stderr, "hello errworld\n"); - ASSERT(r > 0); - - return 1; - } - - if (strcmp(argv[1], "spawn_helper7") == 0) { - int r; - char *test; - - notify_parent_process(); - - /* Test if the test value from the parent is still set */ - test = getenv("ENV_TEST"); - ASSERT_NOT_NULL(test); - - r = fprintf(stdout, "%s", test); - ASSERT(r > 0); - - return 1; - } - - if (strcmp(argv[1], "spawn_helper8") == 0) { - uv_os_fd_t closed_fd; - uv_os_fd_t open_fd; -#ifdef _WIN32 - DWORD flags; - HMODULE kernelbase_module; - 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))); -#ifdef _WIN32 - ASSERT((intptr_t) closed_fd > 0); - ASSERT((intptr_t) open_fd > 0); - ASSERT(0 != GetHandleInformation(open_fd, &flags)); - kernelbase_module = GetModuleHandleA("kernelbase.dll"); - pCompareObjectHandles = (sCompareObjectHandles) - GetProcAddress(kernelbase_module, "CompareObjectHandles"); - ASSERT(pCompareObjectHandles == NULL || !pCompareObjectHandles(open_fd, closed_fd)); -#else - ASSERT(open_fd > 2); - ASSERT(closed_fd > 2); -# if defined(__PASE__) /* On IBMi PASE, write() returns 1 */ - ASSERT(1 == write(closed_fd, "x", 1)); -# else - ASSERT(-1 == write(closed_fd, "x", 1)); -# endif /* !__PASE__ */ -#endif - return 1; - } - - if (strcmp(argv[1], "spawn_helper9") == 0) { - notify_parent_process(); - spawn_stdin_stdout(); - return 1; - } - -#ifndef _WIN32 - if (strcmp(argv[1], "spawn_helper_setuid_setgid") == 0) { - uv_uid_t uid = atoi(argv[2]); - uv_gid_t gid = atoi(argv[3]); - - ASSERT(uid == getuid()); - ASSERT(gid == getgid()); - notify_parent_process(); - - return 1; - } -#endif /* !_WIN32 */ - - if (strcmp(argv[1], "process_title_big_argv_helper") == 0) { - notify_parent_process(); - process_title_big_argv(); - return 0; - } - - return run_test(argv[1], 0, 1); -} diff --git a/libuv/test/runner-unix.c b/libuv/test/runner-unix.c deleted file mode 100644 index a13648b..0000000 --- a/libuv/test/runner-unix.c +++ /dev/null @@ -1,445 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "runner-unix.h" -#include "runner.h" - -#include -#include /* uintptr_t */ - -#include -#include /* usleep */ -#include /* strdup */ -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -extern char** environ; - -static void closefd(int fd) { - if (close(fd) == 0 || errno == EINTR || errno == EINPROGRESS) - return; - - perror("close"); - abort(); -} - - -void notify_parent_process(void) { - char* arg; - int fd; - - arg = getenv("UV_TEST_RUNNER_FD"); - if (arg == NULL) - return; - - fd = atoi(arg); - assert(fd > STDERR_FILENO); - unsetenv("UV_TEST_RUNNER_FD"); - closefd(fd); -} - - -/* Do platform-specific initialization. */ -void platform_init(int argc, char **argv) { - /* Disable stdio output buffering. */ - setvbuf(stdout, NULL, _IONBF, 0); - setvbuf(stderr, NULL, _IONBF, 0); - signal(SIGPIPE, SIG_IGN); - snprintf(executable_path, sizeof(executable_path), "%s", argv[0]); -} - - -/* Invoke "argv[0] test-name [test-part]". Store process info in *p. Make sure - * that all stdio output of the processes is buffered up. */ -int process_start(char* name, char* part, process_info_t* p, int is_helper) { - FILE* stdout_file; - int stdout_fd; - const char* arg; - char* args[16]; - int pipefd[2]; - char fdstr[8]; - ssize_t rc; - int n; - pid_t pid; - - arg = getenv("UV_USE_VALGRIND"); - n = 0; - - /* Disable valgrind for helpers, it complains about helpers leaking memory. - * They're killed after the test and as such never get a chance to clean up. - */ - if (is_helper == 0 && arg != NULL && atoi(arg) != 0) { - args[n++] = "valgrind"; - args[n++] = "--quiet"; - args[n++] = "--leak-check=full"; - args[n++] = "--show-reachable=yes"; - args[n++] = "--error-exitcode=125"; - } - - args[n++] = executable_path; - args[n++] = name; - args[n++] = part; - args[n++] = NULL; - - stdout_file = tmpfile(); - stdout_fd = fileno(stdout_file); - if (!stdout_file) { - perror("tmpfile"); - return -1; - } - - if (is_helper) { - if (pipe(pipefd)) { - perror("pipe"); - return -1; - } - - snprintf(fdstr, sizeof(fdstr), "%d", pipefd[1]); - if (setenv("UV_TEST_RUNNER_FD", fdstr, /* overwrite */ 1)) { - perror("setenv"); - return -1; - } - } - - p->terminated = 0; - p->status = 0; - - pid = fork(); - - if (pid < 0) { - perror("fork"); - return -1; - } - - if (pid == 0) { - /* child */ - if (is_helper) - closefd(pipefd[0]); - dup2(stdout_fd, STDOUT_FILENO); - dup2(stdout_fd, STDERR_FILENO); - execve(args[0], args, environ); - perror("execve()"); - _exit(127); - } - - /* parent */ - p->pid = pid; - p->name = strdup(name); - p->stdout_file = stdout_file; - - if (!is_helper) - return 0; - - closefd(pipefd[1]); - unsetenv("UV_TEST_RUNNER_FD"); - - do - rc = read(pipefd[0], &n, 1); - while (rc == -1 && errno == EINTR); - - closefd(pipefd[0]); - - if (rc == -1) { - perror("read"); - return -1; - } - - if (rc > 0) { - fprintf(stderr, "EOF expected but got data.\n"); - return -1; - } - - return 0; -} - - -typedef struct { - int pipe[2]; - process_info_t* vec; - int n; -} dowait_args; - - -/* This function is run inside a pthread. We do this so that we can possibly - * timeout. - */ -static void* dowait(void* data) { - dowait_args* args = data; - - int i, r; - process_info_t* p; - - for (i = 0; i < args->n; i++) { - p = &args->vec[i]; - if (p->terminated) continue; - r = waitpid(p->pid, &p->status, 0); - if (r < 0) { - perror("waitpid"); - return NULL; - } - p->terminated = 1; - } - - if (args->pipe[1] >= 0) { - /* Write a character to the main thread to notify it about this. */ - ssize_t r; - - do - r = write(args->pipe[1], "", 1); - while (r == -1 && errno == EINTR); - } - - return NULL; -} - - -/* Wait for all `n` processes in `vec` to terminate. Time out after `timeout` - * msec, or never if timeout == -1. Return 0 if all processes are terminated, - * -1 on error, -2 on timeout. */ -int process_wait(process_info_t* vec, int n, int timeout) { - int i; - int r; - int retval; - process_info_t* p; - dowait_args args; - pthread_t tid; - pthread_attr_t attr; - unsigned int elapsed_ms; - struct timeval timebase; - struct timeval tv; - fd_set fds; - - args.vec = vec; - args.n = n; - args.pipe[0] = -1; - args.pipe[1] = -1; - - /* The simple case is where there is no timeout */ - if (timeout == -1) { - dowait(&args); - return 0; - } - - /* Hard case. Do the wait with a timeout. - * - * Assumption: we are the only ones making this call right now. Otherwise - * we'd need to lock vec. - */ - - r = pipe((int*)&(args.pipe)); - if (r) { - perror("pipe()"); - return -1; - } - - if (pthread_attr_init(&attr)) - abort(); - -#if defined(__MVS__) - if (pthread_attr_setstacksize(&attr, 1024 * 1024)) -#else - if (pthread_attr_setstacksize(&attr, 256 * 1024)) -#endif - abort(); - - r = pthread_create(&tid, &attr, dowait, &args); - - if (pthread_attr_destroy(&attr)) - abort(); - - if (r) { - perror("pthread_create()"); - retval = -1; - goto terminate; - } - - if (gettimeofday(&timebase, NULL)) - abort(); - - tv = timebase; - for (;;) { - /* Check that gettimeofday() doesn't jump back in time. */ - assert(tv.tv_sec > timebase.tv_sec || - (tv.tv_sec == timebase.tv_sec && tv.tv_usec >= timebase.tv_usec)); - - elapsed_ms = - (tv.tv_sec - timebase.tv_sec) * 1000 + - (tv.tv_usec / 1000) - - (timebase.tv_usec / 1000); - - r = 0; /* Timeout. */ - if (elapsed_ms >= (unsigned) timeout) - break; - - tv.tv_sec = (timeout - elapsed_ms) / 1000; - tv.tv_usec = (timeout - elapsed_ms) % 1000 * 1000; - - FD_ZERO(&fds); - FD_SET(args.pipe[0], &fds); - - r = select(args.pipe[0] + 1, &fds, NULL, NULL, &tv); - if (!(r == -1 && errno == EINTR)) - break; - - if (gettimeofday(&tv, NULL)) - abort(); - } - - if (r == -1) { - perror("select()"); - retval = -1; - - } else if (r) { - /* The thread completed successfully. */ - retval = 0; - - } else { - /* Timeout. Kill all the children. */ - for (i = 0; i < n; i++) { - p = &vec[i]; - kill(p->pid, SIGTERM); - } - retval = -2; - } - - if (pthread_join(tid, NULL)) - abort(); - -terminate: - close(args.pipe[0]); - close(args.pipe[1]); - return retval; -} - - -/* Returns the number of bytes in the stdio output buffer for process `p`. */ -long int process_output_size(process_info_t *p) { - /* Size of the p->stdout_file */ - struct stat buf; - - int r = fstat(fileno(p->stdout_file), &buf); - if (r < 0) { - return -1; - } - - return (long)buf.st_size; -} - - -/* Copy the contents of the stdio output buffer to `fd`. */ -int process_copy_output(process_info_t* p, FILE* stream) { - char buf[1024]; - int r; - - r = fseek(p->stdout_file, 0, SEEK_SET); - if (r < 0) { - perror("fseek"); - return -1; - } - - /* TODO: what if the line is longer than buf */ - while ((r = fread(buf, 1, sizeof(buf), p->stdout_file)) != 0) - print_lines(buf, r, stream); - - if (ferror(p->stdout_file)) { - perror("read"); - return -1; - } - - return 0; -} - - -/* Copy the last line of the stdio output buffer to `buffer` */ -int process_read_last_line(process_info_t *p, - char* buffer, - size_t buffer_len) { - char* ptr; - - int r = fseek(p->stdout_file, 0, SEEK_SET); - if (r < 0) { - perror("fseek"); - return -1; - } - - buffer[0] = '\0'; - - while (fgets(buffer, buffer_len, p->stdout_file) != NULL) { - for (ptr = buffer; *ptr && *ptr != '\r' && *ptr != '\n'; ptr++) - ; - *ptr = '\0'; - } - - if (ferror(p->stdout_file)) { - perror("read"); - buffer[0] = '\0'; - return -1; - } - return 0; -} - - -/* Return the name that was specified when `p` was started by process_start */ -char* process_get_name(process_info_t *p) { - return p->name; -} - - -/* Terminate process `p`. */ -int process_terminate(process_info_t *p) { - return kill(p->pid, SIGTERM); -} - - -/* Return the exit code of process p. On error, return -1. */ -int process_reap(process_info_t *p) { - if (WIFEXITED(p->status)) { - return WEXITSTATUS(p->status); - } else { - return p->status; /* ? */ - } -} - - -/* Clean up after terminating process `p` (e.g. free the output buffer etc.). */ -void process_cleanup(process_info_t *p) { - fclose(p->stdout_file); - free(p->name); -} - - -/* Move the console cursor one line up and back to the first column. */ -void rewind_cursor(void) { -#if defined(__MVS__) - fprintf(stderr, "\047[2K\r"); -#else - fprintf(stderr, "\033[2K\r"); -#endif -} diff --git a/libuv/test/runner-unix.h b/libuv/test/runner-unix.h deleted file mode 100644 index e21847f..0000000 --- a/libuv/test/runner-unix.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef TEST_RUNNER_UNIX_H -#define TEST_RUNNER_UNIX_H - -#include -#include /* FILE */ - -typedef struct { - FILE* stdout_file; - pid_t pid; - char* name; - int status; - int terminated; -} process_info_t; - -#endif /* TEST_RUNNER_UNIX_H */ diff --git a/libuv/test/runner-win.c b/libuv/test/runner-win.c deleted file mode 100644 index 8c2a00b..0000000 --- a/libuv/test/runner-win.c +++ /dev/null @@ -1,346 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include -#include -#include -#if !defined(__MINGW32__) -# include -#endif - - -#include "task.h" -#include "runner.h" - - -/* - * Define the stuff that MinGW doesn't have - */ -#ifndef GetFileSizeEx - WINBASEAPI BOOL WINAPI GetFileSizeEx(HANDLE hFile, - PLARGE_INTEGER lpFileSize); -#endif - - -/* Do platform-specific initialization. */ -void platform_init(int argc, char **argv) { - /* Disable the "application crashed" popup. */ - SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | - SEM_NOOPENFILEERRORBOX); -#if !defined(__MINGW32__) - _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG); - _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG); -#endif - - _setmode(0, _O_BINARY); - _setmode(1, _O_BINARY); - _setmode(2, _O_BINARY); - -#ifdef _MSC_VER - _set_fmode(_O_BINARY); -#else - _fmode = _O_BINARY; -#endif - - /* Disable stdio output buffering. */ - setvbuf(stdout, NULL, _IONBF, 0); - setvbuf(stderr, NULL, _IONBF, 0); - - strcpy(executable_path, argv[0]); -} - - -int process_start(char *name, char *part, process_info_t *p, int is_helper) { - HANDLE file = INVALID_HANDLE_VALUE; - HANDLE nul = INVALID_HANDLE_VALUE; - WCHAR path[MAX_PATH], filename[MAX_PATH]; - WCHAR image[MAX_PATH + 1]; - WCHAR args[MAX_PATH * 2]; - STARTUPINFOW si; - PROCESS_INFORMATION pi; - DWORD result; - - if (!is_helper) { - /* Give the helpers time to settle. Race-y, fix this. */ - uv_sleep(250); - } - - if (GetTempPathW(sizeof(path) / sizeof(WCHAR), (WCHAR*)&path) == 0) - goto error; - if (GetTempFileNameW((WCHAR*)&path, L"uv", 0, (WCHAR*)&filename) == 0) - goto error; - - file = CreateFileW((WCHAR*)filename, - GENERIC_READ | GENERIC_WRITE, - 0, - NULL, - CREATE_ALWAYS, - FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE, - NULL); - if (file == INVALID_HANDLE_VALUE) - goto error; - - if (!SetHandleInformation(file, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT)) - goto error; - - nul = CreateFileA("nul", - GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - if (nul == INVALID_HANDLE_VALUE) - goto error; - - if (!SetHandleInformation(nul, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT)) - goto error; - - result = GetModuleFileNameW(NULL, - (WCHAR*) &image, - sizeof(image) / sizeof(WCHAR)); - if (result == 0 || result == sizeof(image)) - goto error; - - if (part) { - if (_snwprintf((WCHAR*)args, - sizeof(args) / sizeof(WCHAR), - L"\"%s\" %S %S", - image, - name, - part) < 0) { - goto error; - } - } else { - if (_snwprintf((WCHAR*)args, - sizeof(args) / sizeof(WCHAR), - L"\"%s\" %S", - image, - name) < 0) { - goto error; - } - } - - memset((void*)&si, 0, sizeof(si)); - si.cb = sizeof(si); - si.dwFlags = STARTF_USESTDHANDLES; - si.hStdInput = nul; - si.hStdOutput = file; - si.hStdError = file; - - if (!CreateProcessW(image, args, NULL, NULL, TRUE, - 0, NULL, NULL, &si, &pi)) - goto error; - - CloseHandle(pi.hThread); - - SetHandleInformation(nul, HANDLE_FLAG_INHERIT, 0); - SetHandleInformation(file, HANDLE_FLAG_INHERIT, 0); - - p->stdio_in = nul; - p->stdio_out = file; - p->process = pi.hProcess; - p->name = part; - - return 0; - -error: - if (file != INVALID_HANDLE_VALUE) - CloseHandle(file); - if (nul != INVALID_HANDLE_VALUE) - CloseHandle(nul); - - return -1; -} - - -/* Timeout is in msecs. Set timeout < 0 to never time out. Returns 0 when all - * processes are terminated, -2 on timeout. */ -int process_wait(process_info_t *vec, int n, int timeout) { - int i; - HANDLE handles[MAXIMUM_WAIT_OBJECTS]; - DWORD timeout_api, result; - - /* If there's nothing to wait for, return immediately. */ - if (n == 0) - return 0; - - ASSERT(n <= MAXIMUM_WAIT_OBJECTS); - - for (i = 0; i < n; i++) - handles[i] = vec[i].process; - - if (timeout >= 0) { - timeout_api = (DWORD)timeout; - } else { - timeout_api = INFINITE; - } - - result = WaitForMultipleObjects(n, handles, TRUE, timeout_api); - - if (result < WAIT_OBJECT_0 + n) { - /* All processes are terminated. */ - return 0; - } - if (result == WAIT_TIMEOUT) { - return -2; - } - return -1; -} - - -long int process_output_size(process_info_t *p) { - LARGE_INTEGER size; - if (!GetFileSizeEx(p->stdio_out, &size)) - return -1; - return (long int)size.QuadPart; -} - - -int process_copy_output(process_info_t* p, FILE* stream) { - char buf[1024]; - int fd, r; - - fd = _open_osfhandle((intptr_t)p->stdio_out, _O_RDONLY | _O_TEXT); - if (fd == -1) - return -1; - - r = _lseek(fd, 0, SEEK_SET); - if (r < 0) - return -1; - - while ((r = _read(fd, buf, sizeof(buf))) != 0) - print_lines(buf, r, stream); - - _close(fd); - return 0; -} - - -int process_read_last_line(process_info_t *p, - char * buffer, - size_t buffer_len) { - DWORD size; - DWORD read; - DWORD start; - OVERLAPPED overlapped; - - ASSERT(buffer_len > 0); - - size = GetFileSize(p->stdio_out, NULL); - if (size == INVALID_FILE_SIZE) - return -1; - - if (size == 0) { - buffer[0] = '\0'; - return 1; - } - - memset(&overlapped, 0, sizeof overlapped); - if (size >= buffer_len) - overlapped.Offset = size - buffer_len - 1; - - if (!ReadFile(p->stdio_out, buffer, buffer_len - 1, &read, &overlapped)) - return -1; - - start = read; - while (start-- > 0) { - if (buffer[start] == '\n' || buffer[start] == '\r') - break; - } - - if (start > 0) - memmove(buffer, buffer + start, read - start); - - buffer[read - start] = '\0'; - - return 0; -} - - -char* process_get_name(process_info_t *p) { - return p->name; -} - - -int process_terminate(process_info_t *p) { - if (!TerminateProcess(p->process, 1)) - return -1; - return 0; -} - - -int process_reap(process_info_t *p) { - DWORD exitCode; - if (!GetExitCodeProcess(p->process, &exitCode)) - return -1; - return (int)exitCode; -} - - -void process_cleanup(process_info_t *p) { - CloseHandle(p->process); - CloseHandle(p->stdio_in); -} - - -static int clear_line(void) { - HANDLE handle; - CONSOLE_SCREEN_BUFFER_INFO info; - COORD coord; - DWORD written; - - handle = (HANDLE)_get_osfhandle(fileno(stderr)); - if (handle == INVALID_HANDLE_VALUE) - return -1; - - if (!GetConsoleScreenBufferInfo(handle, &info)) - return -1; - - coord = info.dwCursorPosition; - if (coord.Y <= 0) - return -1; - - coord.X = 0; - - if (!SetConsoleCursorPosition(handle, coord)) - return -1; - - if (!FillConsoleOutputCharacterW(handle, - 0x20, - info.dwSize.X, - coord, - &written)) { - return -1; - } - - return 0; -} - - -void rewind_cursor() { - if (clear_line() == -1) { - /* If clear_line fails (stdout is not a console), print a newline. */ - fprintf(stderr, "\n"); - } -} diff --git a/libuv/test/runner-win.h b/libuv/test/runner-win.h deleted file mode 100644 index 975eed7..0000000 --- a/libuv/test/runner-win.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* Don't complain about write(), fileno() etc. being deprecated. */ -#ifdef _MSC_VER -#pragma warning(disable : 4996) -#endif - - -#include -#include -#include - -#if !defined(snprintf) && defined(_MSC_VER) && _MSC_VER < 1900 -extern int snprintf(char*, size_t, const char*, ...); -#endif - -typedef struct { - HANDLE process; - HANDLE stdio_in; - HANDLE stdio_out; - char *name; -} process_info_t; diff --git a/libuv/test/runner.c b/libuv/test/runner.c deleted file mode 100644 index 7891082..0000000 --- a/libuv/test/runner.c +++ /dev/null @@ -1,453 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include - -#include "runner.h" -#include "task.h" -#include "uv.h" - -char executable_path[sizeof(executable_path)]; - - -static int compare_task(const void* va, const void* vb) { - const task_entry_t* a = va; - const task_entry_t* b = vb; - return strcmp(a->task_name, b->task_name); -} - - -const char* fmt(double d) { - static char buf[1024]; - static char* p; - uint64_t v; - - if (p == NULL) - p = buf; - - p += 31; - - if (p >= buf + sizeof(buf)) - return ""; - - v = (uint64_t) d; - -#if 0 /* works but we don't care about fractional precision */ - if (d - v >= 0.01) { - *--p = '0' + (uint64_t) (d * 100) % 10; - *--p = '0' + (uint64_t) (d * 10) % 10; - *--p = '.'; - } -#endif - - if (v == 0) - *--p = '0'; - - while (v) { - if (v) *--p = '0' + (v % 10), v /= 10; - if (v) *--p = '0' + (v % 10), v /= 10; - if (v) *--p = '0' + (v % 10), v /= 10; - if (v) *--p = ','; - } - - return p; -} - - -int run_tests(int benchmark_output) { - int actual; - int total; - int passed; - int failed; - int skipped; - int current; - int test_result; - int skip; - task_entry_t* task; - - /* Count the number of tests. */ - actual = 0; - total = 0; - for (task = TASKS; task->main; task++, actual++) { - if (!task->is_helper) { - total++; - } - } - - /* Keep platform_output first. */ - skip = (actual > 0 && 0 == strcmp(TASKS[0].task_name, "platform_output")); - qsort(TASKS + skip, actual - skip, sizeof(TASKS[0]), compare_task); - - fprintf(stdout, "1..%d\n", total); - fflush(stdout); - - /* Run all tests. */ - passed = 0; - failed = 0; - skipped = 0; - current = 1; - for (task = TASKS; task->main; task++) { - if (task->is_helper) { - continue; - } - - test_result = run_test(task->task_name, benchmark_output, current); - switch (test_result) { - case TEST_OK: passed++; break; - case TEST_SKIP: skipped++; break; - default: failed++; - } - current++; - } - - return failed; -} - - -void log_tap_result(int test_count, - const char* test, - int status, - process_info_t* process) { - const char* result; - const char* directive; - char reason[1024]; - int reason_length; - - switch (status) { - case TEST_OK: - result = "ok"; - directive = ""; - break; - case TEST_SKIP: - result = "ok"; - directive = " # SKIP "; - break; - default: - result = "not ok"; - directive = ""; - } - - if (status == TEST_SKIP && process_output_size(process) > 0) { - process_read_last_line(process, reason, sizeof reason); - reason_length = strlen(reason); - if (reason_length > 0 && reason[reason_length - 1] == '\n') - reason[reason_length - 1] = '\0'; - } else { - reason[0] = '\0'; - } - - fprintf(stdout, "%s %d - %s%s%s\n", result, test_count, test, directive, reason); - fflush(stdout); -} - - -int run_test(const char* test, - int benchmark_output, - int test_count) { - char errmsg[1024] = ""; - process_info_t processes[1024]; - process_info_t *main_proc; - task_entry_t* task; - int timeout_multiplier; - int process_count; - int result; - int status; - int i; - - status = 255; - main_proc = NULL; - process_count = 0; - -#ifndef _WIN32 - /* Clean up stale socket from previous run. */ - remove(TEST_PIPENAME); - remove(TEST_PIPENAME_2); - remove(TEST_PIPENAME_3); -#endif - - /* If it's a helper the user asks for, start it directly. */ - for (task = TASKS; task->main; task++) { - if (task->is_helper && strcmp(test, task->process_name) == 0) { - return task->main(); - } - } - - /* Start the helpers first. */ - for (task = TASKS; task->main; task++) { - if (strcmp(test, task->task_name) != 0) { - continue; - } - - /* Skip the test itself. */ - if (!task->is_helper) { - continue; - } - - if (process_start(task->task_name, - task->process_name, - &processes[process_count], - 1 /* is_helper */) == -1) { - snprintf(errmsg, - sizeof errmsg, - "Process `%s` failed to start.", - task->process_name); - goto out; - } - - process_count++; - } - - /* Now start the test itself. */ - for (task = TASKS; task->main; task++) { - if (strcmp(test, task->task_name) != 0) { - continue; - } - - if (task->is_helper) { - continue; - } - - if (process_start(task->task_name, - task->process_name, - &processes[process_count], - 0 /* !is_helper */) == -1) { - snprintf(errmsg, - sizeof errmsg, - "Process `%s` failed to start.", - task->process_name); - goto out; - } - - main_proc = &processes[process_count]; - process_count++; - break; - } - - if (main_proc == NULL) { - snprintf(errmsg, - sizeof errmsg, - "No test with that name: %s", - test); - goto out; - } - - timeout_multiplier = 1; -#ifndef _WIN32 - do { - const char* var; - - var = getenv("UV_TEST_TIMEOUT_MULTIPLIER"); - if (var == NULL) - break; - - timeout_multiplier = atoi(var); - if (timeout_multiplier <= 0) - timeout_multiplier = 1; - } while (0); -#endif - - result = process_wait(main_proc, 1, task->timeout * timeout_multiplier); - if (result == -1) { - FATAL("process_wait failed"); - } else if (result == -2) { - /* Don't have to clean up the process, process_wait() has killed it. */ - snprintf(errmsg, - sizeof errmsg, - "timeout"); - goto out; - } - - status = process_reap(main_proc); - if (status != TEST_OK) { - snprintf(errmsg, - sizeof errmsg, - "exit code %d", - status); - goto out; - } - - if (benchmark_output) { - /* Give the helpers time to clean up their act. */ - uv_sleep(1000); - } - -out: - /* Reap running processes except the main process, it's already dead. */ - for (i = 0; i < process_count - 1; i++) { - process_terminate(&processes[i]); - } - - if (process_count > 0 && - process_wait(processes, process_count - 1, -1) < 0) { - FATAL("process_wait failed"); - } - - log_tap_result(test_count, test, status, &processes[i]); - - /* Show error and output from processes if the test failed. */ - if ((status != TEST_OK && status != TEST_SKIP) || task->show_output) { - if (strlen(errmsg) > 0) - fprintf(stdout, "# %s\n", errmsg); - fprintf(stdout, "# "); - fflush(stdout); - - for (i = 0; i < process_count; i++) { - switch (process_output_size(&processes[i])) { - case -1: - fprintf(stdout, "Output from process `%s`: (unavailable)\n", - process_get_name(&processes[i])); - fflush(stdout); - break; - - case 0: - fprintf(stdout, "Output from process `%s`: (no output)\n", - process_get_name(&processes[i])); - fflush(stdout); - break; - - default: - fprintf(stdout, "Output from process `%s`:\n", process_get_name(&processes[i])); - fflush(stdout); - process_copy_output(&processes[i], stdout); - break; - } - } - - /* In benchmark mode show concise output from the main process. */ - } else if (benchmark_output) { - switch (process_output_size(main_proc)) { - case -1: - fprintf(stdout, "%s: (unavailable)\n", test); - fflush(stdout); - break; - - case 0: - fprintf(stdout, "%s: (no output)\n", test); - fflush(stdout); - break; - - default: - for (i = 0; i < process_count; i++) { - process_copy_output(&processes[i], stdout); - } - break; - } - } - - /* Clean up all process handles. */ - for (i = 0; i < process_count; i++) { - process_cleanup(&processes[i]); - } - - return status; -} - - -/* Returns the status code of the task part - * or 255 if no matching task was not found. - */ -int run_test_part(const char* test, const char* part) { - task_entry_t* task; - int r; - - for (task = TASKS; task->main; task++) { - if (strcmp(test, task->task_name) == 0 && - strcmp(part, task->process_name) == 0) { - r = task->main(); - return r; - } - } - - fprintf(stdout, "No test part with that name: %s:%s\n", test, part); - fflush(stdout); - return 255; -} - - - -static int find_helpers(const task_entry_t* task, - const task_entry_t** helpers) { - const task_entry_t* helper; - int n_helpers; - - for (n_helpers = 0, helper = TASKS; helper->main; helper++) { - if (helper->is_helper && strcmp(helper->task_name, task->task_name) == 0) { - *helpers++ = helper; - n_helpers++; - } - } - - return n_helpers; -} - - -void print_tests(FILE* stream) { - const task_entry_t* helpers[1024]; - const task_entry_t* task; - int n_helpers; - int n_tasks; - int i; - - for (n_tasks = 0, task = TASKS; task->main; n_tasks++, task++); - qsort(TASKS, n_tasks, sizeof(TASKS[0]), compare_task); - - for (task = TASKS; task->main; task++) { - if (task->is_helper) { - continue; - } - - n_helpers = find_helpers(task, helpers); - if (n_helpers) { - printf("%-25s (helpers:", task->task_name); - for (i = 0; i < n_helpers; i++) { - printf(" %s", helpers[i]->process_name); - } - printf(")\n"); - } else { - printf("%s\n", task->task_name); - } - } -} - - -void print_lines(const char* buffer, size_t size, FILE* stream) { - const char* start; - const char* end; - - start = buffer; - while ((end = memchr(start, '\n', &buffer[size] - start))) { - fputs("# ", stream); - fwrite(start, 1, (int)(end - start), stream); - fputs("\n", stream); - fflush(stream); - start = end + 1; - } - - end = &buffer[size]; - if (start < end) { - fputs("# ", stream); - fwrite(start, 1, (int)(end - start), stream); - fputs("\n", stream); - fflush(stream); - } -} diff --git a/libuv/test/runner.h b/libuv/test/runner.h deleted file mode 100644 index 6801564..0000000 --- a/libuv/test/runner.h +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef RUNNER_H_ -#define RUNNER_H_ - -#include /* PATH_MAX */ -#include /* FILE */ - - -/* - * The maximum number of processes (main + helpers) that a test / benchmark - * can have. - */ -#define MAX_PROCESSES 8 - - -/* - * Struct to store both tests and to define helper processes for tasks. - */ -typedef struct { - char *task_name; - char *process_name; - int (*main)(void); - int is_helper; - int show_output; - - /* - * The time in milliseconds after which a single test or benchmark times out. - */ - int timeout; -} task_entry_t, bench_entry_t; - - -/* - * Macros used by test-list.h and benchmark-list.h. - */ -#define TASK_LIST_START \ - task_entry_t TASKS[] = { - -#define TASK_LIST_END \ - { 0, 0, 0, 0, 0, 0 } \ - }; - -#define TEST_DECLARE(name) \ - int run_test_##name(void); - -#define TEST_ENTRY(name) \ - { #name, #name, &run_test_##name, 0, 0, 5000 }, - -#define TEST_ENTRY_CUSTOM(name, is_helper, show_output, timeout) \ - { #name, #name, &run_test_##name, is_helper, show_output, timeout }, - -#define BENCHMARK_DECLARE(name) \ - int run_benchmark_##name(void); - -#define BENCHMARK_ENTRY(name) \ - { #name, #name, &run_benchmark_##name, 0, 0, 60000 }, - -#define HELPER_DECLARE(name) \ - int run_helper_##name(void); - -#define HELPER_ENTRY(task_name, name) \ - { #task_name, #name, &run_helper_##name, 1, 0, 0 }, - -#define TEST_HELPER HELPER_ENTRY -#define BENCHMARK_HELPER HELPER_ENTRY - -extern char executable_path[4096]; - -/* - * Include platform-dependent definitions - */ -#ifdef _WIN32 -# include "runner-win.h" -#else -# include "runner-unix.h" -#endif - - -/* The array that is filled by test-list.h or benchmark-list.h */ -extern task_entry_t TASKS[]; - -/* - * Run all tests. - */ -int run_tests(int benchmark_output); - -/* - * Run a single test. Starts up any helpers. - */ -int run_test(const char* test, - int benchmark_output, - int test_count); - -/* - * Run a test part, i.e. the test or one of its helpers. - */ -int run_test_part(const char* test, const char* part); - - -/* - * Print tests in sorted order to `stream`. Used by `./run-tests --list`. - */ -void print_tests(FILE* stream); - -/* Print lines in |buffer| as TAP diagnostics to |stream|. */ -void print_lines(const char* buffer, size_t size, FILE* stream); - -/* - * Stuff that should be implemented by test-runner-.h - * All functions return 0 on success, -1 on failure, unless specified - * otherwise. - */ - -/* Do platform-specific initialization. */ -void platform_init(int argc, char** argv); - -/* Invoke "argv[0] test-name [test-part]". Store process info in *p. Make sure - * that all stdio output of the processes is buffered up. */ -int process_start(char *name, char* part, process_info_t *p, int is_helper); - -/* Wait for all `n` processes in `vec` to terminate. Time out after `timeout` - * msec, or never if timeout == -1. Return 0 if all processes are terminated, - * -1 on error, -2 on timeout. */ -int process_wait(process_info_t *vec, int n, int timeout); - -/* Returns the number of bytes in the stdio output buffer for process `p`. */ -long int process_output_size(process_info_t *p); - -/* Copy the contents of the stdio output buffer to `stream`. */ -int process_copy_output(process_info_t* p, FILE* stream); - -/* Copy the last line of the stdio output buffer to `buffer` */ -int process_read_last_line(process_info_t *p, - char * buffer, - size_t buffer_len); - -/* Return the name that was specified when `p` was started by process_start */ -char* process_get_name(process_info_t *p); - -/* Terminate process `p`. */ -int process_terminate(process_info_t *p); - -/* Return the exit code of process p. On error, return -1. */ -int process_reap(process_info_t *p); - -/* Clean up after terminating process `p` (e.g. free the output buffer etc.). */ -void process_cleanup(process_info_t *p); - -/* Move the console cursor one line up and back to the first column. */ -void rewind_cursor(void); - -#endif /* RUNNER_H_ */ diff --git a/libuv/test/task.h b/libuv/test/task.h deleted file mode 100644 index a02c893..0000000 --- a/libuv/test/task.h +++ /dev/null @@ -1,378 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef TASK_H_ -#define TASK_H_ - -#include "uv.h" - -#include -#include -#include -#include -#include - -#if defined(_MSC_VER) && _MSC_VER < 1600 -# include "uv/stdint-msvc2008.h" -#else -# include -#endif - -#if !defined(_WIN32) -# include -# include /* setrlimit() */ -#endif - -#ifdef __clang__ -# pragma clang diagnostic ignored "-Wvariadic-macros" -# pragma clang diagnostic ignored "-Wc99-extensions" -#endif - -#ifdef __GNUC__ -# pragma GCC diagnostic ignored "-Wvariadic-macros" -#endif - -#define TEST_PORT 9123 -#define TEST_PORT_2 9124 -#define TEST_PORT_3 9125 - -#ifdef _WIN32 -# define TEST_PIPENAME "\\\\?\\pipe\\uv-test" -# define TEST_PIPENAME_2 "\\\\?\\pipe\\uv-test2" -# define TEST_PIPENAME_3 "\\\\?\\pipe\\uv-test3" -#else -# define TEST_PIPENAME "/tmp/uv-test-sock" -# define TEST_PIPENAME_2 "/tmp/uv-test-sock2" -# define TEST_PIPENAME_3 "/tmp/uv-test-sock3" -#endif - -#ifdef _WIN32 -# include -# ifndef S_IRUSR -# define S_IRUSR _S_IREAD -# endif -# ifndef S_IWUSR -# define S_IWUSR _S_IWRITE -# endif -#endif - -#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) - -#define container_of(ptr, type, member) \ - ((type *) ((char *) (ptr) - offsetof(type, member))) - -typedef enum { - TCP = 0, - UDP, - PIPE -} stream_type; - -/* Die with fatal error. */ -#define FATAL(msg) \ - do { \ - fprintf(stderr, \ - "Fatal error in %s on line %d: %s\n", \ - __FILE__, \ - __LINE__, \ - msg); \ - fflush(stderr); \ - abort(); \ - } while (0) - -/* Have our own assert, so we are sure it does not get optimized away in - * a release build. - */ -#define ASSERT(expr) \ - do { \ - if (!(expr)) { \ - fprintf(stderr, \ - "Assertion failed in %s on line %d: %s\n", \ - __FILE__, \ - __LINE__, \ - #expr); \ - abort(); \ - } \ - } while (0) - -#define ASSERT_BASE(a, operator, b, type, conv) \ - do { \ - volatile type eval_a = (type) (a); \ - volatile type eval_b = (type) (b); \ - if (!(eval_a operator eval_b)) { \ - fprintf(stderr, \ - "Assertion failed in %s on line %d: `%s %s %s` " \ - "(%"conv" %s %"conv")\n", \ - __FILE__, \ - __LINE__, \ - #a, \ - #operator, \ - #b, \ - eval_a, \ - #operator, \ - eval_b); \ - abort(); \ - } \ - } while (0) - -#define ASSERT_BASE_STR(expr, a, operator, b, type, conv) \ - do { \ - if (!(expr)) { \ - fprintf(stderr, \ - "Assertion failed in %s on line %d: `%s %s %s` " \ - "(%"conv" %s %"conv")\n", \ - __FILE__, \ - __LINE__, \ - #a, \ - #operator, \ - #b, \ - (type)a, \ - #operator, \ - (type)b); \ - abort(); \ - } \ - } while (0) - -#define ASSERT_BASE_LEN(expr, a, operator, b, conv, len) \ - do { \ - if (!(expr)) { \ - fprintf(stderr, \ - "Assertion failed in %s on line %d: `%s %s %s` " \ - "(%.*"#conv" %s %.*"#conv")\n", \ - __FILE__, \ - __LINE__, \ - #a, \ - #operator, \ - #b, \ - (int)len, \ - a, \ - #operator, \ - (int)len, \ - b); \ - abort(); \ - } \ - } while (0) - -#define ASSERT_BASE_HEX(expr, a, operator, b, size) \ - do { \ - if (!(expr)) { \ - int i; \ - unsigned char* a_ = (unsigned char*)a; \ - unsigned char* b_ = (unsigned char*)b; \ - fprintf(stderr, \ - "Assertion failed in %s on line %d: `%s %s %s` (", \ - __FILE__, \ - __LINE__, \ - #a, \ - #operator, \ - #b); \ - for (i = 0; i < size; ++i) { \ - if (i > 0) fprintf(stderr, ":"); \ - fprintf(stderr, "%02X", a_[i]); \ - } \ - fprintf(stderr, " %s ", #operator); \ - for (i = 0; i < size; ++i) { \ - if (i > 0) fprintf(stderr, ":"); \ - fprintf(stderr, "%02X", b_[i]); \ - } \ - fprintf(stderr, ")\n"); \ - abort(); \ - } \ - } while (0) - -#define ASSERT_EQ(a, b) ASSERT_BASE(a, ==, b, int64_t, PRId64) -#define ASSERT_GE(a, b) ASSERT_BASE(a, >=, b, int64_t, PRId64) -#define ASSERT_GT(a, b) ASSERT_BASE(a, >, b, int64_t, PRId64) -#define ASSERT_LE(a, b) ASSERT_BASE(a, <=, b, int64_t, PRId64) -#define ASSERT_LT(a, b) ASSERT_BASE(a, <, b, int64_t, PRId64) -#define ASSERT_NE(a, b) ASSERT_BASE(a, !=, b, int64_t, PRId64) - -#define ASSERT_UINT64_EQ(a, b) ASSERT_BASE(a, ==, b, uint64_t, PRIu64) -#define ASSERT_UINT64_GE(a, b) ASSERT_BASE(a, >=, b, uint64_t, PRIu64) -#define ASSERT_UINT64_GT(a, b) ASSERT_BASE(a, >, b, uint64_t, PRIu64) -#define ASSERT_UINT64_LE(a, b) ASSERT_BASE(a, <=, b, uint64_t, PRIu64) -#define ASSERT_UINT64_LT(a, b) ASSERT_BASE(a, <, b, uint64_t, PRIu64) -#define ASSERT_UINT64_NE(a, b) ASSERT_BASE(a, !=, b, uint64_t, PRIu64) - -#define ASSERT_DOUBLE_EQ(a, b) ASSERT_BASE(a, ==, b, double, "f") -#define ASSERT_DOUBLE_GE(a, b) ASSERT_BASE(a, >=, b, double, "f") -#define ASSERT_DOUBLE_GT(a, b) ASSERT_BASE(a, >, b, double, "f") -#define ASSERT_DOUBLE_LE(a, b) ASSERT_BASE(a, <=, b, double, "f") -#define ASSERT_DOUBLE_LT(a, b) ASSERT_BASE(a, <, b, double, "f") -#define ASSERT_DOUBLE_NE(a, b) ASSERT_BASE(a, !=, b, double, "f") - -#define ASSERT_STR_EQ(a, b) \ - ASSERT_BASE_STR(strcmp(a, b) == 0, a, == , b, char*, "s") - -#define ASSERT_STR_NE(a, b) \ - ASSERT_BASE_STR(strcmp(a, b) != 0, a, !=, b, char*, "s") - -#define ASSERT_MEM_EQ(a, b, size) \ - ASSERT_BASE_LEN(memcmp(a, b, size) == 0, a, ==, b, s, size) - -#define ASSERT_MEM_NE(a, b, size) \ - ASSERT_BASE_LEN(memcmp(a, b, size) != 0, a, !=, b, s, size) - -#define ASSERT_MEM_HEX_EQ(a, b, size) \ - ASSERT_BASE_HEX(memcmp(a, b, size) == 0, a, ==, b, size) - -#define ASSERT_MEM_HEX_NE(a, b, size) \ - ASSERT_BASE_HEX(memcmp(a, b, size) != 0, a, !=, b, size) - -#define ASSERT_NULL(a) \ - ASSERT_BASE(a, ==, NULL, void*, "p") - -#define ASSERT_NOT_NULL(a) \ - ASSERT_BASE(a, !=, NULL, void*, "p") - -#define ASSERT_PTR_EQ(a, b) \ - ASSERT_BASE(a, ==, b, void*, "p") - -#define ASSERT_PTR_NE(a, b) \ - ASSERT_BASE(a, !=, b, void*, "p") - -/* This macro cleans up the main loop. This is used to avoid valgrind - * warnings about memory being "leaked" by the main event loop. - */ -#define MAKE_VALGRIND_HAPPY() \ - do { \ - close_loop(uv_default_loop()); \ - ASSERT(0 == uv_loop_close(uv_default_loop())); \ - uv_library_shutdown(); \ - } while (0) - -/* Just sugar for wrapping the main() for a task or helper. */ -#define TEST_IMPL(name) \ - int run_test_##name(void); \ - int run_test_##name(void) - -#define BENCHMARK_IMPL(name) \ - int run_benchmark_##name(void); \ - int run_benchmark_##name(void) - -#define HELPER_IMPL(name) \ - int run_helper_##name(void); \ - int run_helper_##name(void) - -/* Format big numbers nicely. WARNING: leaks memory. */ -const char* fmt(double d); - -/* Reserved test exit codes. */ -enum test_status { - TEST_OK = 0, - TEST_SKIP -}; - -#define RETURN_OK() \ - do { \ - return TEST_OK; \ - } while (0) - -#define RETURN_SKIP(explanation) \ - do { \ - fprintf(stderr, "%s\n", explanation); \ - fflush(stderr); \ - return TEST_SKIP; \ - } while (0) - -#if !defined(_WIN32) - -# define TEST_FILE_LIMIT(num) \ - do { \ - struct rlimit lim; \ - lim.rlim_cur = (num); \ - lim.rlim_max = lim.rlim_cur; \ - if (setrlimit(RLIMIT_NOFILE, &lim)) \ - RETURN_SKIP("File descriptor limit too low."); \ - } while (0) - -#else /* defined(_WIN32) */ - -# define TEST_FILE_LIMIT(num) do {} while (0) - -#endif - -#if !defined(snprintf) && defined(_MSC_VER) && _MSC_VER < 1900 -extern int snprintf(char*, size_t, const char*, ...); -#endif - -#if defined(__clang__) || \ - defined(__GNUC__) || \ - defined(__INTEL_COMPILER) -# define UNUSED __attribute__((unused)) -#else -# define UNUSED -#endif - -#if defined(_WIN32) -#define notify_parent_process() ((void) 0) -#else -extern void notify_parent_process(void); -#endif - -/* Fully close a loop */ -static void close_walk_cb(uv_handle_t* handle, void* arg) { - if (!uv_is_closing(handle)) - uv_close(handle, NULL); -} - -UNUSED static void close_loop(uv_loop_t* loop) { - uv_walk(loop, close_walk_cb, NULL); - uv_run(loop, UV_RUN_DEFAULT); -} - -UNUSED static int can_ipv6(void) { - uv_interface_address_t* addr; - int supported; - int count; - int i; - - if (uv_interface_addresses(&addr, &count)) - return 0; /* Assume no IPv6 support on failure. */ - - supported = 0; - for (i = 0; supported == 0 && i < count; i += 1) - supported = (AF_INET6 == addr[i].address.address6.sin6_family); - - uv_free_interface_addresses(addr, count); - return supported; -} - -#if defined(__CYGWIN__) || defined(__MSYS__) || defined(__PASE__) -# define NO_FS_EVENTS "Filesystem watching not supported on this platform." -#endif - -#if defined(__MSYS__) -# define NO_SEND_HANDLE_ON_PIPE \ - "MSYS2 runtime does not support sending handles on pipes." -#elif defined(__CYGWIN__) -# define NO_SEND_HANDLE_ON_PIPE \ - "Cygwin runtime does not support sending handles on pipes." -#endif - -#if defined(__MSYS__) -# define NO_SELF_CONNECT \ - "MSYS2 runtime hangs on listen+connect in same process." -#elif defined(__CYGWIN__) -# define NO_SELF_CONNECT \ - "Cygwin runtime hangs on listen+connect in same process." -#endif - -#endif /* TASK_H_ */ diff --git a/libuv/test/test-active.c b/libuv/test/test-active.c deleted file mode 100644 index 3843895..0000000 --- a/libuv/test/test-active.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - - -static int close_cb_called = 0; - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -static void timer_cb(uv_timer_t* handle) { - ASSERT(0 && "timer_cb should not have been called"); -} - - -TEST_IMPL(active) { - int r; - uv_timer_t timer; - - r = uv_timer_init(uv_default_loop(), &timer); - ASSERT(r == 0); - - /* 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)); - - r = uv_timer_start(&timer, timer_cb, 1000, 0); - ASSERT(r == 0); - - ASSERT(1 == uv_is_active((uv_handle_t*) &timer)); - ASSERT(0 == uv_is_closing((uv_handle_t*) &timer)); - - r = uv_timer_stop(&timer); - ASSERT(r == 0); - - ASSERT(0 == uv_is_active((uv_handle_t*) &timer)); - ASSERT(0 == uv_is_closing((uv_handle_t*) &timer)); - - r = uv_timer_start(&timer, timer_cb, 1000, 0); - ASSERT(r == 0); - - ASSERT(1 == uv_is_active((uv_handle_t*) &timer)); - ASSERT(0 == 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)); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-async-null-cb.c b/libuv/test/test-async-null-cb.c deleted file mode 100644 index 52652d9..0000000 --- a/libuv/test/test-async-null-cb.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - -static uv_async_t async_handle; -static uv_check_t check_handle; -static int check_cb_called; -static uv_thread_t thread; - - -static void thread_cb(void* dummy) { - (void) &dummy; - uv_async_send(&async_handle); -} - - -static void check_cb(uv_check_t* handle) { - ASSERT(check_cb_called == 0); - uv_close((uv_handle_t*) &async_handle, NULL); - uv_close((uv_handle_t*) &check_handle, NULL); - check_cb_called++; -} - - -TEST_IMPL(async_null_cb) { - /* - * Fill async_handle with garbage values. - * uv_async_init() should properly initialize struct fields regardless of - * initial values. - * This is added to verify paddings between fields do not affect behavior. - */ - 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); - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-async.c b/libuv/test/test-async.c deleted file mode 100644 index 619be62..0000000 --- a/libuv/test/test-async.c +++ /dev/null @@ -1,134 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - -static uv_thread_t thread; -static uv_mutex_t mutex; - -static uv_prepare_t prepare; -static uv_async_t async; - -static volatile int async_cb_called; -static int prepare_cb_called; -static int close_cb_called; - - -static void thread_cb(void *arg) { - int n; - int r; - - for (;;) { - uv_mutex_lock(&mutex); - n = async_cb_called; - uv_mutex_unlock(&mutex); - - if (n == 3) { - break; - } - - r = uv_async_send(&async); - ASSERT(r == 0); - - /* Work around a bug in Valgrind. - * - * Valgrind runs threads not in parallel but sequentially, i.e. one after - * the other. It also doesn't preempt them, instead it depends on threads - * yielding voluntarily by making a syscall. - * - * That never happens here: the pipe that is associated with the async - * handle is written to once but that's too early for Valgrind's scheduler - * to kick in. Afterwards, the thread busy-loops, starving the main thread. - * Therefore, we yield. - * - * This behavior has been observed with Valgrind 3.7.0 and 3.9.0. - */ - uv_sleep(0); - } -} - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -static void async_cb(uv_async_t* handle) { - int n; - - ASSERT(handle == &async); - - uv_mutex_lock(&mutex); - n = ++async_cb_called; - uv_mutex_unlock(&mutex); - - if (n == 3) { - uv_close((uv_handle_t*)&async, close_cb); - uv_close((uv_handle_t*)&prepare, close_cb); - } -} - - -static void prepare_cb(uv_prepare_t* handle) { - int r; - - ASSERT(handle == &prepare); - - if (prepare_cb_called++) - return; - - r = uv_thread_create(&thread, thread_cb, NULL); - ASSERT(r == 0); - uv_mutex_unlock(&mutex); -} - - -TEST_IMPL(async) { - int r; - - r = uv_mutex_init(&mutex); - ASSERT(r == 0); - uv_mutex_lock(&mutex); - - r = uv_prepare_init(uv_default_loop(), &prepare); - ASSERT(r == 0); - r = uv_prepare_start(&prepare, prepare_cb); - ASSERT(r == 0); - - r = uv_async_init(uv_default_loop(), &async, async_cb); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(prepare_cb_called > 0); - ASSERT(async_cb_called == 3); - ASSERT(close_cb_called == 2); - - ASSERT(0 == uv_thread_join(&thread)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-barrier.c b/libuv/test/test-barrier.c deleted file mode 100644 index 89858db..0000000 --- a/libuv/test/test-barrier.c +++ /dev/null @@ -1,148 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -typedef struct { - uv_barrier_t barrier; - int delay; - volatile int posted; - int main_barrier_wait_rval; - int worker_barrier_wait_rval; -} worker_config; - - -static void worker(void* arg) { - worker_config* c = arg; - - if (c->delay) - uv_sleep(c->delay); - - c->worker_barrier_wait_rval = uv_barrier_wait(&c->barrier); -} - - -TEST_IMPL(barrier_1) { - uv_thread_t thread; - worker_config wc; - - memset(&wc, 0, sizeof(wc)); - - ASSERT(0 == uv_barrier_init(&wc.barrier, 2)); - ASSERT(0 == uv_thread_create(&thread, worker, &wc)); - - uv_sleep(100); - wc.main_barrier_wait_rval = uv_barrier_wait(&wc.barrier); - - ASSERT(0 == uv_thread_join(&thread)); - uv_barrier_destroy(&wc.barrier); - - ASSERT(1 == (wc.main_barrier_wait_rval ^ wc.worker_barrier_wait_rval)); - - return 0; -} - - -TEST_IMPL(barrier_2) { - uv_thread_t thread; - worker_config wc; - - memset(&wc, 0, sizeof(wc)); - wc.delay = 100; - - ASSERT(0 == uv_barrier_init(&wc.barrier, 2)); - ASSERT(0 == uv_thread_create(&thread, worker, &wc)); - - wc.main_barrier_wait_rval = uv_barrier_wait(&wc.barrier); - - ASSERT(0 == uv_thread_join(&thread)); - uv_barrier_destroy(&wc.barrier); - - ASSERT(1 == (wc.main_barrier_wait_rval ^ wc.worker_barrier_wait_rval)); - - return 0; -} - - -TEST_IMPL(barrier_3) { - uv_thread_t thread; - worker_config wc; - - memset(&wc, 0, sizeof(wc)); - - ASSERT(0 == uv_barrier_init(&wc.barrier, 2)); - ASSERT(0 == uv_thread_create(&thread, worker, &wc)); - - wc.main_barrier_wait_rval = uv_barrier_wait(&wc.barrier); - - ASSERT(0 == uv_thread_join(&thread)); - uv_barrier_destroy(&wc.barrier); - - ASSERT(1 == (wc.main_barrier_wait_rval ^ wc.worker_barrier_wait_rval)); - - return 0; -} - -static void serial_worker(void* data) { - uv_barrier_t* barrier; - - barrier = data; - if (uv_barrier_wait(barrier) > 0) - uv_barrier_destroy(barrier); - - uv_sleep(100); /* Wait a bit before terminating. */ -} - -/* Ensure that uv_barrier_wait returns positive only after all threads have - * exited the barrier. If this value is returned too early and the barrier is - * destroyed prematurely, then this test may see a crash. */ -TEST_IMPL(barrier_serial_thread) { - uv_thread_t threads[4]; - uv_barrier_t barrier; - unsigned i; - - ASSERT(0 == uv_barrier_init(&barrier, ARRAY_SIZE(threads) + 1)); - - for (i = 0; i < ARRAY_SIZE(threads); ++i) - ASSERT(0 == uv_thread_create(&threads[i], serial_worker, &barrier)); - - if (uv_barrier_wait(&barrier) > 0) - uv_barrier_destroy(&barrier); - - for (i = 0; i < ARRAY_SIZE(threads); ++i) - ASSERT(0 == uv_thread_join(&threads[i])); - - return 0; -} - -/* Single thread uv_barrier_wait should return correct return value. */ -TEST_IMPL(barrier_serial_thread_single) { - uv_barrier_t barrier; - - ASSERT(0 == uv_barrier_init(&barrier, 1)); - ASSERT(0 < uv_barrier_wait(&barrier)); - uv_barrier_destroy(&barrier); - return 0; -} diff --git a/libuv/test/test-callback-order.c b/libuv/test/test-callback-order.c deleted file mode 100644 index 8bc2c4f..0000000 --- a/libuv/test/test-callback-order.c +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static int idle_cb_called; -static int timer_cb_called; - -static uv_idle_t idle_handle; -static uv_timer_t timer_handle; - - -/* idle_cb should run before timer_cb */ -static void idle_cb(uv_idle_t* handle) { - ASSERT(idle_cb_called == 0); - ASSERT(timer_cb_called == 0); - uv_idle_stop(handle); - idle_cb_called++; -} - - -static void timer_cb(uv_timer_t* handle) { - ASSERT(idle_cb_called == 1); - ASSERT(timer_cb_called == 0); - uv_timer_stop(handle); - timer_cb_called++; -} - - -static void next_tick(uv_idle_t* handle) { - uv_loop_t* loop = handle->loop; - uv_idle_stop(handle); - uv_idle_init(loop, &idle_handle); - uv_idle_start(&idle_handle, idle_cb); - uv_timer_init(loop, &timer_handle); - uv_timer_start(&timer_handle, timer_cb, 0, 0); -} - - -TEST_IMPL(callback_order) { - uv_loop_t* loop; - uv_idle_t idle; - - loop = uv_default_loop(); - uv_idle_init(loop, &idle); - uv_idle_start(&idle, next_tick); - - ASSERT(idle_cb_called == 0); - ASSERT(timer_cb_called == 0); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(idle_cb_called == 1); - ASSERT(timer_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-callback-stack.c b/libuv/test/test-callback-stack.c deleted file mode 100644 index a5195c7..0000000 --- a/libuv/test/test-callback-stack.c +++ /dev/null @@ -1,204 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* - * TODO: Add explanation of why we want on_close to be called from fresh - * stack. - */ - -#include "uv.h" -#include "task.h" - - -static const char MESSAGE[] = "Failure is for the weak. Everyone dies alone."; - -static uv_tcp_t client; -static uv_timer_t timer; -static uv_connect_t connect_req; -static uv_write_t write_req; -static uv_shutdown_t shutdown_req; - -static int nested = 0; -static int close_cb_called = 0; -static int connect_cb_called = 0; -static int write_cb_called = 0; -static int timer_cb_called = 0; -static int bytes_received = 0; -static int shutdown_cb_called = 0; - - -static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - buf->len = size; - buf->base = malloc(size); - ASSERT_NOT_NULL(buf->base); -} - - -static void close_cb(uv_handle_t* handle) { - ASSERT(nested == 0 && "close_cb must be called from a fresh stack"); - - close_cb_called++; -} - - -static void shutdown_cb(uv_shutdown_t* req, int status) { - ASSERT(status == 0); - ASSERT(nested == 0 && "shutdown_cb must be called from a fresh stack"); - - shutdown_cb_called++; -} - - -static void read_cb(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf) { - ASSERT(nested == 0 && "read_cb must be called from a fresh stack"); - - printf("Read. nread == %d\n", (int)nread); - free(buf->base); - - if (nread == 0) { - return; - - } else if (nread < 0) { - ASSERT(nread == UV_EOF); - - nested++; - uv_close((uv_handle_t*)tcp, close_cb); - nested--; - - return; - } - - bytes_received += nread; - - /* We call shutdown here because when bytes_received == sizeof MESSAGE there - * will be no more data sent nor received, so here it would be possible for a - * backend to call shutdown_cb immediately and *not* from a fresh stack. */ - if (bytes_received == sizeof MESSAGE) { - nested++; - - puts("Shutdown"); - - if (uv_shutdown(&shutdown_req, (uv_stream_t*)tcp, shutdown_cb)) { - FATAL("uv_shutdown failed"); - } - nested--; - } -} - - -static void timer_cb(uv_timer_t* handle) { - ASSERT(handle == &timer); - ASSERT(nested == 0 && "timer_cb must be called from a fresh stack"); - - puts("Timeout complete. Now read data..."); - - nested++; - if (uv_read_start((uv_stream_t*)&client, alloc_cb, read_cb)) { - FATAL("uv_read_start failed"); - } - nested--; - - timer_cb_called++; - - uv_close((uv_handle_t*)handle, close_cb); -} - - -static void write_cb(uv_write_t* req, int status) { - int r; - - ASSERT(status == 0); - ASSERT(nested == 0 && "write_cb must be called from a fresh stack"); - - puts("Data written. 500ms timeout..."); - - /* After the data has been sent, we're going to wait for a while, then start - * reading. This makes us certain that the message has been echoed back to - * our receive buffer when we start reading. This maximizes the temptation - * for the backend to use dirty stack for calling read_cb. */ - nested++; - r = uv_timer_init(uv_default_loop(), &timer); - ASSERT(r == 0); - r = uv_timer_start(&timer, timer_cb, 500, 0); - ASSERT(r == 0); - nested--; - - write_cb_called++; -} - - -static void connect_cb(uv_connect_t* req, int status) { - uv_buf_t buf; - - puts("Connected. Write some data to echo server..."); - - ASSERT(status == 0); - ASSERT(nested == 0 && "connect_cb must be called from a fresh stack"); - - nested++; - - buf.base = (char*) &MESSAGE; - buf.len = sizeof MESSAGE; - - if (uv_write(&write_req, (uv_stream_t*)req->handle, &buf, 1, write_cb)) { - FATAL("uv_write failed"); - } - - nested--; - - connect_cb_called++; -} - - -TEST_IMPL(callback_stack) { - struct sockaddr_in addr; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - if (uv_tcp_init(uv_default_loop(), &client)) { - FATAL("uv_tcp_init failed"); - } - - puts("Connecting..."); - - nested++; - - if (uv_tcp_connect(&connect_req, - &client, - (const struct sockaddr*) &addr, - connect_cb)) { - FATAL("uv_tcp_connect failed"); - } - nested--; - - 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"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-close-fd.c b/libuv/test/test-close-fd.c deleted file mode 100644 index 0d3927f..0000000 --- a/libuv/test/test-close-fd.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#ifndef _WIN32 -#include -#endif - -static unsigned int read_cb_called; - -static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - static char slab[1]; - buf->base = slab; - buf->len = sizeof(slab); -} - -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); - uv_read_stop(handle); - break; - case 2: - ASSERT(nread == UV_EOF); - uv_close((uv_handle_t *) handle, NULL); - break; - default: - ASSERT(!"read_cb_called > 2"); - } -} - -TEST_IMPL(close_fd) { - uv_pipe_t pipe_handle; - uv_fs_t req; - uv_buf_t bufs[1]; - 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])); - /* 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); - uv_fs_req_cleanup(&req); -#ifdef _WIN32 - ASSERT(0 == _close(fd[1])); -#else - ASSERT(0 == 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)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-close-order.c b/libuv/test/test-close-order.c deleted file mode 100644 index c2fd6c3..0000000 --- a/libuv/test/test-close-order.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static int check_cb_called; -static int timer_cb_called; -static int close_cb_called; - -static uv_check_t check_handle; -static uv_timer_t timer_handle1; -static uv_timer_t timer_handle2; - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -/* 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); - uv_close((uv_handle_t*) handle, close_cb); - uv_close((uv_handle_t*) &timer_handle2, close_cb); - check_cb_called++; -} - - -static void timer_cb(uv_timer_t* handle) { - uv_close((uv_handle_t*) handle, close_cb); - timer_cb_called++; -} - - -TEST_IMPL(close_order) { - uv_loop_t* loop; - loop = uv_default_loop(); - - uv_check_init(loop, &check_handle); - uv_check_start(&check_handle, check_cb); - uv_timer_init(loop, &timer_handle1); - uv_timer_start(&timer_handle1, timer_cb, 0, 0); - 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); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(check_cb_called == 1); - ASSERT(close_cb_called == 3); - ASSERT(timer_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-condvar.c b/libuv/test/test-condvar.c deleted file mode 100644 index 32abccc..0000000 --- a/libuv/test/test-condvar.c +++ /dev/null @@ -1,267 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -struct worker_config; - -typedef void (*signal_func)(struct worker_config* c, int* flag); -typedef int (*wait_func)(struct worker_config* c, const int* flag); - -typedef struct worker_config { - uv_sem_t sem_waiting; /* post before waiting. */ - uv_sem_t sem_signaled; /* post after signaling. */ - uv_mutex_t mutex; - uv_cond_t cond; - int use_broadcast; - int posted_1; - int posted_2; - signal_func signal_cond; - wait_func wait_cond; -} worker_config; - -void worker_config_init(worker_config* wc, - int use_broadcast, - signal_func signal_f, - wait_func wait_f) { - /* Wipe. */ - memset(wc, 0, sizeof(*wc)); - - /* Copy vars. */ - wc->signal_cond = signal_f; - wc->wait_cond = wait_f; - 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)); -} - -void worker_config_destroy(worker_config* wc) { - uv_mutex_destroy(&wc->mutex); - uv_cond_destroy(&wc->cond); - uv_sem_destroy(&wc->sem_signaled); - uv_sem_destroy(&wc->sem_waiting); -} - -/* arg is a worker_config. - * Call signal_cond then wait_cond. - * Partner should call wait then signal. */ -static void worker(void* arg) { - worker_config* c = arg; - c->signal_cond(c, &c->posted_1); - c->wait_cond(c, &c->posted_2); -} - -/* 1. Signal a waiting waiter. - * 2. Tell waiter we finished. */ -static void condvar_signal(worker_config* c, int* flag) { - /* Wait until waiter holds mutex and is preparing to wait. */ - uv_sem_wait(&c->sem_waiting); - - /* Make sure waiter has begun waiting. */ - uv_mutex_lock(&c->mutex); - - /* Help waiter differentiate between spurious and legitimate wakeup. */ - ASSERT(*flag == 0); - *flag = 1; - - if (c->use_broadcast) - uv_cond_broadcast(&c->cond); - else - uv_cond_signal(&c->cond); - - uv_mutex_unlock(&c->mutex); - - /* Done signaling. */ - uv_sem_post(&c->sem_signaled); -} - -/* 1. Wait on a signal. - * 2. Ensure that the signaler finished. */ -static int condvar_wait(worker_config* c, const int* flag) { - uv_mutex_lock(&c->mutex); - - /* Tell signal'er that I am waiting. */ - uv_sem_post(&c->sem_waiting); - - /* Wait until I get a non-spurious signal. */ - do { - uv_cond_wait(&c->cond, &c->mutex); - } while (*flag == 0); - ASSERT(*flag == 1); - - uv_mutex_unlock(&c->mutex); - - /* Wait for my signal'er to finish. */ - uv_sem_wait(&c->sem_signaled); - - return 0; -} - -/* uv_cond_wait: One thread signals, the other waits. */ -TEST_IMPL(condvar_1) { - worker_config wc; - uv_thread_t thread; - - /* Helper signal-then-wait. */ - worker_config_init(&wc, 0, condvar_signal, condvar_wait); - ASSERT(0 == uv_thread_create(&thread, worker, &wc)); - - /* We wait-then-signal. */ - ASSERT(0 == wc.wait_cond(&wc, &wc.posted_1)); - wc.signal_cond(&wc, &wc.posted_2); - - ASSERT(0 == uv_thread_join(&thread)); - worker_config_destroy(&wc); - - return 0; -} - -/* uv_cond_wait: One thread broadcasts, the other waits. */ -TEST_IMPL(condvar_2) { - worker_config wc; - uv_thread_t thread; - - /* Helper to signal-then-wait. */ - worker_config_init(&wc, 1, condvar_signal, condvar_wait); - ASSERT(0 == uv_thread_create(&thread, worker, &wc)); - - /* We wait-then-signal. */ - ASSERT(0 == wc.wait_cond(&wc, &wc.posted_1)); - wc.signal_cond(&wc, &wc.posted_2); - - ASSERT(0 == uv_thread_join(&thread)); - worker_config_destroy(&wc); - - return 0; -} - -/* 1. Wait on a signal (hopefully not timeout, else we'll hang). - * 2. Ensure that the signaler finished. */ -static int condvar_timedwait(worker_config* c, const int* flag) { - int r; - - r = 0; - - uv_mutex_lock(&c->mutex); - - /* Tell signal'er that I am waiting. */ - uv_sem_post(&c->sem_waiting); - - /* 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. */ - } while (*flag == 0); - ASSERT(*flag == 1); - - uv_mutex_unlock(&c->mutex); - - /* Wait for my signal'er to finish. */ - uv_sem_wait(&c->sem_signaled); - return r; -} - -/* uv_cond_timedwait: One thread signals, the other timedwaits. */ -TEST_IMPL(condvar_3) { - worker_config wc; - uv_thread_t thread; - - /* Helper to signal-then-wait. */ - worker_config_init(&wc, 0, condvar_signal, condvar_timedwait); - ASSERT(0 == 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)); - worker_config_destroy(&wc); - - return 0; -} - -/* uv_cond_timedwait: One thread broadcasts, the other waits. */ -TEST_IMPL(condvar_4) { - worker_config wc; - uv_thread_t thread; - - /* Helper to signal-then-wait. */ - worker_config_init(&wc, 1, condvar_signal, condvar_timedwait); - ASSERT(0 == 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)); - worker_config_destroy(&wc); - - return 0; -} - -/* uv_cond_timedwait: One thread waits, no signal. Timeout should be delivered. */ -TEST_IMPL(condvar_5) { - worker_config wc; - int r; - /* ns */ - uint64_t before; - uint64_t after; - uint64_t elapsed; - uint64_t timeout; - - timeout = 100 * 1000 * 1000; /* 100 ms in ns */ - - /* Mostly irrelevant. We need cond and mutex initialized. */ - worker_config_init(&wc, 0, NULL, NULL); - - uv_mutex_lock(&wc.mutex); - - /* We wait. - * No signaler, so this will only return if timeout is delivered. */ - before = uv_hrtime(); - r = uv_cond_timedwait(&wc.cond, &wc.mutex, timeout); - after = uv_hrtime(); - - uv_mutex_unlock(&wc.mutex); - - /* It timed out. */ - ASSERT(r == UV_ETIMEDOUT); - - /* It must have taken at least timeout, modulo system timer ticks. - * But it should not take too much longer. - * cf. MSDN docs: - * https://msdn.microsoft.com/en-us/library/ms687069(VS.85).aspx */ - elapsed = after - before; - ASSERT(0.75 * timeout <= elapsed); /* 1.0 too large for Windows. */ - ASSERT(elapsed <= 5.0 * timeout); /* MacOS has reported failures up to 1.75. */ - - worker_config_destroy(&wc); - - return 0; -} diff --git a/libuv/test/test-connect-unspecified.c b/libuv/test/test-connect-unspecified.c deleted file mode 100644 index 5f32b67..0000000 --- a/libuv/test/test-connect-unspecified.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to -* deal in the Software without restriction, including without limitation the -* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -* sell copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -* IN THE SOFTWARE. -*/ - -#include "uv.h" -#include "task.h" - -static void connect_4(uv_connect_t* req, int status) { - ASSERT(status != UV_EADDRNOTAVAIL); -} - -static void connect_6(uv_connect_t* req, int status) { - ASSERT(status != UV_EADDRNOTAVAIL); -} - -TEST_IMPL(connect_unspecified) { - uv_loop_t* loop; - uv_tcp_t socket4; - struct sockaddr_in addr4; - uv_connect_t connect4; - uv_tcp_t socket6; - struct sockaddr_in6 addr6; - uv_connect_t connect6; - - 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); - - 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(uv_run(loop, UV_RUN_DEFAULT) == 0); - - return 0; -} diff --git a/libuv/test/test-connection-fail.c b/libuv/test/test-connection-fail.c deleted file mode 100644 index 5904810..0000000 --- a/libuv/test/test-connection-fail.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - - -static uv_tcp_t tcp; -static uv_connect_t req; -static int connect_cb_calls; -static int close_cb_calls; - -static uv_timer_t timer; -static int timer_close_cb_calls; -static int timer_cb_calls; - - -static void on_close(uv_handle_t* handle) { - close_cb_calls++; -} - - -static void timer_close_cb(uv_handle_t* handle) { - timer_close_cb_calls++; -} - - -static void timer_cb(uv_timer_t* handle) { - timer_cb_calls++; - - /* - * These are the important asserts. The connection callback has been made, - * 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); - - /* Close the tcp handle. */ - uv_close((uv_handle_t*)&tcp, on_close); - - /* Close the timer. */ - uv_close((uv_handle_t*)handle, timer_close_cb); -} - - -static void on_connect_with_close(uv_connect_t *req, int status) { - ASSERT((uv_stream_t*) &tcp == req->handle); - ASSERT(status == UV_ECONNREFUSED); - connect_cb_calls++; - - ASSERT(close_cb_calls == 0); - 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); - connect_cb_calls++; - - uv_timer_start(&timer, timer_cb, 100, 0); - - ASSERT(close_cb_calls == 0); -} - - -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)); - - /* There should be no servers listening on this port. */ - ASSERT(0 == 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); - ASSERT(!r); - - /* 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)); - - r = uv_tcp_connect(&req, - &tcp, - (const struct sockaddr*) &server_addr, - connect_cb); - ASSERT(!r); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(connect_cb_calls == 1); - ASSERT(close_cb_calls == 1); -} - - -/* - * This test attempts to connect to a port where no server is running. We - * expect an error. - */ -TEST_IMPL(connection_fail) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - connection_fail(on_connect_with_close); - - ASSERT(timer_close_cb_calls == 0); - ASSERT(timer_cb_calls == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -/* - * This test is the same as the first except it check that the close - * callback of the tcp handle hasn't been made after the failed connection - * attempt. - */ -TEST_IMPL(connection_fail_doesnt_auto_close) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - int r; - - r = uv_timer_init(uv_default_loop(), &timer); - ASSERT(r == 0); - - connection_fail(on_connect_without_close); - - ASSERT(timer_close_cb_calls == 1); - ASSERT(timer_cb_calls == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-cwd-and-chdir.c b/libuv/test/test-cwd-and-chdir.c deleted file mode 100644 index faeed02..0000000 --- a/libuv/test/test-cwd-and-chdir.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - -#define PATHMAX 4096 - -TEST_IMPL(cwd_and_chdir) { - char buffer_orig[PATHMAX]; - char buffer_new[PATHMAX]; - size_t size1; - size_t size2; - int err; - - size1 = 1; - err = uv_cwd(buffer_orig, &size1); - ASSERT(err == UV_ENOBUFS); - ASSERT(size1 > 1); - - size1 = sizeof buffer_orig; - err = uv_cwd(buffer_orig, &size1); - ASSERT(err == 0); - ASSERT(size1 > 0); - ASSERT(buffer_orig[size1] != '/'); - - err = uv_chdir(buffer_orig); - ASSERT(err == 0); - - size2 = sizeof buffer_new; - err = uv_cwd(buffer_new, &size2); - ASSERT(err == 0); - - ASSERT(size1 == size2); - ASSERT(strcmp(buffer_orig, buffer_new) == 0); - - return 0; -} diff --git a/libuv/test/test-default-loop-close.c b/libuv/test/test-default-loop-close.c deleted file mode 100644 index 51e1e7d..0000000 --- a/libuv/test/test-default-loop-close.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - - -static int timer_cb_called; - - -static void timer_cb(uv_timer_t* timer) { - timer_cb_called++; - uv_close((uv_handle_t*) timer, NULL); -} - - -TEST_IMPL(default_loop_close) { - uv_loop_t* loop; - uv_timer_t timer_handle; - - 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)); - - 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(0 == uv_loop_close(loop)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-delayed-accept.c b/libuv/test/test-delayed-accept.c deleted file mode 100644 index 88b31e2..0000000 --- a/libuv/test/test-delayed-accept.c +++ /dev/null @@ -1,189 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - -static int connection_cb_called = 0; -static int do_accept_called = 0; -static int close_cb_called = 0; -static int connect_cb_called = 0; - - -static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - buf->base = malloc(size); - buf->len = size; -} - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - - free(handle); - - close_cb_called++; -} - - -static void do_accept(uv_timer_t* timer_handle) { - uv_tcp_t* server; - uv_tcp_t* accepted_handle = (uv_tcp_t*)malloc(sizeof *accepted_handle); - int r; - - ASSERT_NOT_NULL(timer_handle); - ASSERT_NOT_NULL(accepted_handle); - - r = uv_tcp_init(uv_default_loop(), accepted_handle); - ASSERT(r == 0); - - server = (uv_tcp_t*)timer_handle->data; - r = uv_accept((uv_stream_t*)server, (uv_stream_t*)accepted_handle); - ASSERT(r == 0); - - do_accept_called++; - - /* Immediately close the accepted handle. */ - uv_close((uv_handle_t*)accepted_handle, close_cb); - - /* After accepting the two clients close the server handle */ - if (do_accept_called == 2) { - uv_close((uv_handle_t*)server, close_cb); - } - - /* Dispose the timer. */ - uv_close((uv_handle_t*)timer_handle, close_cb); -} - - -static void connection_cb(uv_stream_t* tcp, int status) { - int r; - uv_timer_t* timer_handle; - - ASSERT(status == 0); - - 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); - - timer_handle->data = tcp; - - r = uv_timer_start(timer_handle, do_accept, 1000, 0); - ASSERT(r == 0); - - connection_cb_called++; -} - - -static void start_server(void) { - struct sockaddr_in addr; - 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_NOT_NULL(server); - - r = uv_tcp_init(uv_default_loop(), server); - ASSERT(r == 0); - r = uv_tcp_bind(server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*)server, 128, connection_cb); - ASSERT(r == 0); -} - - -static void read_cb(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf) { - /* The server will not send anything, it should close gracefully. */ - - if (buf->base) { - free(buf->base); - } - - if (nread >= 0) { - ASSERT(nread == 0); - } else { - ASSERT_NOT_NULL(tcp); - ASSERT(nread == UV_EOF); - uv_close((uv_handle_t*)tcp, close_cb); - } -} - - -static void connect_cb(uv_connect_t* req, int status) { - int r; - - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - - /* 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); - - connect_cb_called++; - - free(req); -} - - -static void client_connect(void) { - struct sockaddr_in addr; - uv_tcp_t* client = (uv_tcp_t*)malloc(sizeof *client); - uv_connect_t* connect_req = malloc(sizeof *connect_req); - int r; - - ASSERT(0 == 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); - - r = uv_tcp_connect(connect_req, - client, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); -} - - - -TEST_IMPL(delayed_accept) { - start_server(); - - client_connect(); - client_connect(); - - 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); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-dlerror.c b/libuv/test/test-dlerror.c deleted file mode 100644 index a436ec0..0000000 --- a/libuv/test/test-dlerror.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - - -TEST_IMPL(dlerror) { - const char* path = "test/fixtures/load_error.node"; - const char* dlerror_no_error = "no error"; - const char* msg; - uv_lib_t lib; - int r; - - lib.errmsg = NULL; - lib.handle = NULL; - msg = uv_dlerror(&lib); - ASSERT_NOT_NULL(msg); - ASSERT_NOT_NULL(strstr(msg, dlerror_no_error)); - - r = uv_dlopen(path, &lib); - ASSERT(r == -1); - - msg = uv_dlerror(&lib); - ASSERT_NOT_NULL(msg); -#if !defined(__OpenBSD__) && !defined(__QNX__) - ASSERT_NOT_NULL(strstr(msg, path)); -#endif - ASSERT_NULL(strstr(msg, dlerror_no_error)); - - /* Should return the same error twice in a row. */ - msg = uv_dlerror(&lib); - ASSERT_NOT_NULL(msg); -#if !defined(__OpenBSD__) && !defined(__QNX__) - ASSERT_NOT_NULL(strstr(msg, path)); -#endif - ASSERT_NULL(strstr(msg, dlerror_no_error)); - - uv_dlclose(&lib); - - return 0; -} diff --git a/libuv/test/test-eintr-handling.c b/libuv/test/test-eintr-handling.c deleted file mode 100644 index 1aaf623..0000000 --- a/libuv/test/test-eintr-handling.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#ifdef _WIN32 - -TEST_IMPL(eintr_handling) { - RETURN_SKIP("Test not implemented on Windows."); -} - -#else /* !_WIN32 */ - -#include -#include - -static uv_loop_t* loop; -static uv_fs_t read_req; -static uv_buf_t iov; - -static char buf[32]; -static char test_buf[] = "test-buffer\n"; -int pipe_fds[2]; - -struct thread_ctx { - uv_barrier_t barrier; - int fd; -}; - -static void thread_main(void* arg) { - int nwritten; - ASSERT(0 == kill(getpid(), SIGUSR1)); - - do - nwritten = write(pipe_fds[1], test_buf, sizeof(test_buf)); - while (nwritten == -1 && errno == EINTR); - - ASSERT(nwritten == sizeof(test_buf)); -} - -static void sig_func(uv_signal_t* handle, int signum) { - uv_signal_stop(handle); -} - -TEST_IMPL(eintr_handling) { - struct thread_ctx ctx; - uv_thread_t thread; - uv_signal_t signal; - int nread; - - 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(0 == pipe(pipe_fds)); - ASSERT(0 == 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(0 == uv_run(loop, UV_RUN_DEFAULT)); - - ASSERT(0 == close(pipe_fds[0])); - ASSERT(0 == close(pipe_fds[1])); - uv_close((uv_handle_t*) &signal, NULL); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#endif /* !_WIN32 */ diff --git a/libuv/test/test-embed.c b/libuv/test/test-embed.c deleted file mode 100644 index c6ddceb..0000000 --- a/libuv/test/test-embed.c +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include -#include - -#ifndef HAVE_KQUEUE -# if defined(__APPLE__) || \ - defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__FreeBSD_kernel__) || \ - defined(__OpenBSD__) || \ - defined(__NetBSD__) -# define HAVE_KQUEUE 1 -# endif -#endif - -#ifndef HAVE_EPOLL -# if defined(__linux__) -# define HAVE_EPOLL 1 -# endif -#endif - -#if defined(HAVE_KQUEUE) || defined(HAVE_EPOLL) - -#if defined(HAVE_KQUEUE) -# include -# include -# include -#endif - -#if defined(HAVE_EPOLL) -# include -#endif - -static uv_thread_t embed_thread; -static uv_sem_t embed_sem; -static uv_timer_t embed_timer; -static uv_async_t embed_async; -static volatile int embed_closed; - -static int embed_timer_called; - - -static void embed_thread_runner(void* arg) { - int r; - int fd; - int timeout; - - while (!embed_closed) { - fd = uv_backend_fd(uv_default_loop()); - timeout = uv_backend_timeout(uv_default_loop()); - - do { -#if defined(HAVE_KQUEUE) - struct timespec ts; - ts.tv_sec = timeout / 1000; - ts.tv_nsec = (timeout % 1000) * 1000000; - r = kevent(fd, NULL, 0, NULL, 0, &ts); -#elif defined(HAVE_EPOLL) - { - struct epoll_event ev; - r = epoll_wait(fd, &ev, 1, timeout); - } -#endif - } while (r == -1 && errno == EINTR); - uv_async_send(&embed_async); - uv_sem_wait(&embed_sem); - } -} - - -static void embed_cb(uv_async_t* async) { - uv_run(uv_default_loop(), UV_RUN_ONCE); - - uv_sem_post(&embed_sem); -} - - -static void embed_timer_cb(uv_timer_t* timer) { - embed_timer_called++; - embed_closed = 1; - - uv_close((uv_handle_t*) &embed_async, NULL); -} -#endif - - -TEST_IMPL(embed) { -#if defined(HAVE_KQUEUE) || defined(HAVE_EPOLL) - uv_loop_t external; - - ASSERT(0 == uv_loop_init(&external)); - - embed_timer_called = 0; - embed_closed = 0; - - uv_async_init(&external, &embed_async, embed_cb); - - /* Start timer in default loop */ - uv_timer_init(uv_default_loop(), &embed_timer); - uv_timer_start(&embed_timer, embed_timer_cb, 250, 0); - - /* Start worker that will interrupt external loop */ - uv_sem_init(&embed_sem, 0); - uv_thread_create(&embed_thread, embed_thread_runner, NULL); - - /* But run external loop */ - uv_run(&external, UV_RUN_DEFAULT); - - uv_thread_join(&embed_thread); - uv_loop_close(&external); - - ASSERT(embed_timer_called == 1); -#endif - - return 0; -} diff --git a/libuv/test/test-emfile.c b/libuv/test/test-emfile.c deleted file mode 100644 index bc1fce5..0000000 --- a/libuv/test/test-emfile.c +++ /dev/null @@ -1,121 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#if !defined(_WIN32) - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -static void connection_cb(uv_stream_t* server_handle, int status); -static void connect_cb(uv_connect_t* req, int status); - -static const int maxfd = 31; -static unsigned connect_cb_called; -static uv_tcp_t server_handle; -static uv_tcp_t client_handle; - - -TEST_IMPL(emfile) { - struct sockaddr_in addr; - struct rlimit limits; - uv_connect_t connect_req; - uv_loop_t* loop; - int first_fd; -#if defined(_AIX) || defined(__MVS__) - /* On AIX, if a 'accept' call fails ECONNRESET is set on the socket - * which causes uv__emfile_trick to not work as intended and this test - * to fail. - */ - RETURN_SKIP("uv__emfile_trick does not work on this OS"); -#endif - - /* 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. */ - 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)); - - /* 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); - - while (dup(0) != -1 || errno == EINTR); - ASSERT(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); - - /* Close the dups again. Ignore errors in the unlikely event that the - * file descriptors were not contiguous. - */ - while (first_fd < maxfd) { - close(first_fd); - first_fd += 1; - } - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void connection_cb(uv_stream_t* server_handle, int status) { - ASSERT(0 && "connection_cb should not be called."); -} - - -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); - connect_cb_called += 1; - uv_close((uv_handle_t*) &server_handle, NULL); - uv_close((uv_handle_t*) &client_handle, NULL); -} - -#else - -typedef int file_has_no_tests; /* ISO C forbids an empty translation unit. */ - -#endif /* !_WIN32 */ diff --git a/libuv/test/test-env-vars.c b/libuv/test/test-env-vars.c deleted file mode 100644 index ecaba33..0000000 --- a/libuv/test/test-env-vars.c +++ /dev/null @@ -1,170 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - -#define BUF_SIZE 10 - -TEST_IMPL(env_vars) { - const char* name = "UV_TEST_FOO"; - const char* name2 = "UV_TEST_FOO2"; - char buf[BUF_SIZE]; - size_t size; - int i, r, envcount, found, found_win_special; - uv_env_item_t* envitems; - - /* Reject invalid inputs when setting an environment variable */ - r = uv_os_setenv(NULL, "foo"); - ASSERT(r == UV_EINVAL); - r = uv_os_setenv(name, NULL); - ASSERT(r == UV_EINVAL); - r = uv_os_setenv(NULL, NULL); - ASSERT(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); - r = uv_os_getenv(name, NULL, &size); - ASSERT(r == UV_EINVAL); - r = uv_os_getenv(name, buf, NULL); - ASSERT(r == UV_EINVAL); - size = 0; - r = uv_os_getenv(name, buf, &size); - ASSERT(r == UV_EINVAL); - - /* Reject invalid inputs when deleting an environment variable */ - r = uv_os_unsetenv(NULL); - ASSERT(r == UV_EINVAL); - - /* Successfully set an environment variable */ - r = uv_os_setenv(name, "123456789"); - ASSERT(r == 0); - - /* 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); - - /* 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); - - /* Successfully delete an environment variable */ - r = uv_os_unsetenv(name); - ASSERT(r == 0); - - /* Return UV_ENOENT retrieving an environment variable that does not exist */ - r = uv_os_getenv(name, buf, &size); - ASSERT(r == UV_ENOENT); - - /* Successfully delete an environment variable that does not exist */ - r = uv_os_unsetenv(name); - ASSERT(r == 0); - - /* Setting an environment variable to the empty string does not delete it. */ - r = uv_os_setenv(name, ""); - ASSERT(r == 0); - size = BUF_SIZE; - r = uv_os_getenv(name, buf, &size); - ASSERT(r == 0); - ASSERT(size == 0); - ASSERT(strlen(buf) == 0); - - /* Check getting all env variables. */ - r = uv_os_setenv(name, "123456789"); - ASSERT(r == 0); - r = uv_os_setenv(name2, ""); - ASSERT(r == 0); -#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); -#endif - - r = uv_os_environ(&envitems, &envcount); - ASSERT(r == 0); - ASSERT(envcount > 0); - - found = 0; - found_win_special = 0; - - for (i = 0; i < envcount; i++) { - /* 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); - } else if (strcmp(envitems[i].name, name2) == 0) { - found++; - ASSERT(strlen(envitems[i].value) == 0); - } else if (envitems[i].name[0] == '=') { - found_win_special++; - } - } - - ASSERT(found == 2); -#ifdef _WIN32 - ASSERT(found_win_special > 0); -#endif - - uv_os_free_environ(envitems, envcount); - - r = uv_os_unsetenv(name); - ASSERT(r == 0); - - r = uv_os_unsetenv(name2); - ASSERT(r == 0); - - for (i = 1; i <= 4; i++) { - size_t n; - char* p; - - n = i * 32768; - size = n + 1; - - p = malloc(size); - ASSERT_NOT_NULL(p); - - 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_EQ(n, size); - - for (n = 0; n < size; n++) - ASSERT_EQ('x', p[n]); - - ASSERT_EQ(0, uv_os_unsetenv(name)); - free(p); - } - - return 0; -} diff --git a/libuv/test/test-error.c b/libuv/test/test-error.c deleted file mode 100644 index f0fb864..0000000 --- a/libuv/test/test-error.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#if defined(_WIN32) -# include "../src/win/winapi.h" -#endif - -#include -#include -#include - - -/* - * Synthetic errors (errors that originate from within libuv, not the system) - * should produce sensible error messages when run through uv_strerror(). - * - * See https://github.com/joyent/libuv/issues/210 - */ -TEST_IMPL(error_message) { -#if defined(__ASAN__) - RETURN_SKIP("Test does not currently work in ASAN"); -#endif - char buf[32]; - - /* Cop out. Can't do proper checks on systems with - * i18n-ized error messages... - */ - if (strcmp(uv_strerror(0), "Success") != 0) { - printf("i18n error messages detected, skipping test.\n"); - return 0; - } - - 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_NULL(strstr(uv_strerror_r(UV_EINVAL, buf, sizeof(buf)), "Success")); - ASSERT_NOT_NULL(strstr(uv_strerror_r(1337, buf, sizeof(buf)), "1337")); - ASSERT_NOT_NULL(strstr(uv_strerror_r(-1337, buf, sizeof(buf)), "-1337")); - - return 0; -} - - -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); -#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); -#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); - - return 0; -} diff --git a/libuv/test/test-fail-always.c b/libuv/test/test-fail-always.c deleted file mode 100644 index 0008459..0000000 --- a/libuv/test/test-fail-always.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" - - -TEST_IMPL(fail_always) { - /* This test always fails. It is used to test the test runner. */ - FATAL("Yes, it always fails"); - return 2; -} diff --git a/libuv/test/test-fork.c b/libuv/test/test-fork.c deleted file mode 100644 index 9e4684f..0000000 --- a/libuv/test/test-fork.c +++ /dev/null @@ -1,683 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* These tests are Unix only. */ -#ifndef _WIN32 - -#include -#include -#include -#include - -#include "uv.h" -#include "task.h" - -static int timer_cb_called; -static int socket_cb_called; - -static void timer_cb(uv_timer_t* timer) { - timer_cb_called++; - uv_close((uv_handle_t*) timer, NULL); -} - - -static int socket_cb_read_fd; -static int socket_cb_read_size; -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); - printf("Socket cb got events %d\n", events); - ASSERT(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); - } - uv_close((uv_handle_t*) poll, NULL); -} - - -static void run_timer_loop_once(void) { - uv_loop_t* loop; - uv_timer_t timer_handle; - - loop = uv_default_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); -} - - -static void assert_wait_child(pid_t child_pid) { - pid_t waited_pid; - int child_stat; - - waited_pid = waitpid(child_pid, &child_stat, 0); - printf("Waited pid is %d with status %d\n", waited_pid, child_stat); - if (waited_pid == -1) { - perror("Failed to wait"); - } - ASSERT(child_pid == waited_pid); - ASSERT(WIFEXITED(child_stat)); /* Clean exit, not a signal. */ - ASSERT(!WIFSIGNALED(child_stat)); - ASSERT(0 == WEXITSTATUS(child_stat)); -} - - -TEST_IMPL(fork_timer) { - /* Timers continue to work after we fork. */ - - /* - * Establish the loop before we fork to make sure that it - * has state to get reset after the fork. - */ - pid_t child_pid; - - run_timer_loop_once(); - child_pid = fork(); - ASSERT(child_pid != -1); - - if (child_pid != 0) { - /* parent */ - assert_wait_child(child_pid); - } else { - /* child */ - ASSERT(0 == uv_loop_fork(uv_default_loop())); - run_timer_loop_once(); - } - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fork_socketpair) { - /* A socket opened in the parent and accept'd in the - child works after a fork. */ - pid_t child_pid; - int socket_fds[2]; - uv_poll_t poll_handle; - - /* Prime the loop. */ - run_timer_loop_once(); - - ASSERT(0 == 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])); - - child_pid = fork(); - ASSERT(child_pid != -1); - - if (child_pid != 0) { - /* parent */ - ASSERT(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)); - 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); - } - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fork_socketpair_started) { - /* A socket opened in the parent and accept'd in the - child works after a fork, even if the watcher was already - started, and then stopped in the parent. */ - pid_t child_pid; - int socket_fds[2]; - int sync_pipe[2]; - char sync_buf[1]; - uv_poll_t poll_handle; - - ASSERT(0 == pipe(sync_pipe)); - - /* Prime the loop. */ - run_timer_loop_once(); - - ASSERT(0 == 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)); - - /* 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)); - - child_pid = fork(); - ASSERT(child_pid != -1); - - if (child_pid != 0) { - /* parent */ - ASSERT(0 == 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(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - ASSERT(0 == 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); - - 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); - printf("Buf %s\n", socket_cb_read_buf); - ASSERT(0 == strcmp("hi\n", socket_cb_read_buf)); - } - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static int fork_signal_cb_called; - -void fork_signal_to_child_cb(uv_signal_t* handle, int signum) -{ - fork_signal_cb_called = signum; - uv_close((uv_handle_t*)handle, NULL); -} - - -TEST_IMPL(fork_signal_to_child) { - /* A signal handler installed before forking - is run only in the child when the child is signalled. */ - uv_signal_t signal_handle; - pid_t child_pid; - int sync_pipe[2]; - char sync_buf[1]; - - fork_signal_cb_called = 0; /* reset */ - - ASSERT(0 == 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)); - - child_pid = fork(); - ASSERT(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)); - /* 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); - 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 */ - /* Get the signal. */ - ASSERT(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); - } - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fork_signal_to_child_closed) { - /* A signal handler installed before forking - doesn't get received anywhere when the child is signalled, - but isnt running the loop. */ - uv_signal_t signal_handle; - pid_t child_pid; - int sync_pipe[2]; - int sync_pipe2[2]; - char sync_buf[1]; - int r; - - fork_signal_cb_called = 0; /* reset */ - - ASSERT(0 == pipe(sync_pipe)); - ASSERT(0 == 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)); - - child_pid = fork(); - ASSERT(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 */ - printf("Parent killing child\n"); - ASSERT(0 == 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)); - 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 */ - 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())); - printf("Checking loop in child\n"); - ASSERT(0 != uv_loop_alive(uv_default_loop())); - printf("Alerting parent in child\n"); - ASSERT(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 - and exited, so this ASSERT is generous. - */ - r = read(sync_pipe2[0], sync_buf, 1); - ASSERT(-1 <= r && r <= 1); - ASSERT(0 == 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, - * so the child default loop can't be cleanly closed. - * We need to explicitly exit to avoid an automatic failure - * in that case. - */ - exit(0); - } - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void create_file(const char* name) { - int r; - uv_file file; - uv_fs_t req; - - r = uv_fs_open(NULL, &req, name, O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - file = r; - uv_fs_req_cleanup(&req); - r = uv_fs_close(NULL, &req, file, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); -} - - -static void touch_file(const char* name) { - int r; - uv_file file; - uv_fs_t req; - uv_buf_t buf; - - r = uv_fs_open(NULL, &req, name, O_RDWR, 0, NULL); - ASSERT(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); - uv_fs_req_cleanup(&req); - - r = uv_fs_close(NULL, &req, file, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); -} - - -static int timer_cb_touch_called; - -static void timer_cb_touch(uv_timer_t* timer) { - uv_close((uv_handle_t*)timer, NULL); - touch_file("watch_file"); - timer_cb_touch_called++; -} - - -static int fs_event_cb_called; - -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); - ++fs_event_cb_called; - ASSERT(status == 0); -#if defined(__APPLE__) || defined(__linux__) - ASSERT(strcmp(filename, "watch_file") == 0); -#else - ASSERT(filename == NULL || strcmp(filename, "watch_file") == 0); -#endif - uv_close((uv_handle_t*)handle, NULL); -} - - -static void assert_watch_file_current_dir(uv_loop_t* const loop, int file_or_dir) { - uv_timer_t timer; - uv_fs_event_t fs_event; - int r; - - /* Setup */ - remove("watch_file"); - create_file("watch_file"); - - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - /* 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); - - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - - r = uv_timer_start(&timer, timer_cb_touch, 100, 0); - ASSERT(r == 0); - - ASSERT(timer_cb_touch_called == 0); - ASSERT(fs_event_cb_called == 0); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(timer_cb_touch_called == 1); - ASSERT(fs_event_cb_called == 1); - - /* Cleanup */ - remove("watch_file"); - fs_event_cb_called = 0; - timer_cb_touch_called = 0; - uv_run(loop, UV_RUN_DEFAULT); /* flush pending closes */ -} - - -#define FS_TEST_FILE 0 -#define FS_TEST_DIR 1 - -static int _do_fork_fs_events_child(int file_or_dir) { - /* basic fsevents work in the child after a fork */ - pid_t child_pid; - uv_loop_t loop; - - /* Watch in the parent, prime the loop and/or threads. */ - assert_watch_file_current_dir(uv_default_loop(), file_or_dir); - child_pid = fork(); - ASSERT(child_pid != -1); - - if (child_pid != 0) { - /* parent */ - assert_wait_child(child_pid); - } else { - /* child */ - /* Ee can watch in a new loop, but dirs only work - if we're on linux. */ -#if defined(__APPLE__) - file_or_dir = FS_TEST_FILE; -#endif - printf("Running child\n"); - uv_loop_init(&loop); - printf("Child first watch\n"); - assert_watch_file_current_dir(&loop, file_or_dir); - ASSERT(0 == 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())); - /* 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 - * a general race. - */ - uv_update_time(uv_default_loop()); - assert_watch_file_current_dir(uv_default_loop(), file_or_dir); - - /* We can close the parent loop successfully too. This is - 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())); - - printf("Exiting child \n"); - } - - MAKE_VALGRIND_HAPPY(); - return 0; - -} - - -TEST_IMPL(fork_fs_events_child) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif - return _do_fork_fs_events_child(FS_TEST_FILE); -} - - -TEST_IMPL(fork_fs_events_child_dir) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif -#if defined(__APPLE__) || defined (__linux__) - return _do_fork_fs_events_child(FS_TEST_DIR); -#else - /* You can't spin up a cfrunloop thread on an apple platform - and then fork. See - http://objectivistc.tumblr.com/post/16187948939/you-must-exec-a-core-foundation-fork-safety-tale - */ - return 0; -#endif -} - - -TEST_IMPL(fork_fs_events_file_parent_child) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif -#if defined(__sun) || defined(_AIX) || defined(__MVS__) - /* It's not possible to implement this without additional - * bookkeeping on SunOS. For AIX it is possible, but has to be - * written. See https://github.com/libuv/libuv/pull/846#issuecomment-287170420 - * TODO: On z/OS, we need to open another message queue and subscribe to the - * same events as the parent. - */ - return 0; -#else - /* Establishing a started fs events watcher in the parent should - still work in the child. */ - uv_timer_t timer; - uv_fs_event_t fs_event; - int r; - pid_t child_pid; - uv_loop_t* loop; - - loop = uv_default_loop(); - - /* Setup */ - remove("watch_file"); - create_file("watch_file"); - - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - r = uv_fs_event_start(&fs_event, - fs_event_cb_file_current_dir, - "watch_file", - 0); - ASSERT(r == 0); - - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - - child_pid = fork(); - ASSERT(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)); - - r = uv_timer_start(&timer, timer_cb_touch, 100, 0); - ASSERT(r == 0); - - ASSERT(timer_cb_touch_called == 0); - ASSERT(fs_event_cb_called == 0); - printf("Running loop in child \n"); - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(timer_cb_touch_called == 1); - ASSERT(fs_event_cb_called == 1); - - /* Cleanup */ - remove("watch_file"); - fs_event_cb_called = 0; - timer_cb_touch_called = 0; - uv_run(loop, UV_RUN_DEFAULT); /* Flush pending closes. */ - } - - - MAKE_VALGRIND_HAPPY(); - return 0; -#endif -} - - -static int work_cb_count; -static int after_work_cb_count; - - -static void work_cb(uv_work_t* req) { - work_cb_count++; -} - - -static void after_work_cb(uv_work_t* req, int status) { - ASSERT(status == 0); - after_work_cb_count++; -} - - -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); - printf("Queue in %d\n", getpid()); - r = uv_queue_work(loop, &work_req, work_cb, after_work_cb); - ASSERT(r == 0); - printf("Running in %d\n", getpid()); - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(work_cb_count == 1); - ASSERT(after_work_cb_count == 1); - - /* cleanup */ - work_cb_count = 0; - after_work_cb_count = 0; -} - - -#ifndef __MVS__ -TEST_IMPL(fork_threadpool_queue_work_simple) { - /* The threadpool works in a child process. */ - - pid_t child_pid; - uv_loop_t loop; - - /* Prime the pool and default loop. */ - assert_run_work(uv_default_loop()); - - child_pid = fork(); - ASSERT(child_pid != -1); - - if (child_pid != 0) { - /* Parent. We can still run work. */ - assert_run_work(uv_default_loop()); - assert_wait_child(child_pid); - } else { - /* Child. We can work in a new loop. */ - printf("Running child in %d\n", getpid()); - uv_loop_init(&loop); - printf("Child first watch\n"); - assert_run_work(&loop); - 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_run_work(uv_default_loop()); - printf("Exiting child \n"); - } - - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif /* !__MVS__ */ - -#else - -typedef int file_has_no_tests; /* ISO C forbids an empty translation unit. */ - -#endif /* !_WIN32 */ diff --git a/libuv/test/test-fs-copyfile.c b/libuv/test/test-fs-copyfile.c deleted file mode 100644 index fa00fe4..0000000 --- a/libuv/test/test-fs-copyfile.c +++ /dev/null @@ -1,220 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#if defined(__unix__) || defined(__POSIX__) || \ - defined(__APPLE__) || defined(__sun) || \ - defined(_AIX) || defined(__MVS__) || \ - defined(__HAIKU__) || defined(__QNX__) -#include /* unlink, etc. */ -#else -# include -# include -# define unlink _unlink -#endif - -static const char fixture[] = "test/fixtures/load_error.node"; -static const char dst[] = "test_file_dst"; -static int result_check_count; - - -static void fail_cb(uv_fs_t* req) { - FATAL("fail_cb should not have been called"); -} - -static void handle_result(uv_fs_t* req) { - uv_fs_t stat_req; - uint64_t size; - uint64_t mode; - int r; - - ASSERT(req->fs_type == UV_FS_COPYFILE); - ASSERT(req->result == 0); - - /* Verify that the file size and mode are the same. */ - r = uv_fs_stat(NULL, &stat_req, req->path, NULL); - ASSERT(r == 0); - 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); - uv_fs_req_cleanup(&stat_req); - uv_fs_req_cleanup(req); - result_check_count++; -} - - -static void touch_file(const char* name, unsigned int size) { - uv_file file; - uv_fs_t req; - uv_buf_t buf; - int r; - unsigned int i; - - 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); - file = r; - - buf = uv_buf_init("a", 1); - - /* Inefficient but simple. */ - 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); - } - - r = uv_fs_close(NULL, &req, file, NULL); - uv_fs_req_cleanup(&req); - ASSERT(r == 0); -} - - -TEST_IMPL(fs_copyfile) { -#if defined(__ASAN__) - RETURN_SKIP("Test does not currently work in ASAN"); -#endif - const char src[] = "test_file_src"; - uv_loop_t* loop; - uv_fs_t req; - int r; - - loop = uv_default_loop(); - - /* Fails with EINVAL if bad flags are passed. */ - r = uv_fs_copyfile(NULL, &req, src, dst, -1, NULL); - ASSERT(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); - uv_fs_req_cleanup(&req); - /* The destination should not exist. */ - r = uv_fs_stat(NULL, &req, dst, NULL); - ASSERT(r != 0); - 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); - 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); - 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); - 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); - handle_result(&req); - - /* Copies file synchronously. Overwrites existing file. */ - r = uv_fs_copyfile(NULL, &req, fixture, dst, 0, NULL); - ASSERT(r == 0); - handle_result(&req); - - /* Fails to overwrites existing file. */ - r = uv_fs_copyfile(NULL, &req, fixture, dst, UV_FS_COPYFILE_EXCL, NULL); - ASSERT(r == UV_EEXIST); - uv_fs_req_cleanup(&req); - - /* Truncates when an existing destination is larger than the source file. */ - touch_file(src, 1); - r = uv_fs_copyfile(NULL, &req, src, dst, 0, NULL); - ASSERT(r == 0); - 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); - 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); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(result_check_count == 6); - - /* 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); - 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); - 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); - - if (r == 0) - handle_result(&req); - -#ifndef _WIN32 - /* Copying respects permissions/mode. */ - unlink(dst); - touch_file(dst, 0); - chmod(dst, S_IRUSR|S_IRGRP|S_IROTH); /* Sets file mode to 444 (read-only). */ - 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); -# endif - uv_fs_req_cleanup(&req); -#endif - - unlink(dst); /* Cleanup */ - return 0; -} diff --git a/libuv/test/test-fs-event.c b/libuv/test/test-fs-event.c deleted file mode 100644 index ec16386..0000000 --- a/libuv/test/test-fs-event.c +++ /dev/null @@ -1,1176 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -#if defined(__APPLE__) && !TARGET_OS_IPHONE -# include -#endif - -#ifndef HAVE_KQUEUE -# if defined(__APPLE__) || \ - defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__FreeBSD_kernel__) || \ - defined(__OpenBSD__) || \ - defined(__NetBSD__) -# define HAVE_KQUEUE 1 -# endif -#endif - -#if defined(__arm__)/* Increase the timeout so the test passes on arm CI bots */ -# define CREATE_TIMEOUT 100 -#else -# define CREATE_TIMEOUT 1 -#endif - -static uv_fs_event_t fs_event; -static const char file_prefix[] = "fsevent-"; -static const int fs_event_file_count = 16; -#if defined(__APPLE__) || defined(_WIN32) -static const char file_prefix_in_subdir[] = "subdir"; -static int fs_multievent_cb_called; -#endif -static uv_timer_t timer; -static int timer_cb_called; -static int close_cb_called; -static int fs_event_created; -static int fs_event_removed; -static int fs_event_cb_called; -#if defined(PATH_MAX) -static char fs_event_filename[PATH_MAX]; -#else -static char fs_event_filename[1024]; -#endif /* defined(PATH_MAX) */ -static int timer_cb_touch_called; -static int timer_cb_exact_called; - -static void fs_event_fail(uv_fs_event_t* handle, - const char* filename, - int events, - int status) { - ASSERT(0 && "should never be called"); -} - -static void create_dir(const char* name) { - int r; - uv_fs_t req; - r = uv_fs_mkdir(NULL, &req, name, 0755, NULL); - ASSERT(r == 0 || r == UV_EEXIST); - uv_fs_req_cleanup(&req); -} - -static void create_file(const char* name) { - int r; - uv_file file; - uv_fs_t req; - - r = uv_fs_open(NULL, &req, name, O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - file = r; - uv_fs_req_cleanup(&req); - r = uv_fs_close(NULL, &req, file, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); -} - -static void touch_file(const char* name) { - int r; - uv_file file; - uv_fs_t req; - uv_buf_t buf; - - r = uv_fs_open(NULL, &req, name, O_RDWR, 0, NULL); - ASSERT(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); - uv_fs_req_cleanup(&req); - - r = uv_fs_close(NULL, &req, file, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); -} - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - -static void fail_cb(uv_fs_event_t* handle, - const char* path, - int events, - int status) { - ASSERT(0 && "fail_cb called"); -} - -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); - #if defined(__APPLE__) || defined(_WIN32) || defined(__linux__) - ASSERT(strcmp(filename, "file1") == 0); - #else - ASSERT(filename == NULL || strcmp(filename, "file1") == 0); - #endif - ASSERT(0 == uv_fs_event_stop(handle)); - uv_close((uv_handle_t*)handle, close_cb); -} - -static const char* fs_event_get_filename(int i) { - snprintf(fs_event_filename, - sizeof(fs_event_filename), - "watch_dir/%s%d", - file_prefix, - i); - return fs_event_filename; -} - -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); - - /* Create the file */ - create_file(fs_event_get_filename(fs_event_created)); - - 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(0 == uv_timer_start(&timer, - fs_event_create_files, - CREATE_TIMEOUT, - 0)); - } -} - -static void fs_event_unlink_files(uv_timer_t* handle) { - int r; - int i; - - /* NOTE: handle might be NULL if invoked not as timer callback */ - if (handle == NULL) { - /* Unlink all files */ - for (i = 0; i < 16; i++) { - r = remove(fs_event_get_filename(i)); - if (handle != NULL) - ASSERT(r == 0); - } - } else { - /* Make sure we're not attempting to remove files we do not intend */ - ASSERT(fs_event_removed < fs_event_file_count); - - /* Remove the file */ - ASSERT(0 == 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)); - } - } -} - -static void fs_event_cb_dir_multi_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 || events == UV_RENAME); - #if defined(__APPLE__) || defined(_WIN32) || defined(__linux__) - ASSERT(strncmp(filename, file_prefix, sizeof(file_prefix) - 1) == 0); - #else - ASSERT(filename == NULL || - strncmp(filename, file_prefix, sizeof(file_prefix) - 1) == 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)); - } 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); - uv_close((uv_handle_t*) handle, close_cb); - } -} - -#if defined(__APPLE__) || defined(_WIN32) -static const char* fs_event_get_filename_in_subdir(int i) { - snprintf(fs_event_filename, - sizeof(fs_event_filename), - "watch_dir/subdir/%s%d", - file_prefix, - i); - return fs_event_filename; -} - -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); - - /* Create the file */ - create_file(fs_event_get_filename_in_subdir(fs_event_created)); - - 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(0 == uv_timer_start(&timer, fs_event_create_files_in_subdir, 1, 0)); - } -} - -static void fs_event_unlink_files_in_subdir(uv_timer_t* handle) { - int r; - int i; - - /* NOTE: handle might be NULL if invoked not as timer callback */ - if (handle == NULL) { - /* Unlink all files */ - for (i = 0; i < 16; i++) { - r = remove(fs_event_get_filename_in_subdir(i)); - if (handle != NULL) - ASSERT(r == 0); - } - } else { - /* Make sure we're not attempting to remove files we do not intend */ - ASSERT(fs_event_removed < fs_event_file_count); - - /* Remove the file */ - ASSERT(0 == 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)); - } - } -} - -static void fs_event_cb_dir_multi_file_in_subdir(uv_fs_event_t* handle, - const char* filename, - int events, - int status) { -#ifdef _WIN32 - /* Each file created (or deleted) will cause this callback to be called twice - * under Windows: once with the name of the file, and second time with the - * name of the directory. We will ignore the callback for the directory - * itself. */ - if (filename && strcmp(filename, file_prefix_in_subdir) == 0) - return; -#endif - /* It may happen that the "subdir" creation event is captured even though - * we started watching after its actual creation. - */ - if (strcmp(filename, "subdir") == 0) - return; - - fs_multievent_cb_called++; - ASSERT(handle == &fs_event); - ASSERT(status == 0); - 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); - #else - ASSERT(filename == NULL || - strncmp(filename, - file_prefix_in_subdir, - sizeof(file_prefix_in_subdir) - 1) == 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)); - } 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); - uv_close((uv_handle_t*) &timer, close_cb); - uv_close((uv_handle_t*) handle, close_cb); - } -} -#endif - -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); - #if defined(__APPLE__) || defined(_WIN32) || defined(__linux__) - ASSERT(strcmp(filename, "file2") == 0); - #else - ASSERT(filename == NULL || strcmp(filename, "file2") == 0); - #endif - ASSERT(0 == uv_fs_event_stop(handle)); - uv_close((uv_handle_t*)handle, close_cb); -} - -static void timer_cb_close_handle(uv_timer_t* timer) { - uv_handle_t* handle; - - ASSERT_NOT_NULL(timer); - handle = timer->data; - - uv_close((uv_handle_t*)timer, NULL); - uv_close((uv_handle_t*)handle, close_cb); -} - -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); - ++fs_event_cb_called; - - ASSERT(handle == &fs_event); - ASSERT(status == 0); - ASSERT(events == UV_CHANGE); - #if defined(__APPLE__) || defined(_WIN32) || defined(__linux__) - ASSERT(strcmp(filename, "watch_file") == 0); - #else - ASSERT(filename == NULL || strcmp(filename, "watch_file") == 0); - #endif - - /* Regression test for SunOS: touch should generate just one event. */ - { - static uv_timer_t timer; - uv_timer_init(handle->loop, &timer); - timer.data = handle; - uv_timer_start(&timer, timer_cb_close_handle, 250, 0); - } -} - -static void timer_cb_file(uv_timer_t* handle) { - ++timer_cb_called; - - if (timer_cb_called == 1) { - touch_file("watch_dir/file1"); - } else { - touch_file("watch_dir/file2"); - uv_close((uv_handle_t*)handle, close_cb); - } -} - -static void timer_cb_touch(uv_timer_t* timer) { - uv_close((uv_handle_t*)timer, NULL); - touch_file("watch_file"); - timer_cb_touch_called++; -} - -static void timer_cb_exact(uv_timer_t* handle) { - int r; - - if (timer_cb_exact_called == 0) { - touch_file("watch_dir/file.js"); - } else { - uv_close((uv_handle_t*)handle, NULL); - r = uv_fs_event_stop(&fs_event); - ASSERT(r == 0); - uv_close((uv_handle_t*) &fs_event, NULL); - } - - ++timer_cb_exact_called; -} - -static void timer_cb_watch_twice(uv_timer_t* handle) { - uv_fs_event_t* handles = handle->data; - uv_close((uv_handle_t*) (handles + 0), NULL); - uv_close((uv_handle_t*) (handles + 1), NULL); - uv_close((uv_handle_t*) handle, NULL); -} - -static void fs_event_cb_close(uv_fs_event_t* handle, - const char* filename, - int events, - int status) { - ASSERT(status == 0); - - ASSERT(fs_event_cb_called < 3); - ++fs_event_cb_called; - - if (fs_event_cb_called == 3) { - uv_close((uv_handle_t*) handle, close_cb); - } -} - - -TEST_IMPL(fs_event_watch_dir) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#elif defined(__MVS__) - RETURN_SKIP("Directory watching not supported on this platform."); -#endif - - uv_loop_t* loop = uv_default_loop(); - int r; - - /* Setup */ - fs_event_unlink_files(NULL); - remove("watch_dir/file2"); - remove("watch_dir/file1"); - remove("watch_dir/"); - create_dir("watch_dir"); - - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - r = uv_fs_event_start(&fs_event, fs_event_cb_dir_multi_file, "watch_dir", 0); - ASSERT(r == 0); - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - r = uv_timer_start(&timer, fs_event_create_files, 100, 0); - ASSERT(r == 0); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(fs_event_cb_called == fs_event_created + fs_event_removed); - ASSERT(close_cb_called == 2); - - /* Cleanup */ - fs_event_unlink_files(NULL); - remove("watch_dir/file2"); - remove("watch_dir/file1"); - remove("watch_dir/"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_event_watch_dir_recursive) { -#if defined(__APPLE__) || defined(_WIN32) - uv_loop_t* loop; - int r; - uv_fs_event_t fs_event_root; - - /* Setup */ - loop = uv_default_loop(); - fs_event_unlink_files(NULL); - remove("watch_dir/file2"); - remove("watch_dir/file1"); - remove("watch_dir/subdir"); - remove("watch_dir/"); - create_dir("watch_dir"); - create_dir("watch_dir/subdir"); - - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - r = uv_fs_event_start(&fs_event, - fs_event_cb_dir_multi_file_in_subdir, - "watch_dir", - UV_FS_EVENT_RECURSIVE); - ASSERT(r == 0); - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - r = uv_timer_start(&timer, fs_event_create_files_in_subdir, 100, 0); - ASSERT(r == 0); - -#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); - r = uv_fs_event_start(&fs_event_root, - fs_event_cb_close, - "/", - UV_FS_EVENT_RECURSIVE); - ASSERT(r == 0); -#else - fs_event_cb_called += 3; - close_cb_called += 1; - (void)fs_event_root; -#endif - - 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); - - /* Cleanup */ - fs_event_unlink_files_in_subdir(NULL); - remove("watch_dir/file2"); - remove("watch_dir/file1"); - remove("watch_dir/subdir"); - remove("watch_dir/"); - - MAKE_VALGRIND_HAPPY(); - return 0; -#else - RETURN_SKIP("Recursive directory watching not supported on this platform."); -#endif -} - -#ifdef _WIN32 -TEST_IMPL(fs_event_watch_dir_short_path) { - uv_loop_t* loop; - uv_fs_t req; - int has_shortnames; - int r; - - /* Setup */ - loop = uv_default_loop(); - remove("watch_dir/file1"); - remove("watch_dir/"); - create_dir("watch_dir"); - create_file("watch_dir/file1"); - - /* Newer version of Windows ship with - HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation - not equal to 0. So we verify the files we created are addressable by a 8.3 - short name */ - 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); - r = uv_fs_event_start(&fs_event, fs_event_cb_dir, "watch_~1", 0); - ASSERT(r == 0); - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - r = uv_timer_start(&timer, timer_cb_file, 100, 0); - ASSERT(r == 0); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(fs_event_cb_called == 1); - ASSERT(timer_cb_called == 1); - ASSERT(close_cb_called == 1); - } - - /* Cleanup */ - remove("watch_dir/file1"); - remove("watch_dir/"); - - MAKE_VALGRIND_HAPPY(); - - if (!has_shortnames) - RETURN_SKIP("Was not able to address files with 8.3 short name."); - - return 0; -} -#endif - - -TEST_IMPL(fs_event_watch_file) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif - - uv_loop_t* loop = uv_default_loop(); - int r; - - /* Setup */ - remove("watch_dir/file2"); - remove("watch_dir/file1"); - remove("watch_dir/"); - create_dir("watch_dir"); - create_file("watch_dir/file1"); - create_file("watch_dir/file2"); - - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - r = uv_fs_event_start(&fs_event, fs_event_cb_file, "watch_dir/file2", 0); - ASSERT(r == 0); - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - r = uv_timer_start(&timer, timer_cb_file, 100, 100); - ASSERT(r == 0); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(fs_event_cb_called == 1); - ASSERT(timer_cb_called == 2); - ASSERT(close_cb_called == 2); - - /* Cleanup */ - remove("watch_dir/file2"); - remove("watch_dir/file1"); - remove("watch_dir/"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_event_watch_file_exact_path) { - /* - This test watches a file named "file.jsx" and modifies a file named - "file.js". The test verifies that no events occur for file.jsx. - */ - -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif - - uv_loop_t* loop; - int r; - - loop = uv_default_loop(); - - /* Setup */ - remove("watch_dir/file.js"); - remove("watch_dir/file.jsx"); - remove("watch_dir/"); - create_dir("watch_dir"); - create_file("watch_dir/file.js"); - create_file("watch_dir/file.jsx"); -#if defined(__APPLE__) && !defined(MAC_OS_X_VERSION_10_12) - /* Empirically, FSEvents seems to (reliably) report the preceeding - * create_file events prior to macOS 10.11.6 in the subsequent fs_watch - * creation, but that behavior hasn't been observed to occur on newer - * versions. Give a long delay here to let the system settle before running - * the test. */ - uv_sleep(1100); - uv_update_time(loop); -#endif - - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - r = uv_fs_event_start(&fs_event, fs_event_fail, "watch_dir/file.jsx", 0); - ASSERT(r == 0); - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - r = uv_timer_start(&timer, timer_cb_exact, 100, 100); - ASSERT(r == 0); - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - ASSERT(timer_cb_exact_called == 2); - - /* Cleanup */ - remove("watch_dir/file.js"); - remove("watch_dir/file.jsx"); - remove("watch_dir/"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_event_watch_file_twice) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif -#if defined(__ASAN__) - RETURN_SKIP("Test does not currently work in ASAN"); -#endif - const char path[] = "test/fixtures/empty_file"; - uv_fs_event_t watchers[2]; - uv_timer_t timer; - uv_loop_t* loop; - - 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)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_event_watch_file_current_dir) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif - uv_timer_t timer; - uv_loop_t* loop; - int r; - - loop = uv_default_loop(); - - /* Setup */ - remove("watch_file"); - create_file("watch_file"); -#if defined(__APPLE__) && !defined(MAC_OS_X_VERSION_10_12) - /* Empirically, kevent seems to (sometimes) report the preceeding - * create_file events prior to macOS 10.11.6 in the subsequent fs_event_start - * So let the system settle before running the test. */ - uv_sleep(1100); - uv_update_time(loop); -#endif - - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - r = uv_fs_event_start(&fs_event, - fs_event_cb_file_current_dir, - "watch_file", - 0); - ASSERT(r == 0); - - - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - - r = uv_timer_start(&timer, timer_cb_touch, 1100, 0); - ASSERT(r == 0); - - ASSERT(timer_cb_touch_called == 0); - ASSERT(fs_event_cb_called == 0); - ASSERT(close_cb_called == 0); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(timer_cb_touch_called == 1); - ASSERT(fs_event_cb_called == 1); - ASSERT(close_cb_called == 1); - - /* Cleanup */ - remove("watch_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#ifdef _WIN32 -TEST_IMPL(fs_event_watch_file_root_dir) { - uv_loop_t* loop; - int r; - - const char* sys_drive = getenv("SystemDrive"); - char path[] = "\\\\?\\X:\\bootsect.bak"; - - ASSERT_NOT_NULL(sys_drive); - strncpy(path + sizeof("\\\\?\\") - 1, sys_drive, 1); - - loop = uv_default_loop(); - - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - 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); - - uv_close((uv_handle_t*) &fs_event, NULL); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - -TEST_IMPL(fs_event_no_callback_after_close) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif - - uv_loop_t* loop = uv_default_loop(); - int r; - - /* Setup */ - remove("watch_dir/file1"); - remove("watch_dir/"); - create_dir("watch_dir"); - create_file("watch_dir/file1"); - - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - r = uv_fs_event_start(&fs_event, - fs_event_cb_file, - "watch_dir/file1", - 0); - ASSERT(r == 0); - - - 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); - - /* Cleanup */ - remove("watch_dir/file1"); - remove("watch_dir/"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_event_no_callback_on_close) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif - - uv_loop_t* loop = uv_default_loop(); - int r; - - /* Setup */ - remove("watch_dir/file1"); - remove("watch_dir/"); - create_dir("watch_dir"); - create_file("watch_dir/file1"); - - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - r = uv_fs_event_start(&fs_event, - fs_event_cb_file, - "watch_dir/file1", - 0); - ASSERT(r == 0); - - 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); - - /* Cleanup */ - remove("watch_dir/file1"); - remove("watch_dir/"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void timer_cb(uv_timer_t* handle) { - int r; - - r = uv_fs_event_init(handle->loop, &fs_event); - ASSERT(r == 0); - r = uv_fs_event_start(&fs_event, fs_event_fail, ".", 0); - ASSERT(r == 0); - - uv_close((uv_handle_t*)&fs_event, close_cb); - uv_close((uv_handle_t*)handle, close_cb); -} - - -TEST_IMPL(fs_event_immediate_close) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif - uv_timer_t timer; - uv_loop_t* loop; - int r; - - loop = uv_default_loop(); - - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - - r = uv_timer_start(&timer, timer_cb, 1, 0); - ASSERT(r == 0); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_event_close_with_pending_event) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif - uv_loop_t* loop; - int r; - - loop = uv_default_loop(); - - create_dir("watch_dir"); - create_file("watch_dir/file"); - - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - r = uv_fs_event_start(&fs_event, fs_event_fail, "watch_dir", 0); - ASSERT(r == 0); - - /* Generate an fs event. */ - touch_file("watch_dir/file"); - - uv_close((uv_handle_t*)&fs_event, close_cb); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - - /* Clean up */ - remove("watch_dir/file"); - remove("watch_dir/"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_event_close_in_callback) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#elif defined(__MVS__) - RETURN_SKIP("Directory watching not supported on this platform."); -#endif - uv_loop_t* loop; - int r; - - loop = uv_default_loop(); - - fs_event_unlink_files(NULL); - create_dir("watch_dir"); - - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - r = uv_fs_event_start(&fs_event, fs_event_cb_close, "watch_dir", 0); - ASSERT(r == 0); - - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - r = uv_timer_start(&timer, fs_event_create_files, 100, 0); - ASSERT(r == 0); - - uv_run(loop, UV_RUN_DEFAULT); - - uv_close((uv_handle_t*)&timer, close_cb); - - uv_run(loop, UV_RUN_ONCE); - - ASSERT(close_cb_called == 2); - ASSERT(fs_event_cb_called == 3); - - /* Clean up */ - fs_event_unlink_files(NULL); - remove("watch_dir/"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_event_start_and_close) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif - uv_loop_t* loop; - uv_fs_event_t fs_event1; - uv_fs_event_t fs_event2; - int r; - - loop = uv_default_loop(); - - create_dir("watch_dir"); - - r = uv_fs_event_init(loop, &fs_event1); - ASSERT(r == 0); - r = uv_fs_event_start(&fs_event1, fs_event_cb_dir, "watch_dir", 0); - ASSERT(r == 0); - - r = uv_fs_event_init(loop, &fs_event2); - ASSERT(r == 0); - r = uv_fs_event_start(&fs_event2, fs_event_cb_dir, "watch_dir", 0); - ASSERT(r == 0); - - 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); - - remove("watch_dir/"); - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_event_getpath) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif - uv_loop_t* loop = uv_default_loop(); - unsigned i; - int r; - char buf[1024]; - size_t len; - const char* const watch_dir[] = { - "watch_dir", - "watch_dir/", - "watch_dir///", - "watch_dir/subfolder/..", - "watch_dir//subfolder//..//", - }; - - create_dir("watch_dir"); - create_dir("watch_dir/subfolder"); - - - for (i = 0; i < ARRAY_SIZE(watch_dir); i++) { - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - len = sizeof buf; - r = uv_fs_event_getpath(&fs_event, buf, &len); - ASSERT(r == UV_EINVAL); - r = uv_fs_event_start(&fs_event, fail_cb, watch_dir[i], 0); - ASSERT(r == 0); - 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); - r = uv_fs_event_getpath(&fs_event, buf, &len); - ASSERT(r == 0); - ASSERT(len == strlen(watch_dir[i])); - ASSERT(strcmp(buf, watch_dir[i]) == 0); - r = uv_fs_event_stop(&fs_event); - ASSERT(r == 0); - uv_close((uv_handle_t*) &fs_event, close_cb); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - close_cb_called = 0; - } - - remove("watch_dir/"); - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#if defined(__APPLE__) - -static int fs_event_error_reported; - -static void fs_event_error_report_cb(uv_fs_event_t* handle, - const char* filename, - int events, - int status) { - if (status != 0) - fs_event_error_reported = status; -} - -static void timer_cb_nop(uv_timer_t* handle) { - ++timer_cb_called; - uv_close((uv_handle_t*) handle, close_cb); -} - -static void fs_event_error_report_close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; - - /* handle is allocated on-stack, no need to free it */ -} - - -TEST_IMPL(fs_event_error_reporting) { - unsigned int i; - uv_loop_t loops[1024]; - uv_fs_event_t events[ARRAY_SIZE(loops)]; - uv_loop_t* loop; - uv_fs_event_t* event; - - TEST_FILE_LIMIT(ARRAY_SIZE(loops) * 3); - - remove("watch_dir/"); - create_dir("watch_dir"); - - /* Create a lot of loops, and start FSEventStream in each of them. - * Eventually, this should create enough streams to make FSEventStreamStart() - * fail. - */ - for (i = 0; i < ARRAY_SIZE(loops); i++) { - loop = &loops[i]; - ASSERT(0 == 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)); - 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)); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(1 == timer_cb_called); - ASSERT(1 == close_cb_called); - if (fs_event_error_reported != 0) - break; - } - - /* At least one loop should fail */ - ASSERT(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)); - 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); - - uv_loop_close(loop); - } while (i-- != 0); - - remove("watch_dir/"); - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#else /* !defined(__APPLE__) */ - -TEST_IMPL(fs_event_error_reporting) { - /* No-op, needed only for FSEvents backend */ - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#endif /* defined(__APPLE__) */ - -TEST_IMPL(fs_event_watch_invalid_path) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif - - uv_loop_t* loop; - int r; - - loop = uv_default_loop(); - r = uv_fs_event_init(loop, &fs_event); - ASSERT(r == 0); - 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); - 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); - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-fs-fd-hash.c b/libuv/test/test-fs-fd-hash.c deleted file mode 100644 index 8b4bc03..0000000 --- a/libuv/test/test-fs-fd-hash.c +++ /dev/null @@ -1,133 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#if defined(_WIN32) && !defined(USING_UV_SHARED) - -#include "uv.h" -#include "task.h" - -#include "../src/win/fs-fd-hash-inl.h" - - -#define HASH_MAX 1000000000 -#define HASH_INC (1000 * UV__FD_HASH_SIZE + 2) -#define BUCKET_MAX (UV__FD_HASH_SIZE * UV__FD_HASH_GROUP_SIZE * 10) -#define BUCKET_INC UV__FD_HASH_SIZE -#define FD_DIFF 9 - - -void assert_nonexistent(int fd) { - struct uv__fd_info_s info = { 0 }; - ASSERT(!uv__fd_hash_get(fd, &info)); - ASSERT(!uv__fd_hash_remove(fd, &info)); -} - -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); -} - -void assert_insertion(int fd) { - struct uv__fd_info_s info = { 0 }; - assert_nonexistent(fd); - info.flags = fd + FD_DIFF; - uv__fd_hash_add(fd, &info); - assert_existent(fd); -} - -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_nonexistent(fd); -} - - -/* Run a function for a set of values up to a very high number */ -#define RUN_HASH(function) \ - do { \ - for (fd = 0; fd < HASH_MAX; fd += HASH_INC) { \ - function(fd); \ - } \ - } while (0) - -/* Run a function for a set of values that will cause many collisions */ -#define RUN_COLLISIONS(function) \ - do { \ - for (fd = 1; fd < BUCKET_MAX; fd += BUCKET_INC) { \ - function(fd); \ - } \ - } while (0) - - -TEST_IMPL(fs_fd_hash) { - int fd; - - uv__fd_hash_init(); - - /* Empty table */ - RUN_HASH(assert_nonexistent); - RUN_COLLISIONS(assert_nonexistent); - - /* Fill up */ - RUN_HASH(assert_insertion); - RUN_COLLISIONS(assert_insertion); - - /* Full */ - RUN_HASH(assert_existent); - RUN_COLLISIONS(assert_existent); - - /* Update */ - { - struct uv__fd_info_s info = { 0 }; - info.flags = FD_DIFF + FD_DIFF; - uv__fd_hash_add(0, &info); - } - { - struct uv__fd_info_s info = { 0 }; - ASSERT(uv__fd_hash_get(0, &info)); - ASSERT(info.flags == FD_DIFF + FD_DIFF); - } - { - /* Leave as it was, will be again tested below */ - struct uv__fd_info_s info = { 0 }; - info.flags = FD_DIFF; - uv__fd_hash_add(0, &info); - } - - /* Remove all */ - RUN_HASH(assert_removal); - RUN_COLLISIONS(assert_removal); - - /* Empty table */ - RUN_HASH(assert_nonexistent); - RUN_COLLISIONS(assert_nonexistent); - - return 0; -} - -#else - -typedef int file_has_no_tests; /* ISO C forbids an empty translation unit. */ - -#endif /* ifndef _WIN32 */ diff --git a/libuv/test/test-fs-open-flags.c b/libuv/test/test-fs-open-flags.c deleted file mode 100644 index 5f61007..0000000 --- a/libuv/test/test-fs-open-flags.c +++ /dev/null @@ -1,435 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifdef _WIN32 - -#include "uv.h" -#include "task.h" - -#if defined(__unix__) || defined(__POSIX__) || \ - defined(__APPLE__) || defined(__sun) || \ - defined(_AIX) || defined(__MVS__) || \ - defined(__HAIKU__) -# include /* unlink, rmdir */ -#else -# include -# define rmdir _rmdir -# define unlink _unlink -#endif - -static int flags; - -static uv_fs_t close_req; -static uv_fs_t mkdir_req; -static uv_fs_t open_req; -static uv_fs_t read_req; -static uv_fs_t rmdir_req; -static uv_fs_t unlink_req; -static uv_fs_t write_req; - -static char buf[32]; -static uv_buf_t iov; - -/* Opening the same file multiple times quickly can cause uv_fs_open to fail - * with EBUSY, so append an identifier to the file name for each operation */ -static int sid = 0; - -#define FILE_NAME_SIZE 128 -static char absent_file[FILE_NAME_SIZE]; -static char empty_file[FILE_NAME_SIZE]; -static char dummy_file[FILE_NAME_SIZE]; -static char empty_dir[] = "empty_dir"; - -static void setup(void) { - int r; - - /* empty_dir */ - r = uv_fs_rmdir(NULL, &rmdir_req, empty_dir, NULL); - ASSERT(r == 0 || r == UV_ENOENT); - ASSERT(rmdir_req.result == 0 || rmdir_req.result == UV_ENOENT); - 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); - uv_fs_req_cleanup(&mkdir_req); -} - -static void refresh(void) { - int r; - - /* absent_file */ - sprintf(absent_file, "test_file_%d", sid++); - - r = uv_fs_unlink(NULL, &unlink_req, absent_file, NULL); - ASSERT(r == 0 || r == UV_ENOENT); - ASSERT(unlink_req.result == 0 || unlink_req.result == UV_ENOENT); - uv_fs_req_cleanup(&unlink_req); - - /* empty_file */ - sprintf(empty_file, "test_file_%d", sid++); - - 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); - 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); - uv_fs_req_cleanup(&close_req); - - /* dummy_file */ - sprintf(dummy_file, "test_file_%d", sid++); - - 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); - 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); - 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); - uv_fs_req_cleanup(&close_req); -} - -static void cleanup(void) { - unlink(absent_file); - unlink(empty_file); - unlink(dummy_file); -} - -static void openFail(char *file, int error) { - int r; - - refresh(); - - r = uv_fs_open(NULL, &open_req, file, flags, S_IWUSR | S_IRUSR, NULL); - ASSERT(r == error); - ASSERT(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); - uv_fs_req_cleanup(&open_req); - - cleanup(); -} - -static void refreshOpen(char *file) { - int r; - - refresh(); - - r = uv_fs_open(NULL, &open_req, file, flags, S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(open_req.result >= 0); - uv_fs_req_cleanup(&open_req); -} - -static void writeExpect(char *file, char *expected, int size) { - int r; - - refreshOpen(file); - - 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); - 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); - 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); - 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); - 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); - 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); - uv_fs_req_cleanup(&close_req); - - cleanup(); -} - -static void writeFail(char *file, int error) { - int r; - - refreshOpen(file); - - 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); - 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); - 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); - uv_fs_req_cleanup(&close_req); - - cleanup(); -} - -static void readExpect(char *file, char *expected, int size) { - int r; - - refreshOpen(file); - - 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); - 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); - uv_fs_req_cleanup(&close_req); - - cleanup(); -} - -static void readFail(char *file, int error) { - int r; - - refreshOpen(file); - - 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); - 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); - 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); - uv_fs_req_cleanup(&close_req); - - cleanup(); -} - -static void fs_open_flags(int add_flags) { - /* Follow the order from - * https://github.com/nodejs/node/blob/1a96abe849/lib/internal/fs/utils.js#L329-L354 - */ - - /* r */ - flags = add_flags | UV_FS_O_RDONLY; - openFail(absent_file, UV_ENOENT); - writeFail(empty_file, UV_EPERM); - readExpect(empty_file, "", 0); - writeFail(dummy_file, UV_EPERM); - readExpect(dummy_file, "a", 1); - writeFail(empty_dir, UV_EPERM); - readFail(empty_dir, UV_EISDIR); - - /* rs */ - flags = add_flags | UV_FS_O_RDONLY | UV_FS_O_SYNC; - openFail(absent_file, UV_ENOENT); - writeFail(empty_file, UV_EPERM); - readExpect(empty_file, "", 0); - writeFail(dummy_file, UV_EPERM); - readExpect(dummy_file, "a", 1); - writeFail(empty_dir, UV_EPERM); - readFail(empty_dir, UV_EISDIR); - - /* r+ */ - flags = add_flags | UV_FS_O_RDWR; - openFail(absent_file, UV_ENOENT); - writeExpect(empty_file, "bc", 2); - readExpect(empty_file, "", 0); - writeExpect(dummy_file, "bc", 2); - readExpect(dummy_file, "a", 1); - writeFail(empty_dir, UV_EISDIR); - readFail(empty_dir, UV_EISDIR); - - /* rs+ */ - flags = add_flags | UV_FS_O_RDWR | UV_FS_O_SYNC; - openFail(absent_file, UV_ENOENT); - writeExpect(empty_file, "bc", 2); - readExpect(empty_file, "", 0); - writeExpect(dummy_file, "bc", 2); - readExpect(dummy_file, "a", 1); - writeFail(empty_dir, UV_EISDIR); - readFail(empty_dir, UV_EISDIR); - - /* w */ - flags = add_flags | UV_FS_O_TRUNC | UV_FS_O_CREAT | UV_FS_O_WRONLY; - writeExpect(absent_file, "bc", 2); - readFail(absent_file, UV_EPERM); - writeExpect(empty_file, "bc", 2); - readFail(empty_file, UV_EPERM); - writeExpect(dummy_file, "bc", 2); - readFail(dummy_file, UV_EPERM); - openFail(empty_dir, UV_EISDIR); - - /* wx */ - flags = add_flags | UV_FS_O_TRUNC | UV_FS_O_CREAT | UV_FS_O_WRONLY | - UV_FS_O_EXCL; - writeExpect(absent_file, "bc", 2); - readFail(absent_file, UV_EPERM); - openFail(empty_file, UV_EEXIST); - openFail(dummy_file, UV_EEXIST); - openFail(empty_dir, UV_EEXIST); - - /* w+ */ - flags = add_flags | UV_FS_O_TRUNC | UV_FS_O_CREAT | UV_FS_O_RDWR; - writeExpect(absent_file, "bc", 2); - readExpect(absent_file, "", 0); - writeExpect(empty_file, "bc", 2); - readExpect(empty_file, "", 0); - writeExpect(dummy_file, "bc", 2); - readExpect(dummy_file, "", 0); - openFail(empty_dir, UV_EISDIR); - - /* wx+ */ - flags = add_flags | UV_FS_O_TRUNC | UV_FS_O_CREAT | UV_FS_O_RDWR | - UV_FS_O_EXCL; - writeExpect(absent_file, "bc", 2); - readExpect(absent_file, "", 0); - openFail(empty_file, UV_EEXIST); - openFail(dummy_file, UV_EEXIST); - openFail(empty_dir, UV_EEXIST); - - /* a */ - flags = add_flags | UV_FS_O_APPEND | UV_FS_O_CREAT | UV_FS_O_WRONLY; - writeExpect(absent_file, "bc", 2); - readFail(absent_file, UV_EPERM); - writeExpect(empty_file, "bc", 2); - readFail(empty_file, UV_EPERM); - writeExpect(dummy_file, "abc", 3); - readFail(dummy_file, UV_EPERM); - writeFail(empty_dir, UV_EISDIR); - readFail(empty_dir, UV_EPERM); - - /* ax */ - flags = add_flags | UV_FS_O_APPEND | UV_FS_O_CREAT | UV_FS_O_WRONLY | - UV_FS_O_EXCL; - writeExpect(absent_file, "bc", 2); - readFail(absent_file, UV_EPERM); - openFail(empty_file, UV_EEXIST); - openFail(dummy_file, UV_EEXIST); - openFail(empty_dir, UV_EEXIST); - - /* as */ - flags = add_flags | UV_FS_O_APPEND | UV_FS_O_CREAT | UV_FS_O_WRONLY | - UV_FS_O_SYNC; - writeExpect(absent_file, "bc", 2); - readFail(absent_file, UV_EPERM); - writeExpect(empty_file, "bc", 2); - readFail(empty_file, UV_EPERM); - writeExpect(dummy_file, "abc", 3); - readFail(dummy_file, UV_EPERM); - writeFail(empty_dir, UV_EISDIR); - readFail(empty_dir, UV_EPERM); - - /* a+ */ - flags = add_flags | UV_FS_O_APPEND | UV_FS_O_CREAT | UV_FS_O_RDWR; - writeExpect(absent_file, "bc", 2); - readExpect(absent_file, "", 0); - writeExpect(empty_file, "bc", 2); - readExpect(empty_file, "", 0); - writeExpect(dummy_file, "abc", 3); - readExpect(dummy_file, "a", 1); - writeFail(empty_dir, UV_EISDIR); - readFail(empty_dir, UV_EISDIR); - - /* ax+ */ - flags = add_flags | UV_FS_O_APPEND | UV_FS_O_CREAT | UV_FS_O_RDWR | - UV_FS_O_EXCL; - writeExpect(absent_file, "bc", 2); - readExpect(absent_file, "", 0); - openFail(empty_file, UV_EEXIST); - openFail(dummy_file, UV_EEXIST); - openFail(empty_dir, UV_EEXIST); - - /* as+ */ - flags = add_flags | UV_FS_O_APPEND | UV_FS_O_CREAT | UV_FS_O_RDWR | - UV_FS_O_SYNC; - writeExpect(absent_file, "bc", 2); - readExpect(absent_file, "", 0); - writeExpect(empty_file, "bc", 2); - readExpect(empty_file, "", 0); - writeExpect(dummy_file, "abc", 3); - readExpect(dummy_file, "a", 1); - writeFail(empty_dir, UV_EISDIR); - readFail(empty_dir, UV_EISDIR); -} -TEST_IMPL(fs_open_flags) { - setup(); - - fs_open_flags(0); - fs_open_flags(UV_FS_O_FILEMAP); - - /* Cleanup. */ - rmdir(empty_dir); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#else - -typedef int file_has_no_tests; /* ISO C forbids an empty translation unit. */ - -#endif /* ifndef _WIN32 */ diff --git a/libuv/test/test-fs-poll.c b/libuv/test/test-fs-poll.c deleted file mode 100644 index 76fe6fc..0000000 --- a/libuv/test/test-fs-poll.c +++ /dev/null @@ -1,300 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include - -#define FIXTURE "testfile" - -static void timer_cb(uv_timer_t* handle); -static void close_cb(uv_handle_t* handle); -static void poll_cb(uv_fs_poll_t* handle, - int status, - const uv_stat_t* prev, - const uv_stat_t* curr); - -static void poll_cb_fail(uv_fs_poll_t* handle, - int status, - const uv_stat_t* prev, - const uv_stat_t* curr); -static void poll_cb_noop(uv_fs_poll_t* handle, - int status, - const uv_stat_t* prev, - const uv_stat_t* curr); - -static uv_fs_poll_t poll_handle; -static uv_timer_t timer_handle; -static uv_loop_t* loop; - -static int poll_cb_called; -static int timer_cb_called; -static int close_cb_called; - - -static void touch_file(const char* path) { - static int count; - FILE* fp; - int i; - - ASSERT((fp = fopen(FIXTURE, "w+"))); - - /* Need to change the file size because the poller may not pick up - * sub-second mtime changes. - */ - i = ++count; - - while (i--) - fputc('*', fp); - - fclose(fp); -} - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - - -static void timer_cb(uv_timer_t* handle) { - touch_file(FIXTURE); - timer_cb_called++; -} - - -static void poll_cb_fail(uv_fs_poll_t* handle, - int status, - const uv_stat_t* prev, - const uv_stat_t* curr) { - ASSERT(0 && "fail_cb called"); -} - -static void poll_cb_noop(uv_fs_poll_t* handle, - int status, - const uv_stat_t* prev, - const uv_stat_t* curr) { -} - - -static void poll_cb(uv_fs_poll_t* handle, - int status, - const uv_stat_t* prev, - const uv_stat_t* curr) { - uv_stat_t zero_statbuf; - - memset(&zero_statbuf, 0, sizeof(zero_statbuf)); - - ASSERT(handle == &poll_handle); - ASSERT(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))); - 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)); - 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)); - break; - - case 3: - ASSERT(status == 0); - ASSERT(0 != memcmp(prev, &zero_statbuf, sizeof(zero_statbuf))); - ASSERT(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))); - uv_close((uv_handle_t*)handle, close_cb); - break; - - default: - ASSERT(0); - } -} - - -TEST_IMPL(fs_poll) { - loop = uv_default_loop(); - - 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(poll_cb_called == 5); - ASSERT(timer_cb_called == 2); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_poll_getpath) { - char buf[1024]; - size_t len; - loop = uv_default_loop(); - - remove(FIXTURE); - - ASSERT(0 == 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)); - 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)); - - uv_close((uv_handle_t*) &poll_handle, close_cb); - - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_poll_close_request) { - uv_loop_t loop; - uv_fs_poll_t poll_handle; - - remove(FIXTURE); - - ASSERT(0 == 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)); - 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(0 == uv_loop_close(&loop)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_poll_close_request_multi_start_stop) { - uv_loop_t loop; - uv_fs_poll_t poll_handle; - int i; - - remove(FIXTURE); - - ASSERT(0 == uv_loop_init(&loop)); - - ASSERT(0 == 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)); - } - 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(0 == uv_loop_close(&loop)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_poll_close_request_multi_stop_start) { - uv_loop_t loop; - uv_fs_poll_t poll_handle; - int i; - - remove(FIXTURE); - - ASSERT(0 == uv_loop_init(&loop)); - - ASSERT(0 == 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)); - } - 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(0 == uv_loop_close(&loop)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_poll_close_request_stop_when_active) { - /* Regression test for https://github.com/libuv/libuv/issues/2287. */ - uv_loop_t loop; - uv_fs_poll_t poll_handle; - - remove(FIXTURE); - - ASSERT(0 == 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)); - uv_run(&loop, UV_RUN_ONCE); - - /* Close the timer handle, and do not crash. */ - ASSERT(0 == 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(0 == uv_loop_close(&loop)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-fs-readdir.c b/libuv/test/test-fs-readdir.c deleted file mode 100644 index 41e1d37..0000000 --- a/libuv/test/test-fs-readdir.c +++ /dev/null @@ -1,465 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - -static uv_fs_t opendir_req; -static uv_fs_t readdir_req; -static uv_fs_t closedir_req; - -static uv_dirent_t dirents[1]; - -static int empty_opendir_cb_count; -static int empty_closedir_cb_count; - -static void cleanup_test_files(void) { - uv_fs_t req; - - uv_fs_unlink(NULL, &req, "test_dir/file1", NULL); - uv_fs_req_cleanup(&req); - uv_fs_unlink(NULL, &req, "test_dir/file2", NULL); - uv_fs_req_cleanup(&req); - uv_fs_rmdir(NULL, &req, "test_dir/test_subdir", NULL); - uv_fs_req_cleanup(&req); - uv_fs_rmdir(NULL, &req, "test_dir", NULL); - uv_fs_req_cleanup(&req); -} - -static void empty_closedir_cb(uv_fs_t* req) { - ASSERT(req == &closedir_req); - ASSERT(req->fs_type == UV_FS_CLOSEDIR); - ASSERT(req->result == 0); - ++empty_closedir_cb_count; - uv_fs_req_cleanup(req); -} - -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); - dir = req->ptr; - uv_fs_req_cleanup(req); - r = uv_fs_closedir(uv_default_loop(), - &closedir_req, - dir, - empty_closedir_cb); - ASSERT(r == 0); -} - -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_NOT_NULL(req->ptr); - dir = req->ptr; - dir->dirents = dirents; - dir->nentries = ARRAY_SIZE(dirents); - r = uv_fs_readdir(uv_default_loop(), - &readdir_req, - dir, - empty_readdir_cb); - ASSERT(r == 0); - uv_fs_req_cleanup(req); - ++empty_opendir_cb_count; -} - -/* - * This test makes sure that both synchronous and asynchronous flavors - * of the uv_fs_opendir() -> uv_fs_readdir() -> uv_fs_closedir() sequence work - * as expected when processing an empty directory. - */ -TEST_IMPL(fs_readdir_empty_dir) { - const char* path; - uv_fs_t mkdir_req; - uv_fs_t rmdir_req; - int r; - int nb_entries_read; - uv_dir_t* dir; - - path = "./empty_dir/"; - uv_fs_mkdir(uv_default_loop(), &mkdir_req, path, 0777, NULL); - uv_fs_req_cleanup(&mkdir_req); - - /* Fill the req to ensure that required fields are cleaned up. */ - memset(&opendir_req, 0xdb, sizeof(opendir_req)); - - /* Testing the synchronous flavor. */ - r = uv_fs_opendir(uv_default_loop(), - &opendir_req, - path, - NULL); - ASSERT(r == 0); - ASSERT(opendir_req.fs_type == UV_FS_OPENDIR); - ASSERT(opendir_req.result == 0); - ASSERT_NOT_NULL(opendir_req.ptr); - dir = opendir_req.ptr; - uv_fs_req_cleanup(&opendir_req); - - /* Fill the req to ensure that required fields are cleaned up. */ - memset(&readdir_req, 0xdb, sizeof(readdir_req)); - dir->dirents = dirents; - dir->nentries = ARRAY_SIZE(dirents); - nb_entries_read = uv_fs_readdir(uv_default_loop(), - &readdir_req, - dir, - NULL); - ASSERT(nb_entries_read == 0); - 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); - uv_fs_req_cleanup(&closedir_req); - - /* Testing the asynchronous flavor. */ - - /* Fill the req to ensure that required fields are cleaned up. */ - memset(&opendir_req, 0xdb, sizeof(opendir_req)); - memset(&readdir_req, 0xdb, sizeof(readdir_req)); - 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); - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - ASSERT(empty_opendir_cb_count == 1); - ASSERT(empty_closedir_cb_count == 1); - uv_fs_rmdir(uv_default_loop(), &rmdir_req, path, NULL); - uv_fs_req_cleanup(&rmdir_req); - MAKE_VALGRIND_HAPPY(); - return 0; -} - -/* - * This test makes sure that reading a non-existing directory with - * uv_fs_{open,read}_dir() returns proper error codes. - */ - -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_NULL(req->ptr); - - uv_fs_req_cleanup(req); - ++non_existing_opendir_cb_count; -} - -TEST_IMPL(fs_readdir_non_existing_dir) { - const char* path; - int r; - - path = "./non-existing-dir/"; - - /* Fill the req to ensure that required fields are cleaned up. */ - memset(&opendir_req, 0xdb, sizeof(opendir_req)); - - /* 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_NULL(opendir_req.ptr); - uv_fs_req_cleanup(&opendir_req); - - /* Fill the req to ensure that required fields are cleaned up. */ - memset(&opendir_req, 0xdb, sizeof(opendir_req)); - - /* Testing the async flavor. */ - r = uv_fs_opendir(uv_default_loop(), - &opendir_req, - path, - non_existing_opendir_cb); - ASSERT(r == 0); - ASSERT(non_existing_opendir_cb_count == 0); - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - ASSERT(non_existing_opendir_cb_count == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -/* - * This test makes sure that reading a file as a directory reports correct - * error codes. - */ - -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_NULL(req->ptr); - - uv_fs_req_cleanup(req); - ++file_opendir_cb_count; -} - -TEST_IMPL(fs_readdir_file) { -#if defined(__ASAN__) - RETURN_SKIP("Test does not currently work in ASAN"); -#endif - const char* path; - int r; - - path = "test/fixtures/empty_file"; - - /* Fill the req to ensure that required fields are cleaned up. */ - memset(&opendir_req, 0xdb, sizeof(opendir_req)); - - /* 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_NULL(opendir_req.ptr); - - uv_fs_req_cleanup(&opendir_req); - - /* Fill the req to ensure that required fields are cleaned up. */ - memset(&opendir_req, 0xdb, sizeof(opendir_req)); - - /* 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); - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - ASSERT(file_opendir_cb_count == 1); - MAKE_VALGRIND_HAPPY(); - return 0; -} - -/* - * This test makes sure that reading a non-empty directory with - * uv_fs_{open,read}_dir() returns proper directory entries, including the - * correct entry types. - */ - -static int non_empty_opendir_cb_count; -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); - uv_fs_req_cleanup(req); - ++non_empty_closedir_cb_count; -} - -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); - dir = req->ptr; - - if (req->result == 0) { - uv_fs_req_cleanup(req); - ASSERT(non_empty_readdir_cb_count == 3); - uv_fs_closedir(uv_default_loop(), - &closedir_req, - dir, - non_empty_closedir_cb); - } else { - ASSERT(req->result == 1); - ASSERT(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); - else - ASSERT(dirents[0].type == UV_DIRENT_FILE); -#else - ASSERT(dirents[0].type == UV_DIRENT_UNKNOWN); -#endif /* HAVE_DIRENT_TYPES */ - - ++non_empty_readdir_cb_count; - uv_fs_req_cleanup(req); - dir->dirents = dirents; - dir->nentries = ARRAY_SIZE(dirents); - uv_fs_readdir(uv_default_loop(), - &readdir_req, - dir, - non_empty_readdir_cb); - } -} - -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_NOT_NULL(req->ptr); - - dir = req->ptr; - dir->dirents = dirents; - dir->nentries = ARRAY_SIZE(dirents); - - r = uv_fs_readdir(uv_default_loop(), - &readdir_req, - dir, - non_empty_readdir_cb); - ASSERT(r == 0); - uv_fs_req_cleanup(req); - ++non_empty_opendir_cb_count; -} - -TEST_IMPL(fs_readdir_non_empty_dir) { - size_t entries_count; - uv_fs_t mkdir_req; - uv_fs_t rmdir_req; - uv_fs_t create_req; - uv_fs_t close_req; - uv_dir_t* dir; - int r; - - cleanup_test_files(); - - r = uv_fs_mkdir(uv_default_loop(), &mkdir_req, "test_dir", 0755, NULL); - ASSERT(r == 0); - - /* Create two files synchronously. */ - r = uv_fs_open(uv_default_loop(), - &create_req, - "test_dir/file1", - O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, - NULL); - ASSERT(r >= 0); - uv_fs_req_cleanup(&create_req); - r = uv_fs_close(uv_default_loop(), - &close_req, - create_req.result, - NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_open(uv_default_loop(), - &create_req, - "test_dir/file2", - O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR, - NULL); - ASSERT(r >= 0); - uv_fs_req_cleanup(&create_req); - r = uv_fs_close(uv_default_loop(), - &close_req, - create_req.result, - NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_mkdir(uv_default_loop(), - &mkdir_req, - "test_dir/test_subdir", - 0755, - NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&mkdir_req); - - /* Fill the req to ensure that required fields are cleaned up. */ - memset(&opendir_req, 0xdb, sizeof(opendir_req)); - - /* 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_NOT_NULL(opendir_req.ptr); - - entries_count = 0; - dir = opendir_req.ptr; - dir->dirents = dirents; - dir->nentries = ARRAY_SIZE(dirents); - uv_fs_req_cleanup(&opendir_req); - - while (uv_fs_readdir(uv_default_loop(), - &readdir_req, - dir, - NULL) != 0) { - 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); - else - ASSERT(dirents[0].type == UV_DIRENT_FILE); -#else - ASSERT(dirents[0].type == UV_DIRENT_UNKNOWN); -#endif /* HAVE_DIRENT_TYPES */ - uv_fs_req_cleanup(&readdir_req); - ++entries_count; - } - - ASSERT(entries_count == 3); - 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); - uv_fs_req_cleanup(&closedir_req); - - /* Testing the asynchronous flavor. */ - - /* Fill the req to ensure that required fields are cleaned up. */ - memset(&opendir_req, 0xdb, sizeof(opendir_req)); - - r = uv_fs_opendir(uv_default_loop(), - &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); - 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); - - uv_fs_rmdir(uv_default_loop(), &rmdir_req, "test_subdir", NULL); - uv_fs_req_cleanup(&rmdir_req); - - cleanup_test_files(); - MAKE_VALGRIND_HAPPY(); - return 0; - } diff --git a/libuv/test/test-fs.c b/libuv/test/test-fs.c deleted file mode 100644 index 034c971..0000000 --- a/libuv/test/test-fs.c +++ /dev/null @@ -1,4484 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include /* memset */ -#include -#include -#include /* INT_MAX, PATH_MAX, IOV_MAX */ - -#ifndef _WIN32 -# include /* unlink, rmdir, etc. */ -#else -# include -# include -# include -# ifndef ERROR_SYMLINK_NOT_SUPPORTED -# define ERROR_SYMLINK_NOT_SUPPORTED 1464 -# endif -# define unlink _unlink -# define rmdir _rmdir -# define open _open -# define write _write -# define close _close -# ifndef stat -# define stat _stati64 -# endif -# ifndef lseek -# define lseek _lseek -# endif -#endif - -#define TOO_LONG_NAME_LENGTH 65536 -#define PATHMAX 4096 - -typedef struct { - const char* path; - double atime; - double mtime; -} utime_check_t; - - -static int dummy_cb_count; -static int close_cb_count; -static int create_cb_count; -static int open_cb_count; -static int read_cb_count; -static int write_cb_count; -static int unlink_cb_count; -static int mkdir_cb_count; -static int mkdtemp_cb_count; -static int mkstemp_cb_count; -static int rmdir_cb_count; -static int scandir_cb_count; -static int stat_cb_count; -static int rename_cb_count; -static int fsync_cb_count; -static int fdatasync_cb_count; -static int ftruncate_cb_count; -static int sendfile_cb_count; -static int fstat_cb_count; -static int access_cb_count; -static int chmod_cb_count; -static int fchmod_cb_count; -static int chown_cb_count; -static int fchown_cb_count; -static int lchown_cb_count; -static int link_cb_count; -static int symlink_cb_count; -static int readlink_cb_count; -static int realpath_cb_count; -static int utime_cb_count; -static int futime_cb_count; -static int lutime_cb_count; -static int statfs_cb_count; - -static uv_loop_t* loop; - -static uv_fs_t open_req1; -static uv_fs_t open_req2; -static uv_fs_t read_req; -static uv_fs_t write_req; -static uv_fs_t unlink_req; -static uv_fs_t close_req; -static uv_fs_t mkdir_req; -static uv_fs_t mkdtemp_req1; -static uv_fs_t mkdtemp_req2; -static uv_fs_t mkstemp_req1; -static uv_fs_t mkstemp_req2; -static uv_fs_t mkstemp_req3; -static uv_fs_t rmdir_req; -static uv_fs_t scandir_req; -static uv_fs_t stat_req; -static uv_fs_t rename_req; -static uv_fs_t fsync_req; -static uv_fs_t fdatasync_req; -static uv_fs_t ftruncate_req; -static uv_fs_t sendfile_req; -static uv_fs_t utime_req; -static uv_fs_t futime_req; - -static char buf[32]; -static char buf2[32]; -static char test_buf[] = "test-buffer\n"; -static char test_buf2[] = "second-buffer\n"; -static uv_buf_t iov; - -#ifdef _WIN32 -int uv_test_getiovmax(void) { - return INT32_MAX; /* Emulated by libuv, so no real limit. */ -} -#else -int uv_test_getiovmax(void) { -#if defined(IOV_MAX) - return IOV_MAX; -#elif defined(_SC_IOV_MAX) - static int iovmax = -1; - if (iovmax == -1) { - iovmax = sysconf(_SC_IOV_MAX); - /* On some embedded devices (arm-linux-uclibc based ip camera), - * sysconf(_SC_IOV_MAX) can not get the correct value. The return - * value is -1 and the errno is EINPROGRESS. Degrade the value to 1. - */ - if (iovmax == -1) iovmax = 1; - } - return iovmax; -#else - return 1024; -#endif -} -#endif - -#ifdef _WIN32 -/* - * This tag and guid have no special meaning, and don't conflict with - * reserved ids. -*/ -static unsigned REPARSE_TAG = 0x9913; -static GUID REPARSE_GUID = { - 0x1bf6205f, 0x46ae, 0x4527, - { 0xb1, 0x0c, 0xc5, 0x09, 0xb7, 0x55, 0x22, 0x80 }}; -#endif - -static void check_permission(const char* filename, unsigned int mode) { - int r; - uv_fs_t req; - uv_stat_t* s; - - r = uv_fs_stat(NULL, &req, filename, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - - s = &req.statbuf; -#if defined(_WIN32) || defined(__CYGWIN__) || defined(__MSYS__) - /* - * On Windows, chmod can only modify S_IWUSR (_S_IWRITE) bit, - * so only testing for the specified flags. - */ - ASSERT((s->st_mode & 0777) & mode); -#else - ASSERT((s->st_mode & 0777) == mode); -#endif - - uv_fs_req_cleanup(&req); -} - - -static void dummy_cb(uv_fs_t* req) { - (void) req; - dummy_cb_count++; -} - - -static void link_cb(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_LINK); - ASSERT(req->result == 0); - link_cb_count++; - uv_fs_req_cleanup(req); -} - - -static void symlink_cb(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_SYMLINK); - ASSERT(req->result == 0); - symlink_cb_count++; - uv_fs_req_cleanup(req); -} - -static void readlink_cb(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_READLINK); - ASSERT(req->result == 0); - ASSERT(strcmp(req->ptr, "test_file_symlink2") == 0); - readlink_cb_count++; - uv_fs_req_cleanup(req); -} - - -static void realpath_cb(uv_fs_t* req) { - char test_file_abs_buf[PATHMAX]; - size_t test_file_abs_size = sizeof(test_file_abs_buf); - ASSERT(req->fs_type == UV_FS_REALPATH); -#ifdef _WIN32 - /* - * Windows XP and Server 2003 don't support GetFinalPathNameByHandleW() - */ - if (req->result == UV_ENOSYS) { - realpath_cb_count++; - uv_fs_req_cleanup(req); - return; - } -#endif - ASSERT(req->result == 0); - - uv_cwd(test_file_abs_buf, &test_file_abs_size); -#ifdef _WIN32 - strcat(test_file_abs_buf, "\\test_file"); - ASSERT(stricmp(req->ptr, test_file_abs_buf) == 0); -#else - strcat(test_file_abs_buf, "/test_file"); - ASSERT(strcmp(req->ptr, test_file_abs_buf) == 0); -#endif - realpath_cb_count++; - uv_fs_req_cleanup(req); -} - - -static void access_cb(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_ACCESS); - access_cb_count++; - uv_fs_req_cleanup(req); -} - - -static void fchmod_cb(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_FCHMOD); - ASSERT(req->result == 0); - fchmod_cb_count++; - uv_fs_req_cleanup(req); - check_permission("test_file", *(int*)req->data); -} - - -static void chmod_cb(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_CHMOD); - ASSERT(req->result == 0); - chmod_cb_count++; - uv_fs_req_cleanup(req); - check_permission("test_file", *(int*)req->data); -} - - -static void fchown_cb(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_FCHOWN); - ASSERT(req->result == 0); - fchown_cb_count++; - uv_fs_req_cleanup(req); -} - - -static void chown_cb(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_CHOWN); - ASSERT(req->result == 0); - chown_cb_count++; - uv_fs_req_cleanup(req); -} - -static void lchown_cb(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_LCHOWN); - ASSERT(req->result == 0); - lchown_cb_count++; - uv_fs_req_cleanup(req); -} - -static void chown_root_cb(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_CHOWN); -#if defined(_WIN32) || defined(__MSYS__) - /* On windows, chown is a no-op and always succeeds. */ - ASSERT(req->result == 0); -#else - /* On unix, chown'ing the root directory is not allowed - - * unless you're root, of course. - */ - if (geteuid() == 0) - ASSERT(req->result == 0); - else -# if defined(__CYGWIN__) - /* On Cygwin, uid 0 is invalid (no root). */ - ASSERT(req->result == UV_EINVAL); -# elif defined(__PASE__) - /* On IBMi PASE, there is no root user. uid 0 is user qsecofr. - * User may grant qsecofr's privileges, including changing - * the file's ownership to uid 0. - */ - ASSERT(req->result == 0 || req->result == UV_EPERM); -# else - ASSERT(req->result == UV_EPERM); -# endif -#endif - chown_cb_count++; - uv_fs_req_cleanup(req); -} - -static void unlink_cb(uv_fs_t* req) { - ASSERT(req == &unlink_req); - ASSERT(req->fs_type == UV_FS_UNLINK); - ASSERT(req->result == 0); - unlink_cb_count++; - uv_fs_req_cleanup(req); -} - -static void fstat_cb(uv_fs_t* req) { - uv_stat_t* s = req->ptr; - ASSERT(req->fs_type == UV_FS_FSTAT); - ASSERT(req->result == 0); - ASSERT(s->st_size == sizeof(test_buf)); - uv_fs_req_cleanup(req); - fstat_cb_count++; -} - - -static void statfs_cb(uv_fs_t* req) { - uv_statfs_t* stats; - - ASSERT(req->fs_type == UV_FS_STATFS); - ASSERT(req->result == 0); - ASSERT_NOT_NULL(req->ptr); - stats = req->ptr; - -#if defined(_WIN32) || defined(__sun) || defined(_AIX) || defined(__MVS__) || \ - defined(__OpenBSD__) || defined(__NetBSD__) - ASSERT(stats->f_type == 0); -#else - ASSERT(stats->f_type > 0); -#endif - - ASSERT(stats->f_bsize > 0); - ASSERT(stats->f_blocks > 0); - ASSERT(stats->f_bfree <= stats->f_blocks); - ASSERT(stats->f_bavail <= stats->f_bfree); - -#ifdef _WIN32 - ASSERT(stats->f_files == 0); - ASSERT(stats->f_ffree == 0); -#else - /* There is no assertion for stats->f_files that makes sense, so ignore it. */ - ASSERT(stats->f_ffree <= stats->f_files); -#endif - uv_fs_req_cleanup(req); - ASSERT_NULL(req->ptr); - statfs_cb_count++; -} - - -static void close_cb(uv_fs_t* req) { - int r; - ASSERT(req == &close_req); - ASSERT(req->fs_type == UV_FS_CLOSE); - ASSERT(req->result == 0); - close_cb_count++; - uv_fs_req_cleanup(req); - if (close_cb_count == 3) { - r = uv_fs_unlink(loop, &unlink_req, "test_file2", unlink_cb); - ASSERT(r == 0); - } -} - - -static void ftruncate_cb(uv_fs_t* req) { - int r; - ASSERT(req == &ftruncate_req); - ASSERT(req->fs_type == UV_FS_FTRUNCATE); - ASSERT(req->result == 0); - ftruncate_cb_count++; - uv_fs_req_cleanup(req); - r = uv_fs_close(loop, &close_req, open_req1.result, close_cb); - ASSERT(r == 0); -} - -static void fail_cb(uv_fs_t* req) { - FATAL("fail_cb should not have been called"); -} - -static void read_cb(uv_fs_t* req) { - int r; - ASSERT(req == &read_req); - ASSERT(req->fs_type == UV_FS_READ); - ASSERT(req->result >= 0); /* FIXME(bnoordhuis) Check if requested size? */ - read_cb_count++; - uv_fs_req_cleanup(req); - if (read_cb_count == 1) { - ASSERT(strcmp(buf, test_buf) == 0); - r = uv_fs_ftruncate(loop, &ftruncate_req, open_req1.result, 7, - ftruncate_cb); - } else { - ASSERT(strcmp(buf, "test-bu") == 0); - r = uv_fs_close(loop, &close_req, open_req1.result, close_cb); - } - ASSERT(r == 0); -} - - -static void open_cb(uv_fs_t* req) { - int r; - ASSERT(req == &open_req1); - ASSERT(req->fs_type == UV_FS_OPEN); - if (req->result < 0) { - fprintf(stderr, "async open error: %d\n", (int) req->result); - ASSERT(0); - } - open_cb_count++; - ASSERT(req->path); - ASSERT(memcmp(req->path, "test_file2\0", 11) == 0); - uv_fs_req_cleanup(req); - memset(buf, 0, sizeof(buf)); - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(loop, &read_req, open_req1.result, &iov, 1, -1, - read_cb); - ASSERT(r == 0); -} - - -static void open_cb_simple(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_OPEN); - if (req->result < 0) { - fprintf(stderr, "async open error: %d\n", (int) req->result); - ASSERT(0); - } - open_cb_count++; - ASSERT(req->path); - uv_fs_req_cleanup(req); -} - - -static void fsync_cb(uv_fs_t* req) { - int r; - ASSERT(req == &fsync_req); - ASSERT(req->fs_type == UV_FS_FSYNC); - ASSERT(req->result == 0); - fsync_cb_count++; - uv_fs_req_cleanup(req); - r = uv_fs_close(loop, &close_req, open_req1.result, close_cb); - ASSERT(r == 0); -} - - -static void fdatasync_cb(uv_fs_t* req) { - int r; - ASSERT(req == &fdatasync_req); - ASSERT(req->fs_type == UV_FS_FDATASYNC); - ASSERT(req->result == 0); - fdatasync_cb_count++; - uv_fs_req_cleanup(req); - r = uv_fs_fsync(loop, &fsync_req, open_req1.result, fsync_cb); - ASSERT(r == 0); -} - - -static void write_cb(uv_fs_t* req) { - int r; - ASSERT(req == &write_req); - ASSERT(req->fs_type == UV_FS_WRITE); - ASSERT(req->result >= 0); /* FIXME(bnoordhuis) Check if requested size? */ - write_cb_count++; - uv_fs_req_cleanup(req); - r = uv_fs_fdatasync(loop, &fdatasync_req, open_req1.result, fdatasync_cb); - ASSERT(r == 0); -} - - -static void create_cb(uv_fs_t* req) { - int r; - ASSERT(req == &open_req1); - ASSERT(req->fs_type == UV_FS_OPEN); - ASSERT(req->result >= 0); - create_cb_count++; - uv_fs_req_cleanup(req); - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(loop, &write_req, req->result, &iov, 1, -1, write_cb); - ASSERT(r == 0); -} - - -static void rename_cb(uv_fs_t* req) { - ASSERT(req == &rename_req); - ASSERT(req->fs_type == UV_FS_RENAME); - ASSERT(req->result == 0); - rename_cb_count++; - uv_fs_req_cleanup(req); -} - - -static void mkdir_cb(uv_fs_t* req) { - ASSERT(req == &mkdir_req); - ASSERT(req->fs_type == UV_FS_MKDIR); - ASSERT(req->result == 0); - mkdir_cb_count++; - ASSERT(req->path); - ASSERT(memcmp(req->path, "test_dir\0", 9) == 0); - uv_fs_req_cleanup(req); -} - - -static void check_mkdtemp_result(uv_fs_t* req) { - int r; - - ASSERT(req->fs_type == UV_FS_MKDTEMP); - ASSERT(req->result == 0); - ASSERT(req->path); - ASSERT(strlen(req->path) == 15); - ASSERT(memcmp(req->path, "test_dir_", 9) == 0); - ASSERT(memcmp(req->path + 9, "XXXXXX", 6) != 0); - check_permission(req->path, 0700); - - /* Check if req->path is actually a directory */ - r = uv_fs_stat(NULL, &stat_req, req->path, NULL); - ASSERT(r == 0); - ASSERT(((uv_stat_t*)stat_req.ptr)->st_mode & S_IFDIR); - uv_fs_req_cleanup(&stat_req); -} - - -static void mkdtemp_cb(uv_fs_t* req) { - ASSERT(req == &mkdtemp_req1); - check_mkdtemp_result(req); - mkdtemp_cb_count++; -} - - -static void check_mkstemp_result(uv_fs_t* req) { - int r; - - ASSERT(req->fs_type == UV_FS_MKSTEMP); - ASSERT(req->result >= 0); - ASSERT(req->path); - ASSERT(strlen(req->path) == 16); - ASSERT(memcmp(req->path, "test_file_", 10) == 0); - ASSERT(memcmp(req->path + 10, "XXXXXX", 6) != 0); - check_permission(req->path, 0600); - - /* Check if req->path is actually a file */ - r = uv_fs_stat(NULL, &stat_req, req->path, NULL); - ASSERT(r == 0); - ASSERT(stat_req.statbuf.st_mode & S_IFREG); - uv_fs_req_cleanup(&stat_req); -} - - -static void mkstemp_cb(uv_fs_t* req) { - ASSERT(req == &mkstemp_req1); - check_mkstemp_result(req); - mkstemp_cb_count++; -} - - -static void rmdir_cb(uv_fs_t* req) { - ASSERT(req == &rmdir_req); - ASSERT(req->fs_type == UV_FS_RMDIR); - ASSERT(req->result == 0); - rmdir_cb_count++; - ASSERT(req->path); - ASSERT(memcmp(req->path, "test_dir\0", 9) == 0); - uv_fs_req_cleanup(req); -} - - -static void assert_is_file_type(uv_dirent_t dent) { -#ifdef HAVE_DIRENT_TYPES - /* - * For Apple and Windows, we know getdents is expected to work but for other - * environments, the filesystem dictates whether or not getdents supports - * returning the file type. - * - * See: - * http://man7.org/linux/man-pages/man2/getdents.2.html - * https://github.com/libuv/libuv/issues/501 - */ - #if defined(__APPLE__) || defined(_WIN32) - ASSERT(dent.type == UV_DIRENT_FILE); - #else - ASSERT(dent.type == UV_DIRENT_FILE || dent.type == UV_DIRENT_UNKNOWN); - #endif -#else - ASSERT(dent.type == UV_DIRENT_UNKNOWN); -#endif -} - - -static void scandir_cb(uv_fs_t* req) { - uv_dirent_t dent; - ASSERT(req == &scandir_req); - ASSERT(req->fs_type == UV_FS_SCANDIR); - ASSERT(req->result == 2); - ASSERT(req->ptr); - - while (UV_EOF != uv_fs_scandir_next(req, &dent)) { - ASSERT(strcmp(dent.name, "file1") == 0 || strcmp(dent.name, "file2") == 0); - assert_is_file_type(dent); - } - scandir_cb_count++; - ASSERT(req->path); - ASSERT(memcmp(req->path, "test_dir\0", 9) == 0); - uv_fs_req_cleanup(req); - ASSERT(!req->ptr); -} - - -static void empty_scandir_cb(uv_fs_t* req) { - uv_dirent_t dent; - - ASSERT(req == &scandir_req); - ASSERT(req->fs_type == UV_FS_SCANDIR); - ASSERT(req->result == 0); - ASSERT_NULL(req->ptr); - ASSERT(UV_EOF == uv_fs_scandir_next(req, &dent)); - uv_fs_req_cleanup(req); - scandir_cb_count++; -} - -static void non_existent_scandir_cb(uv_fs_t* req) { - uv_dirent_t dent; - - ASSERT(req == &scandir_req); - ASSERT(req->fs_type == UV_FS_SCANDIR); - ASSERT(req->result == UV_ENOENT); - ASSERT_NULL(req->ptr); - ASSERT(UV_ENOENT == uv_fs_scandir_next(req, &dent)); - uv_fs_req_cleanup(req); - scandir_cb_count++; -} - - -static void file_scandir_cb(uv_fs_t* req) { - ASSERT(req == &scandir_req); - ASSERT(req->fs_type == UV_FS_SCANDIR); - ASSERT(req->result == UV_ENOTDIR); - ASSERT_NULL(req->ptr); - uv_fs_req_cleanup(req); - scandir_cb_count++; -} - - -static void stat_cb(uv_fs_t* req) { - ASSERT(req == &stat_req); - ASSERT(req->fs_type == UV_FS_STAT || req->fs_type == UV_FS_LSTAT); - ASSERT(req->result == 0); - ASSERT(req->ptr); - stat_cb_count++; - uv_fs_req_cleanup(req); - ASSERT(!req->ptr); -} - - -static void sendfile_cb(uv_fs_t* req) { - ASSERT(req == &sendfile_req); - ASSERT(req->fs_type == UV_FS_SENDFILE); - ASSERT(req->result == 65545); - sendfile_cb_count++; - uv_fs_req_cleanup(req); -} - - -static void sendfile_nodata_cb(uv_fs_t* req) { - ASSERT(req == &sendfile_req); - ASSERT(req->fs_type == UV_FS_SENDFILE); - ASSERT(req->result == 0); - sendfile_cb_count++; - uv_fs_req_cleanup(req); -} - - -static void open_noent_cb(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_OPEN); - ASSERT(req->result == UV_ENOENT); - open_cb_count++; - uv_fs_req_cleanup(req); -} - -static void open_nametoolong_cb(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_OPEN); - ASSERT(req->result == UV_ENAMETOOLONG); - open_cb_count++; - uv_fs_req_cleanup(req); -} - -static void open_loop_cb(uv_fs_t* req) { - ASSERT(req->fs_type == UV_FS_OPEN); - ASSERT(req->result == UV_ELOOP); - open_cb_count++; - uv_fs_req_cleanup(req); -} - - -TEST_IMPL(fs_file_noent) { - uv_fs_t req; - int r; - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, &req, "does_not_exist", O_RDONLY, 0, NULL); - ASSERT(r == UV_ENOENT); - ASSERT(req.result == UV_ENOENT); - uv_fs_req_cleanup(&req); - - r = uv_fs_open(loop, &req, "does_not_exist", O_RDONLY, 0, open_noent_cb); - ASSERT(r == 0); - - ASSERT(open_cb_count == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(open_cb_count == 1); - - /* TODO add EACCES test */ - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_file_nametoolong) { - uv_fs_t req; - int r; - char name[TOO_LONG_NAME_LENGTH + 1]; - - loop = uv_default_loop(); - - memset(name, 'a', TOO_LONG_NAME_LENGTH); - name[TOO_LONG_NAME_LENGTH] = 0; - - r = uv_fs_open(NULL, &req, name, O_RDONLY, 0, NULL); - ASSERT(r == UV_ENAMETOOLONG); - ASSERT(req.result == UV_ENAMETOOLONG); - uv_fs_req_cleanup(&req); - - r = uv_fs_open(loop, &req, name, O_RDONLY, 0, open_nametoolong_cb); - ASSERT(r == 0); - - ASSERT(open_cb_count == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(open_cb_count == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_file_loop) { - uv_fs_t req; - int r; - - loop = uv_default_loop(); - - unlink("test_symlink"); - r = uv_fs_symlink(NULL, &req, "test_symlink", "test_symlink", 0, NULL); -#ifdef _WIN32 - /* - * Windows XP and Server 2003 don't support symlinks; we'll get UV_ENOTSUP. - * Starting with vista they are supported, but only when elevated, otherwise - * we'll see UV_EPERM. - */ - if (r == UV_ENOTSUP || r == UV_EPERM) - return 0; -#elif defined(__MSYS__) - /* MSYS2's approximation of symlinks with copies does not work for broken - links. */ - if (r == UV_ENOENT) - return 0; -#endif - ASSERT(r == 0); - uv_fs_req_cleanup(&req); - - r = uv_fs_open(NULL, &req, "test_symlink", O_RDONLY, 0, NULL); - ASSERT(r == UV_ELOOP); - ASSERT(req.result == UV_ELOOP); - uv_fs_req_cleanup(&req); - - r = uv_fs_open(loop, &req, "test_symlink", O_RDONLY, 0, open_loop_cb); - ASSERT(r == 0); - - ASSERT(open_cb_count == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(open_cb_count == 1); - - unlink("test_symlink"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -static void check_utime(const char* path, - double atime, - double mtime, - int test_lutime) { - uv_stat_t* s; - uv_fs_t req; - int r; - - if (test_lutime) - r = uv_fs_lstat(loop, &req, path, NULL); - else - r = uv_fs_stat(loop, &req, path, NULL); - - ASSERT_EQ(r, 0); - - ASSERT_EQ(req.result, 0); - s = &req.statbuf; - - if (s->st_atim.tv_nsec == 0 && s->st_mtim.tv_nsec == 0) { - /* - * Test sub-second timestamps only when supported (such as Windows with - * NTFS). Some other platforms support sub-second timestamps, but that - * support is filesystem-dependent. Notably OS X (HFS Plus) does NOT - * support sub-second timestamps. But kernels may round or truncate in - * either direction, so we may accept either possible answer. - */ -#ifdef _WIN32 - ASSERT_DOUBLE_EQ(atime, (long) atime); - ASSERT_DOUBLE_EQ(mtime, (long) atime); -#endif - if (atime > 0 || (long) atime == atime) - ASSERT_EQ(s->st_atim.tv_sec, (long) atime); - if (mtime > 0 || (long) mtime == mtime) - ASSERT_EQ(s->st_mtim.tv_sec, (long) mtime); - ASSERT_GE(s->st_atim.tv_sec, (long) atime - 1); - ASSERT_GE(s->st_mtim.tv_sec, (long) mtime - 1); - ASSERT_LE(s->st_atim.tv_sec, (long) atime); - ASSERT_LE(s->st_mtim.tv_sec, (long) mtime); - } else { - double st_atim; - double st_mtim; -#ifndef __APPLE__ - /* TODO(vtjnash): would it be better to normalize this? */ - ASSERT_DOUBLE_GE(s->st_atim.tv_nsec, 0); - ASSERT_DOUBLE_GE(s->st_mtim.tv_nsec, 0); -#endif - st_atim = s->st_atim.tv_sec + s->st_atim.tv_nsec / 1e9; - st_mtim = s->st_mtim.tv_sec + s->st_mtim.tv_nsec / 1e9; - ASSERT_DOUBLE_EQ(st_atim, atime); - ASSERT_DOUBLE_EQ(st_mtim, mtime); - } - - uv_fs_req_cleanup(&req); -} - - -static void utime_cb(uv_fs_t* req) { - utime_check_t* c; - - ASSERT(req == &utime_req); - ASSERT(req->result == 0); - ASSERT(req->fs_type == UV_FS_UTIME); - - c = req->data; - check_utime(c->path, c->atime, c->mtime, /* test_lutime */ 0); - - uv_fs_req_cleanup(req); - utime_cb_count++; -} - - -static void futime_cb(uv_fs_t* req) { - utime_check_t* c; - - ASSERT(req == &futime_req); - ASSERT(req->result == 0); - ASSERT(req->fs_type == UV_FS_FUTIME); - - c = req->data; - check_utime(c->path, c->atime, c->mtime, /* test_lutime */ 0); - - uv_fs_req_cleanup(req); - futime_cb_count++; -} - - -static void lutime_cb(uv_fs_t* req) { - utime_check_t* c; - - ASSERT(req->result == 0); - ASSERT(req->fs_type == UV_FS_LUTIME); - - c = req->data; - check_utime(c->path, c->atime, c->mtime, /* test_lutime */ 1); - - uv_fs_req_cleanup(req); - lutime_cb_count++; -} - - -TEST_IMPL(fs_file_async) { - int r; - - /* Setup. */ - unlink("test_file"); - unlink("test_file2"); - - loop = uv_default_loop(); - - r = uv_fs_open(loop, &open_req1, "test_file", O_WRONLY | O_CREAT, - S_IRUSR | S_IWUSR, create_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(create_cb_count == 1); - ASSERT(write_cb_count == 1); - ASSERT(fsync_cb_count == 1); - ASSERT(fdatasync_cb_count == 1); - ASSERT(close_cb_count == 1); - - r = uv_fs_rename(loop, &rename_req, "test_file", "test_file2", rename_cb); - ASSERT(r == 0); - - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(create_cb_count == 1); - ASSERT(write_cb_count == 1); - ASSERT(close_cb_count == 1); - ASSERT(rename_cb_count == 1); - - r = uv_fs_open(loop, &open_req1, "test_file2", O_RDWR, 0, open_cb); - ASSERT(r == 0); - - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(open_cb_count == 1); - ASSERT(read_cb_count == 1); - ASSERT(close_cb_count == 2); - ASSERT(rename_cb_count == 1); - ASSERT(create_cb_count == 1); - ASSERT(write_cb_count == 1); - ASSERT(ftruncate_cb_count == 1); - - r = uv_fs_open(loop, &open_req1, "test_file2", O_RDONLY, 0, open_cb); - ASSERT(r == 0); - - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(open_cb_count == 2); - ASSERT(read_cb_count == 2); - ASSERT(close_cb_count == 3); - ASSERT(rename_cb_count == 1); - ASSERT(unlink_cb_count == 1); - ASSERT(create_cb_count == 1); - ASSERT(write_cb_count == 1); - ASSERT(ftruncate_cb_count == 1); - - /* Cleanup. */ - unlink("test_file"); - unlink("test_file2"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void fs_file_sync(int add_flags) { - int r; - - /* Setup. */ - unlink("test_file"); - unlink("test_file2"); - - loop = uv_default_loop(); - - r = uv_fs_open(loop, &open_req1, "test_file", - O_WRONLY | O_CREAT | add_flags, S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r >= 0); - ASSERT(write_req.result >= 0); - uv_fs_req_cleanup(&write_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_open(NULL, &open_req1, "test_file", O_RDWR | add_flags, 0, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r >= 0); - ASSERT(read_req.result >= 0); - ASSERT(strcmp(buf, test_buf) == 0); - uv_fs_req_cleanup(&read_req); - - r = uv_fs_ftruncate(NULL, &ftruncate_req, open_req1.result, 7, NULL); - ASSERT(r == 0); - ASSERT(ftruncate_req.result == 0); - uv_fs_req_cleanup(&ftruncate_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_rename(NULL, &rename_req, "test_file", "test_file2", NULL); - ASSERT(r == 0); - ASSERT(rename_req.result == 0); - uv_fs_req_cleanup(&rename_req); - - r = uv_fs_open(NULL, &open_req1, "test_file2", O_RDONLY | add_flags, 0, - NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - memset(buf, 0, sizeof(buf)); - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r >= 0); - ASSERT(read_req.result >= 0); - ASSERT(strcmp(buf, "test-bu") == 0); - uv_fs_req_cleanup(&read_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_unlink(NULL, &unlink_req, "test_file2", NULL); - ASSERT(r == 0); - ASSERT(unlink_req.result == 0); - uv_fs_req_cleanup(&unlink_req); - - /* Cleanup */ - unlink("test_file"); - unlink("test_file2"); -} -TEST_IMPL(fs_file_sync) { - fs_file_sync(0); - fs_file_sync(UV_FS_O_FILEMAP); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void fs_file_write_null_buffer(int add_flags) { - int r; - - /* Setup. */ - unlink("test_file"); - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, &open_req1, "test_file", - O_WRONLY | O_CREAT | add_flags, S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - iov = uv_buf_init(NULL, 0); - r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r == 0); - ASSERT(write_req.result == 0); - uv_fs_req_cleanup(&write_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - unlink("test_file"); -} -TEST_IMPL(fs_file_write_null_buffer) { - fs_file_write_null_buffer(0); - fs_file_write_null_buffer(UV_FS_O_FILEMAP); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_async_dir) { - int r; - uv_dirent_t dent; - - /* Setup */ - unlink("test_dir/file1"); - unlink("test_dir/file2"); - rmdir("test_dir"); - - loop = uv_default_loop(); - - r = uv_fs_mkdir(loop, &mkdir_req, "test_dir", 0755, mkdir_cb); - ASSERT(r == 0); - - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(mkdir_cb_count == 1); - - /* Create 2 files synchronously. */ - r = uv_fs_open(NULL, &open_req1, "test_dir/file1", O_WRONLY | O_CREAT, - S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - uv_fs_req_cleanup(&open_req1); - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_open(NULL, &open_req1, "test_dir/file2", O_WRONLY | O_CREAT, - S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - uv_fs_req_cleanup(&open_req1); - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_scandir(loop, &scandir_req, "test_dir", 0, scandir_cb); - ASSERT(r == 0); - - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(scandir_cb_count == 1); - - /* sync uv_fs_scandir */ - r = uv_fs_scandir(NULL, &scandir_req, "test_dir", 0, NULL); - ASSERT(r == 2); - ASSERT(scandir_req.result == 2); - ASSERT(scandir_req.ptr); - while (UV_EOF != uv_fs_scandir_next(&scandir_req, &dent)) { - ASSERT(strcmp(dent.name, "file1") == 0 || strcmp(dent.name, "file2") == 0); - assert_is_file_type(dent); - } - uv_fs_req_cleanup(&scandir_req); - ASSERT(!scandir_req.ptr); - - r = uv_fs_stat(loop, &stat_req, "test_dir", stat_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - - r = uv_fs_stat(loop, &stat_req, "test_dir/", stat_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - - r = uv_fs_lstat(loop, &stat_req, "test_dir", stat_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - - r = uv_fs_lstat(loop, &stat_req, "test_dir/", stat_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(stat_cb_count == 4); - - r = uv_fs_unlink(loop, &unlink_req, "test_dir/file1", unlink_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(unlink_cb_count == 1); - - r = uv_fs_unlink(loop, &unlink_req, "test_dir/file2", unlink_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(unlink_cb_count == 2); - - r = uv_fs_rmdir(loop, &rmdir_req, "test_dir", rmdir_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(rmdir_cb_count == 1); - - /* Cleanup */ - unlink("test_dir/file1"); - unlink("test_dir/file2"); - rmdir("test_dir"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static int test_sendfile(void (*setup)(int), uv_fs_cb cb, off_t expected_size) { - int f, r; - struct stat s1, s2; - uv_fs_t req; - char buf1[1]; - - loop = uv_default_loop(); - - /* Setup. */ - unlink("test_file"); - unlink("test_file2"); - - f = open("test_file", O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR); - ASSERT(f != -1); - - if (setup != NULL) - setup(f); - - r = close(f); - ASSERT(r == 0); - - /* Test starts here. */ - r = uv_fs_open(NULL, &open_req1, "test_file", O_RDWR, 0, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - r = uv_fs_open(NULL, &open_req2, "test_file2", O_WRONLY | O_CREAT, - S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(open_req2.result >= 0); - uv_fs_req_cleanup(&open_req2); - - r = uv_fs_sendfile(loop, &sendfile_req, open_req2.result, open_req1.result, - 1, 131072, cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(sendfile_cb_count == 1); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&close_req); - r = uv_fs_close(NULL, &close_req, open_req2.result, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&close_req); - - ASSERT(0 == stat("test_file", &s1)); - ASSERT(0 == stat("test_file2", &s2)); - ASSERT(s2.st_size == expected_size); - - if (expected_size > 0) { - ASSERT_UINT64_EQ(s1.st_size, s2.st_size + 1); - r = uv_fs_open(NULL, &open_req1, "test_file2", O_RDWR, 0, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - memset(buf1, 0, sizeof(buf1)); - iov = uv_buf_init(buf1, sizeof(buf1)); - r = uv_fs_read(NULL, &req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - ASSERT_EQ(buf1[0], 'e'); /* 'e' from begin */ - uv_fs_req_cleanup(&req); - } else { - ASSERT_UINT64_EQ(s1.st_size, s2.st_size); - } - - /* Cleanup. */ - unlink("test_file"); - unlink("test_file2"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void sendfile_setup(int f) { - ASSERT(6 == write(f, "begin\n", 6)); - ASSERT(65542 == lseek(f, 65536, SEEK_CUR)); - ASSERT(4 == write(f, "end\n", 4)); -} - - -TEST_IMPL(fs_async_sendfile) { - return test_sendfile(sendfile_setup, sendfile_cb, 65545); -} - - -TEST_IMPL(fs_async_sendfile_nodata) { - return test_sendfile(NULL, sendfile_nodata_cb, 0); -} - - -TEST_IMPL(fs_mkdtemp) { - int r; - const char* path_template = "test_dir_XXXXXX"; - - loop = uv_default_loop(); - - r = uv_fs_mkdtemp(loop, &mkdtemp_req1, path_template, mkdtemp_cb); - ASSERT(r == 0); - - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(mkdtemp_cb_count == 1); - - /* sync mkdtemp */ - r = uv_fs_mkdtemp(NULL, &mkdtemp_req2, path_template, NULL); - ASSERT(r == 0); - check_mkdtemp_result(&mkdtemp_req2); - - /* mkdtemp return different values on subsequent calls */ - ASSERT(strcmp(mkdtemp_req1.path, mkdtemp_req2.path) != 0); - - /* Cleanup */ - rmdir(mkdtemp_req1.path); - rmdir(mkdtemp_req2.path); - uv_fs_req_cleanup(&mkdtemp_req1); - uv_fs_req_cleanup(&mkdtemp_req2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_mkstemp) { - int r; - int fd; - const char path_template[] = "test_file_XXXXXX"; - uv_fs_t req; - - loop = uv_default_loop(); - - r = uv_fs_mkstemp(loop, &mkstemp_req1, path_template, mkstemp_cb); - ASSERT(r == 0); - - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(mkstemp_cb_count == 1); - - /* sync mkstemp */ - r = uv_fs_mkstemp(NULL, &mkstemp_req2, path_template, NULL); - ASSERT(r >= 0); - check_mkstemp_result(&mkstemp_req2); - - /* mkstemp return different values on subsequent calls */ - ASSERT(strcmp(mkstemp_req1.path, mkstemp_req2.path) != 0); - - /* invalid template returns EINVAL */ - ASSERT_EQ(UV_EINVAL, uv_fs_mkstemp(NULL, &mkstemp_req3, "test_file", NULL)); - - /* Make sure that path is empty string */ - ASSERT_EQ(0, strlen(mkstemp_req3.path)); - - /* We can write to the opened file */ - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(NULL, &req, mkstemp_req1.result, &iov, 1, -1, NULL); - ASSERT(r == sizeof(test_buf)); - ASSERT(req.result == sizeof(test_buf)); - uv_fs_req_cleanup(&req); - - /* Cleanup */ - uv_fs_close(NULL, &req, mkstemp_req1.result, NULL); - uv_fs_req_cleanup(&req); - uv_fs_close(NULL, &req, mkstemp_req2.result, NULL); - uv_fs_req_cleanup(&req); - - fd = uv_fs_open(NULL, &req, mkstemp_req1.path , O_RDONLY, 0, NULL); - ASSERT(fd >= 0); - uv_fs_req_cleanup(&req); - - memset(buf, 0, sizeof(buf)); - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &req, fd, &iov, 1, -1, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - ASSERT(strcmp(buf, test_buf) == 0); - uv_fs_req_cleanup(&req); - - uv_fs_close(NULL, &req, fd, NULL); - uv_fs_req_cleanup(&req); - - unlink(mkstemp_req1.path); - unlink(mkstemp_req2.path); - uv_fs_req_cleanup(&mkstemp_req1); - uv_fs_req_cleanup(&mkstemp_req2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_fstat) { - int r; - uv_fs_t req; - uv_file file; - uv_stat_t* s; -#ifndef _WIN32 - struct stat t; -#endif - - /* Setup. */ - unlink("test_file"); - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, &req, "test_file", O_RDWR | O_CREAT, - S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - file = req.result; - uv_fs_req_cleanup(&req); - -#ifndef _WIN32 - ASSERT(0 == fstat(file, &t)); - ASSERT(0 == uv_fs_fstat(NULL, &req, file, NULL)); - ASSERT(req.result == 0); - s = req.ptr; -# if defined(__APPLE__) - ASSERT(s->st_birthtim.tv_sec == t.st_birthtimespec.tv_sec); - ASSERT(s->st_birthtim.tv_nsec == t.st_birthtimespec.tv_nsec); -# elif defined(__linux__) - /* If statx() is supported, the birth time should be equal to the change time - * because we just created the file. On older kernels, it's set to zero. - */ - ASSERT(s->st_birthtim.tv_sec == 0 || - s->st_birthtim.tv_sec == t.st_ctim.tv_sec); - ASSERT(s->st_birthtim.tv_nsec == 0 || - s->st_birthtim.tv_nsec == t.st_ctim.tv_nsec); -# endif -#endif - - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(NULL, &req, file, &iov, 1, -1, NULL); - ASSERT(r == sizeof(test_buf)); - ASSERT(req.result == sizeof(test_buf)); - uv_fs_req_cleanup(&req); - - memset(&req.statbuf, 0xaa, sizeof(req.statbuf)); - r = uv_fs_fstat(NULL, &req, file, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - s = req.ptr; - ASSERT(s->st_size == sizeof(test_buf)); - -#ifndef _WIN32 - r = fstat(file, &t); - ASSERT(r == 0); - - ASSERT(s->st_dev == (uint64_t) t.st_dev); - ASSERT(s->st_mode == (uint64_t) t.st_mode); - ASSERT(s->st_nlink == (uint64_t) t.st_nlink); - ASSERT(s->st_uid == (uint64_t) t.st_uid); - ASSERT(s->st_gid == (uint64_t) t.st_gid); - ASSERT(s->st_rdev == (uint64_t) t.st_rdev); - ASSERT(s->st_ino == (uint64_t) t.st_ino); - ASSERT(s->st_size == (uint64_t) t.st_size); - ASSERT(s->st_blksize == (uint64_t) t.st_blksize); - ASSERT(s->st_blocks == (uint64_t) t.st_blocks); -#if defined(__APPLE__) - ASSERT(s->st_atim.tv_sec == t.st_atimespec.tv_sec); - ASSERT(s->st_atim.tv_nsec == t.st_atimespec.tv_nsec); - ASSERT(s->st_mtim.tv_sec == t.st_mtimespec.tv_sec); - ASSERT(s->st_mtim.tv_nsec == t.st_mtimespec.tv_nsec); - ASSERT(s->st_ctim.tv_sec == t.st_ctimespec.tv_sec); - ASSERT(s->st_ctim.tv_nsec == t.st_ctimespec.tv_nsec); -#elif defined(_AIX) || \ - defined(__MVS__) - ASSERT(s->st_atim.tv_sec == t.st_atime); - ASSERT(s->st_atim.tv_nsec == 0); - ASSERT(s->st_mtim.tv_sec == t.st_mtime); - ASSERT(s->st_mtim.tv_nsec == 0); - ASSERT(s->st_ctim.tv_sec == t.st_ctime); - ASSERT(s->st_ctim.tv_nsec == 0); -#elif defined(__ANDROID__) - ASSERT(s->st_atim.tv_sec == t.st_atime); - ASSERT(s->st_atim.tv_nsec == t.st_atimensec); - ASSERT(s->st_mtim.tv_sec == t.st_mtime); - ASSERT(s->st_mtim.tv_nsec == t.st_mtimensec); - ASSERT(s->st_ctim.tv_sec == t.st_ctime); - ASSERT(s->st_ctim.tv_nsec == t.st_ctimensec); -#elif defined(__sun) || \ - defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__OpenBSD__) || \ - defined(__NetBSD__) || \ - defined(_GNU_SOURCE) || \ - defined(_BSD_SOURCE) || \ - defined(_SVID_SOURCE) || \ - defined(_XOPEN_SOURCE) || \ - defined(_DEFAULT_SOURCE) - ASSERT(s->st_atim.tv_sec == t.st_atim.tv_sec); - ASSERT(s->st_atim.tv_nsec == t.st_atim.tv_nsec); - ASSERT(s->st_mtim.tv_sec == t.st_mtim.tv_sec); - ASSERT(s->st_mtim.tv_nsec == t.st_mtim.tv_nsec); - ASSERT(s->st_ctim.tv_sec == t.st_ctim.tv_sec); - ASSERT(s->st_ctim.tv_nsec == t.st_ctim.tv_nsec); -# if defined(__FreeBSD__) || \ - defined(__NetBSD__) - ASSERT(s->st_birthtim.tv_sec == t.st_birthtim.tv_sec); - ASSERT(s->st_birthtim.tv_nsec == t.st_birthtim.tv_nsec); -# endif -#else - ASSERT(s->st_atim.tv_sec == t.st_atime); - ASSERT(s->st_atim.tv_nsec == 0); - ASSERT(s->st_mtim.tv_sec == t.st_mtime); - ASSERT(s->st_mtim.tv_nsec == 0); - ASSERT(s->st_ctim.tv_sec == t.st_ctime); - ASSERT(s->st_ctim.tv_nsec == 0); -#endif -#endif - -#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) - ASSERT(s->st_flags == t.st_flags); - ASSERT(s->st_gen == t.st_gen); -#else - ASSERT(s->st_flags == 0); - ASSERT(s->st_gen == 0); -#endif - - uv_fs_req_cleanup(&req); - - /* Now do the uv_fs_fstat call asynchronously */ - r = uv_fs_fstat(loop, &req, file, fstat_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(fstat_cb_count == 1); - - - r = uv_fs_close(NULL, &req, file, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - /* - * Run the loop just to check we don't have make any extraneous uv_ref() - * calls. This should drop out immediately. - */ - uv_run(loop, UV_RUN_DEFAULT); - - /* Cleanup. */ - unlink("test_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_access) { - int r; - uv_fs_t req; - uv_file file; - - /* Setup. */ - unlink("test_file"); - rmdir("test_dir"); - - loop = uv_default_loop(); - - /* File should not exist */ - r = uv_fs_access(NULL, &req, "test_file", F_OK, NULL); - ASSERT(r < 0); - ASSERT(req.result < 0); - uv_fs_req_cleanup(&req); - - /* File should not exist */ - r = uv_fs_access(loop, &req, "test_file", F_OK, access_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(access_cb_count == 1); - access_cb_count = 0; /* reset for the next test */ - - /* Create file */ - r = uv_fs_open(NULL, &req, "test_file", O_RDWR | O_CREAT, - S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - file = req.result; - uv_fs_req_cleanup(&req); - - /* File should exist */ - r = uv_fs_access(NULL, &req, "test_file", F_OK, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - /* File should exist */ - r = uv_fs_access(loop, &req, "test_file", F_OK, access_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(access_cb_count == 1); - access_cb_count = 0; /* reset for the next test */ - - /* Close file */ - r = uv_fs_close(NULL, &req, file, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - /* Directory access */ - r = uv_fs_mkdir(NULL, &req, "test_dir", 0777, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); - - r = uv_fs_access(NULL, &req, "test_dir", W_OK, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - /* - * Run the loop just to check we don't have make any extraneous uv_ref() - * calls. This should drop out immediately. - */ - uv_run(loop, UV_RUN_DEFAULT); - - /* Cleanup. */ - unlink("test_file"); - rmdir("test_dir"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_chmod) { - int r; - uv_fs_t req; - uv_file file; - - /* Setup. */ - unlink("test_file"); - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, &req, "test_file", O_RDWR | O_CREAT, - S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - file = req.result; - uv_fs_req_cleanup(&req); - - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(NULL, &req, file, &iov, 1, -1, NULL); - ASSERT(r == sizeof(test_buf)); - ASSERT(req.result == sizeof(test_buf)); - uv_fs_req_cleanup(&req); - -#ifndef _WIN32 - /* Make the file write-only */ - r = uv_fs_chmod(NULL, &req, "test_file", 0200, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - check_permission("test_file", 0200); -#endif - - /* Make the file read-only */ - r = uv_fs_chmod(NULL, &req, "test_file", 0400, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - check_permission("test_file", 0400); - - /* Make the file read+write with sync uv_fs_fchmod */ - r = uv_fs_fchmod(NULL, &req, file, 0600, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - check_permission("test_file", 0600); - -#ifndef _WIN32 - /* async chmod */ - { - static int mode = 0200; - req.data = &mode; - } - r = uv_fs_chmod(loop, &req, "test_file", 0200, chmod_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(chmod_cb_count == 1); - chmod_cb_count = 0; /* reset for the next test */ -#endif - - /* async chmod */ - { - static int mode = 0400; - req.data = &mode; - } - r = uv_fs_chmod(loop, &req, "test_file", 0400, chmod_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(chmod_cb_count == 1); - - /* async fchmod */ - { - static int mode = 0600; - req.data = &mode; - } - r = uv_fs_fchmod(loop, &req, file, 0600, fchmod_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(fchmod_cb_count == 1); - - uv_fs_close(loop, &req, file, NULL); - - /* - * Run the loop just to check we don't have make any extraneous uv_ref() - * calls. This should drop out immediately. - */ - uv_run(loop, UV_RUN_DEFAULT); - - /* Cleanup. */ - unlink("test_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_unlink_readonly) { - int r; - uv_fs_t req; - uv_file file; - - /* Setup. */ - unlink("test_file"); - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, - &req, - "test_file", - O_RDWR | O_CREAT, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - file = req.result; - uv_fs_req_cleanup(&req); - - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(NULL, &req, file, &iov, 1, -1, NULL); - ASSERT(r == sizeof(test_buf)); - ASSERT(req.result == sizeof(test_buf)); - uv_fs_req_cleanup(&req); - - uv_fs_close(loop, &req, file, NULL); - - /* Make the file read-only */ - r = uv_fs_chmod(NULL, &req, "test_file", 0400, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - check_permission("test_file", 0400); - - /* Try to unlink the file */ - r = uv_fs_unlink(NULL, &req, "test_file", NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - /* - * Run the loop just to check we don't have make any extraneous uv_ref() - * calls. This should drop out immediately. - */ - uv_run(loop, UV_RUN_DEFAULT); - - /* Cleanup. */ - uv_fs_chmod(NULL, &req, "test_file", 0600, NULL); - uv_fs_req_cleanup(&req); - unlink("test_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#ifdef _WIN32 -TEST_IMPL(fs_unlink_archive_readonly) { - int r; - uv_fs_t req; - uv_file file; - - /* Setup. */ - unlink("test_file"); - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, - &req, - "test_file", - O_RDWR | O_CREAT, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - file = req.result; - uv_fs_req_cleanup(&req); - - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(NULL, &req, file, &iov, 1, -1, NULL); - ASSERT(r == sizeof(test_buf)); - ASSERT(req.result == sizeof(test_buf)); - uv_fs_req_cleanup(&req); - - uv_fs_close(loop, &req, file, NULL); - - /* Make the file read-only and clear archive flag */ - r = SetFileAttributes("test_file", FILE_ATTRIBUTE_READONLY); - ASSERT(r != 0); - uv_fs_req_cleanup(&req); - - check_permission("test_file", 0400); - - /* Try to unlink the file */ - r = uv_fs_unlink(NULL, &req, "test_file", NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - /* - * Run the loop just to check we don't have make any extraneous uv_ref() - * calls. This should drop out immediately. - */ - uv_run(loop, UV_RUN_DEFAULT); - - /* Cleanup. */ - uv_fs_chmod(NULL, &req, "test_file", 0600, NULL); - uv_fs_req_cleanup(&req); - unlink("test_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - -TEST_IMPL(fs_chown) { - int r; - uv_fs_t req; - uv_file file; - - /* Setup. */ - unlink("test_file"); - unlink("test_file_link"); - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, &req, "test_file", O_RDWR | O_CREAT, - S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - file = req.result; - uv_fs_req_cleanup(&req); - - /* sync chown */ - r = uv_fs_chown(NULL, &req, "test_file", -1, -1, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - /* sync fchown */ - r = uv_fs_fchown(NULL, &req, file, -1, -1, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - /* async chown */ - r = uv_fs_chown(loop, &req, "test_file", -1, -1, chown_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(chown_cb_count == 1); - -#ifndef __MVS__ - /* chown to root (fail) */ - chown_cb_count = 0; - r = uv_fs_chown(loop, &req, "test_file", 0, 0, chown_root_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(chown_cb_count == 1); -#endif - - /* async fchown */ - r = uv_fs_fchown(loop, &req, file, -1, -1, fchown_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(fchown_cb_count == 1); - -#ifndef __HAIKU__ - /* Haiku doesn't support hardlink */ - /* sync link */ - r = uv_fs_link(NULL, &req, "test_file", "test_file_link", NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - /* sync lchown */ - r = uv_fs_lchown(NULL, &req, "test_file_link", -1, -1, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - /* async lchown */ - r = uv_fs_lchown(loop, &req, "test_file_link", -1, -1, lchown_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(lchown_cb_count == 1); -#endif - - /* Close file */ - r = uv_fs_close(NULL, &req, file, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - /* - * Run the loop just to check we don't have make any extraneous uv_ref() - * calls. This should drop out immediately. - */ - uv_run(loop, UV_RUN_DEFAULT); - - /* Cleanup. */ - unlink("test_file"); - unlink("test_file_link"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_link) { - int r; - uv_fs_t req; - uv_file file; - uv_file link; - - /* Setup. */ - unlink("test_file"); - unlink("test_file_link"); - unlink("test_file_link2"); - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, &req, "test_file", O_RDWR | O_CREAT, - S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - file = req.result; - uv_fs_req_cleanup(&req); - - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(NULL, &req, file, &iov, 1, -1, NULL); - ASSERT(r == sizeof(test_buf)); - ASSERT(req.result == sizeof(test_buf)); - uv_fs_req_cleanup(&req); - - uv_fs_close(loop, &req, file, NULL); - - /* sync link */ - r = uv_fs_link(NULL, &req, "test_file", "test_file_link", NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - r = uv_fs_open(NULL, &req, "test_file_link", O_RDWR, 0, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - link = req.result; - uv_fs_req_cleanup(&req); - - memset(buf, 0, sizeof(buf)); - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &req, link, &iov, 1, 0, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - ASSERT(strcmp(buf, test_buf) == 0); - - close(link); - - /* async link */ - r = uv_fs_link(loop, &req, "test_file", "test_file_link2", link_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(link_cb_count == 1); - - r = uv_fs_open(NULL, &req, "test_file_link2", O_RDWR, 0, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - link = req.result; - uv_fs_req_cleanup(&req); - - memset(buf, 0, sizeof(buf)); - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &req, link, &iov, 1, 0, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - ASSERT(strcmp(buf, test_buf) == 0); - - uv_fs_close(loop, &req, link, NULL); - - /* - * Run the loop just to check we don't have make any extraneous uv_ref() - * calls. This should drop out immediately. - */ - uv_run(loop, UV_RUN_DEFAULT); - - /* Cleanup. */ - unlink("test_file"); - unlink("test_file_link"); - unlink("test_file_link2"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_readlink) { - uv_fs_t req; - - loop = uv_default_loop(); - ASSERT(0 == uv_fs_readlink(loop, &req, "no_such_file", dummy_cb)); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(dummy_cb_count == 1); - ASSERT_NULL(req.ptr); - ASSERT(req.result == UV_ENOENT); - uv_fs_req_cleanup(&req); - - ASSERT(UV_ENOENT == uv_fs_readlink(NULL, &req, "no_such_file", NULL)); - ASSERT_NULL(req.ptr); - ASSERT(req.result == UV_ENOENT); - uv_fs_req_cleanup(&req); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_realpath) { - uv_fs_t req; - - loop = uv_default_loop(); - ASSERT(0 == uv_fs_realpath(loop, &req, "no_such_file", dummy_cb)); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(dummy_cb_count == 1); - ASSERT_NULL(req.ptr); -#ifdef _WIN32 - /* - * Windows XP and Server 2003 don't support GetFinalPathNameByHandleW() - */ - if (req.result == UV_ENOSYS) { - uv_fs_req_cleanup(&req); - RETURN_SKIP("realpath is not supported on Windows XP"); - } -#endif - ASSERT(req.result == UV_ENOENT); - uv_fs_req_cleanup(&req); - - ASSERT(UV_ENOENT == uv_fs_realpath(NULL, &req, "no_such_file", NULL)); - ASSERT_NULL(req.ptr); - ASSERT(req.result == UV_ENOENT); - uv_fs_req_cleanup(&req); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_symlink) { - int r; - uv_fs_t req; - uv_file file; - uv_file link; - char test_file_abs_buf[PATHMAX]; - size_t test_file_abs_size; - - /* Setup. */ - unlink("test_file"); - unlink("test_file_symlink"); - unlink("test_file_symlink2"); - unlink("test_file_symlink_symlink"); - unlink("test_file_symlink2_symlink"); - test_file_abs_size = sizeof(test_file_abs_buf); -#ifdef _WIN32 - uv_cwd(test_file_abs_buf, &test_file_abs_size); - strcat(test_file_abs_buf, "\\test_file"); -#else - uv_cwd(test_file_abs_buf, &test_file_abs_size); - strcat(test_file_abs_buf, "/test_file"); -#endif - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, &req, "test_file", O_RDWR | O_CREAT, - S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - file = req.result; - uv_fs_req_cleanup(&req); - - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(NULL, &req, file, &iov, 1, -1, NULL); - ASSERT(r == sizeof(test_buf)); - ASSERT(req.result == sizeof(test_buf)); - uv_fs_req_cleanup(&req); - - uv_fs_close(loop, &req, file, NULL); - - /* sync symlink */ - r = uv_fs_symlink(NULL, &req, "test_file", "test_file_symlink", 0, NULL); -#ifdef _WIN32 - if (r < 0) { - if (r == UV_ENOTSUP) { - /* - * Windows doesn't support symlinks on older versions. - * We just pass the test and bail out early if we get ENOTSUP. - */ - return 0; - } else if (r == UV_EPERM) { - /* - * Creating a symlink is only allowed when running elevated. - * We pass the test and bail out early if we get UV_EPERM. - */ - return 0; - } - } -#endif - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - r = uv_fs_open(NULL, &req, "test_file_symlink", O_RDWR, 0, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - link = req.result; - uv_fs_req_cleanup(&req); - - memset(buf, 0, sizeof(buf)); - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &req, link, &iov, 1, 0, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - ASSERT(strcmp(buf, test_buf) == 0); - - uv_fs_close(loop, &req, link, NULL); - - r = uv_fs_symlink(NULL, - &req, - "test_file_symlink", - "test_file_symlink_symlink", - 0, - NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); - -#if defined(__MSYS__) - RETURN_SKIP("symlink reading is not supported on MSYS2"); -#endif - - r = uv_fs_readlink(NULL, &req, "test_file_symlink_symlink", NULL); - ASSERT(r == 0); - ASSERT(strcmp(req.ptr, "test_file_symlink") == 0); - uv_fs_req_cleanup(&req); - - r = uv_fs_realpath(NULL, &req, "test_file_symlink_symlink", NULL); -#ifdef _WIN32 - /* - * Windows XP and Server 2003 don't support GetFinalPathNameByHandleW() - */ - if (r == UV_ENOSYS) { - uv_fs_req_cleanup(&req); - RETURN_SKIP("realpath is not supported on Windows XP"); - } -#endif - ASSERT(r == 0); -#ifdef _WIN32 - ASSERT(stricmp(req.ptr, test_file_abs_buf) == 0); -#else - ASSERT(strcmp(req.ptr, test_file_abs_buf) == 0); -#endif - uv_fs_req_cleanup(&req); - - /* async link */ - r = uv_fs_symlink(loop, - &req, - "test_file", - "test_file_symlink2", - 0, - symlink_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(symlink_cb_count == 1); - - r = uv_fs_open(NULL, &req, "test_file_symlink2", O_RDWR, 0, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - link = req.result; - uv_fs_req_cleanup(&req); - - memset(buf, 0, sizeof(buf)); - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &req, link, &iov, 1, 0, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - ASSERT(strcmp(buf, test_buf) == 0); - - uv_fs_close(loop, &req, link, NULL); - - r = uv_fs_symlink(NULL, - &req, - "test_file_symlink2", - "test_file_symlink2_symlink", - 0, - NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); - - r = uv_fs_readlink(loop, &req, "test_file_symlink2_symlink", readlink_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(readlink_cb_count == 1); - - r = uv_fs_realpath(loop, &req, "test_file", realpath_cb); -#ifdef _WIN32 - /* - * Windows XP and Server 2003 don't support GetFinalPathNameByHandleW() - */ - if (r == UV_ENOSYS) { - uv_fs_req_cleanup(&req); - RETURN_SKIP("realpath is not supported on Windows XP"); - } -#endif - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(realpath_cb_count == 1); - - /* - * Run the loop just to check we don't have make any extraneous uv_ref() - * calls. This should drop out immediately. - */ - uv_run(loop, UV_RUN_DEFAULT); - - /* Cleanup. */ - unlink("test_file"); - unlink("test_file_symlink"); - unlink("test_file_symlink_symlink"); - unlink("test_file_symlink2"); - unlink("test_file_symlink2_symlink"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -int test_symlink_dir_impl(int type) { - uv_fs_t req; - int r; - char* test_dir; - uv_dirent_t dent; - static char test_dir_abs_buf[PATHMAX]; - size_t test_dir_abs_size; - - /* set-up */ - unlink("test_dir/file1"); - unlink("test_dir/file2"); - rmdir("test_dir"); - rmdir("test_dir_symlink"); - test_dir_abs_size = sizeof(test_dir_abs_buf); - - loop = uv_default_loop(); - - uv_fs_mkdir(NULL, &req, "test_dir", 0777, NULL); - uv_fs_req_cleanup(&req); - -#ifdef _WIN32 - strcpy(test_dir_abs_buf, "\\\\?\\"); - uv_cwd(test_dir_abs_buf + 4, &test_dir_abs_size); - test_dir_abs_size += 4; - strcat(test_dir_abs_buf, "\\test_dir\\"); - test_dir_abs_size += strlen("\\test_dir\\"); - test_dir = test_dir_abs_buf; -#else - uv_cwd(test_dir_abs_buf, &test_dir_abs_size); - strcat(test_dir_abs_buf, "/test_dir"); - test_dir_abs_size += strlen("/test_dir"); - test_dir = "test_dir"; -#endif - - r = uv_fs_symlink(NULL, &req, test_dir, "test_dir_symlink", type, NULL); - if (type == UV_FS_SYMLINK_DIR && (r == UV_ENOTSUP || r == UV_EPERM)) { - uv_fs_req_cleanup(&req); - RETURN_SKIP("this version of Windows doesn't support unprivileged " - "creation of directory symlinks"); - } - fprintf(stderr, "r == %i\n", r); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - r = uv_fs_stat(NULL, &req, "test_dir_symlink", NULL); - ASSERT(r == 0); - ASSERT(((uv_stat_t*)req.ptr)->st_mode & S_IFDIR); - uv_fs_req_cleanup(&req); - - r = uv_fs_lstat(NULL, &req, "test_dir_symlink", NULL); - ASSERT(r == 0); -#if defined(__MSYS__) - RETURN_SKIP("symlink reading is not supported on MSYS2"); -#endif - ASSERT(((uv_stat_t*)req.ptr)->st_mode & S_IFLNK); -#ifdef _WIN32 - ASSERT(((uv_stat_t*)req.ptr)->st_size == strlen(test_dir + 4)); -#else -# ifdef __PASE__ - /* On IBMi PASE, st_size returns the length of the symlink itself. */ - ASSERT(((uv_stat_t*)req.ptr)->st_size == strlen("test_dir_symlink")); -# else - ASSERT(((uv_stat_t*)req.ptr)->st_size == strlen(test_dir)); -# endif -#endif - uv_fs_req_cleanup(&req); - - r = uv_fs_readlink(NULL, &req, "test_dir_symlink", NULL); - ASSERT(r == 0); -#ifdef _WIN32 - ASSERT(strcmp(req.ptr, test_dir + 4) == 0); -#else - ASSERT(strcmp(req.ptr, test_dir) == 0); -#endif - uv_fs_req_cleanup(&req); - - r = uv_fs_realpath(NULL, &req, "test_dir_symlink", NULL); -#ifdef _WIN32 - /* - * Windows XP and Server 2003 don't support GetFinalPathNameByHandleW() - */ - if (r == UV_ENOSYS) { - uv_fs_req_cleanup(&req); - RETURN_SKIP("realpath is not supported on Windows XP"); - } -#endif - ASSERT(r == 0); -#ifdef _WIN32 - ASSERT(strlen(req.ptr) == test_dir_abs_size - 5); - ASSERT(strnicmp(req.ptr, test_dir + 4, test_dir_abs_size - 5) == 0); -#else - ASSERT(strcmp(req.ptr, test_dir_abs_buf) == 0); -#endif - uv_fs_req_cleanup(&req); - - r = uv_fs_open(NULL, &open_req1, "test_dir/file1", O_WRONLY | O_CREAT, - S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - uv_fs_req_cleanup(&open_req1); - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_open(NULL, &open_req1, "test_dir/file2", O_WRONLY | O_CREAT, - S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - uv_fs_req_cleanup(&open_req1); - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_scandir(NULL, &scandir_req, "test_dir_symlink", 0, NULL); - ASSERT(r == 2); - ASSERT(scandir_req.result == 2); - ASSERT(scandir_req.ptr); - while (UV_EOF != uv_fs_scandir_next(&scandir_req, &dent)) { - ASSERT(strcmp(dent.name, "file1") == 0 || strcmp(dent.name, "file2") == 0); - assert_is_file_type(dent); - } - uv_fs_req_cleanup(&scandir_req); - ASSERT(!scandir_req.ptr); - - /* unlink will remove the directory symlink */ - r = uv_fs_unlink(NULL, &req, "test_dir_symlink", NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); - - r = uv_fs_scandir(NULL, &scandir_req, "test_dir_symlink", 0, NULL); - ASSERT(r == UV_ENOENT); - uv_fs_req_cleanup(&scandir_req); - - r = uv_fs_scandir(NULL, &scandir_req, "test_dir", 0, NULL); - ASSERT(r == 2); - ASSERT(scandir_req.result == 2); - ASSERT(scandir_req.ptr); - while (UV_EOF != uv_fs_scandir_next(&scandir_req, &dent)) { - ASSERT(strcmp(dent.name, "file1") == 0 || strcmp(dent.name, "file2") == 0); - assert_is_file_type(dent); - } - uv_fs_req_cleanup(&scandir_req); - ASSERT(!scandir_req.ptr); - - /* clean-up */ - unlink("test_dir/file1"); - unlink("test_dir/file2"); - rmdir("test_dir"); - rmdir("test_dir_symlink"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_symlink_dir) { - return test_symlink_dir_impl(UV_FS_SYMLINK_DIR); -} - -TEST_IMPL(fs_symlink_junction) { - return test_symlink_dir_impl(UV_FS_SYMLINK_JUNCTION); -} - -#ifdef _WIN32 -TEST_IMPL(fs_non_symlink_reparse_point) { - uv_fs_t req; - int r; - HANDLE file_handle; - REPARSE_GUID_DATA_BUFFER reparse_buffer; - DWORD bytes_returned; - uv_dirent_t dent; - - /* set-up */ - unlink("test_dir/test_file"); - rmdir("test_dir"); - - loop = uv_default_loop(); - - uv_fs_mkdir(NULL, &req, "test_dir", 0777, NULL); - uv_fs_req_cleanup(&req); - - file_handle = CreateFile("test_dir/test_file", - GENERIC_WRITE | FILE_WRITE_ATTRIBUTES, - 0, - NULL, - CREATE_ALWAYS, - FILE_FLAG_OPEN_REPARSE_POINT | - FILE_FLAG_BACKUP_SEMANTICS, - NULL); - ASSERT(file_handle != INVALID_HANDLE_VALUE); - - memset(&reparse_buffer, 0, REPARSE_GUID_DATA_BUFFER_HEADER_SIZE); - reparse_buffer.ReparseTag = REPARSE_TAG; - reparse_buffer.ReparseDataLength = 0; - reparse_buffer.ReparseGuid = REPARSE_GUID; - - r = DeviceIoControl(file_handle, - FSCTL_SET_REPARSE_POINT, - &reparse_buffer, - REPARSE_GUID_DATA_BUFFER_HEADER_SIZE, - NULL, - 0, - &bytes_returned, - NULL); - ASSERT(r != 0); - - CloseHandle(file_handle); - - r = uv_fs_readlink(NULL, &req, "test_dir/test_file", NULL); - ASSERT(r == UV_EINVAL && GetLastError() == ERROR_SYMLINK_NOT_SUPPORTED); - uv_fs_req_cleanup(&req); - -/* - Placeholder tests for exercising the behavior fixed in issue #995. - To run, update the path with the IP address of a Mac with the hard drive - shared via SMB as "Macintosh HD". - - r = uv_fs_stat(NULL, &req, "\\\\\\Macintosh HD\\.DS_Store", NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); - - r = uv_fs_lstat(NULL, &req, "\\\\\\Macintosh HD\\.DS_Store", NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); -*/ - -/* - uv_fs_stat and uv_fs_lstat can only work on non-symlink reparse - points when a minifilter driver is registered which intercepts - associated filesystem requests. Installing a driver is beyond - the scope of this test. - - r = uv_fs_stat(NULL, &req, "test_dir/test_file", NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); - - r = uv_fs_lstat(NULL, &req, "test_dir/test_file", NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); -*/ - - r = uv_fs_scandir(NULL, &scandir_req, "test_dir", 0, NULL); - ASSERT(r == 1); - ASSERT(scandir_req.result == 1); - ASSERT(scandir_req.ptr); - while (UV_EOF != uv_fs_scandir_next(&scandir_req, &dent)) { - ASSERT(strcmp(dent.name, "test_file") == 0); - /* uv_fs_scandir incorrectly identifies non-symlink reparse points - as links because it doesn't open the file and verify the reparse - point tag. The PowerShell Get-ChildItem command shares this - behavior, so it's reasonable to leave it as is. */ - ASSERT(dent.type == UV_DIRENT_LINK); - } - uv_fs_req_cleanup(&scandir_req); - ASSERT(!scandir_req.ptr); - - /* clean-up */ - unlink("test_dir/test_file"); - rmdir("test_dir"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_lstat_windows_store_apps) { - uv_loop_t* loop; - char localappdata[MAX_PATH]; - char windowsapps_path[MAX_PATH]; - char file_path[MAX_PATH]; - size_t len; - int r; - uv_fs_t req; - uv_fs_t stat_req; - uv_dirent_t dirent; - - loop = uv_default_loop(); - ASSERT_NOT_NULL(loop); - len = sizeof(localappdata); - r = uv_os_getenv("LOCALAPPDATA", localappdata, &len); - if (r == UV_ENOENT) { - MAKE_VALGRIND_HAPPY(); - return TEST_SKIP; - } - ASSERT_EQ(r, 0); - r = snprintf(windowsapps_path, - sizeof(localappdata), - "%s\\Microsoft\\WindowsApps", - localappdata); - ASSERT_GT(r, 0); - if (uv_fs_opendir(loop, &req, windowsapps_path, NULL) != 0) { - /* If we cannot read the directory, skip the test. */ - MAKE_VALGRIND_HAPPY(); - return TEST_SKIP; - } - if (uv_fs_scandir(loop, &req, windowsapps_path, 0, NULL) <= 0) { - MAKE_VALGRIND_HAPPY(); - return TEST_SKIP; - } - while (uv_fs_scandir_next(&req, &dirent) != UV_EOF) { - if (dirent.type != UV_DIRENT_LINK) { - continue; - } - if (snprintf(file_path, - sizeof(file_path), - "%s\\%s", - windowsapps_path, - dirent.name) < 0) { - continue; - } - ASSERT_EQ(uv_fs_lstat(loop, &stat_req, file_path, NULL), 0); - } - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - - -TEST_IMPL(fs_utime) { - utime_check_t checkme; - const char* path = "test_file"; - double atime; - double mtime; - uv_fs_t req; - int r; - - /* Setup. */ - loop = uv_default_loop(); - unlink(path); - r = uv_fs_open(NULL, &req, path, O_RDWR | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - uv_fs_req_cleanup(&req); - uv_fs_close(loop, &req, r, NULL); - - atime = mtime = 400497753.25; /* 1982-09-10 11:22:33.25 */ - - r = uv_fs_utime(NULL, &req, path, atime, mtime, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - check_utime(path, atime, mtime, /* test_lutime */ 0); - - atime = mtime = 1291404900.25; /* 2010-12-03 20:35:00.25 - mees <3 */ - checkme.path = path; - checkme.atime = atime; - checkme.mtime = mtime; - - /* async utime */ - utime_req.data = &checkme; - r = uv_fs_utime(loop, &utime_req, path, atime, mtime, utime_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(utime_cb_count == 1); - - /* Cleanup. */ - unlink(path); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_utime_round) { - const char path[] = "test_file"; - double atime; - double mtime; - uv_fs_t req; - int r; - - loop = uv_default_loop(); - unlink(path); - r = uv_fs_open(NULL, &req, path, O_RDWR | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT_GE(r, 0); - ASSERT_GE(req.result, 0); - uv_fs_req_cleanup(&req); - ASSERT_EQ(0, uv_fs_close(loop, &req, r, NULL)); - - atime = mtime = -14245440.25; /* 1969-07-20T02:56:00.25Z */ - - r = uv_fs_utime(NULL, &req, path, atime, mtime, NULL); -#if !defined(__linux__) && \ - !defined(_WIN32) && \ - !defined(__APPLE__) && \ - !defined(__FreeBSD__) && \ - !defined(__sun) - if (r != 0) { - ASSERT_EQ(r, UV_EINVAL); - RETURN_SKIP("utime on some OS (z/OS, IBM i PASE, AIX) or filesystems may reject pre-epoch timestamps"); - } -#endif - ASSERT_EQ(0, r); - ASSERT_EQ(0, req.result); - uv_fs_req_cleanup(&req); - check_utime(path, atime, mtime, /* test_lutime */ 0); - unlink(path); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -#ifdef _WIN32 -TEST_IMPL(fs_stat_root) { - int r; - - r = uv_fs_stat(NULL, &stat_req, "\\", NULL); - ASSERT(r == 0); - - r = uv_fs_stat(NULL, &stat_req, "..\\..\\..\\..\\..\\..\\..", NULL); - ASSERT(r == 0); - - r = uv_fs_stat(NULL, &stat_req, "..", NULL); - ASSERT(r == 0); - - r = uv_fs_stat(NULL, &stat_req, "..\\", NULL); - ASSERT(r == 0); - - /* stats the current directory on c: */ - r = uv_fs_stat(NULL, &stat_req, "c:", NULL); - ASSERT(r == 0); - - r = uv_fs_stat(NULL, &stat_req, "c:\\", NULL); - ASSERT(r == 0); - - r = uv_fs_stat(NULL, &stat_req, "\\\\?\\C:\\", NULL); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - - -TEST_IMPL(fs_futime) { - utime_check_t checkme; - const char* path = "test_file"; - double atime; - double mtime; - uv_file file; - uv_fs_t req; - int r; -#if defined(_AIX) && !defined(_AIX71) - RETURN_SKIP("futime is not implemented for AIX versions below 7.1"); -#endif - - /* Setup. */ - loop = uv_default_loop(); - unlink(path); - r = uv_fs_open(NULL, &req, path, O_RDWR | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - uv_fs_req_cleanup(&req); - uv_fs_close(loop, &req, r, NULL); - - atime = mtime = 400497753.25; /* 1982-09-10 11:22:33.25 */ - - r = uv_fs_open(NULL, &req, path, O_RDWR, 0, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - file = req.result; /* FIXME probably not how it's supposed to be used */ - uv_fs_req_cleanup(&req); - - r = uv_fs_futime(NULL, &req, file, atime, mtime, NULL); -#if defined(__CYGWIN__) || defined(__MSYS__) - ASSERT(r == UV_ENOSYS); - RETURN_SKIP("futime not supported on Cygwin"); -#else - ASSERT(r == 0); - ASSERT(req.result == 0); -#endif - uv_fs_req_cleanup(&req); - - check_utime(path, atime, mtime, /* test_lutime */ 0); - - atime = mtime = 1291404900; /* 2010-12-03 20:35:00 - mees <3 */ - - checkme.atime = atime; - checkme.mtime = mtime; - checkme.path = path; - - /* async futime */ - futime_req.data = &checkme; - r = uv_fs_futime(loop, &futime_req, file, atime, mtime, futime_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(futime_cb_count == 1); - - /* Cleanup. */ - unlink(path); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_lutime) { - utime_check_t checkme; - const char* path = "test_file"; - const char* symlink_path = "test_file_symlink"; - double atime; - double mtime; - uv_fs_t req; - int r, s; - - - /* Setup */ - loop = uv_default_loop(); - unlink(path); - r = uv_fs_open(NULL, &req, path, O_RDWR | O_CREAT, S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - uv_fs_req_cleanup(&req); - uv_fs_close(loop, &req, r, NULL); - - unlink(symlink_path); - s = uv_fs_symlink(NULL, &req, path, symlink_path, 0, NULL); -#ifdef _WIN32 - if (s == UV_EPERM) { - /* - * Creating a symlink before Windows 10 Creators Update was only allowed - * when running elevated console (with admin rights) - */ - RETURN_SKIP( - "Symlink creation requires elevated console (with admin rights)"); - } -#endif - ASSERT(s == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - - /* Test the synchronous version. */ - atime = mtime = 400497753.25; /* 1982-09-10 11:22:33.25 */ - - checkme.atime = atime; - checkme.mtime = mtime; - checkme.path = symlink_path; - req.data = &checkme; - - r = uv_fs_lutime(NULL, &req, symlink_path, atime, mtime, NULL); -#if (defined(_AIX) && !defined(_AIX71)) || \ - defined(__MVS__) - ASSERT(r == UV_ENOSYS); - RETURN_SKIP("lutime is not implemented for z/OS and AIX versions below 7.1"); -#endif - ASSERT(r == 0); - lutime_cb(&req); - ASSERT(lutime_cb_count == 1); - - /* Test the asynchronous version. */ - atime = mtime = 1291404900; /* 2010-12-03 20:35:00 */ - - checkme.atime = atime; - checkme.mtime = mtime; - checkme.path = symlink_path; - - r = uv_fs_lutime(loop, &req, symlink_path, atime, mtime, lutime_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(lutime_cb_count == 2); - - /* Cleanup. */ - unlink(path); - unlink(symlink_path); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_stat_missing_path) { - uv_fs_t req; - int r; - - loop = uv_default_loop(); - - r = uv_fs_stat(NULL, &req, "non_existent_file", NULL); - ASSERT(r == UV_ENOENT); - ASSERT(req.result == UV_ENOENT); - uv_fs_req_cleanup(&req); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_scandir_empty_dir) { - const char* path; - uv_fs_t req; - uv_dirent_t dent; - int r; - - path = "./empty_dir/"; - loop = uv_default_loop(); - - uv_fs_mkdir(NULL, &req, path, 0777, NULL); - uv_fs_req_cleanup(&req); - - /* Fill the req to ensure that required fields are cleaned up */ - memset(&req, 0xdb, sizeof(req)); - - r = uv_fs_scandir(NULL, &req, path, 0, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - ASSERT_NULL(req.ptr); - ASSERT(UV_EOF == uv_fs_scandir_next(&req, &dent)); - uv_fs_req_cleanup(&req); - - r = uv_fs_scandir(loop, &scandir_req, path, 0, empty_scandir_cb); - ASSERT(r == 0); - - ASSERT(scandir_cb_count == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(scandir_cb_count == 1); - - uv_fs_rmdir(NULL, &req, path, NULL); - uv_fs_req_cleanup(&req); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_scandir_non_existent_dir) { - const char* path; - uv_fs_t req; - uv_dirent_t dent; - int r; - - path = "./non_existent_dir/"; - loop = uv_default_loop(); - - uv_fs_rmdir(NULL, &req, path, NULL); - uv_fs_req_cleanup(&req); - - /* Fill the req to ensure that required fields are cleaned up */ - memset(&req, 0xdb, sizeof(req)); - - r = uv_fs_scandir(NULL, &req, path, 0, NULL); - ASSERT(r == UV_ENOENT); - ASSERT(req.result == UV_ENOENT); - ASSERT_NULL(req.ptr); - ASSERT(UV_ENOENT == uv_fs_scandir_next(&req, &dent)); - uv_fs_req_cleanup(&req); - - r = uv_fs_scandir(loop, &scandir_req, path, 0, non_existent_scandir_cb); - ASSERT(r == 0); - - ASSERT(scandir_cb_count == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(scandir_cb_count == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_scandir_file) { -#if defined(__ASAN__) - RETURN_SKIP("Test does not currently work in ASAN"); -#endif - const char* path; - int r; - - path = "test/fixtures/empty_file"; - loop = uv_default_loop(); - - r = uv_fs_scandir(NULL, &scandir_req, path, 0, NULL); - ASSERT(r == UV_ENOTDIR); - uv_fs_req_cleanup(&scandir_req); - - r = uv_fs_scandir(loop, &scandir_req, path, 0, file_scandir_cb); - ASSERT(r == 0); - - ASSERT(scandir_cb_count == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(scandir_cb_count == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_open_dir) { - const char* path; - uv_fs_t req; - int r, file; - - path = "."; - loop = uv_default_loop(); - - r = uv_fs_open(NULL, &req, path, O_RDONLY, 0, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - ASSERT_NULL(req.ptr); - file = r; - uv_fs_req_cleanup(&req); - - r = uv_fs_close(NULL, &req, file, NULL); - ASSERT(r == 0); - - r = uv_fs_open(loop, &req, path, O_RDONLY, 0, open_cb_simple); - ASSERT(r == 0); - - ASSERT(open_cb_count == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(open_cb_count == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void fs_file_open_append(int add_flags) { - int r; - - /* Setup. */ - unlink("test_file"); - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, &open_req1, "test_file", - O_WRONLY | O_CREAT | add_flags, S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r >= 0); - ASSERT(write_req.result >= 0); - uv_fs_req_cleanup(&write_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_open(NULL, &open_req1, "test_file", - O_RDWR | O_APPEND | add_flags, 0, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r >= 0); - ASSERT(write_req.result >= 0); - uv_fs_req_cleanup(&write_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_open(NULL, &open_req1, "test_file", O_RDONLY | add_flags, - S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL); - printf("read = %d\n", r); - ASSERT(r == 26); - ASSERT(read_req.result == 26); - ASSERT(memcmp(buf, - "test-buffer\n\0test-buffer\n\0", - sizeof("test-buffer\n\0test-buffer\n\0") - 1) == 0); - uv_fs_req_cleanup(&read_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - /* Cleanup */ - unlink("test_file"); -} -TEST_IMPL(fs_file_open_append) { - fs_file_open_append(0); - fs_file_open_append(UV_FS_O_FILEMAP); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_rename_to_existing_file) { - int r; - - /* Setup. */ - unlink("test_file"); - unlink("test_file2"); - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, &open_req1, "test_file", O_WRONLY | O_CREAT, - S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r >= 0); - ASSERT(write_req.result >= 0); - uv_fs_req_cleanup(&write_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_open(NULL, &open_req1, "test_file2", O_WRONLY | O_CREAT, - S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_rename(NULL, &rename_req, "test_file", "test_file2", NULL); - ASSERT(r == 0); - ASSERT(rename_req.result == 0); - uv_fs_req_cleanup(&rename_req); - - r = uv_fs_open(NULL, &open_req1, "test_file2", O_RDONLY, 0, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - memset(buf, 0, sizeof(buf)); - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r >= 0); - ASSERT(read_req.result >= 0); - ASSERT(strcmp(buf, test_buf) == 0); - uv_fs_req_cleanup(&read_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - /* Cleanup */ - unlink("test_file"); - unlink("test_file2"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void fs_read_bufs(int add_flags) { - char scratch[768]; - uv_buf_t bufs[4]; - - ASSERT(0 <= uv_fs_open(NULL, &open_req1, - "test/fixtures/lorem_ipsum.txt", - O_RDONLY | add_flags, 0, NULL)); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - ASSERT(UV_EINVAL == uv_fs_read(NULL, &read_req, open_req1.result, - NULL, 0, 0, NULL)); - ASSERT(UV_EINVAL == uv_fs_read(NULL, &read_req, open_req1.result, - NULL, 1, 0, NULL)); - ASSERT(UV_EINVAL == uv_fs_read(NULL, &read_req, open_req1.result, - bufs, 0, 0, NULL)); - - bufs[0] = uv_buf_init(scratch + 0, 256); - bufs[1] = uv_buf_init(scratch + 256, 256); - bufs[2] = uv_buf_init(scratch + 512, 128); - bufs[3] = uv_buf_init(scratch + 640, 128); - - ASSERT(446 == uv_fs_read(NULL, - &read_req, - open_req1.result, - bufs + 0, - 2, /* 2x 256 bytes. */ - 0, /* Positional read. */ - NULL)); - ASSERT(read_req.result == 446); - uv_fs_req_cleanup(&read_req); - - ASSERT(190 == uv_fs_read(NULL, - &read_req, - open_req1.result, - bufs + 2, - 2, /* 2x 128 bytes. */ - 256, /* Positional read. */ - NULL)); - ASSERT(read_req.result == /* 446 - 256 */ 190); - uv_fs_req_cleanup(&read_req); - - ASSERT(0 == memcmp(bufs[1].base + 0, bufs[2].base, 128)); - ASSERT(0 == memcmp(bufs[1].base + 128, bufs[3].base, 190 - 128)); - - ASSERT(0 == uv_fs_close(NULL, &close_req, open_req1.result, NULL)); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); -} -TEST_IMPL(fs_read_bufs) { -#if defined(__ASAN__) - RETURN_SKIP("Test does not currently work in ASAN"); -#endif - fs_read_bufs(0); - fs_read_bufs(UV_FS_O_FILEMAP); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void fs_read_file_eof(int add_flags) { -#if defined(__CYGWIN__) || defined(__MSYS__) - RETURN_SKIP("Cygwin pread at EOF may (incorrectly) return data!"); -#endif - int r; - - /* Setup. */ - unlink("test_file"); - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, &open_req1, "test_file", - O_WRONLY | O_CREAT | add_flags, S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r >= 0); - ASSERT(write_req.result >= 0); - uv_fs_req_cleanup(&write_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_open(NULL, &open_req1, "test_file", O_RDONLY | add_flags, 0, - NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - memset(buf, 0, sizeof(buf)); - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r >= 0); - ASSERT(read_req.result >= 0); - ASSERT(strcmp(buf, test_buf) == 0); - uv_fs_req_cleanup(&read_req); - - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, - read_req.result, NULL); - ASSERT(r == 0); - ASSERT(read_req.result == 0); - uv_fs_req_cleanup(&read_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - /* Cleanup */ - unlink("test_file"); -} -TEST_IMPL(fs_read_file_eof) { - fs_read_file_eof(0); - fs_read_file_eof(UV_FS_O_FILEMAP); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void fs_write_multiple_bufs(int add_flags) { - uv_buf_t iovs[2]; - int r; - - /* Setup. */ - unlink("test_file"); - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, &open_req1, "test_file", - O_WRONLY | O_CREAT | add_flags, S_IWUSR | S_IRUSR, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - iovs[0] = uv_buf_init(test_buf, sizeof(test_buf)); - iovs[1] = uv_buf_init(test_buf2, sizeof(test_buf2)); - r = uv_fs_write(NULL, &write_req, open_req1.result, iovs, 2, 0, NULL); - ASSERT(r >= 0); - ASSERT(write_req.result >= 0); - uv_fs_req_cleanup(&write_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_open(NULL, &open_req1, "test_file", O_RDONLY | add_flags, 0, - NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - memset(buf, 0, sizeof(buf)); - memset(buf2, 0, sizeof(buf2)); - /* Read the strings back to separate buffers. */ - iovs[0] = uv_buf_init(buf, sizeof(test_buf)); - iovs[1] = uv_buf_init(buf2, sizeof(test_buf2)); - ASSERT(lseek(open_req1.result, 0, SEEK_CUR) == 0); - r = uv_fs_read(NULL, &read_req, open_req1.result, iovs, 2, -1, NULL); - ASSERT(r >= 0); - ASSERT(read_req.result == sizeof(test_buf) + sizeof(test_buf2)); - ASSERT(strcmp(buf, test_buf) == 0); - ASSERT(strcmp(buf2, test_buf2) == 0); - uv_fs_req_cleanup(&read_req); - - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r == 0); - ASSERT(read_req.result == 0); - uv_fs_req_cleanup(&read_req); - - /* Read the strings back to separate buffers. */ - iovs[0] = uv_buf_init(buf, sizeof(test_buf)); - iovs[1] = uv_buf_init(buf2, sizeof(test_buf2)); - r = uv_fs_read(NULL, &read_req, open_req1.result, iovs, 2, 0, NULL); - ASSERT(r >= 0); - if (read_req.result == sizeof(test_buf)) { - /* Infer that preadv is not available. */ - uv_fs_req_cleanup(&read_req); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iovs[1], 1, read_req.result, NULL); - ASSERT(r >= 0); - ASSERT(read_req.result == sizeof(test_buf2)); - } else { - ASSERT(read_req.result == sizeof(test_buf) + sizeof(test_buf2)); - } - ASSERT(strcmp(buf, test_buf) == 0); - ASSERT(strcmp(buf2, test_buf2) == 0); - uv_fs_req_cleanup(&read_req); - - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, - sizeof(test_buf) + sizeof(test_buf2), NULL); - ASSERT(r == 0); - ASSERT(read_req.result == 0); - uv_fs_req_cleanup(&read_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - /* Cleanup */ - unlink("test_file"); -} -TEST_IMPL(fs_write_multiple_bufs) { - fs_write_multiple_bufs(0); - fs_write_multiple_bufs(UV_FS_O_FILEMAP); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void fs_write_alotof_bufs(int add_flags) { - size_t iovcount; - size_t iovmax; - uv_buf_t* iovs; - char* buffer; - size_t index; - int r; - - iovcount = 54321; - - /* Setup. */ - unlink("test_file"); - - loop = uv_default_loop(); - - iovs = malloc(sizeof(*iovs) * iovcount); - ASSERT_NOT_NULL(iovs); - iovmax = uv_test_getiovmax(); - - r = uv_fs_open(NULL, - &open_req1, - "test_file", - O_RDWR | O_CREAT | add_flags, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - for (index = 0; index < iovcount; ++index) - iovs[index] = uv_buf_init(test_buf, sizeof(test_buf)); - - r = uv_fs_write(NULL, - &write_req, - open_req1.result, - iovs, - iovcount, - -1, - NULL); - ASSERT(r >= 0); - ASSERT((size_t)write_req.result == sizeof(test_buf) * iovcount); - uv_fs_req_cleanup(&write_req); - - /* Read the strings back to separate buffers. */ - buffer = malloc(sizeof(test_buf) * iovcount); - ASSERT_NOT_NULL(buffer); - - for (index = 0; index < iovcount; ++index) - iovs[index] = uv_buf_init(buffer + index * sizeof(test_buf), - sizeof(test_buf)); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_open(NULL, &open_req1, "test_file", O_RDONLY | add_flags, 0, - NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - r = uv_fs_read(NULL, &read_req, open_req1.result, iovs, iovcount, -1, NULL); - if (iovcount > iovmax) - iovcount = iovmax; - ASSERT(r >= 0); - ASSERT((size_t)read_req.result == sizeof(test_buf) * iovcount); - - for (index = 0; index < iovcount; ++index) - ASSERT(strncmp(buffer + index * sizeof(test_buf), - test_buf, - sizeof(test_buf)) == 0); - - uv_fs_req_cleanup(&read_req); - free(buffer); - - ASSERT(lseek(open_req1.result, write_req.result, SEEK_SET) == write_req.result); - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, - &read_req, - open_req1.result, - &iov, - 1, - -1, - NULL); - ASSERT(r == 0); - ASSERT(read_req.result == 0); - uv_fs_req_cleanup(&read_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - /* Cleanup */ - unlink("test_file"); - free(iovs); -} -TEST_IMPL(fs_write_alotof_bufs) { - fs_write_alotof_bufs(0); - fs_write_alotof_bufs(UV_FS_O_FILEMAP); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void fs_write_alotof_bufs_with_offset(int add_flags) { - size_t iovcount; - size_t iovmax; - uv_buf_t* iovs; - char* buffer; - size_t index; - int r; - int64_t offset; - char* filler; - int filler_len; - - filler = "0123456789"; - filler_len = strlen(filler); - iovcount = 54321; - - /* Setup. */ - unlink("test_file"); - - loop = uv_default_loop(); - - iovs = malloc(sizeof(*iovs) * iovcount); - ASSERT_NOT_NULL(iovs); - iovmax = uv_test_getiovmax(); - - r = uv_fs_open(NULL, - &open_req1, - "test_file", - O_RDWR | O_CREAT | add_flags, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - iov = uv_buf_init(filler, filler_len); - r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r == filler_len); - ASSERT(write_req.result == filler_len); - uv_fs_req_cleanup(&write_req); - offset = (int64_t)r; - - for (index = 0; index < iovcount; ++index) - iovs[index] = uv_buf_init(test_buf, sizeof(test_buf)); - - r = uv_fs_write(NULL, - &write_req, - open_req1.result, - iovs, - iovcount, - offset, - NULL); - ASSERT(r >= 0); - ASSERT((size_t)write_req.result == sizeof(test_buf) * iovcount); - uv_fs_req_cleanup(&write_req); - - /* Read the strings back to separate buffers. */ - buffer = malloc(sizeof(test_buf) * iovcount); - ASSERT_NOT_NULL(buffer); - - for (index = 0; index < iovcount; ++index) - iovs[index] = uv_buf_init(buffer + index * sizeof(test_buf), - sizeof(test_buf)); - - r = uv_fs_read(NULL, &read_req, open_req1.result, - iovs, iovcount, offset, NULL); - ASSERT(r >= 0); - if (r == sizeof(test_buf)) - iovcount = 1; /* Infer that preadv is not available. */ - else if (iovcount > iovmax) - iovcount = iovmax; - ASSERT((size_t)read_req.result == sizeof(test_buf) * iovcount); - - for (index = 0; index < iovcount; ++index) - ASSERT(strncmp(buffer + index * sizeof(test_buf), - test_buf, - sizeof(test_buf)) == 0); - - uv_fs_req_cleanup(&read_req); - free(buffer); - - r = uv_fs_stat(NULL, &stat_req, "test_file", NULL); - ASSERT(r == 0); - ASSERT((int64_t)((uv_stat_t*)stat_req.ptr)->st_size == - offset + (int64_t)write_req.result); - uv_fs_req_cleanup(&stat_req); - - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, - &read_req, - open_req1.result, - &iov, - 1, - offset + write_req.result, - NULL); - ASSERT(r == 0); - ASSERT(read_req.result == 0); - uv_fs_req_cleanup(&read_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - /* Cleanup */ - unlink("test_file"); - free(iovs); -} -TEST_IMPL(fs_write_alotof_bufs_with_offset) { - fs_write_alotof_bufs_with_offset(0); - fs_write_alotof_bufs_with_offset(UV_FS_O_FILEMAP); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_read_dir) { - int r; - char buf[2]; - loop = uv_default_loop(); - - /* Setup */ - rmdir("test_dir"); - r = uv_fs_mkdir(loop, &mkdir_req, "test_dir", 0755, mkdir_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(mkdir_cb_count == 1); - /* Setup Done Here */ - - /* Get a file descriptor for the directory */ - r = uv_fs_open(loop, - &open_req1, - "test_dir", - UV_FS_O_RDONLY | UV_FS_O_DIRECTORY, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r >= 0); - uv_fs_req_cleanup(&open_req1); - - /* Try to read data from the directory */ - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, 0, NULL); -#if defined(__FreeBSD__) || \ - defined(__OpenBSD__) || \ - defined(__NetBSD__) || \ - defined(__DragonFly__) || \ - defined(_AIX) || \ - defined(__sun) || \ - defined(__MVS__) - /* - * As of now, these operating systems support reading from a directory, - * that too depends on the filesystem this temporary test directory is - * created on. That is why this assertion is a bit lenient. - */ - ASSERT((r >= 0) || (r == UV_EISDIR)); -#else - ASSERT(r == UV_EISDIR); -#endif - uv_fs_req_cleanup(&read_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&close_req); - - /* Cleanup */ - rmdir("test_dir"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#ifdef _WIN32 - -TEST_IMPL(fs_partial_read) { - RETURN_SKIP("Test not implemented on Windows."); -} - -TEST_IMPL(fs_partial_write) { - RETURN_SKIP("Test not implemented on Windows."); -} - -#else /* !_WIN32 */ - -struct thread_ctx { - pthread_t pid; - int fd; - char* data; - int size; - int interval; - int doread; -}; - -static void thread_main(void* arg) { - const struct thread_ctx* ctx; - int size; - char* data; - - ctx = (struct thread_ctx*)arg; - size = ctx->size; - data = ctx->data; - - while (size > 0) { - ssize_t result; - int nbytes; - nbytes = size < ctx->interval ? size : ctx->interval; - if (ctx->doread) { - result = write(ctx->fd, data, nbytes); - /* Should not see EINTR (or other errors) */ - ASSERT(result == nbytes); - } else { - result = read(ctx->fd, data, nbytes); - /* Should not see EINTR (or other errors), - * but might get a partial read if we are faster than the writer - */ - ASSERT(result > 0 && result <= nbytes); - } - - pthread_kill(ctx->pid, SIGUSR1); - size -= result; - data += result; - } -} - -static void sig_func(uv_signal_t* handle, int signum) { - uv_signal_stop(handle); -} - -static size_t uv_test_fs_buf_offset(uv_buf_t* bufs, size_t size) { - size_t offset; - /* Figure out which bufs are done */ - for (offset = 0; size > 0 && bufs[offset].len <= size; ++offset) - size -= bufs[offset].len; - - /* Fix a partial read/write */ - if (size > 0) { - bufs[offset].base += size; - bufs[offset].len -= size; - } - return offset; -} - -static void test_fs_partial(int doread) { - struct thread_ctx ctx; - uv_thread_t thread; - uv_signal_t signal; - int pipe_fds[2]; - size_t iovcount; - uv_buf_t* iovs; - char* buffer; - size_t index; - - iovcount = 54321; - - iovs = malloc(sizeof(*iovs) * iovcount); - ASSERT_NOT_NULL(iovs); - - ctx.pid = pthread_self(); - ctx.doread = doread; - ctx.interval = 1000; - ctx.size = sizeof(test_buf) * iovcount; - ctx.data = malloc(ctx.size); - ASSERT_NOT_NULL(ctx.data); - buffer = malloc(ctx.size); - ASSERT_NOT_NULL(buffer); - - for (index = 0; index < iovcount; ++index) - iovs[index] = uv_buf_init(buffer + index * sizeof(test_buf), sizeof(test_buf)); - - loop = uv_default_loop(); - - ASSERT(0 == uv_signal_init(loop, &signal)); - ASSERT(0 == uv_signal_start(&signal, sig_func, SIGUSR1)); - - ASSERT(0 == pipe(pipe_fds)); - - ctx.fd = pipe_fds[doread]; - ASSERT(0 == uv_thread_create(&thread, thread_main, &ctx)); - - if (doread) { - uv_buf_t* read_iovs; - int nread; - read_iovs = iovs; - nread = 0; - while (nread < ctx.size) { - int result; - result = uv_fs_read(loop, &read_req, pipe_fds[0], read_iovs, iovcount, -1, NULL); - if (result > 0) { - size_t read_iovcount; - read_iovcount = uv_test_fs_buf_offset(read_iovs, result); - read_iovs += read_iovcount; - iovcount -= read_iovcount; - nread += result; - } else { - ASSERT(result == UV_EINTR); - } - uv_fs_req_cleanup(&read_req); - } - } else { - int result; - result = uv_fs_write(loop, &write_req, pipe_fds[1], iovs, iovcount, -1, NULL); - ASSERT(write_req.result == result); - ASSERT(result == ctx.size); - uv_fs_req_cleanup(&write_req); - } - - ASSERT(0 == memcmp(buffer, ctx.data, ctx.size)); - - ASSERT(0 == uv_thread_join(&thread)); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - - ASSERT(0 == close(pipe_fds[1])); - uv_close((uv_handle_t*) &signal, NULL); - - { /* Make sure we read everything that we wrote. */ - int result; - result = uv_fs_read(loop, &read_req, pipe_fds[0], iovs, 1, -1, NULL); - ASSERT(result == 0); - uv_fs_req_cleanup(&read_req); - } - ASSERT(0 == close(pipe_fds[0])); - - free(iovs); - free(buffer); - free(ctx.data); - - MAKE_VALGRIND_HAPPY(); -} - -TEST_IMPL(fs_partial_read) { - test_fs_partial(1); - return 0; -} - -TEST_IMPL(fs_partial_write) { - test_fs_partial(0); - return 0; -} - -#endif/* _WIN32 */ - -TEST_IMPL(fs_read_write_null_arguments) { - int r; - - r = uv_fs_read(NULL, &read_req, 0, NULL, 0, -1, NULL); - ASSERT(r == UV_EINVAL); - uv_fs_req_cleanup(&read_req); - - r = uv_fs_write(NULL, &write_req, 0, NULL, 0, -1, NULL); - /* Validate some memory management on failed input validation before sending - fs work to the thread pool. */ - ASSERT(r == UV_EINVAL); - ASSERT_NULL(write_req.path); - ASSERT_NULL(write_req.ptr); -#ifdef _WIN32 - ASSERT_NULL(write_req.file.pathw); - ASSERT_NULL(write_req.fs.info.new_pathw); - ASSERT_NULL(write_req.fs.info.bufs); -#else - ASSERT_NULL(write_req.new_path); - ASSERT_NULL(write_req.bufs); -#endif - uv_fs_req_cleanup(&write_req); - - iov = uv_buf_init(NULL, 0); - r = uv_fs_read(NULL, &read_req, 0, &iov, 0, -1, NULL); - ASSERT(r == UV_EINVAL); - uv_fs_req_cleanup(&read_req); - - iov = uv_buf_init(NULL, 0); - r = uv_fs_write(NULL, &write_req, 0, &iov, 0, -1, NULL); - ASSERT(r == UV_EINVAL); - uv_fs_req_cleanup(&write_req); - - /* If the arguments are invalid, the loop should not be kept open */ - loop = uv_default_loop(); - - r = uv_fs_read(loop, &read_req, 0, NULL, 0, -1, fail_cb); - ASSERT(r == UV_EINVAL); - uv_run(loop, UV_RUN_DEFAULT); - uv_fs_req_cleanup(&read_req); - - r = uv_fs_write(loop, &write_req, 0, NULL, 0, -1, fail_cb); - ASSERT(r == UV_EINVAL); - uv_run(loop, UV_RUN_DEFAULT); - uv_fs_req_cleanup(&write_req); - - iov = uv_buf_init(NULL, 0); - r = uv_fs_read(loop, &read_req, 0, &iov, 0, -1, fail_cb); - ASSERT(r == UV_EINVAL); - uv_run(loop, UV_RUN_DEFAULT); - uv_fs_req_cleanup(&read_req); - - iov = uv_buf_init(NULL, 0); - r = uv_fs_write(loop, &write_req, 0, &iov, 0, -1, fail_cb); - ASSERT(r == UV_EINVAL); - uv_run(loop, UV_RUN_DEFAULT); - uv_fs_req_cleanup(&write_req); - - return 0; -} - - -TEST_IMPL(get_osfhandle_valid_handle) { - int r; - uv_os_fd_t fd; - - /* Setup. */ - unlink("test_file"); - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, - &open_req1, - "test_file", - O_RDWR | O_CREAT, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - fd = uv_get_osfhandle(open_req1.result); -#ifdef _WIN32 - ASSERT(fd != INVALID_HANDLE_VALUE); -#else - ASSERT(fd >= 0); -#endif - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - /* Cleanup. */ - unlink("test_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(open_osfhandle_valid_handle) { - int r; - uv_os_fd_t handle; - int fd; - - /* Setup. */ - unlink("test_file"); - - loop = uv_default_loop(); - - r = uv_fs_open(NULL, - &open_req1, - "test_file", - O_RDWR | O_CREAT, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - handle = uv_get_osfhandle(open_req1.result); -#ifdef _WIN32 - ASSERT(handle != INVALID_HANDLE_VALUE); -#else - ASSERT(handle >= 0); -#endif - - fd = uv_open_osfhandle(handle); -#ifdef _WIN32 - ASSERT(fd > 0); -#else - ASSERT(fd == open_req1.result); -#endif - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - /* Cleanup. */ - unlink("test_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(fs_file_pos_after_op_with_offset) { - int r; - - /* Setup. */ - unlink("test_file"); - loop = uv_default_loop(); - - r = uv_fs_open(loop, - &open_req1, - "test_file", - O_RDWR | O_CREAT, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r > 0); - uv_fs_req_cleanup(&open_req1); - - iov = uv_buf_init(test_buf, sizeof(test_buf)); - r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, 0, NULL); - ASSERT(r == sizeof(test_buf)); - ASSERT(lseek(open_req1.result, 0, SEEK_CUR) == 0); - uv_fs_req_cleanup(&write_req); - - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, 0, NULL); - ASSERT(r == sizeof(test_buf)); - ASSERT(strcmp(buf, test_buf) == 0); - ASSERT(lseek(open_req1.result, 0, SEEK_CUR) == 0); - uv_fs_req_cleanup(&read_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&close_req); - - /* Cleanup */ - unlink("test_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#ifdef _WIN32 -static void fs_file_pos_common(void) { - int r; - - iov = uv_buf_init("abc", 3); - r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r == 3); - uv_fs_req_cleanup(&write_req); - - /* Read with offset should not change the position */ - iov = uv_buf_init(buf, 1); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, 1, NULL); - ASSERT(r == 1); - ASSERT(buf[0] == 'b'); - uv_fs_req_cleanup(&read_req); - - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&read_req); - - /* Write without offset should change the position */ - iov = uv_buf_init("d", 1); - r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r == 1); - uv_fs_req_cleanup(&write_req); - - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&read_req); -} - -static void fs_file_pos_close_check(const char *contents, int size) { - int r; - - /* Close */ - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&close_req); - - /* Confirm file contents */ - r = uv_fs_open(NULL, &open_req1, "test_file", O_RDONLY, 0, NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r == size); - ASSERT(strncmp(buf, contents, size) == 0); - uv_fs_req_cleanup(&read_req); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&close_req); - - /* Cleanup */ - unlink("test_file"); -} - -static void fs_file_pos_write(int add_flags) { - int r; - - /* Setup. */ - unlink("test_file"); - - r = uv_fs_open(NULL, - &open_req1, - "test_file", - O_TRUNC | O_CREAT | O_RDWR | add_flags, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r > 0); - uv_fs_req_cleanup(&open_req1); - - fs_file_pos_common(); - - /* Write with offset should not change the position */ - iov = uv_buf_init("e", 1); - r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, 1, NULL); - ASSERT(r == 1); - uv_fs_req_cleanup(&write_req); - - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&read_req); - - fs_file_pos_close_check("aecd", 4); -} -TEST_IMPL(fs_file_pos_write) { - fs_file_pos_write(0); - fs_file_pos_write(UV_FS_O_FILEMAP); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -static void fs_file_pos_append(int add_flags) { - int r; - - /* Setup. */ - unlink("test_file"); - - r = uv_fs_open(NULL, - &open_req1, - "test_file", - O_APPEND | O_CREAT | O_RDWR | add_flags, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r > 0); - uv_fs_req_cleanup(&open_req1); - - fs_file_pos_common(); - - /* Write with offset appends (ignoring offset) - * but does not change the position */ - iov = uv_buf_init("e", 1); - r = uv_fs_write(NULL, &write_req, open_req1.result, &iov, 1, 1, NULL); - ASSERT(r == 1); - uv_fs_req_cleanup(&write_req); - - iov = uv_buf_init(buf, sizeof(buf)); - r = uv_fs_read(NULL, &read_req, open_req1.result, &iov, 1, -1, NULL); - ASSERT(r == 1); - ASSERT(buf[0] == 'e'); - uv_fs_req_cleanup(&read_req); - - fs_file_pos_close_check("abcde", 5); -} -TEST_IMPL(fs_file_pos_append) { - fs_file_pos_append(0); - fs_file_pos_append(UV_FS_O_FILEMAP); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - -TEST_IMPL(fs_null_req) { - /* Verify that all fs functions return UV_EINVAL when the request is NULL. */ - int r; - - r = uv_fs_open(NULL, NULL, NULL, 0, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_close(NULL, NULL, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_read(NULL, NULL, 0, NULL, 0, -1, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_write(NULL, NULL, 0, NULL, 0, -1, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_unlink(NULL, NULL, NULL, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_mkdir(NULL, NULL, NULL, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_mkdtemp(NULL, NULL, NULL, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_mkstemp(NULL, NULL, NULL, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_rmdir(NULL, NULL, NULL, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_scandir(NULL, NULL, NULL, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_link(NULL, NULL, NULL, NULL, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_symlink(NULL, NULL, NULL, NULL, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_readlink(NULL, NULL, NULL, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_realpath(NULL, NULL, NULL, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_chown(NULL, NULL, NULL, 0, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_fchown(NULL, NULL, 0, 0, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_stat(NULL, NULL, NULL, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_lstat(NULL, NULL, NULL, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_fstat(NULL, NULL, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_rename(NULL, NULL, NULL, NULL, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_fsync(NULL, NULL, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_fdatasync(NULL, NULL, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_ftruncate(NULL, NULL, 0, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_copyfile(NULL, NULL, NULL, NULL, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_sendfile(NULL, NULL, 0, 0, 0, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_access(NULL, NULL, NULL, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_chmod(NULL, NULL, NULL, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_fchmod(NULL, NULL, 0, 0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_utime(NULL, NULL, NULL, 0.0, 0.0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_futime(NULL, NULL, 0, 0.0, 0.0, NULL); - ASSERT(r == UV_EINVAL); - - r = uv_fs_statfs(NULL, NULL, NULL, NULL); - ASSERT(r == UV_EINVAL); - - /* This should be a no-op. */ - uv_fs_req_cleanup(NULL); - - return 0; -} - -#ifdef _WIN32 -TEST_IMPL(fs_exclusive_sharing_mode) { - int r; - - /* Setup. */ - unlink("test_file"); - - ASSERT(UV_FS_O_EXLOCK > 0); - - r = uv_fs_open(NULL, - &open_req1, - "test_file", - O_RDWR | O_CREAT | UV_FS_O_EXLOCK, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - r = uv_fs_open(NULL, - &open_req2, - "test_file", - O_RDONLY | UV_FS_O_EXLOCK, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r < 0); - ASSERT(open_req2.result < 0); - uv_fs_req_cleanup(&open_req2); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - r = uv_fs_open(NULL, - &open_req2, - "test_file", - O_RDONLY | UV_FS_O_EXLOCK, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r >= 0); - ASSERT(open_req2.result >= 0); - uv_fs_req_cleanup(&open_req2); - - r = uv_fs_close(NULL, &close_req, open_req2.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - /* Cleanup */ - unlink("test_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - -#ifdef _WIN32 -TEST_IMPL(fs_file_flag_no_buffering) { - int r; - - /* Setup. */ - unlink("test_file"); - - ASSERT(UV_FS_O_APPEND > 0); - ASSERT(UV_FS_O_CREAT > 0); - ASSERT(UV_FS_O_DIRECT > 0); - ASSERT(UV_FS_O_RDWR > 0); - - /* FILE_APPEND_DATA must be excluded from FILE_GENERIC_WRITE: */ - r = uv_fs_open(NULL, - &open_req1, - "test_file", - UV_FS_O_RDWR | UV_FS_O_CREAT | UV_FS_O_DIRECT, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - /* FILE_APPEND_DATA and FILE_FLAG_NO_BUFFERING are mutually exclusive: */ - r = uv_fs_open(NULL, - &open_req2, - "test_file", - UV_FS_O_APPEND | UV_FS_O_DIRECT, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r == UV_EINVAL); - ASSERT(open_req2.result == UV_EINVAL); - uv_fs_req_cleanup(&open_req2); - - /* Cleanup */ - unlink("test_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - -#ifdef _WIN32 -int call_icacls(const char* command, ...) { - char icacls_command[1024]; - va_list args; - - va_start(args, command); - vsnprintf(icacls_command, ARRAYSIZE(icacls_command), command, args); - va_end(args); - return system(icacls_command); -} - -TEST_IMPL(fs_open_readonly_acl) { - uv_passwd_t pwd; - uv_fs_t req; - int r; - - /* - Based on Node.js test from - https://github.com/nodejs/node/commit/3ba81e34e86a5c32658e218cb6e65b13e8326bc5 - - If anything goes wrong, you can delte the test_fle_icacls with: - - icacls test_file_icacls /remove "%USERNAME%" /inheritance:e - attrib -r test_file_icacls - del test_file_icacls - */ - - /* Setup - clear the ACL and remove the file */ - loop = uv_default_loop(); - r = uv_os_get_passwd(&pwd); - ASSERT(r == 0); - call_icacls("icacls test_file_icacls /remove \"%s\" /inheritance:e", - pwd.username); - uv_fs_chmod(loop, &req, "test_file_icacls", S_IWUSR, NULL); - unlink("test_file_icacls"); - - /* Create the file */ - r = uv_fs_open(loop, - &open_req1, - "test_file_icacls", - O_RDONLY | O_CREAT, - S_IRUSR, - NULL); - ASSERT(r >= 0); - ASSERT(open_req1.result >= 0); - uv_fs_req_cleanup(&open_req1); - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - ASSERT(r == 0); - ASSERT(close_req.result == 0); - uv_fs_req_cleanup(&close_req); - - /* Set up ACL */ - r = call_icacls("icacls test_file_icacls /inheritance:r /remove \"%s\"", - pwd.username); - if (r != 0) { - goto acl_cleanup; - } - r = call_icacls("icacls test_file_icacls /grant \"%s\":RX", pwd.username); - if (r != 0) { - goto acl_cleanup; - } - - /* Try opening the file */ - r = uv_fs_open(NULL, &open_req1, "test_file_icacls", O_RDONLY, 0, NULL); - if (r < 0) { - goto acl_cleanup; - } - uv_fs_req_cleanup(&open_req1); - r = uv_fs_close(NULL, &close_req, open_req1.result, NULL); - if (r != 0) { - goto acl_cleanup; - } - uv_fs_req_cleanup(&close_req); - - acl_cleanup: - /* Cleanup */ - call_icacls("icacls test_file_icacls /remove \"%s\" /inheritance:e", - pwd.username); - unlink("test_file_icacls"); - uv_os_free_passwd(&pwd); - ASSERT(r == 0); - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - -#ifdef _WIN32 -TEST_IMPL(fs_fchmod_archive_readonly) { - uv_fs_t req; - uv_file file; - int r; - /* Test clearing read-only flag from files with Archive flag cleared */ - - /* Setup*/ - unlink("test_file"); - r = uv_fs_open(NULL, - &req, - "test_file", - O_WRONLY | O_CREAT, - S_IWUSR | S_IRUSR, - NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - file = req.result; - uv_fs_req_cleanup(&req); - r = uv_fs_close(NULL, &req, file, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); - /* Make the file read-only and clear archive flag */ - r = SetFileAttributes("test_file", FILE_ATTRIBUTE_READONLY); - ASSERT(r != 0); - check_permission("test_file", 0400); - /* Try fchmod */ - r = uv_fs_open(NULL, &req, "test_file", O_RDONLY, 0, NULL); - ASSERT(r >= 0); - ASSERT(req.result >= 0); - file = req.result; - uv_fs_req_cleanup(&req); - r = uv_fs_fchmod(NULL, &req, file, S_IWUSR, NULL); - ASSERT(r == 0); - ASSERT(req.result == 0); - uv_fs_req_cleanup(&req); - r = uv_fs_close(NULL, &req, file, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&req); - check_permission("test_file", S_IWUSR); - - /* Restore Archive flag for rest of the tests */ - r = SetFileAttributes("test_file", FILE_ATTRIBUTE_ARCHIVE); - ASSERT(r != 0); - - return 0; -} - -TEST_IMPL(fs_invalid_mkdir_name) { - uv_loop_t* loop; - uv_fs_t req; - int r; - - loop = uv_default_loop(); - r = uv_fs_mkdir(loop, &req, "invalid>", 0, NULL); - ASSERT(r == UV_EINVAL); - ASSERT_EQ(UV_EINVAL, uv_fs_mkdir(loop, &req, "test:lol", 0, NULL)); - - return 0; -} -#endif - -TEST_IMPL(fs_statfs) { - uv_fs_t req; - int r; - - loop = uv_default_loop(); - - /* Test the synchronous version. */ - r = uv_fs_statfs(NULL, &req, ".", NULL); - ASSERT(r == 0); - statfs_cb(&req); - ASSERT(statfs_cb_count == 1); - - /* Test the asynchronous version. */ - r = uv_fs_statfs(loop, &req, ".", statfs_cb); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - ASSERT(statfs_cb_count == 2); - - return 0; -} - -TEST_IMPL(fs_get_system_error) { - uv_fs_t req; - int r; - int system_error; - - r = uv_fs_statfs(NULL, &req, "non_existing_file", NULL); - ASSERT(r != 0); - - system_error = uv_fs_get_system_error(&req); -#ifdef _WIN32 - ASSERT(system_error == ERROR_FILE_NOT_FOUND); -#else - ASSERT(system_error == ENOENT); -#endif - - return 0; -} diff --git a/libuv/test/test-get-currentexe.c b/libuv/test/test-get-currentexe.c deleted file mode 100644 index dc239cc..0000000 --- a/libuv/test/test-get-currentexe.c +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - -#ifndef _WIN32 -#include -#endif - -#define PATHMAX 4096 -extern char executable_path[]; - -TEST_IMPL(get_currentexe) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - char buffer[PATHMAX]; - char path[PATHMAX]; - size_t size; - char* match; - int r; - - size = sizeof(buffer) / sizeof(buffer[0]); - r = uv_exepath(buffer, &size); - ASSERT(!r); - -#ifdef _WIN32 - snprintf(path, sizeof(path), "%s", executable_path); -#else - ASSERT_NOT_NULL(realpath(executable_path, path)); -#endif - - match = strstr(buffer, path); - /* Verify that the path returned from uv_exepath is a subdirectory of - * executable_path. - */ - ASSERT(match && !strcmp(match, path)); - ASSERT(size == strlen(buffer)); - - /* Negative tests */ - size = sizeof(buffer) / sizeof(buffer[0]); - r = uv_exepath(NULL, &size); - ASSERT(r == UV_EINVAL); - - r = uv_exepath(buffer, NULL); - ASSERT(r == UV_EINVAL); - - size = 0; - r = uv_exepath(buffer, &size); - ASSERT(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'); - - 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'); - - /* Verify uv_exepath is not affected by uv_set_process_title(). */ - r = uv_set_process_title("foobar"); - ASSERT_EQ(r, 0); - size = sizeof(buffer); - r = uv_exepath(buffer, &size); - ASSERT_EQ(r, 0); - - match = strstr(buffer, path); - /* Verify that the path returned from uv_exepath is a subdirectory of - * executable_path. - */ - ASSERT_NOT_NULL(match); - ASSERT_STR_EQ(match, path); - ASSERT_EQ(size, strlen(buffer)); - return 0; -} diff --git a/libuv/test/test-get-loadavg.c b/libuv/test/test-get-loadavg.c deleted file mode 100644 index 4762e47..0000000 --- a/libuv/test/test-get-loadavg.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -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); - - return 0; -} diff --git a/libuv/test/test-get-memory.c b/libuv/test/test-get-memory.c deleted file mode 100644 index 4555ba0..0000000 --- a/libuv/test/test-get-memory.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -TEST_IMPL(get_memory) { - uint64_t free_mem = uv_get_free_memory(); - uint64_t total_mem = uv_get_total_memory(); - uint64_t constrained_mem = uv_get_constrained_memory(); - - printf("free_mem=%llu, total_mem=%llu, constrained_mem=%llu\n", - (unsigned long long) free_mem, - (unsigned long long) total_mem, - (unsigned long long) constrained_mem); - - ASSERT(free_mem > 0); - ASSERT(total_mem > 0); - /* On IBMi PASE, the amount of memory in use is always zero. */ -#ifdef __PASE__ - ASSERT(total_mem == free_mem); -#else - ASSERT(total_mem > free_mem); -#endif - return 0; -} diff --git a/libuv/test/test-get-passwd.c b/libuv/test/test-get-passwd.c deleted file mode 100644 index 865c07d..0000000 --- a/libuv/test/test-get-passwd.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - -TEST_IMPL(get_passwd) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - uv_passwd_t pwd; - size_t len; - int r; - - /* Test the normal case */ - r = uv_os_get_passwd(&pwd); - ASSERT(r == 0); - len = strlen(pwd.username); - ASSERT(len > 0); - -#ifdef _WIN32 - ASSERT_NULL(pwd.shell); -#else - len = strlen(pwd.shell); -# ifndef __PASE__ - ASSERT(len > 0); -# endif -#endif - - len = strlen(pwd.homedir); - ASSERT(len > 0); - -#ifdef _WIN32 - if (len == 3 && pwd.homedir[1] == ':') - ASSERT(pwd.homedir[2] == '\\'); - else - ASSERT(pwd.homedir[len - 1] != '\\'); -#else - if (len == 1) - ASSERT(pwd.homedir[0] == '/'); - else - ASSERT(pwd.homedir[len - 1] != '/'); -#endif - -#ifdef _WIN32 - ASSERT(pwd.uid == -1); - ASSERT(pwd.gid == -1); -#else - ASSERT(pwd.uid >= 0); - ASSERT(pwd.gid >= 0); -#endif - - /* Test uv_os_free_passwd() */ - uv_os_free_passwd(&pwd); - - ASSERT_NULL(pwd.username); - ASSERT_NULL(pwd.shell); - ASSERT_NULL(pwd.homedir); - - /* Test a double free */ - uv_os_free_passwd(&pwd); - - ASSERT_NULL(pwd.username); - ASSERT_NULL(pwd.shell); - ASSERT_NULL(pwd.homedir); - - /* Test invalid input */ - r = uv_os_get_passwd(NULL); - ASSERT(r == UV_EINVAL); - - return 0; -} diff --git a/libuv/test/test-getaddrinfo.c b/libuv/test/test-getaddrinfo.c deleted file mode 100644 index d0b6a50..0000000 --- a/libuv/test/test-getaddrinfo.c +++ /dev/null @@ -1,215 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - -#define CONCURRENT_COUNT 10 - -static const char* name = "localhost"; - -static int getaddrinfo_cbs = 0; - -/* data used for running multiple calls concurrently */ -static uv_getaddrinfo_t* getaddrinfo_handle; -static uv_getaddrinfo_t getaddrinfo_handles[CONCURRENT_COUNT]; -static int callback_counts[CONCURRENT_COUNT]; -static int fail_cb_called; - - -static void getaddrinfo_fail_cb(uv_getaddrinfo_t* req, - int status, - struct addrinfo* res) { - - ASSERT(fail_cb_called == 0); - ASSERT(status < 0); - ASSERT_NULL(res); - uv_freeaddrinfo(res); /* Should not crash. */ - fail_cb_called++; -} - - -static void getaddrinfo_basic_cb(uv_getaddrinfo_t* handle, - int status, - struct addrinfo* res) { - ASSERT(handle == getaddrinfo_handle); - getaddrinfo_cbs++; - free(handle); - uv_freeaddrinfo(res); -} - - -static void getaddrinfo_cuncurrent_cb(uv_getaddrinfo_t* handle, - int status, - struct addrinfo* res) { - int i; - int* data = (int*)handle->data; - - for (i = 0; i < CONCURRENT_COUNT; i++) { - if (&getaddrinfo_handles[i] == handle) { - ASSERT(i == *data); - - callback_counts[i]++; - break; - } - } - ASSERT (i < CONCURRENT_COUNT); - - free(data); - uv_freeaddrinfo(res); - - getaddrinfo_cbs++; -} - - -TEST_IMPL(getaddrinfo_fail) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - uv_getaddrinfo_t req; - - ASSERT(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); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(getaddrinfo_fail_sync) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - 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)); - uv_freeaddrinfo(req.addrinfo); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(getaddrinfo_basic) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - int r; - getaddrinfo_handle = (uv_getaddrinfo_t*)malloc(sizeof(uv_getaddrinfo_t)); - - r = uv_getaddrinfo(uv_default_loop(), - getaddrinfo_handle, - &getaddrinfo_basic_cb, - name, - NULL, - NULL); - ASSERT(r == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(getaddrinfo_cbs == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(getaddrinfo_basic_sync) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - uv_getaddrinfo_t req; - - ASSERT(0 == uv_getaddrinfo(uv_default_loop(), - &req, - NULL, - name, - NULL, - NULL)); - uv_freeaddrinfo(req.addrinfo); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(getaddrinfo_concurrent) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - int i, r; - int* data; - - for (i = 0; i < CONCURRENT_COUNT; i++) { - callback_counts[i] = 0; - - data = (int*)malloc(sizeof(int)); - ASSERT_NOT_NULL(data); - *data = i; - getaddrinfo_handles[i].data = data; - - r = uv_getaddrinfo(uv_default_loop(), - &getaddrinfo_handles[i], - &getaddrinfo_cuncurrent_cb, - name, - NULL, - NULL); - ASSERT(r == 0); - } - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - for (i = 0; i < CONCURRENT_COUNT; i++) { - ASSERT(callback_counts[i] == 1); - } - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-gethostname.c b/libuv/test/test-gethostname.c deleted file mode 100644 index 1a9816d..0000000 --- a/libuv/test/test-gethostname.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - -TEST_IMPL(gethostname) { - char buf[UV_MAXHOSTNAMESIZE]; - size_t size; - size_t enobufs_size; - int r; - - /* Reject invalid inputs */ - size = 1; - r = uv_os_gethostname(NULL, &size); - ASSERT(r == UV_EINVAL); - r = uv_os_gethostname(buf, NULL); - ASSERT(r == UV_EINVAL); - size = 0; - r = uv_os_gethostname(buf, &size); - ASSERT(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(r == UV_ENOBUFS); - ASSERT(buf[0] == '\0'); - ASSERT(enobufs_size > 1); - - /* Successfully get the hostname */ - size = UV_MAXHOSTNAMESIZE; - r = uv_os_gethostname(buf, &size); - ASSERT(r == 0); - ASSERT(size > 0 && size == strlen(buf)); - ASSERT(size + 1 == enobufs_size); - - return 0; -} diff --git a/libuv/test/test-getnameinfo.c b/libuv/test/test-getnameinfo.c deleted file mode 100644 index 2bfedd3..0000000 --- a/libuv/test/test-getnameinfo.c +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to -* deal in the Software without restriction, including without limitation the -* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -* sell copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -* IN THE SOFTWARE. -*/ - -#include "uv.h" -#include "task.h" -#include -#include -#include - - -static const char* address_ip4 = "127.0.0.1"; -static const char* address_ip6 = "::1"; -static const int port = 80; - -static struct sockaddr_in addr4; -static struct sockaddr_in6 addr6; -static uv_getnameinfo_t req; - -static void getnameinfo_req(uv_getnameinfo_t* handle, - int status, - const char* hostname, - const char* service) { - ASSERT_NOT_NULL(handle); - ASSERT(status == 0); - ASSERT_NOT_NULL(hostname); - ASSERT_NOT_NULL(service); -} - - -TEST_IMPL(getnameinfo_basic_ip4) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - int r; - - r = uv_ip4_addr(address_ip4, port, &addr4); - ASSERT(r == 0); - - r = uv_getnameinfo(uv_default_loop(), - &req, - &getnameinfo_req, - (const struct sockaddr*)&addr4, - 0); - ASSERT(r == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(getnameinfo_basic_ip4_sync) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - ASSERT(0 == 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'); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(getnameinfo_basic_ip6) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - int r; - - r = uv_ip6_addr(address_ip6, port, &addr6); - ASSERT(r == 0); - - r = uv_getnameinfo(uv_default_loop(), - &req, - &getnameinfo_req, - (const struct sockaddr*)&addr6, - 0); - ASSERT(r == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-getsockname.c b/libuv/test/test-getsockname.c deleted file mode 100644 index 7c77fcb..0000000 --- a/libuv/test/test-getsockname.c +++ /dev/null @@ -1,361 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -static const int server_port = TEST_PORT; -/* Will be updated right after making the uv_connect_call */ -static int connect_port = -1; - -static int getsocknamecount = 0; -static int getpeernamecount = 0; - -static uv_loop_t* loop; -static uv_tcp_t tcp; -static uv_udp_t udp; -static uv_connect_t connect_req; -static uv_tcp_t tcpServer; -static uv_udp_t udpServer; -static uv_udp_send_t send_req; - - -static void alloc(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) { - buf->base = malloc(suggested_size); - buf->len = suggested_size; -} - - -static void on_close(uv_handle_t* peer) { - free(peer); - uv_close((uv_handle_t*)&tcpServer, NULL); -} - - -static void after_shutdown(uv_shutdown_t* req, int status) { - uv_close((uv_handle_t*) req->handle, on_close); - free(req); -} - - -static void after_read(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - uv_shutdown_t* req; - int r; - - if (buf->base) { - free(buf->base); - } - - req = (uv_shutdown_t*) malloc(sizeof *req); - r = uv_shutdown(req, handle, after_shutdown); - ASSERT(r == 0); -} - - -static void check_sockname(struct sockaddr* addr, const char* compare_ip, - int compare_port, const char* context) { - struct sockaddr_in check_addr = *(struct sockaddr_in*) addr; - struct sockaddr_in compare_addr; - char check_ip[17]; - int r; - - ASSERT(0 == 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); - - /* Check if the ip matches */ - ASSERT(memcmp(&check_addr.sin_addr, - &compare_addr.sin_addr, - sizeof compare_addr.sin_addr) == 0); - - /* 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); - - printf("%s: %s:%d\n", context, check_ip, ntohs(check_addr.sin_port)); -} - - -static void on_connection(uv_stream_t* server, int status) { - struct sockaddr sockname, peername; - int namelen; - uv_tcp_t* handle; - int r; - - if (status != 0) { - fprintf(stderr, "Connect error %s\n", uv_err_name(status)); - } - ASSERT(status == 0); - - handle = malloc(sizeof(*handle)); - ASSERT_NOT_NULL(handle); - - r = uv_tcp_init(loop, handle); - ASSERT(r == 0); - - /* associate server with stream */ - handle->data = server; - - r = uv_accept(server, (uv_stream_t*)handle); - ASSERT(r == 0); - - namelen = sizeof sockname; - r = uv_tcp_getsockname(handle, &sockname, &namelen); - ASSERT(r == 0); - check_sockname(&sockname, "127.0.0.1", server_port, "accepted socket"); - getsocknamecount++; - - namelen = sizeof peername; - r = uv_tcp_getpeername(handle, &peername, &namelen); - ASSERT(r == 0); - 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); -} - - -static void on_connect(uv_connect_t* req, int status) { - struct sockaddr sockname, peername; - int r, namelen; - - ASSERT(status == 0); - - namelen = sizeof sockname; - r = uv_tcp_getsockname((uv_tcp_t*) req->handle, &sockname, &namelen); - ASSERT(r == 0); - check_sockname(&sockname, "127.0.0.1", 0, "connected socket"); - getsocknamecount++; - - namelen = sizeof peername; - r = uv_tcp_getpeername((uv_tcp_t*) req->handle, &peername, &namelen); - ASSERT(r == 0); - check_sockname(&peername, "127.0.0.1", server_port, "connected socket peer"); - getpeernamecount++; - - uv_close((uv_handle_t*)&tcp, NULL); -} - - -static int tcp_listener(void) { - struct sockaddr_in addr; - struct sockaddr sockname, peername; - int namelen; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", server_port, &addr)); - - r = uv_tcp_init(loop, &tcpServer); - if (r) { - fprintf(stderr, "Socket creation error\n"); - return 1; - } - - r = uv_tcp_bind(&tcpServer, (const struct sockaddr*) &addr, 0); - if (r) { - fprintf(stderr, "Bind error\n"); - return 1; - } - - r = uv_listen((uv_stream_t*)&tcpServer, 128, on_connection); - if (r) { - fprintf(stderr, "Listen error\n"); - return 1; - } - - memset(&sockname, -1, sizeof sockname); - namelen = sizeof sockname; - r = uv_tcp_getsockname(&tcpServer, &sockname, &namelen); - ASSERT(r == 0); - check_sockname(&sockname, "0.0.0.0", server_port, "server socket"); - getsocknamecount++; - - namelen = sizeof sockname; - r = uv_tcp_getpeername(&tcpServer, &peername, &namelen); - ASSERT(r == UV_ENOTCONN); - getpeernamecount++; - - return 0; -} - - -static void tcp_connector(void) { - struct sockaddr_in server_addr; - struct sockaddr sockname; - int r, namelen; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", server_port, &server_addr)); - - r = uv_tcp_init(loop, &tcp); - tcp.data = &connect_req; - ASSERT(!r); - - r = uv_tcp_connect(&connect_req, - &tcp, - (const struct sockaddr*) &server_addr, - on_connect); - ASSERT(!r); - - /* Fetch the actual port used by the connecting socket. */ - namelen = sizeof sockname; - r = uv_tcp_getsockname(&tcp, &sockname, &namelen); - ASSERT(!r); - ASSERT(sockname.sa_family == AF_INET); - connect_port = ntohs(((struct sockaddr_in*) &sockname)->sin_port); - ASSERT(connect_port > 0); -} - - -static void udp_recv(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* buf, - const struct sockaddr* addr, - unsigned flags) { - struct sockaddr sockname; - int namelen; - int r; - - ASSERT(nread >= 0); - free(buf->base); - - if (nread == 0) { - return; - } - - memset(&sockname, -1, sizeof sockname); - namelen = sizeof(sockname); - r = uv_udp_getsockname(&udp, &sockname, &namelen); - ASSERT(r == 0); - check_sockname(&sockname, "0.0.0.0", 0, "udp receiving socket"); - getsocknamecount++; - - uv_close((uv_handle_t*) &udp, NULL); - uv_close((uv_handle_t*) handle, NULL); -} - - -static void udp_send(uv_udp_send_t* req, int status) { - -} - - -static int udp_listener(void) { - struct sockaddr_in addr; - struct sockaddr sockname; - int namelen; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", server_port, &addr)); - - r = uv_udp_init(loop, &udpServer); - if (r) { - fprintf(stderr, "Socket creation error\n"); - return 1; - } - - r = uv_udp_bind(&udpServer, (const struct sockaddr*) &addr, 0); - if (r) { - fprintf(stderr, "Bind error\n"); - return 1; - } - - memset(&sockname, -1, sizeof sockname); - namelen = sizeof sockname; - r = uv_udp_getsockname(&udpServer, &sockname, &namelen); - ASSERT(r == 0); - check_sockname(&sockname, "0.0.0.0", server_port, "udp listener socket"); - getsocknamecount++; - - r = uv_udp_recv_start(&udpServer, alloc, udp_recv); - ASSERT(r == 0); - - return 0; -} - - -static void udp_sender(void) { - struct sockaddr_in server_addr; - uv_buf_t buf; - int r; - - r = uv_udp_init(loop, &udp); - ASSERT(!r); - - buf = uv_buf_init("PING", 4); - ASSERT(0 == uv_ip4_addr("127.0.0.1", server_port, &server_addr)); - - r = uv_udp_send(&send_req, - &udp, - &buf, - 1, - (const struct sockaddr*) &server_addr, - udp_send); - ASSERT(!r); -} - - -TEST_IMPL(getsockname_tcp) { - loop = uv_default_loop(); - - if (tcp_listener()) - return 1; - - tcp_connector(); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(getsocknamecount == 3); - ASSERT(getpeernamecount == 3); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(getsockname_udp) { - loop = uv_default_loop(); - - if (udp_listener()) - return 1; - - udp_sender(); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(getsocknamecount == 2); - - ASSERT(udp.send_queue_size == 0); - ASSERT(udpServer.send_queue_size == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-getters-setters.c b/libuv/test/test-getters-setters.c deleted file mode 100644 index 2a37122..0000000 --- a/libuv/test/test-getters-setters.c +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - -int cookie1; -int cookie2; -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_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)); - return 0; -} - - -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_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)); - return 0; -} - - -TEST_IMPL(getters_setters) { - uv_loop_t* loop; - uv_pipe_t* pipe; - uv_fs_t* fs; - int r; - - loop = malloc(uv_loop_size()); - ASSERT_NOT_NULL(loop); - r = uv_loop_init(loop); - ASSERT(r == 0); - - uv_loop_set_data(loop, &cookie1); - ASSERT(loop->data == &cookie1); - ASSERT(uv_loop_get_data(loop) == &cookie1); - - pipe = malloc(uv_handle_size(UV_NAMED_PIPE)); - r = uv_pipe_init(loop, pipe, 0); - ASSERT(uv_handle_get_type((uv_handle_t*)pipe) == UV_NAMED_PIPE); - - ASSERT(uv_handle_get_loop((uv_handle_t*)pipe) == loop); - pipe->data = &cookie2; - ASSERT(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(uv_stream_get_write_queue_size((uv_stream_t*)pipe) == 0); - pipe->write_queue_size++; - ASSERT(uv_stream_get_write_queue_size((uv_stream_t*)pipe) == 1); - pipe->write_queue_size--; - uv_close((uv_handle_t*)pipe, NULL); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - fs = malloc(uv_req_size(UV_FS)); - uv_fs_stat(loop, fs, ".", NULL); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - 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(uv_fs_get_statbuf(fs)->st_mode & S_IFDIR); - ASSERT(strcmp(uv_fs_get_path(fs), ".") == 0); - uv_fs_req_cleanup(fs); - - r = uv_loop_close(loop); - ASSERT(r == 0); - - free(pipe); - free(fs); - free(loop); - return 0; -} diff --git a/libuv/test/test-gettimeofday.c b/libuv/test/test-gettimeofday.c deleted file mode 100644 index 4ebc11f..0000000 --- a/libuv/test/test-gettimeofday.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -TEST_IMPL(gettimeofday) { - uv_timeval64_t tv; - int r; - - tv.tv_sec = 0; - r = uv_gettimeofday(&tv); - ASSERT(r == 0); - ASSERT(tv.tv_sec != 0); - - /* Test invalid input. */ - r = uv_gettimeofday(NULL); - ASSERT(r == UV_EINVAL); - - return 0; -} diff --git a/libuv/test/test-handle-fileno.c b/libuv/test/test-handle-fileno.c deleted file mode 100644 index 8a093e2..0000000 --- a/libuv/test/test-handle-fileno.c +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - - -static int get_tty_fd(void) { - /* Make sure we have an FD that refers to a tty */ -#ifdef _WIN32 - HANDLE handle; - handle = CreateFileA("conin$", - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - if (handle == INVALID_HANDLE_VALUE) - return -1; - return _open_osfhandle((intptr_t) handle, 0); -#else /* unix */ - return open("/dev/tty", O_RDONLY, 0); -#endif -} - - -TEST_IMPL(handle_fileno) { - int r; - int tty_fd; - struct sockaddr_in addr; - uv_os_fd_t fd; - uv_tcp_t tcp; - uv_udp_t udp; - uv_pipe_t pipe; - uv_tty_t tty; - uv_idle_t idle; - uv_loop_t* loop; - - loop = uv_default_loop(); - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_idle_init(loop, &idle); - ASSERT(r == 0); - r = uv_fileno((uv_handle_t*) &idle, &fd); - ASSERT(r == UV_EINVAL); - uv_close((uv_handle_t*) &idle, NULL); - - r = uv_tcp_init(loop, &tcp); - ASSERT(r == 0); - r = uv_fileno((uv_handle_t*) &tcp, &fd); - ASSERT(r == UV_EBADF); - r = uv_tcp_bind(&tcp, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - r = uv_fileno((uv_handle_t*) &tcp, &fd); - ASSERT(r == 0); - uv_close((uv_handle_t*) &tcp, NULL); - r = uv_fileno((uv_handle_t*) &tcp, &fd); - ASSERT(r == UV_EBADF); - - r = uv_udp_init(loop, &udp); - ASSERT(r == 0); - r = uv_fileno((uv_handle_t*) &udp, &fd); - ASSERT(r == UV_EBADF); - r = uv_udp_bind(&udp, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - r = uv_fileno((uv_handle_t*) &udp, &fd); - ASSERT(r == 0); - uv_close((uv_handle_t*) &udp, NULL); - r = uv_fileno((uv_handle_t*) &udp, &fd); - ASSERT(r == UV_EBADF); - - r = uv_pipe_init(loop, &pipe, 0); - ASSERT(r == 0); - r = uv_fileno((uv_handle_t*) &pipe, &fd); - ASSERT(r == UV_EBADF); - r = uv_pipe_bind(&pipe, TEST_PIPENAME); - ASSERT(r == 0); - r = uv_fileno((uv_handle_t*) &pipe, &fd); - ASSERT(r == 0); - uv_close((uv_handle_t*) &pipe, NULL); - r = uv_fileno((uv_handle_t*) &pipe, &fd); - ASSERT(r == UV_EBADF); - - tty_fd = get_tty_fd(); - if (tty_fd < 0) { - fprintf(stderr, "Cannot open a TTY fd"); - fflush(stderr); - } else { - r = uv_tty_init(loop, &tty, tty_fd, 0); - ASSERT(r == 0); - 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); - uv_close((uv_handle_t*) &tty, NULL); - r = uv_fileno((uv_handle_t*) &tty, &fd); - ASSERT(r == UV_EBADF); - ASSERT(!uv_is_readable((uv_stream_t*) &tty)); - ASSERT(!uv_is_writable((uv_stream_t*) &tty)); - } - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-homedir.c b/libuv/test/test-homedir.c deleted file mode 100644 index 508351f..0000000 --- a/libuv/test/test-homedir.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - -#define PATHMAX 4096 -#define SMALLPATH 1 - -TEST_IMPL(homedir) { - char homedir[PATHMAX]; - size_t len; - int r; - - /* Test the normal case */ - len = sizeof homedir; - homedir[0] = '\0'; - ASSERT(strlen(homedir) == 0); - r = uv_os_homedir(homedir, &len); - ASSERT(r == 0); - ASSERT(strlen(homedir) == len); - ASSERT(len > 0); - ASSERT(homedir[len] == '\0'); - -#ifdef _WIN32 - if (len == 3 && homedir[1] == ':') - ASSERT(homedir[2] == '\\'); - else - ASSERT(homedir[len - 1] != '\\'); -#else - if (len == 1) - ASSERT(homedir[0] == '/'); - else - ASSERT(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); - - /* Test invalid inputs */ - r = uv_os_homedir(NULL, &len); - ASSERT(r == UV_EINVAL); - r = uv_os_homedir(homedir, NULL); - ASSERT(r == UV_EINVAL); - len = 0; - r = uv_os_homedir(homedir, &len); - ASSERT(r == UV_EINVAL); - - return 0; -} diff --git a/libuv/test/test-hrtime.c b/libuv/test/test-hrtime.c deleted file mode 100644 index 9d461d9..0000000 --- a/libuv/test/test-hrtime.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#ifndef MILLISEC -# define MILLISEC 1000 -#endif - -#ifndef NANOSEC -# define NANOSEC ((uint64_t) 1e9) -#endif - - -TEST_IMPL(hrtime) { - uint64_t a, b, diff; - int i = 75; - while (i > 0) { - a = uv_hrtime(); - uv_sleep(45); - b = uv_hrtime(); - - diff = b - a; - - /* The windows Sleep() function has only a resolution of 10-20 ms. Check - * that the difference between the two hrtime values has a reasonable - * lower bound. - */ - ASSERT(diff > (uint64_t) 25 * NANOSEC / MILLISEC); - --i; - } - return 0; -} diff --git a/libuv/test/test-idle.c b/libuv/test/test-idle.c deleted file mode 100644 index f49d196..0000000 --- a/libuv/test/test-idle.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - - -static uv_idle_t idle_handle; -static uv_check_t check_handle; -static uv_timer_t timer_handle; - -static int idle_cb_called = 0; -static int check_cb_called = 0; -static int timer_cb_called = 0; -static int close_cb_called = 0; - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - - -static void timer_cb(uv_timer_t* handle) { - ASSERT(handle == &timer_handle); - - uv_close((uv_handle_t*) &idle_handle, close_cb); - uv_close((uv_handle_t*) &check_handle, close_cb); - uv_close((uv_handle_t*) &timer_handle, close_cb); - - timer_cb_called++; - fprintf(stderr, "timer_cb %d\n", timer_cb_called); - fflush(stderr); -} - - -static void idle_cb(uv_idle_t* handle) { - ASSERT(handle == &idle_handle); - - idle_cb_called++; - fprintf(stderr, "idle_cb %d\n", idle_cb_called); - fflush(stderr); -} - - -static void check_cb(uv_check_t* handle) { - ASSERT(handle == &check_handle); - - check_cb_called++; - fprintf(stderr, "check_cb %d\n", check_cb_called); - fflush(stderr); -} - - -TEST_IMPL(idle_starvation) { - int r; - - r = uv_idle_init(uv_default_loop(), &idle_handle); - ASSERT(r == 0); - r = uv_idle_start(&idle_handle, idle_cb); - ASSERT(r == 0); - - r = uv_check_init(uv_default_loop(), &check_handle); - ASSERT(r == 0); - r = uv_check_start(&check_handle, check_cb); - ASSERT(r == 0); - - r = uv_timer_init(uv_default_loop(), &timer_handle); - ASSERT(r == 0); - r = uv_timer_start(&timer_handle, timer_cb, 50, 0); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(idle_cb_called > 0); - ASSERT(timer_cb_called == 1); - ASSERT(close_cb_called == 3); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-idna.c b/libuv/test/test-idna.c deleted file mode 100644 index f4fad96..0000000 --- a/libuv/test/test-idna.c +++ /dev/null @@ -1,214 +0,0 @@ -/* Copyright The libuv project and contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" -#include "../src/idna.c" -#include - -TEST_IMPL(utf8_decode1) { - const char* p; - char b[32]; - int i; - - /* 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); - - /* 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); - - /* 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); - - /* 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); - - /* 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); - - /* 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); - - /* 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); - - /* 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); - } - - return 0; -} - -TEST_IMPL(utf8_decode1_overrun) { - const char* p; - char b[1]; - - /* Single byte. */ - p = b; - b[0] = 0x7F; - ASSERT_EQ(0x7F, uv__utf8_decode1(&p, b + 1)); - ASSERT_EQ(p, b + 1); - - /* Multi-byte. */ - p = b; - b[0] = 0xC0; - ASSERT_EQ((unsigned) -1, uv__utf8_decode1(&p, b + 1)); - ASSERT_EQ(p, b + 1); - - return 0; -} - -/* Doesn't work on z/OS because that platform uses EBCDIC, not ASCII. */ -#ifndef __MVS__ - -#define F(input, err) \ - do { \ - char d[256] = {0}; \ - static const char s[] = "" input ""; \ - ASSERT(err == uv__idna_toascii(s, s + sizeof(s) - 1, d, d + sizeof(d))); \ - } while (0) - -#define T(input, expected) \ - do { \ - long n; \ - char d1[256] = {0}; \ - 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)); \ - /* 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))); \ - } while (0) - -TEST_IMPL(idna_toascii) { - /* Illegal inputs. */ - F("\xC0\x80\xC1\x80", UV_EINVAL); /* Overlong UTF-8 sequence. */ - F("\xC0\x80\xC1\x80.com", UV_EINVAL); /* Overlong UTF-8 sequence. */ - /* No conversion. */ - T("", ""); - T(".", "."); - T(".com", ".com"); - T("example", "example"); - T("example-", "example-"); - T("straße.de", "xn--strae-oqa.de"); - /* Test cases adapted from punycode.js. Most are from RFC 3492. */ - T("foo.bar", "foo.bar"); - T("mañana.com", "xn--maana-pta.com"); - T("example.com.", "example.com."); - T("bücher.com", "xn--bcher-kva.com"); - T("café.com", "xn--caf-dma.com"); - T("café.café.com", "xn--caf-dma.xn--caf-dma.com"); - T("☃-⌘.com", "xn----dqo34k.com"); - T("퐀☃-⌘.com", "xn----dqo34kn65z.com"); - T("💩.la", "xn--ls8h.la"); - T("mañana.com", "xn--maana-pta.com"); - T("mañana。com", "xn--maana-pta.com"); - T("mañana.com", "xn--maana-pta.com"); - T("mañana。com", "xn--maana-pta.com"); - T("ü", "xn--tda"); - T(".ü", ".xn--tda"); - T("ü.ü", "xn--tda.xn--tda"); - T("ü.ü.", "xn--tda.xn--tda."); - T("üëäö♥", "xn--4can8av2009b"); - T("Willst du die Blüthe des frühen, die Früchte des späteren Jahres", - "xn--Willst du die Blthe des frhen, " - "die Frchte des spteren Jahres-x9e96lkal"); - T("ليهمابتكلموشعربي؟", "xn--egbpdaj6bu4bxfgehfvwxn"); - T("他们为什么不说中文", "xn--ihqwcrb4cv8a8dqg056pqjye"); - T("他們爲什麽不說中文", "xn--ihqwctvzc91f659drss3x8bo0yb"); - T("Pročprostěnemluvíčesky", "xn--Proprostnemluvesky-uyb24dma41a"); - T("למההםפשוטלאמדבריםעברית", "xn--4dbcagdahymbxekheh6e0a7fei0b"); - T("यहलोगहिन्दीक्योंनहींबोलसकतेहैं", - "xn--i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd"); - T("なぜみんな日本語を話してくれないのか", - "xn--n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa"); - T("세계의모든사람들이한국어를이해한다면얼마나좋을까", - "xn--989aomsvi5e83db1d2a355cv1e0vak1d" - "wrv93d5xbh15a0dt30a5jpsd879ccm6fea98c"); - T("почемужеонинеговорятпорусски", "xn--b1abfaaepdrnnbgefbadotcwatmq2g4l"); - T("PorquénopuedensimplementehablarenEspañol", - "xn--PorqunopuedensimplementehablarenEspaol-fmd56a"); - T("TạisaohọkhôngthểchỉnóitiếngViệt", - "xn--TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g"); - T("3年B組金八先生", "xn--3B-ww4c5e180e575a65lsy2b"); - T("安室奈美恵-with-SUPER-MONKEYS", - "xn---with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n"); - T("Hello-Another-Way-それぞれの場所", - "xn--Hello-Another-Way--fc4qua05auwb3674vfr0b"); - T("ひとつ屋根の下2", "xn--2-u9tlzr9756bt3uc0v"); - T("MajiでKoiする5秒前", "xn--MajiKoi5-783gue6qz075azm5e"); - T("パフィーdeルンバ", "xn--de-jg4avhby1noc0d"); - T("そのスピードで", "xn--d9juau41awczczp"); - T("-> $1.00 <-", "-> $1.00 <-"); - /* Test cases from https://unicode.org/reports/tr46/ */ - T("faß.de", "xn--fa-hia.de"); - T("βόλος.com", "xn--nxasmm1c.com"); - T("ශ්‍රී.com", "xn--10cl1a0b660p.com"); - T("نامه‌ای.com", "xn--mgba3gch31f060k.com"); - return 0; -} - -#undef T - -#endif /* __MVS__ */ diff --git a/libuv/test/test-ip4-addr.c b/libuv/test/test-ip4-addr.c deleted file mode 100644 index dfefb0f..0000000 --- a/libuv/test/test-ip4-addr.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - - -TEST_IMPL(ip4_addr) { - struct sockaddr_in addr; - char dst[16]; - - ASSERT(0 == uv_inet_ntop(AF_INET, "\xFF\xFF\xFF\xFF", dst, sizeof(dst))); - ASSERT(0 == strcmp(dst, "255.255.255.255")); - ASSERT(UV_ENOSPC == uv_inet_ntop(AF_INET, "\xFF\xFF\xFF\xFF", - dst, sizeof(dst) - 1)); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - ASSERT(0 == uv_ip4_addr("255.255.255.255", TEST_PORT, &addr)); - ASSERT(UV_EINVAL == uv_ip4_addr("255.255.255*000", TEST_PORT, &addr)); - ASSERT(UV_EINVAL == uv_ip4_addr("255.255.255.256", TEST_PORT, &addr)); - ASSERT(UV_EINVAL == uv_ip4_addr("2555.0.0.0", TEST_PORT, &addr)); - ASSERT(UV_EINVAL == uv_ip4_addr("255", TEST_PORT, &addr)); - -#ifdef SIN6_LEN - ASSERT(addr.sin_len == sizeof(addr)); -#endif - - /* for broken address family */ - ASSERT(UV_EAFNOSUPPORT == uv_inet_pton(42, "127.0.0.1", - &addr.sin_addr.s_addr)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-ip6-addr.c b/libuv/test/test-ip6-addr.c deleted file mode 100644 index 8036c4b..0000000 --- a/libuv/test/test-ip6-addr.c +++ /dev/null @@ -1,171 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -#ifdef __linux__ -# include -# include -#endif - - -TEST_IMPL(ip6_addr_link_local) { -#if defined(__CYGWIN__) || defined(__MSYS__) - /* FIXME: Does Cygwin support this? */ - RETURN_SKIP("FIXME: This test needs more investigation on Cygwin"); -#endif - char string_address[INET6_ADDRSTRLEN]; - uv_interface_address_t* addresses; - uv_interface_address_t* address; - struct sockaddr_in6 addr; - unsigned int iface_index; - const char* device_name; - /* 40 bytes address, 16 bytes device name, plus reserve. */ - char scoped_addr[128]; - size_t scoped_addr_len; - char interface_id[UV_IF_NAMESIZE]; - size_t interface_id_len; - int count; - int ix; - int r; - - ASSERT(0 == uv_interface_addresses(&addresses, &count)); - - for (ix = 0; ix < count; ix++) { - address = addresses + ix; - - if (address->address.address6.sin6_family != AF_INET6) - continue; - - ASSERT(0 == uv_inet_ntop(AF_INET6, - &address->address.address6.sin6_addr, - string_address, - sizeof(string_address))); - - /* Skip addresses that are not link-local. */ - if (strncmp(string_address, "fe80::", 6) != 0) - continue; - - iface_index = address->address.address6.sin6_scope_id; - device_name = address->name; - - scoped_addr_len = sizeof(scoped_addr); - ASSERT(0 == uv_if_indextoname(iface_index, scoped_addr, &scoped_addr_len)); -#ifndef _WIN32 - /* This assert fails on Windows, as Windows semantics are different. */ - ASSERT(0 == strcmp(device_name, scoped_addr)); -#endif - - interface_id_len = sizeof(interface_id); - r = uv_if_indextoiid(iface_index, interface_id, &interface_id_len); - ASSERT(0 == r); -#ifdef _WIN32 - /* On Windows, the interface identifier is the numeric string of the index. */ - ASSERT(strtoul(interface_id, NULL, 10) == iface_index); -#else - /* On Unix/Linux, the interface identifier is the interface device name. */ - ASSERT(0 == strcmp(device_name, interface_id)); -#endif - - snprintf(scoped_addr, - sizeof(scoped_addr), - "%s%%%s", - string_address, - interface_id); - - fprintf(stderr, "Testing link-local address %s " - "(iface_index: 0x%02x, device_name: %s)\n", - scoped_addr, - iface_index, - device_name); - fflush(stderr); - - ASSERT(0 == uv_ip6_addr(scoped_addr, TEST_PORT, &addr)); - fprintf(stderr, "Got scope_id 0x%02x\n", addr.sin6_scope_id); - fflush(stderr); - ASSERT(iface_index == addr.sin6_scope_id); - } - - uv_free_interface_addresses(addresses, count); - - scoped_addr_len = sizeof(scoped_addr); - ASSERT(0 != uv_if_indextoname((unsigned int)-1, scoped_addr, &scoped_addr_len)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -#define GOOD_ADDR_LIST(X) \ - X("::") \ - X("::1") \ - X("fe80::1") \ - X("fe80::") \ - X("fe80::2acf:daff:fedd:342a") \ - X("fe80:0:0:0:2acf:daff:fedd:342a") \ - X("fe80:0:0:0:2acf:daff:1.2.3.4") \ - X("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") \ - -#define BAD_ADDR_LIST(X) \ - X(":::1") \ - X("abcde::1") \ - X("fe80:0:0:0:2acf:daff:fedd:342a:5678") \ - X("fe80:0:0:0:2acf:daff:abcd:1.2.3.4") \ - X("fe80:0:0:2acf:daff:1.2.3.4.5") \ - X("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255.255") \ - -#define TEST_GOOD(ADDR) \ - ASSERT(0 == uv_inet_pton(AF_INET6, ADDR, &addr)); \ - ASSERT(0 == uv_inet_pton(AF_INET6, ADDR "%en1", &addr)); \ - ASSERT(0 == uv_inet_pton(AF_INET6, ADDR "%%%%", &addr)); \ - ASSERT(0 == uv_inet_pton(AF_INET6, ADDR "%en1:1.2.3.4", &addr)); \ - -#define TEST_BAD(ADDR) \ - ASSERT(0 != uv_inet_pton(AF_INET6, ADDR, &addr)); \ - ASSERT(0 != uv_inet_pton(AF_INET6, ADDR "%en1", &addr)); \ - ASSERT(0 != uv_inet_pton(AF_INET6, ADDR "%%%%", &addr)); \ - ASSERT(0 != uv_inet_pton(AF_INET6, ADDR "%en1:1.2.3.4", &addr)); \ - -TEST_IMPL(ip6_pton) { - struct in6_addr addr; - - GOOD_ADDR_LIST(TEST_GOOD) - BAD_ADDR_LIST(TEST_BAD) - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#undef GOOD_ADDR_LIST -#undef BAD_ADDR_LIST - -TEST_IMPL(ip6_sin6_len) { - struct sockaddr_in6 s; - ASSERT_EQ(0, uv_ip6_addr("::", 0, &s)); -#ifdef SIN6_LEN - ASSERT(s.sin6_len == sizeof(s)); -#endif - return 0; -} diff --git a/libuv/test/test-ipc-heavy-traffic-deadlock-bug.c b/libuv/test/test-ipc-heavy-traffic-deadlock-bug.c deleted file mode 100644 index 89b977d..0000000 --- a/libuv/test/test-ipc-heavy-traffic-deadlock-bug.c +++ /dev/null @@ -1,159 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" -#include "uv.h" - -#include - -/* See test-ipc.c */ -void spawn_helper(uv_pipe_t* channel, - uv_process_t* process, - const char* helper); - -#define NUM_WRITES 256 -#define BUFFERS_PER_WRITE 3 -#define BUFFER_SIZE 0x2000 /* 8 kb. */ -#define BUFFER_CONTENT 42 - -#define XFER_SIZE (NUM_WRITES * BUFFERS_PER_WRITE * BUFFER_SIZE) - -struct write_info { - uv_write_t write_req; - char buffers[BUFFER_SIZE][BUFFERS_PER_WRITE]; -}; - -static uv_shutdown_t shutdown_req; - -static size_t bytes_written; -static size_t bytes_read; - -static void write_cb(uv_write_t* req, int status) { - struct write_info* write_info = - container_of(req, struct write_info, write_req); - ASSERT(status == 0); - bytes_written += BUFFERS_PER_WRITE * BUFFER_SIZE; - free(write_info); -} - -static void shutdown_cb(uv_shutdown_t* req, int status) { - ASSERT(status == 0 || status == UV_ENOTCONN); - uv_close((uv_handle_t*) req->handle, NULL); -} - -static void do_write(uv_stream_t* handle) { - struct write_info* write_info; - uv_buf_t bufs[BUFFERS_PER_WRITE]; - size_t i; - int r; - - write_info = malloc(sizeof *write_info); - ASSERT_NOT_NULL(write_info); - - for (i = 0; i < BUFFERS_PER_WRITE; i++) { - memset(&write_info->buffers[i], BUFFER_CONTENT, BUFFER_SIZE); - bufs[i] = uv_buf_init(write_info->buffers[i], BUFFER_SIZE); - } - - r = uv_write( - &write_info->write_req, handle, bufs, BUFFERS_PER_WRITE, write_cb); - ASSERT(r == 0); -} - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - buf->base = malloc(suggested_size); - buf->len = (int) suggested_size; -} - -#ifndef _WIN32 -#include -#include -#endif - -static void read_cb(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf) { - ssize_t i; - int r; - - ASSERT(nread >= 0); - bytes_read += nread; - - for (i = 0; i < nread; i++) - ASSERT(buf->base[i] == BUFFER_CONTENT); - free(buf->base); - - if (bytes_read >= XFER_SIZE) { - r = uv_read_stop(handle); - ASSERT(r == 0); - r = uv_shutdown(&shutdown_req, handle, shutdown_cb); - ASSERT(r == 0); - } -} - -static void do_writes_and_reads(uv_stream_t* handle) { - size_t i; - int r; - - bytes_written = 0; - bytes_read = 0; - - for (i = 0; i < NUM_WRITES; i++) { - do_write(handle); - } - - r = uv_read_start(handle, alloc_cb, read_cb); - ASSERT(r == 0); - - r = uv_run(handle->loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(bytes_written == XFER_SIZE); - ASSERT(bytes_read == XFER_SIZE); -} - -TEST_IMPL(ipc_heavy_traffic_deadlock_bug) { - uv_pipe_t pipe; - uv_process_t process; - - spawn_helper(&pipe, &process, "ipc_helper_heavy_traffic_deadlock_bug"); - do_writes_and_reads((uv_stream_t*) &pipe); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -int ipc_helper_heavy_traffic_deadlock_bug(void) { - uv_pipe_t pipe; - int r; - - r = uv_pipe_init(uv_default_loop(), &pipe, 1); - ASSERT(r == 0); - r = uv_pipe_open(&pipe, 0); - ASSERT(r == 0); - - notify_parent_process(); - do_writes_and_reads((uv_stream_t*) &pipe); - uv_sleep(100); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-ipc-send-recv.c b/libuv/test/test-ipc-send-recv.c deleted file mode 100644 index 12d4e33..0000000 --- a/libuv/test/test-ipc-send-recv.c +++ /dev/null @@ -1,429 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -/* See test-ipc.c */ -void spawn_helper(uv_pipe_t* channel, - uv_process_t* process, - const char* helper); - -void ipc_send_recv_helper_threadproc(void* arg); - -union handles { - uv_handle_t handle; - uv_stream_t stream; - uv_pipe_t pipe; - uv_tcp_t tcp; - uv_tty_t tty; -}; - -struct test_ctx { - uv_pipe_t channel; - uv_connect_t connect_req; - uv_write_t write_req; - uv_write_t write_req2; - uv_handle_type expected_type; - union handles send; - union handles send2; - union handles recv; - union handles recv2; -}; - -struct echo_ctx { - uv_pipe_t listen; - uv_pipe_t channel; - uv_write_t write_req; - uv_write_t write_req2; - uv_handle_type expected_type; - union handles recv; - union handles recv2; -}; - -static struct test_ctx ctx; -static struct echo_ctx ctx2; - -/* Used in write2_cb to decide if we need to cleanup or not */ -static int is_child_process; -static int is_in_process; -static int read_cb_count; -static int recv_cb_count; -static int write2_cb_called; - - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - /* we're not actually reading anything so a small buffer is okay */ - static char slab[8]; - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void recv_cb(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - uv_handle_type pending; - uv_pipe_t* pipe; - int r; - union handles* recv; - - pipe = (uv_pipe_t*) handle; - ASSERT(pipe == &ctx.channel); - - do { - if (++recv_cb_count == 1) { - recv = &ctx.recv; - } else { - recv = &ctx.recv2; - } - - /* Depending on the OS, the final recv_cb can be called after - * the child process has terminated which can result in nread - * being UV_EOF instead of the number of bytes read. Since - * the other end of the pipe has closed this UV_EOF is an - * acceptable value. */ - if (nread == UV_EOF) { - /* UV_EOF is only acceptable for the final recv_cb call */ - ASSERT(recv_cb_count == 2); - } else { - ASSERT(nread >= 0); - ASSERT(uv_pipe_pending_count(pipe) > 0); - - pending = uv_pipe_pending_type(pipe); - ASSERT(pending == ctx.expected_type); - - if (pending == UV_NAMED_PIPE) - r = uv_pipe_init(ctx.channel.loop, &recv->pipe, 0); - else if (pending == UV_TCP) - r = uv_tcp_init(ctx.channel.loop, &recv->tcp); - else - abort(); - ASSERT(r == 0); - - r = uv_accept(handle, &recv->stream); - ASSERT(r == 0); - } - } while (uv_pipe_pending_count(pipe) > 0); - - /* Close after two writes received */ - if (recv_cb_count == 2) { - uv_close((uv_handle_t*)&ctx.channel, NULL); - } -} - -static void connect_cb(uv_connect_t* req, int status) { - int r; - uv_buf_t buf; - - ASSERT(req == &ctx.connect_req); - ASSERT(status == 0); - - buf = uv_buf_init(".", 1); - r = uv_write2(&ctx.write_req, - (uv_stream_t*)&ctx.channel, - &buf, 1, - &ctx.send.stream, - NULL); - ASSERT(r == 0); - - /* Perform two writes to the same pipe to make sure that on Windows we are - * not running into issue 505: - * https://github.com/libuv/libuv/issues/505 */ - buf = uv_buf_init(".", 1); - r = uv_write2(&ctx.write_req2, - (uv_stream_t*)&ctx.channel, - &buf, 1, - &ctx.send2.stream, - NULL); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*)&ctx.channel, alloc_cb, recv_cb); - ASSERT(r == 0); -} - -static int run_test(int inprocess) { - uv_process_t process; - uv_thread_t tid; - int r; - - if (inprocess) { - r = uv_thread_create(&tid, ipc_send_recv_helper_threadproc, (void *) 42); - ASSERT(r == 0); - - uv_sleep(1000); - - r = uv_pipe_init(uv_default_loop(), &ctx.channel, 1); - ASSERT(r == 0); - - uv_pipe_connect(&ctx.connect_req, &ctx.channel, TEST_PIPENAME_3, connect_cb); - } else { - spawn_helper(&ctx.channel, &process, "ipc_send_recv_helper"); - - connect_cb(&ctx.connect_req, 0); - } - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(recv_cb_count == 2); - - if (inprocess) { - r = uv_thread_join(&tid); - ASSERT(r == 0); - } - - return 0; -} - -static int run_ipc_send_recv_pipe(int inprocess) { - int r; - - ctx.expected_type = UV_NAMED_PIPE; - - r = uv_pipe_init(uv_default_loop(), &ctx.send.pipe, 1); - ASSERT(r == 0); - - r = uv_pipe_bind(&ctx.send.pipe, TEST_PIPENAME); - ASSERT(r == 0); - - r = uv_pipe_init(uv_default_loop(), &ctx.send2.pipe, 1); - ASSERT(r == 0); - - r = uv_pipe_bind(&ctx.send2.pipe, TEST_PIPENAME_2); - ASSERT(r == 0); - - r = run_test(inprocess); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(ipc_send_recv_pipe) { -#if defined(NO_SEND_HANDLE_ON_PIPE) - RETURN_SKIP(NO_SEND_HANDLE_ON_PIPE); -#endif - return run_ipc_send_recv_pipe(0); -} - -TEST_IMPL(ipc_send_recv_pipe_inprocess) { -#if defined(NO_SEND_HANDLE_ON_PIPE) - RETURN_SKIP(NO_SEND_HANDLE_ON_PIPE); -#endif - return run_ipc_send_recv_pipe(1); -} - -static int run_ipc_send_recv_tcp(int inprocess) { - struct sockaddr_in addr; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - ctx.expected_type = UV_TCP; - - r = uv_tcp_init(uv_default_loop(), &ctx.send.tcp); - ASSERT(r == 0); - - r = uv_tcp_init(uv_default_loop(), &ctx.send2.tcp); - ASSERT(r == 0); - - r = uv_tcp_bind(&ctx.send.tcp, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_tcp_bind(&ctx.send2.tcp, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = run_test(inprocess); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(ipc_send_recv_tcp) { -#if defined(NO_SEND_HANDLE_ON_PIPE) - RETURN_SKIP(NO_SEND_HANDLE_ON_PIPE); -#endif - return run_ipc_send_recv_tcp(0); -} - -TEST_IMPL(ipc_send_recv_tcp_inprocess) { -#if defined(NO_SEND_HANDLE_ON_PIPE) - RETURN_SKIP(NO_SEND_HANDLE_ON_PIPE); -#endif - return run_ipc_send_recv_tcp(1); -} - - -/* Everything here runs in a child process or second thread. */ - -static void write2_cb(uv_write_t* req, int status) { - ASSERT(status == 0); - - /* After two successful writes in the child process, allow the child - * process to be closed. */ - if (++write2_cb_called == 2 && (is_child_process || is_in_process)) { - uv_close(&ctx2.recv.handle, NULL); - uv_close(&ctx2.recv2.handle, NULL); - uv_close((uv_handle_t*)&ctx2.channel, NULL); - uv_close((uv_handle_t*)&ctx2.listen, NULL); - } -} - -static void read_cb(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* rdbuf) { - uv_buf_t wrbuf; - uv_pipe_t* pipe; - uv_handle_type pending; - int r; - union handles* recv; - uv_write_t* write_req; - - if (nread == UV_EOF || nread == UV_ECONNABORTED) { - return; - } - - pipe = (uv_pipe_t*) handle; - do { - if (++read_cb_count == 2) { - recv = &ctx2.recv; - write_req = &ctx2.write_req; - } else { - recv = &ctx2.recv2; - write_req = &ctx2.write_req2; - } - - ASSERT(pipe == &ctx2.channel); - ASSERT(nread >= 0); - ASSERT(uv_pipe_pending_count(pipe) > 0); - - pending = uv_pipe_pending_type(pipe); - ASSERT(pending == UV_NAMED_PIPE || pending == UV_TCP); - - if (pending == UV_NAMED_PIPE) - r = uv_pipe_init(ctx2.channel.loop, &recv->pipe, 0); - else if (pending == UV_TCP) - r = uv_tcp_init(ctx2.channel.loop, &recv->tcp); - else - abort(); - ASSERT(r == 0); - - r = uv_accept(handle, &recv->stream); - ASSERT(r == 0); - - wrbuf = uv_buf_init(".", 1); - r = uv_write2(write_req, - (uv_stream_t*)&ctx2.channel, - &wrbuf, - 1, - &recv->stream, - write2_cb); - ASSERT(r == 0); - } while (uv_pipe_pending_count(pipe) > 0); -} - -static void send_recv_start(void) { - int r; - ASSERT(1 == uv_is_readable((uv_stream_t*)&ctx2.channel)); - ASSERT(1 == uv_is_writable((uv_stream_t*)&ctx2.channel)); - ASSERT(0 == uv_is_closing((uv_handle_t*)&ctx2.channel)); - - r = uv_read_start((uv_stream_t*)&ctx2.channel, alloc_cb, read_cb); - ASSERT(r == 0); -} - -static void listen_cb(uv_stream_t* handle, int status) { - int r; - ASSERT(handle == (uv_stream_t*)&ctx2.listen); - ASSERT(status == 0); - - r = uv_accept((uv_stream_t*)&ctx2.listen, (uv_stream_t*)&ctx2.channel); - ASSERT(r == 0); - - send_recv_start(); -} - -int run_ipc_send_recv_helper(uv_loop_t* loop, int inprocess) { - int r; - - is_in_process = inprocess; - - memset(&ctx2, 0, sizeof(ctx2)); - - r = uv_pipe_init(loop, &ctx2.listen, 0); - ASSERT(r == 0); - - r = uv_pipe_init(loop, &ctx2.channel, 1); - ASSERT(r == 0); - - if (inprocess) { - r = uv_pipe_bind(&ctx2.listen, TEST_PIPENAME_3); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*)&ctx2.listen, SOMAXCONN, listen_cb); - ASSERT(r == 0); - } else { - r = uv_pipe_open(&ctx2.channel, 0); - ASSERT(r == 0); - - send_recv_start(); - } - - notify_parent_process(); - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - return 0; -} - -/* stdin is a duplex channel over which a handle is sent. - * We receive it and send it back where it came from. - */ -int ipc_send_recv_helper(void) { - int r; - - r = run_ipc_send_recv_helper(uv_default_loop(), 0); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -void ipc_send_recv_helper_threadproc(void* arg) { - int r; - uv_loop_t loop; - - r = uv_loop_init(&loop); - ASSERT(r == 0); - - r = run_ipc_send_recv_helper(&loop, 1); - ASSERT(r == 0); - - r = uv_loop_close(&loop); - ASSERT(r == 0); -} diff --git a/libuv/test/test-ipc.c b/libuv/test/test-ipc.c deleted file mode 100644 index 68a0e1b..0000000 --- a/libuv/test/test-ipc.c +++ /dev/null @@ -1,984 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -static uv_pipe_t channel; -static uv_tcp_t tcp_server; -static uv_tcp_t tcp_server2; -static uv_tcp_t tcp_connection; - -static int exit_cb_called; -static int read_cb_called; -static int tcp_write_cb_called; -static int tcp_read_cb_called; -static int on_pipe_read_called; -static int local_conn_accepted; -static int remote_conn_accepted; -static int tcp_server_listening; -static uv_write_t write_req; -static uv_write_t write_req2; -static uv_write_t conn_notify_req; -static int close_cb_called; -static int connection_accepted; -static int tcp_conn_read_cb_called; -static int tcp_conn_write_cb_called; -static int closed_handle_data_read; -static int closed_handle_write; -static int send_zero_write; - -typedef struct { - uv_connect_t conn_req; - uv_write_t tcp_write_req; - uv_tcp_t conn; -} tcp_conn; - -#define CONN_COUNT 100 -#define BACKLOG 128 -#define LARGE_SIZE 100000 - -static uv_buf_t large_buf; -static char buffer[LARGE_SIZE]; -static uv_write_t write_reqs[300]; -static int write_reqs_completed; - -static unsigned int write_until_data_queued(void); -static void send_handle_and_close(void); - - -static void close_server_conn_cb(uv_handle_t* handle) { - free(handle); -} - - -static void on_connection(uv_stream_t* server, int status) { - uv_tcp_t* conn; - int r; - - if (!local_conn_accepted) { - /* Accept the connection and close it. Also and close the server. */ - ASSERT_EQ(status, 0); - ASSERT_PTR_EQ(&tcp_server, server); - - conn = malloc(sizeof(*conn)); - ASSERT_NOT_NULL(conn); - r = uv_tcp_init(server->loop, conn); - ASSERT_EQ(r, 0); - - r = uv_accept(server, (uv_stream_t*)conn); - ASSERT_EQ(r, 0); - - uv_close((uv_handle_t*)conn, close_server_conn_cb); - uv_close((uv_handle_t*)server, NULL); - local_conn_accepted = 1; - } -} - - -static void exit_cb(uv_process_t* process, - int64_t exit_status, - int term_signal) { - printf("exit_cb\n"); - exit_cb_called++; - ASSERT_EQ(exit_status, 0); - ASSERT_EQ(term_signal, 0); - uv_close((uv_handle_t*)process, NULL); -} - - -static void on_alloc(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - buf->base = malloc(suggested_size); - buf->len = suggested_size; -} - - -static void close_client_conn_cb(uv_handle_t* handle) { - tcp_conn* p = (tcp_conn*)handle->data; - free(p); -} - - -static void connect_cb(uv_connect_t* req, int status) { - uv_close((uv_handle_t*)req->handle, close_client_conn_cb); -} - - -static void make_many_connections(void) { - tcp_conn* conn; - struct sockaddr_in addr; - int r, i; - - for (i = 0; i < CONN_COUNT; i++) { - conn = malloc(sizeof(*conn)); - ASSERT_NOT_NULL(conn); - - r = uv_tcp_init(uv_default_loop(), &conn->conn); - ASSERT_EQ(r, 0); - ASSERT_EQ(0, uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_tcp_connect(&conn->conn_req, - (uv_tcp_t*) &conn->conn, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT_EQ(r, 0); - - conn->conn.data = conn; - } -} - - -static void on_read(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - int r; - uv_pipe_t* pipe; - uv_handle_type pending; - uv_buf_t outbuf; - - pipe = (uv_pipe_t*) handle; - - if (nread == 0) { - /* Everything OK, but nothing read. */ - free(buf->base); - return; - } - - if (nread < 0) { - if (nread == UV_EOF) { - free(buf->base); - return; - } - - printf("error recving on channel: %s\n", uv_strerror(nread)); - abort(); - } - - fprintf(stderr, "got %d bytes\n", (int)nread); - - pending = uv_pipe_pending_type(pipe); - if (!tcp_server_listening) { - ASSERT_EQ(1, uv_pipe_pending_count(pipe)); - ASSERT_GT(nread, 0); - ASSERT_NOT_NULL(buf->base); - ASSERT_NE(pending, UV_UNKNOWN_HANDLE); - read_cb_called++; - - /* Accept the pending TCP server, and start listening on it. */ - ASSERT_EQ(pending, UV_TCP); - r = uv_tcp_init(uv_default_loop(), &tcp_server); - ASSERT_EQ(r, 0); - - r = uv_accept((uv_stream_t*)pipe, (uv_stream_t*)&tcp_server); - ASSERT_EQ(r, 0); - - r = uv_listen((uv_stream_t*)&tcp_server, BACKLOG, on_connection); - ASSERT_EQ(r, 0); - - tcp_server_listening = 1; - - /* Make sure that the expected data is correctly multiplexed. */ - ASSERT_MEM_EQ("hello\n", buf->base, nread); - - outbuf = uv_buf_init("foobar\n", 7); - r = uv_write(&write_req, (uv_stream_t*)pipe, &outbuf, 1, NULL); - ASSERT_EQ(r, 0); - - /* Create a bunch of connections to get both servers to accept. */ - make_many_connections(); - } else if (memcmp("accepted_connection\n", buf->base, nread) == 0) { - /* Remote server has accepted a connection. Close the channel. */ - ASSERT_EQ(0, uv_pipe_pending_count(pipe)); - ASSERT_EQ(pending, UV_UNKNOWN_HANDLE); - remote_conn_accepted = 1; - uv_close((uv_handle_t*)&channel, NULL); - } - - free(buf->base); -} - -#ifdef _WIN32 -static void on_read_listen_after_bound_twice(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - int r; - uv_pipe_t* pipe; - uv_handle_type pending; - - pipe = (uv_pipe_t*) handle; - - if (nread == 0) { - /* Everything OK, but nothing read. */ - free(buf->base); - return; - } - - if (nread < 0) { - if (nread == UV_EOF) { - free(buf->base); - return; - } - - printf("error recving on channel: %s\n", uv_strerror(nread)); - abort(); - } - - fprintf(stderr, "got %d bytes\n", (int)nread); - - ASSERT_GT(uv_pipe_pending_count(pipe), 0); - pending = uv_pipe_pending_type(pipe); - ASSERT_GT(nread, 0); - ASSERT_NOT_NULL(buf->base); - ASSERT_NE(pending, UV_UNKNOWN_HANDLE); - read_cb_called++; - - if (read_cb_called == 1) { - /* Accept the first TCP server, and start listening on it. */ - ASSERT_EQ(pending, UV_TCP); - r = uv_tcp_init(uv_default_loop(), &tcp_server); - ASSERT_EQ(r, 0); - - r = uv_accept((uv_stream_t*)pipe, (uv_stream_t*)&tcp_server); - ASSERT_EQ(r, 0); - - r = uv_listen((uv_stream_t*)&tcp_server, BACKLOG, on_connection); - ASSERT_EQ(r, 0); - } else if (read_cb_called == 2) { - /* Accept the second TCP server, and start listening on it. */ - ASSERT_EQ(pending, UV_TCP); - r = uv_tcp_init(uv_default_loop(), &tcp_server2); - ASSERT_EQ(r, 0); - - r = uv_accept((uv_stream_t*)pipe, (uv_stream_t*)&tcp_server2); - ASSERT_EQ(r, 0); - - r = uv_listen((uv_stream_t*)&tcp_server2, BACKLOG, on_connection); - ASSERT_EQ(r, UV_EADDRINUSE); - - uv_close((uv_handle_t*)&tcp_server, NULL); - uv_close((uv_handle_t*)&tcp_server2, NULL); - ASSERT_EQ(0, uv_pipe_pending_count(pipe)); - uv_close((uv_handle_t*)&channel, NULL); - } - - free(buf->base); -} -#endif - -void spawn_helper(uv_pipe_t* channel, - uv_process_t* process, - const char* helper) { - uv_process_options_t options; - size_t exepath_size; - char exepath[1024]; - char* args[3]; - int r; - uv_stdio_container_t stdio[3]; - - r = uv_pipe_init(uv_default_loop(), channel, 1); - ASSERT_EQ(r, 0); - ASSERT_NE(channel->ipc, 0); - - exepath_size = sizeof(exepath); - r = uv_exepath(exepath, &exepath_size); - ASSERT_EQ(r, 0); - - exepath[exepath_size] = '\0'; - args[0] = exepath; - args[1] = (char*)helper; - args[2] = NULL; - - memset(&options, 0, sizeof(options)); - options.file = exepath; - options.args = args; - options.exit_cb = exit_cb; - options.stdio = stdio; - options.stdio_count = ARRAY_SIZE(stdio); - - stdio[0].flags = UV_CREATE_PIPE | UV_READABLE_PIPE | UV_WRITABLE_PIPE; - stdio[0].data.stream = (uv_stream_t*) channel; - stdio[1].flags = UV_INHERIT_FD; - stdio[1].data.fd = 1; - stdio[2].flags = UV_INHERIT_FD; - stdio[2].data.fd = 2; - - r = uv_spawn(uv_default_loop(), process, &options); - ASSERT_EQ(r, 0); -} - - -static void on_tcp_write(uv_write_t* req, int status) { - ASSERT_EQ(status, 0); - ASSERT_PTR_EQ(req->handle, &tcp_connection); - tcp_write_cb_called++; -} - - -static void on_read_alloc(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - buf->base = malloc(suggested_size); - buf->len = suggested_size; -} - - -static void on_tcp_read(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf) { - ASSERT_GT(nread, 0); - ASSERT_MEM_EQ("hello again\n", buf->base, nread); - ASSERT_PTR_EQ(tcp, &tcp_connection); - free(buf->base); - - tcp_read_cb_called++; - - uv_close((uv_handle_t*)tcp, NULL); - uv_close((uv_handle_t*)&channel, NULL); -} - - -static void on_read_connection(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - int r; - uv_buf_t outbuf; - uv_pipe_t* pipe; - uv_handle_type pending; - - pipe = (uv_pipe_t*) handle; - if (nread == 0) { - /* Everything OK, but nothing read. */ - free(buf->base); - return; - } - - if (nread < 0) { - if (nread == UV_EOF) { - free(buf->base); - return; - } - - printf("error recving on channel: %s\n", uv_strerror(nread)); - abort(); - } - - fprintf(stderr, "got %d bytes\n", (int)nread); - - ASSERT_EQ(1, uv_pipe_pending_count(pipe)); - pending = uv_pipe_pending_type(pipe); - - ASSERT_GT(nread, 0); - ASSERT_NOT_NULL(buf->base); - ASSERT_NE(pending, UV_UNKNOWN_HANDLE); - read_cb_called++; - - /* Accept the pending TCP connection */ - ASSERT_EQ(pending, UV_TCP); - r = uv_tcp_init(uv_default_loop(), &tcp_connection); - ASSERT_EQ(r, 0); - - r = uv_accept(handle, (uv_stream_t*)&tcp_connection); - ASSERT_EQ(r, 0); - - /* Make sure that the expected data is correctly multiplexed. */ - ASSERT_MEM_EQ("hello\n", buf->base, nread); - - /* Write/read to/from the connection */ - outbuf = uv_buf_init("world\n", 6); - r = uv_write(&write_req, (uv_stream_t*)&tcp_connection, &outbuf, 1, - on_tcp_write); - ASSERT_EQ(r, 0); - - r = uv_read_start((uv_stream_t*)&tcp_connection, on_read_alloc, on_tcp_read); - ASSERT_EQ(r, 0); - - free(buf->base); -} - - -#ifndef _WIN32 -static void on_read_closed_handle(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - if (nread == 0 || nread == UV_EOF) { - free(buf->base); - return; - } - - if (nread < 0) { - printf("error recving on channel: %s\n", uv_strerror(nread)); - abort(); - } - - closed_handle_data_read += nread; - free(buf->base); -} -#endif - - -static void on_read_send_zero(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - ASSERT(nread == 0 || nread == UV_EOF); - free(buf->base); -} - - -static int run_ipc_test(const char* helper, uv_read_cb read_cb) { - uv_process_t process; - int r; - - spawn_helper(&channel, &process, helper); - uv_read_start((uv_stream_t*)&channel, on_alloc, read_cb); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT_EQ(r, 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(ipc_listen_before_write) { -#if defined(NO_SEND_HANDLE_ON_PIPE) - RETURN_SKIP(NO_SEND_HANDLE_ON_PIPE); -#endif - int r = run_ipc_test("ipc_helper_listen_before_write", on_read); - ASSERT_EQ(local_conn_accepted, 1); - ASSERT_EQ(remote_conn_accepted, 1); - ASSERT_EQ(read_cb_called, 1); - ASSERT_EQ(exit_cb_called, 1); - return r; -} - - -TEST_IMPL(ipc_listen_after_write) { -#if defined(NO_SEND_HANDLE_ON_PIPE) - RETURN_SKIP(NO_SEND_HANDLE_ON_PIPE); -#endif - int r = run_ipc_test("ipc_helper_listen_after_write", on_read); - ASSERT_EQ(local_conn_accepted, 1); - ASSERT_EQ(remote_conn_accepted, 1); - ASSERT_EQ(read_cb_called, 1); - ASSERT_EQ(exit_cb_called, 1); - return r; -} - - -TEST_IMPL(ipc_tcp_connection) { -#if defined(NO_SEND_HANDLE_ON_PIPE) - RETURN_SKIP(NO_SEND_HANDLE_ON_PIPE); -#endif - int r = run_ipc_test("ipc_helper_tcp_connection", on_read_connection); - ASSERT_EQ(read_cb_called, 1); - ASSERT_EQ(tcp_write_cb_called, 1); - ASSERT_EQ(tcp_read_cb_called, 1); - ASSERT_EQ(exit_cb_called, 1); - return r; -} - -#ifndef _WIN32 -TEST_IMPL(ipc_closed_handle) { - int r; - r = run_ipc_test("ipc_helper_closed_handle", on_read_closed_handle); - ASSERT_EQ(r, 0); - return 0; -} -#endif - - -#ifdef _WIN32 -TEST_IMPL(listen_with_simultaneous_accepts) { - uv_tcp_t server; - int r; - struct sockaddr_in addr; - - ASSERT_EQ(0, uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT_EQ(r, 0); - - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT_EQ(r, 0); - - r = uv_tcp_simultaneous_accepts(&server, 1); - ASSERT_EQ(r, 0); - - r = uv_listen((uv_stream_t*)&server, SOMAXCONN, NULL); - ASSERT_EQ(r, 0); - ASSERT_EQ(server.reqs_pending, 32); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(listen_no_simultaneous_accepts) { - uv_tcp_t server; - int r; - struct sockaddr_in addr; - - ASSERT_EQ(0, uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT_EQ(r, 0); - - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT_EQ(r, 0); - - r = uv_tcp_simultaneous_accepts(&server, 0); - ASSERT_EQ(r, 0); - - r = uv_listen((uv_stream_t*)&server, SOMAXCONN, NULL); - ASSERT_EQ(r, 0); - ASSERT_EQ(server.reqs_pending, 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(ipc_listen_after_bind_twice) { -#if defined(NO_SEND_HANDLE_ON_PIPE) - RETURN_SKIP(NO_SEND_HANDLE_ON_PIPE); -#endif - int r = run_ipc_test("ipc_helper_bind_twice", on_read_listen_after_bound_twice); - ASSERT_EQ(read_cb_called, 2); - ASSERT_EQ(exit_cb_called, 1); - return r; -} -#endif - -TEST_IMPL(ipc_send_zero) { - int r; - r = run_ipc_test("ipc_helper_send_zero", on_read_send_zero); - ASSERT_EQ(r, 0); - return 0; -} - - -/* Everything here runs in a child process. */ - -static tcp_conn conn; - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - - -static void conn_notify_write_cb(uv_write_t* req, int status) { - uv_close((uv_handle_t*)&tcp_server, close_cb); - uv_close((uv_handle_t*)&channel, close_cb); -} - - -static void tcp_connection_write_cb(uv_write_t* req, int status) { - ASSERT_PTR_EQ(&conn.conn, req->handle); - uv_close((uv_handle_t*)req->handle, close_cb); - uv_close((uv_handle_t*)&channel, close_cb); - uv_close((uv_handle_t*)&tcp_server, close_cb); - tcp_conn_write_cb_called++; -} - - -static void closed_handle_large_write_cb(uv_write_t* req, int status) { - ASSERT_EQ(status, 0); - ASSERT(closed_handle_data_read = LARGE_SIZE); - if (++write_reqs_completed == ARRAY_SIZE(write_reqs)) { - write_reqs_completed = 0; - if (write_until_data_queued() > 0) - send_handle_and_close(); - } -} - - -static void closed_handle_write_cb(uv_write_t* req, int status) { - ASSERT_EQ(status, UV_EBADF); - closed_handle_write = 1; -} - - -static void send_zero_write_cb(uv_write_t* req, int status) { - ASSERT_EQ(status, 0); - send_zero_write++; -} - -static void on_tcp_child_process_read(uv_stream_t* tcp, - ssize_t nread, - const uv_buf_t* buf) { - uv_buf_t outbuf; - int r; - - if (nread < 0) { - if (nread == UV_EOF) { - free(buf->base); - return; - } - - printf("error recving on tcp connection: %s\n", uv_strerror(nread)); - abort(); - } - - ASSERT_GT(nread, 0); - ASSERT_MEM_EQ("world\n", buf->base, nread); - on_pipe_read_called++; - free(buf->base); - - /* Write to the socket */ - outbuf = uv_buf_init("hello again\n", 12); - r = uv_write(&conn.tcp_write_req, tcp, &outbuf, 1, tcp_connection_write_cb); - ASSERT_EQ(r, 0); - - tcp_conn_read_cb_called++; -} - - -static void connect_child_process_cb(uv_connect_t* req, int status) { - int r; - - ASSERT_EQ(status, 0); - r = uv_read_start(req->handle, on_read_alloc, on_tcp_child_process_read); - ASSERT_EQ(r, 0); -} - - -static void ipc_on_connection(uv_stream_t* server, int status) { - int r; - uv_buf_t buf; - - if (!connection_accepted) { - /* - * Accept the connection and close it. Also let the other - * side know. - */ - ASSERT_EQ(status, 0); - ASSERT_PTR_EQ(&tcp_server, server); - - r = uv_tcp_init(server->loop, &conn.conn); - ASSERT_EQ(r, 0); - - r = uv_accept(server, (uv_stream_t*)&conn.conn); - ASSERT_EQ(r, 0); - - uv_close((uv_handle_t*)&conn.conn, close_cb); - - buf = uv_buf_init("accepted_connection\n", 20); - r = uv_write2(&conn_notify_req, (uv_stream_t*)&channel, &buf, 1, - NULL, conn_notify_write_cb); - ASSERT_EQ(r, 0); - - connection_accepted = 1; - } -} - - -static void close_and_free_cb(uv_handle_t* handle) { - close_cb_called++; - free(handle); -} - -static void ipc_on_connection_tcp_conn(uv_stream_t* server, int status) { - int r; - uv_buf_t buf; - uv_tcp_t* conn; - - ASSERT_EQ(status, 0); - ASSERT_PTR_EQ(&tcp_server, server); - - conn = malloc(sizeof(*conn)); - ASSERT_NOT_NULL(conn); - - r = uv_tcp_init(server->loop, conn); - ASSERT_EQ(r, 0); - - r = uv_accept(server, (uv_stream_t*)conn); - ASSERT_EQ(r, 0); - - /* Send the accepted connection to the other process */ - buf = uv_buf_init("hello\n", 6); - r = uv_write2(&conn_notify_req, (uv_stream_t*)&channel, &buf, 1, - (uv_stream_t*)conn, NULL); - ASSERT_EQ(r, 0); - - r = uv_read_start((uv_stream_t*) conn, - on_read_alloc, - on_tcp_child_process_read); - ASSERT_EQ(r, 0); - - uv_close((uv_handle_t*)conn, close_and_free_cb); -} - - -int ipc_helper(int listen_after_write) { - /* - * This is launched from test-ipc.c. stdin is a duplex channel that we - * over which a handle will be transmitted. - */ - struct sockaddr_in addr; - int r; - uv_buf_t buf; - - ASSERT_EQ(0, uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - r = uv_pipe_init(uv_default_loop(), &channel, 1); - ASSERT_EQ(r, 0); - - uv_pipe_open(&channel, 0); - - ASSERT_EQ(1, uv_is_readable((uv_stream_t*) &channel)); - ASSERT_EQ(1, uv_is_writable((uv_stream_t*) &channel)); - ASSERT_EQ(0, uv_is_closing((uv_handle_t*) &channel)); - - r = uv_tcp_init(uv_default_loop(), &tcp_server); - ASSERT_EQ(r, 0); - - r = uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr, 0); - ASSERT_EQ(r, 0); - - if (!listen_after_write) { - r = uv_listen((uv_stream_t*)&tcp_server, BACKLOG, ipc_on_connection); - ASSERT_EQ(r, 0); - } - - buf = uv_buf_init("hello\n", 6); - r = uv_write2(&write_req, (uv_stream_t*)&channel, &buf, 1, - (uv_stream_t*)&tcp_server, NULL); - ASSERT_EQ(r, 0); - - if (listen_after_write) { - r = uv_listen((uv_stream_t*)&tcp_server, BACKLOG, ipc_on_connection); - ASSERT_EQ(r, 0); - } - - notify_parent_process(); - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT_EQ(r, 0); - - ASSERT_EQ(connection_accepted, 1); - ASSERT_EQ(close_cb_called, 3); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -int ipc_helper_tcp_connection(void) { - /* - * This is launched from test-ipc.c. stdin is a duplex channel - * over which a handle will be transmitted. - */ - - int r; - struct sockaddr_in addr; - - r = uv_pipe_init(uv_default_loop(), &channel, 1); - ASSERT_EQ(r, 0); - - uv_pipe_open(&channel, 0); - - ASSERT_EQ(1, uv_is_readable((uv_stream_t*) &channel)); - ASSERT_EQ(1, uv_is_writable((uv_stream_t*) &channel)); - ASSERT_EQ(0, uv_is_closing((uv_handle_t*) &channel)); - - r = uv_tcp_init(uv_default_loop(), &tcp_server); - ASSERT_EQ(r, 0); - - ASSERT_EQ(0, uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - r = uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr, 0); - ASSERT_EQ(r, 0); - - r = uv_listen((uv_stream_t*)&tcp_server, BACKLOG, ipc_on_connection_tcp_conn); - ASSERT_EQ(r, 0); - - /* Make a connection to the server */ - r = uv_tcp_init(uv_default_loop(), &conn.conn); - ASSERT_EQ(r, 0); - - ASSERT_EQ(0, uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_tcp_connect(&conn.conn_req, - (uv_tcp_t*) &conn.conn, - (const struct sockaddr*) &addr, - connect_child_process_cb); - ASSERT_EQ(r, 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT_EQ(r, 0); - - ASSERT_EQ(tcp_conn_read_cb_called, 1); - ASSERT_EQ(tcp_conn_write_cb_called, 1); - ASSERT_EQ(close_cb_called, 4); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -static unsigned int write_until_data_queued() { - unsigned int i; - int r; - - i = 0; - do { - r = uv_write(&write_reqs[i], - (uv_stream_t*)&channel, - &large_buf, - 1, - closed_handle_large_write_cb); - ASSERT_EQ(r, 0); - i++; - } while (channel.write_queue_size == 0 && - i < ARRAY_SIZE(write_reqs)); - - return channel.write_queue_size; -} - -static void send_handle_and_close() { - int r; - struct sockaddr_in addr; - - r = uv_tcp_init(uv_default_loop(), &tcp_server); - ASSERT_EQ(r, 0); - - ASSERT_EQ(0, uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - r = uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr, 0); - ASSERT_EQ(r, 0); - - r = uv_write2(&write_req, - (uv_stream_t*)&channel, - &large_buf, - 1, - (uv_stream_t*)&tcp_server, - closed_handle_write_cb); - ASSERT_EQ(r, 0); - - uv_close((uv_handle_t*)&tcp_server, NULL); -} - -int ipc_helper_closed_handle(void) { - int r; - - memset(buffer, '.', LARGE_SIZE); - large_buf = uv_buf_init(buffer, LARGE_SIZE); - - r = uv_pipe_init(uv_default_loop(), &channel, 1); - ASSERT_EQ(r, 0); - - uv_pipe_open(&channel, 0); - - ASSERT_EQ(1, uv_is_readable((uv_stream_t*) &channel)); - ASSERT_EQ(1, uv_is_writable((uv_stream_t*) &channel)); - ASSERT_EQ(0, uv_is_closing((uv_handle_t*) &channel)); - - if (write_until_data_queued() > 0) - send_handle_and_close(); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT_EQ(r, 0); - - ASSERT_EQ(closed_handle_write, 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -int ipc_helper_bind_twice(void) { - /* - * This is launched from test-ipc.c. stdin is a duplex channel - * over which two handles will be transmitted. - */ - struct sockaddr_in addr; - int r; - uv_buf_t buf; - - ASSERT_EQ(0, uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - r = uv_pipe_init(uv_default_loop(), &channel, 1); - ASSERT_EQ(r, 0); - - uv_pipe_open(&channel, 0); - - ASSERT_EQ(1, uv_is_readable((uv_stream_t*) &channel)); - ASSERT_EQ(1, uv_is_writable((uv_stream_t*) &channel)); - ASSERT_EQ(0, uv_is_closing((uv_handle_t*) &channel)); - - buf = uv_buf_init("hello\n", 6); - - r = uv_tcp_init(uv_default_loop(), &tcp_server); - ASSERT_EQ(r, 0); - r = uv_tcp_init(uv_default_loop(), &tcp_server2); - ASSERT_EQ(r, 0); - - r = uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr, 0); - ASSERT_EQ(r, 0); - r = uv_tcp_bind(&tcp_server2, (const struct sockaddr*) &addr, 0); - ASSERT_EQ(r, 0); - - r = uv_write2(&write_req, (uv_stream_t*)&channel, &buf, 1, - (uv_stream_t*)&tcp_server, NULL); - ASSERT_EQ(r, 0); - r = uv_write2(&write_req2, (uv_stream_t*)&channel, &buf, 1, - (uv_stream_t*)&tcp_server2, NULL); - ASSERT_EQ(r, 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT_EQ(r, 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -int ipc_helper_send_zero(void) { - int r; - uv_buf_t zero_buf; - - zero_buf = uv_buf_init(0, 0); - - r = uv_pipe_init(uv_default_loop(), &channel, 0); - ASSERT_EQ(r, 0); - - uv_pipe_open(&channel, 0); - - ASSERT_EQ(1, uv_is_readable((uv_stream_t*) &channel)); - ASSERT_EQ(1, uv_is_writable((uv_stream_t*) &channel)); - ASSERT_EQ(0, uv_is_closing((uv_handle_t*) &channel)); - - r = uv_write(&write_req, - (uv_stream_t*)&channel, - &zero_buf, - 1, - send_zero_write_cb); - - ASSERT_EQ(r, 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT_EQ(r, 0); - - ASSERT_EQ(send_zero_write, 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-list.h b/libuv/test/test-list.h deleted file mode 100644 index f8ed94b..0000000 --- a/libuv/test/test-list.h +++ /dev/null @@ -1,1158 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" - -TEST_DECLARE (platform_output) -TEST_DECLARE (callback_order) -TEST_DECLARE (close_order) -TEST_DECLARE (run_once) -TEST_DECLARE (run_nowait) -TEST_DECLARE (loop_alive) -TEST_DECLARE (loop_close) -TEST_DECLARE (loop_instant_close) -TEST_DECLARE (loop_stop) -TEST_DECLARE (loop_update_time) -TEST_DECLARE (loop_backend_timeout) -TEST_DECLARE (loop_configure) -TEST_DECLARE (default_loop_close) -TEST_DECLARE (barrier_1) -TEST_DECLARE (barrier_2) -TEST_DECLARE (barrier_3) -TEST_DECLARE (barrier_serial_thread) -TEST_DECLARE (barrier_serial_thread_single) -TEST_DECLARE (condvar_1) -TEST_DECLARE (condvar_2) -TEST_DECLARE (condvar_3) -TEST_DECLARE (condvar_4) -TEST_DECLARE (condvar_5) -TEST_DECLARE (semaphore_1) -TEST_DECLARE (semaphore_2) -TEST_DECLARE (semaphore_3) -TEST_DECLARE (tty) -#ifdef _WIN32 -TEST_DECLARE (tty_raw) -TEST_DECLARE (tty_empty_write) -TEST_DECLARE (tty_large_write) -TEST_DECLARE (tty_raw_cancel) -TEST_DECLARE (tty_duplicate_vt100_fn_key) -TEST_DECLARE (tty_duplicate_alt_modifier_key) -TEST_DECLARE (tty_composing_character) -TEST_DECLARE (tty_cursor_up) -TEST_DECLARE (tty_cursor_down) -TEST_DECLARE (tty_cursor_forward) -TEST_DECLARE (tty_cursor_back) -TEST_DECLARE (tty_cursor_next_line) -TEST_DECLARE (tty_cursor_previous_line) -TEST_DECLARE (tty_cursor_horizontal_move_absolute) -TEST_DECLARE (tty_cursor_move_absolute) -TEST_DECLARE (tty_hide_show_cursor) -TEST_DECLARE (tty_set_cursor_shape) -TEST_DECLARE (tty_erase) -TEST_DECLARE (tty_erase_line) -TEST_DECLARE (tty_set_style) -TEST_DECLARE (tty_save_restore_cursor_position) -TEST_DECLARE (tty_full_reset) -TEST_DECLARE (tty_escape_sequence_processing) -#endif -TEST_DECLARE (tty_file) -TEST_DECLARE (tty_pty) -TEST_DECLARE (stdio_over_pipes) -TEST_DECLARE (stdio_emulate_iocp) -TEST_DECLARE (ip6_pton) -TEST_DECLARE (ip6_sin6_len) -TEST_DECLARE (connect_unspecified) -TEST_DECLARE (ipc_heavy_traffic_deadlock_bug) -TEST_DECLARE (ipc_listen_before_write) -TEST_DECLARE (ipc_listen_after_write) -#ifndef _WIN32 -TEST_DECLARE (ipc_send_recv_pipe) -TEST_DECLARE (ipc_send_recv_pipe_inprocess) -#endif -TEST_DECLARE (ipc_send_recv_tcp) -TEST_DECLARE (ipc_send_recv_tcp_inprocess) -TEST_DECLARE (ipc_tcp_connection) -TEST_DECLARE (ipc_send_zero) -#ifndef _WIN32 -TEST_DECLARE (ipc_closed_handle) -#endif -TEST_DECLARE (tcp_alloc_cb_fail) -TEST_DECLARE (tcp_ping_pong) -TEST_DECLARE (tcp_ping_pong_vec) -TEST_DECLARE (tcp6_ping_pong) -TEST_DECLARE (tcp6_ping_pong_vec) -TEST_DECLARE (pipe_ping_pong) -TEST_DECLARE (pipe_ping_pong_vec) -TEST_DECLARE (delayed_accept) -TEST_DECLARE (multiple_listen) -#ifndef _WIN32 -TEST_DECLARE (tcp_write_after_connect) -#endif -TEST_DECLARE (tcp_writealot) -TEST_DECLARE (tcp_write_fail) -TEST_DECLARE (tcp_try_write) -TEST_DECLARE (tcp_try_write_error) -TEST_DECLARE (tcp_write_queue_order) -TEST_DECLARE (tcp_open) -TEST_DECLARE (tcp_open_twice) -TEST_DECLARE (tcp_open_bound) -TEST_DECLARE (tcp_open_connected) -TEST_DECLARE (tcp_connect_error_after_write) -TEST_DECLARE (tcp_shutdown_after_write) -TEST_DECLARE (tcp_bind_error_addrinuse_connect) -TEST_DECLARE (tcp_bind_error_addrinuse_listen) -TEST_DECLARE (tcp_bind_error_addrnotavail_1) -TEST_DECLARE (tcp_bind_error_addrnotavail_2) -TEST_DECLARE (tcp_bind_error_fault) -TEST_DECLARE (tcp_bind_error_inval) -TEST_DECLARE (tcp_bind_localhost_ok) -TEST_DECLARE (tcp_bind_invalid_flags) -TEST_DECLARE (tcp_bind_writable_flags) -TEST_DECLARE (tcp_listen_without_bind) -TEST_DECLARE (tcp_connect_error_fault) -TEST_DECLARE (tcp_connect_timeout) -TEST_DECLARE (tcp_local_connect_timeout) -TEST_DECLARE (tcp6_local_connect_timeout) -TEST_DECLARE (tcp_close_while_connecting) -TEST_DECLARE (tcp_close) -TEST_DECLARE (tcp_close_reset_accepted) -TEST_DECLARE (tcp_close_reset_accepted_after_shutdown) -TEST_DECLARE (tcp_close_reset_client) -TEST_DECLARE (tcp_close_reset_client_after_shutdown) -TEST_DECLARE (tcp_create_early) -TEST_DECLARE (tcp_create_early_bad_bind) -TEST_DECLARE (tcp_create_early_bad_domain) -TEST_DECLARE (tcp_create_early_accept) -#ifndef _WIN32 -TEST_DECLARE (tcp_close_accept) -TEST_DECLARE (tcp_oob) -#endif -TEST_DECLARE (tcp_flags) -TEST_DECLARE (tcp_write_to_half_open_connection) -TEST_DECLARE (tcp_unexpected_read) -TEST_DECLARE (tcp_read_stop) -TEST_DECLARE (tcp_read_stop_start) -TEST_DECLARE (tcp_bind6_error_addrinuse) -TEST_DECLARE (tcp_bind6_error_addrnotavail) -TEST_DECLARE (tcp_bind6_error_fault) -TEST_DECLARE (tcp_bind6_error_inval) -TEST_DECLARE (tcp_bind6_localhost_ok) -TEST_DECLARE (tcp_write_ready) -TEST_DECLARE (udp_alloc_cb_fail) -TEST_DECLARE (udp_bind) -TEST_DECLARE (udp_bind_reuseaddr) -TEST_DECLARE (udp_connect) -TEST_DECLARE (udp_create_early) -TEST_DECLARE (udp_create_early_bad_bind) -TEST_DECLARE (udp_create_early_bad_domain) -TEST_DECLARE (udp_send_and_recv) -TEST_DECLARE (udp_send_hang_loop) -TEST_DECLARE (udp_send_immediate) -TEST_DECLARE (udp_send_unreachable) -TEST_DECLARE (udp_mmsg) -TEST_DECLARE (udp_multicast_join) -TEST_DECLARE (udp_multicast_join6) -TEST_DECLARE (udp_multicast_ttl) -TEST_DECLARE (udp_multicast_interface) -TEST_DECLARE (udp_multicast_interface6) -TEST_DECLARE (udp_dgram_too_big) -TEST_DECLARE (udp_dual_stack) -TEST_DECLARE (udp_ipv6_only) -TEST_DECLARE (udp_options) -TEST_DECLARE (udp_options6) -TEST_DECLARE (udp_no_autobind) -TEST_DECLARE (udp_open) -TEST_DECLARE (udp_open_twice) -TEST_DECLARE (udp_open_bound) -TEST_DECLARE (udp_open_connect) -#ifndef _WIN32 -TEST_DECLARE (udp_send_unix) -#endif -TEST_DECLARE (udp_sendmmsg_error) -TEST_DECLARE (udp_try_send) -TEST_DECLARE (pipe_bind_error_addrinuse) -TEST_DECLARE (pipe_bind_error_addrnotavail) -TEST_DECLARE (pipe_bind_error_inval) -TEST_DECLARE (pipe_connect_multiple) -TEST_DECLARE (pipe_listen_without_bind) -TEST_DECLARE (pipe_connect_bad_name) -TEST_DECLARE (pipe_connect_to_file) -TEST_DECLARE (pipe_connect_on_prepare) -TEST_DECLARE (pipe_getsockname) -TEST_DECLARE (pipe_getsockname_abstract) -TEST_DECLARE (pipe_getsockname_blocking) -TEST_DECLARE (pipe_pending_instances) -TEST_DECLARE (pipe_sendmsg) -TEST_DECLARE (pipe_server_close) -TEST_DECLARE (connection_fail) -TEST_DECLARE (connection_fail_doesnt_auto_close) -TEST_DECLARE (shutdown_close_tcp) -TEST_DECLARE (shutdown_close_pipe) -TEST_DECLARE (shutdown_eof) -TEST_DECLARE (shutdown_simultaneous) -TEST_DECLARE (shutdown_twice) -TEST_DECLARE (callback_stack) -TEST_DECLARE (env_vars) -TEST_DECLARE (error_message) -TEST_DECLARE (sys_error) -TEST_DECLARE (timer) -TEST_DECLARE (timer_init) -TEST_DECLARE (timer_again) -TEST_DECLARE (timer_start_twice) -TEST_DECLARE (timer_order) -TEST_DECLARE (timer_huge_timeout) -TEST_DECLARE (timer_huge_repeat) -TEST_DECLARE (timer_run_once) -TEST_DECLARE (timer_from_check) -TEST_DECLARE (timer_is_closing) -TEST_DECLARE (timer_null_callback) -TEST_DECLARE (timer_early_check) -TEST_DECLARE (idle_starvation) -TEST_DECLARE (loop_handles) -TEST_DECLARE (get_loadavg) -TEST_DECLARE (walk_handles) -TEST_DECLARE (watcher_cross_stop) -TEST_DECLARE (ref) -TEST_DECLARE (idle_ref) -TEST_DECLARE (async_ref) -TEST_DECLARE (prepare_ref) -TEST_DECLARE (check_ref) -TEST_DECLARE (unref_in_prepare_cb) -TEST_DECLARE (timer_ref) -TEST_DECLARE (timer_ref2) -TEST_DECLARE (fs_event_ref) -TEST_DECLARE (fs_poll_ref) -TEST_DECLARE (tcp_ref) -TEST_DECLARE (tcp_ref2) -TEST_DECLARE (tcp_ref2b) -TEST_DECLARE (tcp_ref3) -TEST_DECLARE (tcp_ref4) -TEST_DECLARE (udp_ref) -TEST_DECLARE (udp_ref2) -TEST_DECLARE (udp_ref3) -TEST_DECLARE (pipe_ref) -TEST_DECLARE (pipe_ref2) -TEST_DECLARE (pipe_ref3) -TEST_DECLARE (pipe_ref4) -#ifndef _WIN32 -TEST_DECLARE (pipe_close_stdout_read_stdin) -#endif -TEST_DECLARE (pipe_set_non_blocking) -TEST_DECLARE (pipe_set_chmod) -TEST_DECLARE (process_ref) -TEST_DECLARE (process_priority) -TEST_DECLARE (has_ref) -TEST_DECLARE (active) -TEST_DECLARE (embed) -TEST_DECLARE (async) -TEST_DECLARE (async_null_cb) -TEST_DECLARE (eintr_handling) -TEST_DECLARE (get_currentexe) -TEST_DECLARE (process_title) -TEST_DECLARE (process_title_big_argv) -TEST_DECLARE (process_title_threadsafe) -TEST_DECLARE (cwd_and_chdir) -TEST_DECLARE (get_memory) -TEST_DECLARE (get_passwd) -TEST_DECLARE (handle_fileno) -TEST_DECLARE (homedir) -TEST_DECLARE (tmpdir) -TEST_DECLARE (hrtime) -TEST_DECLARE (getaddrinfo_fail) -TEST_DECLARE (getaddrinfo_fail_sync) -TEST_DECLARE (getaddrinfo_basic) -TEST_DECLARE (getaddrinfo_basic_sync) -TEST_DECLARE (getaddrinfo_concurrent) -TEST_DECLARE (gethostname) -TEST_DECLARE (getnameinfo_basic_ip4) -TEST_DECLARE (getnameinfo_basic_ip4_sync) -TEST_DECLARE (getnameinfo_basic_ip6) -TEST_DECLARE (getsockname_tcp) -TEST_DECLARE (getsockname_udp) -TEST_DECLARE (gettimeofday) -TEST_DECLARE (test_macros) -TEST_DECLARE (fail_always) -TEST_DECLARE (pass_always) -TEST_DECLARE (socket_buffer_size) -TEST_DECLARE (spawn_fails) -#ifndef _WIN32 -TEST_DECLARE (spawn_fails_check_for_waitpid_cleanup) -#endif -TEST_DECLARE (spawn_empty_env) -TEST_DECLARE (spawn_exit_code) -TEST_DECLARE (spawn_stdout) -TEST_DECLARE (spawn_stdin) -TEST_DECLARE (spawn_stdio_greater_than_3) -TEST_DECLARE (spawn_ignored_stdio) -TEST_DECLARE (spawn_and_kill) -TEST_DECLARE (spawn_detached) -TEST_DECLARE (spawn_and_kill_with_std) -TEST_DECLARE (spawn_and_ping) -TEST_DECLARE (spawn_preserve_env) -TEST_DECLARE (spawn_setuid_fails) -TEST_DECLARE (spawn_setgid_fails) -TEST_DECLARE (spawn_stdout_to_file) -TEST_DECLARE (spawn_stdout_and_stderr_to_file) -TEST_DECLARE (spawn_stdout_and_stderr_to_file2) -TEST_DECLARE (spawn_stdout_and_stderr_to_file_swap) -TEST_DECLARE (spawn_auto_unref) -TEST_DECLARE (spawn_closed_process_io) -TEST_DECLARE (spawn_reads_child_path) -TEST_DECLARE (spawn_inherit_streams) -TEST_DECLARE (spawn_quoted_path) -TEST_DECLARE (spawn_tcp_server) -TEST_DECLARE (fs_poll) -TEST_DECLARE (fs_poll_getpath) -TEST_DECLARE (fs_poll_close_request) -TEST_DECLARE (fs_poll_close_request_multi_start_stop) -TEST_DECLARE (fs_poll_close_request_multi_stop_start) -TEST_DECLARE (fs_poll_close_request_stop_when_active) -TEST_DECLARE (kill) -TEST_DECLARE (kill_invalid_signum) -TEST_DECLARE (fs_file_noent) -TEST_DECLARE (fs_file_nametoolong) -TEST_DECLARE (fs_file_loop) -TEST_DECLARE (fs_file_async) -TEST_DECLARE (fs_file_sync) -TEST_DECLARE (fs_file_write_null_buffer) -TEST_DECLARE (fs_async_dir) -TEST_DECLARE (fs_async_sendfile) -TEST_DECLARE (fs_async_sendfile_nodata) -TEST_DECLARE (fs_mkdtemp) -TEST_DECLARE (fs_mkstemp) -TEST_DECLARE (fs_fstat) -TEST_DECLARE (fs_access) -TEST_DECLARE (fs_chmod) -TEST_DECLARE (fs_copyfile) -TEST_DECLARE (fs_unlink_readonly) -#ifdef _WIN32 -TEST_DECLARE (fs_unlink_archive_readonly) -#endif -TEST_DECLARE (fs_chown) -TEST_DECLARE (fs_link) -TEST_DECLARE (fs_readlink) -TEST_DECLARE (fs_realpath) -TEST_DECLARE (fs_symlink) -TEST_DECLARE (fs_symlink_dir) -#ifdef _WIN32 -TEST_DECLARE (fs_symlink_junction) -TEST_DECLARE (fs_non_symlink_reparse_point) -TEST_DECLARE (fs_lstat_windows_store_apps) -TEST_DECLARE (fs_open_flags) -#endif -#if defined(_WIN32) && !defined(USING_UV_SHARED) -TEST_DECLARE (fs_fd_hash) -#endif -TEST_DECLARE (fs_utime) -TEST_DECLARE (fs_utime_round) -TEST_DECLARE (fs_futime) -TEST_DECLARE (fs_lutime) -TEST_DECLARE (fs_file_open_append) -TEST_DECLARE (fs_statfs) -TEST_DECLARE (fs_stat_missing_path) -TEST_DECLARE (fs_read_bufs) -TEST_DECLARE (fs_read_file_eof) -TEST_DECLARE (fs_event_watch_dir) -TEST_DECLARE (fs_event_watch_dir_recursive) -#ifdef _WIN32 -TEST_DECLARE (fs_event_watch_dir_short_path) -#endif -TEST_DECLARE (fs_event_watch_file) -TEST_DECLARE (fs_event_watch_file_exact_path) -TEST_DECLARE (fs_event_watch_file_twice) -TEST_DECLARE (fs_event_watch_file_current_dir) -#ifdef _WIN32 -TEST_DECLARE (fs_event_watch_file_root_dir) -#endif -TEST_DECLARE (fs_event_watch_invalid_path) -TEST_DECLARE (fs_event_no_callback_after_close) -TEST_DECLARE (fs_event_no_callback_on_close) -TEST_DECLARE (fs_event_immediate_close) -TEST_DECLARE (fs_event_close_with_pending_event) -TEST_DECLARE (fs_event_close_in_callback) -TEST_DECLARE (fs_event_start_and_close) -TEST_DECLARE (fs_event_error_reporting) -TEST_DECLARE (fs_event_getpath) -TEST_DECLARE (fs_scandir_empty_dir) -TEST_DECLARE (fs_scandir_non_existent_dir) -TEST_DECLARE (fs_scandir_file) -TEST_DECLARE (fs_open_dir) -TEST_DECLARE (fs_readdir_empty_dir) -TEST_DECLARE (fs_readdir_file) -TEST_DECLARE (fs_readdir_non_empty_dir) -TEST_DECLARE (fs_readdir_non_existing_dir) -TEST_DECLARE (fs_rename_to_existing_file) -TEST_DECLARE (fs_write_multiple_bufs) -TEST_DECLARE (fs_read_write_null_arguments) -TEST_DECLARE (get_osfhandle_valid_handle) -TEST_DECLARE (open_osfhandle_valid_handle) -TEST_DECLARE (fs_write_alotof_bufs) -TEST_DECLARE (fs_write_alotof_bufs_with_offset) -TEST_DECLARE (fs_partial_read) -TEST_DECLARE (fs_partial_write) -TEST_DECLARE (fs_file_pos_after_op_with_offset) -TEST_DECLARE (fs_null_req) -TEST_DECLARE (fs_read_dir) -#ifdef _WIN32 -TEST_DECLARE (fs_file_pos_write) -TEST_DECLARE (fs_file_pos_append) -TEST_DECLARE (fs_exclusive_sharing_mode) -TEST_DECLARE (fs_file_flag_no_buffering) -TEST_DECLARE (fs_open_readonly_acl) -TEST_DECLARE (fs_fchmod_archive_readonly) -TEST_DECLARE (fs_invalid_mkdir_name) -#endif -TEST_DECLARE (fs_get_system_error) -TEST_DECLARE (strscpy) -TEST_DECLARE (threadpool_queue_work_simple) -TEST_DECLARE (threadpool_queue_work_einval) -TEST_DECLARE (threadpool_multiple_event_loops) -TEST_DECLARE (threadpool_cancel_getaddrinfo) -TEST_DECLARE (threadpool_cancel_getnameinfo) -TEST_DECLARE (threadpool_cancel_random) -TEST_DECLARE (threadpool_cancel_work) -TEST_DECLARE (threadpool_cancel_fs) -TEST_DECLARE (threadpool_cancel_single) -TEST_DECLARE (thread_local_storage) -TEST_DECLARE (thread_stack_size) -TEST_DECLARE (thread_stack_size_explicit) -TEST_DECLARE (thread_mutex) -TEST_DECLARE (thread_mutex_recursive) -TEST_DECLARE (thread_rwlock) -TEST_DECLARE (thread_rwlock_trylock) -TEST_DECLARE (thread_create) -TEST_DECLARE (thread_equal) -TEST_DECLARE (dlerror) -#if (defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))) && \ - !defined(__sun) -TEST_DECLARE (poll_oob) -#endif -TEST_DECLARE (poll_duplex) -TEST_DECLARE (poll_unidirectional) -TEST_DECLARE (poll_close) -TEST_DECLARE (poll_bad_fdtype) -#ifdef __linux__ -TEST_DECLARE (poll_nested_epoll) -#endif -#ifdef UV_HAVE_KQUEUE -TEST_DECLARE (poll_nested_kqueue) -#endif -TEST_DECLARE (poll_multiple_handles) - -TEST_DECLARE (ip4_addr) -TEST_DECLARE (ip6_addr_link_local) - -TEST_DECLARE (poll_close_doesnt_corrupt_stack) -TEST_DECLARE (poll_closesocket) -TEST_DECLARE (close_fd) -TEST_DECLARE (closed_fd_events) -TEST_DECLARE (spawn_fs_open) -#ifdef _WIN32 -TEST_DECLARE (spawn_detect_pipe_name_collisions_on_windows) -#if !defined(USING_UV_SHARED) -TEST_DECLARE (argument_escaping) -TEST_DECLARE (environment_creation) -#endif -TEST_DECLARE (listen_with_simultaneous_accepts) -TEST_DECLARE (listen_no_simultaneous_accepts) -TEST_DECLARE (fs_stat_root) -TEST_DECLARE (spawn_with_an_odd_path) -TEST_DECLARE (ipc_listen_after_bind_twice) -TEST_DECLARE (win32_signum_number) -#else -TEST_DECLARE (emfile) -TEST_DECLARE (spawn_setuid_setgid) -TEST_DECLARE (we_get_signal) -TEST_DECLARE (we_get_signals) -TEST_DECLARE (we_get_signal_one_shot) -TEST_DECLARE (we_get_signals_mixed) -TEST_DECLARE (signal_multiple_loops) -TEST_DECLARE (signal_pending_on_close) -TEST_DECLARE (signal_close_loop_alive) -#endif -#ifdef __APPLE__ -TEST_DECLARE (osx_select) -TEST_DECLARE (osx_select_many_fds) -#endif -HELPER_DECLARE (tcp4_echo_server) -HELPER_DECLARE (tcp6_echo_server) -HELPER_DECLARE (udp4_echo_server) -HELPER_DECLARE (pipe_echo_server) - -TEST_DECLARE (queue_foreach_delete) - -TEST_DECLARE (random_async) -TEST_DECLARE (random_sync) - -TEST_DECLARE (handle_type_name) -TEST_DECLARE (req_type_name) -TEST_DECLARE (getters_setters) - -TEST_DECLARE (not_writable_after_shutdown) -TEST_DECLARE (not_readable_nor_writable_on_read_error) -TEST_DECLARE (not_readable_on_eof) - -#ifndef _WIN32 -TEST_DECLARE (fork_timer) -TEST_DECLARE (fork_socketpair) -TEST_DECLARE (fork_socketpair_started) -TEST_DECLARE (fork_signal_to_child) -TEST_DECLARE (fork_signal_to_child_closed) -#ifndef __APPLE__ /* This is forbidden in a fork child: The process has forked - and you cannot use this CoreFoundation functionality - safely. You MUST exec(). */ -TEST_DECLARE (fork_fs_events_child) -TEST_DECLARE (fork_fs_events_child_dir) -TEST_DECLARE (fork_fs_events_file_parent_child) -#endif -#ifndef __MVS__ -TEST_DECLARE (fork_threadpool_queue_work_simple) -#endif -#endif - -TEST_DECLARE (idna_toascii) -TEST_DECLARE (utf8_decode1) -TEST_DECLARE (utf8_decode1_overrun) -TEST_DECLARE (uname) - -TEST_DECLARE (metrics_idle_time) -TEST_DECLARE (metrics_idle_time_thread) -TEST_DECLARE (metrics_idle_time_zero) - -TASK_LIST_START - TEST_ENTRY_CUSTOM (platform_output, 0, 1, 5000) - -#if 0 - TEST_ENTRY (callback_order) -#endif - TEST_ENTRY (test_macros) - TEST_ENTRY (close_order) - TEST_ENTRY (run_once) - TEST_ENTRY (run_nowait) - TEST_ENTRY (loop_alive) - TEST_ENTRY (loop_close) - TEST_ENTRY (loop_instant_close) - TEST_ENTRY (loop_stop) - TEST_ENTRY (loop_update_time) - TEST_ENTRY (loop_backend_timeout) - TEST_ENTRY (loop_configure) - TEST_ENTRY (default_loop_close) - TEST_ENTRY (barrier_1) - TEST_ENTRY (barrier_2) - TEST_ENTRY (barrier_3) - TEST_ENTRY (barrier_serial_thread) - TEST_ENTRY (barrier_serial_thread_single) - TEST_ENTRY (condvar_1) - TEST_ENTRY (condvar_2) - TEST_ENTRY (condvar_3) - TEST_ENTRY (condvar_4) - TEST_ENTRY (condvar_5) - TEST_ENTRY (semaphore_1) - TEST_ENTRY (semaphore_2) - TEST_ENTRY (semaphore_3) - - TEST_ENTRY (pipe_connect_bad_name) - TEST_ENTRY (pipe_connect_to_file) - TEST_ENTRY (pipe_connect_on_prepare) - - TEST_ENTRY (pipe_server_close) -#ifndef _WIN32 - TEST_ENTRY (pipe_close_stdout_read_stdin) -#endif - /* Seems to be either about 0.5s or 5s, depending on the OS. */ - TEST_ENTRY_CUSTOM (pipe_set_non_blocking, 0, 0, 20000) - TEST_ENTRY (pipe_set_chmod) - TEST_ENTRY (tty) -#ifdef _WIN32 - TEST_ENTRY (tty_raw) - TEST_ENTRY (tty_empty_write) - TEST_ENTRY (tty_large_write) - TEST_ENTRY (tty_raw_cancel) - TEST_ENTRY (tty_duplicate_vt100_fn_key) - TEST_ENTRY (tty_duplicate_alt_modifier_key) - TEST_ENTRY (tty_composing_character) - TEST_ENTRY (tty_cursor_up) - TEST_ENTRY (tty_cursor_down) - TEST_ENTRY (tty_cursor_forward) - TEST_ENTRY (tty_cursor_back) - TEST_ENTRY (tty_cursor_next_line) - TEST_ENTRY (tty_cursor_previous_line) - TEST_ENTRY (tty_cursor_horizontal_move_absolute) - TEST_ENTRY (tty_cursor_move_absolute) - TEST_ENTRY (tty_hide_show_cursor) - TEST_ENTRY (tty_set_cursor_shape) - TEST_ENTRY (tty_erase) - TEST_ENTRY (tty_erase_line) - TEST_ENTRY (tty_set_style) - TEST_ENTRY (tty_save_restore_cursor_position) - TEST_ENTRY (tty_full_reset) - TEST_ENTRY (tty_escape_sequence_processing) -#endif - TEST_ENTRY (tty_file) - TEST_ENTRY (tty_pty) - TEST_ENTRY (stdio_over_pipes) - TEST_ENTRY (stdio_emulate_iocp) - TEST_ENTRY (ip6_pton) - TEST_ENTRY (ip6_sin6_len) - TEST_ENTRY (connect_unspecified) - TEST_ENTRY (ipc_heavy_traffic_deadlock_bug) - TEST_ENTRY (ipc_listen_before_write) - TEST_ENTRY (ipc_listen_after_write) -#ifndef _WIN32 - TEST_ENTRY (ipc_send_recv_pipe) - TEST_ENTRY (ipc_send_recv_pipe_inprocess) -#endif - TEST_ENTRY (ipc_send_recv_tcp) - TEST_ENTRY (ipc_send_recv_tcp_inprocess) - TEST_ENTRY (ipc_tcp_connection) - TEST_ENTRY (ipc_send_zero) -#ifndef _WIN32 - TEST_ENTRY (ipc_closed_handle) -#endif - - TEST_ENTRY (tcp_alloc_cb_fail) - - TEST_ENTRY (tcp_ping_pong) - TEST_HELPER (tcp_ping_pong, tcp4_echo_server) - - TEST_ENTRY (tcp_ping_pong_vec) - TEST_HELPER (tcp_ping_pong_vec, tcp4_echo_server) - - TEST_ENTRY (tcp6_ping_pong) - TEST_HELPER (tcp6_ping_pong, tcp6_echo_server) - - TEST_ENTRY (tcp6_ping_pong_vec) - TEST_HELPER (tcp6_ping_pong_vec, tcp6_echo_server) - - TEST_ENTRY (pipe_ping_pong) - TEST_HELPER (pipe_ping_pong, pipe_echo_server) - - TEST_ENTRY (pipe_ping_pong_vec) - TEST_HELPER (pipe_ping_pong_vec, pipe_echo_server) - - TEST_ENTRY (delayed_accept) - TEST_ENTRY (multiple_listen) - -#ifndef _WIN32 - TEST_ENTRY (tcp_write_after_connect) -#endif - -#ifdef __MVS__ - TEST_ENTRY_CUSTOM (tcp_writealot, 0, 0, 20000) -#else - TEST_ENTRY (tcp_writealot) -#endif - TEST_HELPER (tcp_writealot, tcp4_echo_server) - - TEST_ENTRY (tcp_write_fail) - TEST_HELPER (tcp_write_fail, tcp4_echo_server) - - TEST_ENTRY (tcp_try_write) - TEST_ENTRY (tcp_try_write_error) - - TEST_ENTRY (tcp_write_queue_order) - - TEST_ENTRY (tcp_open) - TEST_HELPER (tcp_open, tcp4_echo_server) - TEST_ENTRY (tcp_open_twice) - TEST_ENTRY (tcp_open_bound) - TEST_ENTRY (tcp_open_connected) - TEST_HELPER (tcp_open_connected, tcp4_echo_server) - TEST_ENTRY (tcp_write_ready) - TEST_HELPER (tcp_write_ready, tcp4_echo_server) - - TEST_ENTRY (tcp_shutdown_after_write) - TEST_HELPER (tcp_shutdown_after_write, tcp4_echo_server) - - TEST_ENTRY (tcp_connect_error_after_write) - TEST_ENTRY (tcp_bind_error_addrinuse_connect) - /* tcp4_echo_server steals the port. It needs to be a separate process - * because libuv sets setsockopt(SO_REUSEADDR) that lets you steal an - * existing bind if it originates from the same process. - */ - TEST_HELPER (tcp_bind_error_addrinuse_connect, tcp4_echo_server) - TEST_ENTRY (tcp_bind_error_addrinuse_listen) - TEST_ENTRY (tcp_bind_error_addrnotavail_1) - TEST_ENTRY (tcp_bind_error_addrnotavail_2) - TEST_ENTRY (tcp_bind_error_fault) - TEST_ENTRY (tcp_bind_error_inval) - TEST_ENTRY (tcp_bind_localhost_ok) - TEST_ENTRY (tcp_bind_invalid_flags) - TEST_ENTRY (tcp_bind_writable_flags) - TEST_ENTRY (tcp_listen_without_bind) - TEST_ENTRY (tcp_connect_error_fault) - TEST_ENTRY (tcp_connect_timeout) - TEST_ENTRY (tcp_local_connect_timeout) - TEST_ENTRY (tcp6_local_connect_timeout) - TEST_ENTRY (tcp_close_while_connecting) - TEST_ENTRY (tcp_close) - TEST_ENTRY (tcp_close_reset_accepted) - TEST_ENTRY (tcp_close_reset_accepted_after_shutdown) - TEST_ENTRY (tcp_close_reset_client) - TEST_ENTRY (tcp_close_reset_client_after_shutdown) - TEST_ENTRY (tcp_create_early) - TEST_ENTRY (tcp_create_early_bad_bind) - TEST_ENTRY (tcp_create_early_bad_domain) - TEST_ENTRY (tcp_create_early_accept) -#ifndef _WIN32 - TEST_ENTRY (tcp_close_accept) - TEST_ENTRY (tcp_oob) -#endif - TEST_ENTRY (tcp_flags) - TEST_ENTRY (tcp_write_to_half_open_connection) - TEST_ENTRY (tcp_unexpected_read) - - TEST_ENTRY (tcp_read_stop) - TEST_HELPER (tcp_read_stop, tcp4_echo_server) - - TEST_ENTRY (tcp_read_stop_start) - - TEST_ENTRY (tcp_bind6_error_addrinuse) - TEST_ENTRY (tcp_bind6_error_addrnotavail) - TEST_ENTRY (tcp_bind6_error_fault) - TEST_ENTRY (tcp_bind6_error_inval) - TEST_ENTRY (tcp_bind6_localhost_ok) - - TEST_ENTRY (udp_alloc_cb_fail) - TEST_ENTRY (udp_bind) - TEST_ENTRY (udp_bind_reuseaddr) - TEST_ENTRY (udp_connect) - TEST_ENTRY (udp_create_early) - TEST_ENTRY (udp_create_early_bad_bind) - TEST_ENTRY (udp_create_early_bad_domain) - TEST_ENTRY (udp_send_and_recv) - TEST_ENTRY (udp_send_hang_loop) - TEST_ENTRY (udp_send_immediate) - TEST_ENTRY (udp_send_unreachable) - TEST_ENTRY (udp_dgram_too_big) - TEST_ENTRY (udp_dual_stack) - TEST_ENTRY (udp_ipv6_only) - TEST_ENTRY (udp_options) - TEST_ENTRY (udp_options6) - TEST_ENTRY (udp_no_autobind) - TEST_ENTRY (udp_mmsg) - TEST_ENTRY (udp_multicast_interface) - TEST_ENTRY (udp_multicast_interface6) - TEST_ENTRY (udp_multicast_join) - TEST_ENTRY (udp_multicast_join6) - TEST_ENTRY (udp_multicast_ttl) - TEST_ENTRY (udp_sendmmsg_error) - TEST_ENTRY (udp_try_send) - - TEST_ENTRY (udp_open) - TEST_ENTRY (udp_open_twice) - TEST_ENTRY (udp_open_bound) - TEST_ENTRY (udp_open_connect) -#ifndef _WIN32 - TEST_ENTRY (udp_send_unix) -#endif - - TEST_ENTRY (pipe_bind_error_addrinuse) - TEST_ENTRY (pipe_bind_error_addrnotavail) - TEST_ENTRY (pipe_bind_error_inval) - TEST_ENTRY (pipe_connect_multiple) - TEST_ENTRY (pipe_listen_without_bind) - TEST_ENTRY (pipe_getsockname) - TEST_ENTRY (pipe_getsockname_abstract) - TEST_ENTRY (pipe_getsockname_blocking) - TEST_ENTRY (pipe_pending_instances) - TEST_ENTRY (pipe_sendmsg) - - TEST_ENTRY (connection_fail) - TEST_ENTRY (connection_fail_doesnt_auto_close) - - TEST_ENTRY (shutdown_close_tcp) - TEST_HELPER (shutdown_close_tcp, tcp4_echo_server) - TEST_ENTRY (shutdown_close_pipe) - TEST_HELPER (shutdown_close_pipe, pipe_echo_server) - - TEST_ENTRY (shutdown_eof) - TEST_HELPER (shutdown_eof, tcp4_echo_server) - - TEST_ENTRY (shutdown_simultaneous) - TEST_HELPER (shutdown_simultaneous, tcp4_echo_server) - - TEST_ENTRY (shutdown_twice) - TEST_HELPER (shutdown_twice, tcp4_echo_server) - - TEST_ENTRY (callback_stack) - TEST_HELPER (callback_stack, tcp4_echo_server) - - TEST_ENTRY (env_vars) - - TEST_ENTRY (error_message) - TEST_ENTRY (sys_error) - - TEST_ENTRY (timer) - TEST_ENTRY (timer_init) - TEST_ENTRY (timer_again) - TEST_ENTRY (timer_start_twice) - TEST_ENTRY (timer_order) - TEST_ENTRY (timer_huge_timeout) - TEST_ENTRY (timer_huge_repeat) - TEST_ENTRY (timer_run_once) - TEST_ENTRY (timer_from_check) - TEST_ENTRY (timer_is_closing) - TEST_ENTRY (timer_null_callback) - TEST_ENTRY (timer_early_check) - - TEST_ENTRY (idle_starvation) - - TEST_ENTRY (ref) - TEST_ENTRY (idle_ref) - TEST_ENTRY (fs_poll_ref) - TEST_ENTRY (async_ref) - TEST_ENTRY (prepare_ref) - TEST_ENTRY (check_ref) - TEST_ENTRY (unref_in_prepare_cb) - TEST_ENTRY (timer_ref) - TEST_ENTRY (timer_ref2) - TEST_ENTRY (fs_event_ref) - TEST_ENTRY (tcp_ref) - TEST_ENTRY (tcp_ref2) - TEST_ENTRY (tcp_ref2b) - TEST_ENTRY (tcp_ref3) - TEST_HELPER (tcp_ref3, tcp4_echo_server) - TEST_ENTRY (tcp_ref4) - TEST_HELPER (tcp_ref4, tcp4_echo_server) - TEST_ENTRY (udp_ref) - TEST_ENTRY (udp_ref2) - TEST_ENTRY (udp_ref3) - TEST_HELPER (udp_ref3, udp4_echo_server) - TEST_ENTRY (pipe_ref) - TEST_ENTRY (pipe_ref2) - TEST_ENTRY (pipe_ref3) - TEST_HELPER (pipe_ref3, pipe_echo_server) - TEST_ENTRY (pipe_ref4) - TEST_HELPER (pipe_ref4, pipe_echo_server) - TEST_ENTRY (process_ref) - TEST_ENTRY (process_priority) - TEST_ENTRY (has_ref) - - TEST_ENTRY (loop_handles) - TEST_ENTRY (walk_handles) - - TEST_ENTRY (watcher_cross_stop) - - TEST_ENTRY (active) - - TEST_ENTRY (embed) - - TEST_ENTRY (async) - TEST_ENTRY (async_null_cb) - TEST_ENTRY (eintr_handling) - - TEST_ENTRY (get_currentexe) - - TEST_ENTRY (process_title) - TEST_ENTRY (process_title_big_argv) - TEST_ENTRY (process_title_threadsafe) - - TEST_ENTRY (cwd_and_chdir) - - TEST_ENTRY (get_memory) - - TEST_ENTRY (get_passwd) - - TEST_ENTRY (get_loadavg) - - TEST_ENTRY (handle_fileno) - - TEST_ENTRY (homedir) - - TEST_ENTRY (tmpdir) - - TEST_ENTRY_CUSTOM (hrtime, 0, 0, 20000) - - TEST_ENTRY_CUSTOM (getaddrinfo_fail, 0, 0, 10000) - TEST_ENTRY_CUSTOM (getaddrinfo_fail_sync, 0, 0, 10000) - - TEST_ENTRY (getaddrinfo_basic) - TEST_ENTRY (getaddrinfo_basic_sync) - TEST_ENTRY (getaddrinfo_concurrent) - - TEST_ENTRY (gethostname) - - TEST_ENTRY (getnameinfo_basic_ip4) - TEST_ENTRY (getnameinfo_basic_ip4_sync) - TEST_ENTRY (getnameinfo_basic_ip6) - - TEST_ENTRY (getsockname_tcp) - TEST_ENTRY (getsockname_udp) - - TEST_ENTRY (gettimeofday) - - TEST_ENTRY (poll_duplex) - TEST_ENTRY (poll_unidirectional) - TEST_ENTRY (poll_close) - TEST_ENTRY (poll_bad_fdtype) -#if (defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))) && \ - !defined(__sun) - TEST_ENTRY (poll_oob) -#endif - -#ifdef __linux__ - TEST_ENTRY (poll_nested_epoll) -#endif -#ifdef UV_HAVE_KQUEUE - TEST_ENTRY (poll_nested_kqueue) -#endif - TEST_ENTRY (poll_multiple_handles) - - TEST_ENTRY (socket_buffer_size) - - TEST_ENTRY (spawn_fails) -#ifndef _WIN32 - TEST_ENTRY (spawn_fails_check_for_waitpid_cleanup) -#endif - TEST_ENTRY (spawn_empty_env) - TEST_ENTRY (spawn_exit_code) - TEST_ENTRY (spawn_stdout) - TEST_ENTRY (spawn_stdin) - TEST_ENTRY (spawn_stdio_greater_than_3) - TEST_ENTRY (spawn_ignored_stdio) - TEST_ENTRY (spawn_and_kill) - TEST_ENTRY (spawn_detached) - TEST_ENTRY (spawn_and_kill_with_std) - TEST_ENTRY (spawn_and_ping) - TEST_ENTRY (spawn_preserve_env) - TEST_ENTRY (spawn_setuid_fails) - TEST_ENTRY (spawn_setgid_fails) - TEST_ENTRY (spawn_stdout_to_file) - TEST_ENTRY (spawn_stdout_and_stderr_to_file) - TEST_ENTRY (spawn_stdout_and_stderr_to_file2) - TEST_ENTRY (spawn_stdout_and_stderr_to_file_swap) - TEST_ENTRY (spawn_auto_unref) - TEST_ENTRY (spawn_closed_process_io) - TEST_ENTRY (spawn_reads_child_path) - TEST_ENTRY (spawn_inherit_streams) - TEST_ENTRY (spawn_quoted_path) - TEST_ENTRY (spawn_tcp_server) - TEST_ENTRY (fs_poll) - TEST_ENTRY (fs_poll_getpath) - TEST_ENTRY (fs_poll_close_request) - TEST_ENTRY (fs_poll_close_request_multi_start_stop) - TEST_ENTRY (fs_poll_close_request_multi_stop_start) - TEST_ENTRY (fs_poll_close_request_stop_when_active) - TEST_ENTRY (kill) - TEST_ENTRY (kill_invalid_signum) - - TEST_ENTRY (poll_close_doesnt_corrupt_stack) - TEST_ENTRY (poll_closesocket) - TEST_ENTRY (close_fd) - TEST_ENTRY (closed_fd_events) - TEST_ENTRY (spawn_fs_open) -#ifdef _WIN32 - TEST_ENTRY (spawn_detect_pipe_name_collisions_on_windows) -#if !defined(USING_UV_SHARED) - TEST_ENTRY (argument_escaping) - TEST_ENTRY (environment_creation) -# endif - TEST_ENTRY (listen_with_simultaneous_accepts) - TEST_ENTRY (listen_no_simultaneous_accepts) - TEST_ENTRY (fs_stat_root) - TEST_ENTRY (spawn_with_an_odd_path) - TEST_ENTRY (ipc_listen_after_bind_twice) - TEST_ENTRY (win32_signum_number) -#else - TEST_ENTRY (emfile) - TEST_ENTRY (spawn_setuid_setgid) - TEST_ENTRY (we_get_signal) - TEST_ENTRY (we_get_signals) - TEST_ENTRY (we_get_signal_one_shot) - TEST_ENTRY (we_get_signals_mixed) - TEST_ENTRY (signal_multiple_loops) - TEST_ENTRY (signal_pending_on_close) - TEST_ENTRY (signal_close_loop_alive) -#endif - -#ifdef __APPLE__ - TEST_ENTRY (osx_select) - TEST_ENTRY (osx_select_many_fds) -#endif - - TEST_ENTRY (fs_file_noent) - TEST_ENTRY (fs_file_nametoolong) - TEST_ENTRY (fs_file_loop) - TEST_ENTRY (fs_file_async) - TEST_ENTRY (fs_file_sync) - TEST_ENTRY (fs_file_write_null_buffer) - TEST_ENTRY (fs_async_dir) - TEST_ENTRY (fs_async_sendfile) - TEST_ENTRY (fs_async_sendfile_nodata) - TEST_ENTRY (fs_mkdtemp) - TEST_ENTRY (fs_mkstemp) - TEST_ENTRY (fs_fstat) - TEST_ENTRY (fs_access) - TEST_ENTRY (fs_chmod) - TEST_ENTRY (fs_copyfile) - TEST_ENTRY (fs_unlink_readonly) -#ifdef _WIN32 - TEST_ENTRY (fs_unlink_archive_readonly) -#endif - TEST_ENTRY (fs_chown) - TEST_ENTRY (fs_utime) - TEST_ENTRY (fs_utime_round) - TEST_ENTRY (fs_futime) - TEST_ENTRY (fs_lutime) - TEST_ENTRY (fs_readlink) - TEST_ENTRY (fs_realpath) - TEST_ENTRY (fs_symlink) - TEST_ENTRY (fs_symlink_dir) -#ifdef _WIN32 - TEST_ENTRY (fs_symlink_junction) - TEST_ENTRY (fs_non_symlink_reparse_point) - TEST_ENTRY (fs_lstat_windows_store_apps) - TEST_ENTRY (fs_open_flags) -#endif -#if defined(_WIN32) && !defined(USING_UV_SHARED) - TEST_ENTRY (fs_fd_hash) -#endif - TEST_ENTRY (fs_statfs) - TEST_ENTRY (fs_stat_missing_path) - TEST_ENTRY (fs_read_bufs) - TEST_ENTRY (fs_read_file_eof) - TEST_ENTRY (fs_file_open_append) - TEST_ENTRY (fs_event_watch_dir) - TEST_ENTRY (fs_event_watch_dir_recursive) -#ifdef _WIN32 - TEST_ENTRY (fs_event_watch_dir_short_path) -#endif - TEST_ENTRY (fs_event_watch_file) - TEST_ENTRY (fs_event_watch_file_exact_path) - TEST_ENTRY (fs_event_watch_file_twice) - TEST_ENTRY (fs_event_watch_file_current_dir) -#ifdef _WIN32 - TEST_ENTRY (fs_event_watch_file_root_dir) -#endif - TEST_ENTRY (fs_event_watch_invalid_path) - TEST_ENTRY (fs_event_no_callback_after_close) - TEST_ENTRY (fs_event_no_callback_on_close) - TEST_ENTRY (fs_event_immediate_close) - TEST_ENTRY (fs_event_close_with_pending_event) - TEST_ENTRY (fs_event_close_in_callback) - TEST_ENTRY (fs_event_start_and_close) - TEST_ENTRY_CUSTOM (fs_event_error_reporting, 0, 0, 60000) - TEST_ENTRY (fs_event_getpath) - TEST_ENTRY (fs_scandir_empty_dir) - TEST_ENTRY (fs_scandir_non_existent_dir) - TEST_ENTRY (fs_scandir_file) - TEST_ENTRY (fs_open_dir) - TEST_ENTRY (fs_readdir_empty_dir) - TEST_ENTRY (fs_readdir_file) - TEST_ENTRY (fs_readdir_non_empty_dir) - TEST_ENTRY (fs_readdir_non_existing_dir) - TEST_ENTRY (fs_rename_to_existing_file) - TEST_ENTRY (fs_write_multiple_bufs) - TEST_ENTRY (fs_write_alotof_bufs) - TEST_ENTRY (fs_write_alotof_bufs_with_offset) - TEST_ENTRY (fs_partial_read) - TEST_ENTRY (fs_partial_write) - TEST_ENTRY (fs_read_write_null_arguments) - TEST_ENTRY (fs_file_pos_after_op_with_offset) - TEST_ENTRY (fs_null_req) - TEST_ENTRY (fs_read_dir) -#ifdef _WIN32 - TEST_ENTRY (fs_file_pos_write) - TEST_ENTRY (fs_file_pos_append) - TEST_ENTRY (fs_exclusive_sharing_mode) - TEST_ENTRY (fs_file_flag_no_buffering) - TEST_ENTRY (fs_open_readonly_acl) - TEST_ENTRY (fs_fchmod_archive_readonly) - TEST_ENTRY (fs_invalid_mkdir_name) -#endif - TEST_ENTRY (fs_get_system_error) - TEST_ENTRY (get_osfhandle_valid_handle) - TEST_ENTRY (open_osfhandle_valid_handle) - TEST_ENTRY (strscpy) - TEST_ENTRY (threadpool_queue_work_simple) - TEST_ENTRY (threadpool_queue_work_einval) - TEST_ENTRY_CUSTOM (threadpool_multiple_event_loops, 0, 0, 60000) - TEST_ENTRY (threadpool_cancel_getaddrinfo) - TEST_ENTRY (threadpool_cancel_getnameinfo) - TEST_ENTRY (threadpool_cancel_random) - TEST_ENTRY (threadpool_cancel_work) - TEST_ENTRY (threadpool_cancel_fs) - TEST_ENTRY (threadpool_cancel_single) - TEST_ENTRY (thread_local_storage) - TEST_ENTRY (thread_stack_size) - TEST_ENTRY (thread_stack_size_explicit) - TEST_ENTRY (thread_mutex) - TEST_ENTRY (thread_mutex_recursive) - TEST_ENTRY (thread_rwlock) - TEST_ENTRY (thread_rwlock_trylock) - TEST_ENTRY (thread_create) - TEST_ENTRY (thread_equal) - TEST_ENTRY (dlerror) - TEST_ENTRY (ip4_addr) - TEST_ENTRY (ip6_addr_link_local) - - TEST_ENTRY (queue_foreach_delete) - - TEST_ENTRY (random_async) - TEST_ENTRY (random_sync) - - TEST_ENTRY (handle_type_name) - TEST_ENTRY (req_type_name) - TEST_ENTRY (getters_setters) - -#ifndef _WIN32 - TEST_ENTRY (fork_timer) - TEST_ENTRY (fork_socketpair) - TEST_ENTRY (fork_socketpair_started) - TEST_ENTRY (fork_signal_to_child) - TEST_ENTRY (fork_signal_to_child_closed) -#ifndef __APPLE__ - TEST_ENTRY (fork_fs_events_child) - TEST_ENTRY (fork_fs_events_child_dir) - TEST_ENTRY (fork_fs_events_file_parent_child) -#endif -#ifndef __MVS__ - TEST_ENTRY (fork_threadpool_queue_work_simple) -#endif -#endif - - TEST_ENTRY (utf8_decode1) - TEST_ENTRY (utf8_decode1_overrun) - TEST_ENTRY (uname) - -/* Doesn't work on z/OS because that platform uses EBCDIC, not ASCII. */ -#ifndef __MVS__ - TEST_ENTRY (idna_toascii) -#endif - - TEST_ENTRY (not_writable_after_shutdown) - TEST_HELPER (not_writable_after_shutdown, tcp4_echo_server) - TEST_ENTRY (not_readable_nor_writable_on_read_error) - TEST_HELPER (not_readable_nor_writable_on_read_error, tcp4_echo_server) - TEST_ENTRY (not_readable_on_eof) - TEST_HELPER (not_readable_on_eof, tcp4_echo_server) - - TEST_ENTRY (metrics_idle_time) - TEST_ENTRY (metrics_idle_time_thread) - TEST_ENTRY (metrics_idle_time_zero) - -#if 0 - /* These are for testing the test runner. */ - TEST_ENTRY (fail_always) - TEST_ENTRY (pass_always) -#endif -TASK_LIST_END diff --git a/libuv/test/test-loop-alive.c b/libuv/test/test-loop-alive.c deleted file mode 100644 index cf4d301..0000000 --- a/libuv/test/test-loop-alive.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static uv_timer_t timer_handle; - -static void timer_cb(uv_timer_t* handle) { - ASSERT(handle); -} - - -static uv_work_t work_req; - -static void work_cb(uv_work_t* req) { - ASSERT(req); -} - -static void after_work_cb(uv_work_t* req, int status) { - ASSERT(req); - ASSERT(status == 0); -} - - -TEST_IMPL(loop_alive) { - int r; - ASSERT(!uv_loop_alive(uv_default_loop())); - - /* loops with handles are alive */ - uv_timer_init(uv_default_loop(), &timer_handle); - uv_timer_start(&timer_handle, timer_cb, 100, 0); - ASSERT(uv_loop_alive(uv_default_loop())); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - ASSERT(!uv_loop_alive(uv_default_loop())); - - /* loops with requests are alive */ - r = uv_queue_work(uv_default_loop(), &work_req, work_cb, after_work_cb); - ASSERT(r == 0); - ASSERT(uv_loop_alive(uv_default_loop())); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - ASSERT(!uv_loop_alive(uv_default_loop())); - - return 0; -} diff --git a/libuv/test/test-loop-close.c b/libuv/test/test-loop-close.c deleted file mode 100644 index f0f3e62..0000000 --- a/libuv/test/test-loop-close.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static uv_timer_t timer_handle; - -static void timer_cb(uv_timer_t* handle) { - ASSERT(handle); - uv_stop(handle->loop); -} - - -TEST_IMPL(loop_close) { - int r; - uv_loop_t loop; - - loop.data = &loop; - ASSERT(0 == uv_loop_init(&loop)); - ASSERT(loop.data == (void*) &loop); - - uv_timer_init(&loop, &timer_handle); - uv_timer_start(&timer_handle, timer_cb, 100, 100); - - ASSERT(UV_EBUSY == uv_loop_close(&loop)); - - uv_run(&loop, UV_RUN_DEFAULT); - - uv_close((uv_handle_t*) &timer_handle, NULL); - r = uv_run(&loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(loop.data == (void*) &loop); - ASSERT(0 == uv_loop_close(&loop)); - ASSERT(loop.data == (void*) &loop); - - return 0; -} - -static void loop_instant_close_work_cb(uv_work_t* req) { -} - -static void loop_instant_close_after_work_cb(uv_work_t* req, int status) { -} - -TEST_IMPL(loop_instant_close) { - static uv_loop_t loop; - static uv_work_t req; - ASSERT(0 == uv_loop_init(&loop)); - ASSERT(0 == uv_queue_work(&loop, - &req, - loop_instant_close_work_cb, - loop_instant_close_after_work_cb)); - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-loop-configure.c b/libuv/test/test-loop-configure.c deleted file mode 100644 index d057c1e..0000000 --- a/libuv/test/test-loop-configure.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (c) 2014, Ben Noordhuis - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static void timer_cb(uv_timer_t* handle) { - uv_close((uv_handle_t*) handle, NULL); -} - - -TEST_IMPL(loop_configure) { - uv_timer_t timer_handle; - uv_loop_t loop; - ASSERT(0 == uv_loop_init(&loop)); -#ifdef _WIN32 - ASSERT(UV_ENOSYS == uv_loop_configure(&loop, UV_LOOP_BLOCK_SIGNAL, 0)); -#else - ASSERT(0 == uv_loop_configure(&loop, UV_LOOP_BLOCK_SIGNAL, SIGPROF)); -#endif - ASSERT(0 == uv_timer_init(&loop, &timer_handle)); - ASSERT(0 == uv_timer_start(&timer_handle, timer_cb, 10, 0)); - ASSERT(0 == uv_run(&loop, UV_RUN_DEFAULT)); - ASSERT(0 == uv_loop_close(&loop)); - return 0; -} diff --git a/libuv/test/test-loop-handles.c b/libuv/test/test-loop-handles.c deleted file mode 100644 index 05cb846..0000000 --- a/libuv/test/test-loop-handles.c +++ /dev/null @@ -1,337 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* Tests commented out with XXX are ones that are failing on Linux */ - -/* - * Purpose of this test is to check semantics of starting and stopping - * prepare, check and idle watchers. - * - * - A watcher must be able to safely stop or close itself; - * - Once a watcher is stopped or closed its callback should never be called. - * - If a watcher is closed, it is implicitly stopped and its close_cb should - * be called exactly once. - * - A watcher can safely start and stop other watchers of the same type. - * - Prepare and check watchers are called once per event loop iterations. - * - All active idle watchers are queued when the event loop has no more work - * to do. This is done repeatedly until all idle watchers are inactive. - * - If a watcher starts another watcher of the same type its callback is not - * immediately queued. For check and prepare watchers, that means that if - * a watcher makes another of the same type active, it'll not be called until - * the next event loop iteration. For idle. watchers this means that the - * newly activated idle watcher might not be queued immediately. - * - Prepare, check, idle watchers keep the event loop alive even when they're - * not active. - * - * This is what the test globally does: - * - * - prepare_1 is always active and counts event loop iterations. It also - * creates and starts prepare_2 every other iteration. Finally it verifies - * that no idle watchers are active before polling. - * - prepare_2 is started by prepare_1 every other iteration. It immediately - * stops itself. It verifies that a watcher is not queued immediately - * if created by another watcher of the same type. - * - There's a check watcher that stops the event loop after a certain number - * of iterations. It starts a varying number of idle_1 watchers. - * - Idle_1 watchers stop themselves after being called a few times. All idle_1 - * watchers try to start the idle_2 watcher if it is not already started or - * awaiting its close callback. - * - The idle_2 watcher always exists but immediately closes itself after - * being started by a check_1 watcher. It verifies that a watcher is - * implicitly stopped when closed, and that a watcher can close itself - * safely. - * - There is a repeating timer. It does not keep the event loop alive - * (ev_unref) but makes sure that the loop keeps polling the system for - * events. - */ - - -#include "uv.h" -#include "task.h" - -#include - - -#define IDLE_COUNT 7 -#define ITERATIONS 21 -#define TIMEOUT 100 - - -static uv_prepare_t prepare_1_handle; -static uv_prepare_t prepare_2_handle; - -static uv_check_t check_handle; - -static uv_idle_t idle_1_handles[IDLE_COUNT]; -static uv_idle_t idle_2_handle; - -static uv_timer_t timer_handle; - - -static int loop_iteration = 0; - -static int prepare_1_cb_called = 0; -static int prepare_1_close_cb_called = 0; - -static int prepare_2_cb_called = 0; -static int prepare_2_close_cb_called = 0; - -static int check_cb_called = 0; -static int check_close_cb_called = 0; - -static int idle_1_cb_called = 0; -static int idle_1_close_cb_called = 0; -static int idles_1_active = 0; - -static int idle_2_cb_called = 0; -static int idle_2_close_cb_called = 0; -static int idle_2_cb_started = 0; -static int idle_2_is_active = 0; - - -static void timer_cb(uv_timer_t* handle) { - ASSERT(handle == &timer_handle); -} - - -static void idle_2_close_cb(uv_handle_t* handle) { - fprintf(stderr, "%s", "IDLE_2_CLOSE_CB\n"); - fflush(stderr); - - ASSERT(handle == (uv_handle_t*)&idle_2_handle); - - ASSERT(idle_2_is_active); - - idle_2_close_cb_called++; - idle_2_is_active = 0; -} - - -static void idle_2_cb(uv_idle_t* handle) { - fprintf(stderr, "%s", "IDLE_2_CB\n"); - fflush(stderr); - - ASSERT(handle == &idle_2_handle); - - idle_2_cb_called++; - - uv_close((uv_handle_t*)handle, idle_2_close_cb); -} - - -static void idle_1_cb(uv_idle_t* handle) { - int r; - - fprintf(stderr, "%s", "IDLE_1_CB\n"); - fflush(stderr); - - ASSERT_NOT_NULL(handle); - ASSERT(idles_1_active > 0); - - /* Init idle_2 and make it active */ - if (!idle_2_is_active && !uv_is_closing((uv_handle_t*)&idle_2_handle)) { - r = uv_idle_init(uv_default_loop(), &idle_2_handle); - ASSERT(r == 0); - r = uv_idle_start(&idle_2_handle, idle_2_cb); - ASSERT(r == 0); - idle_2_is_active = 1; - idle_2_cb_started++; - } - - idle_1_cb_called++; - - if (idle_1_cb_called % 5 == 0) { - r = uv_idle_stop((uv_idle_t*)handle); - ASSERT(r == 0); - idles_1_active--; - } -} - - -static void idle_1_close_cb(uv_handle_t* handle) { - fprintf(stderr, "%s", "IDLE_1_CLOSE_CB\n"); - fflush(stderr); - - ASSERT_NOT_NULL(handle); - - idle_1_close_cb_called++; -} - - -static void prepare_1_close_cb(uv_handle_t* handle) { - fprintf(stderr, "%s", "PREPARE_1_CLOSE_CB"); - fflush(stderr); - ASSERT(handle == (uv_handle_t*)&prepare_1_handle); - - prepare_1_close_cb_called++; -} - - -static void check_close_cb(uv_handle_t* handle) { - fprintf(stderr, "%s", "CHECK_CLOSE_CB\n"); - fflush(stderr); - ASSERT(handle == (uv_handle_t*)&check_handle); - - check_close_cb_called++; -} - - -static void prepare_2_close_cb(uv_handle_t* handle) { - fprintf(stderr, "%s", "PREPARE_2_CLOSE_CB\n"); - fflush(stderr); - ASSERT(handle == (uv_handle_t*)&prepare_2_handle); - - prepare_2_close_cb_called++; -} - - -static void check_cb(uv_check_t* handle) { - int i, r; - - fprintf(stderr, "%s", "CHECK_CB\n"); - fflush(stderr); - ASSERT(handle == &check_handle); - - if (loop_iteration < ITERATIONS) { - /* Make some idle watchers active */ - for (i = 0; i < 1 + (loop_iteration % IDLE_COUNT); i++) { - r = uv_idle_start(&idle_1_handles[i], idle_1_cb); - ASSERT(r == 0); - idles_1_active++; - } - - } else { - /* End of the test - close all handles */ - uv_close((uv_handle_t*)&prepare_1_handle, prepare_1_close_cb); - uv_close((uv_handle_t*)&check_handle, check_close_cb); - uv_close((uv_handle_t*)&prepare_2_handle, prepare_2_close_cb); - - for (i = 0; i < IDLE_COUNT; i++) { - uv_close((uv_handle_t*)&idle_1_handles[i], idle_1_close_cb); - } - - /* This handle is closed/recreated every time, close it only if it is - * active. */ - if (idle_2_is_active) { - uv_close((uv_handle_t*)&idle_2_handle, idle_2_close_cb); - } - } - - check_cb_called++; -} - - -static void prepare_2_cb(uv_prepare_t* handle) { - int r; - - fprintf(stderr, "%s", "PREPARE_2_CB\n"); - fflush(stderr); - ASSERT(handle == &prepare_2_handle); - - /* Prepare_2 gets started by prepare_1 when (loop_iteration % 2 == 0), and it - * stops itself immediately. A started watcher is not queued until the next - * round, so when this callback is made (loop_iteration % 2 == 0) cannot be - * true. */ - ASSERT(loop_iteration % 2 != 0); - - r = uv_prepare_stop((uv_prepare_t*)handle); - ASSERT(r == 0); - - prepare_2_cb_called++; -} - - -static void prepare_1_cb(uv_prepare_t* handle) { - int r; - - fprintf(stderr, "%s", "PREPARE_1_CB\n"); - fflush(stderr); - ASSERT(handle == &prepare_1_handle); - - if (loop_iteration % 2 == 0) { - r = uv_prepare_start(&prepare_2_handle, prepare_2_cb); - ASSERT(r == 0); - } - - prepare_1_cb_called++; - loop_iteration++; - - printf("Loop iteration %d of %d.\n", loop_iteration, ITERATIONS); -} - - -TEST_IMPL(loop_handles) { - int i; - int r; - - r = uv_prepare_init(uv_default_loop(), &prepare_1_handle); - ASSERT(r == 0); - r = uv_prepare_start(&prepare_1_handle, prepare_1_cb); - ASSERT(r == 0); - - r = uv_check_init(uv_default_loop(), &check_handle); - ASSERT(r == 0); - r = uv_check_start(&check_handle, check_cb); - ASSERT(r == 0); - - /* initialize only, prepare_2 is started by prepare_1_cb */ - r = uv_prepare_init(uv_default_loop(), &prepare_2_handle); - ASSERT(r == 0); - - for (i = 0; i < IDLE_COUNT; i++) { - /* initialize only, idle_1 handles are started by check_cb */ - r = uv_idle_init(uv_default_loop(), &idle_1_handles[i]); - ASSERT(r == 0); - } - - /* don't init or start idle_2, both is done by idle_1_cb */ - - /* The timer callback is there to keep the event loop polling unref it as it - * is not supposed to keep the loop alive */ - r = uv_timer_init(uv_default_loop(), &timer_handle); - ASSERT(r == 0); - r = uv_timer_start(&timer_handle, timer_cb, TIMEOUT, TIMEOUT); - ASSERT(r == 0); - uv_unref((uv_handle_t*)&timer_handle); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(loop_iteration == ITERATIONS); - - ASSERT(prepare_1_cb_called == ITERATIONS); - ASSERT(prepare_1_close_cb_called == 1); - - ASSERT(prepare_2_cb_called == ITERATIONS / 2); - ASSERT(prepare_2_close_cb_called == 1); - - ASSERT(check_cb_called == ITERATIONS); - ASSERT(check_close_cb_called == 1); - - /* idle_1_cb should be called a lot */ - ASSERT(idle_1_close_cb_called == IDLE_COUNT); - - ASSERT(idle_2_close_cb_called == idle_2_cb_started); - ASSERT(idle_2_is_active == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-loop-stop.c b/libuv/test/test-loop-stop.c deleted file mode 100644 index 14b8c11..0000000 --- a/libuv/test/test-loop-stop.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static uv_prepare_t prepare_handle; -static uv_timer_t timer_handle; -static int prepare_called = 0; -static int timer_called = 0; -static int num_ticks = 10; - - -static void prepare_cb(uv_prepare_t* handle) { - ASSERT(handle == &prepare_handle); - prepare_called++; - if (prepare_called == num_ticks) - uv_prepare_stop(handle); -} - - -static void timer_cb(uv_timer_t* handle) { - ASSERT(handle == &timer_handle); - timer_called++; - if (timer_called == 1) - uv_stop(uv_default_loop()); - else if (timer_called == num_ticks) - uv_timer_stop(handle); -} - - -TEST_IMPL(loop_stop) { - int r; - uv_prepare_init(uv_default_loop(), &prepare_handle); - uv_prepare_start(&prepare_handle, prepare_cb); - uv_timer_init(uv_default_loop(), &timer_handle); - uv_timer_start(&timer_handle, timer_cb, 100, 100); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r != 0); - ASSERT(timer_called == 1); - - r = uv_run(uv_default_loop(), UV_RUN_NOWAIT); - ASSERT(r != 0); - ASSERT(prepare_called > 1); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - ASSERT(timer_called == 10); - ASSERT(prepare_called == 10); - - return 0; -} diff --git a/libuv/test/test-loop-time.c b/libuv/test/test-loop-time.c deleted file mode 100644 index a2db42c..0000000 --- a/libuv/test/test-loop-time.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - - -TEST_IMPL(loop_update_time) { - uint64_t start; - - start = uv_now(uv_default_loop()); - while (uv_now(uv_default_loop()) - start < 1000) - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_NOWAIT)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -static void cb(uv_timer_t* timer) { - uv_close((uv_handle_t*)timer, NULL); -} - -TEST_IMPL(loop_backend_timeout) { - uv_loop_t *loop = uv_default_loop(); - uv_timer_t timer; - int r; - - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - - ASSERT(!uv_loop_alive(loop)); - ASSERT(uv_backend_timeout(loop) == 0); - - r = uv_timer_start(&timer, cb, 1000, 0); /* 1 sec */ - ASSERT(r == 0); - ASSERT(uv_backend_timeout(loop) > 100); /* 0.1 sec */ - ASSERT(uv_backend_timeout(loop) <= 1000); /* 1 sec */ - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - ASSERT(uv_backend_timeout(loop) == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-metrics.c b/libuv/test/test-metrics.c deleted file mode 100644 index f527494..0000000 --- a/libuv/test/test-metrics.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include /* memset */ - -#define UV_NS_TO_MS 1000000 - - -static void timer_spin_cb(uv_timer_t* handle) { - uint64_t t; - - (*(int*) handle->data)++; - t = uv_hrtime(); - /* Spin for 500 ms to spin loop time out of the delta check. */ - while (uv_hrtime() - t < 600 * UV_NS_TO_MS) { } -} - - -TEST_IMPL(metrics_idle_time) { - const uint64_t timeout = 1000; - uv_timer_t timer; - uint64_t idle_time; - int cntr; - - cntr = 0; - timer.data = &cntr; - - ASSERT_EQ(0, uv_loop_configure(uv_default_loop(), UV_METRICS_IDLE_TIME)); - ASSERT_EQ(0, uv_timer_init(uv_default_loop(), &timer)); - ASSERT_EQ(0, uv_timer_start(&timer, timer_spin_cb, timeout, 0)); - - ASSERT_EQ(0, uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - ASSERT_GT(cntr, 0); - - idle_time = uv_metrics_idle_time(uv_default_loop()); - - /* Permissive check that the idle time matches within the timeout ±500 ms. */ - ASSERT((idle_time <= (timeout + 500) * UV_NS_TO_MS) && - (idle_time >= (timeout - 500) * UV_NS_TO_MS)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void metrics_routine_cb(void* arg) { - const uint64_t timeout = 1000; - uv_loop_t loop; - uv_timer_t timer; - uint64_t idle_time; - int cntr; - - cntr = 0; - timer.data = &cntr; - - ASSERT_EQ(0, uv_loop_init(&loop)); - ASSERT_EQ(0, uv_loop_configure(&loop, UV_METRICS_IDLE_TIME)); - ASSERT_EQ(0, uv_timer_init(&loop, &timer)); - ASSERT_EQ(0, uv_timer_start(&timer, timer_spin_cb, timeout, 0)); - - ASSERT_EQ(0, uv_run(&loop, UV_RUN_DEFAULT)); - ASSERT_GT(cntr, 0); - - idle_time = uv_metrics_idle_time(&loop); - - /* Only checking that idle time is greater than the lower bound since there - * may have been thread contention, causing the event loop to be delayed in - * the idle phase longer than expected. - */ - ASSERT_GE(idle_time, (timeout - 500) * UV_NS_TO_MS); - - close_loop(&loop); - ASSERT_EQ(0, uv_loop_close(&loop)); -} - - -TEST_IMPL(metrics_idle_time_thread) { - uv_thread_t threads[5]; - int i; - - for (i = 0; i < 5; i++) { - ASSERT_EQ(0, uv_thread_create(&threads[i], metrics_routine_cb, NULL)); - } - - for (i = 0; i < 5; i++) { - uv_thread_join(&threads[i]); - } - - return 0; -} - - -static void timer_noop_cb(uv_timer_t* handle) { - (*(int*) handle->data)++; -} - - -TEST_IMPL(metrics_idle_time_zero) { - uv_timer_t timer; - int cntr; - - cntr = 0; - timer.data = &cntr; - ASSERT_EQ(0, uv_loop_configure(uv_default_loop(), UV_METRICS_IDLE_TIME)); - ASSERT_EQ(0, uv_timer_init(uv_default_loop(), &timer)); - ASSERT_EQ(0, uv_timer_start(&timer, timer_noop_cb, 0, 0)); - - ASSERT_EQ(0, uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - ASSERT_GT(cntr, 0); - ASSERT_EQ(0, uv_metrics_idle_time(uv_default_loop())); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-multiple-listen.c b/libuv/test/test-multiple-listen.c deleted file mode 100644 index 0b28514..0000000 --- a/libuv/test/test-multiple-listen.c +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - -static int connection_cb_called = 0; -static int close_cb_called = 0; -static int connect_cb_called = 0; -static uv_tcp_t server; -static uv_tcp_t client; - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -static void connection_cb(uv_stream_t* tcp, int status) { - ASSERT(status == 0); - uv_close((uv_handle_t*)&server, close_cb); - connection_cb_called++; -} - - -static void start_server(void) { - struct sockaddr_in addr; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*)&server, 128, connection_cb); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*)&server, 128, connection_cb); - ASSERT(r == 0); -} - - -static void connect_cb(uv_connect_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - free(req); - uv_close((uv_handle_t*)&client, close_cb); - connect_cb_called++; -} - - -static void client_connect(void) { - struct sockaddr_in addr; - uv_connect_t* connect_req = malloc(sizeof *connect_req); - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - ASSERT_NOT_NULL(connect_req); - - r = uv_tcp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - r = uv_tcp_connect(connect_req, - &client, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); -} - - - -TEST_IMPL(multiple_listen) { - start_server(); - - client_connect(); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(connection_cb_called == 1); - ASSERT(connect_cb_called == 1); - ASSERT(close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-mutexes.c b/libuv/test/test-mutexes.c deleted file mode 100644 index 975222c..0000000 --- a/libuv/test/test-mutexes.c +++ /dev/null @@ -1,182 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -static uv_cond_t condvar; -static uv_mutex_t mutex; -static uv_rwlock_t rwlock; -static int step; - -/* The mutex and rwlock tests are really poor. - * They're very basic sanity checks and nothing more. - * Apologies if that rhymes. - */ - -TEST_IMPL(thread_mutex) { - uv_mutex_t mutex; - int r; - - r = uv_mutex_init(&mutex); - ASSERT(r == 0); - - uv_mutex_lock(&mutex); - uv_mutex_unlock(&mutex); - uv_mutex_destroy(&mutex); - - return 0; -} - - -TEST_IMPL(thread_mutex_recursive) { - uv_mutex_t mutex; - int r; - - r = uv_mutex_init_recursive(&mutex); - ASSERT(r == 0); - - uv_mutex_lock(&mutex); - uv_mutex_lock(&mutex); - ASSERT(0 == uv_mutex_trylock(&mutex)); - - uv_mutex_unlock(&mutex); - uv_mutex_unlock(&mutex); - uv_mutex_unlock(&mutex); - uv_mutex_destroy(&mutex); - - return 0; -} - - -TEST_IMPL(thread_rwlock) { - uv_rwlock_t rwlock; - int r; - - r = uv_rwlock_init(&rwlock); - ASSERT(r == 0); - - uv_rwlock_rdlock(&rwlock); - uv_rwlock_rdunlock(&rwlock); - uv_rwlock_wrlock(&rwlock); - uv_rwlock_wrunlock(&rwlock); - uv_rwlock_destroy(&rwlock); - - return 0; -} - - -/* Call when holding |mutex|. */ -static void synchronize_nowait(void) { - step += 1; - uv_cond_signal(&condvar); -} - - -/* Call when holding |mutex|. */ -static void synchronize(void) { - int current; - - synchronize_nowait(); - /* Wait for the other thread. Guard against spurious wakeups. */ - for (current = step; current == step; uv_cond_wait(&condvar, &mutex)); - ASSERT(step == current + 1); -} - - -static void thread_rwlock_trylock_peer(void* unused) { - (void) &unused; - - uv_mutex_lock(&mutex); - - /* Write lock held by other thread. */ - ASSERT(UV_EBUSY == uv_rwlock_tryrdlock(&rwlock)); - ASSERT(UV_EBUSY == uv_rwlock_trywrlock(&rwlock)); - synchronize(); - - /* Read lock held by other thread. */ - ASSERT(0 == uv_rwlock_tryrdlock(&rwlock)); - uv_rwlock_rdunlock(&rwlock); - ASSERT(UV_EBUSY == uv_rwlock_trywrlock(&rwlock)); - synchronize(); - - /* Acquire write lock. */ - ASSERT(0 == uv_rwlock_trywrlock(&rwlock)); - synchronize(); - - /* Release write lock and acquire read lock. */ - uv_rwlock_wrunlock(&rwlock); - ASSERT(0 == uv_rwlock_tryrdlock(&rwlock)); - synchronize(); - - uv_rwlock_rdunlock(&rwlock); - synchronize_nowait(); /* Signal main thread we're going away. */ - uv_mutex_unlock(&mutex); -} - - -TEST_IMPL(thread_rwlock_trylock) { - uv_thread_t thread; - - ASSERT(0 == uv_cond_init(&condvar)); - ASSERT(0 == uv_mutex_init(&mutex)); - ASSERT(0 == uv_rwlock_init(&rwlock)); - - uv_mutex_lock(&mutex); - ASSERT(0 == uv_thread_create(&thread, thread_rwlock_trylock_peer, NULL)); - - /* Hold write lock. */ - ASSERT(0 == uv_rwlock_trywrlock(&rwlock)); - synchronize(); /* Releases the mutex to the other thread. */ - - /* Release write lock and acquire read lock. Pthreads doesn't support - * the notion of upgrading or downgrading rwlocks, so neither do we. - */ - uv_rwlock_wrunlock(&rwlock); - ASSERT(0 == uv_rwlock_tryrdlock(&rwlock)); - synchronize(); - - /* Release read lock. */ - uv_rwlock_rdunlock(&rwlock); - synchronize(); - - /* Write lock held by other thread. */ - ASSERT(UV_EBUSY == uv_rwlock_tryrdlock(&rwlock)); - ASSERT(UV_EBUSY == uv_rwlock_trywrlock(&rwlock)); - synchronize(); - - /* Read lock held by other thread. */ - ASSERT(0 == uv_rwlock_tryrdlock(&rwlock)); - uv_rwlock_rdunlock(&rwlock); - ASSERT(UV_EBUSY == uv_rwlock_trywrlock(&rwlock)); - synchronize(); - - ASSERT(0 == uv_thread_join(&thread)); - uv_rwlock_destroy(&rwlock); - uv_mutex_unlock(&mutex); - uv_mutex_destroy(&mutex); - uv_cond_destroy(&condvar); - - return 0; -} diff --git a/libuv/test/test-not-readable-nor-writable-on-read-error.c b/libuv/test/test-not-readable-nor-writable-on-read-error.c deleted file mode 100644 index ae951e3..0000000 --- a/libuv/test/test-not-readable-nor-writable-on-read-error.c +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright the libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static uv_loop_t loop; -static uv_tcp_t tcp_client; -static uv_connect_t connect_req; -static uv_write_t write_req; -static char reset_me_cmd[] = {'Q', 'S', 'H'}; - -static int connect_cb_called; -static int read_cb_called; -static int write_cb_called; -static int close_cb_called; - -static void write_cb(uv_write_t* req, int status) { - write_cb_called++; - ASSERT(status == 0); -} - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[64]; - buf->base = slab; - buf->len = sizeof(slab); -} - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - -static void read_cb(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf) { - read_cb_called++; - - ASSERT((nread < 0) && (nread != UV_EOF)); - ASSERT(0 == uv_is_writable(handle)); - ASSERT(0 == uv_is_readable(handle)); - - uv_close((uv_handle_t*) handle, close_cb); -} - -static void connect_cb(uv_connect_t* req, int status) { - int r; - uv_buf_t reset_me; - - connect_cb_called++; - ASSERT(status == 0); - - r = uv_read_start((uv_stream_t*) &tcp_client, alloc_cb, read_cb); - ASSERT(r == 0); - - reset_me = uv_buf_init(reset_me_cmd, sizeof(reset_me_cmd)); - - r = uv_write(&write_req, - (uv_stream_t*) &tcp_client, - &reset_me, - 1, - write_cb); - - ASSERT(r == 0); -} - -TEST_IMPL(not_readable_nor_writable_on_read_error) { - struct sockaddr_in sa; - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &sa)); - ASSERT(0 == uv_loop_init(&loop)); - ASSERT(0 == uv_tcp_init(&loop, &tcp_client)); - - ASSERT(0 == uv_tcp_connect(&connect_req, - &tcp_client, - (const struct sockaddr*) &sa, - connect_cb)); - - ASSERT(0 == uv_run(&loop, UV_RUN_DEFAULT)); - - ASSERT(connect_cb_called == 1); - ASSERT(read_cb_called == 1); - ASSERT(write_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-not-readable-on-eof.c b/libuv/test/test-not-readable-on-eof.c deleted file mode 100644 index 2bb5f4e..0000000 --- a/libuv/test/test-not-readable-on-eof.c +++ /dev/null @@ -1,103 +0,0 @@ -/* Copyright the libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static uv_loop_t loop; -static uv_tcp_t tcp_client; -static uv_connect_t connect_req; -static uv_write_t write_req; -static char close_me_cmd[] = {'Q', 'S'}; - -static int connect_cb_called; -static int read_cb_called; -static int write_cb_called; -static int close_cb_called; - -static void write_cb(uv_write_t* req, int status) { - write_cb_called++; - ASSERT(status == 0); -} - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[64]; - buf->base = slab; - buf->len = sizeof(slab); -} - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - -static void read_cb(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf) { - read_cb_called++; - - ASSERT(nread == UV_EOF); - ASSERT(0 == uv_is_readable(handle)); - - uv_close((uv_handle_t*) handle, close_cb); -} - -static void connect_cb(uv_connect_t* req, int status) { - int r; - uv_buf_t close_me; - - connect_cb_called++; - ASSERT(status == 0); - - r = uv_read_start((uv_stream_t*) &tcp_client, alloc_cb, read_cb); - ASSERT(r == 0); - - close_me = uv_buf_init(close_me_cmd, sizeof(close_me_cmd)); - - r = uv_write(&write_req, - (uv_stream_t*) &tcp_client, - &close_me, - 1, - write_cb); - - ASSERT(r == 0); -} - -TEST_IMPL(not_readable_on_eof) { - struct sockaddr_in sa; - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &sa)); - ASSERT(0 == uv_loop_init(&loop)); - ASSERT(0 == uv_tcp_init(&loop, &tcp_client)); - - ASSERT(0 == uv_tcp_connect(&connect_req, - &tcp_client, - (const struct sockaddr*) &sa, - connect_cb)); - - ASSERT(0 == uv_run(&loop, UV_RUN_DEFAULT)); - - ASSERT(connect_cb_called == 1); - ASSERT(read_cb_called == 1); - ASSERT(write_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-not-writable-after-shutdown.c b/libuv/test/test-not-writable-after-shutdown.c deleted file mode 100644 index 9cd9370..0000000 --- a/libuv/test/test-not-writable-after-shutdown.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright the libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static uv_shutdown_t shutdown_req; - -static void close_cb(uv_handle_t* handle) { - -} - -static void shutdown_cb(uv_shutdown_t* req, int status) { - uv_close((uv_handle_t*) req->handle, close_cb); -} - -static void connect_cb(uv_connect_t* req, int status) { - int r; - ASSERT(status == 0); - - r = uv_shutdown(&shutdown_req, req->handle, shutdown_cb); - ASSERT(r == 0); - - ASSERT(0 == uv_is_writable(req->handle)); -} - -TEST_IMPL(not_writable_after_shutdown) { - int r; - struct sockaddr_in addr; - uv_loop_t* loop; - uv_tcp_t socket; - uv_connect_t connect_req; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - loop = uv_default_loop(); - - r = uv_tcp_init(loop, &socket); - ASSERT(r == 0); - - r = uv_tcp_connect(&connect_req, - &socket, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-osx-select.c b/libuv/test/test-osx-select.c deleted file mode 100644 index a0afda9..0000000 --- a/libuv/test/test-osx-select.c +++ /dev/null @@ -1,140 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#ifdef __APPLE__ - -#include -#include - -static int read_count; - - -static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - static char slab[1024]; - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void read_cb(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) { - fprintf(stdout, "got data %d\n", ++read_count); - fflush(stdout); - - if (read_count == 3) - uv_close((uv_handle_t*) stream, NULL); -} - - -TEST_IMPL(osx_select) { - int r; - int fd; - size_t i; - size_t len; - const char* str; - uv_tty_t tty; - - fd = open("/dev/tty", O_RDONLY); - if (fd < 0) { - fprintf(stderr, "Cannot open /dev/tty as read-only: %s\n", strerror(errno)); - fflush(stderr); - return TEST_SKIP; - } - - r = uv_tty_init(uv_default_loop(), &tty, fd, 1); - ASSERT(r == 0); - - uv_read_start((uv_stream_t*) &tty, alloc_cb, read_cb); - - /* Emulate user-input */ - str = "got some input\n" - "with a couple of lines\n" - "feel pretty happy\n"; - for (i = 0, len = strlen(str); i < len; i++) { - r = ioctl(fd, TIOCSTI, str + i); - ASSERT(r == 0); - } - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(read_count == 3); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(osx_select_many_fds) { - int r; - int fd; - size_t i; - size_t len; - const char* str; - struct sockaddr_in addr; - uv_tty_t tty; - uv_tcp_t tcps[1500]; - - TEST_FILE_LIMIT(ARRAY_SIZE(tcps) + 100); - - r = uv_ip4_addr("127.0.0.1", 0, &addr); - ASSERT(r == 0); - - for (i = 0; i < ARRAY_SIZE(tcps); i++) { - r = uv_tcp_init(uv_default_loop(), &tcps[i]); - ASSERT(r == 0); - r = uv_tcp_bind(&tcps[i], (const struct sockaddr *) &addr, 0); - ASSERT(r == 0); - uv_unref((uv_handle_t*) &tcps[i]); - } - - fd = open("/dev/tty", O_RDONLY); - if (fd < 0) { - fprintf(stderr, "Cannot open /dev/tty as read-only: %s\n", strerror(errno)); - fflush(stderr); - return TEST_SKIP; - } - - r = uv_tty_init(uv_default_loop(), &tty, fd, 1); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*) &tty, alloc_cb, read_cb); - ASSERT(r == 0); - - /* Emulate user-input */ - str = "got some input\n" - "with a couple of lines\n" - "feel pretty happy\n"; - for (i = 0, len = strlen(str); i < len; i++) { - r = ioctl(fd, TIOCSTI, str + i); - ASSERT(r == 0); - } - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(read_count == 3); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#endif /* __APPLE__ */ diff --git a/libuv/test/test-pass-always.c b/libuv/test/test-pass-always.c deleted file mode 100644 index 4fb58ff..0000000 --- a/libuv/test/test-pass-always.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" - - -TEST_IMPL(pass_always) { - /* This test always passes. It is used to test the test runner. */ - return 0; -} diff --git a/libuv/test/test-ping-pong.c b/libuv/test/test-ping-pong.c deleted file mode 100644 index 4a26e4d..0000000 --- a/libuv/test/test-ping-pong.c +++ /dev/null @@ -1,436 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include /* strlen */ - -static int completed_pingers = 0; - -#if defined(__CYGWIN__) || defined(__MSYS__) || defined(__MVS__) -#define NUM_PINGS 100 /* fewer pings to avoid timeout */ -#else -#define NUM_PINGS 1000 -#endif - -static char PING[] = "PING\n"; -static char PONG[] = "PONG\n"; -static int pinger_on_connect_count; - - -typedef struct { - int vectored_writes; - unsigned pongs; - unsigned state; - union { - uv_tcp_t tcp; - uv_pipe_t pipe; - } stream; - uv_connect_t connect_req; - char* pong; -} pinger_t; - - -static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - buf->base = malloc(size); - buf->len = size; -} - - -static void ponger_on_close(uv_handle_t* handle) { - if (handle->data) - free(handle->data); - else - free(handle); -} - - -static void pinger_on_close(uv_handle_t* handle) { - pinger_t* pinger = (pinger_t*) handle->data; - - ASSERT_EQ(NUM_PINGS, pinger->pongs); - - if (handle == (uv_handle_t*) &pinger->stream.tcp) { - free(pinger); /* also frees handle */ - } else { - uv_close((uv_handle_t*) &pinger->stream.tcp, ponger_on_close); - free(handle); - } - - completed_pingers++; -} - - -static void pinger_after_write(uv_write_t* req, int status) { - ASSERT_EQ(status, 0); - free(req); -} - - -static void pinger_write_ping(pinger_t* pinger) { - uv_stream_t* stream; - uv_write_t* req; - uv_buf_t bufs[sizeof PING - 1]; - int i, nbufs; - - stream = (uv_stream_t*) &pinger->stream.tcp; - - if (!pinger->vectored_writes) { - /* Write a single buffer. */ - nbufs = 1; - bufs[0] = uv_buf_init(PING, sizeof PING - 1); - } else { - /* Write multiple buffers, each with one byte in them. */ - nbufs = sizeof PING - 1; - for (i = 0; i < nbufs; i++) { - bufs[i] = uv_buf_init(&PING[i], 1); - } - } - - req = malloc(sizeof(*req)); - ASSERT_NOT_NULL(req); - ASSERT_EQ(0, uv_write(req, stream, bufs, nbufs, pinger_after_write)); - - puts("PING"); -} - - -static void pinger_read_cb(uv_stream_t* stream, - ssize_t nread, - const uv_buf_t* buf) { - ssize_t i; - pinger_t* pinger; - - pinger = (pinger_t*) stream->data; - - if (nread < 0) { - ASSERT_EQ(nread, UV_EOF); - - puts("got EOF"); - free(buf->base); - - uv_close((uv_handle_t*) stream, pinger_on_close); - - return; - } - - /* Now we count the pongs */ - for (i = 0; i < nread; i++) { - ASSERT_EQ(buf->base[i], pinger->pong[pinger->state]); - pinger->state = (pinger->state + 1) % strlen(pinger->pong); - - if (pinger->state != 0) - continue; - - printf("PONG %d\n", pinger->pongs); - pinger->pongs++; - - if (pinger->pongs < NUM_PINGS) { - pinger_write_ping(pinger); - } else { - uv_close((uv_handle_t*) stream, pinger_on_close); - break; - } - } - - free(buf->base); -} - - -static void ponger_read_cb(uv_stream_t* stream, - ssize_t nread, - const uv_buf_t* buf) { - uv_buf_t writebuf; - uv_write_t* req; - int i; - - if (nread < 0) { - ASSERT_EQ(nread, UV_EOF); - - puts("got EOF"); - free(buf->base); - - uv_close((uv_handle_t*) stream, ponger_on_close); - - return; - } - - /* Echo back */ - for (i = 0; i < nread; i++) { - if (buf->base[i] == 'I') - buf->base[i] = 'O'; - } - - writebuf = uv_buf_init(buf->base, nread); - req = malloc(sizeof(*req)); - ASSERT_NOT_NULL(req); - ASSERT_EQ(0, uv_write(req, stream, &writebuf, 1, pinger_after_write)); -} - - -static void pinger_on_connect(uv_connect_t* req, int status) { - pinger_t* pinger = (pinger_t*) req->handle->data; - - pinger_on_connect_count++; - - ASSERT_EQ(status, 0); - - ASSERT_EQ(1, uv_is_readable(req->handle)); - ASSERT_EQ(1, uv_is_writable(req->handle)); - ASSERT_EQ(0, uv_is_closing((uv_handle_t *) req->handle)); - - pinger_write_ping(pinger); - - ASSERT_EQ(0, uv_read_start((uv_stream_t*) req->handle, - alloc_cb, - pinger_read_cb)); -} - - -/* same ping-pong test, but using IPv6 connection */ -static void tcp_pinger_v6_new(int vectored_writes) { - int r; - struct sockaddr_in6 server_addr; - pinger_t* pinger; - - - ASSERT_EQ(0, uv_ip6_addr("::1", TEST_PORT, &server_addr)); - pinger = malloc(sizeof(*pinger)); - ASSERT_NOT_NULL(pinger); - pinger->vectored_writes = vectored_writes; - pinger->state = 0; - pinger->pongs = 0; - pinger->pong = PING; - - /* Try to connect to the server and do NUM_PINGS ping-pongs. */ - r = uv_tcp_init(uv_default_loop(), &pinger->stream.tcp); - pinger->stream.tcp.data = pinger; - ASSERT_EQ(0, r); - - /* We are never doing multiple reads/connects at a time anyway, so these - * handles can be pre-initialized. */ - r = uv_tcp_connect(&pinger->connect_req, - &pinger->stream.tcp, - (const struct sockaddr*) &server_addr, - pinger_on_connect); - ASSERT_EQ(0, r); - - /* Synchronous connect callbacks are not allowed. */ - ASSERT_EQ(pinger_on_connect_count, 0); -} - - -static void tcp_pinger_new(int vectored_writes) { - int r; - struct sockaddr_in server_addr; - pinger_t* pinger; - - ASSERT_EQ(0, uv_ip4_addr("127.0.0.1", TEST_PORT, &server_addr)); - pinger = malloc(sizeof(*pinger)); - ASSERT_NOT_NULL(pinger); - pinger->vectored_writes = vectored_writes; - pinger->state = 0; - pinger->pongs = 0; - pinger->pong = PING; - - /* Try to connect to the server and do NUM_PINGS ping-pongs. */ - r = uv_tcp_init(uv_default_loop(), &pinger->stream.tcp); - pinger->stream.tcp.data = pinger; - ASSERT_EQ(0, r); - - /* We are never doing multiple reads/connects at a time anyway, so these - * handles can be pre-initialized. */ - r = uv_tcp_connect(&pinger->connect_req, - &pinger->stream.tcp, - (const struct sockaddr*) &server_addr, - pinger_on_connect); - ASSERT_EQ(0, r); - - /* Synchronous connect callbacks are not allowed. */ - ASSERT_EQ(pinger_on_connect_count, 0); -} - - -static void pipe_pinger_new(int vectored_writes) { - int r; - pinger_t* pinger; - - pinger = malloc(sizeof(*pinger)); - ASSERT_NOT_NULL(pinger); - pinger->vectored_writes = vectored_writes; - pinger->state = 0; - pinger->pongs = 0; - pinger->pong = PING; - - /* Try to connect to the server and do NUM_PINGS ping-pongs. */ - r = uv_pipe_init(uv_default_loop(), &pinger->stream.pipe, 0); - pinger->stream.pipe.data = pinger; - ASSERT_EQ(0, r); - - /* We are never doing multiple reads/connects at a time anyway, so these - * handles can be pre-initialized. */ - uv_pipe_connect(&pinger->connect_req, &pinger->stream.pipe, TEST_PIPENAME, - pinger_on_connect); - - /* Synchronous connect callbacks are not allowed. */ - ASSERT_EQ(pinger_on_connect_count, 0); -} - - -static void socketpair_pinger_new(int vectored_writes) { - pinger_t* pinger; - uv_os_sock_t fds[2]; - uv_tcp_t* ponger; - - pinger = malloc(sizeof(*pinger)); - ASSERT_NOT_NULL(pinger); - pinger->vectored_writes = vectored_writes; - pinger->state = 0; - pinger->pongs = 0; - pinger->pong = PONG; - - /* Try to make a socketpair and do NUM_PINGS ping-pongs. */ - (void)uv_default_loop(); /* ensure WSAStartup has been performed */ - ASSERT_EQ(0, uv_socketpair(SOCK_STREAM, 0, fds, UV_NONBLOCK_PIPE, UV_NONBLOCK_PIPE)); -#ifndef _WIN32 - /* On Windows, this is actually a UV_TCP, but libuv doesn't detect that. */ - ASSERT_EQ(uv_guess_handle((uv_file) fds[0]), UV_NAMED_PIPE); - ASSERT_EQ(uv_guess_handle((uv_file) fds[1]), UV_NAMED_PIPE); -#endif - - ASSERT_EQ(0, uv_tcp_init(uv_default_loop(), &pinger->stream.tcp)); - pinger->stream.pipe.data = pinger; - ASSERT_EQ(0, uv_tcp_open(&pinger->stream.tcp, fds[1])); - - ponger = malloc(sizeof(*ponger)); - ASSERT_NOT_NULL(ponger); - ponger->data = NULL; - ASSERT_EQ(0, uv_tcp_init(uv_default_loop(), ponger)); - ASSERT_EQ(0, uv_tcp_open(ponger, fds[0])); - - pinger_write_ping(pinger); - - ASSERT_EQ(0, uv_read_start((uv_stream_t*) &pinger->stream.tcp, - alloc_cb, - pinger_read_cb)); - ASSERT_EQ(0, uv_read_start((uv_stream_t*) ponger, - alloc_cb, - ponger_read_cb)); -} - - -static void pipe2_pinger_new(int vectored_writes) { - uv_file fds[2]; - pinger_t* pinger; - uv_pipe_t* ponger; - - /* Try to make a pipe and do NUM_PINGS pings. */ - ASSERT_EQ(0, uv_pipe(fds, UV_NONBLOCK_PIPE, UV_NONBLOCK_PIPE)); - ASSERT_EQ(uv_guess_handle(fds[0]), UV_NAMED_PIPE); - ASSERT_EQ(uv_guess_handle(fds[1]), UV_NAMED_PIPE); - - ponger = malloc(sizeof(*ponger)); - ASSERT_NOT_NULL(ponger); - ASSERT_EQ(0, uv_pipe_init(uv_default_loop(), ponger, 0)); - ASSERT_EQ(0, uv_pipe_open(ponger, fds[0])); - - pinger = malloc(sizeof(*pinger)); - ASSERT_NOT_NULL(pinger); - pinger->vectored_writes = vectored_writes; - pinger->state = 0; - pinger->pongs = 0; - pinger->pong = PING; - ASSERT_EQ(0, uv_pipe_init(uv_default_loop(), &pinger->stream.pipe, 0)); - ASSERT_EQ(0, uv_pipe_open(&pinger->stream.pipe, fds[1])); - pinger->stream.pipe.data = pinger; /* record for close_cb */ - ponger->data = pinger; /* record for read_cb */ - - pinger_write_ping(pinger); - - ASSERT_EQ(0, uv_read_start((uv_stream_t*) ponger, alloc_cb, pinger_read_cb)); -} - -static int run_ping_pong_test(void) { - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT_EQ(completed_pingers, 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_ping_pong) { - tcp_pinger_new(0); - run_ping_pong_test(); - - completed_pingers = 0; - socketpair_pinger_new(0); - return run_ping_pong_test(); -} - - -TEST_IMPL(tcp_ping_pong_vec) { - tcp_pinger_new(1); - run_ping_pong_test(); - - completed_pingers = 0; - socketpair_pinger_new(1); - return run_ping_pong_test(); -} - - -TEST_IMPL(tcp6_ping_pong) { - if (!can_ipv6()) - RETURN_SKIP("IPv6 not supported"); - tcp_pinger_v6_new(0); - return run_ping_pong_test(); -} - - -TEST_IMPL(tcp6_ping_pong_vec) { - if (!can_ipv6()) - RETURN_SKIP("IPv6 not supported"); - tcp_pinger_v6_new(1); - return run_ping_pong_test(); -} - - -TEST_IMPL(pipe_ping_pong) { - pipe_pinger_new(0); - run_ping_pong_test(); - - completed_pingers = 0; - pipe2_pinger_new(0); - return run_ping_pong_test(); -} - - -TEST_IMPL(pipe_ping_pong_vec) { - pipe_pinger_new(1); - run_ping_pong_test(); - - completed_pingers = 0; - pipe2_pinger_new(1); - return run_ping_pong_test(); -} diff --git a/libuv/test/test-pipe-bind-error.c b/libuv/test/test-pipe-bind-error.c deleted file mode 100644 index ce35052..0000000 --- a/libuv/test/test-pipe-bind-error.c +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - - -#ifdef _WIN32 -# define BAD_PIPENAME "bad-pipe" -#else -# define BAD_PIPENAME "/path/to/unix/socket/that/really/should/not/be/there" -#endif - - -static int close_cb_called = 0; - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -TEST_IMPL(pipe_bind_error_addrinuse) { - uv_pipe_t server1, server2; - int r; - - r = uv_pipe_init(uv_default_loop(), &server1, 0); - ASSERT(r == 0); - r = uv_pipe_bind(&server1, TEST_PIPENAME); - ASSERT(r == 0); - - r = uv_pipe_init(uv_default_loop(), &server2, 0); - ASSERT(r == 0); - r = uv_pipe_bind(&server2, TEST_PIPENAME); - ASSERT(r == UV_EADDRINUSE); - - r = uv_listen((uv_stream_t*)&server1, SOMAXCONN, NULL); - ASSERT(r == 0); - r = uv_listen((uv_stream_t*)&server2, SOMAXCONN, NULL); - ASSERT(r == UV_EINVAL); - - uv_close((uv_handle_t*)&server1, close_cb); - uv_close((uv_handle_t*)&server2, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(pipe_bind_error_addrnotavail) { - uv_pipe_t server; - int r; - - r = uv_pipe_init(uv_default_loop(), &server, 0); - ASSERT(r == 0); - - r = uv_pipe_bind(&server, BAD_PIPENAME); - ASSERT(r == UV_EACCES); - - uv_close((uv_handle_t*)&server, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(pipe_bind_error_inval) { - uv_pipe_t server; - int r; - - r = uv_pipe_init(uv_default_loop(), &server, 0); - ASSERT(r == 0); - r = uv_pipe_bind(&server, TEST_PIPENAME); - ASSERT(r == 0); - r = uv_pipe_bind(&server, TEST_PIPENAME_2); - ASSERT(r == UV_EINVAL); - - uv_close((uv_handle_t*)&server, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(pipe_listen_without_bind) { -#if defined(NO_SELF_CONNECT) - RETURN_SKIP(NO_SELF_CONNECT); -#endif - uv_pipe_t server; - int r; - - r = uv_pipe_init(uv_default_loop(), &server, 0); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*)&server, SOMAXCONN, NULL); - ASSERT(r == UV_EINVAL); - - uv_close((uv_handle_t*)&server, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-pipe-close-stdout-read-stdin.c b/libuv/test/test-pipe-close-stdout-read-stdin.c deleted file mode 100644 index 126be2c..0000000 --- a/libuv/test/test-pipe-close-stdout-read-stdin.c +++ /dev/null @@ -1,112 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef _WIN32 - -#include -#include -#include -#include - -#include "uv.h" -#include "task.h" - -void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t* buf) -{ - static char buffer[1024]; - - buf->base = buffer; - buf->len = sizeof(buffer); -} - -void read_stdin(uv_stream_t *stream, ssize_t nread, const uv_buf_t* buf) -{ - if (nread < 0) { - uv_close((uv_handle_t*)stream, NULL); - return; - } -} - -/* - * This test is a reproduction of joyent/libuv#1419 . - */ -TEST_IMPL(pipe_close_stdout_read_stdin) { - int r = -1; - int pid; - int fd[2]; - int status; - char buf; - uv_pipe_t stdin_pipe; - - r = pipe(fd); - ASSERT(r == 0); - - if ((pid = fork()) == 0) { - /* - * Make the read side of the pipe our stdin. - * The write side will be closed by the parent process. - */ - close(fd[1]); - /* block until write end of pipe is closed */ - r = read(fd[0], &buf, 1); - ASSERT(-1 <= r && r <= 1); - close(0); - r = dup(fd[0]); - ASSERT(r != -1); - - /* Create a stream that reads from the pipe. */ - r = uv_pipe_init(uv_default_loop(), (uv_pipe_t *)&stdin_pipe, 0); - ASSERT(r == 0); - - r = uv_pipe_open((uv_pipe_t *)&stdin_pipe, 0); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t *)&stdin_pipe, alloc_buffer, read_stdin); - ASSERT(r == 0); - - /* - * Because the other end of the pipe was closed, there should - * be no event left to process after one run of the event loop. - * Otherwise, it means that events were not processed correctly. - */ - ASSERT(uv_run(uv_default_loop(), UV_RUN_NOWAIT) == 0); - } else { - /* - * Close both ends of the pipe so that the child - * get a POLLHUP event when it tries to read from - * the other end. - */ - close(fd[1]); - close(fd[0]); - - waitpid(pid, &status, 0); - ASSERT(WIFEXITED(status) && WEXITSTATUS(status) == 0); - } - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#else - -typedef int file_has_no_tests; /* ISO C forbids an empty translation unit. */ - -#endif /* ifndef _WIN32 */ diff --git a/libuv/test/test-pipe-connect-error.c b/libuv/test/test-pipe-connect-error.c deleted file mode 100644 index 30c270d..0000000 --- a/libuv/test/test-pipe-connect-error.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - - -#ifdef _WIN32 -# define BAD_PIPENAME "bad-pipe" -#else -# define BAD_PIPENAME "/path/to/unix/socket/that/really/should/not/be/there" -#endif - - -static int close_cb_called = 0; -static int connect_cb_called = 0; - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -static void connect_cb(uv_connect_t* connect_req, int status) { - ASSERT(status == UV_ENOENT); - uv_close((uv_handle_t*)connect_req->handle, close_cb); - connect_cb_called++; -} - - -static void connect_cb_file(uv_connect_t* connect_req, int status) { - ASSERT(status == UV_ENOTSOCK || status == UV_ECONNREFUSED); - uv_close((uv_handle_t*)connect_req->handle, close_cb); - connect_cb_called++; -} - - -TEST_IMPL(pipe_connect_bad_name) { - uv_pipe_t client; - uv_connect_t req; - int r; - - r = uv_pipe_init(uv_default_loop(), &client, 0); - ASSERT(r == 0); - uv_pipe_connect(&req, &client, BAD_PIPENAME, connect_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - ASSERT(connect_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(pipe_connect_to_file) { -#if defined(__ASAN__) - RETURN_SKIP("Test does not currently work in ASAN"); -#endif - const char* path = "test/fixtures/empty_file"; - uv_pipe_t client; - uv_connect_t req; - int r; - - r = uv_pipe_init(uv_default_loop(), &client, 0); - ASSERT(r == 0); - uv_pipe_connect(&req, &client, path, connect_cb_file); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - ASSERT(connect_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-pipe-connect-multiple.c b/libuv/test/test-pipe-connect-multiple.c deleted file mode 100644 index 0a60d4a..0000000 --- a/libuv/test/test-pipe-connect-multiple.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (c) 2015 Saúl Ibarra Corretgé . - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - - -static int connection_cb_called = 0; -static int connect_cb_called = 0; - -#define NUM_CLIENTS 4 - -typedef struct { - uv_pipe_t pipe_handle; - uv_connect_t conn_req; -} client_t; - -static uv_pipe_t server_handle; -static client_t clients[NUM_CLIENTS]; -static uv_pipe_t connections[NUM_CLIENTS]; - - -static void connection_cb(uv_stream_t* server, int status) { - int r; - uv_pipe_t* conn; - ASSERT(status == 0); - - conn = &connections[connection_cb_called]; - r = uv_pipe_init(server->loop, conn, 0); - ASSERT(r == 0); - - r = uv_accept(server, (uv_stream_t*)conn); - ASSERT(r == 0); - - if (++connection_cb_called == NUM_CLIENTS && - connect_cb_called == NUM_CLIENTS) { - uv_stop(server->loop); - } -} - - -static void connect_cb(uv_connect_t* connect_req, int status) { - ASSERT(status == 0); - if (++connect_cb_called == NUM_CLIENTS && - connection_cb_called == NUM_CLIENTS) { - uv_stop(connect_req->handle->loop); - } -} - - -TEST_IMPL(pipe_connect_multiple) { -#if defined(NO_SELF_CONNECT) - RETURN_SKIP(NO_SELF_CONNECT); -#endif - int i; - int r; - uv_loop_t* loop; - - loop = uv_default_loop(); - - r = uv_pipe_init(loop, &server_handle, 0); - ASSERT(r == 0); - - r = uv_pipe_bind(&server_handle, TEST_PIPENAME); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*)&server_handle, 128, connection_cb); - ASSERT(r == 0); - - for (i = 0; i < NUM_CLIENTS; i++) { - r = uv_pipe_init(loop, &clients[i].pipe_handle, 0); - ASSERT(r == 0); - uv_pipe_connect(&clients[i].conn_req, - &clients[i].pipe_handle, - TEST_PIPENAME, - connect_cb); - } - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(connection_cb_called == NUM_CLIENTS); - ASSERT(connect_cb_called == NUM_CLIENTS); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-pipe-connect-prepare.c b/libuv/test/test-pipe-connect-prepare.c deleted file mode 100644 index 08b57cb..0000000 --- a/libuv/test/test-pipe-connect-prepare.c +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (c) 2015 Saúl Ibarra Corretgé . - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - - -#ifdef _WIN32 -# define BAD_PIPENAME "bad-pipe" -#else -# define BAD_PIPENAME "/path/to/unix/socket/that/really/should/not/be/there" -#endif - - -static int close_cb_called = 0; -static int connect_cb_called = 0; - -static uv_pipe_t pipe_handle; -static uv_prepare_t prepare_handle; -static uv_connect_t conn_req; - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -static void connect_cb(uv_connect_t* connect_req, int status) { - ASSERT(status == UV_ENOENT); - connect_cb_called++; - uv_close((uv_handle_t*)&prepare_handle, close_cb); - uv_close((uv_handle_t*)&pipe_handle, close_cb); -} - - -static void prepare_cb(uv_prepare_t* handle) { - ASSERT(handle == &prepare_handle); - uv_pipe_connect(&conn_req, &pipe_handle, BAD_PIPENAME, connect_cb); -} - - -TEST_IMPL(pipe_connect_on_prepare) { - int r; - - r = uv_pipe_init(uv_default_loop(), &pipe_handle, 0); - ASSERT(r == 0); - - r = uv_prepare_init(uv_default_loop(), &prepare_handle); - ASSERT(r == 0); - r = uv_prepare_start(&prepare_handle, prepare_cb); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(close_cb_called == 2); - ASSERT(connect_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-pipe-getsockname.c b/libuv/test/test-pipe-getsockname.c deleted file mode 100644 index 79db8eb..0000000 --- a/libuv/test/test-pipe-getsockname.c +++ /dev/null @@ -1,270 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include -#include - -#if defined(__linux__) - #include - #include -#endif - -#ifndef _WIN32 -# include /* close */ -#else -# include -#endif - -static uv_pipe_t pipe_client; -static uv_pipe_t pipe_server; -static uv_connect_t connect_req; - -static int pipe_close_cb_called = 0; -static int pipe_client_connect_cb_called = 0; - - -static void pipe_close_cb(uv_handle_t* handle) { - ASSERT(handle == (uv_handle_t*) &pipe_client || - handle == (uv_handle_t*) &pipe_server); - pipe_close_cb_called++; -} - - -static void pipe_client_connect_cb(uv_connect_t* req, int status) { - char buf[1024]; - size_t len; - int r; - - ASSERT(req == &connect_req); - ASSERT(status == 0); - - len = sizeof buf; - r = uv_pipe_getpeername(&pipe_client, buf, &len); - ASSERT(r == 0); - - ASSERT(buf[len - 1] != 0); - ASSERT(memcmp(buf, TEST_PIPENAME, len) == 0); - - len = sizeof buf; - r = uv_pipe_getsockname(&pipe_client, buf, &len); - ASSERT(r == 0 && len == 0); - - pipe_client_connect_cb_called++; - - - uv_close((uv_handle_t*) &pipe_client, pipe_close_cb); - uv_close((uv_handle_t*) &pipe_server, pipe_close_cb); -} - - -static void pipe_server_connection_cb(uv_stream_t* handle, int status) { - /* This function *may* be called, depending on whether accept or the - * connection callback is called first. - */ - ASSERT(status == 0); -} - - -TEST_IMPL(pipe_getsockname) { -#if defined(NO_SELF_CONNECT) - RETURN_SKIP(NO_SELF_CONNECT); -#endif - uv_loop_t* loop; - char buf[1024]; - size_t len; - int r; - - loop = uv_default_loop(); - ASSERT_NOT_NULL(loop); - - r = uv_pipe_init(loop, &pipe_server, 0); - ASSERT(r == 0); - - len = sizeof buf; - r = uv_pipe_getsockname(&pipe_server, buf, &len); - ASSERT(r == UV_EBADF); - - len = sizeof buf; - r = uv_pipe_getpeername(&pipe_server, buf, &len); - ASSERT(r == UV_EBADF); - - r = uv_pipe_bind(&pipe_server, TEST_PIPENAME); - ASSERT(r == 0); - - len = sizeof buf; - r = uv_pipe_getsockname(&pipe_server, buf, &len); - ASSERT(r == 0); - - ASSERT(buf[len - 1] != 0); - ASSERT(buf[len] == '\0'); - ASSERT(memcmp(buf, TEST_PIPENAME, len) == 0); - - len = sizeof buf; - r = uv_pipe_getpeername(&pipe_server, buf, &len); - ASSERT(r == UV_ENOTCONN); - - r = uv_listen((uv_stream_t*) &pipe_server, 0, pipe_server_connection_cb); - ASSERT(r == 0); - - r = uv_pipe_init(loop, &pipe_client, 0); - ASSERT(r == 0); - - len = sizeof buf; - r = uv_pipe_getsockname(&pipe_client, buf, &len); - ASSERT(r == UV_EBADF); - - len = sizeof buf; - r = uv_pipe_getpeername(&pipe_client, buf, &len); - ASSERT(r == UV_EBADF); - - uv_pipe_connect(&connect_req, &pipe_client, TEST_PIPENAME, pipe_client_connect_cb); - - len = sizeof buf; - r = uv_pipe_getsockname(&pipe_client, buf, &len); - ASSERT(r == 0 && len == 0); - - len = sizeof buf; - r = uv_pipe_getpeername(&pipe_client, buf, &len); - ASSERT(r == 0); - - ASSERT(buf[len - 1] != 0); - ASSERT(memcmp(buf, TEST_PIPENAME, len) == 0); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - ASSERT(pipe_client_connect_cb_called == 1); - ASSERT(pipe_close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(pipe_getsockname_abstract) { -#if defined(__linux__) - char buf[1024]; - size_t len; - int r; - int sock; - struct sockaddr_un sun; - socklen_t sun_len; - char abstract_pipe[] = "\0test-pipe"; - - sock = socket(AF_UNIX, SOCK_STREAM, 0); - ASSERT(sock != -1); - - sun_len = sizeof sun; - memset(&sun, 0, sun_len); - sun.sun_family = AF_UNIX; - memcpy(sun.sun_path, abstract_pipe, sizeof abstract_pipe); - - r = bind(sock, (struct sockaddr*)&sun, sun_len); - ASSERT(r == 0); - - r = uv_pipe_init(uv_default_loop(), &pipe_server, 0); - ASSERT(r == 0); - r = uv_pipe_open(&pipe_server, sock); - ASSERT(r == 0); - - len = sizeof buf; - r = uv_pipe_getsockname(&pipe_server, buf, &len); - ASSERT(r == 0); - - ASSERT(memcmp(buf, abstract_pipe, sizeof abstract_pipe) == 0); - - uv_close((uv_handle_t*)&pipe_server, pipe_close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - close(sock); - - ASSERT(pipe_close_cb_called == 1); - MAKE_VALGRIND_HAPPY(); - return 0; -#else - MAKE_VALGRIND_HAPPY(); - return 0; -#endif -} - -TEST_IMPL(pipe_getsockname_blocking) { -#ifdef _WIN32 - HANDLE readh, writeh; - int readfd; - char buf1[1024], buf2[1024]; - size_t len1, len2; - int r; - - r = CreatePipe(&readh, &writeh, NULL, 65536); - ASSERT(r != 0); - - r = uv_pipe_init(uv_default_loop(), &pipe_client, 0); - ASSERT(r == 0); - readfd = _open_osfhandle((intptr_t)readh, _O_RDONLY); - ASSERT(r != -1); - r = uv_pipe_open(&pipe_client, readfd); - ASSERT(r == 0); - r = uv_read_start((uv_stream_t*) &pipe_client, - (uv_alloc_cb) abort, - (uv_read_cb) abort); - ASSERT(r == 0); - Sleep(100); - r = uv_read_stop((uv_stream_t*)&pipe_client); - ASSERT(r == 0); - - len1 = sizeof buf1; - r = uv_pipe_getsockname(&pipe_client, buf1, &len1); - ASSERT(r == 0); - ASSERT(len1 == 0); /* It's an annonymous pipe. */ - - r = uv_read_start((uv_stream_t*)&pipe_client, - (uv_alloc_cb) abort, - (uv_read_cb) abort); - ASSERT(r == 0); - Sleep(100); - - len2 = sizeof buf2; - r = uv_pipe_getsockname(&pipe_client, buf2, &len2); - ASSERT(r == 0); - ASSERT(len2 == 0); /* It's an annonymous pipe. */ - - r = uv_read_stop((uv_stream_t*)&pipe_client); - ASSERT(r == 0); - - ASSERT(len1 == len2); - ASSERT(memcmp(buf1, buf2, len1) == 0); - - pipe_close_cb_called = 0; - uv_close((uv_handle_t*)&pipe_client, pipe_close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(pipe_close_cb_called == 1); - - CloseHandle(writeh); -#endif - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-pipe-pending-instances.c b/libuv/test/test-pipe-pending-instances.c deleted file mode 100644 index b6ff911..0000000 --- a/libuv/test/test-pipe-pending-instances.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (c) 2015 Saúl Ibarra Corretgé . - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - - -static void connection_cb(uv_stream_t* server, int status) { - ASSERT(0 && "this will never be called"); -} - - -TEST_IMPL(pipe_pending_instances) { - int r; - uv_pipe_t pipe_handle; - uv_loop_t* loop; - - loop = uv_default_loop(); - - r = uv_pipe_init(loop, &pipe_handle, 0); - ASSERT(r == 0); - - uv_pipe_pending_instances(&pipe_handle, 8); - - r = uv_pipe_bind(&pipe_handle, TEST_PIPENAME); - ASSERT(r == 0); - - uv_pipe_pending_instances(&pipe_handle, 16); - - r = uv_listen((uv_stream_t*)&pipe_handle, 128, connection_cb); - ASSERT(r == 0); - - uv_close((uv_handle_t*)&pipe_handle, NULL); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-pipe-sendmsg.c b/libuv/test/test-pipe-sendmsg.c deleted file mode 100644 index 3bf427f..0000000 --- a/libuv/test/test-pipe-sendmsg.c +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - - -#ifndef _WIN32 - -#include -#include -#include -#include -#include -#include -#include - - -/* NOTE: size should be divisible by 2 */ -static uv_pipe_t incoming[4]; -static unsigned int incoming_count; -static unsigned int close_called; - - -static void set_nonblocking(uv_os_sock_t sock) { - int r; -#ifdef _WIN32 - unsigned long on = 1; - r = ioctlsocket(sock, FIONBIO, &on); - ASSERT(r == 0); -#else - int flags = fcntl(sock, F_GETFL, 0); - ASSERT(flags >= 0); - r = fcntl(sock, F_SETFL, flags | O_NONBLOCK); - ASSERT(r >= 0); -#endif -} - - - - -static void close_cb(uv_handle_t* handle) { - close_called++; -} - - -static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - static char base[1]; - - buf->base = base; - buf->len = sizeof(base); -} - - -static void read_cb(uv_stream_t* handle, - ssize_t nread, - const uv_buf_t* buf) { - uv_pipe_t* p; - uv_pipe_t* inc; - uv_handle_type pending; - unsigned int i; - - p = (uv_pipe_t*) handle; - ASSERT(nread >= 0); - - while (uv_pipe_pending_count(p) != 0) { - pending = uv_pipe_pending_type(p); - ASSERT(pending == UV_NAMED_PIPE); - - ASSERT(incoming_count < ARRAY_SIZE(incoming)); - inc = &incoming[incoming_count++]; - ASSERT(0 == uv_pipe_init(p->loop, inc, 0)); - ASSERT(0 == uv_accept(handle, (uv_stream_t*) inc)); - } - - if (incoming_count != ARRAY_SIZE(incoming)) - return; - - ASSERT(0 == uv_read_stop((uv_stream_t*) p)); - uv_close((uv_handle_t*) p, close_cb); - for (i = 0; i < ARRAY_SIZE(incoming); i++) - uv_close((uv_handle_t*) &incoming[i], close_cb); -} - - -TEST_IMPL(pipe_sendmsg) { -#if defined(NO_SEND_HANDLE_ON_PIPE) - RETURN_SKIP(NO_SEND_HANDLE_ON_PIPE); -#endif - uv_pipe_t p; - int r; - int fds[2]; - int send_fds[ARRAY_SIZE(incoming)]; - struct msghdr msg; - char scratch[64]; - struct cmsghdr *cmsg; - unsigned int i; - uv_buf_t buf; - - ASSERT(0 == socketpair(AF_UNIX, SOCK_STREAM, 0, fds)); - for (i = 0; i < ARRAY_SIZE(send_fds); i += 2) - ASSERT(0 == socketpair(AF_UNIX, SOCK_STREAM, 0, send_fds + i)); - ASSERT(i == ARRAY_SIZE(send_fds)); - ASSERT(0 == uv_pipe_init(uv_default_loop(), &p, 1)); - ASSERT(0 == uv_pipe_open(&p, fds[1])); - - buf = uv_buf_init("X", 1); - memset(&msg, 0, sizeof(msg)); - msg.msg_iov = (struct iovec*) &buf; - msg.msg_iovlen = 1; - msg.msg_flags = 0; - - msg.msg_control = (void*) scratch; - msg.msg_controllen = CMSG_LEN(sizeof(send_fds)); - ASSERT(sizeof(scratch) >= msg.msg_controllen); - - cmsg = CMSG_FIRSTHDR(&msg); - cmsg->cmsg_level = SOL_SOCKET; - cmsg->cmsg_type = SCM_RIGHTS; - cmsg->cmsg_len = msg.msg_controllen; - - /* silence aliasing warning */ - { - void* pv = CMSG_DATA(cmsg); - int* pi = pv; - for (i = 0; i < ARRAY_SIZE(send_fds); i++) - pi[i] = send_fds[i]; - } - - set_nonblocking(fds[1]); - ASSERT(0 == uv_read_start((uv_stream_t*) &p, alloc_cb, read_cb)); - - do - r = sendmsg(fds[0], &msg, 0); - while (r == -1 && errno == EINTR); - ASSERT(r == 1); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(ARRAY_SIZE(incoming) == incoming_count); - ASSERT(ARRAY_SIZE(incoming) + 1 == close_called); - close(fds[0]); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#else /* !_WIN32 */ - -TEST_IMPL(pipe_sendmsg) { - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#endif /* _WIN32 */ diff --git a/libuv/test/test-pipe-server-close.c b/libuv/test/test-pipe-server-close.c deleted file mode 100644 index 25305b3..0000000 --- a/libuv/test/test-pipe-server-close.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - - -static uv_pipe_t pipe_client; -static uv_pipe_t pipe_server; -static uv_connect_t connect_req; - -static int pipe_close_cb_called = 0; -static int pipe_client_connect_cb_called = 0; - - -static void pipe_close_cb(uv_handle_t* handle) { - ASSERT(handle == (uv_handle_t*) &pipe_client || - handle == (uv_handle_t*) &pipe_server); - pipe_close_cb_called++; -} - - -static void pipe_client_connect_cb(uv_connect_t* req, int status) { - ASSERT(req == &connect_req); - ASSERT(status == 0); - - pipe_client_connect_cb_called++; - - uv_close((uv_handle_t*) &pipe_client, pipe_close_cb); - uv_close((uv_handle_t*) &pipe_server, pipe_close_cb); -} - - -static void pipe_server_connection_cb(uv_stream_t* handle, int status) { - /* This function *may* be called, depending on whether accept or the - * connection callback is called first. - */ - ASSERT(status == 0); -} - - -TEST_IMPL(pipe_server_close) { -#if defined(NO_SELF_CONNECT) - RETURN_SKIP(NO_SELF_CONNECT); -#endif - uv_loop_t* loop; - int r; - - loop = uv_default_loop(); - ASSERT_NOT_NULL(loop); - - r = uv_pipe_init(loop, &pipe_server, 0); - ASSERT(r == 0); - - r = uv_pipe_bind(&pipe_server, TEST_PIPENAME); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*) &pipe_server, 0, pipe_server_connection_cb); - ASSERT(r == 0); - - r = uv_pipe_init(loop, &pipe_client, 0); - ASSERT(r == 0); - - uv_pipe_connect(&connect_req, &pipe_client, TEST_PIPENAME, pipe_client_connect_cb); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - ASSERT(pipe_client_connect_cb_called == 1); - ASSERT(pipe_close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-pipe-set-fchmod.c b/libuv/test/test-pipe-set-fchmod.c deleted file mode 100644 index 91e4766..0000000 --- a/libuv/test/test-pipe-set-fchmod.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to -* deal in the Software without restriction, including without limitation the -* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -* sell copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -* IN THE SOFTWARE. -*/ - - -#include "uv.h" -#include "task.h" - -TEST_IMPL(pipe_set_chmod) { - uv_pipe_t pipe_handle; - uv_loop_t* loop; - int r; -#ifndef _WIN32 - struct stat stat_buf; -#endif - - loop = uv_default_loop(); - - r = uv_pipe_init(loop, &pipe_handle, 0); - ASSERT(r == 0); - - r = uv_pipe_bind(&pipe_handle, TEST_PIPENAME); - ASSERT(r == 0); - - /* No easy way to test if this works, we will only make sure that the call is - * successful. */ - r = uv_pipe_chmod(&pipe_handle, UV_READABLE); - if (r == UV_EPERM) { - MAKE_VALGRIND_HAPPY(); - RETURN_SKIP("Insufficient privileges to alter pipe fmode"); - } - ASSERT(r == 0); -#ifndef _WIN32 - stat(TEST_PIPENAME, &stat_buf); - ASSERT(stat_buf.st_mode & S_IRUSR); - ASSERT(stat_buf.st_mode & S_IRGRP); - ASSERT(stat_buf.st_mode & S_IROTH); -#endif - - r = uv_pipe_chmod(&pipe_handle, UV_WRITABLE); - ASSERT(r == 0); -#ifndef _WIN32 - stat(TEST_PIPENAME, &stat_buf); - ASSERT(stat_buf.st_mode & S_IWUSR); - ASSERT(stat_buf.st_mode & S_IWGRP); - ASSERT(stat_buf.st_mode & S_IWOTH); -#endif - - r = uv_pipe_chmod(&pipe_handle, UV_WRITABLE | UV_READABLE); - ASSERT(r == 0); -#ifndef _WIN32 - stat(TEST_PIPENAME, &stat_buf); - ASSERT(stat_buf.st_mode & S_IRUSR); - ASSERT(stat_buf.st_mode & S_IRGRP); - ASSERT(stat_buf.st_mode & S_IROTH); - ASSERT(stat_buf.st_mode & S_IWUSR); - ASSERT(stat_buf.st_mode & S_IWGRP); - ASSERT(stat_buf.st_mode & S_IWOTH); -#endif - - r = uv_pipe_chmod(NULL, UV_WRITABLE | UV_READABLE); - ASSERT(r == UV_EBADF); - - r = uv_pipe_chmod(&pipe_handle, 12345678); - ASSERT(r == UV_EINVAL); - - uv_close((uv_handle_t*)&pipe_handle, NULL); - r = uv_pipe_chmod(&pipe_handle, UV_WRITABLE | UV_READABLE); - ASSERT(r == UV_EBADF); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-pipe-set-non-blocking.c b/libuv/test/test-pipe-set-non-blocking.c deleted file mode 100644 index 8246afa..0000000 --- a/libuv/test/test-pipe-set-non-blocking.c +++ /dev/null @@ -1,132 +0,0 @@ -/* Copyright (c) 2015, Ben Noordhuis - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include /* memset */ -#ifndef _WIN32 -#include /* close */ -#endif - -struct thread_ctx { - uv_barrier_t barrier; - uv_file fd; -}; - -static void thread_main(void* arg) { - struct thread_ctx* ctx; - uv_fs_t req; - uv_buf_t bufs[1]; - char buf[4096]; - ssize_t n; - int uv_errno; - - bufs[0] = uv_buf_init(buf, sizeof(buf)); - - ctx = arg; - uv_barrier_wait(&ctx->barrier); - - uv_sleep(100); /* make sure we are forcing the writer to block a bit */ - do { - uv_errno = uv_fs_read(NULL, &req, ctx->fd, bufs, 1, -1, NULL); - n = req.result; - uv_fs_req_cleanup(&req); - } while (n > 0 || (n == -1 && uv_errno == UV_EINTR)); - -#ifdef _WIN32 - ASSERT(n == UV_EOF); -#else - ASSERT(n == 0); -#endif -} - - -#ifdef _WIN32 -static void write_cb(uv_write_t* req, int status) { - ASSERT(status == 0); - req->handle = NULL; /* signal completion of write_cb */ -} -#endif - -#ifdef _WIN32 -#define NWRITES (10 << 16) -#else -#define NWRITES (10 << 20) -#endif - - -TEST_IMPL(pipe_set_non_blocking) { - struct thread_ctx ctx; - uv_pipe_t pipe_handle; - uv_thread_t thread; - size_t nwritten; - char data[4096]; - uv_buf_t buf; - uv_file fd[2]; - int n; -#ifdef _WIN32 - uv_write_t write_req; -#endif - - ASSERT(0 == uv_pipe_init(uv_default_loop(), &pipe_handle, 0)); - ASSERT(0 == uv_pipe(fd, 0, 0)); - ASSERT(0 == uv_pipe_open(&pipe_handle, fd[1])); - ASSERT(0 == uv_stream_set_blocking((uv_stream_t*) &pipe_handle, 1)); - fd[1] = -1; /* fd[1] is owned by pipe_handle now. */ - - ctx.fd = fd[0]; - ASSERT(0 == uv_barrier_init(&ctx.barrier, 2)); - ASSERT(0 == uv_thread_create(&thread, thread_main, &ctx)); - uv_barrier_wait(&ctx.barrier); - - buf.len = sizeof(data); - buf.base = data; - memset(data, '.', sizeof(data)); - - nwritten = 0; - while (nwritten < NWRITES) { - /* The stream is in blocking mode so uv_try_write() should always succeed - * with the exact number of bytes that we wanted written. - */ - n = uv_try_write((uv_stream_t*) &pipe_handle, &buf, 1); -#ifdef _WIN32 - ASSERT(n == UV_EAGAIN); /* E_NOTIMPL */ - ASSERT(0 == uv_write(&write_req, (uv_stream_t*) &pipe_handle, &buf, 1, write_cb)); - ASSERT_NOT_NULL(write_req.handle); - ASSERT(1 == uv_run(uv_default_loop(), UV_RUN_ONCE)); /* queue write_cb */ - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_ONCE)); /* process write_cb */ - ASSERT_NULL(write_req.handle); /* check for signaled completion of write_cb */ - n = buf.len; -#endif - ASSERT(n == sizeof(data)); - nwritten += n; - } - - uv_close((uv_handle_t*) &pipe_handle, NULL); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - ASSERT(0 == uv_thread_join(&thread)); -#ifdef _WIN32 - ASSERT(0 == _close(fd[0])); /* fd[1] is closed by uv_close(). */ -#else - ASSERT(0 == close(fd[0])); /* fd[1] is closed by uv_close(). */ -#endif - fd[0] = -1; - uv_barrier_destroy(&ctx.barrier); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-platform-output.c b/libuv/test/test-platform-output.c deleted file mode 100644 index 341c7ae..0000000 --- a/libuv/test/test-platform-output.c +++ /dev/null @@ -1,176 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - - -TEST_IMPL(platform_output) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - char buffer[512]; - size_t rss; - size_t size; - double uptime; - uv_pid_t pid; - uv_pid_t ppid; - uv_rusage_t rusage; - uv_cpu_info_t* cpus; - uv_interface_address_t* interfaces; - uv_passwd_t pwd; - uv_utsname_t uname; - int count; - int i; - int err; - - err = uv_get_process_title(buffer, sizeof(buffer)); - ASSERT(err == 0); - printf("uv_get_process_title: %s\n", buffer); - - size = sizeof(buffer); - err = uv_cwd(buffer, &size); - ASSERT(err == 0); - printf("uv_cwd: %s\n", buffer); - - err = uv_resident_set_memory(&rss); -#if defined(__MSYS__) - ASSERT(err == UV_ENOSYS); -#else - ASSERT(err == 0); - printf("uv_resident_set_memory: %llu\n", (unsigned long long) rss); -#endif - - err = uv_uptime(&uptime); -#if defined(__PASE__) - ASSERT(err == UV_ENOSYS); -#else - ASSERT(err == 0); - ASSERT(uptime > 0); - printf("uv_uptime: %f\n", uptime); -#endif - - err = uv_getrusage(&rusage); - ASSERT(err == 0); - ASSERT(rusage.ru_utime.tv_sec >= 0); - ASSERT(rusage.ru_utime.tv_usec >= 0); - ASSERT(rusage.ru_stime.tv_sec >= 0); - ASSERT(rusage.ru_stime.tv_usec >= 0); - printf("uv_getrusage:\n"); - printf(" user: %llu sec %llu microsec\n", - (unsigned long long) rusage.ru_utime.tv_sec, - (unsigned long long) rusage.ru_utime.tv_usec); - printf(" system: %llu sec %llu microsec\n", - (unsigned long long) rusage.ru_stime.tv_sec, - (unsigned long long) rusage.ru_stime.tv_usec); - printf(" page faults: %llu\n", (unsigned long long) rusage.ru_majflt); - printf(" maximum resident set size: %llu\n", - (unsigned long long) rusage.ru_maxrss); - - err = uv_cpu_info(&cpus, &count); -#if defined(__CYGWIN__) || defined(__MSYS__) - ASSERT(err == UV_ENOSYS); -#else - ASSERT(err == 0); - - printf("uv_cpu_info:\n"); - for (i = 0; i < count; i++) { - printf(" model: %s\n", cpus[i].model); - printf(" speed: %d\n", cpus[i].speed); - printf(" times.sys: %llu\n", (unsigned long long) cpus[i].cpu_times.sys); - printf(" times.user: %llu\n", - (unsigned long long) cpus[i].cpu_times.user); - printf(" times.idle: %llu\n", - (unsigned long long) cpus[i].cpu_times.idle); - printf(" times.irq: %llu\n", (unsigned long long) cpus[i].cpu_times.irq); - printf(" times.nice: %llu\n", - (unsigned long long) cpus[i].cpu_times.nice); - } -#endif - uv_free_cpu_info(cpus, count); - - err = uv_interface_addresses(&interfaces, &count); - ASSERT(err == 0); - - printf("uv_interface_addresses:\n"); - for (i = 0; i < count; i++) { - printf(" name: %s\n", interfaces[i].name); - printf(" internal: %d\n", interfaces[i].is_internal); - printf(" physical address: "); - printf("%02x:%02x:%02x:%02x:%02x:%02x\n", - (unsigned char)interfaces[i].phys_addr[0], - (unsigned char)interfaces[i].phys_addr[1], - (unsigned char)interfaces[i].phys_addr[2], - (unsigned char)interfaces[i].phys_addr[3], - (unsigned char)interfaces[i].phys_addr[4], - (unsigned char)interfaces[i].phys_addr[5]); - - if (interfaces[i].address.address4.sin_family == AF_INET) { - uv_ip4_name(&interfaces[i].address.address4, buffer, sizeof(buffer)); - } else if (interfaces[i].address.address4.sin_family == AF_INET6) { - uv_ip6_name(&interfaces[i].address.address6, buffer, sizeof(buffer)); - } - - printf(" address: %s\n", buffer); - - if (interfaces[i].netmask.netmask4.sin_family == AF_INET) { - uv_ip4_name(&interfaces[i].netmask.netmask4, buffer, sizeof(buffer)); - printf(" netmask: %s\n", buffer); - } else if (interfaces[i].netmask.netmask4.sin_family == AF_INET6) { - uv_ip6_name(&interfaces[i].netmask.netmask6, buffer, sizeof(buffer)); - printf(" netmask: %s\n", buffer); - } else { - printf(" netmask: none\n"); - } - } - uv_free_interface_addresses(interfaces, count); - - err = uv_os_get_passwd(&pwd); - ASSERT(err == 0); - - printf("uv_os_get_passwd:\n"); - printf(" euid: %ld\n", pwd.uid); - printf(" gid: %ld\n", pwd.gid); - printf(" username: %s\n", pwd.username); - printf(" shell: %s\n", pwd.shell); - printf(" home directory: %s\n", pwd.homedir); - uv_os_free_passwd(&pwd); - - pid = uv_os_getpid(); - ASSERT(pid > 0); - printf("uv_os_getpid: %d\n", (int) pid); - ppid = uv_os_getppid(); - ASSERT(ppid > 0); - printf("uv_os_getppid: %d\n", (int) ppid); - - err = uv_os_uname(&uname); - ASSERT(err == 0); - printf("uv_os_uname:\n"); - printf(" sysname: %s\n", uname.sysname); - printf(" release: %s\n", uname.release); - printf(" version: %s\n", uname.version); - printf(" machine: %s\n", uname.machine); - - return 0; -} diff --git a/libuv/test/test-poll-close-doesnt-corrupt-stack.c b/libuv/test/test-poll-close-doesnt-corrupt-stack.c deleted file mode 100644 index 1d7e84f..0000000 --- a/libuv/test/test-poll-close-doesnt-corrupt-stack.c +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright Bert Belder, and other libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include - -#include "uv.h" -#include "task.h" - -#ifdef _MSC_VER /* msvc */ -# define NO_INLINE __declspec(noinline) -#else /* gcc */ -# define NO_INLINE __attribute__ ((noinline)) -#endif - -#ifdef _WIN32 -static uv_os_sock_t sock; -static uv_poll_t handle; -static int close_cb_called = 0; - - -static void close_cb(uv_handle_t* h) { - close_cb_called++; -} - - -static void poll_cb(uv_poll_t* h, int status, int events) { - ASSERT(0 && "should never get here"); -} - - -static void NO_INLINE close_socket_and_verify_stack(void) { - const uint32_t MARKER = 0xDEADBEEF; - const int VERIFY_AFTER = 10; /* ms */ - int r; - - volatile uint32_t data[65536]; - size_t i; - - for (i = 0; i < ARRAY_SIZE(data); i++) - data[i] = MARKER; - - r = closesocket(sock); - ASSERT(r == 0); - - uv_sleep(VERIFY_AFTER); - - for (i = 0; i < ARRAY_SIZE(data); i++) - ASSERT(data[i] == MARKER); -} -#endif - - -TEST_IMPL(poll_close_doesnt_corrupt_stack) { -#ifndef _WIN32 - RETURN_SKIP("Test only relevant on Windows"); -#else - struct WSAData wsa_data; - int r; - unsigned long on; - struct sockaddr_in addr; - - r = WSAStartup(MAKEWORD(2, 2), &wsa_data); - ASSERT(r == 0); - - sock = socket(AF_INET, SOCK_STREAM, 0); - ASSERT(sock != INVALID_SOCKET); - on = 1; - r = ioctlsocket(sock, FIONBIO, &on); - ASSERT(r == 0); - - r = uv_ip4_addr("127.0.0.1", TEST_PORT, &addr); - ASSERT(r == 0); - - r = connect(sock, (const struct sockaddr*) &addr, sizeof addr); - ASSERT(r != 0); - ASSERT(WSAGetLastError() == WSAEWOULDBLOCK); - - r = uv_poll_init_socket(uv_default_loop(), &handle, sock); - ASSERT(r == 0); - r = uv_poll_start(&handle, UV_READABLE | UV_WRITABLE, poll_cb); - ASSERT(r == 0); - - uv_close((uv_handle_t*) &handle, close_cb); - - close_socket_and_verify_stack(); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -#endif -} diff --git a/libuv/test/test-poll-close.c b/libuv/test/test-poll-close.c deleted file mode 100644 index 2eccddf..0000000 --- a/libuv/test/test-poll-close.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include - -#ifndef _WIN32 -# include -# include -# include -#endif - -#include "uv.h" -#include "task.h" - -#define NUM_SOCKETS 64 - - -static int close_cb_called = 0; - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - - -TEST_IMPL(poll_close) { - uv_os_sock_t sockets[NUM_SOCKETS]; - uv_poll_t poll_handles[NUM_SOCKETS]; - int i; - -#ifdef _WIN32 - { - struct WSAData wsa_data; - int r = WSAStartup(MAKEWORD(2, 2), &wsa_data); - ASSERT(r == 0); - } -#endif - - for (i = 0; i < NUM_SOCKETS; i++) { - sockets[i] = socket(AF_INET, SOCK_STREAM, 0); - uv_poll_init_socket(uv_default_loop(), &poll_handles[i], sockets[i]); - uv_poll_start(&poll_handles[i], UV_READABLE | UV_WRITABLE, NULL); - } - - for (i = 0; i < NUM_SOCKETS; i++) { - uv_close((uv_handle_t*) &poll_handles[i], close_cb); - } - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == NUM_SOCKETS); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-poll-closesocket.c b/libuv/test/test-poll-closesocket.c deleted file mode 100644 index 1a1c364..0000000 --- a/libuv/test/test-poll-closesocket.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -#include - -#include "uv.h" -#include "task.h" - -#ifdef _WIN32 -static uv_os_sock_t sock; -static uv_poll_t handle; -static int close_cb_called = 0; - - -static void close_cb(uv_handle_t* h) { - close_cb_called++; -} - - -static void poll_cb(uv_poll_t* h, int status, int events) { - int r; - - ASSERT(status == 0); - ASSERT(h == &handle); - - r = uv_poll_start(&handle, UV_READABLE, poll_cb); - ASSERT(r == 0); - - closesocket(sock); - uv_close((uv_handle_t*) &handle, close_cb); - -} -#endif - - -TEST_IMPL(poll_closesocket) { -#ifndef _WIN32 - RETURN_SKIP("Test only relevant on Windows"); -#else - struct WSAData wsa_data; - int r; - unsigned long on; - struct sockaddr_in addr; - - r = WSAStartup(MAKEWORD(2, 2), &wsa_data); - ASSERT(r == 0); - - sock = socket(AF_INET, SOCK_STREAM, 0); - ASSERT(sock != INVALID_SOCKET); - on = 1; - r = ioctlsocket(sock, FIONBIO, &on); - ASSERT(r == 0); - - r = uv_ip4_addr("127.0.0.1", TEST_PORT, &addr); - ASSERT(r == 0); - - r = connect(sock, (const struct sockaddr*) &addr, sizeof addr); - ASSERT(r != 0); - ASSERT(WSAGetLastError() == WSAEWOULDBLOCK); - - r = uv_poll_init_socket(uv_default_loop(), &handle, sock); - ASSERT(r == 0); - r = uv_poll_start(&handle, UV_WRITABLE, poll_cb); - ASSERT(r == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -#endif -} diff --git a/libuv/test/test-poll-multiple-handles.c b/libuv/test/test-poll-multiple-handles.c deleted file mode 100644 index fc2205d..0000000 --- a/libuv/test/test-poll-multiple-handles.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include - -#ifndef _WIN32 -# include -# include -# include -#endif - -#include "uv.h" -#include "task.h" - - -static int close_cb_called = 0; - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - -static void poll_cb(uv_poll_t* handle, int status, int events) { - /* Not a bound socket, linux immediately reports UV_READABLE, other OS do not */ - ASSERT(events == UV_READABLE); -} - -TEST_IMPL(poll_multiple_handles) { - uv_os_sock_t sock; - uv_poll_t first_poll_handle, second_poll_handle; - -#ifdef _WIN32 - { - struct WSAData wsa_data; - int r = WSAStartup(MAKEWORD(2, 2), &wsa_data); - ASSERT(r == 0); - } -#endif - - sock = socket(AF_INET, SOCK_STREAM, 0); -#ifdef _WIN32 - ASSERT(sock != INVALID_SOCKET); -#else - ASSERT(sock != -1); -#endif - ASSERT(0 == uv_poll_init_socket(uv_default_loop(), &first_poll_handle, sock)); - ASSERT(0 == uv_poll_init_socket(uv_default_loop(), &second_poll_handle, sock)); - - ASSERT(0 == uv_poll_start(&first_poll_handle, UV_READABLE, poll_cb)); - - /* We may not start polling while another polling handle is active - * on that fd. - */ -#ifndef _WIN32 - /* We do not track handles in an O(1) lookupable way on Windows, - * so not checking that here. - */ - ASSERT(uv_poll_start(&second_poll_handle, UV_READABLE, poll_cb) == UV_EEXIST); -#endif - - /* After stopping the other polling handle, we now should be able to poll */ - ASSERT(0 == uv_poll_stop(&first_poll_handle)); - ASSERT(0 == uv_poll_start(&second_poll_handle, UV_READABLE, poll_cb)); - - /* Closing an already stopped polling handle is safe in any case */ - uv_close((uv_handle_t*) &first_poll_handle, close_cb); - - uv_unref((uv_handle_t*) &second_poll_handle); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - ASSERT(close_cb_called == 1); - uv_ref((uv_handle_t*) &second_poll_handle); - - ASSERT(uv_is_active((uv_handle_t*) &second_poll_handle)); - uv_close((uv_handle_t*) &second_poll_handle, close_cb); - - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - ASSERT(close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-poll-oob.c b/libuv/test/test-poll-oob.c deleted file mode 100644 index 77ffe31..0000000 --- a/libuv/test/test-poll-oob.c +++ /dev/null @@ -1,210 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#if !defined(_WIN32) - -#include "uv.h" -#include "task.h" - -#include -#include -#include -#include -#include - -static uv_tcp_t server_handle; -static uv_tcp_t client_handle; -static uv_tcp_t peer_handle; -static uv_poll_t poll_req[2]; -static uv_idle_t idle; -static uv_os_fd_t client_fd; -static uv_os_fd_t server_fd; -static int ticks; -static const int kMaxTicks = 10; -static int cli_pr_check = 0; -static int cli_rd_check = 0; -static int srv_rd_check = 0; - -static int got_eagain(void) { - return errno == EAGAIN - || errno == EINPROGRESS -#ifdef EWOULDBLOCK - || errno == EWOULDBLOCK -#endif - ; -} - -static void idle_cb(uv_idle_t* idle) { - uv_sleep(100); - if (++ticks < kMaxTicks) - return; - - uv_poll_stop(&poll_req[0]); - uv_poll_stop(&poll_req[1]); - uv_close((uv_handle_t*) &server_handle, NULL); - uv_close((uv_handle_t*) &client_handle, NULL); - uv_close((uv_handle_t*) &peer_handle, NULL); - uv_close((uv_handle_t*) idle, NULL); -} - -static void poll_cb(uv_poll_t* handle, int status, int events) { - char buffer[5]; - int n; - int fd; - - ASSERT(0 == uv_fileno((uv_handle_t*)handle, &fd)); - memset(buffer, 0, 5); - - if (events & UV_PRIORITIZED) { - do - n = recv(client_fd, &buffer, 5, MSG_OOB); - while (n == -1 && errno == EINTR); - ASSERT(n >= 0 || errno != EINVAL); - cli_pr_check = 1; - ASSERT(0 == uv_poll_stop(&poll_req[0])); - ASSERT(0 == uv_poll_start(&poll_req[0], - UV_READABLE | UV_WRITABLE, - poll_cb)); - } - if (events & UV_READABLE) { - if (fd == client_fd) { - do - n = recv(client_fd, &buffer, 5, 0); - while (n == -1 && errno == EINTR); - ASSERT(n >= 0 || errno != EINVAL); - if (cli_rd_check == 1) { - ASSERT(strncmp(buffer, "world", n) == 0); - ASSERT(5 == n); - cli_rd_check = 2; - } - if (cli_rd_check == 0) { - ASSERT(n == 4); - ASSERT(strncmp(buffer, "hello", n) == 0); - cli_rd_check = 1; - do { - do - n = recv(server_fd, &buffer, 5, 0); - while (n == -1 && errno == EINTR); - if (n > 0) { - ASSERT(n == 5); - ASSERT(strncmp(buffer, "world", n) == 0); - cli_rd_check = 2; - } - } while (n > 0); - - ASSERT(got_eagain()); - } - } - if (fd == server_fd) { - do - n = recv(server_fd, &buffer, 3, 0); - while (n == -1 && errno == EINTR); - ASSERT(n >= 0 || errno != EINVAL); - ASSERT(3 == n); - ASSERT(strncmp(buffer, "foo", n) == 0); - srv_rd_check = 1; - uv_poll_stop(&poll_req[1]); - } - } - if (events & UV_WRITABLE) { - do { - n = send(client_fd, "foo", 3, 0); - } while (n < 0 && errno == EINTR); - ASSERT(3 == n); - } -} - -static void connection_cb(uv_stream_t* handle, int status) { - int r; - - ASSERT(0 == status); - ASSERT(0 == uv_accept(handle, (uv_stream_t*) &peer_handle)); - ASSERT(0 == uv_fileno((uv_handle_t*) &peer_handle, &server_fd)); - ASSERT(0 == uv_poll_init_socket(uv_default_loop(), &poll_req[0], client_fd)); - ASSERT(0 == uv_poll_init_socket(uv_default_loop(), &poll_req[1], server_fd)); - ASSERT(0 == uv_poll_start(&poll_req[0], - UV_PRIORITIZED | UV_READABLE | UV_WRITABLE, - poll_cb)); - ASSERT(0 == uv_poll_start(&poll_req[1], - UV_READABLE, - poll_cb)); - do { - r = send(server_fd, "hello", 5, MSG_OOB); - } while (r < 0 && errno == EINTR); - ASSERT(5 == r); - - do { - r = send(server_fd, "world", 5, 0); - } while (r < 0 && errno == EINTR); - ASSERT(5 == r); - - ASSERT(0 == uv_idle_start(&idle, idle_cb)); -} - - -TEST_IMPL(poll_oob) { - struct sockaddr_in addr; - int r = 0; - uv_loop_t* loop; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - loop = uv_default_loop(); - - ASSERT(0 == uv_tcp_init(loop, &server_handle)); - ASSERT(0 == uv_tcp_init(loop, &client_handle)); - ASSERT(0 == uv_tcp_init(loop, &peer_handle)); - ASSERT(0 == uv_idle_init(loop, &idle)); - ASSERT(0 == uv_tcp_bind(&server_handle, (const struct sockaddr*) &addr, 0)); - ASSERT(0 == uv_listen((uv_stream_t*) &server_handle, 1, connection_cb)); - - /* Ensure two separate packets */ - ASSERT(0 == uv_tcp_nodelay(&client_handle, 1)); - - client_fd = socket(PF_INET, SOCK_STREAM, 0); - ASSERT(client_fd >= 0); - do { - errno = 0; - r = connect(client_fd, (const struct sockaddr*)&addr, sizeof(addr)); - } while (r == -1 && errno == EINTR); - ASSERT(r == 0); - - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - - ASSERT(ticks == kMaxTicks); - - /* Did client receive the POLLPRI message */ - ASSERT(cli_pr_check == 1); - /* Did client receive the POLLIN message */ - ASSERT(cli_rd_check == 2); - /* Could we write with POLLOUT and did the server receive our POLLOUT message - * through POLLIN. - */ - ASSERT(srv_rd_check == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#else - -typedef int file_has_no_tests; /* ISO C forbids an empty translation unit. */ - -#endif diff --git a/libuv/test/test-poll.c b/libuv/test/test-poll.c deleted file mode 100644 index 3bc422d..0000000 --- a/libuv/test/test-poll.c +++ /dev/null @@ -1,696 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include - -#ifdef _WIN32 -# include -#else -# include -# include -#endif - -#include "uv.h" -#include "task.h" - -#ifdef __linux__ -# include -#endif - -#ifdef UV_HAVE_KQUEUE -# include -# include -# include -#endif - - -#define NUM_CLIENTS 5 -#define TRANSFER_BYTES (1 << 16) - -#undef MIN -#define MIN(a, b) (((a) < (b)) ? (a) : (b)); - - -typedef enum { - UNIDIRECTIONAL, - DUPLEX -} test_mode_t; - -typedef struct connection_context_s { - uv_poll_t poll_handle; - uv_timer_t timer_handle; - uv_os_sock_t sock; - size_t read, sent; - int is_server_connection; - int open_handles; - int got_fin, sent_fin, got_disconnect; - unsigned int events, delayed_events; -} connection_context_t; - -typedef struct server_context_s { - uv_poll_t poll_handle; - uv_os_sock_t sock; - int connections; -} server_context_t; - - -static void delay_timer_cb(uv_timer_t* timer); - - -static test_mode_t test_mode = DUPLEX; - -static int closed_connections = 0; - -static int valid_writable_wakeups = 0; -static int spurious_writable_wakeups = 0; - -#if !defined(__sun) && !defined(_AIX) && !defined(__MVS__) -static int disconnects = 0; -#endif /* !__sun && !_AIX && !__MVS__ */ - -static int got_eagain(void) { -#ifdef _WIN32 - return WSAGetLastError() == WSAEWOULDBLOCK; -#else - return errno == EAGAIN - || errno == EINPROGRESS -#ifdef EWOULDBLOCK - || errno == EWOULDBLOCK; -#endif - ; -#endif -} - - -static uv_os_sock_t create_bound_socket (struct sockaddr_in bind_addr) { - uv_os_sock_t sock; - int r; - - sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); -#ifdef _WIN32 - ASSERT(sock != INVALID_SOCKET); -#else - ASSERT(sock >= 0); -#endif - -#ifndef _WIN32 - { - /* Allow reuse of the port. */ - int yes = 1; - r = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes); - ASSERT(r == 0); - } -#endif - - r = bind(sock, (const struct sockaddr*) &bind_addr, sizeof bind_addr); - ASSERT(r == 0); - - return sock; -} - - -static void close_socket(uv_os_sock_t sock) { - int r; -#ifdef _WIN32 - r = closesocket(sock); -#else - r = close(sock); -#endif - /* On FreeBSD close() can fail with ECONNRESET if the socket was shutdown by - * the peer before all pending data was delivered. - */ - ASSERT(r == 0 || errno == ECONNRESET); -} - - -static connection_context_t* create_connection_context( - uv_os_sock_t sock, int is_server_connection) { - int r; - connection_context_t* context; - - context = (connection_context_t*) malloc(sizeof *context); - ASSERT_NOT_NULL(context); - - context->sock = sock; - context->is_server_connection = is_server_connection; - context->read = 0; - context->sent = 0; - context->open_handles = 0; - context->events = 0; - context->delayed_events = 0; - context->got_fin = 0; - context->sent_fin = 0; - context->got_disconnect = 0; - - r = uv_poll_init_socket(uv_default_loop(), &context->poll_handle, sock); - context->open_handles++; - context->poll_handle.data = context; - ASSERT(r == 0); - - r = uv_timer_init(uv_default_loop(), &context->timer_handle); - context->open_handles++; - context->timer_handle.data = context; - ASSERT(r == 0); - - return context; -} - - -static void connection_close_cb(uv_handle_t* handle) { - connection_context_t* context = (connection_context_t*) handle->data; - - if (--context->open_handles == 0) { - if (test_mode == DUPLEX || context->is_server_connection) { - ASSERT(context->read == TRANSFER_BYTES); - } else { - ASSERT(context->read == 0); - } - - if (test_mode == DUPLEX || !context->is_server_connection) { - ASSERT(context->sent == TRANSFER_BYTES); - } else { - ASSERT(context->sent == 0); - } - - closed_connections++; - - free(context); - } -} - - -static void destroy_connection_context(connection_context_t* context) { - uv_close((uv_handle_t*) &context->poll_handle, connection_close_cb); - uv_close((uv_handle_t*) &context->timer_handle, connection_close_cb); -} - - -static void connection_poll_cb(uv_poll_t* handle, int status, int events) { - connection_context_t* context = (connection_context_t*) handle->data; - unsigned int new_events; - int r; - - ASSERT(status == 0); - ASSERT(events & context->events); - ASSERT(!(events & ~context->events)); - - new_events = context->events; - - if (events & UV_READABLE) { - int action = rand() % 7; - - switch (action) { - case 0: - case 1: { - /* Read a couple of bytes. */ - static char buffer[74]; - - do - r = recv(context->sock, buffer, sizeof buffer, 0); - while (r == -1 && errno == EINTR); - ASSERT(r >= 0); - - if (r > 0) { - context->read += r; - } else { - /* Got FIN. */ - context->got_fin = 1; - new_events &= ~UV_READABLE; - } - - break; - } - - case 2: - case 3: { - /* Read until EAGAIN. */ - static char buffer[931]; - - for (;;) { - do - r = recv(context->sock, buffer, sizeof buffer, 0); - while (r == -1 && errno == EINTR); - - if (r <= 0) - break; - - context->read += r; - } - - if (r == 0) { - /* Got FIN. */ - context->got_fin = 1; - new_events &= ~UV_READABLE; - } else { - ASSERT(got_eagain()); - } - - break; - } - - case 4: - /* Ignore. */ - break; - - case 5: - /* Stop reading for a while. Restart in timer callback. */ - new_events &= ~UV_READABLE; - if (!uv_is_active((uv_handle_t*) &context->timer_handle)) { - context->delayed_events = UV_READABLE; - uv_timer_start(&context->timer_handle, delay_timer_cb, 10, 0); - } else { - context->delayed_events |= UV_READABLE; - } - break; - - case 6: - /* Fudge with the event mask. */ - uv_poll_start(&context->poll_handle, UV_WRITABLE, connection_poll_cb); - uv_poll_start(&context->poll_handle, UV_READABLE, connection_poll_cb); - context->events = UV_READABLE; - break; - - default: - ASSERT(0); - } - } - - if (events & UV_WRITABLE) { - if (context->sent < TRANSFER_BYTES && - !(test_mode == UNIDIRECTIONAL && context->is_server_connection)) { - /* We have to send more bytes. */ - int action = rand() % 7; - - switch (action) { - case 0: - case 1: { - /* Send a couple of bytes. */ - static char buffer[103]; - - int send_bytes = MIN(TRANSFER_BYTES - context->sent, sizeof buffer); - ASSERT(send_bytes > 0); - - do - r = send(context->sock, buffer, send_bytes, 0); - while (r == -1 && errno == EINTR); - - if (r < 0) { - ASSERT(got_eagain()); - spurious_writable_wakeups++; - break; - } - - ASSERT(r > 0); - context->sent += r; - valid_writable_wakeups++; - break; - } - - case 2: - case 3: { - /* Send until EAGAIN. */ - static char buffer[1234]; - - int send_bytes = MIN(TRANSFER_BYTES - context->sent, sizeof buffer); - ASSERT(send_bytes > 0); - - do - r = send(context->sock, buffer, send_bytes, 0); - while (r == -1 && errno == EINTR); - - if (r < 0) { - ASSERT(got_eagain()); - spurious_writable_wakeups++; - break; - } - - ASSERT(r > 0); - valid_writable_wakeups++; - context->sent += r; - - while (context->sent < TRANSFER_BYTES) { - send_bytes = MIN(TRANSFER_BYTES - context->sent, sizeof buffer); - ASSERT(send_bytes > 0); - - do - r = send(context->sock, buffer, send_bytes, 0); - while (r == -1 && errno == EINTR); - ASSERT(r != 0); - - if (r < 0) { - ASSERT(got_eagain()); - break; - } - - context->sent += r; - } - break; - } - - case 4: - /* Ignore. */ - break; - - case 5: - /* Stop sending for a while. Restart in timer callback. */ - new_events &= ~UV_WRITABLE; - if (!uv_is_active((uv_handle_t*) &context->timer_handle)) { - context->delayed_events = UV_WRITABLE; - uv_timer_start(&context->timer_handle, delay_timer_cb, 100, 0); - } else { - context->delayed_events |= UV_WRITABLE; - } - break; - - case 6: - /* Fudge with the event mask. */ - uv_poll_start(&context->poll_handle, - UV_READABLE, - connection_poll_cb); - uv_poll_start(&context->poll_handle, - UV_WRITABLE, - connection_poll_cb); - context->events = UV_WRITABLE; - break; - - default: - ASSERT(0); - } - - } else { - /* Nothing more to write. Send FIN. */ - int r; -#ifdef _WIN32 - r = shutdown(context->sock, SD_SEND); -#else - r = shutdown(context->sock, SHUT_WR); -#endif - ASSERT(r == 0); - context->sent_fin = 1; - new_events &= ~UV_WRITABLE; - } - } -#if !defined(__sun) && !defined(_AIX) && !defined(__MVS__) - if (events & UV_DISCONNECT) { - context->got_disconnect = 1; - ++disconnects; - new_events &= ~UV_DISCONNECT; - } - - if (context->got_fin && context->sent_fin && context->got_disconnect) { -#else /* __sun && _AIX && __MVS__ */ - if (context->got_fin && context->sent_fin) { -#endif /* !__sun && !_AIX && !__MVS__ */ - /* Sent and received FIN. Close and destroy context. */ - close_socket(context->sock); - destroy_connection_context(context); - context->events = 0; - - } else if (new_events != context->events) { - /* Poll mask changed. Call uv_poll_start again. */ - context->events = new_events; - uv_poll_start(handle, new_events, connection_poll_cb); - } - - /* Assert that uv_is_active works correctly for poll handles. */ - if (context->events != 0) { - ASSERT(1 == uv_is_active((uv_handle_t*) handle)); - } else { - ASSERT(0 == uv_is_active((uv_handle_t*) handle)); - } -} - - -static void delay_timer_cb(uv_timer_t* timer) { - connection_context_t* context = (connection_context_t*) timer->data; - int r; - - /* Timer should auto stop. */ - ASSERT(0 == uv_is_active((uv_handle_t*) timer)); - - /* Add the requested events to the poll mask. */ - ASSERT(context->delayed_events != 0); - context->events |= context->delayed_events; - context->delayed_events = 0; - - r = uv_poll_start(&context->poll_handle, - context->events, - connection_poll_cb); - ASSERT(r == 0); -} - - -static server_context_t* create_server_context( - uv_os_sock_t sock) { - int r; - server_context_t* context; - - context = (server_context_t*) malloc(sizeof *context); - ASSERT_NOT_NULL(context); - - context->sock = sock; - context->connections = 0; - - r = uv_poll_init_socket(uv_default_loop(), &context->poll_handle, sock); - context->poll_handle.data = context; - ASSERT(r == 0); - - return context; -} - - -static void server_close_cb(uv_handle_t* handle) { - server_context_t* context = (server_context_t*) handle->data; - free(context); -} - - -static void destroy_server_context(server_context_t* context) { - uv_close((uv_handle_t*) &context->poll_handle, server_close_cb); -} - - -static void server_poll_cb(uv_poll_t* handle, int status, int events) { - server_context_t* server_context = (server_context_t*) - handle->data; - connection_context_t* connection_context; - struct sockaddr_in addr; - socklen_t addr_len; - uv_os_sock_t sock; - int r; - - addr_len = sizeof addr; - sock = accept(server_context->sock, (struct sockaddr*) &addr, &addr_len); -#ifdef _WIN32 - ASSERT(sock != INVALID_SOCKET); -#else - ASSERT(sock >= 0); -#endif - - connection_context = create_connection_context(sock, 1); - connection_context->events = UV_READABLE | UV_WRITABLE | UV_DISCONNECT; - r = uv_poll_start(&connection_context->poll_handle, - UV_READABLE | UV_WRITABLE | UV_DISCONNECT, - connection_poll_cb); - ASSERT(r == 0); - - if (++server_context->connections == NUM_CLIENTS) { - close_socket(server_context->sock); - destroy_server_context(server_context); - } -} - - -static void start_server(void) { - server_context_t* context; - struct sockaddr_in addr; - uv_os_sock_t sock; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - sock = create_bound_socket(addr); - context = create_server_context(sock); - - r = listen(sock, 100); - ASSERT(r == 0); - - r = uv_poll_start(&context->poll_handle, UV_READABLE, server_poll_cb); - ASSERT(r == 0); -} - - -static void start_client(void) { - uv_os_sock_t sock; - connection_context_t* context; - struct sockaddr_in server_addr; - struct sockaddr_in addr; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &server_addr)); - ASSERT(0 == uv_ip4_addr("0.0.0.0", 0, &addr)); - - sock = create_bound_socket(addr); - context = create_connection_context(sock, 0); - - context->events = UV_READABLE | UV_WRITABLE | UV_DISCONNECT; - r = uv_poll_start(&context->poll_handle, - UV_READABLE | UV_WRITABLE | UV_DISCONNECT, - connection_poll_cb); - ASSERT(r == 0); - - r = connect(sock, (struct sockaddr*) &server_addr, sizeof server_addr); - ASSERT(r == 0 || got_eagain()); -} - - -static void start_poll_test(void) { - int i, r; - -#ifdef _WIN32 - { - struct WSAData wsa_data; - int r = WSAStartup(MAKEWORD(2, 2), &wsa_data); - ASSERT(r == 0); - } -#endif - - start_server(); - - for (i = 0; i < NUM_CLIENTS; i++) - start_client(); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - /* Assert that at most five percent of the writable wakeups was spurious. */ - ASSERT(spurious_writable_wakeups == 0 || - (valid_writable_wakeups + spurious_writable_wakeups) / - spurious_writable_wakeups > 20); - - ASSERT(closed_connections == NUM_CLIENTS * 2); -#if !defined(__sun) && !defined(_AIX) && !defined(__MVS__) - ASSERT(disconnects == NUM_CLIENTS * 2); -#endif - MAKE_VALGRIND_HAPPY(); -} - - -/* Issuing a shutdown() on IBM i PASE with parameter SHUT_WR - * also sends a normal close sequence to the partner program. - * This leads to timing issues and ECONNRESET failures in the - * test 'poll_duplex' and 'poll_unidirectional'. - * - * https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_74/apis/shutdn.htm - */ -TEST_IMPL(poll_duplex) { -#if defined(NO_SELF_CONNECT) - RETURN_SKIP(NO_SELF_CONNECT); -#elif defined(__PASE__) - RETURN_SKIP("API shutdown() may lead to timing issue on IBM i PASE"); -#endif - test_mode = DUPLEX; - start_poll_test(); - return 0; -} - - -TEST_IMPL(poll_unidirectional) { -#if defined(NO_SELF_CONNECT) - RETURN_SKIP(NO_SELF_CONNECT); -#elif defined(__PASE__) - RETURN_SKIP("API shutdown() may lead to timing issue on IBM i PASE"); -#endif - test_mode = UNIDIRECTIONAL; - start_poll_test(); - return 0; -} - - -/* Windows won't let you open a directory so we open a file instead. - * OS X lets you poll a file so open the $PWD instead. Both fail - * on Linux so it doesn't matter which one we pick. Both succeed - * on FreeBSD, Solaris and AIX so skip the test on those platforms. - */ -TEST_IMPL(poll_bad_fdtype) { -#if !defined(__DragonFly__) && !defined(__FreeBSD__) && !defined(__sun) && \ - !defined(_AIX) && !defined(__MVS__) && !defined(__FreeBSD_kernel__) && \ - !defined(__OpenBSD__) && !defined(__CYGWIN__) && !defined(__MSYS__) && \ - !defined(__NetBSD__) - uv_poll_t poll_handle; - int fd; - -#if defined(_WIN32) - fd = open("test/fixtures/empty_file", O_RDONLY); -#else - fd = open(".", O_RDONLY); -#endif - ASSERT(fd != -1); - ASSERT(0 != uv_poll_init(uv_default_loop(), &poll_handle, fd)); - ASSERT(0 == close(fd)); -#endif - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -#ifdef __linux__ -TEST_IMPL(poll_nested_epoll) { - uv_poll_t poll_handle; - int fd; - - fd = epoll_create(1); - ASSERT(fd != -1); - - ASSERT(0 == uv_poll_init(uv_default_loop(), &poll_handle, fd)); - ASSERT(0 == uv_poll_start(&poll_handle, UV_READABLE, (uv_poll_cb) abort)); - ASSERT(0 != uv_run(uv_default_loop(), UV_RUN_NOWAIT)); - - uv_close((uv_handle_t*) &poll_handle, NULL); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - ASSERT(0 == close(fd)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif /* __linux__ */ - - -#ifdef UV_HAVE_KQUEUE -TEST_IMPL(poll_nested_kqueue) { - uv_poll_t poll_handle; - int fd; - - fd = kqueue(); - ASSERT(fd != -1); - - ASSERT(0 == uv_poll_init(uv_default_loop(), &poll_handle, fd)); - ASSERT(0 == uv_poll_start(&poll_handle, UV_READABLE, (uv_poll_cb) abort)); - ASSERT(0 != uv_run(uv_default_loop(), UV_RUN_NOWAIT)); - - uv_close((uv_handle_t*) &poll_handle, NULL); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - ASSERT(0 == close(fd)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif /* UV_HAVE_KQUEUE */ diff --git a/libuv/test/test-process-priority.c b/libuv/test/test-process-priority.c deleted file mode 100644 index b3d0a85..0000000 --- a/libuv/test/test-process-priority.c +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - - -TEST_IMPL(process_priority) { - int priority; - int r; - int i; - -#if defined(__MVS__) - if (uv_os_setpriority(0, 0) == UV_ENOSYS) - RETURN_SKIP("functionality not supported on zOS"); -#endif - - /* Verify that passing a NULL pointer returns UV_EINVAL. */ - r = uv_os_getpriority(0, NULL); - ASSERT(r == UV_EINVAL); - - /* Verify that all valid values work. */ - for (i = UV_PRIORITY_HIGHEST; i <= UV_PRIORITY_LOW; i++) { - r = uv_os_setpriority(0, i); - - /* If UV_EACCES is returned, the current user doesn't have permission to - set this specific priority. */ - if (r == UV_EACCES) - continue; - - ASSERT(r == 0); - ASSERT(uv_os_getpriority(0, &priority) == 0); - - /* Verify that the priority values match on Unix, and are range mapped - on Windows. */ -#ifndef _WIN32 - ASSERT(priority == i); -#else - /* On Windows, only elevated users can set UV_PRIORITY_HIGHEST. Other - users will silently be set to UV_PRIORITY_HIGH. */ - if (i < UV_PRIORITY_HIGH) - ASSERT(priority == UV_PRIORITY_HIGHEST || priority == UV_PRIORITY_HIGH); - else if (i < UV_PRIORITY_ABOVE_NORMAL) - ASSERT(priority == UV_PRIORITY_HIGH); - else if (i < UV_PRIORITY_NORMAL) - ASSERT(priority == UV_PRIORITY_ABOVE_NORMAL); - else if (i < UV_PRIORITY_BELOW_NORMAL) - ASSERT(priority == UV_PRIORITY_NORMAL); - else if (i < UV_PRIORITY_LOW) - ASSERT(priority == UV_PRIORITY_BELOW_NORMAL); - else - ASSERT(priority == UV_PRIORITY_LOW); -#endif - - /* Verify that the current PID and 0 are equivalent. */ - ASSERT(uv_os_getpriority(uv_os_getpid(), &r) == 0); - ASSERT(priority == r); - } - - /* Verify that invalid priorities return UV_EINVAL. */ - ASSERT(uv_os_setpriority(0, UV_PRIORITY_HIGHEST - 1) == UV_EINVAL); - ASSERT(uv_os_setpriority(0, UV_PRIORITY_LOW + 1) == UV_EINVAL); - - return 0; -} diff --git a/libuv/test/test-process-title-threadsafe.c b/libuv/test/test-process-title-threadsafe.c deleted file mode 100644 index 927643c..0000000 --- a/libuv/test/test-process-title-threadsafe.c +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to -* deal in the Software without restriction, including without limitation the -* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -* sell copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -* IN THE SOFTWARE. -*/ - - -#include "uv.h" -#include "task.h" - -#include - -#ifdef __APPLE__ -# define NUM_ITERATIONS 5 -#else -# define NUM_ITERATIONS 50 -#endif - -static const char* titles[] = { - "8L2NY0Kdj0XyNFZnmUZigIOfcWjyNr0SkMmUhKw99VLUsZFrvCQQC3XIRfNR8pjyMjXObllled", - "jUAcscJN49oLSN8GdmXj2Wo34XX2T2vp2j5khfajNQarlOulp57cE130yiY53ipJFnPyTn5i82", - "9niCI5icXGFS72XudhXqo5alftmZ1tpE7B3cwUmrq0CCDjC84FzBNB8XAHqvpNQfI2QAQG6ztT", - "n8qXVXuG6IEHDpabJgTEiwtpY6LHMZ8MgznnMpdHARu5EywufA6hcBaQfetb0YhEsK0ykDd7JU" -}; - -static void getter_thread_body(void* arg) { - uv_sem_t* getter_sem; - char buffer[512]; - size_t len; - - getter_sem = arg; - - while (UV_EAGAIN == uv_sem_trywait(getter_sem)) { - ASSERT(0 == uv_get_process_title(buffer, sizeof(buffer))); - - /* The maximum size of the process title on some platforms depends on - * the total size of the argv vector. It's therefore possible to read - * back a title that's shorter than what we submitted. - */ - len = strlen(buffer); - ASSERT_GT(len, 0); - - ASSERT( - 0 == strncmp(buffer, titles[0], len) || - 0 == strncmp(buffer, titles[1], len) || - 0 == strncmp(buffer, titles[2], len) || - 0 == strncmp(buffer, titles[3], len)); - - uv_sleep(0); - } -} - - -static void setter_thread_body(void* arg) { - int i; - - for (i = 0; i < NUM_ITERATIONS; i++) { - ASSERT(0 == uv_set_process_title(titles[0])); - ASSERT(0 == uv_set_process_title(titles[1])); - ASSERT(0 == uv_set_process_title(titles[2])); - ASSERT(0 == uv_set_process_title(titles[3])); - } -} - - -TEST_IMPL(process_title_threadsafe) { - uv_thread_t setter_threads[4]; - uv_thread_t getter_thread; - uv_sem_t getter_sem; - int i; - -#if defined(__sun) || defined(__CYGWIN__) || defined(__MSYS__) || \ - defined(__MVS__) || defined(__PASE__) - RETURN_SKIP("uv_(get|set)_process_title is not implemented."); -#endif - - ASSERT(0 == uv_set_process_title(titles[0])); - - ASSERT_EQ(0, uv_sem_init(&getter_sem, 0)); - ASSERT_EQ(0, - uv_thread_create(&getter_thread, getter_thread_body, &getter_sem)); - - for (i = 0; i < (int) ARRAY_SIZE(setter_threads); i++) - ASSERT(0 == uv_thread_create(&setter_threads[i], setter_thread_body, NULL)); - - for (i = 0; i < (int) ARRAY_SIZE(setter_threads); i++) - ASSERT(0 == uv_thread_join(&setter_threads[i])); - - uv_sem_post(&getter_sem); - ASSERT_EQ(0, uv_thread_join(&getter_thread)); - uv_sem_destroy(&getter_sem); - - return 0; -} diff --git a/libuv/test/test-process-title.c b/libuv/test/test-process-title.c deleted file mode 100644 index 35a1480..0000000 --- a/libuv/test/test-process-title.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - - -static void set_title(const char* title) { - char buffer[512]; - int err; - - err = uv_get_process_title(buffer, sizeof(buffer)); - ASSERT(err == 0); - - err = uv_set_process_title(title); - ASSERT(err == 0); - - err = uv_get_process_title(buffer, sizeof(buffer)); - ASSERT(err == 0); - - ASSERT(strcmp(buffer, title) == 0); -} - - -static void uv_get_process_title_edge_cases(void) { - char buffer[512]; - int r; - - /* Test a NULL buffer */ - r = uv_get_process_title(NULL, 100); - ASSERT(r == UV_EINVAL); - - /* Test size of zero */ - r = uv_get_process_title(buffer, 0); - ASSERT(r == UV_EINVAL); - - /* Test for insufficient buffer size */ - r = uv_get_process_title(buffer, 1); - ASSERT(r == UV_ENOBUFS); -} - - -TEST_IMPL(process_title) { -#if defined(__sun) || defined(__CYGWIN__) || defined(__MSYS__) || \ - defined(__PASE__) - RETURN_SKIP("uv_(get|set)_process_title is not implemented."); -#endif - - /* Check for format string vulnerabilities. */ - set_title("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"); - set_title("new title"); - - /* Check uv_get_process_title() edge cases */ - uv_get_process_title_edge_cases(); - - return 0; -} - - -static void exit_cb(uv_process_t* process, int64_t status, int signo) { - ASSERT(status == 0); - ASSERT(signo == 0); - uv_close((uv_handle_t*) process, NULL); -} - - -TEST_IMPL(process_title_big_argv) { - uv_process_options_t options; - uv_process_t process; - size_t exepath_size; - char exepath[1024]; - char jumbo[512]; - char* args[5]; - -#ifdef _WIN32 - /* Remove once https://github.com/libuv/libuv/issues/2667 is fixed. */ - uv_set_process_title("run-tests"); -#endif - - exepath_size = sizeof(exepath) - 1; - ASSERT(0 == uv_exepath(exepath, &exepath_size)); - exepath[exepath_size] = '\0'; - - memset(jumbo, 'x', sizeof(jumbo) - 1); - jumbo[sizeof(jumbo) - 1] = '\0'; - - /* Note: need to pass three arguments, not two, otherwise - * run-tests.c thinks it's the name of a test to run. - */ - args[0] = exepath; - args[1] = "process_title_big_argv_helper"; - args[2] = jumbo; - args[3] = jumbo; - args[4] = NULL; - - memset(&options, 0, sizeof(options)); - options.file = exepath; - options.args = args; - options.exit_cb = exit_cb; - - ASSERT(0 == uv_spawn(uv_default_loop(), &process, &options)); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -/* Called by process_title_big_argv_helper. */ -void process_title_big_argv(void) { - char buf[256] = "fail"; - - /* Return value deliberately ignored. */ - uv_get_process_title(buf, sizeof(buf)); - ASSERT(0 != strcmp(buf, "fail")); -} diff --git a/libuv/test/test-queue-foreach-delete.c b/libuv/test/test-queue-foreach-delete.c deleted file mode 100644 index 049ea77..0000000 --- a/libuv/test/test-queue-foreach-delete.c +++ /dev/null @@ -1,204 +0,0 @@ -/* Copyright The libuv project and contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include - - -/* - * The idea behind the test is as follows. - * Certain handle types are stored in a queue internally. - * Extra care should be taken for removal of a handle from the queue while iterating over the queue. - * (i.e., QUEUE_REMOVE() called within QUEUE_FOREACH()) - * This usually happens when someone closes or stops a handle from within its callback. - * So we need to check that we haven't screwed the queue on close/stop. - * To do so we do the following (for each handle type): - * 1. Create and start 3 handles (#0, #1, and #2). - * - * The queue after the start() calls: - * ..=> [queue head] <=> [handle] <=> [handle #1] <=> [handle] <=.. - * - * 2. Trigger handles to fire (for uv_idle_t, uv_prepare_t, and uv_check_t there is nothing to do). - * - * 3. In the callback for the first-executed handle (#0 or #2 depending on handle type) - * stop the handle and the next one (#1). - * (for uv_idle_t, uv_prepare_t, and uv_check_t callbacks are executed in the reverse order as they are start()'ed, - * so callback for handle #2 will be called first) - * - * The queue after the stop() calls: - * correct foreach "next" | - * \/ - * ..=> [queue head] <==============================> [handle] <=.. - * [ ] <- [handle] <=> [handle #1] -> [ ] - * /\ - * wrong foreach "next" | - * - * 4. The callback for handle #1 shouldn't be called because the handle #1 is stopped in the previous step. - * However, if QUEUE_REMOVE() is not handled properly within QUEUE_FOREACH(), the callback _will_ be called. - */ - -static const unsigned first_handle_number_idle = 2; -static const unsigned first_handle_number_prepare = 2; -static const unsigned first_handle_number_check = 2; -#ifdef __linux__ -static const unsigned first_handle_number_fs_event = 0; -#endif - - -#define DEFINE_GLOBALS_AND_CBS(name, ...) \ - static uv_##name##_t (name)[3]; \ - static unsigned name##_cb_calls[3]; \ - \ - static void name##2_cb(__VA_ARGS__) { \ - ASSERT(handle == &(name)[2]); \ - if (first_handle_number_##name == 2) { \ - uv_close((uv_handle_t*)&(name)[2], NULL); \ - uv_close((uv_handle_t*)&(name)[1], NULL); \ - } \ - name##_cb_calls[2]++; \ - } \ - \ - static void name##1_cb(__VA_ARGS__) { \ - ASSERT(handle == &(name)[1]); \ - ASSERT(0 && "Shouldn't be called" && (&name[0])); \ - } \ - \ - static void name##0_cb(__VA_ARGS__) { \ - ASSERT(handle == &(name)[0]); \ - if (first_handle_number_##name == 0) { \ - uv_close((uv_handle_t*)&(name)[0], NULL); \ - uv_close((uv_handle_t*)&(name)[1], NULL); \ - } \ - name##_cb_calls[0]++; \ - } \ - \ - static const uv_##name##_cb name##_cbs[] = { \ - name##0_cb, \ - name##1_cb, \ - name##2_cb, \ - }; - -#define INIT_AND_START(name, loop) \ - do { \ - size_t i; \ - for (i = 0; i < ARRAY_SIZE(name); i++) { \ - int r; \ - r = uv_##name##_init((loop), &(name)[i]); \ - ASSERT(r == 0); \ - \ - r = uv_##name##_start(&(name)[i], name##_cbs[i]); \ - ASSERT(r == 0); \ - } \ - } while (0) - -#define END_ASSERTS(name) \ - do { \ - ASSERT(name##_cb_calls[0] == 1); \ - ASSERT(name##_cb_calls[1] == 0); \ - ASSERT(name##_cb_calls[2] == 1); \ - } while (0) - -DEFINE_GLOBALS_AND_CBS(idle, uv_idle_t* handle) -DEFINE_GLOBALS_AND_CBS(prepare, uv_prepare_t* handle) -DEFINE_GLOBALS_AND_CBS(check, uv_check_t* handle) - -#ifdef __linux__ -DEFINE_GLOBALS_AND_CBS(fs_event, - uv_fs_event_t* handle, - const char* filename, - int events, - int status) - -static const char watched_dir[] = "."; -static uv_timer_t timer; -static unsigned helper_timer_cb_calls; - - -static void init_and_start_fs_events(uv_loop_t* loop) { - size_t i; - for (i = 0; i < ARRAY_SIZE(fs_event); i++) { - int r; - r = uv_fs_event_init(loop, &fs_event[i]); - ASSERT(r == 0); - - r = uv_fs_event_start(&fs_event[i], - (uv_fs_event_cb)fs_event_cbs[i], - watched_dir, - 0); - ASSERT(r == 0); - } -} - -static void helper_timer_cb(uv_timer_t* thandle) { - int r; - uv_fs_t fs_req; - - /* fire all fs_events */ - r = uv_fs_utime(thandle->loop, &fs_req, watched_dir, 0, 0, NULL); - ASSERT(r == 0); - ASSERT(fs_req.result == 0); - ASSERT(fs_req.fs_type == UV_FS_UTIME); - ASSERT(strcmp(fs_req.path, watched_dir) == 0); - uv_fs_req_cleanup(&fs_req); - - helper_timer_cb_calls++; -} -#endif - - -TEST_IMPL(queue_foreach_delete) { - uv_loop_t* loop; - int r; - - loop = uv_default_loop(); - - INIT_AND_START(idle, loop); - INIT_AND_START(prepare, loop); - INIT_AND_START(check, loop); - -#ifdef __linux__ - init_and_start_fs_events(loop); - - /* helper timer to trigger async and fs_event callbacks */ - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - - r = uv_timer_start(&timer, helper_timer_cb, 0, 0); - ASSERT(r == 0); -#endif - - r = uv_run(loop, UV_RUN_NOWAIT); - ASSERT(r == 1); - - END_ASSERTS(idle); - END_ASSERTS(prepare); - END_ASSERTS(check); - -#ifdef __linux__ - ASSERT(helper_timer_cb_calls == 1); -#endif - - MAKE_VALGRIND_HAPPY(); - - return 0; -} diff --git a/libuv/test/test-random.c b/libuv/test/test-random.c deleted file mode 100644 index 2e3ce44..0000000 --- a/libuv/test/test-random.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include - -static char scratch[256]; -static int random_cb_called; - - -static void random_cb(uv_random_t* req, int status, void* buf, size_t buflen) { - char zero[sizeof(scratch)]; - - memset(zero, 0, sizeof(zero)); - - ASSERT(0 == status); - ASSERT(buf == (void*) scratch); - - if (random_cb_called == 0) { - ASSERT(buflen == 0); - ASSERT(0 == memcmp(scratch, zero, sizeof(zero))); - } else { - ASSERT(buflen == sizeof(scratch)); - /* Buy a lottery ticket if you manage to trip this assertion. */ - ASSERT(0 != memcmp(scratch, zero, sizeof(zero))); - } - - random_cb_called++; -} - - -TEST_IMPL(random_async) { - uv_random_t req; - uv_loop_t* loop; - - loop = uv_default_loop(); - ASSERT(UV_EINVAL == uv_random(loop, &req, scratch, sizeof(scratch), -1, - random_cb)); - ASSERT(UV_E2BIG == uv_random(loop, &req, scratch, -1, -1, random_cb)); - - ASSERT(0 == uv_random(loop, &req, scratch, 0, 0, random_cb)); - ASSERT(0 == random_cb_called); - - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(1 == random_cb_called); - - ASSERT(0 == uv_random(loop, &req, scratch, sizeof(scratch), 0, random_cb)); - ASSERT(1 == random_cb_called); - - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(2 == random_cb_called); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(random_sync) { - char zero[256]; - char buf[256]; - - ASSERT(UV_EINVAL == uv_random(NULL, NULL, buf, sizeof(buf), -1, NULL)); - ASSERT(UV_E2BIG == uv_random(NULL, NULL, buf, -1, -1, NULL)); - - memset(buf, 0, sizeof(buf)); - ASSERT(0 == uv_random(NULL, NULL, buf, sizeof(buf), 0, NULL)); - - /* Buy a lottery ticket if you manage to trip this assertion. */ - memset(zero, 0, sizeof(zero)); - ASSERT(0 != memcmp(buf, zero, sizeof(zero))); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-ref.c b/libuv/test/test-ref.c deleted file mode 100644 index d24ea4a..0000000 --- a/libuv/test/test-ref.c +++ /dev/null @@ -1,445 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - - -static uv_write_t write_req; -static uv_shutdown_t shutdown_req; -static uv_connect_t connect_req; - -static char buffer[32767]; - -static int req_cb_called; -static int connect_cb_called; -static int write_cb_called; -static int shutdown_cb_called; -static int close_cb_called; - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - - -static void do_close(void* handle) { - close_cb_called = 0; - uv_close((uv_handle_t*)handle, close_cb); - ASSERT(close_cb_called == 0); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(close_cb_called == 1); -} - - -static void fail_cb(void) { - FATAL("fail_cb should not have been called"); -} - - -static void fail_cb2(void) { - ASSERT(0 && "fail_cb2 should not have been called"); -} - - -static void req_cb(uv_handle_t* req, int status) { - req_cb_called++; -} - - -static void shutdown_cb(uv_shutdown_t* req, int status) { - ASSERT(req == &shutdown_req); - shutdown_cb_called++; -} - - -static void write_cb(uv_write_t* req, int status) { - ASSERT(req == &write_req); - uv_shutdown(&shutdown_req, req->handle, shutdown_cb); - write_cb_called++; -} - - -static void connect_and_write(uv_connect_t* req, int status) { - uv_buf_t buf = uv_buf_init(buffer, sizeof buffer); - ASSERT(req == &connect_req); - ASSERT(status == 0); - uv_write(&write_req, req->handle, &buf, 1, write_cb); - connect_cb_called++; -} - - - -static void connect_and_shutdown(uv_connect_t* req, int status) { - ASSERT(req == &connect_req); - ASSERT(status == 0); - uv_shutdown(&shutdown_req, req->handle, shutdown_cb); - connect_cb_called++; -} - - -TEST_IMPL(ref) { - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(idle_ref) { - uv_idle_t h; - uv_idle_init(uv_default_loop(), &h); - uv_idle_start(&h, (uv_idle_cb) fail_cb2); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(async_ref) { - uv_async_t h; - uv_async_init(uv_default_loop(), &h, NULL); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(prepare_ref) { - uv_prepare_t h; - uv_prepare_init(uv_default_loop(), &h); - uv_prepare_start(&h, (uv_prepare_cb) fail_cb2); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(check_ref) { - uv_check_t h; - uv_check_init(uv_default_loop(), &h); - uv_check_start(&h, (uv_check_cb) fail_cb2); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void prepare_cb(uv_prepare_t* h) { - ASSERT_NOT_NULL(h); - uv_unref((uv_handle_t*)h); -} - - -TEST_IMPL(unref_in_prepare_cb) { - uv_prepare_t h; - uv_prepare_init(uv_default_loop(), &h); - uv_prepare_start(&h, prepare_cb); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(timer_ref) { - uv_timer_t h; - uv_timer_init(uv_default_loop(), &h); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(timer_ref2) { - uv_timer_t h; - uv_timer_init(uv_default_loop(), &h); - uv_timer_start(&h, (uv_timer_cb)fail_cb, 42, 42); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_event_ref) { -#if defined(NO_FS_EVENTS) - RETURN_SKIP(NO_FS_EVENTS); -#endif - uv_fs_event_t h; - uv_fs_event_init(uv_default_loop(), &h); - uv_fs_event_start(&h, (uv_fs_event_cb)fail_cb, ".", 0); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(fs_poll_ref) { - uv_fs_poll_t h; - uv_fs_poll_init(uv_default_loop(), &h); - uv_fs_poll_start(&h, NULL, ".", 999); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_ref) { - uv_tcp_t h; - uv_tcp_init(uv_default_loop(), &h); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_ref2) { - uv_tcp_t h; - uv_tcp_init(uv_default_loop(), &h); - uv_listen((uv_stream_t*)&h, 128, (uv_connection_cb)fail_cb); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_ref2b) { - uv_tcp_t h; - uv_tcp_init(uv_default_loop(), &h); - uv_listen((uv_stream_t*)&h, 128, (uv_connection_cb)fail_cb); - uv_unref((uv_handle_t*)&h); - uv_close((uv_handle_t*)&h, close_cb); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(close_cb_called == 1); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_ref3) { - struct sockaddr_in addr; - uv_tcp_t h; - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - uv_tcp_init(uv_default_loop(), &h); - uv_tcp_connect(&connect_req, - &h, - (const struct sockaddr*) &addr, - connect_and_shutdown); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(connect_cb_called == 1); - ASSERT(shutdown_cb_called == 1); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_ref4) { - struct sockaddr_in addr; - uv_tcp_t h; - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - uv_tcp_init(uv_default_loop(), &h); - uv_tcp_connect(&connect_req, - &h, - (const struct sockaddr*) &addr, - connect_and_write); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(connect_cb_called == 1); - ASSERT(write_cb_called == 1); - ASSERT(shutdown_cb_called == 1); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(udp_ref) { - uv_udp_t h; - uv_udp_init(uv_default_loop(), &h); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(udp_ref2) { - struct sockaddr_in addr; - uv_udp_t h; - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - uv_udp_init(uv_default_loop(), &h); - uv_udp_bind(&h, (const struct sockaddr*) &addr, 0); - uv_udp_recv_start(&h, (uv_alloc_cb)fail_cb, (uv_udp_recv_cb)fail_cb); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(udp_ref3) { - struct sockaddr_in addr; - uv_buf_t buf = uv_buf_init("PING", 4); - uv_udp_send_t req; - uv_udp_t h; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - uv_udp_init(uv_default_loop(), &h); - uv_udp_send(&req, - &h, - &buf, - 1, - (const struct sockaddr*) &addr, - (uv_udp_send_cb) req_cb); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(req_cb_called == 1); - do_close(&h); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(pipe_ref) { - uv_pipe_t h; - uv_pipe_init(uv_default_loop(), &h, 0); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(pipe_ref2) { - uv_pipe_t h; - uv_pipe_init(uv_default_loop(), &h, 0); - uv_listen((uv_stream_t*)&h, 128, (uv_connection_cb)fail_cb); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(pipe_ref3) { - uv_pipe_t h; - uv_pipe_init(uv_default_loop(), &h, 0); - uv_pipe_connect(&connect_req, &h, TEST_PIPENAME, connect_and_shutdown); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(connect_cb_called == 1); - ASSERT(shutdown_cb_called == 1); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(pipe_ref4) { - uv_pipe_t h; - uv_pipe_init(uv_default_loop(), &h, 0); - uv_pipe_connect(&connect_req, &h, TEST_PIPENAME, connect_and_write); - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(connect_cb_called == 1); - ASSERT(write_cb_called == 1); - ASSERT(shutdown_cb_called == 1); - do_close(&h); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(process_ref) { - /* spawn_helper4 blocks indefinitely. */ - char *argv[] = { NULL, "spawn_helper4", NULL }; - uv_process_options_t options; - size_t exepath_size; - char exepath[256]; - uv_process_t h; - int r; - - memset(&options, 0, sizeof(options)); - exepath_size = sizeof(exepath); - - r = uv_exepath(exepath, &exepath_size); - ASSERT(r == 0); - - argv[0] = exepath; - options.file = exepath; - options.args = argv; - options.exit_cb = NULL; - - r = uv_spawn(uv_default_loop(), &h, &options); - ASSERT(r == 0); - - uv_unref((uv_handle_t*)&h); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - r = uv_process_kill(&h, /* SIGTERM */ 15); - ASSERT(r == 0); - - do_close(&h); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(has_ref) { - uv_idle_t h; - uv_idle_init(uv_default_loop(), &h); - uv_ref((uv_handle_t*)&h); - ASSERT(uv_has_ref((uv_handle_t*)&h) == 1); - uv_unref((uv_handle_t*)&h); - ASSERT(uv_has_ref((uv_handle_t*)&h) == 0); - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-run-nowait.c b/libuv/test/test-run-nowait.c deleted file mode 100644 index 43524f6..0000000 --- a/libuv/test/test-run-nowait.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static uv_timer_t timer_handle; -static int timer_called = 0; - - -static void timer_cb(uv_timer_t* handle) { - ASSERT(handle == &timer_handle); - timer_called = 1; -} - - -TEST_IMPL(run_nowait) { - int r; - uv_timer_init(uv_default_loop(), &timer_handle); - uv_timer_start(&timer_handle, timer_cb, 100, 100); - - r = uv_run(uv_default_loop(), UV_RUN_NOWAIT); - ASSERT(r != 0); - ASSERT(timer_called == 0); - - return 0; -} diff --git a/libuv/test/test-run-once.c b/libuv/test/test-run-once.c deleted file mode 100644 index 10cbf95..0000000 --- a/libuv/test/test-run-once.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#define NUM_TICKS 64 - -static uv_idle_t idle_handle; -static int idle_counter; - - -static void idle_cb(uv_idle_t* handle) { - ASSERT(handle == &idle_handle); - - if (++idle_counter == NUM_TICKS) - uv_idle_stop(handle); -} - - -TEST_IMPL(run_once) { - uv_idle_init(uv_default_loop(), &idle_handle); - uv_idle_start(&idle_handle, idle_cb); - - while (uv_run(uv_default_loop(), UV_RUN_ONCE)); - ASSERT(idle_counter == NUM_TICKS); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-semaphore.c b/libuv/test/test-semaphore.c deleted file mode 100644 index ac03bb0..0000000 --- a/libuv/test/test-semaphore.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -typedef struct { - uv_mutex_t mutex; - uv_sem_t sem; - int delay; - volatile int posted; -} worker_config; - - -static void worker(void* arg) { - worker_config* c = arg; - - if (c->delay) - uv_sleep(c->delay); - - uv_mutex_lock(&c->mutex); - ASSERT(c->posted == 0); - uv_sem_post(&c->sem); - c->posted = 1; - uv_mutex_unlock(&c->mutex); -} - - -TEST_IMPL(semaphore_1) { - uv_thread_t thread; - worker_config wc; - - memset(&wc, 0, sizeof(wc)); - - ASSERT(0 == uv_sem_init(&wc.sem, 0)); - ASSERT(0 == uv_mutex_init(&wc.mutex)); - ASSERT(0 == uv_thread_create(&thread, worker, &wc)); - - uv_sleep(100); - uv_mutex_lock(&wc.mutex); - ASSERT(wc.posted == 1); - uv_sem_wait(&wc.sem); /* should not block */ - uv_mutex_unlock(&wc.mutex); /* ergo, it should be ok to unlock after wait */ - - ASSERT(0 == uv_thread_join(&thread)); - uv_mutex_destroy(&wc.mutex); - uv_sem_destroy(&wc.sem); - - return 0; -} - - -TEST_IMPL(semaphore_2) { - uv_thread_t thread; - worker_config wc; - - memset(&wc, 0, sizeof(wc)); - wc.delay = 100; - - ASSERT(0 == uv_sem_init(&wc.sem, 0)); - ASSERT(0 == uv_mutex_init(&wc.mutex)); - ASSERT(0 == uv_thread_create(&thread, worker, &wc)); - - uv_sem_wait(&wc.sem); - - ASSERT(0 == uv_thread_join(&thread)); - uv_mutex_destroy(&wc.mutex); - uv_sem_destroy(&wc.sem); - - return 0; -} - - -TEST_IMPL(semaphore_3) { - uv_sem_t sem; - - ASSERT(0 == uv_sem_init(&sem, 3)); - uv_sem_wait(&sem); /* should not block */ - uv_sem_wait(&sem); /* should not block */ - ASSERT(0 == uv_sem_trywait(&sem)); - ASSERT(UV_EAGAIN == uv_sem_trywait(&sem)); - - uv_sem_post(&sem); - ASSERT(0 == uv_sem_trywait(&sem)); - ASSERT(UV_EAGAIN == uv_sem_trywait(&sem)); - - uv_sem_destroy(&sem); - - return 0; -} diff --git a/libuv/test/test-shutdown-close.c b/libuv/test/test-shutdown-close.c deleted file mode 100644 index 78c369b..0000000 --- a/libuv/test/test-shutdown-close.c +++ /dev/null @@ -1,108 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* - * These tests verify that the uv_shutdown callback is always made, even when - * it is immediately followed by an uv_close call. - */ - -#include "uv.h" -#include "task.h" - - -static uv_shutdown_t shutdown_req; -static uv_connect_t connect_req; - -static int connect_cb_called = 0; -static int shutdown_cb_called = 0; -static int close_cb_called = 0; - - -static void shutdown_cb(uv_shutdown_t* req, int status) { - ASSERT(req == &shutdown_req); - ASSERT(status == 0 || status == UV_ECANCELED); - shutdown_cb_called++; -} - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - - -static void connect_cb(uv_connect_t* req, int status) { - int r; - - ASSERT(req == &connect_req); - ASSERT(status == 0); - - r = uv_shutdown(&shutdown_req, req->handle, shutdown_cb); - ASSERT(r == 0); - ASSERT(0 == uv_is_closing((uv_handle_t*) req->handle)); - uv_close((uv_handle_t*) req->handle, close_cb); - ASSERT(1 == uv_is_closing((uv_handle_t*) req->handle)); - - connect_cb_called++; -} - - -TEST_IMPL(shutdown_close_tcp) { - struct sockaddr_in addr; - uv_tcp_t h; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - r = uv_tcp_init(uv_default_loop(), &h); - ASSERT(r == 0); - r = uv_tcp_connect(&connect_req, - &h, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(connect_cb_called == 1); - ASSERT(shutdown_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(shutdown_close_pipe) { - uv_pipe_t h; - int r; - - r = uv_pipe_init(uv_default_loop(), &h, 0); - ASSERT(r == 0); - uv_pipe_connect(&connect_req, &h, TEST_PIPENAME, connect_cb); - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(connect_cb_called == 1); - ASSERT(shutdown_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-shutdown-eof.c b/libuv/test/test-shutdown-eof.c deleted file mode 100644 index 0abab91..0000000 --- a/libuv/test/test-shutdown-eof.c +++ /dev/null @@ -1,188 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - -static uv_timer_t timer; -static uv_tcp_t tcp; -static uv_connect_t connect_req; -static uv_write_t write_req; -static uv_shutdown_t shutdown_req; -static uv_buf_t qbuf; -static int got_q; -static int got_eof; -static int called_connect_cb; -static int called_shutdown_cb; -static int called_tcp_close_cb; -static int called_timer_close_cb; -static int called_timer_cb; - - -static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - buf->base = malloc(size); - buf->len = size; -} - - -static void read_cb(uv_stream_t* t, ssize_t nread, const uv_buf_t* buf) { - ASSERT((uv_tcp_t*)t == &tcp); - - if (nread == 0) { - free(buf->base); - return; - } - - if (!got_q) { - ASSERT(nread == 1); - ASSERT(!got_eof); - ASSERT(buf->base[0] == 'Q'); - free(buf->base); - got_q = 1; - puts("got Q"); - } else { - ASSERT(nread == UV_EOF); - if (buf->base) { - free(buf->base); - } - got_eof = 1; - puts("got EOF"); - } -} - - -static void shutdown_cb(uv_shutdown_t *req, int status) { - ASSERT(req == &shutdown_req); - - ASSERT(called_connect_cb == 1); - ASSERT(!got_eof); - ASSERT(called_tcp_close_cb == 0); - ASSERT(called_timer_close_cb == 0); - ASSERT(called_timer_cb == 0); - - called_shutdown_cb++; -} - - -static void connect_cb(uv_connect_t *req, int status) { - ASSERT(status == 0); - ASSERT(req == &connect_req); - - /* Start reading from our connection so we can receive the EOF. */ - ASSERT_EQ(0, uv_read_start((uv_stream_t*)&tcp, alloc_cb, read_cb)); - - /* Check error handling. */ - ASSERT_EQ(UV_EALREADY, uv_read_start((uv_stream_t*)&tcp, alloc_cb, read_cb)); - ASSERT_EQ(UV_EINVAL, uv_read_start(NULL, alloc_cb, read_cb)); - ASSERT_EQ(UV_EINVAL, uv_read_start((uv_stream_t*)&tcp, NULL, read_cb)); - ASSERT_EQ(UV_EINVAL, uv_read_start((uv_stream_t*)&tcp, alloc_cb, NULL)); - - /* - * Write the letter 'Q' to gracefully kill the echo-server. This will not - * effect our connection. - */ - uv_write(&write_req, (uv_stream_t*) &tcp, &qbuf, 1, NULL); - - /* Shutdown our end of the connection. */ - uv_shutdown(&shutdown_req, (uv_stream_t*) &tcp, shutdown_cb); - - called_connect_cb++; - ASSERT(called_shutdown_cb == 0); -} - - -static void tcp_close_cb(uv_handle_t* handle) { - ASSERT(handle == (uv_handle_t*) &tcp); - - ASSERT(called_connect_cb == 1); - ASSERT(got_q); - ASSERT(got_eof); - ASSERT(called_timer_cb == 1); - - called_tcp_close_cb++; -} - - -static void timer_close_cb(uv_handle_t* handle) { - ASSERT(handle == (uv_handle_t*) &timer); - called_timer_close_cb++; -} - - -static void timer_cb(uv_timer_t* handle) { - ASSERT(handle == &timer); - uv_close((uv_handle_t*) handle, timer_close_cb); - - /* - * The most important assert of the test: we have not received - * tcp_close_cb yet. - */ - ASSERT(called_tcp_close_cb == 0); - uv_close((uv_handle_t*) &tcp, tcp_close_cb); - - called_timer_cb++; -} - - -/* - * This test has a client which connects to the echo_server and immediately - * issues a shutdown. The echo-server, in response, will also shutdown their - * connection. We check, with a timer, that libuv is not automatically - * calling uv_close when the client receives the EOF from echo-server. - */ -TEST_IMPL(shutdown_eof) { - struct sockaddr_in server_addr; - int r; - - qbuf.base = "Q"; - qbuf.len = 1; - - r = uv_timer_init(uv_default_loop(), &timer); - ASSERT(r == 0); - - uv_timer_start(&timer, timer_cb, 100, 0); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &server_addr)); - r = uv_tcp_init(uv_default_loop(), &tcp); - ASSERT(!r); - - r = uv_tcp_connect(&connect_req, - &tcp, - (const struct sockaddr*) &server_addr, - connect_cb); - ASSERT(!r); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(called_connect_cb == 1); - ASSERT(called_shutdown_cb == 1); - ASSERT(got_eof); - ASSERT(got_q); - ASSERT(called_tcp_close_cb == 1); - ASSERT(called_timer_close_cb == 1); - ASSERT(called_timer_cb == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - diff --git a/libuv/test/test-shutdown-simultaneous.c b/libuv/test/test-shutdown-simultaneous.c deleted file mode 100644 index 7de3bd4..0000000 --- a/libuv/test/test-shutdown-simultaneous.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Copyright libuv project and contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - -static uv_tcp_t tcp; -static uv_connect_t connect_req; -static uv_shutdown_t shutdown_req; -static uv_buf_t qbuf; -static int got_q; -static int got_eof; -static int called_connect_cb; -static int called_shutdown_cb; -static int called_tcp_close_cb; - - -static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - buf->base = malloc(size); - buf->len = size; -} - - -static void shutdown_cb(uv_shutdown_t *req, int status) { - ASSERT_PTR_EQ(req, &shutdown_req); - - ASSERT_EQ(called_connect_cb, 1); - ASSERT_EQ(called_tcp_close_cb, 0); -} - - -static void read_cb(uv_stream_t* t, ssize_t nread, const uv_buf_t* buf) { - ASSERT_PTR_EQ((uv_tcp_t*)t, &tcp); - - if (nread == 0) { - free(buf->base); - return; - } - - if (!got_q) { - ASSERT_EQ(nread, 4); - ASSERT_EQ(got_eof, 0); - ASSERT_MEM_EQ(buf->base, "QQSS", 4); - free(buf->base); - got_q = 1; - puts("got QQSS"); - /* Shutdown our end of the connection simultaneously */ - uv_shutdown(&shutdown_req, (uv_stream_t*) &tcp, shutdown_cb); - called_shutdown_cb++; - } else { - ASSERT_EQ(nread, UV_EOF); - if (buf->base) { - free(buf->base); - } - got_eof = 1; - puts("got EOF"); - } -} - - -static void connect_cb(uv_connect_t *req, int status) { - ASSERT_EQ(status, 0); - ASSERT_PTR_EQ(req, &connect_req); - - /* Start reading from our connection so we can receive the EOF. */ - ASSERT_EQ(0, uv_read_start((uv_stream_t*)&tcp, alloc_cb, read_cb)); - - /* Check error handling. */ - ASSERT_EQ(UV_EALREADY, uv_read_start((uv_stream_t*)&tcp, alloc_cb, read_cb)); - ASSERT_EQ(UV_EINVAL, uv_read_start(NULL, alloc_cb, read_cb)); - ASSERT_EQ(UV_EINVAL, uv_read_start((uv_stream_t*)&tcp, NULL, read_cb)); - ASSERT_EQ(UV_EINVAL, uv_read_start((uv_stream_t*)&tcp, alloc_cb, NULL)); - - /* - * Write the letter 'Q' and 'QSS` to gracefully kill the echo-server. This - * will not effect our connection. - */ - ASSERT_EQ(qbuf.len, uv_try_write((uv_stream_t*) &tcp, &qbuf, 1)); - - called_connect_cb++; - ASSERT_EQ(called_shutdown_cb, 0); -} - - -/* - * This test has a client which connects to the echo_server and immediately - * issues a shutdown. We check that this does not cause libuv to hang. - */ -TEST_IMPL(shutdown_simultaneous) { - struct sockaddr_in server_addr; - int r; - - qbuf.base = "QQSS"; - qbuf.len = 4; - - ASSERT_EQ(0, uv_ip4_addr("127.0.0.1", TEST_PORT, &server_addr)); - r = uv_tcp_init(uv_default_loop(), &tcp); - ASSERT_EQ(r, 0); - - r = uv_tcp_connect(&connect_req, - &tcp, - (const struct sockaddr*) &server_addr, - connect_cb); - ASSERT_EQ(r, 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT_EQ(called_connect_cb, 1); - ASSERT_EQ(called_shutdown_cb, 1); - ASSERT_EQ(got_eof, 1); - ASSERT_EQ(got_q, 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-shutdown-twice.c b/libuv/test/test-shutdown-twice.c deleted file mode 100644 index d7aae89..0000000 --- a/libuv/test/test-shutdown-twice.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* - * This is a regression test for issue #1113 (calling uv_shutdown twice will - * leave a ghost request in the system) - */ - -#include "uv.h" -#include "task.h" - -static uv_shutdown_t req1; -static uv_shutdown_t req2; - -static int shutdown_cb_called = 0; - -static void close_cb(uv_handle_t* handle) { - -} - -static void shutdown_cb(uv_shutdown_t* req, int status) { - ASSERT(req == &req1); - ASSERT(status == 0); - shutdown_cb_called++; - uv_close((uv_handle_t*) req->handle, close_cb); -} - -static void connect_cb(uv_connect_t* req, int status) { - int r; - - ASSERT(status == 0); - - r = uv_shutdown(&req1, req->handle, shutdown_cb); - ASSERT(r == 0); - r = uv_shutdown(&req2, req->handle, shutdown_cb); - ASSERT(r != 0); - -} - -TEST_IMPL(shutdown_twice) { - struct sockaddr_in addr; - uv_loop_t* loop; - int r; - uv_tcp_t h; - - uv_connect_t connect_req; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - loop = uv_default_loop(); - - r = uv_tcp_init(loop, &h); - ASSERT(r == 0); - - r = uv_tcp_connect(&connect_req, - &h, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(shutdown_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-signal-multiple-loops.c b/libuv/test/test-signal-multiple-loops.c deleted file mode 100644 index 7d61ff6..0000000 --- a/libuv/test/test-signal-multiple-loops.c +++ /dev/null @@ -1,307 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/* This test does not pretend to be cross-platform. */ -#ifndef _WIN32 - -#include "uv.h" -#include "task.h" - -#include -#include -#include -#include -#include -#include -#include - -/* The value of NUM_SIGNAL_HANDLING_THREADS is not arbitrary; it needs to be a - * multiple of three for reasons that will become clear when you scroll down. - * We're basically creating three different thread groups. The total needs - * to be divisible by three in order for the numbers in the final check to - * match up. - */ -#define NUM_SIGNAL_HANDLING_THREADS 24 -#define NUM_LOOP_CREATING_THREADS 10 - -enum signal_action { - ONLY_SIGUSR1, - ONLY_SIGUSR2, - SIGUSR1_AND_SIGUSR2 -}; - -static uv_sem_t sem; -static uv_mutex_t counter_lock; -static volatile int stop = 0; - -static volatile int signal1_cb_counter = 0; -static volatile int signal2_cb_counter = 0; -static volatile int loop_creation_counter = 0; - - -static void increment_counter(volatile int* counter) { - uv_mutex_lock(&counter_lock); - ++(*counter); - uv_mutex_unlock(&counter_lock); -} - - -static void signal1_cb(uv_signal_t* handle, int signum) { - ASSERT(signum == SIGUSR1); - increment_counter(&signal1_cb_counter); - uv_signal_stop(handle); -} - - -static void signal2_cb(uv_signal_t* handle, int signum) { - ASSERT(signum == SIGUSR2); - increment_counter(&signal2_cb_counter); - uv_signal_stop(handle); -} - - -static void signal_handling_worker(void* context) { - enum signal_action action; - uv_signal_t signal1a; - uv_signal_t signal1b; - uv_signal_t signal2; - uv_loop_t loop; - int r; - - action = (enum signal_action) (uintptr_t) context; - - ASSERT(0 == uv_loop_init(&loop)); - - /* Setup the signal watchers and start them. */ - if (action == ONLY_SIGUSR1 || action == SIGUSR1_AND_SIGUSR2) { - r = uv_signal_init(&loop, &signal1a); - ASSERT(r == 0); - r = uv_signal_start(&signal1a, signal1_cb, SIGUSR1); - ASSERT(r == 0); - r = uv_signal_init(&loop, &signal1b); - ASSERT(r == 0); - r = uv_signal_start(&signal1b, signal1_cb, SIGUSR1); - ASSERT(r == 0); - } - - if (action == ONLY_SIGUSR2 || action == SIGUSR1_AND_SIGUSR2) { - r = uv_signal_init(&loop, &signal2); - ASSERT(r == 0); - r = uv_signal_start(&signal2, signal2_cb, SIGUSR2); - ASSERT(r == 0); - } - - /* Signal watchers are now set up. */ - uv_sem_post(&sem); - - /* Wait for all signals. The signal callbacks stop the watcher, so uv_run - * will return when all signal watchers caught a signal. - */ - r = uv_run(&loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - /* Restart the signal watchers. */ - if (action == ONLY_SIGUSR1 || action == SIGUSR1_AND_SIGUSR2) { - r = uv_signal_start(&signal1a, signal1_cb, SIGUSR1); - ASSERT(r == 0); - r = uv_signal_start(&signal1b, signal1_cb, SIGUSR1); - ASSERT(r == 0); - } - - if (action == ONLY_SIGUSR2 || action == SIGUSR1_AND_SIGUSR2) { - r = uv_signal_start(&signal2, signal2_cb, SIGUSR2); - ASSERT(r == 0); - } - - /* Wait for signals once more. */ - uv_sem_post(&sem); - - r = uv_run(&loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - /* Close the watchers. */ - if (action == ONLY_SIGUSR1 || action == SIGUSR1_AND_SIGUSR2) { - uv_close((uv_handle_t*) &signal1a, NULL); - uv_close((uv_handle_t*) &signal1b, NULL); - } - - if (action == ONLY_SIGUSR2 || action == SIGUSR1_AND_SIGUSR2) { - uv_close((uv_handle_t*) &signal2, NULL); - } - - /* Wait for the signal watchers to close. */ - r = uv_run(&loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - uv_loop_close(&loop); -} - - -static void signal_unexpected_cb(uv_signal_t* handle, int signum) { - ASSERT(0 && "signal_unexpected_cb should never be called"); -} - - -static void loop_creating_worker(void* context) { - (void) context; - - do { - uv_loop_t *loop; - uv_signal_t signal; - int r; - - loop = malloc(sizeof(*loop)); - ASSERT_NOT_NULL(loop); - ASSERT(0 == uv_loop_init(loop)); - - r = uv_signal_init(loop, &signal); - ASSERT(r == 0); - - r = uv_signal_start(&signal, signal_unexpected_cb, SIGTERM); - ASSERT(r == 0); - - uv_close((uv_handle_t*) &signal, NULL); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - uv_loop_close(loop); - free(loop); - - increment_counter(&loop_creation_counter); - } while (!stop); -} - - -TEST_IMPL(signal_multiple_loops) { -#if defined(__CYGWIN__) || defined(__MSYS__) - /* FIXME: This test needs more investigation. Somehow the `read` in - uv__signal_lock fails spuriously with EACCES or even EAGAIN even - though it is supposed to be blocking. Also the test hangs during - thread setup occasionally. */ - RETURN_SKIP("FIXME: This test needs more investigation on Cygwin"); -#endif -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - // See https://github.com/libuv/libuv/issues/2859 - RETURN_SKIP("QEMU's signal emulation code is notoriously tricky"); -#endif - uv_thread_t loop_creating_threads[NUM_LOOP_CREATING_THREADS]; - uv_thread_t signal_handling_threads[NUM_SIGNAL_HANDLING_THREADS]; - enum signal_action action; - sigset_t sigset; - int i; - int r; - - r = uv_sem_init(&sem, 0); - ASSERT(r == 0); - - r = uv_mutex_init(&counter_lock); - ASSERT(r == 0); - - /* Create a couple of threads that create a destroy loops continuously. */ - for (i = 0; i < NUM_LOOP_CREATING_THREADS; i++) { - r = uv_thread_create(&loop_creating_threads[i], - loop_creating_worker, - NULL); - ASSERT(r == 0); - } - - /* Create a couple of threads that actually handle signals. */ - for (i = 0; i < NUM_SIGNAL_HANDLING_THREADS; i++) { - switch (i % 3) { - case 0: action = ONLY_SIGUSR1; break; - case 1: action = ONLY_SIGUSR2; break; - case 2: action = SIGUSR1_AND_SIGUSR2; break; - } - - r = uv_thread_create(&signal_handling_threads[i], - signal_handling_worker, - (void*) (uintptr_t) action); - ASSERT(r == 0); - } - - /* Wait until all threads have started and set up their signal watchers. */ - for (i = 0; i < NUM_SIGNAL_HANDLING_THREADS; i++) - uv_sem_wait(&sem); - - r = kill(getpid(), SIGUSR1); - ASSERT(r == 0); - r = kill(getpid(), SIGUSR2); - ASSERT(r == 0); - - /* Wait for all threads to handle these signals. */ - for (i = 0; i < NUM_SIGNAL_HANDLING_THREADS; i++) - uv_sem_wait(&sem); - - /* Block all signals to this thread, so we are sure that from here the signal - * handler runs in another thread. This is more likely to catch thread and - * signal safety issues if there are any. - */ - sigfillset(&sigset); - pthread_sigmask(SIG_SETMASK, &sigset, NULL); - - r = kill(getpid(), SIGUSR1); - ASSERT(r == 0); - r = kill(getpid(), SIGUSR2); - ASSERT(r == 0); - - /* Wait for all signal handling threads to exit. */ - for (i = 0; i < NUM_SIGNAL_HANDLING_THREADS; i++) { - r = uv_thread_join(&signal_handling_threads[i]); - ASSERT(r == 0); - } - - /* Tell all loop creating threads to stop. */ - stop = 1; - - /* Wait for all loop creating threads to exit. */ - for (i = 0; i < NUM_LOOP_CREATING_THREADS; i++) { - r = uv_thread_join(&loop_creating_threads[i]); - ASSERT(r == 0); - } - - uv_sem_destroy(&sem); - printf("signal1_cb calls: %d\n", signal1_cb_counter); - printf("signal2_cb calls: %d\n", signal2_cb_counter); - printf("loops created and destroyed: %d\n", loop_creation_counter); - - /* The division by three reflects the fact that we spawn three different - * thread groups of (NUM_SIGNAL_HANDLING_THREADS / 3) threads each. - */ - ASSERT(signal1_cb_counter == 8 * (NUM_SIGNAL_HANDLING_THREADS / 3)); - ASSERT(signal2_cb_counter == 4 * (NUM_SIGNAL_HANDLING_THREADS / 3)); - - /* We don't know exactly how much loops will be created and destroyed, but at - * least there should be 1 for every loop creating thread. - */ - ASSERT(loop_creation_counter >= NUM_LOOP_CREATING_THREADS); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#else - -typedef int file_has_no_tests; /* ISO C forbids an empty translation unit. */ - -#endif /* !_WIN32 */ diff --git a/libuv/test/test-signal-pending-on-close.c b/libuv/test/test-signal-pending-on-close.c deleted file mode 100644 index 428a97e..0000000 --- a/libuv/test/test-signal-pending-on-close.c +++ /dev/null @@ -1,119 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to -* deal in the Software without restriction, including without limitation the -* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -* sell copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -* IN THE SOFTWARE. -*/ -#ifndef _WIN32 - -#include "uv.h" -#include "task.h" - -#include -#include - -static uv_loop_t loop; -static uv_signal_t signal_hdl; -static uv_pipe_t pipe_hdl; -static uv_write_t write_req; -static char* buf; -static int close_cb_called; - - -static void stop_loop_cb(uv_signal_t* signal, int signum) { - ASSERT(signum == SIGPIPE); - uv_stop(signal->loop); -} - -static void signal_cb(uv_signal_t* signal, int signum) { - ASSERT(0); -} - -static void close_cb(uv_handle_t *handle) { - close_cb_called++; -} - - -static void write_cb(uv_write_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == UV_EPIPE); - free(buf); - uv_close((uv_handle_t *) &pipe_hdl, close_cb); - uv_close((uv_handle_t *) &signal_hdl, close_cb); -} - - -TEST_IMPL(signal_pending_on_close) { - int pipefds[2]; - uv_buf_t buffer; - int r; - - ASSERT(0 == uv_loop_init(&loop)); - - ASSERT(0 == uv_signal_init(&loop, &signal_hdl)); - - ASSERT(0 == uv_signal_start(&signal_hdl, signal_cb, SIGPIPE)); - - ASSERT(0 == pipe(pipefds)); - - ASSERT(0 == uv_pipe_init(&loop, &pipe_hdl, 0)); - - ASSERT(0 == uv_pipe_open(&pipe_hdl, pipefds[1])); - - /* Write data large enough so it needs loop iteration */ - buf = malloc(1<<24); - ASSERT_NOT_NULL(buf); - memset(buf, '.', 1<<24); - buffer = uv_buf_init(buf, 1<<24); - - r = uv_write(&write_req, (uv_stream_t *) &pipe_hdl, &buffer, 1, write_cb); - ASSERT(0 == r); - - /* cause a SIGPIPE on write in next iteration */ - close(pipefds[0]); - - ASSERT(0 == uv_run(&loop, UV_RUN_DEFAULT)); - - ASSERT(0 == uv_loop_close(&loop)); - - ASSERT(2 == close_cb_called); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(signal_close_loop_alive) { - ASSERT(0 == uv_loop_init(&loop)); - ASSERT(0 == uv_signal_init(&loop, &signal_hdl)); - ASSERT(0 == uv_signal_start(&signal_hdl, stop_loop_cb, SIGPIPE)); - uv_unref((uv_handle_t*) &signal_hdl); - - ASSERT(0 == uv_kill(uv_os_getpid(), SIGPIPE)); - ASSERT(0 == uv_run(&loop, UV_RUN_DEFAULT)); - uv_close((uv_handle_t*) &signal_hdl, close_cb); - ASSERT(1 == uv_loop_alive(&loop)); - - ASSERT(0 == uv_run(&loop, UV_RUN_DEFAULT)); - ASSERT(0 == uv_loop_close(&loop)); - ASSERT(1 == close_cb_called); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#endif diff --git a/libuv/test/test-signal.c b/libuv/test/test-signal.c deleted file mode 100644 index c2ce5ec..0000000 --- a/libuv/test/test-signal.c +++ /dev/null @@ -1,325 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#ifndef _WIN32 -#include -#endif - -TEST_IMPL(kill_invalid_signum) { - uv_pid_t pid; - - pid = uv_os_getpid(); - - ASSERT(uv_kill(pid, -1) == UV_EINVAL); -#ifdef _WIN32 - /* NSIG is not available on all platforms. */ - ASSERT(uv_kill(pid, NSIG) == UV_EINVAL); -#endif - ASSERT(uv_kill(pid, 4096) == UV_EINVAL); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -/* For Windows we test only signum handling */ -#ifdef _WIN32 -static void signum_test_cb(uv_signal_t* handle, int signum) { - FATAL("signum_test_cb should not be called"); -} - -TEST_IMPL(win32_signum_number) { - uv_signal_t signal; - uv_loop_t* loop; - - loop = uv_default_loop(); - uv_signal_init(loop, &signal); - - ASSERT(uv_signal_start(&signal, signum_test_cb, 0) == UV_EINVAL); - ASSERT(uv_signal_start(&signal, signum_test_cb, SIGINT) == 0); - ASSERT(uv_signal_start(&signal, signum_test_cb, SIGBREAK) == 0); - ASSERT(uv_signal_start(&signal, signum_test_cb, SIGHUP) == 0); - ASSERT(uv_signal_start(&signal, signum_test_cb, SIGWINCH) == 0); - ASSERT(uv_signal_start(&signal, signum_test_cb, SIGILL) == 0); - ASSERT(uv_signal_start(&signal, signum_test_cb, SIGABRT_COMPAT) == 0); - ASSERT(uv_signal_start(&signal, signum_test_cb, SIGFPE) == 0); - ASSERT(uv_signal_start(&signal, signum_test_cb, SIGSEGV) == 0); - ASSERT(uv_signal_start(&signal, signum_test_cb, SIGTERM) == 0); - ASSERT(uv_signal_start(&signal, signum_test_cb, SIGABRT) == 0); - ASSERT(uv_signal_start(&signal, signum_test_cb, -1) == UV_EINVAL); - ASSERT(uv_signal_start(&signal, signum_test_cb, NSIG) == UV_EINVAL); - ASSERT(uv_signal_start(&signal, signum_test_cb, 1024) == UV_EINVAL); - MAKE_VALGRIND_HAPPY(); - return 0; -} -#else -#include -#include -#include -#include -#include -#include -#include - -#define NSIGNALS 10 - -struct timer_ctx { - unsigned int ncalls; - uv_timer_t handle; - int signum; -}; - -struct signal_ctx { - enum { CLOSE, STOP, NOOP } stop_or_close; - unsigned int ncalls; - uv_signal_t handle; - int signum; - int one_shot; -}; - - -static void signal_cb(uv_signal_t* handle, int signum) { - struct signal_ctx* ctx = container_of(handle, struct signal_ctx, handle); - ASSERT(signum == ctx->signum); - if (++ctx->ncalls == NSIGNALS) { - if (ctx->stop_or_close == STOP) - uv_signal_stop(handle); - else if (ctx->stop_or_close == CLOSE) - uv_close((uv_handle_t*)handle, NULL); - else - ASSERT(0); - } -} - -static void signal_cb_one_shot(uv_signal_t* handle, int signum) { - struct signal_ctx* ctx = container_of(handle, struct signal_ctx, handle); - ASSERT(signum == ctx->signum); - ASSERT(++ctx->ncalls == 1); - if (ctx->stop_or_close == CLOSE) - uv_close((uv_handle_t*)handle, NULL); -} - - -static void timer_cb(uv_timer_t* handle) { - struct timer_ctx* ctx = container_of(handle, struct timer_ctx, handle); - - raise(ctx->signum); - - if (++ctx->ncalls == NSIGNALS) - uv_close((uv_handle_t*)handle, NULL); -} - - -static void start_watcher(uv_loop_t* loop, - int signum, - struct signal_ctx* ctx, - int one_shot) { - ctx->ncalls = 0; - ctx->signum = signum; - ctx->stop_or_close = CLOSE; - ctx->one_shot = one_shot; - ASSERT(0 == uv_signal_init(loop, &ctx->handle)); - if (one_shot) - ASSERT(0 == uv_signal_start_oneshot(&ctx->handle, signal_cb_one_shot, signum)); - else - ASSERT(0 == uv_signal_start(&ctx->handle, signal_cb, signum)); -} - -static void start_timer(uv_loop_t* loop, int signum, struct timer_ctx* ctx) { - ctx->ncalls = 0; - ctx->signum = signum; - ASSERT(0 == uv_timer_init(loop, &ctx->handle)); - ASSERT(0 == uv_timer_start(&ctx->handle, timer_cb, 5, 5)); -} - - -TEST_IMPL(we_get_signal) { - struct signal_ctx sc; - struct timer_ctx tc; - uv_loop_t* loop; - - loop = uv_default_loop(); - start_timer(loop, SIGCHLD, &tc); - start_watcher(loop, SIGCHLD, &sc, 0); - sc.stop_or_close = STOP; /* stop, don't close the signal handle */ - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(tc.ncalls == NSIGNALS); - ASSERT(sc.ncalls == NSIGNALS); - - start_timer(loop, SIGCHLD, &tc); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(tc.ncalls == NSIGNALS); - ASSERT(sc.ncalls == NSIGNALS); - - sc.ncalls = 0; - sc.stop_or_close = CLOSE; /* now close it when it's done */ - uv_signal_start(&sc.handle, signal_cb, SIGCHLD); - - start_timer(loop, SIGCHLD, &tc); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(tc.ncalls == NSIGNALS); - ASSERT(sc.ncalls == NSIGNALS); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(we_get_signals) { - struct signal_ctx sc[4]; - struct timer_ctx tc[2]; - uv_loop_t* loop; - unsigned int i; - - loop = uv_default_loop(); - start_watcher(loop, SIGUSR1, sc + 0, 0); - start_watcher(loop, SIGUSR1, sc + 1, 0); - start_watcher(loop, SIGUSR2, sc + 2, 0); - start_watcher(loop, SIGUSR2, sc + 3, 0); - start_timer(loop, SIGUSR1, tc + 0); - start_timer(loop, SIGUSR2, tc + 1); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - - for (i = 0; i < ARRAY_SIZE(sc); i++) - ASSERT(sc[i].ncalls == NSIGNALS); - - for (i = 0; i < ARRAY_SIZE(tc); i++) - ASSERT(tc[i].ncalls == NSIGNALS); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(we_get_signal_one_shot) { - struct signal_ctx sc; - struct timer_ctx tc; - uv_loop_t* loop; - - loop = uv_default_loop(); - start_timer(loop, SIGCHLD, &tc); - start_watcher(loop, SIGCHLD, &sc, 1); - sc.stop_or_close = NOOP; - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(tc.ncalls == NSIGNALS); - ASSERT(sc.ncalls == 1); - - start_timer(loop, SIGCHLD, &tc); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(sc.ncalls == 1); - - sc.ncalls = 0; - sc.stop_or_close = CLOSE; /* now close it when it's done */ - uv_signal_start_oneshot(&sc.handle, signal_cb_one_shot, SIGCHLD); - start_timer(loop, SIGCHLD, &tc); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(tc.ncalls == NSIGNALS); - ASSERT(sc.ncalls == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(we_get_signals_mixed) { - struct signal_ctx sc[4]; - struct timer_ctx tc; - uv_loop_t* loop; - - loop = uv_default_loop(); - - /* 2 one-shot */ - start_timer(loop, SIGCHLD, &tc); - start_watcher(loop, SIGCHLD, sc + 0, 1); - start_watcher(loop, SIGCHLD, sc + 1, 1); - sc[0].stop_or_close = CLOSE; - sc[1].stop_or_close = CLOSE; - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(tc.ncalls == NSIGNALS); - ASSERT(sc[0].ncalls == 1); - ASSERT(sc[1].ncalls == 1); - - /* 2 one-shot, 1 normal then remove normal */ - start_timer(loop, SIGCHLD, &tc); - start_watcher(loop, SIGCHLD, sc + 0, 1); - start_watcher(loop, SIGCHLD, sc + 1, 1); - sc[0].stop_or_close = CLOSE; - sc[1].stop_or_close = CLOSE; - start_watcher(loop, SIGCHLD, sc + 2, 0); - uv_close((uv_handle_t*)&(sc[2]).handle, NULL); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(tc.ncalls == NSIGNALS); - ASSERT(sc[0].ncalls == 1); - ASSERT(sc[1].ncalls == 1); - ASSERT(sc[2].ncalls == 0); - - /* 2 normal, 1 one-shot then remove one-shot */ - start_timer(loop, SIGCHLD, &tc); - start_watcher(loop, SIGCHLD, sc + 0, 0); - start_watcher(loop, SIGCHLD, sc + 1, 0); - sc[0].stop_or_close = CLOSE; - sc[1].stop_or_close = CLOSE; - start_watcher(loop, SIGCHLD, sc + 2, 1); - uv_close((uv_handle_t*)&(sc[2]).handle, NULL); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(tc.ncalls == NSIGNALS); - ASSERT(sc[0].ncalls == NSIGNALS); - ASSERT(sc[1].ncalls == NSIGNALS); - ASSERT(sc[2].ncalls == 0); - - /* 2 normal, 2 one-shot then remove 2 normal */ - start_timer(loop, SIGCHLD, &tc); - start_watcher(loop, SIGCHLD, sc + 0, 0); - start_watcher(loop, SIGCHLD, sc + 1, 0); - start_watcher(loop, SIGCHLD, sc + 2, 1); - start_watcher(loop, SIGCHLD, sc + 3, 1); - sc[2].stop_or_close = CLOSE; - sc[3].stop_or_close = CLOSE; - uv_close((uv_handle_t*)&(sc[0]).handle, NULL); - uv_close((uv_handle_t*)&(sc[1]).handle, NULL); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(tc.ncalls == NSIGNALS); - ASSERT(sc[0].ncalls == 0); - ASSERT(sc[1].ncalls == 0); - ASSERT(sc[2].ncalls == 1); - ASSERT(sc[2].ncalls == 1); - - /* 1 normal, 1 one-shot, 2 normal then remove 1st normal, 2nd normal */ - start_timer(loop, SIGCHLD, &tc); - start_watcher(loop, SIGCHLD, sc + 0, 0); - start_watcher(loop, SIGCHLD, sc + 1, 1); - start_watcher(loop, SIGCHLD, sc + 2, 0); - start_watcher(loop, SIGCHLD, sc + 3, 0); - sc[3].stop_or_close = CLOSE; - uv_close((uv_handle_t*)&(sc[0]).handle, NULL); - uv_close((uv_handle_t*)&(sc[2]).handle, NULL); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(tc.ncalls == NSIGNALS); - ASSERT(sc[0].ncalls == 0); - ASSERT(sc[1].ncalls == 1); - ASSERT(sc[2].ncalls == 0); - ASSERT(sc[3].ncalls == NSIGNALS); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#endif /* _WIN32 */ diff --git a/libuv/test/test-socket-buffer-size.c b/libuv/test/test-socket-buffer-size.c deleted file mode 100644 index 72f8c25..0000000 --- a/libuv/test/test-socket-buffer-size.c +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -static uv_udp_t udp; -static uv_tcp_t tcp; -static int close_cb_called; - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - - -static void check_buffer_size(uv_handle_t* handle) { - int value; - - value = 0; - ASSERT(0 == uv_recv_buffer_size(handle, &value)); - ASSERT(value > 0); - - value = 10000; - ASSERT(0 == uv_recv_buffer_size(handle, &value)); - - value = 0; - ASSERT(0 == uv_recv_buffer_size(handle, &value)); - /* linux sets double the value */ - ASSERT(value == 10000 || value == 20000); -} - - -TEST_IMPL(socket_buffer_size) { - struct sockaddr_in addr; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - ASSERT(0 == uv_tcp_init(uv_default_loop(), &tcp)); - ASSERT(0 == uv_tcp_bind(&tcp, (struct sockaddr*) &addr, 0)); - check_buffer_size((uv_handle_t*) &tcp); - uv_close((uv_handle_t*) &tcp, close_cb); - - ASSERT(0 == uv_udp_init(uv_default_loop(), &udp)); - ASSERT(0 == uv_udp_bind(&udp, (struct sockaddr*) &addr, 0)); - check_buffer_size((uv_handle_t*) &udp); - uv_close((uv_handle_t*) &udp, close_cb); - - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - ASSERT(close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-spawn.c b/libuv/test/test-spawn.c deleted file mode 100644 index 9f2eb24..0000000 --- a/libuv/test/test-spawn.c +++ /dev/null @@ -1,1945 +0,0 @@ - -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include -#include -#include -#include - -#ifdef _WIN32 -# include -# include - typedef BOOL (WINAPI *sCompareObjectHandles)(_In_ HANDLE, _In_ HANDLE); -#else -# include -# include -#endif - - -static int close_cb_called; -static int exit_cb_called; -static uv_process_t process; -static uv_timer_t timer; -static uv_process_options_t options; -static char exepath[1024]; -static size_t exepath_size = 1024; -static char* args[5]; -static int no_term_signal; -static int timer_counter; -static uv_tcp_t tcp_server; - -#define OUTPUT_SIZE 1024 -static char output[OUTPUT_SIZE]; -static int output_used; - - -static void close_cb(uv_handle_t* handle) { - printf("close_cb\n"); - close_cb_called++; -} - -static void exit_cb(uv_process_t* process, - int64_t exit_status, - int term_signal) { - printf("exit_cb\n"); - exit_cb_called++; - ASSERT(exit_status == 1); - ASSERT(term_signal == 0); - uv_close((uv_handle_t*) process, close_cb); -} - - -static void fail_cb(uv_process_t* process, - int64_t exit_status, - int term_signal) { - ASSERT(0 && "fail_cb called"); -} - - -static void kill_cb(uv_process_t* process, - int64_t exit_status, - int term_signal) { - int err; - - printf("exit_cb\n"); - exit_cb_called++; -#ifdef _WIN32 - ASSERT(exit_status == 1); -#else - ASSERT(exit_status == 0); -#endif -#if defined(__APPLE__) || defined(__MVS__) - /* - * At least starting with Darwin Kernel Version 16.4.0, sending a SIGTERM to a - * process that is still starting up kills it with SIGKILL instead of SIGTERM. - * See: https://github.com/libuv/libuv/issues/1226 - */ - ASSERT(no_term_signal || term_signal == SIGTERM || term_signal == SIGKILL); -#else - ASSERT(no_term_signal || term_signal == SIGTERM); -#endif - uv_close((uv_handle_t*) process, close_cb); - - /* - * Sending signum == 0 should check if the - * child process is still alive, not kill it. - * This process should be dead. - */ - err = uv_kill(process->pid, 0); - ASSERT(err == UV_ESRCH); -} - -static void detach_failure_cb(uv_process_t* process, - int64_t exit_status, - int term_signal) { - printf("detach_cb\n"); - exit_cb_called++; -} - -static void on_alloc(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - buf->base = output + output_used; - buf->len = OUTPUT_SIZE - output_used; -} - - -static void on_read(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf) { - if (nread > 0) { - output_used += nread; - } else if (nread < 0) { - ASSERT(nread == UV_EOF); - uv_close((uv_handle_t*) tcp, close_cb); - } -} - - -static void on_read_once(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf) { - uv_read_stop(tcp); - on_read(tcp, nread, buf); -} - - -static void write_cb(uv_write_t* req, int status) { - ASSERT(status == 0); - uv_close((uv_handle_t*) req->handle, close_cb); -} - - -static void write_null_cb(uv_write_t* req, int status) { - ASSERT(status == 0); -} - - -static void init_process_options(char* test, uv_exit_cb exit_cb) { - /* Note spawn_helper1 defined in test/run-tests.c */ - int r = uv_exepath(exepath, &exepath_size); - ASSERT(r == 0); - exepath[exepath_size] = '\0'; - args[0] = exepath; - args[1] = test; - args[2] = NULL; - args[3] = NULL; - args[4] = NULL; - options.file = exepath; - options.args = args; - options.exit_cb = exit_cb; - options.flags = 0; -} - - -static void timer_cb(uv_timer_t* handle) { - uv_process_kill(&process, SIGTERM); - uv_close((uv_handle_t*) handle, close_cb); -} - - -static void timer_counter_cb(uv_timer_t* handle) { - ++timer_counter; -} - - -TEST_IMPL(spawn_fails) { - int r; - - init_process_options("", fail_cb); - options.file = options.args[0] = "program-that-had-better-not-exist"; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == UV_ENOENT || r == UV_EACCES); - ASSERT(0 == uv_is_active((uv_handle_t*) &process)); - uv_close((uv_handle_t*) &process, NULL); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -#ifndef _WIN32 -TEST_IMPL(spawn_fails_check_for_waitpid_cleanup) { - int r; - int status; - int err; - - init_process_options("", fail_cb); - options.file = options.args[0] = "program-that-had-better-not-exist"; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == UV_ENOENT || r == UV_EACCES); - ASSERT(0 == uv_is_active((uv_handle_t*) &process)); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - /* verify the child is successfully cleaned up within libuv */ - do - err = waitpid(process.pid, &status, 0); - while (err == -1 && errno == EINTR); - - ASSERT(err == -1); - ASSERT(errno == ECHILD); - - uv_close((uv_handle_t*) &process, NULL); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - - -TEST_IMPL(spawn_empty_env) { - char* env[1]; - - /* The autotools dynamic library build requires the presence of - * DYLD_LIBARY_PATH (macOS) or LD_LIBRARY_PATH/LIBPATH (other Unices) - * in the environment, but of course that doesn't work with - * the empty environment that we're testing here. - */ - if (NULL != getenv("DYLD_LIBRARY_PATH") || - NULL != getenv("LD_LIBRARY_PATH") || - NULL != getenv("LIBPATH")) { - RETURN_SKIP("doesn't work with DYLD_LIBRARY_PATH/LD_LIBRARY_PATH/LIBPATH"); - } - - init_process_options("spawn_helper1", exit_cb); - options.env = env; - env[0] = NULL; - - ASSERT(0 == uv_spawn(uv_default_loop(), &process, &options)); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_exit_code) { - int r; - - init_process_options("spawn_helper1", exit_cb); - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_stdout) { - int r; - uv_pipe_t out; - uv_stdio_container_t stdio[2]; - - init_process_options("spawn_helper2", exit_cb); - - uv_pipe_init(uv_default_loop(), &out, 0); - options.stdio = stdio; - options.stdio[0].flags = UV_IGNORE; - options.stdio[1].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE; - options.stdio[1].data.stream = (uv_stream_t*) &out; - options.stdio_count = 2; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 2); /* Once for process once for the pipe. */ - printf("output is: %s", output); - ASSERT(strcmp("hello world\n", output) == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_stdout_to_file) { - int r; - uv_file file; - uv_fs_t fs_req; - uv_stdio_container_t stdio[2]; - uv_buf_t buf; - - /* Setup. */ - unlink("stdout_file"); - - init_process_options("spawn_helper2", exit_cb); - - r = uv_fs_open(NULL, &fs_req, "stdout_file", O_CREAT | O_RDWR, - S_IRUSR | S_IWUSR, NULL); - ASSERT(r != -1); - uv_fs_req_cleanup(&fs_req); - - file = r; - - options.stdio = stdio; - options.stdio[0].flags = UV_IGNORE; - options.stdio[1].flags = UV_INHERIT_FD; - options.stdio[1].data.fd = file; - options.stdio_count = 2; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 1); - - buf = uv_buf_init(output, sizeof(output)); - r = uv_fs_read(NULL, &fs_req, file, &buf, 1, 0, NULL); - ASSERT(r == 12); - uv_fs_req_cleanup(&fs_req); - - r = uv_fs_close(NULL, &fs_req, file, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&fs_req); - - printf("output is: %s", output); - ASSERT(strcmp("hello world\n", output) == 0); - - /* Cleanup. */ - unlink("stdout_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_stdout_and_stderr_to_file) { - int r; - uv_file file; - uv_fs_t fs_req; - uv_stdio_container_t stdio[3]; - uv_buf_t buf; - - /* Setup. */ - unlink("stdout_file"); - - init_process_options("spawn_helper6", exit_cb); - - r = uv_fs_open(NULL, &fs_req, "stdout_file", O_CREAT | O_RDWR, - S_IRUSR | S_IWUSR, NULL); - ASSERT(r != -1); - uv_fs_req_cleanup(&fs_req); - - file = r; - - options.stdio = stdio; - options.stdio[0].flags = UV_IGNORE; - options.stdio[1].flags = UV_INHERIT_FD; - options.stdio[1].data.fd = file; - options.stdio[2].flags = UV_INHERIT_FD; - options.stdio[2].data.fd = file; - options.stdio_count = 3; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 1); - - buf = uv_buf_init(output, sizeof(output)); - r = uv_fs_read(NULL, &fs_req, file, &buf, 1, 0, NULL); - ASSERT(r == 27); - uv_fs_req_cleanup(&fs_req); - - r = uv_fs_close(NULL, &fs_req, file, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&fs_req); - - printf("output is: %s", output); - ASSERT(strcmp("hello world\nhello errworld\n", output) == 0); - - /* Cleanup. */ - unlink("stdout_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_stdout_and_stderr_to_file2) { -#ifndef _WIN32 - int r; - uv_file file; - uv_fs_t fs_req; - uv_stdio_container_t stdio[3]; - uv_buf_t buf; - - /* Setup. */ - unlink("stdout_file"); - - init_process_options("spawn_helper6", exit_cb); - - /* Replace stderr with our file */ - r = uv_fs_open(NULL, - &fs_req, - "stdout_file", - O_CREAT | O_RDWR, - S_IRUSR | S_IWUSR, - NULL); - ASSERT(r != -1); - uv_fs_req_cleanup(&fs_req); - file = dup2(r, STDERR_FILENO); - ASSERT(file != -1); - - options.stdio = stdio; - options.stdio[0].flags = UV_IGNORE; - options.stdio[1].flags = UV_INHERIT_FD; - options.stdio[1].data.fd = file; - options.stdio[2].flags = UV_INHERIT_FD; - options.stdio[2].data.fd = file; - options.stdio_count = 3; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 1); - - buf = uv_buf_init(output, sizeof(output)); - r = uv_fs_read(NULL, &fs_req, file, &buf, 1, 0, NULL); - ASSERT(r == 27); - uv_fs_req_cleanup(&fs_req); - - r = uv_fs_close(NULL, &fs_req, file, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&fs_req); - - printf("output is: %s", output); - ASSERT(strcmp("hello world\nhello errworld\n", output) == 0); - - /* Cleanup. */ - unlink("stdout_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -#else - RETURN_SKIP("Unix only test"); -#endif -} - - -TEST_IMPL(spawn_stdout_and_stderr_to_file_swap) { -#ifndef _WIN32 - int r; - uv_file stdout_file; - uv_file stderr_file; - uv_fs_t fs_req; - uv_stdio_container_t stdio[3]; - uv_buf_t buf; - - /* Setup. */ - unlink("stdout_file"); - unlink("stderr_file"); - - init_process_options("spawn_helper6", exit_cb); - - /* open 'stdout_file' and replace STDOUT_FILENO with it */ - r = uv_fs_open(NULL, - &fs_req, - "stdout_file", - O_CREAT | O_RDWR, - S_IRUSR | S_IWUSR, - NULL); - ASSERT(r != -1); - uv_fs_req_cleanup(&fs_req); - stdout_file = dup2(r, STDOUT_FILENO); - ASSERT(stdout_file != -1); - - /* open 'stderr_file' and replace STDERR_FILENO with it */ - r = uv_fs_open(NULL, &fs_req, "stderr_file", O_CREAT | O_RDWR, - S_IRUSR | S_IWUSR, NULL); - ASSERT(r != -1); - uv_fs_req_cleanup(&fs_req); - stderr_file = dup2(r, STDERR_FILENO); - ASSERT(stderr_file != -1); - - /* now we're going to swap them: the child process' stdout will be our - * stderr_file and vice versa */ - options.stdio = stdio; - options.stdio[0].flags = UV_IGNORE; - options.stdio[1].flags = UV_INHERIT_FD; - options.stdio[1].data.fd = stderr_file; - options.stdio[2].flags = UV_INHERIT_FD; - options.stdio[2].data.fd = stdout_file; - options.stdio_count = 3; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 1); - - buf = uv_buf_init(output, sizeof(output)); - - /* check the content of stdout_file */ - r = uv_fs_read(NULL, &fs_req, stdout_file, &buf, 1, 0, NULL); - ASSERT(r >= 15); - uv_fs_req_cleanup(&fs_req); - - r = uv_fs_close(NULL, &fs_req, stdout_file, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&fs_req); - - printf("output is: %s", output); - ASSERT(strncmp("hello errworld\n", output, 15) == 0); - - /* check the content of stderr_file */ - r = uv_fs_read(NULL, &fs_req, stderr_file, &buf, 1, 0, NULL); - ASSERT(r >= 12); - uv_fs_req_cleanup(&fs_req); - - r = uv_fs_close(NULL, &fs_req, stderr_file, NULL); - ASSERT(r == 0); - uv_fs_req_cleanup(&fs_req); - - printf("output is: %s", output); - ASSERT(strncmp("hello world\n", output, 12) == 0); - - /* Cleanup. */ - unlink("stdout_file"); - unlink("stderr_file"); - - MAKE_VALGRIND_HAPPY(); - return 0; -#else - RETURN_SKIP("Unix only test"); -#endif -} - - -TEST_IMPL(spawn_stdin) { - int r; - uv_pipe_t out; - uv_pipe_t in; - uv_write_t write_req; - uv_buf_t buf; - uv_stdio_container_t stdio[2]; - char buffer[] = "hello-from-spawn_stdin"; - - init_process_options("spawn_helper3", exit_cb); - - uv_pipe_init(uv_default_loop(), &out, 0); - uv_pipe_init(uv_default_loop(), &in, 0); - options.stdio = stdio; - options.stdio[0].flags = UV_CREATE_PIPE | UV_READABLE_PIPE; - options.stdio[0].data.stream = (uv_stream_t*) ∈ - options.stdio[1].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE; - options.stdio[1].data.stream = (uv_stream_t*) &out; - options.stdio_count = 2; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - buf.base = buffer; - buf.len = sizeof(buffer); - r = uv_write(&write_req, (uv_stream_t*) &in, &buf, 1, write_cb); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 3); /* Once for process twice for the pipe. */ - ASSERT(strcmp(buffer, output) == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_stdio_greater_than_3) { - int r; - uv_pipe_t pipe; - uv_stdio_container_t stdio[4]; - - init_process_options("spawn_helper5", exit_cb); - - uv_pipe_init(uv_default_loop(), &pipe, 0); - options.stdio = stdio; - options.stdio[0].flags = UV_IGNORE; - options.stdio[1].flags = UV_IGNORE; - options.stdio[2].flags = UV_IGNORE; - options.stdio[3].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE; - options.stdio[3].data.stream = (uv_stream_t*) &pipe; - options.stdio_count = 4; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*) &pipe, on_alloc, on_read); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 2); /* Once for process once for the pipe. */ - printf("output from stdio[3] is: %s", output); - ASSERT(strcmp("fourth stdio!\n", output) == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -int spawn_tcp_server_helper(void) { - uv_tcp_t tcp; - uv_os_sock_t handle; - int r; - - r = uv_tcp_init(uv_default_loop(), &tcp); - ASSERT(r == 0); - -#ifdef _WIN32 - handle = _get_osfhandle(3); -#else - handle = 3; -#endif - r = uv_tcp_open(&tcp, handle); - ASSERT(r == 0); - - /* Make sure that we can listen on a socket that was - * passed down from the parent process - */ - r = uv_listen((uv_stream_t*) &tcp, SOMAXCONN, NULL); - ASSERT(r == 0); - - return 1; -} - - -TEST_IMPL(spawn_tcp_server) { - uv_stdio_container_t stdio[4]; - struct sockaddr_in addr; - int fd; - int r; -#ifdef _WIN32 - uv_os_fd_t handle; -#endif - - init_process_options("spawn_tcp_server_helper", exit_cb); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - fd = -1; - r = uv_tcp_init_ex(uv_default_loop(), &tcp_server, AF_INET); - ASSERT(r == 0); - r = uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); -#ifdef _WIN32 - r = uv_fileno((uv_handle_t*) &tcp_server, &handle); - fd = _open_osfhandle((intptr_t) handle, 0); -#else - r = uv_fileno((uv_handle_t*) &tcp_server, &fd); - #endif - ASSERT(r == 0); - ASSERT(fd > 0); - - options.stdio = stdio; - options.stdio[0].flags = UV_INHERIT_FD; - options.stdio[0].data.fd = 0; - options.stdio[1].flags = UV_INHERIT_FD; - options.stdio[1].data.fd = 1; - options.stdio[2].flags = UV_INHERIT_FD; - options.stdio[2].data.fd = 2; - options.stdio[3].flags = UV_INHERIT_FD; - options.stdio[3].data.fd = fd; - options.stdio_count = 4; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_ignored_stdio) { - int r; - - init_process_options("spawn_helper6", exit_cb); - - options.stdio = NULL; - options.stdio_count = 0; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_and_kill) { - int r; - - init_process_options("spawn_helper4", kill_cb); - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - r = uv_timer_init(uv_default_loop(), &timer); - ASSERT(r == 0); - - r = uv_timer_start(&timer, timer_cb, 500, 0); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 2); /* Once for process and once for timer. */ - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_preserve_env) { - int r; - uv_pipe_t out; - uv_stdio_container_t stdio[2]; - - init_process_options("spawn_helper7", exit_cb); - - uv_pipe_init(uv_default_loop(), &out, 0); - options.stdio = stdio; - options.stdio[0].flags = UV_IGNORE; - options.stdio[1].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE; - options.stdio[1].data.stream = (uv_stream_t*) &out; - options.stdio_count = 2; - - r = putenv("ENV_TEST=testval"); - ASSERT(r == 0); - - /* Explicitly set options.env to NULL to test for env clobbering. */ - options.env = NULL; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 2); - - printf("output is: %s", output); - ASSERT(strcmp("testval", output) == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_detached) { - int r; - - init_process_options("spawn_helper4", detach_failure_cb); - - options.flags |= UV_PROCESS_DETACHED; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - uv_unref((uv_handle_t*) &process); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 0); - - ASSERT(process.pid == uv_process_get_pid(&process)); - - r = uv_kill(process.pid, 0); - ASSERT(r == 0); - - r = uv_kill(process.pid, SIGTERM); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(spawn_and_kill_with_std) { - int r; - uv_pipe_t in, out, err; - uv_write_t write; - char message[] = "Nancy's joining me because the message this evening is " - "not my message but ours."; - uv_buf_t buf; - uv_stdio_container_t stdio[3]; - - init_process_options("spawn_helper4", kill_cb); - - r = uv_pipe_init(uv_default_loop(), &in, 0); - ASSERT(r == 0); - - r = uv_pipe_init(uv_default_loop(), &out, 0); - ASSERT(r == 0); - - r = uv_pipe_init(uv_default_loop(), &err, 0); - ASSERT(r == 0); - - options.stdio = stdio; - options.stdio[0].flags = UV_CREATE_PIPE | UV_READABLE_PIPE; - options.stdio[0].data.stream = (uv_stream_t*) ∈ - options.stdio[1].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE; - options.stdio[1].data.stream = (uv_stream_t*) &out; - options.stdio[2].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE; - options.stdio[2].data.stream = (uv_stream_t*) &err; - options.stdio_count = 3; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - buf = uv_buf_init(message, sizeof message); - r = uv_write(&write, (uv_stream_t*) &in, &buf, 1, write_cb); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*) &err, on_alloc, on_read); - ASSERT(r == 0); - - r = uv_timer_init(uv_default_loop(), &timer); - ASSERT(r == 0); - - r = uv_timer_start(&timer, timer_cb, 500, 0); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 5); /* process x 1, timer x 1, stdio x 3. */ - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_and_ping) { - uv_write_t write_req; - uv_pipe_t in, out; - uv_buf_t buf; - uv_stdio_container_t stdio[2]; - int r; - - init_process_options("spawn_helper3", exit_cb); - buf = uv_buf_init("TEST", 4); - - uv_pipe_init(uv_default_loop(), &out, 0); - uv_pipe_init(uv_default_loop(), &in, 0); - options.stdio = stdio; - options.stdio[0].flags = UV_CREATE_PIPE | UV_READABLE_PIPE; - options.stdio[0].data.stream = (uv_stream_t*) ∈ - options.stdio[1].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE; - options.stdio[1].data.stream = (uv_stream_t*) &out; - options.stdio_count = 2; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - /* Sending signum == 0 should check if the - * child process is still alive, not kill it. - */ - r = uv_process_kill(&process, 0); - ASSERT(r == 0); - - r = uv_write(&write_req, (uv_stream_t*) &in, &buf, 1, write_cb); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(strcmp(output, "TEST") == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_same_stdout_stderr) { - uv_write_t write_req; - uv_pipe_t in, out; - uv_buf_t buf; - uv_stdio_container_t stdio[3]; - int r; - - init_process_options("spawn_helper3", exit_cb); - buf = uv_buf_init("TEST", 4); - - uv_pipe_init(uv_default_loop(), &out, 0); - uv_pipe_init(uv_default_loop(), &in, 0); - options.stdio = stdio; - options.stdio[0].flags = UV_CREATE_PIPE | UV_READABLE_PIPE; - options.stdio[0].data.stream = (uv_stream_t*) ∈ - options.stdio[1].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE; - options.stdio[1].data.stream = (uv_stream_t*) &out; - options.stdio_count = 2; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - /* Sending signum == 0 should check if the - * child process is still alive, not kill it. - */ - r = uv_process_kill(&process, 0); - ASSERT(r == 0); - - r = uv_write(&write_req, (uv_stream_t*) &in, &buf, 1, write_cb); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(strcmp(output, "TEST") == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_closed_process_io) { - uv_pipe_t in; - uv_write_t write_req; - uv_buf_t buf; - uv_stdio_container_t stdio[2]; - static char buffer[] = "hello-from-spawn_stdin\n"; - - init_process_options("spawn_helper3", exit_cb); - - uv_pipe_init(uv_default_loop(), &in, 0); - options.stdio = stdio; - options.stdio[0].flags = UV_CREATE_PIPE | UV_READABLE_PIPE; - options.stdio[0].data.stream = (uv_stream_t*) ∈ - options.stdio_count = 1; - - close(0); /* Close process stdin. */ - - ASSERT(0 == uv_spawn(uv_default_loop(), &process, &options)); - - buf = uv_buf_init(buffer, sizeof(buffer)); - ASSERT(0 == uv_write(&write_req, (uv_stream_t*) &in, &buf, 1, write_cb)); - - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 2); /* process, child stdin */ - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(kill) { - int r; - -#ifdef _WIN32 - no_term_signal = 1; -#endif - - init_process_options("spawn_helper4", kill_cb); - - /* Verify that uv_spawn() resets the signal disposition. */ -#ifndef _WIN32 - { - sigset_t set; - sigemptyset(&set); - sigaddset(&set, SIGTERM); - ASSERT(0 == pthread_sigmask(SIG_BLOCK, &set, NULL)); - } - ASSERT(SIG_ERR != signal(SIGTERM, SIG_IGN)); -#endif - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - -#ifndef _WIN32 - { - sigset_t set; - sigemptyset(&set); - sigaddset(&set, SIGTERM); - ASSERT(0 == pthread_sigmask(SIG_UNBLOCK, &set, NULL)); - } - ASSERT(SIG_ERR != signal(SIGTERM, SIG_DFL)); -#endif - - /* Sending signum == 0 should check if the - * child process is still alive, not kill it. - */ - r = uv_kill(process.pid, 0); - ASSERT(r == 0); - - /* Kill the process. */ - r = uv_kill(process.pid, SIGTERM); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -#ifdef _WIN32 -TEST_IMPL(spawn_detect_pipe_name_collisions_on_windows) { - int r; - uv_pipe_t out; - char name[64]; - HANDLE pipe_handle; - uv_stdio_container_t stdio[2]; - - init_process_options("spawn_helper2", exit_cb); - - uv_pipe_init(uv_default_loop(), &out, 0); - options.stdio = stdio; - options.stdio[0].flags = UV_IGNORE; - options.stdio[1].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE; - options.stdio[1].data.stream = (uv_stream_t*) &out; - options.stdio_count = 2; - - /* Create a pipe that'll cause a collision. */ - snprintf(name, - sizeof(name), - "\\\\.\\pipe\\uv\\%p-%d", - &out, - GetCurrentProcessId()); - pipe_handle = CreateNamedPipeA(name, - PIPE_ACCESS_INBOUND | FILE_FLAG_OVERLAPPED, - PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, - 10, - 65536, - 65536, - 0, - NULL); - ASSERT(pipe_handle != INVALID_HANDLE_VALUE); - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 2); /* Once for process once for the pipe. */ - printf("output is: %s", output); - ASSERT(strcmp("hello world\n", output) == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -#if !defined(USING_UV_SHARED) -int make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr); -WCHAR* quote_cmd_arg(const WCHAR *source, WCHAR *target); - -TEST_IMPL(argument_escaping) { - const WCHAR* test_str[] = { - L"", - L"HelloWorld", - L"Hello World", - L"Hello\"World", - L"Hello World\\", - L"Hello\\\"World", - L"Hello\\World", - L"Hello\\\\World", - L"Hello World\\", - L"c:\\path\\to\\node.exe --eval \"require('c:\\\\path\\\\to\\\\test.js')\"" - }; - const int count = sizeof(test_str) / sizeof(*test_str); - WCHAR** test_output; - WCHAR* command_line; - WCHAR** cracked; - size_t total_size = 0; - int i; - int num_args; - int result; - - char* verbatim[] = { - "cmd.exe", - "/c", - "c:\\path\\to\\node.exe --eval \"require('c:\\\\path\\\\to\\\\test.js')\"", - NULL - }; - WCHAR* verbatim_output; - WCHAR* non_verbatim_output; - - test_output = calloc(count, sizeof(WCHAR*)); - ASSERT_NOT_NULL(test_output); - for (i = 0; i < count; ++i) { - test_output[i] = calloc(2 * (wcslen(test_str[i]) + 2), sizeof(WCHAR)); - quote_cmd_arg(test_str[i], test_output[i]); - wprintf(L"input : %s\n", test_str[i]); - wprintf(L"output: %s\n", test_output[i]); - total_size += wcslen(test_output[i]) + 1; - } - command_line = calloc(total_size + 1, sizeof(WCHAR)); - ASSERT_NOT_NULL(command_line); - for (i = 0; i < count; ++i) { - wcscat(command_line, test_output[i]); - wcscat(command_line, L" "); - } - command_line[total_size - 1] = L'\0'; - - wprintf(L"command_line: %s\n", command_line); - - cracked = CommandLineToArgvW(command_line, &num_args); - for (i = 0; i < num_args; ++i) { - wprintf(L"%d: %s\t%s\n", i, test_str[i], cracked[i]); - ASSERT(wcscmp(test_str[i], cracked[i]) == 0); - } - - LocalFree(cracked); - for (i = 0; i < count; ++i) { - free(test_output[i]); - } - free(test_output); - - result = make_program_args(verbatim, 1, &verbatim_output); - ASSERT(result == 0); - result = make_program_args(verbatim, 0, &non_verbatim_output); - ASSERT(result == 0); - - wprintf(L" verbatim_output: %s\n", verbatim_output); - wprintf(L"non_verbatim_output: %s\n", non_verbatim_output); - - ASSERT(wcscmp(verbatim_output, - L"cmd.exe /c c:\\path\\to\\node.exe --eval " - L"\"require('c:\\\\path\\\\to\\\\test.js')\"") == 0); - ASSERT(wcscmp(non_verbatim_output, - L"cmd.exe /c \"c:\\path\\to\\node.exe --eval " - L"\\\"require('c:\\\\path\\\\to\\\\test.js')\\\"\"") == 0); - - free(verbatim_output); - free(non_verbatim_output); - - return 0; -} - -int make_program_env(char** env_block, WCHAR** dst_ptr); - -TEST_IMPL(environment_creation) { - size_t i; - char* environment[] = { - "FOO=BAR", - "SYSTEM=ROOT", /* substring of a supplied var name */ - "SYSTEMROOTED=OMG", /* supplied var name is a substring */ - "TEMP=C:\\Temp", - "INVALID", - "BAZ=QUX", - "B_Z=QUX", - "B\xe2\x82\xacZ=QUX", - "B\xf0\x90\x80\x82Z=QUX", - "B\xef\xbd\xa1Z=QUX", - "B\xf0\xa3\x91\x96Z=QUX", - "BAZ", /* repeat, invalid variable */ - NULL - }; - WCHAR* wenvironment[] = { - L"BAZ=QUX", - L"B_Z=QUX", - L"B\x20acZ=QUX", - L"B\xd800\xdc02Z=QUX", - L"B\xd84d\xdc56Z=QUX", - L"B\xff61Z=QUX", - L"FOO=BAR", - L"SYSTEM=ROOT", /* substring of a supplied var name */ - L"SYSTEMROOTED=OMG", /* supplied var name is a substring */ - L"TEMP=C:\\Temp", - }; - WCHAR* from_env[] = { - /* list should be kept in sync with list - * in process.c, minus variables in wenvironment */ - L"HOMEDRIVE", - L"HOMEPATH", - L"LOGONSERVER", - L"PATH", - L"USERDOMAIN", - L"USERNAME", - L"USERPROFILE", - L"SYSTEMDRIVE", - L"SYSTEMROOT", - L"WINDIR", - /* test for behavior in the absence of a - * required-environment variable: */ - L"ZTHIS_ENV_VARIABLE_DOES_NOT_EXIST", - }; - int found_in_loc_env[ARRAY_SIZE(wenvironment)] = {0}; - int found_in_usr_env[ARRAY_SIZE(from_env)] = {0}; - WCHAR *expected[ARRAY_SIZE(from_env)]; - int result; - WCHAR* str; - WCHAR* prev; - WCHAR* env; - - for (i = 0; i < ARRAY_SIZE(from_env); i++) { - /* copy expected additions to environment locally */ - size_t len = GetEnvironmentVariableW(from_env[i], NULL, 0); - if (len == 0) { - found_in_usr_env[i] = 1; - str = malloc(1 * sizeof(WCHAR)); - *str = 0; - expected[i] = str; - } else { - size_t name_len = wcslen(from_env[i]); - str = malloc((name_len+1+len) * sizeof(WCHAR)); - wmemcpy(str, from_env[i], name_len); - expected[i] = str; - str += name_len; - *str++ = L'='; - GetEnvironmentVariableW(from_env[i], str, len); - } - } - - result = make_program_env(environment, &env); - ASSERT(result == 0); - - for (str = env, prev = NULL; *str; prev = str, str += wcslen(str) + 1) { - int found = 0; -#if 0 - _cputws(str); - putchar('\n'); -#endif - for (i = 0; i < ARRAY_SIZE(wenvironment) && !found; i++) { - if (!wcscmp(str, wenvironment[i])) { - ASSERT(!found_in_loc_env[i]); - found_in_loc_env[i] = 1; - found = 1; - } - } - for (i = 0; i < ARRAY_SIZE(expected) && !found; i++) { - if (!wcscmp(str, expected[i])) { - ASSERT(!found_in_usr_env[i]); - found_in_usr_env[i] = 1; - found = 1; - } - } - if (prev) { /* verify sort order */ -#if !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) - ASSERT(CompareStringOrdinal(prev, -1, str, -1, TRUE) == 1); -#endif - } - ASSERT(found); /* verify that we expected this variable */ - } - - /* verify that we found all expected variables */ - for (i = 0; i < ARRAY_SIZE(wenvironment); i++) { - ASSERT(found_in_loc_env[i]); - } - for (i = 0; i < ARRAY_SIZE(expected); i++) { - ASSERT(found_in_usr_env[i]); - } - - return 0; -} -#endif - -/* Regression test for issue #909 */ -TEST_IMPL(spawn_with_an_odd_path) { - int r; - - char newpath[2048]; - char *path = getenv("PATH"); - ASSERT_NOT_NULL(path); - snprintf(newpath, 2048, ";.;%s", path); - SetEnvironmentVariable("PATH", newpath); - - init_process_options("", exit_cb); - options.file = options.args[0] = "program-that-had-better-not-exist"; - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == UV_ENOENT || r == UV_EACCES); - ASSERT(0 == uv_is_active((uv_handle_t*) &process)); - uv_close((uv_handle_t*) &process, NULL); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - -#ifndef _WIN32 -TEST_IMPL(spawn_setuid_setgid) { - int r; - struct passwd* pw; - char uidstr[10]; - char gidstr[10]; - - /* if not root, then this will fail. */ - uv_uid_t uid = getuid(); - if (uid != 0) { - RETURN_SKIP("It should be run as root user"); - } - - init_process_options("spawn_helper_setuid_setgid", exit_cb); - - /* become the "nobody" user. */ - pw = getpwnam("nobody"); - ASSERT_NOT_NULL(pw); - options.uid = pw->pw_uid; - options.gid = pw->pw_gid; - snprintf(uidstr, sizeof(uidstr), "%d", pw->pw_uid); - snprintf(gidstr, sizeof(gidstr), "%d", pw->pw_gid); - options.args[2] = uidstr; - options.args[3] = gidstr; - options.flags = UV_PROCESS_SETUID | UV_PROCESS_SETGID; - - r = uv_spawn(uv_default_loop(), &process, &options); - if (r == UV_EACCES) - RETURN_SKIP("user 'nobody' cannot access the test runner"); - - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - - -#ifndef _WIN32 -TEST_IMPL(spawn_setuid_fails) { - int r; - - /* if root, become nobody. */ - /* On IBMi PASE, there is no nobody user. */ -#ifndef __PASE__ - uv_uid_t uid = getuid(); - if (uid == 0) { - struct passwd* pw; - pw = getpwnam("nobody"); - ASSERT_NOT_NULL(pw); - ASSERT(0 == setgid(pw->pw_gid)); - ASSERT(0 == setuid(pw->pw_uid)); - } -#endif /* !__PASE__ */ - - init_process_options("spawn_helper1", fail_cb); - - options.flags |= UV_PROCESS_SETUID; - /* On IBMi PASE, there is no root user. User may grant - * root-like privileges, including setting uid to 0. - */ -#if defined(__PASE__) - options.uid = -1; -#else - options.uid = 0; -#endif - - /* These flags should be ignored on Unices. */ - options.flags |= UV_PROCESS_WINDOWS_HIDE; - options.flags |= UV_PROCESS_WINDOWS_HIDE_CONSOLE; - options.flags |= UV_PROCESS_WINDOWS_HIDE_GUI; - options.flags |= UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS; - - r = uv_spawn(uv_default_loop(), &process, &options); -#if defined(__CYGWIN__) - ASSERT(r == UV_EINVAL); -#else - ASSERT(r == UV_EPERM); -#endif - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(close_cb_called == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_setgid_fails) { - int r; - - /* if root, become nobody. */ - /* On IBMi PASE, there is no nobody user. */ -#ifndef __PASE__ - uv_uid_t uid = getuid(); - if (uid == 0) { - struct passwd* pw; - pw = getpwnam("nobody"); - ASSERT_NOT_NULL(pw); - ASSERT(0 == setgid(pw->pw_gid)); - ASSERT(0 == setuid(pw->pw_uid)); - } -#endif /* !__PASE__ */ - - init_process_options("spawn_helper1", fail_cb); - - options.flags |= UV_PROCESS_SETGID; - /* On IBMi PASE, there is no root user. User may grant - * root-like privileges, including setting gid to 0. - */ -#if defined(__MVS__) || defined(__PASE__) - options.gid = -1; -#else - options.gid = 0; -#endif - - r = uv_spawn(uv_default_loop(), &process, &options); -#if defined(__CYGWIN__) || defined(__MVS__) - ASSERT(r == UV_EINVAL); -#else - ASSERT(r == UV_EPERM); -#endif - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(close_cb_called == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - - -#ifdef _WIN32 - -static void exit_cb_unexpected(uv_process_t* process, - int64_t exit_status, - int term_signal) { - ASSERT(0 && "should not have been called"); -} - - -TEST_IMPL(spawn_setuid_fails) { - int r; - - init_process_options("spawn_helper1", exit_cb_unexpected); - - options.flags |= UV_PROCESS_SETUID; - options.uid = (uv_uid_t) -42424242; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == UV_ENOTSUP); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(close_cb_called == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_setgid_fails) { - int r; - - init_process_options("spawn_helper1", exit_cb_unexpected); - - options.flags |= UV_PROCESS_SETGID; - options.gid = (uv_gid_t) -42424242; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == UV_ENOTSUP); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(close_cb_called == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - - -TEST_IMPL(spawn_auto_unref) { - init_process_options("spawn_helper1", NULL); - ASSERT(0 == uv_spawn(uv_default_loop(), &process, &options)); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - ASSERT(0 == uv_is_closing((uv_handle_t*) &process)); - uv_close((uv_handle_t*) &process, NULL); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - ASSERT(1 == uv_is_closing((uv_handle_t*) &process)); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_fs_open) { - int r; - uv_os_fd_t fd; - uv_os_fd_t dup_fd; - uv_fs_t fs_req; - uv_pipe_t in; - uv_write_t write_req; - uv_write_t write_req2; - uv_buf_t buf; - uv_stdio_container_t stdio[1]; -#ifdef _WIN32 - const char dev_null[] = "NUL"; - HMODULE kernelbase_module; - sCompareObjectHandles pCompareObjectHandles; /* function introduced in Windows 10 */ -#else - const char dev_null[] = "/dev/null"; -#endif - - r = uv_fs_open(NULL, &fs_req, dev_null, O_RDWR, 0, NULL); - ASSERT(r != -1); - fd = uv_get_osfhandle((uv_file) fs_req.result); - uv_fs_req_cleanup(&fs_req); - - init_process_options("spawn_helper8", exit_cb); - - ASSERT(0 == uv_pipe_init(uv_default_loop(), &in, 0)); - - options.stdio = stdio; - options.stdio[0].flags = UV_CREATE_PIPE | UV_READABLE_PIPE; - options.stdio[0].data.stream = (uv_stream_t*) ∈ - options.stdio_count = 1; - - /* make an inheritable copy */ -#ifdef _WIN32 - ASSERT(0 != DuplicateHandle(GetCurrentProcess(), fd, GetCurrentProcess(), &dup_fd, - 0, /* inherit */ TRUE, DUPLICATE_SAME_ACCESS)); - kernelbase_module = GetModuleHandleA("kernelbase.dll"); - pCompareObjectHandles = (sCompareObjectHandles) - GetProcAddress(kernelbase_module, "CompareObjectHandles"); - ASSERT(pCompareObjectHandles == NULL || pCompareObjectHandles(fd, dup_fd)); -#else - dup_fd = dup(fd); -#endif - - ASSERT(0 == uv_spawn(uv_default_loop(), &process, &options)); - - buf = uv_buf_init((char*) &fd, sizeof(fd)); - ASSERT(0 == uv_write(&write_req, (uv_stream_t*) &in, &buf, 1, write_null_cb)); - - buf = uv_buf_init((char*) &dup_fd, sizeof(fd)); - ASSERT(0 == uv_write(&write_req2, (uv_stream_t*) &in, &buf, 1, write_cb)); - - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - ASSERT(0 == uv_fs_close(NULL, &fs_req, r, NULL)); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 2); /* One for `in`, one for process */ - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(closed_fd_events) { - uv_stdio_container_t stdio[3]; - uv_pipe_t pipe_handle; - uv_fs_t req; - uv_buf_t bufs[1]; - uv_file fd[2]; - bufs[0] = uv_buf_init("", 1); - - /* create a pipe and share it with a child process */ - ASSERT(0 == uv_pipe(fd, 0, 0)); - ASSERT(fd[0] > 2); - ASSERT(fd[1] > 2); - - /* spawn_helper4 blocks indefinitely. */ - init_process_options("spawn_helper4", exit_cb); - options.stdio_count = 3; - options.stdio = stdio; - options.stdio[0].flags = UV_INHERIT_FD; - options.stdio[0].data.fd = fd[0]; - options.stdio[1].flags = UV_IGNORE; - options.stdio[2].flags = UV_IGNORE; - - ASSERT(0 == uv_spawn(uv_default_loop(), &process, &options)); - uv_unref((uv_handle_t*) &process); - - /* read from the pipe with uv */ - ASSERT(0 == uv_pipe_init(uv_default_loop(), &pipe_handle, 0)); - ASSERT(0 == uv_pipe_open(&pipe_handle, fd[0])); - /* uv_pipe_open() takes ownership of the file descriptor. */ - fd[0] = -1; - - ASSERT(0 == uv_read_start((uv_stream_t*) &pipe_handle, on_alloc, on_read_once)); - - ASSERT(1 == uv_fs_write(NULL, &req, fd[1], bufs, 1, -1, NULL)); - ASSERT(req.result == 1); - uv_fs_req_cleanup(&req); - -#ifdef _WIN32 - ASSERT(1 == uv_run(uv_default_loop(), UV_RUN_ONCE)); -#endif - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_ONCE)); - - /* should have received just one byte */ - ASSERT(output_used == 1); - - /* close the pipe and see if we still get events */ - uv_close((uv_handle_t*) &pipe_handle, close_cb); - - ASSERT(1 == uv_fs_write(NULL, &req, fd[1], bufs, 1, -1, NULL)); - ASSERT(req.result == 1); - uv_fs_req_cleanup(&req); - - ASSERT(0 == uv_timer_init(uv_default_loop(), &timer)); - ASSERT(0 == uv_timer_start(&timer, timer_counter_cb, 10, 0)); - - /* see if any spurious events interrupt the timer */ - if (1 == uv_run(uv_default_loop(), UV_RUN_ONCE)) - /* have to run again to really trigger the timer */ - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_ONCE)); - - ASSERT(timer_counter == 1); - - /* cleanup */ - ASSERT(0 == uv_process_kill(&process, SIGTERM)); -#ifdef _WIN32 - ASSERT(0 == _close(fd[1])); -#else - ASSERT(0 == close(fd[1])); -#endif - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(spawn_reads_child_path) { - int r; - int len; - char file[64]; - char path[1024]; - char* env[3]; - - /* Need to carry over the dynamic linker path when the test runner is - * linked against libuv.so, see https://github.com/libuv/libuv/issues/85. - */ -#if defined(__APPLE__) - static const char dyld_path_var[] = "DYLD_LIBRARY_PATH"; -#elif defined(__MVS__) || defined(__PASE__) - static const char dyld_path_var[] = "LIBPATH"; -#else - static const char dyld_path_var[] = "LD_LIBRARY_PATH"; -#endif - - /* Set up the process, but make sure that the file to run is relative and - * requires a lookup into PATH. */ - init_process_options("spawn_helper1", exit_cb); - - /* Set up the PATH env variable */ - for (len = strlen(exepath); - exepath[len - 1] != '/' && exepath[len - 1] != '\\'; - len--); - strcpy(file, exepath + len); - exepath[len] = 0; - strcpy(path, "PATH="); - strcpy(path + 5, exepath); -#if defined(__CYGWIN__) || defined(__MSYS__) - /* Carry over the dynamic linker path in case the test runner - is linked against cyguv-1.dll or msys-uv-1.dll, see above. */ - { - char* syspath = getenv("PATH"); - if (syspath != NULL) { - strcat(path, ":"); - strcat(path, syspath); - } - } -#endif - - env[0] = path; - env[1] = getenv(dyld_path_var); - env[2] = NULL; - - if (env[1] != NULL) { - static char buf[1024 + sizeof(dyld_path_var)]; - snprintf(buf, sizeof(buf), "%s=%s", dyld_path_var, env[1]); - env[1] = buf; - } - - options.file = file; - options.args[0] = file; - options.env = env; - - r = uv_spawn(uv_default_loop(), &process, &options); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(spawn_inherit_streams) { - uv_process_t child_req; - uv_stdio_container_t child_stdio[2]; - int fds_stdin[2]; - int fds_stdout[2]; - uv_pipe_t pipe_stdin_child; - uv_pipe_t pipe_stdout_child; - uv_pipe_t pipe_stdin_parent; - uv_pipe_t pipe_stdout_parent; - unsigned char ubuf[OUTPUT_SIZE - 1]; - uv_buf_t buf; - unsigned int i; - int r; - int bidir; - uv_write_t write_req; - uv_loop_t* loop; - - init_process_options("spawn_helper9", exit_cb); - - loop = uv_default_loop(); - ASSERT(uv_pipe_init(loop, &pipe_stdin_child, 0) == 0); - ASSERT(uv_pipe_init(loop, &pipe_stdout_child, 0) == 0); - ASSERT(uv_pipe_init(loop, &pipe_stdin_parent, 0) == 0); - ASSERT(uv_pipe_init(loop, &pipe_stdout_parent, 0) == 0); - - ASSERT(uv_pipe(fds_stdin, 0, 0) == 0); - ASSERT(uv_pipe(fds_stdout, 0, 0) == 0); - - ASSERT(uv_pipe_open(&pipe_stdin_child, fds_stdin[0]) == 0); - ASSERT(uv_pipe_open(&pipe_stdout_child, fds_stdout[1]) == 0); - ASSERT(uv_pipe_open(&pipe_stdin_parent, fds_stdin[1]) == 0); - ASSERT(uv_pipe_open(&pipe_stdout_parent, fds_stdout[0]) == 0); - ASSERT(uv_is_readable((uv_stream_t*) &pipe_stdin_child)); - ASSERT(uv_is_writable((uv_stream_t*) &pipe_stdout_child)); - ASSERT(uv_is_writable((uv_stream_t*) &pipe_stdin_parent)); - ASSERT(uv_is_readable((uv_stream_t*) &pipe_stdout_parent)); - /* Some systems (SVR4) open a bidirectional pipe, most don't. */ - bidir = uv_is_writable((uv_stream_t*) &pipe_stdin_child); - ASSERT(uv_is_readable((uv_stream_t*) &pipe_stdout_child) == bidir); - ASSERT(uv_is_readable((uv_stream_t*) &pipe_stdin_parent) == bidir); - ASSERT(uv_is_writable((uv_stream_t*) &pipe_stdout_parent) == bidir); - - child_stdio[0].flags = UV_INHERIT_STREAM; - child_stdio[0].data.stream = (uv_stream_t *) &pipe_stdin_child; - - child_stdio[1].flags = UV_INHERIT_STREAM; - child_stdio[1].data.stream = (uv_stream_t *) &pipe_stdout_child; - - options.stdio = child_stdio; - options.stdio_count = 2; - - ASSERT(uv_spawn(loop, &child_req, &options) == 0); - - uv_close((uv_handle_t*) &pipe_stdin_child, NULL); - uv_close((uv_handle_t*) &pipe_stdout_child, NULL); - - buf = uv_buf_init((char*) ubuf, sizeof ubuf); - for (i = 0; i < sizeof ubuf; ++i) - ubuf[i] = i & 255u; - memset(output, 0, sizeof ubuf); - - r = uv_write(&write_req, - (uv_stream_t*) &pipe_stdin_parent, - &buf, - 1, - write_cb); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*) &pipe_stdout_parent, on_alloc, on_read); - ASSERT(r == 0); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 3); - - r = memcmp(ubuf, output, sizeof ubuf); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(spawn_quoted_path) { -#ifndef _WIN32 - RETURN_SKIP("Test for Windows"); -#else - char* quoted_path_env[2]; - args[0] = "not_existing"; - args[1] = NULL; - options.file = args[0]; - options.args = args; - options.exit_cb = exit_cb; - options.flags = 0; - /* We test if search_path works correctly with semicolons in quoted path. We - * will use an invalid drive, so we are sure no executable is spawned. */ - quoted_path_env[0] = "PATH=\"xyz:\\test;\";xyz:\\other"; - quoted_path_env[1] = NULL; - options.env = quoted_path_env; - - /* We test if libuv will not segfault. */ - uv_spawn(uv_default_loop(), &process, &options); - - MAKE_VALGRIND_HAPPY(); - return 0; -#endif -} - -/* Helper for child process of spawn_inherit_streams */ -#ifndef _WIN32 -void spawn_stdin_stdout(void) { - char buf[1024]; - char* pbuf; - for (;;) { - ssize_t r, w, c; - do { - r = read(0, buf, sizeof buf); - } while (r == -1 && errno == EINTR); - if (r == 0) { - return; - } - ASSERT(r > 0); - c = r; - pbuf = buf; - while (c) { - do { - w = write(1, pbuf, (size_t)c); - } while (w == -1 && errno == EINTR); - ASSERT(w >= 0); - pbuf = pbuf + w; - c = c - w; - } - } -} -#else -void spawn_stdin_stdout(void) { - char buf[1024]; - char* pbuf; - HANDLE h_stdin = GetStdHandle(STD_INPUT_HANDLE); - HANDLE h_stdout = GetStdHandle(STD_OUTPUT_HANDLE); - ASSERT(h_stdin != INVALID_HANDLE_VALUE); - ASSERT(h_stdout != INVALID_HANDLE_VALUE); - for (;;) { - DWORD n_read; - DWORD n_written; - DWORD to_write; - if (!ReadFile(h_stdin, buf, sizeof buf, &n_read, NULL)) { - ASSERT(GetLastError() == ERROR_BROKEN_PIPE); - return; - } - to_write = n_read; - pbuf = buf; - while (to_write) { - ASSERT(WriteFile(h_stdout, pbuf, to_write, &n_written, NULL)); - to_write -= n_written; - pbuf += n_written; - } - } -} -#endif /* !_WIN32 */ diff --git a/libuv/test/test-stdio-over-pipes.c b/libuv/test/test-stdio-over-pipes.c deleted file mode 100644 index 1aed471..0000000 --- a/libuv/test/test-stdio-over-pipes.c +++ /dev/null @@ -1,299 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - - -static char exepath[1024]; -static size_t exepath_size = 1024; -static char* args[3]; -static uv_process_options_t options; -static int close_cb_called; -static int exit_cb_called; -static int on_read_cb_called; -static int after_write_cb_called; -static uv_pipe_t in; -static uv_pipe_t out; -static uv_loop_t* loop; -#define OUTPUT_SIZE 1024 -static char output[OUTPUT_SIZE]; -static int output_used; - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - - -static void exit_cb(uv_process_t* process, - int64_t exit_status, - int term_signal) { - printf("exit_cb\n"); - exit_cb_called++; - ASSERT(exit_status == 0); - ASSERT(term_signal == 0); - uv_close((uv_handle_t*)process, close_cb); - uv_close((uv_handle_t*)&in, close_cb); - uv_close((uv_handle_t*)&out, close_cb); -} - - -static void init_process_options(char* test, uv_exit_cb exit_cb) { - int r = uv_exepath(exepath, &exepath_size); - ASSERT(r == 0); - exepath[exepath_size] = '\0'; - args[0] = exepath; - args[1] = test; - args[2] = NULL; - options.file = exepath; - options.args = args; - options.exit_cb = exit_cb; -} - - -static void on_alloc(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - buf->base = output + output_used; - buf->len = OUTPUT_SIZE - output_used; -} - - -static void after_write(uv_write_t* req, int status) { - if (status) { - fprintf(stderr, "uv_write error: %s\n", uv_strerror(status)); - ASSERT(0); - } - - /* Free the read/write buffer and the request */ - free(req); - - after_write_cb_called++; -} - - -static void on_read(uv_stream_t* pipe, ssize_t nread, const uv_buf_t* rdbuf) { - uv_write_t* req; - uv_buf_t wrbuf; - int r; - - ASSERT(nread > 0 || nread == UV_EOF); - - if (nread > 0) { - output_used += nread; - if (output_used % 12 == 0) { - ASSERT(memcmp("hello world\n", output, 12) == 0); - wrbuf = uv_buf_init(output, 12); - req = malloc(sizeof(*req)); - r = uv_write(req, (uv_stream_t*) &in, &wrbuf, 1, after_write); - ASSERT(r == 0); - } - } - - on_read_cb_called++; -} - - -static void test_stdio_over_pipes(int overlapped) { - int r; - uv_process_t process; - uv_stdio_container_t stdio[3]; - - loop = uv_default_loop(); - - init_process_options("stdio_over_pipes_helper", exit_cb); - - uv_pipe_init(loop, &out, 0); - uv_pipe_init(loop, &in, 0); - - options.stdio = stdio; - options.stdio[0].flags = UV_CREATE_PIPE | UV_READABLE_PIPE | - (overlapped ? UV_OVERLAPPED_PIPE : 0); - options.stdio[0].data.stream = (uv_stream_t*) ∈ - options.stdio[1].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE | - (overlapped ? UV_OVERLAPPED_PIPE : 0); - options.stdio[1].data.stream = (uv_stream_t*) &out; - options.stdio[2].flags = UV_INHERIT_FD; - options.stdio[2].data.fd = 2; - options.stdio_count = 3; - - r = uv_spawn(loop, &process, &options); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(on_read_cb_called > 1); - ASSERT(after_write_cb_called == 2); - ASSERT(exit_cb_called == 1); - ASSERT(close_cb_called == 3); - ASSERT(memcmp("hello world\nhello world\n", output, 24) == 0); - ASSERT(output_used == 24); - - MAKE_VALGRIND_HAPPY(); -} - -TEST_IMPL(stdio_over_pipes) { - test_stdio_over_pipes(0); - return 0; -} - -TEST_IMPL(stdio_emulate_iocp) { - test_stdio_over_pipes(1); - return 0; -} - - -/* Everything here runs in a child process. */ - -static int on_pipe_read_called; -static int after_write_called; -static uv_pipe_t stdin_pipe1; -static uv_pipe_t stdout_pipe1; -static uv_pipe_t stdin_pipe2; -static uv_pipe_t stdout_pipe2; - -static void on_pipe_read(uv_stream_t* pipe, ssize_t nread, const uv_buf_t* buf) { - ASSERT(nread > 0); - ASSERT(memcmp("hello world\n", buf->base, nread) == 0); - on_pipe_read_called++; - - free(buf->base); - - uv_read_stop(pipe); -} - - -static void after_pipe_write(uv_write_t* req, int status) { - ASSERT(status == 0); - after_write_called++; -} - - -static void on_read_alloc(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - buf->base = malloc(suggested_size); - buf->len = suggested_size; -} - - -int stdio_over_pipes_helper(void) { - /* Write several buffers to test that the write order is preserved. */ - char* buffers[] = { - "he", - "ll", - "o ", - "wo", - "rl", - "d", - "\n" - }; - - uv_write_t write_req[ARRAY_SIZE(buffers)]; - uv_buf_t buf[ARRAY_SIZE(buffers)]; - unsigned int i; - int j; - int r; - uv_loop_t* loop = uv_default_loop(); - - ASSERT(UV_NAMED_PIPE == uv_guess_handle(0)); - ASSERT(UV_NAMED_PIPE == uv_guess_handle(1)); - - r = uv_pipe_init(loop, &stdin_pipe1, 0); - ASSERT(r == 0); - r = uv_pipe_init(loop, &stdout_pipe1, 0); - ASSERT(r == 0); - r = uv_pipe_init(loop, &stdin_pipe2, 0); - ASSERT(r == 0); - r = uv_pipe_init(loop, &stdout_pipe2, 0); - ASSERT(r == 0); - - uv_pipe_open(&stdin_pipe1, 0); - uv_pipe_open(&stdout_pipe1, 1); - uv_pipe_open(&stdin_pipe2, 0); - uv_pipe_open(&stdout_pipe2, 1); - - for (j = 0; j < 2; j++) { - /* Unref both stdio handles to make sure that all writes complete. */ - uv_unref((uv_handle_t*) &stdin_pipe1); - uv_unref((uv_handle_t*) &stdout_pipe1); - uv_unref((uv_handle_t*) &stdin_pipe2); - uv_unref((uv_handle_t*) &stdout_pipe2); - - for (i = 0; i < ARRAY_SIZE(buffers); i++) { - buf[i] = uv_buf_init((char*) buffers[i], strlen(buffers[i])); - } - - for (i = 0; i < ARRAY_SIZE(buffers); i++) { - r = uv_write(&write_req[i], - (uv_stream_t*) (j == 0 ? &stdout_pipe1 : &stdout_pipe2), - &buf[i], - 1, - after_pipe_write); - ASSERT(r == 0); - } - - notify_parent_process(); - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(after_write_called == 7 * (j + 1)); - ASSERT(on_pipe_read_called == j); - ASSERT(close_cb_called == 0); - - uv_ref((uv_handle_t*) &stdout_pipe1); - uv_ref((uv_handle_t*) &stdin_pipe1); - uv_ref((uv_handle_t*) &stdout_pipe2); - uv_ref((uv_handle_t*) &stdin_pipe2); - - r = uv_read_start((uv_stream_t*) (j == 0 ? &stdin_pipe1 : &stdin_pipe2), - on_read_alloc, - on_pipe_read); - ASSERT(r == 0); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(after_write_called == 7 * (j + 1)); - ASSERT(on_pipe_read_called == j + 1); - ASSERT(close_cb_called == 0); - } - - uv_close((uv_handle_t*)&stdin_pipe1, close_cb); - uv_close((uv_handle_t*)&stdout_pipe1, close_cb); - uv_close((uv_handle_t*)&stdin_pipe2, close_cb); - uv_close((uv_handle_t*)&stdout_pipe2, close_cb); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(after_write_called == 14); - ASSERT(on_pipe_read_called == 2); - ASSERT(close_cb_called == 4); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-strscpy.c b/libuv/test/test-strscpy.c deleted file mode 100644 index 4e7db6f..0000000 --- a/libuv/test/test-strscpy.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to -* deal in the Software without restriction, including without limitation the -* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -* sell copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -* IN THE SOFTWARE. -*/ - -#include "uv.h" -#include "task.h" -#include - -#include "../src/strscpy.h" -#include "../src/strscpy.c" - -TEST_IMPL(strscpy) { - char d[4]; - - ASSERT(0 == uv__strscpy(d, "", 0)); - ASSERT(0 == uv__strscpy(d, "x", 0)); - - memset(d, 0, sizeof(d)); - ASSERT(1 == uv__strscpy(d, "x", sizeof(d))); - ASSERT(0 == memcmp(d, "x\0\0", sizeof(d))); - - memset(d, 0, sizeof(d)); - ASSERT(2 == uv__strscpy(d, "xy", sizeof(d))); - ASSERT(0 == memcmp(d, "xy\0", sizeof(d))); - - ASSERT(3 == uv__strscpy(d, "xyz", sizeof(d))); - ASSERT(0 == memcmp(d, "xyz", sizeof(d))); - - ASSERT(UV_E2BIG == uv__strscpy(d, "xyzz", sizeof(d))); - ASSERT(0 == memcmp(d, "xyz", sizeof(d))); - - ASSERT(UV_E2BIG == uv__strscpy(d, "xyzzy", sizeof(d))); - ASSERT(0 == memcmp(d, "xyz", sizeof(d))); - - return 0; -} diff --git a/libuv/test/test-tcp-alloc-cb-fail.c b/libuv/test/test-tcp-alloc-cb-fail.c deleted file mode 100644 index b6f4ca3..0000000 --- a/libuv/test/test-tcp-alloc-cb-fail.c +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright libuv project and contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include - -#include "uv.h" -#include "task.h" - -static uv_tcp_t server; -static uv_tcp_t client; -static uv_tcp_t incoming; -static int connect_cb_called; -static int close_cb_called; -static int connection_cb_called; -static uv_write_t write_req; - -static char hello[] = "HELLO!"; - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - -static void write_cb(uv_write_t* req, int status) { - ASSERT(status == 0); -} - -static void conn_alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - /* Do nothing, read_cb should be called with UV_ENOBUFS. */ -} - -static void conn_read_cb(uv_stream_t* stream, - ssize_t nread, - const uv_buf_t* buf) { - ASSERT(nread == UV_ENOBUFS); - ASSERT_NULL(buf->base); - ASSERT(buf->len == 0); - - uv_close((uv_handle_t*) &incoming, close_cb); - uv_close((uv_handle_t*) &client, close_cb); - uv_close((uv_handle_t*) &server, close_cb); -} - -static void connect_cb(uv_connect_t* req, int status) { - int r; - uv_buf_t buf; - - ASSERT(status == 0); - connect_cb_called++; - - buf = uv_buf_init(hello, sizeof(hello)); - r = uv_write(&write_req, req->handle, &buf, 1, write_cb); - ASSERT(r == 0); -} - - -static void connection_cb(uv_stream_t* tcp, int status) { - ASSERT(status == 0); - - ASSERT(0 == uv_tcp_init(tcp->loop, &incoming)); - ASSERT(0 == uv_accept(tcp, (uv_stream_t*) &incoming)); - ASSERT(0 == uv_read_start((uv_stream_t*) &incoming, - conn_alloc_cb, - conn_read_cb)); - - connection_cb_called++; -} - - -static void start_server(void) { - struct sockaddr_in addr; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - ASSERT(0 == uv_tcp_init(uv_default_loop(), &server)); - ASSERT(0 == uv_tcp_bind(&server, (struct sockaddr*) &addr, 0)); - ASSERT(0 == uv_listen((uv_stream_t*) &server, 128, connection_cb)); -} - - -TEST_IMPL(tcp_alloc_cb_fail) { - uv_connect_t connect_req; - struct sockaddr_in addr; - - start_server(); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - ASSERT(0 == uv_tcp_init(uv_default_loop(), &client)); - ASSERT(0 == uv_tcp_connect(&connect_req, - &client, - (struct sockaddr*) &addr, - connect_cb)); - - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - ASSERT(connect_cb_called == 1); - ASSERT(connection_cb_called == 1); - ASSERT(close_cb_called == 3); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-bind-error.c b/libuv/test/test-tcp-bind-error.c deleted file mode 100644 index fdd1fe0..0000000 --- a/libuv/test/test-tcp-bind-error.c +++ /dev/null @@ -1,299 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - - -static int connect_cb_called = 0; -static int close_cb_called = 0; - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -static void connect_cb(uv_connect_t* req, int status) { - ASSERT(status == UV_EADDRINUSE); - uv_close((uv_handle_t*) req->handle, close_cb); - connect_cb_called++; -} - - -TEST_IMPL(tcp_bind_error_addrinuse_connect) { - struct sockaddr_in addr; - int addrlen; - uv_connect_t req; - uv_tcp_t conn; - - /* 127.0.0.1: is already taken by tcp4_echo_server running in - * another process. uv_tcp_bind() and uv_tcp_connect() should still succeed - * (greatest common denominator across platforms) but the connect callback - * should receive an UV_EADDRINUSE error. - */ - ASSERT(0 == uv_tcp_init(uv_default_loop(), &conn)); - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - ASSERT(0 == uv_tcp_bind(&conn, (const struct sockaddr*) &addr, 0)); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT + 1, &addr)); - ASSERT(0 == uv_tcp_connect(&req, - &conn, - (const struct sockaddr*) &addr, - connect_cb)); - - addrlen = sizeof(addr); - ASSERT(UV_EADDRINUSE == uv_tcp_getsockname(&conn, - (struct sockaddr*) &addr, - &addrlen)); - - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - ASSERT(connect_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_bind_error_addrinuse_listen) { - struct sockaddr_in addr; - uv_tcp_t server1, server2; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - r = uv_tcp_init(uv_default_loop(), &server1); - ASSERT(r == 0); - r = uv_tcp_bind(&server1, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_tcp_init(uv_default_loop(), &server2); - ASSERT(r == 0); - r = uv_tcp_bind(&server2, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*)&server1, 128, NULL); - ASSERT(r == 0); - r = uv_listen((uv_stream_t*)&server2, 128, NULL); - ASSERT(r == UV_EADDRINUSE); - - uv_close((uv_handle_t*)&server1, close_cb); - uv_close((uv_handle_t*)&server2, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_bind_error_addrnotavail_1) { - struct sockaddr_in addr; - uv_tcp_t server; - int r; - - ASSERT(0 == uv_ip4_addr("127.255.255.255", TEST_PORT, &addr)); - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - /* It seems that Linux is broken here - bind succeeds. */ - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0 || r == UV_EADDRNOTAVAIL); - - uv_close((uv_handle_t*)&server, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_bind_error_addrnotavail_2) { - struct sockaddr_in addr; - uv_tcp_t server; - int r; - - ASSERT(0 == uv_ip4_addr("4.4.4.4", TEST_PORT, &addr)); - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == UV_EADDRNOTAVAIL); - - uv_close((uv_handle_t*)&server, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_bind_error_fault) { - char garbage[] = - "blah blah blah blah blah blah blah blah blah blah blah blah"; - struct sockaddr_in* garbage_addr; - uv_tcp_t server; - int r; - - garbage_addr = (struct sockaddr_in*) &garbage; - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - r = uv_tcp_bind(&server, (const struct sockaddr*) garbage_addr, 0); - ASSERT(r == UV_EINVAL); - - uv_close((uv_handle_t*)&server, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -/* Notes: On Linux uv_bind(server, NULL) will segfault the program. */ - -TEST_IMPL(tcp_bind_error_inval) { - struct sockaddr_in addr1; - struct sockaddr_in addr2; - uv_tcp_t server; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr1)); - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT_2, &addr2)); - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr1, 0); - ASSERT(r == 0); - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr2, 0); - ASSERT(r == UV_EINVAL); - - uv_close((uv_handle_t*)&server, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_bind_localhost_ok) { - struct sockaddr_in addr; - uv_tcp_t server; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_bind_invalid_flags) { - struct sockaddr_in addr; - uv_tcp_t server; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr, UV_TCP_IPV6ONLY); - ASSERT(r == UV_EINVAL); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_listen_without_bind) { - int r; - uv_tcp_t server; - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - r = uv_listen((uv_stream_t*)&server, 128, NULL); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_bind_writable_flags) { - struct sockaddr_in addr; - uv_tcp_t server; - uv_buf_t buf; - uv_write_t write_req; - uv_shutdown_t shutdown_req; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - r = uv_listen((uv_stream_t*)&server, 128, NULL); - ASSERT(r == 0); - - ASSERT(0 == uv_is_writable((uv_stream_t*) &server)); - ASSERT(0 == uv_is_readable((uv_stream_t*) &server)); - - buf = uv_buf_init("PING", 4); - r = uv_write(&write_req, (uv_stream_t*) &server, &buf, 1, NULL); - ASSERT(r == UV_EPIPE); - r = uv_shutdown(&shutdown_req, (uv_stream_t*) &server, NULL); - ASSERT(r == UV_ENOTCONN); - r = uv_read_start((uv_stream_t*) &server, - (uv_alloc_cb) abort, - (uv_read_cb) abort); - ASSERT(r == UV_ENOTCONN); - - uv_close((uv_handle_t*)&server, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-bind6-error.c b/libuv/test/test-tcp-bind6-error.c deleted file mode 100644 index 86181b7..0000000 --- a/libuv/test/test-tcp-bind6-error.c +++ /dev/null @@ -1,176 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - - -static int close_cb_called = 0; - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -TEST_IMPL(tcp_bind6_error_addrinuse) { - struct sockaddr_in6 addr; - uv_tcp_t server1, server2; - int r; - - if (!can_ipv6()) - RETURN_SKIP("IPv6 not supported"); - - ASSERT(0 == uv_ip6_addr("::", TEST_PORT, &addr)); - - r = uv_tcp_init(uv_default_loop(), &server1); - ASSERT(r == 0); - r = uv_tcp_bind(&server1, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_tcp_init(uv_default_loop(), &server2); - ASSERT(r == 0); - r = uv_tcp_bind(&server2, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*)&server1, 128, NULL); - ASSERT(r == 0); - r = uv_listen((uv_stream_t*)&server2, 128, NULL); - ASSERT(r == UV_EADDRINUSE); - - uv_close((uv_handle_t*)&server1, close_cb); - uv_close((uv_handle_t*)&server2, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_bind6_error_addrnotavail) { - struct sockaddr_in6 addr; - uv_tcp_t server; - int r; - - if (!can_ipv6()) - RETURN_SKIP("IPv6 not supported"); - - ASSERT(0 == uv_ip6_addr("4:4:4:4:4:4:4:4", TEST_PORT, &addr)); - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == UV_EADDRNOTAVAIL); - - uv_close((uv_handle_t*)&server, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_bind6_error_fault) { - char garbage[] = - "blah blah blah blah blah blah blah blah blah blah blah blah"; - struct sockaddr_in6* garbage_addr; - uv_tcp_t server; - int r; - - if (!can_ipv6()) - RETURN_SKIP("IPv6 not supported"); - - garbage_addr = (struct sockaddr_in6*) &garbage; - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - r = uv_tcp_bind(&server, (const struct sockaddr*) garbage_addr, 0); - ASSERT(r == UV_EINVAL); - - uv_close((uv_handle_t*)&server, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -/* Notes: On Linux uv_bind6(server, NULL) will segfault the program. */ - -TEST_IMPL(tcp_bind6_error_inval) { - struct sockaddr_in6 addr1; - struct sockaddr_in6 addr2; - uv_tcp_t server; - int r; - - if (!can_ipv6()) - RETURN_SKIP("IPv6 not supported"); - - ASSERT(0 == uv_ip6_addr("::", TEST_PORT, &addr1)); - ASSERT(0 == uv_ip6_addr("::", TEST_PORT_2, &addr2)); - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr1, 0); - ASSERT(r == 0); - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr2, 0); - ASSERT(r == UV_EINVAL); - - uv_close((uv_handle_t*)&server, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_bind6_localhost_ok) { - struct sockaddr_in6 addr; - uv_tcp_t server; - int r; - - if (!can_ipv6()) - RETURN_SKIP("IPv6 not supported"); - - ASSERT(0 == uv_ip6_addr("::1", TEST_PORT, &addr)); - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - r = uv_tcp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-close-accept.c b/libuv/test/test-tcp-close-accept.c deleted file mode 100644 index 624262b..0000000 --- a/libuv/test/test-tcp-close-accept.c +++ /dev/null @@ -1,198 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* this test is Unix only */ -#ifndef _WIN32 - -#include "uv.h" -#include "task.h" - -#include -#include - -static struct sockaddr_in addr; -static uv_tcp_t tcp_server; -static uv_tcp_t tcp_outgoing[2]; -static uv_tcp_t tcp_incoming[ARRAY_SIZE(tcp_outgoing)]; -static uv_connect_t connect_reqs[ARRAY_SIZE(tcp_outgoing)]; -static uv_tcp_t tcp_check; -static uv_connect_t tcp_check_req; -static uv_write_t write_reqs[ARRAY_SIZE(tcp_outgoing)]; -static unsigned int got_connections; -static unsigned int close_cb_called; -static unsigned int write_cb_called; -static unsigned int read_cb_called; -static unsigned int pending_incoming; - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - -static void write_cb(uv_write_t* req, int status) { - ASSERT(status == 0); - write_cb_called++; -} - -static void connect_cb(uv_connect_t* req, int status) { - unsigned int i; - uv_buf_t buf; - uv_stream_t* outgoing; - - if (req == &tcp_check_req) { - ASSERT(status != 0); - - /* - * Time to finish the test: close both the check and pending incoming - * connections - */ - uv_close((uv_handle_t*) &tcp_incoming[pending_incoming], close_cb); - uv_close((uv_handle_t*) &tcp_check, close_cb); - return; - } - - ASSERT(status == 0); - ASSERT(connect_reqs <= req); - ASSERT(req <= connect_reqs + ARRAY_SIZE(connect_reqs)); - i = req - connect_reqs; - - buf = uv_buf_init("x", 1); - outgoing = (uv_stream_t*) &tcp_outgoing[i]; - ASSERT(0 == uv_write(&write_reqs[i], outgoing, &buf, 1, write_cb)); -} - -static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - static char slab[1]; - buf->base = slab; - buf->len = sizeof(slab); -} - -static void read_cb(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) { - uv_loop_t* loop; - unsigned int i; - - pending_incoming = (uv_tcp_t*) stream - &tcp_incoming[0]; - ASSERT(pending_incoming < got_connections); - ASSERT(0 == uv_read_stop(stream)); - ASSERT(1 == nread); - - loop = stream->loop; - read_cb_called++; - - /* Close all active incomings, except current one */ - for (i = 0; i < got_connections; i++) { - if (i != pending_incoming) - uv_close((uv_handle_t*) &tcp_incoming[i], close_cb); - } - - /* Close server, so no one will connect to it */ - uv_close((uv_handle_t*) &tcp_server, close_cb); - - /* Create new fd that should be one of the closed incomings */ - ASSERT(0 == uv_tcp_init(loop, &tcp_check)); - ASSERT(0 == uv_tcp_connect(&tcp_check_req, - &tcp_check, - (const struct sockaddr*) &addr, - connect_cb)); - ASSERT(0 == uv_read_start((uv_stream_t*) &tcp_check, alloc_cb, read_cb)); -} - -static void connection_cb(uv_stream_t* server, int status) { - unsigned int i; - uv_tcp_t* incoming; - - ASSERT(server == (uv_stream_t*) &tcp_server); - - /* Ignore tcp_check connection */ - if (got_connections == ARRAY_SIZE(tcp_incoming)) - return; - - /* Accept everyone */ - incoming = &tcp_incoming[got_connections++]; - ASSERT(0 == uv_tcp_init(server->loop, incoming)); - ASSERT(0 == uv_accept(server, (uv_stream_t*) incoming)); - - if (got_connections != ARRAY_SIZE(tcp_incoming)) - return; - - /* Once all clients are accepted - start reading */ - for (i = 0; i < ARRAY_SIZE(tcp_incoming); i++) { - incoming = &tcp_incoming[i]; - ASSERT(0 == uv_read_start((uv_stream_t*) incoming, alloc_cb, read_cb)); - } -} - -TEST_IMPL(tcp_close_accept) { - unsigned int i; - uv_loop_t* loop; - uv_tcp_t* client; - - /* - * A little explanation of what goes on below: - * - * We'll create server and connect to it using two clients, each writing one - * byte once connected. - * - * When all clients will be accepted by server - we'll start reading from them - * and, on first client's first byte, will close second client and server. - * After that, we'll immediately initiate new connection to server using - * tcp_check handle (thus, reusing fd from second client). - * - * In this situation uv__io_poll()'s event list should still contain read - * event for second client, and, if not cleaned up properly, `tcp_check` will - * receive stale event of second incoming and invoke `connect_cb` with zero - * status. - */ - - loop = uv_default_loop(); - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - ASSERT(0 == uv_tcp_init(loop, &tcp_server)); - ASSERT(0 == uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr, 0)); - ASSERT(0 == uv_listen((uv_stream_t*) &tcp_server, - ARRAY_SIZE(tcp_outgoing), - connection_cb)); - - for (i = 0; i < ARRAY_SIZE(tcp_outgoing); i++) { - client = tcp_outgoing + i; - - ASSERT(0 == uv_tcp_init(loop, client)); - ASSERT(0 == uv_tcp_connect(&connect_reqs[i], - client, - (const struct sockaddr*) &addr, - connect_cb)); - } - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(ARRAY_SIZE(tcp_outgoing) == got_connections); - ASSERT((ARRAY_SIZE(tcp_outgoing) + 2) == close_cb_called); - ASSERT(ARRAY_SIZE(tcp_outgoing) == write_cb_called); - ASSERT(1 == read_cb_called); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#else - -typedef int file_has_no_tests; /* ISO C forbids an empty translation unit. */ - -#endif /* !_WIN32 */ diff --git a/libuv/test/test-tcp-close-reset.c b/libuv/test/test-tcp-close-reset.c deleted file mode 100644 index 7ca55c4..0000000 --- a/libuv/test/test-tcp-close-reset.c +++ /dev/null @@ -1,290 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include /* memset */ - -static uv_loop_t* loop; -static uv_tcp_t tcp_server; -static uv_tcp_t tcp_client; -static uv_tcp_t tcp_accepted; -static uv_connect_t connect_req; -static uv_shutdown_t shutdown_req; -static uv_write_t write_reqs[4]; - -static int client_close; -static int shutdown_before_close; - -static int write_cb_called; -static int close_cb_called; -static int shutdown_cb_called; - -static void connect_cb(uv_connect_t* req, int status); -static void write_cb(uv_write_t* req, int status); -static void close_cb(uv_handle_t* handle); -static void shutdown_cb(uv_shutdown_t* req, int status); - -static int read_size; - - -static void do_write(uv_tcp_t* handle) { - uv_buf_t buf; - unsigned i; - int r; - - buf = uv_buf_init("PING", 4); - for (i = 0; i < ARRAY_SIZE(write_reqs); i++) { - r = uv_write(&write_reqs[i], (uv_stream_t*) handle, &buf, 1, write_cb); - ASSERT(r == 0); - } -} - - -static void do_close(uv_tcp_t* handle) { - if (shutdown_before_close == 1) { - ASSERT(0 == uv_shutdown(&shutdown_req, (uv_stream_t*) handle, shutdown_cb)); - ASSERT(UV_EINVAL == uv_tcp_close_reset(handle, close_cb)); - } else { - ASSERT(0 == uv_tcp_close_reset(handle, close_cb)); - ASSERT(UV_ENOTCONN == uv_shutdown(&shutdown_req, (uv_stream_t*) handle, shutdown_cb)); - } - - uv_close((uv_handle_t*) &tcp_server, NULL); -} - -static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - static char slab[1024]; - buf->base = slab; - buf->len = sizeof(slab); -} - -static void read_cb2(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) { - ASSERT((uv_tcp_t*)stream == &tcp_client); - if (nread == UV_EOF) - uv_close((uv_handle_t*) stream, NULL); -} - - -static void connect_cb(uv_connect_t* conn_req, int status) { - ASSERT(conn_req == &connect_req); - uv_read_start((uv_stream_t*) &tcp_client, alloc_cb, read_cb2); - do_write(&tcp_client); - if (client_close) - do_close(&tcp_client); -} - - -static void write_cb(uv_write_t* req, int status) { - /* write callbacks should run before the close callback */ - ASSERT(close_cb_called == 0); - ASSERT(req->handle == (uv_stream_t*)&tcp_client); - write_cb_called++; -} - - -static void close_cb(uv_handle_t* handle) { - if (client_close) - ASSERT(handle == (uv_handle_t*) &tcp_client); - else - ASSERT(handle == (uv_handle_t*) &tcp_accepted); - - close_cb_called++; -} - -static void shutdown_cb(uv_shutdown_t* req, int status) { - if (client_close) - ASSERT(req->handle == (uv_stream_t*) &tcp_client); - else - ASSERT(req->handle == (uv_stream_t*) &tcp_accepted); - - shutdown_cb_called++; -} - - -static void read_cb(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) { - ASSERT((uv_tcp_t*)stream == &tcp_accepted); - if (nread < 0) { - uv_close((uv_handle_t*) stream, NULL); - } else { - read_size += nread; - if (read_size == 16 && client_close == 0) - do_close(&tcp_accepted); - } -} - - -static void connection_cb(uv_stream_t* server, int status) { - ASSERT(status == 0); - - ASSERT(0 == uv_tcp_init(loop, &tcp_accepted)); - ASSERT(0 == uv_accept(server, (uv_stream_t*) &tcp_accepted)); - - uv_read_start((uv_stream_t*) &tcp_accepted, alloc_cb, read_cb); -} - - -static void start_server(uv_loop_t* loop, uv_tcp_t* handle) { - struct sockaddr_in addr; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_tcp_init(loop, handle); - ASSERT(r == 0); - - r = uv_tcp_bind(handle, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*)handle, 128, connection_cb); - ASSERT(r == 0); -} - - -static void do_connect(uv_loop_t* loop, uv_tcp_t* tcp_client) { - struct sockaddr_in addr; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_tcp_init(loop, tcp_client); - ASSERT(r == 0); - - r = uv_tcp_connect(&connect_req, - tcp_client, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); -} - - -/* Check that pending write requests have their callbacks - * invoked when the handle is closed. - */ -TEST_IMPL(tcp_close_reset_client) { - int r; - - loop = uv_default_loop(); - - start_server(loop, &tcp_server); - - client_close = 1; - shutdown_before_close = 0; - - do_connect(loop, &tcp_client); - - ASSERT(write_cb_called == 0); - ASSERT(close_cb_called == 0); - ASSERT(shutdown_cb_called == 0); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(write_cb_called == 4); - ASSERT(close_cb_called == 1); - ASSERT(shutdown_cb_called == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(tcp_close_reset_client_after_shutdown) { - int r; - - loop = uv_default_loop(); - - start_server(loop, &tcp_server); - - client_close = 1; - shutdown_before_close = 1; - - do_connect(loop, &tcp_client); - - ASSERT(write_cb_called == 0); - ASSERT(close_cb_called == 0); - ASSERT(shutdown_cb_called == 0); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(write_cb_called == 4); - ASSERT(close_cb_called == 0); - ASSERT(shutdown_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(tcp_close_reset_accepted) { - int r; - - loop = uv_default_loop(); - - start_server(loop, &tcp_server); - - client_close = 0; - shutdown_before_close = 0; - - do_connect(loop, &tcp_client); - - ASSERT(write_cb_called == 0); - ASSERT(close_cb_called == 0); - ASSERT(shutdown_cb_called == 0); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(write_cb_called == 4); - ASSERT(close_cb_called == 1); - ASSERT(shutdown_cb_called == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(tcp_close_reset_accepted_after_shutdown) { - int r; - - loop = uv_default_loop(); - - start_server(loop, &tcp_server); - - client_close = 0; - shutdown_before_close = 1; - - do_connect(loop, &tcp_client); - - ASSERT(write_cb_called == 0); - ASSERT(close_cb_called == 0); - ASSERT(shutdown_cb_called == 0); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(write_cb_called == 4); - ASSERT(close_cb_called == 0); - ASSERT(shutdown_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-close-while-connecting.c b/libuv/test/test-tcp-close-while-connecting.c deleted file mode 100644 index 8d0b827..0000000 --- a/libuv/test/test-tcp-close-while-connecting.c +++ /dev/null @@ -1,97 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static uv_timer_t timer1_handle; -static uv_timer_t timer2_handle; -static uv_tcp_t tcp_handle; - -static int connect_cb_called; -static int timer1_cb_called; -static int close_cb_called; -static int netunreach_errors; - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - - -static void connect_cb(uv_connect_t* req, int status) { - /* The expected error is UV_ECANCELED but the test tries to connect to what - * is basically an arbitrary address in the expectation that no network path - * exists, so UV_ENETUNREACH is an equally plausible outcome. - */ - ASSERT(status == UV_ECANCELED || status == UV_ENETUNREACH); - uv_timer_stop(&timer2_handle); - connect_cb_called++; - if (status == UV_ENETUNREACH) - netunreach_errors++; -} - - -static void timer1_cb(uv_timer_t* handle) { - uv_close((uv_handle_t*)handle, close_cb); - uv_close((uv_handle_t*)&tcp_handle, close_cb); - timer1_cb_called++; -} - - -static void timer2_cb(uv_timer_t* handle) { - ASSERT(0 && "should not be called"); -} - - -TEST_IMPL(tcp_close_while_connecting) { - uv_connect_t connect_req; - struct sockaddr_in addr; - uv_loop_t* loop; - int r; - - loop = uv_default_loop(); - ASSERT(0 == uv_ip4_addr("1.2.3.4", TEST_PORT, &addr)); - ASSERT(0 == uv_tcp_init(loop, &tcp_handle)); - r = uv_tcp_connect(&connect_req, - &tcp_handle, - (const struct sockaddr*) &addr, - connect_cb); - if (r == UV_ENETUNREACH) - RETURN_SKIP("Network unreachable."); - ASSERT(r == 0); - ASSERT(0 == uv_timer_init(loop, &timer1_handle)); - ASSERT(0 == uv_timer_start(&timer1_handle, timer1_cb, 1, 0)); - ASSERT(0 == uv_timer_init(loop, &timer2_handle)); - ASSERT(0 == uv_timer_start(&timer2_handle, timer2_cb, 86400 * 1000, 0)); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - - ASSERT(connect_cb_called == 1); - ASSERT(timer1_cb_called == 1); - ASSERT(close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - - if (netunreach_errors > 0) - RETURN_SKIP("Network unreachable."); - - return 0; -} diff --git a/libuv/test/test-tcp-close.c b/libuv/test/test-tcp-close.c deleted file mode 100644 index 5a7bd68..0000000 --- a/libuv/test/test-tcp-close.c +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include /* memset */ - -#define NUM_WRITE_REQS 32 - -static uv_tcp_t tcp_handle; -static uv_connect_t connect_req; - -static int write_cb_called; -static int close_cb_called; - -static void connect_cb(uv_connect_t* req, int status); -static void write_cb(uv_write_t* req, int status); -static void close_cb(uv_handle_t* handle); - - -static void connect_cb(uv_connect_t* conn_req, int status) { - uv_write_t* req; - uv_buf_t buf; - int i, r; - - buf = uv_buf_init("PING", 4); - for (i = 0; i < NUM_WRITE_REQS; i++) { - req = malloc(sizeof *req); - ASSERT_NOT_NULL(req); - - r = uv_write(req, (uv_stream_t*)&tcp_handle, &buf, 1, write_cb); - ASSERT(r == 0); - } - - uv_close((uv_handle_t*)&tcp_handle, close_cb); -} - - -static void write_cb(uv_write_t* req, int status) { - /* write callbacks should run before the close callback */ - ASSERT(close_cb_called == 0); - ASSERT(req->handle == (uv_stream_t*)&tcp_handle); - write_cb_called++; - free(req); -} - - -static void close_cb(uv_handle_t* handle) { - ASSERT(handle == (uv_handle_t*)&tcp_handle); - close_cb_called++; -} - - -static void connection_cb(uv_stream_t* server, int status) { - ASSERT(status == 0); -} - - -static void start_server(uv_loop_t* loop, uv_tcp_t* handle) { - struct sockaddr_in addr; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_tcp_init(loop, handle); - ASSERT(r == 0); - - r = uv_tcp_bind(handle, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*)handle, 128, connection_cb); - ASSERT(r == 0); - - uv_unref((uv_handle_t*)handle); -} - - -/* Check that pending write requests have their callbacks - * invoked when the handle is closed. - */ -TEST_IMPL(tcp_close) { - struct sockaddr_in addr; - uv_tcp_t tcp_server; - uv_loop_t* loop; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - loop = uv_default_loop(); - - /* We can't use the echo server, it doesn't handle ECONNRESET. */ - start_server(loop, &tcp_server); - - r = uv_tcp_init(loop, &tcp_handle); - ASSERT(r == 0); - - r = uv_tcp_connect(&connect_req, - &tcp_handle, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); - - ASSERT(write_cb_called == 0); - ASSERT(close_cb_called == 0); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - printf("%d of %d write reqs seen\n", write_cb_called, NUM_WRITE_REQS); - - ASSERT(write_cb_called == NUM_WRITE_REQS); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-connect-error-after-write.c b/libuv/test/test-tcp-connect-error-after-write.c deleted file mode 100644 index 3f2e357..0000000 --- a/libuv/test/test-tcp-connect-error-after-write.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -static int connect_cb_called; -static int write_cb_called; -static int close_cb_called; - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - - -static void connect_cb(uv_connect_t* req, int status) { - ASSERT(status < 0); - connect_cb_called++; - uv_close((uv_handle_t*)req->handle, close_cb); -} - - -static void write_cb(uv_write_t* req, int status) { - ASSERT(status < 0); - write_cb_called++; -} - - -/* - * Try to connect to an address on which nothing listens, get ECONNREFUSED - * (uv errno 12) and get connect_cb() called once with status != 0. - * Related issue: https://github.com/joyent/libuv/issues/443 - */ -TEST_IMPL(tcp_connect_error_after_write) { - uv_connect_t connect_req; - struct sockaddr_in addr; - uv_write_t write_req; - uv_tcp_t conn; - uv_buf_t buf; - int r; - -#ifdef _WIN32 - fprintf(stderr, "This test is disabled on Windows for now.\n"); - fprintf(stderr, "See https://github.com/joyent/libuv/issues/444\n"); - return 0; /* windows slackers... */ -#endif - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - buf = uv_buf_init("TEST", 4); - - r = uv_tcp_init(uv_default_loop(), &conn); - ASSERT(r == 0); - - r = uv_write(&write_req, (uv_stream_t*)&conn, &buf, 1, write_cb); - ASSERT(r == UV_EBADF); - - r = uv_tcp_connect(&connect_req, - &conn, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); - - r = uv_write(&write_req, (uv_stream_t*)&conn, &buf, 1, write_cb); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(connect_cb_called == 1); - ASSERT(write_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-connect-error.c b/libuv/test/test-tcp-connect-error.c deleted file mode 100644 index dda30a5..0000000 --- a/libuv/test/test-tcp-connect-error.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - - -static int connect_cb_called = 0; -static int close_cb_called = 0; - - - -static void connect_cb(uv_connect_t* handle, int status) { - ASSERT_NOT_NULL(handle); - connect_cb_called++; -} - - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -TEST_IMPL(tcp_connect_error_fault) { - const char garbage[] = - "blah blah blah blah blah blah blah blah blah blah blah blah"; - const struct sockaddr_in* garbage_addr; - uv_tcp_t server; - int r; - uv_connect_t req; - - garbage_addr = (const struct sockaddr_in*) &garbage; - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - r = uv_tcp_connect(&req, - &server, - (const struct sockaddr*) garbage_addr, - connect_cb); - ASSERT(r == UV_EINVAL); - - uv_close((uv_handle_t*)&server, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(connect_cb_called == 0); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-connect-timeout.c b/libuv/test/test-tcp-connect-timeout.c deleted file mode 100644 index 3c34e54..0000000 --- a/libuv/test/test-tcp-connect-timeout.c +++ /dev/null @@ -1,196 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - - -static int connect_cb_called; -static int close_cb_called; - -static uv_connect_t connect_req; -static uv_timer_t timer; -static uv_tcp_t conn; - -static void connect_cb(uv_connect_t* req, int status); -static void timer_cb(uv_timer_t* handle); -static void close_cb(uv_handle_t* handle); - - -static void connect_cb(uv_connect_t* req, int status) { - ASSERT(req == &connect_req); - ASSERT(status == UV_ECANCELED); - connect_cb_called++; -} - - -static void timer_cb(uv_timer_t* handle) { - ASSERT(handle == &timer); - uv_close((uv_handle_t*)&conn, close_cb); - uv_close((uv_handle_t*)&timer, close_cb); -} - - -static void close_cb(uv_handle_t* handle) { - ASSERT(handle == (uv_handle_t*)&conn || handle == (uv_handle_t*)&timer); - close_cb_called++; -} - - -/* Verify that connecting to an unreachable address or port doesn't hang - * the event loop. - */ -TEST_IMPL(tcp_connect_timeout) { - struct sockaddr_in addr; - int r; - - ASSERT(0 == uv_ip4_addr("8.8.8.8", 9999, &addr)); - - r = uv_timer_init(uv_default_loop(), &timer); - ASSERT(r == 0); - - r = uv_timer_start(&timer, timer_cb, 50, 0); - ASSERT(r == 0); - - r = uv_tcp_init(uv_default_loop(), &conn); - ASSERT(r == 0); - - r = uv_tcp_connect(&connect_req, - &conn, - (const struct sockaddr*) &addr, - connect_cb); - if (r == UV_ENETUNREACH) - RETURN_SKIP("Network unreachable."); - ASSERT(r == 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -/* Make sure connect fails instantly if the target is nonexisting - * local port. - */ - -static void connect_local_cb(uv_connect_t* req, int status) { - ASSERT_PTR_EQ(req, &connect_req); - ASSERT_NE(status, UV_ECANCELED); - connect_cb_called++; -} - -static int is_supported_system(void) { - int semver[3]; - int min_semver[3] = {10, 0, 16299}; - int cnt; - uv_utsname_t uname; - ASSERT_EQ(uv_os_uname(&uname), 0); - if (strcmp(uname.sysname, "Windows_NT") == 0) { - cnt = sscanf(uname.release, "%d.%d.%d", &semver[0], &semver[1], &semver[2]); - if (cnt != 3) { - return 0; - } - /* relase >= 10.0.16299 */ - for (cnt = 0; cnt < 3; ++cnt) { - if (semver[cnt] > min_semver[cnt]) - return 1; - if (semver[cnt] < min_semver[cnt]) - return 0; - } - return 1; - } - return 1; -} - -TEST_IMPL(tcp_local_connect_timeout) { - struct sockaddr_in addr; - int r; - - if (!is_supported_system()) { - RETURN_SKIP("Unsupported system"); - } - ASSERT_EQ(0, uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_timer_init(uv_default_loop(), &timer); - ASSERT_EQ(r, 0); - - /* Give it 1s to timeout. */ - r = uv_timer_start(&timer, timer_cb, 1000, 0); - ASSERT_EQ(r, 0); - - r = uv_tcp_init(uv_default_loop(), &conn); - ASSERT_EQ(r, 0); - - r = uv_tcp_connect(&connect_req, - &conn, - (const struct sockaddr*) &addr, - connect_local_cb); - if (r == UV_ENETUNREACH) - RETURN_SKIP("Network unreachable."); - ASSERT_EQ(r, 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(tcp6_local_connect_timeout) { - struct sockaddr_in6 addr; - int r; - - if (!is_supported_system()) { - RETURN_SKIP("Unsupported system"); - } - if (!can_ipv6()) { - RETURN_SKIP("IPv6 not supported"); - } - - ASSERT_EQ(0, uv_ip6_addr("::1", 9999, &addr)); - - r = uv_timer_init(uv_default_loop(), &timer); - ASSERT_EQ(r, 0); - - /* Give it 1s to timeout. */ - r = uv_timer_start(&timer, timer_cb, 1000, 0); - ASSERT_EQ(r, 0); - - r = uv_tcp_init(uv_default_loop(), &conn); - ASSERT_EQ(r, 0); - - r = uv_tcp_connect(&connect_req, - &conn, - (const struct sockaddr*) &addr, - connect_local_cb); - if (r == UV_ENETUNREACH) - RETURN_SKIP("Network unreachable."); - ASSERT_EQ(r, 0); - - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT_EQ(r, 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-connect6-error.c b/libuv/test/test-tcp-connect6-error.c deleted file mode 100644 index 2f6e9cb..0000000 --- a/libuv/test/test-tcp-connect6-error.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - - -static int connect_cb_called = 0; -static int close_cb_called = 0; - - -static void connect_cb(uv_connect_t* handle, int status) { - ASSERT_NOT_NULL(handle); - connect_cb_called++; -} - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -TEST_IMPL(tcp_connect6_error_fault) { - const char garbage[] = - "blah blah blah blah blah blah blah blah blah blah blah blah"; - const struct sockaddr_in6* garbage_addr; - uv_tcp_t server; - int r; - uv_connect_t req; - - garbage_addr = (const struct sockaddr_in6*) &garbage; - - r = uv_tcp_init(uv_default_loop(), &server); - ASSERT(r == 0); - r = uv_tcp_connect(&req, - &server, - (const struct sockaddr*) garbage_addr, - connect_cb); - ASSERT(r == UV_EINVAL); - - uv_close((uv_handle_t*)&server, close_cb); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(connect_cb_called == 0); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-create-socket-early.c b/libuv/test/test-tcp-create-socket-early.c deleted file mode 100644 index f2bc60d..0000000 --- a/libuv/test/test-tcp-create-socket-early.c +++ /dev/null @@ -1,209 +0,0 @@ -/* Copyright (c) 2015 Saúl Ibarra Corretgé . - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - -#ifdef _WIN32 -# define INVALID_FD (INVALID_HANDLE_VALUE) -#else -# define INVALID_FD (-1) -#endif - - -static void on_connect(uv_connect_t* req, int status) { - ASSERT(status == 0); - uv_close((uv_handle_t*) req->handle, NULL); -} - - -static void on_connection(uv_stream_t* server, int status) { - uv_tcp_t* handle; - int r; - - ASSERT(status == 0); - - handle = malloc(sizeof(*handle)); - ASSERT_NOT_NULL(handle); - - r = uv_tcp_init_ex(server->loop, handle, AF_INET); - ASSERT(r == 0); - - r = uv_accept(server, (uv_stream_t*)handle); - ASSERT(r == UV_EBUSY); - - uv_close((uv_handle_t*) server, NULL); - uv_close((uv_handle_t*) handle, (uv_close_cb)free); -} - - -static void tcp_listener(uv_loop_t* loop, uv_tcp_t* server) { - struct sockaddr_in addr; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - r = uv_tcp_init(loop, server); - ASSERT(r == 0); - - r = uv_tcp_bind(server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*) server, 128, on_connection); - ASSERT(r == 0); -} - - -static void tcp_connector(uv_loop_t* loop, uv_tcp_t* client, uv_connect_t* req) { - struct sockaddr_in server_addr; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &server_addr)); - - r = uv_tcp_init(loop, client); - ASSERT(r == 0); - - r = uv_tcp_connect(req, - client, - (const struct sockaddr*) &server_addr, - on_connect); - ASSERT(r == 0); -} - - -TEST_IMPL(tcp_create_early) { - struct sockaddr_in addr; - struct sockaddr_in sockname; - uv_tcp_t client; - uv_os_fd_t fd; - int r, namelen; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_tcp_init_ex(uv_default_loop(), &client, AF_INET); - ASSERT(r == 0); - - r = uv_fileno((const uv_handle_t*) &client, &fd); - ASSERT(r == 0); - ASSERT(fd != INVALID_FD); - - /* Windows returns WSAEINVAL if the socket is not bound */ -#ifndef _WIN32 - namelen = sizeof sockname; - r = uv_tcp_getsockname(&client, (struct sockaddr*) &sockname, &namelen); - ASSERT(r == 0); - ASSERT(sockname.sin_family == AF_INET); -#endif - - r = uv_tcp_bind(&client, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - namelen = sizeof sockname; - r = uv_tcp_getsockname(&client, (struct sockaddr*) &sockname, &namelen); - ASSERT(r == 0); - ASSERT(memcmp(&addr.sin_addr, - &sockname.sin_addr, - sizeof(addr.sin_addr)) == 0); - - uv_close((uv_handle_t*) &client, NULL); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_create_early_bad_bind) { - struct sockaddr_in addr; - uv_tcp_t client; - uv_os_fd_t fd; - int r; - - if (!can_ipv6()) - RETURN_SKIP("IPv6 not supported"); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_tcp_init_ex(uv_default_loop(), &client, AF_INET6); - ASSERT(r == 0); - - r = uv_fileno((const uv_handle_t*) &client, &fd); - ASSERT(r == 0); - ASSERT(fd != INVALID_FD); - - /* Windows returns WSAEINVAL if the socket is not bound */ -#ifndef _WIN32 - { - int namelen; - struct sockaddr_in6 sockname; - namelen = sizeof sockname; - r = uv_tcp_getsockname(&client, (struct sockaddr*) &sockname, &namelen); - ASSERT(r == 0); - ASSERT(sockname.sin6_family == AF_INET6); - } -#endif - - r = uv_tcp_bind(&client, (const struct sockaddr*) &addr, 0); -#if !defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MSYS__) - ASSERT(r == UV_EINVAL); -#else - ASSERT(r == UV_EFAULT); -#endif - - uv_close((uv_handle_t*) &client, NULL); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_create_early_bad_domain) { - uv_tcp_t client; - int r; - - r = uv_tcp_init_ex(uv_default_loop(), &client, 47); - ASSERT(r == UV_EINVAL); - - r = uv_tcp_init_ex(uv_default_loop(), &client, 1024); - ASSERT(r == UV_EINVAL); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_create_early_accept) { - uv_tcp_t client, server; - uv_connect_t connect_req; - - tcp_listener(uv_default_loop(), &server); - tcp_connector(uv_default_loop(), &client, &connect_req); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-flags.c b/libuv/test/test-tcp-flags.c deleted file mode 100644 index 68afb39..0000000 --- a/libuv/test/test-tcp-flags.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - - -TEST_IMPL(tcp_flags) { - uv_loop_t* loop; - uv_tcp_t handle; - int r; - - loop = uv_default_loop(); - - r = uv_tcp_init(loop, &handle); - ASSERT(r == 0); - - r = uv_tcp_nodelay(&handle, 1); - ASSERT(r == 0); - - r = uv_tcp_keepalive(&handle, 1, 60); - ASSERT(r == 0); - - uv_close((uv_handle_t*)&handle, NULL); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-oob.c b/libuv/test/test-tcp-oob.c deleted file mode 100644 index 53f8231..0000000 --- a/libuv/test/test-tcp-oob.c +++ /dev/null @@ -1,146 +0,0 @@ -/* Copyright Fedor Indutny. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#if !defined(_WIN32) - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -static uv_tcp_t server_handle; -static uv_tcp_t client_handle; -static uv_tcp_t peer_handle; -static uv_idle_t idle; -static uv_connect_t connect_req; -static int ticks; -static const int kMaxTicks = 10; - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char storage[1024]; - *buf = uv_buf_init(storage, sizeof(storage)); -} - - -static void idle_cb(uv_idle_t* idle) { - if (++ticks < kMaxTicks) - return; - - uv_close((uv_handle_t*) &server_handle, NULL); - uv_close((uv_handle_t*) &client_handle, NULL); - uv_close((uv_handle_t*) &peer_handle, NULL); - uv_close((uv_handle_t*) idle, NULL); -} - - -static void read_cb(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf) { -#ifdef __MVS__ - char lbuf[12]; -#endif - uv_os_fd_t fd; - - ASSERT(nread >= 0); - ASSERT(0 == uv_fileno((uv_handle_t*)handle, &fd)); - ASSERT(0 == uv_idle_start(&idle, idle_cb)); - -#ifdef __MVS__ - /* Need to flush out the OOB data. Otherwise, this callback will get - * triggered on every poll with nread = 0. - */ - ASSERT(-1 != recv(fd, lbuf, sizeof(lbuf), MSG_OOB)); -#endif -} - - -static void connect_cb(uv_connect_t* req, int status) { - ASSERT(req->handle == (uv_stream_t*) &client_handle); - ASSERT(0 == status); -} - - -static void connection_cb(uv_stream_t* handle, int status) { - int r; - uv_os_fd_t fd; - - ASSERT(0 == status); - ASSERT(0 == uv_accept(handle, (uv_stream_t*) &peer_handle)); - ASSERT(0 == uv_read_start((uv_stream_t*) &peer_handle, alloc_cb, read_cb)); - - /* Send some OOB data */ - ASSERT(0 == uv_fileno((uv_handle_t*) &client_handle, &fd)); - - ASSERT(0 == uv_stream_set_blocking((uv_stream_t*) &client_handle, 1)); - - /* The problem triggers only on a second message, it seem that xnu is not - * triggering `kevent()` for the first one - */ - do { - r = send(fd, "hello", 5, MSG_OOB); - } while (r < 0 && errno == EINTR); - ASSERT(5 == r); - - do { - r = send(fd, "hello", 5, MSG_OOB); - } while (r < 0 && errno == EINTR); - ASSERT(5 == r); - - ASSERT(0 == uv_stream_set_blocking((uv_stream_t*) &client_handle, 0)); -} - - -TEST_IMPL(tcp_oob) { - struct sockaddr_in addr; - uv_loop_t* loop; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - loop = uv_default_loop(); - - ASSERT(0 == uv_tcp_init(loop, &server_handle)); - ASSERT(0 == uv_tcp_init(loop, &client_handle)); - ASSERT(0 == uv_tcp_init(loop, &peer_handle)); - ASSERT(0 == uv_idle_init(loop, &idle)); - ASSERT(0 == uv_tcp_bind(&server_handle, (const struct sockaddr*) &addr, 0)); - ASSERT(0 == uv_listen((uv_stream_t*) &server_handle, 1, connection_cb)); - - /* Ensure two separate packets */ - ASSERT(0 == uv_tcp_nodelay(&client_handle, 1)); - - ASSERT(0 == uv_tcp_connect(&connect_req, - &client_handle, - (const struct sockaddr*) &addr, - connect_cb)); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - - ASSERT(ticks == kMaxTicks); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#else - -typedef int file_has_no_tests; /* ISO C forbids an empty translation unit. */ - -#endif /* !_WIN32 */ diff --git a/libuv/test/test-tcp-open.c b/libuv/test/test-tcp-open.c deleted file mode 100644 index 7e49139..0000000 --- a/libuv/test/test-tcp-open.c +++ /dev/null @@ -1,401 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include -#include - -#ifndef _WIN32 -# include -#endif - -static int shutdown_cb_called = 0; -static int shutdown_requested = 0; -static int connect_cb_called = 0; -static int write_cb_called = 0; -static int close_cb_called = 0; - -static uv_connect_t connect_req; -static uv_shutdown_t shutdown_req; -static uv_write_t write_req; -static uv_timer_t tm; -static uv_tcp_t client; - - -static void startup(void) { -#ifdef _WIN32 - struct WSAData wsa_data; - int r = WSAStartup(MAKEWORD(2, 2), &wsa_data); - ASSERT(r == 0); -#endif -} - - -static uv_os_sock_t create_tcp_socket(void) { - uv_os_sock_t sock; - - sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); -#ifdef _WIN32 - ASSERT(sock != INVALID_SOCKET); -#else - ASSERT(sock >= 0); -#endif - -#ifndef _WIN32 - { - /* Allow reuse of the port. */ - int yes = 1; - int r = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes); - ASSERT(r == 0); - } -#endif - - return sock; -} - - -static void close_socket(uv_os_sock_t sock) { - int r; -#ifdef _WIN32 - r = closesocket(sock); -#else - r = close(sock); -#endif - ASSERT(r == 0); -} - - -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)); - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -static void shutdown_cb(uv_shutdown_t* req, int status) { - ASSERT(req == &shutdown_req); - ASSERT(status == 0); - - /* Now we wait for the EOF */ - shutdown_cb_called++; -} - - -static void read_cb(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf) { - ASSERT_NOT_NULL(tcp); - - if (nread >= 0) { - ASSERT(nread == 4); - ASSERT(memcmp("PING", buf->base, nread) == 0); - } - else { - ASSERT(nread == UV_EOF); - uv_close((uv_handle_t*)tcp, close_cb); - } -} - - -static void read1_cb(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf) { - int i; - ASSERT_NOT_NULL(tcp); - - if (nread >= 0) { - for (i = 0; i < nread; ++i) - ASSERT(buf->base[i] == 'P'); - } else { - ASSERT(nread == UV_EOF); - printf("GOT EOF\n"); - uv_close((uv_handle_t*)tcp, close_cb); - } -} - - -static void write_cb(uv_write_t* req, int status) { - ASSERT_NOT_NULL(req); - - if (status) { - fprintf(stderr, "uv_write error: %s\n", uv_strerror(status)); - ASSERT(0); - } - - write_cb_called++; -} - - -static void write1_cb(uv_write_t* req, int status) { - uv_buf_t buf; - int r; - - ASSERT_NOT_NULL(req); - if (status) { - ASSERT(shutdown_cb_called); - return; - } - - if (shutdown_requested) - return; - - buf = uv_buf_init("P", 1); - r = uv_write(&write_req, req->handle, &buf, 1, write1_cb); - ASSERT(r == 0); - - write_cb_called++; -} - - -static void timer_cb(uv_timer_t* handle) { - int r; - - /* Shutdown on drain. */ - r = uv_shutdown(&shutdown_req, (uv_stream_t*) &client, shutdown_cb); - ASSERT(r == 0); - shutdown_requested++; -} - - -static void connect_cb(uv_connect_t* req, int status) { - uv_buf_t buf = uv_buf_init("PING", 4); - uv_stream_t* stream; - int r; - - ASSERT(req == &connect_req); - ASSERT(status == 0); - - stream = req->handle; - connect_cb_called++; - - r = uv_write(&write_req, stream, &buf, 1, write_cb); - ASSERT(r == 0); - - /* Shutdown on drain. */ - r = uv_shutdown(&shutdown_req, stream, shutdown_cb); - ASSERT(r == 0); - - /* Start reading */ - r = uv_read_start(stream, alloc_cb, read_cb); - ASSERT(r == 0); -} - - -static void connect1_cb(uv_connect_t* req, int status) { - uv_buf_t buf; - uv_stream_t* stream; - int r; - - ASSERT(req == &connect_req); - ASSERT(status == 0); - - stream = req->handle; - connect_cb_called++; - - r = uv_timer_init(uv_default_loop(), &tm); - ASSERT(r == 0); - - r = uv_timer_start(&tm, timer_cb, 2000, 0); - ASSERT(r == 0); - - buf = uv_buf_init("P", 1); - r = uv_write(&write_req, stream, &buf, 1, write1_cb); - ASSERT(r == 0); - - /* Start reading */ - r = uv_read_start(stream, alloc_cb, read1_cb); - ASSERT(r == 0); -} - - -TEST_IMPL(tcp_open) { - struct sockaddr_in addr; - uv_os_sock_t sock; - int r; - uv_tcp_t client2; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - startup(); - sock = create_tcp_socket(); - - r = uv_tcp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - r = uv_tcp_open(&client, sock); - ASSERT(r == 0); - - r = uv_tcp_connect(&connect_req, - &client, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); - -#ifndef _WIN32 - { - r = uv_tcp_init(uv_default_loop(), &client2); - ASSERT(r == 0); - - r = uv_tcp_open(&client2, sock); - ASSERT(r == UV_EEXIST); - - uv_close((uv_handle_t*) &client2, NULL); - } -#else /* _WIN32 */ - (void)client2; -#endif - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(shutdown_cb_called == 1); - ASSERT(connect_cb_called == 1); - ASSERT(write_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_open_twice) { - uv_tcp_t client; - uv_os_sock_t sock1, sock2; - int r; - - startup(); - sock1 = create_tcp_socket(); - sock2 = create_tcp_socket(); - - r = uv_tcp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - r = uv_tcp_open(&client, sock1); - ASSERT(r == 0); - - r = uv_tcp_open(&client, sock2); - ASSERT(r == UV_EBUSY); - close_socket(sock2); - - uv_close((uv_handle_t*) &client, NULL); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_open_bound) { - struct sockaddr_in addr; - uv_tcp_t server; - uv_os_sock_t sock; - - startup(); - sock = create_tcp_socket(); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - ASSERT(0 == uv_tcp_init(uv_default_loop(), &server)); - - ASSERT(0 == bind(sock, (struct sockaddr*) &addr, sizeof(addr))); - - ASSERT(0 == uv_tcp_open(&server, sock)); - - ASSERT(0 == uv_listen((uv_stream_t*) &server, 128, NULL)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_open_connected) { - struct sockaddr_in addr; - uv_tcp_t client; - uv_os_sock_t sock; - uv_buf_t buf = uv_buf_init("PING", 4); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - startup(); - sock = create_tcp_socket(); - - ASSERT(0 == connect(sock, (struct sockaddr*) &addr, sizeof(addr))); - - ASSERT(0 == uv_tcp_init(uv_default_loop(), &client)); - - ASSERT(0 == uv_tcp_open(&client, sock)); - - ASSERT(0 == uv_write(&write_req, (uv_stream_t*) &client, &buf, 1, write_cb)); - - ASSERT(0 == uv_shutdown(&shutdown_req, (uv_stream_t*) &client, shutdown_cb)); - - ASSERT(0 == uv_read_start((uv_stream_t*) &client, alloc_cb, read_cb)); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(shutdown_cb_called == 1); - ASSERT(write_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tcp_write_ready) { - struct sockaddr_in addr; - uv_os_sock_t sock; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - startup(); - sock = create_tcp_socket(); - - r = uv_tcp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - r = uv_tcp_open(&client, sock); - ASSERT(r == 0); - - r = uv_tcp_connect(&connect_req, - &client, - (const struct sockaddr*) &addr, - connect1_cb); - ASSERT(r == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(shutdown_cb_called == 1); - ASSERT(shutdown_requested == 1); - ASSERT(connect_cb_called == 1); - ASSERT(write_cb_called > 0); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-read-stop-start.c b/libuv/test/test-tcp-read-stop-start.c deleted file mode 100644 index 9bccbc1..0000000 --- a/libuv/test/test-tcp-read-stop-start.c +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static uv_tcp_t server; -static uv_tcp_t connection; -static int read_cb_called = 0; - -static uv_tcp_t client; -static uv_connect_t connect_req; - - -static void on_read2(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf); - -static void on_write_close_immediately(uv_write_t* req, int status) { - ASSERT(0 == status); - - uv_close((uv_handle_t*)req->handle, NULL); /* Close immediately */ - free(req); -} - -static void on_write(uv_write_t* req, int status) { - ASSERT(0 == status); - - free(req); -} - -static void do_write(uv_stream_t* stream, uv_write_cb cb) { - uv_write_t* req = malloc(sizeof(*req)); - uv_buf_t buf; - buf.base = "1234578"; - buf.len = 8; - ASSERT(0 == uv_write(req, stream, &buf, 1, cb)); -} - -static void on_alloc(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[65536]; - buf->base = slab; - buf->len = sizeof(slab); -} - -static void on_read1(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) { - ASSERT(nread >= 0); - - /* Do write on a half open connection to force WSAECONNABORTED (on Windows) - * in the subsequent uv_read_start() - */ - do_write(stream, on_write); - - ASSERT(0 == uv_read_stop(stream)); - - ASSERT(0 == uv_read_start(stream, on_alloc, on_read2)); - - read_cb_called++; -} - -static void on_read2(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) { - ASSERT(nread < 0); - - uv_close((uv_handle_t*)stream, NULL); - uv_close((uv_handle_t*)&server, NULL); - - read_cb_called++; -} - -static void on_connection(uv_stream_t* server, int status) { - ASSERT(0 == status); - - ASSERT(0 == uv_tcp_init(server->loop, &connection)); - - ASSERT(0 == uv_accept(server, (uv_stream_t* )&connection)); - - ASSERT(0 == uv_read_start((uv_stream_t*)&connection, on_alloc, on_read1)); -} - -static void on_connect(uv_connect_t* req, int status) { - ASSERT(0 == status); - - do_write((uv_stream_t*)&client, on_write_close_immediately); -} - -TEST_IMPL(tcp_read_stop_start) { - uv_loop_t* loop = uv_default_loop(); - - { /* Server */ - struct sockaddr_in addr; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - ASSERT(0 == uv_tcp_init(loop, &server)); - - ASSERT(0 == uv_tcp_bind(&server, (struct sockaddr*) & addr, 0)); - - ASSERT(0 == uv_listen((uv_stream_t*)&server, 10, on_connection)); - } - - { /* Client */ - struct sockaddr_in addr; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - ASSERT(0 == uv_tcp_init(loop, &client)); - - ASSERT(0 == uv_tcp_connect(&connect_req, &client, - (const struct sockaddr*) & addr, on_connect)); - } - - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - - ASSERT(read_cb_called >= 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-read-stop.c b/libuv/test/test-tcp-read-stop.c deleted file mode 100644 index 488e8fb..0000000 --- a/libuv/test/test-tcp-read-stop.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static uv_timer_t timer_handle; -static uv_tcp_t tcp_handle; -static uv_write_t write_req; - - -static void fail_cb(void) { - ASSERT(0 && "fail_cb called"); -} - - -static void write_cb(uv_write_t* req, int status) { - uv_close((uv_handle_t*) &timer_handle, NULL); - uv_close((uv_handle_t*) &tcp_handle, NULL); -} - - -static void timer_cb(uv_timer_t* handle) { - uv_buf_t buf = uv_buf_init("PING", 4); - ASSERT(0 == uv_write(&write_req, - (uv_stream_t*) &tcp_handle, - &buf, - 1, - write_cb)); - ASSERT(0 == uv_read_stop((uv_stream_t*) &tcp_handle)); -} - - -static void connect_cb(uv_connect_t* req, int status) { - ASSERT(0 == status); - ASSERT(0 == uv_timer_start(&timer_handle, timer_cb, 50, 0)); - ASSERT(0 == uv_read_start((uv_stream_t*) &tcp_handle, - (uv_alloc_cb) fail_cb, - (uv_read_cb) fail_cb)); -} - - -TEST_IMPL(tcp_read_stop) { - uv_connect_t connect_req; - struct sockaddr_in addr; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - ASSERT(0 == uv_timer_init(uv_default_loop(), &timer_handle)); - ASSERT(0 == uv_tcp_init(uv_default_loop(), &tcp_handle)); - ASSERT(0 == uv_tcp_connect(&connect_req, - &tcp_handle, - (const struct sockaddr*) &addr, - connect_cb)); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - MAKE_VALGRIND_HAPPY(); - - return 0; -} diff --git a/libuv/test/test-tcp-shutdown-after-write.c b/libuv/test/test-tcp-shutdown-after-write.c deleted file mode 100644 index 463b4b0..0000000 --- a/libuv/test/test-tcp-shutdown-after-write.c +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static void write_cb(uv_write_t* req, int status); -static void shutdown_cb(uv_shutdown_t* req, int status); - -static uv_tcp_t conn; -static uv_timer_t timer; -static uv_connect_t connect_req; -static uv_write_t write_req; -static uv_shutdown_t shutdown_req; - -static int connect_cb_called; -static int write_cb_called; -static int shutdown_cb_called; - -static int conn_close_cb_called; -static int timer_close_cb_called; - - -static void close_cb(uv_handle_t* handle) { - if (handle == (uv_handle_t*)&conn) - conn_close_cb_called++; - else if (handle == (uv_handle_t*)&timer) - timer_close_cb_called++; - else - ASSERT(0 && "bad handle in close_cb"); -} - - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[64]; - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void timer_cb(uv_timer_t* handle) { - uv_buf_t buf; - int r; - - uv_close((uv_handle_t*)handle, close_cb); - - buf = uv_buf_init("TEST", 4); - r = uv_write(&write_req, (uv_stream_t*)&conn, &buf, 1, write_cb); - ASSERT(r == 0); - - r = uv_shutdown(&shutdown_req, (uv_stream_t*)&conn, shutdown_cb); - ASSERT(r == 0); -} - - -static void read_cb(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf) { -} - - -static void connect_cb(uv_connect_t* req, int status) { - int r; - - ASSERT(status == 0); - connect_cb_called++; - - r = uv_read_start((uv_stream_t*)&conn, alloc_cb, read_cb); - ASSERT(r == 0); -} - - -static void write_cb(uv_write_t* req, int status) { - ASSERT(status == 0); - write_cb_called++; -} - - -static void shutdown_cb(uv_shutdown_t* req, int status) { - ASSERT(status == 0); - shutdown_cb_called++; - uv_close((uv_handle_t*)&conn, close_cb); -} - - -TEST_IMPL(tcp_shutdown_after_write) { - struct sockaddr_in addr; - uv_loop_t* loop; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - loop = uv_default_loop(); - - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - - r = uv_timer_start(&timer, timer_cb, 125, 0); - ASSERT(r == 0); - - r = uv_tcp_init(loop, &conn); - ASSERT(r == 0); - - r = uv_tcp_connect(&connect_req, - &conn, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(connect_cb_called == 1); - ASSERT(write_cb_called == 1); - ASSERT(shutdown_cb_called == 1); - ASSERT(conn_close_cb_called == 1); - ASSERT(timer_close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-try-write-error.c b/libuv/test/test-tcp-try-write-error.c deleted file mode 100644 index 2201d0e..0000000 --- a/libuv/test/test-tcp-try-write-error.c +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -static uv_tcp_t server; -static uv_tcp_t client; -static uv_tcp_t incoming; -static int connect_cb_called; -static int close_cb_called; -static int connection_cb_called; - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - -static void incoming_close_cb(uv_handle_t* handle) { - uv_buf_t buf; - int r = 1; - - close_cb_called++; - - buf = uv_buf_init("meow", 4); - while (r > 0) - r = uv_try_write((uv_stream_t*) &client, &buf, 1); - fprintf(stderr, "uv_try_write error: %d %s\n", r, uv_strerror(r)); - ASSERT(r == UV_EPIPE || r == UV_ECONNABORTED || r == UV_ECONNRESET); - ASSERT(client.write_queue_size == 0); -} - - -static void connect_cb(uv_connect_t* req, int status) { - ASSERT(status == 0); - connect_cb_called++; -} - - -static void connection_cb(uv_stream_t* tcp, int status) { - ASSERT(status == 0); - - ASSERT(0 == uv_tcp_init(tcp->loop, &incoming)); - ASSERT(0 == uv_accept(tcp, (uv_stream_t*) &incoming)); - - connection_cb_called++; - uv_close((uv_handle_t*) &incoming, incoming_close_cb); - uv_close((uv_handle_t*) tcp, close_cb); -} - - -static void start_server(void) { - struct sockaddr_in addr; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - ASSERT(0 == uv_tcp_init(uv_default_loop(), &server)); - ASSERT(0 == uv_tcp_bind(&server, (struct sockaddr*) &addr, 0)); - ASSERT(0 == uv_listen((uv_stream_t*) &server, 128, connection_cb)); -} - - -TEST_IMPL(tcp_try_write_error) { - uv_connect_t connect_req; - struct sockaddr_in addr; - - start_server(); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - ASSERT(0 == uv_tcp_init(uv_default_loop(), &client)); - ASSERT(0 == uv_tcp_connect(&connect_req, - &client, - (struct sockaddr*) &addr, - connect_cb)); - - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - uv_close((uv_handle_t*) &client, close_cb); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - ASSERT(connect_cb_called == 1); - ASSERT(close_cb_called == 3); - ASSERT(connection_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-try-write.c b/libuv/test/test-tcp-try-write.c deleted file mode 100644 index 97a1d6e..0000000 --- a/libuv/test/test-tcp-try-write.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define MAX_BYTES 1024 * 1024 - -static uv_tcp_t server; -static uv_tcp_t client; -static uv_tcp_t incoming; -static int connect_cb_called; -static int close_cb_called; -static int connection_cb_called; -static int bytes_read; -static int bytes_written; - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - - -static void connect_cb(uv_connect_t* req, int status) { - int r; - uv_buf_t buf; - ASSERT(status == 0); - connect_cb_called++; - - do { - buf = uv_buf_init("PING", 4); - r = uv_try_write((uv_stream_t*) &client, &buf, 1); - ASSERT(r > 0 || r == UV_EAGAIN); - if (r > 0) { - bytes_written += r; - break; - } - } while (1); - - do { - buf = uv_buf_init("", 0); - r = uv_try_write((uv_stream_t*) &client, &buf, 1); - } while (r != 0); - uv_close((uv_handle_t*) &client, close_cb); -} - - -static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - static char base[1024]; - - buf->base = base; - buf->len = sizeof(base); -} - - -static void read_cb(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf) { - if (nread < 0) { - uv_close((uv_handle_t*) tcp, close_cb); - uv_close((uv_handle_t*) &server, close_cb); - return; - } - - bytes_read += nread; -} - - -static void connection_cb(uv_stream_t* tcp, int status) { - ASSERT(status == 0); - - ASSERT(0 == uv_tcp_init(tcp->loop, &incoming)); - ASSERT(0 == uv_accept(tcp, (uv_stream_t*) &incoming)); - - connection_cb_called++; - ASSERT(0 == uv_read_start((uv_stream_t*) &incoming, alloc_cb, read_cb)); -} - - -static void start_server(void) { - struct sockaddr_in addr; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - ASSERT(0 == uv_tcp_init(uv_default_loop(), &server)); - ASSERT(0 == uv_tcp_bind(&server, (struct sockaddr*) &addr, 0)); - ASSERT(0 == uv_listen((uv_stream_t*) &server, 128, connection_cb)); -} - - -TEST_IMPL(tcp_try_write) { - uv_connect_t connect_req; - struct sockaddr_in addr; - - start_server(); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - ASSERT(0 == uv_tcp_init(uv_default_loop(), &client)); - ASSERT(0 == uv_tcp_connect(&connect_req, - &client, - (struct sockaddr*) &addr, - connect_cb)); - - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - ASSERT(connect_cb_called == 1); - ASSERT(close_cb_called == 3); - ASSERT(connection_cb_called == 1); - ASSERT(bytes_read == bytes_written); - ASSERT(bytes_written > 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-unexpected-read.c b/libuv/test/test-tcp-unexpected-read.c deleted file mode 100644 index c7b9814..0000000 --- a/libuv/test/test-tcp-unexpected-read.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static uv_check_t check_handle; -static uv_timer_t timer_handle; -static uv_tcp_t server_handle; -static uv_tcp_t client_handle; -static uv_tcp_t peer_handle; -static uv_write_t write_req; -static uv_connect_t connect_req; - -static unsigned long ticks; /* event loop ticks */ - - -static void check_cb(uv_check_t* handle) { - ticks++; -} - - -static void timer_cb(uv_timer_t* handle) { - uv_close((uv_handle_t*) &check_handle, NULL); - uv_close((uv_handle_t*) &timer_handle, NULL); - uv_close((uv_handle_t*) &server_handle, NULL); - uv_close((uv_handle_t*) &client_handle, NULL); - uv_close((uv_handle_t*) &peer_handle, NULL); -} - - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - ASSERT(0 && "alloc_cb should not have been called"); -} - - -static void read_cb(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf) { - ASSERT(0 && "read_cb should not have been called"); -} - - -static void connect_cb(uv_connect_t* req, int status) { - ASSERT(req->handle == (uv_stream_t*) &client_handle); - ASSERT(0 == status); -} - - -static void write_cb(uv_write_t* req, int status) { - ASSERT(req->handle == (uv_stream_t*) &peer_handle); - ASSERT(0 == status); -} - - -static void connection_cb(uv_stream_t* handle, int status) { - uv_buf_t buf; - - buf = uv_buf_init("PING", 4); - - ASSERT(0 == status); - ASSERT(0 == uv_accept(handle, (uv_stream_t*) &peer_handle)); - ASSERT(0 == uv_read_start((uv_stream_t*) &peer_handle, alloc_cb, read_cb)); - ASSERT(0 == uv_write(&write_req, (uv_stream_t*) &peer_handle, - &buf, 1, write_cb)); -} - - -TEST_IMPL(tcp_unexpected_read) { - struct sockaddr_in addr; - uv_loop_t* loop; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - loop = uv_default_loop(); - - ASSERT(0 == uv_timer_init(loop, &timer_handle)); - ASSERT(0 == uv_timer_start(&timer_handle, timer_cb, 1000, 0)); - ASSERT(0 == uv_check_init(loop, &check_handle)); - ASSERT(0 == uv_check_start(&check_handle, check_cb)); - ASSERT(0 == uv_tcp_init(loop, &server_handle)); - ASSERT(0 == uv_tcp_init(loop, &client_handle)); - ASSERT(0 == uv_tcp_init(loop, &peer_handle)); - ASSERT(0 == uv_tcp_bind(&server_handle, (const struct sockaddr*) &addr, 0)); - ASSERT(0 == uv_listen((uv_stream_t*) &server_handle, 1, connection_cb)); - ASSERT(0 == uv_tcp_connect(&connect_req, - &client_handle, - (const struct sockaddr*) &addr, - connect_cb)); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - - /* This is somewhat inexact but the idea is that the event loop should not - * start busy looping when the server sends a message and the client isn't - * reading. - */ - ASSERT(ticks <= 20); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-write-after-connect.c b/libuv/test/test-tcp-write-after-connect.c deleted file mode 100644 index 8a698f4..0000000 --- a/libuv/test/test-tcp-write-after-connect.c +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifndef _WIN32 - -#include "uv.h" -#include "task.h" - -uv_loop_t loop; -uv_tcp_t tcp_client; -uv_connect_t connection_request; -uv_write_t write_request; -uv_buf_t buf = { "HELLO", 4 }; - - -static void write_cb(uv_write_t *req, int status) { - ASSERT(status == UV_ECANCELED); - uv_close((uv_handle_t*) req->handle, NULL); -} - - -static void connect_cb(uv_connect_t *req, int status) { - ASSERT(status == UV_ECONNREFUSED); -} - - -TEST_IMPL(tcp_write_after_connect) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - struct sockaddr_in sa; - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &sa)); - ASSERT(0 == uv_loop_init(&loop)); - ASSERT(0 == uv_tcp_init(&loop, &tcp_client)); - - ASSERT(0 == uv_tcp_connect(&connection_request, - &tcp_client, - (const struct sockaddr *) - &sa, - connect_cb)); - - ASSERT(0 == uv_write(&write_request, - (uv_stream_t *)&tcp_client, - &buf, 1, - write_cb)); - - uv_run(&loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#else - -typedef int file_has_no_tests; /* ISO C forbids an empty translation unit. */ - -#endif /* !_WIN32 */ diff --git a/libuv/test/test-tcp-write-fail.c b/libuv/test/test-tcp-write-fail.c deleted file mode 100644 index 58ee00f..0000000 --- a/libuv/test/test-tcp-write-fail.c +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include -#ifndef _WIN32 -# include -#endif - - -static int connect_cb_called = 0; -static int write_cb_called = 0; -static int close_cb_called = 0; - -static uv_connect_t connect_req; -static uv_write_t write_req; - - -static void close_socket(uv_tcp_t* sock) { - uv_os_fd_t fd; - int r; - - r = uv_fileno((uv_handle_t*)sock, &fd); - ASSERT(r == 0); -#ifdef _WIN32 - r = closesocket((uv_os_sock_t)fd); -#else - r = close(fd); -#endif - ASSERT(r == 0); -} - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -static void write_cb(uv_write_t* req, int status) { - ASSERT_NOT_NULL(req); - - ASSERT(status != 0); - fprintf(stderr, "uv_write error: %s\n", uv_strerror(status)); - write_cb_called++; - - uv_close((uv_handle_t*)(req->handle), close_cb); -} - - -static void connect_cb(uv_connect_t* req, int status) { - uv_buf_t buf; - uv_stream_t* stream; - int r; - - ASSERT(req == &connect_req); - ASSERT(status == 0); - - stream = req->handle; - connect_cb_called++; - - /* close the socket, the hard way */ - close_socket((uv_tcp_t*)stream); - - buf = uv_buf_init("hello\n", 6); - r = uv_write(&write_req, stream, &buf, 1, write_cb); - ASSERT(r == 0); -} - - -TEST_IMPL(tcp_write_fail) { - struct sockaddr_in addr; - uv_tcp_t client; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_tcp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - r = uv_tcp_connect(&connect_req, - &client, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(connect_cb_called == 1); - ASSERT(write_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-write-queue-order.c b/libuv/test/test-tcp-write-queue-order.c deleted file mode 100644 index 1ff9c51..0000000 --- a/libuv/test/test-tcp-write-queue-order.c +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include -#include -#include - -#include "uv.h" -#include "task.h" - -#define REQ_COUNT 10000 - -static uv_timer_t timer; -static uv_tcp_t server; -static uv_tcp_t client; -static uv_tcp_t incoming; -static int connect_cb_called; -static int close_cb_called; -static int connection_cb_called; -static int write_callbacks; -static int write_cancelled_callbacks; -static int write_error_callbacks; - -static uv_write_t write_requests[REQ_COUNT]; - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - -static void timer_cb(uv_timer_t* handle) { - uv_close((uv_handle_t*) &client, close_cb); - uv_close((uv_handle_t*) &server, close_cb); - uv_close((uv_handle_t*) &incoming, close_cb); -} - -static void write_cb(uv_write_t* req, int status) { - if (status == 0) - write_callbacks++; - else if (status == UV_ECANCELED) - write_cancelled_callbacks++; - else - write_error_callbacks++; -} - -static void connect_cb(uv_connect_t* req, int status) { - static char base[1024]; - int r; - int i; - uv_buf_t buf; - - ASSERT(status == 0); - connect_cb_called++; - - buf = uv_buf_init(base, sizeof(base)); - - for (i = 0; i < REQ_COUNT; i++) { - r = uv_write(&write_requests[i], - req->handle, - &buf, - 1, - write_cb); - ASSERT(r == 0); - } -} - - -static void connection_cb(uv_stream_t* tcp, int status) { - ASSERT(status == 0); - - ASSERT(0 == uv_tcp_init(tcp->loop, &incoming)); - ASSERT(0 == uv_accept(tcp, (uv_stream_t*) &incoming)); - - ASSERT(0 == uv_timer_init(uv_default_loop(), &timer)); - ASSERT(0 == uv_timer_start(&timer, timer_cb, 1000, 0)); - - connection_cb_called++; -} - - -static void start_server(void) { - struct sockaddr_in addr; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - ASSERT(0 == uv_tcp_init(uv_default_loop(), &server)); - ASSERT(0 == uv_tcp_bind(&server, (struct sockaddr*) &addr, 0)); - ASSERT(0 == uv_listen((uv_stream_t*) &server, 128, connection_cb)); -} - - -TEST_IMPL(tcp_write_queue_order) { - uv_connect_t connect_req; - struct sockaddr_in addr; - int buffer_size = 16 * 1024; - - start_server(); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - ASSERT(0 == uv_tcp_init(uv_default_loop(), &client)); - ASSERT(0 == uv_tcp_connect(&connect_req, - &client, - (struct sockaddr*) &addr, - connect_cb)); - ASSERT(0 == uv_send_buffer_size((uv_handle_t*) &client, &buffer_size)); - - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - ASSERT(connect_cb_called == 1); - ASSERT(connection_cb_called == 1); - ASSERT(write_callbacks > 0); - ASSERT(write_cancelled_callbacks > 0); - ASSERT(write_callbacks + - write_error_callbacks + - write_cancelled_callbacks == REQ_COUNT); - ASSERT(close_cb_called == 3); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-write-to-half-open-connection.c b/libuv/test/test-tcp-write-to-half-open-connection.c deleted file mode 100644 index ae42513..0000000 --- a/libuv/test/test-tcp-write-to-half-open-connection.c +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -static void connection_cb(uv_stream_t* server, int status); -static void connect_cb(uv_connect_t* req, int status); -static void write_cb(uv_write_t* req, int status); -static void read_cb(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf); -static void alloc_cb(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf); - -static uv_tcp_t tcp_server; -static uv_tcp_t tcp_client; -static uv_tcp_t tcp_peer; /* client socket as accept()-ed by server */ -static uv_connect_t connect_req; -static uv_write_t write_req; - -static int write_cb_called; -static int read_cb_called; - -static void connection_cb(uv_stream_t* server, int status) { - int r; - uv_buf_t buf; - - ASSERT(server == (uv_stream_t*)&tcp_server); - ASSERT(status == 0); - - r = uv_tcp_init(server->loop, &tcp_peer); - ASSERT(r == 0); - - r = uv_accept(server, (uv_stream_t*)&tcp_peer); - ASSERT(r == 0); - - r = uv_read_start((uv_stream_t*)&tcp_peer, alloc_cb, read_cb); - ASSERT(r == 0); - - buf.base = "hello\n"; - buf.len = 6; - - r = uv_write(&write_req, (uv_stream_t*)&tcp_peer, &buf, 1, write_cb); - ASSERT(r == 0); -} - - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[1024]; - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void read_cb(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) { - if (nread < 0) { - fprintf(stderr, "read_cb error: %s\n", uv_err_name(nread)); - ASSERT(nread == UV_ECONNRESET || nread == UV_EOF); - - uv_close((uv_handle_t*)&tcp_server, NULL); - uv_close((uv_handle_t*)&tcp_peer, NULL); - } - - read_cb_called++; -} - - -static void connect_cb(uv_connect_t* req, int status) { - ASSERT(req == &connect_req); - ASSERT(status == 0); - - /* Close the client. */ - uv_close((uv_handle_t*)&tcp_client, NULL); -} - - -static void write_cb(uv_write_t* req, int status) { - ASSERT(status == 0); - write_cb_called++; -} - - -TEST_IMPL(tcp_write_to_half_open_connection) { - struct sockaddr_in addr; - uv_loop_t* loop; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - loop = uv_default_loop(); - ASSERT_NOT_NULL(loop); - - r = uv_tcp_init(loop, &tcp_server); - ASSERT(r == 0); - - r = uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_listen((uv_stream_t*)&tcp_server, 1, connection_cb); - ASSERT(r == 0); - - r = uv_tcp_init(loop, &tcp_client); - ASSERT(r == 0); - - r = uv_tcp_connect(&connect_req, - &tcp_client, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(write_cb_called > 0); - ASSERT(read_cb_called > 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tcp-writealot.c b/libuv/test/test-tcp-writealot.c deleted file mode 100644 index 40dce96..0000000 --- a/libuv/test/test-tcp-writealot.c +++ /dev/null @@ -1,180 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include - - -#define WRITES 3 -#if defined(__arm__) /* Decrease the chunks so the test passes on arm CI bots */ -#define CHUNKS_PER_WRITE 2048 -#else -#define CHUNKS_PER_WRITE 4096 -#endif -#define CHUNK_SIZE 10024 /* 10 kb */ - -#define TOTAL_BYTES (WRITES * CHUNKS_PER_WRITE * CHUNK_SIZE) - -static char* send_buffer; - -static int shutdown_cb_called = 0; -static int connect_cb_called = 0; -static int write_cb_called = 0; -static int close_cb_called = 0; -static size_t bytes_sent = 0; -static size_t bytes_sent_done = 0; -static size_t bytes_received_done = 0; - -static uv_connect_t connect_req; -static uv_shutdown_t shutdown_req; -static uv_write_t write_reqs[WRITES]; - - -static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - buf->base = malloc(size); - buf->len = size; -} - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -static void shutdown_cb(uv_shutdown_t* req, int status) { - uv_tcp_t* tcp; - - ASSERT(req == &shutdown_req); - ASSERT(status == 0); - - tcp = (uv_tcp_t*)(req->handle); - - /* The write buffer should be empty by now. */ - ASSERT(tcp->write_queue_size == 0); - - /* Now we wait for the EOF */ - shutdown_cb_called++; - - /* We should have had all the writes called already. */ - ASSERT(write_cb_called == WRITES); -} - - -static void read_cb(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf) { - ASSERT_NOT_NULL(tcp); - - if (nread >= 0) { - bytes_received_done += nread; - } - else { - ASSERT(nread == UV_EOF); - printf("GOT EOF\n"); - uv_close((uv_handle_t*)tcp, close_cb); - } - - free(buf->base); -} - - -static void write_cb(uv_write_t* req, int status) { - ASSERT_NOT_NULL(req); - - if (status) { - fprintf(stderr, "uv_write error: %s\n", uv_strerror(status)); - ASSERT(0); - } - - bytes_sent_done += CHUNKS_PER_WRITE * CHUNK_SIZE; - write_cb_called++; -} - - -static void connect_cb(uv_connect_t* req, int status) { - uv_buf_t send_bufs[CHUNKS_PER_WRITE]; - uv_stream_t* stream; - int i, j, r; - - ASSERT(req == &connect_req); - ASSERT(status == 0); - - stream = req->handle; - connect_cb_called++; - - /* Write a lot of data */ - for (i = 0; i < WRITES; i++) { - uv_write_t* write_req = write_reqs + i; - - for (j = 0; j < CHUNKS_PER_WRITE; j++) { - send_bufs[j] = uv_buf_init(send_buffer + bytes_sent, CHUNK_SIZE); - bytes_sent += CHUNK_SIZE; - } - - r = uv_write(write_req, stream, send_bufs, CHUNKS_PER_WRITE, write_cb); - ASSERT(r == 0); - } - - /* Shutdown on drain. */ - r = uv_shutdown(&shutdown_req, stream, shutdown_cb); - ASSERT(r == 0); - - /* Start reading */ - r = uv_read_start(stream, alloc_cb, read_cb); - ASSERT(r == 0); -} - - -TEST_IMPL(tcp_writealot) { - struct sockaddr_in addr; - uv_tcp_t client; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - send_buffer = calloc(1, TOTAL_BYTES); - ASSERT_NOT_NULL(send_buffer); - - r = uv_tcp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - r = uv_tcp_connect(&connect_req, - &client, - (const struct sockaddr*) &addr, - connect_cb); - ASSERT(r == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(shutdown_cb_called == 1); - ASSERT(connect_cb_called == 1); - ASSERT(write_cb_called == WRITES); - ASSERT(close_cb_called == 1); - ASSERT(bytes_sent == TOTAL_BYTES); - ASSERT(bytes_sent_done == TOTAL_BYTES); - ASSERT(bytes_received_done == TOTAL_BYTES); - - free(send_buffer); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-test-macros.c b/libuv/test/test-test-macros.c deleted file mode 100644 index 72a3992..0000000 --- a/libuv/test/test-test-macros.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "task.h" - -int test_macros_evil(void) { - static int x; - return x++; -} - - -TEST_IMPL(test_macros) { - char* a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - char* b = "ABCDEFGHIJKLMNOPQRSTUVWXYz"; - char* c = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - int i; - - i = test_macros_evil(); - ASSERT_STR_NE(a, b); - ASSERT_STR_EQ(a, c); - ASSERT_EQ(i + 1, test_macros_evil()); - ASSERT_EQ(i + 2, test_macros_evil()); - return 0; -} diff --git a/libuv/test/test-thread-equal.c b/libuv/test/test-thread-equal.c deleted file mode 100644 index 27c07ee..0000000 --- a/libuv/test/test-thread-equal.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -uv_thread_t main_thread_id; -uv_thread_t subthreads[2]; - -static void check_thread(void* arg) { - uv_thread_t *thread_id = arg; - uv_thread_t self_id = uv_thread_self(); - ASSERT(uv_thread_equal(&main_thread_id, &self_id) == 0); - *thread_id = uv_thread_self(); -} - -TEST_IMPL(thread_equal) { - uv_thread_t threads[2]; - main_thread_id = uv_thread_self(); - ASSERT(0 != uv_thread_equal(&main_thread_id, &main_thread_id)); - ASSERT(0 == uv_thread_create(threads + 0, check_thread, subthreads + 0)); - ASSERT(0 == uv_thread_create(threads + 1, check_thread, subthreads + 1)); - ASSERT(0 == uv_thread_join(threads + 0)); - ASSERT(0 == uv_thread_join(threads + 1)); - ASSERT(0 == uv_thread_equal(subthreads + 0, subthreads + 1)); - return 0; -} diff --git a/libuv/test/test-thread.c b/libuv/test/test-thread.c deleted file mode 100644 index 8de5a6f..0000000 --- a/libuv/test/test-thread.c +++ /dev/null @@ -1,295 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include /* memset */ - -#ifdef __POSIX__ -#include -#endif - -struct getaddrinfo_req { - uv_thread_t thread_id; - unsigned int counter; - uv_loop_t* loop; - uv_getaddrinfo_t handle; -}; - - -struct fs_req { - uv_thread_t thread_id; - unsigned int counter; - uv_loop_t* loop; - uv_fs_t handle; -}; - - -struct test_thread { - uv_thread_t thread_id; - int thread_called; -}; - -static void getaddrinfo_do(struct getaddrinfo_req* req); -static void getaddrinfo_cb(uv_getaddrinfo_t* handle, - int status, - struct addrinfo* res); -static void fs_do(struct fs_req* req); -static void fs_cb(uv_fs_t* handle); - -static int thread_called; -static uv_key_t tls_key; - - -static void getaddrinfo_do(struct getaddrinfo_req* req) { - int r; - - r = uv_getaddrinfo(req->loop, - &req->handle, - getaddrinfo_cb, - "localhost", - NULL, - NULL); - ASSERT(r == 0); -} - - -static void getaddrinfo_cb(uv_getaddrinfo_t* handle, - int status, - struct addrinfo* res) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - struct getaddrinfo_req* req; - - ASSERT(status == 0); - - req = container_of(handle, struct getaddrinfo_req, handle); - uv_freeaddrinfo(res); - - if (--req->counter) - getaddrinfo_do(req); -} - - -static void fs_do(struct fs_req* req) { - int r; - - r = uv_fs_stat(req->loop, &req->handle, ".", fs_cb); - ASSERT(r == 0); -} - - -static void fs_cb(uv_fs_t* handle) { - struct fs_req* req = container_of(handle, struct fs_req, handle); - - uv_fs_req_cleanup(handle); - - if (--req->counter) - fs_do(req); -} - - -static void do_work(void* arg) { - struct getaddrinfo_req getaddrinfo_reqs[4]; - struct fs_req fs_reqs[4]; - uv_loop_t loop; - size_t i; - struct test_thread* thread = arg; - - ASSERT(0 == uv_loop_init(&loop)); - - for (i = 0; i < ARRAY_SIZE(getaddrinfo_reqs); i++) { - struct getaddrinfo_req* req = getaddrinfo_reqs + i; - req->counter = 4; - req->loop = &loop; - getaddrinfo_do(req); - } - - for (i = 0; i < ARRAY_SIZE(fs_reqs); i++) { - struct fs_req* req = fs_reqs + i; - req->counter = 4; - req->loop = &loop; - fs_do(req); - } - - ASSERT(0 == uv_run(&loop, UV_RUN_DEFAULT)); - ASSERT(0 == uv_loop_close(&loop)); - thread->thread_called = 1; -} - - -static void thread_entry(void* arg) { - ASSERT(arg == (void *) 42); - thread_called++; -} - - -TEST_IMPL(thread_create) { - uv_thread_t tid; - int r; - - r = uv_thread_create(&tid, thread_entry, (void *) 42); - ASSERT(r == 0); - - r = uv_thread_join(&tid); - ASSERT(r == 0); - - ASSERT(thread_called == 1); - - return 0; -} - - -/* Hilariously bad test name. Run a lot of tasks in the thread pool and verify - * that each "finished" callback is run in its originating thread. - */ -TEST_IMPL(threadpool_multiple_event_loops) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - struct test_thread threads[8]; - size_t i; - int r; - - memset(threads, 0, sizeof(threads)); - - for (i = 0; i < ARRAY_SIZE(threads); i++) { - r = uv_thread_create(&threads[i].thread_id, do_work, &threads[i]); - ASSERT(r == 0); - } - - for (i = 0; i < ARRAY_SIZE(threads); i++) { - r = uv_thread_join(&threads[i].thread_id); - ASSERT(r == 0); - ASSERT(threads[i].thread_called == 1); - } - - return 0; -} - - -static void tls_thread(void* arg) { - ASSERT_NULL(uv_key_get(&tls_key)); - uv_key_set(&tls_key, arg); - ASSERT(arg == uv_key_get(&tls_key)); - uv_key_set(&tls_key, NULL); - ASSERT_NULL(uv_key_get(&tls_key)); -} - - -TEST_IMPL(thread_local_storage) { - char name[] = "main"; - uv_thread_t threads[2]; - ASSERT(0 == uv_key_create(&tls_key)); - ASSERT_NULL(uv_key_get(&tls_key)); - uv_key_set(&tls_key, name); - ASSERT(name == uv_key_get(&tls_key)); - ASSERT(0 == uv_thread_create(threads + 0, tls_thread, threads + 0)); - ASSERT(0 == uv_thread_create(threads + 1, tls_thread, threads + 1)); - ASSERT(0 == uv_thread_join(threads + 0)); - ASSERT(0 == uv_thread_join(threads + 1)); - uv_key_delete(&tls_key); - return 0; -} - - -static void thread_check_stack(void* arg) { -#if defined(__APPLE__) - size_t expected; - expected = arg == NULL ? 0 : ((uv_thread_options_t*)arg)->stack_size; - /* 512 kB is the default stack size of threads other than the main thread - * on MacOS. */ - if (expected == 0) - expected = 512 * 1024; - ASSERT(pthread_get_stacksize_np(pthread_self()) >= expected); -#elif defined(__linux__) && defined(__GLIBC__) - size_t expected; - struct rlimit lim; - size_t stack_size; - pthread_attr_t attr; - ASSERT(0 == getrlimit(RLIMIT_STACK, &lim)); - if (lim.rlim_cur == RLIM_INFINITY) - lim.rlim_cur = 2 << 20; /* glibc default. */ - ASSERT(0 == pthread_getattr_np(pthread_self(), &attr)); - ASSERT(0 == pthread_attr_getstacksize(&attr, &stack_size)); - expected = arg == NULL ? 0 : ((uv_thread_options_t*)arg)->stack_size; - if (expected == 0) - expected = (size_t)lim.rlim_cur; - ASSERT(stack_size >= expected); - ASSERT(0 == pthread_attr_destroy(&attr)); -#endif -} - - -TEST_IMPL(thread_stack_size) { - uv_thread_t thread; - ASSERT(0 == uv_thread_create(&thread, thread_check_stack, NULL)); - ASSERT(0 == uv_thread_join(&thread)); - return 0; -} - -TEST_IMPL(thread_stack_size_explicit) { - uv_thread_t thread; - uv_thread_options_t options; - - options.flags = UV_THREAD_HAS_STACK_SIZE; - options.stack_size = 1024 * 1024; - ASSERT(0 == uv_thread_create_ex(&thread, &options, - thread_check_stack, &options)); - ASSERT(0 == uv_thread_join(&thread)); - - options.stack_size = 8 * 1024 * 1024; /* larger than most default os sizes */ - ASSERT(0 == uv_thread_create_ex(&thread, &options, - thread_check_stack, &options)); - ASSERT(0 == uv_thread_join(&thread)); - - options.stack_size = 0; - ASSERT(0 == uv_thread_create_ex(&thread, &options, - thread_check_stack, &options)); - ASSERT(0 == uv_thread_join(&thread)); - -#ifdef PTHREAD_STACK_MIN - options.stack_size = PTHREAD_STACK_MIN - 42; /* unaligned size */ - ASSERT(0 == uv_thread_create_ex(&thread, &options, - thread_check_stack, &options)); - ASSERT(0 == uv_thread_join(&thread)); - - options.stack_size = PTHREAD_STACK_MIN / 2 - 42; /* unaligned size */ - ASSERT(0 == uv_thread_create_ex(&thread, &options, - thread_check_stack, &options)); - ASSERT(0 == uv_thread_join(&thread)); -#endif - - /* unaligned size, should be larger than PTHREAD_STACK_MIN */ - options.stack_size = 1234567; - ASSERT(0 == uv_thread_create_ex(&thread, &options, - thread_check_stack, &options)); - ASSERT(0 == uv_thread_join(&thread)); - - return 0; -} diff --git a/libuv/test/test-threadpool-cancel.c b/libuv/test/test-threadpool-cancel.c deleted file mode 100644 index 1e867c5..0000000 --- a/libuv/test/test-threadpool-cancel.c +++ /dev/null @@ -1,349 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#define INIT_CANCEL_INFO(ci, what) \ - do { \ - (ci)->reqs = (what); \ - (ci)->nreqs = ARRAY_SIZE(what); \ - (ci)->stride = sizeof((what)[0]); \ - } \ - while (0) - -struct cancel_info { - void* reqs; - unsigned nreqs; - unsigned stride; - uv_timer_t timer_handle; -}; - -struct random_info { - uv_random_t random_req; - char buf[1]; -}; - -static unsigned fs_cb_called; -static unsigned done_cb_called; -static unsigned done2_cb_called; -static unsigned timer_cb_called; -static uv_work_t pause_reqs[4]; -static uv_sem_t pause_sems[ARRAY_SIZE(pause_reqs)]; - - -static void work_cb(uv_work_t* req) { - uv_sem_wait(pause_sems + (req - pause_reqs)); -} - - -static void done_cb(uv_work_t* req, int status) { - uv_sem_destroy(pause_sems + (req - pause_reqs)); -} - - -static void saturate_threadpool(void) { - uv_loop_t* loop; - char buf[64]; - size_t i; - - snprintf(buf, - sizeof(buf), - "UV_THREADPOOL_SIZE=%lu", - (unsigned long)ARRAY_SIZE(pause_reqs)); - putenv(buf); - - loop = uv_default_loop(); - for (i = 0; i < ARRAY_SIZE(pause_reqs); i += 1) { - ASSERT(0 == uv_sem_init(pause_sems + i, 0)); - ASSERT(0 == uv_queue_work(loop, pause_reqs + i, work_cb, done_cb)); - } -} - - -static void unblock_threadpool(void) { - size_t i; - - for (i = 0; i < ARRAY_SIZE(pause_reqs); i += 1) - uv_sem_post(pause_sems + i); -} - - -static void fs_cb(uv_fs_t* req) { - ASSERT(req->result == UV_ECANCELED); - uv_fs_req_cleanup(req); - fs_cb_called++; -} - - -static void getaddrinfo_cb(uv_getaddrinfo_t* req, - int status, - struct addrinfo* res) { - ASSERT(status == UV_EAI_CANCELED); - ASSERT_NULL(res); - uv_freeaddrinfo(res); /* Should not crash. */ -} - - -static void getnameinfo_cb(uv_getnameinfo_t* handle, - int status, - const char* hostname, - const char* service) { - ASSERT(status == UV_EAI_CANCELED); - ASSERT_NULL(hostname); - ASSERT_NULL(service); -} - - -static void work2_cb(uv_work_t* req) { - ASSERT(0 && "work2_cb called"); -} - - -static void done2_cb(uv_work_t* req, int status) { - ASSERT(status == UV_ECANCELED); - done2_cb_called++; -} - - -static void timer_cb(uv_timer_t* handle) { - struct cancel_info* ci; - uv_req_t* req; - unsigned i; - - ci = container_of(handle, struct cancel_info, timer_handle); - - for (i = 0; i < ci->nreqs; i++) { - req = (uv_req_t*) ((char*) ci->reqs + i * ci->stride); - ASSERT(0 == uv_cancel(req)); - } - - uv_close((uv_handle_t*) &ci->timer_handle, NULL); - unblock_threadpool(); - timer_cb_called++; -} - - -static void nop_done_cb(uv_work_t* req, int status) { - ASSERT(status == UV_ECANCELED); - done_cb_called++; -} - - -static void nop_random_cb(uv_random_t* req, int status, void* buf, size_t len) { - struct random_info* ri; - - ri = container_of(req, struct random_info, random_req); - - ASSERT(status == UV_ECANCELED); - ASSERT(buf == (void*) ri->buf); - ASSERT(len == sizeof(ri->buf)); - - done_cb_called++; -} - - -TEST_IMPL(threadpool_cancel_getaddrinfo) { - uv_getaddrinfo_t reqs[4]; - struct cancel_info ci; - struct addrinfo hints; - uv_loop_t* loop; - int r; - - INIT_CANCEL_INFO(&ci, reqs); - loop = uv_default_loop(); - saturate_threadpool(); - - r = uv_getaddrinfo(loop, reqs + 0, getaddrinfo_cb, "fail", NULL, NULL); - ASSERT(r == 0); - - r = uv_getaddrinfo(loop, reqs + 1, getaddrinfo_cb, NULL, "fail", NULL); - ASSERT(r == 0); - - r = uv_getaddrinfo(loop, reqs + 2, getaddrinfo_cb, "fail", "fail", NULL); - ASSERT(r == 0); - - r = uv_getaddrinfo(loop, reqs + 3, getaddrinfo_cb, "fail", NULL, &hints); - ASSERT(r == 0); - - ASSERT(0 == uv_timer_init(loop, &ci.timer_handle)); - ASSERT(0 == uv_timer_start(&ci.timer_handle, timer_cb, 10, 0)); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(1 == timer_cb_called); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(threadpool_cancel_getnameinfo) { - uv_getnameinfo_t reqs[4]; - struct sockaddr_in addr4; - struct cancel_info ci; - uv_loop_t* loop; - int r; - - r = uv_ip4_addr("127.0.0.1", 80, &addr4); - ASSERT(r == 0); - - INIT_CANCEL_INFO(&ci, reqs); - loop = uv_default_loop(); - saturate_threadpool(); - - r = uv_getnameinfo(loop, reqs + 0, getnameinfo_cb, (const struct sockaddr*)&addr4, 0); - ASSERT(r == 0); - - r = uv_getnameinfo(loop, reqs + 1, getnameinfo_cb, (const struct sockaddr*)&addr4, 0); - ASSERT(r == 0); - - r = uv_getnameinfo(loop, reqs + 2, getnameinfo_cb, (const struct sockaddr*)&addr4, 0); - ASSERT(r == 0); - - r = uv_getnameinfo(loop, reqs + 3, getnameinfo_cb, (const struct sockaddr*)&addr4, 0); - ASSERT(r == 0); - - ASSERT(0 == uv_timer_init(loop, &ci.timer_handle)); - ASSERT(0 == uv_timer_start(&ci.timer_handle, timer_cb, 10, 0)); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(1 == timer_cb_called); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(threadpool_cancel_random) { - struct random_info req; - uv_loop_t* loop; - - saturate_threadpool(); - loop = uv_default_loop(); - ASSERT(0 == uv_random(loop, - &req.random_req, - &req.buf, - sizeof(req.buf), - 0, - nop_random_cb)); - ASSERT(0 == uv_cancel((uv_req_t*) &req)); - ASSERT(0 == done_cb_called); - unblock_threadpool(); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(1 == done_cb_called); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(threadpool_cancel_work) { - struct cancel_info ci; - uv_work_t reqs[16]; - uv_loop_t* loop; - unsigned i; - - INIT_CANCEL_INFO(&ci, reqs); - loop = uv_default_loop(); - saturate_threadpool(); - - for (i = 0; i < ARRAY_SIZE(reqs); i++) - ASSERT(0 == uv_queue_work(loop, reqs + i, work2_cb, done2_cb)); - - ASSERT(0 == uv_timer_init(loop, &ci.timer_handle)); - ASSERT(0 == uv_timer_start(&ci.timer_handle, timer_cb, 10, 0)); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(1 == timer_cb_called); - ASSERT(ARRAY_SIZE(reqs) == done2_cb_called); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(threadpool_cancel_fs) { - struct cancel_info ci; - uv_fs_t reqs[26]; - uv_loop_t* loop; - unsigned n; - uv_buf_t iov; - - INIT_CANCEL_INFO(&ci, reqs); - loop = uv_default_loop(); - saturate_threadpool(); - iov = uv_buf_init(NULL, 0); - - /* Needs to match ARRAY_SIZE(fs_reqs). */ - n = 0; - ASSERT(0 == uv_fs_chmod(loop, reqs + n++, "/", 0, fs_cb)); - ASSERT(0 == uv_fs_chown(loop, reqs + n++, "/", 0, 0, fs_cb)); - ASSERT(0 == uv_fs_close(loop, reqs + n++, 0, fs_cb)); - ASSERT(0 == uv_fs_fchmod(loop, reqs + n++, 0, 0, fs_cb)); - ASSERT(0 == uv_fs_fchown(loop, reqs + n++, 0, 0, 0, fs_cb)); - ASSERT(0 == uv_fs_fdatasync(loop, reqs + n++, 0, fs_cb)); - ASSERT(0 == uv_fs_fstat(loop, reqs + n++, 0, fs_cb)); - ASSERT(0 == uv_fs_fsync(loop, reqs + n++, 0, fs_cb)); - ASSERT(0 == uv_fs_ftruncate(loop, reqs + n++, 0, 0, fs_cb)); - ASSERT(0 == uv_fs_futime(loop, reqs + n++, 0, 0, 0, fs_cb)); - ASSERT(0 == uv_fs_link(loop, reqs + n++, "/", "/", fs_cb)); - ASSERT(0 == uv_fs_lstat(loop, reqs + n++, "/", fs_cb)); - ASSERT(0 == uv_fs_mkdir(loop, reqs + n++, "/", 0, fs_cb)); - ASSERT(0 == uv_fs_open(loop, reqs + n++, "/", 0, 0, fs_cb)); - ASSERT(0 == uv_fs_read(loop, reqs + n++, 0, &iov, 1, 0, fs_cb)); - ASSERT(0 == uv_fs_scandir(loop, reqs + n++, "/", 0, fs_cb)); - ASSERT(0 == uv_fs_readlink(loop, reqs + n++, "/", fs_cb)); - ASSERT(0 == uv_fs_realpath(loop, reqs + n++, "/", fs_cb)); - ASSERT(0 == uv_fs_rename(loop, reqs + n++, "/", "/", fs_cb)); - ASSERT(0 == uv_fs_mkdir(loop, reqs + n++, "/", 0, fs_cb)); - ASSERT(0 == uv_fs_sendfile(loop, reqs + n++, 0, 0, 0, 0, fs_cb)); - ASSERT(0 == uv_fs_stat(loop, reqs + n++, "/", fs_cb)); - ASSERT(0 == uv_fs_symlink(loop, reqs + n++, "/", "/", 0, fs_cb)); - ASSERT(0 == uv_fs_unlink(loop, reqs + n++, "/", fs_cb)); - ASSERT(0 == uv_fs_utime(loop, reqs + n++, "/", 0, 0, fs_cb)); - ASSERT(0 == uv_fs_write(loop, reqs + n++, 0, &iov, 1, 0, fs_cb)); - ASSERT(n == ARRAY_SIZE(reqs)); - - ASSERT(0 == uv_timer_init(loop, &ci.timer_handle)); - ASSERT(0 == uv_timer_start(&ci.timer_handle, timer_cb, 10, 0)); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(n == fs_cb_called); - ASSERT(1 == timer_cb_called); - - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(threadpool_cancel_single) { - uv_loop_t* loop; - uv_work_t req; - - saturate_threadpool(); - loop = uv_default_loop(); - ASSERT(0 == uv_queue_work(loop, &req, (uv_work_cb) abort, nop_done_cb)); - ASSERT(0 == uv_cancel((uv_req_t*) &req)); - ASSERT(0 == done_cb_called); - unblock_threadpool(); - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - ASSERT(1 == done_cb_called); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-threadpool.c b/libuv/test/test-threadpool.c deleted file mode 100644 index e3d17d7..0000000 --- a/libuv/test/test-threadpool.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static int work_cb_count; -static int after_work_cb_count; -static uv_work_t work_req; -static char data; - - -static void work_cb(uv_work_t* req) { - ASSERT(req == &work_req); - ASSERT(req->data == &data); - work_cb_count++; -} - - -static void after_work_cb(uv_work_t* req, int status) { - ASSERT(status == 0); - ASSERT(req == &work_req); - ASSERT(req->data == &data); - after_work_cb_count++; -} - - -TEST_IMPL(threadpool_queue_work_simple) { - int r; - - work_req.data = &data; - r = uv_queue_work(uv_default_loop(), &work_req, work_cb, after_work_cb); - ASSERT(r == 0); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(work_cb_count == 1); - ASSERT(after_work_cb_count == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(threadpool_queue_work_einval) { - int r; - - work_req.data = &data; - r = uv_queue_work(uv_default_loop(), &work_req, NULL, after_work_cb); - ASSERT(r == UV_EINVAL); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(work_cb_count == 0); - ASSERT(after_work_cb_count == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-timer-again.c b/libuv/test/test-timer-again.c deleted file mode 100644 index 834b59d..0000000 --- a/libuv/test/test-timer-again.c +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - - -static int close_cb_called = 0; -static int repeat_1_cb_called = 0; -static int repeat_2_cb_called = 0; - -static int repeat_2_cb_allowed = 0; - -static uv_timer_t dummy, repeat_1, repeat_2; - -static uint64_t start_time; - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - - close_cb_called++; -} - - -static void repeat_1_cb(uv_timer_t* handle) { - int r; - - ASSERT(handle == &repeat_1); - ASSERT(uv_timer_get_repeat((uv_timer_t*)handle) == 50); - - fprintf(stderr, "repeat_1_cb called after %ld ms\n", - (long int)(uv_now(uv_default_loop()) - start_time)); - fflush(stderr); - - repeat_1_cb_called++; - - r = uv_timer_again(&repeat_2); - ASSERT(r == 0); - - if (repeat_1_cb_called == 10) { - uv_close((uv_handle_t*)handle, close_cb); - /* We're not calling uv_timer_again on repeat_2 any more, so after this - * timer_2_cb is expected. */ - repeat_2_cb_allowed = 1; - return; - } -} - - -static void repeat_2_cb(uv_timer_t* handle) { - ASSERT(handle == &repeat_2); - ASSERT(repeat_2_cb_allowed); - - fprintf(stderr, "repeat_2_cb called after %ld ms\n", - (long int)(uv_now(uv_default_loop()) - start_time)); - fflush(stderr); - - repeat_2_cb_called++; - - if (uv_timer_get_repeat(&repeat_2) == 0) { - ASSERT(0 == uv_is_active((uv_handle_t*) handle)); - uv_close((uv_handle_t*)handle, close_cb); - return; - } - - fprintf(stderr, "uv_timer_get_repeat %ld ms\n", - (long int)uv_timer_get_repeat(&repeat_2)); - fflush(stderr); - ASSERT(uv_timer_get_repeat(&repeat_2) == 100); - - /* This shouldn't take effect immediately. */ - uv_timer_set_repeat(&repeat_2, 0); -} - - -TEST_IMPL(timer_again) { - int r; - - start_time = uv_now(uv_default_loop()); - ASSERT(0 < start_time); - - /* Verify that it is not possible to uv_timer_again a never-started timer. */ - r = uv_timer_init(uv_default_loop(), &dummy); - ASSERT(r == 0); - r = uv_timer_again(&dummy); - ASSERT(r == UV_EINVAL); - uv_unref((uv_handle_t*)&dummy); - - /* Start timer repeat_1. */ - r = uv_timer_init(uv_default_loop(), &repeat_1); - ASSERT(r == 0); - r = uv_timer_start(&repeat_1, repeat_1_cb, 50, 0); - ASSERT(r == 0); - ASSERT(uv_timer_get_repeat(&repeat_1) == 0); - - /* Actually make repeat_1 repeating. */ - uv_timer_set_repeat(&repeat_1, 50); - ASSERT(uv_timer_get_repeat(&repeat_1) == 50); - - /* - * Start another repeating timer. It'll be again()ed by the repeat_1 so - * it should not time out until repeat_1 stops. - */ - r = uv_timer_init(uv_default_loop(), &repeat_2); - ASSERT(r == 0); - r = uv_timer_start(&repeat_2, repeat_2_cb, 100, 100); - ASSERT(r == 0); - ASSERT(uv_timer_get_repeat(&repeat_2) == 100); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(repeat_1_cb_called == 10); - ASSERT(repeat_2_cb_called == 2); - ASSERT(close_cb_called == 2); - - fprintf(stderr, "Test took %ld ms (expected ~700 ms)\n", - (long int)(uv_now(uv_default_loop()) - start_time)); - fflush(stderr); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-timer-from-check.c b/libuv/test/test-timer-from-check.c deleted file mode 100644 index a18c7e1..0000000 --- a/libuv/test/test-timer-from-check.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -static uv_prepare_t prepare_handle; -static uv_check_t check_handle; -static uv_timer_t timer_handle; - -static int prepare_cb_called; -static int check_cb_called; -static int timer_cb_called; - - -static void prepare_cb(uv_prepare_t* handle) { - ASSERT(0 == uv_prepare_stop(&prepare_handle)); - ASSERT(0 == prepare_cb_called); - ASSERT(1 == check_cb_called); - ASSERT(0 == timer_cb_called); - prepare_cb_called++; -} - - -static void timer_cb(uv_timer_t* handle) { - ASSERT(0 == uv_timer_stop(&timer_handle)); - ASSERT(1 == prepare_cb_called); - ASSERT(1 == check_cb_called); - ASSERT(0 == timer_cb_called); - timer_cb_called++; -} - - -static void check_cb(uv_check_t* handle) { - ASSERT(0 == uv_check_stop(&check_handle)); - ASSERT(0 == uv_timer_stop(&timer_handle)); /* Runs before timer_cb. */ - ASSERT(0 == uv_timer_start(&timer_handle, timer_cb, 50, 0)); - ASSERT(0 == uv_prepare_start(&prepare_handle, prepare_cb)); - ASSERT(0 == prepare_cb_called); - ASSERT(0 == check_cb_called); - ASSERT(0 == timer_cb_called); - check_cb_called++; -} - - -TEST_IMPL(timer_from_check) { - ASSERT(0 == uv_prepare_init(uv_default_loop(), &prepare_handle)); - ASSERT(0 == uv_check_init(uv_default_loop(), &check_handle)); - ASSERT(0 == uv_check_start(&check_handle, check_cb)); - ASSERT(0 == uv_timer_init(uv_default_loop(), &timer_handle)); - ASSERT(0 == uv_timer_start(&timer_handle, timer_cb, 50, 0)); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - ASSERT(1 == prepare_cb_called); - ASSERT(1 == check_cb_called); - ASSERT(1 == timer_cb_called); - uv_close((uv_handle_t*) &prepare_handle, NULL); - uv_close((uv_handle_t*) &check_handle, NULL); - uv_close((uv_handle_t*) &timer_handle, NULL); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_ONCE)); - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-timer.c b/libuv/test/test-timer.c deleted file mode 100644 index d0921a9..0000000 --- a/libuv/test/test-timer.c +++ /dev/null @@ -1,347 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - - -static int once_cb_called = 0; -static int once_close_cb_called = 0; -static int repeat_cb_called = 0; -static int repeat_close_cb_called = 0; -static int order_cb_called = 0; -static uint64_t start_time; -static uv_timer_t tiny_timer; -static uv_timer_t huge_timer1; -static uv_timer_t huge_timer2; - - -static void once_close_cb(uv_handle_t* handle) { - printf("ONCE_CLOSE_CB\n"); - - ASSERT_NOT_NULL(handle); - ASSERT(0 == uv_is_active(handle)); - - once_close_cb_called++; -} - - -static void once_cb(uv_timer_t* handle) { - printf("ONCE_CB %d\n", once_cb_called); - - ASSERT_NOT_NULL(handle); - ASSERT(0 == uv_is_active((uv_handle_t*) handle)); - - once_cb_called++; - - uv_close((uv_handle_t*)handle, once_close_cb); - - /* Just call this randomly for the code coverage. */ - uv_update_time(uv_default_loop()); -} - - -static void repeat_close_cb(uv_handle_t* handle) { - printf("REPEAT_CLOSE_CB\n"); - - ASSERT_NOT_NULL(handle); - - repeat_close_cb_called++; -} - - -static void repeat_cb(uv_timer_t* handle) { - printf("REPEAT_CB\n"); - - ASSERT_NOT_NULL(handle); - ASSERT(1 == uv_is_active((uv_handle_t*) handle)); - - repeat_cb_called++; - - if (repeat_cb_called == 5) { - uv_close((uv_handle_t*)handle, repeat_close_cb); - } -} - - -static void never_cb(uv_timer_t* handle) { - FATAL("never_cb should never be called"); -} - - -TEST_IMPL(timer) { - uv_timer_t once_timers[10]; - uv_timer_t *once; - uv_timer_t repeat, never; - unsigned int i; - int r; - - start_time = uv_now(uv_default_loop()); - ASSERT(0 < start_time); - - /* Let 10 timers time out in 500 ms total. */ - for (i = 0; i < ARRAY_SIZE(once_timers); i++) { - once = once_timers + i; - r = uv_timer_init(uv_default_loop(), once); - ASSERT(r == 0); - r = uv_timer_start(once, once_cb, i * 50, 0); - ASSERT(r == 0); - } - - /* The 11th timer is a repeating timer that runs 4 times */ - r = uv_timer_init(uv_default_loop(), &repeat); - ASSERT(r == 0); - r = uv_timer_start(&repeat, repeat_cb, 100, 100); - ASSERT(r == 0); - - /* The 12th timer should not do anything. */ - r = uv_timer_init(uv_default_loop(), &never); - ASSERT(r == 0); - r = uv_timer_start(&never, never_cb, 100, 100); - ASSERT(r == 0); - r = uv_timer_stop(&never); - ASSERT(r == 0); - uv_unref((uv_handle_t*)&never); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(once_cb_called == 10); - ASSERT(once_close_cb_called == 10); - printf("repeat_cb_called %d\n", repeat_cb_called); - ASSERT(repeat_cb_called == 5); - ASSERT(repeat_close_cb_called == 1); - - ASSERT(500 <= uv_now(uv_default_loop()) - start_time); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(timer_start_twice) { - uv_timer_t once; - int r; - - r = uv_timer_init(uv_default_loop(), &once); - ASSERT(r == 0); - r = uv_timer_start(&once, never_cb, 86400 * 1000, 0); - ASSERT(r == 0); - r = uv_timer_start(&once, once_cb, 10, 0); - ASSERT(r == 0); - r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); - ASSERT(r == 0); - - ASSERT(once_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(timer_init) { - uv_timer_t handle; - - ASSERT(0 == uv_timer_init(uv_default_loop(), &handle)); - ASSERT(0 == uv_timer_get_repeat(&handle)); - ASSERT_UINT64_LE(0, uv_timer_get_due_in(&handle)); - ASSERT(0 == uv_is_active((uv_handle_t*) &handle)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void order_cb_a(uv_timer_t *handle) { - ASSERT(order_cb_called++ == *(int*)handle->data); -} - - -static void order_cb_b(uv_timer_t *handle) { - ASSERT(order_cb_called++ == *(int*)handle->data); -} - - -TEST_IMPL(timer_order) { - int first; - int second; - uv_timer_t handle_a; - uv_timer_t handle_b; - - first = 0; - second = 1; - ASSERT(0 == uv_timer_init(uv_default_loop(), &handle_a)); - ASSERT(0 == uv_timer_init(uv_default_loop(), &handle_b)); - - /* Test for starting handle_a then handle_b */ - handle_a.data = &first; - ASSERT(0 == uv_timer_start(&handle_a, order_cb_a, 0, 0)); - handle_b.data = &second; - ASSERT(0 == uv_timer_start(&handle_b, order_cb_b, 0, 0)); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - ASSERT(order_cb_called == 2); - - ASSERT(0 == uv_timer_stop(&handle_a)); - ASSERT(0 == uv_timer_stop(&handle_b)); - - /* Test for starting handle_b then handle_a */ - order_cb_called = 0; - handle_b.data = &first; - ASSERT(0 == uv_timer_start(&handle_b, order_cb_b, 0, 0)); - - handle_a.data = &second; - ASSERT(0 == uv_timer_start(&handle_a, order_cb_a, 0, 0)); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - ASSERT(order_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void tiny_timer_cb(uv_timer_t* handle) { - ASSERT(handle == &tiny_timer); - uv_close((uv_handle_t*) &tiny_timer, NULL); - uv_close((uv_handle_t*) &huge_timer1, NULL); - uv_close((uv_handle_t*) &huge_timer2, NULL); -} - - -TEST_IMPL(timer_huge_timeout) { - ASSERT(0 == uv_timer_init(uv_default_loop(), &tiny_timer)); - ASSERT(0 == uv_timer_init(uv_default_loop(), &huge_timer1)); - ASSERT(0 == uv_timer_init(uv_default_loop(), &huge_timer2)); - ASSERT(0 == uv_timer_start(&tiny_timer, tiny_timer_cb, 1, 0)); - ASSERT(0 == uv_timer_start(&huge_timer1, tiny_timer_cb, 0xffffffffffffLL, 0)); - ASSERT(0 == uv_timer_start(&huge_timer2, tiny_timer_cb, (uint64_t) -1, 0)); - ASSERT_UINT64_EQ(1, uv_timer_get_due_in(&tiny_timer)); - ASSERT_UINT64_EQ(281474976710655, uv_timer_get_due_in(&huge_timer1)); - ASSERT_UINT64_LE(0, uv_timer_get_due_in(&huge_timer2)); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static void huge_repeat_cb(uv_timer_t* handle) { - static int ncalls; - - if (ncalls == 0) - ASSERT(handle == &huge_timer1); - else - ASSERT(handle == &tiny_timer); - - if (++ncalls == 10) { - uv_close((uv_handle_t*) &tiny_timer, NULL); - uv_close((uv_handle_t*) &huge_timer1, NULL); - } -} - - -TEST_IMPL(timer_huge_repeat) { - ASSERT(0 == uv_timer_init(uv_default_loop(), &tiny_timer)); - ASSERT(0 == uv_timer_init(uv_default_loop(), &huge_timer1)); - ASSERT(0 == uv_timer_start(&tiny_timer, huge_repeat_cb, 2, 2)); - ASSERT(0 == uv_timer_start(&huge_timer1, huge_repeat_cb, 1, (uint64_t) -1)); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static unsigned int timer_run_once_timer_cb_called; - - -static void timer_run_once_timer_cb(uv_timer_t* handle) { - timer_run_once_timer_cb_called++; -} - - -TEST_IMPL(timer_run_once) { - uv_timer_t timer_handle; - - ASSERT(0 == uv_timer_init(uv_default_loop(), &timer_handle)); - ASSERT(0 == uv_timer_start(&timer_handle, timer_run_once_timer_cb, 0, 0)); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_ONCE)); - ASSERT(1 == timer_run_once_timer_cb_called); - - ASSERT(0 == uv_timer_start(&timer_handle, timer_run_once_timer_cb, 1, 0)); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_ONCE)); - ASSERT(2 == timer_run_once_timer_cb_called); - - uv_close((uv_handle_t*) &timer_handle, NULL); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_ONCE)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(timer_is_closing) { - uv_timer_t handle; - - ASSERT(0 == uv_timer_init(uv_default_loop(), &handle)); - uv_close((uv_handle_t *)&handle, NULL); - - ASSERT(UV_EINVAL == uv_timer_start(&handle, never_cb, 100, 100)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(timer_null_callback) { - uv_timer_t handle; - - ASSERT(0 == uv_timer_init(uv_default_loop(), &handle)); - ASSERT(UV_EINVAL == uv_timer_start(&handle, NULL, 100, 100)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -static uint64_t timer_early_check_expected_time; - - -static void timer_early_check_cb(uv_timer_t* handle) { - uint64_t hrtime = uv_hrtime() / 1000000; - ASSERT(hrtime >= timer_early_check_expected_time); -} - - -TEST_IMPL(timer_early_check) { - uv_timer_t timer_handle; - const uint64_t timeout_ms = 10; - - timer_early_check_expected_time = uv_now(uv_default_loop()) + timeout_ms; - - ASSERT(0 == uv_timer_init(uv_default_loop(), &timer_handle)); - ASSERT(0 == uv_timer_start(&timer_handle, timer_early_check_cb, timeout_ms, 0)); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - uv_close((uv_handle_t*) &timer_handle, NULL); - ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-tmpdir.c b/libuv/test/test-tmpdir.c deleted file mode 100644 index 86f72e2..0000000 --- a/libuv/test/test-tmpdir.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - -#define PATHMAX 4096 -#define SMALLPATH 1 - -TEST_IMPL(tmpdir) { - char tmpdir[PATHMAX]; - size_t len; - char last; - int r; - - /* Test the normal case */ - len = sizeof tmpdir; - tmpdir[0] = '\0'; - - ASSERT(strlen(tmpdir) == 0); - r = uv_os_tmpdir(tmpdir, &len); - ASSERT(r == 0); - ASSERT(strlen(tmpdir) == len); - ASSERT(len > 0); - ASSERT(tmpdir[len] == '\0'); - - if (len > 1) { - last = tmpdir[len - 1]; -#ifdef _WIN32 - ASSERT(last != '\\'); -#else - ASSERT(last != '/'); -#endif - } - - /* Test the case where the buffer is too small */ - len = SMALLPATH; - r = uv_os_tmpdir(tmpdir, &len); - ASSERT(r == UV_ENOBUFS); - ASSERT(len > SMALLPATH); - - /* Test invalid inputs */ - r = uv_os_tmpdir(NULL, &len); - ASSERT(r == UV_EINVAL); - r = uv_os_tmpdir(tmpdir, NULL); - ASSERT(r == UV_EINVAL); - len = 0; - r = uv_os_tmpdir(tmpdir, &len); - ASSERT(r == UV_EINVAL); - -#ifdef _WIN32 - const char *name = "TMP"; - char tmpdir_win[] = "C:\\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; - r = uv_os_setenv(name, tmpdir_win); - ASSERT(r == 0); - char tmpdirx[PATHMAX]; - size_t lenx = sizeof tmpdirx; - r = uv_os_tmpdir(tmpdirx, &lenx); - ASSERT(r == 0); -#endif - - return 0; -} diff --git a/libuv/test/test-tty-duplicate-key.c b/libuv/test/test-tty-duplicate-key.c deleted file mode 100644 index efd79e1..0000000 --- a/libuv/test/test-tty-duplicate-key.c +++ /dev/null @@ -1,321 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifdef _WIN32 - -#include "uv.h" -#include "task.h" - -#include -#include -#include -#include - -#define ESC "\x1b" -#define EUR_UTF8 "\xe2\x82\xac" -#define EUR_UNICODE 0x20AC - - -const char* expect_str = NULL; -ssize_t expect_nread = 0; - -static void dump_str(const char* str, ssize_t len) { - ssize_t i; - for (i = 0; i < len; i++) { - fprintf(stderr, "%#02x ", *(str + i)); - } -} - -static void print_err_msg(const char* expect, ssize_t expect_len, - const char* found, ssize_t found_len) { - fprintf(stderr, "expect "); - dump_str(expect, expect_len); - fprintf(stderr, ", but found "); - dump_str(found, found_len); - fprintf(stderr, "\n"); -} - -static void tty_alloc(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - buf->base = malloc(size); - ASSERT_NOT_NULL(buf->base); - buf->len = size; -} - -static void tty_read(uv_stream_t* tty_in, ssize_t nread, const uv_buf_t* buf) { - if (nread > 0) { - if (nread != expect_nread) { - fprintf(stderr, "expected nread %ld, but found %ld\n", - (long)expect_nread, (long)nread); - print_err_msg(expect_str, expect_nread, buf->base, nread); - ASSERT(FALSE); - } - if (strncmp(buf->base, expect_str, nread) != 0) { - print_err_msg(expect_str, expect_nread, buf->base, nread); - ASSERT(FALSE); - } - uv_close((uv_handle_t*) tty_in, NULL); - } else { - ASSERT(nread == 0); - } -} - -static void make_key_event_records(WORD virt_key, DWORD ctr_key_state, - BOOL is_wsl, INPUT_RECORD* records) { -# define KEV(I) records[(I)].Event.KeyEvent - BYTE kb_state[256] = {0}; - WCHAR buf[2]; - int ret; - - records[0].EventType = records[1].EventType = KEY_EVENT; - KEV(0).bKeyDown = TRUE; - KEV(1).bKeyDown = FALSE; - KEV(0).wVirtualKeyCode = KEV(1).wVirtualKeyCode = virt_key; - KEV(0).wRepeatCount = KEV(1).wRepeatCount = 1; - KEV(0).wVirtualScanCode = KEV(1).wVirtualScanCode = - MapVirtualKeyW(virt_key, MAPVK_VK_TO_VSC); - KEV(0).dwControlKeyState = KEV(1).dwControlKeyState = ctr_key_state; - if (ctr_key_state & LEFT_ALT_PRESSED) { - kb_state[VK_LMENU] = 0x01; - } - if (ctr_key_state & RIGHT_ALT_PRESSED) { - kb_state[VK_RMENU] = 0x01; - } - if (ctr_key_state & LEFT_CTRL_PRESSED) { - kb_state[VK_LCONTROL] = 0x01; - } - if (ctr_key_state & RIGHT_CTRL_PRESSED) { - kb_state[VK_RCONTROL] = 0x01; - } - if (ctr_key_state & SHIFT_PRESSED) { - kb_state[VK_SHIFT] = 0x01; - } - ret = ToUnicode(virt_key, KEV(0).wVirtualScanCode, kb_state, buf, 2, 0); - if (ret == 1) { - if(!is_wsl && - ((ctr_key_state & LEFT_ALT_PRESSED) || - (ctr_key_state & RIGHT_ALT_PRESSED))) { - /* - * If ALT key is pressed, the UnicodeChar value of the keyup event is - * set to 0 on nomal console. Emulate this behavior. - * See https://github.com/Microsoft/console/issues/320 - */ - KEV(0).uChar.UnicodeChar = buf[0]; - KEV(1).uChar.UnicodeChar = 0; - } else{ - /* - * In WSL UnicodeChar is normally set. This behavior cause #2111. - */ - KEV(0).uChar.UnicodeChar = KEV(1).uChar.UnicodeChar = buf[0]; - } - } else { - KEV(0).uChar.UnicodeChar = KEV(1).uChar.UnicodeChar = 0; - } -# undef KEV -} - -TEST_IMPL(tty_duplicate_vt100_fn_key) { - int r; - int ttyin_fd; - uv_tty_t tty_in; - uv_loop_t* loop; - HANDLE handle; - INPUT_RECORD records[2]; - DWORD written; - - loop = uv_default_loop(); - - /* Make sure we have an FD that refers to a tty */ - handle = CreateFileA("conin$", - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - ASSERT(handle != INVALID_HANDLE_VALUE); - ttyin_fd = _open_osfhandle((intptr_t) handle, 0); - ASSERT(ttyin_fd >= 0); - ASSERT(UV_TTY == uv_guess_handle(ttyin_fd)); - - r = uv_tty_init(uv_default_loop(), &tty_in, ttyin_fd, 1); /* Readable. */ - ASSERT(r == 0); - ASSERT(uv_is_readable((uv_stream_t*) &tty_in)); - ASSERT(!uv_is_writable((uv_stream_t*) &tty_in)); - - r = uv_read_start((uv_stream_t*)&tty_in, tty_alloc, tty_read); - ASSERT(r == 0); - - expect_str = ESC"[[A"; - expect_nread = strlen(expect_str); - - /* Turn on raw mode. */ - r = uv_tty_set_mode(&tty_in, UV_TTY_MODE_RAW); - ASSERT(r == 0); - - /* - * Send F1 keystrokes. Test of issue cause by #2114 that vt100 fn key - * duplicate. - */ - make_key_event_records(VK_F1, 0, TRUE, records); - WriteConsoleInputW(handle, records, ARRAY_SIZE(records), &written); - ASSERT(written == ARRAY_SIZE(records)); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(tty_duplicate_alt_modifier_key) { - int r; - int ttyin_fd; - uv_tty_t tty_in; - uv_loop_t* loop; - HANDLE handle; - INPUT_RECORD records[2]; - INPUT_RECORD alt_records[2]; - DWORD written; - - loop = uv_default_loop(); - - /* Make sure we have an FD that refers to a tty */ - handle = CreateFileA("conin$", - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - ASSERT(handle != INVALID_HANDLE_VALUE); - ttyin_fd = _open_osfhandle((intptr_t) handle, 0); - ASSERT(ttyin_fd >= 0); - ASSERT(UV_TTY == uv_guess_handle(ttyin_fd)); - - r = uv_tty_init(uv_default_loop(), &tty_in, ttyin_fd, 1); /* Readable. */ - ASSERT(r == 0); - ASSERT(uv_is_readable((uv_stream_t*) &tty_in)); - ASSERT(!uv_is_writable((uv_stream_t*) &tty_in)); - - r = uv_read_start((uv_stream_t*)&tty_in, tty_alloc, tty_read); - ASSERT(r == 0); - - expect_str = ESC"a"ESC"a"; - expect_nread = strlen(expect_str); - - /* Turn on raw mode. */ - r = uv_tty_set_mode(&tty_in, UV_TTY_MODE_RAW); - ASSERT(r == 0); - - /* Emulate transmission of M-a at normal console */ - make_key_event_records(VK_MENU, 0, TRUE, alt_records); - WriteConsoleInputW(handle, &alt_records[0], 1, &written); - ASSERT(written == 1); - make_key_event_records(L'A', LEFT_ALT_PRESSED, FALSE, records); - WriteConsoleInputW(handle, records, ARRAY_SIZE(records), &written); - ASSERT(written == 2); - WriteConsoleInputW(handle, &alt_records[1], 1, &written); - ASSERT(written == 1); - - /* Emulate transmission of M-a at WSL(#2111) */ - make_key_event_records(VK_MENU, 0, TRUE, alt_records); - WriteConsoleInputW(handle, &alt_records[0], 1, &written); - ASSERT(written == 1); - make_key_event_records(L'A', LEFT_ALT_PRESSED, TRUE, records); - WriteConsoleInputW(handle, records, ARRAY_SIZE(records), &written); - ASSERT(written == 2); - WriteConsoleInputW(handle, &alt_records[1], 1, &written); - ASSERT(written == 1); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(tty_composing_character) { - int r; - int ttyin_fd; - uv_tty_t tty_in; - uv_loop_t* loop; - HANDLE handle; - INPUT_RECORD records[2]; - INPUT_RECORD alt_records[2]; - DWORD written; - - loop = uv_default_loop(); - - /* Make sure we have an FD that refers to a tty */ - handle = CreateFileA("conin$", - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - ASSERT(handle != INVALID_HANDLE_VALUE); - ttyin_fd = _open_osfhandle((intptr_t) handle, 0); - ASSERT(ttyin_fd >= 0); - ASSERT(UV_TTY == uv_guess_handle(ttyin_fd)); - - r = uv_tty_init(uv_default_loop(), &tty_in, ttyin_fd, 1); /* Readable. */ - ASSERT(r == 0); - ASSERT(uv_is_readable((uv_stream_t*) &tty_in)); - ASSERT(!uv_is_writable((uv_stream_t*) &tty_in)); - - r = uv_read_start((uv_stream_t*)&tty_in, tty_alloc, tty_read); - ASSERT(r == 0); - - expect_str = EUR_UTF8; - expect_nread = strlen(expect_str); - - /* Turn on raw mode. */ - r = uv_tty_set_mode(&tty_in, UV_TTY_MODE_RAW); - ASSERT(r == 0); - - /* Emulate EUR inputs by LEFT ALT+NUMPAD ASCII KeyComos */ - make_key_event_records(VK_MENU, 0, FALSE, alt_records); - alt_records[1].Event.KeyEvent.uChar.UnicodeChar = EUR_UNICODE; - WriteConsoleInputW(handle, &alt_records[0], 1, &written); - make_key_event_records(VK_NUMPAD0, LEFT_ALT_PRESSED, FALSE, records); - WriteConsoleInputW(handle, records, ARRAY_SIZE(records), &written); - ASSERT(written == ARRAY_SIZE(records)); - make_key_event_records(VK_NUMPAD1, LEFT_ALT_PRESSED, FALSE, records); - WriteConsoleInputW(handle, records, ARRAY_SIZE(records), &written); - ASSERT(written == ARRAY_SIZE(records)); - make_key_event_records(VK_NUMPAD2, LEFT_ALT_PRESSED, FALSE, records); - WriteConsoleInputW(handle, records, ARRAY_SIZE(records), &written); - ASSERT(written == ARRAY_SIZE(records)); - make_key_event_records(VK_NUMPAD8, LEFT_ALT_PRESSED, FALSE, records); - WriteConsoleInputW(handle, records, ARRAY_SIZE(records), &written); - ASSERT(written == ARRAY_SIZE(records)); - WriteConsoleInputW(handle, &alt_records[1], 1, &written); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#else - -typedef int file_has_no_tests; /* ISO C forbids an empty translation unit. */ - -#endif /* ifndef _WIN32 */ diff --git a/libuv/test/test-tty-escape-sequence-processing.c b/libuv/test/test-tty-escape-sequence-processing.c deleted file mode 100644 index ef34e59..0000000 --- a/libuv/test/test-tty-escape-sequence-processing.c +++ /dev/null @@ -1,1621 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#ifdef _WIN32 - -#include "task.h" -#include "uv.h" - -#include -#include - -#include -#include - -#define ESC "\033" -#define CSI ESC "[" -#define ST ESC "\\" -#define BEL "\x07" -#define HELLO "Hello" - -#define FOREGROUND_WHITE (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE) -#define FOREGROUND_BLACK 0 -#define FOREGROUND_YELLOW (FOREGROUND_RED | FOREGROUND_GREEN) -#define FOREGROUND_CYAN (FOREGROUND_GREEN | FOREGROUND_BLUE) -#define FOREGROUND_MAGENTA (FOREGROUND_RED | FOREGROUND_BLUE) -#define BACKGROUND_WHITE (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE) -#define BACKGROUND_BLACK 0 -#define BACKGROUND_YELLOW (BACKGROUND_RED | BACKGROUND_GREEN) -#define BACKGROUND_CYAN (BACKGROUND_GREEN | BACKGROUND_BLUE) -#define BACKGROUND_MAGENTA (BACKGROUND_RED | BACKGROUND_BLUE) - -#define F_INTENSITY 1 -#define FB_INTENSITY 2 -#define B_INTENSITY 5 -#define INVERSE 7 -#define F_INTENSITY_OFF1 21 -#define F_INTENSITY_OFF2 22 -#define B_INTENSITY_OFF 25 -#define INVERSE_OFF 27 -#define F_BLACK 30 -#define F_RED 31 -#define F_GREEN 32 -#define F_YELLOW 33 -#define F_BLUE 34 -#define F_MAGENTA 35 -#define F_CYAN 36 -#define F_WHITE 37 -#define F_DEFAULT 39 -#define B_BLACK 40 -#define B_RED 41 -#define B_GREEN 42 -#define B_YELLOW 43 -#define B_BLUE 44 -#define B_MAGENTA 45 -#define B_CYAN 46 -#define B_WHITE 47 -#define B_DEFAULT 49 - -#define CURSOR_SIZE_SMALL 25 -#define CURSOR_SIZE_MIDDLE 50 -#define CURSOR_SIZE_LARGE 100 - -struct screen_info { - CONSOLE_SCREEN_BUFFER_INFO csbi; - int top; - int width; - int height; - int length; - WORD default_attr; -}; - -struct captured_screen { - char* text; - WORD* attributes; - struct screen_info si; -}; - -static void get_screen_info(uv_tty_t* tty_out, struct screen_info* si) { - ASSERT(GetConsoleScreenBufferInfo(tty_out->handle, &(si->csbi))); - si->width = si->csbi.dwSize.X; - si->height = si->csbi.srWindow.Bottom - si->csbi.srWindow.Top + 1; - si->length = si->width * si->height; - si->default_attr = si->csbi.wAttributes; - si->top = si->csbi.srWindow.Top; -} - -static void set_cursor_position(uv_tty_t* tty_out, COORD pos) { - HANDLE handle = tty_out->handle; - CONSOLE_SCREEN_BUFFER_INFO info; - ASSERT(GetConsoleScreenBufferInfo(handle, &info)); - pos.X -= 1; - pos.Y += info.srWindow.Top - 1; - ASSERT(SetConsoleCursorPosition(handle, pos)); -} - -static void get_cursor_position(uv_tty_t* tty_out, COORD* cursor_position) { - HANDLE handle = tty_out->handle; - CONSOLE_SCREEN_BUFFER_INFO info; - ASSERT(GetConsoleScreenBufferInfo(handle, &info)); - cursor_position->X = info.dwCursorPosition.X + 1; - cursor_position->Y = info.dwCursorPosition.Y - info.srWindow.Top + 1; -} - -static void set_cursor_to_home(uv_tty_t* tty_out) { - COORD origin = {1, 1}; - set_cursor_position(tty_out, origin); -} - -static CONSOLE_CURSOR_INFO get_cursor_info(uv_tty_t* tty_out) { - HANDLE handle = tty_out->handle; - CONSOLE_CURSOR_INFO info; - ASSERT(GetConsoleCursorInfo(handle, &info)); - return info; -} - -static void set_cursor_size(uv_tty_t* tty_out, DWORD size) { - CONSOLE_CURSOR_INFO info = get_cursor_info(tty_out); - info.dwSize = size; - ASSERT(SetConsoleCursorInfo(tty_out->handle, &info)); -} - -static DWORD get_cursor_size(uv_tty_t* tty_out) { - return get_cursor_info(tty_out).dwSize; -} - -static void set_cursor_visibility(uv_tty_t* tty_out, BOOL visible) { - CONSOLE_CURSOR_INFO info = get_cursor_info(tty_out); - info.bVisible = visible; - ASSERT(SetConsoleCursorInfo(tty_out->handle, &info)); -} - -static BOOL get_cursor_visibility(uv_tty_t* tty_out) { - return get_cursor_info(tty_out).bVisible; -} - -static BOOL is_scrolling(uv_tty_t* tty_out, struct screen_info si) { - CONSOLE_SCREEN_BUFFER_INFO info; - ASSERT(GetConsoleScreenBufferInfo(tty_out->handle, &info)); - return info.srWindow.Top != si.top; -} - -static void write_console(uv_tty_t* tty_out, char* src) { - int r; - uv_buf_t buf; - - buf.base = src; - buf.len = strlen(buf.base); - - r = uv_try_write((uv_stream_t*) tty_out, &buf, 1); - ASSERT(r >= 0); - ASSERT((unsigned int) r == buf.len); -} - -static void setup_screen(uv_tty_t* tty_out) { - DWORD length, number_of_written; - COORD origin; - CONSOLE_SCREEN_BUFFER_INFO info; - ASSERT(GetConsoleScreenBufferInfo(tty_out->handle, &info)); - length = info.dwSize.X * (info.srWindow.Bottom - info.srWindow.Top + 1); - origin.X = 0; - origin.Y = info.srWindow.Top; - ASSERT(FillConsoleOutputCharacter( - tty_out->handle, '.', length, origin, &number_of_written)); - ASSERT(length == number_of_written); -} - -static void clear_screen(uv_tty_t* tty_out, struct screen_info* si) { - DWORD length, number_of_written; - COORD origin; - CONSOLE_SCREEN_BUFFER_INFO info; - ASSERT(GetConsoleScreenBufferInfo(tty_out->handle, &info)); - length = (info.srWindow.Bottom - info.srWindow.Top + 1) * info.dwSize.X - 1; - origin.X = 0; - origin.Y = info.srWindow.Top; - FillConsoleOutputCharacterA( - tty_out->handle, ' ', length, origin, &number_of_written); - ASSERT(length == number_of_written); - FillConsoleOutputAttribute( - tty_out->handle, si->default_attr, length, origin, &number_of_written); - ASSERT(length == number_of_written); -} - -static void free_screen(struct captured_screen* cs) { - free(cs->text); - cs->text = NULL; - free(cs->attributes); - cs->attributes = NULL; -} - -static void capture_screen(uv_tty_t* tty_out, struct captured_screen* cs) { - DWORD length; - COORD origin; - get_screen_info(tty_out, &(cs->si)); - origin.X = 0; - origin.Y = cs->si.csbi.srWindow.Top; - cs->text = malloc(cs->si.length * sizeof(*cs->text)); - ASSERT_NOT_NULL(cs->text); - cs->attributes = (WORD*) malloc(cs->si.length * sizeof(*cs->attributes)); - ASSERT_NOT_NULL(cs->attributes); - ASSERT(ReadConsoleOutputCharacter( - tty_out->handle, cs->text, cs->si.length, origin, &length)); - ASSERT((unsigned int) cs->si.length == length); - ASSERT(ReadConsoleOutputAttribute( - tty_out->handle, cs->attributes, cs->si.length, origin, &length)); - ASSERT((unsigned int) cs->si.length == length); -} - -static void make_expect_screen_erase(struct captured_screen* cs, - COORD cursor_position, - int dir, - BOOL entire_screen) { - /* beginning of line */ - char* start; - char* end; - start = cs->text + cs->si.width * (cursor_position.Y - 1); - if (dir == 0) { - if (entire_screen) { - /* erase to end of screen */ - end = cs->text + cs->si.length; - } else { - /* erase to end of line */ - end = start + cs->si.width; - } - /* erase from postition of cursor */ - start += cursor_position.X - 1; - } else if (dir == 1) { - /* erase to position of cursor */ - end = start + cursor_position.X; - if (entire_screen) { - /* erase form beginning of screen */ - start = cs->text; - } - } else if (dir == 2) { - if (entire_screen) { - /* erase form beginning of screen */ - start = cs->text; - /* erase to end of screen */ - end = cs->text + cs->si.length; - } else { - /* erase to end of line */ - end = start + cs->si.width; - } - } else { - ASSERT(FALSE); - } - ASSERT(start < end); - ASSERT(end - cs->text <= cs->si.length); - for (; start < end; start++) { - *start = ' '; - } -} - -static void make_expect_screen_write(struct captured_screen* cs, - COORD cursor_position, - const char* text) { - /* postion of cursor */ - char* start; - start = cs->text + cs->si.width * (cursor_position.Y - 1) + - cursor_position.X - 1; - size_t length = strlen(text); - size_t remain_length = cs->si.length - (cs->text - start); - length = length > remain_length ? remain_length : length; - memcpy(start, text, length); -} - -static void make_expect_screen_set_attr(struct captured_screen* cs, - COORD cursor_position, - size_t length, - WORD attr) { - WORD* start; - start = cs->attributes + cs->si.width * (cursor_position.Y - 1) + - cursor_position.X - 1; - size_t remain_length = cs->si.length - (cs->attributes - start); - length = length > remain_length ? remain_length : length; - while (length) { - *start = attr; - start++; - length--; - } -} - -static BOOL compare_screen(uv_tty_t* tty_out, - struct captured_screen* actual, - struct captured_screen* expect) { - int line, col; - BOOL result = TRUE; - int current = 0; - ASSERT(actual->text); - ASSERT(actual->attributes); - ASSERT(expect->text); - ASSERT(expect->attributes); - if (actual->si.length != expect->si.length) { - return FALSE; - } - if (actual->si.width != expect->si.width) { - return FALSE; - } - if (actual->si.height != expect->si.height) { - return FALSE; - } - while (current < actual->si.length) { - if (*(actual->text + current) != *(expect->text + current)) { - line = current / actual->si.width + 1; - col = current - actual->si.width * (line - 1) + 1; - fprintf(stderr, - "line:%d col:%d expected character '%c' but found '%c'\n", - line, - col, - *(expect->text + current), - *(actual->text + current)); - result = FALSE; - } - if (*(actual->attributes + current) != *(expect->attributes + current)) { - line = current / actual->si.width + 1; - col = current - actual->si.width * (line - 1) + 1; - fprintf(stderr, - "line:%d col:%d expected attributes '%u' but found '%u'\n", - line, - col, - *(expect->attributes + current), - *(actual->attributes + current)); - result = FALSE; - } - current++; - } - clear_screen(tty_out, &expect->si); - free_screen(expect); - free_screen(actual); - return result; -} - -static void initialize_tty(uv_tty_t* tty_out) { - int r; - int ttyout_fd; - /* Make sure we have an FD that refers to a tty */ - HANDLE handle; - - uv_tty_set_vterm_state(UV_TTY_UNSUPPORTED); - - handle = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - CONSOLE_TEXTMODE_BUFFER, - NULL); - ASSERT(handle != INVALID_HANDLE_VALUE); - - ttyout_fd = _open_osfhandle((intptr_t) handle, 0); - ASSERT(ttyout_fd >= 0); - ASSERT(UV_TTY == uv_guess_handle(ttyout_fd)); - r = uv_tty_init(uv_default_loop(), tty_out, ttyout_fd, 0); /* Writable. */ - ASSERT(r == 0); -} - -static void terminate_tty(uv_tty_t* tty_out) { - set_cursor_to_home(tty_out); - uv_close((uv_handle_t*) tty_out, NULL); -} - -TEST_IMPL(tty_cursor_up) { - uv_tty_t tty_out; - uv_loop_t* loop; - COORD cursor_pos, cursor_pos_old; - char buffer[1024]; - struct screen_info si; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - get_screen_info(&tty_out, &si); - - cursor_pos_old.X = si.width / 2; - cursor_pos_old.Y = si.height / 2; - set_cursor_position(&tty_out, cursor_pos_old); - - /* cursor up one times if omitted arguments */ - snprintf(buffer, sizeof(buffer), "%sA", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y - 1 == cursor_pos.Y); - ASSERT(cursor_pos_old.X == cursor_pos.X); - - /* cursor up nth times */ - cursor_pos_old = cursor_pos; - snprintf(buffer, sizeof(buffer), "%s%dA", CSI, si.height / 4); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y - si.height / 4 == cursor_pos.Y); - ASSERT(cursor_pos_old.X == cursor_pos.X); - - /* cursor up from Window top does nothing */ - cursor_pos_old.X = 1; - cursor_pos_old.Y = 1; - set_cursor_position(&tty_out, cursor_pos_old); - snprintf(buffer, sizeof(buffer), "%sA", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y == cursor_pos.Y); - ASSERT(cursor_pos_old.X == cursor_pos.X); - ASSERT(!is_scrolling(&tty_out, si)); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_cursor_down) { - uv_tty_t tty_out; - uv_loop_t* loop; - COORD cursor_pos, cursor_pos_old; - char buffer[1024]; - struct screen_info si; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - get_screen_info(&tty_out, &si); - - cursor_pos_old.X = si.width / 2; - cursor_pos_old.Y = si.height / 2; - set_cursor_position(&tty_out, cursor_pos_old); - - /* cursor down one times if omitted arguments */ - snprintf(buffer, sizeof(buffer), "%sB", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y + 1 == cursor_pos.Y); - ASSERT(cursor_pos_old.X == cursor_pos.X); - - /* cursor down nth times */ - cursor_pos_old = cursor_pos; - snprintf(buffer, sizeof(buffer), "%s%dB", CSI, si.height / 4); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y + si.height / 4 == cursor_pos.Y); - ASSERT(cursor_pos_old.X == cursor_pos.X); - - /* cursor down from bottom line does nothing */ - cursor_pos_old.X = si.width / 2; - cursor_pos_old.Y = si.height; - set_cursor_position(&tty_out, cursor_pos_old); - snprintf(buffer, sizeof(buffer), "%sB", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y == cursor_pos.Y); - ASSERT(cursor_pos_old.X == cursor_pos.X); - ASSERT(!is_scrolling(&tty_out, si)); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_cursor_forward) { - uv_tty_t tty_out; - uv_loop_t* loop; - COORD cursor_pos, cursor_pos_old; - char buffer[1024]; - struct screen_info si; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - get_screen_info(&tty_out, &si); - - cursor_pos_old.X = si.width / 2; - cursor_pos_old.Y = si.height / 2; - set_cursor_position(&tty_out, cursor_pos_old); - - /* cursor forward one times if omitted arguments */ - snprintf(buffer, sizeof(buffer), "%sC", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y == cursor_pos.Y); - ASSERT(cursor_pos_old.X + 1 == cursor_pos.X); - - /* cursor forward nth times */ - cursor_pos_old = cursor_pos; - snprintf(buffer, sizeof(buffer), "%s%dC", CSI, si.width / 4); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y == cursor_pos.Y); - ASSERT(cursor_pos_old.X + si.width / 4 == cursor_pos.X); - - /* cursor forward from end of line does nothing*/ - cursor_pos_old.X = si.width; - cursor_pos_old.Y = si.height / 2; - set_cursor_position(&tty_out, cursor_pos_old); - snprintf(buffer, sizeof(buffer), "%sC", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y == cursor_pos.Y); - ASSERT(cursor_pos_old.X == cursor_pos.X); - - /* cursor forward from end of screen does nothing */ - cursor_pos_old.X = si.width; - cursor_pos_old.Y = si.height; - set_cursor_position(&tty_out, cursor_pos_old); - snprintf(buffer, sizeof(buffer), "%sC", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y == cursor_pos.Y); - ASSERT(cursor_pos_old.X == cursor_pos.X); - ASSERT(!is_scrolling(&tty_out, si)); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_cursor_back) { - uv_tty_t tty_out; - uv_loop_t* loop; - COORD cursor_pos, cursor_pos_old; - char buffer[1024]; - struct screen_info si; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - get_screen_info(&tty_out, &si); - - cursor_pos_old.X = si.width / 2; - cursor_pos_old.Y = si.height / 2; - set_cursor_position(&tty_out, cursor_pos_old); - - /* cursor back one times if omitted arguments */ - snprintf(buffer, sizeof(buffer), "%sD", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y == cursor_pos.Y); - ASSERT(cursor_pos_old.X - 1 == cursor_pos.X); - - /* cursor back nth times */ - cursor_pos_old = cursor_pos; - snprintf(buffer, sizeof(buffer), "%s%dD", CSI, si.width / 4); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y == cursor_pos.Y); - ASSERT(cursor_pos_old.X - si.width / 4 == cursor_pos.X); - - /* cursor back from beginning of line does nothing */ - cursor_pos_old.X = 1; - cursor_pos_old.Y = si.height / 2; - set_cursor_position(&tty_out, cursor_pos_old); - snprintf(buffer, sizeof(buffer), "%sD", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y == cursor_pos.Y); - ASSERT(cursor_pos_old.X == cursor_pos.X); - - /* cursor back from top of screen does nothing */ - cursor_pos_old.X = 1; - cursor_pos_old.Y = 1; - set_cursor_position(&tty_out, cursor_pos_old); - snprintf(buffer, sizeof(buffer), "%sD", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(1 == cursor_pos.Y); - ASSERT(1 == cursor_pos.X); - ASSERT(!is_scrolling(&tty_out, si)); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_cursor_next_line) { - uv_tty_t tty_out; - uv_loop_t* loop; - COORD cursor_pos, cursor_pos_old; - char buffer[1024]; - struct screen_info si; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - get_screen_info(&tty_out, &si); - - cursor_pos_old.X = si.width / 2; - cursor_pos_old.Y = si.height / 2; - set_cursor_position(&tty_out, cursor_pos_old); - - /* cursor next line one times if omitted arguments */ - snprintf(buffer, sizeof(buffer), "%sE", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y + 1 == cursor_pos.Y); - ASSERT(1 == cursor_pos.X); - - /* cursor next line nth times */ - cursor_pos_old = cursor_pos; - snprintf(buffer, sizeof(buffer), "%s%dE", CSI, si.height / 4); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y + si.height / 4 == cursor_pos.Y); - ASSERT(1 == cursor_pos.X); - - /* cursor next line from buttom row moves beginning of line */ - cursor_pos_old.X = si.width / 2; - cursor_pos_old.Y = si.height; - set_cursor_position(&tty_out, cursor_pos_old); - snprintf(buffer, sizeof(buffer), "%sE", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y == cursor_pos.Y); - ASSERT(1 == cursor_pos.X); - ASSERT(!is_scrolling(&tty_out, si)); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_cursor_previous_line) { - uv_tty_t tty_out; - uv_loop_t* loop; - COORD cursor_pos, cursor_pos_old; - char buffer[1024]; - struct screen_info si; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - get_screen_info(&tty_out, &si); - - cursor_pos_old.X = si.width / 2; - cursor_pos_old.Y = si.height / 2; - set_cursor_position(&tty_out, cursor_pos_old); - - /* cursor previous line one times if omitted arguments */ - snprintf(buffer, sizeof(buffer), "%sF", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y - 1 == cursor_pos.Y); - ASSERT(1 == cursor_pos.X); - - /* cursor previous line nth times */ - cursor_pos_old = cursor_pos; - snprintf(buffer, sizeof(buffer), "%s%dF", CSI, si.height / 4); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos_old.Y - si.height / 4 == cursor_pos.Y); - ASSERT(1 == cursor_pos.X); - - /* cursor previous line from top of screen does nothing */ - cursor_pos_old.X = 1; - cursor_pos_old.Y = 1; - set_cursor_position(&tty_out, cursor_pos_old); - snprintf(buffer, sizeof(buffer), "%sD", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(1 == cursor_pos.Y); - ASSERT(1 == cursor_pos.X); - ASSERT(!is_scrolling(&tty_out, si)); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_cursor_horizontal_move_absolute) { - uv_tty_t tty_out; - uv_loop_t* loop; - COORD cursor_pos, cursor_pos_old; - char buffer[1024]; - struct screen_info si; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - get_screen_info(&tty_out, &si); - - cursor_pos_old.X = si.width / 2; - cursor_pos_old.Y = si.height / 2; - set_cursor_position(&tty_out, cursor_pos_old); - - /* Move to beginning of line if omitted argument */ - snprintf(buffer, sizeof(buffer), "%sG", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(1 == cursor_pos.X); - ASSERT(cursor_pos_old.Y == cursor_pos.Y); - - /* Move cursor to nth character */ - snprintf(buffer, sizeof(buffer), "%s%dG", CSI, si.width / 4); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(si.width / 4 == cursor_pos.X); - ASSERT(cursor_pos_old.Y == cursor_pos.Y); - - /* Moving out of screen will fit within screen */ - snprintf(buffer, sizeof(buffer), "%s%dG", CSI, si.width + 1); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(si.width == cursor_pos.X); - ASSERT(cursor_pos_old.Y == cursor_pos.Y); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_cursor_move_absolute) { - uv_tty_t tty_out; - uv_loop_t* loop; - COORD cursor_pos; - char buffer[1024]; - struct screen_info si; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - get_screen_info(&tty_out, &si); - - cursor_pos.X = si.width / 2; - cursor_pos.Y = si.height / 2; - set_cursor_position(&tty_out, cursor_pos); - - /* Move the cursor to home if omitted arguments */ - snprintf(buffer, sizeof(buffer), "%sH", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(1 == cursor_pos.X); - ASSERT(1 == cursor_pos.Y); - - /* Move the cursor to the middle of the screen */ - snprintf( - buffer, sizeof(buffer), "%s%d;%df", CSI, si.height / 2, si.width / 2); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(si.width / 2 == cursor_pos.X); - ASSERT(si.height / 2 == cursor_pos.Y); - - /* Moving out of screen will fit within screen */ - snprintf( - buffer, sizeof(buffer), "%s%d;%df", CSI, si.height / 2, si.width + 1); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(si.width == cursor_pos.X); - ASSERT(si.height / 2 == cursor_pos.Y); - - snprintf( - buffer, sizeof(buffer), "%s%d;%df", CSI, si.height + 1, si.width / 2); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(si.width / 2 == cursor_pos.X); - ASSERT(si.height == cursor_pos.Y); - ASSERT(!is_scrolling(&tty_out, si)); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_hide_show_cursor) { - uv_tty_t tty_out; - uv_loop_t* loop; - char buffer[1024]; - BOOL saved_cursor_visibility; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - - saved_cursor_visibility = get_cursor_visibility(&tty_out); - - /* Hide the cursor */ - set_cursor_visibility(&tty_out, TRUE); - snprintf(buffer, sizeof(buffer), "%s?25l", CSI); - write_console(&tty_out, buffer); - ASSERT(!get_cursor_visibility(&tty_out)); - - /* Show the cursor */ - set_cursor_visibility(&tty_out, FALSE); - snprintf(buffer, sizeof(buffer), "%s?25h", CSI); - write_console(&tty_out, buffer); - ASSERT(get_cursor_visibility(&tty_out)); - - set_cursor_visibility(&tty_out, saved_cursor_visibility); - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_erase) { - int dir; - uv_tty_t tty_out; - uv_loop_t* loop; - COORD cursor_pos; - char buffer[1024]; - struct captured_screen actual = {0}, expect = {0}; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - - /* Erase to below if omitted argument */ - dir = 0; - setup_screen(&tty_out); - capture_screen(&tty_out, &expect); - cursor_pos.X = expect.si.width / 2; - cursor_pos.Y = expect.si.height / 2; - make_expect_screen_erase(&expect, cursor_pos, dir, TRUE); - - set_cursor_position(&tty_out, cursor_pos); - snprintf(buffer, sizeof(buffer), "%sJ", CSI); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* Erase to below(dir = 0) */ - setup_screen(&tty_out); - capture_screen(&tty_out, &expect); - make_expect_screen_erase(&expect, cursor_pos, dir, TRUE); - - set_cursor_position(&tty_out, cursor_pos); - snprintf(buffer, sizeof(buffer), "%s%dJ", CSI, dir); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* Erase to above */ - dir = 1; - setup_screen(&tty_out); - capture_screen(&tty_out, &expect); - make_expect_screen_erase(&expect, cursor_pos, dir, TRUE); - - set_cursor_position(&tty_out, cursor_pos); - snprintf(buffer, sizeof(buffer), "%s%dJ", CSI, dir); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* Erase All */ - dir = 2; - setup_screen(&tty_out); - capture_screen(&tty_out, &expect); - make_expect_screen_erase(&expect, cursor_pos, dir, TRUE); - - set_cursor_position(&tty_out, cursor_pos); - snprintf(buffer, sizeof(buffer), "%s%dJ", CSI, dir); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_erase_line) { - int dir; - uv_tty_t tty_out; - uv_loop_t* loop; - COORD cursor_pos; - char buffer[1024]; - struct captured_screen actual = {0}, expect = {0}; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - - /* Erase to right if omitted arguments */ - dir = 0; - setup_screen(&tty_out); - capture_screen(&tty_out, &expect); - cursor_pos.X = expect.si.width / 2; - cursor_pos.Y = expect.si.height / 2; - make_expect_screen_erase(&expect, cursor_pos, dir, FALSE); - - set_cursor_position(&tty_out, cursor_pos); - snprintf(buffer, sizeof(buffer), "%sK", CSI); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* Erase to right(dir = 0) */ - setup_screen(&tty_out); - capture_screen(&tty_out, &expect); - make_expect_screen_erase(&expect, cursor_pos, dir, FALSE); - - set_cursor_position(&tty_out, cursor_pos); - snprintf(buffer, sizeof(buffer), "%s%dK", CSI, dir); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* Erase to Left */ - dir = 1; - setup_screen(&tty_out); - capture_screen(&tty_out, &expect); - make_expect_screen_erase(&expect, cursor_pos, dir, FALSE); - - set_cursor_position(&tty_out, cursor_pos); - snprintf(buffer, sizeof(buffer), "%s%dK", CSI, dir); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* Erase All */ - dir = 2; - setup_screen(&tty_out); - capture_screen(&tty_out, &expect); - make_expect_screen_erase(&expect, cursor_pos, dir, FALSE); - - set_cursor_position(&tty_out, cursor_pos); - snprintf(buffer, sizeof(buffer), "%s%dK", CSI, dir); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_set_cursor_shape) { - uv_tty_t tty_out; - uv_loop_t* loop; - DWORD saved_cursor_size; - char buffer[1024]; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - - saved_cursor_size = get_cursor_size(&tty_out); - - /* cursor size large if omitted arguments */ - set_cursor_size(&tty_out, CURSOR_SIZE_MIDDLE); - snprintf(buffer, sizeof(buffer), "%s q", CSI); - write_console(&tty_out, buffer); - ASSERT(get_cursor_size(&tty_out) == CURSOR_SIZE_LARGE); - - /* cursor size large */ - set_cursor_size(&tty_out, CURSOR_SIZE_MIDDLE); - snprintf(buffer, sizeof(buffer), "%s1 q", CSI); - write_console(&tty_out, buffer); - ASSERT(get_cursor_size(&tty_out) == CURSOR_SIZE_LARGE); - set_cursor_size(&tty_out, CURSOR_SIZE_MIDDLE); - snprintf(buffer, sizeof(buffer), "%s2 q", CSI); - write_console(&tty_out, buffer); - ASSERT(get_cursor_size(&tty_out) == CURSOR_SIZE_LARGE); - - /* cursor size small */ - set_cursor_size(&tty_out, CURSOR_SIZE_MIDDLE); - snprintf(buffer, sizeof(buffer), "%s3 q", CSI); - write_console(&tty_out, buffer); - ASSERT(get_cursor_size(&tty_out) == CURSOR_SIZE_SMALL); - set_cursor_size(&tty_out, CURSOR_SIZE_MIDDLE); - snprintf(buffer, sizeof(buffer), "%s6 q", CSI); - write_console(&tty_out, buffer); - ASSERT(get_cursor_size(&tty_out) == CURSOR_SIZE_SMALL); - - /* Nothing occurs with arguments outside valid range */ - set_cursor_size(&tty_out, CURSOR_SIZE_MIDDLE); - snprintf(buffer, sizeof(buffer), "%s7 q", CSI); - write_console(&tty_out, buffer); - ASSERT(get_cursor_size(&tty_out) == CURSOR_SIZE_MIDDLE); - - /* restore cursor size if arguments is zero */ - snprintf(buffer, sizeof(buffer), "%s0 q", CSI); - write_console(&tty_out, buffer); - ASSERT(get_cursor_size(&tty_out) == saved_cursor_size); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_set_style) { - uv_tty_t tty_out; - uv_loop_t* loop; - COORD cursor_pos; - char buffer[1024]; - struct captured_screen actual = {0}, expect = {0}; - WORD fg, bg; - WORD fg_attrs[9][2] = {{F_BLACK, FOREGROUND_BLACK}, - {F_RED, FOREGROUND_RED}, - {F_GREEN, FOREGROUND_GREEN}, - {F_YELLOW, FOREGROUND_YELLOW}, - {F_BLUE, FOREGROUND_BLUE}, - {F_MAGENTA, FOREGROUND_MAGENTA}, - {F_CYAN, FOREGROUND_CYAN}, - {F_WHITE, FOREGROUND_WHITE}, - {F_DEFAULT, 0}}; - WORD bg_attrs[9][2] = {{B_DEFAULT, 0}, - {B_BLACK, BACKGROUND_BLACK}, - {B_RED, BACKGROUND_RED}, - {B_GREEN, BACKGROUND_GREEN}, - {B_YELLOW, BACKGROUND_YELLOW}, - {B_BLUE, BACKGROUND_BLUE}, - {B_MAGENTA, BACKGROUND_MAGENTA}, - {B_CYAN, BACKGROUND_CYAN}, - {B_WHITE, BACKGROUND_WHITE}}; - WORD attr; - int i, length; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - - capture_screen(&tty_out, &expect); - fg_attrs[8][1] = expect.si.default_attr & FOREGROUND_WHITE; - bg_attrs[0][1] = expect.si.default_attr & BACKGROUND_WHITE; - - /* Set foreground color */ - length = ARRAY_SIZE(fg_attrs); - for (i = 0; i < length; i++) { - capture_screen(&tty_out, &expect); - cursor_pos.X = expect.si.width / 2; - cursor_pos.Y = expect.si.height / 2; - attr = (expect.si.default_attr & ~FOREGROUND_WHITE) | fg_attrs[i][1]; - make_expect_screen_write(&expect, cursor_pos, HELLO); - make_expect_screen_set_attr(&expect, cursor_pos, strlen(HELLO), attr); - - set_cursor_position(&tty_out, cursor_pos); - snprintf( - buffer, sizeof(buffer), "%s%dm%s%sm", CSI, fg_attrs[i][0], HELLO, CSI); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - } - - /* Set background color */ - length = ARRAY_SIZE(bg_attrs); - for (i = 0; i < length; i++) { - capture_screen(&tty_out, &expect); - cursor_pos.X = expect.si.width / 2; - cursor_pos.Y = expect.si.height / 2; - attr = (expect.si.default_attr & ~BACKGROUND_WHITE) | bg_attrs[i][1]; - make_expect_screen_write(&expect, cursor_pos, HELLO); - make_expect_screen_set_attr(&expect, cursor_pos, strlen(HELLO), attr); - - set_cursor_position(&tty_out, cursor_pos); - snprintf( - buffer, sizeof(buffer), "%s%dm%s%sm", CSI, bg_attrs[i][0], HELLO, CSI); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - } - - /* Set foregroud and background color */ - ASSERT(ARRAY_SIZE(fg_attrs) == ARRAY_SIZE(bg_attrs)); - length = ARRAY_SIZE(bg_attrs); - for (i = 0; i < length; i++) { - capture_screen(&tty_out, &expect); - cursor_pos.X = expect.si.width / 2; - cursor_pos.Y = expect.si.height / 2; - attr = expect.si.default_attr & ~FOREGROUND_WHITE & ~BACKGROUND_WHITE; - attr |= fg_attrs[i][1] | bg_attrs[i][1]; - make_expect_screen_write(&expect, cursor_pos, HELLO); - make_expect_screen_set_attr(&expect, cursor_pos, strlen(HELLO), attr); - - set_cursor_position(&tty_out, cursor_pos); - snprintf(buffer, - sizeof(buffer), - "%s%d;%dm%s%sm", - CSI, - bg_attrs[i][0], - fg_attrs[i][0], - HELLO, - CSI); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - } - - /* Set foreground bright on */ - capture_screen(&tty_out, &expect); - cursor_pos.X = expect.si.width / 2; - cursor_pos.Y = expect.si.height / 2; - set_cursor_position(&tty_out, cursor_pos); - attr = expect.si.default_attr; - attr |= FOREGROUND_INTENSITY; - make_expect_screen_write(&expect, cursor_pos, HELLO); - make_expect_screen_set_attr(&expect, cursor_pos, strlen(HELLO), attr); - cursor_pos.X += strlen(HELLO); - make_expect_screen_write(&expect, cursor_pos, HELLO); - make_expect_screen_set_attr(&expect, cursor_pos, strlen(HELLO), attr); - - snprintf(buffer, - sizeof(buffer), - "%s%dm%s%s%dm%s%dm%s%s%dm", - CSI, - F_INTENSITY, - HELLO, - CSI, - F_INTENSITY_OFF1, - CSI, - F_INTENSITY, - HELLO, - CSI, - F_INTENSITY_OFF2); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* Set background bright on */ - capture_screen(&tty_out, &expect); - cursor_pos.X = expect.si.width / 2; - cursor_pos.Y = expect.si.height / 2; - set_cursor_position(&tty_out, cursor_pos); - attr = expect.si.default_attr; - attr |= BACKGROUND_INTENSITY; - make_expect_screen_write(&expect, cursor_pos, HELLO); - make_expect_screen_set_attr(&expect, cursor_pos, strlen(HELLO), attr); - - snprintf(buffer, - sizeof(buffer), - "%s%dm%s%s%dm", - CSI, - B_INTENSITY, - HELLO, - CSI, - B_INTENSITY_OFF); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* Inverse */ - capture_screen(&tty_out, &expect); - cursor_pos.X = expect.si.width / 2; - cursor_pos.Y = expect.si.height / 2; - set_cursor_position(&tty_out, cursor_pos); - attr = expect.si.default_attr; - fg = attr & FOREGROUND_WHITE; - bg = attr & BACKGROUND_WHITE; - attr &= (~FOREGROUND_WHITE & ~BACKGROUND_WHITE); - attr |= COMMON_LVB_REVERSE_VIDEO; - attr |= fg << 4; - attr |= bg >> 4; - make_expect_screen_write(&expect, cursor_pos, HELLO); - make_expect_screen_set_attr(&expect, cursor_pos, strlen(HELLO), attr); - cursor_pos.X += strlen(HELLO); - make_expect_screen_write(&expect, cursor_pos, HELLO); - - snprintf(buffer, - sizeof(buffer), - "%s%dm%s%s%dm%s", - CSI, - INVERSE, - HELLO, - CSI, - INVERSE_OFF, - HELLO); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_save_restore_cursor_position) { - uv_tty_t tty_out; - uv_loop_t* loop; - COORD cursor_pos, cursor_pos_old; - char buffer[1024]; - struct screen_info si; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - get_screen_info(&tty_out, &si); - - cursor_pos_old.X = si.width / 2; - cursor_pos_old.Y = si.height / 2; - set_cursor_position(&tty_out, cursor_pos_old); - - /* save the cursor position */ - snprintf(buffer, sizeof(buffer), "%ss", CSI); - write_console(&tty_out, buffer); - - cursor_pos.X = si.width / 4; - cursor_pos.Y = si.height / 4; - set_cursor_position(&tty_out, cursor_pos); - - /* restore the cursor postion */ - snprintf(buffer, sizeof(buffer), "%su", CSI); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos.X == cursor_pos_old.X); - ASSERT(cursor_pos.Y == cursor_pos_old.Y); - - cursor_pos_old.X = si.width / 2; - cursor_pos_old.Y = si.height / 2; - set_cursor_position(&tty_out, cursor_pos_old); - - /* save the cursor position */ - snprintf(buffer, sizeof(buffer), "%s7", ESC); - write_console(&tty_out, buffer); - - cursor_pos.X = si.width / 4; - cursor_pos.Y = si.height / 4; - set_cursor_position(&tty_out, cursor_pos); - - /* restore the cursor postion */ - snprintf(buffer, sizeof(buffer), "%s8", ESC); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos.X == cursor_pos_old.X); - ASSERT(cursor_pos.Y == cursor_pos_old.Y); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_full_reset) { - uv_tty_t tty_out; - uv_loop_t* loop; - char buffer[1024]; - struct captured_screen actual = {0}, expect = {0}; - COORD cursor_pos; - DWORD saved_cursor_size; - BOOL saved_cursor_visibility; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - - capture_screen(&tty_out, &expect); - setup_screen(&tty_out); - cursor_pos.X = expect.si.width; - cursor_pos.Y = expect.si.height; - set_cursor_position(&tty_out, cursor_pos); - snprintf(buffer, sizeof(buffer), "%s%d;%dm%s", CSI, F_CYAN, B_YELLOW, HELLO); - saved_cursor_size = get_cursor_size(&tty_out); - set_cursor_size(&tty_out, - saved_cursor_size == CURSOR_SIZE_LARGE ? CURSOR_SIZE_SMALL - : CURSOR_SIZE_LARGE); - saved_cursor_visibility = get_cursor_visibility(&tty_out); - set_cursor_visibility(&tty_out, saved_cursor_visibility ? FALSE : TRUE); - write_console(&tty_out, buffer); - snprintf(buffer, sizeof(buffer), "%sc", ESC); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - ASSERT(get_cursor_size(&tty_out) == saved_cursor_size); - ASSERT(get_cursor_visibility(&tty_out) == saved_cursor_visibility); - ASSERT(actual.si.csbi.srWindow.Top == 0); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(tty_escape_sequence_processing) { - uv_tty_t tty_out; - uv_loop_t* loop; - COORD cursor_pos, cursor_pos_old; - DWORD saved_cursor_size; - char buffer[1024]; - struct captured_screen actual = {0}, expect = {0}; - int dir; - - loop = uv_default_loop(); - - initialize_tty(&tty_out); - - /* CSI + finaly byte does not output anything */ - cursor_pos.X = 1; - cursor_pos.Y = 1; - set_cursor_position(&tty_out, cursor_pos); - capture_screen(&tty_out, &expect); - make_expect_screen_write(&expect, cursor_pos, HELLO); - cursor_pos.X += strlen(HELLO); - make_expect_screen_write(&expect, cursor_pos, HELLO); - snprintf(buffer, sizeof(buffer), "%s@%s%s~%s", CSI, HELLO, CSI, HELLO); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* CSI(C1) + finaly byte does not output anything */ - cursor_pos.X = 1; - cursor_pos.Y = 1; - set_cursor_position(&tty_out, cursor_pos); - capture_screen(&tty_out, &expect); - make_expect_screen_write(&expect, cursor_pos, HELLO); - cursor_pos.X += strlen(HELLO); - make_expect_screen_write(&expect, cursor_pos, HELLO); - snprintf(buffer, sizeof(buffer), "\xC2\x9B@%s\xC2\x9B~%s", HELLO, HELLO); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* CSI + intermediate byte + finaly byte does not output anything */ - cursor_pos.X = 1; - cursor_pos.Y = 1; - set_cursor_position(&tty_out, cursor_pos); - capture_screen(&tty_out, &expect); - make_expect_screen_write(&expect, cursor_pos, HELLO); - cursor_pos.X += strlen(HELLO); - make_expect_screen_write(&expect, cursor_pos, HELLO); - snprintf(buffer, sizeof(buffer), "%s @%s%s/~%s", CSI, HELLO, CSI, HELLO); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* CSI + parameter byte + finaly byte does not output anything */ - cursor_pos.X = 1; - cursor_pos.Y = 1; - set_cursor_position(&tty_out, cursor_pos); - capture_screen(&tty_out, &expect); - snprintf(buffer, - sizeof(buffer), - "%s0@%s%s>~%s%s?~%s", - CSI, - HELLO, - CSI, - HELLO, - CSI, - HELLO); - make_expect_screen_write(&expect, cursor_pos, HELLO); - cursor_pos.X += strlen(HELLO); - make_expect_screen_write(&expect, cursor_pos, HELLO); - cursor_pos.X += strlen(HELLO); - make_expect_screen_write(&expect, cursor_pos, HELLO); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* ESC Single-char control does not output anyghing */ - cursor_pos.X = 1; - cursor_pos.Y = 1; - set_cursor_position(&tty_out, cursor_pos); - capture_screen(&tty_out, &expect); - make_expect_screen_write(&expect, cursor_pos, HELLO); - cursor_pos.X += strlen(HELLO); - make_expect_screen_write(&expect, cursor_pos, HELLO); - snprintf(buffer, sizeof(buffer), "%s @%s%s/~%s", CSI, HELLO, CSI, HELLO); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* Nothing is output from ESC + ^, _, P, ] to BEL or ESC \ */ - /* Operaging System Command */ - cursor_pos.X = 1; - cursor_pos.Y = 1; - set_cursor_position(&tty_out, cursor_pos); - capture_screen(&tty_out, &expect); - make_expect_screen_write(&expect, cursor_pos, HELLO); - snprintf(buffer, sizeof(buffer), "%s]0;%s%s%s", ESC, HELLO, BEL, HELLO); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - /* Device Control Sequence */ - cursor_pos.X = 1; - cursor_pos.Y = 1; - set_cursor_position(&tty_out, cursor_pos); - capture_screen(&tty_out, &expect); - make_expect_screen_write(&expect, cursor_pos, HELLO); - snprintf(buffer, sizeof(buffer), "%sP$m%s%s", ESC, ST, HELLO); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - /* Privacy Message */ - cursor_pos.X = 1; - cursor_pos.Y = 1; - set_cursor_position(&tty_out, cursor_pos); - capture_screen(&tty_out, &expect); - make_expect_screen_write(&expect, cursor_pos, HELLO); - snprintf(buffer, - sizeof(buffer), - "%s^\"%s\\\"%s\"%s%s", - ESC, - HELLO, - HELLO, - ST, - HELLO); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - /* Application Program Command */ - cursor_pos.X = 1; - cursor_pos.Y = 1; - set_cursor_position(&tty_out, cursor_pos); - capture_screen(&tty_out, &expect); - make_expect_screen_write(&expect, cursor_pos, HELLO); - snprintf(buffer, - sizeof(buffer), - "%s_\"%s%s%s\"%s%s", - ESC, - HELLO, - ST, - HELLO, - BEL, - HELLO); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* Ignore double escape */ - cursor_pos.X = 1; - cursor_pos.Y = 1; - set_cursor_position(&tty_out, cursor_pos); - capture_screen(&tty_out, &expect); - make_expect_screen_write(&expect, cursor_pos, HELLO); - cursor_pos.X += strlen(HELLO); - make_expect_screen_write(&expect, cursor_pos, HELLO); - snprintf(buffer, - sizeof(buffer), - "%s%s@%s%s%s~%s", - ESC, - CSI, - HELLO, - ESC, - CSI, - HELLO); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* Ignored if argument overflow */ - set_cursor_to_home(&tty_out); - snprintf(buffer, sizeof(buffer), "%s1;%dH", CSI, UINT16_MAX + 1); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos.X == 1); - ASSERT(cursor_pos.Y == 1); - - /* Too many argument are ignored */ - cursor_pos.X = 1; - cursor_pos.Y = 1; - set_cursor_position(&tty_out, cursor_pos); - capture_screen(&tty_out, &expect); - make_expect_screen_write(&expect, cursor_pos, HELLO); - snprintf(buffer, - sizeof(buffer), - "%s%d;%d;%d;%d;%dm%s%sm", - CSI, - F_RED, - F_INTENSITY, - INVERSE, - B_CYAN, - B_INTENSITY_OFF, - HELLO, - CSI); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* In the case of DECSCUSR, the others are ignored */ - set_cursor_to_home(&tty_out); - snprintf(buffer, - sizeof(buffer), - "%s%d;%d H", - CSI, - expect.si.height / 2, - expect.si.width / 2); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos.X == 1); - ASSERT(cursor_pos.Y == 1); - - /* Invalid sequence are ignored */ - saved_cursor_size = get_cursor_size(&tty_out); - set_cursor_size(&tty_out, CURSOR_SIZE_MIDDLE); - snprintf(buffer, sizeof(buffer), "%s 1q", CSI); - write_console(&tty_out, buffer); - ASSERT(get_cursor_size(&tty_out) == CURSOR_SIZE_MIDDLE); - snprintf(buffer, sizeof(buffer), "%s 1 q", CSI); - write_console(&tty_out, buffer); - ASSERT(get_cursor_size(&tty_out) == CURSOR_SIZE_MIDDLE); - set_cursor_size(&tty_out, saved_cursor_size); - - /* #1874 2. */ - snprintf(buffer, sizeof(buffer), "%s??25l", CSI); - write_console(&tty_out, buffer); - ASSERT(get_cursor_visibility(&tty_out)); - snprintf(buffer, sizeof(buffer), "%s25?l", CSI); - write_console(&tty_out, buffer); - ASSERT(get_cursor_visibility(&tty_out)); - cursor_pos_old.X = expect.si.width / 2; - cursor_pos_old.Y = expect.si.height / 2; - set_cursor_position(&tty_out, cursor_pos_old); - snprintf(buffer, - sizeof(buffer), - "%s??%d;%df", - CSI, - expect.si.height / 4, - expect.si.width / 4); - write_console(&tty_out, buffer); - get_cursor_position(&tty_out, &cursor_pos); - ASSERT(cursor_pos.X = cursor_pos_old.X); - ASSERT(cursor_pos.Y = cursor_pos_old.Y); - set_cursor_to_home(&tty_out); - - /* CSI 25 l does nothing (#1874 4.) */ - snprintf(buffer, sizeof(buffer), "%s25l", CSI); - write_console(&tty_out, buffer); - ASSERT(get_cursor_visibility(&tty_out)); - - /* Unsupported sequences are ignored(#1874 5.) */ - dir = 2; - setup_screen(&tty_out); - capture_screen(&tty_out, &expect); - set_cursor_position(&tty_out, cursor_pos); - snprintf(buffer, sizeof(buffer), "%s?%dJ", CSI, dir); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - /* Finaly byte immedately after CSI [ are also output(#1874 1.) */ - cursor_pos.X = expect.si.width / 2; - cursor_pos.Y = expect.si.height / 2; - set_cursor_position(&tty_out, cursor_pos); - capture_screen(&tty_out, &expect); - make_expect_screen_write(&expect, cursor_pos, HELLO); - snprintf(buffer, sizeof(buffer), "%s[%s", CSI, HELLO); - write_console(&tty_out, buffer); - capture_screen(&tty_out, &actual); - ASSERT(compare_screen(&tty_out, &actual, &expect)); - - terminate_tty(&tty_out); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#else - -typedef int file_has_no_tests; /* ISO C forbids an empty translation unit. */ - -#endif /* ifdef _WIN32 */ diff --git a/libuv/test/test-tty.c b/libuv/test/test-tty.c deleted file mode 100644 index ff7d388..0000000 --- a/libuv/test/test-tty.c +++ /dev/null @@ -1,474 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#ifdef _WIN32 -# include -# include -#else /* Unix */ -# include -# include -# if (defined(__linux__) || defined(__GLIBC__)) && !defined(__ANDROID__) -# include -# elif defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE__) -# include -# elif defined(__FreeBSD__) || defined(__DragonFly__) -# include -# endif -#endif - -#include -#include - - -TEST_IMPL(tty) { - int r, width, height; - int ttyin_fd, ttyout_fd; - uv_tty_t tty_in, tty_out; - uv_loop_t* loop = uv_default_loop(); - - /* Make sure we have an FD that refers to a tty */ -#ifdef _WIN32 - HANDLE handle; - handle = CreateFileA("conin$", - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - ASSERT(handle != INVALID_HANDLE_VALUE); - ttyin_fd = _open_osfhandle((intptr_t) handle, 0); - - handle = CreateFileA("conout$", - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - ASSERT(handle != INVALID_HANDLE_VALUE); - ttyout_fd = _open_osfhandle((intptr_t) handle, 0); - -#else /* unix */ - ttyin_fd = open("/dev/tty", O_RDONLY, 0); - if (ttyin_fd < 0) { - fprintf(stderr, "Cannot open /dev/tty as read-only: %s\n", strerror(errno)); - fflush(stderr); - return TEST_SKIP; - } - - ttyout_fd = open("/dev/tty", O_WRONLY, 0); - if (ttyout_fd < 0) { - fprintf(stderr, "Cannot open /dev/tty as write-only: %s\n", strerror(errno)); - fflush(stderr); - return TEST_SKIP; - } -#endif - - ASSERT(ttyin_fd >= 0); - ASSERT(ttyout_fd >= 0); - - ASSERT(UV_UNKNOWN_HANDLE == uv_guess_handle(-1)); - - ASSERT(UV_TTY == uv_guess_handle(ttyin_fd)); - ASSERT(UV_TTY == uv_guess_handle(ttyout_fd)); - - r = uv_tty_init(uv_default_loop(), &tty_in, ttyin_fd, 1); /* Readable. */ - ASSERT(r == 0); - ASSERT(uv_is_readable((uv_stream_t*) &tty_in)); - ASSERT(!uv_is_writable((uv_stream_t*) &tty_in)); - - r = uv_tty_init(uv_default_loop(), &tty_out, ttyout_fd, 0); /* Writable. */ - ASSERT(r == 0); - ASSERT(!uv_is_readable((uv_stream_t*) &tty_out)); - ASSERT(uv_is_writable((uv_stream_t*) &tty_out)); - - r = uv_tty_get_winsize(&tty_out, &width, &height); - ASSERT(r == 0); - - printf("width=%d height=%d\n", width, height); - - if (width == 0 && height == 0) { - /* Some environments such as containers or Jenkins behave like this - * sometimes */ - MAKE_VALGRIND_HAPPY(); - return TEST_SKIP; - } - - /* - * Is it a safe assumption that most people have terminals larger than - * 10x10? - */ - ASSERT(width > 10); - ASSERT(height > 10); - - /* Turn on raw mode. */ - r = uv_tty_set_mode(&tty_in, UV_TTY_MODE_RAW); - ASSERT(r == 0); - - /* Turn off raw mode. */ - r = uv_tty_set_mode(&tty_in, UV_TTY_MODE_NORMAL); - ASSERT(r == 0); - - /* Calling uv_tty_reset_mode() repeatedly should not clobber errno. */ - errno = 0; - ASSERT(0 == uv_tty_reset_mode()); - ASSERT(0 == uv_tty_reset_mode()); - ASSERT(0 == uv_tty_reset_mode()); - ASSERT(0 == errno); - - /* TODO check the actual mode! */ - - uv_close((uv_handle_t*) &tty_in, NULL); - uv_close((uv_handle_t*) &tty_out, NULL); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -#ifdef _WIN32 -static void tty_raw_alloc(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - buf->base = malloc(size); - buf->len = size; -} - -static void tty_raw_read(uv_stream_t* tty_in, ssize_t nread, const uv_buf_t* buf) { - if (nread > 0) { - ASSERT(nread == 1); - ASSERT(buf->base[0] == ' '); - uv_close((uv_handle_t*) tty_in, NULL); - } else { - ASSERT(nread == 0); - } -} - -TEST_IMPL(tty_raw) { - int r; - int ttyin_fd; - uv_tty_t tty_in; - uv_loop_t* loop = uv_default_loop(); - HANDLE handle; - INPUT_RECORD record; - DWORD written; - - /* Make sure we have an FD that refers to a tty */ - handle = CreateFileA("conin$", - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - ASSERT(handle != INVALID_HANDLE_VALUE); - ttyin_fd = _open_osfhandle((intptr_t) handle, 0); - ASSERT(ttyin_fd >= 0); - ASSERT(UV_TTY == uv_guess_handle(ttyin_fd)); - - r = uv_tty_init(uv_default_loop(), &tty_in, ttyin_fd, 1); /* Readable. */ - ASSERT(r == 0); - ASSERT(uv_is_readable((uv_stream_t*) &tty_in)); - ASSERT(!uv_is_writable((uv_stream_t*) &tty_in)); - - r = uv_read_start((uv_stream_t*)&tty_in, tty_raw_alloc, tty_raw_read); - ASSERT(r == 0); - - /* Give uv_tty_line_read_thread time to block on ReadConsoleW */ - Sleep(100); - - /* Turn on raw mode. */ - r = uv_tty_set_mode(&tty_in, UV_TTY_MODE_RAW); - ASSERT(r == 0); - - /* Write ' ' that should be read in raw mode */ - record.EventType = KEY_EVENT; - record.Event.KeyEvent.bKeyDown = TRUE; - record.Event.KeyEvent.wRepeatCount = 1; - record.Event.KeyEvent.wVirtualKeyCode = VK_SPACE; - record.Event.KeyEvent.wVirtualScanCode = MapVirtualKeyW(VK_SPACE, MAPVK_VK_TO_VSC); - record.Event.KeyEvent.uChar.UnicodeChar = L' '; - record.Event.KeyEvent.dwControlKeyState = 0; - WriteConsoleInputW(handle, &record, 1, &written); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(tty_empty_write) { - int r; - int ttyout_fd; - uv_tty_t tty_out; - char dummy[1]; - uv_buf_t bufs[1]; - uv_loop_t* loop; - - /* Make sure we have an FD that refers to a tty */ - HANDLE handle; - - loop = uv_default_loop(); - - handle = CreateFileA("conout$", - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - ASSERT(handle != INVALID_HANDLE_VALUE); - ttyout_fd = _open_osfhandle((intptr_t) handle, 0); - - ASSERT(ttyout_fd >= 0); - - ASSERT(UV_TTY == uv_guess_handle(ttyout_fd)); - - r = uv_tty_init(uv_default_loop(), &tty_out, ttyout_fd, 0); /* Writable. */ - ASSERT(r == 0); - ASSERT(!uv_is_readable((uv_stream_t*) &tty_out)); - ASSERT(uv_is_writable((uv_stream_t*) &tty_out)); - - bufs[0].len = 0; - bufs[0].base = &dummy[0]; - - r = uv_try_write((uv_stream_t*) &tty_out, bufs, 1); - ASSERT(r == 0); - - uv_close((uv_handle_t*) &tty_out, NULL); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(tty_large_write) { - int r; - int ttyout_fd; - uv_tty_t tty_out; - char dummy[10000]; - uv_buf_t bufs[1]; - uv_loop_t* loop; - - /* Make sure we have an FD that refers to a tty */ - HANDLE handle; - - loop = uv_default_loop(); - - handle = CreateFileA("conout$", - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - ASSERT(handle != INVALID_HANDLE_VALUE); - ttyout_fd = _open_osfhandle((intptr_t) handle, 0); - - ASSERT(ttyout_fd >= 0); - - ASSERT(UV_TTY == uv_guess_handle(ttyout_fd)); - - r = uv_tty_init(uv_default_loop(), &tty_out, ttyout_fd, 0); /* Writable. */ - ASSERT(r == 0); - - memset(dummy, '.', sizeof(dummy) - 1); - dummy[sizeof(dummy) - 1] = '\n'; - - bufs[0] = uv_buf_init(dummy, sizeof(dummy)); - - r = uv_try_write((uv_stream_t*) &tty_out, bufs, 1); - ASSERT(r == 10000); - - uv_close((uv_handle_t*) &tty_out, NULL); - - uv_run(loop, UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(tty_raw_cancel) { - int r; - int ttyin_fd; - uv_tty_t tty_in; - HANDLE handle; - - /* Make sure we have an FD that refers to a tty */ - handle = CreateFileA("conin$", - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - ASSERT(handle != INVALID_HANDLE_VALUE); - ttyin_fd = _open_osfhandle((intptr_t) handle, 0); - ASSERT(ttyin_fd >= 0); - ASSERT(UV_TTY == uv_guess_handle(ttyin_fd)); - - r = uv_tty_init(uv_default_loop(), &tty_in, ttyin_fd, 1); /* Readable. */ - ASSERT(r == 0); - r = uv_tty_set_mode(&tty_in, UV_TTY_MODE_RAW); - ASSERT(r == 0); - r = uv_read_start((uv_stream_t*)&tty_in, tty_raw_alloc, tty_raw_read); - ASSERT(r == 0); - - r = uv_read_stop((uv_stream_t*) &tty_in); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif - - -TEST_IMPL(tty_file) { -#ifndef _WIN32 - uv_loop_t loop; - uv_tty_t tty; - uv_tty_t tty_ro; - uv_tty_t tty_wo; - int fd; - - ASSERT(0 == uv_loop_init(&loop)); - - fd = open("test/fixtures/empty_file", O_RDONLY); - if (fd != -1) { - ASSERT(UV_EINVAL == uv_tty_init(&loop, &tty, fd, 1)); - ASSERT(0 == close(fd)); - /* test EBADF handling */ - ASSERT(UV_EINVAL == uv_tty_init(&loop, &tty, fd, 1)); - } - -/* Bug on AIX where '/dev/random' returns 1 from isatty() */ -#ifndef _AIX - fd = open("/dev/random", O_RDONLY); - if (fd != -1) { - ASSERT(UV_EINVAL == uv_tty_init(&loop, &tty, fd, 1)); - ASSERT(0 == close(fd)); - } -#endif /* _AIX */ - - fd = open("/dev/zero", O_RDONLY); - if (fd != -1) { - ASSERT(UV_EINVAL == uv_tty_init(&loop, &tty, fd, 1)); - ASSERT(0 == close(fd)); - } - - fd = open("/dev/tty", O_RDWR); - if (fd != -1) { - ASSERT(0 == uv_tty_init(&loop, &tty, fd, 1)); - ASSERT(0 == close(fd)); /* TODO: it's indeterminate who owns fd now */ - ASSERT(uv_is_readable((uv_stream_t*) &tty)); - ASSERT(uv_is_writable((uv_stream_t*) &tty)); - uv_close((uv_handle_t*) &tty, NULL); - ASSERT(!uv_is_readable((uv_stream_t*) &tty)); - ASSERT(!uv_is_writable((uv_stream_t*) &tty)); - } - - fd = open("/dev/tty", O_RDONLY); - if (fd != -1) { - ASSERT(0 == uv_tty_init(&loop, &tty_ro, fd, 1)); - ASSERT(0 == close(fd)); /* TODO: it's indeterminate who owns fd now */ - ASSERT(uv_is_readable((uv_stream_t*) &tty_ro)); - ASSERT(!uv_is_writable((uv_stream_t*) &tty_ro)); - uv_close((uv_handle_t*) &tty_ro, NULL); - ASSERT(!uv_is_readable((uv_stream_t*) &tty_ro)); - ASSERT(!uv_is_writable((uv_stream_t*) &tty_ro)); - } - - fd = open("/dev/tty", O_WRONLY); - if (fd != -1) { - ASSERT(0 == uv_tty_init(&loop, &tty_wo, fd, 0)); - ASSERT(0 == close(fd)); /* TODO: it's indeterminate who owns fd now */ - ASSERT(!uv_is_readable((uv_stream_t*) &tty_wo)); - ASSERT(uv_is_writable((uv_stream_t*) &tty_wo)); - uv_close((uv_handle_t*) &tty_wo, NULL); - ASSERT(!uv_is_readable((uv_stream_t*) &tty_wo)); - ASSERT(!uv_is_writable((uv_stream_t*) &tty_wo)); - } - - - ASSERT(0 == uv_run(&loop, UV_RUN_DEFAULT)); - ASSERT(0 == uv_loop_close(&loop)); - - MAKE_VALGRIND_HAPPY(); -#endif - return 0; -} - -TEST_IMPL(tty_pty) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif -#if defined(__ASAN__) - RETURN_SKIP("Test does not currently work in ASAN"); -#endif - -#if defined(__APPLE__) || \ - defined(__DragonFly__) || \ - defined(__FreeBSD__) || \ - defined(__FreeBSD_kernel__) || \ - (defined(__linux__) && !defined(__ANDROID__)) || \ - defined(__NetBSD__) || \ - defined(__OpenBSD__) - int master_fd, slave_fd, r; - struct winsize w; - uv_loop_t loop; - uv_tty_t master_tty, slave_tty; - - ASSERT(0 == uv_loop_init(&loop)); - - r = openpty(&master_fd, &slave_fd, NULL, NULL, &w); - if (r != 0) - RETURN_SKIP("No pty available, skipping."); - - ASSERT(0 == uv_tty_init(&loop, &slave_tty, slave_fd, 0)); - ASSERT(0 == uv_tty_init(&loop, &master_tty, master_fd, 0)); - ASSERT(uv_is_readable((uv_stream_t*) &slave_tty)); - ASSERT(uv_is_writable((uv_stream_t*) &slave_tty)); - ASSERT(uv_is_readable((uv_stream_t*) &master_tty)); - ASSERT(uv_is_writable((uv_stream_t*) &master_tty)); - /* Check if the file descriptor was reopened. If it is, - * UV_HANDLE_BLOCKING_WRITES (value 0x100000) isn't set on flags. - */ - ASSERT(0 == (slave_tty.flags & 0x100000)); - /* The master_fd of a pty should never be reopened. - */ - ASSERT(master_tty.flags & 0x100000); - ASSERT(0 == close(slave_fd)); - uv_close((uv_handle_t*) &slave_tty, NULL); - ASSERT(0 == close(master_fd)); - uv_close((uv_handle_t*) &master_tty, NULL); - - ASSERT(0 == uv_run(&loop, UV_RUN_DEFAULT)); - - MAKE_VALGRIND_HAPPY(); -#endif - return 0; -} diff --git a/libuv/test/test-udp-alloc-cb-fail.c b/libuv/test/test-udp-alloc-cb-fail.c deleted file mode 100644 index 6b09801..0000000 --- a/libuv/test/test-udp-alloc-cb-fail.c +++ /dev/null @@ -1,196 +0,0 @@ -/* Copyright libuv project and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client) - -static uv_udp_t server; -static uv_udp_t client; - -static int cl_send_cb_called; -static int cl_recv_cb_called; - -static int sv_send_cb_called; -static int sv_recv_cb_called; - -static int close_cb_called; - - -static void sv_alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[65536]; - CHECK_HANDLE(handle); - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void cl_alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - /* Do nothing, recv_cb should be called with UV_ENOBUFS. */ -} - - -static void close_cb(uv_handle_t* handle) { - CHECK_HANDLE(handle); - ASSERT(1 == uv_is_closing(handle)); - close_cb_called++; -} - - -static void cl_recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* buf, - const struct sockaddr* addr, - unsigned flags) { - CHECK_HANDLE(handle); - ASSERT(flags == 0); - ASSERT(nread == UV_ENOBUFS); - - cl_recv_cb_called++; - - uv_close((uv_handle_t*) handle, close_cb); -} - - -static void cl_send_cb(uv_udp_send_t* req, int status) { - int r; - - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - CHECK_HANDLE(req->handle); - - r = uv_udp_recv_start(req->handle, cl_alloc_cb, cl_recv_cb); - ASSERT(r == 0); - - cl_send_cb_called++; -} - - -static void sv_send_cb(uv_udp_send_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - CHECK_HANDLE(req->handle); - - uv_close((uv_handle_t*) req->handle, close_cb); - free(req); - - sv_send_cb_called++; -} - - -static void sv_recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* rcvbuf, - const struct sockaddr* addr, - unsigned flags) { - uv_udp_send_t* req; - uv_buf_t sndbuf; - int r; - - if (nread < 0) { - ASSERT(0 && "unexpected error"); - } - - if (nread == 0) { - /* Returning unused buffer. Don't count towards sv_recv_cb_called */ - ASSERT_NULL(addr); - return; - } - - CHECK_HANDLE(handle); - ASSERT(flags == 0); - - ASSERT_NOT_NULL(addr); - ASSERT(nread == 4); - ASSERT(!memcmp("PING", rcvbuf->base, nread)); - - r = uv_udp_recv_stop(handle); - ASSERT(r == 0); - - req = malloc(sizeof *req); - ASSERT_NOT_NULL(req); - - sndbuf = uv_buf_init("PONG", 4); - r = uv_udp_send(req, handle, &sndbuf, 1, addr, sv_send_cb); - ASSERT(r == 0); - - sv_recv_cb_called++; -} - - -TEST_IMPL(udp_alloc_cb_fail) { - struct sockaddr_in addr; - uv_udp_send_t req; - uv_buf_t buf; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - r = uv_udp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - r = uv_udp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_udp_recv_start(&server, sv_alloc_cb, sv_recv_cb); - ASSERT(r == 0); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_udp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - buf = uv_buf_init("PING", 4); - r = uv_udp_send(&req, - &client, - &buf, - 1, - (const struct sockaddr*) &addr, - cl_send_cb); - ASSERT(r == 0); - - ASSERT(close_cb_called == 0); - ASSERT(cl_send_cb_called == 0); - ASSERT(cl_recv_cb_called == 0); - ASSERT(sv_send_cb_called == 0); - ASSERT(sv_recv_cb_called == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(cl_send_cb_called == 1); - ASSERT(cl_recv_cb_called == 1); - ASSERT(sv_send_cb_called == 1); - ASSERT(sv_recv_cb_called == 1); - ASSERT(close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-bind.c b/libuv/test/test-udp-bind.c deleted file mode 100644 index a1e080e..0000000 --- a/libuv/test/test-udp-bind.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - - -TEST_IMPL(udp_bind) { - struct sockaddr_in addr; - uv_loop_t* loop; - uv_udp_t h1, h2; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - loop = uv_default_loop(); - - r = uv_udp_init(loop, &h1); - ASSERT(r == 0); - - r = uv_udp_init(loop, &h2); - ASSERT(r == 0); - - r = uv_udp_bind(&h1, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_udp_bind(&h2, (const struct sockaddr*) &addr, 0); - ASSERT(r == UV_EADDRINUSE); - - uv_close((uv_handle_t*) &h1, NULL); - uv_close((uv_handle_t*) &h2, NULL); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(udp_bind_reuseaddr) { - struct sockaddr_in addr; - uv_loop_t* loop; - uv_udp_t h1, h2; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - loop = uv_default_loop(); - - r = uv_udp_init(loop, &h1); - ASSERT(r == 0); - - r = uv_udp_init(loop, &h2); - ASSERT(r == 0); - - r = uv_udp_bind(&h1, (const struct sockaddr*) &addr, UV_UDP_REUSEADDR); - ASSERT(r == 0); - - r = uv_udp_bind(&h2, (const struct sockaddr*) &addr, UV_UDP_REUSEADDR); - ASSERT(r == 0); - - uv_close((uv_handle_t*) &h1, NULL); - uv_close((uv_handle_t*) &h2, NULL); - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-connect.c b/libuv/test/test-udp-connect.c deleted file mode 100644 index 89ca1a8..0000000 --- a/libuv/test/test-udp-connect.c +++ /dev/null @@ -1,197 +0,0 @@ -/* Copyright libuv project and contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client) - -static uv_udp_t server; -static uv_udp_t client; -static uv_buf_t buf; -static struct sockaddr_in lo_addr; - -static int cl_send_cb_called; -static int sv_recv_cb_called; - -static int close_cb_called; - - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[65536]; - CHECK_HANDLE(handle); - ASSERT(suggested_size <= sizeof(slab)); - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void close_cb(uv_handle_t* handle) { - CHECK_HANDLE(handle); - ASSERT(uv_is_closing(handle)); - close_cb_called++; -} - - -static void cl_send_cb(uv_udp_send_t* req, int status) { - int r; - - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - CHECK_HANDLE(req->handle); - if (++cl_send_cb_called == 1) { - uv_udp_connect(&client, NULL); - r = uv_udp_send(req, &client, &buf, 1, NULL, cl_send_cb); - ASSERT(r == UV_EDESTADDRREQ); - r = uv_udp_send(req, - &client, - &buf, - 1, - (const struct sockaddr*) &lo_addr, - cl_send_cb); - ASSERT(r == 0); - } - -} - - -static void sv_recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* rcvbuf, - const struct sockaddr* addr, - unsigned flags) { - if (nread > 0) { - ASSERT(nread == 4); - ASSERT_NOT_NULL(addr); - ASSERT(memcmp("EXIT", rcvbuf->base, nread) == 0); - if (++sv_recv_cb_called == 4) { - uv_close((uv_handle_t*) &server, close_cb); - uv_close((uv_handle_t*) &client, close_cb); - } - } -} - - -TEST_IMPL(udp_connect) { -#if defined(__PASE__) - RETURN_SKIP( - "IBMi PASE's UDP connection can not be disconnected with AF_UNSPEC."); -#endif - uv_udp_send_t req; - struct sockaddr_in ext_addr; - struct sockaddr_in tmp_addr; - int r; - int addrlen; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &lo_addr)); - - r = uv_udp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - r = uv_udp_bind(&server, (const struct sockaddr*) &lo_addr, 0); - ASSERT(r == 0); - - r = uv_udp_recv_start(&server, alloc_cb, sv_recv_cb); - ASSERT(r == 0); - - r = uv_udp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - buf = uv_buf_init("EXIT", 4); - - /* connect() to INADDR_ANY fails on Windows wih WSAEADDRNOTAVAIL */ - ASSERT_EQ(0, uv_ip4_addr("0.0.0.0", TEST_PORT, &tmp_addr)); - r = uv_udp_connect(&client, (const struct sockaddr*) &tmp_addr); -#ifdef _WIN32 - ASSERT_EQ(r, UV_EADDRNOTAVAIL); -#else - ASSERT_EQ(r, 0); - r = uv_udp_connect(&client, NULL); - ASSERT_EQ(r, 0); -#endif - - ASSERT(0 == uv_ip4_addr("8.8.8.8", TEST_PORT, &ext_addr)); - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &lo_addr)); - - r = uv_udp_connect(&client, (const struct sockaddr*) &lo_addr); - ASSERT(r == 0); - r = uv_udp_connect(&client, (const struct sockaddr*) &ext_addr); - ASSERT(r == UV_EISCONN); - - addrlen = sizeof(tmp_addr); - r = uv_udp_getpeername(&client, (struct sockaddr*) &tmp_addr, &addrlen); - ASSERT(r == 0); - - /* To send messages in connected UDP sockets addr must be NULL */ - r = uv_udp_try_send(&client, &buf, 1, (const struct sockaddr*) &lo_addr); - ASSERT(r == UV_EISCONN); - r = uv_udp_try_send(&client, &buf, 1, NULL); - ASSERT(r == 4); - r = uv_udp_try_send(&client, &buf, 1, (const struct sockaddr*) &ext_addr); - ASSERT(r == UV_EISCONN); - - r = uv_udp_connect(&client, NULL); - ASSERT(r == 0); - r = uv_udp_connect(&client, NULL); - ASSERT(r == UV_ENOTCONN); - - addrlen = sizeof(tmp_addr); - r = uv_udp_getpeername(&client, (struct sockaddr*) &tmp_addr, &addrlen); - ASSERT(r == UV_ENOTCONN); - - /* To send messages in disconnected UDP sockets addr must be set */ - r = uv_udp_try_send(&client, &buf, 1, (const struct sockaddr*) &lo_addr); - ASSERT(r == 4); - r = uv_udp_try_send(&client, &buf, 1, NULL); - ASSERT(r == UV_EDESTADDRREQ); - - - r = uv_udp_connect(&client, (const struct sockaddr*) &lo_addr); - ASSERT(r == 0); - r = uv_udp_send(&req, - &client, - &buf, - 1, - (const struct sockaddr*) &lo_addr, - cl_send_cb); - ASSERT(r == UV_EISCONN); - r = uv_udp_send(&req, &client, &buf, 1, NULL, cl_send_cb); - ASSERT(r == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 2); - ASSERT(sv_recv_cb_called == 4); - ASSERT(cl_send_cb_called == 2); - - ASSERT(client.send_queue_size == 0); - ASSERT(server.send_queue_size == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-create-socket-early.c b/libuv/test/test-udp-create-socket-early.c deleted file mode 100644 index f7e46ab..0000000 --- a/libuv/test/test-udp-create-socket-early.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Copyright (c) 2015 Saúl Ibarra Corretgé . - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - -#ifdef _WIN32 -# define INVALID_FD (INVALID_HANDLE_VALUE) -#else -# define INVALID_FD (-1) -#endif - - -TEST_IMPL(udp_create_early) { - struct sockaddr_in addr; - struct sockaddr_in sockname; - uv_udp_t client; - uv_os_fd_t fd; - int r, namelen; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_udp_init_ex(uv_default_loop(), &client, AF_INET); - ASSERT(r == 0); - - r = uv_fileno((const uv_handle_t*) &client, &fd); - ASSERT(r == 0); - ASSERT(fd != INVALID_FD); - - /* Windows returns WSAEINVAL if the socket is not bound */ -#ifndef _WIN32 - namelen = sizeof sockname; - r = uv_udp_getsockname(&client, (struct sockaddr*) &sockname, &namelen); - ASSERT(r == 0); - ASSERT(sockname.sin_family == AF_INET); -#endif - - r = uv_udp_bind(&client, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - namelen = sizeof sockname; - r = uv_udp_getsockname(&client, (struct sockaddr*) &sockname, &namelen); - ASSERT(r == 0); - ASSERT(memcmp(&addr.sin_addr, - &sockname.sin_addr, - sizeof(addr.sin_addr)) == 0); - - uv_close((uv_handle_t*) &client, NULL); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(udp_create_early_bad_bind) { - struct sockaddr_in addr; - uv_udp_t client; - uv_os_fd_t fd; - int r; - - if (!can_ipv6()) - RETURN_SKIP("IPv6 not supported"); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_udp_init_ex(uv_default_loop(), &client, AF_INET6); - ASSERT(r == 0); - - r = uv_fileno((const uv_handle_t*) &client, &fd); - ASSERT(r == 0); - ASSERT(fd != INVALID_FD); - - /* Windows returns WSAEINVAL if the socket is not bound */ -#ifndef _WIN32 - { - int namelen; - struct sockaddr_in6 sockname; - namelen = sizeof sockname; - r = uv_udp_getsockname(&client, (struct sockaddr*) &sockname, &namelen); - ASSERT(r == 0); - ASSERT(sockname.sin6_family == AF_INET6); - } -#endif - - r = uv_udp_bind(&client, (const struct sockaddr*) &addr, 0); -#if !defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MSYS__) - ASSERT(r == UV_EINVAL); -#else - ASSERT(r == UV_EFAULT); -#endif - - uv_close((uv_handle_t*) &client, NULL); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(udp_create_early_bad_domain) { - uv_udp_t client; - int r; - - r = uv_udp_init_ex(uv_default_loop(), &client, 47); - ASSERT(r == UV_EINVAL); - - r = uv_udp_init_ex(uv_default_loop(), &client, 1024); - ASSERT(r == UV_EINVAL); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-dgram-too-big.c b/libuv/test/test-udp-dgram-too-big.c deleted file mode 100644 index bd44c42..0000000 --- a/libuv/test/test-udp-dgram-too-big.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &handle_) - -#define CHECK_REQ(req) \ - ASSERT((req) == &req_); - -static uv_udp_t handle_; -static uv_udp_send_t req_; - -static int send_cb_called; -static int close_cb_called; - - -static void close_cb(uv_handle_t* handle) { - CHECK_HANDLE(handle); - close_cb_called++; -} - - -static void send_cb(uv_udp_send_t* req, int status) { - CHECK_REQ(req); - CHECK_HANDLE(req->handle); - - ASSERT(status == UV_EMSGSIZE); - - uv_close((uv_handle_t*)req->handle, close_cb); - send_cb_called++; -} - - -TEST_IMPL(udp_dgram_too_big) { - char dgram[65536]; /* 64K MTU is unlikely, even on localhost */ - struct sockaddr_in addr; - uv_buf_t buf; - int r; - - memset(dgram, 42, sizeof dgram); /* silence valgrind */ - - r = uv_udp_init(uv_default_loop(), &handle_); - ASSERT(r == 0); - - buf = uv_buf_init(dgram, sizeof dgram); - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_udp_send(&req_, - &handle_, - &buf, - 1, - (const struct sockaddr*) &addr, - send_cb); - ASSERT(r == 0); - - ASSERT(close_cb_called == 0); - ASSERT(send_cb_called == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(send_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-ipv6.c b/libuv/test/test-udp-ipv6.c deleted file mode 100644 index 7099953..0000000 --- a/libuv/test/test-udp-ipv6.c +++ /dev/null @@ -1,251 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) -#include -#endif - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &server \ - || (uv_udp_t*)(handle) == &client \ - || (uv_timer_t*)(handle) == &timeout) - -#define CHECK_REQ(req) \ - ASSERT((req) == &req_); - -static uv_udp_t client; -static uv_udp_t server; -static uv_udp_send_t req_; -static char data[10]; -static uv_timer_t timeout; - -static int send_cb_called; -static int recv_cb_called; -static int close_cb_called; -static uint16_t client_port; - -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) -static int can_ipv6_ipv4_dual(void) { - int v6only; - size_t size = sizeof(int); - - if (sysctlbyname("net.inet6.ip6.v6only", &v6only, &size, NULL, 0)) - return 0; - - return v6only != 1; -} -#endif - - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[65536]; - CHECK_HANDLE(handle); - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void close_cb(uv_handle_t* handle) { - CHECK_HANDLE(handle); - close_cb_called++; -} - - -static void send_cb(uv_udp_send_t* req, int status) { - CHECK_REQ(req); - CHECK_HANDLE(req->handle); - ASSERT(status == 0); - send_cb_called++; -} - -static int is_from_client(const struct sockaddr* addr) { - const struct sockaddr_in6* addr6; - char dst[256]; - int r; - - /* Debugging output, and filter out unwanted network traffic */ - if (addr != NULL) { - ASSERT(addr->sa_family == AF_INET6); - addr6 = (struct sockaddr_in6*) addr; - r = uv_inet_ntop(addr->sa_family, &addr6->sin6_addr, dst, sizeof(dst)); - if (r == 0) - printf("from [%.*s]:%d\n", (int) sizeof(dst), dst, addr6->sin6_port); - if (addr6->sin6_port != client_port) - return 0; - if (r != 0 || strcmp(dst, "::ffff:127.0.0.1")) - return 0; - } - return 1; -} - - -static void ipv6_recv_fail(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* buf, - const struct sockaddr* addr, - unsigned flags) { - printf("got %d %.*s\n", (int) nread, nread > 0 ? (int) nread : 0, buf->base); - if (!is_from_client(addr) || (nread == 0 && addr == NULL)) - return; - ASSERT(0 && "this function should not have been called"); -} - - -static void ipv6_recv_ok(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* buf, - const struct sockaddr* addr, - unsigned flags) { - CHECK_HANDLE(handle); - - printf("got %d %.*s\n", (int) nread, nread > 0 ? (int) nread : 0, buf->base); - if (!is_from_client(addr) || (nread == 0 && addr == NULL)) - return; - - ASSERT(nread == 9); - ASSERT(!memcmp(buf->base, data, 9)); - recv_cb_called++; -} - - -static void timeout_cb(uv_timer_t* timer) { - uv_close((uv_handle_t*)&server, close_cb); - uv_close((uv_handle_t*)&client, close_cb); - uv_close((uv_handle_t*)&timeout, close_cb); -} - - -static void do_test(uv_udp_recv_cb recv_cb, int bind_flags) { - struct sockaddr_in6 addr6; - struct sockaddr_in addr; - int addr6_len; - int addr_len; - uv_buf_t buf; - char dst[256]; - int r; - - ASSERT(0 == uv_ip6_addr("::0", TEST_PORT, &addr6)); - - r = uv_udp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - r = uv_udp_bind(&server, (const struct sockaddr*) &addr6, bind_flags); - ASSERT(r == 0); - - addr6_len = sizeof(addr6); - ASSERT(uv_udp_getsockname(&server, (struct sockaddr*) &addr6, &addr6_len) == 0); - ASSERT(uv_inet_ntop(addr6.sin6_family, &addr6.sin6_addr, dst, sizeof(dst)) == 0); - printf("on [%.*s]:%d\n", (int) sizeof(dst), dst, addr6.sin6_port); - - r = uv_udp_recv_start(&server, alloc_cb, recv_cb); - ASSERT(r == 0); - - r = uv_udp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - ASSERT(uv_inet_ntop(addr.sin_family, &addr.sin_addr, dst, sizeof(dst)) == 0); - printf("to [%.*s]:%d\n", (int) sizeof(dst), dst, addr.sin_port); - - /* Create some unique data to send */ - ASSERT(9 == snprintf(data, sizeof(data), "PING%5u", uv_os_getpid() & 0xFFFF)); - buf = uv_buf_init(data, 9); - printf("sending %s\n", data); - - r = uv_udp_send(&req_, - &client, - &buf, - 1, - (const struct sockaddr*) &addr, - send_cb); - ASSERT(r == 0); - - addr_len = sizeof(addr); - ASSERT(uv_udp_getsockname(&client, (struct sockaddr*) &addr, &addr_len) == 0); - ASSERT(uv_inet_ntop(addr.sin_family, &addr.sin_addr, dst, sizeof(dst)) == 0); - printf("from [%.*s]:%d\n", (int) sizeof(dst), dst, addr.sin_port); - client_port = addr.sin_port; - - r = uv_timer_init(uv_default_loop(), &timeout); - ASSERT(r == 0); - - r = uv_timer_start(&timeout, timeout_cb, 500, 0); - ASSERT(r == 0); - - ASSERT(close_cb_called == 0); - ASSERT(send_cb_called == 0); - ASSERT(recv_cb_called == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 3); - - MAKE_VALGRIND_HAPPY(); -} - - -TEST_IMPL(udp_dual_stack) { -#if defined(__CYGWIN__) || defined(__MSYS__) - /* FIXME: Does Cygwin support this? */ - RETURN_SKIP("FIXME: This test needs more investigation on Cygwin"); -#endif - - if (!can_ipv6()) - RETURN_SKIP("IPv6 not supported"); - -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) - if (!can_ipv6_ipv4_dual()) - RETURN_SKIP("IPv6-IPv4 dual stack not supported"); -#elif defined(__OpenBSD__) - RETURN_SKIP("IPv6-IPv4 dual stack not supported"); -#endif - - do_test(ipv6_recv_ok, 0); - - printf("recv_cb_called %d\n", recv_cb_called); - printf("send_cb_called %d\n", send_cb_called); - ASSERT(recv_cb_called == 1); - ASSERT(send_cb_called == 1); - - return 0; -} - - -TEST_IMPL(udp_ipv6_only) { - if (!can_ipv6()) - RETURN_SKIP("IPv6 not supported"); - - do_test(ipv6_recv_fail, UV_UDP_IPV6ONLY); - - ASSERT(recv_cb_called == 0); - ASSERT(send_cb_called == 1); - - return 0; -} diff --git a/libuv/test/test-udp-mmsg.c b/libuv/test/test-udp-mmsg.c deleted file mode 100644 index fb24115..0000000 --- a/libuv/test/test-udp-mmsg.c +++ /dev/null @@ -1,142 +0,0 @@ -/* Copyright libuv contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &recver || (uv_udp_t*)(handle) == &sender) - -#define BUFFER_MULTIPLIER 4 -#define MAX_DGRAM_SIZE (64 * 1024) -#define NUM_SENDS 8 -#define EXPECTED_MMSG_ALLOCS (NUM_SENDS / BUFFER_MULTIPLIER) - -static uv_udp_t recver; -static uv_udp_t sender; -static int recv_cb_called; -static int close_cb_called; -static int alloc_cb_called; - - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - size_t buffer_size; - CHECK_HANDLE(handle); - - /* Only allocate enough room for multiple dgrams if we can actually recv them */ - buffer_size = MAX_DGRAM_SIZE; - if (uv_udp_using_recvmmsg((uv_udp_t*)handle)) - buffer_size *= BUFFER_MULTIPLIER; - - /* Actually malloc to exercise free'ing the buffer later */ - buf->base = malloc(buffer_size); - ASSERT_NOT_NULL(buf->base); - buf->len = buffer_size; - alloc_cb_called++; -} - - -static void close_cb(uv_handle_t* handle) { - CHECK_HANDLE(handle); - ASSERT(uv_is_closing(handle)); - close_cb_called++; -} - - -static void recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* rcvbuf, - const struct sockaddr* addr, - unsigned flags) { - ASSERT_GE(nread, 0); - - /* free and return if this is a mmsg free-only callback invocation */ - if (flags & UV_UDP_MMSG_FREE) { - ASSERT_EQ(nread, 0); - ASSERT_NULL(addr); - free(rcvbuf->base); - return; - } - - ASSERT_EQ(nread, 4); - ASSERT_NOT_NULL(addr); - ASSERT_MEM_EQ("PING", rcvbuf->base, nread); - - recv_cb_called++; - if (recv_cb_called == NUM_SENDS) { - uv_close((uv_handle_t*)handle, close_cb); - uv_close((uv_handle_t*)&sender, close_cb); - } - - /* Don't free if the buffer could be reused via mmsg */ - if (rcvbuf && !(flags & UV_UDP_MMSG_CHUNK)) - free(rcvbuf->base); -} - - -TEST_IMPL(udp_mmsg) { - struct sockaddr_in addr; - uv_buf_t buf; - int i; - - ASSERT_EQ(0, uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - ASSERT_EQ(0, uv_udp_init_ex(uv_default_loop(), &recver, - AF_UNSPEC | UV_UDP_RECVMMSG)); - - ASSERT_EQ(0, uv_udp_bind(&recver, (const struct sockaddr*) &addr, 0)); - - ASSERT_EQ(0, uv_udp_recv_start(&recver, alloc_cb, recv_cb)); - - ASSERT_EQ(0, uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - ASSERT_EQ(0, uv_udp_init(uv_default_loop(), &sender)); - - buf = uv_buf_init("PING", 4); - for (i = 0; i < NUM_SENDS; i++) { - ASSERT_EQ(4, uv_udp_try_send(&sender, &buf, 1, (const struct sockaddr*) &addr)); - } - - ASSERT_EQ(0, uv_run(uv_default_loop(), UV_RUN_DEFAULT)); - - ASSERT_EQ(close_cb_called, 2); - ASSERT_EQ(recv_cb_called, NUM_SENDS); - - ASSERT_EQ(sender.send_queue_size, 0); - ASSERT_EQ(recver.send_queue_size, 0); - - printf("%d allocs for %d recvs\n", alloc_cb_called, recv_cb_called); - - /* On platforms that don't support mmsg, each recv gets its own alloc */ - if (uv_udp_using_recvmmsg(&recver)) - ASSERT_EQ(alloc_cb_called, EXPECTED_MMSG_ALLOCS); - else - ASSERT_EQ(alloc_cb_called, recv_cb_called); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-multicast-interface.c b/libuv/test/test-udp-multicast-interface.c deleted file mode 100644 index bd9a61c..0000000 --- a/libuv/test/test-udp-multicast-interface.c +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client) - -static uv_udp_t server; -static uv_udp_t client; - -static int sv_send_cb_called; -static int close_cb_called; - - -static void close_cb(uv_handle_t* handle) { - CHECK_HANDLE(handle); - close_cb_called++; -} - - -static void sv_send_cb(uv_udp_send_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0 || status == UV_ENETUNREACH || status == UV_EPERM); - CHECK_HANDLE(req->handle); - - sv_send_cb_called++; - - uv_close((uv_handle_t*) req->handle, close_cb); -} - - -TEST_IMPL(udp_multicast_interface) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - int r; - uv_udp_send_t req; - uv_buf_t buf; - struct sockaddr_in addr; - struct sockaddr_in baddr; - - ASSERT(0 == uv_ip4_addr("239.255.0.1", TEST_PORT, &addr)); - - r = uv_udp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - ASSERT(0 == uv_ip4_addr("0.0.0.0", 0, &baddr)); - r = uv_udp_bind(&server, (const struct sockaddr*)&baddr, 0); - ASSERT(r == 0); - - r = uv_udp_set_multicast_interface(&server, "0.0.0.0"); - ASSERT(r == 0); - - /* server sends "PING" */ - buf = uv_buf_init("PING", 4); - r = uv_udp_send(&req, - &server, - &buf, - 1, - (const struct sockaddr*)&addr, - sv_send_cb); - ASSERT(r == 0); - - ASSERT(close_cb_called == 0); - ASSERT(sv_send_cb_called == 0); - - /* run the loop till all events are processed */ - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(sv_send_cb_called == 1); - ASSERT(close_cb_called == 1); - - ASSERT(client.send_queue_size == 0); - ASSERT(server.send_queue_size == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-multicast-interface6.c b/libuv/test/test-udp-multicast-interface6.c deleted file mode 100644 index be11514..0000000 --- a/libuv/test/test-udp-multicast-interface6.c +++ /dev/null @@ -1,108 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client) - -static uv_udp_t server; -static uv_udp_t client; - -static int sv_send_cb_called; -static int close_cb_called; - - -static void close_cb(uv_handle_t* handle) { - CHECK_HANDLE(handle); - close_cb_called++; -} - - -static void sv_send_cb(uv_udp_send_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - CHECK_HANDLE(req->handle); - - sv_send_cb_called++; - - uv_close((uv_handle_t*) req->handle, close_cb); -} - - -TEST_IMPL(udp_multicast_interface6) { -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - - int r; - uv_udp_send_t req; - uv_buf_t buf; - struct sockaddr_in6 addr; - struct sockaddr_in6 baddr; - - if (!can_ipv6()) - RETURN_SKIP("IPv6 not supported"); - - ASSERT(0 == uv_ip6_addr("::1", TEST_PORT, &addr)); - - r = uv_udp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - ASSERT(0 == uv_ip6_addr("::", 0, &baddr)); - r = uv_udp_bind(&server, (const struct sockaddr*)&baddr, 0); - ASSERT(r == 0); - -#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) - r = uv_udp_set_multicast_interface(&server, "::1%lo0"); -#else - r = uv_udp_set_multicast_interface(&server, NULL); -#endif - ASSERT(r == 0); - - /* server sends "PING" */ - buf = uv_buf_init("PING", 4); - r = uv_udp_send(&req, - &server, - &buf, - 1, - (const struct sockaddr*)&addr, - sv_send_cb); - ASSERT(r == 0); - - ASSERT(close_cb_called == 0); - ASSERT(sv_send_cb_called == 0); - - /* run the loop till all events are processed */ - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(sv_send_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-multicast-join.c b/libuv/test/test-udp-multicast-join.c deleted file mode 100644 index 9e603a8..0000000 --- a/libuv/test/test-udp-multicast-join.c +++ /dev/null @@ -1,181 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client) - -#define MULTICAST_ADDR "239.255.0.1" - -static uv_udp_t server; -static uv_udp_t client; -static uv_udp_send_t req; -static uv_udp_send_t req_ss; - -static int cl_recv_cb_called; - -static int sv_send_cb_called; - -static int close_cb_called; - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[65536]; - CHECK_HANDLE(handle); - ASSERT(suggested_size <= sizeof(slab)); - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void close_cb(uv_handle_t* handle) { - CHECK_HANDLE(handle); - close_cb_called++; -} - - -static void sv_send_cb(uv_udp_send_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - CHECK_HANDLE(req->handle); - - sv_send_cb_called++; - - if (sv_send_cb_called == 2) - uv_close((uv_handle_t*) req->handle, close_cb); -} - - -static int do_send(uv_udp_send_t* send_req) { - uv_buf_t buf; - struct sockaddr_in addr; - - buf = uv_buf_init("PING", 4); - - ASSERT(0 == uv_ip4_addr(MULTICAST_ADDR, TEST_PORT, &addr)); - - /* client sends "PING" */ - return uv_udp_send(send_req, - &client, - &buf, - 1, - (const struct sockaddr*) &addr, - sv_send_cb); -} - - -static void cl_recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* buf, - const struct sockaddr* addr, - unsigned flags) { - CHECK_HANDLE(handle); - ASSERT(flags == 0); - - if (nread < 0) { - ASSERT(0 && "unexpected error"); - } - - if (nread == 0) { - /* Returning unused buffer. Don't count towards cl_recv_cb_called */ - ASSERT_NULL(addr); - return; - } - - ASSERT_NOT_NULL(addr); - ASSERT(nread == 4); - ASSERT(!memcmp("PING", buf->base, nread)); - - cl_recv_cb_called++; - - if (cl_recv_cb_called == 2) { - /* we are done with the server handle, we can close it */ - uv_close((uv_handle_t*) &server, close_cb); - } else { - int r; - char source_addr[64]; - - r = uv_ip4_name((const struct sockaddr_in*)addr, source_addr, sizeof(source_addr)); - ASSERT(r == 0); - - r = uv_udp_set_membership(&server, MULTICAST_ADDR, NULL, UV_LEAVE_GROUP); - ASSERT(r == 0); - -#if !defined(__OpenBSD__) && !defined(__NetBSD__) - r = uv_udp_set_source_membership(&server, MULTICAST_ADDR, NULL, source_addr, UV_JOIN_GROUP); - ASSERT(r == 0); -#endif - - r = do_send(&req_ss); - ASSERT(r == 0); - } -} - - -TEST_IMPL(udp_multicast_join) { - int r; - struct sockaddr_in addr; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - r = uv_udp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - r = uv_udp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - /* bind to the desired port */ - r = uv_udp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - /* join the multicast channel */ - r = uv_udp_set_membership(&server, MULTICAST_ADDR, NULL, UV_JOIN_GROUP); - if (r == UV_ENODEV) - RETURN_SKIP("No multicast support."); - ASSERT(r == 0); - - r = uv_udp_recv_start(&server, alloc_cb, cl_recv_cb); - ASSERT(r == 0); - - r = do_send(&req); - ASSERT(r == 0); - - ASSERT(close_cb_called == 0); - ASSERT(cl_recv_cb_called == 0); - ASSERT(sv_send_cb_called == 0); - - /* run the loop till all events are processed */ - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(cl_recv_cb_called == 2); - ASSERT(sv_send_cb_called == 2); - ASSERT(close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-multicast-join6.c b/libuv/test/test-udp-multicast-join6.c deleted file mode 100644 index e67c5ee..0000000 --- a/libuv/test/test-udp-multicast-join6.c +++ /dev/null @@ -1,219 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client) - -#if defined(__APPLE__) || \ - defined(_AIX) || \ - defined(__MVS__) || \ - defined(__FreeBSD_kernel__) || \ - defined(__NetBSD__) || \ - defined(__OpenBSD__) - #define MULTICAST_ADDR "ff02::1%lo0" - #define INTERFACE_ADDR "::1%lo0" -#else - #define MULTICAST_ADDR "ff02::1" - #define INTERFACE_ADDR NULL -#endif - -static uv_udp_t server; -static uv_udp_t client; -static uv_udp_send_t req; -static uv_udp_send_t req_ss; - -static int cl_recv_cb_called; - -static int sv_send_cb_called; - -static int close_cb_called; - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[65536]; - CHECK_HANDLE(handle); - ASSERT(suggested_size <= sizeof(slab)); - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void close_cb(uv_handle_t* handle) { - CHECK_HANDLE(handle); - close_cb_called++; -} - - -static void sv_send_cb(uv_udp_send_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - CHECK_HANDLE(req->handle); - - sv_send_cb_called++; - - if (sv_send_cb_called == 2) - uv_close((uv_handle_t*) req->handle, close_cb); -} - - -static int do_send(uv_udp_send_t* send_req) { - uv_buf_t buf; - struct sockaddr_in6 addr; - - buf = uv_buf_init("PING", 4); - - ASSERT(0 == uv_ip6_addr(MULTICAST_ADDR, TEST_PORT, &addr)); - - /* client sends "PING" */ - return uv_udp_send(send_req, - &client, - &buf, - 1, - (const struct sockaddr*) &addr, - sv_send_cb); -} - - -static void cl_recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* buf, - const struct sockaddr* addr, - unsigned flags) { - CHECK_HANDLE(handle); - ASSERT(flags == 0); - - if (nread < 0) { - ASSERT(0 && "unexpected error"); - } - - if (nread == 0) { - /* Returning unused buffer. Don't count towards cl_recv_cb_called */ - ASSERT_NULL(addr); - return; - } - - ASSERT_NOT_NULL(addr); - ASSERT(nread == 4); - ASSERT(!memcmp("PING", buf->base, nread)); - - cl_recv_cb_called++; - - if (cl_recv_cb_called == 2) { - /* we are done with the server handle, we can close it */ - uv_close((uv_handle_t*) &server, close_cb); - } else { - int r; - char source_addr[64]; - - r = uv_ip6_name((const struct sockaddr_in6*)addr, source_addr, sizeof(source_addr)); - ASSERT(r == 0); - - r = uv_udp_set_membership(&server, MULTICAST_ADDR, INTERFACE_ADDR, UV_LEAVE_GROUP); - ASSERT(r == 0); - - r = uv_udp_set_source_membership(&server, MULTICAST_ADDR, INTERFACE_ADDR, source_addr, UV_JOIN_GROUP); - ASSERT(r == 0); - - r = do_send(&req_ss); - ASSERT(r == 0); - } -} - - -static int can_ipv6_external(void) { - uv_interface_address_t* addr; - int supported; - int count; - int i; - - if (uv_interface_addresses(&addr, &count)) - return 0; /* Assume no IPv6 support on failure. */ - - supported = 0; - for (i = 0; supported == 0 && i < count; i += 1) - supported = (AF_INET6 == addr[i].address.address6.sin6_family && - !addr[i].is_internal); - - uv_free_interface_addresses(addr, count); - return supported; -} - - -TEST_IMPL(udp_multicast_join6) { - int r; - struct sockaddr_in6 addr; - - if (!can_ipv6_external()) - RETURN_SKIP("No external IPv6 interface available"); - - ASSERT(0 == uv_ip6_addr("::", TEST_PORT, &addr)); - - r = uv_udp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - r = uv_udp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - /* bind to the desired port */ - r = uv_udp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_udp_set_membership(&server, MULTICAST_ADDR, INTERFACE_ADDR, UV_JOIN_GROUP); - if (r == UV_ENODEV) { - MAKE_VALGRIND_HAPPY(); - RETURN_SKIP("No ipv6 multicast route"); - } - - ASSERT(r == 0); - -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - r = uv_udp_recv_start(&server, alloc_cb, cl_recv_cb); - ASSERT(r == 0); - - r = do_send(&req); - ASSERT(r == 0); - - ASSERT(close_cb_called == 0); - ASSERT(cl_recv_cb_called == 0); - ASSERT(sv_send_cb_called == 0); - - /* run the loop till all events are processed */ - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(cl_recv_cb_called == 2); - ASSERT(sv_send_cb_called == 2); - ASSERT(close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-multicast-ttl.c b/libuv/test/test-udp-multicast-ttl.c deleted file mode 100644 index fbddd90..0000000 --- a/libuv/test/test-udp-multicast-ttl.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client) - -static uv_udp_t server; -static uv_udp_t client; - -static int sv_send_cb_called; -static int close_cb_called; - - -static void close_cb(uv_handle_t* handle) { - CHECK_HANDLE(handle); - close_cb_called++; -} - - -static void sv_send_cb(uv_udp_send_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0 || status == UV_ENETUNREACH || status == UV_EPERM); - CHECK_HANDLE(req->handle); - - sv_send_cb_called++; - - uv_close((uv_handle_t*) req->handle, close_cb); -} - - -TEST_IMPL(udp_multicast_ttl) { - int r; - uv_udp_send_t req; - uv_buf_t buf; - struct sockaddr_in addr; - - r = uv_udp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - ASSERT(0 == uv_ip4_addr("0.0.0.0", 0, &addr)); - r = uv_udp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_udp_set_multicast_ttl(&server, 32); - ASSERT(r == 0); - - /* server sends "PING" */ - buf = uv_buf_init("PING", 4); - ASSERT(0 == uv_ip4_addr("239.255.0.1", TEST_PORT, &addr)); - r = uv_udp_send(&req, - &server, - &buf, - 1, - (const struct sockaddr*) &addr, - sv_send_cb); - ASSERT(r == 0); - - ASSERT(close_cb_called == 0); - ASSERT(sv_send_cb_called == 0); - - /* run the loop till all events are processed */ - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(sv_send_cb_called == 1); - ASSERT(close_cb_called == 1); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-open.c b/libuv/test/test-udp-open.c deleted file mode 100644 index f5136b6..0000000 --- a/libuv/test/test-udp-open.c +++ /dev/null @@ -1,350 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include -#include -#include - -#ifndef _WIN32 -# include -# include -# include -#endif - -static int send_cb_called = 0; -static int close_cb_called = 0; - -static uv_udp_send_t send_req; - - -static void startup(void) { -#ifdef _WIN32 - struct WSAData wsa_data; - int r = WSAStartup(MAKEWORD(2, 2), &wsa_data); - ASSERT(r == 0); -#endif -} - - -static uv_os_sock_t create_udp_socket(void) { - uv_os_sock_t sock; - - sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); -#ifdef _WIN32 - ASSERT(sock != INVALID_SOCKET); -#else - ASSERT(sock >= 0); -#endif - -#ifndef _WIN32 - { - /* Allow reuse of the port. */ - int yes = 1; - int r = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes); - ASSERT(r == 0); - } -#endif - - return sock; -} - - -static void close_socket(uv_os_sock_t sock) { - int r; -#ifdef _WIN32 - r = closesocket(sock); -#else - r = close(sock); -#endif - ASSERT(r == 0); -} - - -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)); - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void close_cb(uv_handle_t* handle) { - ASSERT_NOT_NULL(handle); - close_cb_called++; -} - - -static void recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* buf, - const struct sockaddr* addr, - unsigned flags) { - int r; - - if (nread < 0) { - ASSERT(0 && "unexpected error"); - } - - if (nread == 0) { - /* Returning unused buffer. Don't count towards sv_recv_cb_called */ - ASSERT_NULL(addr); - return; - } - - ASSERT(flags == 0); - - ASSERT_NOT_NULL(addr); - ASSERT(nread == 4); - ASSERT(memcmp("PING", buf->base, nread) == 0); - - r = uv_udp_recv_stop(handle); - ASSERT(r == 0); - - uv_close((uv_handle_t*) handle, close_cb); -} - - -static void send_cb(uv_udp_send_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - - send_cb_called++; - uv_close((uv_handle_t*)req->handle, close_cb); -} - - -TEST_IMPL(udp_open) { - struct sockaddr_in addr; - uv_buf_t buf = uv_buf_init("PING", 4); - uv_udp_t client, client2; - uv_os_sock_t sock; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - startup(); - sock = create_udp_socket(); - - r = uv_udp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - r = uv_udp_open(&client, sock); - ASSERT(r == 0); - - r = uv_udp_bind(&client, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_udp_recv_start(&client, alloc_cb, recv_cb); - ASSERT(r == 0); - - r = uv_udp_send(&send_req, - &client, - &buf, - 1, - (const struct sockaddr*) &addr, - send_cb); - ASSERT(r == 0); - -#ifndef _WIN32 - { - r = uv_udp_init(uv_default_loop(), &client2); - ASSERT(r == 0); - - r = uv_udp_open(&client2, sock); - ASSERT(r == UV_EEXIST); - - uv_close((uv_handle_t*) &client2, NULL); - } -#else /* _WIN32 */ - (void)client2; -#endif - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(send_cb_called == 1); - ASSERT(close_cb_called == 1); - - ASSERT(client.send_queue_size == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(udp_open_twice) { - uv_udp_t client; - uv_os_sock_t sock1, sock2; - int r; - - startup(); - sock1 = create_udp_socket(); - sock2 = create_udp_socket(); - - r = uv_udp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - r = uv_udp_open(&client, sock1); - ASSERT(r == 0); - - r = uv_udp_open(&client, sock2); - ASSERT(r == UV_EBUSY); - close_socket(sock2); - - uv_close((uv_handle_t*) &client, NULL); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(udp_open_bound) { - struct sockaddr_in addr; - uv_udp_t client; - uv_os_sock_t sock; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - startup(); - sock = create_udp_socket(); - - r = bind(sock, (struct sockaddr*) &addr, sizeof(addr)); - ASSERT(r == 0); - - r = uv_udp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - r = uv_udp_open(&client, sock); - ASSERT(r == 0); - - r = uv_udp_recv_start(&client, alloc_cb, recv_cb); - ASSERT(r == 0); - - uv_close((uv_handle_t*) &client, NULL); - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -TEST_IMPL(udp_open_connect) { - struct sockaddr_in addr; - uv_buf_t buf = uv_buf_init("PING", 4); - uv_udp_t client; - uv_udp_t server; - uv_os_sock_t sock; - int r; - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - startup(); - sock = create_udp_socket(); - - r = uv_udp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - r = connect(sock, (const struct sockaddr*) &addr, sizeof(addr)); - ASSERT(r == 0); - - r = uv_udp_open(&client, sock); - ASSERT(r == 0); - - r = uv_udp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - r = uv_udp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_udp_recv_start(&server, alloc_cb, recv_cb); - ASSERT(r == 0); - - r = uv_udp_send(&send_req, - &client, - &buf, - 1, - NULL, - send_cb); - ASSERT(r == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(send_cb_called == 1); - ASSERT(close_cb_called == 2); - - ASSERT(client.send_queue_size == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - -#ifndef _WIN32 -TEST_IMPL(udp_send_unix) { - /* Test that "uv_udp_send()" supports sending over - a "sockaddr_un" address. */ - struct sockaddr_un addr; - uv_udp_t handle; - uv_udp_send_t req; - uv_loop_t* loop; - uv_buf_t buf = uv_buf_init("PING", 4); - int fd; - int r; - - loop = uv_default_loop(); - - memset(&addr, 0, sizeof addr); - addr.sun_family = AF_UNIX; - ASSERT(strlen(TEST_PIPENAME) < sizeof(addr.sun_path)); - memcpy(addr.sun_path, TEST_PIPENAME, strlen(TEST_PIPENAME)); - - fd = socket(AF_UNIX, SOCK_STREAM, 0); - ASSERT(fd >= 0); - - unlink(TEST_PIPENAME); - ASSERT(0 == bind(fd, (const struct sockaddr*)&addr, sizeof addr)); - ASSERT(0 == listen(fd, 1)); - - r = uv_udp_init(loop, &handle); - ASSERT(r == 0); - r = uv_udp_open(&handle, fd); - ASSERT(r == 0); - uv_run(loop, UV_RUN_DEFAULT); - - r = uv_udp_send(&req, - &handle, - &buf, - 1, - (const struct sockaddr*) &addr, - NULL); - ASSERT(r == 0); - - uv_close((uv_handle_t*)&handle, NULL); - uv_run(loop, UV_RUN_DEFAULT); - close(fd); - unlink(TEST_PIPENAME); - - MAKE_VALGRIND_HAPPY(); - return 0; -} -#endif diff --git a/libuv/test/test-udp-options.c b/libuv/test/test-udp-options.c deleted file mode 100644 index 3ea51ba..0000000 --- a/libuv/test/test-udp-options.c +++ /dev/null @@ -1,160 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - - -static int udp_options_test(const struct sockaddr* addr) { - static int invalid_ttls[] = { -1, 0, 256 }; - uv_loop_t* loop; - uv_udp_t h; - int i, r; - - loop = uv_default_loop(); - - r = uv_udp_init(loop, &h); - ASSERT(r == 0); - - uv_unref((uv_handle_t*)&h); /* don't keep the loop alive */ - - r = uv_udp_bind(&h, addr, 0); - ASSERT(r == 0); - - r = uv_udp_set_broadcast(&h, 1); - r |= uv_udp_set_broadcast(&h, 1); - r |= uv_udp_set_broadcast(&h, 0); - r |= uv_udp_set_broadcast(&h, 0); - ASSERT(r == 0); - - /* values 1-255 should work */ - for (i = 1; i <= 255; i++) { - r = uv_udp_set_ttl(&h, i); -#if defined(__MVS__) - if (addr->sa_family == AF_INET6) - ASSERT(r == 0); - else - ASSERT(r == UV_ENOTSUP); -#else - ASSERT(r == 0); -#endif - } - - for (i = 0; i < (int) ARRAY_SIZE(invalid_ttls); i++) { - r = uv_udp_set_ttl(&h, invalid_ttls[i]); - ASSERT(r == UV_EINVAL); - } - - r = uv_udp_set_multicast_loop(&h, 1); - r |= uv_udp_set_multicast_loop(&h, 1); - r |= uv_udp_set_multicast_loop(&h, 0); - r |= uv_udp_set_multicast_loop(&h, 0); - ASSERT(r == 0); - - /* values 0-255 should work */ - for (i = 0; i <= 255; i++) { - r = uv_udp_set_multicast_ttl(&h, i); - ASSERT(r == 0); - } - - /* anything >255 should fail */ - r = uv_udp_set_multicast_ttl(&h, 256); - ASSERT(r == UV_EINVAL); - /* don't test ttl=-1, it's a valid value on some platforms */ - - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} - - -TEST_IMPL(udp_options) { - struct sockaddr_in addr; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - return udp_options_test((const struct sockaddr*) &addr); -} - - -TEST_IMPL(udp_options6) { - struct sockaddr_in6 addr; - - if (!can_ipv6()) - RETURN_SKIP("IPv6 not supported"); - - ASSERT(0 == uv_ip6_addr("::", TEST_PORT, &addr)); - return udp_options_test((const struct sockaddr*) &addr); -} - - -TEST_IMPL(udp_no_autobind) { - uv_loop_t* loop; - uv_udp_t h; - uv_udp_t h2; - - loop = uv_default_loop(); - - /* Test a lazy initialized socket. */ - ASSERT(0 == uv_udp_init(loop, &h)); - ASSERT(UV_EBADF == uv_udp_set_multicast_ttl(&h, 32)); - ASSERT(UV_EBADF == uv_udp_set_broadcast(&h, 1)); -#if defined(__MVS__) - ASSERT(UV_ENOTSUP == uv_udp_set_ttl(&h, 1)); -#else - ASSERT(UV_EBADF == uv_udp_set_ttl(&h, 1)); -#endif - ASSERT(UV_EBADF == uv_udp_set_multicast_loop(&h, 1)); -/* TODO(gengjiawen): Fix test on QEMU. */ -#if defined(__QEMU__) - RETURN_SKIP("Test does not currently work in QEMU"); -#endif - ASSERT(UV_EBADF == uv_udp_set_multicast_interface(&h, "0.0.0.0")); - - uv_close((uv_handle_t*) &h, NULL); - - /* Test a non-lazily initialized socket. */ - ASSERT(0 == uv_udp_init_ex(loop, &h2, AF_INET | UV_UDP_RECVMMSG)); - ASSERT(0 == uv_udp_set_multicast_ttl(&h2, 32)); - ASSERT(0 == uv_udp_set_broadcast(&h2, 1)); - -#if defined(__MVS__) - /* zOS only supports setting ttl for IPv6 sockets. */ - ASSERT(UV_ENOTSUP == uv_udp_set_ttl(&h2, 1)); -#else - ASSERT(0 == uv_udp_set_ttl(&h2, 1)); -#endif - - ASSERT(0 == uv_udp_set_multicast_loop(&h2, 1)); - ASSERT(0 == uv_udp_set_multicast_interface(&h2, "0.0.0.0")); - - uv_close((uv_handle_t*) &h2, NULL); - - ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-send-and-recv.c b/libuv/test/test-udp-send-and-recv.c deleted file mode 100644 index d602090..0000000 --- a/libuv/test/test-udp-send-and-recv.c +++ /dev/null @@ -1,212 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client) - -static uv_udp_t server; -static uv_udp_t client; - -static int cl_send_cb_called; -static int cl_recv_cb_called; - -static int sv_send_cb_called; -static int sv_recv_cb_called; - -static int close_cb_called; - - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[65536]; - CHECK_HANDLE(handle); - ASSERT(suggested_size <= sizeof(slab)); - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void close_cb(uv_handle_t* handle) { - CHECK_HANDLE(handle); - ASSERT(1 == uv_is_closing(handle)); - close_cb_called++; -} - - -static void cl_recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* buf, - const struct sockaddr* addr, - unsigned flags) { - CHECK_HANDLE(handle); - ASSERT(flags == 0); - - if (nread < 0) { - ASSERT(0 && "unexpected error"); - } - - if (nread == 0) { - /* Returning unused buffer. Don't count towards cl_recv_cb_called */ - ASSERT_NULL(addr); - return; - } - - ASSERT_NOT_NULL(addr); - ASSERT(nread == 4); - ASSERT(!memcmp("PONG", buf->base, nread)); - - cl_recv_cb_called++; - - uv_close((uv_handle_t*) handle, close_cb); -} - - -static void cl_send_cb(uv_udp_send_t* req, int status) { - int r; - - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - CHECK_HANDLE(req->handle); - - r = uv_udp_recv_start(req->handle, alloc_cb, cl_recv_cb); - ASSERT(r == 0); - - cl_send_cb_called++; -} - - -static void sv_send_cb(uv_udp_send_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - CHECK_HANDLE(req->handle); - - uv_close((uv_handle_t*) req->handle, close_cb); - free(req); - - sv_send_cb_called++; -} - - -static void sv_recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* rcvbuf, - const struct sockaddr* addr, - unsigned flags) { - uv_udp_send_t* req; - uv_buf_t sndbuf; - int r; - - if (nread < 0) { - ASSERT(0 && "unexpected error"); - } - - if (nread == 0) { - /* Returning unused buffer. Don't count towards sv_recv_cb_called */ - ASSERT_NULL(addr); - return; - } - - CHECK_HANDLE(handle); - ASSERT(flags == 0); - - ASSERT_NOT_NULL(addr); - ASSERT(nread == 4); - ASSERT(!memcmp("PING", rcvbuf->base, nread)); - - /* FIXME? `uv_udp_recv_stop` does what it says: recv_cb is not called - * anymore. That's problematic because the read buffer won't be returned - * either... Not sure I like that but it's consistent with `uv_read_stop`. - */ - r = uv_udp_recv_stop(handle); - ASSERT(r == 0); - - req = malloc(sizeof *req); - ASSERT_NOT_NULL(req); - - sndbuf = uv_buf_init("PONG", 4); - r = uv_udp_send(req, handle, &sndbuf, 1, addr, sv_send_cb); - ASSERT(r == 0); - - sv_recv_cb_called++; -} - - -TEST_IMPL(udp_send_and_recv) { - struct sockaddr_in addr; - uv_udp_send_t req; - uv_buf_t buf; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - r = uv_udp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - r = uv_udp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_udp_recv_start(&server, alloc_cb, sv_recv_cb); - ASSERT(r == 0); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_udp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - /* client sends "PING", expects "PONG" */ - buf = uv_buf_init("PING", 4); - - r = uv_udp_send(&req, - &client, - &buf, - 1, - (const struct sockaddr*) &addr, - cl_send_cb); - ASSERT(r == 0); - - ASSERT(close_cb_called == 0); - ASSERT(cl_send_cb_called == 0); - ASSERT(cl_recv_cb_called == 0); - ASSERT(sv_send_cb_called == 0); - ASSERT(sv_recv_cb_called == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(cl_send_cb_called == 1); - ASSERT(cl_recv_cb_called == 1); - ASSERT(sv_send_cb_called == 1); - ASSERT(sv_recv_cb_called == 1); - ASSERT(close_cb_called == 2); - - ASSERT(client.send_queue_size == 0); - ASSERT(server.send_queue_size == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-send-hang-loop.c b/libuv/test/test-udp-send-hang-loop.c deleted file mode 100644 index 072070b..0000000 --- a/libuv/test/test-udp-send-hang-loop.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright The libuv project and contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define CHECK_OBJECT(handle, type, parent) \ - ASSERT((type*)(handle) == &(parent)) - -static uv_udp_t client; -static uv_idle_t idle_handle; -static uv_udp_send_t send_req; -static uv_buf_t buf; -static struct sockaddr_in addr; -static char send_data[1024]; - -static int loop_hang_called; - -static void send_cb(uv_udp_send_t* req, int status); - - -static void idle_cb(uv_idle_t* handle) { - int r; - - ASSERT_NULL(send_req.handle); - CHECK_OBJECT(handle, uv_idle_t, idle_handle); - ASSERT(0 == uv_idle_stop(handle)); - - /* It probably would have stalled by now if it's going to stall at all. */ - if (++loop_hang_called > 1000) { - uv_close((uv_handle_t*) &client, NULL); - uv_close((uv_handle_t*) &idle_handle, NULL); - return; - } - - r = uv_udp_send(&send_req, - &client, - &buf, - 1, - (const struct sockaddr*) &addr, - send_cb); - ASSERT(r == 0); -} - - -static void send_cb(uv_udp_send_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0 || status == UV_ENETUNREACH); - CHECK_OBJECT(req->handle, uv_udp_t, client); - CHECK_OBJECT(req, uv_udp_send_t, send_req); - req->handle = NULL; - - ASSERT(0 == uv_idle_start(&idle_handle, idle_cb)); -} - - -TEST_IMPL(udp_send_hang_loop) { - ASSERT(0 == uv_idle_init(uv_default_loop(), &idle_handle)); - - /* 192.0.2.0/8 is "TEST-NET" and reserved for documentation. - * Good for us, though. Since we want to have something unreachable. - */ - ASSERT(0 == uv_ip4_addr("192.0.2.3", TEST_PORT, &addr)); - - ASSERT(0 == uv_udp_init(uv_default_loop(), &client)); - - buf = uv_buf_init(send_data, sizeof(send_data)); - - ASSERT(0 == uv_idle_start(&idle_handle, idle_cb)); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(loop_hang_called > 1000); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-send-immediate.c b/libuv/test/test-udp-send-immediate.c deleted file mode 100644 index a1c95d3..0000000 --- a/libuv/test/test-udp-send-immediate.c +++ /dev/null @@ -1,148 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client) - -static uv_udp_t server; -static uv_udp_t client; - -static int cl_send_cb_called; -static int sv_recv_cb_called; -static int close_cb_called; - - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[65536]; - CHECK_HANDLE(handle); - ASSERT(suggested_size <= sizeof(slab)); - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void close_cb(uv_handle_t* handle) { - CHECK_HANDLE(handle); - ASSERT(1 == uv_is_closing(handle)); - close_cb_called++; -} - - -static void cl_send_cb(uv_udp_send_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - CHECK_HANDLE(req->handle); - - cl_send_cb_called++; -} - - -static void sv_recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* rcvbuf, - const struct sockaddr* addr, - unsigned flags) { - if (nread < 0) { - ASSERT(0 && "unexpected error"); - } - - if (nread == 0) { - /* Returning unused buffer. Don't count towards sv_recv_cb_called */ - ASSERT_NULL(addr); - return; - } - - CHECK_HANDLE(handle); - ASSERT(flags == 0); - - ASSERT_NOT_NULL(addr); - ASSERT(nread == 4); - ASSERT(memcmp("PING", rcvbuf->base, nread) == 0 || - memcmp("PANG", rcvbuf->base, nread) == 0); - - if (++sv_recv_cb_called == 2) { - uv_close((uv_handle_t*) &server, close_cb); - uv_close((uv_handle_t*) &client, close_cb); - } -} - - -TEST_IMPL(udp_send_immediate) { - struct sockaddr_in addr; - uv_udp_send_t req1, req2; - uv_buf_t buf; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - r = uv_udp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - r = uv_udp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_udp_recv_start(&server, alloc_cb, sv_recv_cb); - ASSERT(r == 0); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_udp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - /* client sends "PING", then "PANG" */ - buf = uv_buf_init("PING", 4); - - r = uv_udp_send(&req1, - &client, - &buf, - 1, - (const struct sockaddr*) &addr, - cl_send_cb); - ASSERT(r == 0); - - buf = uv_buf_init("PANG", 4); - - r = uv_udp_send(&req2, - &client, - &buf, - 1, - (const struct sockaddr*) &addr, - cl_send_cb); - ASSERT(r == 0); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(cl_send_cb_called == 2); - ASSERT(sv_recv_cb_called == 2); - ASSERT(close_cb_called == 2); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-send-unreachable.c b/libuv/test/test-udp-send-unreachable.c deleted file mode 100644 index c67a23b..0000000 --- a/libuv/test/test-udp-send-unreachable.c +++ /dev/null @@ -1,201 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &client || (uv_udp_t*)(handle) == &client2) - -static uv_udp_t client; -static uv_udp_t client2; -static uv_timer_t timer; - -static int send_cb_called; -static int recv_cb_called; -static int close_cb_called; -static int alloc_cb_called; -static int timer_cb_called; -static int can_recverr; - - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[65536]; - CHECK_HANDLE(handle); - ASSERT_LE(suggested_size, sizeof(slab)); - buf->base = slab; - buf->len = sizeof(slab); - alloc_cb_called++; -} - - -static void close_cb(uv_handle_t* handle) { - ASSERT_EQ(1, uv_is_closing(handle)); - close_cb_called++; -} - - -static void send_cb(uv_udp_send_t* req, int status) { - ASSERT_NOT_NULL(req); - ASSERT(status == 0); - ASSERT_EQ(status, 0); - CHECK_HANDLE(req->handle); - send_cb_called++; -} - -static void send_cb_recverr(uv_udp_send_t* req, int status) { - ASSERT_PTR_NE(req, NULL); - ASSERT(status == 0 || status == UV_ECONNREFUSED); - CHECK_HANDLE(req->handle); - send_cb_called++; -} - -static void recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* rcvbuf, - const struct sockaddr* addr, - unsigned flags) { - CHECK_HANDLE(handle); - recv_cb_called++; - - if (nread < 0) { - ASSERT(0 && "unexpected error"); - } else if (nread == 0) { - /* Returning unused buffer */ - ASSERT_NULL(addr); - } else { - ASSERT_NOT_NULL(addr); - } -} - - -static void timer_cb(uv_timer_t* h) { - ASSERT_PTR_EQ(h, &timer); - timer_cb_called++; - uv_close((uv_handle_t*) &client, close_cb); - if (can_recverr) - uv_close((uv_handle_t*) &client2, close_cb); - uv_close((uv_handle_t*) h, close_cb); -} - - -TEST_IMPL(udp_send_unreachable) { - struct sockaddr_in addr; - struct sockaddr_in addr2; - struct sockaddr_in addr3; - uv_udp_send_t req1, req2, req3, req4; - uv_buf_t buf; - int r; - -#ifdef __linux__ - can_recverr = 1; -#endif - - ASSERT_EQ(0, uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - ASSERT_EQ(0, uv_ip4_addr("127.0.0.1", TEST_PORT_2, &addr2)); - ASSERT_EQ(0, uv_ip4_addr("127.0.0.1", TEST_PORT_3, &addr3)); - - r = uv_timer_init( uv_default_loop(), &timer ); - ASSERT_EQ(r, 0); - - r = uv_timer_start( &timer, timer_cb, 1000, 0 ); - ASSERT_EQ(r, 0); - - r = uv_udp_init(uv_default_loop(), &client); - ASSERT_EQ(r, 0); - - r = uv_udp_bind(&client, (const struct sockaddr*) &addr2, 0); - ASSERT_EQ(r, 0); - - r = uv_udp_recv_start(&client, alloc_cb, recv_cb); - ASSERT_EQ(r, 0); - - /* client sends "PING", then "PANG" */ - buf = uv_buf_init("PING", 4); - - r = uv_udp_send(&req1, - &client, - &buf, - 1, - (const struct sockaddr*) &addr, - send_cb); - ASSERT_EQ(r, 0); - - buf = uv_buf_init("PANG", 4); - - r = uv_udp_send(&req2, - &client, - &buf, - 1, - (const struct sockaddr*) &addr, - send_cb); - ASSERT_EQ(r, 0); - - if (can_recverr) { - r = uv_udp_init(uv_default_loop(), &client2); - ASSERT_EQ(r, 0); - - r = uv_udp_bind(&client2, - (const struct sockaddr*) &addr3, - UV_UDP_LINUX_RECVERR); - ASSERT_EQ(r, 0); - - r = uv_udp_recv_start(&client2, alloc_cb, recv_cb); - ASSERT_EQ(r, 0); - - /* client sends "PING", then "PANG" */ - buf = uv_buf_init("PING", 4); - - r = uv_udp_send(&req3, - &client2, - &buf, - 1, - (const struct sockaddr*) &addr, - send_cb_recverr); - ASSERT_EQ(r, 0); - - buf = uv_buf_init("PANG", 4); - - r = uv_udp_send(&req4, - &client2, - &buf, - 1, - (const struct sockaddr*) &addr, - send_cb_recverr); - ASSERT_EQ(r, 0); - } - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT_EQ(send_cb_called, (long)(can_recverr ? 4 : 2)); - ASSERT_EQ(recv_cb_called, alloc_cb_called); - ASSERT_EQ(timer_cb_called, 1); - ASSERT_EQ(close_cb_called, (long)(can_recverr ? 3 : 2)); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-sendmmsg-error.c b/libuv/test/test-udp-sendmmsg-error.c deleted file mode 100644 index c8a411b..0000000 --- a/libuv/test/test-udp-sendmmsg-error.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright libuv project and contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -#define DATAGRAMS 6 - -static uv_udp_t client; -static uv_udp_send_t req[DATAGRAMS]; - -static int send_cb_called; -static int close_cb_called; - - -static void close_cb(uv_handle_t* handle) { - ASSERT_PTR_EQ(handle, &client); - ASSERT(uv_is_closing(handle)); - close_cb_called++; -} - - -static void send_cb(uv_udp_send_t* req, int status) { - if (status != 0) - ASSERT_EQ(status, UV_ECONNREFUSED); - - if (++send_cb_called == DATAGRAMS) - uv_close((uv_handle_t*)&client, close_cb); -} - - -TEST_IMPL(udp_sendmmsg_error) { - struct sockaddr_in addr; - uv_buf_t buf; - int i; - - ASSERT_EQ(0, uv_udp_init(uv_default_loop(), &client)); - ASSERT_EQ(0, uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - ASSERT_EQ(0, uv_udp_connect(&client, (const struct sockaddr*)&addr)); - - buf = uv_buf_init("TEST", 4); - for (i = 0; i < DATAGRAMS; ++i) - ASSERT_EQ(0, uv_udp_send(&req[i], &client, &buf, 1, NULL, send_cb)); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT_EQ(1, close_cb_called); - ASSERT_EQ(DATAGRAMS, send_cb_called); - - ASSERT_EQ(0, client.send_queue_size); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-udp-try-send.c b/libuv/test/test-udp-try-send.c deleted file mode 100644 index 85caaac..0000000 --- a/libuv/test/test-udp-try-send.c +++ /dev/null @@ -1,121 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include -#include - -#define CHECK_HANDLE(handle) \ - ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client) - -static uv_udp_t server; -static uv_udp_t client; - -static int sv_recv_cb_called; - -static int close_cb_called; - - -static void alloc_cb(uv_handle_t* handle, - size_t suggested_size, - uv_buf_t* buf) { - static char slab[65536]; - CHECK_HANDLE(handle); - ASSERT(suggested_size <= sizeof(slab)); - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void close_cb(uv_handle_t* handle) { - CHECK_HANDLE(handle); - ASSERT(uv_is_closing(handle)); - close_cb_called++; -} - - -static void sv_recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* rcvbuf, - const struct sockaddr* addr, - unsigned flags) { - ASSERT(nread > 0); - - if (nread == 0) { - ASSERT_NULL(addr); - return; - } - - ASSERT(nread == 4); - ASSERT_NOT_NULL(addr); - - ASSERT(memcmp("EXIT", rcvbuf->base, nread) == 0); - uv_close((uv_handle_t*) handle, close_cb); - uv_close((uv_handle_t*) &client, close_cb); - - sv_recv_cb_called++; -} - - -TEST_IMPL(udp_try_send) { - struct sockaddr_in addr; - static char buffer[64 * 1024]; - uv_buf_t buf; - int r; - - ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); - - r = uv_udp_init(uv_default_loop(), &server); - ASSERT(r == 0); - - r = uv_udp_bind(&server, (const struct sockaddr*) &addr, 0); - ASSERT(r == 0); - - r = uv_udp_recv_start(&server, alloc_cb, sv_recv_cb); - ASSERT(r == 0); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - - r = uv_udp_init(uv_default_loop(), &client); - ASSERT(r == 0); - - buf = uv_buf_init(buffer, sizeof(buffer)); - r = uv_udp_try_send(&client, &buf, 1, (const struct sockaddr*) &addr); - ASSERT(r == UV_EMSGSIZE); - - buf = uv_buf_init("EXIT", 4); - r = uv_udp_try_send(&client, &buf, 1, (const struct sockaddr*) &addr); - ASSERT(r == 4); - - uv_run(uv_default_loop(), UV_RUN_DEFAULT); - - ASSERT(close_cb_called == 2); - ASSERT(sv_recv_cb_called == 1); - - ASSERT(client.send_queue_size == 0); - ASSERT(server.send_queue_size == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-uname.c b/libuv/test/test-uname.c deleted file mode 100644 index 105a17f..0000000 --- a/libuv/test/test-uname.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright libuv project contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" -#include - -#ifndef _WIN32 -# include -#endif - -TEST_IMPL(uname) { -#ifndef _WIN32 - struct utsname buf; -#endif -#ifdef _AIX - char temp[256]; -#endif - uv_utsname_t buffer; - int r; - - /* Verify that NULL is handled properly. */ - r = uv_os_uname(NULL); - ASSERT(r == UV_EINVAL); - - /* Verify the happy path. */ - r = uv_os_uname(&buffer); - ASSERT(r == 0); - -#ifndef _WIN32 - ASSERT(uname(&buf) != -1); - ASSERT(strcmp(buffer.sysname, buf.sysname) == 0); - ASSERT(strcmp(buffer.version, buf.version) == 0); - -# ifdef _AIX - snprintf(temp, sizeof(temp), "%s.%s", buf.version, buf.release); - ASSERT(strcmp(buffer.release, temp) == 0); -# else - ASSERT(strcmp(buffer.release, buf.release) == 0); -# endif /* _AIX */ - -# if defined(_AIX) || defined(__PASE__) - ASSERT(strcmp(buffer.machine, "ppc64") == 0); -# else - ASSERT(strcmp(buffer.machine, buf.machine) == 0); -# endif /* defined(_AIX) || defined(__PASE__) */ - -#endif /* _WIN32 */ - - return 0; -} diff --git a/libuv/test/test-walk-handles.c b/libuv/test/test-walk-handles.c deleted file mode 100644 index 4b0ca6e..0000000 --- a/libuv/test/test-walk-handles.c +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -static char magic_cookie[] = "magic cookie"; -static int seen_timer_handle; -static uv_timer_t timer; - - -static void walk_cb(uv_handle_t* handle, void* arg) { - ASSERT(arg == (void*)magic_cookie); - - if (handle == (uv_handle_t*)&timer) { - seen_timer_handle++; - } else { - ASSERT(0 && "unexpected handle"); - } -} - - -static void timer_cb(uv_timer_t* handle) { - ASSERT(handle == &timer); - - uv_walk(handle->loop, walk_cb, magic_cookie); - uv_close((uv_handle_t*)handle, NULL); -} - - -TEST_IMPL(walk_handles) { - uv_loop_t* loop; - int r; - - loop = uv_default_loop(); - - r = uv_timer_init(loop, &timer); - ASSERT(r == 0); - - r = uv_timer_start(&timer, timer_cb, 1, 0); - ASSERT(r == 0); - - /* Start event loop, expect to see the timer handle in walk_cb. */ - ASSERT(seen_timer_handle == 0); - r = uv_run(loop, UV_RUN_DEFAULT); - ASSERT(r == 0); - ASSERT(seen_timer_handle == 1); - - /* Loop is finished, walk_cb should not see our timer handle. */ - seen_timer_handle = 0; - uv_walk(loop, walk_cb, magic_cookie); - ASSERT(seen_timer_handle == 0); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/test/test-watcher-cross-stop.c b/libuv/test/test-watcher-cross-stop.c deleted file mode 100644 index b26deb8..0000000 --- a/libuv/test/test-watcher-cross-stop.c +++ /dev/null @@ -1,112 +0,0 @@ -/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "uv.h" -#include "task.h" - -#include -#include - -/* NOTE: Number should be big enough to trigger this problem */ -#if defined(__CYGWIN__) || defined(__MSYS__) || defined(__PASE__) -/* Cygwin crashes or hangs in socket() with too many AF_INET sockets. */ -/* IBMi PASE timeout with too many AF_INET sockets. */ -static uv_udp_t sockets[1250]; -#else -static uv_udp_t sockets[2500]; -#endif -static uv_udp_send_t reqs[ARRAY_SIZE(sockets)]; -static char slab[1]; -static unsigned int recv_cb_called; -static unsigned int send_cb_called; -static unsigned int close_cb_called; - -static void alloc_cb(uv_handle_t* handle, size_t size, uv_buf_t* buf) { - buf->base = slab; - buf->len = sizeof(slab); -} - - -static void recv_cb(uv_udp_t* handle, - ssize_t nread, - const uv_buf_t* buf, - const struct sockaddr* addr, - unsigned flags) { - recv_cb_called++; -} - - -static void send_cb(uv_udp_send_t* req, int status) { - send_cb_called++; -} - - -static void close_cb(uv_handle_t* handle) { - close_cb_called++; -} - - -TEST_IMPL(watcher_cross_stop) { -#if defined(__MVS__) - RETURN_SKIP("zOS does not allow address or port reuse when using UDP sockets"); -#endif - uv_loop_t* loop = uv_default_loop(); - unsigned int i; - struct sockaddr_in addr; - uv_buf_t buf; - char big_string[1024]; - - TEST_FILE_LIMIT(ARRAY_SIZE(sockets) + 32); - - ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - memset(big_string, 'A', sizeof(big_string)); - buf = uv_buf_init(big_string, sizeof(big_string)); - - for (i = 0; i < ARRAY_SIZE(sockets); i++) { - ASSERT(0 == uv_udp_init(loop, &sockets[i])); - ASSERT(0 == uv_udp_bind(&sockets[i], - (const struct sockaddr*) &addr, - UV_UDP_REUSEADDR)); - ASSERT(0 == uv_udp_recv_start(&sockets[i], alloc_cb, recv_cb)); - ASSERT(0 == uv_udp_send(&reqs[i], - &sockets[i], - &buf, - 1, - (const struct sockaddr*) &addr, - send_cb)); - } - - while (recv_cb_called == 0) - uv_run(loop, UV_RUN_ONCE); - - for (i = 0; i < ARRAY_SIZE(sockets); i++) - uv_close((uv_handle_t*) &sockets[i], close_cb); - - ASSERT(recv_cb_called > 0); - - uv_run(loop, UV_RUN_DEFAULT); - - ASSERT(ARRAY_SIZE(sockets) == send_cb_called); - ASSERT(ARRAY_SIZE(sockets) == close_cb_called); - - MAKE_VALGRIND_HAPPY(); - return 0; -} diff --git a/libuv/tools/make_dist_html.py b/libuv/tools/make_dist_html.py deleted file mode 100644 index 4833b1b..0000000 --- a/libuv/tools/make_dist_html.py +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/python3 - -import itertools -import os -import re -import subprocess - -HTML = r''' - - - - - - - - - {groups}
- - -''' - -GROUPS = r''' - - {groups[0]} - {groups[1]} - {groups[2]} - {groups[3]} - -''' - -GROUP = r''' - - - - - - - - {rows} -
versiontarballgpgwindows
-''' - -ROW = r''' - - -
{tag} - - - tarball - - {maybe_gpg} - {maybe_exe} - -''' - -GPG = r''' -gpg -''' - -# The binaries don't have a predictable name, link to the directory instead. -EXE = r''' -exe -''' - -def version(tag): - return list(map(int, re.match('^v(\d+)\.(\d+)\.(\d+)', tag).groups())) - -def major_minor(tag): - return version(tag)[:2] - -def row_for(tag): - maybe_gpg = '' - maybe_exe = '' - # We didn't start signing releases and producing Windows installers - # until v1.7.0. - if version(tag) >= version('v1.7.0'): - maybe_gpg = GPG.format(**locals()) - maybe_exe = EXE.format(**locals()) - return ROW.format(**locals()) - -def group_for(tags): - rows = ''.join(row_for(tag) for tag in tags) - return GROUP.format(rows=rows) - -# Partition in groups of |n|. -def groups_for(groups, n=4): - html = '' - groups = groups[:] + [''] * (n - 1) - while len(groups) >= n: - html += GROUPS.format(groups=groups) - groups = groups[n:] - return html - -if __name__ == '__main__': - os.chdir(os.path.dirname(__file__)) - tags = subprocess.check_output(['git', 'tag'], text=True) - tags = [tag for tag in tags.split('\n') if tag.startswith('v')] - tags.sort(key=version, reverse=True) - groups = [group_for(list(g)) for _, g in itertools.groupby(tags, major_minor)] - groups = groups_for(groups) - html = HTML.format(groups=groups).strip() - html = re.sub('>\\s+<', '><', html) - print(html) diff --git a/libuv/uv_win_longpath.manifest b/libuv/uv_win_longpath.manifest deleted file mode 100644 index 8976e6d..0000000 --- a/libuv/uv_win_longpath.manifest +++ /dev/null @@ -1,8 +0,0 @@ - - - - - true - - - diff --git a/libuv/watch_dir/file1 b/libuv/watch_dir/file1 deleted file mode 100644 index 5e154ebab7789d4cd418eeaccf08260e6583b8ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 LcmYex&u0Jt1IGbH diff --git a/libuv/watch_dir/file2 b/libuv/watch_dir/file2 deleted file mode 100644 index 5e154ebab7789d4cd418eeaccf08260e6583b8ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 LcmYex&u0Jt1IGbH diff --git a/libuv/watch_dir/fsevent-0 b/libuv/watch_dir/fsevent-0 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-1 b/libuv/watch_dir/fsevent-1 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-10 b/libuv/watch_dir/fsevent-10 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-11 b/libuv/watch_dir/fsevent-11 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-12 b/libuv/watch_dir/fsevent-12 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-13 b/libuv/watch_dir/fsevent-13 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-14 b/libuv/watch_dir/fsevent-14 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-15 b/libuv/watch_dir/fsevent-15 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-2 b/libuv/watch_dir/fsevent-2 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-3 b/libuv/watch_dir/fsevent-3 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-4 b/libuv/watch_dir/fsevent-4 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-5 b/libuv/watch_dir/fsevent-5 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-6 b/libuv/watch_dir/fsevent-6 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-7 b/libuv/watch_dir/fsevent-7 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-8 b/libuv/watch_dir/fsevent-8 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_dir/fsevent-9 b/libuv/watch_dir/fsevent-9 deleted file mode 100644 index e69de29..0000000 diff --git a/libuv/watch_file b/libuv/watch_file deleted file mode 100644 index 5e154ebab7789d4cd418eeaccf08260e6583b8ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 LcmYex&u0Jt1IGbH diff --git a/llhttp/.dockerignore b/llhttp/.dockerignore deleted file mode 100644 index 11b226d..0000000 --- a/llhttp/.dockerignore +++ /dev/null @@ -1,6 +0,0 @@ -* -!package.json -!package-lock.json -!tsconfig.json -!bin -!src diff --git a/llhttp/.eslintrc.js b/llhttp/.eslintrc.js deleted file mode 100644 index 595cf53..0000000 --- a/llhttp/.eslintrc.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = { - 'env': { - 'browser': false, - 'commonjs': true, - 'es6': true, - 'node': true - }, - 'extends': 'eslint:recommended', - 'rules': { - 'max-len': [ 2, { - 'code': 80, - 'ignoreComments': true - } ], - 'indent': [ - 'error', - 2 - ], - 'linebreak-style': [ - 'error', - 'unix' - ], - 'quotes': [ - 'error', - 'single' - ], - 'semi': [ - 'error', - 'always' - ] - } -}; diff --git a/llhttp/.github/workflows/ci.yaml b/llhttp/.github/workflows/ci.yaml deleted file mode 100644 index 6a2ad59..0000000 --- a/llhttp/.github/workflows/ci.yaml +++ /dev/null @@ -1,115 +0,0 @@ -name: CI - -on: [push, pull_request] - -env: - CI: true - -jobs: - build: - name: Build libllhttp.a - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: - - macos-latest - - ubuntu-latest - - windows-latest - steps: - - name: Install clang for Windows - if: runner.os == 'Windows' - run: | - Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') - scoop install llvm --global - - # Scoop modifies the PATH so we make the modified PATH global. - echo $env:PATH >> $env:GITHUB_PATH - - - name: Fetch code - uses: actions/checkout@v2 - with: - fetch-depth: 1 - - # Skip macOS & Windows, cache there is slower - - name: Restore node_modules cache for Linux - uses: actions/cache@v1 - if: runner.os == 'Linux' - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - - name: Install dependencies - run: npm install --ignore-scripts - - - name: Build libllhttp.a - shell: bash - run: | - make build/libllhttp.a - - test: - name: Run tests - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: - - macos-latest - - ubuntu-latest - - windows-latest - steps: - - name: Install clang for Windows - if: runner.os == 'Windows' - run: | - Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') - scoop install llvm --global - - # Scoop modifies the PATH so we make the modified PATH global. - echo $env:PATH >> $env:GITHUB_PATH - - - name: Fetch code - uses: actions/checkout@v2 - with: - fetch-depth: 1 - - # Skip macOS & Windows, cache there is slower - - name: Restore node_modules cache for Linux - uses: actions/cache@v1 - if: runner.os == 'Linux' - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - - name: Install dependencies - run: npm install --ignore-scripts - - # Custom script, because progress looks not good in CI - - name: Run tests - env: - CFLAGS: -O0 - run: npx mocha --timeout 30000 -r ts-node/register/type-check test/*-test.ts - - lint: - name: Run TSLint - runs-on: ubuntu-latest - steps: - - name: Fetch code - uses: actions/checkout@v2 - with: - fetch-depth: 1 - - - name: Restore node_modules cache - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - - name: Install dependencies - run: npm install --ignore-scripts - - - name: Run lint command - run: npm run lint diff --git a/llhttp/.gitignore b/llhttp/.gitignore deleted file mode 100644 index c2e9902..0000000 --- a/llhttp/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules/ -npm-debug.log -test/tmp/ -lib/ -build/ -release/ diff --git a/llhttp/CMakeLists.txt b/llhttp/CMakeLists.txt deleted file mode 100644 index 41d2000..0000000 --- a/llhttp/CMakeLists.txt +++ /dev/null @@ -1,53 +0,0 @@ -cmake_minimum_required(VERSION 3.5.1) -cmake_policy(SET CMP0069 NEW) - -project(llhttp C) - -set(CMAKE_C_STANDARD 99) - -# -# Options -# -# Generic option -option(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" OFF) - -# Source code -set(LLHTTP_SOURCES - src/llhttp.c - src/http.c - src/api.c -) - -set(LLHTTP_HEADERS - include/llhttp.h -) - -add_library(llhttp) -add_library(llhttp::llhttp ALIAS llhttp) - -target_sources(llhttp PRIVATE ${LLHTTP_SOURCES} ${LLHTTP_HEADERS}) - -# On windows with Visual Studio, add a debug postfix so that release -# and debug libraries can coexist. -if(MSVC) - set(CMAKE_DEBUG_POSTFIX "d") -endif() - -target_include_directories(llhttp PUBLIC - $ - $ -) - -set_target_properties(llhttp PROPERTIES PUBLIC_HEADER ${LLHTTP_HEADERS}) - -install(TARGETS llhttp - EXPORT llhttp - ARCHIVE DESTINATION lib - PUBLIC_HEADER DESTINATION include/ -) - -# This is required to work with FetchContent -install(EXPORT llhttp - FILE llhttp-config.cmake - NAMESPACE llhttp:: - DESTINATION lib/cmake/llhttp) diff --git a/llhttp/CNAME b/llhttp/CNAME deleted file mode 100644 index 4c4e078..0000000 --- a/llhttp/CNAME +++ /dev/null @@ -1 +0,0 @@ -llhttp.org \ No newline at end of file diff --git a/llhttp/CODE_OF_CONDUCT.md b/llhttp/CODE_OF_CONDUCT.md deleted file mode 100644 index 4c21140..0000000 --- a/llhttp/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,4 +0,0 @@ -# Code of Conduct - -* [Node.js Code of Conduct](https://github.com/nodejs/admin/blob/master/CODE_OF_CONDUCT.md) -* [Node.js Moderation Policy](https://github.com/nodejs/admin/blob/master/Moderation-Policy.md) diff --git a/llhttp/Dockerfile b/llhttp/Dockerfile deleted file mode 100644 index 62ff337..0000000 --- a/llhttp/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -FROM node:14.16.0-buster - -ARG UID=1000 -ARG GID=1000 -ARG WASI_SDK_VERSION_MAJOR=12 -ARG WASI_SDK_VERSION_MINOR=0 - -ENV WASI_ROOT=/home/node/wasi-sdk-12.0 - -RUN wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_VERSION_MAJOR}/wasi-sdk-${WASI_SDK_VERSION_MAJOR}.${WASI_SDK_VERSION_MINOR}-linux.tar.gz -P /tmp - -RUN tar xvf /tmp/wasi-sdk-${WASI_SDK_VERSION_MAJOR}.${WASI_SDK_VERSION_MINOR}-linux.tar.gz --directory /home/node - -RUN mkdir /home/node/llhttp - -WORKDIR /home/node/llhttp - -COPY . . - -RUN npm ci - -USER node diff --git a/llhttp/LICENSE-MIT b/llhttp/LICENSE-MIT deleted file mode 100644 index 6c1512d..0000000 --- a/llhttp/LICENSE-MIT +++ /dev/null @@ -1,22 +0,0 @@ -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2018. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/llhttp/Makefile b/llhttp/Makefile deleted file mode 100644 index 586f345..0000000 --- a/llhttp/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -CLANG ?= clang -CFLAGS ?= -OS ?= - -CFLAGS += -Os -g3 -Wall -Wextra -Wno-unused-parameter -ifneq ($(OS),Windows_NT) - # NOTE: clang on windows does not support fPIC - CFLAGS += -fPIC -endif - -INCLUDES += -Ibuild/ - -INSTALL ?= install -PREFIX ?= /usr/local -LIBDIR = $(PREFIX)/lib -INCLUDEDIR = $(PREFIX)/include - -all: build/libllhttp.a build/libllhttp.so - -clean: - rm -rf release/ - rm -rf build/ - -build/libllhttp.so: build/c/llhttp.o build/native/api.o \ - build/native/http.o - $(CLANG) -shared $^ -o $@ - -build/libllhttp.a: build/c/llhttp.o build/native/api.o \ - build/native/http.o - $(AR) rcs $@ build/c/llhttp.o build/native/api.o build/native/http.o - -build/c/llhttp.o: build/c/llhttp.c - $(CLANG) $(CFLAGS) $(INCLUDES) -c $< -o $@ - -build/native/%.o: src/native/%.c build/llhttp.h src/native/api.h \ - build/native - $(CLANG) $(CFLAGS) $(INCLUDES) -c $< -o $@ - -build/llhttp.h: generate -build/c/llhttp.c: generate - -build/native: - mkdir -p build/native - -release: generate - mkdir -p release/src - mkdir -p release/include - cp -rf build/llhttp.h release/include/ - cp -rf build/c/llhttp.c release/src/ - cp -rf src/native/*.c release/src/ - cp -rf src/llhttp.gyp release/ - cp -rf src/common.gypi release/ - cp -rf CMakeLists.txt release/ - cp -rf README.md release/ - cp -rf LICENSE-MIT release/ - -postversion: release - git push - git checkout release -- - cp -rf release/* ./ - rm -rf release - git add include src *.gyp *.gypi CMakeLists.txt README.md LICENSE-MIT - git commit -a -m "release: $(TAG)" - git tag "release/v$(TAG)" - git push && git push --tags - git checkout master - -generate: - npx ts-node bin/generate.ts - -install: build/libllhttp.a build/libllhttp.so - $(INSTALL) build/llhttp.h $(DESTDIR)$(INCLUDEDIR)/llhttp.h - $(INSTALL) build/libllhttp.a $(DESTDIR)$(LIBDIR)/libllhttp.a - $(INSTALL) build/libllhttp.so $(DESTDIR)$(LIBDIR)/libllhttp.so - -.PHONY: all generate clean release diff --git a/llhttp/README.md b/llhttp/README.md deleted file mode 100644 index 1c37cf6..0000000 --- a/llhttp/README.md +++ /dev/null @@ -1,150 +0,0 @@ -# llhttp -[![CI](https://github.com/nodejs/llhttp/workflows/CI/badge.svg)](https://github.com/nodejs/llhttp/actions?query=workflow%3ACI) - -Port of [http_parser][0] to [llparse][1]. - -## Why? - -Let's face it, [http_parser][0] is practically unmaintainable. Even -introduction of a single new method results in a significant code churn. - -This project aims to: - -* Make it maintainable -* Verifiable -* Improving benchmarks where possible - -More details in [Fedor Indutny's talk at JSConf EU 2019](https://youtu.be/x3k_5Mi66sY) - -## How? - -Over time, different approaches for improving [http_parser][0]'s code base -were tried. However, all of them failed due to resulting significant performance -degradation. - -This project is a port of [http_parser][0] to TypeScript. [llparse][1] is used -to generate the output C source file, which could be compiled and -linked with the embedder's program (like [Node.js][7]). - -## Performance - -So far llhttp outperforms http_parser: - -| | input size | bandwidth | reqs/sec | time | -|:----------------|-----------:|-------------:|-----------:|--------:| -| **llhttp** | 8192.00 mb | 1777.24 mb/s | 3583799.39 req/sec | 4.61 s | -| **http_parser** | 8192.00 mb | 694.66 mb/s | 1406180.33 req/sec | 11.79 s | - -llhttp is faster by approximately **156%**. - -## Maintenance - -llhttp project has about 1400 lines of TypeScript code describing the parser -itself and around 450 lines of C code and headers providing the helper methods. -The whole [http_parser][0] is implemented in approximately 2500 lines of C, and -436 lines of headers. - -All optimizations and multi-character matching in llhttp are generated -automatically, and thus doesn't add any extra maintenance cost. On the contrary, -most of http_parser's code is hand-optimized and unrolled. Instead describing -"how" it should parse the HTTP requests/responses, a maintainer should -implement the new features in [http_parser][0] cautiously, considering -possible performance degradation and manually optimizing the new code. - -## Verification - -The state machine graph is encoded explicitly in llhttp. The [llparse][1] -automatically checks the graph for absence of loops and correct reporting of the -input ranges (spans) like header names and values. In the future, additional -checks could be performed to get even stricter verification of the llhttp. - -## Usage - -```C -#include "llhttp.h" - -llhttp_t parser; -llhttp_settings_t settings; - -/* Initialize user callbacks and settings */ -llhttp_settings_init(&settings); - -/* Set user callback */ -settings.on_message_complete = handle_on_message_complete; - -/* Initialize the parser in HTTP_BOTH mode, meaning that it will select between - * HTTP_REQUEST and HTTP_RESPONSE parsing automatically while reading the first - * input. - */ -llhttp_init(&parser, HTTP_BOTH, &settings); - -/* Parse request! */ -const char* request = "GET / HTTP/1.1\r\n\r\n"; -int request_len = strlen(request); - -enum llhttp_errno err = llhttp_execute(&parser, request, request_len); -if (err == HPE_OK) { - /* Successfully parsed! */ -} else { - fprintf(stderr, "Parse error: %s %s\n", llhttp_errno_name(err), - parser.reason); -} -``` -For more information on API usage, please refer to [src/native/api.h](https://github.com/nodejs/llhttp/blob/master/src/native/api.h). - ---- - -### Bindings to other languages - -* Python: [pallas/pyllhttp][8] -* Ruby: [metabahn/llhttp][9] - - -### Using with CMake - -If you want to use this library in a CMake project you can use the snippet below. - -``` -FetchContent_Declare(llhttp - URL "https://github.com/nodejs/llhttp/releases/download/v6.0.4/llhttp-release-v6.0.4.tar.gz") # Using version 6.0.4 - -FetchContent_MakeAvailable(llhttp) - -target_link_libraries(${EXAMPLE_PROJECT_NAME} ${PROJECT_LIBRARIES} llhttp ${PROJECT_NAME}) -``` - -#### LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2018. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. - -[0]: https://github.com/nodejs/http-parser -[1]: https://github.com/nodejs/llparse -[2]: https://en.wikipedia.org/wiki/Register_allocation#Spilling -[3]: https://en.wikipedia.org/wiki/Tail_call -[4]: https://llvm.org/docs/LangRef.html -[5]: https://llvm.org/docs/LangRef.html#call-instruction -[6]: https://clang.llvm.org/ -[7]: https://github.com/nodejs/node -[8]: https://github.com/pallas/pyllhttp -[9]: https://github.com/metabahn/llhttp diff --git a/llhttp/_config.yml b/llhttp/_config.yml deleted file mode 100644 index 1885487..0000000 --- a/llhttp/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-midnight \ No newline at end of file diff --git a/llhttp/bench/index.ts b/llhttp/bench/index.ts deleted file mode 100644 index 0fad75d..0000000 --- a/llhttp/bench/index.ts +++ /dev/null @@ -1,83 +0,0 @@ -// NOTE: run `npm test` to build `./test/tmp/http-loose-request` - -import * as assert from 'assert'; -import { spawnSync } from 'child_process'; - -const isURL = !process.argv[2] || process.argv[2] === 'url'; -const isHTTP = !process.argv[2] || process.argv[2] === 'http'; - -const requests: Map = new Map(); - -requests.set('seanmonstar/httparse', - 'GET /wp-content/uploads/2010/03/hello-kitty-darth-vader-pink.jpg HTTP/1.1\r\n' + - 'Host: www.kittyhell.com\r\n' + - 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; ja-JP-mac; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 Pathtraq/0.9\r\n' + - 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n' + - 'Accept-Language: ja,en-us;q=0.7,en;q=0.3\r\n' + - 'Accept-Encoding: gzip,deflate\r\n' + - 'Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7\r\n' + - 'Keep-Alive: 115\r\n' + - 'Connection: keep-alive\r\n' + - 'Cookie: wp_ozh_wsa_visits=2; wp_ozh_wsa_visit_lasttime=xxxxxxxxxx; __utma=xxxxxxxxx.xxxxxxxxxx.xxxxxxxxxx.xxxxxxxxxx.xxxxxxxxxx.x; __utmz=xxxxxxxxx.xxxxxxxxxx.x.x.utmccn=(referral)|utmcsr=reader.livedoor.com|utmcct=/reader/|utmcmd=referral\r\n\r\n'); - -requests.set('nodejs/http-parser', - 'POST /joyent/http-parser HTTP/1.1\r\n' + - 'Host: github.com\r\n' + - 'DNT: 1\r\n' + - 'Accept-Encoding: gzip, deflate, sdch\r\n' + - 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4\r\n' + - 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) ' + - 'AppleWebKit/537.36 (KHTML, like Gecko) ' + - 'Chrome/39.0.2171.65 Safari/537.36\r\n' + - 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,' + - 'image/webp,*/*;q=0.8\r\n' + - 'Referer: https://github.com/joyent/http-parser\r\n' + - 'Connection: keep-alive\r\n' + - 'Transfer-Encoding: chunked\r\n' + - 'Cache-Control: max-age=0\r\n\r\nb\r\nhello world\r\n0\r\n\r\n'); - -if (process.argv[2] === 'loop') { - const reqName = process.argv[3]; - assert(requests.has(reqName), `Unknown request name: "${reqName}"`); - - const request = requests.get(reqName)!; - spawnSync('./test/tmp/http-loose-request', [ - 'loop', - request - ], { stdio: 'inherit' }); - process.exit(0); -} - -if (isURL) { - console.log('url loose (C)'); - - spawnSync('./test/tmp/url-loose-url-c', [ - 'bench', - 'http://example.com/path/to/file?query=value#fragment' - ], { stdio: 'inherit' }); - - console.log('url strict (C)'); - - spawnSync('./test/tmp/url-strict-url-c', [ - 'bench', - 'http://example.com/path/to/file?query=value#fragment' - ], { stdio: 'inherit' }); -} - -if (isHTTP) { - requests.forEach((request, name) => { - console.log('http loose: "%s" (C)', name); - - spawnSync('./test/tmp/http-loose-request-c', [ - 'bench', - request - ], { stdio: 'inherit' }); - - console.log('http strict: "%s" (C)', name); - - spawnSync('./test/tmp/http-strict-request-c', [ - 'bench', - request - ], { stdio: 'inherit' }); - }); -} diff --git a/llhttp/bin/build_wasm.ts b/llhttp/bin/build_wasm.ts deleted file mode 100644 index f80fef7..0000000 --- a/llhttp/bin/build_wasm.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { execSync } from 'child_process'; -import { copyFileSync, mkdirSync, writeFileSync } from 'fs'; -import { stringify } from 'javascript-stringify'; -import { join, resolve } from 'path'; -import { constants } from '..'; - -const { WASI_ROOT } = process.env; -const WASM_OUT = resolve(__dirname, '../build/wasm'); -const WASM_SRC = resolve(__dirname, '../'); - -if (process.argv[2] === '--setup') { - try { - mkdirSync(join(WASM_SRC, 'build')); - process.exit(0); - } catch (error) { - if (error.code !== 'EEXIST') { - throw error; - } - process.exit(0); - } -} - -if (process.argv[2] === '--docker') { - let cmd = 'docker run --rm -it'; - // Try to avoid root permission problems on compiled assets - // when running on linux. - // It will work flawessly if uid === gid === 1000 - // there will be some warnings otherwise. - if (process.platform === 'linux') { - cmd += ` --user ${process.getuid()}:${process.getegid()}`; - } - cmd += ` --mount type=bind,source=${WASM_SRC}/build,target=/home/node/llhttp/build llhttp_wasm_builder npm run wasm`; - execSync(cmd, { cwd: WASM_SRC, stdio: 'inherit' }); - process.exit(0); -} - -if (!WASI_ROOT) { - throw new Error('Please setup the WASI_ROOT env variable.'); -} - -try { - mkdirSync(WASM_OUT); -} catch (error) { - if (error.code !== 'EEXIST') { - throw error; - } -} - -// Build ts -execSync('npm run build', { cwd: WASM_SRC, stdio: 'inherit' }); - -// Build wasm binary -execSync(`${WASI_ROOT}/bin/clang \ - --sysroot=${WASI_ROOT}/share/wasi-sysroot \ - -target wasm32-unknown-wasi \ - -Ofast \ - -fno-exceptions \ - -fvisibility=hidden \ - -mexec-model=reactor \ - -Wl,-error-limit=0 \ - -Wl,-O3 \ - -Wl,--lto-O3 \ - -Wl,--strip-all \ - -Wl,--allow-undefined \ - -Wl,--export-dynamic \ - -Wl,--export-table \ - -Wl,--export=malloc \ - -Wl,--export=free \ - ${join(WASM_SRC, 'build', 'c')}/*.c \ - ${join(WASM_SRC, 'src', 'native')}/*.c \ - -I${join(WASM_SRC, 'build')} \ - -o ${join(WASM_OUT, 'llhttp.wasm')}`, { stdio: 'inherit' }); - -// Copy constants for `.js` and `.ts` users. -copyFileSync(join(WASM_SRC, 'lib', 'llhttp', 'constants.js'), join(WASM_OUT, 'constants.js')); -copyFileSync(join(WASM_SRC, 'lib', 'llhttp', 'constants.js.map'), join(WASM_OUT, 'constants.js.map')); -copyFileSync(join(WASM_SRC, 'lib', 'llhttp', 'constants.d.ts'), join(WASM_OUT, 'constants.d.ts')); -copyFileSync(join(WASM_SRC, 'lib', 'llhttp', 'utils.js'), join(WASM_OUT, 'utils.js')); -copyFileSync(join(WASM_SRC, 'lib', 'llhttp', 'utils.js.map'), join(WASM_OUT, 'utils.js.map')); -copyFileSync(join(WASM_SRC, 'lib', 'llhttp', 'utils.d.ts'), join(WASM_OUT, 'utils.d.ts')); diff --git a/llhttp/bin/generate.ts b/llhttp/bin/generate.ts deleted file mode 100644 index cb0d8c7..0000000 --- a/llhttp/bin/generate.ts +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env -S npx ts-node -import * as fs from 'fs'; -import { LLParse } from 'llparse'; -import * as path from 'path'; -import * as semver from 'semver'; - -import * as llhttp from '../src/llhttp'; - -const pkgFile = path.join(__dirname, '..', 'package.json'); -const pkg = JSON.parse(fs.readFileSync(pkgFile).toString()); - -const BUILD_DIR = path.join(__dirname, '..', 'build'); -const C_DIR = path.join(BUILD_DIR, 'c'); -const SRC_DIR = path.join(__dirname, '..', 'src'); - -const C_FILE = path.join(C_DIR, 'llhttp.c'); -const HEADER_FILE = path.join(BUILD_DIR, 'llhttp.h'); - -for (const dir of [ BUILD_DIR, C_DIR ]) { - try { - fs.mkdirSync(dir); - } catch (e) { - // no-op - } -} - -function build(mode: 'strict' | 'loose') { - const llparse = new LLParse('llhttp__internal'); - const instance = new llhttp.HTTP(llparse, mode); - - return llparse.build(instance.build().entry, { - c: { - header: 'llhttp', - }, - debug: process.env.LLPARSE_DEBUG ? 'llhttp__debug' : undefined, - headerGuard: 'INCLUDE_LLHTTP_ITSELF_H_', - }); -} - -function guard(strict: string, loose: string): string { - let out = ''; - - if (strict === loose) { - return strict; - } - - out += '#if LLHTTP_STRICT_MODE\n'; - out += '\n'; - out += strict + '\n'; - out += '\n'; - out += '#else /* !LLHTTP_STRICT_MODE */\n'; - out += '\n'; - out += loose + '\n'; - out += '\n'; - out += '#endif /* LLHTTP_STRICT_MODE */\n'; - - return out; -} - -const artifacts = { - loose: build('loose'), - strict: build('strict'), -}; - -let headers = ''; - -headers += '#ifndef INCLUDE_LLHTTP_H_\n'; -headers += '#define INCLUDE_LLHTTP_H_\n'; - -headers += '\n'; - -const version = semver.parse(pkg.version)!; - -headers += `#define LLHTTP_VERSION_MAJOR ${version.major}\n`; -headers += `#define LLHTTP_VERSION_MINOR ${version.minor}\n`; -headers += `#define LLHTTP_VERSION_PATCH ${version.patch}\n`; -headers += '\n'; - -headers += '#ifndef LLHTTP_STRICT_MODE\n'; -headers += '# define LLHTTP_STRICT_MODE 0\n'; -headers += '#endif\n'; -headers += '\n'; - -const cHeaders = new llhttp.CHeaders(); - -headers += guard(artifacts.strict.header, artifacts.loose.header); - -headers += '\n'; - -headers += cHeaders.build(); - -headers += '\n'; - -headers += fs.readFileSync(path.join(SRC_DIR, 'native', 'api.h')); - -headers += '\n'; -headers += '#endif /* INCLUDE_LLHTTP_H_ */\n'; - -fs.writeFileSync(C_FILE, - guard(artifacts.strict.c || '', artifacts.loose.c || '')); -fs.writeFileSync(HEADER_FILE, headers); diff --git a/llhttp/examples/wasm.ts b/llhttp/examples/wasm.ts deleted file mode 100644 index 995fed8..0000000 --- a/llhttp/examples/wasm.ts +++ /dev/null @@ -1,248 +0,0 @@ -/** - * A minimal Parser that mimicks a small fraction of the Node.js parser - * API. - * To run: - * - `npm run build-wasm` - * - `npx ts-node examples/wasm.ts` - */ -import { readFileSync } from 'fs'; -import { resolve } from 'path'; -import * as constants from '../build/wasm/constants'; - -const bin = readFileSync(resolve(__dirname, '../build/wasm/llhttp.wasm')); -const mod = new WebAssembly.Module(bin); - -const REQUEST = constants.TYPE.REQUEST; -const RESPONSE = constants.TYPE.RESPONSE; -const kOnMessageBegin = 0; -const kOnHeaders = 1; -const kOnHeadersComplete = 2; -const kOnBody = 3; -const kOnMessageComplete = 4; -const kOnExecute = 5; - -const kPtr = Symbol('kPtr'); -const kUrl = Symbol('kUrl'); -const kStatusMessage = Symbol('kStatusMessage'); -const kHeadersFields = Symbol('kHeadersFields'); -const kHeadersValues = Symbol('kHeadersValues'); -const kBody = Symbol('kBody'); -const kReset = Symbol('kReset'); -const kCheckErr = Symbol('kCheckErr'); - -const cstr = (ptr: number, len: number): string => - Buffer.from(memory.buffer, ptr, len).toString(); - -const wasm_on_message_begin = (p: number) => { - const i = instMap.get(p); - i[kReset](); - return i[kOnMessageBegin](); -}; - -const wasm_on_url = (p: number, at: number, length: number) => { - instMap.get(p)[kUrl] = cstr(at, length); - return 0; -}; - -const wasm_on_status = (p: number, at: number, length: number) => { - instMap.get(p)[kStatusMessage] = cstr(at, length); - return 0; -}; - -const wasm_on_header_field = (p: number, at: number, length: number) => { - const i= instMap.get(p) - i[kHeadersFields].push(cstr(at, length)); - return 0; -}; - -const wasm_on_header_value = (p: number, at: number, length: number) => { - const i = instMap.get(p); - i[kHeadersValues].push(cstr(at, length)); - return 0; -}; - -const wasm_on_headers_complete = (p: number) => { - const i = instMap.get(p); - const type = get_type(p); - const versionMajor = get_version_major(p); - const versionMinor = get_version_minor(p); - const rawHeaders = []; - let method; - let url; - let statusCode; - let statusMessage; - const upgrade = get_upgrade(p); - const shouldKeepAlive = should_keep_alive(p); - - for (let c = 0; c < i[kHeadersFields].length; c++) { - rawHeaders.push(i[kHeadersFields][c], i[kHeadersValues][c]) - } - - if (type === HTTPParser.REQUEST) { - method = constants.METHODS[get_method(p)]; - url = i[kUrl]; - } else if (type === HTTPParser.RESPONSE) { - statusCode = get_status_code(p); - statusMessage = i[kStatusMessage]; - } - return i[kOnHeadersComplete](versionMajor, versionMinor, rawHeaders, method, -url, statusCode, statusMessage, upgrade, shouldKeepAlive); -}; - -const wasm_on_body = (p: number, at: number, length: number) => { - const i = instMap.get(p); - const body = Buffer.from(memory.buffer, at, length); - return i[kOnBody](body); -}; - -const wasm_on_message_complete = (p: number) => { - return instMap.get(p)[kOnMessageComplete](); -}; - -const instMap = new Map(); - -const inst = new WebAssembly.Instance(mod, { - env: { - wasm_on_message_begin, - wasm_on_url, - wasm_on_status, - wasm_on_header_field, - wasm_on_header_value, - wasm_on_headers_complete, - wasm_on_body, - wasm_on_message_complete, - }, -}); - -const memory = inst.exports.memory as any; -const alloc = inst.exports.llhttp_alloc as CallableFunction; -const malloc = inst.exports.malloc as CallableFunction; -const execute = inst.exports.llhttp_execute as CallableFunction; -const get_type = inst.exports.llhttp_get_type as CallableFunction; -const get_upgrade = inst.exports.llhttp_get_upgrade as CallableFunction; -const should_keep_alive = inst.exports.llhttp_should_keep_alive as CallableFunction; -const get_method = inst.exports.llhttp_get_method as CallableFunction; -const get_status_code = inst.exports.llhttp_get_status_code as CallableFunction; -const get_version_minor = inst.exports.llhttp_get_http_minor as CallableFunction; -const get_version_major = inst.exports.llhttp_get_http_major as CallableFunction; -const get_error_reason = inst.exports.llhttp_get_error_reason as CallableFunction; -const free = inst.exports.free as CallableFunction; -const initialize = inst.exports._initialize as CallableFunction; - -initialize(); // wasi reactor - -class HTTPParser { - static REQUEST = REQUEST; - static RESPONSE = RESPONSE; - static kOnMessageBegin = kOnMessageBegin; - static kOnHeaders = kOnHeaders; - static kOnHeadersComplete = kOnHeadersComplete; - static kOnBody = kOnBody; - static kOnMessageComplete = kOnMessageComplete; - static kOnExecute = kOnExecute; - - [kPtr]: number; - [kUrl]: string; - [kStatusMessage]: null|string; - [kHeadersFields]: []|[string]; - [kHeadersValues]: []|[string]; - [kBody]: null|Buffer; - - constructor(type: constants.TYPE) { - this[kPtr] = alloc(constants.TYPE[type]); - instMap.set(this[kPtr], this); - - this[kUrl] = ''; - this[kStatusMessage] = null; - this[kHeadersFields] = []; - this[kHeadersValues] = []; - this[kBody] = null; - } - - [kReset]() { - this[kUrl] = ''; - this[kStatusMessage] = null; - this[kHeadersFields] = []; - this[kHeadersValues] = []; - this[kBody] = null; - } - - [kOnMessageBegin]() { - return 0; - } - - [kOnHeaders](rawHeaders: [string]) {} - - [kOnHeadersComplete](versionMajor: number, versionMinor: number, rawHeaders: [string], method: string, - url: string, statusCode: number, statusMessage: string, upgrade: boolean, shouldKeepAlive: boolean) { - return 0; - } - - [kOnBody](body: Buffer) { - this[kBody] = body; - return 0; - } - - [kOnMessageComplete]() { - return 0; - } - - destroy() { - instMap.delete(this[kPtr]); - free(this[kPtr]); - } - - execute(data: Buffer) { - const ptr = malloc(data.byteLength); - const u8 = new Uint8Array(memory.buffer); - u8.set(data, ptr); - const ret = execute(this[kPtr], ptr, data.length); - free(ptr); - this[kCheckErr](ret); - return ret; - } - - [kCheckErr](n: number) { - if (n === constants.ERROR.OK) { - return; - } - const ptr = get_error_reason(this[kPtr]); - const u8 = new Uint8Array(memory.buffer); - const len = u8.indexOf(0, ptr) - ptr; - throw new Error(cstr(ptr, len)); - } -} - - -{ - const p = new HTTPParser(HTTPParser.REQUEST); - - p.execute(Buffer.from([ - 'POST /owo HTTP/1.1', - 'X: Y', - 'Content-Length: 9', - '', - 'uh, meow?', - '', - ].join('\r\n'))); - - console.log(p); - - p.destroy(); -} - -{ - const p = new HTTPParser(HTTPParser.RESPONSE); - - p.execute(Buffer.from([ - 'HTTP/1.1 200 OK', - 'X: Y', - 'Content-Length: 9', - '', - 'uh, meow?' - ].join('\r\n'))); - - console.log(p); - - p.destroy(); -} diff --git a/llhttp/images/http-loose-none.png b/llhttp/images/http-loose-none.png deleted file mode 100644 index 31877654dd82b40fe2088a8dd3357a1a578656d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3571702 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%0DT+MDLUsuOfHiNq$?a35ZK7=xBwoC#@`S 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

akyF8 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

AvoO~-><$vLmk3mt8`96Btz-k?NPbf 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

Fe#)fr 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%0DVf{(n}Xsm2N|E=M7K)@XnRTi4et%oR*-gna}7Fm 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%0AXnLz(uy@^%zDV4QPEX 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

5E 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ΝEjTN0lOnoa09yg0lT#QA+wx5O@^dA);s(Hb6@Wu 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

ID=Tz_6Tm9XrDuAk3GHdlSGe? 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 z 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

) z{68;h1*H0nv8BA*&qSpHda^g#pH4X0=VxpTdTAZLb%$mpf$gyrV#uiZ)r|;fm{zXQW?> zG*%qRpNcASi3UmZVTg8`e8y+v&12@{xbXCtLKvm(ONs4AhoVm|IoEJQzeeocyEK=e z+YM>|^=KkI#o)~pM{yLly&>*vri;-lbBug+k8YG1seIP4vn7mQ{OVtNiXNw_aWDHZ zntQVJ(DDen*x8H$Lbiv8i%YI(9=hZ`&30R!yVdD9R7;b+ykKV1z~{7(=w`B#rRD0t zVAi)z>asL=aH8XEJMqJ(N)i$h1?L0WM}k^{`R&aIt9-8?KYo0@b+I$cVRp#Y7k zenGeo)ZDI5f-=P0|L|){Nwt4d z-#VjN2R+FV#$KnCmV|(o^ys;-pPHaY(2;#>eeRvxuRSV@BDJv$aA3Vj2M!$IbDVnx zbm?~WZJx)3T~|Zrfplg1v9MaCt{4@u?i>M2If=SNj>S!nBJXS3mb&2rPPU!;5e~1t zRx~xqiJc`5?W4KC*0exD9GKZJs-8r0dl$1y#6%#0YD|nrkxnJlHQgW}rcyxT5qwOt zOO$zjiA5u4npd6QF73j7=>rz!wE15DwYgFg2gIqnCUSmbBQ?p=a{;ne5fA@aBp@x7MDSsA)8x?OH4sO3^^q!PJw9Tf!Waow>w9+l;Qmk*DqY(5hUO5|XNzh0si=WytHY|=x~~NRkt2d4pdfHCP}(F^;DAMlq;#nu-3<~4#Q-G*6cCV39|*~dLL)H2SpnjvI;j>sWNVJGDsAH^W}ICv_5~R&*Hmd3 z1JOgmuV24z58fC^kIwP+_02F7)f{~9?zQfAvm;443L?20%m9(GvdVIN?2hZUO@j$D zqe*uXzq-JQ9>d*8@PqC>5o(0szo`W^Q2Cyi@s^krb=Z4;yr+4W zrcFC;s}!pgY?#FB%jpk`>NjFpVZ^YICwhumZ9;hV?Ah-0`%jTENiXSn4S=EnW3@AT zW?*)wO+O9hbD~muB&Nl1prp7bRr;M94By>VO-M|p%}du!y6+$-`tNOJuy#oni-Tbr@+oV_EWW&5zCPU#^LE zFs#X&8iJ5qu+uS9%azX zEf$kgD71#@cU+r4fQHxv5%{R^k8hvUDZ_}r!Q3p_oa}6iky;q#E`9rM5rEF5X5Y5oNr^0{4I5=qZBfx@7=hw%9_-qNFgK^q;GOUCL-g

I-pX=pRkuEPMDpAP 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

G%r8a;={Mx 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�?= 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 z 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

vxt^TUNY+-M8 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�(woy5gI*1L=n<*A;?>Ct$lxD)*O*<^BK+CMqX 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

  • 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
  • VNdfl!s{+g6 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 x| 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�^MfbwBXW$4Ec$FCg5)IiUrXYKIJ`oM4Ga^G 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[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

    D_Iy%{z~5mdCWnL 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

    3oBi&G;&8QjNW{onbIKhMBLddXd^eu{ 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 #Ri7q1HSiiBfC|P#c?%|0{y3rc*8b1X$Uq?)cP) zGGC01$sUN8{5WAsr3b9}-jrLl(}vC$m&L9`q&6i$7_mB*aRD@apiVxEQ7P%WM(wkD z&I5i>ZC(9iu6X*%c)TGLmmC(#5eL9+&ABV}+V0l3fdVst=xjIkW7*qmTq+AEjvK%3 ziqJOOAssO%T7_*aqw-$!vyPZZK>aWq>Uo~pT#63Ibw$uHaTf5@|Ax1(#h`)s2hHao zlqR2vn1richaj#~xWxF?d0*D!-#BcgMr@Fk3q5nOH7*Im)`NeXuJ=(r?Btj^-bwl) z$-WwjevoTWz0>1X)A($kOixmmqjBO_RM@(1QEy8a!|9ppe3+=t<<^`l8w1JiLq!9i zQ(Q}3yBgP4Ubw`Cs^LO?!dugYLS6Ow8;}H8DX3jU%(Nezb*mdF2mhy|Ii^*8VBB*u zBWDvJTkR<7CFNTY=tKu7!Y4~Tj@L9C6Ys&EeuHHxoQq3CA-ac1iK4I2f`j#mPTx

    e?EwbfQ#Ms83S#|zedzOuWV#4U& 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ᦲ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%0A#1dsp}&talP!4h(7u7s3{%=4ZlqT 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%0D%bV;$NfS1&1C7P=5?aJkS*jm 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»x*FSRfBM7zjZgLfC)H_m*MiV1P&{0}Fp1ges@7*!kPRzvt?KYS1Qu7_ z5;<9)4Yq<)*m*rk)s%6_^3%aPdrKe6eEu=y@Mq@n_bI?@!XdO{xWnWp1|`99z_rjl z+MhG}TW|Cl^IKOI`GZbZ%i#dzg$qQ@Sg^s%PR8I_*)1`28Ke-S}L4Gv@H2uR8%g zDlnp*o=(|m9$s_5)F|xL@9~@d-!VvRA^YwJ6OWUWi{eRb*r=G5ywmwSNHM7RQ^NMt$IV;G)JT%wfdue3w_d&XWJuxU1w~+&kU6wo^VI z_*5mT#cK{iE6iyk+G;wp=5a_((*0B`qyIUgWy^zi$g1U>%2{6w>7ZLpX43Hlt@R5O z|E8q%vxlT$B4Hab7N}e%67)ksuYcJ8jb(<_GHRKM4r7`|6X$yh>7$)zqB1k1UY|xf z5nK?j2_zHrUfU^cV*kZPD7roJA5r3DNYNr1x&LR6A|cm0**iz;=J@SIkEcM?=UPZ8 zME5uCyPAjyw2-=Q_{L^m=vce4ntadF{@q{xgRkq6AYI;b%MBsy^Mn8X-+%MFC1Ep{ z-~Hb1e(Ko(DD=R#k4Im(YH_Oi^5MXp7h-_IV>VZ1S$V)|>L3lBUhXW#qWB*NPT7FI z8=Bl4xoC42r0FSVDEPw7emp@|O{OHeU0QljAa?^oE;NKwUBu;RIdrJ1V-7$ejMcXF zzkY2BDaW;Ai3J*T+qd%p)xmrdP2*&j>|c;&Nq7gXPmjV(fFWv;XsM^O&`|h zw62dgC+fI@mw|nLoNB_@$ZzrU{oiZcejV+QRUePM{Z6Pr$%$|U+pSS)PQ2L0<6H=^?#rA zU;dPwU10x-FjYTM<X`;r`++CAtVH=AOM_u^}ZoWJk1S zPL!uWpjoD*TGn=+M{mZw_@U*TJNXd4Qt5Trs$8K|q;3CVfdA27lif(yv5mi4_Gdqa zL%#JoPn3Cn0OTS;3{U zYHUb1W|${HRI+Ai!v_6frl^%nk5z|DhxeYoe2YhU(UvH>Up~^$eJ{siGC2N2kN;

    -1$2@o{S8*%;nI#0d6uEax&oar%$iAXFdv4 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�w?KOK=8c4)m94i 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�o}oyn#}sb< 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

    -RJY2v7Nnj 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 Oej)SHG;|P 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 z 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%0AV3a5;w6LUA?Jqt^@;VdYP{9-38Z)u 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�mrcxMYa;`?PPUzSSGbb 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�_j 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 z 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Ð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 a!>kfC0|lkky!JNFg$1zQypanmh8?$_!cYG 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 z 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 *+)Rz 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 !0F*R2m%P=+oR6fDPp{L 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

    TFi`l2W4lf$6s=OSx6SI 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 ?^tJ#^mgx`576nk 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%0D=cRt{3*Gl4Ma5sCcUNN;yce%H$3~g4d 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

    uW^MSvy13~Y(=8cf|dGXuRf=_&iY2> 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�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

    r^QR?Ue3*)7(#O)oyrN)Bc&y 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:gwn>CW807hYjRT=q} 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

    (OU}#D^Es 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

  • )}3G_td8AV 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

    2?!Q8Dt}ydjrO6(y(c@^WMn7Q9sL{ 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

    f0=kqB=j0fa6OIRh zFe5IeRwUX#^ftx3LWA)BCg51yTv1Yj^&=*y3{`ZcFK%q`0T?>~8jaI)>F1vVZ+p!S z>MC>GdwB4k4njhPCp6>apFM^{k}^?D5KkDm$Dr8d&{wSaFp8hb?2iF!q1Ch7*|;`L z4>GK^CFJG_S_bYf2*(H*&1Dg`&!yXC&~b1d!pdet^bJP=&uKeHl_kE3A zw`9ZR8_3hu<}H5P-t&v_l2^^r7t!y&db^K$a-=f_CwmaD@hX=#0wY0O$Uya;l16A- zAlPOlAhe$-UXIxBRkr?s-W`CRdevR_>j)i50b%QM)*$xF){Af`aso(2Kx;Do^mqK4 z#UNcXs(5Acs&x!g(IC8XG%)lKJ}u@zJNOO15u7JTSjTap4#1$f4g^brU!30ql3ZVF zdy%^{0dm2lpc&RgDHx@W!FW~;t5NI$Q{n+8+Li_aQ{Q1S=b-k;^FR#E6(~`my8S2mp`;dd|>?sKYfJpmIYrd5iVepvMaSE)Eaayb}xsf(n@fj%iKsmFG z8Zd;@Yx1tgZvbii{F#1&$qcP<96s0KmQ0Cbhlr_7JmkDJE`oOFOX8<61v`$caMwp+ zJH@A8s6|W{xNCOa@JtiGRj(~OrDxc=qgbio zt$-Q|)&p_mUyE4@8saNhtbZvsD9d@p`ku?fbwM|0Uup3s7-G>V`xs{&CC!bSvT~7@ z?6TQ}sHHDFdyu(t$v^cE3sfnOp|328GzBZHqDNHOnLflJ&!xMGv8#ZNnKY)8?-<8B zJpe;{JKqD0`5De5`b>g9g4ju}(de#XL63bX?w)PghL`Q@g`6Sllj(a` zl7!MCHd=%qN_|O{X_=n7hBU+l={3yx;<52A7-G~nS}wuZI99pqR;~))flQU##2T|$ zJw^ZHM0IG_3)ZwP9>6h-p6kPx@e1#yJ}Aq6Viwk8E>zd*x|Q{|>@oome|mkd!f$5x z*$54g^dCR) zLGw{N;tfvsQ{MMs6(BCXF0&klCHcfq+k2YL;&87X-jY_g#eHS#m~povWA+5>wc`+h zN_2Ye=k;AbF)*2LGNIXLnJL&Drz%SbLP#4kO-GTCXWK2g?{RrDHLaG^)1q0z;fp#L z-m9jrlu=$OqLH(nOJ63}c6Ma=L&t10mHT;VX=yBdB=g)GMfuBfoEWcN0e#hO>@2~ql zE+gmn`x)=|YrO?s1Y>OvgNe7fOmGUOLk*&4G}qB3MknqFAJ-jkL49aSJ2onCqB_!f zxXblgRijK^)TH3x?KMp`!FCO;H>ulCeQ0Qvs`I2Q1mqn`iF@K4>SK`$9!W5zX40~4 z9+j~kt-_c{lHGy@Q(`rvCrH za_RGo2x@tVW0?=+Fc98g9r}6d4=AO_)X$KO1fdfugQU9RIU^1 zz_MG0{X|;dpa&qBBP8ug2z?Jb$LcU%#$XCGKuEVV5WR*) zuvK~it3#U6c8kX|vrtDvPcD*eEbytKP>7$q1Eh}q0ZwXFXAegR&Bp@W>gyFBUfxXG zQ*txQq%R|It&J@q67<_I`do!{u8fJnv9D1>Ti`zL^*H=BrTcpMuZP^*^f+Djjf0Xa zgITm)=M9tP9@fWT32#naw1go|CWoejhUj)B^|IM~EmYds2@<1+u_X1sf39>m;Y#p) zY_INCS8BUMr=Q5hFyj}RxRdgx^pWzDsFhmiW2C(!;QbJyA)ZBsrz}6I-2i5r(reL_ znaF=WS>gId!GsF$`9PxkWGG-m>a)`ggCawiJL!`*&8vtaglkb_k zdJdExdr!R??Qf?!ogJY^Fx=kOIC_e$TFUZuz_~fyqj}eMV%^$zrZdSxDgBb^oc0`l zZB^!kc$lO|qffK8mML&o(`vnkYB4~T3e9~}B1^DepUr$8!WErmR#zeu(!2Tus7^sk z3*cndAUbVF-)&`~ebIjAL@`s6s&MBNrAj7O`|ofWRIZ!Wy%@Tu&h z%*)<9{MApJXC%F5&wXI`(tn`!JgB{eTvTnk$X+{QtIhF0Ew-}^bF)V*&bl}F|K@W2 z<&On+KtHgpeK9}R_D!2)(eu?onYS050yL%iRK^qPfD!ovU-={Z;u@uFn^sCB<(BP2 zmsw)NaNcWB0gNbnxX(oQ>1nu(t-sE^EKJ|1a{Z}3R0{opib30b)|@$DL|yx-Po>`9 z{P?+@DXJ0ZGoQ2bYZdL&W_<;A=q&ILfLG4qZa?BtlyU$HEKl^0h{binJrRh4_6zPV;wx!ma8)DEVS_ylKU1>#P?(jeAem$bO8F z8W8K-f1dh;Fch4Poh|+Pa16I*f4kjk*1#~5Q~k_m8Uylbm^NzHqx8~S{xS56Co)@K z)$rc3j?2RC_qs&H>(h~uw+ zTXKt_)WE=;2PPOr%G9MlO|_L@vqBEY$qTC^1~AVdWebEjHGUt2N5{prC8+$TszZIQ zX>)zReb=&kx%$dhRi&x5gLx{wx-S?qQ50{Y+)H~^c<*(COqwN5&L@#7h6$Z+UK6_n zb;sLCZHzFsCo%fj2 z)!IVLk95~syAX}lYlW=XFTRED&;E~JxWZ%fVhLo(&M($pIr@Ofq=930T}2z_T{VrO z(mX>pmccXo7{LA;o18J@THD3n=M>|av>i*)=xvIf_+=If`?u35pU_{vz z&zyf{f%k!^kV0MS`ji)IjwfiPGGEdS@i^^#;U@dIF)4xDH_?it$KOd!t8UlVIrCO# z_){I@dy@@2@Uq@xeNGenV$9}`{)YN8ILPLJPDQYg^MO6Veb-+8 zHSqmY&v#3?rm2c81N*9H2B(igWBc@*$LHK8?ManL(DPLuNWhup+e6#zI`GfnfW?3W zYfHV^fQP${uIK|MUQ(BVRj-AkV|o3(tgy9tm848d14Ar)yy?yiD)8*7mhh3R!wB3t zn(sN&oV@{o6)fvGRtDSm*2fpVu+)?Cn$6)W5AJ@e*^}iTgL061(R98=>r_#bSI^&A z2+b-3GaW76`WN#hGb|F}{8?x*k;8yiSpOD?&E?ofVa7p zKwt3A=^rnKKi{;vD0i&2M`l8BUqR^-DwoMkpOq8hT~%RCYs4X$V2;yrw<-sna-nZ} zFhUw(ijGKCu|QY>UjMw!6T_{`mMnP>uX_UYfR7PHNkp#hNnjsVoTnBWL}xTK8r?r~ zJr0@zxmJ!on;uPsBN6S5wqdV6TN&#b!|;QKi5?SwF}K+nmUN*nE-OrT8fZ;K4DAJ} zmfTLuf073l<0@hHV=h?cE{TZXN9dgxBhOx4e0;vUK~3zD)d`hxE&u)se!jUtMwsdq zy*Yih{0~*sZ@uT8i?qsQ(E3OZveSk2P7Z^5JJjx{=hiwL2>ud1pf7y z^01r)0oHpqt&M-R`VQN(rA^lNSEn+$SB4|CEfK(_x3uP*>wvDpdkn;kho#0G zurV2!)slU#@WLWb%PRwN4e6)e@g?U(4USDiJ6VfHJc2@6Y|1+T=Xvn>ey!T)I&5-b zmxthM2cz*!S;ugpYGcc~w;r6b8iwOmWb1GFoZ^d6Yl$nne{%2Zrm1UBT9y6V? zXac#>?A%Q#EuRa6DqNEld&O=!V40r3*t2;d&*ZP(sonB+n+F}Ai{JiY@%-xNfAwS1 zH&{~&R#ML2LkwF%Q@Yojr{*Q5W|ys$8!k{I=+_?s`|<;Q&R3ur$XUoZ3rO%0nr638 z*AF&-BszQCdwRNto)e}vY<4>RjTsed2J{;Ph!E4N)fBiz^8li5-}<;{yIZF9QJYWP z--1ZeATYk|nN90}!rS*yS$1I@Z4j@zJpM73rgiTWE&l@HV;48jlKnvdP4}wf&Ctm< zPoh|UPnepVT`1hJhmU{)dkbhF12_Un;mwPgJwSqa|6 z*ZcYdyBh)xTn>cy+>o;3+(}2#1XmlbEGV^ z-yRLE_b|UN@hblLP?2w@RNOKPJS?Ideq7)-U`odKPgm2GsrVOS7+Wd+Mnzg8yW(*H-D_yIu@AepI zy3_43=KlAp&Q-_1nA>|&r8;W_zmH(HqtLg__l z;LiHyKLaYu+&Ip!o1}dp;D@MC5&_w@3hTOrJExhwEomR@+XubR>bAmwufj{4MiIlC zt?uEm);P_-Kf9nQ^ULi#|BBJD6ULw6%ZtW^kkw&%t__DcCdzK^g44fOlDW-mK;*oL z>Knrk+n&#EIy(h#bS?OOLXDh(<4eZ3bJ}E!(ZD=PrO7WX%+s3#8^5pHko!5gaNENF z4LoDL9b?k7&#O4Oz5`$@m)V(ffO9rs2Ax%sB_%%1k#Y`t`mP7~zVhCh zY17tU$d@328_=nV|4w0{OoBCKBBlKjpvDTBQexO>v_7#8#up9P$lv2aAO&_K!0%o? zN)1VM);IDW*(-QEb!83!Tfw3p(B^`cMZJXDH8b^iy5j~^DDePktKKxuVeOQ8%e^M4 zrO#nDG~FNodC{N`Usb7=d2j>hsYahDw)hohgFWM zu4(Q&aBmWnlY^bT`7XP1j{S2H|W>p6a6 z>~+)b(%jHex?y6yGWBvrt52^j4G!%7h%*`d*dL%JcP6U8Rs!#Aoxl4ZEBhM z3kzzM%jPZEN`vbuZs~)<6knn$CJu|@(blJ_XW*7e18Tx9Q1-SYk8}Skx4ay~zJ`?b zirJ-BY276yyC^AF&&>rO^}KFpEND24Y05Sk8^rz6qGi58A9qd$2&6B&ZNU8yHG$?u zXYQxn#o=a@M^DD&k+`e>C0Jq~#8uA5cO))R)y!^FvrIb&@%p;Mr6|?p?y@+DTPrl! z$F4!EE%Lwu&Q_DovuDZm;IvF`M4weR4pyguZz2PCO1gl_KC{{A-d&%45@*V{hV(cJ zcSaXnkR~%}o=uj<*)4xp@Be;{-~3Jgvh2*!TmoG(8a}9>ToEw?5dSE2jKol%-M+)H z|KoV=OR*P7C{l8_<_UQAqKQX`enWcRi*f%P@5SzcqOOUljStO_&fU7Jrg+Hl)$W*E zRW&NV1m%Bkf36o>q{VuJ$vqTAna?qtADvgv4xqFU*KlcFm1DnidjU3MZWC76l%U%{r^6S0aLb;T3Uce$m>=g9S zP$6A)9!Xs}u9L!KtyO<9qqJ}lzd29fJE#hY^oY~^AKI>a zeAqUh?@v|&74 zAk)boU7h#%SLAQI)coo>kNydF<L{-CsDOs7dbc{2Bwx&q*lI_>kF^!oZd#*zgFpmWm;PDD8Zi~jSbQW z-yMlNT<4Ot{F}bKRZG;VS#6_`ocC=`yhAsNNj3LJjnYp7kUiG44{(RM)*bzE_x*WR z{{8#iw^)sqn#^|}wKjdei{uyQlk38*(`JcBy;!dw3BED(%ydy4E?r8=dVE&{17nvPAWo{OSs0ic7+jt9f^lR z1b$Y^VlPJ8rmop7KA9Sc+cDuyt-DIiZ&gj=(=9&750QW0Fd76l@A0o zURS?EIih!kx|s9wFptPn@MVJSyu(hOQ-+a{5#v{flZF68X4Uae{J8Ko_Yn@>Ef0+Z z4Bb69m*(7QywhBoJ?Now$YV*Hjo}9%t=|fJ2mwaQO%%17;I2I+!aCLB3jntti&nVK z(dhpCS3yoRRt21}Oi@PV{~P`UR)zgE$VMK4WJd`fMfp30^#T#97%Vs!{}pL14llM* zPX=Mic`l*|3G97N^qtow#56rZ9kL1vT*7`Li~A@M8G_s#$XC4KatLLivxlH=W&*{i zB0|cG-NtVCj6uci;R}q1ZZ8ND83^iYBAr;Wfdsa+9Cgp~_=iAi?g9RaysA=bPnvel zJvZZn)b1*Wir&Y*FIkoDhf3WQ)5c5!wTW~w>87W4?TZ)D9H}; z$7f11|Iq)bUsLkG_$qDur~VPbs3;f;6LAfYl|Ll(y4no$kB;H+V&U5h9=9A%seYhH z2Oe033y*f0l&ufBIYsnm+RT+eH)0Erri7+{$(;~28p@xS6(V3rj!qA>#;bf7UmZMOFX1Q-WgMb=AZWB)50A^g21 z`wXw_5a>yI>N&9M*`?FkUk($cC&CiIE31I+d5a~yq3{X&(C1~E(99#ZswO#K(I$V5 z^}&tFI+saAUTwbDoNQ8q*ZYR_9uNOqrMV#GLx+y8Cq}hB_P`le0TxCfE%ZJ~UzdP_ z2-tlD0s5xmQ}4Dg-nc-*PMY`4#fDg`f!p1S1{4&w3Pk@y*ACh&j}6+Cq-MLfP-bc0 zzI2r2FW%eg`2GT{JEXJz{pRXh(Ygwq{|n1=K4Zsbq6~*tM2?)Os4U{KF5{tP9@_4E z(_4j{!mD-|otK>a!b8GF0Kqwq9Z*nE7abqC*8TbBj>5 zkOpnCs(MQJ~PV4a$Z(!ZeK;0z*;m46X zI}Q-j3;_KH!d8u6UMyU94Dj+laXe4<9AbfsxYZ|J`%W^`(_hht1z!JehdX>$aQrs? zG%TYYaM{(C%RK)J50DnQ0+B3^2Y9HlPduia_S&@Sk^9CPlcOU0mM;m=HbN1;O4K$I zWN|FGj>m}7b^|>fgnR6ciiu4WWzU&SD)R!LxMe^~)}b*61wuUJmyKzrzV@K$Tvn(r zXP8e-u?@zM0HSfz$#zQYUKd~S0K)Kia-YIlJ?4IXhIh7{!oAPwFhp~8ki#`wws}%x z8>8eXEjSh*9Zy`f!9jC&*X9uF^mu2$nNJgUFsLGH>hodYH4k{0*AII2wk*ogbeNSI zbPhQ#aQo`j(VFlZF)}ZAtW?^=6}0kN>TKU`&)fXFPswlj>)quOy%mdDCbXw^>MW9b z>#b;d<#3eD+tK_8<9>|`&-)WG{nd4Cz&o)vhpKLe)`;#2&uX!Ng#lCl8ifqyEJlFr zkCIL-Y&!i1rw!5Ac~W3}`8hbaoGewHo04C~IZzPdFO&p${&+xUnnF9qL#C}%s@_#+-zHAu zFd{EM1q(o^+D3Iak;9qR#H2icIATT1q7hjm0UEkbK|z!u=XEtQ)f0ZLD#{7lEDwFNaT2u-pYk*U5uy+?~zj#4|U`fZgp*bHz=O8 z&zDHeO;mFUTWay^X7Vo;{}L$*fzx+}d!w%y_LfH}9a{bUri%QhnI9dPk~ujhH2ckK zEW53kP%LBs=ekkNkJ_GKGf z=S$^2P!1E{>~=0DbsUuzKjnfe)J?`@as_USFSzg)bM079k!yl*SgA8bY37cy)J%nR zBBl;wy3zQ>DWLWTaprW2&r*iIsYb z{-oYCSU(Diu7*&Vrxz@{#+d|Sx+?GP-fDoc#Fol!Z(%##DLFm(5;GhH(gsek{L|!6 zEdk-#+EkQ^!D>t|%S~xNT6zF>5{LaWz1T)NndJqi*vJ}nqUrcNeRqT2YW|IY?-+R_ zu>9Itbr>&l$HxL0lHwRb7f=roTbh`U@FI?e{lV@K3+#jn+;Z*SGsn&We0qzu^aW@O zH>TQ=L4=j+chaeM3(`!lbNaKVzFf+tBDwNtlHPU4T;+rLQ!N7>$zC%S(Sf&7A|$0( zFJv&)Hp0rk-k(9HVPjn32JDqv9tNo=<)Dfa0PoC-nj?U0XMQHG+g&z?-}-wX)NUuD zax6Xf3SrVKnHt35eWx`S49ZF}7<;t0&GCbN`i?{Z%bZqhZak{YG`#Xs%x3C{zNx%j z*5U}AM=Sl6ibp%%!>9Uq&`IY{4wN{?!f%ixx)yxr|4p@z1LP=#B6bDBaxUkNHuCAl z8ZA7rRL*NcJzk0BJ(+S8J(z&|O_pV!5{(HXS!{Zdu|UQ`$pa_!o&Dt2oWS6^Qu1xC zdr`&*`A~bsx4~&3z;gPIFZ)TcL0u#s;>~*P&v&$xLY%KrSa?u=3qor*PWC#y;{e0JQ?LH?x1$-=h#gFqe$NNg&wn%jOvqVQydOD zw(sAkrf>v<+%BwOsokCvcKcV80_bcKI&YJ8+f4>u(NB;z`7K($#bkpjudM~7TOHk)T|r51|B2t`LAsjKz2c>kJ+X;4#iB| z+w#!UJV3Q<+L&;7Hf8v)u(adi&i>}L+d5ut^;O>BvGARZJw#W&y4KHPzKGW?pU=R= z037Nnh*p$#prl^M$)O8$f?rj@$0X(%v`ZM?T4AXTk%D(;0_(Pi z47}0bA$qGWG*bG;ReOZaQogEAZbV0>Gb>t^mFSMNq4$7)aio_mM{KSum3=STi#wPN zpE(N>aRuXL%hX~jSz`P~d_ISIvpW4fgB zh$Vp%3&o$cC1$BMwnvN&x5?5L1d zZ0Gm5t1I|QaEAx`L?q5g-fXo|)6xOQ8MP;;=~KXm8wHb$HB&v3Q@zVIp~aeXYLch( zUdnUGmhfU?{NpcXd?^i4cH7hX>JM<1GxhnpnF3JNo_Cz(71Y3|4;09IzL95XDvMBORb-JpWLz1c z<}pEA1*Z5aW~-Pv=p;ji6N)C(4*aM*j-iuZ-rT<~Q*xNGj*4Mtm$L`_bJ~s+)#)bZ z#@Y7p=Jeqxx(0Q@ilhaJm|5sV`*H11^{qW|>*ElHDGYV_O0*#cXM5@d+^eF^R9I*_ zcyZz*Bu^FdpFjeqnX))29?-L>{<`vB;p%t0o%_Tj(s75RRp~)u?l@WPv+VS1-U5d{ zF&~XsvynyzH)|n`9>>gFy_CZ}UvqgHV!9o5Vm<4^aajlZ7gdYFVBXrI$qjWM7aeDI~FXp8q0~vS+ zH!>Yfl!$v1I34+D+El#1N1Y{?RNqwQ8|#+dD3k`fHJo?GS0dBxO4@*#1O7HG>dXQOPU)=VLs1) zn$a1o9gPV{m5Tld5$sKlnTZw(CAV8ck=ou>}V z2CVfFniKMxP@0|{%Makt3YPhJn34HYxHQW>#rb>5Tu)%{o0sk%EKoS0gLmV8oiijn zXyW7b(-ZLPmEbx_n@F#gvDq2AfU!KWoEzs_cihI;S){&Md-hkcb_MR64t3+=!VR!nzuK8b$3 z*lU*=y$fXXF>);lh5qSAZ9ZBiRrXowqb!?5Ay??cI=F@sa8dSZ{yK4aK-jL~CVgRmpdc8$5*dFj+e(YB9K*YC#4=KwO}k27n36*kou z^h&8=4(g72?BV$#<%O=yx3czAx!;J8bb%5yN>dg;hAM&uuHk-^ZU7$f7s4zehRqR^inN%ryslCYw|^(-1DS_j8C zB3L?5)K~PMD0W@zv7FvVG1bN9ZOEIIr#ImJKY#sy^_j)Cy#cyI(4bCKl77&dkm`N4 z%KjnQrN%7ca0#i4-)Fw8?{@uH6Pf8Z~^9ghFNY`Mn?T8zpPd!r0;FZ&9$4)#M{HxwTh zT#|wCPHPvQgGl(<#6ZT1hN8278-3`e!u&nK`cB%f!}f{%wUqnLjG*tQP2wAHBy6E( zeT@wv14I3wRkiHcy>HFGcW7AYw=q00DCV(M!hiMF{)cZ??O?=c?(8f$h&zC=`r#7@ zB41?%a|`H8Xno?rxEU0C4WxM-j#ouX?}m;$B;h`3zE8 zMg#`J?Lr0-M7OmEZut8oN_{dITMo6Wm+hQ5IRihlbL~ELct5FZ8c)YrC9#JF)7!7x zc!0i^m-z@EruX{)hrRi)AAMT`!$NLb>BA9{68=c36dkEme}I;-q5Fo!_V+gN()pfj zl_3Z9oEpZSYQd#`4I#Os&`1qP)#D7EHlh*CZmGnNH|CgpdpLZ*n9y|pD6kNbjtk3` zFJty~$HKAX1^9z4t!WS#nhu1!gYx|>SUf>*h0@dn*Q-9hWoY!0NBVa@(7zu7v>F~& zv;bWDU2LNVZ-XY?i1o!mP8p!`IX@QHDAe((-j^vV<~-Q!pz?`nBw;Mj+wbdCDmeOj zY*3a=ZG`%NVIt=bba95H-v2rA9B5MqlpucO()RiBU@zIQ9L%JSAxM@eUaZm!^TjlJ zFSX2ZK27JDr%&y{KlfR&WAe5HdOty|538nutErwtDCX(LSo3-MNHbt?}O@SooOb{?ed6JJCi5 zAa=V*d0!ug)a2WM4qP0*03d?aT-YUClcThD!9w}z?-6Vc-JVnJTR}8HRX#Jipm&3` z(E}!oJy-)U!;re&fgp!y*iIsMSo_Y$0I%szzkU_6cyBS%$QD<-OlV3anP+F{4lGrq zkoZpEt??2&D+eBD4<9fYs4PRg9Y62ZSo2KDR z-+~qKBYnc7to2$ngklz1J#D$&q8lLoEuNf0In%=xL$I?Jt;HTpZ4nE{qTDRMo@o($ zu?==_4lFDN4xoPW+i`dz|Mjd`ubPJbKd84S&W+AD{N9cYT=b)_Nd$pXY?szJX%XH5 zvsu=FD2P!nXWV}L8tT-`AvXTwUmn;jwFV)!6ZIh+*%czrjWXv8{`yI*&5l0JmxIT! z6Xy<$5H%9yJoW=3V`VF~6t7GA&I^&GImsWiD8A{i!JNi(q=*|5$?gGeW zjDc-1c;y{3rqGtKYXRTTvnyWlHp{MaywApKHA0+iscO!!4$8wEA`-uBAvu1ce^OOd z=m#vF2Kc^es?X5*pphn|r_}zSltJeke(y|bcV~hGa4keYRfR@sT!q#!Q-gt+Xmwh; zZ6%yNvM2+BX*v*K={m3!#N#~KV_9$8vPKduaTo)FHcsdPUhba?e zRo15)N@+%k94WO3%_2v>F;1n`4L4sp9Bq%jxv|wt>SWPn$Hz)E9Vl?F40p|3dFW_* zZexlk4RX*@vF_02gbrAYoZBkwz&jY&gIMfsKw_WH%4dRNiR7RxUb|nEoafLcxf23{ zBcS#Ty{eU_$1&)&?^B1yQM9;!@bhllNDFgn zWJnmte!L$N%Z+jJ$a!p^v67+X@JE(a75C}>#7aeIwh zY!_uUm$Wh;T6rz4$R5pU=m4Nc!}q&`Mq_sI+ zz}@^L*|DkRSbPtSJ^xQlk9{>|oT)bMC-wESidJT@lDa9pXtw;Kqnq1H^col|=qElWV zrL1Ik_5S4mi_D)`HH|(F!-}U@vxOYOvOVSPtn&w7BXAi$Vt>87;qQw@Sh^iRvR^Z- zK(6nk7Tm;1x8nT=SVbqlTwb{LG716>r(@t-^E%D5nQuwbAkHko^H_^e^DB_9?t+AX zia1lX{a|Q8gOAmS81dj7DOkoqYKb5HE&Ir6J~!qy#|d_+X<6@42f80c`YpLbR~^iy z`#64QEz{VA0=>;hLc`p^+)O?JK?#ez6FNqAsiYdo^F02Swet3(0})#AraXA8J4SJ8 zuSlK{)9r4LAvj!CAv7=mE;vcbg}ag-Zp|>dy~UUe;L5D)Q`V9T)@;B9**b3IO*=uT zGs103|5`Nq&O9!)RyZI#{SPV|a7=`9kTPfbtBTiEq7TCj@c^vT-=s53g?KD9LGvhE zll5wVf~fHg4R~lec`IV{jo^6R=`z?}Z&$h|eIC(!mH>n306^i3f-z|Hh3C0o~iK> zkBL%_(&3bs8|D4^gB=B?6GShJ+@<^^t(63yZKBjX?@g=dNXZeJ#p>=L@}o=v&NIgr z;8ECXv|n6peHmS=94ty5S7f-#pYC~fc_+=f_4q2!NmZ?^JC;5MtJ}WIawT8m=k>xUNG%1`k<)ukE*cL!sFR0lG%h+LQC5o=&hXm z{M#di0Sh9_LvWvHKVTKl_dKLT7Q}4H-F5h*GsmyeENQ z;W2KMpLOei=U6tXpyJPhR{vDD5w-DR{=M;7{M@deu4}uf%yM1C1-dojoc(^VQ)tM* zN_E2T>W7|YujfpUA!n#rpC^m(taDfPsK-ow)Ob#lHQNfl{ypsiA8Vy{JgvLVkbybObBR-ZsG_8`*+>!7?A+#|z5XNO zO@FpVup^fqSh(icapr5JxBu5Cvu!ibZ^c(Wdlvuu*XfmL|N6`R|2L;RWI}Km8?X7d zYOh%bVP~wgEh^zT4=c9SPGANFJA{OM=I&(g!D_t@;jCqu`nE5aNGoAE16Heo!LuY_ z-8y)&{GdeScrxWC#k6nuc%DUDW9f?bZsltlPh8r9VkR`|o0=5kRgHEeEM7(ub_o*K z?lRTIR1<;h|0BT0a=VpjI_MszT06PPBCFvaL`?6`n?3%4f4PjZdSD$?%B$dM;H`Wq zEKKi7MBXCDcMNA;%5Poc^d4D3EbBJIymO(@4DN)8svhHUA=Zdty#%Py^6ERz1~Ii3 zf(3&KyB}GN<#wtE%2&bqI^4lpaA^}QEK`&H=@|96Eki@44mh>+9w`bi=CNyqjdgK@ z^`y?$5WzRpHUuD}JZeHUmoIL+piYe$V~v)aw`T_OqilrzXoo~JIh21LnA=NSd#3ke zPwTS$*h8PSReXet{)Sr@UFF&DJu7>KNF=cBgs1Q)={eZ`;w?ZR7todt@r46IT}8`P zt|4E!jbN5G5?S!`wmlc(bo$ZTu&FM=RSI`uy56>fOBh)g)y6B9{+|Npl6mx~gLHzFp6bJ;CtxSa1OVk^G@KKTjdp<#{^ zJFs)C29784cALQv6`zak=$VcDNBpy6-j@D+FZ-b|*=j~%86#k4c94J`B)Fbt{-lPJ z;T-kh`xK*mz}hw4p$^JVtXn3hmbOGs0oeR#-kfCzT*&@rxbxpC z&@80$kAEbBnCNFndE4n~-@kBw%#K8kM~;AWOVEa=-hWy7uoHDI`wG6gSKqyOZmQ~C*d&vt1lRecjDaNWm3pPlE%2g&uHZiQ4R!FaJ}abE#p@YmnA;KMU<$Qf;n z*5gx>FqJg|9MWLpQM$(Y^=-^&D(lyPhDo4iFnD^({&`$2#_uKNO@5PE6xTL|cwC4{ zR{EStKKgc%%WUh&zS93>0Z_wY!WEOG-E5u{Ksd617<2TUTUHP?I(DyFf}d2+M?_!mYbq@CzvNc4V`&h<&|-Uhb+6ubglgIIMHL>=^^TTff8^V;q- z=|qm%TRrN)MNYy*Gz553EGetwD!*0_=*`N8G^p4)viqM~kPSUltFB_|NJ2xkFUt*w z!}6Y)=ruRnv*i6FFyN=w=|VeuvLTJrcy_wd;3`9TpfpRQQhpFe^vH+&*}arnrTJ$u z=GC9no6lq?h7D&|W*|tU=+M?M4zLFP=$AYnRKJ7VC83f8cfGaRyG?w4bz4+=t@rp@wG29|w!+fIBG|VX}xdS#p>@twEC^yM9yXDY~zK{&S>z zI;uWrR2x(R+<6kB-JZq#oD4VWc)#SYb3#ozVpa9Z3ip;Tu%+Du?LeLAM;dyg=R{i#UnNtuLrZ39awrqq~(WSUx@w7 z6PNmeoS&Z_`tgn;+;uwa@ii8rsvr_0;#FvN?GDrC(tjQiYg-6#@KOCS$Vx*;TJSFu zM@sEuO`$12>)u7^1gNBj!A)vqsb0!?9j61^fp4+0%+X`7Nk5Ol*ej(bUa6!_eVV_J zJJ82$4a_XsJK72QjZ*sx@n_WRyG0+-gj{3$?U)y<_yFie;c)1`ZP>@DJ3ni z!ihtmzDP7MUW z^(^{$2$|ge&}~aK%>k0%nuKS{&wU01&8`{F4hL%o{(YeHNJ@sYue2LcNe;pTisK~xINC!rR}!mX^Cd|D!Iq}O=Pb@E%5%VZ;u`mcD$nB zAtWmBY_b6AImBD;%Dxoq5a-@Z{vFaE94~}O=Oi@5*iwE9w7t9>10x>{14xxI@YL?? zfxEnm`TbrT+s^<|;oOAoe$C^_t2YL=im9KkgJUZ=w=-rek_gs-RE6Zase8N4q@C`rjXEbhjc-yVIPgIggUo@n;8&6S>2iB6t}ubt}bw70g4_%o_|(YHrCq z@f`9sG&!MRkv;w8pwv~IA7aFIfqf~J)_!MthKNK6P^X=xf%ecC6`r=yah9Xw*qCbw zRDl3DQEMDR{M>w2t3jWf9cY!H1Sx*h=DpB^@a=2JrZsC)lj1$hcjO?qo$P)fJEVO` z=>H+csu`jEgszI3%w9*{Sy6`CS3Zy`ZhrPeq=BX~A zKCcR#;Y}uY%&6Q68_W%#;RM`*>OrdCs@0*st3MUe0`z}2xi;YaJds@K=gVSk^Eobz zVSa?!*h}1_r^YflR%JbmJ-bfnzR$!*ZDLi8ZjU7bQoao>b86-ti1uHL3R|BVIRfSF zsj(qrf3YpZ_T#O#4DwuWG=)06>^PE}U1zDUnBKo~W{Gybi&NKh!=taW?@$2~h^ZGS zp!OYex3;Nw5wo|L9>qqI>;w_Y`1071ummT%uz~5}$dfBqCx4{-4Zm?}ORr>C__&?T z8BQ?&szM6Jk?OMEa%{4CD#!AQc=*yiNZz^$>G|+Cj)~ktu1X24eG+MXu+;}}6a~d% z^066BfcMFErsFYz2>>CAfw$ge%8m{UMm52M!(aux`&Y>EO#B#`ye1o%&LJI5cuEhG z#`!J3!Nq$8#r#2*_lob(W{3Hh;ua7fw;)*1D+`v2u5SvSQxQMN@)*~sOtfldcPQ+YUHROepZM9IvzbvDlaTiW3DIQKbo#qjyR!_ zZeWWMrH~hBek(nFK16x_jDb4qVU{huNTjARI^b3^9Sb|6S*&TMlVbEje9RYy%~G63 z>qx(nzCIBcoXJ=_dU~_5*YGRJvV>$Kjv#$7c~3Y;}(4P3~dsI)mr%t&VgcF}Ltn9t>-QyUPm zXZ)jAg(^)&Qv06f#1&VXhK4cN4nF30iZ8$7ZBdhUAw!j)b%WPs-r6%B>MZhQ5immr z`{)ViKi>nmqH2AXkZMtN|J!zJOhY#p{UHcxLqYE?=Q3&7;3ERMQhCst%;>zM*qeVXj{+*VR zcgzB{O8N|M?+%~SF}zGxF<;?qExSF-yOwNj&sl1ymNU!r_Fz{VKF9Z5Q;Fkj?!4gyZEBB4u&!0v=5Pk)oF_b@g3eQKpJ z8{ctReri-mSZ895p!jKtbS}M-Y{E$QP0)_;40g?(NIzZG#ZUK}e&F!@qwAE~RcZxbVT{+V|aBB9d<&AgAWlDDr)3lMJb9TCO-P~n#hdan!fTKy5 zbet6VJ{;7Z-3!2_bqwDxL051Zyq3!K>L z?kMR+#JTM)6khWukq)DmjBtsDuMvfO&v6xT2a^yG!gftdUqD33xiI6rfxpj$#Bx-n zpsDeGiEN;T@rb#J2=D5)j2jH;YJqitUcZaN=6Vtz-S_XMVw=J-S%W{m=lp`D<4Kn0K>WHTwG7W;aQ6{xP@lS*JxQww_kBxK%6Qb9n zsda?xwFFhnTB+Hg0EeU!TxA3?vZwXvT9j2Rd=)!4-L1PU^&e@P^z#8SriS=d378*6 zFc~oE{LRS-i(xA5swtmj$WZg(Rps;PZidn6*)i+8iN)Wae%kM)G#pH(WB5UaYBF$y zsKrN>g`xf?J`YS%*apcKJ7KDk&?rJs`ti28nKlJ0QsQNiGXp2etH!uD2^@Koq_?KU ze$|i0p-tifwi&iYSo6PXW6Pk625df9;1$Fx_CYb`Pwr1u1)8LXawS7LhG5@d(u}cI zGb#jINhR$$RXhXJH_URSP&!@r&P3mkZxVqi%YBZwzrMuAxM`(Sv0Pbn14+c-cR2-M zszTy_l+7v~G6rk_$G=NyHn!g~EeyJNB_fKu=|7$2OZ?oz&SdLDQj7&skjx zV60Mh1;l)nC{$8jASA&9gCIaIpb=RL|JO==!^~C&WZL;CqYM+?4Zm<^| zyvMfsERH=5l^9cLjJwx8HFxzPip%Wn1ORPbJS@%^31CZU;zo4I=u(H0m1ad4$FYic z&?dwx^Og7CO;1iQCmnXj)BG7L>YX6ZF@mL^?M43>lA$tSj3rpe1odb-^sifHj=R#&_PVNHABiQZZ916KZyex(e>3bpHN6#a_^UtY?cRP* zSf4$A@_q6~pTr;E-t$p(xpo*y>z#cohx`g)nb&=kasdqg)O8Yl`A-eurza?z2~OOM zok7e#r3CYvXd>4oarggJ$Q4G^465&_!wsur8;%B3gfc)1Wa_+~u*}zEBYwE9cwduu z@kS{Hz8Tj@j>{w1i>3JQnzp@Y)q{NwMcXC;L_Jk%NYt|cp zZH-VStp!(hmBh)U-&1QLU=3VkA6x}L$f8D~OjZ>K;i56?RQPDZyA22Sc&Yf>kO!aP z!jsGvYfjzw67#v>~S=5wH$uQUAhPC~F{N_qcKktpC`;VB!7zXjCZ z7(5RS0K*BL?5y7@Vi_V@97@@t7gu<1?eI%hiIBYBKZUCFmCRyw+YT(gF~3paXDj>K8GF8l!|7?Bn9rqHXWE{aHhY#Dr2*})`T}0hM&0^;4DP1CD1_4s zyk?gleQJ%fkj=d>vZI*0itB~g?spoX@*I3dG>#CQ zE0LrRBsR|eGxhGkTkP#53!NJg`91z7ol-H*k2&rHdH1T#J3YHAG0r*Zi49heb}8AN z%;n|FDikZGM*y!CHx3+HZRkg(yAM%q!T&N?wSv-i?2iT@K)uhn{a8FJH0M)wQRU=6-(o@scOZHzBh={q2nHe&vy9Ly#Tx5$5% zHb!T}tq&~xE7_`CX7!%Sa3LRYmG3U!OM_%ef)INk$(^a0&Rs#8CCQ#6kG<#R={jDFeNd-l2o+^AR*wMh*8_wi_1cMsnqnK+RocG;>`0_|J z68YqHFgIq?H+=kpOK1Yt@7kyf4K%b?V&k&*?*?ceObh_q!x@_xj zJv7zD4097IvMtZq9>~k}W@zpVl@1QkH-a|Mu5i&-llg0rNvVYHMKUBeR*%={%NzJE z{k5`oXl_?KXh$KbW{7VmeLqTMyBAEHvP9Q{w2WepGc(Jz4ihsd$$RbJTW^#UffR;WckPeKGR1`= z@Bd`t7C9$VT$zY(`wL8F#N<7M%U6^z9H6K8qVVU1JWb&ib%zCNohO&;i*46AMQ<-) z;=Nzb2zdW4(`i2_Kc^)2Lvv|YFn=LO)5O`s=cQjQCkoiZ_xA8Y%zmemh-6>i+sj9g zUtOyVjk6f0>o(fElH3I(mq*RzIEnzJR%wl2WH6~l5qs2^ia3`)T4qTbp+dYu@J0~Y zVN5hK(bEp6b1Co%gIK#&!qfKSV0ytg+>PB9^pDC0Q9^f6qk|ai2{u6-8of9TV(fGN zk~?2;k%HW2aV&N!bW7Xrn7zJp9pO~ThEl}WdvJ~8G2|+37I*IFM!rqsVAYymMI}aZ z;RCPWNlN;Y6$6AXN4CB}kyek&tP?4c0Yoo@PIq;%f!k>k*AtR-nOj`lGqSG9hEiL8 zzhd|wC2b&du=veg!@#EfYSPN+i8}yTRWsOo+IGWf8!5|j4k3TqwsnwHp9Bj}?2JXE zav)2)f62l%XH}<%0=!<=t^O>i zSBwLn9T&J6uscjlH&J2Y}$kBQ>9VlNjiT0DE(B)E6##z^UO z$*$X}ySWOvme1Z^smryv;qPtRm0k&I`)-WhqGO)?U23dzPQs!5p|V*IfAZAx@bEs* z{;rYz)nj)0&)q(3^f8PDI)v+#&Cqit(*ffQ>&d;=g(yO=5YmJIl_YbG8z|UM7oq%W zt7Dy?&&V(`^XnS{@+8H$r7LbLqR97$@cJPB=5*;-02D<@Bqb@JfNMB^^%MKWO(Px2 z0)^Zo8IhN&c+$UdvC#V|+Atd_?TukPze3my(wSz#5!o5)P<4e2l~q~zK03&$&vQ}j zqb)D@zCOu_@txiL>-({ce%3tb4^|UHJ2h1Ou;V3W)_58N{D!`4Jn|%%A!EE)pO;9)%(`)^hkoUEm3AbEOxQqpD&5Zh_ZFBE2T_+3$qaIEpA&mp2LKR%&zVU% zaRc3}(uv>P;}F%g3Ii?Fe_AiA!`JX`>Q6|oA{j}VZHHEhLCsAa$4Bpkyrl9rinoI- zA25T_im+Sgrlm}Jz}Vl)l34Mpt$%DG+|BPl3a;e&o&7-n>QvoM!y7A#nEeq~kAAR| z0PhH`GwFfC<<_Iz;pb%ZdMfIP+nNqamRp(5K}S+E{LnCIJhWQ{A5RxgU_`_^-aQtW z);a`5v}px^rzk|SXfvCzyoH8wO%(2*u6Os3)7xI;1w(_6*WJEl<;Fk!x}9jKhl`+j z;6R^nm0Sm~6m~)Y_1fFFyw&Z!C8!M~ychL0u=%ahsN7jMdX&ssA~b8(-0YNbVn*Fn zAXma9;ebf6tm1ZhG3-@rN6OeW*iO|2Vw1KTf#8WTuZy(o|$h9>hL5Q=4<- zBHhvlcA8;0V|3OEIR0uc{P%|$?TpYH2)jU1oFuiL-CH@%VgQ#NWDvTBrhZ0awbjs~ zXz9f1>C1MV8^xUsrW0mX@D75(E5(;r%uJ01fOq@p2RgXc)dXObm)ugNHpu4wk!C4( z1ItNH>Z;pd9H8O#ZtI*j#|EE?R`^;k*kDb2^R*aWiV~f|&=&vP#w?t64pU7p< zXqDjh;ew_;QabFB{Xf_KDX?cD<*}NyfsWecIwFuGgTm^{?^z_RB=jWgf&Q0Cq$SP< zDkg60Rjoa?^%u90sylZ2`*3%wSbBT*7whI1Un)4sK=`Y3AS~>@J&Y?Msm+PW_)k#v zygIq}akupWYpsNg<3(l>8r4G|qK__vW0+E-c)*$@$eu(*QY!GZ_tCufD6~}qh+ePl zbtiU{ZO;#f2n!4k4@W^HnfiZd`_8Z?(`{{KWK_@@ODKW`3o6}0Q4j$YrHEpHP(o4Z zUAlmP;NU3I1VV2rq4yG`1{o=WfCLDgCHS*|`|PvNb-t0=b1wIfanvZ1yiZx{ zUUz|8xdN~y7HF{@NkCLAyc!X@e}gCJ{taDNJuf?cq%{Zpd&z_{m|(L3KzbVqHPvHr z3>OQbWz~hLS~_k@jdEMeZck#~u?Vk=(Qr=P6rWLMj++^Xu&hKgAV?FiMqWWo-FdU% zUO_B_A!Q#(!h8XHXW{3%KM8N|orb19K?NcD?bdI1UweBz!YsgCM1K3@b@jt{_on_H zc)!Olvi#utSxEXL!UJIUT|^261Y!0eathKn0WQ|FrWq)iR^xUFQIS9@P40tF#|zn4 zp_T-l{)o%I*F@33L6@QwQAZZAR!1=2G2m1bH4x&iy(k*s=g{eKd}CfyZ4UXNC8}D z*gweeqy?>1TIM!h&4StBHH`!Z7)6twhlHpuJfdz?ez1EP(7Yd(;;plJhR*fAJ~ zwL76_50Be0Y%Jw_-{1OqF4+%PSMq+tA1mtIOxJQf7O;m&0KzKJU4$&IE`YTV(q}0b zeIjF>yjZRv8bD0Mg*q6wOh&eJ3?(V96hLOA3%`&A( zWZ=C~cWleqXh|zRqW|`dQEq2+Ow#vZ^NlXSKR-nz`SyIFa5B&dGe_N%TD{tw#{N8H zj@G9Teg*6tvM6$E;s(#kC|i2KVE5c`;;XyJrT-yi_qF|5xx+luU4YIT?-Lj8U70%y zcG$fUmahA-QKGwNhNa&}vD3de3%+^jA70=(>yfXGNY}l~(AMzXO4u~x2CCk5XB;7_ z+N+NGcV*jyq+^Rq$wM)f@}JbWct=1C*g!QF3gAK)%Odn17^LO@->r2g@F7U)PkY1nGlX?4#SZbNO@*n9dv{IA%O*_IixZ(cx zOI|E(Zfj3~^nS9sPc1G^F-=qUjfU9RvFkj8ceKv9qe~kx3FgH&2rMt#FJI;FQ3E;@?%-K8cfn9qKKaxA zTke>7;3dW&U$ncBgYFGRbti6|`}7;CrW;L2+nY7q16pB6Po4{c)cSV!}&r zH+%g_z+K~zOYY}`V95eaBxj7n{^btSYmqMY7;i2ZE%!!5iizCq^LZvQ_{EJLQcxeQ(`{k2&$W$f zWET+M@W|_xz~(oZ$JGG`$;uL<~oUv{va@!c@<63%7AlM0AVZTJuu8W0CYHGL}<4{-mt)G9xS(E zDmkrt^=;wE)$37(pQA6Xo`XmT&X|lkL*xPqssx?&>h<062+VT4<}L)xfe%uGa89T* z-};;m)$ib15aDUiPvyEY0`%J_=nCXUJZ^(Je!mH_1mCwQ#*3t9Of*`B_sU*`hmNVBl8G->FQz##|us$Ft<74G_6KauiDN_ zF8gi!-ri7MUxe-IzftFUkOU<-3?2>F-HW;Wj|&J0h>?*-+HEVb7$A!yfV@2MWOVD6 zWXP92f6iDduoj%l&#b|Sj$jlHl8SndTok5(CZ%9KDc}v{fubv|$yZ_v8PMz!G9vG& zKNCQXZ^#%y$rLo>2A3yq$<2#N-nUX;U&Mw|5lv&As%1fn zdmiUJ2Q&dgDGgLmk9QZr&w$?16u@s4DVeu7RP(FAY=3z+FvXrplgO~DJtq1E4!y^C z6Xp3v?=>wlsUj&#TTJk$SfVZ%* zb=yxw?gEG)BWQao&%A0pxR<_E&5$nQVa1u1F1)NV>Ck3q>HyLevfD*Es&!{bfYqK| zKieIM&KkV0j=x3z zsM`ibIjYahvfmxg0=f_?V0FP1i>t}j#jW=3;N6XG!8~nrTQ)n<|4`wg;;SvIQ!!6) zX)ih68#Nl2tUAGTyXebl=Pfn(k4Rk#LxMA4)2d_E1Tqi9{SIAL711eA9u0-LjijAq zZ4gLH&`bgk0Z`C+eKD`dKab1^uA6==bANs*2b`)t1MmR{WF$PGA1w6GPt+_u5?@mH(Q9q*kba6Y=@u zSSPMdE*dR+p&_)XhrJqV$3e+85Diu^;>| z#d5DZih=HWE#*ThbpL0>gk2V=%|f|$nZk;%E6)Zgtj_CtPlGfN==0c$mXdjbbOtv# z(N!dYkUV60sf404EVt1T+~8~c`Adp+^k9?QTfySCPiJNE)~;wJyDAesq01kEmhT1f z0mraFb>N=thx>C9a6Rdj>3g_)LsUK>2!M0L1*j@?L_6>IF^t>N3&xZqvJ{g*@z?Sr zcQlMo?q#4%&w`sh@-Od2I%8Cnb;JdUdrERLd>$OE0s;X`!Nb&wR@iCgypZt1ev6@^ z##4U`=dVcUv;dJ_DljD>ilt@6@bd#Vp2-&!ri~sp+i`!@uM)T^)3(U#zkh%2{mo+^ z{flpJN=T=cI$e>fyn%zo@`Xab!`*AQ%;9s0a02LGP~syvT`Exw8j__v9S+H(gy>vN zCA(s_C`b#Mv7WXuxDq9*Z=N@-2_F-3sP))Y!s5mhPq-Qu62iju#0b#@fY_M~qNpS* zI%MvKTwodNN4f1yg_!&_b=8%kStB{b>V? z;N%G?CSHA9Q@HkqcK8WU#jQazMk^sLJYWz^4?GRa=LR%@HGzlyFP~`T%X6LY8v4*)?gN^Zo~C94U~fF zia3Va8hR+fhBTwXgG};SUrtQi<*?tNG&LcBtb;7Qr`Y0dxd};vMlnOWFtG=&)R9%CIo6YID9~kz>aFBPRW}eq_mq@@R z)15v2Tlle4aEh=B8Y$i>qe3M3EBH*%Ku_iqJ}K^0)bz3os35W`*-V3s7a;|rgb|WY z-v@WuGfc_3#On_?7Xy35{BEZ?+3#$_1M=7Vq9Jl@I^bjy@;Yv6=z!eB4Jf-9TaCp$ zx28P_fUOKr9;(;|a&k`}1Ilo>AnIO;DmLlCj7X{ocYq>msEQyjk9mT_`MF;bEUSC( zs28jtg$1zQO>^TXEPYB#j&EQbtoSpa^2DmWi7HNFKeY6aq-R9FhLf<)D&br|pyM*5 zLb}n(HToHPznjc233PVBnrxWJaJ5XcTbbTGYF+|dw|Q97;fjb*GmNski;iiku`|g0 z{V=`(bdDH0;%=E2>X3l!4avKhEhQxZ^km}KWQ;)`2&UhHDDqGsvv zL;PYtuBMStmX21Yz>4@u(OwDW(PloibRMV7_nkmq;NH5@yIjA!K_~&qbJ6i7O=2$nq zLDwecBG66`>A#RlTGw*{0;k1#k8mj+yXz)@&^iixCZxbuxg|M6F-h%e|F%U8ESHNcL z?o5lSzzO=gWgQ?t(fKQk50jS4vbEl_V$Br&G~1gvW8wx@uCWPEYVQ>z)h)( zT(7ysLn_j2s!)Bv^_nN2S4~j_!i!zavSqdHQL=cusE?4RGhb=k?H4bruuoK+94J`9 z4=G<(K~%6Gj&GhF^gL`^f_rjo`Sa9sOZ8q@SYTkU#9W>5Y8LDge&@|}IL!8qDMTCPe z-37&)ll+c4xjU9ZCG)G)X)!a`KfmYK>;Dto^`HOg1;BF&l@u-XCWM}P!UlimZ@;7{ z=Z-Nt1Fmo=CIT_j)t}%PDiCsq9C#R04fXDW_tzQ}cshovjA({b+;N?O&ENEZsWo)_6%n76FTPHrR2OJi--+mzcMmdFt~jK$73fK3-;2;zmnyd%3T4oC@CG+@M&FY`%8ZiczK zp`oEX8yl-(A$!<#==_a0HFa}+qEK{4$zj}wFG@!0F!-od)p21$ zLoa&?tPxf;Bv@1Sus*`IQOpP9XZaB{<#86Uu}e)UmE=Fg!xEe~?*!IW?Z>d^G#KP+ zOKb`_Eq@k(9r`ac97XK+z zFzU;?uZHVrD6!;9OgFlX<3GofuMIcaOW@YD+^!^uz5P76G_r&*xEa;60r=*H>?e}5 z9(2;>1vki>|Hzg@?Qt2r*FIqW`Jv90v9SXtynU#VMb-iuB(nnV6w~@4LMe z2bG5kLjb1Co9l8jyAfRhjjcW93u#=(%pn(EeV0;UJ`_UF5GNOpRn%ax!qy!B3g1o@ zR5a3akSrNy=Z_-p4nVi^as-YB&$871qF+nNXe-#f6+jl*kMypQ_sX{;BI#Q;)6`odQR^%*%@J6F-YDQ=^O+OT_wUAWdcHeJ zIO;$C2NFzyXM_pzL{fi(2*}xAQ)$ZsBI=n~Cwq}jvmCTEKlk^m)R#?Tljx=f8_;C) z*m}4G%rB16Cjp4(tX_>n=Jv?s#tg(%?E&Q^a8=Vu>Z`Szg+bYs2w`*UA{B!un2iEz zt##)%t}!+>H!65qn;78nQ`3H|A{9>lkhCUyi`}6rvz^0BMYfk|G~&{^4Y+uUrxA2D z@xzfm$uyRE$cubsNh@v7h6)>*GNag8FL)=#)K1>*9}%dFH1$Y)9V%*PvL85+R!|>H zGX&qNQRNU1v;>r}7@#?1kBU62kuwlV-G&FH#T=On+>on~YK|g~`#TG$$plF!exxAe zy~pR7PV5I(tPhl;25&S_e~AEA*z_7NrsVFZAT16AZF8z;c0&25`eKEt^}drOHdK}W zBo9k~5KJ6L+t6{0v^o4~V3?E&yhzW@>e82UDE5n5@^(SrSiY`kxhm0U{USE>8?4(Q zV2%*#`LsBHG>|Hp#)K@d*CW}$mD}JB7oxaDf@TcmTxytR7w?UMk>3^~(4hF5`#^&HM@8t0Bz0|Iu5uToaNfWZWGN^=?%qp(5e)B< zP8P*WoQBgHA*a#AuZiNbZAVd)gW`K3!;#r-()ys*>w9+)5gWV);cyDjDgi~b;o*C= z?agOW8er%TF!>1Ye$&a!R7^M`GK5OFxl(Vy3A|o2Xe#0?x}pCWRfFaJ60q{xQ6UxHU9gis&;eSd(sDYQBo;}=0jO9oLmuZ$^- z-fjVDO{NNqib7E2S`~Cg!Zmy3jyjhh6j=S`Fptwo_Y?db69C|>lzM?3!#v={`0>-P zWAAQx;8xq(GME2AJnwr^pm48!)qziQEl;h7&t0RIC;sC1m-*lRoK2D>8T8JB{1)YM zwl5;)3ouQau|D5o>>1t^EDopip?vIhQvSUf6t}v1pv9kg5Q4NIm(>jE2vNkNG%y8` z!tW`%_12wK;OyNQmSn6fjhsF!;O;x(`Fba?rr1O*BE_ADM67{QuQTAk&ba~DF`J_V zV@r@@7~|H!zNP}4@Cp{3^siN5)uYDhOJID*T^Jp?s!v+e!Kv#LczJnP{PXVL3#NUI zRBq8;TE&g7Os=G<>7;$1I%M){9T2hm;f1P+4_x;bcA>y7=J(bBm~D4TE)!b=Q3NNDOpgYZWxS0z%DxCw7`%!ugCO*W6M)N;lWo3t+x^v0iWRfH8gO_marnq2{P$IL>*WjiIY>>jeD9e(>(7myxqPrH!6BAxmt>5o? zV&jpk?8*VAAB`}?US&k#9Y}q1A4Zq!wGadawR~B?RlM^7TMPiC3G_1HO=5#ISjp$! zGaP6_F0v5F;)Tjj5FD=o6Uv4NULiZL3d{WHWx=yko!GP!?`{#;f2Oc%~w}( zK4P~q-`y6Q>GD*dVKXn88rWcLyTRS~r!Tn^x1p*F*}hbPzTqy^qS|r_3EUd7h*#%P zhw9!hAhw6~k?^ue^V66FxYJ~TtIfKG4<5KC%B*n(u6_Dft9_f?`>UpGCRI@CZVJM1$$_GqvN%v@1>!6@abDDcig3dj3f7N^{G zy2vFTs!+3bSRT(@;<>F)p=mv;bWXc2&#OT>Im@dBPz(&QO7!iQKr~zd%-?9A73BR7 zrr=p^rnu?-&kiUviK4W1L-Jmj@hic4`w4|;l{XR{J_301~v} zA2P}U>#ohwz$$zVj{!}XT1>w(33fn8gTY}D6xNs}j)p(!1q0#8xj*t%wr>t|QteD_)VhY!hIVNormV z8Ps#kSEZB&euAPg(z9=+VQu-QtbkI+&+EG+K7Q_~r!f;BDrojYXcQU>860-w`Xa!G zMzyKA6gkdS1)h$9Y?5imoP+w5-A1-wWnPd>l6Rze=0{d{+$ZlL2_-Z|cfma=(c=~V z^yOq&Cj(h2dTHJSE(>FfI%F`j3>m;bT2E)heEzj}RKRcJ z{R6>xfmiSLL>)vbN-%>)!^J%{t~MkH(6 z+5pizLT{o42u~v*31>(+Qms;3GyGErfLC!T&i@sJL!JRmxk}p?N;FM*2>G4@@^=AA z$-4u=wrcGuoL~uG7f~^fRL00>0g9Px43A_v1q3oOZ*-_>NXR?gw4V6m$WA`e6wC+= z-Y5*+b7}?tY;=pvglzZ{3{lqAy`NN&-7&f|5qiCDXEK{2{lR&OwZXNwP|zGeXathnFtr87rzAg|u$*)lK;RoVPYNz| zUjSoh<|O4Vw~Pm96xxl!s@@{TLzh-_t!Sevq6U>>sUGPYuqD2KNd9>xCb@H$%nKnD z5)Y4;bjiR50$!@%S?xiL(O#tXL72-y=)TsW5@36*+ee`3H1bgbH*tf`7`IhNO%QgH zMK40Yhs@?nFx@kad*}l~H$FzXLNJBOmdtD(2e;lx`c2|cBeXvNj$6vQM}p)_5DMmW z(dBvFB~Gp_G`Q8%6=SPakK#*^P>b-Eae5ws$(UCA+0`nE)ze724~eIK$io4K zbKbn$OpuHb?J^1BZjgQvg0n*Z1|c(#uh^>rEt7wJH}5EW0No%Ge9y! z`IrnDtI)l`bogMqGYaK4kh%#Gu-9hI4gs6ZbH>Xe$ktanL!DwDZt8R#dkP2RRb4pr z>Uj}9%_}(q+NA1Bx!7$j0LMlMA?HwO1{wf+wsACHWWF5c%rGo}=XS*ka~yaKR;y?_ z%d_F74@khk27DGVw}S_gnh(N3);lrdLC@F=QAgfLOWO#Xo?ae4dqI~qc0r?ELk=k~ z!0fVtv9=)$sy_^(Bx{WJ zG`iQSDE15`vig7xsB_$4sN5%NYm`;BbqA}zryKFZOAM(I;ww=7-V1udrx=qUIuB&g zHxI7oOk$&%m#G#E&9dh4r_unV5)s2iyTxsaL8lbfAIEL1iPRg8_E|D`t}BUvH9aq~ zd={B{Rcy!=c^)7?X{L+AkV$-K{f>YQiUDt#noHS~*x;Gvcv0lFhbA*=-xQVa-)4#Ol9YSz^Yro_3UCG1Hc z6_vmzNFbv+ls$&{qxE#1l%r5$k1GlmS;L4}lX_N&!o&w*4*6wda>|(KM;tFg~ED zwVMG`z2dvH%I~xn-N!gsU_-dc-Q>tAAQYIzaTUiG%QJ+@eY%8j!#hoYaoHeH66OlQ2TY;TCEbu> zHQoUjfIUe9>f5`1Fov9YURhix+^IKc<2G8lG`^nZ3>vRq=oo!8ivY5$p>smydCeAU zt%Qd!(F}QcVXChe>|Icyj?%W>=KnbKQoH2aT7oN*aRPNbOse2UTmZZLW)rU4$=pFe zCCa_W%5~oaoT}Fkj$`KP4VDby!^rCPm)S~o%k^C7ycxLK3`dX)I*j-OJumc&4nb2( z3LDqw)_1&_{j=P{HHLI<4N4?R+8Qm5^UqMGEH^EM5691?zotD6c%Nk?A>Vmp!tP8L zkb%%JCktxyD-4m`8rBv=YRHv|qZCb9UZBfEC(gg9YeFMACza;$a*Vjh^D;HNhP!=U z^$KlK(~7QOF!%Lba_TGY+KC#kIieE{Tdr0Ru=&bk(X2|I>{Lbz0P0o_KGJ*x6i&(`0q zfK-pzHreq~g7a2F^KFLnY!I}`IfMIVVSU&L=zW|{u5e8Hmxv*Q8s_D7kQQL<>|c=d z3q@gc<%F?I^Oteu^Vd2DnC4ud7C4-s|6>JgO?Ynwaz^PsW#dV-tv>uaaDp#q-;P9w z5Tc0l-ZKLZ9Jkq#!Cl4*(!877F>#-U-}KwS+vIYnm|MXia%jI zu2DRRWW9JB_3Ph z9qRaYA-eK;4In=YDF#YU@C+^*#c&lr)5(upLDA5tEJa>EaSmS)o&i^d(eq*HpE8+2 z7mTvMcR&OHqOYNd>?59$d^fo|dcJ9@YTGrn4MH)3pbkf&q$rakAD5O!*jvCnU>;21 z`@q&v_0u=F?fk6@Y4W|bqNTt$s5zgGNYw2F^b| z>vlLO2xDtdci}(Z*PlSi%P8hm&6r5wjvKL!!2v-LT_rqmD>WvzXng4-+;I|JFg3&0 z1xsA-rktTxzQSN9id?a0p@$wci;A9uyHgA-0P{j2-~_Ytq5O+mN$7^fhs4FC-lbn_ zg!t>x0)X@B?o&_-?1{Pp5T**cS!!l?lo->wm zv)ur1A3yy&8ZaQOPF3n0I*3^*QOCMfLKI4h8(^E#YpW}LDA{dRDYFB9n zYBFK`U}cc=V6br2sK=h==jHE^pG&F%!%_LoPVAP&RzO?500ys72i(^2$1lXJGyv$@ zvwlD5baEX+`sl&f3p~E3C@Kk|o{oc+1@o5It;PtqpY&_=ubT!yum}?BSevWrwp=Tl z%Qu_jo}+Cp_>h*JN19GCt(kKe%CQaJU`ku&wKuWHZLdK^!O)MC^9tSgh^8O_d{u&S z7n^Q_2UFlapkg(6+{51cfCAXLb_@cc-4{iH0ly&z#z%0H&1A=bU}K-5^G%T4SWC)ZH-5@4^9DlTXc z0Zmw~M=_-hE8EZln0vT+!mhN>UjbP+Y>g8Iqlfk3F7~8qL$tUq5Z2VY5t!QpoVh)9 zr;B2@xFKl>^3p-p#=^dsS%R6;rcQA4!bAZ1mTJgwSkB#kXrJ6+=OKrqo-@QvWB@1( zW||@?E9w+Wsei0491xs{r_mQ}1XiiFsp{nx`SsPsFLHan*Q}x z>doo6zzkW3x(H7~hkdQ5BQwmVe2-gB@TPmUIKI-!V&Q_%U7HG|@#XCZNDsq%D_;eLyb2>e> zDYh#ZjbM*xN;dGbR132BM;4-hMHfc|dO>?zlg;y4_>aeCu-*rSXE@zJG`EtU3Kk1Q zYlly$W}KlSD+lH?RJcWWl8aR8lcQm|KMr1}g&pnJw&L78T?$)sbQVXgHC4C&qQr7+NjJ ze+@2uuCJ*cNG8{Y7B+2A6ccxaUO4|!zZUYxkJz`p!0c@9l?QntI1dbO@VEZ%OKO_8 zfscWr646u;W#T;ht%X-Rzi=E`G(&vbOlM>S;75h^=0<=_om1^~_%5;o1kW|D0@G1D{T zwI%W-+{xLNaWOBAWmGvgr!%|k0o{|TG9Ei zi}<3$odkyvZ*wA;Knq#;0w%2rJYUD8DY;)%(opjK;_O&NcT6~IJfT?WTr(6XOep@3 zt{cVw&DUAFDz#Wh6WDIrIYz4jMvaX1gN^e6+~UuRe`-pi2oRPGL|;AsX8xz+#m^AUuQ&Apy{hkH6WuY?4_9{1jGXPJaRF zh4!4No<8V4sUP=6Xc*H!aFgdzJ>A+uny{=mX+rq!eW$pz<@inC{~p&Rx=abwdXEJ4 z-);So(p||q%sD6n`v3>7r;FqVjdA$-cP3|2fJ6-SAmZ&bKR%Uai${eYVoD?C*JNX1YKz^5%$nFbeS0by%9>5opPfNbyQ1q5`b#=V}gu^U2bF09_X%AHP zDx@_y=Yh;wq1n63T^bl{ET0mm5720GCt440a6`CXg7@r+5&qLw|NpqWZ(F%zw1Ygn z*H!pnJ%Sw8w2Qq~7s@YH|ha|+zYpl9|#F50D9j4E*`M^ z_9^rztDwP5sk-8wUAeBeLVk8%;J1*QYa^t&u|hYoo{I_0KX6&cR&GN!TKD&GQcAbsap{_4W6w4V+(jYuVUcN#vw20^(_w&D6VbZR#S|g z;_L*&#R`A}abMXNoHSh*7PESsM40wR>{^>!yT}Gzw#(RWr$?-J138qXa*t5&68^|> z!k;|pWr^AGpX$Aa$Jgc^hDx}%J!z9VhP|?7^KPEo%A-s^yLsP99J_fbwehol^Oe0m zoLQSM?FeYgihZ(^-6J-(jfZ=i#}S$5*_mq#b@%Om{i6%;-yYBIq8P`L$2J4GVUDyS zhnN%NT>^C5I38|7KS+8qVlec0&lu0W|MffTzx~60P^hazQtsNF=wt*`DemI(*UMT!<|qWtt_pxwHP()VZ=$@Crf_YBpR;<2+KUgS03eD2 zvLL8ey-Uclrx>d(!lIH#&&;ox2%WBA7ou*pfO2JrbLZ3o<%E2LXqO;fXUUBjgcq#XUnr}5`+yXDsHA?&+V=gC}S%EQeq zw>XxZk1O&xiy0i*=x_b=6aMqB`Q2Aru(xmdV{E{mw%I4GL!U^@-L6@!zKlFFMt zIiUa-u@(e^5P(e~i*hdup>u6+-{a6$bL{JECv7ObNV_SBi*fqR);tyE>4L@CsAPaI zJkz1EM;wcq+~bdSpK^y7xmwp736TBybADZvm@3#FG(y*sgk0fwSekx_ePf_Td+>@w zP2Op$E-`meY(i#)Dw}5_8zpLfFkAl)-n_$%v}Nlyv%_T*G(MS{7Wkj_D+YQq%bGk$Q>jsls4 zl-hNF=0AdQv5AQ?4Hu@of!4qVHZ2OskP*-qh66BaHy&){;!{6TvSfj|p|@FjYCw7h znju@>AjtQ*WcTH(_E+uV^ES%wKZ*7h5{JL^u*$ovKFo+jY@%>X!M1kFmeVj9fRYv|f| zztp?p#B9GP9(E`-3!A3mIi>K-uxzbNTjlahuT9vnWa=Nr4w`?(G|#z*^mYHpW6M~?$a^L=}O�c+z+j-Bu5jDXOrw-XXecXWJvj7u2?DzBj9 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

    VZwnxI_XTkVEz%Ax zZaahdl?7nUK1u94m}q`$xt*bqqB?X|RxRUYx?4?Zf?$tg z=NbDyu!B^p#V|H`9{i!zP8sjOt00C|^J-1<01hLL{roESD&3O{RK|;=$75rHdWD2e z1Lyh^gAhvHQ+cxOg2C7?m{fhOBPX`S{Xg;44+exW7MiCW9>K#yggz!MQe!QY6Q?0BS0*R>}*-&)1KmTF0a?V~UmA(tP)vL*ZNW$uJ4ZeQvS#<97^VxhS#~{ z4c%e&MQR|-A-hO&D90CL__w~C;ugN`tE=XzK~dK$Mh-a{#qUEb%fHCa-~1DWzqdKz zc!cGnh2iG`gqM#9oyMb;{4;u4(tNBB0ga(w&vh*_$JybwJn3B1tE>LZ!^6*GBSr7N z#~2w6-Qf69^L_se70UC*AYl>H5TX85u|`Z?GM?Iim$l_LyFaAGf=s5U-yQ4Bf0C#a zyWC5@#@qjTzv9nA686x3$e%kc?+MQ6-DO_LaplAneu{^Th<2;WPE_=YmXf0;VB!M* zg7~iGS-2!MEKDKJLI;vMy>f4Mb25OwTnaLbZv6(=5UljA7T%$k{L;HUd6>RPeCFHei?39O>bJAyaE++bB*_}I z*{y5*Twj`;rX@?9*aCN%{UjsU$DTq-8uaIWc1^noh(QK@>mcoZ0Lj4{%D&8gV9Owz ziTbwk{pLHVFMd~l$bb}0dap0EfSyS&`ZSzezBU175U$I9d zbNgWb@f9Rb1|2?Mw6e6!HfiJG{q~k_@=HmPw&gegItNP^Xg=V2-kn)D34FYiqdieR*NAjYD(SH*G0t>BUg9$dC|7xSXJV)|G2*F{7o&n;7uCD^op9 zKK4^L}@i$sW!ggeqwr-b%U7O_NNFC?3a6QTF(hXsWnZ}p*b>BFqmWe&3cZg9; zQpRWcgba$k2q#E(>sl)`GsktM`gIN8s+^LW>_i3xq+!zZIaCSf_pTLd^ybxhkI&n> z^eLOQwP|#BFFL7<+Zk@=sppAVv`tTj^b{^))i?7d(L1$e7?fKq+FDc8aaAEb%SNE-%6`@e+9J z(ye00dn}5Vj&(}s)^U5*PYO+0W#td`=PrJGGKFJx@_?nqpJOB~)*I}4OM1G+sJzvA z%+^)tPE`4~pHLw0hR?<&ksc9dpojNxMWz^n!J^Jy=v91A(dbed_6H&A)1o z{|mmn!>KLUY~GQ18QD=Qo~L~UxKr<6z4ZlfikaSKlakIJQxXoCz+&5i3^q*)B zR186J>LKYU9_eRH(ve)!&so!YuV`xBw{Dh0q6dh?{h?foaSicv1MalS&sPjS;~cuuOa{Nr)C zr54YN^x8Hj*WO+nNhR+dZWW{}Gk}XS8hFi3OKJV+9V60v zIlJwh1$n20Z4TtMSAKA zmmO6|5o1lOf`S6B%DmmOMu67{SF$W`v+`Bmn`XJ%<8pqLd8!rs*u1CHII!pxk99|n z=}|E|!M+YMrzuv^qB|WP7cttTc4xBc%zEn8Z=9kn!nWayK_7mZHngZ}zR7$hVA}pE zsynkM{>q=6tk|5$Wlr)YJ~!#$$cN$Po1T)piKHM)xH!%R1<^DuLSDoJE+yc4_-s)f z*?_fipl||Tx={PQIbGPfq?lGUN{;ciTrpFGq4UgeImo!pdZETl+DzZg+^O7xQZvCk zG4r-*vw5SYMCgIb(JXWPRB49m7Ql$g%gakeaHZ=@1}=(t$_x*+nsqF?6p2~nnY(=D z;dn~QWH4^tvFPSmpAzK+!(gs%`J_{(R&7@`19EbD2`>n!jIZ0``S)bj(efF}>Sk_O zuH&%3b6^y-_)8JZl=|>Q*I`9(TL24sFDv@>5I#khUH7MZ$|3JhaB|jcrjC>ze9$oI zlr7p&DpFX$-F0aH`aasVo>uOzvt$5eAFMLwFd#3ctUr88^K{QtCV{3vU4)3rbjfn0 zxbM3P^L(9Naqf(e=bd>LX{j1TiRe(Cjov-x;=@1L>HwQIj;-}7rEtg7Yi({r!vdO3 zYe}Y=BL`HHdpYKH_Oc04I*4p9~@jSDHj_^w&>QNH|@ynm_8WYwx?@2l}LbG zE4QI!#^i2FQG>G}c?n&+<;vRTM(Asqh`E+by^~_S8oMu~k>(yPHFqm2FuAbOUE7`W zMuWb)TjO}Q1-ZU~n^mF7y*jhZG7@jjCBfMLN7{QpMVU5Rqks)GpweWJ)I>!<36dmd z6a)oCaz;clNRk|s994ou6$y&uoKbQVM2V6Glq^x=t@it7=G>X@Kj)tRuEm;Z6}5f) zd8&5ps@j`2!F~w$;2qNgyDnD)Wa{#$N#83N;qfQXHi|u1z1z@7DKs*>dSbgcUXMR& zwkp&X2P&KAMl9nGdcMq0cda^ql;B@EsW>8U$OD-uFq zi<8H8*1ri@s{>NVtzIrBI$Ri8$fBw4yIHY3Z{a;IVXypL=HRo8WO(?&S^EP28#^A$ z^L8VKdNr+&j$P^MZQ8irB{mq;EZft1re1%(ylfuUAidI?eA)mqsPy@w)<+QTb$f!T9o2d{PwoZgrG@5;MXlGpH~^m#&`Ys z$0I-ORC8+=HX2nV=dFlLw-|=A-*`^00u$HV+T~IOcE#Sy0@?pSiojlJ+Z1*@!GQa? zdp(IJ*q7J}tQFhnSPXnTc>20kB6cv;jFK4k5?Ptg^2ZL`#M5U4t-4yaBXv>yOI_t0 zS9moP6dpI&c~4Mkzs>9jcpzVsJ{CvEU{hplE!g5zK= z{s0y#aXT6@_P~+gj>D*Dwq5Q@=h#egJorkH`0_OmN#8^HQ2hDdG2cIkq%dOxvnurF z_FKYvnC-o_M?Mj3;(hyzugMd(?}fRrq<$5%3SqJImQan)ZV7I7Uu2o7%hg@|x3^o) zXB4loerYp5Qp{KD*giiZm{8k2Zv?_(4R%Knf@dK($b@gR=}M}X-0cZd*{REd%ztcd zcFAl*fWQ{Ni{dhm?ep5T5DFvW`_OsV`DHeQ5E|J=Z@Hb(E4M8-x>wY|xy;{|Pb65e z6yUw1jbo(eI)p2vFnQE#vb1v`&w7$Z_-?4_68`Mwicr|_xp2GCy5;9K4J=jGa*M?^ zs+Dqg!zsCc77)9pB2QL2>h7-YKK@u`K)b9v&8|EnD~;|)EKg*9T)X|EYsWV?v*Y;k zBi{u++5?Giap)1TD~{@%mpLsKtGV^!UeB-}sFbe6-{c|jIaSIlmSFh9`}y&nRV?q{_azRZI_NInjWkeGem*{FG3~5e z3(3oW4;4~35x3{?D*lgBMk)zW>saNp;X?&6;*S#X|H~_fMjTg-B;32&^yDUIQljb3?j2^3L;swM?xUx%%QevY0Anbyd1vrPNU z@x`w3(mkyIvNrIqe+p}rp9{7JZyv;?CMYRuGkDd9@_zVs29FZ>Jg!K zL*}+sP2&g1q?eFatd2%64QJw>Kg&(I*tvhfpqQ1&a4p_;6~~~e@d>4SB&i+_<$4cp zL&;PezJ|VJC6S$#^U!&Q=l5*E=hdv4hKX zp@vPXRBA;~@Y9WQyCWUJOMMhemW7T9UmA>O`Je`Pi+u`@oOQ>wqu$oeTQ8!{*(o-) z#(YU|XImccTQCHu?_R805Q(OvWA0#|EdkHu7({8WdI?q<&x{FW(u}wmI-Bv<`^uC|{EC zybN_2)_Dq1@7)apuvf)(-1-On7h}(*vEXT9qmPN zTGy`?auI?IlfBkMr-epb-q(w+*G)+op4s6BW+=jW&DyOm)U#krY|BkZk64Y`+NF5% zXjw@2!21guck!;fmX=miwXIvI={w?%8}W#6^;*B({%3_PZ0g~2_P<2kR=3EkM<$)@ z2yYb9R@)4%i8#;i5lk)fPwWsM9SXW1T(bAo3j!sNQTl4TAs09AiUvhsM?o}8>hr;ccOR_-cOBS z`f-2qWDZv}jw<5D)noVX1-{Qzg{2J}%NGY9m0-SKwJ{)9hp{}F>tp7&NVV}3O0OP@ zrLpox4JhP7BdXojFfK{tTh7&JO~Lc1&nG2r3=X2tP8d%Fm&H57I@x8eX|Z}Lghdoz zlw*6glU4ULOp}#{gR{6(mE^?*<~geVIGV7{1_`5+rB$ERRmZf0s@=^h!-4~m1(Dfv zYyA1n`I|>RlJUCpX<2S`bfxHOi$J|m;{+72J)uGW2q_k zV@{*`+T;A{9~b*xC{BF^YCN}{I;a)1hxn2fiTavzi^U4I@Q#h|H2v$3j-f^vC;U3v zo$P|j(uI)r#=$0~Y5+8RX-vH;K6AYcVL~(1_dp@2hsXi4aj)>D7>hL3R zwveJ!?xKSy zDe}hDl~*APK@$;rF<1nDeg(-kHVg0u-exxPW>bHqAS~j*NUCImQ&4~L=i)0<&2MBi zX?gU2efyuk@4tW1oZPrE+jg6WsEJ09=JI`&jX<;fGrfL|vJN@^X5v8+>#`1bqR~^Q zA1H+H#;WxEBthc%+mRe%`^#^95KCzxk!u#+lY%3O~uB-$V~40QftVeuCtRWA#hMKQat7np<_}Bi8HR6&5w|pgk7uz*q3Yv z$K2QIudgfA)`XI*+FitmI=~L?`Az?8mf=FrrIT?LaF57d`JIglK1)Ba&vC^5*C@V=S#9Ae#Tg<9g{u>?=0aGMA$N!=o6aV z(W=E++j1YOn4ttUnX|VMLr?sI8zF~j`r(^p?%>lZhg6t!6PVP$s5Q_s~yAB^8|Vk`+VU7scz%}C88)VCz|4LgYu-P>nB|0s~N+jq#?}MA&wx;CKM@^TA`gvQT&1L zz?SB7lK|eNN8QWu26`{W3$#l!59? z7(&VK_ZM0onaGQ`iR0Yq@me*N+=@I|8pjZ!-qG0jRwsoGn-u-O`tmO%NV!51O`^F4 zdU0Q-PSXn7eB_`*PqUiQf15r8bmno?#6g99ZYm_1zCSie3EhOG6LY^AD2ZM_)oUNp z)YL>L$yxr$nF<^ICQ<1!^3d=5Blc<`y86U_zukYm=|BD(Kql;^Z9Y+}0hUmf;fFiP ziBoCJ?8n7d>@PWuSTKt?A^HNXufcbt>2Rn&DM(4u8k0)1+h$xt1j`5Hpm45_7TJiV z*#@fct?LTURjIus6?U8n!jpVlN$G=h3Uzc8m9T4>Lq*W~SMXl4^F_LbHYU`vlWs5G z?S070AT=+xY9oL-&U>JJ)}@i95(~fxv-~gMV9oz({A<2}C`G@_lzY}X0s7uPta6$( z_e*LO@gdd}d6raDuU-R9s7xUBrY(EL;a!Shj&OW{ZrX<*5Ak*qP`$cf9+zj-VCY-; z>F~^{AMDaz?+I^B9gUA#zQ05^s|QER7RUE!J0Xgt$&gwwp4z#EAG=kLcvd#%8uATs zO($kYtpK+7ALhR=PvodVK3L^4Rk7~bG;;bZdiy?6EYTMBq}OJoWtayiPavdhOccWg06;>2V)>i2DFXZWzC=|7JUo}Kr$f1z% zAiV#mFUm9S&zLNwgtOP``bCF1oHBH3mW_-c^PImXACFR**@vC~KI;DSSLM>N0;U^( zxq>9)xl9uvXZI!P40?rUPrKap-((KpA7%_Hb(-&{IqEDzkcN=>OP(BRqu@;vKgRwghB;AV_qHD+rkL{+a3jdJ&U|P&rNUYw;Bv+H{|brjMUzs?ziN z=cyg3*a)#>?pw$OY$W!G-v`X)*|3TD&a}=-ic@5=eAb_hw`>#iYzBDOLbM(y#Y)AI z4mbEV;MK_8G+$#3Fc`Ha!2b9~Gxwz=qON&QIG}uHjD(D!83xg?n?d881+KDxGqc}R zSNe15U|7S_$Wlws?_;rzeCTFLcGLi+X&mg^G{12m{EXKZ{N%ja7e<>4>pmdncKQ3) znu<_G3mkRcSS*4ddGxb1dyX86LvkrbJb!`^iuV%Eu()(F!)0sn)=GnM0)Zm|r=b7t z`b+t6yuPQ_*U+j62Z;}9q-MnvI8xMl0XOM_d_e|?3CR3GBl^uEAsUtSk(xLm!+eAL9i*e63ia((;>V)sIb#k9{O-T+YEly10e5@vSB zh?RA`4V^Q~nICAe=Nit7Ahc&+b-df7)X0q;;v-|;6}B+KA-A<&@-kz+AJY&HgC>PEykE)}v{0%ideIVeal9(UjF+Hke14iO(`hDV&l?XaSEk<^d*}qQ6g- zy#MPE`~d*}`=8-GUkDqwIz^_B@T~kaR`<7;z6}?dF<9=v#m+Tj&O#2yuqZ|)4#nce zNxei#-Mj^sn^&b#NWc&pm+2&@KN49QB7Af7DlVOR&e{oR;-5kE<@Ls9AH*zdl)YeC3{-QVa=fzU}tviDhTRtIEc@DgE+^4(N0)(xeWaH^pqn+UVn z;HkJhlkuof_(m|>a1AxKL^@gdA|Dd;U-eRcFT{fQrQl#55k2(gwsN2mM$T%QqPNuezaXkgLuXrj^~&b`tj#tJiZ_Th||r#B2IOibIP!6=2Ke1DyZhX1eK0sB=b7 zOgfDo6+hnP*0X|+Kb~C_@W<)_U|K4vUFG!J@H{G=Q#~^ztoL?-p+Wj<-baOqM|ah~ zwU^KzBd5lL+ZU@{mbQY|ycdPmQxLH>VziiTe)R%F@unKde6p-zQem&XLaDvelY#5r zNF3cgY2mK0yVI3VIq&qcM9p$P)u?os9@a{H4UdME733w(E_$EZJ$o<)dJ(-JdQVNh zWGcrksw1ShxY#%9(Kycn8f*k3m$ZHu;gApRC&)isxRCSA&~!ZQk2C3q7?5s^5T|Kz zjm_1NzxqI_Eo%HJA}&bkA`LYwfs@vgzrOLG=i@*83@j8)+2FKofvQff#-*Uro#l~N z*ym6w*ipfWGj~9O@9J#pVr60C96MIFp>R0!`Y9iW2f^)>De}Ojzk9C>0s}G7+WPMD zZ2XTgp|@vjYh(+enwbL=AKR(1BS5xc0^~ac zhIxWY(aV8;*C{x)1|4k>@vuAg{FpkC+pM-qh#)f??gM1LWvEhBNliMCo zF=SfUwRQ7b`FEy9cdYL(T5NwqgkJ<0D1s3lqml5cq=N?qLZ3_^mvobWPc&6T7T zwEt-mzjUa_^yVOV4l*_?^}9{|BJ5L7FmO%Up^A*;#X+1)VwRl(fc+DS#H9)bWQy%@ zp)_vk`VGo9R-iyHI-J@Vf~V_=ut$465wf3X*9@q_p!VxH)Edo4_>(CsU6nwT?X%7 z2%-1g=Q;$9RYXm)w(I!9A7)2ILDO>1iA)3!I}?R911hb(c_G7g|M=_uSy_!uX*=;5 zLsZhZOlR&~tM|&5E4}JMYBeC&y{Aqp7q987gbzjKY1|-q}C~6LLShV`dLnN7}b}8=YGhw3L z?liM}7;9@st8R=G4vC*F|MEpD+6|Ei0@=#hypmqN$>irsK)l0rRlItkaTDT=+|eF=KBL-&hFe z0E~rZCR*yzD#10jfxdu3r1AAkIfhArD_C$UWS3EfW!9_RnOFxsHc-4L9xC z|F+}_LHd)OSH(!@nuB@|AE>MRI)p$0A*R6mgGG-ZcRa~0W`OBAJ# zDwD;^h3MGSW1{m(K#a!>JNRq#4{VD6lPk0V* zBj-oUtiQoUi>Kt)RRW>rZSe#gT^}`cD+p~)b7+A>ucUag+;m<5D2NI$Y)1hyBsz?Y}DSp=}7uWN+ z{=*0U&*J2-pOG3yOwl3ne_ms+-hg{;4$uFG(gX-(x^zC0y+j6RY6j)E{uLM$4(Em5 z&(@St`VjM?@O&#Fo#6ThB>kt1Ziwi%e(PaL;juu^i#;U=RgVz~_bX4Pk>ZxOcexS( z+l>$y>!0@joDFj{VDueN4^9;=VHA;4M*OgU9I6kNSaFiR$L99zOKNaK{rqNyi%mY@ z=~OzrkWwOM*4u0S3$|@ zbs`qRNf#(Ssci(YiZ{CNB!hNY*o#yXyaa`425yw51v573-erHyhxIosq%i_z9UxX{ z4g#w`dxR#HAlz8oaYi3xZKwDvLPlD0Vr)ibCgagA{SD_%Vh*8a!LRhcfH7c|X3lT79pd`G}H;furD`6OqH#c9Tw9x{`{qS$ z%ZCXXfBTX;jimM_qUb*-X=uJ?$SXZ5_izhEW^p}Ws#YC=L_8eTty(E6iPEgD;ho+i3z}fFGG+AGvm2;CRz!JLz-Vag%t1lFg zpt`hZ$m>$rGlRk``z1%y&g|7)#7C;Hz76eb4dK+>n(W|$>j6?+&+D_LYVnzMQEoLL z^^TF7m(bfZf@0hq<(ETPFVskR0zizaHr&wT+cT#RXM`5rIzFk2ax;7myPvc-ALa>O ziOyR(6gax5&H#rm-{zZY;jv>t2FJ||Db1y(?%x15771}n4iMpM@Ap7LS^WC>Ex-cu z%rlU;A#6>7Lw4yAA;tB~`{!*9fKEAn@d|R|a^?BIKD0{an^ncsr^sW28UO$0MF)8- z|3H*G%#j);z(vdnH0nze7udVEI$mY)ttk=?KWRc^LF+4IZ!MDjku{yF9uN{GrM6>Q z>itPVj?oBfprQZYWpWb8d(DD)*u1!Aw`WcwmIE^=`CeCg``~+blixd5AWqKuLtttL zDWY${^FIUT_r_?c)vKlrk__ly==XCxt%57TD&P;|Rh^*KmD3bkVfXb-Q}@H&)pydD z`;1v9GbPGn^TlSd<(^;I{LPo_k@?Z9z{%V?*aKy-55|2PlB^^J*lC-l-kE1jM@f)(UeU@Re}GlcizDG8ufvd8ZRN8lX@;euBVn$gJ?itH^12WTp() zGg$W{A0&*X-2uw@AIGF5D-q4btR}f~-`P$M=Nb?~r%%Tbg00ryKeWGnhJXJd>M2&h z6|~d`P&Ra_@j2Qj2tdYj>F_Q3=mT1dsYRf~9sq>Cm=8F{u?oZ&Rc>xB(Ht^)5OY|o z{{62akcEwG-hdU;0Paxpo{IxTuP|ri3@xZ#WwWUW=#apTV`cTja-nWZgO2jx+dFE3 zXWSM)N;|}!X?z}|V>4QM4Wlo-7EDCR6@$Uq=HfaWq~HXE zNm{Pb?>+<*cPU@4V}(*BV6H1c4Ud?COB|f6#5{gB@0S{Tz=LA?4O476H@HHr$@}68 zbF(gZA{~6RPBx>JUdS+icpQ3~ZqYJOrScv~X#WIvfR1DkfC1sL1nEG$Yw&MkgWgRrrpO$hAZsTyVE6&R&>BHgKZB}cV0{(@ISZ2Jph zG@ijWbH1n;RXGwj_V?8Aw@mSW_@Q}FBMc66J4|tEWJTbe^_owz1bs{2r*M4}O?7Fo zyS%TV36S~@O}Gz_PPRU&4OG}0c})4^XF}D5L7?ZQS9Ik6S>VaB6#6zK?yB&v#WN#q zs?CBEjRTq4=Q9YHUGCGEX`LUvW#+Af_CTT+QHavfa$C-YG|znSPnV9T-mZsp7-g#4 z;Y_WgfhhukA5DNraLZ<07ZEPDR=YU|e{TZ3YjKkw9btd|v&|zK$Lt&4HRUlG@;z9* z8D?d1+VcIHL6NCEhT%Ij)1*ZmdP?HG{r$|*(#TryEV=lc@5||U*$hjl=M}W?qFYKy z=k^NEu}&#xK!tH%vCerx)jO>@@fO%+%so+)*!cSNBp7YX&^OnJ9ZShAW0OdrC0mNO z^9wN16HKGEJBi-{4){Qcr5e0}fZ0CwEO!3@T%tEhKVU@OqB(?w&*VLVL$5rq_IQ8E z2_RLF-Bv4XkitDs&(r3u`ks}niLe>Sy!P|$t;iu$>V^h#v@G44dGDa%sFJXFoF??X=`%jGbsXefh2h-|68-MJBf?E z$gII4GesJZtJQq#u=tTlIwk@@ClTGjo^!FZb|^BH zYjgDna^RArf)Xa--!jK(3~e-u0S?s<@t$oRuz)gr-Y(;mW?D$&{o-3|;oFI??Ttn6OWW0Le@Xm8*_5qF^UQHrtdafvC`bIx zC78q_Y$2VYLRDh|fW*SeL$S$BKFi}^nZ46*w+W+mTZb6MT@Y?meB_C~k~Hx&&6(|7 zpSY3Fuh(H|@a}cf+-C?z>b*T5CZmd0oaehaz*|OLuhVs9^cv_Tb_*5J&P_E1l5nzo z=7*(+NZ-U6#Gw0&P^M7M|&n4Mq$y!UG%eR~4bW9|^` z*UMdZ->IGn<1Fpn$hpJSrjKLbj4}zLCiZH;NMg63E=#7n(*9*k-1bBuZttX3q@e5i)XxC=_SxGIl4&j2zY%>o$FTG4+*PxLQ>M(O$X z*g1QAz^DK7;s3|?geqa36_yP?`wZ{QxqItra7?UFNuSiB3#!CYCZPIns}yNqL2=5p zqIgLBU0x=kgh~CG7rK*xQ2u3kB|HwgE%#$a;7oObLi$|kCsk(yhVnKaNE)tnYOI2X z-x7=lrJaHOC7>uI9a0tM7(aT?!O3y}w?r0`&5-I5Xbmbu_ZKROJWMP)P5^lSIC}qn z;ZM%CK4fHy;}bIYhE2UBD{NaEv+#hC`8b7r~RYGZTLK2leex zQZ{qA8|Tn@z&7!|l`RYqPNR=d-CKhHNr+C0JA9Um#=?@qx+W*B`GG#+tefQI&$<&u zziB9JI)Mx0Hu60xgT&Vt;xLho-Qw6y#>V8w9iRx-0m2vM?@ICknX4Ul&(j%o^_0XY^Obc4wq&4SlR)5M*I7X?;>}YkH$}#sD$``>v*Dw zc8_v2iReFs1o+)nL9Rm48@-Bq%k}X7^JudiT8(=+sKNXF%v-Lx)wub;f*BsR^W0;C zm6|x<&M=`yqpZs24gx9nHeKrTK(ZTL5t$byF3}Gf$li=^<+nLwusiOt$RbEJ@0of4 z4>XW`L$kbX7#mT7p7{x8Bwg9*K5zOgfGm%}!6lS?-K}IEW?5ig|4RX~O12MgY&*ZW zN3&Bm+eZQX7w^{U4^(M}t(oe4BwQue$`ADB>m>MlvJ)&7hBF6hV)f1*_nK53nAT_t z-Btih2Qc> z|Eg;K%)tNS3%P_wDEnD}v4a^Bg?m$p*=Y~2JH5Zhi9KLj@ii+z7a9nW%C`5DkRMTG zVe&HTX|$l=e^D!sdV6Ln(W>jc*F#Vz5WkY6_;4q*xg293pbriD=eHj&(S`mz`i5=U z4Y@R1Z;GflD_ZPlNCOv{>&S>@IyYwh08=sa(IZBTp~U?AO~FPD*W6M0C={#yT5f-r zisO!Ib2CB!J3>w+g{>nwA>}uhFpGeT$_^FKQ%r4ps$OOs4`)5}Dcp=ysDYN-9d49v zEQ9&S_ln0*8uf(Ouf~7>lx>Z*0TVbm?Q-V2^i}$pF|#wh+R!Y^1-%QrXA%0V-M{nF z@4tZ(VN7(2iPLK{O7YFj7Xjm5n?1aoSO1kKoQNo-yVk&8jY1O^?$XD;R{mztChs2 zZFUZlx3b%lPtN&rKdUU^6b`^VD!rnNq!0LBb-=yE#oj9tBT)w?&H^}-i#fQ`q#w!6OmI;ITLpJ8_nC)jb&UC zW#si#pNGreq)kQUNf)07PN@PN@(HaLogTd_V9vi$(VgEF@o8(l`$D?rLm{WG_md*a zu9KQ#ci!H9n{})UO@1C%R}b7>nmrq~lJ(ND*^U)cMf8sN-R05NxWAAznh81ADKGsl zNEnre_}`yxsZJ89n*rd|rVsGz5>x>m@5>6vU-Gu`rb17ams>pkTa!Nz-TC+K1iB;D zqgE=!5$W$S0@ymG_hN;kW-Z^H$b&n?s|PEi0#@|N`8BIolSJL}!Oe~6TL zWlQlZD0;)$R`N>m`RoXdS+dgX2(^Y{20y~FH%+`|D*3~+JBC&Pi{&2`d;)_b5GqJR zL9l9JVcm}@wfdw0o^&yOW#-TRd~Am#(3^l7joIz1O9J^N{ozS=UL8tny>RW(^yUMD z_7!X}EC?a20;N1_JGW_9OqxZJfXqeSZweAzfxZF3_Y6bEF#l3ue&Rm)!ED4xKHyHF z*np@H#SOjpfLP=O?I*bE+o)t{FcW28BK(%THVG?V=#bSJItk*Q;NJRwtJN(HkKQXw$o#OxQ!QgwY#pf_5S8Th>hz-^>~NR7VMLft(ztV=InK9huPJu?A#TK>yM+XSU1&5Yu{Vhze#_K z(Qd|G1$(bMh7Z59Sxwg0(TTcp^`E6*dXkASU7}CUjM29JD>^~5%FC0toI~aR0-nHc zAz|f#V#EJ~2wfK>A=;)CmM5Qqt5QMD?+)fpUTtQnY{sxOsz>j1%Le?y9S+yPWkG7$ z5~jzUpyVbB$YWk_208V&y_@Yzv5E}0EaQNPeTc*Fv(ZBJqdjUH0^8s>q#?-#ZvD!e zU6LL@GwpyFqp|{(=R=U!=kwZg(195%=!7aluXmb*<))!s0;BjtO)#@z%2@)ez=i=Z z<4#@N>OerKQ6kUrSagzO(l=iGyW4N$#h^`P6~NeteE`Js(-jbQjXWnX2NM5XHyzF* z45ZfEf3J(k>#vkznbWSqc8kIKSdCkO{)2w`fJQms=r;3=p#D<ETz#J8V%fy>{ykBjlX=mURe5m>-~QwOu1yNE3X%N$XH6b6y#(woh*2%ay;nOya7ZdlV3G|?)z}jt5KE4 zv$zCJyU^6+#0-dZLvn$=wl}U93k9TTO)A!#$<&mzv>kr^5dSl=MKn!!7JnkQiNe@E*fLw!^{0)LSaw0%gy*eb zS)oDDN{%>{?8xkosQKu%s(^1zX~fGuiTj?b8-|QF47SoBGk5=a4AYEO*1pyfi_8ZKOr#pq zMtRaS`>jg^J)BAX4js8WV-JS2WphsL%oLhbaJ<^pPFBltYq(iEKJFVh@&>;|r0?ED zdF1z0JhSAq%~NgU%*>0vj_(@JH{sHw)G(W>c4dKA)lX1nm~gXb zYt~=#%s%H<(Qzy1%aK*3Z)X_E#AX}&7J+~GxWF&8ATHPKu);hoLbgkna>rHVP`@>b z{_T>i!H4SDp>$)jOHKKA3b>fB(zf@tP4eG^IJ0f|eQ8!5M&L0$$B6->L#Nrb{Txq8uirkiV>egxuHi&>dujMQwRPSJ z)aqMxIBNnJGvXp*Px(nAv|YF*Vmy2LNyvdKpz%4lxc$4_wZ7(a;{=20d!oKi`WcCA zWZCwlXU=`_KDWGKn;MGXQ)v`a;{OZv0u344Xj>to+7Wk)%TMQt6deIr4+>kRQnV2k z-uo+7{{vF~r(g0{QEn6#5osm4%rs_CH%>Q;uz!Cg+$>=D9uPX?iGXQ!`HTe5%c6`ouaR5-kFV@%~HA{&5mngzx-?1_N2R$Is^k=CR(-T<}g zbOM#Rk-HG>tGf|e0~QL14vyPzo;m~my$UNZgBI*cK`=*4(-WpSAAnDxhJa5yJu zljA}s{;>23n=&Q-0&S;)%vZJgQ}BN3uPbHffY2-RGW&z;_xz zlcfsvnvF7~q{E7y)4HU3q3g;>NgHp|+foS_j2JvBJk6mk`XCT-_^H%NqYZI#z43X` z^?zpCSayf4oY}-7&uk|PrTZdLH0K;7j)xsp(;^;R>;6qA43IYNfvEHd9a#v+N*LlG z8shQU-|;v#R(W%0%znsTaL@3`Vh2KY$Q}{8AIaVSi_Pqanix$JeQrqwQ^KB*E<#>1 z3#dM>L0@++^yPV}6-6MmmN?bRFh*iM=Fees+PLi|lnvS71a^PTw3&*I%w5ac0*8D_ z@QdnnCXE+{Ied^*CQTz~lW2w`vBWnlLp{yihP3^DQdm?7d(Yut1qZLhtOPZO(l$5I!?C(mtOF>{L_ z4(<){$}vbO6Hs|Nx?dAqvtq_I8(0M1{uv_L09C?6O%oZW1 z2Lym(nT34nEnl&~4BNu~W*&cx+J&m1mg^s>AAJil@4 z{8;@JPSPnxG3%*cy%oI#H_IyTG@Z^Bc|;`IThiBBchNBy%jQkwo}7N?+1rc9M+d1; zto(2mTdr8>NzNXkUT%pUk2tDXk&W03(I_;QUI3KwX*Ub%Nl|xV8K+GNj6bl5!j{5P z@WBIEj@UZJOMXxr-4y>d?aDSO{(>q~olgy*aL+HKh3-ufy`h#H8Gbh}h#H|OU`}$s8E#yOnL-_{V zb!TSdcf`9w2CY7ir->f-P8%PEHf&OL#W1_Pv${*Lg>TmC-r6K8{D}i6i^-czUhx%@qzNF5?G&&~h4vn0VF?9GS z8*?g|@{)eeFIg!fQ%zK^%uSur5q4ogSUb}?dGv`lCAf~hsEAmuf{!@|cY`N+${~U; zW=aL=$hC$>BhO;9gH!K-ErZv(^pP)ArU)>eT3~0ocfOPM>Vq81O(20h=bNb8T16k-Pq00Y=&^D7bhgHp`36ZI z(E>4!J7#w1Z&)*v-Ty-{$ssUw)@3A>4s@@GZ4nI`CGTutLQ2Y%v{BeLicW+MA*{UB zykXNe?Y?uj&#H67hM4dUKXMsX0xU%^CEwc>G7}a$GX%=KlMVs#%$d%zJPtsr3jum> zB~oaD`ZJyk0>ONTSbQrcn{F5%J(YWg-TIUlOJU8KMQDH&yfp|YbHh}+$7}SbM@E~q zrMbyJ)_J;pJ?rml3$iCApU*ZQueDCJ*wNaY>vVlTS@V%hO>7#C78n@1%fq1@&!sD5 ztr(E88(UmLpylSfnJc!VgP(%6&0~KEInaH?cR#iHSSuoRNH3m-LXKUKa#PipxNPqlljAvY~YSRdX zD*bEI#xVSop1(8x5dLk#^re+x$gHHWJ=izT)^4=YI_AlnQrfCYJCD<~ExMXlBMvNv zX%9xz&l85g_5AL=$|G_1#5Z8^^zzik>df6`#+s_{vS@ex;R|n}AW~BfK=aBK$Bfq# zp8P9NJ*YzG(&Z2SyObg_?MoVbXr5ZBPK7~&tHdAf|D!oQ^IMC zeDQ^BR(J__7{U*(?&}>GH~@Hkc$#V0^hv`pzxq)WH;a}AGE~<$TKnlQ7_MA$J97|0 z7S8wT_G60HfDFpGu}y|uIx$(Olm;{eQY_b9iaL4(mhX1A^labnIxVnWH(yvM$;-@% z^-X+!dSxN-=+Hp+INoFohG+FXUT`H(`QkoCX+)blElqx#H=M~bv|C-UbFcnhGoF@i zHxW5r%B|V38ZXege!rDF`If|XZG;8Li8NIk52W2+@d?l7Xhb~hPNQdP_rTInEfYc4tvBi z!WcD_@$5i@CxA8Lcc)n~u2yL!6=PQJ4+xEQoAflA*?Bay7bs_AxL}6p=kmi5iv+8& zNR~8AhxHPyZt$8KRd)+>cYp~ir*`lT(~T72TPi%)tp;;q&l5Z3frnUjZyLq-#9Wy6 zwp_Y+`^^RWb)J{nIC!l|9VHXOI-F#Kr#g^#K>&57bX8&ShC&owZr6=Qg4E|3x71(C z5pZBuYNI8Eqm){6^|S3dd1Z8~-#I#w(*=VKoZ^YwCVqG1X2KVWZ9dhvodcdmdQ>%B znl;O=69-jR!Cx=OW>vZ+HZq#h9kn2>+0;L4Q~l#(@jp$<^MQ!ZG^joNa+t>&+4r$K zb091mam$>?Z1wl(!gtnnSdt4P86hDPyPWFT>f;<`=`5BE*sS&BL)Cu7dXT>R^dr+C zs`n$}mk!9ebv0`nlv`eta{WoQHBw-E4Mpt;t$<~F`wQ9NX2i+PU@koJ`)^Hx%Eh{P zP8|>qKNE_P~MG;tsHrZQ@P5k)7>- zw>6$@rF?XOc&&J4z{n>o)!f+D~%I!f6UzN=vEt zT*BSFR~w8F(FOC4!k^eY8D>2dU$W^N!Rd?#18e3U&nF~iBrNwccP~_wFYlz0E{o&3 z9v0FR0HJ*v{QofBd}!ILQN?@x`uTmQFt8$5<`Lo5@PmpQuX|`d2T8qVaGw!3b8;JE~ z>pPOe4HEi&+UCjLa@cG{D&5Ends64Q+X*H<$@3{;I@2VV+IL5q(~Ms99>C}rk(Y5q zO!U+Q76bH4vZ#wB-@O>K7KYYxwRa&emC%rNP?38v=sB6mNs5o{)jak}7_l^4JGgRa zF#+zfr++bdT$~n|{nF6Iuw=YTT3~ak_i=T)=i1`q?A@LE&GOzCy=pZ^8Ez~!62n(C z8=~BBD)Jobr&1dED@dw8n@*p{^g!>QJgTSoUc1?=VZ^PkA^6C7weq`~&GE#-eX#-o zz4UvkO}o(Bjl4_JE&2pA-p?-b(T4qxlr80jY}_#(%Ga=P`_2qZt|=btlCw(SU!2PYB;XQ(G`Fy(#Lsq? zi}zh%9FR79GmPQ9z>=6o^#iNqN2=3ub1OBAz1e^z(XWKwxq35KLF z8K~hwUFSq|MM-63zv`H*!TWg{B1O5FP&t|Z&xc^ZH0YY?u{r;HTJdgwX$gTQ@!Gc?{X&1g zx*^BkyGJjju>?JlU(&iej2OwjZ*U>4Ec((6aNnYfO*Lu{&gc5v zEoBl1yWvG1lxCOdhVD1Na|k&vt&OuwY&5o5dHcr+(c?XE_zA|vah)I-;_^XFIa+tE z)-|N=)@46f9oKo}*A_+3iSaWYos&hf4Awm9x%`pbJH);iClWOsJ}53YSd*?d=F6G$ z&A`$~%Qbc7{JL+Y;DX)H@^7!*o|BZdR}L=i%9)K0=F;l3QnJH2<7_rLjlCK zH(`c5@YV1GW;1d*AhIgRvu^aE!u@lLy6bLde(BBY5r@P~C$p!8vm^}wA~A5yFk7jM zT=U8~s9M|EIgt`ud06qu*ySvY9S1#If|$oA@P`v6fy_X?Exs$)eQQsE^(zAfryVK z&0W|5cyWRm@9p_%SoiQ6lp*E-Nq@pnk>?j3-WM4A+LG?x3>#t6;AGT2f+%^1{9v;u zZa?!EU<*4_BU_cvZB?IQ0? zEHL7*M>2?Cz47sy-XuKvc9?qbDp@~V%cARRHR<-VhIQc2*NVY&ca**GQB2Z}i70Jt z$~*&CMwPnVa97dVuE;^LC?dI5=!;b=S#)^)*?{`<1z3mlF~o|lk@Gs*&utH>^_X2S z#SDS9Y!v=x>146YhEXmUGF9U_K87k!?I#n{X)D?IIs^9En$p~pe(z{3NPCV*ZaQ`+ z@-o~CxfkD3`{$4mpDGsitD}(z=3)!J&V_>K0Ir?5O`r6w1V5Cb(?EMtRor&k%=>=% zGNQzLE>@8h(#w4+(~8in)JSfYVa(#q{cw$3_1DJ9j(@am1%~urVRw;`i$7D(Y%4+M z;nXy}EvUbG!{OL{mv$#nM>-lt?5xC##1h5tUPx9=zMS$M5&6&@4wv5e>)t%8weyhl_(Rw3h6r`yTffeFo+~x91odwz%FF zr5c&5Me*RvAz4v=^4+Rn<$NLWC`qS+&nfSUvIwqDx4d!^vCO#mwf#m~xq<(_ zORaOu^RjntInL+Bk3x5=o-YnPxAhhNM5S``m|L&B9S-D&k<^12sdF%Ldp$7lg#H0F|908_(+}Gt5SXqI2DaA{s(m9@L0JdLqUd1G&n8#; zp$-4#x-Ioo`GYz#oCP!tTnu>@p|P657&jB94A~pEQj0OB)R+zEj#SYKl_WlSFhpG% z!B;iKklD-QRi8?@>iBa!;TX9H`EGZ|vIOU2c!@A80ozecLQ1ZjF-92dr)%r?Km^O^ z78?7jt}qI-DSqG``+`}Q+8xBU$cNpB)%pWF?qgt-1$#HnXTtuj7cbCs-W;E-g z>vlmp6IacYxM5k_Lo{qmfLJ|!_WuVYL;iS2SG zUy%6b=Q6NeCb&2P$Pd5E_6OQ^^R`F^`%lpAw=t3mv1&N*o-R&To!=FPR=cA9=gZ$h z4t;Snb7m$v1oDPLUfV)uzRO1UY=yF6H*I#`y@>A@Mazy+C6q2TVlv`!8S}DKf$BYe ztHZ}b!Lh8WGTrl4g)QfedILAzE%E7w)n;irE_H5+BX+#w&-DNY*Skzus3N4>2hkTD zn@*@tknroi`=ugep6b0aw%*~6l&?!Pbyg#ZhK6!H> zHYd4AO}RMUmAm4Z>T<}rSE5?hawGm#tu?jx>0XCmw?kU2WDv(!@3nd$5IBEHUZ=*~ zkQw?pDndFs}|rm>}SgJRX`~-AXK$NP?JiVse`~oWhDQN#4-;>ioBL{pZL3 z4-Wv9{GgH*2`NkuXhYG2K&Io~2Wx9Aa;IRWhQP~hqd$I0-gDu_?<}6cmyjCNvU|lT zq4;188NY1syLjPyST(zcT7T6hG}V?24${OZjh9E#7}#pD<- zS8Mikz~|y6$&8jAb3;UA1qjGy;Vx2YcnA5&(!gY@Tsk+cLPYL+m)8g34&=Y>Y%8(& ztr6(DZkVet!0d?>E0fIqc~GhK7{yOK?|q2rFNdLD2z<6P#BpVqdI!9(r z)k1_=#4@<_?8R#$AyYt`s88_<{PZs2S=<5HHV2lET8i6dV74v0OP@8H0#~aM|kK+RH#f=_G%57MF@mP{-tSplMv&%q{ zKsZF6N}kpexE(4y$sai70pY>AcxDs_JHs7l{EXa31Y&1gusbD-crQBy8BLU4-me49 z%FKEL^8d1^J_CZm3C;q98ro#sr-QxKU|~Y!c8w*vCfI6rQ{mPqzUP_*-Gh+sdSEg5 z)Sq%(LSquOVhH|72VTxMsc*y|UvRj?H{oR9;xJQ+eqrHHF~J+5E_iqQ0#T4u^z0h- z>ie+5ov>ne#=|avl|DL=V7KaJUX=zKy_ZfL&jQ}BnP!lq+mOXu&-Kd#8leA`q$kx6 zDaiLbxv|&_(Td@_@oGfu;SZUTuew>{fA@UwG3;Kd8$F)xupvyqDQwws%)@pSDd-Y( z2ol&A*&A{>`$pndDqKI@F5Az9<%cdiBtYV@dR3nm{`Mn+dE!p4A;OE)LWswoxW_B; zNgMHI1EM+DKpy|zyf(9e$lG^?cljF(iJyCtjK_0P^teC`%V5l@%sc7UJq}J#P?o%K zG-wY!Kem0nTy)yQUj^74ch5?wkLZC=&71V6_3@ouk=2{@tzHw{O~Ttdl-gmknm8F- zKiB+ql;-oG8ddGNG>h#o9h7_OWo@IA4IHC-J4G#Polsul1+J*1tssh8=9q7 zwI@tYqcc{SL%fL|EwRKa3#sD1*tOWtbaR@LuituA#1#L=4vL{!fZBo`?A}Gzt$mU% z*lIsYD2nk8zv}i}14@LqSq}W~t@56_dg9L-__^I!pqqB@xNc2fg$8l?OX`nH2ECH> zU#yi(p^w6EQCY7WK5>&^`=A>v2xiz0+4~iQcZ^(`BwKzw>KgcFvAiNhGt?o-&E2{3 zYCD0N$=X)$QT67Y)$DuiA;#Z$>IBWLXDiB z6Ja<1AWhL&8k39hmcHLiqPwn>q>!L#85EO%ek_ zUVVR}K~CrKGnzwlfQzs{6v;ZU6Hk%J$WeDMkfamMW5m;5J4C%8*ZH+PRQQD}G$RzL z)qC6pp-3&*96cy>$W9C5gdZ&!ZxztTB9;5xD^J%q2M&ZLu1-VK*sCp!xMQzAMP>@? z8T-gNeck`{E-VquPzb$eK6>Eh%t6AE6%xJ-Vj(-YTxo=Bn^|PGZZ+^-BYpOjOTIo7 zU+M?DcBRVJIW@v^=dxk!G5e4&shNan#@)O#sk!rmP&g-DZvH@g{BY|0ct3VQkHM=M zOHA5dn~Ey}4$JYr20jK_A5~adu$%FQLlt*I`dwyH=V2N~XG7r`$G`Wo-m`Qzzrqcg zFI>wM!)Rf7+>K0j`HCc@k*{?qXof}cI?9XK*%9nwxdugyQW_HCQ%=0lqSg4!46ky^ zx+yp8oe7CLIs#{LzxD&JiLcmZ4szX^ncyWOY;J$eO^%Ls&}w;;3n2qi4>1{~N=EM7 z+tS>FQ|;Q&qal-PLk4SKe2d)3Y5J$0`L<* z^3pwcd~Zc6+2hc(Bv(ua)US4G5ZT4cTB=2QZPXcdgZ6OMGw>bo;{e7 zvLtatUy_<(U*D5rNf*o2O* zF>kjJgEy>w8cN@V@(AKS?#c1}A00=u@$Fw(bWi)r+BB_qbfTQ+UtLKO>H0!_b>8s? zy%3G)!EDqawU6tq#MubkPy^+Wm5Y^3c}JCq?(N=SDp#kSVv<1`z(3HP*Oh z>N&Arbl-u9<}efmzRbptkL%`+p_e$U!K%Hsew`bW)1yqb_{E1Z;)F*ugo!j@?Q(!H zuVgD4x?+M8-s2a?8G3^SnlyB?l*=wV>UnELVuNE)F)e}~kl&?d>JVnw9%&sN?CacJ zH`ypVZ{P5V9AUtIwrh#GH^BeFiW~kvxb}9gZd3#CT_^9u9SdsPI}QR}Q$`)%iCJ#w ztiIR1*fbK*BM2d{-)F*H1&?Q@WYx>8w7c9X-1*(srY;(<4X(HQ(rACMYnkK^;q_Zo zz)Z@%S~F06&}4oJ=ABL`;qyf7fP25f+Utp5&(J*<^ua*pEo7fZ}3DoW?jj}_+S3h3sFpBwd@?x-Td(H%`41Yu13q)e~&FEjt zzJ0N(W}I1t-=S(-{*_H^s=S^xX2LT{8+RwBM9s%)P(^f2E3Qb?HosO5X^mescMMSz zv^c%`Izg{V-zP?@!gdZFk)ZFRV?;0bk9e8C+;cFuswFfqgo0tSk@UvT9SxidBo#A+ z#5_Xvzhh;k@9RN)hrZ9Ph4?gl#`LXP0|)7TTG5y}r`=~cAhOFH(Y}&)9&Kfx zy1-NZ6CedLp%gLz{+1K17yH@xS*hQ~w(%yH zfOV3~hs`V)@6A1H*G6E3f{A^jL3h)x41=H_Xnk%(uv6Nw)AsGhQo3~JhQ1ekD6Wn7_pg>-L*+XIFf30@97E ztK|ldNl?6`E#uuYYxGG1_C50_kABi|t_lW*udiYp84vXyxuR?g+NnQMJy3j9WYU$l zyZq#n@s9Z<&B|Vy)VRUjnxp$ZD(b55Qhm`|;`us&*AYlO8Vz>lbNg>o z9wb}W?8IJqdLM1kDc%=5F)65Qa!n$BMnb2RVQ}`rw&n@mv^G<;^}SQHMO9rF-==P7 zK(i^phEbybtqv}o*T=o5`<45$5tT3L>}w9Q4a(bpv*9J6tq-wDI|kU@MffvrTR_K4 z&77r^8*oUJ)_o(8R5I8I*v4aNqL%fBMa_>GhgbX4{ys2+W>J zy7AoN;xz;#T8vFZi#E^20(GSeXzDxhF&>Wd zz3YZ91K)ljeGrSP>e>tnq9?^bn<3r}BRxr^T+o~7jfIcK?(9`iLk1l;@NR)iDFzh8 z!>Wnzqr}o%=zwh_>K2MnN*|@@D$V$8hnIX4jox`XVdj|*Y4Kz*oFUHr8goC0jPyz6 zC7%m74z@DK8F^5+X?Tfu5uUWA`=HgZJLU>yy2m;e$L({I`0z?VpqLo;XWkd?=P5w2 z#Efpah`)ps^H3k1W)T23(rHwFHwyn0@kmOlq25}Gn;<+ zoDc4&+sNdrzxZj(&*w?KJPIX)px1?A#exkPt2N4uhu!PICpoViOb$yOvM^u`qDXAY z=wFXqULHdZj`U5O`&^CA#~-N?E6xMxllxgWE!o1HJKugG0>$v;P((ccslmtZ?>2}{W1T;12KF6yR^@i zSe5_4A^V;MIby|T{W55wzv);x7t0HATHr`*yM*`r#z=E!UPDeS2eet|HC}+H1Y0|W z9lb2S@H5&3!BO+EdVe|?lW77S8mevjHo zEd5>}LiJ@6`X&{_#!oa(3q5VkRRv{t9slj)CUs4)@j+xN<|hW@}*w6EoNVVPvN3$CV3?&c!1pi}Qe8_XNa7 zUF8nmcEZL+M1Vy&#%BM<_<$4dttTmW0d%h4L&vAVFlIHh28t@B6Jjrfkc<|?GtGe( zg)J?_5RP@!s)n+Q3)-cnR><~vsN>N$EJ_W5{}Y{fhN;S9(%EO7@aENz2Y}3y7X36y zc78wMX>-xXX_(TwI&D(>y3I@TnFRAZbl!rJ7TagZn^#u_C%T$zeKcUbu0Q%T=t%1q zv8^nFljn`_(@2)HByd>uGc);^Ckj%F2?Nj_+@*>;g}t2tP#Cvq4}HbvSGKcz`ivw2 zjNZN92y#g~Fys0Dpz0yRj~DaG89oD+>0K5A35_tJ8;oAE#&k`)?=dm9IPO9LH5;d^ zly=7g>tCPpFEZk9D!qR_CB{lTRAdw^1i1JnT=!D1xs9;Bufgw#5z_JGGmMMSnIkV@ zxcumjh9@|iX2HCN$uy*CRRN*EED|DrKb@uT>3zY8s9GhV!@15l^|FK%d4?Is>}0y;gbF~BihzB;@8CONpw4I2Yyg^P#+u7J)F=X;)sipjdjNZMUo_;t%} z^0G>s6Gm9#4Nt|>eh|gJ3aW6^4YG?;JwFRauF~49Pl=<6i*Gf?eqv)8pqu7~vz`SO z4vy`^6>ZevQs18RyD$2UE%(d@g!)nG4%s{dl@RaIUhwpbA@E*3Z|@V3jriE$G?8&P z$G9?G^oChA_}B#3{a&rPBlaM4iXKhR=v-{0)o}tq)EQESjKG~;WZXeP)>8>mpAxDz zJ9_#4OOrC|Cu9;gfpGXf^Bo{sbe`ZT*zw{l9_qXIicbL=-UB3qI~oA@oP8V28L4Sq zqYBtWM5tD|sWE-M9n;FA$r{%(h?kJO?+kqvDZkB>mosNx)>;DEO-sTclRoZ^dV!Wa z=}&yWfBEKRu5l7&0X#)THmZVhmVYg_^6QEs#*;q$*Y8{Y z`;$)|e_tv8^Z)#S{931LAyk5D=;HHlMT_aW7bLVD9`Ic{)~vq~8{c>;09!x^9SS2B zf|moA6{xbANEzkA!G6DR#o=go1v2vB$maTZHW=k5|1Z$yd+3lk2~OVw=0Yo4emh{^p`b@zOb5i!>d$oPRd zYEhth5li+wb*@+`9o1Li4!-U^OZz*`iuQw17e&CfSk63TCB_0Ovmj^&6>Eo6-PLuI zAbf97Or7(XU;)r^0%a>gN^EmY5{@B8Xbtm5)FI+j9Sw|=+4C>ueBve!Tu(Thjnel+ z-m5*;NS8Pp;W$A|$4;uF^V%{W(j>2Jw5uBdt{n*(&EmRe8eUM`F*D@7WMR$7=yiIf z>uwuuklW_0G+AN-0{K=hS?CEAxtxIez8jf|gTNn#&>P1W(9tq*VqU`gJVj{%Q=E3H zzCu=InsSib`^Gf+Uc8W8=yXQ+xgx}vF<&2y4TH^i7a!`jNH}87B`?9cW<`g~LK??c zu!*wRAaiv7$O3@)7As~yEgC<_9Pz2gFAVb0xPAutJG}iLXIQ#_{nwZqCFYqX7bDo8 z+&ewhOxM59C9`}3d_UHnRu3^ZAR!C~XJfXt=)W!Qam z=xvKm!b4x_aP*O!$P{3Mb?iK`*g6@aZ53IDlWy_ z=Ihk-$sc~>=?am^%8Fy~8H?j!vu&Ze5vR?lU#u1qp4-YlpRS|%ZuqS)?nN`tTVRnS zb41Tg2{n=kNJGEj>$fjG6#4cBds_O;vK@EtyMw)YK4qN>3RoHtUKXZOx9|nFZ#MJks~>X zkf8MLzA-UQ$!7)gMtN1gHvl2(y8A<}8GX#Tc|e+03e_Iul>JdVqKJNts2cXr6K_3i zPz5D!x-wJ5>iGS2g}p`+NZrxYl@iF|(Dq+62$rNqEEV); z2*97OgZ2RLN{1a7{v+Iv?!7$EPZrN<(m896YyOWWhTe!>~CGsd4cJdydlE86|NP|VDg)>kXC1UYZj{5XX{1ahLwgxdRr%4>6Nj; z+Xr47XWqVyy^6lE#UzO8t0d3{)(?+3XyEFF5F$xPtqk$|K*{zaxgJijS&-uNc>N@j za)n*M07u*^&r~dZcpzSS&z2?YIWy;!pz^YZ+!zP61tpMFnFVnML5EW{mwnC_cWu9K zawfqGJG0D24#o+CmVy`Pi%<1@dKA7@pe`6hzqBJr*Nmt$jV6R5I^NvZaS{jh!99oN z)<&@#-P=?+Q?S)l%1vOC3FHNCJRDlSn{yqGe`4krPvEq{rYkV%qJAyvSzCYE6Eemy ziTlvJ9grnE>X7}dSCzS3d2+P3i_#2ep9C5eaPW=vZ!{I1PBDa=i66{*eMy^mYjoDle&NOetE87-;YAsvrZ-XrdI;5T{iOU-K*KD2WVSEKdiBy zWNq&jKh^7smoW()mP?W9xR%dpdCFcLovLKYCnbA8Y{Y8)gw?rv z!%Ix(92!Zf{Fz|>d{EmlgJe|)LQ%84hO!am#0>AwqNg&Tb4AdILMe^9c4nUrCFNguYqmOSHq1AA=p073zz zOD^m!4c_eU>amonqSs{x&q^42Iu>9QPTIS&^r+Ki1}I z;^t);Z$S`TUqyYOHwdQkA^qVl^l=Xvc9FI;lk<<=clu>ZZ|S@^gL(fPByscEhhDj* z=QZKJrwtZ(833dQAU+~_F?j8CAMO*D&69(}Mz|xC=7&L(nHkxMXc&MM5>u)B3EpBx zWG6aEDo<6MT{Zh1#R^fm}Pc%wgf*v(nFsppNaJ&|!}8nm?ge z{sCpHD)i*DuBEE1#0pEZ!2|ft*Sami8_zMH`*Z^)Igxk+N12YvEnpg(jm0hSBpJ0P z;Pjf*q+%6for+(@VMh{fdYQRqJ!HnuD1v_93>C#}Rg>1JoY(8CaOB?AhB z;_ERDxQ0JI+n{>1zf5`vvfrwZ>vf)&o=?%mVbddS$2*21gaTos_p!@EZeJO#1Mxfo zT%K8tsW1)R#sgCeS57==T#qsk3hyAy)3T_Sb`W?Wo4#M zrwsT(buuKsYM~SgCOsp7pL+D_7NKoZV*6n~eIIKLGptSP7D3{F4v6)hJ4e5FB~pyF zhb>>qx|*2eSrZ?_-bP>Uo9Da3Jsf3?lCN)sYhzaQHPBYg4r~0en*W#CeK58=p3C5Y z8Li7TJp^=ReP_zy0$?YUT1-tRRQ#Gc9wfk;!$f%&-cl@u;-Yv)p$AZeS+r@?i6vhM z1=Dfr1r?tGR8)i{A2$B$_k?34*-c4CAF&iBnoemQ4Kw(p*F$gUeEafy&}GJD8`oWE zN4J0Y)4cyU`UA>~Owf%gk6Kk(vg#=TVW6yxdU)eVNqOr5b}ZYJn6bRskNTJed+6P> z_5=c+zy+^V0>?_$ksKiKx~sO%7?^CVVnSYIWHUSHrMOFgDA;<)H=d4;Vgh+pzcf=) z^hdbkx=xeYr-dKK8=5+S0l*%5+f0%+i;B5eY1bzT{1LIFxQaw#sfL&p&)whTre=|OP~1f4rzOQ3!|kD~g_c`_t2Y*fQ;37jtuh7OpA>`UF|gv7mLUE%YB6lh zoN@2Vq-kc7lJaSObeDLdsHX=jvIBm-mzh2xB`BH7HfpY;nkOwjb<7%S7FJ%+3!cUP za>w%E8fk2hSl+pB$-VMKN_hEHE(1=+^<@T7py(DNF)4My6D|R7C}}z6GFbRiGcG zFIYH|a9p&t{{Hp_9*KrHu7Cf(CQ70ok+Dyu+EHunogT?x^2rYB(ln2$t{WE!z*?uZ zJ_~yNXtQj)DOGjc)a^b?drml8y9WT_K-5Q$u8zHjfS#4=I|ePpj~`*++S?ZxFy-0Q zH-bd`{rh*4jxv#frwPTu7kgthI~7Qb@5K4mRF<0c2cb;Z&UGxwa==fLyN{#Hw8 z6K(c@{OCr6QQ#qyHcFa@BRvTE;S6i*GcHTnob58kN^M-cNr^{*I3dp z>tNsWW_y-T-fd=HYv8fLE0womOavkQf!yxeOV|m;gDQ;?`c!y^q4faDr$HlQias`u zI$+>}N{)Q`4)DkCc?V{4-A-m|ugQ1MXJsEbc9+rFh0br5`uSKCx`@yoev19Hu*vpBTSJfT^;gU$OZeYuQSX*{#cMOVpKrs`wlrGC^K5$gY(^5?qp zmd37thaA@usz6g#uchv^%xBxbUMBG6%dq~ks&eQd6!c4IETt#1zE52*q)WbWX7d=U zew7YhRiIbCDq01N&eQz;t@=Ks)$Fb2-6iA~gWWVo?ZNLRllW{WBTlEsu1h%XoJTDf zjhEsLLLWhVo>E=z*QYV;B;M7;tr<(2BxW(o21m-aUmEcJ(b)~|kja*n0FB%(beZVZs3=Zf{7)yD2X=Z|6(; z{lLS&eZ)LJNr1d@OC0*yxkYni-k<#YAezA$%TtM zeO36N>RbPw4Gf767sfnAt(eDbFHYjhr_LRMMJSy_$~8==lXbU^8DalfIP77%VHvsv z_B@vQpz0zx5%|YCy~Jkol|{y?TKbE>fAa>pPB8MNUS zepefm)x+o`>VGLTepjj9L8SYK=56j(6P}{<-7?LLj99AC=N0iA2uI7}w4xB_+v=l@ z%9gqepO^TuxQM;O<*jtldxu-c|2bNT1_)ILBM`7om0Cq{o~q>vYJ-?2@}rwE2$8Jz5r`mVW)82 zIup<`T__WrY-`F$#gEk!V;pG}KcH*uNX6{#yIOB?L020mBXb*+s?c|tA${JW1BiD# zm{bGn`pbs&gHyRM-ZT(m)1TzMGK%r9hoJ;Y?mO=C zHlHhpbSGD8IIX(uM{~Py^Hx8tEjsIdQYQLVYP~we&Yo<0wo~nh7w$`5j7B0K<&PF%Lr+@O`6ty&&SGe!^@kklLueNMLoaqtb=lqD(F%wHF6O`N#joTn}%=>96;`9vDk%%3z?blAF+1SyDU`s^m|Y zmbW}K42bpDhAYB~6aBu|lX6;puh+>JIUP8YU!2;Rir;SFh7v^TLh1%B;-X9T&kO0a ziZb5lK=C^WKEi>`RM|lUQEy61{Bei44b>$+M$av=%`49vQ(9Ejo@7L8HjMtqPPVpfcYcUAJmVZq=1sIvK;p3|7MB9_!*r6^b>v-4}ti@h5K_n`BX zWskoLhtH-eZQD*dQ*t=96D|FbMehTF9hEHe!L{vX%KTq&_Vu9y0dU{$?YKa^eF=0K zS-`($VbdQhs*QO7_1JX?we)S~id0un!2E7X4v)|=W$Jyzh*w8uny@n^#PL|G?ce_`0|4_m2E zK6INpqRbO9=@u1m4RtoM%4+dM6b5yX!hba$J=@UHSdOX#!sur0B+=1~U|{UgoZ#>| z81RExt3cV}+UTlTJ4m+X${*1M=~QJ-*CHp^x+2$xK~eBBI1@QBX(>N8vv>fC4l*qU zPrC3p%-WxOJHFW{1?NK`i@w(JX!p*Khf;VN9BQP&un}2?QacnLsy4)(L1+%8q2rMg zJF+lK7vr`jgN5Vgfgvm0M$>dITrvAGb@HFxfDF_6@m5coKdWh@QqL6%5;Nhgkms$} z+jS=l!d}p85nPr+?fX9;c+#U`&Vh2T#`OM5)S5wv6Z4}*;E#s+FSy8maXqn0(gr5Q zpHm#FtBaiCO>@zc=t#J3Iv_9jf?flLM7PB^onxa;rNmWm>8_aOBys%S`FRO4p+hxxO z$HN<9HW%?GZ%f0~fg9+mhwx5*ds+Ff_onxAjIvKcn^JhU=O25aPRsf-WDnWmCDAu) zs}V-old20nD??n0pkn@YIrEdrO*uRPM*Fh#P-&90!gb{wRRwxhT;Xr96!`Ht&U$~w zPHd#bxgCu0ZTdD2Z}7@AmtscTrxCO43=vN*=8stMP0kAAoU39V$y6h?bSZ=o^g|Q~ zMT$GDIs9!+;q;%RP6z2xmJVaz8?-^`_E;egpXeg(U?}quj8egi*3xSX2)~!@XwBgM zFr6+mTwd^@S-;t^5hOS;$IvdqI?zd^{TgVuME^u&lrhOfYZUk~z&+plaNMl&8*^`T zcLt&}P9|XobUDxV*MDRga`0}Iq(_DE!?_nx5k`0x1N*BwZCswU^as`2l$h-dL45D1 z4|2e(Anhf{P%FGSLsnB_zvORE?P7Sg2=Z5BrL|-o4IUf-h`{5%@y(>79^576K+|hf$64{&ipnzSIok3n7;rnFv;q5R$~R)PI~(~WS!+~A(;|(&Ax8;+ zZDxS+fLN(*b<*kXh(XvsbFUV$%{1L)R{;KokiDn7!pXh`-_WTiQqxv0;D?=e7gln! z^WNy5a|3=Pa|PR!D{<}olY>AG-gP{Fxg~UeE8e4yy|ZNjTBg_$InTi+Y|Uh}H~79<87aT?2T}*FQbU#p zr>(RYd%Ek6Wl=gOAcxAbtLj>Np{hIIa?~LYGd$fq9CcrQKIGXiM0j-dg32MYF2))A z92sqzS{gfpOSqo~gZ}jWKdvMIr^@X&H z#lMPJ=u^(1M+%+w4k1BrwX0{_oB!G>|MBJiey>GW)DIQ*xUNaVhEMgQo~-Q@h>S8> zskZw-NDc z{l^PqAeNd|Se%WzOA-JPr+Kvrh8G!-Gk4&l#PSH}xq^01kJ28Vjyq;3h#aty)z>|G zr`uOJQ*KzjovJd`5WmeVPu2JpBTpZBRO(wqcDb=*Wti|+tcW&~>9%7oR6<(Vz3fCb z;cXD<``*lgAPl2}QEq+yN481hCk&`b zF4|^I9DBuI(SFZ7h!N!HlTQ4#T(qmlRKJ@ zmd_l@C-1<;W(uD0EU4)ARYb2bwG07S5w%pbn>DMSe0UfMy&xGInmeHH`#97k|H$0V z=N?mQJQSbPi?y#;Gp}Zk()Enyz*OOwbIH`Bv~E@*{qtXjBza1;zu(MfKG}30J25dB zRkDz^o&35@LHf>V(a*ea|8Yf1F6pnvMQn5VRI==_n+!*12}K@LaNncg?-?wUUF(`^ zNK>e|=^15J8ZAU>!+im@i`=PbnD>iEurQ9=xjMK!0SGQurj!`H?T#p|;&xBYtCQGd zEU6w>N8vYNvvEbp2_eMz0vi*G&XY zcxXiTlA8-zYGXH1q^K2Bxhv#@(`EX0=e<8)6(o7y??OK<4SDgqB z0KjOpQ9b&3oKWYny{l7>hjqjB8J7|>%W(Fk_Sq|PvUz;TvLuD>CFKu=gyUb&YrE6X zk++9j{eg;IbFSG6jijBFStXFFTH{=)Fo`#IUJcR`vbb8J0QB95FAcv>%Q?pNxi~28 zXDAus3WY-9HJ5Wo71UaNVGREr-I4dx(?#`t4+Leblj&PQb~wIgI47Ddb0$brH)KO&<|$R8N`a z6zY0Z?@fsuASdb;^f{b#+vd$u;taUS6bw9%tuAR!L6^a%*vc$s*C)B`X#{G^XLEDmkHM*zj zjhr)Co;1!m(REP`cmVSc$%!6Jy*~jq4plioSN)m>R17&lRp_{mI9}y^9Ul zREpgVK4XsN{!|hLo$^T%dh@KRtgf;=<|owOW>dwH;U6-o`!1tGeWhn$YnS0xIuj{B z@{OsEBjjEbx1j#;bJ6*tKI=ypuPk$*9hG_!YjwhUo&D`0;PxCHozjz>c%Wdwv1%8(77MeM(CJ_0As{cj zCUT?p<-@wtS6j6@9Loulb-0Om-=tl7^Pkp)zKWz_mp`Lc02S(oZo}M*LhD}gq9@Oj z!0Iji_JF=u2&!||`{?T2arlLwM$G1Q*7+C#=ISm%t_tPD+cg*1YN*=h*~*X=9hn8w zc6!U6SEJ6ATe7N^eQ9(~nHghLEoingUG{uplQ2QfBQkG^tcvVPLnesO(8#7VJ7f;+ zamyQ|v|lk46+Yv6K7B1K#n?U;hxQfrEDn+6K7>)+;pfqH1 zt|BkLw{5-}x#nNF^2(?F>$!c`Tgl{Z)B*UW`l2UJG;|Y#0m_qg>yG-5GNvl7pG@3e z&Rny*TkZL1y_yIWy2nyoy=^Cs+?sg5KfbmlaafV|!5QTcJn!eDJQ=lK`#yzj+WGVR z%g4cjl1^{jLbunxIfVwCY@9eQ`_puhAt}1ZPgkS?BiJNfM|tY5HM^E_nJPW)jW=XD zIlSe8+n6=#<ki?S~1*Vm+nyW=oB zR9f>b3>y|W{KXI!1#9V>a zJ}@8XY{~q!nf>cd{($s5?ye#xppzCAc~E^4~_Mc;Tiy zPib81jui>$=&Ep8*GLTW)h3V^u4i?>rFQ6ct$VJaEbmmXGxH+hmRG^{VvYPoAqw2| zCX8p)Lzi(eTMiII9E6uR5zL%~+#rv!@5}5;8qp6{=r1u(p{Kq7s?Y1@MXAsRw&`kI zXR>R*?t8u5Jd!Ii{OikyU!jyo=+a9{38moOl?;Cxwauz>w}B?5--j=^!c=xXJ??_% zT8*MfhY|_4uI>7KyqI}A2ak1C@W@;Gi8`0vXdM^n#WCl!yxK#_{_H*Fk2Qj&c7lj^ zqoo9I-s4_iL(uq!W#G~WZ=D^jGSGBPZ023tE?q^exl3Db?Yc!)vYL{M(wZ)wNWr|Ez2xy_OeNCK4WWD7Yg{A5ROr(IRDIT9AxOq6cZqUj@t_oQTbK6m63tgF%_j_d_^Y)?&;(A8djBFD0AbICN*YkB)M zDISE(9v*RqE%S_fHy*t2ys&X?YU>_y%cHYy66%?4(*`@gt_vG(Kh{o%Zi*%|9XmGo zv7L^NiouC-OtijdP)!{=>AA56Fud?WSD#{jb&q04f_oIbq$ke-p_ah)=sL=oJ^jP- z44*J(;X-ZJPV&Sl_yO$G=xIEg9c|dHV_>9Zqw2lXp{8Bx0EX zlYtbvl(xikuB!c?sb{(V+#%j%bSID%X%`y04EguXgNw{ztw@g z`mJoH>-5js>-U#CpkHqym+?6(o8rzm{yge=C;!uLS|V2q^5I#rT2KsjM9w||j(BHK z#%EMUaE)Et>8aG){A}F8PusG zLfvF=AkNMF4PV^pk*?|Tkj-(Zkdib>vEoIcTSp@P43k^ay007Y`aO|aF0WUdu9SV@KkZk)I~h+Z9}buQh+)*X zkgQ_DSfH!5K%h(z?Q@a^o6vFPcTnCLIQVs%AR)9E{xeRr0fBK zE3k^tRcE^J?1^Hs=Y&C2H2t@gB>MiZJ{LF*Nhx`wAB4rq3#*P8T!gtE3}vK@2bX}h zL=)}disl*nPCS1Qb_MsQ0-4gEen}4#(b#;PXjkOoD8~|3G;ADc9!C9iVYPL|a({p3 zmi@bvzN{Y=E;|zXxv?By`lL&_bCuUK-p|sz1KKKY-@cV{Gsi ztX3;mZYyOy;aTWa$Y_4mZtc!~75#Cko7g|UMZmzjM4_dcJ$feP935@5L3x4G{cy2t z%hBZvPCN4{J-!!Z)U}91*2?MVX{4rejqH(UW(lc2bJ=aSYu(he=Ga-~&~`RL#1gX4 zBew{ff4V+6&~nSqv0qZmuarp;(O&G8giC;>?I`>ZWkJU@IATJ>;El8OB-s5oqAW)1 zif!C+&Yd_>%)W;{%Rq7=D>EI7u=Shy)>dbfRh{tu;bG&Tb%h$tx5`h?Zw(%Skq1#{ zT2v!vOHqtjYI#(KyT8kDF7FgiLTP^2-Air7kPKWT$UwTkGZ-#s-r&+x!| zpLep_u>Gg%@BIg> z4QTw(SzWD?g|VR1#i+fyo|lxy0}e%i)`8gV$wV$wRl%QPw^nU$)X7al5s{VR?uF8+ zRApeLF0@AFU1~V zN+;6qtgzXyQAe8XEN0N_DLsM&;{RNgMUr}(h70905;jroH{&>K<0q?!?Y4)M;N$cT zFbQugmO3$Y+wSZekTWsa7Ev)Jj+io;zPj^yX83rG(%KI>1*+*J=l9QtjUrnN=4FQM z)ffIBWp4r1<-TnVO9=>q3WAE1lz?=1sdR`+mvnbGA|fCmDGf?WOE-cvh=g>fba#CV zHK$6QghNFJpDg!D?}MluGg+CVu-Q0$qB#PsX+$intUtR56Pf=+ zj(h&r;)q2mboPR{KVjmjpa;CsnY}B(8;fK7hb?wBY>I; zQd&Q5x^U$^{uk^7%I=}^n(cH@FUP3d#?XetBg#G+Q;ayH3LAq=gRYQFC#W!+iBpBV zg+*T&Sh~+%H!2;gcjwHEEHtUzjhvMl!Tsm!`fr!RpKqKOWxgv)!|gfu=2u3ga@bqN z11YC_7^iW(Wvzbxyct|rxHMg>FNV;v-_)&D`gTD;?i9;WGcoO!xkkW0_;bN|bl!uc zzU*jLgP_?-7MW*4h>IOOGN#wzc+9_tXkKbt_dP2wa`f_g$zHB{YKk`qG*;*`qKaqoI^i3 zu@U<)XA(!~5Pp~V=eSF%Ma?_t9N2^z9hNqIL6r;^sM*>5n&<)jl_yRKbJg?JVVJ2f zh8#!aelSIT{j_nenmaQ1_e#k`hT!wHGVmjrm4A6C|6(Jp3dd4)V6$0ry@ufEpd!%G z2?Dz|uG}!Dll5Qt&4y&CA(V=$yO;MRd-o-I?F<gRrO%?KJHe~O%!uDUqGe!n#>zq(EiNu2=HK4-D@ zDze=bYIVDtwH7v;oQ1M*G7=*a4e%O2L&ID0O!h|gwLbv-Wj`X#y_gd6h8n;5s>gXX zh`vH`93Rk#aJPz`o!*|Ovf|i$@oQqlKU#J>ER3d8- zZ`a?0cJf=bBS?Y4d#Ee+Y1O?P7kNv1a@`{;!RhhRh@$oJ3-PwEe)3}#&Nld_yM8>`axs&*c&EoJL2o%{-ndxj&9eue3u-sb|>4*Mw0UfXUq%AX$f1o6CXwx%|*d(s@({68h?01}v@;5|U|egRlf#lvke$vY*l zHZr%IQcB>2apyUhMVk(^_kbwIE8ZazYH?(L;Es*XPW+Wc;(2 zF^r_->g7|HLyaN=A4p!X?KCoV6I0l{*P5>6l_vCkPPLs0l!vA_>-!@9$jAeP_$2+pr?vEnOZ+X_k*@qqun=pVeWs1Ogb_bpA*zbE~ zHWwT^4-BZwAS)4Zwif zXdcHo+5#NeR}qjut9rgt8FD)rbpCT)!!KJ@2arYtV2)c z<2PTgPUYJR0Z!F;f`5NMmhVDuVJ)Q9^!D1T^Rk(gKn|={@3^}Qus)w3=}bIk~KL{xd4{J$I$QFPCmkTR7+E^l|CwkvI~nL`~`H-lJcI&J8c# z#l5FDu4r87Abx#JxLO^@n+p2~sBl@|N1enE9k<jMs=={bbNvA5& z#ZSw%arJj4_ODCl?;HAW(L{dTd!`p8?%tO#8eMhqQR;Z1M%CvvwoSL?tDTidLtGHe zhQ&bE#AO-o{f@_x?w_CSC53DG!OwmbYCLpw#YPn_p9JE29#YozFF9_Iw1u^y*(V(!Z(<)$>fX+C@8rL;~H z{xq=`8htF~hX)`oNg&UfAVXhs^-R0%_nSz7D`M34=^KKdf2xvjt?NRj{Oir5AdhB_eo=?>4Qj1V3ORKc{s-HT%i?$s zgE&|D=~A}{nCluHSQ=&J2pbHhNvAF(cGVMVhy5?E1u5ja9oq>mDXS$3tpm-+=hW>%Yw(gZjX4y`&@1GpDvzdiwH0XS-^PfI|<&#L9Q)8!#S z$UUpSkzbD$=50dg5La}%7mAeX+_4=dJHO6{me@O>LR%z>KOfN*{3C~U%&m0iaA9h@ zpq>7O8ZW|d{@ID^h%EYIU?+4Kx1@E3 zwX>}BD2!4(N`uC%?1lZ6csqqbR83#}=L*vI)VQ&p@JBokHEoim6p&b=#7`OvBQ^!E z6;=LK{^MUj418c^?yntq;%mJBU1`W5ZZG(jY^NtiYPc&y9ov)h=9NmS&CDNtez{ z6jTPfA}gC*8SBq+FzZtXUIrefh9#em=8^Llk&Q1TYf;emc*-I_3*<;NV=(Dtwf30ZR`y0)~q>ka< zYc9MttHV7BE)sdwc%gdL8!uU1N+1cdCy+xzy+RE90AJF!Zbh9RnTSbD3aVmZt}uP$ zk8-NA;g6zuUT@H}uYcbMVD{W0d>ZA1&t}?>)ZG)*t>yPF z_I!C{ZIo+X$X`NGsBYm=A_F!j2{{;zXe?%YOv$SW1w;eXRnkFB@AMTu&n`QWb8z{UmGsg$qKK<86Dy4@-_$7%tw3;AQlSg8^l*#_h5hZtP1z zF7%FQoTHx=W;?5;AhnRF{Q#xPD1O4PBUI6ZU0Gv$qa^N&~bAHJl8aisXtF+9Y{m6BLi zs}HvOV?B_7;c-T`T490~S6GiRe-&*uM6frl#}h%~C56vq36_e?|4(W08F}18(|BC% z4mT^ZL(SCXR)nD6cVYxtzTrDo?T2DZGhdZqYT%&?SdFn6d8b$Aw46h=yUy?#q6(Ri4%Pv6+`skPA8p=REl+%orM4lQ=+naiN9B!?D%lwl9uKNX{h|-b{bYlU$|E`X#5F!fPTrQ_L8uPSjKP^X}> z-f&8guM!NrbD{tLssfweZt)(W)vKM;{l?m0gD5o9()gW|?J1%cp)A73D>yIlvG116 zvUU9WK1f2a5gT5MHxm&YeOGfU?kmn>)ql%s7-D-cCBM5=o+X#+Z@bgovy|mqb8R`7 z_K*p`^pRP?qxW6S9+i~DufWf63CuqF@HJiE1tYKg;*bR?u8g`C7Im@%uN6^tJ^PN= zm20=SS&IlN;|JXaVf<`PVM$ko{_E|lSSP>P7ePI=QG3-gi-lLw_?jn0lrkq$U|lb* zXDZ>7S13bh^eyg+rdevPWxQQV>3Ha9?qGQ#tBroDITkI9&tqQ5EMF7dV#oM%12c=% z#j~7L4#oG3In9B-i*2Cety%kQj*{NZMJQz-2Vur{kCE>A;4?b~46*;$Tl=52-M`=I z_hq!YKU~ALNRJn`?2_ew2Yj>j%Osa|^+TbS#+=xNYb_{Vj{}A49-y+=$vu5(JzxJs zkNCe}0%!=VT(jILT^j?q{|;;eprZby%E40-pYx|MII>+7IDZ$!MTtCQG0I8q9V4Jw zvGO_Ozm!_kAh81NZ zTB)QLB8ziTsfrr!;>vQw!#2)~^9Qz+rVyoLB^YY%yB)lE(~#dz--CcE_B0*u%$ewd z$on<@GT#|?c4`4_;!F|L#lkMwLs#4k*UCk=4w*FDVl7^u)||U9F6X71DgFfUgM#xJTd*wZI{24Hk8_(*P zzf)S9bCPg&priD9*>;jNDao#@5x z2g%xFEHBJtKJD&}^n4O;ilbNG>LtMmLK^WDq{Il3qYVqj8u`oLM9@rTcfhK@VGKCQ zcEU|Qf+nIuT)A|slRfM;=DQ$%748Eqioom2r5L6c+K<0z^FRN|i4Od+lGpnpRV93h zXq-I1Rj$9*5=@W#OpYd_K~}Jh7A{xk#f5q`ly|U8y!bA8)Zgpw@5c%{U3q)!dgw=w z6DzS?tFyzoa`wo;i*@#v}2v8{d_}BOQZN%(^)U^uMVBZLZ?Td*iCWns85}EgsB> zhz;GmRD@FQ2+$X``GI$!^xC|P?>r1|AH6YsTxZ#kW9K6dm;qq-K_b)?Dt zsKjFC9#+<)u$9i-)Vle8{*Z)Oyv!$LK!^)(X@OkyEh%b4=Yl-QmB_8OSYqOIuhcAk z%G!#4`Mdp*Aqes`3_l+%fht7BwoljKYk_mj)g>U*V6p%halL^kx3$rHvO{-5RWIML z=YI~T8wXpGnbHJClY*`LuUz)RiJX6uf}w;ogn{Xe-=8xPrX!x*9f$&Ntx;L6+S3#i zjIH_n!jI7NK=gVpxp7D1U(bCu-qYhDhXsA$otrNeEk!2&vytqe0y48CIQTPu??S4& zJGc{T!EACoc<0|g+-vl@X~33*XtKcDWL!hn zQ*{w*d|3=bbS2yT(fhKgPnR`&LP!C>ka~^elxml2`^yjHhK2=l8oWA+f!c*45fq>&-^eNy+7Y3GRDh z7f6F2Xsqx&^x_ZWLk7MJg#@$}D|Dyt7mL>6{4MVoS=*%t+ zJ#{`dGdkU6vEUiHcX1f2Ua*wt0T7jm{KG*j%Y5vjaI_y+c0SZI+B1bxckyUB6_(u( z#jgJ9oU&E-1;R|L87A(9xImo3>yQb%m|ZBwU-Ch;PH5i!h#EOgwR?Z-h-7jQ8sV?r zBY`IuOg!z(Mg7cvBUo%a#k~{2P=DGOZy!ouCTRTt^@4zb<8bI6qmjJWmAT_%z(bue zc1AaNepZlgE;oQNVf@?#!l6c-(%{0rH&&a2-}L^(m&6gO=m;1FaXf_yjK3m7$sdT zjw;$8f8iQ9GNrawu}pt@;m9)^Dp`-@w3RnPaDE`tTC>oKh5tDgt~MZjAf`wxL8V2~ z5e=r)`5@+UWN?k)Pes<5~gNY zj{WGn1F3c%sVs8k+i`DJ1IR~yj@4wO{JvY|un=ocZcI}pSiLTqkD1Fy#PhpAj1HPV z4JubldYXwPJ7Xfcn#vfek9Vvsid|imX@0N6Cw1Z1gO%qhsHT8Rdh>s`uQr1Xb z%c12d!UXbG@Xx(f3e=2)6&43wYE?{!An7A^aN+?1O+bpFLJZpaV*du?{*CGRCuU4y zM!AdGBD8WB?Pn8#2uV_FSgOa_Qx${wwo&H(K*2Q(N7qE}81Aw)U@5~W=g#;GegDr= z`1Pl`i(x!c@h^8wUd>`-ok{&FC-27#-dIrEAEza>^n6xoe&Alc%HArJ4L!f2xpF!_ zKfl}tY;5$m5~XP;ZUZYrQwguUlVlR<;~l4SU`((ZfRt#MXX>j4uQw;i9yRpqNDF3KpOz zbSoG40dU)BV)y zJr$K%5AptEIR8|m$T^kOQOf*@tpfb+fHK?#JTCD`Xe zUsd@9x42$wFuqstui?J`4k`TGf1CZ}iR8UjTMN^sXi8l6rf8V6ulRxR&TvG)cD0eu zIoeGPA{0q%@}IcU{|}}rBoI;H?EY$Hp6!TP56md-kBTIfn(_vjLfQSSsxDg@EIP!~ z6F!l*tl*2AeS9htoef-@jDR}u;)}k-DWFv-?20TIN}Dca!XFq+5AG|<3?(rHi3q*h zVXE!PWpiLp*Q6xhn@pRc5N0=40Q97S7ggK8cgdQYrRV!uiv%B{@gt zKU0F^WXEW$`ar)klC2D8vY%7kR@-)%5c}33UupkFea-y}?nOnDh&7RDXZ;**>e)P4 z99#Q?g$utI$82hyMXk7^dTPp3yB4vryu`jrhZat?1o+Wa6b3jjO$ERT{R>Jve;3)G z)%2fm!`}s0f(R7lWZRm+F03_B*JEi6WjqXKj8or+lH%Duqbh12bm zg#Y;PLkdQ7H8e^N?N`u0zzLllI4dlL|D_JHyiN*thE00Fiw&B-%XtjI3$g09pt+r& zeiIK(UphKk=Fa@OFS9qR761HGcFP?{Gb=pKH<-AC`)L?#^%@L=ma}3UR z{p}2rvb@(r!?^H}{=CC2JTZE%r+!Qv!(tWF{-9s$yMImznj;D8Y0;?KP@LXH@kn(l zKDfBj?S3ZvzNR{GphiID-&;=u>x88jXG%eJo8m|sA7@`)R0o>hXr1o-rZq#+4>)$E zImEBtk?L1aeJ7WtYg|S16vh4U5%-?b;wzjKmTzdQu{G{_8K6}G?L*(N683L^aY!~f zI05CxVa@R57x@kvzpKC8~`pl@^@c2)fG4m#?M(6#hZ@_Ak=? zpDYr7M4e{n3qe3Sjk;qplss^P9A*ckf=%Tj@?GA&PL5Pc>3UBg)acZIk{ELD>$37* zCp8wENG7_1b+Y1MmLn!StrktM!)=kzu>eqpU!Z0J)0XHaEPo7A)1#etP+`l3J~UBW zEqaY!tmRG4eKS=GMgJS-7uooS%h0w?7KtFI2my9ETOYjGTHOL9?ZECb3*yH0 zD%M;z-+T8!BxDV3_{7;UQLN5Q(;BCPAS)7%W}GA#X@~B3jT=R?C+Bi@Xl=0K@5&1# zR#+|P-$h6>v%&}Gi9ty1VH(6S=awC#T6yp);Fs@E2Nqb4BgHnq~hSUkI zwq9KVQ6&=^&Z}&#`$F;ebHNa7YzZ_pFtKGHf1yLTsK(Xs57s^4iV58tVHm~VdLLci zCJ;t&41N>Qpr9$MPxuzwJeueAN=1@*Elf6&+de#$cNc@HDo zmG}PaPVTIdh#0V&^m56N486GkJEj}lc%JYRM5argu5v6^ET_LZp z_4y^_)-m1uIUrtqUypW@X_pa>O)!?7?;C#0V@y~|8!g=c)iV*@c+_W=kMqM$nH;V`CH4K{h2S+=zJWEig*wEh@ku(FS1}>d2p~90Min+n9^;ShPc4FkvA-Rl0jNp za~cV6^~;8+0y=rrWTvi)3<;BUN?(rZoM{aXRJaCn*|EjHmo7-euz5)c?cawY?@hT| zJ+Z2TWJ%y{ohTQv?aV?)nQIGGL*-0{&e4f54!?`^eD&+u9bh=-4Ti_Nc0pV22Q#_+ zzVZdfuYi+o-$&n~G5b)SdXIzTP#Id#;wtd^q0$_p-b%IfI$jF{+xi68&l?L){|f~z zcozvB@4?W;5DR&?wPg~ew1O*`IRLO%s4H;MbbD^xOG*CY4u6&QK-cg;)*SQGi{7<2 zHkLR6l#I@^*F)0`=HF>&fu8CEa#K*miQ7-keY@q?dqvQ9=~rdo<#)11`?NFZO)58V zwCqdg0>&;spru9bIPhZ26|A~xjl*o*`G{m8Yf*ltiL`v^5x)3Llep;Jf)&nX)G#C# z##YQj@QJa;Y?}(3dS$)6ASvP-*-)=MtBuf%U3M@XGP?r|btIjLb!{VqmVP-RD$%Vq z9d4%Ee=eDb>q_~8;*;u`I?W+J7vY2iA4vU<5UBH)z9;`oWl$*+ql&W>-m0L2K~M%m zXlv6RHS&h}Uk?xIM$HUQ^!X&7_8Ne#=7qP#{I_`3w$zP39Rp$J-7nsNr_P>FfRiqb z6(2pCZkQ)dF%h^DnQVrjIn-UE@DruAz=okzr@ic7N_3KaWKepO_iUXe@~o@vX;>W* zX!F zHy71@1Kz4OGDt5kdiX|E7ku3*$-nNmKalp2mQl~Y57>OekiNV`&^I5Nd`SQf?(B+G z{3r6mP+Jf;S3Ar1rjeotG;eTU8+gyubACnz6b)Kk`C?kT3g6Cm5pnBuve5PJ-mtH) zg2`9sS>qV8o>hoKK-X|-6ySlSQRPgM;~I{FqosCw3vjr*$X}Hgnk}7hKi1Q%BcrAJ zp5#?@IR7I1RD$6x$^*qZbZ-7rR#%2{^@)k+;h`9u2%`Xv*K4Cr_^NLFJ~Hl4vg1&d zjXKU)(k&$wT2xa2{taE02CtQXaz9017x>8OLW>k3;}5v9;Cta09Y2DHV(vv z_n_Z(+v!%JX#KX-Mfhi>^;{XX4FeJf=bE$(-G>(quT#}=*F}=*QJR9IhKnxl)1$qJ z6DND&thNWhbxOJQ|6=cA5oC+*I0BK8{T-om(Z>Ebv>U*9ll)%;Z4hMueLr#j;- zafX^(FT3nlX|CRVpQ+kr|ND;p7mf)}_rwY3B>CW7#^vYS9Q3!l0S1u{6XHP9#k*RI zVS*~H=eB{E`>0UpYwRffE-b%ALf%&N5`WrKO7CD<89aON&4vN&H4+jAiOJ!fdS(Yt-{CBmq}B()C?)(h zpiK3y_}{=*ZZB2ycUU}9+`E0(in_dw;O~Z1BmVeAjXr)8(W~4;x7IznkO50>>CAg= zVld;$M{5ivZb-_Xhw^0w9> z4Y)uwG*2ee6NTkYel^N4(4*l9xx@09d-_ett(Gqz$DOF&lA8BEw*H4h4a6z>AlsOCybKh-Y!<7OTBZV-7A3j_YIl<&3K^dOD8JSlbj( zYB3Q6bQ?vlow4~%b*Y<+dpzeHKjwUy5u1b-Xh!^vC-!>33^*B|=q*UF{L7BN_($FnU} zQ8M?W0(yfR#av z!>f9rbH3q|y)|kW&lN+E_(JGHl8W#e^Y%+{rPjN9$Gu~_KYt7k>(0?5MI77l;jIZV{B+R#7#xd5H(*ve2L%O(aLhb&Qy!Q&VA9_W_7O&$s{gIGwj zyZhJhm+R-go7}0$i+m)A{E&nL`7-9EPtTFQ@eOeFX}hH9vX9bx9ItY`y~R`?_yh~Y z&K!@#4+>hx@gy95FrK_-FEY?^$!ABaEAZey&Q{}cy2Pl#k)j+l^z=h`?!8HY9 z7q$jl23eXEsYfIP$X9I683^7NWuc|8B4D9zJgMSyE?t-^$YQpdez?y|on^4&Q(WD~ z<+%}xAl>4D;>pyS8L6fPNhgNOCd+?Zj%5mA+}^3fo&8Dp(SQ+FrV(#j+YJg z?T#ZUegX!eOcbi6`q}+2(cTEg;N&x6Qv7V{xeKf~Dd4XN%C7J?9Md<-BMon=jfp z;Sb?y{V#u63wqW^lulsbAfpgDAtxCohQfEagmYg7*KzaFWYxB3Vb|qx7Y44SokSGT zT!`LoY93F5!~3h6<< z&nkixEfaq!CR|qpl__;Or#`?F4VMV9PcnuXg)xtoU>jj?qzk_>k@q&|?lY}=WX%Wu zD${Ajvu};|2FYApITiQeND!=bKV<|fF{*mP1f)k_s1HuTE8p|OkyAu}^wtl!y4Ra3 zKfOl+dCv?JB+*uJt0&C0bMxsPGcfoLGB408MXE^#XC?hb2hlMOhW@YmDY?MbbH` z*y+*#dO9KX$Z0Yt^i|g~o}u^SZJ-=be-SBEA9pyE;v4_Uk0{MOGLnRmC=$hJAnM;j z`BWk$K~|%$oi`!Bi=V5D>n1B~>39JTen7?;^b3zZI4M9%y3nR!+C_>bw<;)|=Si7>@ZdTA&>R|@yjTs?sC!p-fJ&1X0ly+0CS4*JU z-xC&_Ir@81EDcA5vQ>7?kq|S~AdaT6m&c6FH0gtr51Jo_nXS+cjRHfAehmC4F*1Q58JSH2zCyNM)Jg2yR|32au zH{S(W1?jPqpXWDmJ>nISx56&*sjOFa4Ir21x^{e>K)pk4wc_0s@)GyN9JhbZ*!`CA zoSn<7%bQg3wl^SEalOgpU=*Tg64uIJ{Nx+~v*y|P%d0v_fp23EAiF~iQz*MYrM>^H z$myQ$MtOG@{8Y|3-*FdrYHB{kqrHKj(i1I(4&ibu%K=2v*LA!adquL0I`#8oSYcbg zY*%D*KUlk(A|dSSJ)7TZXShfmVi~7u7Y5Idxa5Aj0rjYmdrTzn(+nm4ZA<-Qhy7o^ z93r#q;$!r}d0%i95+R3p6kK4}kqdZ@IqW||zJJ4ht(;LP^(DjhnnH$2Zuw<44R^0K9cLQU?@Z#eClphy9Z%80lq}e_iK>sS0V-mz=pe<6WmS6G;nkyT(dg179GoIly}ho0+X9O2fIe)8ZTs*U@F@We}Lkd>T+G zKAGS>t6?*mUM3|MLD)Vz{>m+%zdsu$+XSKGZ{g0Jg7LUVy=l^9F=&@5@6Y=rk^edV zZX^F})H&mtF-N0_{ip&OpSK zE4nKjM!VHLEE#;w1ND4&swDn?LZUh)5zflG!mCq^t}rJ$jjCI$?ld~_*6wEzP`Zlw z#J6{>UjBe7S^4ou)2TwPni02_1-A~~USpv|!PX?xC{@M)7*?9TcE)?4lPL^VPQck) zLD#-QAV#5Z^h5^K&uyzXcNfNAonUmb=-NdF4AJR?pkJlEm}_H+8)=RRNHdjs*M@sH zUGZYcw9q3Q-!464Un%`Az^oyXBWKpIL^(MK)`2St+?so`dnIx;f?|bXa;l-7<`@WU zh2rO2hRh1@I??%?TO^<6oZO04g&3#6DTjJ=s<@E1@1Lg$KNLKz6}ByS{zF*Svp{+t z#eC*!zJc)OR1*3wr08r+dSmO~P1>UgA%3mmG)DB|!6mjnBc*Tl=*|AO2);N8ec>Er zs6CnPm?kZzytBoD)cJKAE0|2un4QXh;z9{eZL*(y0 zOL7yPF>SYn?1fCjrAJzL^vEiuGHWrqRM%d8sf6&OF0>Og<48rJ1EDi6H@;VVt;ng| zb|-#V=xs7XzmJ9g#qWa2B#gRfQm#GtSj=W}03f_rDFg#4d+pe)G?SzWv`!9YGwwf1 z*b)|83gj3UgcAA!P%3tVfxhx+21=015m?%fWu5u`I*ihn%?Wxj%xptGwU^H)!NBfkuBI0b>uYAc{LOD3sDd$~dQOXH5q4GzAc-wgR4YgJ3rB zWf1L7P*Hy1!K|pV2Hb8}*r2SW#r^R-<8*v7xm;35Y;-z{tbD`so9V_EmPh-H*}RXg8kN z;4K`cQi=*=HXr(o(jLVi+D&L)aH2+R*Z1T}J8qn8-o+ggLWsyp=(a>XF+2XcK+V5d zj+WM}LAM&UP`-5(Z!2@zqY63uF!1$NuTRgXhL7f>LyC-i1*pzWSS$i=y?uw0=f|%K z4)#L5yd|^|50gmHGtL!5cI?crw+JA{O;|Tv6`ZIMEH&SZcNi%#`?hoTxt(4FjA=)O zjPs6G3^N*=P4L!2(y0x7k@NhxZztmP+%kKG;<<5~=lE_8ozkncEh(=AMLp31vY*2Bi*hKi zu0g13za5Q}#${&446phdz_cgYn5MC?sK=&D$Ib^)Kly-6q^T8f7}7`uk)5U%5U~NTe&N;Ynan8&qT2*=SQ|=qy!6ts#GXmQNFE_vNd!)`}@ZPdB@5&o)cp^o2n=HcNj4)am^5qTq&(-F=z)1#BU@)6}N zrHNGd3pVX}o7xE`-;;#Q&D|}l>8mz`Ay$5{gT2Fy%nxUwqZdk=FB}sqv1mPpjEwL6 zpYLp}<6K3QO+{J`!tE+<>srV05M?NvM8w&5Z|jiDwb!@9t&WAnq~o!xZG=Y>Pq8Ss z1Lc0hwfiZ6^V;>JoHjY%xh-{J-bGV$rtbKDpZ|XMnqS|xk#YQul1(rhIWISun@Y=E z%wE7D{&KMYp|o4mW3|Gg$fT~CI&C}=K_+rghI4S#nHWUC`w8dT>fVNKtWAPdkdJ(e z%Q__>z;X1hXJ-1dTF~8H5DOn6tL1{%h{MAfX^?`@h0pB6ow@4mI)<+yYUP%}!EO+W z-V;S|i_ox{t{oMKNxM;MQ0h_NMbZ9^T@z#3w0p--?I5Axmg&CF6#^TAZn2H;GDDL@MeQ>HJ_1N<52)ZFWt|& zn0o!f3qRh@{xJAj-&fZl-x@6kveYRg}z!YSB(o3()^;f_2UFFejS`5h_bv> z!PIIFW8W|he~L~W5p=YA&RDT_Cu{LF%e=p5M6lL@u*TnJ#TewLZXC!ML+~n1Y`;uw zfAZpx9=1WkNi%CX#`W;_o-hkqu+F|O);)~=h2Oc;1M#kEN$^XSp(F=`s+kvun)2sw zy?m)gD&|d=)=s;%&7E*}A11=#^`O>8h;RCKY_9=lQtH4n(xfxZy?7w&D z1-)U6cz(9*6wJTmL?P*{QEZ&BKjkZ~KB|5N4%N8&S*N_}c_%#9No9jhlkuu@4vTT# z^l%dF?$Y$t^`IoYqe@U77InFiRLj~=sp z<0PAjyD;z{ND;@08h{U2y-BOkk)=^xQR=j<-$hj7vKP`$`1IrBt6gt%N9~tMocH9$ zb4t+>=^0!&6W`UM*y+x8ZN0aAZQzZafZ|$Kk)Q1_W~bQ1kN05mB6lhQMbDAlb6q*4 zav#Q{Dpw&--rJx_Z5%43MdfSd210~uRe0f(B@F6Ih2RQL#zRNW<&`YLm*;v&&XD5& zzdVSIB(x5#yJ%JWx8V$yrp+)0(DsnxJ50H()>JO=oxAppjW$6@u_IIs7vJZA6TJ9z zi0xXhJm71hWN!4gu;m%5h3GA3%9CX<%j|BX90!m=PmDu(#eVZcy?9uqKWcfc>9-3l251;C3a$O?%0;$?cR1jWt+?Tcm*&b?mfgf z#N+9J1cy$x1jST;0nu=gM|3KV8nx~T`;GVs%}(`xVg*fQj#xo_Rwo(HGUXHe7@Yv1 z#S+vS!`1)zIw!yWhoy0lBF*J!){d*{hN*BZL~iRzuMDr^o4pO-k&0!fo4+)hwZoCW^Bp<4zA9HjszqzSVJzVSY z{=`$B=voMoAd%qnNH{&v$pqbQ^Y72U7u%dp7^tZ>SZ!G`AYM*5faT0}N;n>y(ff38 z$Mv%;>(TY9ob_slc{go!q&2hp*4qPK1D@;A)7{Vfe~7XmQ4R3VvgIn~B^Xc=tet`( z^6c{rxi56*kT1OE%FD6OvaPw#e<0dPxi`}>*#7ZyShPv`X-R>%F7?G3EV`U%>5}qr zm6`?5CYBgr$-ePx%C%8_{m<<$MDJR?8fmg;ESE!~5xZzijOgos`$EIe66P#VsSi_{ zx5b<6>E#mrr80aQaql+Fb$=ACG!r;KVVTe$27G$ZTw($&?^q?Y=*o3uX0;6Ps9Ddm z+wN*GEa?}x_I=YHMLX}Xt!Keu8{oKz&mL74-oDDt>fPEGec@;*SYg8tu{5A4Ql6bf>22%;eVv#!9De=9-MLc$(cWd3zWi%pSL(u5 z;slR{&eiCZkGd1+=jD&HnVuyq`%xw2yGw1pnc!Q)=^9ka?y{6=t{95MG@B{lmADt8 zifCG^=4NLrt)3uqT00urzj-g@1bM}(oKJGMYB?`hz5lxlWn$;L8Ioj`C`#AH4~?SPOr@&5Aykqi{=VxzM>#FTg zF!JA%KZ!uB5&H1+{>=Uv#7&h=6L@gUJ#TuT;kwx zH7lMe*lGCvK^end{RE@2z6}whkLLZzXngAaTlkHg)O!*Lx$u2;g80eVyKRY)%XsC2L(TEdLs9Ee<)xkcE#5K1lm zUXaPI>uoJB&P1x5;z{bqI_?G9eb9!?BzYcaf4}+H3%~(#gvKfy=T%UfA67mtn161t za7Pc9T{l@gj8X%_3Pt);*0fiL6K+?oKJdt1m**YGNNNs99}d16IC8)TBQZ8`P@+U; zh?d!-)H_@3(zUJuT~vnC6)KT*xiakfd(8q1J70sQDt8=$-;QW8d%; z4xW{OS<7vNMTFV6u|WW8TX+yvOP%$3XPl&Ck519IOYHQk%9(Bj+smeuBknpJNX71_ z)@J~XmUVb`d{&HM*8Z^avRB%Tb}O)7t#DU0jMg@yv6@hFV_j=t=gr%^W`n9Pu#92j zIKRx-uRP}*Lxtium$cb3Tx>E%)5QE8IsCD-khVu)GYY(3)(Gug*_XV9&V0ZuIxM<; zpNv{q8!VWi_q_}8zUCtkLtfs_9`lJ8Xt-~xcoPka!xhZp_nM9VH^+#jW0m!D zF))jTw}TbdCRsK?#9uCg7@q@i@cgU+QtiNfBy&KdwbZik!~>=Lx(JFa6TFJVNE=zt zRn-`ebdk@AbhnLD8+@Dy+zzIE)$KP&XYP%87ZhsldNZFrhX?c z0rplEHh;_UHpLd^U5wJ;n6YiHggbom_Cufb=qWiyS4dAP@&9$|>19N;$og(wLF>!m z8R1#U-_|i+vi8_LM>KZ6>9s>9C}6(*Vt2S`Gn?>swfoe52LQmbh1UO%vab${vfa9e zVJPWNK|w*frAt5oDd~_B=`I1O84!>ZM7ou3qlc8W4bhAxrGeBQ&&-C#sM~4eG6XY&(NP z@oc6W1QqVFnxMC#*j2+6+gRF&W-R<#*lEhZei#am52du}pWcZH(X&VHhJoxDO2QHd zCQIhjw3ZnHEF`g-h1zrT6owv4B+%VR4NZNTO6jQuPoe?hGnCs`t0+|X}`C8ZLMYWz2-|k z3}HA#Hhm8wF~8Q;mNPWHVJWVGFxrqO zb=WvLdXr3l#&=71H99Hnf~nFjSa@p;o@MO{3xbc0q zN|yYQ{J}g>^FhaqAzE7qz;85J?1-|MX%g*5>d;SfZ=*BOr#GXqHgJ7a{LG!r_jHL& zAx&(mrvP^*He_2cvum3}4J6V0FtQ|-@-@6}$)(Pispsd{8$rSQKh*B-uC$36SPVc) ztpL0YL%|)ZT%4O>+%kSKV3#}{w*LO?{AHl^>Ud?r6r)o4O8ouF?G%c%T5|%1oknZZ z%E!Nz_vtG5M&&1YIWY57iT#f!}OMta}la)yf#l;7==H0h$f2`xWeMdg~W98WqMd1kq+4cZA`2dp#8 z464sJm7Ot8GOE(WnV+;`$Vm#0_2MX-?JQ}Q8B(Pxgpr%skv0h}i1KBQ;cZ%@M6qZU zzoAH*2L$=nI@k5*;)$0(l7SVK`Fu{Ak5io%D^Ig0nCUR3y3b>Z>~+w)gZTxW8C5}d z20G2FG2<=a+l32)Qs+ls&a_L+Z03sjey}uYC5a>#Bp*(2ir>+njzXsdUmp9v0rJ+WtAca-#M2rP&qnojCKd zcZHQK$UH@%l+In-p$R_)Hx;S~q|{E_I7YPHMAGIa!(4-66}#vnF(6>qe5mM?BnmY( zt;=TVeoY#>$YiKMoB6w$Deq|-96e#~*Md^p30|*65DbV(VD@Y`xdevwPj;}yJF-fv zwQMcg@9!%pCmqRxWhO>wyLMjeHNC?OEAGVYucXu}983By{gzmYVd3Xzjx3~TAHi5F zG8-C_ZP}>K_SX=Qn4#32YXdG&Y6PEQGTw15#C77<8h!Uv0K*Tln z{$zZQ<}Xmb{WXRAFN#5YIHHy8+kDgorY!#?zAhWtd~N_nP&uZy}kJ4PR_X09%BEz#vwyE86uMryc;3eO}}s_;YI7MKpNUU?k?qB z<`AK0Fg3Y<>8(?cR+3%U(THMDX*{v}$(8dBpT!tL2ZLa1!NNnVloq>vA|tzf;+)2| zu*AY_Thzq;4=i!bt`QI04nfQ(aD@vFZOATty)~NqjJ`U+L7Jusz9`pTE%fxSNCbSxxwUzU5#nZk~s; zQ3t+Z2Vk!a({kVzV>Yi-b7bSwD)vKmmyJBRn>9;tz0UIN^INy6!Z&b5d7Xp5H7kG7 zOtj>>zkj?2fQxpZZh^HjP)n+zMQqN1p|_GrI+(0b^bz|B1z0Yj792AF&Y3`i3S8|@ zdvdDj#arT)USGjHs4`5Rq^oANsB;dAM$H%SN{=^q@Vq|SNHDIWs<`}=B6|DK>*Ejp z`U!Gw1jF|RkERUGOlygVj70e|=nttbg4Z}>X)i)Zg7D?E^4@!o^$ILtgUx#cV3_Re z-Q?R7^M;G?)020v0(E(XW}PaC<V%iYfyqxOn*EAxj;KYr0t*_N0I4s4wZ_GUh+ z#qH>f;qzK4J^oR2SKdT7F|yz0W<`50@LUU5oHp|IUf)>ZEbD7;Is)6r;-aMPz%Ib_ z82;D*oz}~ttxB4$-ze^5H-P^8G-D^P0rgqJ9}VaE%mo;dyQRIeG5wf=^+5t^*aTsV zR$_;EC?b56b{F22o@*}ipdNqUnfYpT!9%`|9TD<_^wyRPywqFd246HvT)-hdus+}psFYgqW|k&18Q@@-@vF+m08;HS~Wyp5d=!deE)3g7BlLqEOC z*t@XN;zmvLJ#M=S@Hrk+>fK%;kQ6*%hIq&z_N(Taud6oqerjEFl)PmzB#>o?_+DWq zdoUDU;|=9yQ+RCb1x)kgIrq$9QCjt+2#?;Tu2}H{M*E&I3LyRSHC?^d7#5URBRo@!6|i-00cbsUTch^l2=84Ty7t;fYCEY58oT$-1?G+>;7N9V;RIi>X%__L z&u_++l*lviyFcWM_HI}uzr8Zq;EZVp{%h}qZjIEUl4B?S`i?g%(joM5U4La0RL*E9 z$EOlvve<#<`9_~sv0IEoegwM-2V9ukxlDUlhX_)}Ho#C6A6E-x2F97i!=D!dq{%Q8{@4oEtL!?V0x;UI6#T>`5Ou8X zM;bn<5k?C)kd{Jkkp_fx+;pc(-S3HrOj`NvOxt1w5;lqR8O@_0&t_%I{D?8$GLlBU zkQp7g+f5iy$X>fhc*8BJJ7SKC~1AxIv@nz!2@XH-y>#)#$W5Mg#?5AZwS8t+Hq|0ZX%jbEtpJ9*%JJT=-fpsIX3{NvXnu1djE*riuOJau=skvWc3vvT#DJX6N~dM9hGoDMu{QK=zQdJqOQ1e z?^|tk@yX$$B}z7@V?NmSCaUd$%egmjJfra38=_l{smgSD`>Ea=Wns5>dImn%p?x`h zbZ+vcF4=;4cTCn118(*#(pR&Dci%{FF)t_eYoSj04j3NK5?S8?Xzl{}%P-m+R5V@k zGICM8G1*Efl;ysJipRkd^UgJA%T?ujbPU3-exTQ=I-YAq^3>UBX0ELER9|`d z$`Bz_LKhhVRj{HYdyd2t`eusda;0l`n7+nbH7U`A2T(uo!LWz+C7)T#h0|Vrl-=f! z%?Z6R?bbY8d*rXSgS~P>6iCn)RVeV_bYvm z`!!atA9K=qg<|OP!blpVxvsek=2rrIl z@kB7F9$tiib(1yEvmGBx%ANr>*t3t)nAM`I4Lq}Vgqb>$@J<^ebDGk;j}mI{C+Ry; z2mAZ-4$h-o0~y>mRJ@_*q3}!IUqTCEJTI09TiNFU!@>`XqX8dq@|;~?AYu9&%Ez)| zqDA#3@G#P+U1O^N_Ejk;QmP~H)??Ya#tKpYtm^(+e5>-v$=Uw`&eH4G$te z#x8YYhTkOMjeAC~KiEOY7dX*zCu^_nsEJR5PPug2kB^CgAQO=r^5Ur^_KS*>Hj@a! zw%ccSHAJNdWj>K(bx1qrSd{tkZt6C^<^!B0ibH!qC14kClNyvRh|PP;UCbp*48g>% z_H%tr^7qRC@8Rlq5FRc$DQF4_ka*3o?h4hpk9lEqk%7?Mc7Vo|)@CA*(UGW+G7$JU z6N-Hpp`^&eOq9Z;3<|nCX1Wbfop49TEh`?iwM_S=A8r>5*jZ1tgV18E2sFpAa)?HHna^ zvKXLS=9`!Eo8}hXTbT18Q$z{Cy_#B_tyEOX_DaR3x7gJ4= z1rOT@XG6Fg5!Taz7lsR_*E|tC7)J+Di1r%K9)w-Odd~q+bWC7FdyyaJ#bk{lOLo~Ka zFtebjAE18Y%|scb(#|A%@mwuBA5dAp0 zz!Y>ua1%uCn4HhI*Gr6b{px85F1Dnph?bt^720-qF7`ZpTicA2*|75!>t^Cj)xK1t zLN|_Culgf#1K-FqZ9(_p!B$(X>VyK;h*AnX>#2AcrSsEIK?qK<-_z8~m2pc$f({Be z-I%koFX2r?X9n&m7d2_Zo74g5gWsK(Rzn8Q`%C5 zI3$8?(o$3ILo}X9{8NkVh?geXtkWBnX<$;zjbHlZ?~~dGD!?Dw(_pDH)otfXD!;8R zob6lHFCH$HPOgl&NM-50QeQ6>m45c z=yzpla@PMV6ETBEqUxDkQbNmh3a=-g9Pzo`%o@5eo#*V*xC^IS)~ zX3aq@cNg_Mayc(gCY7E0W#&&ded9<|)|}FNv@60AqIzR~IK1B(rwsSYfBRqbfj2Cu zd9abAe?Nru(8QYDkjKL*L`$}n48YGkU`2>KY22y@o>Dxl{`IfLfSUkKXx2+g0`>3vHbU{gvGf+H;C$91 z+W}-E+xZ0-rw!C5)7Bh));|aL(Xe+KIGPV^a4nih7~2_d-Cmd%8UOguqA5;evFUuP zt0Q_{P}7u7fnr^N#%%t1YH)JBE4YQu=MGn!ADGlci13an`K%U49D55WIvHKULK#hK zyNSDb=3Z$9g4%a_LHl;s`!vfD*1mG)y4`PG9LEhB1%#fjcrMG%pWknPf5_wbY8&ii z-Rtf^@c6U1eFmV{Lha+-?t)&qO#$&FQ+|`8Wa`w4_Q_XCD?bX?$T$w_KQJ$}UMP(g z>5WneIHVr~R&-5BJcXZDmOM!xcH;Y3&juioI?GnP6r7M0<~lf6@1l${`xwJL!^qR- ze18t3bxL+#I$<5v&v~Tz(lp6z6G=+EMhZ^P6#)tDBf(hdmwg)FNgi8@ z>*I@>1rht<2YnL_g5%GEr${Tf)_)YN@Y#&@i;nsLo>tZh(Z`i&?fFzoy3^6~^^(hE ze`|b2wP4RGyQ%R*vKu_Muba~*%mz;OR4ur@^^?v^v{ZKc*!u-QT8US?`RN3CDr$_3 zRU`jHoCXzGRx)nqdo&aO(UN(o%2%~en`^yVuU+(>_u&t%)ZhV6aMX2achz7LeS9UP zM8P6O+7UCZS!iAHa#?da#cg`6B7Y2>`&<6o`XuAe3;3&A0b3p91bZg5^aY><8wtNW zK&FOu(6y>916f?}(w8Pm6RmlOo46o0p1+i4K_Me+3AChQ~P*!(u#^($q}e}_eUJkCkVI2 zSr=*?7bef$$1&}mTs{>52~u<$fpW=ZeuOo67pVGBrc*s>mdE)olFKfmevmV-Cl>b6 z`>pr4*zp#kr1?JxmiUPAfqklFOL(Q$C+N)Ap&3PI?TR6!dXE79@@{`~^9l*myoY^r zN;%;!g~+y?S$0g6gr4~>B7)w^a~zxA$XY(SGwh^uB?u62>>p1e zo!_NC=Pp;(@`xZJ@>6#}oFbS`iH*JZWE0-f5fnKE7aUw53P#5-`Y7x=n@wNH7{? zh05QUvH@$OU3fX(Ik_Cf~Iy+qXVX=2`$JYbSVQ*L$N!u0IY(}<>EYEd6?=T&sWkc%) z`IrM0eI8q-{mgWuIGCS4r%(plP3-|3Ye(ge@>@IR#Dnz7q&h8^g0q?cMP1wIutd@5G^FgX(bbMh0wV4D%kKzVZ;iP9~O7y?et1jYn$r z%e}T4l1Yi8ZT}$HWFs^O^nR~tDqC%ttvj=f!b0ifsX6AK>m*tR-0~gLUIB7Xrv<~f zB$Hu4^0)bV_2e}c8GCo`_R;1<%A8jup5h`?SW}fXtOp72#{C;4c z__Y_K(>dtIUNU=@+8Z-t z=oW~db&K&8%P*@AnupBv-69dOAE5K4Y8D^FBwK^=$av(|8LUX@?!jFzHJqlR=yq=!+JP&MS2wzCJR)*iF zWZs$n){J{w$bE4Cdm)e)lC{7EuZs127WA}FN(C4AG!rZzkR}It z3&`DtA3qi?Md|*Mr;xy{LwP1< zSL_E*z*(2`W^1jGuH&vX6o2^^yV6PdnP4U%ay{x#`@9wJoiD{%%QdU1o?B~xsKvS* zZ&6cqw|!^KVBUUxdL(^)DCb@9YvrB_c20#bmv^DZG~Mr49#2FjhF;(-+i&9VPtLYc z*12t`a#c|lrIfPp70D4JQ)X)AFa8{hF%OIj?yQ{Mx171+J2xP93@j*nVHbVq(V~## zE^%8$Olr<8xli^r>X#POciQ)59U;8KLcem^x%gal6c4XeFJ2U!(3SebTr*Mi)a*VsYQad? z;4vdt_WYO>v$g|j zH-1+{7jT*0W_3p<{eX-$?@*G!4Ls46SxPZY5q{F#M;8F}0&J1mu;T$zz&C+VWx^;N zzR>KLdrSgmSDDREZtWcwRtrJ3R}c=NfSg#l!P=IWuua;KL^iYKn7{ShLu?Ex6^@+kX(>(b&R0q^3`>< zzi=XcQK&L6*Cz!>KS_qNc`E-)a{7+3_Q9;DdKY6QoC9-4YHijP+F!y_D*lD85&%OC z=OJoWAg=2WkRWT#0@4TbKY~iWiSXpyes)M1{yiH0P8_Z2Dv_{2Vsjk9lyl+>2Gvx3 z-$!38egB^N`WMr4FjcA9>txvl;w3Y|wpOC+ZQtu}0R6#=@K5NsiZ$heGsNGinP>v6 zNq*W<>_G0#q*X3qJ2xJ|2GbVSY! z)b2|bv*$fD=oZ|$xcUGjMLl0uo}alqeTYiSrUxw7Fue9KH>$suWKgJQErOQyR)g7v zSOU30OPA?ql;UD9cHI(#mZ^%nLC{R}NGS&)1%SFdg=}~>TyS%G32=HoR4E`W^u~2r zRViJ#ZNnJL!^6%JprEjPWLhiL(YYfO zX!8|7*NCbmImVO^rpZrMn@($~i@H5DB5WC8ZOum1ur$=BoGnew;7k2%qwB(>fx3&k zJ7Xq5+REu&ej#XRkeX$wHkt_r3#YrL9=dK;k(Ht(@z*AdcFkWT$y+1c#YnOBBZ&$VJy zp>zbCKW&m7AP!$pkyf%7@7;j-sh7jwz-Ek)>=De6BW%M>jWma(hchpLDK8h`@E&i7 zj_~Ny#B^>Fv_T8?>qoXYVx0B}x&+MDRMQ{h7|l!1hVgJ~T1!IT2f}c=#^YHL+Jg*= z@3Xa;p5X(kN{gxL-QNKS={t=Wg?cOKdi$rB&V9%$DRBmeSS3BQz7FZWbwzd?3fZ_X zTWVF+AwakSkDqFx8R%8$1in%V4x0m^_xZ=Iz%->kZv7dClKW zi^pn!tzMGa7Nhk8)DeV_j5f66YdHHG>p2pWA{AnS|G86pD=`VRNSARw7%4(N8UWJe zEvd>+H~&cbp3!)QQiB+0f1)7K$qH?{Ze8*{%Z)y_RDLd+fnw=ZagRe!+0)GvK9Sx=sK=OB z=VwWX&i`16ckqRt>F|Tu&s{Gz3VWVmeqhnU1(lhLS>`jh;m6>^?@)P4>-SX}hBj<7 z-f%+aFc(lilKeRMMh;MxN>WRjHpAyuL;x?u?8k4iRD+!*rg<-8eKl`1w<=B%^G-T+ zKKgv#qwTW!+R;k$Q5Gp& zxUwGDp#4Y>Zt)+lJ1fwQ1T0W8`I`t}_;hm#_OWP0yzCcrh-BG{$(DbXub!vQ^tvg| zxg+u}yTnz$6r9$#`*>*m&3}h7+yD){(58z)vaSMss`R&$OL6Cqask06JHwC602Um` zpy;T94{)h__jcapJ?KkvBctTiHYWOYA!qEm&R{I*{48^!$9M<8=)E$yLh65B{-1xx zUIb!w08u##xh)Kl3WCUlEKb#aDF02PydyFufQL_RF<`V*(hT#*Lrdg8#`(d74P>Qf zPOCr58PAS3tr?8Z0n7H(VzgLaSL4-WjpM5{+3s*44TjN(!t9%Nw5@RXG+)R$|^&t-j^Zi1os;1`6#|oB!@$O~qtnSSD z7-l+|0u=zfphSsg;NmcQ<0(%O2U|zBq(2(>bhyJ$6wx${BGV>3 za$byFRn(eUze4Ma1>6j=#7Uq-+0xlo?-9YV+OhsgV8k zmOkX?b-w$-fKR-bx7Yma{bx$SUNlkCKUAOXMIpcwnzv0D;8u8L_(7^t4x~V&w22+Z z2E`{|sO%Rf6|56cA1VN4VWsVh=XIhp%EPUl`Hi|wUXH{pnk3$52W95MHSL-17w=N|6>N}w&baCb}Qr=_9n10e*!SC za@I6WQW1E>Z9Toa>|bYmyVlZYOCB#0-sCbs@*%0R^~6hh*cfOzR8?ah5cN*>lFf^> z^WLU?n*S9Tg}#-LBsw`Y2Zilyq?Fg(b4p>Qc%;(C?~W0d#~iDKTO!vO>%1CVahQ~W zgJT*@*O(#){qV7xUHpcl@q&{CTAD0sf(JUEGsV6M(&hNyVnL=jAsJyYtohaWiVaaV zqh}X9X*g}3=KWk))=W2Gz5H2Z<>nx2JQs@lvHtANH>}V1JlwW!k-$F6aJ2iJYxLDe zKQJed1wQ|9L6o1f=Pv2 zHl7p59;}yKAt4ykkix0RVs%%FQ$bc}I3(RU9Ifqo@?=F6Zu||&fWxOZ=0AkfzeJsr zGQveNW!5y56rsqE+>?aTCyM^u>3eSj6Z2>xMX8tI&KGovoyq0^}m?YZ)FIrU_HFe_B5+MikdUeDC z^KT1}2gZ|$(rf3zMj||L?zm=R5aUAB>0VxZ-{AeeE5t6Adq)@T z)F^<<(O+#po%*CURDzjM<@`QLNn$4}}0w4w$RIM?adT&NJ%3aC{}GI zNPj-(=Q5Y?doJV(5xXRg7Z(>@&(Y0dhtK$+9L>+z2Wg=C5XX;zRIu|3=*XmvH&_;g!xwK+caV zaBh=st2dh!2V>WV4JmcmWXsSDrzCJ93oPQ#o-Dx4)7TU~r~|74_y*wvgNB+*C6Q2M zlruerg(7m%GiI07Qj+Vdq^abJ=6_9CypZH4kAWLeLKp=-Pmx7og(6fMNxONPEVW?{ zEnSl>{e_HS=@r1%M%RWey#+XqWA$KluBO>peTrs~iE0#Hxr|fnZDC%gi)E?=OVjL3 zw+!e508(A{HgLE!#zsdYc8~CPqLmp;fM9Nn&l>1`ud#TA<=R_jco;nFPpA(Je;e0D z13Q{;sr2V0N+;vg-qKw!&_JMoAN;#Tb74L$-DA zN}zO>fXdF2su`qm&e?9%uB@AlyM-hiUoxn%dGr2rVBL{~T0kVYC?eJyjwmG@aetff zW85$G-~kBRaRUy5Z?r6`8?IE`JWm$WGZrG%i1-Q$So*1YIF5FcEx~? zjs=886NyZJ@p{VfiDVpuZ?EA{VpS;VQeUkL=^t5DmK0<{(QT304tkJt6k}CMdYwM7 zt&b+vP2R-8pqxaOyw8Qf(Yp}>aIN2EB?5K7yKAU3{Q2udkf*UoYgIFS5Yy!crXEc7l#JhYeh3KpY~$JT;i3DL(iX zi6&TjOqH%t;BnUYpn(?s$MgSLZG)Hqh(3R-$G#%yaMNAap{9j4AaGPcF=@f1+E-=} zF{OI&*4b{xhw8>tp|W~xRFnDk9a#Aq>CwUMZXPC?uncZ!vFMZ7ioJ1rB-0u@~Fu|$pkbeDGf0?afKKuSD zdn>5cof0)NL?Rkq=4w3PXk<=7fuzRy`@6iw$i#;i>0Q>$M%?CGj(ZfxW*gecmGo*8 z=8p?Wea&oJQ2VrXjQ{M)vvqzO@|flK=VdSv!8eM;>+sP>U?rc4gc><>@oj{!OR@cDM z_cNXt`Is#~2p>oKp@=_z;a||Q|LyxsvPMG;uxMTo+il?}uMc)uB;gvj+NM0ry<&hx zxzXNBfTS5S2yz-z!ng#w?YAaR_WBKO0wG8O0O*{)S2jTAflBK=j2}+fh`^Gv>L_$CW^DA-(XSnaE$_( zOejEn;16xRqKgi48?B;7p+4t0tCJKDv(X(qeyJNG{o47qf7ab8K84ZWZ@=9LXHpw1 zGF#J6qmK}P82XC#D3D%B=O`)eT%9v4M?SVZf7J}6z**0-)JblhFo}sxmn6)r% zC>$bT%qU^YeV;&93j(UJ3p<1Hsrnpi9E}onI)^Scgdb{C*<<5h{KL7(4h>d6Kdaa2 zGXFWqUQ9;p%w1hxwUWU@NSssOMJQmyL5jaTYgyDHcQzL3{ThH6%nB$w$}h*rqyCII!)pogI-=OwZI`Hj<&!69PiCxO}Km z&2BU;2;gEvKu;93vIoV2%l%SdhMOQej!p`Q{04pBxY`d|#ji81Z8bRlx!~-ey5YuF z*kG!}CuS1^e2{M{QT_ubYwupg&yr7u|Rg7sRvw9SlYgITZ2 zCS+6^+}ew~h^iv&%Dte<-uKtglT#W2{F+5V3W`N>?-Z_NP{|@p-XSZCqNyw6z5p|sgS?NX&zy}{JKvRpx1BZxber#X<>ccBSlXG2Q$qmDET13O^iWN zzGtss7<_CAm>nuCJa~cD?(fQQ*SXB-7)2K6|bg5!9S6-_`!SNJIU4_5R5MUaeJD`wtDaKLY#DDBVj$ zoE;)S6D@u*8>*_7tP6UXJC~S+x=W#hhK{HR$1$rPND*s^TYRsN4%+oC9RP%na2-YF zl~g5!Clk6~x&nWB--hcpDrCx<-Eu8yc`iYj{DoKe7SogbC?t`?^bQ?&Np=rMhX7-q z-r?$0!bm#iHQ)E=^XW7o61ru!Z!QRIT_$IA0uS;Rbd)gRIhJr%NS%^ZSwr z0>F%#bVN7#sGG1n91eVHuz-SqW;-L`RkH@QO(_74S|4>ukdT2jo9U@Z*p;896wb2= z;ruhuSoXvAWVO6WX6rM8lTH5FL~A6g5CbpAvmYFq;XpTUa!O)N8~UN@rkMuRVj-}c z5ISCoLiz9@O)lrP_h8<|uyY)^hb0eso>7bfn*+fSq5OjU612=4;&kxASp^7rUg1DL2PTCL{7K;>KOH z{wyq&Pk|hdl?mj2!QD16y5o`ijkZ(VZXmev%KNKHscCO6ihwEF1k6E!K=z1z3tucf~3XS`LBX2QNR_Q*@!##0i^>6L?#rn&^CZk)7&bi z(Uuiw5CSYF_?wl|4px3z;iR$YRlQ_h>BIi@*@g4=&P~tug3u`WQ+J!mi$Po_`E+03 z*<|O7lX>DIzmOCLXmKMcAjJWjv7yXIg1L`Vgb>Msf&wZ*f0T6+w+M_jz8U%=b2Oy; zXnxkO@;;8q(6lR&>xuY zD}!~i-$KJ1PL5YUA;=7oN}9K>aVVkGPH#DSJ$73qF3*AmbDVBKhTD)7;cAI*fozl8 zeQP=Abp7|AW-Fa)sQ#O<;2jWJB97l-V;jjW`hwBObmdyw07Dhca@%f~>( zP7wSfiQKJ**$ESwav=LGKVfo-n8X*@lQmkDo&AdC{b>~N(WCXg(AL`~aSYd-Z=o8- zy0Ct+tIskiQfCC0N~m3V>!yTR%K`PE? z#)pu?6MX~3f+R1a-Y-wCch@Gh>F{+|)<@xR@>=vG0h&-!Yb1$G0I>q3E>L>o6KqA44o6oEg`lvpJL~r(UXgzn zJw{SY0>ESDD^ZQJMF!9db6VhY8X>7PiE!Fc_ZRCs#pz@{RfJr4Cy7qbqEFk40|Xyg z>>INIHIT8CMDt##t&H!v&3}3avo1!C5G55@j2ve2beB6l{luC6`($3i2Et1KwutP^ zHFbFZ{CuNE9@R%z&m%l{-@FSsl}XoNnY}uH_qqA%$c;w{Sb!yib$X|+XPKgX$k{52 z`-P}jq(B;d-|X!%FVLNdS8v@@JGzml@cb0&os211eVS4+`V5st8^S%ztbHZq`2wT= z!TH7hrS`l(?%w{!46VTF%h?tpB4^wsI*8z1BeAsA0Tdv_u^7C^D45yD<@)QSt<`$; zYnbv-jzNAf#>*f?PTE;B`doW=8lFOOyvOEn9yoIqq_?H-2x9artiFE=GycZihojd( zzB+;fjBv%-=>+BV+@J1t&~x&>c4~p(Qf%} zQ7kY@6?G(6$Us%$5>e_8GCLpqh0!~lhGeXC|rGBcEkK0AQz}B7UX_Cq_Vz} zwlJl4{tuSM|Nk)j>!%V9P;@-YGAn_yrYW>#_1ZX1w zD7%u%!UHyXLhotW3T$0XI!he>YRVV^YIb6d=mbqC{T!DEJ!FO_eLhD&(Jh8Cz)^X! z`^3;C{1B_Vq6V0~UzB`ch6Z9IKWLb065ZKu&QtxR-}SxkPWaRxCkq|X$;>qjfJ;_C zjM}7cETB!=&+1q&&%P_La0}Wp$wG)BO*>zUvuj&+<>!)nV< z@-op9wJR;D>v-WIxg*%xv{3pD_nW@k)Kb;j4LREkaxo6fzn5KKGeYvDVSy{4FnotT zNS(BtYu}8ckO-ah@nrrXZL0VLGF6Y_xw+K-A;;wMvs%ubR9~=AfjY}u2F%SXY^l-$ z+0$5dJPK|e*gb;usQ#1PtNm3n!-KANbMA)+uulH@_om78R>XB>G0^{ zx#y%KqCW#k#zfFKBs!~Cusuye2Ki?=)qXjzP#pL}CGm5geIpB6*#=Dn()tK8v4!7fo>dZJb~>k z!Osr8rHTf#;6b!#v26Q2t%6UEz@v+Tr|=^&e=<)Rzy`<>?S>v%_FG3&Ziw4%NWiv1 zzEVX;EdVr7XU(o~M^c&5&+^3gIJDRc*mUCxp`iA4rLiDQ=v+9uu=#b&p(Ad}{M+>t z#S0Rx_9LgGVJULyRY99BN8U+h>=a>RVx8SuyC}m5qiLl2HR3%oA9?kaZ`38c(lcYs zAiUR|U{KSV+#~x#LrJjv)T;?wf}=qzf(Mh(2Mh+%%yj|hQjznO*Gpv0kPFr!>hseT z_(+lWw~foAr@NhbCrpa7m&b52gPpXTjdEpqt^0QaRs_~Ef&f2|@t&|L9fU~^)~Aug z|8Dw-S+kqAI&#iZ-rxmE9X|faDm`pQ?R7E_={)d^r?Q7OT~DWRwAsp|D#J{`iViG? zRHe*{^DW?&&mAAp!Z>(_h64lKkqV7kRS_jr(3-u)}*ng9|ocCr1mIbt?^c zBnCO#?5Fv{>bKFFPSLdMNBHlojS&c3>};e;o`)iep#pZK%4fSzd^aw^W58_+_5#3i zQs3*Ch-_3S_hN2T#&Psgv!LHvvJ&%RmH%FS3D`ma!#q1e%~n=!+G|y#oBm{qL4?Ny zronV7+88#I7-8hdoPmp((OxJ;?KJ)rgvfvmz}uxx2v@(0IQazj3j!wz@&GLZ3jZj2 zL%EobD>{Pj1m-b_$|H)kFM;swBX0`gW_tJPt^^Ss#lsCh85Y&IV0fN@MMa)=eZ~R= zloFpF1DM-%`UyDNN-%evWkm<}`_OxZSW5b0g-)GmkXDcYiQAY#B6`~*xS5vsLKC?8 z$SOg$o3Nmpim?v!(qm)T4nH(PqGhXCMm`0JD>JIrj*(?&#Ht=)0AH3;Jkn{rE(7*) zJ*aegI_Uii(o0~y9DigYCM8%j#)A`XBZ&~Ldw8L=)o+phy*I6nu7#e+8uc ze-$_Xr#Em2Bd0ATIG&8o7*7t=fXKW<1}q6T?fTp&sX zJb`qhq2_B+mo*n3kSiPL5ZkB1+elOokwQsLQ`5C79z=FG>v^K zS`N1GizJ9pJkTn3_+eN{0`822)Xt~@3YekgYaO?n2u8@6uoa(g@EA=AfdvWao^G@8 zCim)+m`5LKbbjxnY_+rW!e_cXWpp^-L~5T{>Dd>5N9%(@?d_6DUts_xda4o>DBy3eZz3E*af(3%2^x@P=V}+)+0J#eqG*rTR$iOiw!9cKZhB+?QLX;E@vC& z^5l*$*v+yPvgWw(uK%Md!RCO0Dsxok;75xLnZb{bj=mYqxUePo?*ExdMb_ANcqh&Rhy31*B^@e}?TB)6%UkaE-&YQ;oOTB_s| z=4`r1Y>0jx(gshen$d1H5XSrbcn$8F3*pHcW4uuOlnFwFu^l$$MhmKwo%NFX>*DLd zC+RxnDl_n8?94n{pRbr}p@u4blcmNFmRU5Rhqs6U9*9gBS>&IJ@@J^QYcPRBFsF|Q z=WAY-eD%qo?aHf!%T%NJ4|L3tK^NfQfQi#W44z%?cSxu(bZiXF`vPBZ z-C{0$e+`SG>(tHg0a?@kcp~8GMB4SF0#_%I!6TEk2sk?0WeBk^K?gOYu-tuH4xwZu-pkNas(bnT2bGy3Ny2twzzN-RYyuf0XS> zfn89^$Hh8C4-CatW)7degba6aXelkE(hUvh5@6uMsq1Q>D-dF}KW_{CfWSyH^tSyf zb5SG@GC(l88A=SbwE-+<@Zq5TzeKiRh8QBdP*9)WMWMuH?|ga^{HtUle?7TnxsF>cH+W`kr)qr;=o;LUpZZ0*r@f^ok@kR+dzeYoCsn51D*LtcaTkR zvYe#ijlM3S?JE`S2=v6@%E!u3-1ik{vy&dt?JGpz7D6gFLuS)O8p;lU;>>uH0d6#y z%csjm9kgnh_kxWu;^Irhh+xYIN>s1&&EoYH{!B>}Fr9)KG(MWpe{K14;ETQ|pnJT3 zV$^&IYo|q@96R3O(a6PbdVGx@jI=$Y?}mIliNdN+nHi75J$!5AQq>038K7ogB1?C* zo&{cD*ECH>1tqY865IrRTymrjY*gGsx|O$TE}VYIyxAYTPLNEuo1$Y#`;4tugs)69q4kYF`-m1s*!MR7$)*t04wsx8 zx8(APEM^%@CQ~Z@{6l$w*Ut2~vf?N&)d0+jc5WyO#3$Laip<_Qjj@y5_!ea^w!jS7Iu}a4ph!fxla^}(E;3y@qlst`o z4l1G&Lr|q{P;Lz54mTQ`YVWD!&rGjV3xEOzuKx2JA$jhZk$bQU{SjZaKt_ljPtFPjj!-~E(OJ}2hdE6^{_~~ zEFs`IQh2}pB+K6~aN)^Kb-#FGGE!i;H5PByEM;f?wxG_PC}4*Y_!|X=EStn%}I6S zW85T(B;>>Y_pSE-_rALC#zowifV zQaCZC&To6}%4X?{WWBM;ayAFcvp~2zv=4ZZ0K80Y{!gQK_n&*3+dgr{3-HuH_6#)Z z$XN)%YNijN=!MfwXSF>UXZolw#o<<;0+JDPyMb($%E9sSfx-cy)EMKQCinj1*}3qW z`$A&7YsUF`t;obZU@G`@{;%1S1swOXUoTq3v9J?u8@%L;a&208s?lD2M>DL4{M>?x z3xQmqy^aA7*aYW0nJVI}S@FJz>$6)x?*H*l+0t*XbYS@?hxby(yCq<`-3e$=b44Xy zbAU%>@hMn&*Uk^dqBHGId5F={PI_}WwNs$i;41K&`Y2Tvz)_|eTc=<1>)nW-8 z11H(9S7WpfngVpgfrC?!91&L2DO;0YB^XQtrE!z{6G4jEzv_LPqRDS40HD#`k6w1A z1`7V%cfXJFd0;OKz_TIOe-x1a@xxh)>^^F8u-2BT14b3phN90VpeM#yApg8|c_NBc48xIl3cnMMOJ=gHxyAsiR% zn0wQxNgt+*5CKH-s{wTf2af3F8-U@PjBsZ?OPcEANuYd2uM3`Yz%+dX*9*Oc0mymW zhU@*FY+Ns2B-@-{m&9u1I69=!cn``N$byZY8iX66xZe74CFZvbrthP`Fui!lIisK?B{s&MFA>V9cPa1v%Y32(d%I6<#DF`G^IKpRO_%_O`Hwm|-# z^Qc1B2pJZ<0q9(stBVv17AA-a$?y|ivH$ZP_asQ>{hjRNVlwmdmCU%n490o5=wc=s z;tK^AMB4~kX3tRkab@|xni-_9ePVh;(5dQ(mH$58K*hIXN}ls*75-hH{@WKa^SF}7bWS6>H}s@YW5x;RZ$XcOmIeEx>=8_M zeX=i)r*DB(GH_2OZ6SEnK=BwfT4{Kj^^P1W#YP0msn}3Es^24cg;$p%yFWDn3L?fR zhxji)%^2_EkEYUW${q-)k;OR`f=4FdevSbg;T!CFAbT$}q0{s51#r&G0{t!E>=`u% zQg8ug>a8!;eW`K>w#8UL1%QX%9-z3z3F&4>?)@^X+vJqG<8L{Va4@d+nbYt@43xOL z!N_zE2whK~RbtT2>(E{%^%5p9Z6c3=>*7U#im!3mmKL)ZrU8u_YS2xKq)Qc2J$2`` z^p_0f8a|%BN^2_LUVdi33_!j-JNo6rE0IZV=my1%q`)xpy7v(dw2f5!EGdn_2o<4) zqUvf5`DJJuInxG+!MS)pMDb205*Ls#6tdh>J`Rd| zO7$wCbx;a0xL^nYgX#JR*0k^N4*!b_d8S%S>(!w=qS>>UtqXn?8NNoPezS76pQRPCT&GyClV>`( zA%h(3loqM~M{OZ}I-B7W2+XOm^4~Iuh7fgNbB95Gc!kQe?Ixv{bgPA;sIqMSJz@QK zMdcr#5Bf}&3}$Z6H{JKpLO+<{K{KcYu|Xtjmi3^{(e05cD1j}=aF03fdC(kL4~`ZV zVi+3EV!8`HSc;T5F%NuyVJ$%z1J~)>or^yn*869L+vP$Z(FM4@fFw+Wh(mv*nEyqC zJd+!yHMe&Do!u^0X1N0E{supZ5))Y^-%?${KuAcs1V*_P1`w(N#Um2>*wky}n@ig3 zxt2i&!-)u)Gd$m8dawdR#?bquu)Xb!akJPM#qgM+zj_Z&tN;=diC-T%>oaWF*_MlS z?hEgc&U)1N`Iro38RkUnF>sBa^D}1q%9e3%oPhTxf=T8w!L`3n|4qhL9$>c~Zm`c6 zh=<|6l0uIZkEN#-z-+wo4(!kixQHJgH3YsLtnV&}o+j}|gCtD;@&_-q*&%prG8&#X zwfCsL6DA2jXoWYwhnpHV9P|@W(|+cLh{xkzNC)XV64*qzuiw2pNNhd$2$*g=4GF{4 zvOIR;N^c=dr|PY)4%hJ&n7(2rKESE6!)wnt{0M5~v!t*ngAi|(aVp0JghS`*0Gi5S z@2L;Ofc8X9dTB@W1~p{z!|YvA1}EdcFqRzF-EQ`4(~*L$WPZ6^@*LJXzkk%aB zd7W)PE*lkufivl19ewq`uQ1-Y+(vXXXk$PT-2bq&)AZ~O7(9dCKZx<0VcKfGdQNU? zH-JXPhc@fR1q#PW5?W|V6>!h!tZ3!HT!9{LRAcm|PzYW=CF(ri(QYMEy9nQ3VwCOv zAgw=_hlmbgitSkoP&7oTT&Ki*GKhh)XJ1FnJDn^VB9f>h=%w~NcIqI@_bRG2rd(Wi z%Ji#ashNM+%=jHw9w=Q?a_bO#seo0xz@yAikJOr&J&pft|Npw*cOTp^QvnIb|D5M; z;LGgbfCb=jXYS?vUSr337-T=qu_dZZ39L+CSJUQUX;-~*1%IyV#dj_baBrjbOM@_YrW$3#jD7jwV2CkOXni_R+uhg^D4?k&xpF%{J)Gw;{^doIJFwwEq}wFgB(1z--_@5DEbL1)otBG_mEjk_ z)}*k+$h?e|CWMW(dHo&;`lF4R!-Rw$*LP1knRzc=rvV9iaeB|(wGSdcoN=0fOS`I# zr`o`*DLr8OsF6S|b8bds=eppTMV+fn9Jrzfv~@srG{HICl&3LS^wFWEN;z`#;TZ>? zlgU#x`r&TnI|C`s9Tf?}0E2#)f;O{s!L~~~$97z}>(7{sFt2AqkfcqPiKwmoFqv~* z-k22EW^g^N->nrvtoWNx&>&c+#gbV4G*9eJ$9q*KA5b(iRj^4HBbs_Jnez@(%pP>a z;)D@}*A}H!4c$PPPLL2B48U9jtRy-==t<@;E)xI8!d-omMhNaf%2c~3k<)4^3B6Z$}uP;DW&IwquZ>1gb z@f!E-kj#ARMeJYxsOxf3go0?CefRH1jpBroyE6G-R#d&0VaO1ox@#z9&`**R0CKNu z&5m1XdZ4m0Bf|8^*xo7|t2k@PVh%kGv|t`N@MPEKop+q;;XW=gAh+56z1H9+ZP0mb zIL_v4^tp@bBgY;OZ-dh!g9RXcG+59iS~S?>7TL8r!nry*K|+C6;$WLh@bVrXBYCP>+N zZ(L-SWmkH~f3Zy$((*a8C|^OXD+DB(d`I_nO)iOd5FYd8NFRjT#&vJK!&|Qv|98V` zh?y7<=lv&*fg#Kb#v%d( z@SN1?a5^>8LR{J1AETS|K2DJ+)e^D(&Gl}@-<3s^+&@yNMz)tO&I5`5t2e9heN@+D zSvud{RtbXdH3T>^uJcSbB0A!~mv*<@*ORCSqdKvLu6+}SpcN+zp-2ji&+lBT4eH+5aK){qC-I}SE;9H2 zXzG-p0bWF;Sh(3zWHYz-5O=yxf!?sFwRHlf% zcT(e8;sk%8KzbdtM+~cDKazdJFxjDXm}{5^%f4~#QxAFS{TJ&dX}&JZzE@uF(1t_5 z?F;O@8@T?tA$YbTy3Ubh)EMVX&}ZArB`b?*#)e$Un0XPI$KU8;Chq21T#_M@E?~Gw zt`pk@U0>&b3D@?z@kS?dpVsPnyz8d*YdX+hAL3l8{i3$xs2r{wTXZ%4WpHwcEw=xS zZVLy@EA%>96-FpV|7JkeeO{m)?ew9=W&WdS%oBg{9Z8chzAQ)MWXYG)=bz1QSrT2+ zRKM9B5K~|xMNj;8qB7g&7)UnurUyZdqb|Zv)M+tV)phJ*6twfgpY_CVw(WWVhPiHYI5ngM$I8;MzAVftX$DwbF$4%ReeOl z!%Ny^UO_KYqHrYvA>xaMS=(ARXVo_BSb%tEjES|Q>X!lTX@aj>rJ4Km^dtB0(2yGr}i4eLGolKBgnh-SR_g`=>9!78K@1wF;&M@oS@jC zmUISKx}zM4H%M(hwu{ZU@-p`AjC&97w)t`+LZLHe`Vr^urK-7hvJGO`_?j-T%Nyo@FsJz>8IHH9;k5=2MWrvIjiQ=fF8$x%Eexm6z|b)+*k0q_ghN+7RzB)eM2M1n(tZ zVT}iVKc#58-pveYX$a1QDZ&POc!{CIeaf=gBKa9VoYUN@=jd^-aJb^6d$AAR(|gYsnB z@-(+>jkxn0n4Z7tR~MyQZ)Zdw3c*u;e7^Ts$rT*CStNjNJg}WS58D2}&@LMmll4Kq zfTp!M`4~{<~BCuP;cS zBBRVp74@QNF+h`Z93=yH;Vk(J&>zCyQ~s5y&#LWl;JiBFxprsL>scB8njH74dX zM!>Y3Mur1%9Y`lr!Z%*Nru(>-?uk-rHpme(zE+aP@}}Qm-jO|N3ks+ExX!k7?EniI zOW)N7-`RlEtgm@H?F6B}>@P;(yTbHXWOV{&=e&CtXV`mX+JaqiV|iSZSYUuCo8@1d z{F{px#|QaoEPkj(Rr(=r6*hQV1D6%KkBeo%u`WkK87Wm4VHU^T=``;?jV#L{ySI|I zq!Ib_d2)CUcX^FK6j||nnuWHu;!@g@nlxr2Ryql8kDr01*OY`C!k2f3mP zw)tcSEr*oipgYZ>Ix;M(LG#PgPsj*F=|xg6Qs49N7c!ZjnM6XDC#M?K4$L2JSh;c7nmy2uXeEVc3VsAkW?-&NZKC}+C4R!LeG2* z*Hu-{BiC}VNkj;ydk=GO+%-tC@FPu1xGYc%NgnMuqjIdXFns^4yr`(}S8FY_=g%`) z11nxd)mL>~%KYy;oC&XC$HQ!`8?>#fl&qq41dr)TDQSf618}y`ZezyfyWoTyH;;uN z`pEg7?m}C|4@d5mwB#_@%Tqe>O2eD;g!kg*hsOY$wx@Y> zAV(;MnbxI0LM#D)B>AR`2Q0|NfagdZ1e5+i{Vh z&!#^r)gyLHM6}qp!;Pqh+AkirOI#n%+^^XzJ6o12O;B1Cpy^SS@9KW_Y^&`oywn`* z)=~P`=c#BtTA)K!7Ad;jUh6TwG}YioTeI2MA7;!mBjU>#dTcv;eG$FGixP9&6#ezb ze6}uIVl?#F0(WO&c58Sx5teskp7r$t=>LIL$?LmNZ%GGF1ol;?ekS%YIC>OQ4s@OT zs2eV6YI;}L@?>PK9UCDtwGI7gEj0PpPGg z|4JrM?gZOYt7w_;+Ql&-8HWa#HEyfUd5t{Wm7uVnl}J96%70l{#&Y(c$ur9frztG- zmPD#>aDYa!(Ze_EKkZ|6{KX0=YF^PLyZrqS@SWuj2=)0g#(7H zJAlV=;TiCpo;~sX7{eypDBI?5*yN;s6@KxIWty(z&hHrm2H16ZZ=2N2bRAuhRc*xK zRXkf_bW6{(!HQdLtqzB;lTVu4%$+3bS89oRJ{Db9a^*XrT%LZ8SRzkUXmpdm$aH&D z43leS_E%$sR0`C_EU&{dkgjJP|CCk6wE&ooP(4fJE*%CQRfVuSwdD@qLD4_*0?K;U zfm&Cq3HA_s*e2J_D+2#LuU-C(y2w$f5K_l)i7RNeE+!E%IKzfVvLF(Ti%0*S6u?Bq5m6R4W zeSLLHi`YkRFpc~u;LZ4ONX#di!L8gvcM`rWKY;Al>~$D!R4g(=HYNQI`uIMbT}33A zvHXip`9E$+{`w0MY$g>1vgRCwSE+(HmNI6(R)9C0EX%=%@yX<^$by6-@v&b09Yq6j z&lA(EfNLhBpm}acJ+6~_Dp~PDmX*k^m@f?D^OT7-VMYw}O-KmS6q9waPMm&cb3|H= z;mP8Nt4z^bZ;z==WxaX9*5(fTz~)h*2423K~oJ2re$IQ_0@aI$O{ zj3!rFT$GjO-=Gz6U#4hH2vOuW zb?Z*7L@^t!=5Cmjn6q=Fg2t;f*F?^{WeZ=oq^w|3%ADU7HCaVg1VZi7)<}|clV%~I znVgA=uB?&s^${(?@w!|US==(etvAG&pfYrq^n6ze%tU-|s7Z zNh|ck-)gGOk!P4|Bg!!A9mC8X3N5n7*S~>mn6vZXe0;XeQ0@LQui=n&hr}NJYPyc` zI^=+jJl9-&u{wb)^p+TZx}|0cojAGYB1y6@W3NOX$$o!>X=@x6|HN|&Qnf(rZ_t;5 zeR}wucV+gTHeDNv_26lHN55}eR)yZ$TOJ3U^fhX=yHEGX%s(y3RAD-QsKuQr5F@{tJV2o_{3#DeGZ)MI)IH&;2j>lG52_RW7yt0qz4Hkio*T7X1%E*M8j~EatoXh z(?3GdI?!D+!<=B;yCG;B@7UDByp~Or$v!xT^*&twk`&hTu!B*K83T_`t*1(FM97sv zsx%{TiA!}ZtZeiBMqh57R85g1??D-_^hWQXZlal#w#Db4QpyeeMg2lO$hibA#_*(6 zm=*3$c%ML#t%t?KjB2$|eai`=9`^68&$j$j!P~@}{LrT=JvqsomMKKg%-&kSJDlE~ zYW?Ro^NGBn_zso5-xapQe;g?Bj_&D{TM|fJ{?WWK5A_6l;X-t(8LueTg`SHC2hD~0 z)m3gX^+zMmRe@{uu3T@5&@IP?y|AV3I?<+ySn+iZ+n4S&oSVOdV$wj+=258bCm%wo z(?v4dqi1BIDb0K7omWqwzd$T6kE-OJ{7sf2^=QoNi>-lTMqn@`HlO1o zoMmXOIgLf#l6?FN$GR_KvGTbIzPXa&R^FcnbUaf4*SS!oI&HWuE{H`7I%ei=Q3t9Y z#G>GV7A_(Bv)02rE<=o~C%A`P&-QMqdj`7c)UlnUM`q)zTqkULKd!4X(vD zjQ!m!{fFkWlZVc;0-@8b?bEudbK>~uf3ZS$4WF79D*4f-l{8j6hUi-|;^Hs(U;rmB ze}aOQKSwrMT@SCVPF0w7Fs-f4-t?3@nU>7cb5;rbjFi83x*-L`D^WB;_}~gP6f&+3 z=MjO(sfdLb310i0y`E?}q6NWjD&IYy>1;Wi+tdP>od?WdoW~^LV<3Y2F>6V;xwC|h z;VNem0$sVe&aH&v7<*&;bbm-etFv2&UA?IU_kd?f z%3pN(Lg=Jtd0gu)q$G;cwwI@YAMpF~?byR02N!z<2b41|{?%Qi%Q~qb?rTs=MxYU= zO4Fe1rRptw1F06XfX!WX$bQujJZXLiqF{97zJLq?9M|RE=12-IJ9?qwZ+_=TtJ973 z{Aj|2Nc=>wJCY~}8Ua4_Z*NlX;C>?;!|$R_-BZ*{3;F34U!T@0K=l^{Z#?LJucXa9 zJGz%!dxs#rKKZsf+fSkt{Scs2HErFOdv+cvb9J*V^!Eo>F*E&NKxI$?v&j$WNadUP zwrW17S?8({A_;J?KAv4llB1Y~Z`!8U>pd`6mnM`+_6)wo6RV2fkD64nCG?^mb-sE0Lh#c|v8V?j+-!ryA6F zTR}1qlOwAYy`Q{lY0(f2z70R@)4Hf13=+I`HxsA3=xugzAg<6~PMd!&(1AZ2lFjj0 zVU{R2N0u2~WcQq1Fqq31X7euW&Bc~+EWU(-6{l2t&}=*#`<*9qfW`H9SXK!OI6Pv5 zR7%A-V#PoAD6EvH#5g$4p}_VsgYO?TM-~`tAm$3tm3w>uYpOhcVBTL#^i1 z7IrNnKTP{14Ug-_J~^OOReqmlZPxYX$Fbl{sqYK}u!goCD`BRATAQpW=gAU5^K(i+ z3^ofcr(V_3r1%+nnsOkvi<2!B?Z8okIPa<=TCUXXa9PeXSoV24gNMC5W1Z7>jH8kO zY_J4nEPQevEt8rw1=7Q1$C^=#h0=-3rAmCA&F@0F_onZP@lwSjLeG)PRm zGFdw2E~yQqaYn0~scZJLdL8#KTZBQ80QKXNZme3iUstR85iM36TF>~3_ zZ1y*5!@Q0rzq6hMZ?qCmBZ4+y9a^un&QTB!@CGsc&0-QIEpRNJ;AYYLsKoR7&oHxK*sJu%ozbyq6Z+Ops4{Ro zSPx4^fuA2=$8m?2SsT+;8w}iB_Jp_%*wvA z5j7SN;`V-8Y!oDQ#Xp_8*s7kXvdnwXup3;MZ<^}IE{Ge6E!UgrT=0YqJLVfq#F4?W zKO>r2&~nUKxBwx!RWZETcGhcm%T6NA5kFHc^)_1cFP%IYxk^wu^oC18{+)$^ANqu< z4VAF#vhum)E`8ey`0drINBj6$WN*XQD8UxHdYYzfj0**Ogw)bZ@%ByL_qT3vfg5Pw zFOmz>`<7MU`X2-f86;k^!27it49Q*O^8xf!3O*1fPI&U-3-4KnB+XPEIz0V{mg1M~ z2AB&RFnlfk%=n3D7IBo{d>fdXw42cXs$$gRCOg|%PtlxQ9>>8F_b|G(0mx6KAw@O# z+n1hgK*Dvm8_3dKSFq0n$h{azvI6OG(!@0c2n7f-8$z-`+O1`@pXeA2BI=-OO2;nH zUW@(ce3gyseh@PfJr_EWgZn9!<7^o_wB7>$h1dcQzAArTsd1S{j!qC+s+RZdUe>I4 ze_K8m<58)Qfwb8uI=tJ|^BZ56sl_5&d4(vH!5z~I=HESVck7ezZ7aEQ)07P;MYu+e ztA9;BbqMWcm&q2TIUHCGZOKZr9+F2t4!GvAmcMcoF{i_!CdP`&>PK|cbc26%QN1(Pqf9tu^c)Zzme7}91 zv*bz0J(0oPsAG0btb-4a#}SV$>vCl#*)x632#8LLmfO5lup{#s+0{ z)IMJd@)%~L%GS9_1#S*G7!z%mPPL>l@Su0vYv+`5PE1n;yn&h38I=_@tIw;wYOrGW zt!O*VSN?q}P>s(KcS7xLzJFnY#N(>V!@TgV3VvKLu&0#mowp*Z_=}kZ4g!3uUQLrm zSo4kUJ$yvsabypg2-~bufh5?9i4PaXjs!tTgCEUg8JJrL%C)3$mk+XZ@{*8Xh3|f3 zR@{7OgG!NbCp*S^Bzc#0$&1fQ z@llG8TuUR!*yn*0O_|Ln`?nygr(zW49b|{6ObNZ~Kk|l352OQaB?&vt%AC{frqX;K zC}9RxVZcBQhjS#-7Jh@MUwCMR>Ft#dXZ*)=8%KfJo9s3m2$8(tQ_j0ss#-V%V5JS$ zi!z7|gm>uUrSd&o<$GKbg?DEIb=}|j>|kxz;=oCndw3<8lDOmw11C8Y{-FTN=5^ zcQ~(<>e(BIHz*QotB^?51je6RIl-ArH>wpuh>z zWI{!>)ryT?x5b-XGm6emz-*n>McXkrg;8QEdw1`yD%tSvxy9xrpX%@@*Jj;b}e3D(=Z`0 zew+GVUI4;V;+hOaTn05ILULx_Uqq!=paW*ZF1T@*xH3TBS%0)OnO37=^j7oZKIC%6FK=5 zm`jfAy!UXR(gGd46GZQ2Tl6Hl&zCP818YIP`Eb6RG(Io1>$Z`Tmf!9_%lnVi(gZl! z6n98OCea48R7@$+n+{-2x+s^hcDvYDUhmgnY>~ai&N=A!`^ca1nHMlY@K|It^dj#L zYyGl~RAzRn$}6?62R6c0n`*3`Af65z>YxGmFa(O9y8-WEGQy-h03*OPXom_P<$W&b znKX`lKbQOQGglHNMsylS4L-@|h?_3q9=nTimJIqtK=Yyf*O!IAQT_y*6U1-J9-S$5 z`Y#`#Zhf+`?2qv?Mr<+56)w)i0~DAr$-pJz;b2!h>tL}l0(mIpy$~(3DKxO_c(OZJ z(@Vbn%lQ6jzbZT(kcp^R#gg4~;!0n_4UNASb)M|a?E#JvU*3AuxDNvjY+!SeI%8P= z{V+(~v&{YorHF)5ni&u6J~Xe$n-m$c7L~hLVKZF7KNpCO z!S||**cO*DuIJtT6lHTTP_SosEmKbj-vqANGPFCYR^g=RN!hiniIo;sXy&O>iNE=} zRZom54F5jWMqP6_!qoQCxmOGDgCnm|z_G{Q{rA5f(z0MQ!80gSz`h=^x?}C~ieJEm z4MJ;I9TDFs`BjJb=vQ)P9_w#|WgCgfI&q2Ld6ApmKGDs5uwul)_P;vqBbbqU7VH_g zf@nOi;1(Ua%Mv9-@zmNDx8(zez8v_~$S?+irH?kTdFRb}e~L+#r9%~JIVL@*LKmeN z&q>%Y&mEsd^j0;? zgB0+r3f(G?UKjS-_v`xeJ4fLbozG_Jk^VC{={-~n&fTzQmOj`jWHwnqGUlkqO1`an zKo4&R`8xWo64EJb&jnkc`6l~|>Jt{XlhS{x+@gRm`1Be(KV8SlJDCN#E_AC@)&u*r zWPckodDdt6{Q?NZRzNmXoC{YIn8~9p zb<6h(x(`-6TAaysivv^`2h`e1#6gaI;py;|o}>rWt|@>~5|>>;?b$3WOp{T*-2_6t z-EVx@f>A}S?_^4Fos_YLqwG=-WoK%9K}kDughd z0d5c`;(Hj<*S#ooXF8esyPs}MBO|qO{wZGlf3lyH_<^@)U<^H=LZBV#i*1&)$*kbQBy{q(2@+YZF+=giOlymwUvn~Qf?7+B3>tF<6* z?B>%=!uoq1(i;7k8E!%4D#TY51YW{!U^Hi6}dcCOV`TH(vb0n zv-NzFx-ZliSRpz`uTnsI^%tR`9R3ghdnceN>{+kM31))l!W0C)kC?ol_arYgOL_Q1 z^ywWAbtc&0?qzBBTIHxwd5#fu=nQb!ln| z3fTeeT9g{+yC<#q{#-V`Pc>O+Y_JSh1s51}4Atc!cGo$zcluuFVw;XfvpL^zO2e`) zmiZjzf)*P?X4x3_?q61Z=;c)1I)gf)93>U<$9IC3ERM`UzpV=W;S4%)RnCx?0aI%2 zikL&Pfngia1q%c=ja{iU#<@^|UgeJz`@ugjx28=Z1s;(U`I;sI-@LCYla;G8J7xSNzmoqM_9wuTM9V@V<%*$NE>8Jn~Jy zkk^QI-#xc7ORn}`UJ~0A&x(67h~DzAVemHaZMVKUj43Ezsow;Nex<`8`lpcjR!`Zc z1j?J12K|>v5oIs!={F;xe8)6iDPl~WtJ#y=Gzwz5?jsRp47s3*ui^z~F1*UG zv%f=z4Fp;X8TsxhOi-@WZ4{NCD*Re%JA&GYq?ZA(@0E%%>>3`iRbtxO>oMfZfkA#^ zSO?gxdvP{Orc=`(Y0BhaVtl%TVT;H2rrYqdLWFAeA-lnfdNgM4o%^+xgH;*zOWNs4 zGeAP31&3;TtkM77j_+YA>*J|PQNx+?( z@QR2f(1&r5qE)SLxSyuUXl#}aFo@l>_^PjfKf!-xxcs-DVY0^LD4YCp%cR4C#*`;n z>Ul(MFmMed6vqW=CcsyY)U}t1u{}!U(dj;r!SaQ`gMIHs`WRte38yb}a4ccJa=Drd zXEb}SA+QqI3Ig6Y$=_yo6DYt%sq{h)4_NYNfL_>zMW&gP5H}B(0&Dw(FsEiJFVny7 zV5+sbh};I@UtS zdNP(&?y(QsogZxt*16e!qBCxOGfa;t^M8 zwzdO)EqLrY7<>9XnFH&95|~VKjV} z%CisJMJSO?j|!@%fHk3gEs)I-?x{?YQjm=JX%u9HL7~AWS8B4DF06c>d=ttDWSv_j zFwfoTdB-E7qj8~V|MH9q@#i@?tu5IF2qLc93f`gwA%GQrVm8~YSMyNum7g`v=C)a1 z#AzS$vBY^opto}T|J;x}&QRQyWE&r?$x;44dGspywy<~x3v>lPa_b80k?anV=n~e0 zRY4TzeENuqT?O?(o4Z!%1m=u$DpptnWOiKzUlU{qweQD;6c1wqd2!MWrI$OJ!L_9`~(4Jwm`_V+1WgoHd3IAaivJ|h8;EV`3V`<0MaArZ$yoE zGER8veACvhCSZg*xE)}CLjdQrI{`~$y=+^Wryjs{37lO&RGl9Ov}u*z*j?#lo4K22S77`S%Sd_FgoNl>Gu@#B@x)Maq&E!vC@>tKuclSPUtVHAZ3%unm;q-3#Mih>d}l*LT66{q68jb z!|c8)kZ7eK1fm;(HSAb}S9xEa*ut=R?8A|i*A~-;zbGP*8JN}=J%5mrgLJIq^3AVO zy7-B@K=1O}XZvHQ?M>vKEz9hgkdvzWZD_pvC5@=`q-dHJ|I>U}q6eyFqUhP3AS7`X z?9RDyA-E7$2<#*KEE24~9Glh7CIZkIi=CTm;7U(C0x4#vQpp#_yTt}!dJ&D`(BT|T zOvGG4C+d|ZZqoyla7$Q0{c>g5)iYTTES44T6^akEZ~+Tv8}DboZnEs!BY?zjSIl%@tLuXp2MV6v&uM^Hmgxboyu# z2DPFODSADgw@yFER;Hc}qYZrj;OJQtd92-CAYMJ$sROiptGs`?Ju>CuCG#)9HF0G4 zlQh)`4Da8%2AFl#C&q%0TJK_zA32d;E1|vJITLdFp=2D-F#+oX$en{a=RX&3m)Bi=+koh_gfN52UKfKj!nyC`Wi&%P$q_E~YoXU4Iki6- zj>@8UfvRshn4{o6ANZ6oIG5@qz9T*+hlhOS^(zNHEI7w{&R+|9f7abj#(==!UEj<` zkh(rX9LJ{bYxN66HWRKcWf|d%-K5hw4r=@U{p5CGGAZ+{nl@ckHyJCT6Mj1PIuXXM zoE!+M-E?HC``Qo|I9bJiSJ|h2GRxzXFV?&lkJjFi>9Z}yHS%PbGcgDxr3Sm zSVWNar(MVmzXfOqWA$1hq@ZBNEM?2)e!N)IOIgfdVD1iANfvkeu2K#PH5BrlqF|O+ z!6U?Ir4;0sr5bg{G7|AtgDBjTu)&ieTpV_wy^6(EkNbelet}Z|Tx`-DOvPss$RFH@ z`zv2t%|>~r?iR2op=wp4D$o9y;T@Y$sE@AEER%O|(ZTD(IkiuBjM`~fL4Wp?du8ie>=>Z1O=!on<&LXA_%jo5J?@P~ zb9=Zq)r%I31eaY#@DS*po30s_Q#A;z(%lk;NbzP=uOF)cxjFEXPIkdoMzpLR_bl=t zF7}`4AAKGd>oJ60*o_px3X4tCRlt!`3T^-^0f=Gh&3{kD>4ux0nrV^|Y(ZFMT%vYs zLtnyulWMi@GY*3%nq1iJ(vEzP4*B)>MZ!fz8Q=^r1Yb0E`<6T`09eoyDRaAUtBWzm z_vTn|s?yy=9{mn?H2ZY+AP}(IOEbnFfOJnorGwmOwfn*xdgNLDRW>Ovh=VHrf`?ZD z=Tlk&NM!#H(nGBhSX4{K4uOscxP1^V5P8S~MrKE@`(k_s%;Jy^Dq2b-+>2AIHxst` z5Al-ym4HATNma{r5(UOdUw1ij`oE(u|I_QBWL&CfxRwU`38j*$IDWbMs&kcdW-gT|j@k$?Dx~RiniW*g1+4N= z2p0aUHlYm`@br`=p!K0A(X2dfS`lru)iSVYcmZ;wB}CIO+9oP&fRI*{NdkTC`+vI0 zB3Cd){d-oOK{cW(WlR=$?aiVrdkmH+q=3aMazh+S4VOIV6&$Rz)#h?Z$Jq zN(uoDIS2hsLDsC$s6j$m#Yrm>Ursz9HcY14!KdTFC)+e!@LXerGiLk{wCb-FXjivQ zcQ#J7mRA=YWLkMkrdraGM~>h&YVbUoR5$#F+a?=mf7vg2a67~ANSBW%9iS4T*B1wa z*>d4gwlgat?#;niRmK?SA|(YYx2?W@YHK1;NrB4VUH#Q5(0ZY<;>3Asa${ErITzA|Cs&KEU=uBweK@Wq?+KV zoj~{J`1=zXV~B`lG;Z3`%weD{vY5g1eK61#hHajvbF7j}8@kCnkcB?*mBi#iZlKA} zC!h64ohj(|fL|P(9*;^&GN2Q0f4U$y0HwuSmUi0Bo;h~4z-^xKX6VUC1smA`lWdc5 zWIb-%BNMRYbMNiyg$eHcwk@8+8O}nww+*XG5Ipq$Q!?{GCnl-L9;PM^-nBxTA)e~V zU~nORUzpX+C#bAgTwQ>Gk7m|b$zYJaM__loF9*Wu>g+YG2XnA)vSFjKl;%~&9q_k& zvBxr6n_NS1h*amt_oXVl=ymM<78KHs+y@)X^LYed;6a&3)c*s+xrdCBl8{N^7l-fG zZU~6j|9%?+#xZ~*cJA3lXugX?n;@{pwpb4(pTBEz#zMW~V6xaHN|ZJAK@s$)Pvr73 z{^1GqcX;H#zP<|!q-Ku+ZbV5&_+T{8efE)>HB!p&sy$Zv4xgFilP0i-&0sTc4MX1; zZGA_H#l5dfYKX7WC!p#|C)#leZdE%R$zdh9+s24HQt+JoFDEM*HnNjU=NW@iv(PQ+ zhaTGoV3&dms(Cx0TStKMvv9*LBza61-;Mjm{y$-5Vh)H^CIL`iM|pAp^U(ENRgGll zg$~^iBHrP#1&}pZhF$nAHX6kN`F2l6_B&|8e#fP*sK7{-`3|NF&|d(jgs6cXxM#v{KUDAtBw}pma+} zhe%0x*ZcOl=iYPf|Gjs|eQykgVDHUZ>zi}_YHqKj>1o!%7OOMO$z7UcLVvO^mN2>j z1c1?Ez18f&g{{g-{+F^*$3H%#^*ZX9hQzUJMBxjy5B*nu;b~Ku^?)@9G!vUOCu170VBT;*ou>m1v?L z2_TRWkRVCA(5^X{xIP#OS$RHrtx3I|fUljPj|v`$9CA^yi$!{g*r1Tc-gk9eBASxH zh{V}pX-b&j2fAhcEw@`vLI#yWJ^<)L zXDkC?^r1y)cMzggiOOKwj|Z#l?OX$O7CTu#JaZmgn0!q`Ta$a(p1g@M_eU(DVRb*y zTzdZG6${2f?n{i5%+uYXoW?^$PA!uhob+*e%A6Nt_4C>O({kJkbhj3fKCl!;4tqb0 z_TC%rMNl~8H;~67LO78e=fE3}U;jygg4GwY-4_^Ozb`A1zI&G__ltm6Z?N)c-mPar z4ZBI8G5$z48wtrCf)}<*`d3`f|NSxgfBco+4*|X(BeQGpXRu#u6|#!3|L8&Mitf0g z|NN(~iDu&@P{@3(v)jP`J8~t`g_)`DrvLpRx4_lBiRD^n2X=10BMwYAopO`?3ZG)w z9^n7#Uwt(zOmb>6zy(w%df*GV(J6t5&%6fShi`3H+wqZb7^|UtCf>MFhYt}t50c@r zo5Isd18)9bPgtxFRQV3uqMo~KLmCcD2@Qa?kYALpgJZiF-1^aAA?G*&g<_;42vrMw zF_3e0uz(qX%hDL4O&B_ShBfDVf7sM1*3G$CroqC%*=jO?N`${hRS%Am z>vwPySuf5lIDc4yW{T~@4I1Q(1lnb%1+x?oAMN3Krv~jz*)2dCrAF-k;N%1T%~|M7 zLa16rtAO=JY&>tU>(XHU`~azl%vJ6EOES3W9Y-EzRJqR5;a+)_-!= zz*Ycv>jOHic0DcVuOonyZY3RQ>g3a>bFF`fJ#{^Q56c;- z4Q(7Vh2o5RV?sF8A4B4RlE;3l?b6x^*r}z9@y;AvJ=eI3oab(y$Lj1rFY5GF2-!Sq zdmN0bUwx=q4kvu``|}~!oUTh0lgFfG8NimCw~}>E7A$hMT=^={&|fxY%vKVyPaD?* zgRFg&B9tpaXOwlDJF72@(T4+{H+?~pk>-59as$sm(4vF+I(^0mI0ZCYUFj-2@2u0T zs1h4dsiB@Ix}AINnpVsQ;usA&mm8}L+j6av#VIKS}A=MRB_<_65qU?Jbd zN){4J`%i-ONzI7IlWA;y-%B+R_&?G3mV=pnT6QJN@VNyLWq90cJ{(6aJJ~Z?JO>{@ z*bdK0_fK7a&}4m*`ugr9uN?2ciWFr=fE6ygF&v{DN?lFboW%zNb zkObl_sbV4W$wtgAPk=ilwDSMcN8mG!VSS^az^9W@j_!IZR?*i(B0cBjno3JyKkaH? z%_O)a|0Yg)r3B*L*&Gm$-kQn+^^IeHB>wLgJM4vZvtScyg(rQK30GR27?u(bX#14N zepzp(L21rGQkayWK}59y1F;L3pf#PW!haZeZ6!ezIsbr67Nx$6Al5-rDgNsNq}G5v zCz7EspwRuqBTWi44&oGSzLx z8u<^4-`w_~@ha?GIt#MMOJB8VjQQP5G_-IHLqQq%-F~x@IK&Q|91Xt9Zw|-69JPL{9r#{W;I0#*hPx61=!0! zO?I!cKO*w%m+NT&tQO@B7o>S?Q@5sLhANylYLJkNqs)Ibq6^T;YCB6?gACw9s3>Xy zI8c=QVJ^P!VJi8I6dUco)%SmNv*DCdY6q~+Hxx7&KDzQ>L(NaXb%&Yb zbB56Bx*Okk^S75gmL7`J%jbHAr33+UKM88Lj_OXGTi}r zr>~3LaRw?6*jX(C1Wy%{uTr!cH?QMwB|2z)T*|O8z^OD8 zvj9NERn_44_;I?*Bm3>ZS1&6-Je&d<(!fV)yBu?<{*=WTnwO7vhvD%1{`i*CWwF9g zg>4ONrLRCLum8a5{;Dl5NIc%K^LYK!q=k*GS%Q+kfy%^cwECf&w~c=L^1Ec*@9ta-!EE z%5Weg9rAbtj*@}^s25`qeD2HVA2V4c+e5Sg$kiK5CT6=am@TESM&Mp(v(nnovJH=$ z6<}HOnG8uD@f4F*1@`82;O2VnU(Msc--G|t*YBWk^`I$QVcJiiKt*v*!!saPE$%+A z|DMU~67OC6EPMwV<8pMyKC0v9jp)S81XyyKY|lKRFp_-)E6e_ubTPuj``L>^!q9%t zj~>gw|52>l!VXx;ATXGIB8SH+Ffrgmbp#=48f!hS1x4bH&ppMY0`{-5;fRyz)#x!o zXV{D>y92X7n1BPU-dLRNC_8b?|8AEil0CLfMXz>v>*QJ`7a6c7$(ixevPc-+ zUF`B){1l6l*4a~A}A0Q>nQ zJh(ciA+4JF1s6?zDS*Z%(mR|UC{Yld7nwWjq?&N2k^1I=OVuj43=m=HE71tc)_^s? zTITF9(WOOAFO5B5EBDfao8ASM;BdgBI*Kz%R*gVBceOGDWHdG( z59g59&%2K$?cHuBZ4*ZKDc*;#L268+{%6s&5>$Wu&@7O0urO<+5*gzLf+BI{WjHUg zS1qF)*a zyd?KS+LeD_;^RP>;ahqyC_XJrnQj+9Min-oaM=-=td!S90rV|3kCh)U_kuYl1Ta|$ za4|bE9|-p5s$%$$+cCis#tQ88qBtu+Kil~(09Jf!&hj`i1-ZdJZ}2V{j>P9@dPlWA zD}3N3GWa8Pk6aL0%g+x&ae=-tX*n5&1fzd`eKGaXq?s&LW6a8_vgf-uyE0cMY#7&*Bc>euBU`=($zxO9)&8zf$=5v}e0DjP_gh@8pco#N{% z+~16kI{tg)_meQ>u@{r*ljaowNTZoFewJq)()##Ef-JsuudH@W2QWF|8u+j=H~)rm z-JfNu8ms%`kzO!$6FEVDe^Z?!ZXY;t&AXHN89b2WO=ExV4nd-o6hOz>9DjE=_h@?H)%_B z&sE~-0atNE=N`T&2JK7(n2zP!zhGnbKTfDYdMI0+T+K+Ugs9XZ4|4n(&cy0>2T%+W zbe*Sw;B8auOnnABryEVU`4gOZCj;TZNhe%t8@o`Cu>G|89|3Luvk>?H_+3(Ogw)fl zR2~e^Bi^qrJDV<$X!?Q#LkR(p%>8OpARN%||4KxDcYir&06B3LN7=JG zH3%a?_TcD?R?~#ZQ=-731e&Gq^$>ID<1LRP2z6!=2hZmUb!SFV*|AaSv`Sw0xt^HO z_1x(DFe^@-PfcCcc~!i#CMv1{RuPZNCM(==PS@G@K#BbQ;r9ISdL3XKA2zLA%L(BX zO=FLB!{y$BJ!haK)xD~xa|Ld-e;vHBJWx7KKf*o+@8QPVWgi)jv1`m#>WL(rdPLs8 zkWf}3vJATbm875#?+er{mTHJVLCgc>I79yy}Dc~hS;!8qyT-4EAHz31z-BaB&YM{V4S)lf08-k z!>lV{eXuU{TU|@+EMzV&x7-DMEnM<3pB+T*#%t}fF1(Oy|Q&((EsV_w`s~WXa@GEdFqJ$B_N9 zV=5W#;k_D~(v_KcylC|OR))e`Wg}xDL|)Y_aep5usdWL7N0>eR$Jh z((<6W@t~P23R9+X0Xm4!+bw>m|2&=Ug$i2N#5f_=E3%PLu>k7xQn-8SzQW;jPgv-ss_6Q1j1X&Ka-BBZVv36211 zRmNGZ0^>W=Vr-;}(Us(_Fp!d`Bl1M5yCn!x?9-(nDoRLIt?)2;t`&zPa68R-3%q(k zgz40UwrIu%;;w|-HuZTOX2PN`C9U`9-QeeQf+eJ7%Su_?Yu`V ztg@_UySR4e)ZzuVo!uLxv8aX0LC(ThKPaEZTl;U(Eax@eeTtK~CBiNRZZ+F69mmj8 zv{QW7I@DucS)BLV9@Jg1!Ew#dB?tJ#&j6TPxUy_q5<2OA1u3P#A6|mUd1`FvT?1vS zpZ3UZnXKLHXfzUBc-azVW0LKbhwnOIAut(uTnSLsbznlNw{!R+xP2m9I6fks z6Wn@JiAoCftN;M$kN@o7K@aWznw5awkox(c&ZBbCB(QSW^)Z^d`m6$!Uw*j0>bhZo z0Aq|*(yfG`wAm7xY`jLg|AGoOUI{CKB1yJXWD;}cAISIbjmN(Y(*HG4|DRvHQ$_&G z{Wxx5C82R8p~*{%YT=%5E%2P$fI12cUgbBq5;_S)5DXG=ioM!Ewf0q?aOZ~QZy#vM z>+=b*_A@8E!*sZps6P2Gh9SE+*Ly;j0xdySNQ9N59dVKL;>7Nrck13nB5eRx5FU>s zsr6iCRWT%YtnC-XFoec!8V+9nZ zX#xF3`8)Z>v!8DN1%!mX%R^8^8?f{NW3o62@6Lvv>!bugfY8cskWo;lFd%RYN&|rE z+7olK%~35fUWPH=n<^Xf?t#{$aa({hC$BiVY$8G;kum9m-_1Il;_?F?pOHAo!@kMK zKG{l@CkRx$iT}}wC6iz6zy~$p5YMq+tjV2(OjdZZpBKA8SCsk5WkPT+`~{T>vegZ5 z&$Gf6-t5VF@Uz0pULd~`@NxV7Tr@QHk%PANvy&>A-wUz*w%I?EOf#)+87|g|# zWQ>dVD6@csnQc6Y6W5d=uiKp-3W$b3o(Sp!ctSPPxyj`(f7_erpa;zQV@4FN+o(K8 z$R5E-pa5EGJOjm5CvG(8-IsMzkRenX5QUOQE7bBXRJ=~Ewnf~< zXS<{0qrv0><{{T9A^)#y_97dZZI8`Vyx)-|GD5XpJ! zd#=Oipvp?D=n43MBMGfxbSZROmGh&OlvKuxAU2bJ&3uAJVV+mf;5ignXS3jcAty6L z6BkHr2%H97mH|NKvZlLFZ9J6Fo8Z6N>Q-i#|EDcwyQ;j)bOk}|c(ua`V0k*z_+1&V zsL!5)NcI;j0$)>!`p) zDh_A2=<%Oh0A~~1eBpN=1eEo7q9=9~lu;8sr#@`Rz>wg}w?>k)&CiLKk3okrZuxbz zQU40t3#gpQ`*S2U0GKJ)yY{*venThKz{J<2wg=!>+A3((a@<%9z0KQyvM!v|#Lj0d`=_9!~umcQ@c1Zk| zIe86)0;%D@p^a7qw01Jt%@F;##*J=?C{2E*1~vuoW{Sqc+k!|%MEIW%2ViD_iuxJ< z=tFs@JoW4Pr<3!!xPb*aqE?Z$#*b*7BeBv!1{wKkS}`C|YW01(3!6IruzK^wg* z(19&1YXkk-#~Jaq?kH#jS?}w+$edSlaI|{{CCcBzCVggUsqI0dyaOaW<7>Pj@#flC zAM!|*TYmuUEyS#kY5{a5_8STb7&*Wxt@ZM^Y8d+#&a-K>(b!@8QIqSOTC*pmv%HcN zY>K^C)DQtpW|(JPbX?vd0NgaALnF*H2tDNgpkZll^m4uzX*CUzh`?EgP#(tiyAQK_ z{2B9Yg!RVL@c1LN$ z@iM(vty~jBLHM!$ZFc1C3%XU%$RvYC<{N)k`clPc$r$smYlaKxNWiEb%wsbcAM0adW4GxqJvTj{6J;*@ip6J9W|$^ikM1Pc z*7EajEvzhnRHy7B(jWjC%T){z;yv>8XM!W-BlENNgW-6t|MOGY6-lu~ z$A}E3e_mN-t1JK~@{P+mT7&?b6$nX!*~)O}EcsYrm|OdStq-dfK*VjQ(8iIMh#>tX z^Ml}JYP$K(l5Lk9L!ElP;J4tYZ_}OVmLv?6OLK1<773t20>}*E@u0BDSpC`uiD^m+!jHv+w>uGcuwR%%N~ph`jjJ`$YI&JW_HieS z>*ypkNUncP!XuE#Bjg1f`ABy|MNds8*Wm zv@BnvZQbzqO)y;Ce?}9E1<2y+mKQMle_s;sX!GQfPt?TEdY_7$*dqUSD{H)Z3@|Vq1)00y82QBlC0f%QaaX9MMGY z?w4>kw&C^)U>~vu7x}wr1SiI=i~Cch_U&{VLVT{LD1a-cLTJ2NFun2Tj2X|Rd`!TJ zDAB|VLnl6jjle(vgL_w_)}rMjcD&=osjS`UO78$>9>;^w>C0d&CvYQ9WQCyZ0XxC( z#dm{UUp8=UUhjgiO;_mL8JivyZY-RAh;BL?N3c?vP3?_WekQzDz-yis^JHv@(+{=ss=f~K(n!3c@4f_ zM>qp6k0l&uHjJkL6`QTa5v(G65{6Z5vsfo2GUrFIi@R|r zAW-98^v@77AF-1w=Ifm*mawn!wpPnD^R=XnkTyQ6BWmYW8y1(4=v4YfSFOzg$~A>} z3&f?WQ>IrIUb{;8`V2g8P3l^dg*L|vLv{^^yMhrNXW+WH3qU`Z`vrI3y8w0zNLhgk zT((F)>-F)sdJ02@poy2`uy+BsE`dp#aBrd1*hDI1f7ZE_N(Auoi~k`VKLBuZ!_YT( zzbV4biQ=ES@Be1%4&sgPV6G+a_4I9E-$eyD*04$EKGB~`k4oSmwpUrfO%og^?ExPj zoN}l2b}UlI2D(yEPe>=b5S|pFQ&7*R7TzDO({elTRv01>WzDkB8<%RJgsRB6j*OXG zLAX;ZWl6({7OJXm%CK)O$xtwjE>ra9uXxb+yERKeGcnn&%3#C#n5^w}5V{i7_=yeI zCC8C>GNoTCn2ma)4E&v;s1Xc-b*;Q-sOxD@s@6Z;S9m@zmB@rDjPGL_ew!34 zIpy8Eqhk5KYaJAL_a{H6CCo+?AD?PDqgQm4nu@d?!-uretTDZrBbd-h8GD}_D&9N0||Cz->1^bakq0agq#AQcT?W= zGaRb6*`y;rdBogZeOu4fJ>p>8^Lkuc|8glb*r~6zlw51YnoI~x!ZtM9Sswb_l17Z8 zBq1$M6AU`meodL37Vuo(j_#e$jERwTQ1dK6I8pt+N1+j>e5qK?PHSou?3r4H+RAGLszVb2Fj9>tAAMf}7hI(fmivT%Bh!hm5yWQG#jt6eLh4Nd0qR zlI&~IC=qXwF40AuVQ4py+6Xofo6{k278cyJ8yB^CpM-r$@3b1=zh&DP^WH_0*Y<_6EYP7N?U^LKr@d8+rTV}^fn zw;iiTyM%Y>=cz@S42y`S)-@^-p+{Y|iIDqRrKz2Z;w({aaxrvE>)0On!zGBJ0>#S35qq-FHU ziB#Kotl=F8etj8yq_HD<5O3A&ebk`&A}!If?C|!XrFm0MfGPthW&nNPkyi({1S@~m zE0D*JBM8xL2eW^V#NlV|aQh%mF!LDBP#HF(xv>W} zt#sYcwj2iIN>19=Z9Ofu~$#+#d;t_331W*B)bE8-h^&>!APVdH=uo^i>ub zm7g)ZFq1tT90|ig^gO zpHkgf?fyBH#(gW%`j=x0hIbYuiw+HMM^gF zO}HzDiYrhmwLQxs|LVV{PqD%m?vIJd>w07gmyD#{po}003Sd@tdvXGpufF0#xg_GL zAfsE33QIN<6<>4No*>RTkZnhKX}Nz5VVI{#<}|<9B9& z5VFEd6%YYLUT94d_ZH5i2vRxvC5M32Bmp{8=eXB3Qi*zBhV+DVrAU}NZ~jPskepJOA^vIXKq)Xm>sHVqI>&wGkw*lYmi}H`L&6MgQMN) zklI;Xo>05MtKJP_J=>bT<;#}}M@&>vS3_`i)6IUSSdi+^R9uZ8)hpOGqx{~i-c_CP zKkGi^KB$f9p0A0!GRyxP&A+Fie!zTDqQyNo__cR=++17>!oO=I#yX*5B-Ic93cU0@ z{YuFmhe*((N5(}*Zr`-x&RhY8wVAA<-T@2~MyhqE4SRR$3QSiTSRbk=ky4@;BCt+?&wwwqK0TsT$SZPERTdj<@!tP$S~FU4s%}G zxPmquzo%St{3Pl5)w+Zw>!l@coTZi~5|hwqpmB?R9*-I*xjg1x_3UXNlZ8&zR+oK~ zd$m6k&%mGCgBDY7M|aQ3pNkA#I}BGnM4hqOPiCfCRH&4&eImB4ExNraI^dY=+l;Ol z9wmZ!sUZ{NC4^1u=u!?is_^}$=}@J~_bGbX8yy9mCMCT5Yu5~Y1}dfgI(tM#Kj11m zE+0i!(XvTsRyA^2`0fwtq;6EO_M~2@mvowH^Rz}N_pof2v^@EBw&G}2fWs&5_4O?I zZfk+oUoGpc8WMMQVRsNd=rsW}%!76<8hGbMDcv+8GVv>q`QmFw+TDkn*S8Tpc&NfJ zro!Qbk0OqdZnHR1kx$VOzF;cj{Gl9+plJv$fRy+Cf0XwQg@|u*3!%GtyzTL+*~>`+I!F?%d1~+7)S_ucGh9d^wIF0bTcLu zpViU^XWdn+`T2PZsYrNHU{@8>LCe^wN#92~1G`H=fmhgc>_kN9U;IET-;OxmIzbPH|I9HXqCGd$>3W0>_?n|bK9 zC$}93-&(tfB0b>quuiebVwEshe`j^xln%x23?;k4+J6<)E|rj-YkUr^wS~z9O|!o$!&Fc?xd)Ie zZ%W?zqNZpkx&>pahXH6VK$|k_@3r!QujEqS+YQW}F>@h-T|XwXCdQ`tNSRZwTta$B zu7%xtj&hmvedVwn-#F@s%qi5HjtxH^I;xEKA-tS>A~~F6=y$7R6O>D;g94%;l+r7) z*4L#yJ|G71%6_U+P4U!aZl}nuSmWh-8t zic7S?LP>BsWDQ%ExKlgAd@i%ysO82wid`+^S8T3RAY_5V9uly!hTlf2PWbO<>%S(f z|GDBi!oO<|d8ZP1DfCtfK3hI>DT$v4*AGk&@Jd8oFA(yK25+JxO6+UU5uEW9NMF@h z#pmEesGjJYeR^j)DEj`&OQeF*zX*)c^L;y+#w5e1fb4C%BLoDH-Jtt4`V6^|t9#?} zl$ntM9eDr?VGz_9ar{4~=e^@cB%r#IfPIm`=hGP5`;0eqmxXYO!uN;87M%n@?Ojky`-%{M&0^yfJMTOe4 zH=Q0Y=RD>Dn<0}K|J=sz1WSY5`5n~?16gwty-jjV&3u~o&wFl*mU4Bjf4?-fVUQKn zuUluDOk)=fDNb#6_AY8JaM8&2p*K#E9#M%ttMU`Wp*iL<3qi0xdxOkDnxRf~c6%|+^mf=E);Ai(A)M{0 zUvd5jZ(@?L#1mb!-**((vxreNN)frKR-=1SZS@cb8tUSRJ`v2K^S{`Vuf@io*=&iz zOclk0tMTgeRMXx#i9J(1GTsm3#d%$w&nYpH;gIDBJgcbtQbahUmR@j zu~4G6%fUvFy;yIp=%1kN6mx-tuu;1idc!st@9Y>!Snml*-aKQ6GCPOk1);@-P5n*5 ztyk^P?K){A=U3ML<=HyWdQ;RW4xIRpo%fRT0a^-JO9uKUFW(hrHM|%q-#Hl+T@d}x zDpl+-h{s%jhWklx5RbB}EBq#mWP^+{tn1aeWwr%X)G4tU+Acp%M%{Z8)RuXE)ITP7 zg3CohH_ivZ|KXQHffE%ohIC0Gdr39@gH7Wr!Q=18o(KC1X?e1PZwk?@a&@5(79~jo ze)Sj^X`b?=2sAf$%+=jclR&Awapiln9?HB5xV3|)^M*g+46VK`M0cNW?>M0wMEe8D zp2*0Y{%o;a@>}T(6fjXf#(GGR83YzI_8T-Qcj9jv(Ar&v2KkUA7qG{fOZ$r1I(0rq z-zUZTO?e0L$gF=tVs^ZCUJm&^p=JDqYPqHyN%iIoXX%WQ5%hO`sNAMq&RcL!TW<>- z&CE+VKT;Q~QJafP!H0RE`&Ma(6g1M;KlT&9_d;sGZlLWtejeBfoEjbI;^qRv#XNy1 zU^o|j+<7}A{X+j{?KU8X>>mAz2`e1II#@qn)QW3g$oEnF{y?Su0zUr})%nZZ8?3$m zC^}@aTDIBU69avZ{B%+jx8f1G!__q*>6m@Ba%Rtf`6L(vF1L~bwK8#^40T(5Y$wd4 zT{U$rD&qrLLp>N1&Hl7e+}rz-)MuWZpbNn-DOjRM_XX{mbuYPD@;(W%j(=xXK@+J^ z7Wm$GHygb8MRw7}V9mLyJ!9(ZJ=)kC5vB(zbaAo=!1uM(RFZfH)z{^kC>#ru94nku z0`Y`}W!xJav^Itby2fAH!P<-IVvq^3PV{~aAfaFH8&X$l36Y18YS^}unqhtZ*ubI> zXMn6MiaR*yHHWAr{*fUTPUb^W7pDfq&X}QQvP1NHLddw z-DJ=bAR#nnPG|Z|+CWkyl9?(^rtV#4e)NGez-e220V3RCTRTLZ7xF`wkm&c0-?u++kyxe+RL@uIXNhgu3>wzt@INutI#eMROLgh9}T2WYa2H zFvrJl^9h%N&?u>`W^#N!SIfMdWW?M-z%J1Ndx0Y}5!H@USI4n>d{+W(cnFIWz*`%ya<apb!H#gF4crdFANR;LE)P|A5qEh97S2Vpy>+B_U4gO^(Vwsva^-TZ#F zbM6JaB)tBLi+!Goxir@rLzyedt*>3bXPzr*D5K>x#!KB( z>Mk0VZr-%`K7AK_n`hrJqD{g;y^UUHfoJJt7(?uQ4qPX=m6=j=z$1R z;e{j0d(pw>D7Q4(zniw$k=OVet6*tX!j{@0Dpj|OjHBMhI@llL=wHL2T}%RXJ5k|p z{(j*ltzLXZ@$$|Ua2=>DUCNI4j}R<)N}CYs%X>YzWOT{%=oec1e|CvyirPtj+e2@> zReR1=)?D#zCVj(t#B#?1E%0F{>Ghoj*HE_Q@xorEh5Blp#jf}U$kiu1)3O^ zd`o`42*ZPxdTsOVD;6rB!$LE`<3k;7VbsW)GZ(Y~l#I)b5b=`rj%vM*0G zO>iumG>9k}q=<1f5xA3))n|#MfJGxd*gl*B_~*1oL3H1CXK9+)mG9I;iyl=84pk)% zHq>h>Nq2Pb&I|w$PL9$1Fv;IM$`em+c^?}?0T=#{(v#BiI0y}OdmZ3Et7CTnH$NZf z$y~!yd{W$#(-|L5*xYEGtYz+WpP0IEEAROX*Hjl`K(^71{u~?2L-y-y1;duu%Mdal zzG_6}q#8=qF0YdW*AqOoULQRy`4xs)>1e-xR>zG3|X!9NoW4VMpQ^BU)$ z7k-~%$Q*Zdeo8W7?zmv268nk{C1dx?|M`CH_f?zX-Q~PS`AQj=!$TB8`*Xx8=bb=& zKl`mO&G@-Ht}UC8AqROR5&!J5>~b>ys`Q6y1oGeZeD;}P$}Tu4AcV5(oG6HevmQ;< zxbLXQ_;|9wVlbxaA(hcT`)k^b_?(v1=6ARVQG2*janhl}^(AEN#KD!K^0Im75vG-8 zwDx8hcZ+bmsp}7=vVVPZ5^>M_9TzKGw$ob}d3SQ2A1o@PTVB1rQ95XewoogU8(iC| zl505h5?C|t67xkAxB`%)u~*-<$I-IZZzJjxd6kz;*BNiQbB}X>*6hghA5zwhab;|% zUTu(WyQ{S?Zdn;Lh>%{iFkcBV)RXwxtbX>BUrZ73CkhtkUbElb2(`u4wj}ccRL9C< z14T5?kE}dnt>~N#;dx&);RnYrF>PW~b`wrMOX_PY)43HS<`(pN*;=MM0*cRyTI|^QZUT(|)!zyj*;=#C*nWe?3>DldGS(UpIzNe@0 zmz$Q;H66Q#BtuRhH;XX^)=2C~qz{G|kcffrw?ip074+6^52*YH)t>BE{1VVJ$C|is z-%`I)nE@*EzaJ|9yPy4ZhX1=r%)5cCWI%=iolby}?I~)yU?vf4y13mrt8KFd-JnS* zcCyJPv>nMhYZV}#0)w@xFiaA2Z$*a8>GVfjs&hZ4?ovp{FJtqVv!T?##;|B+;NGt0 zU5m|JrE@L2dYxnV1dqCbjbR`*5+6Ov+D z_9@8#2XJ3#tasO$f|D3`F{&PiE#!Bqs*iNFpZe8%g~h`SmkuADPYSf(O|~}Pq060g z7Wn!5=pbvXZDTY|eGDofVtLQoHBFC+RHfzm_)`pxHz%>D~faPg5x?bueVe>bFAM4uz>@ z1E!1}tUDq;*i(~HQ8(s9`)~KM3%Jr8rpx`Fc7w5GAVUpTWFGl-J`lZWXcy$|h_Fg^ zkK>^|b>UV-layUM91&$#Xv2UFmF5V2M{CNBdCoaH2QBd7E@<1Koc-%tiADMocJWMh zhYfS?iZ?s4mp`BtwEK^hZK8Qs^+hXkv=llGP}%G$YFI8t7rh%>8RCHv+FZ4%IES-pe zHCX`c2jA9Rp@$3Zk8xfxxMd+CnEX`#=#;CxQ|MMc!xP&`GxT4S)QBC@`8kuTaNp91 z>{7buZoG%U;X`fEQ&s(kf*gZNbe&8V4e5mu->Q3$ZUq=D>zeQDZ^BTjwR(X0@u*k* zFPteIYsgT3)`;?HIiuUV7yi7f++n=G=qVf2<~0+1e0&KS=uK)|1)0HGVS1czrH_6> z@NL#?*^)UT4JPt1y{pDDgE^?RuIW` z*_g-W(;x2y<3pc>)Cv8jAXY1Jn7Gz{9gx@Z-;YY*>QTb$MiaapM);AU(l6QDx07{d zf>x>4jd}tE??u@@e_iwreAO-e|2}H}U6y4Stn*3d(=l2K(#U9#0CtVgWgtB}1A3v& z*$@Gz^e?4=qCVI#8t2_{_1}4S`?m_+c>c_3 zLH-#x0=YlyAz;${M-ako8_j);%Ik;(=B@|lomgnE5pXDz;=wu18k5_$Y$azLwBJMn z)?*sMv4%D5qaaZHPJuXJ++cS0w7wVY!aiVry=^=2mxXuKfzf?Rbgnb~-=anT{g`2e zPDcqeiN?ToeXYkyx5qNmJSF_pTs%0oc}r1z39Q>lNMBES$d`l9)%61g@z_ytn3B$> z&x~~$je~irG^NixT8~=y3mn!uzmNyiP(rOcUQusn9Sg1* zhueUX!{s`RMT21L%Bru)O0O%{n~G`q&(_2bht(8xC=i#jphX*<^lx_na$uq83t#=g z-%nE<#WoB0Qlf-oJQZoLf)vZUOe%=o@Y#%mSW&5h<_rGV!0|%#8%`!2OpWtDFyd=s z-uY)Mj`4|%E7%~5YFh;vN$lXkDr?=}XnN=M{-HKHKFsd~F!6!`V%)#ZJ0k2GW-CPk5t15wHcM z_zo(|kP|z(NbaTe2~BUZ`;3y*ka>n3wJq>mIq-rzY-{cLsj0HD6mM620!lEo!i%oyH%ykl{ysd1irYLZcdm@Wgv~(&E2q7mqL{ztG|_T} zt__|g?ezpFmQAt2KmNs(=Mh0zcs|vD}8V@k^PXFCkKGf_l>S@OK^B9byJ@{|UIBRG) z>>mT>J&E`2zds=j1L=kOtf20ZH|H+UI|?afIZxiJY}O2fi)Jspiabr__@jsBVS^*~ zjVlUZT+?cy?i52und%+W&Bt^RBryU&oMwg1bm@xNfDnAOWuYtMot-0@`>b_J*Bv7H zyA#O^4I?zR-tW7_R28_(2W}}KW?W}r#zp#*3~Xa{!kI%%`x+3HTH8@;SsmMKX>6F= zFHu6)iXA@vW69O3FlCOEp>&j4H_{hT3T*}??w~Vi&O0lwoj@w-A2B#|xN`-<$Rr@{ zQq54EJU>0o%La>~(fyAp7Yap3R7WdEZG-MUo16?I>ssVy}s`r2Xee0Od7+u~7dBL!dtCg}KH00KYUfZ^T_K2h|y!#C7L zwts=PmcG!WB$H0re5|3rum_0wrlE0O_rBVjr1kfP!;92L-oy(E4uQeZd}p5NB-wJ< zxU>lpGRCv|zv3z}Ds;y4EB+n;*cD6h#76Ar?}SoUkglsw;Gnwa6Jb0oGTv`kXCC*M zH{9dDcG((K{lSZGxg+wun6!)Rg2+)-CYco}my)2M=$b{P?f&;D1K>|9Nhw zBERgdm*66Vt<9Oi@p zF$?e5Y(1&oe0%sVOUSs_re*}?zGw>nd%$DAqN%m70azO1pC5LF6Z))ziDa&M-GTxl z?&mQ(pOD4!VQ~UI_Gg)rc7~`@f8Zh&yDPu`4lo*Bh^R*ddK3+|mA6VUvwm27kud~ttvM8w>shDZI_)fe%<-TSYJXZTu=_{5ErZ!q@bTCF z4FD$gvmJ2i#UzdX`$hOF0A0^dbw19}s$brIJ{9hJHbjF&4qHxPv)#>ud5`&t?Tu}< zNOUu8FZI^_Zs$`hC&V{uUtT-LwbWe0Jusz7Bh6lP7JF6Kr5<il1% zy=7FE+uAk^c!M-IARr=AA|0YM(nzOtcXxL;igdT2bc2+XbV{dyba&@B@AZte*WT}s zZ|wJZ|2W1P3q;_$<~+|MQI44W91dy3RvM^2JrcSV5?rqHf9y#)7(vmnI#(pf`^1j1 z%y(Cl51al6pO`uu*Rf1L7TF++eCbOK&AbEbQ5n=Gg2QwV5XtmhCHXU!4&ebq$3p6B zAoFCZ1m`_><{OCIyKG10?VRs*wG?VJpW?sBBhv#($MJ5}@Fe|BZtXUjlRbu2%U$D$ zjfL`N3ywDs2SKpmuT#uIfE|Q`n|5oI4-z8C^NDxSyqkqLedLR1VxrqOG|&TmWD`0b{xk11B)txh2@tEid3i|P)l5gHJ99oa#kOQmHIwdVVa zc?C64SH_@11>=!7-6=+kv4BcA8SEa&1@}Pp1(;8q?}R6vI;Mh-=H@8R7kzwOit#U= zdMT~1*FRX`Z9cx(o%yg2^sDMduhklkE@Wb?!ef6}6_3wm=sT~eALUT+he=xkKVD|B zx7q$ugD%m9*T~y3#<&E=M8yaCy>c`D!17rq88YXe|8w}WB?FZ z?5WAs;tvm(4XF@wZZwDE0GIMZBSx9FlziNyliu*_T(%YFf8DJMMu>lD6C zHkVY^0|cD&N__4i4$3blc{cKI6vO}M%l|tV2Bt)}f^wWsKZKdFx=T;v%JRP;uk53> z3g5g3QucA$>Y4@~@MHk?xsjv207#f7u3ixr#czHoN>Yn+1ZJIv%P574y7IV8{M>Fx zXtAoVko%*@n2tB3OCn8ly^AO~{DGA*yqEG5T${53l(zVUT-B4DHD#yVJLY>-r|W^M zA4O^}n^@fifaat1=J_?lMzn%joMX;R!Vgi|cHOpOYBtH$l#~n`rvRd6gw7gmLPfy|fZT3}s z7)a+yI|xwSXI$*H?lM8c(#Z!>x34dG+cfc#X% ze?|^)W&0gN`AIIfi$pLv_#J_HT~{O!i*L$e-538g{n~mv~=H|9Z$8y{ie`f(61$54&?cMWP<;? z1W58`-W64wMDgN|J_`wn3%T7snh%~HCEX3#eD)kV)&PblLtxp7?1`|)ktpHJctUYI zxA^F4*peqGisR_A=3biH9=zL)CipQA>PVBZLYPQx3!)@miv7jmU(+9&a4N>%r1~)I zz2oMrelf$Ua_(6EaMR39!L(IitrE3Pn$YHf(K0}#ESF(eIDBkC0L4moiLv4z@ z_#n-A*Y5|cm^Vay`H&tEJxK&z^#uFyMqTLHOg72_7Grd7-2+c;Vy|x2Io(}M*Pg8INEp=acovUf?+->zM1My z&{H>sVRi9QUWOCjrOW5#%jN*zI1bWD84?Cv=Zv_TcFC0Yf%zQQ&7Sy9&}Hmk2a|cOLNEt zXFyYgnByQEQHif8*$%0xbe4Z6mjTAEnKP9;Zi+qfz-p!Jy$c|QSqWDOWqQ45AN!&? zXDRjxHI`M9%?F`nk2#24Tk}&{gH6>}EeB7S9(f@kc!hx+kgl-6s|s-*?WRmvq(L_p z;>^%o+OG~D$8FK>7v%6MEtO!$LG=p!fp&&_UmLs$}^`> zI%nrmzWfQ|r55%l70tt${F9yYNohN(hVO4qb|t5U~)|cN;(OX;c2}PVoe;fJUr(b7Qqlh*}_9~6|F^sy0^+N|Ook*R1 z7Q>PWBsF=LmUXLQ4cYFGy$=Rw^uQ<1KNqD&xW031xZY_~r!%GiM zP76+r!SmI!PgWRymC#>E9sd8gd8$7^w7m(ZzEiv39@)YrXxjIRagRnn`%11<@X7J` z&8UoPZr71mXBj!M?HbO9(IBzj=kuZ%OwpK6$%)ICtO*L1ZBKzE`8}7fX_f3Ji|A(x za~+fzPA|j9eK$r`LcWL*7i)5%F;vUtK04OSxDSyr7lyG*lKlr`op>XllV#9)2>rY9FZKaJKPcaY)f}2ULJ*p-08e8{RTX*qULoDMoT*FmNw9pBFDDfQA6f;`Rv7rJ=1ZSTq94*PY|1hfjR|^(1BnHZ{o+NhnImfgo zDmUqj(|cM^{&d&}e^`=$`8`-o!W}Ebb0ebDNbv4OJps8#_?^kyIVN)wWTO!he@)&N zWJnBV%=oAnM+cMW@Y z1ZFS0FVa=dMf*yj^<=w`e=bMRdx$AUIJ782ghK22{%Gq1j*c9qSAVB?dxf-K_-*z_ z82{QI!Qy))PL)2s?mZS%iG82-d=AvoQOx3KJtd_16C-&BdXGNCJW1Pr2Q*g1-f0c4 zi+dlI8#X~GPdG>u{T}Kb`x*7KNW;35s~PjonpAO@D4lMicrB$NRWapPZ1 zXGIFr=e$5Kg9vcqJD6?xcZ#8?;PyXJ*P*0vxUXm~KC%J^F?*w)i$6-0+#5TRo|IB9 z7yhWPYiGVi7&~lG-HGj72hG#vl^Q8G2dx9T>uy4z zAzThdq7)2QwdhLP1=7bN54E^7W_Cv1yVMv*;p~+(SG_F@z@?8KY1J?0St^WYvicEo zIohtgm_(^8jkHT8`BFX^bt+kc3uBom%+M9~Ts4DQXFq<91kjKeVjaaUmG^Te*tiw* zYKB0t%W9hKDHBVVQByg%ej8a+rqTORBusZE`Sb&_(mob_hPf=nFD+UxNj%yCaJaRL zY(+kCgtfvy`2{eb)zPRP6AT+*ZQ$na1V7s;V+_l8sB)$lJKz$>GrZ_w(jn7`{`_IP zzO%VQU3VXMR}e&s>z;!3xY4O%*WgEKcvW34xWW@@u`UF9xb$?s3u;Wl-FT1?jrKR_ zss~lrI}1;uj=hgnq0vY|WfP%gPPAxg{psT>Q&9konS4$_Ymn^)JYB9G4W`Gsd(}AG zoF3Xd)?#U{x9SgF#*oSB zN8{#`oAYj{MF6Fn;*fs*BFfR}Zy8!l-}2`VUtf}h=hiZ>{`SihYA%DbQZA@{HLl{< z@I+#6s$x3f>PT>^QZZSKuDY45w$6NkqH{aGMW@q3lh4oPd$>GTG8hHwT{7#z_YV@`B9r zeQ#q;_={rHxVoBWM|Pg0x7MbMZy<5GE~2K|ngMluTwYT52AO&Tr(i@5dO}6JI;?4` zlb@a^x0vF;`W^S9P@maw0BtOkruSP`T7|5j^8O((X5cWCcI|=W>P8pxDN&Ki-%0G= zK;4%gQ$e+2d64>In2xSRDR+40$&obm>3yjZXR<*jlfRvQO7^&emgPd@w6{)a?oIs7 zs|BRE##e}qXcqmhi(`+qjN+BZ@ua2F436)3IJzycfuu&7{ovzXkvhheh1c?*KtwbK1qC9)eGVD=2wzpRI};Z2LLzZnyJVoHa8`RD$)U!Te3l`jPX@kTnZm zNxpfLJQ`Q_$&sQsOVP}U3PpXLucdi?)C)0_y4HY25u5AP*$+7>oaZnBgWIj82o5$Y}k9awrPymg0_j^%1$k{5cUwA_S=fJTx7$ zk_76ZI8mWEH(@x#96GP?2F+r%^IJZo#y&eVIW>(2=60_t;c39IA?s>H7Skxk{W%b~8X zh!7%D7SF<Of@+Wg)4cMhnBdK(DrX<^IuspWs7*sG?P5% z)NWhCo5I2&eJ~Bs{I}_8v+s)h5^;{wi`-KZJt-@1`;znCw(7O|!VlHH7N&YvE zr!_O-j5a2^Q3}XIP2|!D3O}x|NV-_de?K$7weEYDA1~b+OsgscbC367-dT#(n zrzhg5sYQ4mv3l*T>qG)g2Yv{X1nWWcElc7xmI~oLFjnL$91(ea^oTsy?yMH+t@=Iv zAWSLoQ#*Oh*XNZ%s1RnaJp-t zk-X)^TgaqEpaA?59-b^}ibnodtf*6T%6JZ+TanB{Y|os$zJj0c{mjqSQ$_Y>^Yo2x zo=!;wv1)PWAV~IQy6X#IPP$K$_kM-N*M*|`MW7OLdTUxr(T4KQ%v;bjIxuX1*z-E* z7kq$+$pWh%UZ~~p3Kwn@zXoq=^e;*Ta zE)d7T$Y+AW7??S+czXyTEwntf950?&OXWgW5pG#~YJ!O}1Tozf~`!0g7&5{0= zA$}XX{HD#Moe)0XO@)=8E#@`=rU*t+ROlMX30A)BRYXM{G9R*S1w${D*bBa}zz z#iJRiOkS@z$hodxYxln`(?CbZ?}VK1Tuc!^@GQ9%NX$ykBfdabs3A&?j#~;^B6A}% zXHNshDL!9P7CFx&q0Ax?Swdwimuz;!&+uz$RHIm&1#8_v?nIp(L;Fv&XuNoN2mzje zb-Bkzy2~n9;OuJ4?Z-@qk1Xz_SeFUwR%0X$K^?DMJ7+q#i?xFr35d3aC1E^=H%NU{ z!S{*Uf&M1tPPkkbBvsfNs@$aU}J2l=^j{hXTr0WL}WU*;>OA&AlHb{epKz#1wJv?v-*a3Ts8@ z(;Sq??b7nOo$y(ryNvbUDOt)+Qs&-Qp4WDvU&x=s>G2J7dGRm{k|xx?;Uh&Y2Vphq&IYlrid3sm?q;9?Nw2%u z;>tfg!9j*nYzjX2lpe#>_B8^+on&aFc%yfX*ykf&t1sqh1z39am@PCYG=g7YoR%d> zrRk+o{YVN)(9sT*r3-yI%E(O8>nzJUd(;R7jRG9w+zOi0x%dcN&Ae(vpAAcRUVOV` zD|m-h@Mwp~Sfr#>SZwTpH&@DRT_s07mU#K@V-JQyDzYprA{_9n}GHtQA7HHhU7e4c)w98UDmfMm}oS zHX~70Hs$ec^w>^Y`2g1v>&yF3_7?QpG*HetOLD3-Qu|r6--<~$P?LvzBpvQ4Xg(4= z?s(zz9}nWeDjC7)X8*`Ur9)eLqRIP$vN0dl@G{^@kF<9Z9Wb)uzo#|!aA0q}9od49PmHXxrPh_juXeHMm4nI+aG8yc1|RhklUoXqPTHcO zHGhJM`lQ|ruHyGr$-(6JF2bmKH0s6r$o$Urn>i8q+`H$pz`sEG+2oII(fAhydLk_! zv0c^aFjM@FmCGV>?+YNQ>4$|O2p_5DYnhok-qA9+d>Ot0=ZYbqC?j=OK__1f&=a&q zpM6v`*)v}V`Ba*?X7g{~JpUwAZiq+};?;b}`gaz)|vxH1$Gf7gp`Q;vP|jM6ezu~e`d^u5(T|FiJA`}s)gOppbk#{28DBXpPnr*t_~^lWc#YGw~KPCNn?ydO0rKP4#^{0e1B zq?N7d22Y#TMOq}tszCW95I5K3@@x-rcoSGz7=XO1k>Ze;$F;msd1A6=Vz}(=1l9Yj zhr&C3cFY4-m>LZLphXmZ^1>Pr5z?70c6Ko)8&TY3UnriCJ}t`^7DJfem6HC;ANkil z1^MGYG=kyKWuZt}KAgG6pkC~J7Y!aa6x0K=8eWAz>a{})Km+%|y6z7W9y^an^TWM| zs3n>n*ULdQ6l9)x*OgB)iaTIhz~u!hu-uplCMJ;Qnzuuu&KTsEPX{`DRk$l#xCP$W8EUv2$)6VW61CS>G` zNLh4GVNviz4yd6XD#PGrMqt24rI2IHq`tN<#2&%%s~5|#yH&vE*Yn26Jce0ml!4S+ zY9jhPoZ0*KG9`h|VkNpb{u}i2$l`+-2W2j%<`kzqIz9I2X$uz3hm@=MeC1RS1p6Y( zyfT8mGPDWEzGR-}O9vv|>hT2U69_uP#AKGh22;vZ0WKA`thW#SINT$E-dw*HytD<3 z?TOE0jU|<;NTsbrSUjjbfafNpr6T%2Wzh@TOhaKhvU*^qD{Mwvw$hjgo1pfiU!Vf> zPi>XJnDrBPs&Qo0HsaNtGLZ%++`s%iCAeRHUyk|fMKIJtCyUjAvk1?RX1wloZ^K9- zYqk5o2;5+P0m$_!ww59jm!15f?MONx6u!Q(#s8%HIPDL?Hy#qlfzsIS*ubn?-noR& zaJVy4)6|Jk)mhUXSH6a;=#4FJ?8%Cs{`ZH@-yg}(EkIhNuijc_;TiW!ay5iRSYm6r z9Qm>RkTM4JqcuptR8o?ymx%9BUagrD4jV0$=#yc@g-5O=mDT$*ZK`E7oHOh+sRptQ z1fdz#)HMUU^bOz`j0=OyU8LvrUX2FRFA5r}+j}5b*P(b|#O;^(BE)zC1O&8Koz$?w z*Koehjs=*qx!XfQWs7o3*mSc3`YzAEbBxdY;GT67S(4fhaenG~$0?hz0}6s_?14lC ztwSK>xqT>wff*b5=xU1k$CnVxc{UWXE@>FIYd|HY0VF~6?9LMHWf|SrV)qv<4|`&P zu(UBM5VMpYbRN_SR5-6-Nm765ZNY3zO?aXRJKs5DSa&Z6Wpbanvx4|=tB{}4?7vrg zm|+ohFw>);Y?)+JrlQ>j*aBjK!%I$CRS%JKD>pWf^#FgC0HNeQ0|ZN}5N9ue27`3q zTCoSEKqWIG_jfMQGsd`ha@aMmr|45-P=1nRc?Q!aQPBn~uoMy(Blw*R;Zi1tsMduG zKeOHbAp36Z+LY%8T1j3R&pNt})T*!c455JR5ZnxXfVJAXR^iM4f`;%1IfOleVTIL+ zI{U%BG3FO3I$FWojwxjFVnC9!?1Av=;CMc_RSuZ0yKDz<(;vj{!iB)jIdzAk)QjBqJe0&uUG;6?MFw9$fH z)9hQ12U+^*Wzf-%eDx93uVzMUu9cG4vDE}WM(|F6DAC<(l`Ffe2N3o)5f5pRBOIN- z0D|Umkvh6TmW^*g_>C#9A|blBQ=--BSZgHBSp0|zz>+3{QL3W-3BZ&oL>s(;B|kI_^C@$dUKT8q%^o&wr49f)+j1$L zz78O7e17)DWxl@9)k(MI=Lq4AxpLZ|P+WWfcE(t%+L^AJM?l|SXtVCK)>W6};qQVp zESJ}|z#UKK0<=QC;Cy5p@UX|&CS35*F>FH=@e&Ze3z)RGu-#7fd3Um$&b=1*Ve*Y+ ze-Q%2k)y;*N#5!)HpGn~kV4mA{g0}e)Zb5kmJt-7#4%i@vt)5~xkiQYGvP@~a_))2 zCBap&&;5BTw&#|B}{FdH6T%;nkraghELf-Ix zKoAwV{Hu(Ucv_1bYOfj&9w}S}YDDwZ>h^|ASvd}ui5untH=WXVNi ztZR+_@LHP-L`E9|>s;SyP|#_FJ-N1j7Ji^LAoJ^SmHQmqN^A=#mc$LnzF1)SId5l& zyodq6=S6G_hX)FUpgs2fKVC*Z{5wv8YTF6nB;R>TMtZyk%jX zG8>C;fcskdMRw-}DZW6<;~Qg2czMh~S@-+~B0z!67fLB@;y6=w6(vf9fVi>@l>b9eo=WLbCq~# zN!;`%6I|upjj~rXiY~z^?GudT$DIV^4g>O9>foJ;LP7v)X3lWfAI{ES|9%dCRUHRaO7k-~LPb75wT*(fz)B z#s_%xZn&8|n$~A96DlKrGZafTH1C{_(3ZSw0j5 zWDB}4bR=R{+)mqyb}yWB{{BY)dhht%kkcF@dwQuN_^FxK;?~mV@~5Lt<^fD8vF%n1 zi{Fgwu?5?C0+50Zgg!iTlBZuxAv**UA!>&k%&N`&)jx1ED*)48|1oQSH4=(Y>(Cny zAY$y1>g$tyM~a~FM1&75m>&&faJ^Cb**6=B4VHP5`8yAAdh~)~Bg2(X>1}~ z@a>xcxYvz6k=&Ed*HcWuS--`PUh(eWn&xX#dss*<)$4eeBWCd3pGC(OS`!LJ_eQP- z@*Ig&ew~AdyOswP9MkJCFcK^EayT`rvl z^2dOxZ9Wa*fX1`ISOjHEP#W556Y1g03DPz(c@A4sR%7GxwT)-YsIVC#c^||p_Ug#w zJRnkXMfM-T{%XIw`_FY}hOMfPB5xvreO6X2_ZT8&OZ_g&3W4Jt{g_1W{y}wAwc|ew z&wu~2Wj#d@C8m@J=Mc}QEqaM8|FR+Jz2OpnH2kCRiH`Hc0AG909tFuT;6?4J>`!p` z+F9}#q2=MeQ9G4j6)c*zBt2@RQo+U6YCm+Lil8X#L&C_!A8^2BGVm66i&XHyj$%s) zw9j8L{2U#df%l*=h62LFf&!nZ)9~%<>qX2WvWPyQ2=9 zli~W#!H=(L+txsyr5QY0Q-pj{9zv`Rut#BQRJm|WJw2tIPwbJb?8}LA1zZx@|(ZN1@MWH{z4oSg;pJnO5{-N^| zTml3{!n$MGsm{7dd@iZ2BbFwiURllqg$~ZC zqqCWU$ocgurjoq(t}&)=*&MZH-pJ2weK%DtV-7s-?5#XyfcLSPRDlJgW3iv>V?J+@ z+-3DlvPcDT79t%vIzMm(KM{sI`T{!cXV0iMKQQm>-XmltfYGQ2OwaS@gp@ zcji#;0stf4RzvZra9YhIOw%; z*J8mjyje)dXrrNqH78AphK)3nv}6GnWcR)llaKp_<6Cgr>NBJ(*5i2*nHZPG8A?gh*cbLU^;Hh7A&>lGRpZgIDGepTU zM*i|7qDCzw!5(Vgd*Ng z)fj|)MS;%IQmrT{JimTtaBBZcha5!%i6hYJ{V1Z^0@AXRY1LL*e!jB(ZbI=x z?|UMvml~E8L6+rhNTv5BiaJG-C#1f=upn_!8WcHap!KH*1YfQpm))H0P(hd2$u)g` zI`-6ntg@~$rqGe!uFaq97bcYd^63%swJ@+RN9l&}8wT-`9;CTPup8sqcf8aF zlUJI}qk9Zp(Igd}_m^+!fn;c?J3FNC9eLk~xz|RqHW6JSc)UYN9RnWlnlTp2{PsX4 z)t{bb0yRVIjX7T(@X413WU3f4{7pP#)BAz#W&kcn15~%24~caIjS<mu8`;> z|JvB)w$BC6x{iOlai~f6i@$~ifWyt%J1arLlPNkAZ^7S`0MkT<1skpB zRPzfok0mYwQ2`V9HY;$wn!$);1VFGp!@;B?0R8`-Z~6_}3SkPf0j{0mWO|D?c&K*G zU^LSj;#fg9DXSBIybs$ug^Fx{36Kx-(#@{3RzFRsCyNqlh1A%~#ohgc)bs@p$o$LR znnL9F2op-kD&e?XUB5FTmB-$eeOfx{3s25vQV@Ln|2(5+aUg_{Ft!WotntSA+!eVt z(LZmalDzsHpJjp5>ww=kj%xJlOmY93LY1xaNr~K-bEU_jPe}`O;mKDSp-_s-PW>&K zQ-49831A!WYt;wbU!sVT0LF46NMxyH$||k}Z(h_h1Tfw{Y#<+y>cMI;wTK`idiU0{3e;mSP5t=IFyq(ctUt;x_*vh)`sRfG~5UsLCBV5 z<@`F%dGX5jxd&0WBRc6g%5vb6d4#>hyLKP=F?|@ob?ZHy>~ofHM0P&O^cw|a{#|3t}hQ0ua20@%8p-6?`=E*4}o(> z1sLsPApnm{1z`+nKw*pQ`L0{B^RNl zS`a8=Uiwip#wF{LL8p(f{nM5eNxTaS{zI&a-SZbYV&ktk&FH_RL`#!M$~->64iQV8(4NnPZ@N%iDLk>Ck$Z(gpBP1MD=Xb!f$|?k-z!T_^uPwo;oxh z`HA1m0(a3nOi9QM%oO@4j)w=W_QQ3bd&G7f&E7K&_h5b_XXs=85zBA#|ao>=UaqrMa5AzMnB&%n?EDXw7CCxFc$q^1Hk)tSj6p;mdZw7AQ z$AZZ6^uZ6h4)!)DIDz-*@OTk`Sc}I97>5!;Ce95_YFszUiuD9KzF#iyQ3USBK zAm=Q)?=W0&FC@5*@CM%8Uk&?kwHFW?C$;gv{g0Q^lpGS*|6aB6c9r$Iw6~_W}VVO-2Ei=4kW`SuWxcwXixe zl)tNa zzjz5yKMww{n)pZ*Yc&^eLv3t73v^9?lO;(uh~)GiEfjre#dUheD4|bxjXqA%z3i61 zp0xZX?9y%4ETX%LVuGwy6NEyA4~-}#%2cIe*sXv7^ z%w$lRmClA+*!PO5BLga}i+&tO8%43i0m1}0N8T@RdXkb2BgmW4X_7Phd`MSrl6}OB z32j+9@LhbghvJP6Udu&aoq!9gqz{CrseW(k@JeGR+Mqow2+%MJ?@-v)s?CqKh=jaL z_;bv7EMfJAZHdX~e5qYU<*ch310U}Z&Wz(&yIqP|8H)MDy17?jti*J6_h%9&*m7(M z4z`-!eE5PV8Z9Tcg046!>{xMnWi&!n98Vs!?phxD``BGM=;r3kk!*eQr3AFkr zh6+&=oqPcG7%)F8*8FGwg+W0^q;TEY_Thbd-xKW=Vnu_Re#JJ!?CJ<8JYI`<%BpSH zL<065-5q=>w}R|-mp;@dyC7g_8F`0v30$tP30^iwy)Vg@Dzzw*w+5`e!-Y;jMC#Tq z;TLk#4u=T2M|FZp1FCr0NEuogYGMyi>MC7iMSr++`Q5KjNq1~S_6RE=% zIpq*@$?YY5_D9Rm8ql=jF7u=Y@QrvI^8L7E=_V!3_$`0_BxnfVpD|&J9Wjh!`n3g! z4DsnWGL|~Ky%p*U#d_Vf{PU#0DuS6-F#mLlG&+x|2_!7^0?2XRP-9)CC(~HZ3T~j*{-y18C7&2G#-EJ2MPhrMs$lb7Jo#T-yqF#RD8(U zC!I@mm~GCIb!Z}HmKjFKMPit%d5zg+-2bz@AqZsbh@n^|foB9B}WcVvfz`EHn0E5kT z8Wt*VMPa8q%E^Y@MF_f<%Dr$nS2qfqB- z5Er>Fc!&K4m%o?P;*8Y4`~H;iM;t?*1WdH0u=<~*<9`b@Q3tltd<%W$;i8&(AVxI-$Iko*(9(krGc|&Vi{f>TK89F?20cnbW<_-Yg99pm^ z|2#6wqssJ4iV1Rs2|TQc9zH!y#QvbLVY>_DGYEH46P-mD z$63*oy~Nz&Ch2Me_>w1t6w?cEaL=*14RESMj~VJ4T3SyBU0F=Ifi4am0N zC;Gubwn5kXJb5j`)w`Ro>CWm@L#;nHV!#V7pX8^{8{LA=f9D3 zd%HHoEdrf1ca+n1xVmT&X}+r+p)}jO1uxCvnGt48^XnD*3_I^P1ih{i8-$~3*A|{o z(Y=KqjXQhTTXLXBPNKTS9uqN_j@463dCYwYfs|?yDXBOa2 z2FvVu;LeU05y$!?EA)1+g%&dK!rH9!OH&ViG13sqvO|VxP*{Lwq4)M#)8|LLk}&HY z-O}RyIs3)#sLY9g9Mk^XFLZ;TE;23cA@dg_yvaRY7h&Oqi7wXo2B}%fdu4s#?4kw8 zUS|I$c)R0>ou{+60>??@lwNG}r$T!9^sz#XRGA@)q9Ta=!rfJ|p3@l7mZWe@6ge2v zjl1$Cw<%I-9P(YCh&FgX#xKfI@U;s7q9k4NNwjc>#1ZA-1M`Df8`RVpl9bxo74@Kp ziQV{04_1=|LZ#+s7%FraD>`t7BF#?j*0j7V?Llc-!Y`YS7ggzniu*uzXf4yy6sOM4 z#&!aPDZ;Rfr+SdsuK3FVX$Gk5Rsp0R4XV|u@@R+N1V251A?oYvE{d#Qe@xhYa*^@C z0##_L10nUJpV$|s!wUYG#7$(qas~ud^l#^Wa}=P9!}#lM4hKJrwdtAUzwapi4`i*v zx`~YB8|hSB95#hH>|T1(w$wi)L!YKyKSA>rG;gVjf(HoIP^(Be`M(Iozd!w7NYB5K zjsN-o82sUyr60ebw(q4R_t=}zj8Ab=j*gYZCuGj5@B59Or&LO<<@r*ApH9Mj2A#5& zWfB)&tcx`K@TFqZgzNG%VYkamkuPx(h&lAL0lwiS4}%Yk+lE_wwNcd>DkI0{co5Qa z19*0QHBVLQ-gfZ}`Ia?yLpz>ENRO85K54`WiP$n|v{^_CRql=?)<7gL3i(f(CK=fk z0e%f7&S{e7WEDRWQ~aqQX2v10U&v?P>z;|H%gmuMJb!NV`*ONXB01Mh^@NMfU%*2u zNyptK37@PO?nb%3!Au3g>FLyP;8l-Gzxf%;{?5N<#{b<*AD-_#WuByP!qp~yG~XOy z|E-;?2Lv!qHy?R^uuV}&7TDY9P6fincyyrA9A<7Ld%)rFWT*&FL*@D9+V(%K7KQra z=Lm$FkmYpFu9mgnac315u7E3sjo=QyWjLS*31ZI^5&eYk2D*yA$wuF z>qn}7bD$rG`T>xcu}RKxUhb!q`b#qiJ@~=x@Kz(<-|cP?fwI9u{f`mryg;B)zSBtd zG2mAQA}m65kv4+M3$@GmK?<$1^8A%{5fI-{flL|~v?w_Loounp&#o1q zud#HSKoGT(A$~Bm^nKyGpK}@qzWHb0X5Kspljsl<{H@=O=T{S4A*_?on%7d>Wm8;b z=V`nrw4y}~gWwY0zSis}c1b(kn`1xmDgjH80!+f?1~k=%AQUtfETvOdDm5DxW==K{ zt;8;&rw2^5htw>;9j!jkv~-bWjqz8`+mn~IFq*H}XmYBvnp~R=6foCzW$f@>e)eb? zS98+q_N2Av0`8)XTJ79%jgyFBv(s77k*OY479LV$^45aS;|s@cHmPmBE1Yf9fR)uW(mxmejF*G$S6+>V1e_ZdZxqZ{0a8#|;ZK>HErC|H6BAqm2DO063 zs$AeW)E5h$=p}+QPu2Yx0R6VWuTzX|j~DZ+)+F(m%TjXELDf(MA>NE%(9|RpUBi>fj>s)><-01emavVu^JKP!bLU>l z#JIe(uL8oKtmu&Ac#i^mwu>SR#mmnxS46B^yl~oV*$$E>sV88Bhi8SUPX+7thXZxy z3;1Y;oWy&fMgfg>4}bm#j2z=G)r{ig2hYt^qI#7o%UP?;R8^-EcQyg1TY(xzPn>h&ad=q?pJg8mSphYLm=-v?+!4<^I z4Ll}nT_>Te&S*Xv+KlYyCIgGRZIGI64@B&d_gUuC<$6Qj%|M6N3kLdF8a=#g2%yVU zc(fKrjME5TIms$r9B8UYpEBPKd_BMZ`sASMvot0GYCn5pruVXqQ&Eue#5VR2RLde%X_kfIilH-a+t; zZwwK3Iz(J~WlAp39v&!)cwpm-e?lc-=2`Ug8N?)`7zTuW`WzqKM2DyM{(7|NixGe< zZ4f}Ke6j!Ap(O;M0`Eb8iF0o{ z)8W||Xf@jcvrK=@?;X<2mh+0(8}Iio(I|_pf1Yc*pQ{BK+N$NhcA|d_k7GXJ#TYAB zwC{`_28V!5>dXHXQai7Jy0LH1{=~R&nNm&-2a|PP3jH;qAU{q}!1k(NT`}^VcW-|NSBCcewlg`Ybk*TZZdo;L_Up8gpoKX^5;;no(8A**qgXFA13ALRQ-4&XPed$GyQUj?MJ!hj)0MH1Ah9Ut=|Q zelc~wh^5U0OgIjX-orl+eJz~5Db&igK;il7<7$JAR_Dzh7w!$yU^2qBg*6nW30!=&IGaN zs@*sHn8*A4Qu|CG9I>9X0`tkv)WQXos^yWlDClnWvc7kHQ6B+cqc7+D*utJ)IuVgT zlbN8dw=FfTwNqf)Kp_#ILH$YDs8m54Bn>j$Z?0*bp4--69I)5T?=zUf+Ru<`m;4F- zp=qEi@}(38o8&qdIn!s%(8QJj_xexZy^N>e`#y+2v*~t57ZsMx`&rN!_xV^n01>VLl zss&A*{xe?4tvTpV?r&wS-Qx332^eDJ+5iTEsJZ#}aB!g_0dtI#OqV_0mg097Vo}DH zkdBD@k-FH0@vUGuyl6t9&!kNaBgdkedFT&Enm5sxy7=m=FAmRr?;(f}GolIhfcM#V zAXLwgAl`DCNnnzWj7`T}m%wd7LsOx)0(PCZR_Y*nfHc;F|wBhJkigyyeJ)W)s%6iAD{PZrW{a)7+JS zJR71pD9Q%n_y)IL)#jqYg289Ow5#<#cZyDkH$|FSiAARBYoO7q zKmh*her%vqc%R9XO5S<$u8U3ytFDj@y-I+t{}L7aN}3Xa*(`HBS7KUzOldm1{)F5S z+3C1qs%JWFtz-6u66zaJTsHpAr9(3J&<#ADpBw=h$ZqGIL%Oqx!=7K8h8<&)33+h{ zY32EpfT{H{|IyY#`bDXL=zz`YsCJ8a;S6%u8)cO32yz<@B>U{b@QW{PonVLVK4??) zVBV+aspc=bcus$Lh;=_olqicCpwc$w%-HnZs7K3u$$B9K#7t*^(dke7WD;<;UkxM+ zq3F|-kcD{1R+(;sQ_y9p->tLgc-MV5b;o&g_XI4*=vuGE9M0NC?DoZ$gw6O$g$G<# z1K6(Act-ccgr7AU>oze`>wr>DXYgIV3!8SM+^E$MRU3@D33tVh1~F(C9&F%NYatIM zmA-@n<-argHV`5AtF$p&(vM$jJ*I$-AdK2xcObpQ5l6G(_<0CX^feKa4s8z{f7Cy} z?60r=_aEe6(T1X5R-ycn@p{j-fD>bkr5RHvagH>^Kk)81+yUHnS6*d8NCf-rq9Ji4 zdVu6WDi0vW3^#Z!2LIjV&wLPhr@1 zW~ld>GUIiO3H|zpTb4wINJKk&h%Or0`>{4{BlS_QUyGh<@8bTL(q%kF9t2xS{c{SN zQ%QKnTLF@R2YNd~>*eAfDKyMRi}mX*xHrp|JXBj3_v6P*kGt)Yh3%4wde+W_Jhtn4 z$83C?D9a{~st*@@`$O#>t-r{>OpQ6ZXEGGww>j3%*foQ<=iYI4x*p!VzInFhS^Ued z>8BUN_lyxYgl9n8o9d|tJ6(6`ZG%-2)Umd9WbVH5>4q3DlL6Ty@y`Kc+cTl3KGZv= zofzt=K~tW`5@i|lXGD~kZF;;6@E-8Up8F8BH|NQK#Kiwv5%Qk>Ms$w_qH%hIkmPv};2z=K5&Y8Zlje59(^R7zIarGhWE0giY z&*y1wl{^n+N;=ZQX6PgF35uu0U=4@+w7fGo+alLQ3aNHzn+ByMj~8R>&m{2{59>`b zzWxMgLD2ep=9J{~g%#fYd-yM_bt+YvVOl4@bi2ZCBshe8V_q(z5h^rl#Z)1#EV>A9 z=&kvtw|44n?8M&ndO360hf>>Ltt(q$ZjX19tl8nyG9F~oo*|q`O9@1~+~?k|sWU&^ z?vx5!Fh}w5ae1h8q9dAGW=rS&eoA&kj2ZjU4`Qwzrwv{|o`{Ol_%P^_A~1eDwfZVd zhDFI^CUN(H2sh$jky#t8Kuu@>ENu)&Y0PA;Qm+>&N@+G*0kmKmOo(n6n-YpxJOI^R zy<7U~&w7^^00=#=KQm(`+!YVkYz{0VY5^*EZ!jk5+&#LsynEZER-zj_x0wliM1J{` z9H@Ntnm&^FaNnzPsu@`R)ju*Y8SB3R@dMh6iF#%Opl~qe);Ah0`xHsT8j>6AqDI)V zyn<%UxUGHV4PF`8WZYs;kwg}M4gY8FIc^FBcDAq77+=R`DXz553fSPC5fe?&Q1=y`z%)q5tGX&gk4YtzBJ~>$sJE0pI?kSrQz)Qzz2QQ)z8JHuW_$9^sD9 zF-{1rOzA0S!LIhY{n(pl@_dXtFG zLO*ODAnA}GZEh?yk@)?A+(Kt0O5roD8ON0*XVfO zO$z(D-Sk)gM26DIxZeBDnm3n2X^=*}$l{bJ1=__2Qr~@)=@ug;kZhGuk;wxsNcXt+5n5e?@S(PKUrRl^?`O2(|)-js; z6tm-eE7356=QS3GSxC2>E{&p@=XX{RiKwbm-371Yx;|ZH?G39@C-E+@Nf1xN|Vl z_C8I!z1Kz=vV;h7@z&qpmMDy0u?F5(8W5o66Z0zJ){$Yn>w8df@pO+5Ppq<864}JWM=Jr#^!e%7v zcHP@1aSj)3O_g@e4coZ`4CmG#8@y`N6@KgM#~mO+R+i^w%G2_8GV$l(!8hY`Ap?gn z4yu%PJG&{gixeUf6R>e()pNwoA9y4AtCcTF*Gjs(OHY0<>zx!Qgk0mAJ*zpj>cCjW zuNSrZi3a?#8bB*d9r7o&NEuf6o1i@Xv}1i}PN(Ziom(n>ZgI>ksBa^#Tx9IewoqO} zAG8GB(Q7JeyU_Dc3qt$ckBnTM>^U*H=x}rNT}N~p>o~~>JG|Z5wCj=zeKT2ndf24W zi$XXR8^_ywAufKU5VpVIEc-yzdJPkiS$cTTcU~slIi`B%|XSKA>=t zftGc|$Q+sxuq9lW+rDa+ap(nP*v=1E)9QK&u9|>}rztjC%ND&l#!(*HsxmD?{dpV0 zuZPr+GA-nm121Qjt6E3@;ETCJaZ^ll;sry9pCzlIP3v`mLT&sbQ8tz_XB66Q-fInu zIA1O;6o#W~r%6o>-(tF*T0}P_I(J3Sr4R>BaZwQ*s~q$^$4}Y0#x`suhJ2Ni0;JrV z4$u~HJq@1k$jS&hTpn+W3SHcP-(sj=kr5?}IQOpdKXdcqYB`l<;zI^Io;e^;WuL?q zk_Q=%ec#7gdikr9Zq-kMfi&(hv8zOl8D|;sXz7(_JJNQucjH)SeucmYCrX*;3PYJcU?l$b43aGWy{1JH;UZ3~yxhyC4Pw@C9=(5mc{~s>zfz zO!6`RU2i5`e`;|p83oAe zwE4*){-UB%Pd$8RMI`Z!^ra+4*IMP`nHCSfvoEUEN80cWo>_FE~qic@d%uw z%TF&o^IxCsAtwFhzvlbW&^X%o?a|X8om!Ii;l}q7;hl++9eamUWyQOEu~AFrXp7FH z26I$r0H1X^rZfX1$x_^uN-;xEmwWMK<{Wqh0PfiS=)GE(snq7mG8dH);~m>!fK|_)+b&EsesO}3?FD}>acsc=5y?NE+-gLKn~e&j=lU~?q`cxryTu^+#kDP8@?o#<}&cUwEl^6rHrCGZqq;% z#?eV48WlAO#Z!wQu%9|~N+}~BDDe#FoV;>4?e&1hw9~JlPU;56BuwvMVlw^otiHzt z-Ga80Z(>2)y)o@cX}e_`75hqBmQXqUp4j=*E}>g7G(w9X zXkHjG58Kcl)~k$6<^gnJZ~Lv|3q%BG{V3%rv7ap@2un?3EGmN?HZCNx6lJctP0O z=zqKbo?@$JBkWM21s7!{(`z(?{oCSJlRP<<^?sdFpRBd_#vl zXbxZ4LlnjeiM<~Kv~d|&O1&t~>bk=(%N`ksj*qobA;zoRm?7Z2bwQlE*3(I7BGoaE zlDQwX?lN`GwRk~%+Sp|p)`1F&l9+dUb-Mf9!~t`3hh@VV!o^Au`Q}ycoNs^mGo%-q z{i&SQ3BDi#8&oApl1Kg2Lm&N(H{tj2k07(0W%7w8$srS(a?oGgvnl3&m!$tFP5%Qj zg_3sVO26K{@#=&P+7i2gknqYBN#Rnkp-Xo_UZJt9#~sfHi`o?fE*ke1V+q?bD>Yu& zyaC7P8(s?C{VLMCl18_JhL-TM!%3!eMh?sUrFq=r&o=SSPs^WMogJl1MUm(=Mr^zJ z1Gvd#EhYF{bDPQTLdxYi#&L6P;F&Ss?fcr|5;rJDziMAyL0{|!nR}%kUtp>mk9f_k z&O}X5dEM4d(@h(>{|um{`Hg|(l^(y<59e-GZbA4Mb@EixY=rn2L^`s6Y)G_PuKC`l z1~)WzJAmQy$<4}2ZhDuFLEn4J3-=i?IwS2Cj~Ot>qTE*yt}TTZDZ<9;n9Y_{;3+Nm z;M6ge^r%u-1>K7;SQwc2=5E5%+hZfyx52p1H3shH)16yP-*w4aLH!+c-o8}XU^SX? z?5knKy^Ent)W6uY8tI*xO3<(UiYl@Zi|DPCiXy0@FpKIj6nEawt?8zg>)4B`S=WqyRH3d$*(R!i2_{kgptb zd=g#4iT5g{g6PyorU^NV)mJ+_jW_)2ZoU=^2;dG#nX?OuYV=j%Jt%AO4;1(C=W`t# z+&9Rmy_>FkzWwz6M&ZxHnmY*e*i7iRRr}+zg&O9AW)&y&CUzrt1DMqo0<#c6OzvLo z-i^FO?29efeu)oeuzrmo=W81UOQ+(9ZccxaBiUaW;Y>8^#hg(qD87eQSk%z0zn=3BwXQ;%J;1Zji z5(S*N@K7>G+9ze?UkBgD$lx$Egc;rR-hNDGljC?Gs2D%*gaqSs#+%EXE@F~shCxiH zi}-P;{PqI|lH(KKb_8nINv+-1Yy0AKA;lBHia%r;C$m<-?j&bOEz!QkxM4>T_LeK=QE3pK5@s#--X!If z1ykrRQb+#mjk#BOjp6ORX@{&AfcHB~hjw=#n41@Sp5NyFe2(gkFDp7edcZAUB58h` zo7Fnv&4(tQ6+d;Ju(*yJTc_a)#T=s@V0@hlYwI|5dg#FDj+mhdAlevA9(hF0vPKr8 zD3$HLj!0e@r@9b6rRmz72+5pQ&DGsN`<||G9KYo}-#KD{uMrCN+m958{iCZe{K#xk zz8l>yJf6*h`Xzy%ZQ2Ttlh2PoKYn!WI+i2+_dMS}J`3-Ge)&v00b>mbtVg;GvO{}{ z)(pqJ2MMa(C%FvW2F&fw0_P2E6+ET@eR6L=Y9-YlN2(k>(00GlBv<*pjB-8caCYOB zt6ko<`BH!MI+oaZEkb3aqZjMzb|~1^bumW*S6sTyl^DDpO*nNjkN4I&AsbeoS5OY$ zg0J8{c^55Xl{%d{yU?Fa@^PjOJbFPv?S5ADJ9TGBiJplD{;z~$S&wO* z2^&t>rw9tN9GwTmk_85gEVuN*TuRY7Sw>u%^y}r4mUEqn=QJ>s-_W?PsQ@>;mu&f4 ze-R}?^$u^(Ue4wG4(O+9rmc#>f;`1La;5q9(+BzenU9Y*=;nUGTS6&~!EEYRKd48r zr9ksr{^^eN*O#;GZ&gM$NJu^MI_I@y_Aux3z>bL%i_Qi*IB_UVl_u z@q&8DffonwedL==+RO&po_vj%sH8|y^E>PHFT|=o2;Ww34vg)r3)bqRfQEC-o-Kok zC5bUgw=c?9;T%vI)mkH_EL}?Jh*S5UcGp&kz*2YW`rFC~X59JxOJqV+_6H{hBQrj% z)8F1Gn3uF%7>mzAVNs6ZYqLSIR!xpVW_>vvvp!bhuD_#K6{{nvik?GM#p_;r&bCia zg)caS(dsw+N?xxXf9`@2&X9vggQm!=;JF$D5Q}h07k0fIl(LEXi;-wG!cA50Wi|FS zkAEf2jxU;}E1$3WU#Ggv)>b$&;DU47BSV{zWLuncdbj}T+-v3d+_D^iZWnYKa&7!p z@qL{qm*5`>?o|X2=S2zndj4SP4*v7dX2NlO5$!pCnCwAQD3bYmWsXdyGwf_X7Rsw8 zm6ki9aRa)-vvshmqp9!qi0|_vN6766X@Bk=3$-IDvE~LhD^Dq%AFlwFRld}nEGyq zbVSk>T@(H(jrAOn4<6-8HH0ycac7f)-d=ni(S$WBi8W? zI;7ETeQ174S{LM~iTyoRptO6(-K;qZv4t3_j6cgwX#-rzi~9xR^KbL2Lx+o|a8vi% zyUl8T%1pQ$E?0E+7zZCDh6j?X6^Fx_7{EbTv)Q2NX+|u2Yplz78!~Go?ph zP(DhMBhAyi!EiKNA(nLbh=b0t6=wz262J}9Zm>1_Il)!l3RxK`O2o=-vFnbQJTXPo z{Fbk=7E++!V{bEAQv%4;l=4A$h1YTv5Hbx?X-0Ag@dToSny~wFjzdfTqxb@52rfBe zmTsH%Ej|dorLx(HD-3a*9YWOu8jJZ2{<`Knmav00ej7oR$C<&nzACHHvN5YhQBvG) zYix9$nN`D@NDVm!hi08G5qU6d1NsUsi12MmPvWoVKLKZDWOnQN-+@>EM%@xsfy)b6 zNpoT(A=RV<-jv*Bm!w89DHB4WG` zlpF9Elx{9V;W64`QZTmRVr*AKwpOEq&J_WS1=HoQ-WeA(fPj8|1;v=5SSk z>wp+C#X%7qt}_e@neL;wKAFfzr6QO48j|79vEJ-asfzMI-Bzt5j!hQRx?OKVH)|t? zPf%?`&@tu$0mG(lo9WC3DiUvEZH&P0D zo1vC@V>a&}QxRZZUZ?|{TLnhlSHS4t7;tYbFby~pB7Op*q$bPv;v`qhI`W38JZ3Ya zvPXjs8h%e&rsQ^zfEbiizN9tLRMBoCyT)7l9tfJF9w>#)77{!Neq3^EZVJm-r{wul z@n1KWOB-YA1`QobqSuU1mJ&5>`PQ+qwUQNlr?q|on|IP~kf|@aX~h4yG11R(PA9~1YYk-11ml_sx)N#Xy$@$(nwS*d zL*1u!s2_+EtQce~@ZSP;N@n2YO%iJ6Y0poBwz^knq~rep6KpOxQW8~LUzlCkcQYQc zByVQ()lS_$PSx3*Q7A7~)=pKtt^TI99<4|sRU91{D4iO=wWUjXw9LBvLyj_rTOK&A zaUncos(`0NjEfTp;!sbI+14PE1YH9HVJInEO<+*(W=+a)O^NGLe0#e0dhX%bp@NwP zP+|;}aAPmA@ousgX<^c#rNr`TQ^+OI(kvg=RA_Z)_#8Gu zhYJTxR+jGgfH!sIB?u)n)!OC9W6q}TmI5;T|02!wBJIA&4w#rr!PUj+-n zKM1-NR$(^&%7>ZMIIP3Y{9LAeS^wd-{!3iWHpGUNPP*9E@I=$}jfT-2cdcA`;-@m~ z>8;$2%p^C&d0D}4OPa50)^e835TN`@QRnc1r0gH31-?fhnnm?+7AazyudxIHCcqIl znXb`(U>*goX+15SjriI6v+Xx>0#0ScF)v|3*N{e9E4nY?wJ6nB)tlwAm3A}EN+HZd z$WR(Ziw^mj=Th5`b}-8`#yjHgL1Kwu<@GGz>)}M^YiRZ+MCe5&D<7vg#5h#j8^=2A zrk!Bl5=rkRu{He{3brM8_t%n|4?q%a7YBl3XNBriws6gQ>CeymtE_%j(1^R{&k#%a zVmn+w>w2@9oIhuSn*T}dwWM1?EnQY8BYtAdex-}U;krS_UHB#<_R7_0;c0F0mHc}nsSQ*zW~29DYfnQSQE29= zA{9BoZj3mih5A{@a`Rz!?Mw`Jqw<8494sq@P=lxg$fMk@Z}G1%XWWrfEGjifHk>f9v z7y|B1ds;Y8)$|L;WWejUWR`n*KL6xcc?TYjr5b=n231`q%>^KPYjcC(++*x{xkWILFf5Ul8oCfA$|gFbYAKMk9f3djp!jz;1F_ zyXYb3e6Yb=o|()~mX<=KKdlm(Und5&0Azs$QZmK&RX#8_Z^^i!<^}#N?&MPdU4;~u z%U4su9T1ZfKXYB44a(UaC|XwcC4qNP-sEQ{_~m}K9~1jkqepEvLL@s&Ha2tZEjP#h z@|_2mVi0?f3sFj@zD(0@i8AJdu;ZoP!7!>j(YQFQEn*v@%b-LyX|7ba=*FCKgFX>0 z;c;THLC7#yvlB+NLqQ0$-|Ie!-Tbx=s92^s<%{Tht}kn7v=%37uZbM30c9Xl#YEaO zsV$;uFv?sXY@lcC7C#EsLzGL^HARZf9;J6%}|-KWNQPIw<4|<;ja*xX6^~nX0^)&ZmUnQ|Ou@jwxcA zl`f9eD(M|HOQMU6l(=#nXC8ZR)PGUUsJH{*%Mv$ODu#p*#Wh0KSE4WKL>K#?EyJLdX!T;TTjeFM$j>Y2}3QXydx`ri|$@_Vs z(dw&e%#Xdk5>$iy?|pv!Q91Gr0CSaXU$3QXY_f>iTASW5a9p(y^;E24yF zUt!J)_^F;BL4yUk-KoTyrcI{u@%r6+vz7{yQ31zG3YTih>^W3=$&cpnmd`OcvLx~1 z?s2;MkHr_Rb`Nfv_*Dy9g#)W-WYP=86nhSUv_yD$u1hnzK}e+Tftobt`)>XxO}%Cg zPC=LFJJ$)S3z==oNm8wYvXicL=p*l(>waatp`h{o`6BVG)B=hA*?gq%91%IRE(V82cUQ4heOx zb-ev6r{W(+N>GqZ-o+W`^zCcGkE?1`lTuJs{fkfSF>WP*7*w%&gzVL#2GyI+YW5bQ zmdiMWKmz?j;A!kQZWS}wZ0uVh==5>8B&F(L0@-q&!kJ9nUY~oj^ z@}_gxz{S-}Evh2G-p0%|T>C~9g8)D5DNlz4l2L3$9KOAG`@MP*^aZ!df2A{k$B=FX zWiYY4ze195#R)aQwtSl#y(rbXH>rpnW3NdE)ukO@<#CW z^FM;T`V|PYnk^{FXkNuNCfT+uen5;>;py(A!`&IP9Bg z6Tt^1m13;c>nvhKITs&)Cs$+MJ@00Xec|p$%(W={eg5s3`8Qum94NKU?D&fugdb&0 zJ2Sxpnri;))T1#|*2^F>B{;erH5@($We{E+KkecdqMUZB*n^oyL24B9=~f!P4d57w zR(lXk+kF-}Kgyrjggh7nV%lieePxwoL3U_JfFWzD<14`7HX9);YwRX%I?F$M0Y~5E zw>${zYy*CMXpbD@y+~?dWe|m6Q*}Eq5w6D|-=1E<#;`}=9?O$PpPR~#l_GgsX8{3kZ{WwJO4mh&2OHcK(Swox@16SR?fU<|ihC7! z*>R)tE%3Ef_#UZgt>tD1@SmG_$XQ>@XOQvN1aC@!-ypQr#OE&jwnJT(;DqcybS!^S zX>52n85YR_=g!vbcK58{X9uzNja&+53l>^{K;Z0vl$8?AmIPf4?Healbo0WrTL)gKB^P`KCoV{oa=Wg z6M4G{s*^=tw6xr8p=2FS4r8-u&m7njM4a-Axr?o^f$EZfI!=sZlUe-&_#llmdTbgU zf4ia^BoLU)5TOtX0dDK{st>0ha8@TxPWQR5NOHUu=SyY1`sUvfuYHm z-)*eud4w>yUBzdO>DtZA@?sr~j^v|EOKimC{~Qwv?%4xe|5HA(GR?ssyq<7eaW}<* z@#bAsIP16HAjY^rrW=(IWz%D;s*?H*7yhsjot%DQr47ELV|1U;8$xU_E+9MF*V};0 zk6g{-#~;=TRGQw0S~~un-H-(_PQ=$W&0Cw^Vshsnd+sqSRy%6jv2|C#>&J=K|+ z1tpdgCHM}cl{pugrI#fJQwvD(^RxDDs@Xw-;u^SgCi7+q%Webf3pP2pZb{4~&97mJ z7OOCUKaR~f1tY$ZFq)?N{Bz*ovuU3)*TDyx8Im!B?3$$VL9L)fl?_u=%>}hOEdRQj zH9ijO291=7_!=*)ekr?pG^VtH1EebV;=T48-6vqd$}b;TFpdSK)?!@b)`+4*xYaNBV#y<|Wo&@0z&rlh8|$ zZa!1Y0TT3^R0SVB%p3-sg3gM|hXZilRB-DO473V5&eCJMG1PrNn?m*vK8Qo`v-L7n zXhMRQkdqEd3mpn?@5M~*BKr7|Z&(!>{6EYzXkifvV?W>=6nCex?D2<9z^$(qvB3ZP zNojI9V%B3mM_{1%xNuEMN0|~w5=v}Q^6wwsKg$!w#}Hr@WE{}!x)7lmM$BIL6kf>h zX2Wj|a3#Jc_a|c)l>#l+}%ao#|h(YQ7&!B7hu$AB;P?5{1 z6x@Nh-1zCe%G}oPGN>^5@{X7n6c^q>1$x^BN;j5UFVi%#D7PRWQm2f7IIP-4Aiofy zGD~XdOFQX7z%=xp!(EP5V`fd>98m)I{zNrm4jlMv*raOL;uoWCyZ4(JN0oX-XHvZH z!`!~EUD!Ov?fQoYhS(eHmc^O!40we$tnn{L%Vy)=xYz$&)I>;el`F$kYAkSZ>0I|bTbQczLvbh zB?nL7%F+0g-5s05B-^7AD4d8zhCOzXLnfg7Q=CO-)F&9kt4z!sHg9YqQfdq|7yxIH zA|1=p-3$eF8-p*S*z%d%m;#-IVzUots_A>*^u)i2L3IHfl#l3UlMsd*1)o8*`hjqfhhg8g^TIFlK7#z#&3$gKOJ zC|z6ytzuI^j&Y;2wVn9n&oWao3YN6$Pr85=Wr2emHEJqFK%biH4fx+b4p6=k*whf; zxMlB->#KZ{aUs9i!edvHBQ4!Kl~{{?E*0b zTwYUoNPY7;Sgr)?iDRFuJCb7hu_xRB?60bI>jEd)A05X| z(r-AJU>2J%sU3A_OH6(6DW_-@Xo_Zn5 zr{1vTsv(L2l zcc$f3mr4zEXnsymQ$6W#E+^}EEsblpoA(nyL1v+x2D=?7JqiV2>Pb`r$XdlCsV9FQ ztiMl}KZN*5l0>a75%rE|o62MP_JjSn#Xvn82j#6MvW)2hyY#U#u;Sr(YK0{wyCzw? zm<-Mk5Vz65sqk^6)EJo|%terT*v+b0Yk#5Lo1h}-`df_0g zsX=HG58G$YkCz68>$5NgJlfgd-fHSNo;%U(fc+snrpAukNRJa8&72iy&~PLs-Q2+k zV@O8Nh1VZ}o=8*rp^$NBlK;ZB0=0}qFD}+8YF=sYo$f2?jGwTqj-tHTjMrV$3vdRc zVfc=mPOv^X1Nh%hRn=^m4c5G$y_9en3P(~|PwMVOoc~MH|35@zc*l(+v{a6sX}o>2 zj?GNd_NrDf^|xSy5(7%xaOJ#@ft!g$eDSX6G)k$t0B|*D2O+@wtlF9hR16tX3v_?p zR{6wBIH(~ZseF~M1V`g)cr`m>?GeH;EUGW-oCH{)Hn$yzR1{jP1qSlFYmZeeh(x0T zgBH*B%aHSLSs(7E-aCIqlnnr}q{NXKtmEC7TRWxR@8W2?Jh#=+2xGfk(8a2zI68i@ zoZ?VO-$k(BL@#=5xr|hbedMi@tbKM?>^pB;Qd}7>P}}r?Jp`rfRMq3a5vjF17lw>x zS{gbCkri&i&WWMRAv2)n*$2Ms32F;k!$9U_Y6{eXrC8H2$Cvjtu(SH~{zuQS%4!3f zf*jW_rm)|D)*$b$))XAdS6spMEv}oe>8@BP)-NdIrhJsC3X)_YIn8B|Z3zfP#V&P! z{>*0~;jSFnsPH>F;`lMwb@`&!9!@3D)i+`Q`*@d2YAMJPm5duXjPAreA5gaK2Ru4H z<9AVrs$$o<-oj4-9Vj6d5zFNBtN#5KQ$K8#SoT1r8GW}8?iNr0oyPK?=71x4oW@N4 zC-3*45^(;b*`yaSnRYi!*xWXZx^E~RapBe2j%y}+%#hhzUP-Rm9bg{rX?^(-P--$} zaNKOagZHHkiq4Myg#UMVh+z6&nkJ*}2ml}@Bt$7na^hySS@IIwY%mvalm^)~Ca6>c z$+^`*gCt;;@8#ySYpxcA#kj5%AXziyqwe3nMt{%Cn5-A<)VdD&<#vt0L#6|05AZEj zTicv2%mE?>6rQN*54% zj(xz4edhD2!q=`n(Z+<0( zk@5#n&C`MR$?l^{&5NWi; z24F6oviUlH|M|K@z!2EGkON#R_!Es*fvYv4!gGcnFUzLb@ENyQ;W>#3_Vte&)`hz< z$rMmU74S@Qgymo)5d2}Cz{PR5c+PW2Iti8`-^1y7wG?)c(_lnLCvDYZilAMU<`la4 zVc51b$;h^8IhWbQ0Y>y)99-5+8*o~5?7p(%TWSP0W>t!g<^QAhh{u0N9iQ5Sf4Hhn z%H{=1AEo5q%+CLPsJ`x~eizj;7gpX=A?j&d1pG91T&u_19#7ULZZruP?|&2qa7q;X>v1owq|@ltCF1=FFN(=%`YB2=j4nZY=;1VAJD9}ek!k)7Rqa$DR|7$cP7AlZpKMV+BcP=M*;^-} z*MPj_V&EORty4YS#hkYxB}Si z;4CkQdH&O$J{MR(Vpq%PaMvfq+C8|=uO4%?qEi(z*VFO%A z+%FcphnL_d_(xAO7RUFm-fxkMXk7JY3_VI6I&T8>tnL^ zAICqM4&KS4}7IBIkQhFQrZ+kHB?6`#_9xK1mJ( zY6QtM+xiXIY=R(~-BJpc4gBxpg*#I^UJ{iOki!;#r-m&@=F9H{vPtpoLkW5IsfG|8 zWOd*wBeR*U4J=0B%LDAQnZE!HQd0L(@cFyF!xklQqOpRVr34|OP;o)awh#PP;RC?o zPE2kf030iC_#sNI)S*569EdSiim*hxp#xW%SMK5?kw~T=g*vCYu>BW((X_u~H9c_{ z43CpJuoJ3yKldfgyZZGHta{6Lh0MRbE}x+*eD*aozFE!yN0%_^Id)?5uffZ^W7yu% z9&mgM$#zV!0b59afT{2TunQq{(EyePA1?Y0k?dTAg02CF-}d7ltb@?&Y#%@|MEIol zHK^1qKo0I1y=rK~zWjNxQs;#Y;3UT>wuCw)Hlig@0j}XA4 zpeFU#2bLew1; z@HkyC76ACGgre$BDZ+sMjBo4F0!G9C3*UMkwYJRwrjJD+<@qnDs_4U$!xqYzd3ns* zowHK`UVOpgR!Tkj2j23=jlyf5w+z>DWljU^TAHict`K&YXM-}*W9EIN7>n2oogqH) z_oGQn3j=@`%1~ldADTO&hX9pqYb{Fgfe*{WshvYFI{fiBRkR{sw(rocRmSy>nJSeS zCOQ)h4G9Ao-wTuM0+t)b%%J)hZuCgD8S!)*zcY0@&zvJG6I#JH;I61p9T;niEoGTt zTg=$p3l{kdgF)u9Ya&zXz`h94$d@a!N2`HAFi3meajxIBbP}9 zA>w8ea^P0UFnJ3<;`qNY&%a5;(m_}@U(h1d^?2zTe?wnnFr&kAk{bxYVB;s4P4ZrO zqymVPW=MZBJ5(nYDCvPdU~e=w`48!g`T*$AD#?^Mr(Y~h900PhBT{9+X@BJ|zyPIW zRgGD=;0Sxq;$UeE@4k0s!VpBMb1M!~d{rKS;Pv;7;q7c&rTyJhvjp@HL<$R&zk#W7 z>3XIw5I9h4w7$7|<*Gc{vW~m|MBAL6sWEVyeo}0Co#kvH3P~a*PsC#s{D$w1QRO^~ zN}%*C2^=<*O=BMomRHQzZil^%<-JBN$X1+(_Z#?j9W7io$uY=O!mj~XE^h@4et-Y= zhTLV>!L`oIGOc`}8B8Cpf_(x%z_OO46=8KTDB)dF;#+Q=bjUkV%s4|tLUbK(rTK7u z@6FX&{3G>MGM69CBZmw03;En0UxI61-)a`|J7FFRNBJ90*onY?@`6$;=lm>3j)5ya z0ZEK~@Tws8_Aj>ufCroj8>Nvx`v-=Rc9tng^LPS*?~pxx$p_-|7;Rqlzj<>1TJ%O= zfrF`c?q=Q>ffk7vyC$RenB@F*vbPg{tCdvt&z%+nT-&T21i_$9w)*^ zTgkU7Mg0NqZ~{Dl_rRS(H!#T5d;-H(rx#}@iP6_q#>&4^HG&?_#kn{FjX-6vT1KRZ ztj)F~O!Y?kfz^aF8s)ymfoXaCmI_#TgbWwzaB|hnzN+6Id7qUZ6p~6`4^37r*3oy0 z0dDa+^1pA}RXnyru|*srPB>tA1l8dJQeVxV<}F6F7tm?JuEIIX;tXoy4#xBNa?>|p zCcyji1lTqJvf9Bb!xk9*DtUwyOw;}a#i!E1nz8z05&kt_Q!r*$A8cqF@-iO42swP( zWxJX%8yUV)T#nXy5KT5G06U{T4Yp$`2U(eMt|0} zSOJ~)9JcQTv99OG3SX8S-)Kn6)h#7xq6dJGu)AJnU_5a?HBSXUE)OJ(9v8&W3KA;^ zSspMn0Avin!z_?k7KP2GJNxT~EZ1_Afd2}-#x4goH2c57_n%?-|M`k7A@K48V%iVT z(VreDa}}ZHAt%SsU;RUdEzU*b0}`xf$_cHCHWz z+XKik9+&Q}mdPA^1Zx!+8;&Ljs-E{J-@V8!Q$SfB=gzdgmj_Dqs0p~d*z+m^@-7G9U zyLLRDuK}7P{eJIeZb;5v0{YnO<6kM5!_P+%TP}U^yl>ealY)nFJz7AJ0CnipPKku$ zDLxxfC}5nm`-#>3LT z;v01f&buDKm{%LDK5@a|C0UckKgy(sgwbLdCPA}6!Dp|k_K^EGZw1}{-UUIt_^cfj zOP!R^4Jx}1XtJP&sA)olVxp5j{D)%(zfF+pk-i6L48KE4*emvocb8S(t8+dOD3FU{o*kR^Pzt(| zlV>sv1@MrQ*V8fP^=6t!Hl?n-!vnBN;h!gKiH&qefNfDLlTp0}(#w@cT4&4@*eH|f z01{_*zX*>ZF|`Q^&PAl;k@SRZnfJTkhpTrT*D44JUS!ZHYPQN1JKJwYQ$NB@1?Z-<_Ia%Kx8CF~XQpVFM=dG~=mbwKT|$Bl+LIou<}W?6qk!IXTrJUjO4rk^!xm5Ei4k>Qdy4g! zeKy^!_cMwnEqVRflF+Z|6)4yoKyO#kPF24F6e?q2YlUksS1mTPjsn(?K1Sc+M$FY~ zU3b-Y&q=T?5a3q^l+2W5-R#Uscb44?2GGvdiR3mTyIaMyAFS_y>H;39HVz)0guq0F zd7f&&s$T&+_}i#fYFqiQVM_kGYq=>giv}0xwO_pWmNSE5poXd3>=~%bT#qy3pj5_! z^;DXQb|1O$<33}mg$!}`wS0g^p8gegg2K;$m!0z4Q2b}A^csro z-OW=Yd7{fd-`x@r1ToF%c4YxmcnNt-{pO;js`kM*a<#=1e<>DJWwRe}vmJL#s|rdm z^*=U3dy$%oxIOvFq4>dQgIZSyQ%gUL6P+gC3!fV^PZRwNLpmHmY9G{-W3iB8q>A!mkNLfb9&R6$J#egkq_G(atMSgX$R2HeLQ=MP}@kBj{N! zX!#m2C*7;@daB0N1=xXjNMM*6%mlfNDJjm zsZIc|e28kkkdwJp#ug|V{yYHxim3jmbERd8j^^?y_2MGM3$r>?r?=1cw8)0J8@bq; zlQ)|_?WS zny$VDeTGz##hOV9vfs?`!Wln3@%`cA>Q^Vi39W-tN?`3Wou8}4NM=*ss#$IT#xRC- z5M4_1F_m7`{0u;pIU`-sq{rQHtw7da0{$2SABg7OxljyA4}z6&95if*Ss_6X&;K8f~+-^6Mb9H#?`1!)B<65ot!YlhHpK z{4fU-U~{g_tJUV}U&*$@zg=(L0_s^(cMZ4w5yDjg*wQ}- zo5MQ$Z5-6x1HRY7Zr1M{qp`1zKIP)al?9gR*QE%n03Z!+c1(63(?uPzxctfxt5}OE zLZ%AT&6U7p986Wb4@m}dm!$b`Ks>Yg_|4;QXeD3J`m>^2;Rjc(G7PtX3bew&#abRB z62*BE@o!JqzkVW`yl!828AKn}jK#LR(~RIC0n%Dt)9h{2!!`C}CMT33`kMhZ1Dn|c zV=5l7%SF%z;DgpFL_hk^6Rmy^hxOLcMg84yA%)x^X&cw^$YxWE{Je^N_R5Jys(FV62H1dX(FnG99*HK)SP(FQ?EwiPOgK zqp37#4}Pwr)7344ZCDtgnPL8C85gH=7a+v$O?#l0uGr3;Hk6w-I&8STrIPwTl)VL1 z)oZsk4x0@Eij;sL(jg_?wdrnlJ4%1knZoM8p97z2QJh>MCz+o7=`9g*VB!7OdQM*3bUkOXfOKywlNr|)zv)#VBYqY7dUS2v zdK!>2sMp#pIoQ4pNpbH%|wlWY`gL!gU$5&Hp?_7)`pX;2Q zT|mLoNoCY?X1C1%i8ACAsf`ZYtk&SHfz&4!+h72*+4I9;qj#|%&;!%`Z+YWcb}ly3 zC&1FwuV}b5-8~i8O}Li4FJDX)>$^=Fhk}COIovZaT4pN6tAd-w0Zs8~pL>J%{L3vE zW&y`!Z72D3pKb7Qvh?#xn!L!UX1%lkh)zxOeU&!5Zwh9=j)M(GxHvXN@jJ|*J0=TJ zE%*hv;3(1<=bsGyHMGt+7EuW`Xpn`jm5JCT$z_yj3Knud!FwK0z+CJChlM7ur4Rz( zlab@J_D%3GMo!`R1&aS3H>Hq5G46SfOyE-4#e!XW*ntfKm%WC!U%*UcZ6@6+Mq3Hs zze0ZWm`~lxok6IT_CgvBM^gd=%gQ zIV%b+Gbw3;9|txbm(&Iws^dsWk219peJ$F3*|REQR1fz-mAiJji6wK%zyi;a%YNHoxtf{vpTz zGhltkvKp5MjF5?Z_)D@FCPdngn1>A~t@l*V_JA|Tvfy^K$^$~4uJqivt+*cFAxVA< zGcfY`2aADNu(w5czF@EbE_s3dXk(?u?W5mbj$FQtFy0|&@x44Q)r%Se-moG#ECM6j zK!av+0hs0goJ!V9DjE1F;Il~dJ``z_vu}dU4_^Rd!yE5o48|4rQHxV1z7Vv4y+N_V z`6Bt8pxlVWNt|2o_MDHLrbEQ*Vy(X2%Qzb}NHRqc^QwZE0u(#=h2U#{J#A+dp97wUUJ)g_H6|9@$uk|>GP+u5 z;~JC7)%YMTeg^Oy!)$2Nd)C+mkl0`?^2ehzqd z6yB^QR`|%L$kXNJ?ZwBh59x9rYQO`-HY3(^-`6`t=o2holkH`f5gqE`DSa53K-$np zWkZFX44jXj82|>YEngJ?F)79u@wuC&Kgloz9&G~I@KDc$dbz)yZEIvBaMbU@J1+@b znlAHq=@9-Nc>XJN{I~BwW5IH5$l_bLt*}Wmm@OwDn4PBum0BM{PLq|g+b2^AUKY5! zpjFedrRlK1}##(>i>h2b?Qd}1t!v>$2Nact>!vY-1ZMcQw|kn8dp z`MTb*90!01oy)-$%nK*ic~5kiIHL9GAI!$V9v#?Hx!{UV0~mBCATm#v(4x77xDIxw zZr~6X)otfnPZXzuj!9Zto}KB+0(e^;u$0QM1HUfXN0Jc<@{iNNR+@VCw!;!RnJJN^ z47a@Sv7+SJ{(>QpZC=&HodjenBxi#)T$&(Mm_DbQd5wk(q~j}VxUmA1TqU5iq&=Gg ze>rZeO0%$G1&OiF>bv_zvoa*Qhh@JZgouBoKd9wwK@P0Dk*{eso`^|dzt5>?_%u}- zz8!0TT2cV4vK`hGu~t_OTqnP5JVQ#=8|$fTc^&)m6dL%rWPD!jmHD0IqVh4DxXq4@ob2kIYM1}4uvn_&!7tV zns{ulo`LF#X3Yy4yXsWe%Pr9N#-KM5ljh4c^DFc8&jF!Da0Q*f%Poe`a(LrG;h@O& zpUzxRj+=JL&ee1G^^clIO1HB!VFhzsEJ6Miss8#*{~0v?7Ls7?_laL601XzWEP%fH z=0p?QHs3i((zjaS2@uurg7mnoITOH2Ju~SH8C<|1;{| zfPHXPmQaQ{pxbmmn|yIn@})3eCfj{2C@J1RC2Uv){e)6FrWkZ6X!Nxx*)<}dA+ORl zF9up*Oz#OE*`E>(;G9VoN;5_c^uC9LmTC71@5AS!ST~-GtIZsc9og6aqM_y49?5wJ zo=;Ou?w%Z+Feaz#`7{mI_^pcTDt-X=MIi`SY4aeE)_nrZofeDfu{;4Djg1fAFo=1S zfg?Q}1%v2oR-BHkex2)347nHwe0V27R40jMnV36Y-$gPGZ;m}nMnA9PD#$NSocqLe zoSmHVt?r}W`BI~-@J4?U8V}vF0-{St7|d*d@aNvgD@+OsYUFO!(&s}2?d{Oj@k zFW;#?|6`NW`)xGRaFpFp9;MZ|;Ahhj&b~#DEZXp8R`3;czW75JCP-63ElpRl59`>S z%|bBG|Irom&tFU=0bCLHuIyuF*j3<@N*9@hq6H7dUmh${otJ&2R>mp~7(Cpsp~U}= zf4)f>A}%*9d`k`z`W^5y3F+sgd09UXjKCLjoLl zdM4aw-ml*#u`bO3<|wV_>r+EtYNk4?kT*vTtx)3h*EYAvEBzf|Vt$HtbuXpB%6c_8 zL^l62@Um$2A^&cMnj$YXm6D*SlHiHDPJv8g1XU@#ixiMk-PA3|O_|k$VChr_d_yU` z6UGY+!jDwPr3r@3A&UwvmG0C1sw-$aRGRB*k3oGT*K&5s;b2gh#|pPa0l^12XZIWO z@-2iauTLg4e1BZQgT*N_Aj(05`0bV9R-)zCG0pgg!g@N+G9jz0!>c`04wOtFf7qe{ zBh&G;%~U>nB~V0u!0o)X_xJxHB*$0>IxZAtD*)qkz9r5lh8mF6&=vdsld}Mxu{?6h z>&*ny4=}=HTh(k-PODcRX>dUGg)oL{xHZG=xyjS<=qo(raN<~v&`j;|F0%g3)k|cU z@lq{Zd@4$qG*{#j*(aKR`(QIOGoS(wlb!o);W| zp%8F=IA98j9DM8ir(i1LcH9q7z7@`pL(h(AZ19w*C7H0 zf*^{JT~ZMzK4jSp0}QI1PjMdBxHp|0o6`bXqvnOdLTg3dfU^bvW&v`d(lM}_p}Yz} zh}pV{9W!)@LVGwPt?m;}Yjt~mUqA$I15SGsEOPy-Av!t^wtE_a#DR<+sE+PIy0o60 zW$5?*_BX*^h}@d|7gZP3^O(@rIxaB>z)2FD7f`*Vn4!=U4R458@Jmj;R8<4d3Iw^i zI++PWX5Y)a<9Ghjz=BQATnoDOz?{nv8^RMp{&x7|=EU8c=ByP`t#CME0``gug!sA< z0ry-GCg9IV19jFt{oD0#AYp3w1Xg1|Lqas1JpCTHHPV|=#)196M1{Wuj%Q!svN3Q9 zr@9+p(Ta7qMF0e>Oi^BKaAfW4!2q*!Sf6^X zzTciKGi}UiN5y*f4F(5(cehtIyOU*0yjNRbR@F{h(-HGDupU)*;K*%;QAYm+l*fxr z>rtC);L;;7EV}nfw8(R#=)~v&=;Z;kpNJ`s_fkPwFYrNCIFM$^;yrvvaFK5H0QJ}p zS+@4e%B0UW^q_6*30U1@ymank0-X5pJ}9u(jDc!iUkC6f{dUd%ClLSyM?j~mK7lz3 zUYq103pNq-k{VdKWQ!SB%{P*wMd*yzp#C+d2g!f8{~Q>*wJXXs9jxJviK9|RLlVH^ z4R6Er!QfBf8Zz*f>1Cw6x!Lb=u{j|W{&N_{&_Gqq;aPrsG&trPIS7KxeYoqPP47$e zKM;XBoPtafgf}*$#(oY^3Ijb*4=e=~{-Y{5FbIvuBQaR;O+p}fhEXex8V=<{)(_9< z@FzVjxAy9@rYh9*Wb%PtmWMNGMVV)#38oRMYefF|3qDbf1Mi2vcSgMP)FV+7GqGrBL9+iscE_pS`#PCq9*5&U<%=Wke9nN~{E4X`7Y+L=5&eHj-Yr zXDhW`BKYA_+XUE-To?@4BU0bv_avUH*l;Zxx_=*&K@F=r7uJgvJ`w({^DSZKpzxg@ zd}Z2ovZ33U1{~XMe0X)e9(F{>0N&Ex0|3388b>%P-wD6a5|#$@rYo(6L>0TiD5m|a zyokgixq=r(&O7rmA8C*m5adNNa01;#<5n1oYedzu<%huLG7gt@`ID^?DWCzQ++sf@ zgO7NWeY4C2C6da}>Vp7s4Q&&|N#c3`T4#-WwOHT?kSV_E8e>e&z#yhH;cX0wY0>G z#`M8Pc9(&Af&H@-UYCI@q5Y$k=Qw1DIAM}7f=$Krhk7+wcK3tQ(;tN!>(DOA4-uR0vSPXrUn5=ha_Bz{(nyq!A%~iyw zK;*~mPGHT%etQL|mom>Ii${!FSpCV|QavB2563hOmrj4pRI%LsHiscCsr5d03=Iy_ z2{g5<22OXBa?5*3oGw}~v?xaRz&L(;3zQ;3YHW^3h5Z_^<yhfN`IpN zg#F`2L_GrhvQW@;mvoe^{8=5FEKco+u?HVAr}m?huU!dWraJ_&1P|u)xEYh z9STueoaU5DcGfnhK*S*nETzp@`FYte_(%ZyEEi9pD2n}Ufq)K_9GV7pLF`|-HZ1yGPK-`@u`YH+xK?w|MGPH`lSBn?_rxbKWk)&lx2{FvgHWs zZjLnupXIJGe7Mca@o-w)s}FQ&I#jwT`~;OI<3JO*prVpyr8?KQI(^p&{}=xIE6|8M zBS_}~gn&^h^3`+{Yu3mlf|B9Wzy?`lC`B`5YqFJ|5cs`CUWH$qu-ZefZ^?H)CJ64nS#cPMCld`#2b<( zO3YoUXyVr0sS1f0?r`juzGQA@FiFvkn8&e20b^DHa!Y-1u@NwzQ)z`bTer4QrNxid z5f3iJvfSGXnE>$EvIu!nY|A${K@zBd-M05fazE{WQMW1yEkSllnZ8<%*W@}HYKjMR< zIvEPPJccE6wIr~fmW9Xt?F7MiaHNxB5p~-SYbpktsL8wpv}%5`3enWD@%YVFpHy&p z5KDoaaLCP!~fPpZMT%chF=kBUC%kR^izS3qe)0q4u+3N@(lU@QZ&yo}uPRDT&Y(&Fgc1 z_6sRr14;H1MCby_wvI2vIH?A1&H_%&ogeJRDgivMpk#1ng09Yoy#8FNKo&~J9sE*P zImS zgwzMY=Z5ohOn@({Uh`flwFdpwq_`aXMv;}Ff=gD`P1`W{hz?=HLA%YySO)&MQ0*Xj zYGR!e#6k~~xe)1JXPOMwx`=gjKV2UDtPs#hiHLK+iP#vuIi1mb``fL*@E!PFG4OmK zJ#8EL&ri95DkBn4oiI5_#~{e;FoxW5?FZlP)X2onZJ|yjI&f68$;Liga?@`rG`hXM zc&40z5XY#!+-t2(@UMvQp9TF6vW&>LBpwJjG1Q&U?ZbitP@bBm(gVQLpWpIU<`uqYw|9~&fvz-&WQS1W)Ex?|e@Ua1q zMKTqVxpH+X>C?dWJhZqGWca2JKMV7tOCJG!IAX-?>g1!)>}7z+45z3 zryiO5B~jtN`e7K0MY@khBckMikvqNtfK>#vmPQ4b9Q&4OusE+u3!IFqmHk?- zLcmpa;=&u&Y4Bk6ySs7!W;=xgnq^qk9ScCt(`xeZ3}7;GS(1m@>kehz|M?lI)ZO7A zhR5sp89>;SUnZiK8<@{D9FEV90nOLa8hp=JgL=nF3=T<9(5-6`zt4fkWh}B7&A-`B zVtbFzTz0WD%BUjg6pra&%h=#HpYO7FYtgWHu#l-Sf<_(vv(vTsfTIhtL&gVtaliOF zZQ?IB7KQ3mimG?Y9*+7X8L+$l${9#x0iXlQjOfH{^lwyviVs=d51^1hI8-qKKg5E7 z1zM;Z0~qa0C(CawhXZje!OTP~8pV`n%X;1^$+n024{`mk5AQvtwRPgKg8o08>(|c_ zF-~iosab5bHcy901xG@PaBL!a)}iWD(Lp*~!qOb?ptjO5B(eTPq!iv2(v_gr(8H=i z;@Ku&em}s+YKuQBKu!Ex)+7snJ~JbMP1@2kqJCAv>`T3m-5-E@f?ziT(JXmmFwuVF zsT;2?+vkRzet0{Hf+WXZ*u1+ynyW{ct2^PnPXCP^R3nrvF%%N$(010+_Vf2Bvip-| znb<^N89T8mGEe?1aFjzaN#hm`g?qHtiF1u4bH8E=UtkN^v_<=8W3qRFVe%4$>6XFM!_D z3d9$iVqUNX>A?M?%C@Em6W)lbO3`_?Q4JT(sT(<0HvNkfMr~W~8YXo#pWkT8`HxoX za4SPY(DB%wobE4>x`p0LKfiIoltC7{C+BL27ob=Fs^|(rvi@^HxX1wxlj6df3|C6@ zYMqg}9p*WjQ;UCChj=lUsiwY3u$6!zAG`^tjE_Lt^6fZW=~5|p!4&&UrET`gpuuD4 z#p!UuPb#wNwPyyzR^tzx_0gh*(u91c_1I4g&PW^4ev9$BZ9h6DsSAS!J)!<_0-8Rn zNp*}rm0>%g^kE)k`rBqZK7pSPDn3NK(TGQqtV6#(BkrMfmkJ|S&YGG$gh%Bt5i(Or zFhPsl)U+i650)knQ!CQ7Q&0jyd%XR2NV3Kj^$n{5f1hw@+XdExEms1t|%jZ{) z-9nEPu}=e`LD4XX-uDe3iMB22MLNiMA|nV+K(Jyp?Whw3$BNG_V}TMc zTMfGcMvXW6;{)|=(cu~0ZC?ttx~rN*WMW%zORWnQxoC#XM8ZvfB0KGHwn8M*y~pX4 zG*1_7hZc%}DzO+&n-&mJcTTZ3kUFFOkwLRqtH7mlVNA%wumdlO#eyW9WUfe;dw0H(|M0D8FS!y-g4CiP68#jZ&J`_sFOES|@%5^N zjKPOXfpf~d7JULl=ewJ;t4y!)tsnsH^jelcB^_8wncX730Vv~(8-hKZl20+3j z;tWV+CwF1O`fO^{`5?neMJi>l)`k4&xq&*#vc#4W_VPU*)ia)Se6-GHhcRL6xw?dz z+7N&vJW#tSS^oWKVJuiYE+~`bAwfE=j)hjHi>R^m8hsp9o<}6_o@fN-gT0SZ&@Ybo z$MLwYD{fymt@p+=f0odW{u|W$TO9nKDv4Q~pBV%*RU(jv+WsF8hTy1(2rJpI@C8P9 z3gJ&=XL&d#SfmRa%?r#)N9l|{@m&lT^1U?r9)XARQ&gSlPT|#wabE%}<#3MDKF7zB zzd>0n76|x&9$RxgdIJ?NxtGkvE57q1J{0xkYZR!E1CmrUPqg{%HJWg?p8pna{p}6d zzK1~KH+jV7v_>rKC-7=_G7t<(YB5{7ASTGWt1<-P1}d{pKJ+`Kb@*=P$)tOD<3pZA zNfV6EuD@4hYSW$uMl0~CS)^{3ImuFRmz?ZOz=;IYN@svPCC>|!6m?{NfT9n`sFw5a z6(sANWw#oj`x+d3wl;I`Q;#Ntg(uz`$_&0jYBoA=uMNXe{4&m#bS{ zjB3ez+;d^^E^Qc{ANwck8#=WB=4NPTRK-Vgrl(e+@LJ8rQ- zBf1+Z+{F^Zp!s}dQd6x-JVz-#4uRLj>H6Hsb!!+IkKx5zvdk-*u=qs)@*3OXMu#FY-yokrt~~56ga8) zK-dWZC^4BWk9xb4jL?liuZ9J<3F(6!Xn!_%x=>zLdY{?Lr}E)#%in8Wu#eMfP-wCyWUl;-2o($|=j*5~dFYEs!EyDpJ;*m40th7ds zrN^_Q6|SSs2qa7qA)2+Ycq2|3!$EftR)e3HF)qhUokVC0QWO~~n(N+!!!9Iz<~Qd{ zp5us`LT`0~pG$&PuH3vrU_j~qNQ;SrNkXhr%TFq)DHK#~KgT9A0?a}#K49AJV_s+A zzGGw_8gk#8eK}nNh}R*2rB|*zRyr{%6p*r;u7CGx)jDUcT{!B;r^93Qh^PSV_ z?v!JMU+r(>QFQ$a?Ie_oe?8`ZJZu577BWW?mXSybZJOf`Yi z#~jDS7Q}|rX`7#i0(f&)Q{~iY9?NJ}`t)xdZ!X65?GNm^3_{`R1XFMICS{2ESG6Wl(-tO7Oz_SAN%@J zgB8KeclIWkUmtbFZ(glf2haQxgAJCY33`iuH*db$<7e+GaI!qsf;-PP0kiYSN%cxg zQ7-6H!0bS8=?3bBV{u>n(Q1+Xo0ALabhqOR2?=Ow&&Lh&DCQGjI4}X` zaGI)*^CLFH8%&nJ$Btqugqmm`BIcB2NBjTt0)cEZIRID~+tgnF9Sab)3>v6Cj+01UHs{a!3*-Y4(6?@JSE;b67t zl$nHN&2WGTDKoas02MMiQB|8Qg3Fuw4RLFS*yXg{-EXTFa}(W4S8r-xyk1 zDSljCVhlPM;+p&ZEhqo^JpO-wg2e;bR*hjyH2*b2P{SpbmvxWyTcQ1&Xr9#PnfO{4 zCWe=)y?nlWu2QYuL_JS+z2YeSQo0EQDd$E3yS%~7Fq=dl zcpajxcfn$fqUjemz;zCi&tKkp8rEap;SZc#X{%=N$L)ajmc&k*PHnp)&pefH&Cafg zc@RXQ^y*NI3Nrz+J=4W#>IuWn{^yrzd~S>dvY$3}=lr98Jr3LaKrPZ#1RC=a(Rut< z(=yk8R(4R}>}y*HuSM8BJ&1nFU-;t_Lo#b6D2);ixv_`Xc2Yi4$(V#6d@Qp7`|%c5uK_Qe1bi7kn)QXgGTvUKpjY}Vv9VeP!NCLSGCghF1ZpO zV5%OH3fWfGKGA)f+t;5wIk42dQ=?y0`AV&Fs^~PL=F`?79JX$Ge7)UzoD*#cun_AP zB7L!9c|ez1g`*}?FJrS2#E#+|mOt}!ed}_0yfuDtv{3{c6fL8aK~xskYV1PKaQ!IE zEPiaBu>h6=du`=P5;B%}NeYzRY6)h&8l$EwFwvoKrXjF9!)8cgw)X?f$Iqcyk5}++ zzcetF0Z*jx7r?zJrxq!w@C;} z4hSoWz*OUA00yIVZvFkJ)4jPTv#DQBswl|fF~gnAw2|-YjMuu%C!d0r0c|{b^-^*9 z$vTh2FVxF*>(gJGa0gaT!eGlzA~E759nV z@?c6K5^(?0WRs|y9HBz|-LWwO723r*E_LUAFjm z1miabEgOEl?wo0I>n&H!sbUmd4)P&;h#204(|nb7RN_!Sh0`<%IU z@V$G%S>IUs5YZn>&@R^xexaqtJWVb7Kuyi}p33cXJOl}lDpKN<0P1rO+ylp!^Wo5a zg6ACR_Z~dPdM~xW6ReVp^@;r@LihthwuE=ORko}H)`}ZWb6VB*`f3v(fhv$#2B5h) zYnByIN<}9KyDcl{lm~6&{dRDkK5VL&1Vl|V*`f(gst@0|VK9&V$_ZPZB>H@^*JHVI~&i9N*W)hVYk`Pk*~g%k7Y|_;MflkTZpy*a4A~t`8XqbPG05K0=yLLUB@JeVOOBhO2Lu?tAS(#FpT1^#c|@9 z6LwFyY{MpBRM~3FO`zBedx46=99T5SO`4nXUKAzK<(LpAQQWuQ;??*fj%EYO8;kU# zbXwEMfres(%=Gpo?n}^~Ij&Qm&;46y?X#Y`KwqLdnP{~H{-|@br~No7tIWX81n7ZC z`7W>Qi#Ju5r7}zfbl1Vrl}BZ&@7apZfWs^L*$8kshn*ez;*yFKk&C@a;N0zsej4e( z?$=YYQvZXZoGj6h=!2|Wypa90PL*xq%eIe4KRkUdu3}3wRWkypgK*FodR1E`V4Q?& zmTl%l)R?o0?3P@f=Ql_GKGB^~Pju;5Jx+JE7k5DndSr44{ z_(P(cNcpvbzHK!YsVVo)9mPZ_So>-EZ?9nA=qQRXl_&;6@koT{%R#}atTKa-!%YfQ zpwrEtEI6gyhz7#DzCI=u_N&qZ{#~6RGjQ13k`7f@GH5%KWi$#+h*qo(xAB#xR_gSq zY)|ojIN$EK3bxc$B+#%{%&^SA>Wap`$JTUM#h|%<q==f~TA2a;uUXbAg+L4Dyns11|tKw}{_ zFfXc@b;poXD7gxE*7!WG450Ok!^S(p_!}+l0fVi{!e0&|mZ8VH7;hNxdkxOz0CXu| zzo)Zw^y)gT`tID6|MXYyJ?zQo!0`n}K|%t@XkF;lWpDL7gkBSc#E%EXBL0a9KMD?v z7%*d!p!9DrKf*b~6}qmv{y$ zJI<2k?hvhxwhU9pr1gPRn{gC=;pC{_084nS7lm2yawkqiJ>mXQt4#=Z>1f~oHM_M{ zyVOTIVPm^dx*pX8272v#>7CHH)f(pS;2jS~kOe-+H;69~d_PNS46sV$m_}>R)Nz<;85! zaDQuftqnNIACtDUm-#!q%alhZ(`Iw9G4`y-*f0`DvTDuCJ1IYAw z%ITDz3|ej;JlhV5BtQc5HVSm-xGt7JS!Xp{Q|9E;>~%t);tNu_;cH(wTsYkl!aIjcJpU=V z4J1cWhb7NkhIg$)a!YPhvh4ns_OO*uV zGmK0EJwxo?V#OfYvYOMGG}6-LNa&CnX=}~(V@?kTAe)prugR`xo&*1IBCMP~Ei3Sv z<7Eb2PKl|WU{o*2{NBr!gqn@BU>M+Essi};G3QV=3-v>MqXVPGlL_)Ky)EhfG{yQp z^U(`Ouf_|rsIc551i-R-8dTTS%ngUQw72&=IPE{b;_IT?ZMs$E@RnaZxV@nqIob6+ zHe~@}k5Rww5x`1sv6P*o5no0f>Lcwi?$}4Y)axQo=zJHe5ROAFj(R{axHv(p~b|=QNg`Olfx#l+c+Sy!dWJFT2`4XogS?WOvs5BK`WRsqCE^ z&aFB}1w|D$!T4BBfB-(XS-=6|PNM>i@J&4^9j`luB0$#8P)z0Xv!=cs+diWMce^`X z*#G)|SHxvw!qT44oQHuGWf)N;)B{$?Kiq_C~5jF^HE^w#Zw}A{}!-7jSm% z6VLXHI>bXUo>=S&`%V%Upi@FH1rWOFplA+&-oP0@6uv!2@-j?OxtB>n?OWy8DfN5R zQ+l8JF1D2cuO})cVxsJhNXoJN09rj9k00q#$zJ>qQy; z`o?`JP~=kYV%u@STQ%VrS_oVcepTKP*SAdyLrU{?{SDrgJ=i{_y-^Z114n9y$ zmP&K&$F$gZp%0%%hyfaFPHaFB1y`+8as0Ow{`8 z8AflYvW`EmBbnoZFKn)E$b0M7Wz{sJwd?qCB~aPvqgM+!ORXhp-jWI)cHk!Px#gp^ z?WHvdy5ug#Mo(=K89l8~dtV6{dhy4}OuAf0x4<#*b~4++gx}EB8vt`^5)lQUX&}L8 zTiUb9bp7J+bg{R(=-w!$-KnX3EBvu|?1gb5xL1U%Yd zS^V|SyoA@;VAw_%>a^Wl9Uhzp+38LPP6bB8CIK%Ep^L&_Tdd>zw-tjzJ0JOcHNw+^ z>5sEkI&S5O5DdTJDwls1Q)Xz|z*|A0+TE1)fP}w{DJ^HjBZjJTD11X6D$Bew)z5$- z;<~Es6W$0`<2^hJO-mui47=dvv+t=Z4peOM&w%}L^~)3)M_q>E4}E(wo*t;B2Iij3JFDBTn$&L+uyTC;35r~S_NAd zYPjyMmKyDdi}L5xP!fnme~>^9iqai~wd)HSx19sfrq3%}=QGwy zj5n+*wE-VYfS)rP0tytu)u}L47eTQvM7iD{Ca}F*%llSVbKV>!W(MDU~>BCozcj^9J;pXhRAVGjm=NUlRV zO_th1u)F%y;`ICp0~tG?gbzjmbI`mGd*}0aT;f6~phWwWu|f-)P+8QteiLcUwH#8O zfmY8$3HHuY3sKClD;mfLvF{njv&!#tz;UAlRSWj7`J8RL4<=6>Mt{){VDsj|;?b$$ zX2Oz&-w|Py#T@m%tW~*q5<;P-6+N}lGaN(#{%{Di5l~z`?y9YkM5P^PZg7&0vT_GF zURKKiVpq`aWHV7566a#Dqkgb&o+#g+CRmScbp@P6YiD~^ebg6zY%;%8u>t!cm&CcQ zNT~s9;Z@w3#owG56c5>mH}n&^yS=%Y|Avx3qTb|#418;-pd5;LtozE%fcG8Y3KGxx z_p@dc1cf-prmO_v1k_D)xop2xujP5`#kb5r+-*@1f z4K46(>}OxGzu^@P5AZt!wi5fMyG!{mXVJ*_@x?*cPN~brfbur|6%GQ#&mg%QpK7m~ma=Gdbsd zb56HYr=cT7fwe9Kte!k+>7|E0+R>&T13lfH!zCZiRX;wiH^9JJBtty zS`jL2PhwqYERbqUo%^GW>|wa;bfT33@B6AtzPVWAu_6 zU#?g?*V+M{AgNZ(FWmbW!x8CkhzV{24zNSZg*BqAPpr8Iqab1mKfp#nZ>R;9k>=td zPjzw3PEorvg!;X~qF2n#G21zURMrn5FpV>bLtcTFfS7}n0;dw-)B;Pm`$23IB5$9&Q5R>Oq+vWrp#Jcl{(wHd|URnXvNze`c? zmT9g?`VvXcX*-EkN!=1qto=gdnI$M!u;KKhc#Z1}KuZ13?UcTM1DV!B{49TKt34OCv5eD!uZSm{`ZbQNwK5%n9}>^#QCPiCcTwNx zgX-C2zQNNX9X%2*@i;287HL;lECCvhn?iRW!lEw$+o>C!Cye@JTQVXtMlk z7C_Qj>(G6j#7XF=gCdFD=j9Q!LowHg+U-dR0Mq(-^OiN&)>?H#<^_C7hF!Ejj#sD> zQ-gf{T;`E+Un}|t+2CD)7evSl`o>HZT?$b2;LJ` z%gGMX(S}&3Y{2QSK&KV5!R&xyVV#D@%V!RTI%#hY^G{OztM*xsN6Tpx(kvV7wC{aX z_QyQQ8Cp##aP?XC2Zn?Uaen#pWz{&S6U){2);^pKlcyibf!b>s zPWgHa>^G5vh$YwoUA7$V#gt27`eMuPcU@CyKgTDB5+pCg#N4Je4*ojjG?U7g*HiIe zvjW%;VG+m36+TozVBpb8Ba{ay#!*#5sC#q{P+Ic}{hgTZ~^t2E=Ej zf5+~b)N1zgl}oAVZ+gOQueH30ZCuSWrj2vmRtGBD)qLN}w2f*dr*gKx1={}>cmLZT z4m>wLq))d>bNpYoL;?R zF!A`piqT;A@tuJGe7U$*7rk;u08lYAyR~P_S1)^?)ldl8PAwbpI~a6iLz}@E#%yh* z{2e`0U8Dj$m+NkqhB^byiQ{NO_Rb?wp&x`Ze2X_%XS%>h!eMG%XMdqVs65Kqf`c`0 zi+czGg9e4)nFL1XeFC`u2iHdE(eIFPr)B^Vb-}EbZ)0FI=T4gUUfC;Pn>-bAb8X`TDfqj03VW-wNgGE7hMoh`uPO-NE59)-;t8Gzv<@s zHB~{|)PF&BXL7NmoDHb7Ga27Bb&60eEv@m8`+S2*3piy+YJFp#S%l|Tt7vmIN8MR4 zKi%c|LBUo97&E!^R2lyB;|5Y9!%X0p$wp}Q4~!Zt6HmcAb{7@L7Zf%+?4xVbUw7XC z)4^F~=Re3OHQsLTE3b4$neJ}9IiSio6QWqO-qNc~dve)V4m|${uUieek^}Ud`)*QG zL=R=RS6Ixtu^2%8yWTKzbsmUxFQR0{|7>|LE%cj6WAT=YX2c^pc|i&t+sc5mjYkyiVd6RJA8*NRc;10*{1>RoL8T4EuSGrAXlv7XHV5KrdeXIJt$1N zC^TbAi#B4YC06_*S`T=ya=?0Y=F2d4z3@SIV=c0dan0)d2uP9ujK6T z`jm*A;lD+Z|Mib0Xt~@6eTlGzrWQkg#G6aRLBV^6Okp}FZ!lVJ&X9WJkvMH6=em>* zX<59!1y|Piu^?jyqT>Zz?IDfshx{Qnm&J^Jk}a;h3(S-XjHO$7z6BtPT>e7FC9?%! zr}iS2Cs&Hz8M&rQps|Di{ZcIGqH}23KUwh5_;`Hqck}r9U!99&DQJ$3vOJ`|r*p+n zvpf<555xoxw9RR}$3n#Aiq9R#f5XMN&bj))`h66?3uMrDb`D^piatJ_KbRZ9W=ZxD z<&MUkvG#UYX1jU9qMvL>Hjqj8b|x;y{fXI^Y(TywaM=-2Ext;zF{-o&tev9A2fc)2 zVgf`;!se^V!q$_9Z-UN}q!p3&V_-T|IA~VK0CG%ln6SjcuR}|RF8oxC+WKgoql>E( zKv(}1Mr(6O8ZJ}3DFnn^xK--gwQM+6cUCRrII7SmpuoYsxYycf>8;eh4<955uWlxCQ6X{SC{j5n=jU%j5O6BMKmj+ z3Cp|BE*;QX%?m8Km45X_Yq(}RIGF(Z%VKO2EMG+gpnZO!4g5( zX69`59R%C-csJvMB|hwtD74WLSSG_m*jqw5EAo}eO7&8HfDva;L7y$=vgs>f_*A|y zWtV5JQN9P1fdi@JgS9{ng}tXZw2|KL;zWrR+7XZb{-_ooFazS^T0XqdNgLFS`viw= zVH;3O{U$FG=kczI7F?@^dF=LIGY&`#Rn0nuDoD>XWLI)73XsR;0JoO^M{1|+z1Uym zxA^wQnH}3QkQ!4a046lUL=jiQX#<|?lesjVF0a@FVsY)dqA@x#XMA_s4TW0HA{5p7 zv-jDyg?-dv6)wJmZhY_C$4dzX$Fagk?*o|8!g?W~NAyMU>vNZj^7Wr3kwH42{ohWB z{mHz6WHe+h72UCD%dwyl(hSR;s!w6#|4{ZF;8^$j|GC|Aqq0H?*)lRRQr1oOh$MSP zWE3JZ<2JJQ%9bdyW$#K+goMn9>>b(T|Gs<9Ilt;TzwpIuDc%J8SkMHO69x{OQy(EUNGuk#$686{S7MvX{O-g+ z^K=G7&PFep;vGbe0jb>ww?X*6eo3n@WxVHa_{_U}99&`KbzqgQI$AZ)J(gGG?Y?}x z=wPV2lFXOd@{_DVO#aJGiM^F8q&|Z_H{S#g3_KVbtT4r2X*|SvVSyVV7H`LY!%rW# zJ8z{ECMRTuq)KlU$Ji40fRroGohE&urBy>*R1PeV$XfcMTLe5{I z9}N7m1gSyhNNFBv_j?FXu_GKOOU&MpF>z4blFK6YHIuSj8m^A2Xnv3kwBZcUA;-2x z0R8(F(9L+kN~XHd)!rl|sChA-Sllk~Ua)84*TbOUt+O8$L|7Y1yLNrQy~A8`0Pmvx zzGIwMnGqaU6GSQrQC988JHsBaU;MFC>k7nm;WtX6MPZjFl+bU^-Y~oI2~Y!E&tp!l z$L~Vr`|ZF<==;=%Ge&EP63VEV{U2j5eM{`VO1UmIQh}EwYf|7uV(>}6D6}JD$6X_v zP&!|;$Qnao9C4ROB0vas!qHAAhJW-^%%s1XL!+?a3%X$M&k;@hn-wx0UhYbflRx<( z_5}J33o8+kvuug(`0r!wQP#6bK2?1yEQN1u#57RSR6T@oo-DEw8fx?Vn+y)wK_4#< zG2;X-Bk;<}+~}Bqj3ttVNLoHm`0i+fIgK+v zpci$it1l+!x;)wBhW3;bd*Q_VCg=PQzoLy%`36MmOUG^c$F%*J_(mZt4c}3+5ok|e zM#WM%b1wxEW0VtV4h*yk(Fo(W&zRR(S#c=hV}vF8%LsC``S{M848c)+DT~JSzj*gp z=xOrnYSwF0AB643(8c%JGdAKmZV&=b#2GzgX8P-y{p;rjwv}e`$gySMP~&Wl;Mc94 z=z8&N`OSPpQ1@E^;~tD+Nb>l;uT{*T9!nD#?`|Ak-Ue2*2>@}7C%zm7rNNFZ{^%Qe zlFvIzK@1VmEcH|jiK4C-gg~ze(-9Le{Nx*)K1%<6o5qNaLlflQLJny#=GK!oO`Qln<{agQGRNlx|H1vEm2=K9fk+!X1? zNnanDLMODNyRu@`t50O@RLaQp`0=7f?{L})i~9ha zuK>&lgE8?djvrrc^`0E8uHQd+Bg0mmGwi`K*F5S^+4|=eyiN90$z>zkc(E7&=PTkJ)*Up(rRH^fh*Dw*z_KQ9i==wyjjeP&6 zN!SMxH*P^sen+{4Y{g9UaN`cWWw&;S0~25o9|(p`6iTbZK;`updipBfdrLZmpS9T5 zsGkuP6z=t%p!wxVHGEapQSvThwfpmF3Bl}Hli^DcP}K6Z`J4yF%hRWw!Ni3BzrGVk z2wYUq#~>F}(YPOu(GspN6U(>XC+E6kBtAOe0Yq((&*IMCr;lg9iujmbc|+Oc(9?MG z{bBG-jnwfzFE|N@Lf;LJAxa7whij=ANlqxI&Yij*ey#QOalj#^;KtaGHxm#m`B_xV zOgl)iW5xG8_3P23lkVT&v4v^J7Jcqx?GcJ6qQSuYH)Li)L{`HNniqN2=f2KuR5bvO zs6`c&QE&4e>jo|b-_2$e!Gf^vRP5RWY(Yr4zkQ#)V0uS{g<99Va2J~K)|A9moMGC~ ze$VvbxS%?tH}MzD9eIncvwf#)AjU)7$dhW0pkZWPoh5GcO8fYIV|ThRjt55T*la*X zkd*0@@e$af^v zF2uP;Tt-zSF6-Bf_gp^TjDQaAHKd`vo4&Lh_4nuFkrr32@UKgC9Ia2kVWcD0BE|A< z{vbbsHNzm4Z(42?*<;nvR&sn7 z#pv%y#?_E_#6clV8T|p%IscDtbwouhSiP z)E7?#bAN0lVWv;GYnD*-V#o1D5uFe1x@ki6cFA4Mf1QXi7M%L(k2uzV!D6Zi%-&`0 zUI-l68b$NZ*D zlxa$*5aRnbbKe=fa?va1$@*lU@YklUskI5=`#p?AlaS`zAUdbpQ?k-~x?R?H*pj{$ zSb$01`I0@fNx!pj|9WWx)<|Z8uG)(k7@KrALNc{8U`m!@P>a+$oo!4Q#G8$&xq+Gk zX-^Xvkz_7R2lNx<xAg4Uz^Qc=cm98 zX^A-NoE&lb!Ica+yky?DS>m}32#>E9F)D^p3j$rSjwDap-&Xh5c_*ewb;iu&r+Az8 z3~HTJ5LwyBIA7u)&k$B;4S4o0LJBAeyx=^K)!-_ute3dRA!JJs~q(%w`OQ`UR^%b=(TDw6+s5F3*J`|92-?CDc*obQh#ipPWKAO zGIlH&C{A}Q)w#%i8#_aW;=&xhyK>l`$iJGb|6rYN*FNZ&$8!DVO%OFq8HyD56${pq zMYeGBYcePBobJT=_K~YEYrGO>7=(ag)oX7;2yB)ao4Y}Of39ld9=M16p2(5$*uhU{ zT9XnFj>O)PP`cx-YG-Slolz1$OZzY6)=Xjh`Grx%`LiFZa>xRPvca7&7?sdoSJz$oC2O(l1_znmR9_1nwS7xjcC*`;f9Tjx&Lvzux#Ipz#-) zFUCD|IS(ci^D*H1+blxuy+kXDQcfjYpT#B3AVB-tyqZR0S5lHv>x2MHjtLfdVa;No zJ~l680|b1{)jhwf0SS~$3d)$mw&?w%_2AWIcx+SAF?tRh2&dFG9o+}rkX>Iq<1;6UUq zr@Ky_CTQLzgK3TwUqP2}55uPrc)ioB^I+$TwLf6J?Evw=@+P*1d zpudeA`lKCWIKNJp8iX8I^7hePWqG^zM~DD+-8_-i=c5e=)WVJ^XsREHo<664>UKYg zb`?pL$IxbcmTEd3=w+g(SKjBa;J%T_c}@j!5uK0RSa!DQNSEjv8J7P^V{{xU-Nwmu z{p$t3Dxq;la~yPk%zbV17GuLvMG51TAMAaK8Eyw+^?w(>{`${eN}_#(?k}G>d7f}@ z;|#O>iDH}6YPsrr3tDHHDSGCHPs;WMX>yp0@9%i}GIWbH`jDBUQ7Hk&4QiaaUoKlZG2h5JZ zQius>;l$}{3=}loV~50I>m=BIT%sC1(AN_2wwl#$`}-~Bba7fh#3TV1`LLXwwkG1V z&;&ArRWOkrR8&@$x%k4ud4z50$9ed8n!zU<3KGg$xN#_A9$mn5+0bcq7PY@)GXI4X zYn?>X#%|tVzcTicb*tb@C0N=JFW0Swlj8j-#EWOeIV3rE{b}gdaQhp06OUge3*L6P z6GXGm-YU&f4Tr66ZfU3+Bt1 z;c5(!9f7&?NU)7mOaG~rS`G=X87jjX&m&R2O-hpX3Ao0|N!R5)c3poGA&x;Z z=j+w3<#X6Wv_hJZp}9iKulrZDAz?)}OMDbvdHzBW`)`Ml-PyQ3n3#h(d;W2(wBx`2 zA7+ff?m)EbS;TAS+uQd*c{}zjonCUEtPh`JSMBAqLIZNmwCr)#3~^4&PYAd6M?N9m zM{T2i-25rwm9_%!MrFRK|#R~%N z4@o#s23mBu*s4IQ05(@dxkcH?wCL9B%G?A3w~xT&uZ?SX_F>bm`s%fHRO-tvY7)N;E$#@iM6&V6+2;ZtF2ZQwwfC(ll>7c7?g$0Y&JUG~%W);2( zEzU>4NUJqj_+ROQ8iaTH9;jUJ5Xj@oK*TN%cnB^!le92CjQIAR0unL0ywzz>VGL-* z0-MYLjkg@%?!Nn_Za{xxe}HwK6~~Aa8@woa3`66{&donRHv%a`VX8aXboontgO$$@ z806NEej0s_9pbz5nB!}xamGD=!5@VdCCE`rZVtBiV=6?CGeq8XX{v<|H=Y}BV*!&d zc;q25zQ9|TJk6%L-iCRf4pMNG#)F(nA`xbeZH<;WEL50D7?Bk=IIzE(WcFCCB*H`< zf|rR)*TAj6@R~9DVk?T~Z6RTs>^SDge&hv6AP9U?Fc^OgyrnXr96&37kh(^#YDa>6mkyqxl*hUUS^ z=+_UukK$gw$GjvuJdxB?Y;xiyRj@|Y)X98z&=>hY2}>=R`RRfJ2!#;mfe9{qtc{BqP{RX zeG;VXIpCVVGcFU@bu^OS0!5obKSKyUMPu|VP15zFecMY=8>u~#u~9IFYDJB&8AKk8 zkZCH)qGY4IIT2W84-jtooR{>mOs~yh2jUvXSsx&eS984eU{KDmx?wz{hQ4d^*uIC6 zt-dikL(`1$!7@9JM_NWk{Ijx0|7_^~5qX=qk-?OBU%bu=yY-Z4t~BAGAF7+}Ax{Ys zc5Rc}#&mdj0*>nfldcbg4?&IFI>e!qhLj3!`aT)Dc2*rfHkCjGD=x3S(sAOi7=^^e zxvw}>McNf)f+aF+!fk$>5$~?p4*oa)eeN-qLr`z7`4ZDe={}JI)-ln-AYPdzZmSz* zQS{L#TR*g5)oIal6B8<=0Ga|XQU6HkYGJ_Hhe!*Ysm{uhC;{O6HdP>>Yv2%`)MjkN zX;}fc)WN>1)IcTt+nWfI$+&BPtv07V&`yj*h!fICq}f?(2!P4irT#`Q3GD8ZmEczy zW{ZR9r^-$3i6&h-5{}m<>O(w}k!O5SpSB+3Xj*b2IK(wz=6Go;{VT{z0A5V*f-zRU zQ6pW%dw;BAFh{?-6p2}8lEQ?n00=Pf-jkX<30bHZyLIEj$6e6DV`o1xvJ{Y2?Z;4N57v0pK`EfqQ zJr-7MI2b^#6v66}JI?iQ(zA6{*_+x7RU8Ledl*S!uX_@hG$36&Z+l9i))xp`*#TT* z=+ryx&5)Ws*|QUYKk9lFZhhK|n^*q``@5uSm@%hCZ!jAAkc_nnFmylO8b?%0htpsB z#yvUU*l9+@=PS2pO^A;{53oz9gG=Cd1mla3Ls1%IsfBH-=vl@lFYMAU3VvYyM@~s5 z@50wR9=kT?D|9h-D#}|0%n#aF@qNtyC}RKfuP(}CQ!4T+BpLFgW2w&GpN;T079Egc z(ZZL+70!C1a>nHR3B_~6+=xD7yBrR0??R-k&)n~U3?Ooe>gEe)SkkIZE<&P_h? z9&V`_yN%NB?UR2iZNVQ!2;(^Gttx@1nSaD-5uq556hEXX&iB*Nls?+ixc6O28R&ba zZ$lNdSxnRvr%xpb`6Is(`*!R+4q0v_2HzXewNNarvjW;R1v0E$p0#Qiu%=MJ6ODnv zcn%gtXtd@4n^V>}547$x-PuH}%8$Ik9efOH!?;8h_Cf-KOZHNwvpg+R*bXc)n81q( z2DJ}K-P&TpD3L3`O45)awQ9YF^}Do)LI(M~-AS`w5xrNEi* z!^oMf$eE_`bT1ldNJA{PS6$qgy}hm0ay!rdY}|i+R!9->6ZBr4z)ZB@d~A9ZA%UnV zxOWRC3v$Ze{Wh@nl5sUHrV#98wL>QO2w2|Tdn`3JUxWoeM~l>E$#*3YUuEGqesyXd zF#0PAWzc63mr~!B@twqaBvrAYCC_h$KJxv)u!5TCkOEKBxbL!GLy!qHGi0#vbu*)> zBRS%hZF(+GcLs2It{SA~v$J9r2H0~bViZ?wEQe2NR~)MXg^bP9Y;0Z2u+nqgnO>(f zc*=Q1T=OH@A9n@&Yw=mkTrcL%5TJ^*rsJ8UH<1-&H!Z>EVr44XHWU26jU%_K2&^)! zKH|PwZfr>naKA|=?0n*s7`4mxt)sWY71;JFAPk+xRzN6RPbEWBIL$)?#t;( z=Deg7mY3}5?#*k8Wk2y%bzhv%pAG{Z_}9k)bQcOkYRstSt4}DXa=)itR}4Uj>V?DuN^DM)`BGJ5O#fL)JOj zQ#x_&vC7}G#DDlFQ3Uc_C~_L9@wvxJR2i-gXqlp&AGqDwAt|3OF3W`@zfa*M3H?y< z$Y*hazaN~cRBRL1Ut8r$u3aar&Gj@D{_vS|)vu(Ye`&Q@XqaRRnm2|Zi! z64n)j0AziN0q1C5$W=iBi9C64!kg#g337mrheoo9WI{K5fi2|(*w9>oVH7W@TxKry z%4y(1actW042a5Sa4Nwer%kj-dHtdGWmmGUM@Qa8`)jw@e4&M=>U}IW=DSLx*SG8@ z38iD-f~D0zE4R6zj&rRrXtx2}X9)sm__;gCr}k z1hg1Feg`FavPe1R>Q1~b?!=7hT*30u@R*|m28&X=-RV_8X=*nH9H(E~7)%$F+LNQa zrbq3*q0DSZ9tjd%C_?t+;yzeAE`5^I)8j5T5!G~OI?s=GGQP*=vSXJ$1$i$LASJNZ z`MlndL{F?8Eiif<`B3A&a-aSp>Pp3UAMMborJNbMD6rdN809U23T!MEPThTC-lyM&hziV!VjA2C&u05fdnELb# z7wWBYE7!Y?M-$U8+#=-A$nj=Nb3uS`m)!ou!;U~@UIj8}RB0XXfTg&T_)ZX`lmNq8 z44oLgpS=FePTAyK>50^QM>k}@DDCw>NE6#B4m@64hYR8Z$`JdY*qxkp$C z-VlfUnbt2qT_4qc?xTCjVdp7#-}oh*YOX|S$@86w1DBq4CSeNZyz2%a}$QKvMZt;h+#_Tf9n@vfFI5H^o*_UI&kl7}%Xv&{ahQ z0rsmSPp@Izeu}$PDTS#?^Y6@bpD1*97J753X(9rbr|w8k;c*Z%96P(@I`$0kjIY2O zk_5EuW1bcdc$P7qy0+D8eq6J_G(Ch8ylb|~b0c&1KB;2#Dru(8q%}k77cFxGR&h)cbW;Q^~?Yj>ylsvj< zYq*vm;(Yh^zA}bkB|@1dmt^qk>i~P;a;`mFCZ-d;eE>y{A8=sKm}>M~i%1N90{QSb zSTS&6YofIT12*!+V>mArBnza4sR}O%aH8QS@8t>BNjBtsAC6MOPSs6K3nfHE+iP`D zk%4f&6S@e`E0o8dzmi5UNR5@W&|TTz`N0Pa`#SJue+0%(;@jWIVV=Y!?bdp?Sq3eW z4>Xx1{m%k&@2g7f!RJ^JQ0JB@0n3{sAHx28o+S5>Jw@YDax`8S#BTL*&b;`MA?aP{ zJJ*fpGQ$A=llso}5D~#nh-I!P*B5APST3y`AYlenBN@dh8 zAPD>ffKckc{`J=MU-`x-%KI{JwhGa(yDhJ-YO(^oJ=TcKzUsw|-;evRVf61mV_>pC z97$*iesg6u1j=d02r?+$4ZUn=MZlE$r11kGudXm%i*Oq6qYN>^fglK;6Za%Mflx_0 z!qa#xA6kYEavGseitv)|q%*^(yCe+k63!>r+dL8c^BaLy&e#Is`W-D@;=R2FA;^3D z4aRfdJHZeU%?4|@p)=>ZJ1mUV8CC(arwbsVP5)Qt0y>m#A1V0wggs|+sn}Z0yw_}g zkbO%{48a)~sx9s@AdU$`poa48j^U4e z2$0~kwHhcfLX}wm{RW1gqQk1c_%W&Y_0<N=WnLD zGt9j|+;kwI=k*l*=7vk)lH~o0i!2r?9)B(!O2Fu*Dg$1Kkr@lPVXT-cRMyp0YKWs3 zU)l2nc00lB_`{3(;9K+iT-R@t$;S~s5)&>yV(WE|W&t%! zhd3OBQp!p;uRXi}g$%f2^67LgbL_U(H(j9xY-UBRcwL(Yd7)#`5Aqaq`z)}biv^xV}`w{@w}$IU2>Cd>76qf z;_~3?Q88k7N987E67%X0C=asOFwK_)MnAc(VSfpTG><`NlB=zPyDf&N0b1MhA3r?C z`8Q{d#1Tp7aWdyR{wbkjF7xMG_$!*jFAfdghiXcwzsjBo*763rFIBf7Q=GL}Q#Oc=0jUMeXNntLW5aXwn{1_UzO=14v%6#~;oiZ9lLmY|Y&$QwQqHh`z zCoZW41^;xgwu>mY{!A^I1CF__9sn;w^ zQa`L4WS=j)E{S(yU3Jvjz)AkI8EN%_0R^7uPd(}bTOO=s_tcHiLr})b@+!%^SXZr{ zNhiF$5AOfM04({*$G=b=w54c!pUD4=fJVFAsu%ULR5WuB8&hYjL0On8vz3I#7S5$+ zSf;ZN0q=p7&&Pr18H7(fwzDS;->@d!(px3CVY*(qLzL*9uUE+p``5$cFSCOu9)m0z zPZ8!dfz=Mv;{c*bgLIcypK+uD*ptm}@0WxLPV%JDTz~c@06eEU(UGQ$!>_f->{Or! zEZnx^`TaPcT}ZlSIqai&y@o19{K}MKBkAql=B4Q6$Rc_U zbuf}(rtVwLwWcB4D^vAXihUQz2>ecC!{7jph4WuI4VVDF1Gjl;vG`RdL7+sX!gyQg zaJ3juOUl1F4S&Ov4lS0ij@djvln8HZOJdQJ2)2n5it14kJz;R7{B?{7l)?9E+A@`Mp$-_Ee&ZEHrYIKQ#B&}V_jb$ zF;2q3_@YJSa=*t;D@9m>mi|ERM@@f1%gv9$cREu=v;dsw0mtb{|K_ay;O6aIiX5lY zd~O>$umGv~w6mLRjYlnPV0N6%zW4a@tSd{W4E;Rby{Y!x3%B08T-Q|^TJnqna?rdA zB^?D)9wTTfb&9Jh zeXq~6!um5ePb)BpQ+I)3iT|muV0&cW3rbEScc~XXN6y!ZsY$F&wy_blDALiGn`l#V zQTm0z3uR)BTX+PxRE~H)vP3iBH)86NLDK z3?#3`U(AFOX&2X|>V5q(s8L^|QEv5i`VA+!96hQh6Xi6X?;soe>!LeLq7=91>+7Go zafw^~wRXSimRrNV(bmQ5u{BO{!(U%`B+*_3%eo|yvlGfXIenm<#X4jyuhAU%qG8*+ ze4ae%p)CX9gvl`!bIlQqZqUJ*rmde3c3iP3)&2RKkZeic@#lJuM=@1Y^lF?-TBNkn zKXDyu-@Ui39>?*O7GF&62$To<_WtWz6Wx9U>TU5Q^Y}`CuIiy*K-_9mq&zh? zCp5b=pB5 zL)XreNL{=Lyu->NIL`|NuL-3})Ct>5dCwCKyq`aj!$Lenc+lwX%w4}C<<(mxp>UkK z{YP4|dZ5Cs)x{H z$FGJVr8+^+$H z#aj#oWw#0XU3K{_6sJ>|KBS$e3a2Yr50l|8|&A&%i)h{qP`~LMQ*)m7N);T-UY!h{^KLSp|C8OCzSE3DR>I3QxWI%Tcm4 z^(BL&C3*a_go|W36!qn8fh4VTIJK>1_NIrKB8c+RmXz#Y_A$ZYA(XUUh76JA!Gm|N zaF-hN+-6x0H{NryB%FC+Bmygfe*o5AyF49sf7D}hwy<_-aQRZujyFXc>|ky*?h3oe z`dsS$#Fy&p)B>$M%$hZh?>oOW(kmi{wfu8)(4v8{RKEM`@BDhO z=IjpbSqEkF&ctn6d2e(9F2S3_&IIl_@qGo)ph(KZ9-OV{X}UWI-5Znvl}mk?G+C$?wz!|#f5 z(<~X>Rs(&})4wh{Bh$!`#C^w_pi@X?wBAVy7M!^X9`1(^LV$$QZ9udgb=i3- zANF-%S5{sJei^w&n2DUqSdw*?Rc{su`-LvN^+k^p+7T*@7rM)aV}lV%00OoH(>kYU z)Va_&g>y5Iv>;?cc2e~k#luAuKL2{w{re8-i?lBtNj|0mu0p~)aR+FjrE!3wA z!xrgrwU1;tG`ZG$9#ebc@eM2=Jzs|?G|U<-U&AebB|_*1@1cYeHmuJ25@+4WyE#H0 z|8sXJ_5uInd7}l8_omiEF6#t(_l7#(FS}7)s?WC=+oA=77%_O#bDxXSwf5L2Em*!h zkqMShFkrP{x-%5-GNEeSY}>%TzxBj%zQ9r}BpsGgI-&HPQ_E};8zTfo;#)41Y5`Mo ze=?3MvA*q=Wp`hJ`jrO3Kno# z#4rLqO!V!Z!k}}lBj|!G=3x!X4dBBGg7;C?@15e#NGlmrm7&oW`^QQB$isfTJ4X`e4?u%w&SbGkiT35TKa&l84ML8N z9rj0;xs+%;dDxR3qLCL5!_xy($o-Xo9X|!l*eD)Lbry3H+t}Qa^~mK}e<~m+IW5P- z#tX0Xg)QRaILMovcH=>w+U=$hZz|4miCH5xi#Dd++xc|(y{3|Cn&QtRt+ETr45RSx7&Q;rZ8fk7wR}j(+!Dp?jRu{ffOQ`ikMh#xgr-55=7B<$ z6-PEr_=@PnG0UbSvlT;GmY>KhhC>DR5tKP`JVrZ4Eu6ny3yd^nG5Rs=z2h^@nrzEf z;*Lu5GUPBawEEo9QQevg^7S{1zDv0d9hX`bBb-FCEKzTR0GSDJN zWRGA@;-PvJqx|vzD$N4JyhS`ASl@hM6CaH3#|x&2=_?}MJvSrqubc5dcjWIsHODkP zJnmWYa3VbBisxyWX}W*=sMvr+?|}C{E=D#ida5JtVC`(KtAkgPnEU9Y=(N+6 z-s5dB^0Weu`tAX*zdhBd^Y1`Dezw(c5v0)BY3caSs$`hkDy!qe9!y>{1S1Pdn@=s8TjG>po z+!wKfop_X3X-Kf=4m+tV^&+1xNw~o=^RKP~*yr>F;Y9i+Nidqi48HF_jtIIBmEx2n z;8`bd|M~iI^r%wtia+HD_S}{0p5=K_ngE#hbl21l6Qe|2Egm zcW)f^WTEcdXXY>46Ip&PV3r}8{T7qmLf6*S=6a2WXzzQ7MyVN%Gw&+{CKvi)&P{)+ zEb|ZFf)gLQ)2xfHAz@G5Q!r04sI1oL2Oj0EFQJL#2nG`1{-rg5{wno;pUzUP{+SWG z*T7SVb`w=5E5Ztx;1~u~6 zpUQ_&ZZmv#TG$(~z=!2E`1kjJe6F?T*k#E%@%ltwQ`h5e{Il|}1C+Mc0`8w&KZAo* zCx^5vc$!Y`XQHD|#%tJ7Eai!FVw8ZO)6June+r{Jt2IIK>+Ajbz5eTKj?`!(v^_yH zgKsIeoA0<>-`$-Z?Qhy&Ew(zyRW{Knkxj%M_?b?&)(EO#>(7dsp`ny_!7pqt6y*W39|y9yRz7cu{K6*225SPQxShN}A!U-$P(_1@>|(;eNFql2CY z-`#-BQ9qmeEKRY~hG};=Q-+18*KPfp<>dR;6KfeqH{P*zwyT(!7E{Eh(1mC>#Z=WZBk%Uh>+kOIJkXS7M!eq_Temuh3|is9)9k1 z@NR><1dZ%I&ug3JIC8(6)>+<(juf6zCL20KbG?t9NecUAp>pA4+$iLl{BWilr|S;# zCKvR3XM~!o$hrQz4bxKW#kWG%TbVo~`(6_(RSu6+jn-}Gg4NyDS^C&!-G6!kMCXxa zntwPaMVTjf>nnR-PUpCY-}dN>j%cUFXz`tM*dhXggEfY;Fp^azI{tjfeN}DoUq381 z=>{=$RTN-rCl}XuWV1cjv)4Le-pAjWB@`QZa^`N8By8qVJr;@^`h6}h+cYB1ZBx97 zoatZ!2RG~RKF(0BV1YVX!8iC35?7im*$b^b9lOQL8tHLGMkqJ;e zHw8CWxox@(k#WUiidLZOQk`4(SE6DS6)ww*3O}3KgzdO4IZWMtp%k7Ei~}Gh*abR# zn_Q*08?@|>WPol}-n8ZIm57-uq684}RIPm*eyt+VJ;?8qF>XJihejDcqzov9ooOso zmALaXnk750Fq)Dpa4_(+ss>W%ZtP{}__@BgogX3Zb57wSP|VmKwHkH!kLxE3*%rY1 zP|A**q=DY>C<~0vVlceO-*3Smm*StlwhF-rZ;$a91&93puF_|HCMW}YDvQjheEl95 z=&^ZhJ$C#kV={9`U{|{$UxFJ^{;JWlfPUb#g}muoKQFFOI6pVp>^25GP3ET4h8l@0 z7A3Fz?E4+h$!HjcwT1e6Bxm;1w|U*>;j}#<35WWf#0&G9;TW4R;rt zK(yJq$}sO)Q@i`)bNAB7ZiCH~vgLQP*^Qx1kCelo8Ii``&vARwGo!DsVD%%LoBa$t zK-wA;+3B%+vSwadWp)Jp8*L#xirhT175lPR=&Qk+sCRf{VX+1bRKSm`^qa)gA&S`# z4Pdc8W;zj!%i}sO&vP9w{${2-gXgvp3yY09{ma&bEm27L+jwNdjK4)N9Zt2{3P{SS zMjw?ohbPYJ6{*Wu^{Y_}DvrAa=Kru*!sjWrPUtDmTL*unW%FL{Ee+#JSae{?@2C>6B$Gz2i zZ*FCU@ND>&0r<|L&8tu61j_h2FkSpQ=N#*1&7ka0sKBWyZK)9?67RH_wK~D#o}Pit zb*D*-iB`GmHK@h)2?-l?AG2|GKUgR^z;i#H$n$SPDK5Y^eV3-?*QS*K^Ehwh`RM6Y z+FXE&GWa_e^1)5`tP3ltm+TW+^&-RW^3RH1d!&mm)4UqKS>;=QYpvgXQ1I3*^|Jb> zryuD=o?M}CN7TD3oe`2Rs;8W~*0q_1$kW{3ZHW*M~v~n!>(Ysk*|GC%wVT|$&9^JZ$$Dv;0KGlh=Tw$5)X_soKJV#PjQISMuZBn;1KoP^ZJgh27Woc7#p&4 z>e6$cVhU)Svq@BJsua^G!0pR6)*H9be@y?{7bAq#+7Z+^HI=blV6TzFVWP z^NrlH{nYFuQ!*W&5+)K4zzQ-O!%s6{Lm3){1P;5%DIT!A_37xAL5^#{nkPj0xMOb@ z?Dzil)&F@#fB$FWvQ6A4?F0oJp|XG6+L5}?D7`t#GvH5WV#6dWFLWXpui0ra?mXxI z`gNP#rfz;Y*fQ{rTNpN^wVGal&o2S$>&^uG8KD+bhBF=-jqdyR_kb&W=p z9IC$B48*JAGT<bx(vIp4?QHdL?1kP+=5~bN56}{XM*ZxieT<|^h8uW?}^E7 zTZEX<`zN8JC8RkNjq|KCiL@ea2d=rE9)~X7uopQ-Rq_73;vj zQIhG{r_)DD2^n+ysyN~wk94#$}Do9T7#?}89gV9rj+8Obw%C+v! zQymG_e=A1+T~t7C;VnGyx%efL^AwX#lT4nb=S%+py6A(o^p$YiuTrz~MSvl_7I~Pn zK1^s|s7)I8k$FQH`jY1wQ9#VI!IuRb;WQPnNE=rkQ@ECftc!0qOH}ezsX?{NFK%lH zLF>1$a|AI~MxY$?Sv!(xh?` z>T7v&R_p<}tWI>XOg1BaIdbGsHzUzw0{}%BWU)KnZS-nO*nOE!c_fMd*;!;#&QRWJ z?c4D@i{4?XN0V!7^3JTF+{>Q~=y`Gl2P%#Ao^t1iCqZ z^36bntr8g}=kSPvqt*YY;_HVBOtK5KPdpNAhcxGU6bLK$HxFXnuTersdT*Uj^6O(k zYaI96vp$#)Rt+2Q8Lhs@`srGKGfLgQD4ie*mWoZ;6 z>Gj)B9e?z8du&3TPBmhG;R2GRpA((YXGpa4*B>Y0hk$f>^5mi4(?|Dx@R&&M;V89M zq_Qv7QT~2P|JU?TEH_ranf3ezl+Tfz)J*#;zU$v&y7^ibTorFGYnPyEXR=IQcb#Ck zKwHU3*A_2hE=(XnQd=B|F7P`PJaPo%NT7XfN+Bj|V{tz-14;wU_Ljkp)Pp-KJQ!UJ zvht53fif#Xe|maJz&=yJy~6PoLAMN*0tKgHgjmHz7j}2|lSA3%HtYbCz%|mkJ<220 z^WvG=<1vW*%ME9S4ru4Py|!;1Uh41X(*EXk7^4{X9hbAOaOBWc)CXWMs^STFp1U|+ zCCkUfgim7VXEGdTuOt!`eaJcT68CgmTf^r&1EtHQ`Q{Jrynq!7MkH%9PqG_4vfqSk zde9wSp(m+=F~rDbGP#+F6nJunI@RJP)DH7}{95=N*a6plpV^0?rBE7oK15n%lS*tTDbG{7?o!8 zMh7axa|VEOw9p2fYkEW~uMA0p%%PtDXF$dXV?nV`S3_Q0{YZ&>EvFvCpi-@bl2w@gf@cS?@0|1*{I>1#2$wmdj>nT3rzR ziH`nq4$&K^o*ahygPOC9y%h!D<~rS5PTXxYP-ORGcXy*m&OSzSj@GNLC)5Az1&Z}o z;Uc1|(kqR2UykB%v;X*l=qez25jMK9Jak|TC%rix8xCUFlr%#yl!ll%&g?qZ>?h%b z%couqI}k;;C-Ag01$vHF-c@l8t*F2GVb0@N)uG0cZzKp6%teDR#(-}+q8B*fn+BCwd(DLPmSN(=Cg|J?bk$#&9~5|e zCVs^x7e+W>JhQ|Ab^Lw#2X&`@%gwD9a70GO9tZ3>oL{KjoB z*(La0ZwkJvQ9#|%@W~oEF4L6SIWFiNP6gfDe^DinX*UHw?=9j<_1NGp&~vW5d|&q| zDN`09MW+7+j~cI%ch%Ff*7_#2Vf&ss40#fV$L3Kp&g#I=%~sFO+8kBgIkySu8m0#? zTwFJaSMq(j(dE4(T5}{haWza5e|FgPB6#^EQU0>~doKX`?OypBE#`Ev4UO}_KurJn zHXrKXldHJd(MJWejjLz_w9C#pd5H9|=n3oU$~?6>s5sja&JcIrJx6Kc2fz{(2+9qu z>|i559?q#w(HC+};ucB?9ci~pV)yY-bp4~uU+7@5)*{_xJA0~QG~^ikFBJ;zSN8<0 z5LlHNQHz-2lLLus<_UM2*(@mw1>bRmc9Y1XF?HM@)?ihE)97-i78r1tdGVCl5o){i z@wLbUsxVZkBsrF~`1+Bcl5YLwl!?sGkmNG7Mc4wc2*WR38%a9iu5)OObAow$B-BOJ z0+Enw8inRd+p>xp!#h1&OpDt2%B|J!O-93Pa-m<6u{=T|ey}X+vQw<#gQy9Xpt7aY zoCsDs@3wXH&+Z$(=6p)+^7lMh_XaI>>Y1k^&}9H(uC-YB2i^YlrGL3%zrUwQ7sRKh z3Snnpm81fTqCC)1Lr%w*F+;39GdI3P@&A!Tn)HRQp}j= z^!URgKK8xH060?^4J3zF{M&Gq-EmQOFQ7kYm^Z!t+Z!Mu$7IT6i!85S$u@M6+&OU1 zy=#zbC^j2*k(u)g%^UO2H`4%Y8L&_<9o+q5S3vUVlWKtTH_Dt_rt$?kI2?M7g%y|K z43BG%y*;zv*c-<=Q5EBOUIj5s!W_fEJ2_<+zZ_<<}5! z0TUr0hps*Pz;8E*8wlsBvndW8AKfai*}l}tEr+#iH#oORRKfyUn7Hk#cDunCgV(_R z4aH>;2Gx5P1QK7m_gb$)`MJ*ZyCd160=p?RVwWe=S8uN)QNdwfF5i;=^}~`FU|A0goD(Q+v_94J7T3KmU=|-8?j3DIvD=Yq6`|m`ml|#FE&p#DLVIQhU?6 zeb+;eTqwHrWy51_(n;XMk|{N%j?4U`FUDvSLebZ_{``jN08xAxwtSOD@2c0DT-j=Q zh59e=L|m64XW&J)^Jp9_u+D;I3G-XPJ=#k2|CZ?V*qb8Qu3Y@K zJ)>G-N-X~~=?u-3{7B^)*;=RW;pziC{X||7bIcJ00b^HI(E9hbT;jeChrQk99R3vn)PaIokdCVzR2$SJZ6s^(hJWH-x!Pcit7+ zUoALjptuQrWvR~_6C2GGPC+jsF|S3zY7!sb@KAB4NNofRaNxW~NTg{`gm>TeI?&-T zxU9%T*s0B>+}3d(7(${RSDVvxzjnpGQu**IoYP~A!Rt!Umb-lhABY5Kx7ycYAv(<07KMLBl& zXaqU_@$7qo|Mu)XaPr7Kpg^k}RZREfh~s24aLd(r9_u&})=exSJxb5S#AT>oI&SI?KHQ6oRaW<8iD2|b$0F4w$SAX~U7-9c ze2;54T@|W~nO#((g9CDbd#uCcS`=gV&X3dS_(gw?gMMjA|0numR#4hqD)W8nBQ>5M z{dgK8-$o=@^%M`S7NWjg#KIh}`7<2X9R~$wKO1Fp8+5NSrX^(~D4*V_;KJzY1gCu9 zuMCOEuNv+z8K^U+3^;;#OjV31A{LGO&bxpRN0h5qz@Yb!b1<%uVRB_Q)p^gOVZ-3C zq-BpDxAt&*8ha?^}bJ;$e(IS zLR{po)k}4!jw>3202}Yt?5{b$}G+RBbe&W>7CdD2xps*Zc+;9Fl zufe(^K-~Yzna0x?|b9zr9nh zcXLmd0RJNZz7(IOIt_loXL4MIY;avQ?y4xCly7j88iyvc8Yd#pzLVtpx2O)$>u!hp zV#M}XQiJeq4Ajqgg^JsmVu`bS})(YQ$ZiITj!P8g3x&K}1eP>AT6V1rEu!~vh+3H`sNY~p4)v9YI9@|i!im%f# zfyrMy*Qqc_wO>iA7A`azr%)(9@mIy3gZSe{jZeBviD--CC7|VNTxBnIT|1EByOVqi zMvf^C<1aebIXsa`wN@{PhJ!So)x-pXL2ZdqOGT~UKoB|G(xxymePkd4RAJXZ3wbLrNgUZ{CJ_Fw0`O=aMT;P~FwkQ|nokmu0mpeETD1@ey?*Ez??|!TH3Gzjb>z zQT@&yMDnE*+fL##OT#coh)zwm?-c8v>&2g5foXy3w8BOzU+{;*RFwwR=EbG3p6U}$ z1}X{M?zpcC>(q5iqy{TgYPN39F4eMBDyi=8%Gn?1XGN08M*uJ|`*FPbug7hM@uoG3 zxIL1_)pau-Cf{mhIWU$U?EL!dzc~){Bv&zSLiUMh^X0QC(o%ROlY~^PhFwNiv1;v7 z7}VY!+QcW_9xXJ$f*VxFq|M}`PRnL1c1N>Boj!qUk0^W?zQCB*6Flw%Ll0CI%L=rP z0~X6(3``hZ%iLA|zr}^?^tOf&@htneyq;^Sz^=?v8Xz z@EAgpDxo;1Az!nuE-}_gnDg-!)5`90wEtxQjFRtD(oB?fy6Wx`+68B6hG@g1d*ogk?{$_R}e>UZL^^H@) zb{W(Hw=+PG@pR8GQUdl<=s!LKxTL*cnoFkHOWU#;RLcGMGSh&wV^pcv_{fkXt=zyn zS_`|lx8~)iL( zrs|7|7Yi@n&zepj-95EQB76!neE0PM*yet0<7vzXL;7 z0ue=3+!*Kl#Z^uYMh=6Ow#&im(S6j*ob|?%;K>G*u`JVwADep2i!bmns_D>cC9Gdt zl2f4JgXCyCefs-O9p4 z-NUGvJ@=P*?ysNPB-m~)eLS6vm({rQ-0OoOFNa8_c?XSz@nRbf3z6P4Y-d z9?3^eb#8tNC+G?8r8cg#)qvPC3&T*#(u+4C|($j){dzvH^^ z=lOn~`@Wy==k@))UiYX!D!I<{IFI9fyoY84EoM+{4f6fmlo>7(B_A8ZuCt)OL2

    Q=_83JK)$p_9eNenaayXCF2dV3<+FE6`_ji+v?lNwPL~9m`!?Q53nv2a#l!lL z1?}DnT-x!yb-_?$xeSp44MTCRNAb6U@BG@QT&_Dk^kP$?^FEYP-o;P|SMEOg^ys9> zf>1bh;P+|A$2y zvH7?LhJvuG<%7O8VrH0BzS`CMLGtE#fp~GhX`!n~%iDOZ9e=qaei3*hwVPYrd);*! zg<{1joPu?YVWeZ5Cz>Tke&?_LY*alF)&2I}OyiH?MXQ2`>8x<8O|lmfu+vkMt7gOb zxCf1QecoRat={f?D`+vZv^=b!UHb-z1!DWDB#bmFCP0+lT#C-Sx75{@`|MEZR7mTpm zp3RVZ)Zl;e`Sj>EqvH(kKmK6iZbVkf8f~{m%~;*jk&t^?Lx+2@uov~;crlPn@w$cc z{0boZl(#dec#mjCG;;6u6LNn|zfY@>~4!#bvPq-|w(mt&QvP9*llZP^^NPt zr)~>mLp^B}&nBz&2eP_nxw37u_*d=J?au85XnS-LjL+L$mEfE2jCbrlo(rFMQkSQh zxp9BKBi6S2?a}FhZdoVzQF=rR|G^abYt7MQG!P$qO_3$MK2e2Xq`B{4_M)hAYTG>L z)rtI`0rHxIpF|UG3nW@)H?r6tmFX(I?{vgDD1Qb5xBU9vAunc+&X66J6f4pD8ybb{ zjAf_^B9^?i-B|4Cc$~ceRMSP#an!3~hs;dB9cT1&{b7Hce&E)4>=n(mzw1B^8eMA0-LUtTL``$b@qtBX>7MXRS0fP0#X!1)bHCC1~Y7pJOJ*68hs5zab&-ngfS z%iPDHo147Z4sm{3(jk|7gGd;+fhE2S3isdMv;oF(yXg2aXSco<2skdAvTvVuHT^vs zhfJcT&QkQA3VV1?RIo2e$M~^$Y^c#zDm^iw--CRrO)_5TDZ{>T`Gplu zU`m+7U?wKG1le{nI}yYBP@;v}@jOoIqoz6gzmFYJ_!U|^lbaXRXIZ&|t~p39e?6(1AG!Da!6uwxA6P+6t^#f$3nagu;b z6`Bi&L$d_YkEH#&D>&kXS~o0j%gR8DKl(!Z;yyN(W}9t40gAx;DOyo2Zwxpi$ z=aQ<2>Usy&30B&-vIuoJG4i5puuz$F<6%khEVdG8NQy8(QI;+ejI76Ai`6N4+Ldhl z*15Bf*<&1G;LpQfRc0K6Joe#16#&k*hvZ##X+>(U?hPW_9t%8;f37`&R9JNxMrQTD z&%L-i(O9dD-NLatge>cShODtd)r;R%va|H#b?&^ibeX!U^rWA-^}HX*%QYaOZAcY{ zo9~1UEa!S97^j^@UH!Bc5{+?+%PY5b96r0O2j{bHo3GzSiBwq^@3m!g)z;zqY3v>g zEiGW~zeoBiMd9%E;}zsFa|60yLV0Y(t5c*TpnDCV&q*{C1{=YYck6p{Ww)HCkd}Ex z*2{t$+<)mfBeD@Y%N?t>Z&3wo61q$p1QtSqGWL^KR9QNbFsi717iVbQPkw#j9!^KaN z_vjnkE)G#7_@AQeU(GE9WFS3Jw3ahkQ135V`fZWZ(2S225uo&=G_4Pxx2=AR5wwbW z>L{gGV)>@(`HWWWouYkuz-1%8KRSz_-pKQ3MQCNlVo!89IT$VFArBBk;8m>8uD!q( zwHQl^{x`P#Kj`3p`;p&Wayuv8xo3|SgIVSX&dLYiD#YsDa7p(%6a)|JXK(COZ=?WI zzFx9S6vkz^XU$mT)aYp2xc^B&=CFdD@pWt zJ6ioN8*8cw#ci#i7~S!>($oaqAae@*b2E?Bs=GqyU{Ekkq07k#yp*RBr8|A)a=OAN zo+$mro!1;ci{M z&0{*T4x7Bi$3nd71@c@h<7Jk&1~}O{OmRxBixFcDUWC|%5>Lcs#eSpc;y5ZUG`3r% zyk3o!r*U|?CI2ZtE02ZUgbXTM1A=WrOZJNrlDk7sQj)G6QT9v@K!LNkpyPSDW96sy z>Jk;@%bU%PwDFIQ-cZY3L=OL29(U}XaI~5O zd&b?yyHy>~k;O9aT{Vjq)_}IKejIu&HEdpU=iFZ8slN(am2Jz)1EI~Y z!Y%9ptI}0vOR_GP)cR)MA$4tABvxH&z?q^Uw`7&?z+M5RhBSWHU@~O^9gO8^d0i9u zm9OJpDp_62=xR3idG*w=g)902?APBZk;h3&PJ?ey`7N+qIo_)~9RwX)CM+;$7q1@) zy+k+@H32bw*V7qTvnay4BebnYc!efV)_c78yqCSyl7C+63~;1c8JfJmDm*Yrda-O2 zUAdZ4bj-gilDu7l^1mwzLaKr|Bxg&E8HyA%h*Mjm5L9YfAhw&f%NVJ*{=m&1oj!-? zxnwaAO7_?5LRVRTQ51;LOg?w!Pp6(okGnW8_1>TVZYFzhuZ_0M>*B8P)UGI`W_os; zOzj1DRme%^tn62>CX^n(bv~__4MVYHw9}NdL2Xzt9y!V0PS&3xBF&b3MG@t)=X+Xy zoP!h{@<#&wWO21amg?}`_6b;DExhT?uf%UQKQ7%OwhBdd5BfJ*hmzfR5`hzfI$eFA z5MW_bUO*9My3EjKdc#BS+0+3iN0({P(sqC5P+q25-ke0oo=~75>`?20v3Px>-E8rX zF{+5nZtCJVzETvKN*a(Sf8vcCD8}H~q-iCh-roDziSyUL`+slyJIM=4r&o=z6LLi$ zVX*I=`r+Q~FS)ODZ^b61PC*=W=y!%S{e}Fdp7NIjl6bno|j~8Fs z_-S1fntqj8`Q-^rd_l%o>}n#9w>VuETiAN)a-f) zWO4l-I$ymkp~yzOtnz9qcQoz$OnpH)A!&foD6aSJNq3=ym)cQV$ny216$zCp+2=pL z22bXZZ4tdETP%6a5J1SZ${?4Jd-p9_R{DRUxEL6O*vaqH<9UL*EZeuv!WkWw4pJjz&a017a-Jd}8}&kKK6_lKPgk;MJ&<>Go2%CLm?tlEuXo(v zpeVF^zP_N;i$}awtuLaKPL|HKlfVgOf_}=e$cU#_lCCZ%*=rqKsgudZ-VSA8)SD+k z{_fl9+KI6f?u1+eiVJ>)_~XtAv>$jH&Nat#_yax z`-b9`)LaL{RL77yDnSFtQGXt=k(K}S@Po|cX@GU<^bqp&B9hKRi?P)78-rrU;q&Yk zPHP(H#9@NUu_?R0HpSKbjcT{8YHd^)(R(kJ8w-d<|Jm4G7aGM~SLY)yT(23vT5ut^ z$yMO0l){kp2qSEMdQF9`)37{PUqP?=;}C9xdc+b!mN7Ifih7K7iKan}mow^1Nw+xq z=wz$gXw5TFO_RuEeWqd0Qrkwpt9DtN{#n9`$C3J4$Lm0(CYB|d#>Ov>eC}z=g!6a# zr`5w*1L4_1GAdS2hL~pmN~$DMnyy?pDl{e36NuZLi}ubQ%6{mr;EE&f| z^y;2g2(J-YyNa6$y0nkVua3!aYRfCVZ(S9XJCt8zgpQxf>f*o2-5`EKC(rSQSbl9z z$&`6qpESG9`?(v){db0Me)t!?;D5W{cm=+?11A-qah8e;s-q`$b!pXue)K3il+(RR zlYEr}Ggq+@{zL2ax^;P0vKV&%%Y!5`#yVNazx1t)8|?FA*f<#wYD`1L1}p0kjwcMo zk0@mpaaI^=pzwP&=0Pot#dVVYVoVt0N>PaLSez7q{rH8QQD;8P2f zF1En6BX|6eVJ$3F>3f{PBaop?nzV4Q)&?ekE3PyQ9Y@K=ZO*y-KrYxj`IuYrnarci zI2JySsN896Sp=`o2SUDgsfv;U43>=`(7Cu92}xC5aO7tm?@f9X z?2YQePV#a$>4jepzBSo#40MZxTNAwZdR5*X3YGzG4avK;1Kmkm&&1=DbjlVXc0~J{ zPN0=wojZ0ECmsS4K;}^(_{3Hphw4AG#@~!0aM$4+f zRAdtqIz36qSVFf67L=7ch5aa7ukP zGQJbwX^p_6LETP32+`cV%ZX%{N(rx94rCXZ$q&3%Hm*Wy2>g2jBldxikxM?yFKFl^ zWD#n)_gHJ8o{M@+*#@BCnzx6X#pxp8Ami2>C!{IfNc%7m=9#d9w(dh+x-MT)pUdbU z3v|s+Y>tRY?-tIL28rpYDJ`B?f!{R6)O-A=9NFKS(i8J(8Wv3tNznfg4r01OSl&xg zNSEjMJrcFRO7W5;$zIxm36>0IiS(7@a(nkEGb01dIMj9Mfh2p!&B66BQB(N%$7^mK z`{wd(j68m-K~>N00o1R-T+Q3O&jwlp<9~MNN`D*lT-icLD~t4k?OqMfC3J52tQk1Z zY%;SO$SI`wzFR;y9Mg9t2@bQDLcWZ?CDtn`oj}EBwMcNId|RYyb)6@N{>83{NrNFKJ$~fuMG}ItF;2{6_v@YZnowB`F<$%*&vgdMJFlMNtNasw>_Q2!OqB}9Le|>mq z`k2wvGJ1AuM%!%r5B?)vE%wUqvsK9*FduKsXOugihKtVS-yTgXvn;Q0U#}`PRUo3+ zcsqQ7=@p@)7EqCGRVTh=!VJw(h}y-HKF}Ii(F*``&YgV9qGc~D(J!mYDZ*%2i5Cc( zXHPvz|Ef6nc`sH_&%Tt3KR>oG&2+RzPebnrFIStzB`kh>Da)aSeKt$qa1q~6%TPmM z`;W^4mK?+S>#t5UHZF3GAy(?Y*X~#f-dPa>Xct=KV%y5#Y9{YGQn%IH&VMN)|E=w% zvxa!S43OrZyAZ|kqyq@~Gv_|p&6MiLCa0VLEUMQ~Ynfju1FmKY-3pRB|DQ2g=L&m&!6|ZLTEKvtqFFdZ^;CX zes^%!pqIy0CDo|g2zoTrG9b{!gMvpZB8Ke4N8m#EBgre|?>nbukkOU45xmnbG3taD zXy@a(3skPlf{?2;*}ea#9R;Rl(Ai^G=v}uT;$@VkBS)ahZTAR1Y8xKGGTeQSvj@e@ zo?#Q1n1@3zv8&6wWP;U8o@^S8V+MwF?Bq=b@pvYm>d9SFyBo_mUVKF$ITXJ$6UGvL z%$RWqBq00k&&VN^4k-_l#}Ge}1C3!ZU4AyXXm{Vc`p*8#cJUNk^-?*y+76?*rFSnE z?il$!*e&|?o5kWL@#2tDzHFLF%RSPx(S@kMG$A17>8XU_$R*82?O9=dD+c0~+cJc> z@4>#5;s)PXCh?dV=!Kk~!&bq4M(ah*T2tAAXx-^al}n<-OZIaZLAv^iBa*%PFcxSZ zGuJ+sGJICE8uZTMknKP^n$J)auKR+qMG`re&f>MY^8~eH=nyaN(umSAn-5JN-FJSu zEl+u~nD<^PJR_{#5;)QJhFnp$!yOBq;4zeBa9AwJ)^|dbaL3|@myOF}PeT&>(t{Yq z!lzgx5c47D(S#PS;FY1i0lm@21Z3v2Cm{>9?u7b^mnwC_86Mc}+f4S=$VjO`KAYmcTC zk|2!AgmP~oq&O6{DgWm=Cz7jAxO?XMi@5%k6nfe=E{^w7F zBI}XX7lu#^-_k?PR{6a_)sgi#QC$u{1B7t5@2FE0Hqnq zb3eOQ#X{it-Qh&>}ty&HKN!Jf9id=ofxK|Q!UcK)EEyE7*c0CNO$Wu)Mg)9ei{!sY~@|n_W zy@uh<$M$G5^CvZ@+N5|H@Y?o+Iuw9vR8 zI<8u9-&tQp0gL*r@Pc z5+!Z<7m;3$$doeB!op~r^gwuLz?GWFOX7^*6@2QS&K&Duy~Uawe|91GoYVPO!>a0X z<>OI3=kagu(@SP}tVNEOQIuK{vp#GT#X20bEHO0XkT~+*Qux1YS^jfLO^jzX#dU#} zYr?0l)Fuh))k)<|P1S|^M!qmdvIP;Ml%a@gDk13#;}Pdl0E zyN`;&<2{$W#bVG#ymC5km;m6U_V*>rr&;J*T0zLLE0()$JuQ%pBD-3W?wyt5{iVIK zaj^6&d0|IV?sVmGn8wK1<-LY40OFEy>5Np3?Bs%~S_vFh6|Gn?`mR5}QmH2p(8=({ zh>{$k$+Q6@sd0OT)tX^csg~Fr12&%& z28xdT8u9{Bqo@4VV{@F_amHbrjb*uXYCM`nC78>qloe;0f$hBZ*26ZIJ%mO0)HCBH zd2mAo$CktE~ z4jA^6QuAJ^X@k(E%Oho$u`B4G6#AYsWS(VoNN6nG*9DzJt1vBpgSv-udZ2nL1V!kH zVd4i?$$np0m;Ld1VRvr}k{#W|17Yj(2>60dfXaBZoa7nY;&j47>w1n^_q?IL*GG7* z>Kj?^GB8Uy@B|;e_bRu`BCO&;F1`UB$tMR>Fce7V=aT{MoF;oc`u@=2({JPVPLjxS zI!XU{oFlOzL@6Eq+zG;8$l0^bG_v3*T+_DOVXq|a>T`7^krt&dYS@UqF7SbOjbRLw zte+vRKmha&Phd^6K@^tE7$H@kUs-OssvDN*5+)f%Yrl5}BY{2>M2kTP{?JjJp0JZ~ zu-2gSb$(f^arn74N1qWaEOD_Oag$z1X5U$kt?5u2$lOFHWm_iO|M{!_w}bA1ldCe? z!QDZ2BZ}}|1W1N~&e}Fu*U`6I{W)Z)%Egvbzg7oUW9@yW-yD8&DM;L><(zN@F}W>= zM`Q6twR#BAX2$=w7eLbQ6B?aWHm$GN$sXTNwRP(B+M`*F0*vqCnWXvRFar5nee&Du z^)Jz8c|5vBM&GLajm*H~;bi%S003G7gdX*|9~ca9Vp*zQJY;t;$I@1Ft%RX=@>`VJ zNGHLE{{MNy(&_7WZuDw|ha&uPi3^S99T&b&-1ge);>Tp0muLUT{}qI@`NUb(e3cKc zS76M!7=A6C4Yrlf49vZ`e++e!T7@Q*T{$!BA^byn9J2e>g{xxp*(q-!Zzb@;PSw=9MKsT%*B&T+RF>MkDb{ z>lIQs=tO{v1qae3aV3=d+8`ZJt!BGVVQp^~%hm%#&)hD&0*7ub8-4daSNMGKdUa*C z?-*j)gn=TV1h#A&1a^G3lREG-Xsw-`zLMPkdVF`$z>{Faqc1D}a2_+4q!*AsF~f2K zC-Y5209EB&H)KD5Gh0|v4MC8Pz$C89ebg2v-cO{9u@nCS*1V>H1$lVCSJ&o1c`I_z zW0q*(h;bRe~G!x;XX#YD!eDlt|lw&(T+LsUt14p)*T4TCF0&p45q5l(LuL^aFR})<2s6XAjsLy z_~!eFP7*b*1w$nj`3=om0<%U;-sa$XEKlo6m*hmwfJbLXhsAzp=hx=~cZ!=@X##|T z&!%c?AigFG{$-JRm~xhKa|>({(^`PQ-pTH3E=`>0`h`qk9sKY3HPZzCXXz#8iUZAk z^)jXm#3Ou84zj?>42Ya&&mj3=(u@6p&9~OPjo%hFS(Qp^i(?X{c&Ii-ub+V+O0=Tw z20o0bp<9EAbn(iFfrSfk@q;7*kB?Nm&sbrfQMAMgJ`{edsAKmF06TUIk@8QZGd`#v z+~4z0)RDQ!DT7e!_&P|w{e3p*A;m4HB4-^;G!IZzBKG1pAgBAYH3}L3B~&UgK2V`% zu@9d!&I+godi81rdNmTXDo;_DZL2q5>iHZy73@C+^&NPDv2)M0`j@Vp-od`5T^~}T zb*3~B_sumyHAfvkOjqWHcqS=l)@eu0k~9^5?7KXbyG4uXp#7wX8JcJzizDWtAtVCixP^i z!uwi>>B{x*-@ASC=>MpyDakadHQJN31=cD;zxxfte&!j%d2;M<=hN}qmOuBte}$_5 zr?CC&N7E`eI;$6Jc47t!Qs#aQLtB&yinI22f&=$xkCvw#u4&YIR;pXgOzV??x(vQvxdhajFcu5ZranwlB!j zo!YL)wh}xT^`b(=Uyoo>rqOJWOi1?pEr+SodJm&YF=PU2j>S2C_SVjLx{Jc?2THRoSmwXx&X9@$HwwB*Ok z(3_XpW!?8CTs#6<^`U)zbLD0uAy-GJsmZVq6xv)M0=E$2p#dMoSfx6xj68%;`&}d{ zYks`0C4+se(jbAXK-a}$p&Ni$thz%iAX8<6YkrrzsgE>&nZ8Fh3(reh4AJdVC-{m z!gcn|DT7xIf!Ho*D*%zx%uD@sOzy>mZMvRw5gmYx4p`igYGyv(FQ{h zqKzfQzq-JGRY0*Aa1SYxMB0w+E^q631C#2u=!O?Ejtvf2R zN{PPK&AP<3vD}{(4nuP$0E$e^L?2}6{J>66KJ{If${$Dd$Nl=Grh*W%>n?g2m!Vsl zpy2REb4HuBul(cK{x`s-o@_f}(gWCuVcVn9jrv?EK^QC+$>3c-&Oap!bnU1I{apd%<|wr_1ohHV)-;?D!6Id@oE?a*Y^~hyE#S|Emq+doJD}!Zq*{ z39sVs1%E&f)DP91Cx4LIA#J3^&~|SXJhc?Sa*=p_B!W!03|v+;wxAXk5Q!dbc%^in z61U1=5jOn-Ye9a^iXktX08^--T17^IFnKSN;pD5N`CAF@D#!YpM+8P*8u4L{NJVZf?CVZ7y=8NGAaY<*=EQ<0e6-QTpu+Bzah2a@JFLHM z{Q*bKDiUQf*j-Jd>N`Quy^4z|-0?7cpMFH1cC>2~K5us@$4?>Do*h)y03+^hsqE3l=7 zw-m2Oku@7$=ai~Xt=^mCC@rDO8q!uNNC1R+1KP?8~*NHjpqbQ($M{F|T~120 z%d|OcaM+HeC=nw4FlhrQ8l!+k6`y%4(Lk@1I9NKvBjJ%;ZF#xFJI^Ze;+{m9@UF)CScKquHN;Tuyrpqpq{k3hCpY~8F=@?b!H_me zvG+fR4IP@?`J-c{C$U>#hLwE8^B5Zj;#*iQ$D!=L(8%@c{-sv^$2tAaFXqP+gGTJi z*UR$+U2SCX(LcMuB2n1cP^5Y})t>ps7 zyF4%FLWt!|+gr(wanAYy{$QjF(bhWzj>oXBe}C6L-D3(pM#urErLEB{&tU~gVfqUH zlxK;$##&~qUf=doziN?@^m?N1Nk}i?@4iH()yg2`OJ4~)vI0Y0iJve38Nb)EGIzU09cKIu4*E3Ztw-VU1#!yVcD0Q`B6;hVb9-Q{SP=L2{iH>tVl33byE zY)O82;`9pt(Gr^zRIFNEbJ4le(wt2kR0i#Bk=|Jj+W$Ok|M_u1^49UH?*-RWXfM}H2=UWqfR=c8|{}EgZ0>-bi4W{vObVLyE z79kE8I6W|LW1;S~K@4364EeXrzEd-DogoP@Yb)%d?)45(t&cu5>);`!PDD5!n6J%)34pekt3%qYFHtm?ZdaW89+G);h5 zntVeawgVunY>J4NqNtEmc9I5!z$p1@1hrkD6&c6tm=W-+=a9;+JN(7|33^hJc@R$I zap+Z#=mDx^accYp9k+u_b7i&M!wqoWSBVV}p8N6;tEED}PZ}2i$ za=K4}n|C&vhYMdsJyhBq(4Qqjr9{cj_YuA-Dz90v{*|L46<43)6GAP@^{B$`#qFog zOc648Vk*n6B#~PS{j!0YN`L=g{}Q71*RKbU9_vj)TEo0lYH%cHLhJ8&hTCQ#V$`hU zkb>&{2p;xIXoQT??izA8CEmMVR*P;-zIYo?80*bc1}V2xprAww-{Vjbzp8cegU$Pq zNrE5r$zy!68RVwHmxwRA<0Zt4GRlPV_?`a@LGW!1JlvOL$^2e(eQCuGKLof&ak>Q( zogkCk$pq3FKFP-l{w+2e!efr^pJ{MkuUw$1gqBy4czxl?gh}0v1UkBXut{ft*xo~1 z;}cAhvL7A^t43k!^IrpPL3l7WH0=k`5&2JBRq!|L$-VYLtd0enSKo0v-q|lus2&Ed zaB2CsL3>(XT@Ge7RhEGf!e>NHEMC3Ye03Hr#w4~xZ^H*sEpE^RgkCW%&A}E=xa4lE z`Q`a12n+AVv!G{XeuI6^^HXcmChUXsi==FmgY4Ra3ie;UrzT1PR zZ3~xE&vR3nQA|Bgi z#OAR{Q|e=_0lW-_*au*qG5;kN^uuh=Oz~BlSspNbBbog~b|YQ!)!#$n(j}+ID;@ia zjPG0YrUx3FKZTtsnC8g$vYmHSl0`rpLbAG zl51jI4*g2scf-G`fuM&M%bs|Sk#j_3uve?D7D*sf9YdazVCOVY5lVH1PwqL}%#9WT z%9)0h(P(Vk-~jAC0tkq1mV@h#6W!@OC>sZ27e#heGhxyQF*t7-u&gh(nGm>U>n`=p zxWf{yezpFeU$9>)erMvn{(Yh~HD3213-M0Z%^%->!%&ZpaPP-NYtgCUiAfO}`Cw?{ z92$l7LHJ^Y;Fx@_7iDTb@erOtp+C7j7=>! zjwHId*WN!Z(o)&tsE3mPqmksVQvWMw%@Hg72i1| z#XJMJ7imHdZk71LIjY5nKwy5_{OkWZM-imHspONR`LzOba<|3d^jtq9&N-4MDK~Yb z@c$=baXQJjxh>*wM;iKhY`;8muFD69mXSHCHS45#ys(kJ?I-c;Lp>H1LJO{_axygC zq^xv_SX>diknfB$uk^+u@nPj+dV=Y2zUe2q=HA-KA5dhcWMMNKYK|ktL40&QQpuS6 zSwwW&gY zl*r$(Uu$&&G8T9W-0{D*pF*C3{lro_zd|Czc53mRsMa0}3vbxh+neQ6Qs0wE*&a5^ z1y?9l;86>QY@TD-WD>H2+^eOYw184ej9Au&n(L1JyEPb(*}>l_b=)1`E@(v?Lfkmj4vH74g2hW4x9VtIb4P~plZjQr@ZAlA@Ycw zoKwrBnN~c4b^Ilg<+r5hwXg3sY{V5j5pe%+TQ3N%RWy|<1NCn!;>j0?;P?$KeuwR0 zq0H4|AiwY*XS|}uUc{f%`HF1V-l>CvN3(90yyghYx(oQEEWy*Y<G35|JhYeRrKX*p{tE)77w_D*oemM-U)3SVTAK&o-a>x%~JN7b^Xl z5^-hrHoO_P*BHti4UIoO(u#mT?T;1+b|XI%1)mCDG5Qq2L5LsWYYcg`4xu4eqy7w8 z6EnxNnt0FjQJQ|PXT#(MQ$*AmoU%ukW=`Q2{=fcXNAJgLDHZre>W1p2-iq^7Qjeq- zn9O@R2+Q9DUdKbcICBrirwciE<2;KX5R~*XHr580#9TJd6-3-yZv9DYYB_5aG3s!M zK%1BpZ!JccG6^ItP8Dul@`R_60nTtVrrtnX$Wc&t@&(3n%@aT!PYI$7>gck`0*dHK zLmjqr`U}&7o_%eb^0{AdzB3-1LEHc=FA(Bv*kS}u)57}mEhX?mdq?q(nK!JxnhHg)y7N%W0#uQiJ}cuj1H}+-W4rB-n)AmO@n&lAE_1&ihf2cwSw&=ihul z@FK=Q)y(PdNxgKc*ue2+#LEe<@7~z48Eh-T`<*O&PW7q^bhOC$TOV`!#Mh`fMI|G? z?R?RGhQ8##^VpT0*uQpG*c*DuUs-PwKk$`NR}ZpW?g%iX?i6{@4#6!tq#3kWz0<}4 z8f0r^#En7H9SQse=fPK@hb10%gQR%0B8*x`Bs~?IeKl3B==IktBP650QNxc**OVVT zyBcivqg(VfU5w0m3rhjfiyw9h5gtzpRmcb}MDRztjZ?0EYmg6`38ms~uQvN| zaSQw?&TD=mByZdk3Hrc7fzL03HAfw)Hzu)5q*gJV?A^Va?q-%q=6$<%oU>5x_! zu5Umf9)HJ!WTBvYtHX6hR(m(V8k9UXL!(jU%;*QRmk=HtNUv`$i_Dm9^?-#KQ0#6T;ix|jm1g%VR z-ts`2^Wa8~l{Lj#;6-^u(RkjeWXR}1tmuH}xd-pHJhUQ8#MK6U8|4@M{a|o=2wmc= z?c@8)Y3dI@GGgNTccf@nf{qqMw=c zE`d>KBr*X^qTw7<_gayR6hgtI?;y2~2G9eCw}_;n9l8O=ot>wz3|d^BXZbmF8Z+oW zyGG!{ZC9XintmG?`#CwF+g@Y8lZQoRA$sKG>n&Sd9w-+A2BVAl9ahw}XFz<&4< zSvl|{98lKflyyHquuYFK(%$tLB*ydkS`6VMQ$a5j6YoBhj{l+n%vdFTU5?mz)2fL2 z(-W5T&EC?f-A1PwtsmYOWR_3nGHfDUne+9zf2otN3c5UEup#9_+z$_#>!i#dkW5(v zpC$}$10Z#5oQ?X++Mmgfr97@0mBH9|DX2u^{5mW?ZhDDm5Cz0_zGZuC0&7nHReG_& zi!Wrjhf}XAy}z@W=z1f@s8b1kg$e8(UOTFc8gC!d+Chc>tu|1|fqS~tpXK4j z&#IE@>pM%TEJSY!q#uA)1aIK(1{hAc-WKwqlcjFINwnEqUsL_(wX4da44JBM=K1IZ z^*K$J>xRXMF?WesxcqMC+rN(?vUFtFJhYhr!ry}DjST{$Z#?>uKf|CR&O%vkHQL8? zu}&|YQmPEtg;t&(ag35MW&|lCB2!eaq$FxQ`_~P`qr|$F#Uvf_g5w^u6oM(jUo4E8 zVX6N$wZK~=oYQ~xn16Pf|NDRa?kEE25Q$4e%=TF3$$;#0;)>Sxckn`e6L~w4bF|aO zlF|xQC*|2q4m^h!3UALY4Lwf9@RN9-V3%u^KL9UchA5yplSbSb3>J{3)A6K}_e*6~ zhp4R2m+|f(0#vlpwSXQPbDheQ`JrVTayfHTbUsE~>g?N0Yoc5)BT}&l6i{KWJj^p6 zxa?P$P8ljFe2!7372cVr2;yWx7cP@~wGd~-+?pEr>Y*>v=o>)^ZWz{ij&wH;MS6yf z1?V;TthupQGX9yd>dJhk=q%pdrj3&;pTvGAE6jRY0C6hGmii?p!DLz zS7^0`25vv>h@%e(dZyfZpEfw8=S5via(;vPWXjRt-SKXz!MeytnMd#Zmz$K%7!wh@ z(Cb-2lJU>@%~rPbsomGkdmmZydPs;`@1gbgC`#oY#?c54F7wJ%J*TpI}dU%;(xv6*V?uA z+LVCf-=$P40%Eb!lNv}mBQzt$sF+e`^;xsuoeLNI{Lg;#|MpHn*Qb;q<-SKw$^YQV zqMS(|Q)KfSX|6Aejn>8%ZBQ6+{Lj6n;O1-a#dK~MAmeio6pko*$(M0rV!%4RBQBYY zi7W$_f#uaBjS9Oo&y5CLDpu>y&=u;P9BnD*dHimty=x~n>9%l2PR_n!eHsL4%{ zv~l9@J;3Mj{dvG>e-!(xRvtm%%5{&emVWdc5KxwD-n{GxVnbRmU4l?q9&l z1_@BNl`Z#uu?A2#T>0F!MJ67=m;IX+@gyzJkWl3Pg-1uQt+Q1;S=fwFYbqHgGP$ce zD8DHl0q(^&uF$K@&42Y)FMF(bSvtZn1MB8P#gWe$?V%@QY`}-&vA%}Qb3dX4L(5-R zIE&p7f!ThFR03>;2$S^Fc%(ajtz79}fkm7E|5v zZh}EE{cmYaD>UG2oyC}tYiz}4zU-@UjCeoDa#VuqAIdI3q}HPhS&~YadOq~Yw7zAF zCc%PE=Mx=|uFyHIlFF@wzt`(V=~Mt!{r8-!Sp>cIE~slJethlXvwvlSh5*YxPE@ps zJn8%qfT?(%8;k0$(|)+v>#t=A*E?LN0^@uqT(D;RRrV>54iHC!2jETi4#tM~TTKOL zr{ru`StV5HssldQ;_Sjsp&f_;igog75`lBDsEEecUt?z0$F?qhXMDUkYmd%;+Vt4} zY}vj8!k(KuBk;W7w+8z5A`fPNeI|0II=O2gsDCi6BSA^;=_gW%(cx|TrO__ue9kW} z**sWnd-W(+<7Pqab^V>+^P<01FQ(uexm?eWhwp^4Oc*uWh7v5}+Jh`HWIzndheht| zSH23q+N0kJvs)ON5D8y!uzwM87@m1-!QpG^W3Tju)DODVHgn4~>#HIQ$#Df}QsmZ8 z{axp&dPnf|ni@En+lmq&Yyw{KGtbhEhQ?x(Hlw3NVt!XxgX8Q;2Z=$sXcTIBBtlwq z5U*r($kOA1DD|#SA=gFxvWZQ+_d)xmm_y6HAIQH(OVtsh-Al;Y@5Z*nV<5)tDj7qS zpoVL(=KU+Wq0z^g)unq8V1|!<6;9J)`N);~kq~Nbf=WBZ?^yA^8X7KlPv)FpYF%aq z5%CSZYS-dp$sJ|T!71MBiFJk8!xuM3O_ox_&*j3RG1|(F>2#BytA&g3a8KkB&i$a3 z)bP)+0+dl~v8WoK@(4}}NArKz#LG?7zwlDzVU>Q5m!NW8QZ4TOv-|ExI>3xc~3X647_LZMzk1 zyN!L0^J;$~4A}(@m)USx28aDJ68t`1!oU7Bcf)(5eVY4qU3vum({{C2)|C-VgHxbwy&Q|`;0 zUgRvopgmCw`_+6i??<|15@J*%nAw|n}=^Y{Qkc7XGOnj z*Ek&Dc**#oP}#M{NHf;{7pXB{C`&I~ZhsO_{`aOfLaYMcpcCh)6_}eBT-5TnXG(m1 zE}i%-0CRMo5?DJHKea_*$18LBTCIX79rZ;YVb68s!7qh+zU0H@Rkz66LzL%%_G)!f z=l@69d%#oO|9|5g#}3C9;uul(&UVa*tcJ*ngd}8T@2n!pp2=$2LYZZTtjfyH%HEs% zb*}4sUElA0eee7J|Nf7MM~_q2l@8vY*ZcK)u2)t4`&w@2a)i8|%FBmJ~`5f{!fsb@e5xywIPN4_p0xE@nm8vAGFnu_nN+@gO zCV>t#Rew%HVW#-~1@N2J{Dvisy_vM}1erp0OJC-G5o+R> z@SRC@NRxC@YN6T`nKy<@c$+I;`)iTd)5M&Br+jHhbJ*$p`QA(17{0VHb6XtpI@YwG z6PG9y#MC1-UII|u7Eid|MJjmXdN`Ga*BmE8lbgEI&3$$QW(q^;rwRqT_r_{RddI_a zI~a|>T`N>Ma_TpU|6XRB^&@I)f6E}v{%riHLTezBD%zi*<-J(_jjKGl0keE$nYott z`%-3`PM`7r=zHX;iMN?_B3>U2qL%ZTLF_5BCqTB{vqg(uxlZ=r_AB$)LG7UasxQ&j zx!S9xV!8>25)diDYuWrbo?t_K=?Rqa(Z!dFswM}3@3--JZT4L36oK#65Hm;wN>^n| zmtcA>d2LX5e~1lhKFEnBdAHz-<``ntz6Z<+UHXpAO4P zT}8$3r2r#pw2XoySy=S%GY2O|UCn>v+Ovsq1x}PGa_hU9 zerdGke_bM#BokAF`(e6wzP$@}dz7;;a`P|tL=#Uo^l(WU(&*~v}(lgHew5f_>V`V4BS z_o5HKPt{TF9p_lwzYYM!pZ0?U2!a7wV_?o)@C+7m+vkX@DJh;wLD)t1Ib1OXASpCrUZ| za6{D6By$Jpinky)P?D?DGFoOs)h$3n>hpcgf=A!NcKk~bP5+q3;*!zl@&LOpeWk-= zH4_kXC9y=k_~z5~coP1kJ+JeAU+q~M3}pjiDLwdvNGX%achIx2@#%#svU%k0ro1Qe9-qK)tk{?+(`|^!0eahJJ@@M)*R3JVc!6~8HT$1Z%PZ__8mzA3X z=Ofd>mL#`GZ}A82$}VNtgz-wFR!e4=(W8sW9@zBC1!!4 zbyuCcYX`HTQ&kgjno)q^3RN_LK_EGv_Km&?wRm{}TP%Kx5&~ZwLXB?g%)rT+E#-Oy z5R&krl87^NE&u69d^6i@E!C_JS)5(MaldNl8n@Ek)U16szt4480ebN=?E0^bf>aQr zwr_9kZk+X8D6CkRY0sN!AG^D<;_wy!{l>Itao^ew8LKyp>E#sj0-7PUkH_eIX@$H1 z8Z!QPu#r;@%fx4PhiVgn7_U66Qy-S_GhSL^Uo!z!+Z(uVVp=0Sp88)zNMF+~6mRdn zb+ZhI_?!geUsn_+o5*IY!nW*ChCoJtP$c6Vbtaz7Iw8jL&YXW+>ud_0^RK-$I*Dv~TQnAX%Ry-ukp?EDic@ z048i$chHZ_;uM2Fg(4xcGzg6si~`8%zJrAdKYD#!AU`CWa#_*0_T<k{3)wHVawEq15BlRRSTE4M9aJ5gvOUdEW1(HX=ot1r*nn#7X>PfOG} z`o4)uxmM{Y>1;mK!{zVAud-^x`P2p}WJ?k7{H5)Cp?JCQ2e8a`W-p-Lr6rp6g6d}# zIoUTO8Qj=Gr(Nh(_j?d_{6wOfPt*wm)6OqosoK&E{>Eu|gZ^$ry740Q!pILOZX* zEJE$~6#3tN7Coa#ZLgf(B6ll#DDe3r> zpL*?TjW5(6)Wz1)aUTbmAF`Z_rY^;|L#=+17Yrq1y7T+aLFA#+mH{C*v+i}jJ#(h8 zlAr?+hFO032s$={s^Zavz4aFlEfxz+Tiat#S~cXn$%awT1f)4*TF)2ofpX70B)rFn)oP<8QEv7jZ&x_|5Pi>y_`Nqd0h$!~ro5-@(He>TI_-BTcU zal!q;a?abt3yS=C_GQoKbGA<)l%uIgarL&}qhmMY{^gl@0uu@Rk(>{hr2l=IWvc~0RDTz?0L?o7pk&WXNe5qI28 zIMqp3+lN>Ee28oJ7ksuVq}D2iYU#|J1yXmljA^&m@O(ne1J>ByD>9Q}pNYI$niSq< zs=-Ia=M(GfQn1Zz%x<$c!}CxzL=QVg@!fb^UVjSBlfOn*v=VmH!k2u<2_mc3d+O*X zRF#JhVw6LBZKe(F|EFy$IzUXryk8)u)<;!-7n6;_jhXnYYV@8)gVmZt)m8m%HC)XP zK-9<4`*KbNzsKJ!D`*QFv7D8K5&`F%-rBkIAUIjLG3GXG|4iKOy50oo9>_UW@eINU zC}Tl&_2GTnv$K)U1x$?K$XmukC#3~6BNyyrb>Z(r(`Mls{elPwEZG^RZREJLvUCwz zpqh6iclX+2!6P1C=8#eLk$^{d+VK6oBpY2CdR8){-wTz@0-A9NM%;ycjCM8M4@8T^9>--*I^qKuXKZ6LDdYSJ%^JMh>wDFb+uz`7O~rXSHV|ldvArV3gJI+*#(IYKhi~&q*^a31QnOY*7wr z?kMgacNYNxP9L4};5`|jw)b8szFbtznoQ23mUc~@W$VlR?9^>;lhx3w8l<5KPizjD z#tN49g8n)qAmjM!Lthh}6OB7BwI%8@*R5E4ylsVPtw2GW_=f22olf0F zT&-j)KWBXKQU^a5_pR0#sjrzk>?8)?dJj%}ZlP)r=iZW?(Pfn*YSZW?4SR(!f?Ya zV03DvkXwe^VTb#z`y>{8=*GD8LO52R`>8rN5XC+oW10u4aNasVQxPPb5d=lln`ejP z*OTVjyO=xVZjDG&@+Z^q+@5V+v7wZFfIK?i^F_{W-PM!D>*Ehue!%K7U;1)+jREnO z>{bu?m$YJuz!0S@ctU7d!FF(7V|PM`u;8Ngno7%{$c~d{dh@ioY|O_OI=vD?oW_2ckL{zs!gcZ7*sru}`S{(kXE5#3TJ7?Y@ccNp?h9DFUjgY6;C=z_vTP_S8V zKl2r@M|6?N76m&Ef_q)G^4 z4N!0qd)zQQ|39vQxD?3kW!m`x$_CYENRv??gWFSTF&A0F6@>Y(QpBRrO1Lq+$h^jJ z4*=sGNeEh%`S5Uc^a=7CJi|om(F3bMNhOYfqD**foAuOU1>w%{CvudVQ4Y!VUCdA1 z0L3Emy<6sWbrgu0klw2fm%gS_l6l5IzbkRZF*s8OmGxkDD&4wzP0{0EYr#4&GW9Bc zF)-63HPXaeOnEu!Zk~r!uZ`Y5X2SjM)8iFI)J)i`j*cNhw^AVPG=1>!BCjy8x`eEF zq&o|y5-Z@jAM~5JC;c8bq|h8p_earp+~-L2+w78lfZsEQ>W?XD=?5jc$1nm_5RZqMzq2W=)On;L zkCIa@Dub$#BEb@GKTxDdVw)-KWpNj5&)Fc?!HQ}UGcAaEL$?*n79UGAIvS5~hpWBe z>qz)_LHhIbSUkZQJz4$w2)!0=lYV##<*R1CgEdx$@ig?Wf~5cBYgQhGprz>5@75Dv z#2zaw`o?j*{xp$Yh_AXf%UTp^cX0lbiNU5~JqkHyYg+qzJUFP&`<~zPJm=1tUrWQ` z6is*Tu!q(c19;-h2xVJxF)6uPs1A3P;8A=wmjtQ_H}5X_1q zwHCXPY@2~--_cW6+cVbWGwGQlOUc&yC;1h!Rk9+;$;%IMy57opZ3i<)^=%9cm(SQ% z^?3#5`2@W}H+N$)i7ffhSLZvs1tmb)Vf(YPxZ<+Xd*&9B7CvSIwhXu=6KiW6vsVN! z`%OLYUdmXPU$MJsw%}b(%a&aZsRA7S3%pM-{Z(~@=3tgrcbIjD%M^cw3Y!21awH5G zIA-(Doo`AgqJEe)Mm_`mmc%!O?F~us{yLaJ({#jYduHu-iXU*Qv(RmIBr%_SX6|oB=Oqveu zY3ZV)+Y~bc<190F-r0S#UP2yuKW72Uy~AAK^HaYddh5isGKzBP$<~7s?|--Se~~q9 z#OAd)`;ibUn&PcWbG*Shgj5haC9lq1t73Mvb$l3peE3d###nMKX;(SYqY9*VG`kZc zo!hU5#M*ur!nBCx{T<*_bC) zzG}wDS2d>{fPSf58?Rj6{w(mncTNYofDiaPQfsivIgc_yg!lO9N+t$(gI6bA7Syn| z8(z?AFQ;%G_<)-;@dW-#(mknTDW}O`O4mvNQya%xUFkYP{jV&5FT9uIK+p8-?cMDS zB70(YyS`j(oXZt1twc2FZQRVx+UQ{JwNvN4yIH|C{G&}_n^VPa={W??wpBULBJGh# zZ9CB7o+tdh2Yf+gNlBkGKhXrmuQBK?z!e?UM(r_dPbM0V|)8%q=P% zwtcx(QG{G=zJLjG2}wmYKz)L)V5K59Z1)0!^JO)}N<=>#?RffM#U%{~(T<_1f>eeX zIk6w@OcCo1p=1qIn@sgBLYB>^0>&EN|Jn2`%6{G>d*R3s{4s5_Tyl+KV7mN>Cg$y% z*y_XY4a9`pdjrgYM{bkK#iuza{I*KkCu()_e+S6(g>_#mG#%MoVk-nb^K`=j^a|}@ z7g=1iJZ8#50QvgbWo7gTF=o&~pN{WB`S8d!rpj5BPQZo#!6rwySM|ZxFHSsT=T~cj z2Kl-TMDbcbaPf9irCl$ z`RPwG3#CopLSDEU=ecjwWHYkc29Gc+WXHW5?b=(e~>m1_e z$j>&YWuwwNPoDE!#TscL)2gUaDv)Ve9rCI@psRxViU(~sLDrYg)eFU6Q z7m+~-59`hjP9BVQ9#bAJvuW;MKznr;$qK;1vTdn<0{(hOSw_pNs$(BHRy+akFgL89 z`5s&i;Qt#%$GNs%;pBZMkN@N1c(; zFSxX=;7wdf?syrqDAsez;+B+a(Kia4!;k?))o9wCGo8-OeY>rg^cC%eIXf95;ZNP8 z5f_6pugjL(O~nYe{}+fefp&xuCPjE}*_r86jLx}Umr2dd?`A9Q8FP(ezi)q4J?G8! z-jAs^5ZiF@e$d_1Pj%cf3PTmvOX6?Ze*^ty<9SgjC=co=s2-f>M4^)W!6@t|_(w5y zj|(;`0#0@xf%>N3WA``c^rt-W|M@E?Gwx=n`%*Gzwz%6{^|4xZ#+J)N74&42bSK|C zfmNpLmd@%)L({B*j3xQfpdyl-SrUzveYV#gZ4ck3eKdCw9>|V;&`Kt{nt{5d#9qh) zx5398Tt{*D220wqHDZ6kUF>2Xx&<0>nlLv2ns1_TKKFBfQxrt!=L|8lol@*T`6H;Q z&_ZsYWIYXjF1wV6(?R~>@K8@ZZGAKqK6Ob`3ju1AZ*MLtzH5~IVEgep7^{9{CQMJm zs28n?O7srJ83S%R1`b$?`879H*uZkn*YmEXc@uxdPYZ{;wUmn_T_f<+zRt9zC;RZB zyL|M10y?w6%CKM>8~X)TEYgCLqoX3ckAu|IN99+9UQh&@*zit&O~X<~SN0&W;IfQ0 zh`_jHvcn}1Lkbf`Af;dw=1=8KupG}Ff_^FOFxzMep za<)jEXwVwOLTi%biZ!WRG8bO;19xB!BmwX^z9z~0Kj^+miQv9%+?`}=_5tBK=@0Hn z1hPTR+-Fzg_bX8pZnHgUTt-8m$<~|3HmWe^EP5Tv;4%4}JDb*lo)|@Lp`MAI)n|%s0X#YtVlY zmN*%LC8Wb))43_=#UUyfWA;N7QXVK&@0_kdbt|8fJnHUZ36rX6@%liJ_KTY2L_~$v zsZ;S@-ka+}kPp!d4L&U@g%|9+&%yD0z!xE?;0(BWWtQK*hKg&gjW7nMQ|x>;$@ON*o7vyl^48MZ z3_FaRdhC14*c}=f5|4BcQOCmSnM5yjsFL2>io;2vzl~iKb{5N)91hM%Oz%;?Iw&$B z-&ujI^6!U{2c-%@g19@2HpIw%UbDMDraYBbC*Z=#)QgOROvD`4k79 zPwhc|{M0ow@3oNUu+w7oapXnik3TwT>7%ciCu#hn8$e&CI;Wo>?o8{r{C3#7Fw0IOPrb=zKH37JX)Az21Ws*xQxCJ!^O!|Y7ZfN3@3jEm zZ95YR+KvkyQo+GGIzu4|5u$kh1(d{ zH*l<9S=5@Z$1dlkl#0o|!X49*M4g+Q%Z?KEzlD9$y)8 z9}{nAC|Uw})@^_ndf`o00grt3<41ElGpnzYOW6KX|BLN#s9QbGx z<4z7Bhz&b^k;;!pqrO%vZ(x$63am3V1}Onz@#s zHc7aVpT~yaxES>u;NNx-0n^7B4J&3WS@WtSm@hYc=ppd;psKtFkz=-^=x%X@;_#15 zMLb1+K`rSGj+76TIcXZ&e9EsZVr;>uCuDK86}c67?VZtgZ;s1a$HCn{ z&e>y*fjGQV6{{fOwX^;B3>x(*Pe|tBF6^S>0)Gk$c_A2Q4wOe$pvPg9+~Vfg56O&D zcK{h1*DBkW$I?TOa2)dmPf?2r<8DAEMmHuSCVF#FgQ*{$q6Az#f`O)~3xAOwf8RV9 z5(KLFkstjd^P|<9EguF~s@_NAPLnlu`5!-m+^(^!qB##0^I`T{d@xDs_-TlaUukt2 z1Vc$B$|!SK;5&0>lsquFtafjPNebFB4LA6flsJsZ!~2Y;L@8rjL9pV6<7Wm)`4Nlu z?+=zO!9%v)RHX%gQ`s*^1`&gg$Y0IV=KQMG9ugQ))-|hc30e_i7v6q^IL0b zQ`YqGRV%TQe#tBd!TE>Ps$M^j#4Zj>z$GTPZ?NIIbYCg^hETY<%aO!e*7<!YPr@6VN_i51SB7pa76 zeuG#~DpbJesB$$MzgeE z{@+~~Pk#_^_K{0>urbKE-D}hxsO5BL&6eZ-G(u>5P&Ll#+?z1|rj7*!ZdaTq9YW9v zbyD=&-dx&f%XI!z8~SW+(N1^_9EcPM9_`3b7%M*MOz>msNOKfF9lA$x*atO=IyD;R zCsOD8TIt|n<3pA?V|5^Zj+H1jM9w9{ADV)y=S1&Niy|MLDt^mb_&8}YJ3P>P|CLpa zP6pR&#;r^1hf(`%=D7cy_5M-*|N1ReYJChx{P)s4tLfHTh6!f(4Sf!beiU1Vo7j?F zvNmz)QN0euh5wAK9b5oS*!YedTytYugC2r2(M~xzik@#FGOZaFh9o}tZ9D%9*)PG^ z*axa5SXV*#@h0>v;wRYQpcfMuAE9`IXV-iliKB@Zp0xC|P+JIOApX2*7+-7)^`pGs zbm7t)h}HN3cRDk7v2Co{6TSJ!m0HbO(%%JHRPhmENz%V@d^LkKlDsDaqO~Q9#Rjs^ z7ivE$x;po{H=HG&pjh3s2YIxTm+>rWAzFdU2H%i>VRa&V?GiN?ih!7t1(z(sdO|8< z))`pe5V@S1YyLWnN#iNdgoc40m5Se#2M&hH;H2 zu>NRXrR`lN)}3!_4Z$B@pjW8M2{_>+TeW-NByVGl_9HvI^Q!w*^eoxxw8-ru zY^rAII|73DVwe=esHNg31c;Al9WzpR8dx>)(8*#~58Hdg!+nR(r<6_jZ{somzTNO) zuuxU?E5F|#jAa|i#560J>HYoCal6)J@i%LiZR+!G zw-ZpXEcUkq)}HlqU2SPF%b;HO7bKBC`<&iKgVlRAAR*bqbg?~jGQ2p}(_@`AP=dHqi?C9Adp`(ZeTEcoweR<0M1hhO?*;|?5lig`9yP8`A1FhITea6 zGb=37!TP2_kYnvs;zjA5m%gks(4XQb_4J?_(lg=~kI7h_!l};k(Z0aY32ba?ZO&Sg z|4LsyK8PQU#+zE;VfG7tUf&R;an!dl8!9$f#QkWEj)9Qsw_8r(AF!Ey6xuv z06(pw$TR`(<1VF>1sI1WUz6^W_LxQbEbYG#q@Sv+mJ?m_%=2bBSa8^KO*`Z!H$PQ}YY`WB^-?zamCAHQ0%mXV}NNz;Q6*;CQ%1So6fx}dCQmA=Um z_IJNB9mrzp>LNxzFzkM$_$YDeb2KQaPpdsF#G^NRB=VA+M{;rN!&sQbcXKDKHM9-~LaJg^$5h_19_){Oki2#p(cSf`n@q|PNeN#2n zuH|@ps<>VJ+SX9JkT2{5mlxd-Ercwr(lduleYux6WD4pH{AvXKvIPC?(9Qz&UlY0- z&)?j288>ULCU*Sf-9^ai-Tft9?&J5|%S@z4WH9H@yj>Zqt84c&cz@5(4zw1{vvvm? z;KaT4$|lLIK%F-=7hy*iB{Rd_qmCXzc3;a+NZX!O{m8kNaH4vyWYiq%`2O>Q5)EN7 z>^=t(vTG_x5lcE@?P)E!f`rAm1eFy7O3DS7nxjLeU>-NdJynh2-mfOgNvNsO9RzlkUP zHG{rtQ6#3{jNZ0iV9#mVFI+kE&gGal1yrX+xtxACLgK<@3^!c_K?)riGq<$IS5s#C zF~)C(D-8+Z5tlsp1k*3`kXsEg@n}suF>#X$i(d?KO7RvWD(^q^hC5BWv(yB?N+qbZ zN@DAWcEk3=+N{gj0lxTqA67zu~DZc+rop>4;#k6=6-Ir1y}e)X-ES~LqkW8>Gd zVX^!~i1PTJdWA9ZG6c=!Ev0wlcIHxxUiRYFQr${igyBsEzfJ2jHz1E7eXeL(s{Bvv z4_$(kG&@^Toy0_({m7p{ou2lA#7h4v6RaJVf9<>d?OW4W?Zd7|8KWs7U%JLS>Bsra z9NH@!#snBa5_Mh-rv@vsEVwM5S(X3v{r=nGS1bFjgCE@sZP3T0-lW^)$NNS&$ZQ_rY$pUie7q`trYqOqt#%c~4(A-Nt zzw^1~b*@{))L=oD)~)syIWy)`xbh++Qoewl>lY;Mx|*HY9)m_!lHb1&8dx!_`py}Ppf$9Jb_=oS5Z>PMrwHZTFlM&_bAC&1h9|< z0I+g5ZtIOvtT=Wihi}eNZe<1M;E3N1d(LxKVY7La(7WegktfXDS|yvq^SKYE}gtSH~|7;z}ZA;T2#tszpP#-%tbgI zxnX}Vqu^kTI8LyM$zZ2i>4?b^XS`IY26Abh7Fi}Kbv~I7iLMX8%W@tD9GK>nshsy7 zr^OeVZ}Q3XcIDStVN9 ze5B=(aok;mY~7V7PycJ|`+NTT#|w-I0@4ryYi~U1$!$>8-QH*MZt-c+oeE(SVo|9DDLeXeD1}ZuC)WdZNv1&750Or1 zhtDBSGEKf`sge#BTZV#v^891~1Bb5a9l&7!D!@*fptqge?k*m;O{|A|8Txwpl3Sk% zY)3wnQwrA7T_P`giXtk{Xpl?vkVNw8UzykK7Z!4HVN| z?b0o%;u?INcw!B*0iML}j!jmK`uQHd(e$I`!ya;smmh>#@O-0_%8}T-;M&_DhJ`Ku zU=Uc{aTRw&a=(uSq#8WDSQ_GLxg>{v$D*LKWeSje75(yH>BZOA-|;Z$(32b}#?g&k z$r~OhwtOg1LjLzXuxE4Y<@)N5*Q&@j`#)wwJDJ>lZZ zXE(-Z8a3WdwGBPRa1yT`Q)&#oXp1}=doj^^_0MT(G8U&X1$vR!>>{LA5DK7Qaerj@ ztvbV{GZ9ks0lQ%%M*+9;wL3V8S!YLha2%T;i5YTQq)yJ?iP9PpAi^&XR5+dw8jJJ# zm%Sf{7^!65Uy%K-NAV&k0Eh$w+68qkopiI2+zm+(yTbjKvj6|4%m4e&iD(02xm964 zoF6m$)kqwZmmXLd7&b!4^4i-%E)BGB8W3|U?mx)25x%ufpkMo@;KL=5@=Q9@%M``s zJ-H7I+dKq`KRzw026nJT+t^CenP44R1Kp`B;9YNVCcEM0hh&tX@z^$u$eXpR z#S5_g0QY+|(|-pDadLO-p1HltXH=#R=1Wd6bkgjWPbgr_Ijgz*0=ZFl6+Slv5njIK zHW-@`BxuySbIR33*|Z+T#o*xjq|EPpaDMFBa<85Hdyvp)1zUj&pwksm!->8^+_jvg@-G2++?*V}^2Z+3$gXWQmswFz|@UXO1Q;<@N54F1^%$hKD zx%<9~7nOZ0cDf-tX+-qt#<9WE;Z{RAUUo5>MJB#GHRdkhvhB9<40 zto_)X5uD&Qpy%`eLq_QlKCgZi4*M;kP1={T6Yn9@Cdqf)@fY5$55SwevY8ggI;xW_ zxAln_6({(dB_#)JeL)UB5!&oXR@ky>slbEJa& z@wtI#!IEh=i2tcUQ7=V~hb9Av=(7CN5Np2+{sLY8`T4#p>}P451rTeLc_FcmAhcQU z5bbI`@fpd zmbCtz$(>l82-%bB);NPlatn#==73~#wW@T`@~Pn81(`z9;RL_b_tdA0gQ|~CQIeH8 zOxCCFSMe$Dd2 zqOwF$h6H!$gZqj=s7uj&isxrFUFrWs$1#hPKZA;a0UkYg?o1Ue0$^W0NuSRUWeC80&7;Z6roT{T;7SzX3@3C5+ zbzp1S;p)Rzl7!_7#d~Vuzaao0S~9rVX++$faqqBCKT5W)ueaxp$v?@SztFyafPzXI zI02DZ>8yiUOc0@J`a`8`JA)Wm52Ym1z6frF!U>=LhcWGnpf2mXnPw=hIaris<7T2~(jL#ko8LSRcGTC^3QyFYq!j;}T&R z!7s>pa)FR}P4B{3?{T|OP<@R6=G!N2u zcY-i&VJFGs!Z7qr*bEv_16j+X%5UMMw6f4uznq%7k5%QKB!KpEnK)I-xtWOA8#q#~ zuw9_$wK5NKrRN#gAAm(m6B&NTlwoz~FwXs~ZntdJ^!n}>%1@qN2mRD9 zfLx-yajSpr_UR}j`CgKp1tdk_kCegUGGESCqXy8zq%>S^wW2-%8fXHT1!sFy9 z8^zk9T1hJRE7`P3IxGlO(3*6VPe^$+qiera6MMr@!s_#Eq#UV%ILTr~l!EJJOkL73PNECw{ zDa#|u_sY^wUF!XDxiBJJ!=RGC29fRexHR>(cs~&a4gTZ(XWJrBou1$Wx((?i*fiEl zP_L#TPU$H&o#nyoSAK|r&mc*z<_0CBUGfagt1nssImfH*Y*xUYidq!SU{Ql}1KSMsqyun$~B6!*=FDbZ!EpIW|#1 z_@oZNZZ%!*A^T(%*_})Ae6N<&1!mWQ4*?<4GUNE54T2+2u{n!42Dpo4 zrx6z62W-UI9tad&B7|;iE)HISjad9BokHWP5-f7}Q`;QO5MaDo8ATcJR2OR2Stx{ozHFPc zFS^3i5XDM=q?u0kq7pnOLg;Tpe-Rbo23keu%M#E%?eDAz0xckXw1%olf#n;}2oDmq z@taoPARuQxhmD4{Fo~j?Ra2xs2doyQOwhyAO9}{-=S@(Ed0cn{nT*u{`aA%V>_lR` zun5Hfsqt4qhk#8GXr3P*k&Z^e_eKA=E)$JQEN0Ve-OG;S4xHu=EWph9xj!~e4? zvCjCAU11zpDs|jeM)?bCwv)YKUgs(@Aht(hW2Ruk!PC`KHyY-sp#2NMP834I*flXF z?klFWWk>2lx2R^#VXDu%iJAFtoZ1mLpxu>f9M~OhqQl5>36%OnQ1xk{4q=;+3h)YC zAfreC^wo}4^CsL8JC|1-2`p=I&eA`{D8b!78N7CZ95&)%+r}k#em3YGXplEj0O1F$ zPz|75dzF2xqdgc2eFk@e@dFJd=UdbI7jcTeU4416i%rkzJ!xN7=8q7qYJS7=OTTuV zVi?7%?Hi_JxE$x6=9}AQJCm9DqSS&V2~{-jLs&4x*7oBgM9aFVBp>_=b6Fhd3CsKi z0TL)T(THY| zyFCnx9n0+u+LFb2+2EGs6v90-s)+5P|M&<);y$6s46j9{G0o;`%NU%m^iLeXhIT_%l8rC6xlri+ zLnk6?D}CXMnYWaCaL%$bIy_cG*gnGv<=GG`vB1flAK$VsK5d=L+Rfn)-Hta23_*)2ZkX!fr!@!wxW z01*|Ydkm5>6Vba1{e=n2uL*FAnURfyATT9nAa{BP_w4DIcOVjLg`1KeE;=D4X-Ynx zQbgSk~ZR>z8~``Ze}}M>%EBkwE%%bsiB1@o5Fm18!=vJUdm-^z%FGH%4{#J%1p!J^z9l_PtSKGoqV53AKP545R z`!F~%+DQeg&G*0RHAh~X5QX8$H4jcfYTtXBGAe z|HlVaDo$`YwjPKQ;#*?I`|JS}si)Y$PNEiRj|oqh`0Xigd~|y!3t^>qYSpog9JK8s zPLnFoGelxjs~@vox~X#GCY5>$vNx~uZt0JI)mfAW!fQLsZCOp;Y(^bn8;64|Cuh}u zQ*K@J&u8nu-qhdkF-sL^YMon$ZvMOGFG#+|s|iOx>T>N@eWTKGfrSWty>ZNsgXpU4 z^LVRM@i@(;&jt7auxK4|CrlyPiF8G{k0xDJda`4ij$3SM8Xt}Pq>))Rx{2C-4>93f zMN3fhkgR;lj>BO4ORU$Zu>02g@YEN2Z8xo9(Ezg7x}-1okk^`343VKqsLRO6yWnyo zE?V@^!A=kVKG%Of$rlk&OvR4zc2W1Rvl`_U|4f8D9w9jm(P}+PcOHaaPXP=}av)kW zF8s|xRHTB1ht42~T;5~TNxfN)S&)XIVJz~fHYi__*)}~{`US>P)ST~NO;=zS$S_aK z#F=YQJ*o$foV=(?(`}WZ@`FMnns58jA$4YEK4%e5B1VfS|IF)2BE?tIb>om0BB;K* z(EU(m2PCrZ69Lw8A9-W#FjI=#5xRgqXr{CMPL6Zsp7>{vr<_B?VFTeP&4Y-TM%m;~ z4xN)gt|R4#W_N==KG~gY^UA3AMkhj8fRPxfj1zE^{x>GGa5I3Y;jO|JmoZ$`wy^1A zo*RPiJw;+tAl@(OcwLS$>@FlvVDs(!c03jbgiA+&1r#{f4EUeGjb{8FZk!kSz*=zZ zX9}uyLJo&fPON$7;p6g_Mz!z!5v-d8x^*G^5@yjf#zEo8wzLaN5`OjWb;q$sf(}Mi* zj+*Qqn(-Wa6mLV8414B=$K%ZSmrttnjHy5y=VB4x+L1)_EutN-RVg$C2f;83+kIw& zGQAVOJ@VHeBLAVy@f`XGeQYesD`?Yxg3I>-q`{MLe+Ze@ZM>G1cxvwr&o=?X5)}}n z-{i=|g2dDeB(qjJ{_rIfw4t$^+y z(2Db5om9iWbo0{q3-DQ0V0oA^D-xXxS6*;v{qfO(6$BU*bYUT271+A_!i6C)J+7Pl zT9}dSdMk%Mr0H;kCB*fVe0J7N{Ed&?EJo`n@UO48YaB@@n8cS6 zi1N5$qXIOmYB;U^zH8OwD-^IXL?{D1yzQ_^#S-}#Yl`vN-;9Cb=@KaRFDp!g_JbXu zteAGnqF^<|d7@MWztOM;Ul?Ea4{!1SIwuln4{cJolpnw?T+rW%?qt(^G+h-OYJfXY zf;IaigdsYceoYis##*W0hpK-CTTO7F5&d{%IDTaX=3L@T1_m-0I?4lPFQkv4ltP8L zmOJMT^3LTtJi-!sr_M-U#WrS*zl4`(dM>iY0X}#zDvbN%^~`%?Pg}&*;A{UVMetjq zi269j)*7sZCP;n;E;KC=U9-boK=~N23I@+kxHY9yub^lq1_p>NePPd^AZV?`Hy*>F z$cyDI;9=3k`U0V373=B72ZAc^E)tSz#Wy<=|F}WW{FIVj*O6(?2F5Y*cRN2k!?+Ne z*RR)Ym}K2V{T~|F|JySG@EJN8!N%WMQn_OqQ*5akRCCt5+^_*fuu^+_e^ zsuq=hX8hOT9`g%XfoNev6*?Xy5?05E;XJl6=ZJBcS9*$$g?(up{`KDhZxhLYa8+VN z)GY)vBFg8_eFe5yfh6(u&~aDP)ax6??09Id0gtC8(nJqxA^pJ+h8kjq9f= zO?37Xc5#RMPp44gg4C!B{m*xI75+)q0?LsvfBVzj*AJqjKPq+*T6As`vX8AQ!#~LS zfR5VlJH-2(1yhH3!$Z{5mSfD~NArfjXXmeQ?QrfvhF$%W`mxv9rNDU%!r8&kz>YYe z9=Y?r*)@3Kly3u^={FC1`qXaY05ahM&6f@J!|Awed0+3kgZuin<9Rcp^(QfUml>s; z)i#H=>-a0e0B^jT6EeUBV!}9}K$)CU;9Ot9j-c~Dt4d{e$AhrD0yJRJJUgLWvvUbw zdzd=xjMB$qW&1zTzc#Rz75OR#L0|RAP~W_dE49PkPglW4Y6W8E+zhIK8?d(5F4&}? z?%0z$n>s*xtzj=dB*;_AlW&quxXcxTN38aR*2sEz%bZHBy9BW7iK_ZBr-*!pKom&y z;S%brlIJeAx7v*Pirq$W&j;FhXt?W{q@A=fHUYywK(G1xRGS3Bj^f zqtt6Z??Ycg8TlaIXwm^6w{>l*g*1Jn^5iF^)T^B;g>hAlNMwze^ZROH9kh7Yqr?~f zQ_%Ov={qJe22=ccgxkzS(6KF1UstlYCVZ2*6JrD2t#^N8Q>x@qQ&~-10d<=pexOG! zahy=v2w1@jTv#oIm29Q}0%SXvN=eB`M6+nBB6`>yW8B<~dfJk!{)#mpVk>gU0J%sO zo{b9Oue>zR(p(KBjDpz)f|O}qijnAmiczZ5lDfD13yAI{6O>Nwr4dj_|4-vD$JvFf zqvp`wJ(;Jo0I&Klk-XVMptE65_jn4Pz{%={K+2;|dh0k)y zFYsz2D7hWg;uKKk#E6?I-;+YeK;R+FdMFQL=y__ycKwbcY`9F>xmH~|>HPhg!RZNH zqQF^Tx~~QFahQ7CQAdyyqvr;|Anh8pEWja#TTHy`ve*UB$S<_C+_5;3C064Z);qzJ z0TKF1<8zhw$H!jAKuW~!9EYCXDLp-;-dJfO=H%Q8l*U0K zElsp(FYUcVMQNS(j-tIZbsE3d;d6iP`=;;X^ZQRnj`wxFuj@6RujljY54G(yKgY=w zEwCd;6~*XUUrPna;N{|U88=y)rbfA{*mqi1s=Oot1^B81LJUB;Buff6^ zmW+L9)}DAhjitY#+U({EfzpxXZIRa1^7UAU`3Wl`jk$7!@(R(cU_24G7kH@Qr6yqhca2R~7E+dr+p9cdODwHgDlWFpQG;Z&62T;?n-BTEJxI6G+t-ODS4yj#S zDgh*Ulk^!9basgO6gyUBNe*cRjtx$`8F?SxrKfqfdj0$f@WNSiD~S1fr)*$^az#7o z0db-~`eO*T%<00VGY3F&YA?a!e||=O4isFr=-6G36myi+kaY^o6_7gxXG z)UVD!$8I6&Ahh>UCZ?ejH}mwez#^6Jx)fG?dF%{c>Bs1l7Sr__&&TF<@1TV`LlK|f z1SKAKpGiLJ!O7J|(qK*Le%>Cf*Lca+e2R0XVt)&P{rnSMECOz|GK6duSMpagH40@Y zw=732*o9b1w(!6JdNGw-!p}2H+)k;^y{|2_ zGwUk#?B3V{NO1s&%u{>b&#Om!TTpdTH@n7btEY}Sk3-L=*OFDczgjNEYp!w<6ux!z=}O9O$FFP)zWrZof_ z_D6qeC0tXFUI?LgJ8C@XM>A7YoiBHVDo3navHS!*k~yF50y4i6>eP;qJvAZ{TR?Vh zp>kk{HrZS{f18GSLP7ehpmXN>PNhW;$AaKG;H#5lIZ7Gksx8XpWY;hAPrTudee&-! z8N7*TIOE{oBD#Cerl>tzw^|1nYxXifga1to^nXUBNN z1giu<*~~_CQ!X;l3fE~hQWo=CZ({0s`L@C&kYuZXr>%6bIM&Il@?an0C>7le)R)u2 z^FJl)CB$oD9LD9RT(RmrMdX!o*9ZjHJ!e$R2KY*8sM7ew>L3350sm6@{^z9$zC(bl zImLzE+;T{hKm8F=*usCly;9F3jVZ@0blhI7A~@;R>Cwo#$yR>g6-LUx*UDI(LVD(MDGBPB<3>6anHnxxF?zO%jt#rH_6X4upuRmm>^|za`fI-^^q3$8!aq>v0tyv$BQd-o@fp< z)HtazToGn0S6}q>i@==V7DS$fZy9$^pj6oW#EIqOvKE~{L$9K*QdL36K2U7*CJx{SWeexU9igV+K6bdd z{<^&spEbh`)W<0AuAis-ROXemnaC(L1;YRwD^>?~EI@^nl4_6T<)X=A!C%{#Lq~cLzLAFBj~~f^_R{ zgZ`{QgU+S(aUDW({=9us)`6DqkNvtUX9~Sz9KThaFMSX$HFV-Ioj012NG5EN%5fxr z=;NmPy<<;*Q}q1r!~W~8J@F>Ga~PU8&*|3RIf>qYCXF2BI0vCU-KZyLe5E@{XCr~O zQ5?3cP&c@>OEn}TvN7xxf=Y))cr#Ti$A3KU-gEGg^@yvO5kQQ%R7Yg>25<8NK<)0Z zWlvUb2!(8Ztt?+38EuwYAw_Qf{TgSpYxf`U&E)}smCn+8M|LB~t~uW9%cnpT8~DF9 zzQJ}6-?Q)YJakH~;mqm1dc6N5Vtf&%!5fpg!-Dnm{E1b=0ybr{vf%9PN`_FKN~eCt$R zaKFj-B?xM$^+jjn_$~@O`cXFbAotY{pXSju|7Do0ULPuI%hW6Ck+B_$7_m6`;-Vbo zJqp4Cb&SgZnTh_Yv)NTU=Tln6+j=S`(IfejT! zd0lDoAWVKJdWO(ES93U}*ih_hNyLz0gCIVNv;l-dq!W~w+>rgIg2;q)-RdgU@gdNnn$iX{yj-iD6$F+{3Caqc)m~nlEdF{_Hu?3dw1R8K zpPBhgqi2_2(8LwY8P|zFm^0DWbpF&_d&@Gf)pAXpjhO3j;O%~HnW#B#+^oq6!L0k$ zGDYX;9x;QtUEBJ;KSN;Y5t+P1e+VidZ;hki&{D(8&R-r_AHuV>yN{d&u7P<_HC)&&rO*XgdG`eo&=59W z7*I*^DnEgW|k7P>){@N;^qz+;DzYC{nN5!nX8I`?U#e#71vQNgfsR9&GV)v!3F&=S7J;rDd7Y^{D!8g#&4p}dni_8 zuj@6Q5S4D~!rol|<{97JXPOea&rtrMcZL&#s(Z)whjT|Q3~BVqbKGQ97Vd1hPJM5B z*LHrBoD7pJ|J83m=Czcp*N%fwH#&-#F8BrdhGRCY@Sw2eweDG|d!Qk)R2zT)Mk+8U zxQTA&f3XmBnIBvi!Yw6IXyqZ^shr?sQM2;Nd|=RhigV5l`T~PEH~KgGLbRDO$fGDm zi)bCJ`||3dveZH;g7f=GIZT~B04ArC%juA3e38-+RO;hZOWpvyMn_*1HEkqHTG$7E zH%MZll{341A!29s&4K}24s z<~6Sg3me)h*$#2A^9vE{DZc9~>bwtlPO1m37CN zJeERB!~KQ)H?x5Y#B#{Bt9@0cQ0Q=Ot>$b^dY33GT}q$9OUJ*85aw}k-3eZqFSn;> z8F1R1BFfu&&!dUGNVoe#vD7w%=d>%~Ba1@$%xsdk`(N0wAz90&(=#giB67%22r3xm z6Wzl1UUVj(37f=uv86WpT|LksabMP=Vfew^a#y>;+LbnufxZbLq!wwQE>WaPXNQU4 zBjdQE=_O+qRkoIaQT&!+B%v#KUH7;vK}EDeqI`%o^-o1lnhz=z9kwd(pSX+kYUEdp z=5I&(<&8P26V+?#zxdYWJkHC!wVA(fJ(JG$Qy`gUj)HA;3Dot5caP&h z(f}<)bRW&`o~6NcUU`;i)}wXDYv3NhXzxyNsol}9U$;hnC|Ky_>l^tk*Cz z)d{&9QFpvrA9(Pu6$`nx7Rd_I)*(9QJfkcB0aHF4hV+Gl#33^U4`b#kaxpsJM))FXuXt z-2b>nre4ww&UJw%qj+qU?_k6HgMp%j?v^@YPm7S$Wz_6F!hs(13C`XfH9@kkHCOmW z>*`HDs}}_coP537QE!0Lv8uKJ+q&W_y7d-$Dg$7X>!*+5nhzg`)Q{YTU@f^`^ZDAZ z$Fs#-0^C+BM7Sg;atwI*)Z;1fzqVJ1`>)UXj&4k&M5Sk-xpJvBjP1ruv_oD8qUl_) z6XuG;xTiNgRmro}i5#N>qRiy(Q>M~}4aZU`=GgCU3=i1cZxM|{XT3u$u^^sMpPFM zsQCB!NfQwmIIDNxX3C>=?Y}7XQUMsWHw?`-9j6j}$33-Jdy+ff#C0Y;rDeLC$me?I zHz{h2BSnswgv#QO2}&p|2HqASfu?h5`|Z<55K%`e4*4;vzhyu@a@1Q?zA-*r`#SGZ z-_C)73H{F+&ce^Fs-?g}JlLjFiDw=23?3~TvY~v@eAUa6R)K541Mkyo72Z~be&T3u zB-K3_=`1{UhVV|`n0g#($&Tk-y=bFV_2+D2m8u7|jhP>AQBZm66Xo64%iqt*eu9oz zB4@_rExgDlRJOeHE0NXGJ=(=X+g6M>W^QQe4f2Fi2bL?cZFEyr;a<(Lqg0s*tjFQQ?_<^i@b8oJkdqBUFJ5Arj?mG|9!q#r*ii`Xv z5S@%Ye><@#uHA1j7#r7TIBK+oLHJ9!o9ZjplnyXSF%1_ywDESt@? zekaHzdagH#$ZTnM)b^E71PcK!7K#q^CNlos+rp%N+CWCsg;O#2$(|D)*x}Q79$snM z`keb6%G=6|`I5rg<+h#SUdxfD2kSGVkjl>YjTHMY3_!9Or}j9axyXib%*d>zyI0+s8eTawZ+Pr#Zr^!Bvw!;y%xm%-53(Yg;cuUq2FNUM*6h*) zYsUSSJyyEebLaE+ag-nObPur`@oJ0BdbeiNU%J0Y@vX^#u0D?8VoOmgUx`)EgYDdI zU%evS{Tb)Mw`;maLd@egW{Q`O9yzp=w|tB3%%|G?*^AGu;z;lpIM@=ly<6>TloCwXv2QBCRv7up&x(K+AbR)bf+7nW%a6rIY|%!uWyPY2Uj% zeP(B+o}EJW_gSG@?ue!z`WAmur+#2fyeU5Z^$=}qn!fndkV{fuev&Wk+U}7fC+UWq zBE5#XNR5844ei66B<*Dg37!q+(SUhfQ%B7h6>5SWB!DfTYEZ zTq2lRk>K#zXjv#n`k~yq6hQ@jBKmj+`&B`B6^Afqg%jz;W80x~=jfF&zLU-Hn(DI- z@C_<;BxA2L`;^B`^$H?8S(TY+q|TOeYvw3I#iQa!jmlhp0L6!bFV87WP7qoUzEwN; z$fnmyaL34p`_cjDUel+eB>_a~8mYe88aLX&V<;}xV;0RE2Sgeo>~^16wX_(;^*pfE zMm?v#=PAlH*f>u%pWkD;cx8~|LF@FXh5VVd(m@f@a0kQ?Ehc<=1I`L-K--k;?3ZJhHj-Y8KAmdks(s4#MEAKepoe_6 z^XPzxN^ifPI_<`=)wN_Y5Kvj)9QEkmStGitSycIeF57=$NJXpP`cj=#jj?27*M`aO zZ;I{&qKK>$kzy%=HJXs<#?PhfD@U%bhIFQk@yD z^YPzpnu}7)*ZmN&%KY5QOOm`ToI4X$VvRGHi#|3Gq~EHK|4&{q)aYihSg~*V;Y&H> z>IAUc+5&k)DPzPEN;MvlF3g%AV?L38obUMU-tKijFodM{a9Om8tHbU}4-SN6G$a6* zb1#8PcsIgfLT0EeiTA3;k>P0<;9I16elF&oy~eS`y7&h->VrfhILg`BAAO=bDlJQZ zvrA~sjcyUq6!>~#YAVIB&)i@jU0KR)j_$mnoo5}#FKwsukjZ6vae|GR@af`G7=c{ERM>`7Hhi8sZCB7+ZdpDA)2t|)vPuUNE>KfhwR?N&;T zJfoQ_>uYZBw6L-Aa9D5JKb{BmzYH6I#}_?g$NU>@Ew`K zp+={=s8BY?_pz(CLwA?es{e$~(Ke|+-U@p310tODM+3D~Py~`7*u3leJM8-GmA~GF z9`E`>xgs?e`XwLxy=_^Opq(9;k6(|uPG~UX(`E`f5Fmw6%1p}*B~)mm|uUkk2xBZ~*at1a67B@QY>@OQ!^Wx`Ho+ zp4;K*toLU5OoThkdKe9ho}C50p8x3v;9C@F zxo5U+U7c!R(DSK3ggux!s53oWB3>o0SYoTk>$8u2UF_EG%#!YD3%qx!McLMpV1wyB zpHJRay}mxec{_VnH(Qr>*t6r(pPNZ1h?pCY%{P_3JV-a>mI0VOs8RKqVT_NW>DUk+ zxXp&;GRM#B({K4;c!`=%Zn|BZ^%hG>WD^%Y=}peMstd)Q6azjfZedOhjRv0cK5cx+Ar z51Z4(MrAS*x9sE8QX>aaFkjvA# zcN6gRX(sYht3B^}l{aDizQ%+3xsW5GGO(x|s*~x0N$q z0s)(~$fWky9cJ(SDd6kCQ^gp1OvHqEID2jAPsO-wtvAeMhq9fF+#>{iTvpSiDl580 z=QKNcu)V-~ZX|HCWKt9{b?!!SHm%=!{b{9z;i-$$4;svH))TFfKoL9IP{Mo$F;H|} zWgt=Rh3$&34nBv?J$9!p9_mg}$-sA+4qc6xLU-*mUnbKK2FlbR3fI)8S-@z%*8<(y z>W>C>2E#muf9=-4a$Wr8dPoTFv9119#?R~DexkQjxxXp~opr}r*p0>s6T(Q+>9@(3 zxcgu0@Xs^(&vY8CKp4Runq94vep8%UREL`H6Q@j1R@AupNiKSFY6#lJ@-KvR12jKL zQRI66w7T7W!v5mOs$Ct80+y>NBVPQ&5E7A6e1F;w{z!PcfX6y|_wF#Mf+h>c9u9!q z7;}tq%P>MYd869B&>PsYpRsK{ggvk2w4E=-&b*O@P_=l7a%ZQ$%(vV{c6}J-G|kYJ zd1|KHj8g^LggEwa_R|@ZW(VOV5(l9HQ?mlZsu=(u#7iL$=OoH95r(h@gYGWm8x@Du zJf=xAbr*uNT$eg&&Y$1AoQOG(Bu{lRIv?>X*BDJD^u#rLxwXHN>N=z-xes%OSS`N0 z%;}2jImKTU%e~I`e?NPiSOXB@%R>w?jv*_beZjF{VG?VoT=wp=q`kDGKpoMy)^*)C z7ewS9xtzp6bo8cLWaCUEnD;DAvSo?0eqre4Z%Vla*yr5OrukymQXBV3^i(Szf8^z09At1@oMQ$9i^Q!FBxT)JNtd0jIH#!%y!QB)lDuGE;d>=KFj6!6fPUuWP@f_lF@*jm)#aslcLB|MX#Miqk4xjH zD8LLXIKg~F%BS9w(mX_LH!O-7gD%p0qd&o)QHp2Nq@O*%EdOBdQ%6n@$LU-_?j$~l z@ka9y@ma6nJZ5v-XGJR|=^7D?GSU`3l6MJLX#TkGe?$XxCrwIK?S=O3-28|fGf$rI99!iz4+%nf)dui zLVI~Jk4tuEPJ-iGBG2a=-@h*DT$%%1Tsx`b9Bbuvk(b;XSt>K!+G{KBt=5r(>(u;h zWJfb}gtxZkC(dSTd<}|4XE}n3mouS~ZVkd8&*LV%{OOV#G~x%B-lK+acGMO0DLcsl z37dWOFz15)1F_|dqwG5>YG?byiEVo8FFGSP_%ExeXAN%!~ zR9bZMFX26Yb*_GFU%1qn_(UtALSp^luP6VfrvUeLoPS+ws(c|)(pAUTzKHa9Wl-vpgRKZQyo63cMD=Xzv+nABYSSw zdlheVR<9eD`qyqABq79TTzh(Uh1>-$b2Pr6tD0l29jz*{yyrjv_Yz5t<`~@C#>w8! zkbxHV;gh2W&D8Bm#e9xoiB#^RKM}GKW?QO@g&G{7e)h<7>t@;Hxv3YXi4>?Ug@yj` zyAw}OeBAP!4@mZ=I3+Z8NKE%t>FOjeg7~3)ys@m=Ab)iZu+L+CsAN`WWNj)}tMwXl zR$uJ=`w4zNr0;PSwHsv%B4*ueX>zC1%#^2syjI@19a$GT3qt_oB%PTTW~wFe^DX9F$V#kkgnBzLHwh z^WKRvd0J%&Js9yOG*9|aWOVZL@fovMCwlRJjBH<(ug-6bUy~(6etsx@-e{rLt z1k&1_D~B$RutDp!Kwta|4)$?vVIeMZY0zQmP7L1|JsODfZUJYM+$~re+5m;zlt^Xa9(g=Knmo=v#z*)?xG2BV;tx7bT`U8aR8QX&})i zcdO{!woq72tq-9&O(Rp+!a|p9*(lOjnTHCW$@$>)2Y0PNS1$UvO5I_ zmX2Hn;LS$yFI0K zJ(Y!+F7cfs+?hYm&A&dAb|66QtaJ;MJZlsUGsoYi4$JX;H1k>))S!(O|iUrQjp2;sa@R={JQxa-xmc2k2q zc6&FVvA`@8D2kPSe8;vW+??XwK7?OALy5#bj3ZUa_eK=2^&r0oK%E3;GV@npQZPl3 zWGv``w@)FIcAB~<9Ik(mgS+K`S)I9JBlInmXU~`o@+q*~qmr+ie(q`eu^d`$T6fEW zO*xyR(u|NlfoznLnS?*Q&HuHf!uY~b!`aZx#qIrM(!y>VS2f6l8T#yWnFy8S^_r%#vXR{qXN!K^Qy@$o8V?{W#eXc*91U0&E%}IeY+ig*dvac>8HlLu~NE{b9 znqM-;*xv6fNOPRY3Te_JUM+Ah?kvnGF!14VD{%b8oiNW4BZ#ii(XHNQf{>wR{~$hs z#omes6f#HWcUi093U%OW>xQWz?5+Fy4YH$`-N&4cV>FhIB@a2`5tT!_1pc&pZjvrt zXq>J%ATNLJaPEoTB6%p%MX+Njp%fv7FYwIu&k8+&n%?iG?vJlK#;7-O`_Ngo7}r;h zt-@F+6dn{9hW7wgb^9cHy-+|qZwE+6t}$|M8CFQn=` z=3(#cW!xtqt`oD2-**h8t*7PfB=mBr| z@CJkdQ_Y`7Ls-Bg9$Qk!yNti1*1!HlkFTOhoPLn~^Y0RqVWvR|gGjr=C+PzriA-2< zch*xe#i{dq{^NgsVXz3oS){H*Q8wGe2j-8;W-mgkA3VrKV{8NFS@Ih=s9&8;msHZj zst))MQsvNP6^}qpeF<#BI)%Z+@gg&EP_nYtmjq0_J|&BeRvFG(RBfgTm)N5lnXVG< zwi*(_aoC}C>hzzFl2eUtiokw)p;YY|GB>d?v;fna?z_e%Far3Qykt#d3bz0S=%ntf zq*&pk-EW)^Uq8sEf+F%^8rFc5^t{$*URt+5vm_=@4L{6A2^vxb$5`f%kbA0>pH<(gH^!U;v&wIl#sUR7JW&b8aMtyjD9sv;W$($&pa?N1P*C_o^k%JR_xE(MHw2P{40YFt!5xLJAYE2b_nK{pnIsAP8PLPr>+My zT=SKe0gid$_ylje5Mqis$Fow@B=X5GH~sq_?L(MxzFGU1TBjXxJgmwaaDlO=vdn3hgmw@$h=Q`E60IEhv3%xA0oXc|4O2Ggzv#E8I8pK~bLsO0cicH&75Zlk| z{oNUnokdwIV?o$UtNOXmkx6%@hbL1&M?(DMn0pK9dam)Og9T+&`vCpB^7v zdThQgveJ;P0Q(ls8Mm>TCkgkQ&K!YfsoU9J@B$(kb%72KJsrThcRoUUiJ!|c?_v!H zqIrhOgww={5wOGl=&a8EZ2tp$ok>hI@p$vcP}d{>u@6St5GDIjwQhcAgCU4qikwit zp6mdtr~1T@#|LKG!5b=drTcoF4LTRhfmqx9GU(7@T;T5j z=-2)n{RiEpGGxxBK#mE1{7Oet1pCvn>Zr?iHdn51cEk;1t=A7aManW4H2L>rHN#XK z3*ez&==2-@&=UB--Ed~C8OCKrCd-CQ9j?3FmnTv6cm-3QmYIa4V1^FU#@0~evEpqa z<~-?m3%j;wsbilp2t8rN$*u=b|9D#iDZXip(|abhJ^Z_LI{Mi;?CT&IRbBQW+Xs&Q zX7&xI83e6?uIl<6H441ye!><(Md;&fF2^w<-{*5xFvo?>?%Gu_3remwh|0K(un)Q0 zRP;#Vo{)nFJldGKpMX&5T0H241KaD%{_^9OL3t|^KT~fSZ6}$2D9DaM8g?FLdLrWs zbE%=>1tkrb|MI8Y^R2yuPNEY(4U_`#e@%A)DoVHG(TAvC;cwM5?~K(kzoTC#(}ebD zW&9q`&_y9QMy~B{_&SbwfWgO7s7lj%vBfwl@troXBUI9Yr(#uASh||LxCjz8X>r=u zE=FbX%hcb6fEF;P`S+Uug3*M?xfsPpjv_86%6^6M zC9B7R`3#U#sKndWAA-ht6INM`_~)vxB1-MA(+F%VGsj7jiLgN3gV%;bJ%{pbDoHNP&8|t6H+y8TfphPk$!s(TetzDiDj}F9Rk#N!? z84bEJ&tD_ND^JA8hM#+0n6!t}|Qz1s+whsbgH4Qh4zUzg2{3GZyI zY#*H#AW-d)in`oHK_2pbf=qjTlKg*O$KYd#h~tLWdfB9Bd}$NGfk*~~0KVYKXKrFb z16CLU(&`NXlPnjNlzWnNYi+=W18dqgenL^T%6a&j@+}lQp=);V`qy`F_cQP z(M^-35@p$%N=Y*Bs_ix0e2Cs8?X8j=ShzEx!DG%)x$$b(i?92f*LKG4x?UTds3m9j zT!+qg!okm4yk;R4tNAAQJLZP~&Ej?dBffzav+G+8Xw7#(5=~Q=&^Ez94D)@B9&f%p zy?ty_-I$uV_ebHpBlMy6_G)NC^QCjY?jci}6_NW7VzNs#?sXlgI#WEL=oT9R@Jf9Yndi#l`tv?8QI)pr$X?QKaN0lC)&n!#thRM==(oWz807=~uG=tMV+IHb%UkUSPl9$UFuZHd6|!fmqEd_&(A34s8KHbR$U^+Z37EoCf41)?*jx{*S})Uw0&(UgN%S z9js2i$&b465!ZK|RS}&Ex%PzT=)fv`xr_zOQ#wf5)<;zXn+On-xx55fSm)W^&rbDX zd2EYdD{;WdFr5f((YwolbbbDMH0^y57qb>DYh9E2PtMzTc>Ulo`n z<*{U`#AO>{YRN>|!1MFyc>~a6XZ7BXSAu+Qfq%TmGSpePuAvG z`M=Q$9}rWkPsh%?=MerfwcJ!W=qv=0!7v-NoDu08_Q;HHstIC5HX=}TT01=jx&sA9ACFO? zFAhYp_rgfM9rZ;c;DZ`W1JFU)dZ-&v^E`w2V^&+`jgCh(pVHhTiVKCK;bfv=Wlpk% z?c8Va2CtB4uz?s@^mOmJwb4y&&TIoK1jp(m{d!eI|Cp)cZ%YIRDo=o%$=#-k)Mj$Y zlrZm*obJEvwq=*5ReC4ziO%_8KSYl5TxWe05@OJu%ANmhX_CYY-4%&ptAP=gA*TgjW z^gIEuG3Bp~4=zz73POjGxP_WtYPP%SF8yKYzy1qIfDFgu7sHc6r#Lw1Kg zRH1~wKh_Q2Oz_1w=&VbwvMMob%bn!@V^bdL)&$-TI5V{nx6=`qs8N`BkT%S^;-*Z( z(BkJ2@)dH-J7O)jw3Q$)=@>yA#$_8vYw}rK2#+>uOTcElk%58L$37*3-|^PY^Z3Pm zP;-5T24lkmLhMeHZCB-A^0W&sRJ?}S&qt}gj*N#8NGgt%vYRkT!R6>HLKke0-}yl% zWAvUoKdwgShvOZ;&kYO^3fzv3)R!k+r=mj+P?tz57UD;gGz^!Ue4(;BFjKcB3*xmKH3H(TjE(em2zamvqw z$#Ao*YEfp5_gy+Sv?#x(ue4L2dNQ z)9vlR`QQ|hO%`_)S#5!iR}5Fy?8j?1X2{OQP$^bTJ~xk)2H1P_Ng}9yye2u$lxj6l zBmhi~tF=hZhq+NJ7oH%12=E5*5Z=yI%Vk)*fBSrJ8A65m(>4{j!GDJ$fBh&CPsxe+ z^`u|eatwU|ixI6V23=QMwO>W+Bjve8kmRHihLlDY55)w@kaYa0 zNRu28A^>SHNgqpIHw`k=@rOPKn$4mq{{;R;ya{9%J1Z%o zfGXAE2s6lmyf1yBdUv>dI6?fNst{(HL|r*xUa4qqrYj=_)&#_uH}N9uz!Me^v^eg? zFy@j@O2Jw(8WIIV$%)bw-1en<94GM@>9PUeU$D$GY&Y@}A*=PwQK|N{{~T|xAB<%$ zmTroqtq@w@!)bq{ojb0Z~nYLJY3xQ^8+c z00L%E>Cm5H+P;3j2HY_qX_%Sxn=_ALR>;+g74jT7_UNwux^0L;R~S&o-xhLHjIcXc z#7o@G=WQhj1kqK_b4RHR_r8?>G#qqUL~Q&Sw^5~w)TM3I)oT44OCe1xFpvNPDO)R{ zQ2FAv~#%t02i74V$7pM#rx-NY=Qy4eNT&l(8v3T`W zPvhp#=Q>7jJDZD*acQh%z7C;d<#M2w9q&}xOrj6+c>DhDJ>belilfsRU)RcI0p6pk zbDMJ17j$fT_vj$g*QV8F+THX8yH>=$uUuZW)-no3>Tsh zYp8iiX3v`t$PkQ^MlSOI$IqULfjb1<_87WW$rzVj$*>_LE7)nM3_RsVL#aXj0gbBwU?z2(`9>8^DHI=x_4?`ULNzcDansQ*}>AE6b>@+Q?!GN{Z~9Q22_#pNZCy&QM|+Q zZa&i^5Zt|k5u9{~NhLU(G)~)6@kntCx;DKd>)MW!CnO=Ncxpibevfk0P050F;3u*q3|k zYe}A{X>RmzHzY|pI)sm~s%GN_jwfN?yMgOC5ieB$1bM7C;?Wxiuab!~>wVV1t0n-4 zZX!_M^db#sK&A!KwWNtSFC9VWSz_(Dxys%aJFsew+ONfbZZ|jOhdABoz78@a5E_}9 zd6T59@C-M5p6bx4vGDdYe?)q8wqXbkRLy|b(uecdP(>L?uxULU!velL{;U+vX%=ih zUZ`+b?5M^mK)^oVo8h=VbWpTKIE{VuNN$FhPv_b5ukmHZS~@)f8On6yNQg(f4n~-K z40FZ@b)6964RY(a1mj`T1{^uoF(Y{5P@9(r_U@e0-ABB4m#}@^Zj8T4m^&o1edoV^ zJf0=ep$QG?nj^t)w4=;l8{l!6|J?mQe?+$sCM!k)Y9(`{?0uMp1K?EV)h zT3Tjd-iEffQGI!l(QPaNA71@?2@pRO(Y|)EDK!*OdiMxRM75D1^49K6C(V`f;?UvB z(zrh2#c4ITQC*d#%c*@Y_tqO=xzFD%kF%Jf&vAKEU_dlMm)Ov45(XaN00dMrlez$K z1h%tRM`#2lAx$S0FP;=f5CIP|qabq{h?$aTp)$niJP7Yo>qETV%4eGR$3x+t@r(jw zMDL~+PyRYS+~hegPeWO1UkDR9KPiEWNC?<3zXPs6QM>ie1aWvgIh}^Cx$;$eWUQ2ujq?*twO4hWg>_V~R0c`}HFY+Z2yg|ug zyd~GZ>m;yQg`$BC6knLZ>ywmy@k2R+s6z&@RJ`QU7mMzGzHP!j3w+G$oZip3Ra_6? zA0ORGsFlU54cSZFt~4-mt1k^e%O#U*J|#}lif08s!u0PFxRQGOy}J-Z(+szNdV&4O zEE^=sG1nj7_}avh_#qyF#)!PJ`Pp}OHAC~VSrg^dTyfI9A3H9hJy>zQRdZ<0riuBi zoaB6sF9_Ar1-Djy76Ha)x5)%w$d`&!Rp03JTM;Ec$BIEET>%7Bf!c$gy}k)1?h4T4 zsm80d|6dNDK#;!ObMg}uIX)hTVCwE#=BYnc^4r2fI7dCJ7bx!7w4pW1Zn-T8gSB8p z&ch%Z<~^xeyh@$l6Kzwq?lp|;Z z!*k6M$;Bo+v|N!I(h7fj_%t7b_Gra&qOf~nu3_jfg}~3F5X^uzvx_T;rbwK&T+cGOST$yn4vK;WHTW2~7=kuVkgyb_%C7{Hw&&O} zW7{ey*TGi08P*(aO+*PsuY zmH1OEyVKM;Xa-W9IR}7m{Q091NUWVaxgXJfVq=PV>f!NMee2O{ZXmKyHkBL&I3lVv zV1LDz?QjF*JN(@A!4en{ZP9_eCJ!I#0+r~`!!F=te$1UAoNdZC+5c2%r*+QHbPz*M zTwr-2;PeF5t0F`xFN* zN8T+Sl@3N*t8zEC?3T=MOkoZJk@~R$1C`?f1cC?OCX-TZ$?p85i;>Q(Ns81-e{!7J zyx#xR{3SbOcJ(}lTpB$q5~>ZLrGi#%i2zEDnE*+~p>eA*>T--^Grm5!$3Y#v0Unt~ z<`M4izgCj0@oTmm;jropxhQTx_s0T$Gd12d^hDoU!poe)kq4i#-I}4@4K`^B<0zGA z44(;B9E1N;+S{8VKV6NR07d$d6>4WGkPZQWV5AfJQM|5;dNdB7xap^8hR|p{SZmOI zTy7x`SYzFQy*;E6n;ipSP=J_SpF02zKlnQ0CpADD0o+#`TjMeONr$c%Q#JvJKmO&BBMPwr|`8v`||fqzzvKq4PFrHUpd+M7@OYJp(L5QyNo#$yNaWBa#*!{OzqXlT%&}D8Bs9-b&zFRvWtcXeTnRYW0&(?c zL3<4^4(a1k=V5#>Q}2x|`X#^Jt9i(kp;w>?&;TL5CwE5feS2Zr32N0;Uv5hEXgLJ9 ztxhKi&X=6;f3Rt@z&<_)RP62h$%NuT1W^MoblP9?3$t3a$!eypR|lPW1Y*szGewaW zifX7^uXERBko}gXQy96vW45&HTIe*|=Yy%wIxEX>y?z9a6}vXqXYS{-i_&`|g}hg| zi(-a(9b~@0;>)k9^YWEI(LOwbXT9nM0=wP=e{aLDKP4u56Jc6oW)5!kR>3^nmdB|J zS9;|RtOB21i3e|MdgVa-E-<~Dnr^hA?|%$gvK{OXkpw@T(zVj*bUICI&Wkr6tl0D8xgCSLwwcO{QmLV;_)-q=JJt zTc00NpI2TSWD}*Ar;G*@GT}O%mXiGO@hK*NoaLa|k^aVi)M+rUsfcH6WceR?tPDg@ zl1noaC_Ir)$@=@2VtDYSQu)h5?hK@}WAOeVhv2g(#m; z>^Nf$*ZFgLyqln$soW4O|-@>_;m-g zLD?lL>l}~1*VRL3g?f=uZqU!@%F?`y57ssZMs|`x_ltK{yH#b^x_aAL7^ttxb~a~L z;q{ozl;&z|gefP=geP(v8g!kTgNsu}Y;} z+BxO|4iWLpWMn<_j`cth4DTrwnuoY&bVsoF*>J|h>A!iKBpd0rt2(KI1#(Nj#NnvuBgiSW=qVb z8F6-k?xA?p&-p=LsvJWx72+Z&C6~?SHLbwPXm?2LJYj6Tx)W;8-)gNj??ClmRoY;tSFg@j?|O1_y%T#P!8o%j95ncsT< znT3lrdg8hF-uJbysP;nxz`Dz1D-TQ86BToI8DFZIXkE9>GmE^*cc*ZLnes;U-KTv< zUfOvxvKp_!#gYpI#~Bry2I*?$H(8}#Zd`^~8}flS_PGe*_98~ZH5J^<$~l_bs*eH0 zL|H;M*%(ldKKcG@Mc#PJ=hk=LI{32bEF@G+p#FlUzB11tn|yW$NXd0x!W|Zyw|dlk zcpa9_h7%1NGwK~6Iy4@4UA1iQwe667B92dX8SLi3bxm?;CtHnf_P-z7ug{8<344g- zynN{}`rzKyFv4bA8$R~%m{vy!m_SYg@Un6SiFtw;vbx@@)L-TN?YA*?x1+h4Ic?Hh zn>XCi^OiF(bMd6=#~X&@yz#VLSPPdIgcf$VZ-jiIo{Uu)4$ zndJ*SmW%&JG0c5Z$NXoWqEUaIzQIVvLe1B8&3^jJ(gfc0Ba11rIpbs${{r|mJfi=4 z$w-+#t&(l@lubgY4-Y7VN%6MvW=S~*{!76ExzYzg3m%P@eX7*oAB8_2lsl?b+O^+( zTmw}k*?~5wF5*0=!c(j`_hRz_9nFp~y)_E%)b%#iM9Dn&sQP5&v#0%pY1_1Xc)y_z zpLfWEy`I=I%bKz}7?Q1((yUNX9LjDkw|h;=QDJ(4@o9kh>R^D9JOud0!9~f=!^{5? z7-`3uR`|)KiPZHgGJ~l5K@_Bsz)iv(%=b$(w;r>NXwNgl1Tfeml|dcumg+j`&Jkbx zdZIe|{2E0`zocp)msiQ=7$2%T+3jr6UHF8K zKbMb_ro1Y%QVgI}VEmKNI4sY$2^kRf+7l+b92GJ!x_A%3u_>l6sq!3Nkg|-#dBGPN zn=g97?qR-x>>BN8WReZUFqLYwWX~0ijbV&my=nd2exm(JG=LBYprU_S>G?|m3xF$M zoaE=d#GRFf=%WAsS}=jS%=6s%>CtI(Bk#wF+v5HQ&yrrjc5c?%G%M)slW<@kPSi_O z>9|^x!K(xpiy1hn^yDn(*FG-K@Q3LB@sB}|k zJKHAo>dSLae+vKecO3&=w)3S$o7!W_15YYlXq0*IibBlKNbw;<4y)rD_;cgJb?Pv- zbpt%M_Re%Z=7p9OlUvRaJeJ~;Da(997^`JlB-#4W#ep?>)2^oh1tL-#s} z$=lzvZ1Ow8cCGw_LPmaIC1(h^$)h@09CT2f{8EjEwdp&~8=oPSAQ_=+0e&NkDm+eW z?kX*1<|+a7id0acOJLNr0DEDZ~zA5Z)stUr-^1`^_o%+48_LK67L?A~YEa2YAAh|}-b z9=$+Bw*VB_F&X-DV;>KFQ~?|8V#*7>s4hPdaqj}eXcsQ~zaZs&gPa4xu3 zI@j%Juz&7SmMhx3&U}?gC^C>`Vy`krnFJjA27fHN7eHpFiR${^-l=HGV?ZRgV3xEr4!M#pMkY=0LxRATFJ4d>`iK&`zK=t6F}(_L47%OI@tKOooR^ zcQOs>lUzC<_~$m=Zv7aptORhvaz5;}tV-43ot-bYk0ryH-Lj!$S`1KYG392^_Vzo; zz0}fm`t+qsisnu=!M7WgurQMND39LfZweQRr62Jw1sVALC<=8HlnZ(p)QnTGs(1(F zwuXZV^3XL2!2ORXTe6+}l;M}7xfNS*Yy-TEFPiaj=Q~T`q$F;c_MV|0MdujS24fV* zRCOsvCFAW0@8r8p91Ffc)}4}FtFO1h_QDVTBjYjd;k(M>NWE^E~t zQ3dKB5yR=xAJY)iRZfpV6K98BO;aceA<@udkfKzxi{{E2fhl$Z^;%&hm>fO#y*oXW z%WM>?%6!-3d8i~jkEKsjjnoOnVGcBHu2tb5YrvB*dPnhU0buZcj4(Nx^df97DKE5x zAB!pd?a&51>i1Xm$55h*ypVdmDwI*Dps9JN$ zF)>RRWU_r}Hp#l=ioRAl?k`>z#ZF~b*96HwvmVCp5JGP`ghP_nF@s9F6JpxH6DHEb zJbCwS@g)xHA^Tl{^em1r6wqew5X}rn?iM88esL6dIKe%0(<=QL9uFAV5vx2TbeW^M z=@8#ESWH*fPZ|4QX4>4zX6FlbRP#tNXyrV&C?GxcI}RsgFWklr^;>~y{AzWc5d*Tk zfeUfjLJe#(>;zv^xIO9EFbb5CPou>#DQLtSXTqZK9cj0Aq%vo`$A!MD1vEK=PiO1I zsnXt9EwM{FhvIglMLr5aPAWH9>Wa;5Dub=%JtBn1PZUI-=?>~+E2auC#>LoQEO z=zDkapo!X7o?GP&gB-`g`6u{d%tt%Lrq`;4$}!)sl+&d;f>MSS>|eD5=nvz~;%%jh z@{ObZeDE$|MivwE?6L7_z$!6X7YlkdO+EAY!{9^H-} z#^)2Z%qU8X0zJ=j9UrWJ_od8E??y$=5E{B{EklY3?GH;fP7rgVI^<|G(_EdGrea=8 zu4eW${Hf>^9PNPajkkH;KD}juGbhYmBs_}qRPnsMnvZ1^4t4`$bs#ny-0fD1-goto zIaung1Aee9-wu^$8+w52Wq_4CX+_RbgH3us(AUA2HIUHSUV5}X<3+ZAf5jx+;iki% z9&MhMZ01)gGK~QNKOy==e0ae zv~e8+YpC{ z7?ewY7LUIV9rY|Di?UYrG#2>kjU?dm1~FatJhi5?_#h*B6nmc6bJ6$HUrj)L?Q+fP0`R6l)HUHrU^E!av!h5ub%ArJ7B1%saznde zSkI|7h(Ly$Rkxz9{`W7@LuqSDc=vp3!;CrWfLiSEsgU!;^d4j}#3IeiFm&+yB6t%x zUQ;5ig+5eH|LPc9_$5y;4Y|v4wU&tu_Ul|(J|uHmqe_jhQEA&>*#oaoP3ywi+-kgm ztdE{Y&Pe(+y3qhvkUql{j(G5s80AUG4_WEcu?>p6|7NO2aYrW}`g4TO+S%s4UIC$Q zUCS2lv9~H;Ubr48n^EBV1pLhz%HHg+4?jmZJD1>S(IG65yi7^>=wDKwg8a zLXIbG?oP*F2qYBp=2W&)4CvJ!dZ-MkhHJKihsMj>+MQK5AQ`$`Sa}s1Jv*AYU-O(@ zi6(;*EXkLuv&4!YwE=nD0e{DVZgko2R=e_msoECyHZ{Q?w%5%zp*Ww zUR!}NMTz$O0~yL2b2o}Lt`u7{d7Tx**Xz5A_Cx%V{d`+oFf z&R;7@5x-KXrG+ImcFaW#x3k~Cx^IZ5LVNNJUj0Nn&$podOU1C!v8%72p?)1Mo~_9+ zYJ>SGHgY4JH)dV2++M1W7L#!+C4}6?Ac3)E>PF5${M?JN;|C0rGK7_c|`TSTTE#y zqH&U>ldRRpM)IAirOtKeqJ-gYJo!>la^LNe|JXRtHxbNiTI1EdA5t+4h`O) zrY^AN$=^TE;oUngZG42~!af$P##@^bO=d}gcicAd_?zL34$EKdx%%A5+)o?)r_Xd1 zF(77@K{T7zRDAzVj{ooF1lw?Y{p+z}-;>Eo*I*wraj4H9z3gjJF548sk<%|`2vdpO zL8@kmMHxxdZF++q7a#R`LZ26fY{bZwMnX^$8>TEjE1gq!{H!Nn!M8wLxwq@c5jENj zt0EGs^=@U;WXMD{q1i1w4jH`(UsW_~SwbWpGaP#GV~jYpMWpd%x_Ia zY%ESRplpN;O;_B=$S7w!_0k5v5h?_JK*GlQ?$*3xhtk&Z5V$8gaxep1npf#UAUQfQ zC(56gz3a0}PKm;)w;sCT4nL9+rnZr<2y5jo&nsNFtMJEdK+H~1&=5NJRX9W1P+x!4 z6}b?SF)hIpCycDBZeS>q@@+Fo+)lp;PXwv(2odNBHH>>X*}fb5kVJ&aa8Cq2JU)~m zpBVw~d;+D4D&-|M62?TeyJs4eYWr{vm_4O**Je<}YT~j0QDuI{t@K?MlE!57^xCS< z&+T0i-Mg)Y%jVzP?m!#nk)B1jlt8jd+0-yxLpZ{I!c-^OtJAMhS@1c}MY^5REYxMt zDVP7wCmVB>j3lFwBuicWM*rnWpJx}1_-9~suvpz`MEYGITQG@j{ByV@$>i6@0IKR#i% zq0KYQJZLW5OVQ{aBT#j}wtoss8n)}@KGbmsnTbmXX37G?JK(rSBDQ`z!+Sf!4<`MD z27x?y#(q*8zh}93Q3khm#9BEf+ohDY>BvP`P~ALedvj=KSdQhvS*uS`i0a_Kcq{xA zBdXCFF_=*tKDaU3$WU5%{@i3%z;NVSn17AK<7|)<7CS{Hu1rSg<+ev0_N7xY{dX@M zApi|0l>&+wcK#;VvD$do`k}_Tge<2&|A{~TMR+HGS)75?0axE(s(CR`j&lhVSxtt6 zhx^5r>QH#ick!;jm92gCpmRjxdY2G8-0gxJi$7jbW-m=*RV-c~dp)?BoCF&qhsS7& z0R*ftWkK8IgmU0Lr8}epUN41s(b6xU#>^}sS&6_WxW%H!$~g!(w?sfRTDFkjvpmqm z_UTeMkV|AwrJpx_hy>@X;eR4>ijavcC(8XES!Tav06VptU*B9=&Y^0{giE2QLBYZ$ zsw{K3GeMiIENhiZQ;3Ekst9{|P~=@kZ&UyT3bz5!K7tDEN_uenVS>a@KJ*%YcL=ae z9HQAq)e6{JcjY=W=jo)c@&vbD2IAos%BkY^+~(KY!aLzo#<+m?s`5t1$4g4tZjn_s zXUk_F7~sfoI%)vxARE0xl2FKTrF79ARfOE;l)^BWa9hwK%W83pNT_Tw%#~m-wDJQO zADB}XkP$!B35$@xL5JpeNcC2#MJi{{kX@BUvHSfeQA_OG z4?O`i50yOM&+-u9rQjK7&F9W?p-Lkudim3J8oOS;+L{nuJPb1w4x`5nP zcW$ILafem{34L`0<%|28_4s3FoahPLy=9yEuvg*o+_g08MAV^K`u>!LmIjkr?%aI- zWqfKc)T*>UO?ODe@9x~L!~~P7;@OZ0O|?^mQL4@+ zGnP4i!_G{-VUF$PGt1uY$<8^pQED5pVZx!?^c7&*@G5gf(sciS$q}Sa#Px$~70CkT zIQ9u%?JH3poAZtVA-_-0|BYe_5D@l~RDn!WHnoX_kAru?Ezcwzgbx<@*1`h#`gox5 zd|CCJzy#qYbX9i2<;m)*B-Gn*t zv4R!*;k*wucg&U6TMq$0m4j(F4+4`^A;)@1fKQYK{qZ$yqFH^!=@1m=RB-U(+5Unc zzHQElRy*KRXsXi-A4OL-ku4W6mt!3RUTfE`HWY+Xv}ofbsfyMZLI?+7k;9>235psu z-!Yi;BAnVp)#&(~deI{}0^+#m2=xQe!k6o(c@?l_QC$rPv0kNP5_^uCDOpX;@W*wF z%~x_5_n*IJa6aFF(fQ}y=c(vVM=1LBwP6trk?7L?+Dhy1XTkeDQfEtBt|G7P#lwrx zN)#4wjO-qm@<_OTBOl(+;GAxmoD)G1`8nt)3$6Ul{Nl;~&K3JVVb{qoJQA^Z;h$#~ zJ#aw7pXNRU(1-;;pt&CPCc?F`*}Pbb`vL`boUnyQ#nxQ? zUr##eeegevgT=&Q{qkl1t7cK)z7XLU=ei_U-A5e^d@F{NS<^4Te~3kvcvR?Y+>cPx z3dPD2ztTEy8Y%`h;)>H0hqR+f){6LRD2~X*iIAD&laVK4>Y&Kiaan>|zP~enN3zd{h+asfKhb+;JeRU)#yPJQ2v4YYGy1TbaFb#F`EL3YXh4Bi}T?CNa% z#?r*0=>RG_MS~%go0HU2u|D7lNyP`m!Z5MG3(+)l{9hnMSxOJpsA-GMRWk8-yV>9*73JalVnV=~_S>v(m_1YYd!)-9D*ciz3@gzYzhHvjxR#f@Pr zOnn*V`%sIv%7lN%*4lg~Q0r0v=9w#M5mvjgbC*&zP$#tgCSAbLPd|-Tt@yqJe9gX9 zX^QPLeeEBQ>FQl)@;-5pCto5;E-cNc1jOf;n7<5!hixIGRZES6VEUC~wcllDk@CEN2W2ix-G>})vwRTyhH!f$(bd5A<$-^?;~Xan~K?gReZ2^w&+{-(Cc@e0g3P>Yr~ni+eaK*y#GOS;hVZ-E z{xk8vypI0yS^ejuyOUYf65bAmJF+Pvt$eJM17pY9!C!l>dg%KsB^&6+J5d;kPnX%p z7^GAEr{hpEik$7R6L=_0^ntn5c7D}B^48m7!0^h~U~mu0s!?~@sCBFWg~qeBnU^ST zRnTw_IhH%Dh%LVJ03UotV3+1`i9|c=t$Q{0%g5=U^JXs)Q-=0 zW0D-ly8{b^_V=$^Ve||JUmN2yodxxHFED0J?u7MkPRD}g)c!HQj#e~3R`aod+{~rk z*#}BEzc6mgAIP*`pig0@oe3u~74UF}=s=1K@5%@YSh2?W9%msfpg%MXc<4DF#?rij zW;K*r3PDwXp!&0yEeLVFU0li;X+eM<5F0e6ezRsm4P?9;ST}vo(?d5iW6?ga>-oe! z_@%|AD~gWY&8u!Zhx>zIwp4>f@WQI4k=bMiXp(WR#5(-5CDR#8t1I7%{fdp%twBN! zLV})hEHTpYy-r=K#_cBNN9qh4;|djv%pSkzFEF)RY-Dy6jO8d^HbRf)XjX<69D6c6 z0gId#N1uN>OpZV(;=%d8hjRn32Y%8|y<&|66WMEqyP-^-$g$L{A5W8r5M54oV7=+eR{2UZ)}rdM62^;5?~#_Pvtaywh< z2^GU8gM^Ez+x_2UMRlVPpqxQ{@iZ6D5 zUO;kWM*PK1MAwG=16v*|Q{hc!;`^+sjV<;1SsX=hg&CLDyo{g6R@Ee?x!`=qJgOSJ zD*RV-BP9ku&?PVG)72l*YM+S#Qb7V@8;-)tP>TM2BHFR^O2y)r{HzC~kWLGiD~ zTmL~1No(;+Z8n^q9^P^S-TM+b+m9tUDocHifQWcHW9^rWimpV?_o!=CW_EvsMc=xL zKwu_h4f1gv5LdW4TYbX`I7pT)i%3xNr2BCv0D_muFGz!;HxR6QKS%NpPns+)sNt+& z3cHcw3;{4fnP3iav0wvEgIUkPpv7x?U#fZlZyrW6YIcKrRkRczmtIUy zJrdSB=`QZX{;X!Q`b?Q(S~*aiSA+e)5l$VV>75`bS~R^RcF1;AMUC!r6A9s0%TZE3 z%Cn<@v`5G%mUH!9H_DI*zu6_9AaPn9VxpYb?=(-kGdanoJo?#x9ry=@<+z|Mm$Zr+ ze%J*p|4@K+8}1(Myd^$r!=!vgP8|*>uP)`CZ_c#dt}~8LkQh{S{aCx|y`BudHC{>E z%S^y$ICb)ZQeN?vqvLCibYrO~9LSs#S_>FgI|@yQ&*M(vX#0lcaraOKJgX7tbx}*l zC%Egly53>ytZ@V z%dI7eNVM#7u^Gm+)ESH$9E^=1DsLX(P>Hua1)+0wEzf4}0Ry>w*07r3R-*;hv~pzw zG<=iYL9Nb*ohyERb*}jMBG>8C>69-OKG5t|$T13Ew%B`j!_gJXj6=eN-)yykxh%Ts z1rbscWj&tLoQg!XFoU!I&<3S)Q8+pkdcJL14CISd^r$(qHF5_* zut3e^p+Tv|p@%lHxva@FOT?>h!@A5NV{8L#x49jEkn`NvoSc{`QXlhg-^g8tbMLKB z;LWT9lk1qx!YxZYt@_OYbJfWCdb%rI{Fb#9ZeH4#HSf%<1<)eHYc{*aRxk)$*D~bo zVNd(9U6n_dx~PRYed)tveTkD8;E}!`vVQpB%cJ+60*}zQmfp0==RA32%ka_5bZB6* zbRzgjYuynjBW^yGbZu*lBipvi=~tBA?4Lq`^FVznsO4easX1ZUUS4>9gL{TiJb2w< zb>`hTpFdpZL}#fBP7^q~j%5SHI1%?7Vmv;JXQP~18s4NTetedf$aQOQR`U6ON`y4g zqjVPF27xtAv=ZLRy^<>M0Rn-!a={%3ajjBk(=sqmWuUor3b%8_c7EOEg>u-$pY)yo zbou>J=}v4_1aJF8DN(Q;74{YZW093vRvK5QtEc?FaU7tt<&ut3NqY3E1GV%G zL~!|lgUDv8se-0 z(}0QkmOj2f{bY(=YwS)k5Z|ZelJ(lGm~}zk>B#^jWz*4u@D-56>dnt6y+`_f6eedH0-bEOjU5c?TL0qOoCkrcWa2=rH9zQg4)8LRZz)>!+|Ut0oA ztw9Z|Sv!8{yB}4Y;2hKXj4@h#pY{BA2=Z_EAa-PcE1zpAH4;!!nCfD7fe-6{iI-N`}^I4~6D&lCv^L*lCV63T0C$es-BUyoM56lT+n(5dRT~0|EY)1c7u{&C3(A zMP{Q4a~6-5jlHP`J2PI~+?vUajVZr+9IJ<5Z5cdX-)O(s{5iD=vHA|JEVelu#dW$D z7XsWCz2owL2hWdXgq_7ME9=Zt<8rNaIK zoQEMwr@v4NEa>*=)d$9@wx%O!&-%Vc{FpMr`V+IaT##HMK$lVw*?m;IF}vadFa{sM zg+!~cqrUeFIy^89>Eh$(oa`W2e!kwK+2 z!{C8&gAC(ZeYx}2s+wEJ3zNgWYPxwCr96>Tx%8&*Mi=i7gGc53&B&AdZ=Q0oNl(Mf z*<)T$LwUG7{x#u~Owfq;O}DoH0l%J=*Jz93o*VLK^TSmcnJB{QdBB;3p)8vrbgO=h z%+nT-tg#&`fxZ3zPlz2nZ5m!G9>5bM>K(Z(2an32>-|50>c6c+_G?j&N>z0(7!x`y zKhU37YdkbxGD(~KC>f)Ek{ph4AW@n+5Oj|XjOx1{`(;wCn@L| zMUa913Zo=sBx?zfUXzQEVs-YLn%Pz$)KL;HrHO}9b6dm}81=;<2fm_UI}@y}YsJ8>^_l8w+hhQc0>2MP0Ii@6voM`W zS3El*+&19hTd))Tg0>xKcvS7$(i^ULkpBaPRF@qLLwVPu_Vy}Zju><)9j}vVS=3}m zgCVPDI9Q41Y3(7pys8KLE8YLxRgigvfa6O>xYb;-KhM>1luPC6`#tJ%s^Q(YpMG?u zS_8aBXUUtbA_x}+M2M|0r&+Kz8|gaUk}Reh#<21uX!djTK{5;=lN*bo+D&)N>)a z=?f$ffctA43Qds|j@vLED9VN%IDVn&h|N)V%+`QM+Vy#;skGzN`cefwsz<0=AInfA zS;KT4?^Od(iZ3Jh($(%72TRKk{p!ho)j5GTL}jb}^nJzVVom$jkifHexa(^RTb3Uv zi+j$;zW;uAWXN;zER+5{B^TaH{QR+m4y!-$+CSi1#3eEdB>Lk4K?s;IJ6Ahrs{aoGFZXg_dx zfxT50Rw|iN8)M3$YeK~q6YbF9wB~HFoat%X1=4@S%n95gDmr2UPP3FV=Yh*fd70i8 zBiWxn-Fp&oO-FN-NrS?s2X;+ba|(ClsCCavO!ro3eP}k0UIncwSf2$3JcxE@c#YGa zIb~e?O2(VoTwI_YjwJRiMH0kyRctScgK2{_$p3l(NTRZGjdb{Nadx1%qx2p#>*~R; z+!CLJ8eMibbn}h+F6+560V|{#4G7$$oG0HVb?^V#DKsUco;1p2i1U4Z7qG}nu4ul^ zLGgoLg0;J1WBD*P4o~H#U*}VRT9Ie^NimqWwqx-X)!2~3d1?}r-k$8@&n+UUv=5GqkOgzhuHTfom%)d9e zakmiYM0X~i<1%{-6xnv3d69gB#&G-wr@|TPI)vM*MOvsJM2W(3qKncFaTK|X2qdeO zb8>{$-VNVxgw)ob6F%&Je5XmXrqdGcho>NIOEuKNgVuSu&1$lMJ{@od`<{lt(X-uF zE*JjUKh+@(-{7cOG z$%asQ76s}43SPb~smwo`!9V^Y`e}lrw1E+h_iz5ZGc{KlFU}Fvo#uz0^o97b>EPRv zfWuPZg>s2+t!?2S(u@_ZA9{UaknRhxnf0dHR4{@d|nSh&Z-8E||`0vCB!gD}`!!Se5Y*WKI5Q(ko3?CZMy!49yn zBpG9te19Iy!B&1u91Ck9ej~4De;3FQC-4<@J(#S2k1_wLx}=VHgC(L6K@_5L)_RsD z+%{s*TF1e`oo93}Mf^LsYlWdFZ$7umXvT!uk135bkWKX)GNNDQ3a}C5O@V!9Py}ft z@+fCBX!I1^0;cm^ecZ}R&ua}lE?Z?sZj8S9f z{^xm0Kp9cHgC`0Y70;DD1Ro{#z}ukgW|3#_=(-Hn-8Ds3CDyw~<r>wf9 z-E7&Yufnq%Uz1=sq zh3PyOTuXVrn0H8W>8p<1QLjsVe3anw`Gtj#?J;+eV6tLMT|GG_?}y0bVpZD#F%q82 zSe!|zB%RX&)|R&mZq46U?Fa9h=H!6?(|ms_mOVUI#P4h)--Px()KNOVnHKvN85o2v z-(>9oY=8+l1FJKBV!_Qd&CUOu_x8{6C06Kw%^6BJ_Z@giFCyECruR`agd$*R!S;^> z`p2QgHWL_H134%2nQ?L7skhQfT2Qm|i<0~t8NFE>p^tenVVKgU{sa_=+?e@ z)@r{Y%&}(>694se?Ut}M$Eoe&NiiF?vE?cAe5EN2G6o2ogk}Fcq&t{&r1hu;KqF0& zmx4gVsTXvYhofJ!mxzG)A{TgRv$I!pDww|g!)Xz#K%qC#>w0SpnkV?~LZ*mLbAz1^ zoh3O~Jl$0-vGOB{lM{liC z6In~zO9S3dRnZ+lWk3XDjc?!vx|orlV`&hmMY#@Ig*?L^c1RBi_di2QD5inCzV`(7 zrnR+q_P?P&|5M{7uslRg&6Vo;OKW?l6ei@hibMLY7$g8x+%TZx&tmd-NQs`*0een( z8{e%|_KE_IUk4-4gtbQXPLSu23W*XHJ1%-p_4+z$7AB=0I1Y&3F9sSM#>|YGdS){!x?Rd zoy;r=EwsU#U`MY2`yelW+W5g{cT{{ZTRbdfBD|3V2&AZ-#HtjJyFWkzMhb_6sd}Yu zt~@IC6$g8PD?Lr4A74yAJ8@qcmg~!4Qu8F^__u$`P~TE!eLW5%Zn^?PxJ${n#o^B6 zfC28rkieWz1Y;s6euJF1nD2)UDw<0lHaOKEF3zM5-)9IcI%Hiaw!&~C|Ug)nW^QmWhKrmGaoAj}(Drv<^j3d}?=N~h?_5EwGGZE>&m zC&92NiM_NViEF_U8%+j0SO0K~j7has7p+ znSj2Px+Mpzt-mkd1q+82u&Om&{@$jRBH zU&cu6Z(&Gp<1vSsxfi+`^n6w^`+z#bW0N*lzNQ8%6mgI;N*-Cc>R76YRWb%Vf9PJ8 z6~UMYs84Sw^;!KPSo?K9#2!Ji77k*V_Du@}=&wM@)V}9sPfF+o2Qk__UhdzU<$r3a z=H048tQK09sV1t36%~^tw3m3OR4KBrgVfrO0VlQ)1hm^E+;U3*wZ)GU zho^^GZRZ9YV0g)gGgug|#vb|&6VmK=Mb}9E%y2;Z3Pkl^ZJ)7S%c#8;j5LOI;&{v8)gE)Dk@jApCDhE z8^n=3v48*SZMDQEy+U?5WTp>aD|DPT9X`3e38f&Ww%BG3t#WU#Ldcp*n8lL zkK#TNz_5^6wYdWMMly2)zQ1Z#+pmP%Io!56@r&vW6`9 zYELt19r|AfRH@3#K3+5+4kC-SKgE6GSgS0^B1TXVUvfOhHL*~x6D=X+!O2|@V(t*B z+Vp7;`AFvWL_<$3L{yL8S|c+<)Eq=Xc~!~fsLv&&3H@HhO_O&%5%~Bwr{V%Yc@y24 zGP#2}ne~CGr?hP_xTI5TYXiVVh>qYl*jSu^3Eh{A^z+5Uu(3ngx0I3F;nzAZ)hx!w z;Ft1(xB`EYtnU_e0Cpnp`A&J&JKfDf!`GDJfcwd-GIph1gxDm?;Gj*7ERZgC7MXuV zOh>^#pur?Zk_7huEmEAq5GzekMShrSk~D9z^;YG9zw z1f;SJWnO%qofxm4e&l|@)Q{Bo>C6z5ij7k&n%za@AZ}ri9V^(f+GkPIzpDc2Ng`;m zQV^2Vfld(KJc87pCl7zZXb<2{h0$K68wvG2uy4zP5L~%N|Hq0a(f@w-uosZ~#Va`q z$^FXfc^~VJ0=u1-Yr?5o51?WzsH86ck3<6O8?=INaOvIzgrz zq=~==ASOjVb8hDm2u@M6c${Ki@F?CRCas8D2?BisOtu0-H$%81DowaBfJS$+OSZsB zk)yNuP-O9RMyVB`gAUX5wkGVRQfM4r{_|rYxj_Rx0l%hp0SUsQTasY)IHoDRTDD-c41xcwMRU-yMZ#_e!+=wCiX8L}*m`Pc0J;8*^m@8Ov% z_vRFyJ}NY6y3$*mxL5p?9GTwAy?{U+PmLVI0%K zCk~m3rex=)t^KF(=Y=mZchSyZoHb;h3s~heRJY}fPcMaEYt1gfT2Ym7p4mj*D?DE- z|A`C1<+B=CrFb#zCr1;0wa-7x3f7Kv#QUqA!lz}j{o=0-#UH+PW%&bWVR}EPsIvp_ zzLP}!*JbA4XI+5-BDgdySK+sh)gs34U+Y9yrt4|&X+X@yNmPVkm}p{@O+S->%6WSd zB^HcHM#9{;h$PI`7anuW=)(zA>+K*88OZ|YFr?k|8=ULgQ5FkfPlqwN_+TT8BR@rj z_G9Unt_URi_ErMj=NW)|zd$|q-`)mJ_-3tFzYagub)zp>{KL0i0EfI}-bJ>{?4`vw zSJ;r-M{6T?Fu<}S>yV57q0*7y?>q=bCrd}VWRiZFh+${Q%r+9v@O0C;@EW}ZO<6mr zZ+13CxrQ!KTD{Lxl`rqLk<`tJ6q|=SVKnC82R6kPUGEG+HnQ9=@Z$IA{ zE*4Agdl9B82wwfvnTD8z!Nu+)9_VnFh4OFO%p~Qu@`2IXO0ZI)3C%~|qmn&{H8orV zkZvEXcpx9(wO4pHjR~dAzaMDiZ}?mFAv}*vyhMk8U7AQ69N-e1GZc7+tRW4)bDCQh zc2?w@D06iS)V}>o#@?@%_Pftx8z{3zh~R)1NzdK0)o(tv=ceE{Y@r0RAb{jctriRt zN1ju>oaTgaC}mcLYKGaqFIU$Gkv{`j#h{$Z3qwkAO}B-52OJ^QMuJ->#owm8m5N|U zv$RK5YhP2!U$TvU#mnSkGEd{W{nLcB?rT}3J3IMVsfb%dE6={Z%y$I3{U*+T|WiTNu(9Z9%QZEmdG%%O**GKvVI6HB?zWCQcq{ye7V{E5w<#D?ZVE3hBX zjTxB;VT?|}{rbNQ)eTWquz^4wTlW#}HTQgZVnB1VN74NGtzNPrr`y=g$9wAk~I}JJ8ik z-u``8e^PRQpeE{Qqv2Xl0R17DoNL#IDzITM%=I5r=O2}Xz5u1uvV5$1XSPrVSI}-d zESeZjfpboa z8(qSNi6~uEb?yxCN{_$LWHfmMa#tVXgP_C+yU#swGU(#Nx-IU}XD6QUQ^aW>d>pud z?%kEhRI|Y9so;~lI0yf_zuZ4qNEPFEF8&~X9CL&(t@9%Xh&wC5#qrGf4%oS|tE74& zJ0dW2K-?tFa3Y0%aetgH+} z6vR^oC|K!Mlv!R@%!4x}=fwK)4j-fK1jq6f=%9(b43SU?g3(5UO)EQ!-eMkq7J>a& zUE>B*+NG@HQ=o5vul)%czILjo&!7{M(UYF~SPy|gk38KDwf!HdtpA<%3Ex%K(;+KS z=OwQJdb#%P4Vl<`49e8x2x@l`EDAvj8^2CwdM{f5m}ZZFTs_bH)sMEj%4n(}GI?X%aW1h{TyqXv*l#4m}sh^B+P>i~O+^&_c&@4kh zL4HvfJ-;72^hOruCdDWU#zjT=-WzgQnfN${+i{L_KaXh| zk1A2*b(I!^L#hm{h&o{iUYW(ogWK8ip~JVjwJ-DkqiWV93cS1APGu_6qdtGE_vY03 zsokv!Z=Qzmke{Jev;DGQ71NpDqm~K?_5*DrCSp8&!XszSmv5$AeeABn>2&7AA{m|_ zAp|8yCK+_mGwC3i-GEwCoPxUqRD#jj!VH*TzyM-7FtJo$)&QXj_m3(RlN_ z4s<#TMUfq&r_#62z;p?Ya9XsHO{J(gB5|Ax4?IFa3@jOX52>zJ`_&c1jVIYy1|2gy z6MYaDDNiya!Hw6U*YW9cws<#~nxqc?bjvIodC>c}X0!j2vCYIq%_eMW7=QvH^J#f= z8cD;1F)H&XpkA^-&g_C)t0WlKal^iLCgv?i9cso=YnWjzsEu5{#!h!iO@RPb(sgXf z3YRdiwHWq4y9exM9=Lv8mBJJO%lr z|JRqf{|j>rr>?i_LJB0k6QA_Oc-DBuOTLw(c4hv46R(dg%RV>HFa+jeo5E)k!m)0~ zJuHt%A1k#LEmnW|R$x4F==+h6?h3yXPslE4^h^$0hveC$^FR6|#3Xg|q7RF#!$TmO zOF%t-RVCMP{_l?fQg5z9y+PU^po0()`R(%rUS1pwsb}xL`i__{0<&Tn3|;Ri_vo3v zC4gHP>`13ZU&M!+5O)YE0w|WIJjw49#$(%T8+3GkihSZH09UJPuDec9vlUjiVGsE! z=Dk+xd!TOU0q@}lEXIti-we@{qL9nq)|z;{*j+&_{eRB_A$%qaSCK4>T+aQYWQPo| zv^_VSy&nMtu#Gj zCVh{sVD{&0fF{rAix6;F14zt%%Qlt0bS8(;gi-P~{dE+ks9&tne^>aIBj|r?`G0=G zgUdYXyxp&2L4OCi+7lvI`#1>PZf^;H7xu32A8+T6!a}b}P_Zp@bI%DPf#S{y$4T)A z@ohEl-PAlIdK+GF1`vr-?aY%U-WBOYExjYXVI^WhN>zN&=<=m2xiubD`iUER1-%C% ze#1*+s`OH{2#yCJ-p{X&;KE8PyEex>Lky%O^Fwm5o0#1k0ik7*u>AjERVKi z@Xdjpm_KUgH`LmYB;a@Uu8Q=`Ra@HhQY4fKj07>UvNg-gpx^1ypK}ibqD74r{}eTz z--U(A$Xz*LuD?u=g+=J!$M9c&^bJQa%|yOW`}ngb8reu`Uh8PQfRtGpo|vQ$SN|0n z-LEdc|Km>xW>lRiL6E}?auJ2zwVs?)>j4htV<3{aoEw2{T8{cJlI@(3?O65s^%gIlo(@(i@LA0T-ICD+MK zl<@lTqtrL{opgcoN;V|({)K=MeA7SXb)%cgJ`z&(*K@ zrg?x1Nz+@0yp#d!#!_qWAk(>P-3c~Ur%%F@x4prL&QAE(Cl;RKKW7cNM-WOUAIEBu z-q^J(M%#Nw9|Uf${dq6vT-qQ>+VdDzGBj=$7at(y?X%ndDec4! zr(QbhsXD!Adfx;nWilNJyIE~lna6Mce)bj$-cbl`4B7&jT}GIz&U$APQux||NAoXz z^d02|MHzs$z+&nFOz9{tQdd#lWncbfrltJLx>t#goT6WuW(Kw^P*<|!05J^$4ylqQKl|Iv;tJ=J0N(D41!p;FSO#0U+`X3KX?X2zKs}&kjo})qRp-Cz6K)z6_n5m{>6>?uE z+6^VvpRWUDoWbCTyft`1dOY1;k~(7RpTR(S7|(TwakkfQdGZSbkQ3tO`>w9i0%UNR zL!WW2(r2zWyUsjbooVi_ zb84g45S#^&3TWF9(lcnUdo}O<^?SJh<4k;F4q~PJTpl(1>r-Zu1_;y{1h;ca@s^N% zF=+@1S$^F$7{gW=!cvi~KkPR84T$(M%I4W+_{MBzptl8Te~LZ}NAWFEDwj0D)A(<% ztCw8FMZK{le7B-RVm)?_JKHh{>D2VJh$#O>z69O=Go7OvW%jsn_p2b18-m!vZ1o)c zUu*|@MzB)$2V-uCVNlAw_x`Hr=B{J%?H7Rw-*}OKAqPdlv3g7s2Jt6_0o`{aswmY( zR?ERmZL$B}>$6heQU!Ls-&%dj3fkcH6RK5tb;Xa>2JAYm1T8nQiVo-MCrBNuP)h)g zTPF%w2SZK|m9m9En)_o=8R0R#( z`+Ppv0e*~Q%?uo}yA2lou4ayTE7;Y0k??KEW?&{7$efK6!P*+0NnSibf#Kn1r+%9Z&07yRF1{re{w$}DVLMu}L8`Y^xm3eHsgHHB!1TGIi}|q;w@F0y1K1kGSPSAMX1C z|GFeT&7?c@9xXk`X{11$xId5WIW^n<_pa{VHTnB^Ioi=KmGJKIb%KpLLWFmuOb6LF zOt#TTB44SRrOL))mdgI?BM(ShqB+wMn$FJn>KtI$REF)C0l>^0#?p2dHIIKNMwAg; z7zGkElT@K=VF&$cDt;RY;0^5uHcy~=&_kr?cYx9_Ipsnz$v+nA{%a{M#dZB^=^lF3 zg3ln8Nkw5_tv+LfWYx(s;O#Rsb+~>CD$r_T?9O#_vAT+&n;k1zpynM3c%#Z_(upX`Kmdvyow1~z*aLO~TM&bF{r z*Yv4{*Hd=Tl`S2-T>TXElGjZ>(yk`Vcdj1R0#}8}?Pg@@m)|RpJS{yjV&F|Acqo^z zVzAbFI0Kn~c4)=#7x60~c|GNbh+q!~rp={MHPb$+oiCNeIxDtc4ldEE0-v7{7RGDy^!`Q^i=HLy`sqkK;1~8 zp)5%Z(9bLZ;7u`6*e#@rhJb@rfyKH&pN$0oQG>uaGUia41(1+y)u4vNeqt-JF?0=P zW7nCGL5QsXLoDV0(i{KE#YMw#%AdIo@B5jM3!3+rm}x3~Jqs5=qy@&(G_aG(`_o>D znZZ1K^UlPOM?&>)Kjj&=axSvGIH~uyfbqXlrThNKoah+Sp~Jdy?w!t8LW zWgkOm&kf-3ZA7kr?>Z10D6DZXeP)P7q0s%j>w1zZ>zi4k^$t`CYok@~Ya(U&aJVKO zFU#>%*o4uGdp=|6)d-#zCl_f+8NAp&E>W|g`Z<7c?;R-3w-B5R@c3}aDcVABD~I$7tCXI zU=>|tBrO;7XxExH9 zWml6K)IiJ7%)TgeG!GHrvz>4MmLSYwjA4C80*c25Caf1C(7^A{d`CiHE=+xi+zq$HlcGTimhU-@d|jmbpdy9) z@w_|gA(czU!9I);gxFtyLBG}(_KJNGFZl=#n2`d36E!tsZc5=q%tM|!H9dsyCpDxj=RuS;O>3(vD^E0r#}lpioVbCv|t?n!D%zop+E$?8KPL3u%5BAo@9LYIwZ`Z zUN&>7ujP~uL_)^boi_T-Y0f_^=}zS%V$xP$n$***{fSV4S>3Um)qYvcN*==_iMP*j zNiB^=D&&UwAv8LF_(rcErxphg38lBQB!~8-mR0VUjrop)86pSs>92Q9n(#gxlTGox zU6*HAv87uPjB|L^LTG4PP)m}XrGB^l`bQ9n*NasrL17`gIxCo?gLG(#Up*Nde^Jo% zgwY@?tQlz{6maXRnF&PQ7 z{Svg8rHH@-93wdYioTd`1Z^%VjIRXMiXud;5aDf!LW&ev#vrOj@dR7SG`W{m+DU&V zoe&4+P+WD-xz#dRFksMjA)s6onYde9#`DqU(^dN=4-9cuxccLNF9#A4fz}|qljzRQ z;jrMz%b9^W1T<&~GDSsi+GE~ljwoJa@@6rr^JFq2w(Z<$dz*LndA6DMg?UP1Ql`RV zCvd#ad*gW1GCh$ZA|q-#Sk5kZpHP}!Y5ck}y+Nx>$=23yYhu(kTfTq$W-OcL{ehb5 z;c5Ta{WV#>6bWV7PZNW>y9>etS0(E{iw(V$Jm7We zv^@MSi{zTu5j5=)ESxZ+jL*mR4q(nBZ@2EqxVJb1V{ zgzeQ*Iq-E1KOw%5Pnj)GkJr#Hx?UCpwtx=jVwYK@oZW`e;$w7dRQu zt41x2%o-JgO~!_Dw92k!ow(r#{~de`W$jMb8_X>I_b(_sKH{xu_%I*K%alGzY#tBC zH2mQd$G<-Fw~znzWsjVGCuNb6{1sRhml&GPt89NQ$4SBWF$X4E3pZVmi?Ml8_v4$9 z;7YLTT(U%koc^Xc=l)5Dp}Z=#mI_?ocKQEEG|T9%_H5DRF%$Ct71LZ(EB) zhS2N!`TY49`cKnK3r>r4Mb96-_jsPX4cJWfD)4 zjSM;P>%GlEY!TSam@n115+d8K>zvkZXnxbn%E z;R}}y9&7j zZ7P8=q=MHcI!!97ko^^Nh1(Z-lU~rVsC5r03Z!JhgPuY+sk*BLr<{>qVd|pdk$=4p z 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%0AqEB02bPK%##WkUYtq4LU*k5 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%0D_+P5oW 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

    >ZzEBJ@Ekg_-`0X&J1MQ^z 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%0DcP574II=Y{OG3EGAx<%dx6F_| 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%0Ae5l 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
  • ih&xSX!3qY4}`~%?7Q_OK|*TdfBGU%Ti5{#SC*_DQ*LhrfBaBQwJvJf89TFf z`4|8D?W+^JnpTedt{Zggn^5#VKttZW!N+=T*f+=&(3)g_MM>als&!Sl$K0^-lNwbX z?_~PuTh32|N^jtt^>LL=Bh09jC2x+VyqF9p2!1iC^D=J~1pf%T35Ow9UN4olM*ozQL>p6pjqe|49me}!ODK&f^` zYkY(HLEeQfpR!Kv@6wB27)zBRHJOc3{o$K*DNt)+>DGq{%?2Rs<3%SKhzwp1XoO;; zsWB;jd-#B+rFJ zv=&+3O>fV9Lc$b@&ziGKCsz=$R>OIy#4O4J5$XJigm%C*vN`${V_ffpQF$d(x4b}S z;o{*VHn;|8KD=ZI*F-ojCp;-J`*_Qlr;~s;SJ-4S1rfzG92ZRQH+6us6PKu?W?i{{ zi{;Az6ti*1`yJ~JHfa%Gxd~nsvl-DTa_o71l9kX56WtKfbd_k0b5`lu@Sywd7!!CN zAoUvk@JfRemV=lf&+Eo3qMQxa=PGriCl}urZ_3%O04~E^bNPMic;TP!fHrv5N8;pc z$YjN7u{b$@IK^GLX4i&u5oRfe25pyh@_cHCI$U)P#M_UW8A@4-&;Zx3{w))a z)-AN%h5NdNlBby>0|5XL}@@@5Thu zUCquaWW_*|{mG+CcgjPJ2{|9Y5d5K2+CNb0IdR)_v0KqMO{Iu1xn`Zjg9zYm9l#Js z|H3hZhQ$Lw+A5BKpfd!XML^evXvm(fmw6)q4B39A<%M7sD5MW8cV_ zLUS>p>o;&n#$7k7V|kt+K+9!S-yD+;XnwbT@M;{0kRvEPN6h-l7)Nik^#APzZas}> zL_by0%-`}=c*mX@3;ho2pQHYE3!Yq=_1itl)CsDyOTdL+nUwR#r%Se7yf_PTGGL@x zpI|jn(h2(zCLyA@puJ28y#VuIBJHcCYvcyMGIMK!UJkZzdZIsjWvOj)vw38CE8B_I+2ffp)SX=r{3zZTURG)xu6Uydfc&oVx|8P!J%d z5V2{6^5Xp@(1geN1B`%~_Q5N<=k}Tgx^W8%h!i3@DIc49bYj%pZsAz=Am=V<*M!Me z6cL0MLqnPUZ}5h|TZ{+{uok*_J`{@4ewp~E@tXETrzkc2P6URyezNF9im4hLv1urE zVMAp26bBP5PfD9gynw0#kH>|D$E=$=5yT#4z^w)A80#m}`}~CA-np2x zM(B5QR{D=5q6nz0_CAUpsjELm8v6H=ayFQlB>_dvLi;F z*qD>>g5VY0#a&PEtsgu(sP=JVhS=8I_~HVkdOsXb+z0Q`30hIhr1f%PO26ok71sni zqb04a@&?%_&1)M65tdGIOJP{DQeF&JH*`vxfR-PKgeC&9G$F3UVq%f-O|7{MUjtya8S4jcluy zNHhC7vs8o?4w0E)Xx(-UyvI*~Ic19bye0KQQ8#o*l=~#^5}jL~aCv-8=0C$9>SW>J zIybA)u5?|?B05^6Dwb#_lGJ87T7>OJb`cSbk<9+$qa=fe$yXg4nhlHPzHlAUl6H=Q0e^3vwL{LYUV@l|+ zzJUM9D>bwSHNYRGf`<$=M}3MRzCIRTYliiXZ@ zOS)9dX+u|V$k|5TRKPndCNLH}YPd2+Ttt`3k4RT#%>V2y2-vwf~TJ4uub(^y!B+Dyv->pEgt zN-E;;M_QByfcF3Mn7v;UY#DQ3{3ZtsUq<=s`+rt`6sR7)&ZoB4C<%1LY*t`k8pvR% zjYc6tVycRUi-V_yhmZRi_2;*!FGNdX$SDr|dWa5tA``hQmKcg&jFCa2yv;{{45M0L zn+P`wcsSI~265<#e>u&p$u{6Bk~9Y5t^!0zcV&^K!T zf~Vaj=3E0j%AXkZkMj(@Ei$roO4DKC*{yZ+UB%&%-FcVb)HJ|L7?Q_@>&sfLuexF1 zv+f8OPXl@MbkN$$qGRY*55%-n``&xcTrSerwqMY}Wsi{SoHf`DS{f;2L1IsK8R3K& zlk6Jb=DW85a|cgG$xBJi$dqu+&#-qE4poWwu>^c#!lOS!r4{~*wb56tUZEe83T^%!UI*;L%tz7ky{{|?^n@aroQX3NK zvS}aO@g^yI*l9RklveFOTOzeWDOoJH8>?A7KfZy8Ajs1xo-p=0KYQ}#Yu&|~>UCj( zbax8N2vh=>3-=+B7gdXWgfR!QQ*FGJC;Erj>F&&C2U+u?-|c(E$p^&WzDzB=DOa3R zd;UsO>1ySILrU;`If4FED%awEXId=TlvC`IbG_>*kbv?tMew%70K{2s48z>a4;!l^ zdP{v4Nu04Zy7QV?xvt7(SC9drizx{KREuXd8j z_ej>=lYa+&tR=cP#S!nS%J;k4?wf&rPT07Xo$I56q4DIXk>6pb1^FrWyfJE3`o2d> zv2`{z)!-ztEjxdA-2kL%ntIF%y1&w-9+Z*+fJgKQmXPD*Z{LX)tP2yTD-zaPw?0>i z`47_ySBuJOWxZZ&Ii~`Hskn9t{X)|&BRhQ@oLzD6bV@)l`B?&wm46DAE*e^m8LJCD zeRmxdGcnKePUXUrO{KgGm*HWRQ2%HDVX(|AcrheXJHeG}Cr%$kQ?S}^Cb&>{aMNS4 z4blxtZQmvCbeU5Nacj&S(0F*Rj+N$81ut9sx{-*aei5wgXu96#9XWNUC4|zrJ7;12 z+h4LWOI^Ou?$G@5xI)Q?-b(9gdB}X@-?-#ItsJD}s%8aBQ0_SeJU#9}*x}tYdo&t@L`j^1 z?)*pA&C3}?eB_ueX6ERq?6O_>y=##DQHkLm681~jHLn1&l5rsC1AX}Mnj^@X<6k%| z#F?3n(gu?v;huAoRo?c>*3!X~b%SUvtv0nPS8~!xrHl;ZWcNyPU+`%)qFg zJI)Dx%CBE2>0H_0WX1ap2h_`vHbhgJ@aE^WHO0KQ!8=gtcsVr$n(8em+T`S*9NYTd-4}YC!79y zt=rtU#k#|F=%N-ozb|xhKVU3j%|DdA~A ziVXo8tY;JJD|v5=XgE7;ENwMGeQ)+vwebN7IJ5Go27@Gn}xW zFME_Gyp4vY{#~q>dy)EIo-|Y(EELG;=q&7&>3T~?=hg59it5B4avC$alLw9K#DA6bUg0bE_nIkOW9!zL|1d#rE&4CisU z#lctzx)V)GzmM=<`I(EZGoNo$IL6j!F?(r+O)Kb`%c@R&JMZ`vmY zS+~i4l7WWf3Q}nC6Cezw-yXYNg11fANcm9n!YPy1NBw^R^nSlhwrZT08Hb1u?OQnZ zCqLM=e+#GdDf-!qerx5B{Q(9Su#6H@CSHQH9{UVcp3 zCEoSAXq?}#XA*gG$qN%V>?6d;9iNi)`u+GsHRjq^TrQ!~H9R`O{oTI@ac(-xAGgXm zt>5Ksbet-cO~COA^B{e`Pzt9donYhs>jS_hsy#w{UR z1K!%9&F;yh?b&}S%BZVq`iZ`WL91t}>Dl#V*I$n$7l`k*zkTX>pt+FLU&xnnP8jy9 zxIu#afPZ^2Jn+Yx&Jiw?Zu>L<5-QF`H&50&@(sGq%P|~(rClSI#ENUPZ9|XL^PE7O zS6*BWeIOfeCvxdT%*Fl6c9rmUK#^|XWKYu#8D;^>n0`A>KVwD!drFSwY_CzLD4E+E zH9p;-dg9idsta@5jtrFW%hT>+Xz;?RnBvZ- zb!#O|In?buay|zhuzlgh1gnve;dUj)F&NofJNArtn|}L)L(<u=!INF7*Nl z=DtM4A~(@*-Ymd8CS&)i6~f&+SyJ3)5BJta3W;dDKNVUBCbceJNqoP!e|W}0lh_;s zsCW74kuo?#2SrG2P7aN^eV4c5;*YqGHTG-Kg>S$utCeNMeJM&)-*&U*P%_DKMvP@q z^XQ`MM8{;;vJ;Oc*8ko>J!uitrL{C2FNkk*9b`y>KbDdoI7@Eg!B59Jzs z1Y+q%WgwAorD}9sXLn%jN&fFykMEYjJ_Q(sUd`Q-ExTxGdV-56Vg{sx*O!{g@ApWu zELFv&Ecl+Ooq>KcF^t;1Dpr6_H*U=Pl01X^$vGi*gXUY|ll&)2`=0j`zMI&)PFgeX zWC+)^XQ)rLhj^8{YfH*s^zd0YqsCiU37dB4dHHC3#Ci>Cz=_kOa3He`j7auo{8aR# z2#yS{raE&hHAczvdXL>yAw)*a&nF=TAo0YBvByHmwcBsXh#tHR6rL2YHE;^ilp~IG zJeMi@u&vHV*JIMtJ-NM{MLg2=@xA|)J8}&oNVaRleJHMc@>Io(ce`_Kz{pkB(u0L4 zKaX(1IMKc4sPozYMbyiCPwiXWPlwY#9!u_81lxgoVEM(tFokFq8u8rL)_Hw-qWay6 zi_e~9E*nS)&51@Smgm|T-VY&}gDC;Sr}>$F#DPDvsRB8*BOf#GU6NQ#v{&!`&g(R> z$!DAeI!s~^b$7nj-lItP_K%7YS*y@c#d}}RaL#|eLPXtud5CA>xh;t$5gU=qW;M?s zm*C4EzmuqP+BJ~a6{~5}FgVP!k};?XA$~?e-yDFU{#J`VEC5@LB!`RrZ)`^@pSL&K zC3#kPRnEYcR{}N5gV{Rsuo-k5poLCgYyq3S3eb5jXQwRhE52pBLRU5T2m~->jmGZR zXWS?qFF>H7joNr(itG`|C6#p%|5VVp683=yJ**rA3wrKT1yl6wzdHS zb4?46f~Ss>f=jn7k0IgfgN%xb-r=BbIi<6c1E(>Hj}wY`GWU1|xNm6X)ve!_4u{R% z_ZR!4zx3#kPyzqscIY+5l7!z+j#n~s6PDoA92Gq`63`kS1CAIPlyILAm zmQC2J;}yKf|HXK$WGspk)`$I5QD09*WSP>Ytv^-ogxOX=qIh+tlX?2O$nYs zyL>YICb#xngk?Y+D60%KA`Wf$CfgsP6A|)=(-BhzY2{7aZ4!8G_ikyt?t&&ryXlhF zZem+&7~N+3{svS2K{frciD~ke+|K#rmeb@{D{MntwFl)7&k(zKuIZ_R$E&4#11URk z{xTo)zZ3sV@BJ9VDxnT)hE0nm{0!N}9Yg}bbTQeOe<3YN`kt(w`BInH4+q47x?8P? z^Ohn1VAg7rayh;qH#cnEN?l8OZaC~4hCgINBI2P>8n}$EHn~ssI5+nUb0oNiPuX8> z8qQ>wz9DJMExEqie?^irPUZCM=16Q^&tY3-&jZ%b@2*x`iA-YGz1Z0@o$oL~Q?m9X9DI@XE z*$5au?Ch^6(xs)Y0UtU}tdY|*NzA2yV-o2F404}_pCew<+eE~_92sEqH*By)V^&(5U$HKs?AgP1#C60dw)qC z#AJIRb1J5C92a)~C7noDy3{r$??}VN%kEEBdG(l9wa%4TI1M|8x|o$*E%w_6AtZBtEn%op7`_HW{^X3EXw27R0|Q(Dq_yEr4i5_$dFk!c!fR$Q#3c3k0;H z_;L8sH@Y?Ee^|@x)=x&oxq&Y8nVDwk(#40d=MrUnxtN!aXUY4QP;dxb!&=8^7-jtgO|F#pxt9s0#=zhdihD#2N?H6Y48f&g%&6=J!m`^P&; zE(>u{j$BPzA9dFzLWLJ%?;dPSaBN>$!IdjMTpKC3Uu*-;!Cb-95WLZ{EGzHirN;Nq zl{$Sz9M_h10<+1Dg`04mGwp6G?XOWMWK8u0u9=?FrgS4w1*aEbZ&luPZ;uMPA_QED z!#N4hBg4V|jj*Fjr8=%ZW9E2-9v)Zl7ja^>Ky<~ULO4=J$`xuG z6c9E(o>QH}l})YaqSklg?aih_#tq#XLxIq^QBDVQ>!AnxSQoOYUc z*G!E1I5x^=8n#Gnh+f3T5`)hP4*ynDyhTnRKu-h%|YoePPE#L8g^w5eb5M6YQ;9A-0hb}kIAhufgYYEnv$`C^R%eh`tkP3k-5Ps@AlL>DT7t@??-DjCmVTQOQezshL@DuFiehshS|`R zl?UqAN2fI%T$N?Jjk`M_2N>qJ6m^;`YkZ{hLL=V*G>L}t$vk~GVx^UvB}`+NLl;BG z{gK8{hd}Dt2DVT-umYW7OF!r z%E7R{zBT5oGwq_q^Qv`R_Oqdn5b4lw*z^Z;=x9^&9K;wPgq+X2zh3Sh`i@+kmBrFP@I^|Uj$0 zff$KGxzdW(G3O|0HJ^1$ZZE#;k%VxQ=ul+jEPgVafe>POk2l{PyKs9lt;w2>-!#PaVx>CwASlE$_uZ<5>B)L&E5P4)#KVr8 zua6|g5ZCHusq~_Z7Eh{0o`a(w0TV&ssnxA(k}O5o+b3enW)ims+}nJJXWl7t-Fx-? zP(N(nEM(E(7lkEibkC>$eY67b#NTTqrgcy2e_1PTrVH3?oWKYg0f`_UNbP zZvA%5QN;rP;nyRuHZIP+dNH(Q7TfuTci`eBR0{SHa@#ePvWuYqvH$bV!$gfQYn&bfbbOAR!@2hje40G>A&0f`Bv%5-Q!@T_O$A zDGk!`&82&v^S)<%V?4tjd$3Vh>%Qll*SvzaJ>%e+T~;YWY@)3}kft#+$pavNDtTIi zf&iUd*-6^#X98`ID@&lmYDmB{6{!jJrk2IN&tcmWW?x=1H8rrjYiSnf&lfnk9aMj> zc)!al<41INAS|9Su+iq7UqZ}}eaS^yfpy5_c|3T|LTPw{CFpY<4J+bn!5f>eS;X#n z+I>8dqWnRy75(ALhkX{^2v_ES>Zs|H;ux$if^WE}F=`rUYHgN5x8<_C(SKe}Eh8P* zeTS6K47cXUQW-b3V6-M$Er{w0YW+gMw8D~Sl(6;%fYQ}uQOmvfxQ6ooS>+2 zVHPU>s>l>V0CzQZ6jf|9iV;JB0T1FSG03PhSviZx@Ky@QJJ2s4qGC}Fe%R;`HcL=* zf6eTNC-M%l)1!-f^fTzc|(?85?O8^OBg*#psY-id|feg)C`8}cl15Ua%B zdPkiT%l)25KM+<{rFXwdVqAAv{Y z4a`vqm4jKLDnQGrMx@d*$b6&5hsSlB?Lg{EOOT8~@kBtyxv_vE%&fwm-5gQceZ? zpUrOOF1$rWDQAdY7LRg&50D5BIFtEe5m1#>#rwWrxrDT&n1z;$o!zb9lV33`zYydg zdG7 zpQ_B6TWb@SXOn^FdVj#$HP2Cl^xUY4-BjyWjPC=sZVlYK8~lM|c>lEz1AATp&<9Gq z1;@*uKHYQAu8>%PeSBi$}M*F|sXO!{KTDca`HYvTdd!yC0;r;odZi>2{7d3w0 zMxpJt?y{T@F>fs=#?*hg)qV~=mcfOH_mTT~Y5LbkPuuS#{~d+ol34H@$0~sA8&}ZT zUBcYEZJ;&U7ZaPkyq`oT<~(~#WPuNO>OEG^L1xsI5xve1<`Xfy`Pqqw>V%K=gXl?k z(|#@JtX@JkN(Zcy!|WSBDP-}DSXLo+H*+pghX^`t;eDVIoZ+*-_zZ%1D9|GnjPb5{V zeh=vS3{xI>@XFH>SGAisej1wfZ~*1yin+&saaaB!xT%q~%t?ICq^%e>k1Z{g91-S+ zTQ8F{Y~Swhd`<_RKieT-L98ji31eN=kvmw`d;})Zr1)aPo{ywLsp8LylzG1_R^?F$ zTv+3u``{>=U&rr8Os>8$zYm;C8xHbt^7?q>-K9-K1ZaoRQ^cGhm- z7j5(HEpCLAk6x&hZ;|}Qw&&Y!mYsa!HmWJGpmFl-gU9sz@|pMb5c#&opCN;()a}fM zXP*+T5H&Ym3l6xyE+?H(aL-tA&Tsh%{uE4@WBiWgcU0O4`_^BTTZCBoWdbfozlDpy3F~%UFNL6 zcV%{AQiJ!>`JteN3W|*Da!eP|gGOh+HQ#=R#`B{&sVDZYpM$J1?#|lyC{`4MN>&Ql zZJU_LABuEpee6Qg$SN|)`vxp}H$Vm=TAPM6A?MMbADu!Iwl*U%aE+fvGbJK3POdpM zKOVh^ofQQA)sqO#b++}L6A;+$nZ3!pLMdUsaq;zTZ^_#wWL=4(%ge zdk?!acXMdpA-vA2{%k`TbDJlO!>p{>B7v%A%09f=T@+SddIB1Zi z`BiRj(rm9%@%-^wlmN9$Hv{TGKlx>T#xv=WR*wZGCRwnZ4)*!EX{g-;;8N;JpeB;XY>TXffEH|t2^?;QgkV3=Y$T&T)KU_^OT1TYy@Y` zP9$%1exmFRVHRX_0kYGutkP)!@wd^QFY zi%_ZEq56=h(i{8}`I)vx=WQhqEseH2eF%8D{hBfZkRr;261$YsDLgs}-CkEfx^||M zd|3$Rk1=s7WhTGJN7Or17Ji1Gp-EVldAyXW)ihOr<-utjQcb0$nukbH1Ung zw?r`)^U3~mWnsoxl}34<6Iqx)(@O{u+Z8>hMoL8bP@BX__`s=+<8w(;oKrdWR-^~v zyTce+N6vS?qg5(V|ave99B)Di%EWWc?z_whVxRhMC1!i`cmYB#s-0) zCjKN}`ahe4e|KT*c!=LJj0yHXmz$XC3sS8HzQk||Xh?h>!e`6Bg5O5<*BYR7TwI4ek^a8Tjg;y4PTkng5`etW9@udmdr5u?bO-d%O^LvN>GeQd%n#~LJAHe~)?}O%!uf9P>C$!|DZC|9h_T;BJbC}W+;^lGPI`^!cvXZ) z#f7x^rq*8)6uY1g>mBc0Qy+d)Z>v6heY!|q6hy^<&lLt0HKbYB2HP7E;WPiKZp`5h zD2n44GyGSAzU7N4L0kInDs48SMPJ+ZpkvIUSUdo@8dO8^{s<>IzzSr-217=E=f!4!8;|~k* z9NJ8r)T^Ur@9yMGy`(ca*qV!s+m*E7rPX*wZwNFB#eVmrRT0w2?ti@iigV{b*k~Uc zEHx8W3kq?S0$|jvznvQzE%}+^chb9L>f@j$6KGK$=b1Pm4hmf|XYTj%*yP?SJBBQ9 zC)x$c*BNb6d`}S=AGSz5NBfx`)R(Ss;l}sqg)vBRKKa}-2DfD>7)gj(v?GoQ`ZHQs zVVR=rER2>(#ZVgk28VGuNwC8Ay=vT;iZVF)5H&X~T0 zwIz}W`(svW_De-qgPp00J+;i96mRxW;ZsKCA8gHQv5PL^dj*+Wx1J)$#FLm-^3|QDp@25KzO;~| zfY9jN0FMZfwb1c|&V@&Z$!3yy88^O#riu#5*Nb_^NVy5S-r00Fi(UNEvS|iz!kAd) zW)q$M`;0D|qPgY$NxbN8P-DO7Y~Q%gwtpP?ml7cRjARJtns#f+R0*Krt)Yvv)_Y^` z;~y6rmd&-WB<4`dWStwZJ)-RXlGR@9ztf%+WBpmzaM!H|1>BN zaf9wa{dMjwvEgzjW#!m9z|x;Dx>O~Yqc;fyubf)qVt;gWiPPM3+K90&`ud=ot5L{``b>{$_w!DM!A$6H~5*HD( zlDauv;8#y>K~TI0oWQB8?sU6o;#0=8Y&k7ruM700@giuprSrf*u*{B%kMFAeSjlU# zcsb>UizcC*qy#)Oo>_*~p0m)+ zuJ^ck2Yp!*)%^?cDIL&OV5W>@soaSfgD3>D_AZz5Vnj-vo_6n z!UVp0i7KvTu9mTA{E2Sy3BdVIM_9wcQOVshlGVW147JT|q#`A_xgL78S>s-@PTKJl z@bf~W7w^x4?#SsVrZ#qT9Z^?I)E_ou-Us>e568#)c7^?8Bf;BOGrx(^j_4g0w1AHS z^Kqh)CjwkG5TfaOR%pix*}PZ(DSiv{F6sWn8S|SvA|Z0Z6Otw#cQPyePU1aej;x3{1K$HaJ77=eWwBMy(O-Jp?R7e{ zRWTDP!Pz$T+rlK7bhmnwqsnk@I~>m(Wl4cv@{)1_C!gE3lIULRE?{?GM(EAPBp2&2r;@dXud zRtcOw4z4^d$Y!o*VLZ;6okFljQxx3!1V5HX>{OgcL%YR7O$<#{gh_+c-e5-DrX9p8(Y+ zby3VPS_oPH{`I4nMcFg5u56u2qo3nOV^mw~8kjm&~(HZpeDC8?U_KH3?Hi z{K2r8!FL?xb1&Bi!hB%`4GuCs^Q|3u&j#NviuJ6Ixo4IVR)>tkKVv+fY=W(kja=8! zMffK@f!D$jkxNpxvoy=;{-bKu1j*t4hv1mA#E^M{VD?Eyn4;O;doEO%f<5B<|LleG zeG9Hlj>+fkabEk)zoM%{b@V|lVBJl$yZiZlz6rVVhn4Z$dIcO)^g*y0;)1->>|%@j zvj15Q{dQqge0A9_bwJOh^R>mLdJE;Qnfo>6kMeq}kUQi5eAM_*tlX>fD3_@$qm=vh zJgbP$-0H{izEFuZnqlj#uW_pcB58RpTc*Dv+ltuPb#wOLH9UPB$MtFb1`pYZ`J!oL z)^Vk{jr7o^&Gkd*DqI$dyv|NZ9deWU*G7IH$5m7cG1Bu(l$JC1XAK5oPG!vxzT|H? zv+3M?b}xTm4!r+^Rt=~FdfuyZ6k~QYHo2R-=)QEO_A!CXh2l1gK-2T&l7T(EKi$@5 zKkV8SU~L>Pa4}K_%s%J7Yrkuc@Geh(ZN}xFbm`#G3w-x%2qM1A zg{_InNP33@!ukTUxa^+OZ2RzwEjGt=Gz+v?SPV3WjT7#*3-cG@j&|x0Do(K(8Qez}IaLr&bgZ{GY~H1LV^%hM6-a~FCeq8gtQ94CCpjSM~ zLnd~#k~6@w|9t6?C?UfcksA7B;%?~sH{KH@4b1fH7e>I$pcAWF?MtkuBmrYj4X2iq z-~M^;;_%ckUtgEI^Fc5`@?@tk`9`g`P=Ys^UzedZ=MRe7fbpBAmsqh&O!%(TW;-P( z{Q%3kaR$`t2~_1{L;Uj?sA z-HZD-_!EHF*?HkzD`Sy`gbGDNs-|6xv_~01$D-4s$#Nv55Er%kuNv5VE$n!cUN%#E zsIFO zLi5b|;}fqm*&9CG+4|+HMX^}|@}(sq3-1@gZk~^gRXkU$ZWK6eOo-_TOZ-xglK7i( z9lxRsJu@upffyUN{VB=|Xm8A8^Ox~OHXlr_$9^E|f=aRwd_9J`xHtXB487c_q~E1% zcbQ-BRK!~YTAv-geG0;gOPjUbRzsQ~%xhi(wMy`#Ujv=-enZv6ucf%%6EYbtubh^dFl?n^kQr{ffSuF0-saD_m6%8?tDMvtn-tq%IEAI zH`Vf=Nq3dQ&-y5=Xr=crVoMGB z3N?ZQ1iEn-=dRysYF#h=RD#n@yuI}uK@0;Z6Q-X0e8pi)Gm*{kWXO1}V(Vw8_>=XY z+D~odV3${ORSg}lG-OI*LwkQfUu!w+*!3}E5I@t{hFZpx7o@Sijl3@{f?*g=S1Y#%WkXl>{ger zCZ-$9JA&3I4#3=mV7YQ)Y3%DXUJT#QH$GZqUtd@DCvS$4&+ zN^;6AGU<@!Jq(!^rB5SPOhpZ3K&E!d{j6KgoKUj;**2JKnm-Jhyt=db%0(|u!e|1r zP8t=NIMWN?fdbp|1K2%EV9W-c16Q!b@y1(%UpdQ>}*e#Bo^rv_}s5>b&@A-U5S&tc%WHikYO8C zv01+GtERNl)hjX(KXvnB)U_3{h1;V)12n`Shnx7v19d^pOL$J;s!o~r^@503%b zOhr$27{9Z03ax6u<#8{KM73S?;H(B|Z>RU{*M%*6lHx`PmQQ03D?XLu)Uys#lm?{V zWTv9x$Z2q8sSviT&xCTI1LeT%4kXLPTq;m#!F90x-+F+>3JYD?%I7r&R=}sAD!Ixj zt%iaC-C%k=?)zkxMQz-l5ZMdF>DX8Bf1)HTc~Dk`ft|U6Kr&2tJ_`vLWsfn|s^}Ic zWLiTHVWF)&Sv=tlI{9DUFhWI9liRgrzvfHHI8~5^W?P*1`Cl~+sYbOmyTMhW_BudyvB)3#;_;M9D!<5_rt!R` zrIH$-zi*PFm}8`)HBVx=x4*8%U`7YVA_~#Qlmmud9>wOm+_=wE$Nj7s+xdM6qtW^~ zALhs!xB&?E`0-V?o6(jJQlDd<%z-4&7mupO_uk0%&3=mPJBKej^q4ur-i;bIfxvZT{#F^y+$396Ri~-EJ7dChw; z$hUmOs-MReQ2Bhp9a_b~z(J9-p{NaT!Bq5%S1V_GFp)5ZtB#}o##u7REOp8rWgHn! zd3-oAa93QYqV}>a@(7r4d*EJrytXI3@Yyh(^Ni0nOT$700vBoXEezMQWF7*vbAnB0 z8~)^X{v5>wbuRHC*b^8}zvTF}6?=zvD zbp;-tcYEkYyhXrrYC!3x=RQ7D-MmJ3Gz_$?^xXsF^SUC{9uM<2-vkW!28kHVpTtjy zv2MO|by%PYKdB`Xc*(awAoD7YbN7X`=!-74DlLFIVVt*l=3qkv4qY|_W@dj z;bM|m5OemKzTR0+&}ClP@z{)raPs8U9-WKhqZwvt#t$>5sip^wsPKAvW6;52cHBGA zr>j%-u3vh2&PRzC>*YBDFAuF7r0hbdyanz;fd^Hqxw5!?q#PpBM9(|k0&au%`+7$w zTP9mGCd8hI(F$6k5rn?CEdEktXz`MYUc;GTtf4Xw%u^7gShfl;T9iT=mmcx!iw!!L zcdWO=|HUv9`tYKQ(!5<($e1zd_Lv;ic2H4>b;BEr$Ty&+{8_;M;bJ*11%Z#WhkeZr z;*f&9SL(06n7Jg_zDr!VEwi0_ZQ_;AJS-`6=Ohhs;|TgS{+A|z97tpiaQ|b~*J*Q~ z$sRF|^YIyi)(8RYr;*XJN~YjO-sDu)?0Rz-N6gnK!_gGr5NKP;5(yJBNYcQ%orYV- z`7&b`J;hw!4|m7sWU%+X%Ovc@wK z8X0NpV#_pgMKM;{y%{AQ^e=9REdU>45w-VFEffqlp4u|^ba~CEMj1S~yepq(5qx@4 zVkHLyF`owJ4&jdfm~;D;djVdP7RnvsNWkcthoI@Bp5}>d%4r8rcS%3@C+0Dw%FxF! z??O&!&%_580>ws%SvPk&J*d%8MK52)4hq9qDbO$;d1D>i_TV5FA!3p3oSkoO3>KRi zq|V`cA;7D(XXv%!dTyI`?lB2nQ0qkR(rW6F!}E&cHIEMdnwhZrV+DYfj~ODL%j}+2 z@Gum2EP25tYHdDp19R&da*1lZPtuW8~ny+yLyI+pko?m+9T zx5!|nb{CUIaGoqb4%wT=qhG+-=*8u>y)My+>+vI9y=$2J{36Y0X^)~pO5kG|v&8pOiUbOp*(JhT@Bhua6@YPH}-TH<$h6J7<880zgNunqd7Q$nrV=Rn#JT-NeuKHS*?{7=6kx`BHQ{=62@B~QSlvaMP28#9LzQ`6JKMWS@=9kr*&?D3aZ>AD zjYqQ?oKC?mRnL3@{m@o1bBB?4@;bWBu9Gswd-EK-(4Z$*dHM0ln}ckc7gq7CH&1_r zXDTbo--bxj$+;->pgXD13x!+2sqPSPq>K_k5ss)%Aw4PvvMlOq^6g52o|Itf@rym2PF z7`&pzM!JF9Kw$lBwDAA4&4x`YFXE|h)Dg`;=}vBU=yxk2iE6?Eq@%pAxiPvg1-rZ; zr11n&!Ze^hvalgVIk=<{3NaE=M~K>bni?k(3*SMrt;iKKON!s7PLcJ7U8}4UNy$=L zdQ0uz1hs-kQ0aS{FX-ETn1_43^V;c z|B^HS+YXvr3D+#hZXPKIHi3q8AU+J#mssOwb5Rzk>}sMoH=d0)uA0*$1^>dLVb<3JZ(ZDtJ5*LyS6i6h%^*@It z@#S(1W9Gk6wtp`vSl?KFpzG=&~u9U6==Dk{xvfzt#n0i)u}MvgRktp(h~y;eKvA zVp*r5j2`Vv7U0`(Z{_%mQM(wY5zNH;@L+8Ek@rw(VF-*~T?(xG+s5-v8r7%6RCnW> z`8O&IO?7xhJ@O=f>pmkZSreb^5HL=`;_H<&dUprEeF|2jPp%Q47>xRVwKG=C*7!`c z%lT>fK5eH#u8Gh3ktXf%`;KoET4odB?9V(JV8!D*+F=s0@KcF`DEZ9-kj3=^__36T z#AZnxM83*1k)Q|_&%R~w-rWfgRTt!uUQYkW2T3Inrmtl=)vm`xv_+?Cj=X72)#|d_ zbG;%$sT~T@H)oz|lf6orPsKuxxg1R9x)1@v94tHRw1-V7#N_wptie$e}e*PBU?E3R+%K zm_KqMXo-4EG?M9QJ!@hS(_n zv9oR{0xkibSG+ikADit}I$93cZr4GOx^mFz1t}UMj&=$O)~>5raTgebk2++&^nG%$ z1S(i(b6p&FL|}qSPY1CB35&oz>%0`-434}flIrQO8E~I->1qv$rux+=N)R`=H>3N(N&^3x9>@4P zeyjS!AlY1!bo0=|HzpZhmj8{XOjVY}Pfm4v;!uK4BSxl^_vz7S`uh_l?{{PrZznPB z#8~tv<{aPm-vk&ahcsG-amdrnsD%XVgzL2>`V}yZQ21zmU9lHlV=1GvDx+~@1F;-= z5VGjF$M)L4h^2N&5O=}~aPk^*YQ7L(uL&jUn#H+4uR_a9h|NCn$6;_qBitYJ?_vz_KFlAE1RwtJm0g z6o0M=IL6u=&tH_Hz^CA0p=ln_0x&eea0!G0A?> zxt-!sxw_)EAN+*{Rmvm>#b&nHq&1oskFK z&#l`a>f#`^dc}On5#|9?uxUV&D7wUdePPb>u+oaEm1pnL%hJA50ka-0@B4uzEgQKc zZah9UHveR?Z=ce)#RGS>bAEZ(YKS?U!WdEZtPR+^g+`CnYne$XkT#Kz|0}s)8_%Ny zB;98buCvAERQ&(L4FB_Nv@omkqtXikz`FeRMjZjK8T|{yDNk5pb;c1;9A9ZX!eFH% z%aIX|%dFrl$e0ZKKg)qH=Yi`a)-%sOaeKS=0G#hDOk#)=#3^^}Bc`7{CKpL-@md0b zKH~es?BJiti^?J^nZ}P8H*6{DPKc{im{F? zJX$yS$^GMSgDhG~f_8EL%INKjEe|jF-v6-px zZ+Ca-B4Lk+M<5uQPsiNPOQQj94@Xba2@fJ20j$s0u=L;1j57*g+Zu$^_N zH3~mE{4RInN}03V32qyWl{g{BL@Hu)6nbDO#mdBp!aBH);*cFi7=3Oc#c+X?%f6$t zD^N$bPGQCyiurIsWkSy$w8Zz2!F|Sd7~ff(Y#mr zp4z8pYB@(9OkxE6J(KD7?b_X##n?(Hh`TtQAq*!-Lrr}`6Sw*ZSy^tdVs#Z;x5f+RjqNj_(m9CtCt zt=5{2DL$``$&n5>x|!9nC!=;<3SuR3ks9A{;ic!wYu$!~39&?FuagBvZ>Jk#KRp*N z$gW|=y#3+CtQLnkn;m`d>>ZBYe+)E#i|Uu_Nl)xRkgg?c(6WQna>PVP3!XhMrA?m{O_J_|EMgP12~(09Zx&Ae*y9dy#%oDAy#_W8=0}Av?2tZc z@Q?IuhV)rK8c|0kBxyG<#gY-Lz@*R6ytf26utRqa!3N;6?9sMyeG0avemTmVm>|H4 zawj6)k@S|Lw@1570WEMv!pVkAg05^No*m;LZk{d!!$8wqeAP3cFd`_@lx2~!MGMl}M?#v&%*v=Y77fV+h zSO=7fi9TwEwsbY`Q;l{-y4X=Z!k5itF1&+D?~@?q6DIB3`3vv$KfhQr1*4Ymi#)F} z7Qg~AY`R(z0zaKL;-8G*0U5s@lnXrVHTsS5HMlP>Y-dUT73u$dr2qA&tRtrIsI7p-r5kS4BVCRLeD4}$ zr*eZD3dl4*IoyPFtRBcxs(@0#{wbQuCgWhTVS$senqt&_qj=(`A4*A?i}Bv8HWD8r zJT=^G^G>5}P5Ue|Ba(+{Wsg7FoPf!BIt0bqM?RZ9id`AkzKp<`Gw^RJbTw2+{(SzR z&yeL^1Ha=+w2sMx0FJBn=&L*vZtGIYvBG!YKd47`@XkMZ$j@oS&y|w$02P;nm7{1NP$TW({p-I zl`Ku_boD~{u;W;^l@gZNm>W*0`4vmt~e;@{pV+|PL8yj1Gav8 zGy`@ykC=5pBl_ydAaaJ&&wF=moK9rS(T{xSa6ocW(&q}k65liQ*=qQWIxBqJef0vZ z(R;KIL1Cl$&~t{0()A@+A~l5I%FATQ8L`f~t(K*Db%aJ3RiS;L_ZXsZOBdL&3x>K_ zTlXsg!W)8Zz7trNiNE5+-$ESrU%Wz-_ddU40Z79T=!ifPNH+=e*hXlm`Aiyc-GMcu zqGq$$ldQtcTQq+>;b1`={W<>014W-J44===be3e&OSPEOEVDklrUw_oqd7udNG&7z~KBOLpY6v+l>>T9k?d*JarNe0+NLJ zh3?F41C`YI)U`G$g}z?Vo4*}0()M>WYQ~C?psc<$zC>jv+;@V9fhTs?j(ExzQ*xNq zDyQKJr^8`+WeBFR7xV%xhaZ(mDWR>7E_|b(`{T5odaEX_2Z`AE&yO#2jVKP)Q=Na+ zM9wNOu6PHK8^2u0sRN|DibTmD1Olhp}EwO#ejZqRpo~sI$jpMqVsa_o@pD40Uk7 zz|FGwJ(U0`I)2b64PBx4x&mPmH(nCfvc}q?@R>A>Y#=~=Z7=7C{%;Z=XQmAZshDb{ zHhk2j=C+diid<}QtTeweC}uHkgH<&l7*2#SIF=wq22kEfI)bCGu0CIj@AUr$SE?I8 z^^7Nfzur+`I!rprH&#YmacDg(q<`)&>eE7sE*(_?Y|2RiVm~py#TM`_ee>~qn}}|g zE`s?E0S#gUYGNtVD|%w>Y=cVow$qijhHhF`;Lk(O{x)Yk95H4 z1;n@>VeJ4;;=B9GSn&gK*TgXU{DILj{wHJeD4BFlcxRX{BSD066fHy`w(F_9dgp1U zY@0SKvzju(E>6t9>{h%Z+NV9EC9shw;=n)?HUmtL$ZXT+xa4amz&=y6HeGW3U*#CUz<(Onqaju0r4Uo2q zCZMH_T+Q$a_Xfj+n#Y46f~{}3Lbmd$lbM7JMX1uf&+dL3;?ZP_?O{Nij96Ekbi7 zyN`PeGAC#pu#v%cPo@f9ev=CtOLjJX`1lXi+1Fv2+zem>7;WM!CrXcFJy|y=wj1MZ zX>h~EC;$mxNLPSxOGRW9?x!2x)A!RzEmBzd*i56t=|S4MG@In{&l3k1NL~BV%fNNQ zlsw&^QE7}&!qNO2&RfnxwwKGa z4$R6aT#i&N5WOF&x~l6bsq*7dE~ z2sn2*@vCk-i*G!d+91h67Blb#njMk!{v-xMhMROfgjBCOkZlEi+MW8wxGU#{UZeMbP^|a*~)tF&O9gpmZtvQ>4bgTS@8L*8^)3zk%=f zg4UzNAvOfW-zi{@e84IF(OHl&j#StXC$i3+536u_aIar)6?!X@tH>?ijd!r6l%)Rg zI3o3~T+$Gp>#n`3^uZ@LRUWruqwaL@7M~dgRmg&aGr|Gc%REF6Dci2?S8)en?2 z)m4&$bCuY2o^%QgCV@3}j78=prI+6RpL0q?APvO(5|M*q%qhpsWPgGZvS3QGXcoWEM(+DwsW2zqUj8={l?G>{SvijbDm5^3H5PtE- z*eP%24jGN>1LWfH!t^{lc}g7@dKL@GmB~kEw!qW%_ge;NcHzYqxU>)>ey;m)RN~n& z{5QMA7U)+%J);ApovnMu(A#1$$$sWJ+LJxn<*OB~aWCP2#9p%*h=ARjBuPH@YALLZ zeb)U25qQX@&$?5Bfg})8_jtzKza_A^@i0pNWyqb3gzl#Rwj^Rvr8}tPhr|u>%NHRz z&U^0EZ|W2|3>mC--(zZzw7YdZ9D~jW@%211G$lz~EgJ1Q>F(`a1Dpjr-lp=b5}qal zvH(b#zE8FO%Mss}BS7{lisHwED*FA6dNa2rkw4`UaGpfSHd_kg91w*;6Ix{(Q}=B zqcBEKbwb7RWsdRci8wY9J#OBt`!e|Cd4s1Zn?sS(sm+7m2_J~ReNal%RkD(H-88|o ze)#;tq9`f5AmS~(K&Ymc>=_f^zfeJ>`@5 zDm`$Sxj;j`0C10@hxaZnCHlBmzRZQPGxP2qRU)qwtZfaflAKq<^Ns>vZr|Nd-{*=nvV$T^n5>#$|iGB0JB~1HEFYP~`Gi(P(ge@JpnxW^z>qUzYYffRjK#j6DQ7Tr%Ks%KtAUB|f7F`pKj;429O05ZCLw)CAU*Jk{w41OK8Iq#q`%08bh^Iy|2M4Pe zSlfxlL}2qA7>0%wx4uwA>kHw&~KA!&Gl#IC+k4 zWxy~7$e!uF+*`P^mIGu1NPyH75O+)H(iK$uoys@Y@Q?~xHUl+v1@kt?SaL*k4g3uO zt?$@okgW}PD_aXsmYX!ZCLID57CGZ5L!_)Hb>PAeBNGi^JY-tTHLVcRKT4_mv;@qe zra6vpSlBvcpucc}E2@05)FS>d6=Xvi6{VPSgKgqNS%7^WI==0f`{#JV+w#xH=PmO_ zkeI}T5yo@uno|HB_{~~Kiq#x%TWO(oYNyM^0xfz6!q%e?_twKeP2$lXA7mCZ?XmUGdu>3mJbXY($31sJO-Ue>59paZ6;Dybg5)t>qz{welIp`R3Sgi=ty3MuY; zB!psy!>zcZ$f&La_DKBDFQkojl=BNc4uM8PVt zysc^kQs8ls8FpSXnjd3vl-fKIThQ)<<$7i@qsLCKie}KMC56>pP8C$y*`bUB{9!@a zkPvKf)l+ig@E5c_*JjftkvbdWeM~7J;|6stE~>Var(Sv`>$@3%>;#Y3Kb4mGSl55w2H@p~~^IG?GN4w`>p=OGg+nT^l*x~5M1 z4g<)zAg`$B-hIly-+JS=x9wQ*v;W?kgx&3hnFk=-11K>~F_T&`KDag3-R1kaEm zBo;KMoRLtgx+54WLVQo0Y7Y`1 zeQV==z*qXX{GIgQ9!Hb8#_8yvPW^$S_u#l&7uZ=%vj??6dS<2K(fjQvkObo)w#W9R zb5wjaWE1F#kG|g)osTvht56WjS08N;^FG#UTaU|X{I53QPqUDE&D%xKeL~LZD~N7J zDiy@Q;wc9J2~oq8@0JhEzb5qzf#tTD=cEWy{T;Wx2y?ogeFxWCi}zNzVc*?zs^8sh z+phIGM*mXE3ZfRrmW!vZmPkbH2FcXJ;8&dXXKnB@< z8u)O1K1@T+O$r*=lI6^-4Y&r9Vdzq^{V;>D9eC531BDYIhP0f2Q;v>Xtpa=~LtToZ ze*YTe9TCo$_GhbE7})OeYn(;HJ{Q3gl5(sB^OkkmrvI58)STb0de=06KBWkxe!D1aL(ZfYWnWZ4y7awYx88JML zPIP{*b=~-EAf1jt>?MZmQovvkbe3Lh33dDLwaA9syu(1GyG$ycv%_>my4nohN zgACm}!ozaD*X}0}TrdztwcC*eOgmF_PS@3}!>w6LK-fLGacl@u9xpvCD?-KG(jk9l zT#8<6@TNpkkxO2tn~}1kP#S4})Z~js*o!r}%~aP?wHn{Dfv9ptbu(T4BeL&7;=PA0 z(&*)qF!7M=MVI*wryw@_4xvObj#~|Kq^7E4L%Jf+=!MjZ?jqkB@2&c~K%W{&FB=aQGn9(4iW~|Iq5Zk#i6R1Yx|XA?u^N+jgDQK&Br8@<<$;V=m{Re zGIJRer0h=-g4G_E>?#|2=!LYQSz7->WW}^`@T&%cSg<_8z?`ns;y(WKje`huqEaAC zU;xm`57#?dVC}6Mtuv879WVoWU_*WwL@v6?()oVVFE5jxhqkQ=j2z$_T+Z1G+hq&1e&0wXmvjSjFcHw35Na-7f!ZAspAOs>!^;BpkRpg&aR2?OyYBr&n$Sea=_|~A zVlqiUuZiWgGKB4VvaS2Y76dwI0Jz?$j>W}RW#_`)&sEq&JaYMHEM{1m`D)&e>)n;8 z1Ea&B*!zq>pW#>ze!Gg{K@J{wGU)hI{pskx%IgdVO}tdJc5c zBxNODBmi#Os{!%TQ#@KtAB*f6srAr;Y1B)e!;3`X<46h%vH67?z7JyZ``-L>kC3o~ zSs!MgfM!gq50~cWOAC=xX4b!#`ECd&S#-xy-`hYv@}NGZNdGgdte!Q04vANUyJ`wmG+4v+3){SV-?q$G)(xmv#@wW z!q3{xSC@h`)3CaVd@v=Q1gnUqgzw2Xh$5(MZ9w$ZecK~41Gj;EA8Kq4Tm=MoEpCx<5%c|dKf>lqCBO= zuVXr2gG{(#4XI|<+5{n?fEX~#OpI|R@wv*p@#;>UdPEDkP$(t%iv0o}o{OO9&rFL8 zZ1SOSuGMGu{kt=SYzDY5J-4*xkt zpR0Xx`iDT}atkku#E(pISEWR|5!=4`Pcx=XG|(2r=At zLRLT?wUDoH7sNJWr?JA)OLOi z5(6Fa28Yl+JG}Gg_)%9+f6hhKyEA??5%$BDmto7~%)XCb*=rawy`h*2A%BMBUIb1; z-SGsEmN8d~8KED#Xq|KwCW$&lgd~`F9_FYn6{Jx_hBetF%pF;B_Aa%DtT^A);zKJm z%>k1|NYY}gyp5CvBv4oyv*8AS-d7QIc8u|8oyhU}N&HhI^vhXecj)Aq3NRB~nGfk3 zZT4z$KECu${`!UUA2{GCiZG$EW|XjC^~$kIa>|guPg+HT>;_PGA73ju|9VtcIIrvF zXl3EvGmq`>9R1#U4CG%=$dg(|p?wHjw?&C~-tj4ht>XY*rBml+ZT6tljpr#o7AxON zoJ`r08qq!;SAdB9Fgtt~TD)7gC)cad@pnRL(963q0FOi+rAaDFyp}b;@ecBRWo|;-t{Ur`;4PHFlX9ptNb+#%Gg zOC}zA`QC#>4sLoG>FKAcwnOB!^M~*c%(gtHwfUlc@yC3~I~w+8a@w?LI;__S+@FHU z;6WieOETHa=u@Q=I905 zNEu_B5el}Ka(2nA!px5V&%j}yL`6}2Y&nuK9}3G4O2Yjb8^Q(`0=^2a0oR!oBS4do5B&~*-xKi}pzj9i3ck;w?6BfgBO_n zF3LS-uu6)1kp-Z5+270ZBP3eows_Gz_(T$f&~MNPV1t%4Pd@qOUuxn$Q%#MAV9s{% zuZqc+gd;y;I2YhtpYy%&y`)i>W@wcBR^Yk$&S}fn_W&WYg>6|DH-*Bq1EF;zQoN#| zrR@&>e~i5aRFv!9J}l$V5|Sb)9nvZSk|TmNNOz-jcQYVLDBX<`(%s!4CEX#?U6KOd zJ-FYq&-;JZcg|jG?^&z?;hE>Te|`O~i^Q;R;b+;h1+g~yot*~TWeK~Mb0n}UU~T3Z zd?~Zqo9xf9ZZ19$6RMMarhL9yUq1IRioGmEaHYp%8bBvn5QOk9LdIFXS;KwVzYIWKY|?uVy)FM-yOSLaP7(2L%c z{M62or=$+e8aqjU{0;`U#S{no!Vi$huD8MNt%XW5ZC0sQn4Fc1Apm{rIuDr~`@f z`{j}Bhm>GZG72}DKF3cycIeS+NIi|Ce17O+sYg2^B53#HEJLIiQeoQ${z5%ky zO)Y+YxxNxaa9bJxIke^5{9*aDP`smKAvU)7iLp`31llL*$#4VxsaR)&MZmJdOd!Br z=9QLD+u2sOohFUb+3|7m#l?du?Hz-SL;{-d?Kf40jkejdF*=Y$-|7p?RB2N00X>4y zd`7w7pRPY38d;D%rR^^k87~l~$Q`0*hTMw3U5u)$FgGUHqL1g7|2`)K`1myRE}h4R zPeFOnJGn0QSE~gr()*z?q@5(Ecd3amXE-e8+jojooyN5#6KxD;T}ptN`ipW8h5;e^ z(xuIQyOSJ8(@r`t=~pS*yU<%nkXN4qSy9RF%y{zlx=_3$RQhYedm!T-EYBh2x}Fh} zsJ8%CHn$)~audc}3R!EWW9N4SMgcZg$H9P|2?cTjt++?Qr>z<=eNT7>UvCisqx$;f z8quoM%LmiAO8ve8F!im_0Bdkb5@wbN?9S0AlNwK}XncKK%sg2$ybm~nKWg3c zPr}3sz1N#$X7$5~6}a0{4P$GP>$ny*zO1?U#!i$2ROQOUlxg}M4CKd)JX2GZOjC?Fox7XPM1mfJGb(?fRy@T;!X{B$3jM%-lYID z7oiR^0~>R~#+3##6`O#|-d!?y2-ornU92ERp55*^Q_H+piu!efEO*e+7)_5%K5y@E%a`G~m)9}>^7dEH~F zJSdU#qdyEMus0x0&Fg(RFWkh2B=F@4JLEQvbz0LH7~;&7u7I@iJwP(d)HhCoF1uC} zDvHO#P?6qCu4`@3V}Z@V_grFsVg-wXMm`h$x62HdHoG%0u}W$}Pw|aA{n+D;PjJ2Q zJDqdIg|My35ZJ*r4?{@;Ah>Y<33muK>uT7z|DSrN9E38Gp6*V zA=qh%$C0rmdFaZZtFRH8?Sv-=HtB??NFPAa29$$|LQnvl zQ}<$P+}Y`bC1q<98`_&u+K7rI3t-xzOURomaMb3Cg_=Liwc0un=XOwugTr zT^6cR;@9ypfC$CrdYXWp#2R>jGcXwX)E=!|iPN{gE?Ze-F=te8mPDn#UKR)EB(d(r z{3!cHmUSQU=6CEDwA1dln90CG8bE)M+>ew)L71`t=O9 z&s-{5e(eTA1K?o@%DT!iIYWrs9ItxHDhzx%>;$%y=_6XMMv@)6_d)m%A z_!z%a)l0>EwPL~p{7i?`+!U#-i%{Fl4t?D=W*=?)PT>H!^mWkNkZ`RltNcF& zEkN=zBK4nm7|VrJTR#kK{#2hjS4MIeeo_$dqRn9bS$jY7PzCd`7XIq3IMnU2sjWsa9&}pZe>adpT^?OXrcgDRrHtnsCoEvxv;XoX?B({JF^ReMk4U z$#!Rmc3F^~6b@@iPylV=K)dil`M9pW8v7tms+A7lV?yGb|2dxM^+<6LzYW8nswE<)#De=O<1rek2m$IMqE)IR(6*C=jqr_3{EsTzYJYaJ^O` z6%nOBd~g)H5RRooXjv6PDLiR#jx|$PdOr^|0rf#UgDHDKfrItPr%^$-N24xvT`8a6 zSLFU`2kT5fY-?X%C3#KB{QGeZwA7iWI;sC%01;cPd!6cdCwXP3-N1wQUqTwN6U%MV)6;h4W!ZqsKcnsH{Ua*Ny)(Ir)nu&vSdK&IVf2o36O%{ zto63<6Z$>?*|+7-s=&<&zv;SLkCgHaI_35a@^U&9<|JNV2{$77U3k2)& zHy2~SUG$dI$8J5(b?G;o>3^)S)nbF!==PHi#d<|G5cBXGryALPdev_ya|HW(--+%Y zOIlHAl<;UnpU~@i=J%_GEG{5AL)E}k`)3Z6cBmHaE*u`>Jw-cRNwCsnN0Bug$7lIb z$~*7ky!*0h<$^#KZCvB9I3vm4<^BPHx6j-8A7uM{1@2GQA z=QQr{)xO7_)%V<4c!F%L)kL!XJ)34#K!PQ0)9PDDo;ow+j2a}}zl)W{!Dalv|Gmxw zWOG+;r9JA3k8!%r1liD>w`%FE1VSCPlBJ_7GXY_+XMmm8oLeR+(9;~Zr(9kfp3FB% zbBVNO8tIO<%-pu>V!t;l#Z)` z{yCk^*5;=V)ydp8X88M4xP|q~!|m~3YwRru;fr*8d#!^L&`jx7_mzG@@?)=Ct4mI-sHN8#H12!I6T7er=Lni z1EVg-5rhIVvpH8xB8IPMq-l&X{75Lq9xEieN5%_)n+;;~v-7sYMkN1zBt#+v52u7R z=fy}NMJ}po3UIw(;Yr^%3{0hu{dQNR48SNqz#u*!2=623j6G&@W^GSo4$dGsxK(PD z5~yJbM-Id>GF#K-)`i)}3Gg%KwKwe~ z-62kpoX#3zUMg);E}4H9fDsX;9CuIqXh%7-t`J}+pTRTiBiU(baR=hPU#JpZtmM}T zQ!qmrTwA%36TPZW^}UOG8T_A`tFjzs)uI3y7u8z0eg-RYe~uz{*pV%PUu@ zN0iwxsKh7l^(VS5P~9(|KC|t4o@I=ve?5-GMAGhAO+v+2LwehLt74k9hBf9mHwj_H zuT8;{QCA~C89o{OOi8C+MhK9%{stlZM1W-faWLP37=U+Uf!;zV0HEleTpxZ1IF)ds zVaANZ9)XMFX#_e0MV;+^g~Jxwj0abdvD}f1?;_vF+_yZI&TEtlg^ht}ggIZ(A_b6m zl;o@6*v$l^uE%N%#ho-uug{INSqR`t=)zQY0dualk9zLsL7<-v$Hg}u$3ETW((O;g zReADa6f8C}=9F7gS}#X64a?r{OSpY!>R_i99ee04_~}I4RD+Ge#uXZ~Hz4%>U*Gf} z-g&JHIYMsS=3MCGf=4mIEh;}veZM|6fHP$-icnxdl9STg7KXetwL~Zkp;y20fn=^> z6k{47tj8|uxGzUOhG!Zb{}%*Z2+CZB>iP@P&x3h-v5RLK3%+3k%~1)#NPKG9EKV;X z60-KR(sud91gKvvrp1p1Q@wn+&CkIl?_EQ+-S2XrBkURgR*3#ch{HAUib5U#rv3Qy z$zI^8TGfBGQ4e)t{G)mR7M0&O)oel{=x^(|BLSP$ef%LxIMo>4ejQSG@=(ehdBVkL zVahD1;!#c&B5#T$gl9;`EQX0bYzAy}2y)+4u=_*gTuXixQqK#I$-cVgzN(N6$O~hh zln*45RO<UB9Gr23`Dek5o$tfw0DgI7kP>1m|-nV$F?uK*`$}l1S!)woe6Jf0x zx7ljDw=2Iq_+qP{8a1q5cqCUl^*^_3m_Gs2)a;eM1T)Yd_4FPqGZ_XPp*Y#v^{zWU z)=nbaw5-U?A2;BrK3+Z1?XtueM3FU4F_?}K9U(EneDbEV>WoSfu6r*`wx>?lF6A2^`@99w`LW1J@XM0QE z(fd%n!_IBl12|HB-)+U3oLZZ7<8}MA^z+Kb^F6n$6=}We&jdH0ycc?3h4f2eLb@8u;bQF+7Oqv3vy zqWp-Ow{$p=k)wpp!b^cGd-Dh02?3k%c}}eD`JA9H?Jka@ z_4)ZGsA2}2;J3fjSTc&MTan?xH1Y{z;f@xZo!@LC|)xqR}fi<+yWmO zhIsMEM1qtr>OUP618-2QL%&6ab$kq)a}fp1#_5{^4`kTkEq=bCm@$=~Eoaju*=WCW zG;=?7s#WXgKB&6=q+aHvjpi9@d}3LKY0GwrzIaL46ns5EIs>i{)r-A+Tcoq0|>cKFIQZ z7=-0+C;67azMULSthZejjhKeyp`Y1`oNd_Ybg6;KR<0*I z`Jj=zVJw-RNt5R-O?3T@$u`Yo$Qx;Yx=%i1NoYQu+%xn&R)pu(^H>I;fs|pC9L8xC zJl`;A3vFT6z3saNd2%AR=tDwV`?c4@y{o@o9-Klu6*Atk0j_Tu6R{hT4mko)?;OKsW5PdCobGon7w)hXM^5#cum|hp9 za#-uK3#<+ZW(>}h! zmnG|OegO&7_b(sHJZg_d6i77K$|-Rjk$5v7aLL58r+tv&v#G&+*;nAWoxaDFUH z4nY&v(Cxbq(9aZ7o=3*PNnf_5FTwAD346ox{h^ircG-rZ-hHSIZzNHaUOoHswqa4z zvvDY;@B^MMWKBcsWyKG$J5XkZexEXl=*WH^Nzg#O$KeCq$SsICLs9#KQ;>3BY|Pcy z0kEOjbD4CCd#$gV~ukUX+{JLI_(cu7M62O86yjZ=iev30i&1e}qOwp&@R9C8fk0mtm~)*|7U&t{SRkIIJd-Yd+(fn1faEsQqS13F)21X$G@sX6 z1r;^+VG=RX54{otG!W-~$QjqV7B&U;kkutf!KwU52Kq!EFf?SSmHJrchf!w)5@zVN z;vKq{eYF2l&`S*5-eI2_HH3r(ma6aK3IAJj4FIaF8t;9){bVL-Hi&ql7?wvAGKh5|J%7u&E~0m{ zdh%W#QOwwZ;MN%|y#DACMsWz$zjoc#ReHB!|5BNPYbc~(18VtE@;Gz zsC^bj2cRw%&->Dnh$lj?+lh6|e{irI(4%)7tWt(67e*H}@Su(GT%GC`;rg!PIn@rA z_To=8Xnl*IKOF0f{}XQh`@?LZ4y6sUpLJ-S*pp<7nyQR39gj|!dCq5%PTS3*J1*vV zU2lKT-MtOlz3cA;V%O(NWQ)3);!cU>9#N|YBOh;qGVB$`jBBo9RnbVj+p94NEwr{6 zSg!KWV*5~ptVCfQRTK-;uWeFjMu&>5F$)AOU8TwAD4qj-B{rE`?pumr{j+@@#F>B} zAwu%QXWG7hhx(=$&|m=`?m<1`^Vfeq6WSMVEp~qMSjB=w`yYNo9iQ~fX)S~(EFhd8 zj;TY$es=cw)k5)i+0?=-cvSBr4)X#zJQ7mIYR`*(fnuC*w@wdsmq)<74?#yl$f&rM zf>HIMX&&<2PU7Wzu@rYItcQuJ%#PS=(HiMi4Plv5VG_}IQ0N{yX|k*R&QS^&)p7NO zaX>4~!(5NhSjjwAAFQ9P`odT+;hBiwfQqNOEw3)2p-+zpb^cG`3Nm3OMllV5b^d;G z@Cp$V(K{2sLTLD+hx(P+n{Q&{I&3Uj@xd4_=n%A1h~piH5jov|3o`#Prkbqn4~Nb!2p8X4!eE9OX!#!1t_ zAqdHczoLiVm89W%Zn9oJPIE!_g(5T$^4wNTt454TMdASu^yf08Quv%JlbXmH7o?k7 z_fSG3cI-VC$Q$JcKX(s1xdwtq^-ctM)FN~ADfqvhTPQn(Gp>X%q08Ur&k0dQ4(1lR z&m~h5G|8-Jc5z%(5$Q-7%87KbXfnt5$ZC#4F^DZ`c%^d)jUu!T(s+5CFz0pc;jlZW z1<=(Ba0v2@K+6@9`sR4yJR2+*5MOj-z8V;&d0k&~)OamkInR1|Y7nn|p9^z5m;Tdz z+DXIx$~ngRD_2}yw`Sxaw_S0!<2Gp(V+KeZ)!u4~e2TyjI(--NQ;Cy#HWrb4tj`c=1jVe|ox=C@2Ae{cabOB=TVfkH|#k>8xRWEJ5YA(?=1uhj!nuS=@#Y&At zqZdI+3!Lq3>#YkM#6SCwPwZdc%}Sz^PGQA*NG7$QndZY`D27|&hYcylErPKmw5Hmx ztL7y+fGqVDIxq>j@QZN+11Z6akFfkprBmQ0Km>jWWo=O9x&BSjbynE8nATo)7rur* zp<1n7pPnI^p>5+0o5Lk02&>O)wJ?dJ?}_gh7DS}`oif? zg!=+fS2;g@+A^Ywf_l`Q*&jqjsv?tNI^u%oGC&Yzn8YaY2dc4_{h-KwLC-qVk*{f7 zAbvrOX}c3BBWlj}TIIv2hNQXP3}G0Q#T$fR`M?`4m0d5kb;;A!N+~$j_B%7MNcBh9 zm4jenQ1eFj?-beYF4>|u>+ea^m2%U0ckiG`zfX_jxQzrAV%^KXNTq$vv_u-PLh0Rv zge)V-Ukxdz!mYMN{*fI-EcrzgRj=onnZ&P6Nqjoto5zPu3rihKd*}QRacBQ~02E_| zGpnVW6@*2zL`;>1S=Pz%Y%;G0v4!`*=ia~6o#V^4ee;N^RO7vY?{^I75T&kNuyb-G zwJ48vuOv3(-g3-PGz%b~K-Kz4|0mv}Wx%elnr&7A-9w2B2L@bayM&|sJc*Bb@74sN~GbyFxX=ZIDCp084aK-9j{fQur9P+MN4=L%OhzY5x-Wx~FD4~pB!K(=8(URR+U;cr2z1C(1V4e8+OHpSV- z-~!2Dh+3e<-;jk<{QU#+zGN1U1999O*Jfn-D8}aE&&Wj}$EA3Kba6RRqx3C?4M<`W z{QLd+509I|1$iqTFJWP(g~#08;@1WM2MrZA(iNif54a<_T_@SRS}BZq25htgeQSzv zL?l(YBkq-H$#bn>eonN9ANe{!s6$xKKGkaws&?y#ZsT-)+Wi=#JS+n$3|#|cdRgq1 zy^C|R_4EjY?QmKIUe&1G26?Nj?rOg-Szgknt%BY9QpA@^R?}CAQ^{Qh5}gm6`sn|5 zN{47bjul^}dJplbD4-Cdlm}Ag0>+^uxhiP)h4FE_U`UvGMcsfVJ_a*1EK{bh>034i z_*t~#CP4qg@wWG#!}^d&RyR^xUqI4yuifqwg9g$4&1a7qk&5t2P~#Reb1(lCCja*-+GQ(Qtg z#X9I1)Jo|t9caEWZH~v#NrkQq;Gn$MvHN6rdn?&Pd8&d%&Q)9xw~HI8l5{C%vHfX* zjH%FnH{BcS7Gp-@`Y1J=Dc<^C9Ef-jGKz6}x(_6`ZP3@Fr+C+QZn?rB#K#&;nm zcR@1CqHdxw1}O*OYufBjN^uL$jy~g(rI@40t|J^fC8B|g=G!DfEKc-wv@nIkHeIp8 z+C^a{q3LmL;T1$|+4SWEc z12a#nRvD}%)Br`^uV5=u9JF0*bowjDK9W2Ij0DtNw@mXmEoZ)hZ99Yj*ck0jYa0}=DL?Y6kujMZb`Uf%f z5vHa~Mwxx~NI{bQVW0e``^~D+kufWBP;4DA3NzVMhLmILgx|;Y&j%(nxPSc81xwSlgjmGc3U25p+6S%y(*xel0@p5S9w;RopB?mt)b#}NKGQKmk1H~(1 z2eS~LAfPbC3+IXMD3}m=3bOIb(=Q`mK5*E428q4=<@r#8l|&ev-Xt%&{Vtkc(+6@1 zqa@mA7L1d^yR1E6by%D}`Cj14AR34~c5txD@FD zd+LTnsxnfO`+xo%6g2B{ye98s53;zopSjbtx`dvv&R=vG@1yQp{7AF zS@+21+KIz~VK?1ds}Y9tP5r-mLBa|^<5{;iwNn;L|%*V#e(hCq_YEjTxk>PkT* z37>P(RJqwI-5hJikY)5b*w&EinI$jb+-Y?Szu@#7&XkT{FGzJ+44}7fMkZb}=H@2G2nxRK89_QaNDBx(yZl^ni3!lUHtzLH73-e(1&&Awux%0?bU-!Q7d?36#o zirXax2Y|PZFsHT9II}mP-b`uQ@04u)09+Lc(g;!ia86X2snYLXenixW%VakH;Y5`A zW>uC27JgHY;66lp8-qSjkxKh-j}j3`Ar?|Kh@YT|gGDnB^{`1kGwnjQ*<02Kx424Q z-vOzSqn=|jpM1ILQ0*?A^!Pdh1g$N=d(}l9NJ@bwef!W~y8h~9bcidJ7 z6g3X4_pAdst>*H;PE0n~p$8do7#Qeuaj#PXMzf7!(Qnbx8#5$W_(hj{hy4-epPg%O z^ z6*NA=LQ(L>cNhR?Bwx9|#qoic@N*PX2Ib52v%?Gp*{FEVC|>gL8Xi>)xGV;enn$aY#3C}&sZb>E#d{!&%RUxRMGP`nqqt1{~)JwEI#3G^8OlLVD#+f?!q%D=9h zf(Fr))u?!v{uogXAZ(HYW2uX>{;~q})8t#<+crNi$@6Z%>wg>mGb9F7a;B5=h^CMz zPB-hTbcBa4#y#!P(h~q!^j|=WQww)i3h3b~MlmYc1Fja6=?V)3ML#Be94KkPDyis> zl`;mG3N~^$7adKR0heww6~OSU)=+#sOf-GBG3M3BP)^Ip`&`kO zV-e@SezsIG6f0QpK+U~sUfix8NT(p^7s3+w{Tfgl+ADTQA}(GLgITlcHP~;JSsr43 z502(L1w_UxA3j^#I@wTE{tabG$017dwCZTiZ3xioT%=aao20e9!}(wlG?;9R&aBOx z09KKQqC;oze)_@yI*y5EFThN+Zmbs+7MnR1YNHh2(cCc)O0eD5?JZ-H}T60 z$y!Gdr}~j#&@myJD1K==NQG9Pz%7@fbhbw*JXfI-b za~nnm*dJMGyKL%^snQ3>D>_-JPw~5Eyuti1Kl;f(%jj#zzCLr_XwBMR@@{` zFTOM4tz7UCaFe92tCfgJC!lnSu{vpr1flp6_S$vfnymKU;|Nru3JrkFyHi(^M+Pt% zD*f%l{_|JpOs_!-GblRrRj%2hJ#eUW0L1``S21kQYzmQ#7SpK2`%3ssm+=(^J~Gy~Z~M~Mhcj>lBl`t-D0BF=OhK1izfD<1Lxov@?9LF2_@ z63^%Tcj%vkiv2S6b=m^WHMy4rr7t{}tq%{nMj$h{)ZkHS`Z(T_E9RASy^W6}K#8E+We zIlX&&G)y7Z<5TLmjUiOVEY;(YE{FJ7Qg>CCuqXHj6y99u-Z&B)W?iJ$MA+>vT}M{J zF}wxE2DF&>N-i9w)G|Mg)K(r{?5-Eas8Hc5BRRRsnT<;vpZNZ1m;Hm}2y})t9peo3 z#2m54wkuKLVksWca^(uLC1|~|cR%9r{u(h{e|#xSVS{*5qEo$vu{@cL}<--hE0JZTPl!SmKV%7HI-lq!O4!Z7PDGX}iy;duWpE z)o|2KJk&`p$?1f1W9$@lklwa?a~3aqZjABfWlB54_NJ|Xl;u!3 z?NH>Sq4lgzBSB-ts3cSh0yU)_9?LBJ+o8nKf%GU-u9WJ=6G-8Lx<8&G@zwHv{N9seBO)83V|oa>~n%uG-g`FSiz?; zb-Y4t($v%QP1_&tU~Xgk!V@tla#D|Is@_EIxeu6G?u=5KB&;a6_- zd|UbM7oyNc_!%YJ?ni2+w$=E%pp)Y71&@%Wd(A{$`PuKz$<6~Za)({k`ro#=>W;(G zc+IUOkEFGV@vLiKlmrBEXWYwWX>$G3wEJ)A61w_)Gk9m&3OnS7)mmpoojF6{PdSB)Zz_8bbFW(F{3(Vw)=ycOk zPiCl3xWw-BDt`+X+1U+N%=~z?_GPHX!6Y{%<8Cb9bF{${c9x#JV$5b{=L$~`b8zP2 z6BvNykZY$!u|Vq6wzBRvIJ3eG{#h;R4f~B=W=zSVPUEmn1-cgYQzp$-KBt@LEd6(oNGr?q z{R|_#6u`Z?LipS&i!~QSZJn=Sq?t5=m{Wp`Mim(aC;DIoOW=g+0$35(W!S@lN+evn{pOE9cW?1+hAkI#h5F6Ewt(1X$>9 zMb_%y7Ai*om=qR-#R*hijQ)Aoum-k0HMBN3)D;E{C9c6$*&mjPVZVm^4y8AqcJwPH zi%xQOuF)G14yfQ3(-kHql0+_`tvd=DMGv;IPeGJixvsNYl{tx?U&LImnEqUhvLQ_20tFMVn(Hgw ze%yqUAK#d6hB5t84{y5$!d_wKsnd>T<0rP3u;)K{^TZWv% zM(yhpuj^IRH>1`8u0TWEu9*t!=o?ev+Jr&KDA19~(X6)Zjt1TR#2TmF9Td03Wgk(^ z12o_=uqB&V7fTkDYsGATZM5bvuIp%47%eTRqKWJHNxGL{=gd|8*V6VZ>#j zO#+bJM)G%EoF-JueN4mzB=7F1RuLhb4_Z)D{4=xP9(x;(-ZF^N4-e6>ciajEN>ASX z@2W6~_-1mHtdqxm%1R8wFoj}d1hwuz3xt*8TJgkJgm`PYl{gnGmaYik*b?7VbN}E4 z4x*EaOvz(Z5D@y}X_K5kgJi4BOoa{rzuNo&+d1;jDD&h8psCZ=2)cnJl~^CJqx$(2 z00iY@Zp2@sbF@ZKmp4X@MH;`uTeXt9mKJU*;XOI-^4qmQ;lA|k2}9gL@|B?_WHzj&zM6ggu8ZQo!1_>8EV(J6Ez0u3EhtUM2;A@+1K zHQ$T$aLLR%UoH1Ys%TO=v5L9=Kn9`eXF5K|(?`f#s(t-opni-@NRj!|>AuNK|IbZw@&%7pVhs?Ajsilx4A2wK&C#+rD8zHQ(!n{T1|SSM3Kdq9 zHh+qV&dVJ6C$F0hL^VBAJ%2w&>j0zlb%0{2amX0g3AwzIcCD$=Yem5#JZ(T zE;1wl@;Y0Jh@zKG?p33_=>vUc*7fRVmYSfumu6Vt{eToq?m--UW=STsr+?8NBEaY* z!(cZZK38tz$z5-|e^wLsG$WiAG}snPFUxMQ9sjpw)w(&P|36#+|6_FjavBtmq2_tp zfTD1`9&|H7`p@-H_WZ{O>t7+8xlgRz%%|!466i;BqFgo&rNJ53g12Ig=-25KdCa*= zPL)fVPIJ~w2TlD+qtL#<3blvMRwerqB$-q?D*VXEJH}GVjqkk{t@0oe8 zp{kUwx;OAW?d5EGq2<^(ZWR9x=`n(>3Wu!Zf&i+|vIlm5tGq*P0RF5NA)C6~6ElF- z|20Fv1Jr=q zZWLgEz$JXQu-@f42rg~o`Vtu4NjV_iz%AQKp##Gsb+CaOHv2wpqF|ELN-Qf8?~ZD@ zrt-z5>xIR7*>KBup((_jBGUvBB}b*ubI;HD23`CV4)ADidKU8r(MM)V-eeGKhhnP5 z6f|nHrgNdOY>ctE`h*J zZ@U)6Mnjsiclr}y%4S^SD(xL}Sk*_j4NS*_`_9!sYH3&pbG=MQ69Irg4O9yM(rap;jzp zIx4X-A;*QzT4BO7!(`af?!8Wxb*{>4CDyvvpobQ#KnnQx>))QT`?n$Jj{pICxYk0wXT4&6 zJcpI`iv4g)Hdx_Jovn4cU_uD4DBL;fP8=h1W|=H`GYlFoh|=v%Ig=&>n&D?}tvkBA z^#Ek9hA8($xR@LOAi$xUHl~Wb&Iys+)t@c~UAZBsWE_7u8ypFqAia$^(5MzH1Mt?giqKw`Yd@(uDb zhn!(QNLSGgli{Ykm-pD_v-E`L9*_S17NGde1FIh2b;>XEcY&*Aj<@M@m~-9C_e@nr z_5Gw*JlpxBH6ubMyr4?Rl3ZTB>h=9+jA-M5dc!xk!BA5qUZSg(PZjj9nMMr}*cPDt zP>@(=`zDct6P}<}_7#*VFRF?jm`*g5JRsI`%P%vQ)x=5r}7kykqT2A6Pg3L*-IUFWK@R*RXrNj1oVvF0{1c!k;-DZuPgtdmrEd``udwV(oU?O}ecqo( zdki6(nQCk_yh!eR$TV8WrsWt{=IXFD{R$IX*868}>tU%1&OO}TeEmZMY*IR|!igW_ z;(vx|#e`k=r$Yj2 z`^l<{9%egQtmjvLp05Qws-h|G2LYJnr}U#OEx9eK2de{xU#NN8^vo$NB<_J0Vx<{~ zX0Cu@AHau*vtOqPu`(}#3T&udYoQnb*DFSVqFmu8Qmz{K^Le1?`l5ur#+Flv`ay`U)-*gw$6T%ob9s_dI|%GL3Gb4Pym1n57nP!Ha^sj<3aSPnuAs@ z&o{&U+PF-pqS(lxYggxH8yf+~@@AU10p{2*hN2yOwP}fHW)m(@-aB_ghQN9p z8l=dZCx$mWjCxs!&R~c}83Bw-*U$}`)RiXefhjY5FJ0mbV~R zo;-Pwt1NySRigB*coY*Vyp_n9pr_^Rhw4VB3^p@0Er+obSV(*#=%K(BgqR>g+`L!ib`To^ z3bC4aIKS!)y$P9cLp%m$sd(i}eGq$b}l9G7@ye!7_yI zLv$|bxT{lY&F%DO+4u{mj1DrW8abjkU<9x}D4NmWvAlxLJ2Axfr^;c27*coiM1M~D z+soR};&$T{b$@vD=PfWlnsq|OKX+K8SnhpPZWeQ=J~O1788DeQ$8=v`q>R**ml+1w zUtg}{p8=-RXSz+dxL#~BtHDB%f7v_Ee3?4Ug4`sDsAR@Ev|!8AvItvs6~aBrw%SCn@;7Twr<$ z`0tYjNmUNa(Ebs0iBNF>Q>r&$BM!>3ezPqlq6POK{(q#Z;O@(WfRoV7& z835JS(?6|I)s6O>igGB`A_rj7>+HGY%6VB(?HDG))`x6U^ujMrhy92F{>?~pb|kU{ z7ECtuCIFU|7!+qN$if*e4%qSC6o4d+prNAy^QzKU{z z<~mAPBK7o1@#TBKU!DU5jV|)Xj?DlWI~LHfm#qOi&_I+(W&7ke{P;O`nd}j`fg3>d z1vKQ`B3pkT==|dW#}WCOF`>qHeOXk)6s#n&;QW&(sK#kJW2n>gC9m^IEvuTXK6pf9 zIX-H$)8xtZh>ipy5^ze-O?UWiS8i*q;W};UFQ&a*hR|n#)rY5{)AJE#KPk1lhQTR< z`6F-bzD?$H(fk@9`7G_GK%vo%o3}g}BTo%)$$k&rFmZQiZ}?ettX^&R8PIjvuD%7h z$*sh%_Nz(q!jg;7T;X7z+~l+2s!c+4ogp#({3@oyukJsSuoQ?rf?K=aoBP>% zWFe;=6$SwVlV_$hpbh}2nr3(Wde`p0ryZUquXxBUwa9cbwoe&Z=4zdK`UI)5NT|4C zl1Cam)V2FcZmv0v*g8TG(el3W;!w!ucr8iXY+0{D=DXC#9F#ASQSR*3wfH?PlVA+G z4WF&$XOkovaNEr1Hr~?X2s=5^TL4KZ@c%E6cN(S-OWyvfyGxB%=4+1$Cx9k<%^j8) zoz(TPoz!hlE2u6|03QFULEhy^g*wm%9@hX<^b=6CxUkwc_oN6mdd+KZG@$)rRL)xq zCRz3X?6y|}$Id{$>atTt;LLCUS=yOZx8?fG2a~lZ>$1djlyLx=&lzake&zzaeuZF} z?&=9EtjBB4kN;FqW0tk+n_U|A)c^t?wJKEo`vQp9AIFqCOxs#Q?5bU~%Jl(AJeL>spsin;*FgG6n(I;anzOEuA&{o(dnYw3_eg0fc(B1EoB9yMV?$ ze6@w~_mw3W5AQyi5f?xro?Gcl=AQW3)AQn0~L5Jb5~1uMS|S z>?U?((~N5ING|0r>!!26#XZg90$j}3yS12yN7u*GtKLxvBI-?$)?UYAUL2hSZ9Sg; zP~;H_80qJ70g!1t?Io(04r37SbE6d6Fxw)J;M?2y)vsR{0vZ(0%Ze0(c0aT2*w{px=vY7Sz_ig~*9W!g za5W{_=py5|cJW?4snts)^2Lw(9* z@GHNfS@Rnys%HOhRHs>4D|m2dT&wd z{8J_yIqg2IoLu#8UMc_Y;%$JUS70 z*DqOMhL@*|BHsxfmQ`EDKf?@e@AxFChx8DUvI$W&Ikz8Kp%G8N_|qQ(a6`1Bm-z4V zag#WOWpstJ98IxGVRLoOOD%eqKYvtwIyw1)ao~zDyT`~iPB=p4=0f5akZ!8IA0Lu2 zE%)l;pRsIF{;F>Pqz_uSW<*wiK+{c!!{xwG&^-;n%I2_1pD%m^Bwg!ll}?mS^mt$2 zyig0%r&I-P!=T@5&#dNVN&`Bn-vIgy&)N1s!XUn-4{B-?tw22d=k{Fv^abG4xSR%g z*u0J-AbNF+DR)#&9RxA#cV~t96xqmbzQGF+x4P+g0ip7KG#_laS9QJf`@s^Udm>De99=jfIk@V0NSwh3*oBES#Lb!JWnZiph z(l*Mr9VZ-%n&_ra)~7}fqgnZX(-o)|w_HyH+Ng_5#$1icf@>Eb-dlJYf>_ME8UTu% z-{+R8;Of%x9Q!AFTLD0wp;?C&Z!s?30~_;H$|PltD`v@YL{8M@&9}(O+I}%!AeT{h z@)&b#ii^*zjDmB^3eAU|{C9OWcu*R0u-Rzb|QyZOj9$Gf}Ld*TB=bRAu9&MIo(sAcodiFau5J~xYI*0&(ryQ;1Qw)%)sNB4zy5dl z$|lyWli0{t#k^^}QJ@lu&G?J>K3m=;(cVajdq>=0jHI+0)JSeaoY0|x+@kTE(i&AGv;VW>pkhll_I(XAep((8 z=eos$EHK7kqq7C1NomnXHeSrd8G;}zVJqmB*pCb~7%q1YVK75!fP4%wacgJs(Cxkl zzr8`+6v0b8pSqNp2WJdMk`wIbW5@%3;0^nbS&*=YU0{nbNWzQsT6!0b3lA{Uxq@o$ z*+M4TXbmWw!0k2OU^*w|T>^kPJKboZ+gkwW7b@-C@ZRYLzU>yN@tXkXC;fC-5B`)w^23(S$8B=Xlo0puaQM(Hnnr{mIX)b^eD1clE=%T^&oRyn; zd0bCFqRkU|OGEAUm#^iZq+P!_j|QrLycyoVV4pZQV>P9t{d&Rtmv3!VU4Yq+bQN4% z7^yFjn?csnjhm)le)(`q>s&Kb_%7ApzZn?f%CXZ|WRn53DSUJ1>+^d5^XoQM+{*xTT-tVmU_(-$e+F@r~e6s`vz#qF)jU7`j(shn_7#D)@VK$@5S58 zGr}Gh;qCB_O-j*mM zX{sOe?P+(mVBE?(zPU8fwxB5KDSu8VIrDoQlgePOUf*46D+}?-qB)f|N#Wex8+L!M zvH$(6@N3oeLKQooKnCh~p9qgHFnY?{?lpeEpf)r|kX5r|p(#g?Q&jTm5&$l(R9#P8 zHbeBy9a#{%<%RRH=)IC=)wA62@fk zMj?yt#ZDq?`ndQA5743o@jv#EwLUh`o%wbsGTCS(??GaTXkhjOsi?cHPk<-$GWJv3 z_Xiw4xXSfj^A26}l)|IYx9}U}1)cx=N{3os;NS3sOa;h~XzcV~Z62H$X32nfs=K;P z&g{-ju*by2>PTI%O64Q0;Z(~_67X`hZ-3^~{?MO^&d_)1Z7Fr#nAN?eCV!K+p}d`p z&cNQk{PcvRaM}_Xl9$%^!Gcd+%DVw@=JcI@Jt(bXF<4dzGs*MhZ%Y7E`U#%9(p@!j zl{}Z4Qx};*G*xJE!O$_Vt9Z%Z%f?iWb`!G6q#r>!h2eFFIIA6LI$k~J zrLpH^A-~Fp(Qd2bO=D=Nj)uv9`Xr)@Y+^yDUA%OSbEtTkgnSAB)i5UdcEHx5hgJdq z8b=lim`iB$#d}P?<*X7~9X96EM9CH7yJ}q|yXgBCzVcQ?Uth_C7Fy}?^LgImu24|D zE+43W?ML+BJ6J7NZeezxh$@zTJJ-Kh^qoT`?sJ5yR4?T{{rQ_pcprhWhEVNLMoCbD zd{ldG(aZj3sY-!=*tbb3^5ThG`cFTd57Qw4O;%~eEjk(2-s)qD^F(=NcCicheu5E> z+#x=sL`hg10ZOkh+~BBUx}vGlwBrQ8A^mnck(+_m{_FE}3~f@+iQ>RCP#HKqo4DSo zK?rsO?Hh$O>l{&x{R50LF*ogPz5IvDx-w%E6wQ53;6aaJNr!p}GZs2r^9?vwV?0~x zy^A2yd}_ha8V_O;U{vs^WdNlQkLQgdudd_ID|uPym$kBPkB~CHB=>(zG|^_$6pxOY zfAcdWxH%@Kf2!C?fq02v>N#5*CDXR#>Rfh5fra|oB(c#m^Z)(m{>M*W&>a@ulY{N0 z6y0cej;GhG4XVH4xvAgnLhtoDPz@JaHMEF_xdMH`^7j%~>X$gaHrW(R9f{pSb}8o5 z|E_Mfw~El{Qd2*ue>5s$F^2Rz7{j0p53Sp8L>ke>J{<4Vfr?io`bG~ zMD~uF>vp%Oj?{Q_%_I`rq1_q*hH#lXYFaOZ4Y`!*<5B{;co4wLEGxWws7ozVi? znR-9%z6)R;+9qCcTQorAEjO;wo;77TMynFlr(R^O%K)enz~{vRsH~d3^7-EU2Fki! zu-iUQ$*^1mZu@yMtmL=y4rNW+ZnjY{h;6sHxqYOgprJP8041d3VRhoHJSYRP z5u6Luz0`P!4d=}&Zv|x?7L~Tozq*C7-xRe*HasrqD;e)9Uo2CCwx|=rE#`@DLKe+k zxVOH_#@;vm0Hjk5u-6c99G5p=&$C8a&;QC5`{k?OU&H{ISowgI?s63pG%fvhN367I z4w_+in3O_XgKy1N1O>e8Rk9KdcgIxiiw=BY4Z&}b6SNjPj!-Q=k@W!)acO4;mKhmY z*05vRMwz-^^+IBE$SXWRClTR0e!})|!q-36^uLPae|!&Ea6maQLP(ZmHP_#a^Uec_ z(7@@+eM~(RD^*pNqt{Cvl7-SR*#6+eKl_o}%QbMt*CICc>+uY?`#)0F+JbOfha~?1 zM^_2wojM~}7NLypsAO`{|&5oW}WPO-fbjE-wz3ex+h znkU(Bf6Oy;AlA*gl&H8n^);yC4EUME_TRAVz71-TJkiA8_;4Wq@H2hr(ecN?pWkel-%8Y& z>9{svz9b{8Q}C2YecqLN|5E8=qWzdvaD8D8TPE1t8VKQ^1>|knC*{cjTMi@#(%6eB zm#+$We3ct=ij}F3?^`EcRenQd-Q$Fcg62=0n2RpG96<~i)Aaqq{krfe4vg*Bc&!I& zs;kzH2Sx{Y4EY}??0@%H)+j$i#`$M+JNH==JZ`4nRX8i|iXh0!CY##ObY+M;w>YM1 zRDq)%1KzqkA?)+!Xx`J9dUxbCRHsQld}bypq_Nrof3d*R=q_q1zPo(QcIX{*SHtmI zX_JxdOK}a)i3dz1PI%(glsRj~L*cPk71GsY^TKrMMQ&PkPTV^v_1!M|#F|gPvto_y zvD>yU_0Xf(AWJwX^yN<<4*lyle4x@n4y}!Ux&`tyyxG;6ijtEV>8wK8Y-mk_wM<|yu|(q(QG(VYcD_wmNp3FJeoxIx!`n*{Pps|Jsrh=)YN z9&)jRCff+Jxv=GB4Sv%@5Tm!H-#u&ZPdNm8WN+8-($g5IB#?}Buf~rvO1LkHU2ww_ z#!&%BcU*2T;(O<*$JytlcZ>N*TFcivl=g-6%JJQE>3ecizWC8xY;(#7I6&e4s^9fHK7x zr1f&-i2)8ZUkM@fu08x-1F^Z#|0gWCE$AD(`HaMwE#&Pp(~(RrWtYm_K@r7zLa=5~ zPqG3v0*#u@IoWI15?&{z&*+L1@)C8j-B_%2OPzWIg61$2f{j^^q3^;RI;lxN7{oW7 zKRm%+wmy}fstAWMFy7Xth%t?r`ORlZh63lu2nRTYvTu;1;>$M%M1@f21Rmk;v$Rn< z`EH|^ii~|%20Xk_PUUhSCw=kZP>)kRRifs{%>i@kd`O&v_{**RVnZ`?Vy`~kxw{#E)eh~kOi{Q$@AOqUbLv6Mqz8YM`{xu7 zys-pH_MtJFPNYrVFQvijMtJ?~LD!Af;p6QuB00el;KDG6t{S%|(N3 zvd|JkUBXPvYgD1b_x=_is~jKIJsi=1DonD23|>SV_@NL9;$24&dn?cJwH6E^xS*bT zuD2(R>MtXw;VRf#fzUrC{bF0qD({_5DcASneAWsO1RPENE-aSB2kCh}JGZk7K(I(m zk_KNz3o=-u!DgMP6&;WVp%kKyEPB|5J?Ot4OFBcpU9x2*2;Aapd==l3E{E;g?d~>q z=h%jqfeWBk0A$4ilg`#zT6wD56(lD^IcNn^PZKSb2)t1Q8vMmB@SEF zj-VB3Jo3C8l?&ZdX*GYTOh={F&X#Y-5C_(!q0a`RR)pSy`N%FtqR5VpGpm2LN7Zr1 z*w*+_ahY>(=Hj5!%=E_#O7`%A0$J6NRd-AC1WaVkZ*YxaM)_X-glD%7!{LYC6J2<1 z^V93q@kLHkbIES#;~{o(9X#(&5P{ia%1~vBwsDkr12+^UgU%5HqFOr*q;X7>d-mft zTQ%ez3&l!v-3qrDXgnhIfi!0gfNiU_L-)bl{9m`vp0?i#7fx{G#9!6VKkA^@MDyVz z`nIp5d0vBnasIpXkz*l;~1^X=IM87lmIa^oAi|R>BPVsDpjya zY>5B7eU8W3DvS!3Hs5J}kNu6;+W5D7aOKUM$XO9$5LeVpmxn|k)W8u;cirCYR#d?f z#vgNr+hpzIpu_X^`g3?aNvEn(6xV}!vGCj?t;~eZ>2^vBRDy||Wk`015M@H_=#3ad zy!lP=S(?_7m{&^|cELs}kmX?Jaf_g^!>-{sdx@%1?Xc^kE0I_4MqT#fz8iZ%bxi`vs_Cbj=kLV==2*16;UI$N`PGnhretsR(U$5 zO;)-u%W@i5J*j*=MZvzjB$N4sx5WuV{>xmp^Hccurd80g&ZI8kB!GMm1}f|aOCy){ z-AkT*`HFvxDZnx8SDkM3qXT9+{y^L(0#9h928 zdBwnEA}U?&1A(a?!mbKWv*n0)?(j9$+l&l&?E_J2Pc7;;ZQA-GbcU0HlH20hV!ge8 zrn5eK(V0~q$|||+hqqmtjP2N5_*!=xicwXmGX`C!QVo?f^B2xP2LmH^1;oyS(wx&4 z8NgtY;ILh?4udhehC%t zpD zs~bLkiDd>$DJ^gNIfbv{66^7#Gw{+z2!ytt@AH15*Q?Ijp%=Sbwj@&JeMTuG(K5DiZ%4k1zJd&7q1e?De6gdUTo4C6Mk?73p5~ygQfr&vX?hB$O+O; zyb)GS*VR~+u;}K2hj73C3VsuuCpS|bZ)+F+$ANc`6S$2$8@j^y^GW6xkzP^ckO#*b z5u}S1sAO}B-)ypkT_$inJhO&U(l*=(u`TBfWzvddQ=+w{G%=A?jqD=VVeZCLufaE? z(4zC^gu!_QFdB1)p<^jIwb5$r`!d&sbckBE0x}{Hgh1hP?o+H?l`c#zwBd5oK<2UP zJ3{s;cTQ`VkK&$66Lmo zVt5HVr7bE^ItZGLq(nqp5`%c&qvc^9F!Y?b{}_?zr5K$Uv9h<^_}a0d7EbTLwW?H( z|2!i8Tm%302gzC{39-DzKwkp=7mw}yeOh4)TUyXt(Q2lDE7ZhQ+49i#XqPHgxQxFB zvyrsHBp$fSR@hDa_4JD*aEU8jIPAH|dFg(4WP&7HImO;=#+VIv=O3|p4R4ruF<`BH zgH9-`cOto;UeZmuFRNjUa`CuX`HOCbEE%mBJ%_R2j@5~di5R7LF@>M$3Z1D;w%?m} zJW>7Cm%9&7#^fXIa0#jtz>zLcy!ntB@a0!v(_5D=U6t4Vc93F8XZEh&G4@o4Y?lc~)w9Nq72odrD6^Clqe! zA<+;+bBf*b>08DO-Fa1T7VbFlS^Wl#G6Kxbks-8G5ZHX@p%^z^VSkvn&DD_eznaAx zM8g+PQ7b#sOK(FV=GoAuc+m8nRAv4rmCX0`!DA+)*P`t zQaXJO4LnD6Z}d1W?AePHW;8Hrh-7Ej51P=3Nc=Xb{2vzZKbv?NS~7@r=lW9V&Zc*@ z7r>NCn6sMlDYGq<&2fTs9F=qQni$qS%?HCXzjxL(jb~E3ayPx8$LOWhb3to9RTy#{ zJ7F)!J3|R_4sA+_WtnFMW$Uq`2;a<$UuE8qwZ@@3rluGU?qo-q_pp_B8>Bs_o4LKF zUtN^~Uf~eK=*&8$r12NL&u{Bh)Um*#*$KaIvo5(j_0KbUt|Uaw5KuTd^cXrgW zqvmmj-G}l=J1**%Dec=Qsa_x)c8~?BCYmO(O8wYSJ=qdm&WyA$UrgGDy;RK;<*KOZ*h0{ z$zZK$(W=-8;mnu((UoiL>zI5LxT|SQ$JBf?01J`P#Gkj7k42MCf?wios_6k;N9-_W zvE^xZwC}m8w)l)-p+0$4>HPw{Jxhn(p(T7V4;;y*p%u4!-F(HJV2|Uaj(^jGdEhaHLRamD zKH=$LVX>yQTuHiekF{6RH?;&-QPMQs`HBf^?z=O(?QCLT$QeLl;FY=Fc%ic3>roK7 zWLI&GpBZ@IUrVX2Gsh36KANBXzSaG?;QLK&xr!5a8UzcGBUh7Iy6GUTPGEHI&cjOBfHh-v+v8 zW+K`SYS<#u93zJX>GoACoVw9J=F5i&xbaT@zRp7xQIbIou$1tvIPDQGM@Lt^< z&;WSnHdP}7*nZfie|;i-j9M`LGi-j(or%k(ogSWgpZy}tk26Ub!2BRvMPlW8;iGmr z!J6SDK>c?yXj~S+G?p-1)&_P@EiM-Q6n7QTq0iDWt1LX24B>`v%=7}%9XVi?JqG&? zPS%025NW9d?3Gh4e z5v*4GO{IRSfwR}0Y~+w=Yet_^{=?%xDa7UJjCtUPdh~B%zT{SmFUceJKIBxn1RFP# z!)Nq_utF=_pftb~JL`F-YqrB?7HlDo9F;E~kh_xE5j8b<@L@XYRyReWz3i^SNqU^6 zt@;?R;cj-0v;v@eoqXlXsTLpZ)sL-?6C%^hO{9xpZH$$gM=NvmCNbym z5vcr_{1w4pL4}ieecQ@Vz~evw9Z$g8)!c@PGWz@7Ci@>EE$kS+_MY_j9e!b${Jtq) zJ~&*s_A9>=;=TV)<=P1ybAJj3q0Sg%3ayRV@6L@ZC^K^Y6<)Goxh#9)u?a_zr0};6Yj3x z+4ka!w|^{mGK6L;KjtlgzD=R#8+o@v{5e;}?Q`bjo%j@EgpVrPr??!FsI${F_|>)+ zYk%g9I08Mr=3ZmoQfkBzv~T&TcZ??uLAS|yyIynpNey~;+qJhioEHCkX84zZ0MinL z79Oy#UAN=my$*}#rEE26p~SPD&Hj5Lr=K@IIvn~0CZ#l4uWxrkz6EU?&L+A2qpJ4L z^wP(l=Z7fU zBx+R&&TsUOPT!+2ptF5WbQap7iM;@kTl{w?i^5@(;_ypZ>4D!@TK zbE7+mKQj1S@mc;+P7<>~NZRT8@#>7-XW#vOm-ZWmF4!HP{A6?I3n%Qa@bLdCSt#mv z28SK1Sev3dKnnN?2`v}p7xBrNPbkDL-tO~I31CB6f_<{%#iE0ibAx2t;5K@h!}$ku z0M0JR{iK_Da&?iZ%Y9UWq##(@;H?wHwgxn6lj4eNM&l^nNh4p|R&I=5YTCHZ;OoA( z6Z4RxQvTw2dDrV(^+5!76_<^UQ9Jt01PimOVm}`2|1VY5t6_I0zlR0qSoLIO;La!D zPhhhWnI}gbh~+;=jWC&A7DB?zs2yE{-N#q~Ne0RiTM|;QTOcpqG^Ovl4bX7xS%GaM z;FT*U8ojb>{m^_HpBt0dBQl?J#frf0|6XGCk_j3t-5wN5?(~m*dZ%xaJ?O_{h9489#`58?Gp2=98@NMTo!M*)KIj;p5-R*vHMX=%j z9$$Wz*q|l#X>kbqx}f#Nh5XR*abllcd9+XJbmg_hgU}DyJ0!2@Mb#nRwi}!$k+j*9 zcn3Z30kf{iy$c*LE3Jn`iCQsVWMJ%lZS)Iy(n=^!#dWFbIhXcgiZt#EQ#~`WMG!Cc zlP9TSti?q7QnEI;bW$}zXcj}Y;{DDsmZwH1TIQvu7!nqT%#f;OHJ5X|wRuaF7s z#Dleg=l_#$uYD10O~6Fa;GObVB~>G*|DbCSf^w-$38efM{WfFQ^+f|@%zNZbM&xE* zT}=iOAjmX57X&S8kM~SdN#O0bWtbZXVHe(K5*hqEC+4E0|5?G&t@9tWX5Ox;9K4`j z7Pb6OU_eUdzdTmG&X0^^*iWJ(`4S=%KsEu$v)gC=V)1n}&L}LO@&7v^%ZoRB9v?j+M`T!hs@7PmboWO?OZRLLi9AVK=(wD3+{ssLJE(_m zuS8JW@nGE6l#^p8D}wNT0jl{by@Hav@nXs(viG{zKT9CL5E*$Yzz7x6RPt;|m+*9% z-`n>;7t_D}K;|LoeC5{ASt)P#0$-=OOa#eVn%>-3VoI$D_QZgVconh;-F=0gZqVab zgnUwnaJFGt0Q1_>lguBq+QYYo&Y`v{HoB7%YcKryXVruVOdov~Mn}T`Aqo3jfu(8n zk!IQz9ViG&LnJpvfFdc6XSMi(152I-^U_P1X!57adSV#s01*SS%f-nsppSc$Q8Man zCTgtWV%K~s&BqI(2iOwr%61+$%~}1?&V9MqCEnzSXJzm$fl0q8nQXC>)^Lz3Gy^en%{!wHiAG%GSGZb}9Ei=Pn2n&XJ=4&y4lf%Ye=08x8ARJFG-g2yC=11 z=vEh0C#Q1fFPP~6u(F`&?y(Cwz2Z>Nmam&{CurWLBDV6awk!Ro2yim>=)+>hNkvNA zl=wMYSK7*hz*V;K-eFvu68SZPmsHD7!a0Tq&cUDq9HHdoLMqC8{}PA@P=hrFOH-bJ z(tAx*TzS&*Wk!J5{|nV;jay(m$})6|ek#Rf zPNcm%PE@yDQY<%wfJGwKbx0R1K6l5d0|;Ntxyu-VOCvm~tN5DxZRop@zx4x=0o6y( z$*)aD)rqeq{9fs1RWdvFlMo*UTEdj8Z7(?9Jn+q)K1`6oZ;z6^1?(<#7gSJBNzY&` zcb%(rvZ{v4B%M@B$fO_rUn1S@#=p!Q6@o%5ZbHf!@N6jC-*gc>#os1#8224c zKK)vP#xy{aLZNyetid9$h3!NGM?sh55+W$>Scb{YrvA)COiB=c2**8-nxWUX6pg)4 zgeu6{Dl5NDT4s>3L{|-Gl>YuLSp@eX+4v-NgqoEhn+Mnqf$p8!(j%9a$X}4=(J8G7 zW5mA8E*8UiR>b~2Oc2kr_KK=*NRQi2VDLDp%KSx+$U)@zldB@iXKR%Gu{(;$<&oKXp6_?O6(NGT>XVu!rBSM z7g&!oa7kj_3< z3}w3=Qu$cKmbm43qi%roYp)(f6QGma$=N)7xq8%=poBT-eMQJv36(&vw`jG^&z3q#l58$fg%(yNr_KY(g3>K^8hnEk1= zdXGr;^M~S&j9?$LMTw&meo?QRvKCT-H zC7qo!tq!&uyX&1L_ba`W#1}6@Lg@{L6z>0RG5y=xip;Hs3LqI|?*d;?3)$a=aq2#p zq931PH-9J#LqA&==`hx@z3}`Pm|aJ{6V!O)#O{O1l*{o*v(Ny~VgXwbWguVNqqg_+ zf=_m8Z~6il947bMX}^hx#a;djrI6VrFR-9);KN`s>7KhY8b5Q#bfWliMlVJRazn(@ zp9}RS=h~Khh`|%n)|Za)UI*l%MqQWzQ33jG=MDuh{;Qiye|Eg(y~-C;4Gxt^6;U>X z&jby~WcIdpM5UI($sd3fcrJp`<2s9PEKp$8f2NoIaN5NKd(3Ka1T;ZwCiLY0Y|Ngdr;R%s_XN!-)$&8XaM6CHHkYOK-fipFqGt==T0^W6U(xq@g`VB_kur&f((I<&v)-crg+urKVl4R2uZTH^ir<*mdMJVN3pV?id;yYk^VBNqqZ0qMPz9q{%e z#FKj2Gj$Wg% z`@zDaE2&3*tj}m{ua*9vowyDYb{kbYg;R>p|F|T*Lj}bqdD(Q*oXdB?{xr8GMwS{U24}Mmkx%zON?YrX1M?N4pH6>WO0`SW&n1DUV8IT1B z0)t4A3>YfGt){0d7_)WIQe2chJT>ONs*ncWS5K)&m%_%UFUl_8lUh%@0X*!Ey&dlK zh#pitw+Bl?G58_^`kmC4zzb+KF3w1{)CTVl?281 ze05us1V{Fm$C@(UY0>Y<=!ULgxndM|_MVOebo*~PVb?(FF6)PGoD|d$5mnoAXT^oC zN~`J}6arAl29R49ymoFA%?cK9nzZrU?47Ia>rNGT^rI4hKF!lOXNo4e?eIn8KEo1 z^Is&|i@;WPqi2l#ew~wZ$YU8#asgWd{mxIv@2*Ws))3Y5v6OzJGW4{VTeo#4EylxE zKcLX6W$nuK_(@ve>)`xL?d`7@$JC_#1!vt)KWUsWF#WAPE`z&=1A-`{hVqIzpktDE~*PGX~SoU+;7lu zG{Mln&%W0EP69`kkQF<~u6|~4h_d(>2cK2Ip1GL5y%+za3GE!wRcse$&@vVhhPbNu z#ijK!8L4QHr{Hfa=u}KK#JUwUvBy4r`pis#hfgB}qU7GP<*d}NY~4r1Wa$a!_o-N2 zy;gl6ZqGnEdc1h3fdQ06^3NIA4ShwM;uLo^)|ZN?73oSo+{gl*QoP9 zU-xAn;yo?n8~T`b;3hL2fCGi28VRCTDVBkr@=ZYZL(LyI zuwIUwok_B>ZZXldt1-W1=h zX6TtZ5(R&&YyDkl8dsIB&NbK0{e84i=?MG7X?=t+yZ?^+LDV8#t;uB8`N4SP6^cE& zILVcw`wd;@IiWI}WL@c+nw_bXKN7q)NvXHoB9V3p9uGG+g$vCg?II}rp{S`=xD0+$ zMHaCflLqr*%l4!j^4{%N2>m2^6yqlL-?ioa(Zw^9xF?Nf7JFX#STL96(7|Q`*G*s! zyK;C<;yvXA9w^$wwl#J)`%7qVUouWpkK2Z@mL}3K2K$or`W#h`HR-cIX|SIf1YOWu zJ1fb%E?8>gfgq~*g5mLqF)_#F_39%XM0D~ohP0}`pbcj)&DvKzmW{{UwRnFZ5ePh5 zw<_m?@BYGqpjMk0O)gL&Q<8n3OenFrvONii51rAAhGy|49+#Pu9Nnv~EO(2MmNbiwC#g-V-(Bb2e&jmH$MZqUk}`%bic34>i6PxqSwh#ADKKA~RjP56 zJo-gyn(22r%Woz(iF;LLPPrTVxV#g10fAcwC810pxpi5ZbC03djh`zg!A;t8LlcZn zM+JqA)+WX;WqB>0X^_6Sa&zS2Wh)Owixil+nyiZWDP;-${2h%~Ho_F%Ij+R|3=I>sUIgFfu zf~+F1TE5gohUxeEyGVN2_~ID>d9h6$pc$laB!ofH$T}2w|9qG)0S$L_&+u3C875p9 zWVV7tY5U&2-9qODJ$w`^I7aa)zKbf`*av~I2GnUEzv+Uz8A>Uxa3Wg&q_fXLi3bh- zlhq)gGrD-3i4kG9x2^$pka4qEJ(q5B6L3G0!rUIQ%dbICmxwt;2hkzHP*Bj~B=Npo zk4n0+@v2$7vQQx1EBCyZ2$Kiu4#TSrOrabD9+)53R%#km;zz63SkOUntky0sk3-@5 zPEbGIe2pI7JhL!S)%Ga4sK+W~I>*NzTF29UNTB&1ZFpZm#C7*YLqk>3>Slk3H13SC zor5DU2d&inr6v?-`nDhf6AMWYud;)#C|05aKWl5&%-Bg{zFfbOsj09c@{eoc?+fF< z`)ZDF*!_~*&>4;vu`L5AmB#kLfP1z(I27q!3Ibj-EB%z`OwmPXsRZG|#ifLVTlR>- zo~Wn>#s~@2D_Fz5oWq6oEin;l86fkF(jI-oPO%AOlY=tbe}LNF`{{*{7a7P4K6|-9 z8g+2Vd(fb3Zyn&Xshi7a{$S4DQ8kS5LXM?BZ_x{+8*)=GPRFX>CIu)$4bOB3-5E1{ zV>*1E;h5|VzCp5coLRcbN+}%<9j^Rf&wZw3ELkBU8MCMn`AsTz_m=U&S>0^J?7i{Z zYw@o|tw6eM=Kccnua|X_YWZ6}m<0kIaJKz|$~})d8n)$|^e6oVXi6r}TI7FE1~enW zQgVB^`AFO+ePN*CpX7V2va7U;&vm(>oT;1t37Yy7Y$!1y1Gdd7tK-?~?|=WYoM-~0 zf}drD;3VMi!%p>X@)xQ%5K?~S`dOjdXD`cviO)M}<8%XE@c$cGa;#WJVX{<`qrQW; zk`hc|4V~}Mn+&0gB{uCJqdQfC=x&Jl|7w28QP1d8u%3vM_nObmGhaQ8U##T>;1YUQ z{>LvF@W}UCJpaQ903;9puBUpUp@(JC$lX^G<~S0+1;W5^ zq}U{I!We`cbzE*Z zwQ+0_#)Z~Y2NnN>s~m53uEdfAs2_AG-yE0jTtEDK9gR{gyElT1m0gMK?g;TryxZvZ z5eW1YJ$jcU;#7B|A{n_Es_~1Lgm1+{kqGI#vF%r9F2F4J;f8-9 zj(eNl7T;Ty^5jT-;X?p#p|)oBe$A+#9QMNZ2lTsu4T`cs5bNDcJ?{|yR52CvPQ_|+ zZ6kMCaE5cg9F$$|ej@w{f%||)hSq=q$Iw{`k)cFEZX>Gc@m7_Z8=MB!J=xyM873<| zOvas#CnxtexwkJC|D(M4%?kPZY5$k6-WL$k&;PQzPES7=n9t~~wt6<4^{rM%$Ti9+ ziRbASo#P4fy|htkElzRtr?K7o`Kj6K;BH4or&AXBRFBT+G-}7$#Qk3guG$;F`;r^e zC$y!p5Owih)?wpK2bu#&L9+v*DnEL2@6%`dvlRqbI5H9B%0zKF-1{^Z8cOXcF4b`2 z*0&WR2xBYl&^A_pS@`NyuNO1ZarNL%bUwM=k4}boY3L355Qv!`!xe~K5WH#a_8^nP=G4U(-}E;XkYT+AtS`cl zsN>a{mF)}Og|CrMfFaOTUVN&GVuFVFHj~Jus+qd$pm~tySR$Q2I53}@(Lbq`Tbsd$ z3bf-te@CP0pfs>upE`3${)m5O(aVPK8maZ<`t*c#_dh_e$iueCID=n@)eS)R0PQJ| z0aU)xpj(hcMC_{3w7kuTY-(%GES}1hqfG^?Eq{QWf9>CYJoNwaJ^#EDI*5G{i!O+A zq8cV5UoEcn52fRK)id1sHUgJxU81QY$BUxL&{myA8>g$Wobyy*g3yx(1XzSgZ(cz9 z=%Y5CcaU8= zj|Fm!0Ob?rlO3O8qYYxQ+hdeID|K{`_v?KZIMH-A=3?(GFM`6hYm-G^A?VUape}}n z6jd#Z>-}j|J7lXx#X;_?BBcwFTmX_eKhkU}G#!_3YO0lRupYe*2;8X2pvs%Vt)Z2L zaIdX-i9C)BQQ2s#ZN*b3Un(MS<<1*F$m? zN~O`zKlPgHI>WWidYD@Axt*96g?n>Z`Y``1#~Lj%f|>KfPOZXd9z%}@aVB7noSd2v z4q@(&CU276TgU3IEcDe)rNs&5Oy)5E*NSp*eb#dBS&46#VmxCNHaqdG8dv@QXf;0YtbZ{H0 zd@jU0*X{&e-J?lpSlEcB@Ln>b`>WHJF|i@6FfvPxAN6cv3y(mFSmck%m5SB-Mc8O& zuov2Ji$09(851$mix;y3jQJ?Q|G(^zA|cNsga_@Ptbd~hFVy;#JL+EZC5%WMAA_q- zT&r!YjXD!=`946Ov9@|ESSe&jX6(4x;*8#6g~l!l0a)e5iU5`YgHs;e@2 z0ELxotKIb(JmdNq1;g2sN)n&JsY0JY+?DlhcNv17{-B6>|AvU3WFX>0O`XTX@Y^n2iK|HEw)Ay|@eiJRNA}8)uv_2jY&S5HAO8a1tP;N+V5P=*YNOBv1@em9N zW(V~Zl|MyQ1R*x#URbp!jWgouJu(=1o6O?W>ejqpawYI@j64s2B4n2m9%G4U{dSDuj5k`A|Tw&>$nPR~_E6$?kP&q~? zK=(WlMXLdnI_?3S$(KUL3iJ0rF7~_F5OQ5{4mDo z^Cnn>rzYal#&0ol0xms(+CxohIgoD~yr;WXX5^LW+^HOZd_s46*Bll29g8t;`Z|N3 z3ELTMi_>7$@brko00z~eWctY6TX&kd12`yL$0~C;_AEl%lo8AR1!Ex= z=oEE}_sS5E=gXa_vNdpmqjPnK@R(9|4>Ydho|9;;qMS|KDZi`*p%}tzeEX9!XjJ^r~-|2R$?HR(a19`n$=!{{j^FsH4ZjDJ1XC4(NLB zJg^9r9PQ?z)JCK#$I{|Kd2ee44A1?WmQm zk8cG(z7v<3Arm<>0s17&{Dnc^av)NtV6b%?w%GoqCL;=Kqss<|H_h;p(GZ3)Qj@w3 zDSGn_qPSlI-i0sO(KMS}{BiVB29`Z4XGPQ;@0lFHP*wzZ^7`h06KWa3j3b@wGgn2N zka=(K-&aV})=z^yy>&i}g1`-3IjiOVCEvuq0J8{5ruF2TTKnnqzV(ru4mj`N=D;`c z)?Xg9%r9Q8{D(o(|6C>E4<*UmQE*$PI#=I^!+iT|}gWjIOQ zm34vIv7s;4G_$?pa6VR5DsW7G&`CA!(xckr+N?d6gJLQr6K~GI@grM3#kE&H^6QfD z&_!OOIO&Av)Y_F>M)bn@G}ccAPiHxDRFUn{tfa(*JH-%aiu1FsPA%TpV< zZcuss3!$T+m{1p@hp^m6xygP02dm;;L}9h9X0QhxzgWjYa9Zvy%_}-PO5Hw#zOMHD ziTLfSL@~FW_h|IjtDju^B1!};nDc%d;2OM(^w3R9?9EeC8!;+X5h^M6>;M)lwb?5e zL6ZfMkwQcE_1|3wL@mG7L08&{X%7Rgd&611(fO}TSZ#74PMt*)xeOSMbC20D($#F| zV(S%DFMRGKmy}SE-E^xG4w(|py2(Uj{_&SwSj_DMpttV;+hRFLkgzS1yGI&UQ(YE% zHXt7IDXwW6CDgC3$_|km_^iL`L%JGxcxrC5|6Q{1?J zy`I08@LzY#AN=J4k{-2G@h2v`LMD65DtfI(6mT^HX9Ly@(^L_&cXU^uNYZ%{(fi>? z9$LH~W#~K~wl`QD(wTk>0z6uPTo$USFLsZLWXzuL`*XeeBqv$1TC#HPxcC>XSIdL< za7*S}xEa@KQCYjo*}VW+u06}uakZsB8p5ppOfohJk7WstCZ&L7NBnC@LzGhGg_aA6 zGM#bmR8RM9PAb>DU0fvCGYuWaGlF{4{ARXATkv0$7~Nm_>2$L-eB3$Or9ELffpaHt zM*b@px_}CyM&2CE@*?(%h$M6XQ+3)o{-LMOB=G9<<>0SytNdnHB)mk}FXL07MDe&d z3*E(%qq=^?#cyx|Gw4NzL+ceA^*5mNr@|LlUp_e{MntE4pp$`?e56yR7*kOTVl;;z zb2E?IoJ1RB6DTIV14=J17n(8~0p&rU-<;&zz*l|uYuGOfUJKYM<-fZ2Is1jdtf@9b z`RXb3Pj#zz`@fZnuVvxBF$MCSxVzE7t)V+Hylo>XN4BBG;Op+}82V9vRkhkWFY1w| z2aK$3XRvF8?^mC;E2zkFJMNuBQW8rL{N50sey_tPSeGs6l^-s1|JsdTm?^{=1!~ha zicP-KWPk6{xR0T^O7HIzN!6Sq;6q*UWr!(9pTvr}s+xt#$2DXTerS;En z2l&VsFnXAe0EJ)b1WD2(JMc_}b2O{vH;pdn0>p%;LOQO%b6F-ObCI=vdpE*Vn8Nqc zl+*e0WoC^Jq*MjY%XE7CKjk>*%$_s)3;#^>SF2Jp6$|mz3^rP_ZQjRb@fTj(X1Q0J ztuGeB4u8Pr)-``k8564MNUdmJZK#pHKkR3F>?`Qs|K)1ucf0}H>n}_VUzl=+D4z?j zNfLY`KW_WjtogC`k>9>k{NG~0{|_mkYab@ciY4j&3G+5EJf&eCxHQB_qAGmW!LhvIFH>GdUToaw#H_?gE7?M@=G zXtU)K^qCfMGW)0UOYnd9B52E5IG0C%ly(fi_E~h#-4yCKP3dqF`6)TaiCru{$6*&; zv3@936Z`%B7K>H9ozxlfeU#8D-du`a5HDpdJ8dDN$u_%hr#AK*%Y)xZUdi>LvP`A5 znYjOC!P3V^kTo^;E!)`d`(sYKNxdG{xT@DeAV)s0-^Hi#Q+P|i1Vt;i?w(FIJ8D@7 zc+dOwCO+HTwSd7~lEtH!;?XR0!_J^@dIa>b+2d*}tM5?kz(~Em2Ihy5V;L$!oKZ){I|iRlJnB*AH4V^H}vKBe1Qz3 zu}HHpAsNN-*ilJs$Ou9(i3a&>H_s&#h^}3v^Vs`^2vLri61XSKkGCaZ{_MoA@itoh zyZG`b&O;mV$ijy)pH;#1Jbd|h{o69^cXx~FzFi2jp8SeL}ev5eOllA*f@)bhSg*9 z6rP(o4Rn0NCr3|R8dx>P7uY4GHKThsee!}RrlYl%m$@#tFlSYaO|#h3E|{rlOh;)s zYBp%$zv%tg-11uo^Y2*v&#wKi?*fI9;w+|_mw{(uP;^$2kuzXmd-_~MX?(tTNVPJs z*6^-z$xVw?MNgyXhc5a!u}*tw8qPb5iLbsY4NTfSiCYe>h$9=?kBQad5-ju}vl@F* z7|*_c->Tz9VMlUCxn$;c;^dL~b`)?O4A3oq4} zIMjs9^9^mo#F+P9$Z^#!eufr(XlZVi;>cvl$bBm(&-rH*7D+OtEaG#|ut$#`<*nx< zn%02x7HVniymgr`tajW90u~UEdz#xQ3#)5)Kmz60J}s22Gn23xq01Fsug@2qZf-&? z;bYCF9_kN~eBf&{jm)oPe9vWHZ^*ofWo8X^SudC@Ux2v!a-0J_P)$F*Vqdo{HSX4l zzfYd2*!Ovx=L{hU3MvwlHhRjcrvSw!Z$EcV>nt@aY@~Q!<9l9} z!eY=*>+QNQpKW9}b9=Go*xR}I8P?HxAXS{y2W`2X?Y|scy3rBW67@FWKg-HSGlAJo z&+R4lr*s{;%xTt-qvI$&*Fxmtt6#XDLsdN7RdfRJUA+K(` z$*w=SE|*pn|B{CR73rgxqqwodvbs-A27epFL|dD%Ii1Uun_t(BWSmAY!_Y*vSb+b% za7MluNfm&@B0aPRGrnzEHG^`c#wtcto6WnEuQ1UFlLZ(%{8>$`7%UD(eAe{R^N5pZfO&Wu4d~aP$I#ox~-6#KA z$Y$z#jSs_{H^es5Kc}64FR!-%v7-}+vbd)j=A=IE^rhOv`sO+?NgS6CM&1aArRf$9 z6uZ&qlA}{5hwOE^)1q8#?V9)j1}8uB)PEY4vg&OF@X(`ZCQxW>&USB{Rw&EcE`+!< zH`p}eO5a%gQEznBd7PTIISZ4!XZYw~TBWaO@g=h{CtVbO1o9Kf62kd1``hY;@rF+E zwVs$Wj=MbS49z=Jq5%P%Hy>ml74$Z~$vlRUnhvFx%LPGMElQU~89R2%TE|CTloE2J zyb4Hm9ML3qS;Imulvam%R(@VPr$o2erw?9VHLWo z?6m_9gC*9qiNWSlC$5%(i^?HR4E^`BZN-9>JN14L*Lb`rUV2WFX?VJ^(_Vj|6Y`Ld zoy1peI#*9d2h5Z>;%%Fyqw5A>JICEFY`v{b5G z2w}uNytIZ)foPpv-91dJLy3{->-Kn6d<8xC&^|u(x`W@Bvdz>k=2{<9~*Qp*PcIM+R3|hduX|VvTrl@R{IA zm)RKTjoj%=eCFvf?zi#nws+@kHZNJvn*<2`Y)|qTCD8DFE{)&FEX+5WEcoGpOtRkO z4eA-y7RF7xn_!Gd=`R0x`k73woE5MF`BBH6xIyxgMY_@&O<{Mq*Z_xO>%oka`xvur zKFE={bBC@=;Hg;#S#Es!I%uJC$liDZad=#PvElk?cD7`~|2yj>#zf}hOhhMtz#SQm zx|-_u`(nYOoIvKOsbjR5`(DKkcN3ebt^O&@h$Z{bWwva%b(7l#mjcmMFBGK}Q!oTI zrHv)hQ1LPU4T>_=Pp>!E<+9};G29=jApD7g%vCUm`Avmuk<*IQzHogN_Ih}PVSAo1 z9d><0+Kf&k50!8Z%)gbD)!4nPUe}T_c2U5Q%&*;S#Z(9IO}1(E@vpKlZA(9xNL9ViZgr88T1oJz9G*9 zMLGAOUF8QVi(lF@(B6EIKO5ftxKl_%zIeN%d;IJb3;Lu%81x#!_T7D5uDeSRp)=`Wp;0NyLTH=5G(S z91ADd)i$HihOCFs_z&qf(K}E)nDFw>J)`x`vh7NH|HHv?#z-IOU9VF>ET`Qgh2G_s z;70=8cNj`W$+enyJ72&>+oze_yA)4x4Jndzqm?Yct@bkqfS_l!-$FZm5wgUKC~mg+ z(wmt*8^yuz>TppHVm`Ofw#if88%gok4leMk^*I`K);Hsg(Bhna2Z zL!II{z5YXZ_s~hC3yC5UePlp1xQQr7<5(}>xjc~RP}2h(#JjSc zHX?f=R;8KM7D+UnY-YPBlml=!o*S?P7vr@#0(VnLJYn`whC=!)={;Gqz2xj+wQ_Uq z@;mdxH!Er7^NFL-W|>#pVyHWvw(JA6BwiMtLm2g#*wWnUZ*wpb`Z86ns5%nVC?N!Y z3t`)^t;y-O&{M#(!s-1mZ|4e|9*C{Xdr^sWl+W{HoTFg}dHqai|LfuF^idCvB|<38 zxMl*e8O&PU@_V`RoX^S;tQO@5JT%u+w=s;^CSUag-pWvT?7sV)#{UZ;QYzh#bjcWE z0{}c`gaS^nr?8tJxikc4IBK_H=uPo2e$<36ukz;4@wN(twDAC_7K3S#y`}S4O=qf1 zc1li!s&N;)ZNRxtGWqgzxqW$IWiOakpcogen)|l7h%f}caq9x;!}fsC0oD|O+=t;& zX02NzF6XDo`ICpz90XC zUl2=uMe^5NTG{!lUng6K$(!z$h2N7d*_j3Q;2-v?t$s97)G+SUP6^jbn9kJwjQcSJ z{buTqrTbiyJxXdQTLO{6QBpBQ?nXmstYsP)OrK%XWc?(*Dl0}==ulrtRZfLDUd>}P zT(nRhi&=h%q$Lw$*v_MLb7s+NwXOd+SIMwI04wH^owJz<*To}HitcTPX5Idmry?(W z80ga|d%>e45n)M7(Xn+Z5jC5$zP-Gv^MvXv41iSgb^F%}9Jkl6T$Jo!Sep{Q0VF6;F~oWCG_UT)VJOJdaGtpZar6xNIRc>`r>{(5krOV7qW zMkN%3z>M91q2p@vd_M4Kp2KN1hVJ2oRY7i$}=OG+p#g(t=r<%DA{5OpjcoIm-^V(xK|6B zai#kp&nLLd8N9o3xfIMvI+Ug-)EFP25g$Yw%J- z@k;+`{o=!;!-#bAtG@|+sSoPpzRS$cwf~b-nM>DEjmenv&X8Vo`h_o2YhJu6Ww~*H z(5iz`wBj1jGNN`3zhqXKCh@}(DV|)o3+6G2=$%(^#GA!p6BM#u@Q?|W@W}aN=7N)?h=e!QttZgexQ4z&oCuCcUHu?KA|AKDS{zBf zo?;%reUy<~J{PrML&@B#xm7d9p4bmAQJ9p{HFw}hu1Ci&AD3R2JB?)pqa|ZI;m=VX zLl@(GRiaX#T?GZ{gQ>KAzy`i#F)7tK{Jweu&yeI)DE#h`!GynL%r!MCks@2tNxD*@ zPOkL)1Idat_QjnZig>xCY{k0q%UmU!HVkr9I=gqNhteo@tpX3UNTM#8IlPXpji5w* zA3}%L{c5%2vA0|u+S`zX-4Wx;)d#oMnj&xVt&>xf)?UqP06XA4rJ9C0;aaha$D@p40 z#m>Wx(VGxQKMk0W8#q_*Mopx!lK9LsmD`UAdgf>JjcCP%VBWMF3klJ-Gse2?YI$4U zqvvfOZ>|TqKA3#9#zFbT z$l8V~Cgn^X0%5cIfQiGlUOa7X8|nB3*W(oCMpP1%%UR2#F{=n%932nbHH4<+A4wEq zdraZ7ZUj7(P?LNzu6#en!Je7C^HT<_0H;XO?5<6us-r}E+h^tKvkkDp=<;Ex$pDY9 zCD^gDFd%OQejST|V8NtFe}AKwS%A@eilz@vOKF4N2Wq=l(JaBs{v0BcMTCEdGDYar zIA^U*St~tBY)l{_fJl!=u}w>M{hoyL(b~dzUFFT8!R_C=SsLBXSoZw6bNt^v&hp$A zT^h2mii=g~oSf(Q%*~((I+;TZ6U18p18Ubqk^k5t7sI*gZX-h^nP7;Yt6rA2#*qkf zq+(bHr~Bi{Zm4a@jwT@~W{8_m6n`Fd_hx=s-z%lIwrrU!stKG|SFYbp01-td_8QDy zz|HFm-+x5F0}N*UEF*?wRJTRbF{akC4CEljT|=!)iM19<@9(m| zI3jL&-A$^`{X^|{gU_~!+}Ce_F{rR0Q4ab^`QZ42>01kzwIwiOdZD`=N|*qhU*?Mm4CME? zJe;bn8nr%6{HP5g73F{_=a_KXR)4m_;|k*t^6L*+b2mS>2)k3G%y`#LnZ9m*`Z0J@ ztZ=uiSrb=Ijm&(LnV2fd;vJpZ)h&o=I#s)@Ef=F8^yFUHW|Ncip8tiPASZ^+4-AfM9p!LVG%`RJ!wgcOZY}2Ns;=~ zQF>2X6j6>O+;F>@)#IA{Q15rV1;9X2D2|a@LTDPb6*ue7$L?R-oaneEoVDL8fFldC zKut&1dUg-ORxn$ovW(sCmHb|wVsUpN9uvae zx%I)tewy6VmV4&Be_4h8D(Mr*FXJ1sHPWX3#ucRukpMKzLMR^k5%H)3$=;`=<}|r8 z*nR54;LYo$z`$DiK<3~2>Q2;^IB=Ejt?V`*KWw;i zEBq!0t;EVn{S`d@H-BjXpmoTCcoIR(iz{6Q_GtgXf^sYLfPlR&4(fE zX=cP!@uIe?#RE(R{n-oJZR@Ix;le+`BdapwnFY`9SMuNc{+|9Z7t^n~v}C z>feM*PMm13Tk+Me9Sn6$FEuJ^WXisLMn74VgLy86F0XPiAf3p5fdn2@6rqn^VY8kq zNNAVRy1BnZ_yjY4-U10=N2Qm*uV+!Qn{7nT+8PaPJmy*Yp^=WhK9@$_tV+4($MS0m zbtVqc6G1M#>%u+Z5WvoFv4k@seE z^JEw#F2WFBSEq82==1Vd6QQDKxmX{+n~kTY>79*Dqa|#kC)5zZYs; zW%g6?063ew12p7&p>Q2vxf#kQkr6{nxa@oHF{KE`3jdefGwu@8$$IKK$LajCZnQFX z>y^7TSuuC~tnf|8(CF{2&&&i|kEJJZ^~R=o?zLD|SDrsL^An+dFgB$d5E}<33Dk!_ zryjl-LQ9C%{nkdTSYjAiYQ+b%q|28HZ6^T4)`D4Fx&!pzr0;icC8<1EQ6ZrUjK30p ziIBtEum(^GW_bFW@KY>l6$4>AYQa}!(4GX=L(T?K| zL7Yf%IwG(BlW2gBGJs}L46ga_ds6)Ms@9kDPIBKg&rALh8UMf3GYPsE^Za%zc0g)( zJ|}*cU9mH9Oc7Q9VsJmMbY}eNK>b$` zzu!e1bptLaO36F@j=*aM=pD6HT1v}#waz;n)gZAaXpzVX;A2u1z0W%cFX43GI@}cH zlu4XU%&Kx9yXpN$t0wf_+mMg_c|-%%dtc8zM8g|}i(}MjGBwy7usq3_hr(+s?Q}z5 zGI&aU(sT`+=cqNv9fQ}cAk@2O`2n@(h5xBFXb*!7CVdZ#okwMnA0Ab2cPuZjmfG}h z&2oUN&^d$oFsP#-0-U>OtsZ6vNqJK*_FH)x&<%NB@S=S)op_2e94s?xL6b= z+exmlS(wKyzIvjR)+8wA+dldNg}w5|T2YlsW-!oFueBYdypRZj=|D`U6m8AFuWjNV ziSL1_V}|rKkmk7{e!-ld?WvW!7yo9G54xaAgQw`~aL%C_<1RLU6F(q)U^u0l*Q*bJ zva28(Lv>xZ&u4t~Ghmzf?GaeU2}DF5>GiA`Vw#eo3|L=2>rupb^FT6=lWn|SpNevi zPmE`de1c=O=!NR;K`UC;{c@U#M|)seoerc^hCejod|V`uA12vHqi9D4i^3;BiFh#n z@y%4DS6BHY*x^3^LdluSwv>^)g(L|EwjAyDPc6_}#a;C$d0t(8XGSLlu}2Azi%a<#tqQ39yJr}ki+7iVflZ$qEr0prkZ>Z6f|J>vy0@yJGfik z5&c9Gw26I#w-M4{SMg1Gi<}#dRcj{?u>sX-#lJ}PP5<7V^71>h(46+em_tywqae^# z?Xn;0X>68ZuGl$!n15Q%uIfH7czAv>FCv{-9efR@-4rEO!s%uY=Tk>aBF;`t+~bc8 z7qL(O-YJYq#4%|>b+qDuXg!HK^1zf@@25ovozjthbc=8 zgTs>vaFtJoET7feN}*A-9Pf9I&WMeocKlnX@y~566%5L4`BRMs!Zo*Aeih5DoUTO9 z2TzF{H^2}UkMgQ6lHah!4#pbw)Wp@DW@Sg`uAX2g zB0;*Af&s{yG+;r+z-<2n5F!Gz9WxkeGj{cCAnutjCxt%A;*FnAe?j>qNJ zi`^9KgJ&x7jM^f}_eZqq|JH}*y@w(e!}=&{ zdWJbKH*R_2a8$THMx`F<&Q*-P;Tu<5ascbPR}@?doYZct3=lIdQf)9`k?|R@WStxv z%;)V;>hxOypfc3dAgSzQm{Y4$3PQKrdMbE2p|ErAKH?qG^d zgBYICf}&t#CDpUZ5n-$P9NNR-W4RRkvKFt|>amtS11B)GlGUAB#7~f)rnj#esCKYH z%o10?An@*f?YT;)r&wbE*PeW+ql4eAR*+joT)5O4uI3t(>suJkw{HF=W0plS5yFUP zLR*bcZtl^qdYi80TL-!d18NNJj`u?Gv01mp7MJrL;cG2GTI$}pBrN!a=c(Ois^L@ zlO4>6>~5_*9nNAN^<7O6`}5g#5?xX^sY*2c@?!FwLJyeGsIUK8TXe~o5fdKwx+SyM z*1iBb)O(IDy4xQ4dc=Imvcd1l%dPj@(zpLsa+{w{Rueqf$bv)Vo@Aq+t=4s~*meTBM57w`sd~uU6J( z`NA+1Tm(;#|*y8Q~ys5R~E-cG3u0Kw0`X?#;>q0U|Qca&MAAII{voBwx zfywc}^c3t8wkrBqjE4E!Orckmt}99!6MT#h;)p}!6X+>w?it(h9=^|Ra;_bI<=8%FV^CK*5lGp#eLt+ zH4yXhpYV>@Vuea|ZACFJ4ZdOl4HH{wy|N=JHNS?7Mc#zVy&$0eXr8t0RfC6&j8iR5 zd7EaI<*^O4f7!QM$&zg^tCl)b;#ib7MPlpmlhRCGgZlT_&d|z8>i&PMzUroeF$$^r^fDX})K{514v4Pxb?fKbO zy_+SS1QtdV!EoloHU)$V<92&badFWfm7i|RjJvtnH5+^}AS+Z@KX4pK{N()DbF{o- zPjRu~)-=B&jMo?Ihn=%UI)59tszTX@F49fZnQ^Z>8ul^MGj%udo!XfP_>YmJI(HcKhxy*J(oM}C3musxspjUBK;D}E}yzP{iDWQ||0ng_!uxnh;uG_U#13ANp@^HpURI>^aKIoCl|84$qmGlkwP`jx2$`sf3Uf`;|cbFqctR zt1X8cJ?R2EqCfI{Kd2el)tlE?+f+d*F=>hH_@ous#X&d;U(q%kxmqt~R#+}#_~{`e zsAGh2m8*vFZ~Tgt7m?56s~@{YXC9p&l&&a+uXynfuW*E2(;mkb7UIE9t**U8C(}(& zBCr&}b>HpIP)KVoI!U3RaAEVQ3y+TTzMik$o3+QCwEG>~YE%N{MOFcT@d{!hf$NxdT*}L}L+syP?FEfLCbCd>GTrHzT^)yuVy3^xwTW`adYmqMt@(h?)g&GA4( zw9OJG$q;;wIgS^yl=qbnR>+koL=J+DCW~#&I+)*^`OiKgcY?-F7#Ll*EaV7XXbQ5tWxLH6W8^mBN+Qt0|BGP)@qxwRj7- zkPjR!Gf0;Ue2uV44h{ACvrto#>f3LE6pQ&WXO7|y>(C`mF_?owJB4zk$%4*K1@wDA z)EX8n-S#qh7;y+2R;+#k8dT9*i74nd1T(;-QfO~wNVAV?gyJGb>jmV5Cv<8x%CIR6 zVrqgy@jE4PpBNh=^-q_JfQd?o2lCdVXDzslHjEs2_bz)oSW{?0#s1DsLB6!$66b^qHX33LQ#|V!mY$+sWn5sk z^*5iWySV*5CH2jl7Hcs0NlUkj!_z@3n)iKdYAyKdgMYvIU;liH@hkjA-HSDnaz zzHa@ppbTCGZ-gN|_T!lV<*~yUT6XzPU2Py(b(dS{=>14=bp#F1-u=#mh9|!^9XHaB zoNo-#3(n^q{yM>bp9A>jEg4d|g%2(&>!+_GzqcqM9W@Yyo3*;bOvoea_P#&vTu3@F#w^43@f0fboKaM%undCcOFOce zxQR;_yINDQfDiw0(QT`ujeCAe>{P#25f)O*7HMgnEZ+G+Qh7>>gN^jn+tQu_x5)(+ z%6{y-JibR9%WB3~bFw8G2}KGjYdo{TD?M;{ypGG%iX6)zmB7n*Jwy}M(G>OKf;bGH zGAYG#J3+cmMv2Z9jKKp8Y;$18d>oI1{2@w*u6%PMwh0p%;e}T*OKQQzMe@*{9Cm># zGG=S!3;yk)LVmA0@N@N*cx*PsZzVsRXg>mcLZv5q-6^P;Bm7>EqDd}d97NQC$4W}4 zcSUr2A?+7s*rw2up#5R-;8iv?0lOvo0<+Lk3*UdN?tkpRKexbt{RFH4n7Hxs84g5Z zUu?~HG5~cq1jf{QkaM|!oR9kJ#A1jfK(EFe5V+_Y?@m4i&D?Ipch<>wf0y$T8jy(N z-VMCwwm2>azFF=0MKaT)9kaI3`$|W+!W%2hAB>=D^WRp0;TK_-Ne+^>15 zXT72;J2*d?7X9Q-t|XN2F6Tgms$#RY5TRV?Kdtj18M?T0`NLO`a;*RD6MiRC2 z}M;!WBkv-ZnL z#J{%WQ`DH`TZvZeU;chmfx1ZF(W4e<&@0b8Z(=VFNNSDO4DNmj|0zDPS}G7{FQRqs zZ1e4&mt|EgSz@yVgo$9kx?l>?8IW)chNgvZx%sRZAE*F?(JC+wd3@c34c7R!&h^q& zG2$lB$8Lor%HR&hI*bc#+xv^YDhnXODL=KAW)pbsk0pMFeF@z#_|MJA`CNVac~D2J z01TVYO!)|mImz`(cWJ&C5*UTU-umG-nOLFvOV_6gP;7}$*x|CLBKdg=zeRp6a^Vf# z`0_3K>-1o2L-th00y%NLE7=o)2BbN)d@>`~pjA`VY7La%ortqGk#jePkXLBEs<@9L zAdHBfbxp`1-p|zLE!kpP@GwCbzj$6h1WopPAZl4@9ZVNp`aXbs**%#{r%+YF|5r%;CpOoKA}{1krDh2z zz!U%Tt8{_;5^F7i3J9e>&s_Pp^Fn#U;+-*DAgg_Eh$FJmmj9b)^g4&1Y} z;ZB?@z0OSpNGG#!36#@w3NE)K-v%TG;;4;E!V!eoH(w2g0s}?yo!)sNtqt|tH-_r| zUi4ol0hPq`sHioLt7b+~r~EKO*BRS3)+6S+`M`(#|<3^v>$vLW~d=Lt! zJ&&7ruO6!w@F&2un{aIn9y9K}z+n5vdfM;FSCBNDh55MM`g|@rveyPIKZx1km4qce zoO%t17cL91=s2Qz?jM**K&I33_+PJ}?zZb_xxm@kh_vjh-w|R1-4)Schn54I0!VE? zT6&+T25*Iv3CUXoqQDg-s32-a0hoC6Y|Gn*8BY+Z6U(QSA9q$q22N_o?Jwe(;WM9Q zvul5#H}y6gnG?Oce8oA`^{)Ude&M

    5&&Zoi}AKwzP}D;mYIndoh=%uMo`7!bI)i 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

    1ExB%=9cP4UW-mi$;Z7o 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 z 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%0AB_HFlYoR9tzySY%gwk@{3(tIJg2w1W{#n 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

    !kMY?>aa+$O~j0E8vPX(Jn_LXn3 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" - } - }, - "node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/binary-search": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz", - "integrity": "sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.1.1" - } - }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-abstract/node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "dependencies": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/javascript-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", - "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "dev": true, - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/llparse": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/llparse/-/llparse-7.1.1.tgz", - "integrity": "sha512-lBxN5O6sKq6KSOaRFIGczoVpO/U/37mHhjJioQbPuiXdfZmwzP1zC3txV9xx778TRNFENzeCM0Uoo+mE1rfJOA==", - "dependencies": { - "debug": "^4.2.0", - "llparse-frontend": "^3.0.0" - } - }, - "node_modules/llparse-builder": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/llparse-builder/-/llparse-builder-1.5.2.tgz", - "integrity": "sha512-i862UNC3YUEdlfK/NUCJxlKjtWjgAI9AJXDRgjcfRHfwFt4Sf8eFPTRsc91/2R9MBZ0kyFdfhi8SVhMsZf1gNQ==", - "dependencies": { - "@types/debug": "4.1.5 ", - "binary-search": "^1.3.6", - "debug": "^4.2.0" - } - }, - "node_modules/llparse-dot": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/llparse-dot/-/llparse-dot-1.0.1.tgz", - "integrity": "sha512-3e271C2LuDWBzhxaCUDzjpufamoEBuTYQz83QyMixI/i99BntCEk6ngHWOhhDb0XdtNNh6qAfRmXyjgNP+Nxpw==", - "dev": true, - "dependencies": { - "llparse-builder": "^1.0.0" - } - }, - "node_modules/llparse-frontend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/llparse-frontend/-/llparse-frontend-3.0.0.tgz", - "integrity": "sha512-G/o0Po2C+G5OtP8MJeQDjDf5qwDxcO7K6x4r6jqGsJwxk7yblbJnRqpmye7G/lZ8dD0Hv5neY4/KB5BhDmEc9Q==", - "dependencies": { - "debug": "^3.2.6", - "llparse-builder": "^1.5.2" - } - }, - "node_modules/llparse-frontend/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/llparse-test-fixture": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/llparse-test-fixture/-/llparse-test-fixture-5.0.2.tgz", - "integrity": "sha512-61KI5J/b5uyRktD0y1EezleEW6UfaxhHkn1adLKNVemRZzklE+SpLakr251qo04kb9jN/ytk8lllgK+yFOj4cQ==", - "dev": true, - "dependencies": { - "esm": "^3.2.25", - "llparse": "^7.0.0", - "yargs": "^15.4.1" - } - }, - "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/markdown-it": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", - "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "entities": "~1.1.1", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/mdgator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/mdgator/-/mdgator-1.1.2.tgz", - "integrity": "sha512-S2GvsLIznUQ2McXfpe6BCD+IqhnRuHcBO7krqnvnsHgDpjjO1mLhr0vZtVa5ca4WZET037g3G+94DznpicKkOA==", - "dev": true, - "dependencies": { - "@types/markdown-it": "0.0.4", - "markdown-it": "^8.4.1" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", - "dev": true, - "dependencies": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/mocha/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/mocha/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "dependencies": { - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", - "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", - "dev": true, - "dependencies": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" - }, - "bin": { - "ts-node": "dist/bin.js" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" - } - }, - "node_modules/tslint/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" - } - }, - "node_modules/typescript": { - "version": "3.9.9", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz", - "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/yargs-unparser/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/yargs-unparser/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", - "dev": true, - "engines": { - "node": ">=4" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@types/debug": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", - "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==" - }, - "@types/markdown-it": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-0.0.4.tgz", - "integrity": "sha512-FWR7QB7EqBRq1s9BMk0ccOSOuRLfVEWYpHQYpFPaXtCoqN6dJx2ttdsdQbUxLLnAlKpYeVjveGGhQ3583TTa7g==", - "dev": true - }, - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", - "dev": true - }, - "@types/node": { - "version": "10.17.59", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.59.tgz", - "integrity": "sha512-7Uc8IRrL8yZz5ti45RaFxpbU8TxlzdC3HvxV+hOWo1EyLsuKv/w7y0n+TwZzwL3vdx3oZ2k3ubxPq131hNtXyg==", - "dev": true - }, - "@types/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" - }, - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "binary-search": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz", - "integrity": "sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, - "dependencies": { - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "javascript-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", - "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "dev": true, - "requires": { - "uc.micro": "^1.0.1" - } - }, - "llparse": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/llparse/-/llparse-7.1.1.tgz", - "integrity": "sha512-lBxN5O6sKq6KSOaRFIGczoVpO/U/37mHhjJioQbPuiXdfZmwzP1zC3txV9xx778TRNFENzeCM0Uoo+mE1rfJOA==", - "requires": { - "debug": "^4.2.0", - "llparse-frontend": "^3.0.0" - } - }, - "llparse-builder": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/llparse-builder/-/llparse-builder-1.5.2.tgz", - "integrity": "sha512-i862UNC3YUEdlfK/NUCJxlKjtWjgAI9AJXDRgjcfRHfwFt4Sf8eFPTRsc91/2R9MBZ0kyFdfhi8SVhMsZf1gNQ==", - "requires": { - "@types/debug": "4.1.5 ", - "binary-search": "^1.3.6", - "debug": "^4.2.0" - } - }, - "llparse-dot": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/llparse-dot/-/llparse-dot-1.0.1.tgz", - "integrity": "sha512-3e271C2LuDWBzhxaCUDzjpufamoEBuTYQz83QyMixI/i99BntCEk6ngHWOhhDb0XdtNNh6qAfRmXyjgNP+Nxpw==", - "dev": true, - "requires": { - "llparse-builder": "^1.0.0" - } - }, - "llparse-frontend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/llparse-frontend/-/llparse-frontend-3.0.0.tgz", - "integrity": "sha512-G/o0Po2C+G5OtP8MJeQDjDf5qwDxcO7K6x4r6jqGsJwxk7yblbJnRqpmye7G/lZ8dD0Hv5neY4/KB5BhDmEc9Q==", - "requires": { - "debug": "^3.2.6", - "llparse-builder": "^1.5.2" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "llparse-test-fixture": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/llparse-test-fixture/-/llparse-test-fixture-5.0.2.tgz", - "integrity": "sha512-61KI5J/b5uyRktD0y1EezleEW6UfaxhHkn1adLKNVemRZzklE+SpLakr251qo04kb9jN/ytk8lllgK+yFOj4cQ==", - "dev": true, - "requires": { - "esm": "^3.2.25", - "llparse": "^7.0.0", - "yargs": "^15.4.1" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "markdown-it": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", - "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "entities": "~1.1.1", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - }, - "mdgator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/mdgator/-/mdgator-1.1.2.tgz", - "integrity": "sha512-S2GvsLIznUQ2McXfpe6BCD+IqhnRuHcBO7krqnvnsHgDpjjO1mLhr0vZtVa5ca4WZET037g3G+94DznpicKkOA==", - "dev": true, - "requires": { - "@types/markdown-it": "0.0.4", - "markdown-it": "^8.4.1" - } - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", - "dev": true, - "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", - "dev": true - }, - "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.4" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", - "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", - "dev": true, - "requires": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "typescript": { - "version": "3.9.9", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz", - "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==", - "dev": true - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - } - } - }, - "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", - "dev": true - } - } -} diff --git a/llhttp/package.json b/llhttp/package.json deleted file mode 100644 index e1e17e8..0000000 --- a/llhttp/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "llhttp", - "version": "6.0.4", - "description": "HTTP parser in LLVM IR", - "main": "lib/llhttp.js", - "types": "lib/llhttp.d.ts", - "files": [ - "lib", - "src" - ], - "scripts": { - "bench": "ts-node bench/", - "build": "ts-node bin/generate.ts", - "build-ts": "tsc", - "prebuild-wasm": "docker build -t llhttp_wasm_builder . && npm run wasm -- --setup", - "build-wasm": "npm run wasm -- --docker", - "wasm": "ts-node bin/build_wasm.ts", - "clean": "rm -rf lib && rm -rf test/tmp", - "prepare": "npm run clean && npm run build-ts", - "lint": "tslint -c tslint.json bin/*.ts src/*.ts src/**/*.ts test/*.ts test/**/*.ts", - "mocha": "mocha --timeout=10000 -r ts-node/register/type-check --reporter progress test/*-test.ts", - "test": "npm run mocha && npm run lint", - "postversion": "TAG=`node -e \"process.stdout.write(require('./package').version)\"` make -B postversion" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/nodejs/llhttp.git" - }, - "keywords": [ - "http", - "llvm", - "ir", - "llparse" - ], - "author": "Fedor Indutny (http://darksi.de/)", - "license": "MIT", - "bugs": { - "url": "https://github.com/nodejs/llhttp/issues" - }, - "homepage": "https://github.com/nodejs/llhttp#readme", - "devDependencies": { - "@types/mocha": "^5.2.7", - "@types/node": "^10.17.52", - "javascript-stringify": "^2.0.1", - "llparse-dot": "^1.0.1", - "llparse-test-fixture": "^5.0.1", - "mdgator": "^1.1.2", - "mocha": "^7.2.0", - "ts-node": "^7.0.1", - "tslint": "^5.20.1", - "typescript": "^3.9.9" - }, - "dependencies": { - "@types/semver": "^5.5.0", - "llparse": "^7.1.1", - "semver": "^5.7.1" - } -} diff --git a/llhttp/src/common.gypi b/llhttp/src/common.gypi deleted file mode 100644 index ef7549f..0000000 --- a/llhttp/src/common.gypi +++ /dev/null @@ -1,46 +0,0 @@ -{ - 'target_defaults': { - 'default_configuration': 'Debug', - 'configurations': { - # TODO: hoist these out and put them somewhere common, because - # RuntimeLibrary MUST MATCH across the entire project - 'Debug': { - 'defines': [ 'DEBUG', '_DEBUG' ], - 'cflags': [ '-Wall', '-Wextra', '-O0', '-g', '-ftrapv' ], - 'msvs_settings': { - 'VCCLCompilerTool': { - 'RuntimeLibrary': 1, # static debug - }, - }, - }, - 'Release': { - 'defines': [ 'NDEBUG' ], - 'cflags': [ '-Wall', '-Wextra', '-O3' ], - 'msvs_settings': { - 'VCCLCompilerTool': { - 'RuntimeLibrary': 0, # static release - }, - }, - } - }, - 'msvs_settings': { - 'VCCLCompilerTool': { - # Compile as C++. llhttp.c is actually C99, but C++ is - # close enough in this case. - 'CompileAs': 2, - }, - 'VCLibrarianTool': { - }, - 'VCLinkerTool': { - 'GenerateDebugInformation': 'true', - }, - }, - 'conditions': [ - ['OS == "win"', { - 'defines': [ - 'WIN32' - ], - }] - ], - }, -} diff --git a/llhttp/src/llhttp.gyp b/llhttp/src/llhttp.gyp deleted file mode 100644 index 4acc79b..0000000 --- a/llhttp/src/llhttp.gyp +++ /dev/null @@ -1,13 +0,0 @@ -{ - 'targets': [ - { - 'target_name': 'llhttp', - 'type': 'static_library', - 'include_dirs': [ '.', 'include' ], - 'direct_dependent_settings': { - 'include_dirs': [ 'include' ], - }, - 'sources': [ 'src/llhttp.c', 'src/api.c', 'src/http.c' ], - }, - ] -} diff --git a/llhttp/src/llhttp.ts b/llhttp/src/llhttp.ts deleted file mode 100644 index 29adbe9..0000000 --- a/llhttp/src/llhttp.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as constants from './llhttp/constants'; - -import HTTPMode = constants.HTTPMode; - -export { constants }; -export { HTTPMode }; - -export { HTTP } from './llhttp/http'; -export { URL } from './llhttp/url'; -export { CHeaders } from './llhttp/c-headers'; diff --git a/llhttp/src/llhttp/c-headers.ts b/llhttp/src/llhttp/c-headers.ts deleted file mode 100644 index 717ed6e..0000000 --- a/llhttp/src/llhttp/c-headers.ts +++ /dev/null @@ -1,99 +0,0 @@ -import * as constants from './constants'; -import { enumToMap, IEnumMap } from './utils'; - -type Encoding = 'none' | 'hex'; - -export class CHeaders { - public build(): string { - let res = ''; - - res += '#ifndef LLLLHTTP_C_HEADERS_\n'; - res += '#define LLLLHTTP_C_HEADERS_\n'; - - res += '#ifdef __cplusplus\n'; - res += 'extern "C" {\n'; - res += '#endif\n'; - - res += '\n'; - - const errorMap = enumToMap(constants.ERROR); - const methodMap = enumToMap(constants.METHODS); - const httpMethodMap = enumToMap(constants.METHODS, constants.METHODS_HTTP, [ - constants.METHODS.PRI, - ]); - const rtspMethodMap = enumToMap(constants.METHODS, constants.METHODS_RTSP); - - res += this.buildEnum('llhttp_errno', 'HPE', errorMap); - res += '\n'; - res += this.buildEnum('llhttp_flags', 'F', enumToMap(constants.FLAGS), - 'hex'); - res += '\n'; - res += this.buildEnum('llhttp_lenient_flags', 'LENIENT', - enumToMap(constants.LENIENT_FLAGS), 'hex'); - res += '\n'; - res += this.buildEnum('llhttp_type', 'HTTP', - enumToMap(constants.TYPE)); - res += '\n'; - res += this.buildEnum('llhttp_finish', 'HTTP_FINISH', - enumToMap(constants.FINISH)); - res += '\n'; - res += this.buildEnum('llhttp_method', 'HTTP', methodMap); - - res += '\n'; - - res += this.buildMap('HTTP_ERRNO', errorMap); - res += '\n'; - res += this.buildMap('HTTP_METHOD', httpMethodMap); - res += '\n'; - res += this.buildMap('RTSP_METHOD', rtspMethodMap); - res += '\n'; - res += this.buildMap('HTTP_ALL_METHOD', methodMap); - - res += '\n'; - - res += '#ifdef __cplusplus\n'; - res += '} /* extern "C" */\n'; - res += '#endif\n'; - res += '#endif /* LLLLHTTP_C_HEADERS_ */\n'; - - return res; - } - - private buildEnum(name: string, prefix: string, map: IEnumMap, - encoding: Encoding = 'none'): string { - let res = ''; - - res += `enum ${name} {\n`; - const keys = Object.keys(map); - keys.forEach((key, i) => { - const isLast = i === keys.length - 1; - - let value: number | string = map[key]; - - if (encoding === 'hex') { - value = `0x${value.toString(16)}`; - } - - res += ` ${prefix}_${key.replace(/-/g, '')} = ${value}`; - if (!isLast) { - res += ',\n'; - } - }); - res += '\n};\n'; - res += `typedef enum ${name} ${name}_t;\n`; - - return res; - } - - private buildMap(name: string, map: IEnumMap): string { - let res = ''; - - res += `#define ${name}_MAP(XX) \\\n`; - Object.keys(map).forEach((key) => { - res += ` XX(${map[key]!}, ${key.replace(/-/g, '')}, ${key}) \\\n`; - }); - res += '\n'; - - return res; - } -} diff --git a/llhttp/src/llhttp/constants.ts b/llhttp/src/llhttp/constants.ts deleted file mode 100644 index a5cfed9..0000000 --- a/llhttp/src/llhttp/constants.ts +++ /dev/null @@ -1,311 +0,0 @@ -import { enumToMap, IEnumMap } from './utils'; - -export type HTTPMode = 'loose' | 'strict'; - -// C headers - -export enum ERROR { - OK = 0, - INTERNAL, - STRICT, - LF_EXPECTED, - UNEXPECTED_CONTENT_LENGTH, - CLOSED_CONNECTION, - INVALID_METHOD, - INVALID_URL, - INVALID_CONSTANT, - INVALID_VERSION, - INVALID_HEADER_TOKEN, - INVALID_CONTENT_LENGTH, - INVALID_CHUNK_SIZE, - INVALID_STATUS, - INVALID_EOF_STATE, - INVALID_TRANSFER_ENCODING, - - CB_MESSAGE_BEGIN, - CB_HEADERS_COMPLETE, - CB_MESSAGE_COMPLETE, - CB_CHUNK_HEADER, - CB_CHUNK_COMPLETE, - - PAUSED, - PAUSED_UPGRADE, - PAUSED_H2_UPGRADE, - - USER, -} - -export enum TYPE { - BOTH = 0, // default - REQUEST, - RESPONSE, -} - -export enum FLAGS { - CONNECTION_KEEP_ALIVE = 1 << 0, - CONNECTION_CLOSE = 1 << 1, - CONNECTION_UPGRADE = 1 << 2, - CHUNKED = 1 << 3, - UPGRADE = 1 << 4, - CONTENT_LENGTH = 1 << 5, - SKIPBODY = 1 << 6, - TRAILING = 1 << 7, - // 1 << 8 is unused - TRANSFER_ENCODING = 1 << 9, -} - -export enum LENIENT_FLAGS { - HEADERS = 1 << 0, - CHUNKED_LENGTH = 1 << 1, - KEEP_ALIVE = 1 << 2, -} - -export enum METHODS { - DELETE = 0, - GET = 1, - HEAD = 2, - POST = 3, - PUT = 4, - /* pathological */ - CONNECT = 5, - OPTIONS = 6, - TRACE = 7, - /* WebDAV */ - COPY = 8, - LOCK = 9, - MKCOL = 10, - MOVE = 11, - PROPFIND = 12, - PROPPATCH = 13, - SEARCH = 14, - UNLOCK = 15, - BIND = 16, - REBIND = 17, - UNBIND = 18, - ACL = 19, - /* subversion */ - REPORT = 20, - MKACTIVITY = 21, - CHECKOUT = 22, - MERGE = 23, - /* upnp */ - 'M-SEARCH' = 24, - NOTIFY = 25, - SUBSCRIBE = 26, - UNSUBSCRIBE = 27, - /* RFC-5789 */ - PATCH = 28, - PURGE = 29, - /* CalDAV */ - MKCALENDAR = 30, - /* RFC-2068, section 19.6.1.2 */ - LINK = 31, - UNLINK = 32, - /* icecast */ - SOURCE = 33, - /* RFC-7540, section 11.6 */ - PRI = 34, - /* RFC-2326 RTSP */ - DESCRIBE = 35, - ANNOUNCE = 36, - SETUP = 37, - PLAY = 38, - PAUSE = 39, - TEARDOWN = 40, - GET_PARAMETER = 41, - SET_PARAMETER = 42, - REDIRECT = 43, - RECORD = 44, - /* RAOP */ - FLUSH = 45, -} - -export const METHODS_HTTP = [ - METHODS.DELETE, - METHODS.GET, - METHODS.HEAD, - METHODS.POST, - METHODS.PUT, - METHODS.CONNECT, - METHODS.OPTIONS, - METHODS.TRACE, - METHODS.COPY, - METHODS.LOCK, - METHODS.MKCOL, - METHODS.MOVE, - METHODS.PROPFIND, - METHODS.PROPPATCH, - METHODS.SEARCH, - METHODS.UNLOCK, - METHODS.BIND, - METHODS.REBIND, - METHODS.UNBIND, - METHODS.ACL, - METHODS.REPORT, - METHODS.MKACTIVITY, - METHODS.CHECKOUT, - METHODS.MERGE, - METHODS['M-SEARCH'], - METHODS.NOTIFY, - METHODS.SUBSCRIBE, - METHODS.UNSUBSCRIBE, - METHODS.PATCH, - METHODS.PURGE, - METHODS.MKCALENDAR, - METHODS.LINK, - METHODS.UNLINK, - METHODS.PRI, - - // TODO(indutny): should we allow it with HTTP? - METHODS.SOURCE, -]; - -export const METHODS_ICE = [ - METHODS.SOURCE, -]; - -export const METHODS_RTSP = [ - METHODS.OPTIONS, - METHODS.DESCRIBE, - METHODS.ANNOUNCE, - METHODS.SETUP, - METHODS.PLAY, - METHODS.PAUSE, - METHODS.TEARDOWN, - METHODS.GET_PARAMETER, - METHODS.SET_PARAMETER, - METHODS.REDIRECT, - METHODS.RECORD, - METHODS.FLUSH, - - // For AirPlay - METHODS.GET, - METHODS.POST, -]; - -export const METHOD_MAP = enumToMap(METHODS); -export const H_METHOD_MAP: IEnumMap = {}; - -Object.keys(METHOD_MAP).forEach((key) => { - if (/^H/.test(key)) { - H_METHOD_MAP[key] = METHOD_MAP[key]; - } -}); - -export enum FINISH { - SAFE = 0, - SAFE_WITH_CB, - UNSAFE, -} - -// Internal - -export type CharList = Array; - -export const ALPHA: CharList = []; - -for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) { - // Upper case - ALPHA.push(String.fromCharCode(i)); - - // Lower case - ALPHA.push(String.fromCharCode(i + 0x20)); -} - -export const NUM_MAP = { - 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, - 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, -}; - -export const HEX_MAP = { - 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, - 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, - A: 0XA, B: 0XB, C: 0XC, D: 0XD, E: 0XE, F: 0XF, - a: 0xa, b: 0xb, c: 0xc, d: 0xd, e: 0xe, f: 0xf, -}; - -export const NUM: CharList = [ - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', -]; - -export const ALPHANUM: CharList = ALPHA.concat(NUM); -export const MARK: CharList = [ '-', '_', '.', '!', '~', '*', '\'', '(', ')' ]; -export const USERINFO_CHARS: CharList = ALPHANUM - .concat(MARK) - .concat([ '%', ';', ':', '&', '=', '+', '$', ',' ]); - -// TODO(indutny): use RFC -export const STRICT_URL_CHAR: CharList = ([ - '!', '"', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - ':', ';', '<', '=', '>', - '@', '[', '\\', ']', '^', '_', - '`', - '{', '|', '}', '~', -] as CharList).concat(ALPHANUM); - -export const URL_CHAR: CharList = STRICT_URL_CHAR - .concat(([ '\t', '\f' ] as CharList)); - -// All characters with 0x80 bit set to 1 -for (let i = 0x80; i <= 0xff; i++) { - URL_CHAR.push(i); -} - -export const HEX: CharList = NUM.concat( - [ 'a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F' ]); - -/* Tokens as defined by rfc 2616. Also lowercases them. - * token = 1* - * separators = "(" | ")" | "<" | ">" | "@" - * | "," | ";" | ":" | "\" | <"> - * | "/" | "[" | "]" | "?" | "=" - * | "{" | "}" | SP | HT - */ -export const STRICT_TOKEN: CharList = ([ - '!', '#', '$', '%', '&', '\'', - '*', '+', '-', '.', - '^', '_', '`', - '|', '~', -] as CharList).concat(ALPHANUM); - -export const TOKEN: CharList = STRICT_TOKEN.concat([ ' ' ]); - -/* - * Verify that a char is a valid visible (printable) US-ASCII - * character or %x80-FF - */ -export const HEADER_CHARS: CharList = [ '\t' ]; -for (let i = 32; i <= 255; i++) { - if (i !== 127) { - HEADER_CHARS.push(i); - } -} - -// ',' = \x44 -export const CONNECTION_TOKEN_CHARS: CharList = - HEADER_CHARS.filter((c: string | number) => c !== 44); - -export const MAJOR = NUM_MAP; -export const MINOR = MAJOR; - -export enum HEADER_STATE { - GENERAL = 0, - CONNECTION, - CONTENT_LENGTH, - TRANSFER_ENCODING, - UPGRADE, - - CONNECTION_KEEP_ALIVE, - CONNECTION_CLOSE, - CONNECTION_UPGRADE, - TRANSFER_ENCODING_CHUNKED, -} - -export const SPECIAL_HEADERS = { - 'connection': HEADER_STATE.CONNECTION, - 'content-length': HEADER_STATE.CONTENT_LENGTH, - 'proxy-connection': HEADER_STATE.CONNECTION, - 'transfer-encoding': HEADER_STATE.TRANSFER_ENCODING, - 'upgrade': HEADER_STATE.UPGRADE, -}; diff --git a/llhttp/src/llhttp/http.ts b/llhttp/src/llhttp/http.ts deleted file mode 100644 index a78f6dd..0000000 --- a/llhttp/src/llhttp/http.ts +++ /dev/null @@ -1,958 +0,0 @@ -import * as assert from 'assert'; -import { LLParse, source } from 'llparse'; - -import Match = source.node.Match; -import Node = source.node.Node; - -import { - CharList, - CONNECTION_TOKEN_CHARS, ERROR, FINISH, FLAGS, H_METHOD_MAP, HEADER_CHARS, - HEADER_STATE, HEX_MAP, - HTTPMode, - LENIENT_FLAGS, - MAJOR, METHOD_MAP, METHODS, METHODS_HTTP, METHODS_ICE, METHODS_RTSP, - MINOR, NUM_MAP, SPECIAL_HEADERS, STRICT_TOKEN, - TOKEN, TYPE, -} from './constants'; -import { URL } from './url'; - -type MaybeNode = string | Match | Node; - -const NODES: ReadonlyArray = [ - 'start', - 'start_req', - 'start_res', - 'start_req_or_res', - - 'req_or_res_method', - - 'res_http_major', - 'res_http_dot', - 'res_http_minor', - 'res_http_end', - 'res_status_code', - 'res_status_code_otherwise', - 'res_status_start', - 'res_status', - 'res_line_almost_done', - - 'req_first_space_before_url', - 'req_spaces_before_url', - 'req_http_start', - 'req_http_major', - 'req_http_dot', - 'req_http_minor', - 'req_http_end', - 'req_http_complete', - - 'req_pri_upgrade', - - 'header_field_start', - 'header_field', - 'header_field_colon', - 'header_field_general', - 'header_field_general_otherwise', - 'header_value_discard_ws', - 'header_value_discard_ws_almost_done', - 'header_value_discard_lws', - 'header_value_start', - 'header_value', - 'header_value_otherwise', - 'header_value_lenient', - 'header_value_lws', - 'header_value_te_chunked', - 'header_value_te_chunked_last', - 'header_value_te_token', - 'header_value_te_token_ows', - 'header_value_content_length_once', - 'header_value_content_length', - 'header_value_content_length_ws', - 'header_value_connection', - 'header_value_connection_ws', - 'header_value_connection_token', - 'header_value_almost_done', - - 'headers_almost_done', - 'headers_done', - - 'chunk_size_start', - 'chunk_size_digit', - 'chunk_size', - 'chunk_size_otherwise', - 'chunk_size_almost_done', - 'chunk_size_almost_done_lf', - 'chunk_parameters', - 'chunk_data', - 'chunk_data_almost_done', - 'chunk_data_almost_done_skip', - 'chunk_complete', - 'body_identity', - 'body_identity_eof', - - 'message_done', - - 'eof', - 'cleanup', - 'closed', - 'restart', -]; - -interface ISpanMap { - readonly body: source.Span; - readonly headerField: source.Span; - readonly headerValue: source.Span; - readonly status: source.Span; -} - -interface ICallbackMap { - readonly afterHeadersComplete: source.code.Code; - readonly afterMessageComplete: source.code.Code; - readonly beforeHeadersComplete: source.code.Code; - readonly onChunkComplete: source.code.Code; - readonly onChunkHeader: source.code.Code; - readonly onHeadersComplete: source.code.Code; - readonly onMessageBegin: source.code.Code; - readonly onMessageComplete: source.code.Code; - readonly onUrlComplete: source.code.Code; - readonly onStatusComplete: source.code.Code; - readonly onHeaderFieldComplete: source.code.Code; - readonly onHeaderValueComplete: source.code.Code; -} - -interface IMulTargets { - readonly overflow: string | Node; - readonly success: string | Node; -} - -interface IMulOptions { - readonly base: number; - readonly max?: number; - readonly signed: boolean; -} - -interface IIsEqualTargets { - readonly equal: string | Node; - readonly notEqual: string | Node; -} - -export interface IHTTPResult { - readonly entry: Node; -} - -export class HTTP { - private readonly url: URL; - private readonly TOKEN: CharList; - private readonly span: ISpanMap; - private readonly callback: ICallbackMap; - private readonly nodes: Map = new Map(); - - constructor(private readonly llparse: LLParse, - private readonly mode: HTTPMode = 'loose') { - const p = llparse; - - this.url = new URL(p, mode); - this.TOKEN = mode === 'strict' ? STRICT_TOKEN : TOKEN; - - this.span = { - body: p.span(p.code.span('llhttp__on_body')), - headerField: p.span(p.code.span('llhttp__on_header_field')), - headerValue: p.span(p.code.span('llhttp__on_header_value')), - status: p.span(p.code.span('llhttp__on_status')), - }; - - /* tslint:disable:object-literal-sort-keys */ - this.callback = { - // User callbacks - onUrlComplete: p.code.match('llhttp__on_url_complete'), - onStatusComplete: p.code.match('llhttp__on_status_complete'), - onHeaderFieldComplete: p.code.match('llhttp__on_header_field_complete'), - onHeaderValueComplete: p.code.match('llhttp__on_header_value_complete'), - onHeadersComplete: p.code.match('llhttp__on_headers_complete'), - onMessageBegin: p.code.match('llhttp__on_message_begin'), - onMessageComplete: p.code.match('llhttp__on_message_complete'), - onChunkHeader: p.code.match('llhttp__on_chunk_header'), - onChunkComplete: p.code.match('llhttp__on_chunk_complete'), - - // Internal callbacks `src/http.c` - beforeHeadersComplete: - p.code.match('llhttp__before_headers_complete'), - afterHeadersComplete: p.code.match('llhttp__after_headers_complete'), - afterMessageComplete: p.code.match('llhttp__after_message_complete'), - }; - /* tslint:enable:object-literal-sort-keys */ - - NODES.forEach((name) => this.nodes.set(name, p.node(name) as Match)); - } - - public build(): IHTTPResult { - const p = this.llparse; - - p.property('i64', 'content_length'); - p.property('i8', 'type'); - p.property('i8', 'method'); - p.property('i8', 'http_major'); - p.property('i8', 'http_minor'); - p.property('i8', 'header_state'); - p.property('i8', 'lenient_flags'); - p.property('i8', 'upgrade'); - p.property('i8', 'finish'); - p.property('i16', 'flags'); - p.property('i16', 'status_code'); - - // Verify defaults - assert.strictEqual(FINISH.SAFE, 0); - assert.strictEqual(TYPE.BOTH, 0); - - // Shared settings (to be used in C wrapper) - p.property('ptr', 'settings'); - - this.buildLine(); - this.buildHeaders(); - - return { - entry: this.node('start'), - }; - } - - private buildLine(): void { - const p = this.llparse; - const span = this.span; - const n = (name: string): Match => this.node(name); - - const url = this.url.build(); - - const switchType = this.load('type', { - [TYPE.REQUEST]: n('start_req'), - [TYPE.RESPONSE]: n('start_res'), - }, n('start_req_or_res')); - - n('start') - .match([ '\r', '\n' ], n('start')) - .otherwise(this.update('finish', FINISH.UNSAFE, - this.invokePausable('on_message_begin', - ERROR.CB_MESSAGE_BEGIN, switchType))); - - n('start_req_or_res') - .peek('H', n('req_or_res_method')) - .otherwise(this.update('type', TYPE.REQUEST, 'start_req')); - - n('req_or_res_method') - .select(H_METHOD_MAP, this.store('method', - this.update('type', TYPE.REQUEST, 'req_first_space_before_url'))) - .match('HTTP/', this.update('type', TYPE.RESPONSE, 'res_http_major')) - .otherwise(p.error(ERROR.INVALID_CONSTANT, 'Invalid word encountered')); - - // Response - - n('start_res') - .match('HTTP/', n('res_http_major')) - .otherwise(p.error(ERROR.INVALID_CONSTANT, 'Expected HTTP/')); - - n('res_http_major') - .select(MAJOR, this.store('http_major', 'res_http_dot')) - .otherwise(p.error(ERROR.INVALID_VERSION, 'Invalid major version')); - - n('res_http_dot') - .match('.', n('res_http_minor')) - .otherwise(p.error(ERROR.INVALID_VERSION, 'Expected dot')); - - n('res_http_minor') - .select(MINOR, this.store('http_minor', 'res_http_end')) - .otherwise(p.error(ERROR.INVALID_VERSION, 'Invalid minor version')); - - n('res_http_end') - .match(' ', this.update('status_code', 0, 'res_status_code')) - .otherwise(p.error(ERROR.INVALID_VERSION, - 'Expected space after version')); - - n('res_status_code') - .select(NUM_MAP, this.mulAdd('status_code', { - overflow: p.error(ERROR.INVALID_STATUS, 'Response overflow'), - success: 'res_status_code', - }, { base: 10, signed: false, max: 999 })) - .otherwise(n('res_status_code_otherwise')); - - n('res_status_code_otherwise') - .match(' ', n('res_status_start')) - .peek([ '\r', '\n' ], n('res_status_start')) - .otherwise(p.error(ERROR.INVALID_STATUS, 'Invalid response status')); - - const onStatusComplete = p.invoke(this.callback.onStatusComplete); - onStatusComplete.otherwise(n('header_field_start')); - - n('res_status_start') - .match('\r', n('res_line_almost_done')) - .match('\n', onStatusComplete) - .otherwise(span.status.start(n('res_status'))); - - n('res_status') - .peek('\r', span.status.end().skipTo(n('res_line_almost_done'))) - .peek('\n', span.status.end().skipTo(onStatusComplete)) - .skipTo(n('res_status')); - - if (this.mode === 'strict') { - n('res_line_almost_done') - .match('\n', onStatusComplete) - .otherwise(p.error(ERROR.STRICT, 'Expected LF after CR')); - } else { - n('res_line_almost_done') - .skipTo(onStatusComplete); - } - - // Request - - n('start_req') - .select(METHOD_MAP, - this.store('method', 'req_first_space_before_url')) - .otherwise(p.error(ERROR.INVALID_METHOD, 'Invalid method encountered')); - - n('req_first_space_before_url') - .match(' ', n('req_spaces_before_url')) - .otherwise(p.error(ERROR.INVALID_METHOD, 'Expected space after method')); - - n('req_spaces_before_url') - .match(' ', n('req_spaces_before_url')) - .otherwise(this.isEqual('method', METHODS.CONNECT, { - equal: url.entry.connect, - notEqual: url.entry.normal, - })); - - const onUrlCompleteHTTP = p.invoke(this.callback.onUrlComplete); - onUrlCompleteHTTP.otherwise(n('req_http_start')); - - url.exit.toHTTP - .otherwise(onUrlCompleteHTTP); - - const onUrlCompleteHTTP09 = p.invoke(this.callback.onUrlComplete); - onUrlCompleteHTTP09.otherwise(n('header_field_start')); - - url.exit.toHTTP09 - .otherwise( - this.update('http_major', 0, - this.update('http_minor', 9, onUrlCompleteHTTP09)), - ); - - const checkMethod = (methods: METHODS[], error: string): Node => { - const success = n('req_http_major'); - const failure = p.error(ERROR.INVALID_CONSTANT, error); - - const map: { [key: number]: Node } = {}; - for (const method of methods) { - map[method] = success; - } - - return this.load('method', map, failure); - }; - - n('req_http_start') - .match('HTTP/', checkMethod(METHODS_HTTP, - 'Invalid method for HTTP/x.x request')) - .match('RTSP/', checkMethod(METHODS_RTSP, - 'Invalid method for RTSP/x.x request')) - .match('ICE/', checkMethod(METHODS_ICE, - 'Expected SOURCE method for ICE/x.x request')) - .match(' ', n('req_http_start')) - .otherwise(p.error(ERROR.INVALID_CONSTANT, 'Expected HTTP/')); - - n('req_http_major') - .select(MAJOR, this.store('http_major', 'req_http_dot')) - .otherwise(p.error(ERROR.INVALID_VERSION, 'Invalid major version')); - - n('req_http_dot') - .match('.', n('req_http_minor')) - .otherwise(p.error(ERROR.INVALID_VERSION, 'Expected dot')); - - n('req_http_minor') - .select(MINOR, this.store('http_minor', 'req_http_end')) - .otherwise(p.error(ERROR.INVALID_VERSION, 'Invalid minor version')); - - n('req_http_end').otherwise(this.load('method', { - [METHODS.PRI]: n('req_pri_upgrade'), - }, n('req_http_complete'))); - - n('req_http_complete') - .match([ '\r\n', '\n' ], n('header_field_start')) - .otherwise(p.error(ERROR.INVALID_VERSION, 'Expected CRLF after version')); - - n('req_pri_upgrade') - .match('\r\n\r\nSM\r\n\r\n', - p.error(ERROR.PAUSED_H2_UPGRADE, 'Pause on PRI/Upgrade')) - .otherwise( - p.error(ERROR.INVALID_VERSION, 'Expected HTTP/2 Connection Preface')); - } - - private buildHeaders(): void { - this.buildHeaderField(); - this.buildHeaderValue(); - } - - private buildHeaderField(): void { - const p = this.llparse; - const span = this.span; - const n = (name: string): Match => this.node(name); - - n('header_field_start') - .match('\r', n('headers_almost_done')) - /* they might be just sending \n instead of \r\n so this would be - * the second \n to denote the end of headers*/ - .peek('\n', n('headers_almost_done')) - .otherwise(span.headerField.start(n('header_field'))); - - n('header_field') - .transform(p.transform.toLower()) - // Match headers that need special treatment - .select(SPECIAL_HEADERS, this.store('header_state', 'header_field_colon')) - .otherwise(this.resetHeaderState('header_field_general')); - - const onHeaderFieldComplete = p.invoke(this.callback.onHeaderFieldComplete); - onHeaderFieldComplete.otherwise(n('header_value_discard_ws')); - - n('header_field_colon') - .match(' ', n('header_field_colon')) - .peek(':', span.headerField.end().skipTo(onHeaderFieldComplete)) - // Fallback to general header, there're additional characters: - // `Connection-Duration` instead of `Connection` and so on. - .otherwise(this.resetHeaderState('header_field_general')); - - n('header_field_general') - .match(this.TOKEN, n('header_field_general')) - .otherwise(n('header_field_general_otherwise')); - - // Just a performance optimization, split the node so that the fast case - // remains in `header_field_general` - n('header_field_general_otherwise') - .peek(':', span.headerField.end().skipTo(onHeaderFieldComplete)) - .otherwise(p.error(ERROR.INVALID_HEADER_TOKEN, 'Invalid header token')); - } - - private buildHeaderValue(): void { - const p = this.llparse; - const span = this.span; - const callback = this.callback; - const n = (name: string): Match => this.node(name); - - const fallback = this.resetHeaderState('header_value'); - - n('header_value_discard_ws') - .match([ ' ', '\t' ], n('header_value_discard_ws')) - .match('\r', n('header_value_discard_ws_almost_done')) - .match('\n', n('header_value_discard_lws')) - .otherwise(span.headerValue.start(n('header_value_start'))); - - if (this.mode === 'strict') { - n('header_value_discard_ws_almost_done') - .match('\n', n('header_value_discard_lws')) - .otherwise(p.error(ERROR.STRICT, 'Expected LF after CR')); - } else { - n('header_value_discard_ws_almost_done').skipTo( - n('header_value_discard_lws')); - } - - const onHeaderValueComplete = p.invoke(this.callback.onHeaderValueComplete); - onHeaderValueComplete.otherwise(n('header_field_start')); - - const emptyContentLengthError = p.error( - ERROR.INVALID_CONTENT_LENGTH, 'Empty Content-Length'); - const checkContentLengthEmptiness = this.load('header_state', { - [HEADER_STATE.CONTENT_LENGTH]: emptyContentLengthError, - }, this.setHeaderFlags( - this.emptySpan(span.headerValue, onHeaderValueComplete))); - - n('header_value_discard_lws') - .match([ ' ', '\t' ], n('header_value_discard_ws')) - .otherwise(checkContentLengthEmptiness); - - // Multiple `Transfer-Encoding` headers should be treated as one, but with - // values separate by a comma. - // - // See: https://tools.ietf.org/html/rfc7230#section-3.2.2 - const toTransferEncoding = this.unsetFlag( - FLAGS.CHUNKED, - 'header_value_te_chunked'); - - n('header_value_start') - .otherwise(this.load('header_state', { - [HEADER_STATE.UPGRADE]: this.setFlag(FLAGS.UPGRADE, fallback), - [HEADER_STATE.TRANSFER_ENCODING]: this.setFlag( - FLAGS.TRANSFER_ENCODING, toTransferEncoding), - [HEADER_STATE.CONTENT_LENGTH]: n('header_value_content_length_once'), - [HEADER_STATE.CONNECTION]: n('header_value_connection'), - }, 'header_value')); - - // - // Transfer-Encoding - // - - n('header_value_te_chunked') - .transform(p.transform.toLowerUnsafe()) - .match( - 'chunked', - n('header_value_te_chunked_last'), - ) - .otherwise(n('header_value_te_token')); - - n('header_value_te_chunked_last') - .match(' ', n('header_value_te_chunked_last')) - .peek([ '\r', '\n' ], this.update('header_state', - HEADER_STATE.TRANSFER_ENCODING_CHUNKED, - 'header_value_otherwise')) - .otherwise(n('header_value_te_chunked')); - - n('header_value_te_token') - .match(',', n('header_value_te_token_ows')) - .match(CONNECTION_TOKEN_CHARS, n('header_value_te_token')) - .otherwise(fallback); - - n('header_value_te_token_ows') - .match([ ' ', '\t' ], n('header_value_te_token_ows')) - .otherwise(n('header_value_te_chunked')); - - // - // Content-Length - // - - const invalidContentLength = (reason: string): Node => { - // End span for easier testing - // TODO(indutny): minimize code size - return span.headerValue.end() - .otherwise(p.error(ERROR.INVALID_CONTENT_LENGTH, reason)); - }; - - n('header_value_content_length_once') - .otherwise(this.testFlags(FLAGS.CONTENT_LENGTH, { - 0: n('header_value_content_length'), - }, p.error(ERROR.UNEXPECTED_CONTENT_LENGTH, 'Duplicate Content-Length'))); - - n('header_value_content_length') - .select(NUM_MAP, this.mulAdd('content_length', { - overflow: invalidContentLength('Content-Length overflow'), - success: 'header_value_content_length', - })) - .otherwise(n('header_value_content_length_ws')); - - n('header_value_content_length_ws') - .match(' ', n('header_value_content_length_ws')) - .peek([ '\r', '\n' ], - this.setFlag(FLAGS.CONTENT_LENGTH, 'header_value_otherwise')) - .otherwise(invalidContentLength('Invalid character in Content-Length')); - - // - // Connection - // - - n('header_value_connection') - .transform(p.transform.toLower()) - // TODO(indutny): extra node for token back-edge? - // Skip lws - .match([ ' ', '\t' ], n('header_value_connection')) - .match( - 'close', - this.update('header_state', HEADER_STATE.CONNECTION_CLOSE, - 'header_value_connection_ws'), - ) - .match( - 'upgrade', - this.update('header_state', HEADER_STATE.CONNECTION_UPGRADE, - 'header_value_connection_ws'), - ) - .match( - 'keep-alive', - this.update('header_state', HEADER_STATE.CONNECTION_KEEP_ALIVE, - 'header_value_connection_ws'), - ) - .otherwise(n('header_value_connection_token')); - - n('header_value_connection_ws') - .match(',', this.setHeaderFlags('header_value_connection')) - .match(' ', n('header_value_connection_ws')) - .peek([ '\r', '\n' ], n('header_value_otherwise')) - .otherwise(this.resetHeaderState('header_value_connection_token')); - - n('header_value_connection_token') - .match(',', n('header_value_connection')) - .match(CONNECTION_TOKEN_CHARS, - n('header_value_connection_token')) - .otherwise(n('header_value_otherwise')); - - // Split for performance reasons - n('header_value') - .match(HEADER_CHARS, n('header_value')) - .otherwise(n('header_value_otherwise')); - - const checkLenient = this.testLenientFlags(LENIENT_FLAGS.HEADERS, { - 1: n('header_value_lenient'), - }, p.error(ERROR.INVALID_HEADER_TOKEN, 'Invalid header value char')); - - n('header_value_otherwise') - .peek('\r', span.headerValue.end().skipTo(n('header_value_almost_done'))) - .peek('\n', span.headerValue.end(n('header_value_almost_done'))) - .otherwise(checkLenient); - - n('header_value_lenient') - .peek('\r', span.headerValue.end().skipTo(n('header_value_almost_done'))) - .peek('\n', span.headerValue.end(n('header_value_almost_done'))) - .skipTo(n('header_value_lenient')); - - n('header_value_almost_done') - .match('\n', n('header_value_lws')) - .otherwise(p.error(ERROR.LF_EXPECTED, - 'Missing expected LF after header value')); - - n('header_value_lws') - .peek([ ' ', '\t' ], span.headerValue.start(n('header_value_start'))) - .otherwise(this.setHeaderFlags(onHeaderValueComplete)); - - const checkTrailing = this.testFlags(FLAGS.TRAILING, { - 1: this.invokePausable('on_chunk_complete', - ERROR.CB_CHUNK_COMPLETE, 'message_done'), - }); - - if (this.mode === 'strict') { - n('headers_almost_done') - .match('\n', checkTrailing) - .otherwise(p.error(ERROR.STRICT, 'Expected LF after headers')); - } else { - n('headers_almost_done') - .skipTo(checkTrailing); - } - - // Set `upgrade` if needed - const beforeHeadersComplete = p.invoke(callback.beforeHeadersComplete); - - /* Present `Transfer-Encoding` header overrides `Content-Length` even if the - * actual coding is not `chunked`. As per spec: - * - * https://www.rfc-editor.org/rfc/rfc7230.html#section-3.3.3 - * - * If a message is received with both a Transfer-Encoding and a - * Content-Length header field, the Transfer-Encoding overrides the - * Content-Length. Such a message might indicate an attempt to - * perform request smuggling (Section 9.5) or response splitting - * (Section 9.4) and **ought to be handled as an error**. A sender MUST - * remove the received Content-Length field prior to forwarding such - * a message downstream. - * - * (Note our emphasis on **ought to be handled as an error** - */ - - const ENCODING_CONFLICT = FLAGS.TRANSFER_ENCODING | FLAGS.CONTENT_LENGTH; - - const onEncodingConflict = - this.testLenientFlags(LENIENT_FLAGS.CHUNKED_LENGTH, { - 0: p.error(ERROR.UNEXPECTED_CONTENT_LENGTH, - 'Content-Length can\'t be present with Transfer-Encoding'), - - // For LENIENT mode fall back to past behavior: - // Ignore `Transfer-Encoding` when `Content-Length` is present. - }).otherwise(beforeHeadersComplete); - - const checkEncConflict = this.testFlags(ENCODING_CONFLICT, { - 1: onEncodingConflict, - }).otherwise(beforeHeadersComplete); - - checkTrailing.otherwise(checkEncConflict); - - /* Here we call the headers_complete callback. This is somewhat - * different than other callbacks because if the user returns 1, we - * will interpret that as saying that this message has no body. This - * is needed for the annoying case of receiving a response to a HEAD - * request. - * - * We'd like to use CALLBACK_NOTIFY_NOADVANCE() here but we cannot, so - * we have to simulate it by handling a change in errno below. - */ - const onHeadersComplete = p.invoke(callback.onHeadersComplete, { - 0: n('headers_done'), - 1: this.setFlag(FLAGS.SKIPBODY, 'headers_done'), - 2: this.update('upgrade', 1, - this.setFlag(FLAGS.SKIPBODY, 'headers_done')), - [ERROR.PAUSED]: this.pause('Paused by on_headers_complete', - 'headers_done'), - }, p.error(ERROR.CB_HEADERS_COMPLETE, 'User callback error')); - - beforeHeadersComplete.otherwise(onHeadersComplete); - - const upgradePause = p.pause(ERROR.PAUSED_UPGRADE, - 'Pause on CONNECT/Upgrade'); - - const afterHeadersComplete = p.invoke(callback.afterHeadersComplete, { - 1: this.invokePausable('on_message_complete', - ERROR.CB_MESSAGE_COMPLETE, upgradePause), - 2: n('chunk_size_start'), - 3: n('body_identity'), - 4: n('body_identity_eof'), - - // non-chunked `Transfer-Encoding` for request, see `src/native/http.c` - 5: p.error(ERROR.INVALID_TRANSFER_ENCODING, - 'Request has invalid `Transfer-Encoding`'), - }); - - n('headers_done') - .otherwise(afterHeadersComplete); - - upgradePause - .otherwise(n('cleanup')); - - afterHeadersComplete - .otherwise(this.invokePausable('on_message_complete', - ERROR.CB_MESSAGE_COMPLETE, 'cleanup')); - - n('body_identity') - .otherwise(span.body.start() - .otherwise(p.consume('content_length').otherwise( - span.body.end(n('message_done'))))); - - n('body_identity_eof') - .otherwise( - this.update('finish', FINISH.SAFE_WITH_CB, span.body.start(n('eof')))); - - // Just read everything until EOF - n('eof') - .skipTo(n('eof')); - - n('chunk_size_start') - .otherwise(this.update('content_length', 0, 'chunk_size_digit')); - - const addContentLength = this.mulAdd('content_length', { - overflow: p.error(ERROR.INVALID_CHUNK_SIZE, 'Chunk size overflow'), - success: 'chunk_size', - }, { signed: false, base: 0x10 }); - - n('chunk_size_digit') - .select(HEX_MAP, addContentLength) - .otherwise(p.error(ERROR.INVALID_CHUNK_SIZE, - 'Invalid character in chunk size')); - - n('chunk_size') - .select(HEX_MAP, addContentLength) - .otherwise(n('chunk_size_otherwise')); - - n('chunk_size_otherwise') - .match('\r', n('chunk_size_almost_done')) - .match([ ';', ' ' ], n('chunk_parameters')) - .otherwise(p.error(ERROR.INVALID_CHUNK_SIZE, - 'Invalid character in chunk size')); - - // just ignore this. - n('chunk_parameters') - .match('\r', n('chunk_size_almost_done')) - .skipTo(n('chunk_parameters')); - - if (this.mode === 'strict') { - n('chunk_size_almost_done') - .match('\n', n('chunk_size_almost_done_lf')) - .otherwise(p.error(ERROR.STRICT, 'Expected LF after chunk size')); - } else { - n('chunk_size_almost_done') - .skipTo(n('chunk_size_almost_done_lf')); - } - - const toChunk = this.isEqual('content_length', 0, { - equal: this.setFlag(FLAGS.TRAILING, 'header_field_start'), - notEqual: 'chunk_data', - }); - - n('chunk_size_almost_done_lf') - .otherwise(this.invokePausable('on_chunk_header', - ERROR.CB_CHUNK_HEADER, toChunk)); - - n('chunk_data') - .otherwise(span.body.start() - .otherwise(p.consume('content_length').otherwise( - span.body.end(n('chunk_data_almost_done'))))); - - if (this.mode === 'strict') { - n('chunk_data_almost_done') - .match('\r\n', n('chunk_complete')) - .otherwise(p.error(ERROR.STRICT, 'Expected CRLF after chunk')); - } else { - n('chunk_data_almost_done') - .skipTo(n('chunk_data_almost_done_skip')); - } - - n('chunk_data_almost_done_skip') - .skipTo(n('chunk_complete')); - - n('chunk_complete') - .otherwise(this.invokePausable('on_chunk_complete', - ERROR.CB_CHUNK_COMPLETE, 'chunk_size_start')); - - const upgradeAfterDone = this.isEqual('upgrade', 1, { - // Exit, the rest of the message is in a different protocol. - equal: upgradePause, - - // Restart - notEqual: 'cleanup', - }); - - n('message_done') - .otherwise(this.invokePausable('on_message_complete', - ERROR.CB_MESSAGE_COMPLETE, upgradeAfterDone)); - - const lenientClose = this.testLenientFlags(LENIENT_FLAGS.KEEP_ALIVE, { - 1: n('restart'), - }, n('closed')); - - // Check if we'd like to keep-alive - n('cleanup') - .otherwise(p.invoke(callback.afterMessageComplete, { - 1: n('restart'), - }, this.update('finish', FINISH.SAFE, lenientClose))); - - if (this.mode === 'strict') { - // Error on extra data after `Connection: close` - n('closed') - .match([ '\r', '\n' ], n('closed')) - .skipTo(p.error(ERROR.CLOSED_CONNECTION, - 'Data after `Connection: close`')); - } else { - // Discard all data after `Connection: close` - n('closed').skipTo(n('closed')); - } - - n('restart') - .otherwise(this.update('finish', FINISH.SAFE, n('start'))); - } - - private node(name: string | T): T { - if (name instanceof Node) { - return name; - } - - assert(this.nodes.has(name), `Unknown node with name "${name}"`); - return this.nodes.get(name)! as any; - } - - private load(field: string, map: { [key: number]: Node }, - next?: string | Node): Node { - const p = this.llparse; - - const res = p.invoke(p.code.load(field), map); - if (next !== undefined) { - res.otherwise(this.node(next)); - } - return res; - } - - private store(field: string, next?: string | Node): Node { - const p = this.llparse; - - const res = p.invoke(p.code.store(field)); - if (next !== undefined) { - res.otherwise(this.node(next)); - } - return res; - } - - private update(field: string, value: number, next?: string | Node): Node { - const p = this.llparse; - - const res = p.invoke(p.code.update(field, value)); - if (next !== undefined) { - res.otherwise(this.node(next)); - } - return res; - } - - private resetHeaderState(next: string | Node): Node { - return this.update('header_state', HEADER_STATE.GENERAL, next); - } - - private emptySpan(span: source.Span, next: string | Node): Node { - return span.start(span.end(this.node(next))); - } - - private unsetFlag(flag: FLAGS, next: string | Node): Node { - const p = this.llparse; - return p.invoke(p.code.and('flags', ~flag), this.node(next)); - } - - private setFlag(flag: FLAGS, next: string | Node): Node { - const p = this.llparse; - return p.invoke(p.code.or('flags', flag), this.node(next)); - } - - private testFlags(flag: FLAGS, map: { [key: number]: Node }, - next?: string | Node): Node { - const p = this.llparse; - const res = p.invoke(p.code.test('flags', flag), map); - if (next !== undefined) { - res.otherwise(this.node(next)); - } - return res; - } - - private testLenientFlags(flag: LENIENT_FLAGS, map: { [key: number]: Node }, - next?: string | Node): Node { - const p = this.llparse; - const res = p.invoke(p.code.test('lenient_flags', flag), map); - if (next !== undefined) { - res.otherwise(this.node(next)); - } - return res; - } - - private setHeaderFlags(next: string | Node): Node { - const HS = HEADER_STATE; - const F = FLAGS; - - const toConnection = - this.update('header_state', HEADER_STATE.CONNECTION, next); - - return this.load('header_state', { - [HS.CONNECTION_KEEP_ALIVE]: - this.setFlag(F.CONNECTION_KEEP_ALIVE, toConnection), - [HS.CONNECTION_CLOSE]: this.setFlag(F.CONNECTION_CLOSE, toConnection), - [HS.CONNECTION_UPGRADE]: this.setFlag(F.CONNECTION_UPGRADE, toConnection), - [HS.TRANSFER_ENCODING_CHUNKED]: this.setFlag(F.CHUNKED, next), - }, this.node(next)); - } - - private mulAdd(field: string, targets: IMulTargets, - options: IMulOptions = { base: 10, signed: false }): Node { - const p = this.llparse; - - return p.invoke(p.code.mulAdd(field, options), { - 1: this.node(targets.overflow), - }, this.node(targets.success)); - } - - private isEqual(field: string, value: number, map: IIsEqualTargets) { - const p = this.llparse; - return p.invoke(p.code.isEqual(field, value), { - 0: this.node(map.notEqual), - }, this.node(map.equal)); - } - - private pause(msg: string, next?: string | Node) { - const p = this.llparse; - const res = p.pause(ERROR.PAUSED, msg); - if (next !== undefined) { - res.otherwise(this.node(next)); - } - return res; - } - - // TODO(indutny): use type for `name` - private invokePausable(name: string, errorCode: ERROR, next: string | Node) - : Node { - let cb; - if (name === 'on_message_begin') { - cb = this.callback.onMessageBegin; - } else if (name === 'on_message_complete') { - cb = this.callback.onMessageComplete; - } else if (name === 'on_chunk_header') { - cb = this.callback.onChunkHeader; - } else if (name === 'on_chunk_complete') { - cb = this.callback.onChunkComplete; - } else { - throw new Error('Unknown callback: ' + name); - } - - const p = this.llparse; - return p.invoke(cb, { - 0: this.node(next), - [ERROR.PAUSED]: this.pause(`${name} pause`, next), - }, p.error(errorCode, `\`${name}\` callback error`)); - } -} diff --git a/llhttp/src/llhttp/url.ts b/llhttp/src/llhttp/url.ts deleted file mode 100644 index 233971e..0000000 --- a/llhttp/src/llhttp/url.ts +++ /dev/null @@ -1,236 +0,0 @@ -import { LLParse, source } from 'llparse'; - -import Match = source.node.Match; -import Node = source.node.Node; - -import { - ALPHA, - CharList, - ERROR, - HTTPMode, - STRICT_URL_CHAR, - URL_CHAR, - USERINFO_CHARS, -} from './constants'; - -type SpanName = 'schema' | 'host' | 'path' | 'query' | 'fragment' | 'url'; - -export interface IURLResult { - readonly entry: { - readonly normal: Node; - readonly connect: Node; - }; - readonly exit: { - readonly toHTTP: Node; - readonly toHTTP09: Node; - }; -} - -type SpanTable = Map; - -export class URL { - private readonly span: source.Span | undefined; - private readonly spanTable: SpanTable = new Map(); - private readonly errorInvalid: Node; - private readonly errorStrictInvalid: Node; - private readonly URL_CHAR: CharList; - - constructor(private readonly llparse: LLParse, - private readonly mode: HTTPMode = 'loose', - separateSpans: boolean = false) { - const p = this.llparse; - - this.errorInvalid = p.error(ERROR.INVALID_URL, 'Invalid characters in url'); - this.errorStrictInvalid = - p.error(ERROR.INVALID_URL, 'Invalid characters in url (strict mode)'); - - this.URL_CHAR = mode === 'strict' ? STRICT_URL_CHAR : URL_CHAR; - - const table = this.spanTable; - if (separateSpans) { - table.set('schema', p.span(p.code.span('llhttp__on_url_schema'))); - table.set('host', p.span(p.code.span('llhttp__on_url_host'))); - table.set('path', p.span(p.code.span('llhttp__on_url_path'))); - table.set('query', p.span(p.code.span('llhttp__on_url_query'))); - table.set('fragment', - p.span(p.code.span('llhttp__on_url_fragment'))); - } else { - table.set('url', p.span(p.code.span('llhttp__on_url'))); - } - } - - public build(): IURLResult { - const p = this.llparse; - - const entry = { - connect: this.node('entry_connect'), - normal: this.node('entry_normal'), - }; - - const start = this.node('start'); - const path = this.node('path'); - const queryOrFragment = this.node('query_or_fragment'); - const schema = this.node('schema'); - const schemaDelim = this.node('schema_delim'); - const server = this.node('server'); - const queryStart = this.node('query_start'); - const query = this.node('query'); - const fragment = this.node('fragment'); - const serverWithAt = this.node('server_with_at'); - - entry.normal - .otherwise(this.spanStart('url', start)); - - entry.connect - .otherwise(this.spanStart('url', this.spanStart('host', server))); - - start - .peek([ '/', '*' ], this.spanStart('path').skipTo(path)) - .peek(ALPHA, this.spanStart('schema', schema)) - .otherwise(p.error(ERROR.INVALID_URL, 'Unexpected start char in url')); - - schema - .match(ALPHA, schema) - .peek(':', this.spanEnd('schema').skipTo(schemaDelim)) - .otherwise(p.error(ERROR.INVALID_URL, 'Unexpected char in url schema')); - - schemaDelim - .match('//', this.spanStart('host', server)) - .otherwise(p.error(ERROR.INVALID_URL, 'Unexpected char in url schema')); - - [ - server, - serverWithAt, - ].forEach((node) => { - node - .peek('/', this.spanEnd('host', this.spanStart('path').skipTo(path))) - .match('?', this.spanEnd('host', this.spanStart('query', query))) - .match(USERINFO_CHARS, server) - .match([ '[', ']' ], server) - .otherwise(p.error(ERROR.INVALID_URL, 'Unexpected char in url server')); - - if (node !== serverWithAt) { - node.match('@', serverWithAt); - } - }); - - serverWithAt - .match('@', p.error(ERROR.INVALID_URL, 'Double @ in url')); - - path - .match(this.URL_CHAR, path) - .otherwise(this.spanEnd('path', queryOrFragment)); - - // Performance optimization, split `path` so that the fast case remains - // there - queryOrFragment - .match('?', this.spanStart('query', query)) - .match('#', this.spanStart('fragment', fragment)) - .otherwise(p.error(ERROR.INVALID_URL, 'Invalid char in url path')); - - query - .match(this.URL_CHAR, query) - // Allow extra '?' in query string - .match('?', query) - .peek('#', this.spanEnd('query') - .skipTo(this.spanStart('fragment', fragment))) - .otherwise(p.error(ERROR.INVALID_URL, 'Invalid char in url query')); - - fragment - .match(this.URL_CHAR, fragment) - .match([ '?', '#' ], fragment) - .otherwise( - p.error(ERROR.INVALID_URL, 'Invalid char in url fragment start')); - - [ start, schema, schemaDelim ].forEach((node) => { - /* No whitespace allowed here */ - node.match([ ' ', '\r', '\n' ], this.errorInvalid); - }); - - // Adaptors - const toHTTP = this.node('to_http'); - const toHTTP09 = this.node('to_http_09'); - - const skipToHTTP = this.node('skip_to_http') - .skipTo(toHTTP); - - const skipToHTTP09 = this.node('skip_to_http09') - .skipTo(toHTTP09); - - const skipCRLF = this.node('skip_lf_to_http09') - .match('\r\n', toHTTP09) - .otherwise(p.error(ERROR.INVALID_URL, 'Expected CRLF')); - - [ - server, serverWithAt, queryOrFragment, queryStart, query, - fragment, - ].forEach((node) => { - let spanName: SpanName | undefined; - - if (node === server || node === serverWithAt) { - spanName = 'host'; - } else if (node === queryStart || node === query) { - spanName = 'query'; - } else if (node === fragment) { - spanName = 'fragment'; - } - - const endTo = (target: Node): Node => { - let res: Node = this.spanEnd('url', target); - if (spanName !== undefined) { - res = this.spanEnd(spanName, res); - } - return res; - }; - - node.peek(' ', endTo(skipToHTTP)); - - node.peek('\r', endTo(skipCRLF)); - node.peek('\n', endTo(skipToHTTP09)); - }); - - return { - entry, - exit: { - toHTTP, - toHTTP09, - }, - }; - } - - private spanStart(name: SpanName, otherwise?: Node): Node { - let res: Node; - if (this.spanTable.has(name)) { - res = this.spanTable.get(name)!.start(); - } else { - res = this.llparse.node('span_start_stub_' + name); - } - if (otherwise !== undefined) { - res.otherwise(otherwise); - } - return res; - } - - private spanEnd(name: SpanName, otherwise?: Node): Node { - let res: Node; - if (this.spanTable.has(name)) { - res = this.spanTable.get(name)!.end(); - } else { - res = this.llparse.node('span_end_stub_' + name); - } - if (otherwise !== undefined) { - res.otherwise(otherwise); - } - return res; - } - - private node(name: string): Match { - const res = this.llparse.node('url_' + name); - - if (this.mode === 'strict') { - res.match([ '\t', '\f' ], this.errorStrictInvalid); - } - - return res; - } -} diff --git a/llhttp/src/llhttp/utils.ts b/llhttp/src/llhttp/utils.ts deleted file mode 100644 index cb4605b..0000000 --- a/llhttp/src/llhttp/utils.ts +++ /dev/null @@ -1,27 +0,0 @@ -export interface IEnumMap { - [key: string]: number; -} - -export function enumToMap( - obj: any, - filter?: ReadonlyArray, - exceptions?: ReadonlyArray, -): IEnumMap { - const res: IEnumMap = {}; - - Object.keys(obj).forEach((key) => { - const value = obj[key]; - if (typeof value !== 'number') { - return; - } - if (filter && !filter.includes(value)) { - return; - } - if (exceptions && exceptions.includes(value)) { - return; - } - res[key] = value; - }); - - return res; -} diff --git a/llhttp/src/native/api.c b/llhttp/src/native/api.c deleted file mode 100644 index 1a3bf7b..0000000 --- a/llhttp/src/native/api.c +++ /dev/null @@ -1,369 +0,0 @@ -#include -#include -#include - -#include "llhttp.h" - -#define CALLBACK_MAYBE(PARSER, NAME) \ - do { \ - const llhttp_settings_t* settings; \ - settings = (const llhttp_settings_t*) (PARSER)->settings; \ - if (settings == NULL || settings->NAME == NULL) { \ - err = 0; \ - break; \ - } \ - err = settings->NAME((PARSER)); \ - } while (0) - -#define SPAN_CALLBACK_MAYBE(PARSER, NAME, START, LEN) \ - do { \ - const llhttp_settings_t* settings; \ - settings = (const llhttp_settings_t*) (PARSER)->settings; \ - if (settings == NULL || settings->NAME == NULL) { \ - err = 0; \ - break; \ - } \ - err = settings->NAME((PARSER), (START), (LEN)); \ - if (err == -1) { \ - err = HPE_USER; \ - llhttp_set_error_reason((PARSER), "Span callback error in " #NAME); \ - } \ - } while (0) - -void llhttp_init(llhttp_t* parser, llhttp_type_t type, - const llhttp_settings_t* settings) { - llhttp__internal_init(parser); - - parser->type = type; - parser->settings = (void*) settings; -} - - -#if defined(__wasm__) - -extern int wasm_on_message_begin(llhttp_t * p); -extern int wasm_on_url(llhttp_t* p, const char* at, size_t length); -extern int wasm_on_status(llhttp_t* p, const char* at, size_t length); -extern int wasm_on_header_field(llhttp_t* p, const char* at, size_t length); -extern int wasm_on_header_value(llhttp_t* p, const char* at, size_t length); -extern int wasm_on_headers_complete(llhttp_t * p, int status_code, - uint8_t upgrade, int should_keep_alive); -extern int wasm_on_body(llhttp_t* p, const char* at, size_t length); -extern int wasm_on_message_complete(llhttp_t * p); - -static int wasm_on_headers_complete_wrap(llhttp_t* p) { - return wasm_on_headers_complete(p, p->status_code, p->upgrade, - llhttp_should_keep_alive(p)); -} - -const llhttp_settings_t wasm_settings = { - wasm_on_message_begin, - wasm_on_url, - wasm_on_status, - wasm_on_header_field, - wasm_on_header_value, - wasm_on_headers_complete_wrap, - wasm_on_body, - wasm_on_message_complete, - NULL, - NULL, -}; - - -llhttp_t* llhttp_alloc(llhttp_type_t type) { - llhttp_t* parser = malloc(sizeof(llhttp_t)); - llhttp_init(parser, type, &wasm_settings); - return parser; -} - -void llhttp_free(llhttp_t* parser) { - free(parser); -} - -/* Some getters required to get stuff from the parser */ - -uint8_t llhttp_get_type(llhttp_t* parser) { - return parser->type; -} - -uint8_t llhttp_get_http_major(llhttp_t* parser) { - return parser->http_major; -} - -uint8_t llhttp_get_http_minor(llhttp_t* parser) { - return parser->http_minor; -} - -uint8_t llhttp_get_method(llhttp_t* parser) { - return parser->method; -} - -int llhttp_get_status_code(llhttp_t* parser) { - return parser->status_code; -} - -uint8_t llhttp_get_upgrade(llhttp_t* parser) { - return parser->upgrade; -} - -#endif // defined(__wasm__) - - -void llhttp_reset(llhttp_t* parser) { - llhttp_type_t type = parser->type; - const llhttp_settings_t* settings = parser->settings; - void* data = parser->data; - uint8_t lenient_flags = parser->lenient_flags; - - llhttp__internal_init(parser); - - parser->type = type; - parser->settings = (void*) settings; - parser->data = data; - parser->lenient_flags = lenient_flags; -} - - -llhttp_errno_t llhttp_execute(llhttp_t* parser, const char* data, size_t len) { - return llhttp__internal_execute(parser, data, data + len); -} - - -void llhttp_settings_init(llhttp_settings_t* settings) { - memset(settings, 0, sizeof(*settings)); -} - - -llhttp_errno_t llhttp_finish(llhttp_t* parser) { - int err; - - /* We're in an error state. Don't bother doing anything. */ - if (parser->error != 0) { - return 0; - } - - switch (parser->finish) { - case HTTP_FINISH_SAFE_WITH_CB: - CALLBACK_MAYBE(parser, on_message_complete); - if (err != HPE_OK) return err; - - /* FALLTHROUGH */ - case HTTP_FINISH_SAFE: - return HPE_OK; - case HTTP_FINISH_UNSAFE: - parser->reason = "Invalid EOF state"; - return HPE_INVALID_EOF_STATE; - default: - abort(); - } -} - - -void llhttp_pause(llhttp_t* parser) { - if (parser->error != HPE_OK) { - return; - } - - parser->error = HPE_PAUSED; - parser->reason = "Paused"; -} - - -void llhttp_resume(llhttp_t* parser) { - if (parser->error != HPE_PAUSED) { - return; - } - - parser->error = 0; -} - - -void llhttp_resume_after_upgrade(llhttp_t* parser) { - if (parser->error != HPE_PAUSED_UPGRADE) { - return; - } - - parser->error = 0; -} - - -llhttp_errno_t llhttp_get_errno(const llhttp_t* parser) { - return parser->error; -} - - -const char* llhttp_get_error_reason(const llhttp_t* parser) { - return parser->reason; -} - - -void llhttp_set_error_reason(llhttp_t* parser, const char* reason) { - parser->reason = reason; -} - - -const char* llhttp_get_error_pos(const llhttp_t* parser) { - return parser->error_pos; -} - - -const char* llhttp_errno_name(llhttp_errno_t err) { -#define HTTP_ERRNO_GEN(CODE, NAME, _) case HPE_##NAME: return "HPE_" #NAME; - switch (err) { - HTTP_ERRNO_MAP(HTTP_ERRNO_GEN) - default: abort(); - } -#undef HTTP_ERRNO_GEN -} - - -const char* llhttp_method_name(llhttp_method_t method) { -#define HTTP_METHOD_GEN(NUM, NAME, STRING) case HTTP_##NAME: return #STRING; - switch (method) { - HTTP_ALL_METHOD_MAP(HTTP_METHOD_GEN) - default: abort(); - } -#undef HTTP_METHOD_GEN -} - - -void llhttp_set_lenient_headers(llhttp_t* parser, int enabled) { - if (enabled) { - parser->lenient_flags |= LENIENT_HEADERS; - } else { - parser->lenient_flags &= ~LENIENT_HEADERS; - } -} - - -void llhttp_set_lenient_chunked_length(llhttp_t* parser, int enabled) { - if (enabled) { - parser->lenient_flags |= LENIENT_CHUNKED_LENGTH; - } else { - parser->lenient_flags &= ~LENIENT_CHUNKED_LENGTH; - } -} - - -void llhttp_set_lenient_keep_alive(llhttp_t* parser, int enabled) { - if (enabled) { - parser->lenient_flags |= LENIENT_KEEP_ALIVE; - } else { - parser->lenient_flags &= ~LENIENT_KEEP_ALIVE; - } -} - -/* Callbacks */ - - -int llhttp__on_message_begin(llhttp_t* s, const char* p, const char* endp) { - int err; - CALLBACK_MAYBE(s, on_message_begin); - return err; -} - - -int llhttp__on_url(llhttp_t* s, const char* p, const char* endp) { - int err; - SPAN_CALLBACK_MAYBE(s, on_url, p, endp - p); - return err; -} - - -int llhttp__on_url_complete(llhttp_t* s, const char* p, const char* endp) { - int err; - CALLBACK_MAYBE(s, on_url_complete); - return err; -} - - -int llhttp__on_status(llhttp_t* s, const char* p, const char* endp) { - int err; - SPAN_CALLBACK_MAYBE(s, on_status, p, endp - p); - return err; -} - - -int llhttp__on_status_complete(llhttp_t* s, const char* p, const char* endp) { - int err; - CALLBACK_MAYBE(s, on_status_complete); - return err; -} - - -int llhttp__on_header_field(llhttp_t* s, const char* p, const char* endp) { - int err; - SPAN_CALLBACK_MAYBE(s, on_header_field, p, endp - p); - return err; -} - - -int llhttp__on_header_field_complete(llhttp_t* s, const char* p, const char* endp) { - int err; - CALLBACK_MAYBE(s, on_header_field_complete); - return err; -} - - -int llhttp__on_header_value(llhttp_t* s, const char* p, const char* endp) { - int err; - SPAN_CALLBACK_MAYBE(s, on_header_value, p, endp - p); - return err; -} - - -int llhttp__on_header_value_complete(llhttp_t* s, const char* p, const char* endp) { - int err; - CALLBACK_MAYBE(s, on_header_value_complete); - return err; -} - - -int llhttp__on_headers_complete(llhttp_t* s, const char* p, const char* endp) { - int err; - CALLBACK_MAYBE(s, on_headers_complete); - return err; -} - - -int llhttp__on_message_complete(llhttp_t* s, const char* p, const char* endp) { - int err; - CALLBACK_MAYBE(s, on_message_complete); - return err; -} - - -int llhttp__on_body(llhttp_t* s, const char* p, const char* endp) { - int err; - SPAN_CALLBACK_MAYBE(s, on_body, p, endp - p); - return err; -} - - -int llhttp__on_chunk_header(llhttp_t* s, const char* p, const char* endp) { - int err; - CALLBACK_MAYBE(s, on_chunk_header); - return err; -} - - -int llhttp__on_chunk_complete(llhttp_t* s, const char* p, const char* endp) { - int err; - CALLBACK_MAYBE(s, on_chunk_complete); - return err; -} - - -/* Private */ - - -void llhttp__debug(llhttp_t* s, const char* p, const char* endp, - const char* msg) { - if (p == endp) { - fprintf(stderr, "p=%p type=%d flags=%02x next=null debug=%s\n", s, s->type, - s->flags, msg); - } else { - fprintf(stderr, "p=%p type=%d flags=%02x next=%02x debug=%s\n", s, - s->type, s->flags, *p, msg); - } -} diff --git a/llhttp/src/native/api.h b/llhttp/src/native/api.h deleted file mode 100644 index d86c022..0000000 --- a/llhttp/src/native/api.h +++ /dev/null @@ -1,256 +0,0 @@ -#ifndef INCLUDE_LLHTTP_API_H_ -#define INCLUDE_LLHTTP_API_H_ -#ifdef __cplusplus -extern "C" { -#endif -#include - -#if defined(__wasm__) -#define LLHTTP_EXPORT __attribute__((visibility("default"))) -#else -#define LLHTTP_EXPORT -#endif - -typedef llhttp__internal_t llhttp_t; -typedef struct llhttp_settings_s llhttp_settings_t; - -typedef int (*llhttp_data_cb)(llhttp_t*, const char *at, size_t length); -typedef int (*llhttp_cb)(llhttp_t*); - -struct llhttp_settings_s { - /* Possible return values 0, -1, `HPE_PAUSED` */ - llhttp_cb on_message_begin; - - /* Possible return values 0, -1, HPE_USER */ - llhttp_data_cb on_url; - llhttp_data_cb on_status; - llhttp_data_cb on_header_field; - llhttp_data_cb on_header_value; - - /* Possible return values: - * 0 - Proceed normally - * 1 - Assume that request/response has no body, and proceed to parsing the - * next message - * 2 - Assume absence of body (as above) and make `llhttp_execute()` return - * `HPE_PAUSED_UPGRADE` - * -1 - Error - * `HPE_PAUSED` - */ - llhttp_cb on_headers_complete; - - /* Possible return values 0, -1, HPE_USER */ - llhttp_data_cb on_body; - - /* Possible return values 0, -1, `HPE_PAUSED` */ - llhttp_cb on_message_complete; - - /* When on_chunk_header is called, the current chunk length is stored - * in parser->content_length. - * Possible return values 0, -1, `HPE_PAUSED` - */ - llhttp_cb on_chunk_header; - llhttp_cb on_chunk_complete; - - /* Information-only callbacks, return value is ignored */ - llhttp_cb on_url_complete; - llhttp_cb on_status_complete; - llhttp_cb on_header_field_complete; - llhttp_cb on_header_value_complete; -}; - -/* Initialize the parser with specific type and user settings. - * - * NOTE: lifetime of `settings` has to be at least the same as the lifetime of - * the `parser` here. In practice, `settings` has to be either a static - * variable or be allocated with `malloc`, `new`, etc. - */ -LLHTTP_EXPORT -void llhttp_init(llhttp_t* parser, llhttp_type_t type, - const llhttp_settings_t* settings); - -#if defined(__wasm__) - -LLHTTP_EXPORT -llhttp_t* llhttp_alloc(llhttp_type_t type); - -LLHTTP_EXPORT -void llhttp_free(llhttp_t* parser); - -LLHTTP_EXPORT -uint8_t llhttp_get_type(llhttp_t* parser); - -LLHTTP_EXPORT -uint8_t llhttp_get_http_major(llhttp_t* parser); - -LLHTTP_EXPORT -uint8_t llhttp_get_http_minor(llhttp_t* parser); - -LLHTTP_EXPORT -uint8_t llhttp_get_method(llhttp_t* parser); - -LLHTTP_EXPORT -int llhttp_get_status_code(llhttp_t* parser); - -LLHTTP_EXPORT -uint8_t llhttp_get_upgrade(llhttp_t* parser); - -#endif // defined(__wasm__) - -/* Reset an already initialized parser back to the start state, preserving the - * existing parser type, callback settings, user data, and lenient flags. - */ -LLHTTP_EXPORT -void llhttp_reset(llhttp_t* parser); - -/* Initialize the settings object */ -LLHTTP_EXPORT -void llhttp_settings_init(llhttp_settings_t* settings); - -/* Parse full or partial request/response, invoking user callbacks along the - * way. - * - * If any of `llhttp_data_cb` returns errno not equal to `HPE_OK` - the parsing - * interrupts, and such errno is returned from `llhttp_execute()`. If - * `HPE_PAUSED` was used as a errno, the execution can be resumed with - * `llhttp_resume()` call. - * - * In a special case of CONNECT/Upgrade request/response `HPE_PAUSED_UPGRADE` - * is returned after fully parsing the request/response. If the user wishes to - * continue parsing, they need to invoke `llhttp_resume_after_upgrade()`. - * - * NOTE: if this function ever returns a non-pause type error, it will continue - * to return the same error upon each successive call up until `llhttp_init()` - * is called. - */ -LLHTTP_EXPORT -llhttp_errno_t llhttp_execute(llhttp_t* parser, const char* data, size_t len); - -/* This method should be called when the other side has no further bytes to - * send (e.g. shutdown of readable side of the TCP connection.) - * - * Requests without `Content-Length` and other messages might require treating - * all incoming bytes as the part of the body, up to the last byte of the - * connection. This method will invoke `on_message_complete()` callback if the - * request was terminated safely. Otherwise a error code would be returned. - */ -LLHTTP_EXPORT -llhttp_errno_t llhttp_finish(llhttp_t* parser); - -/* Returns `1` if the incoming message is parsed until the last byte, and has - * to be completed by calling `llhttp_finish()` on EOF - */ -LLHTTP_EXPORT -int llhttp_message_needs_eof(const llhttp_t* parser); - -/* Returns `1` if there might be any other messages following the last that was - * successfully parsed. - */ -LLHTTP_EXPORT -int llhttp_should_keep_alive(const llhttp_t* parser); - -/* Make further calls of `llhttp_execute()` return `HPE_PAUSED` and set - * appropriate error reason. - * - * Important: do not call this from user callbacks! User callbacks must return - * `HPE_PAUSED` if pausing is required. - */ -LLHTTP_EXPORT -void llhttp_pause(llhttp_t* parser); - -/* Might be called to resume the execution after the pause in user's callback. - * See `llhttp_execute()` above for details. - * - * Call this only if `llhttp_execute()` returns `HPE_PAUSED`. - */ -LLHTTP_EXPORT -void llhttp_resume(llhttp_t* parser); - -/* Might be called to resume the execution after the pause in user's callback. - * See `llhttp_execute()` above for details. - * - * Call this only if `llhttp_execute()` returns `HPE_PAUSED_UPGRADE` - */ -LLHTTP_EXPORT -void llhttp_resume_after_upgrade(llhttp_t* parser); - -/* Returns the latest return error */ -LLHTTP_EXPORT -llhttp_errno_t llhttp_get_errno(const llhttp_t* parser); - -/* Returns the verbal explanation of the latest returned error. - * - * Note: User callback should set error reason when returning the error. See - * `llhttp_set_error_reason()` for details. - */ -LLHTTP_EXPORT -const char* llhttp_get_error_reason(const llhttp_t* parser); - -/* Assign verbal description to the returned error. Must be called in user - * callbacks right before returning the errno. - * - * Note: `HPE_USER` error code might be useful in user callbacks. - */ -LLHTTP_EXPORT -void llhttp_set_error_reason(llhttp_t* parser, const char* reason); - -/* Returns the pointer to the last parsed byte before the returned error. The - * pointer is relative to the `data` argument of `llhttp_execute()`. - * - * Note: this method might be useful for counting the number of parsed bytes. - */ -LLHTTP_EXPORT -const char* llhttp_get_error_pos(const llhttp_t* parser); - -/* Returns textual name of error code */ -LLHTTP_EXPORT -const char* llhttp_errno_name(llhttp_errno_t err); - -/* Returns textual name of HTTP method */ -LLHTTP_EXPORT -const char* llhttp_method_name(llhttp_method_t method); - - -/* Enables/disables lenient header value parsing (disabled by default). - * - * Lenient parsing disables header value token checks, extending llhttp's - * protocol support to highly non-compliant clients/server. No - * `HPE_INVALID_HEADER_TOKEN` will be raised for incorrect header values when - * lenient parsing is "on". - * - * **(USE AT YOUR OWN RISK)** - */ -LLHTTP_EXPORT -void llhttp_set_lenient_headers(llhttp_t* parser, int enabled); - - -/* Enables/disables lenient handling of conflicting `Transfer-Encoding` and - * `Content-Length` headers (disabled by default). - * - * Normally `llhttp` would error when `Transfer-Encoding` is present in - * conjunction with `Content-Length`. This error is important to prevent HTTP - * request smuggling, but may be less desirable for small number of cases - * involving legacy servers. - * - * **(USE AT YOUR OWN RISK)** - */ -LLHTTP_EXPORT -void llhttp_set_lenient_chunked_length(llhttp_t* parser, int enabled); - - -/* Enables/disables lenient handling of `Connection: close` and HTTP/1.0 - * requests responses. - * - * Normally `llhttp` would error on (in strict mode) or discard (in loose mode) - * the HTTP request/response after the request/response with `Connection: close` - * and `Content-Length`. This is important to prevent cache poisoning attacks, - * but might interact badly with outdated and insecure clients. With this flag - * the extra request/response will be parsed normally. - * - * **(USE AT YOUR OWN RISK)** - */ -void llhttp_set_lenient_keep_alive(llhttp_t* parser, int enabled); - -#ifdef __cplusplus -} /* extern "C" */ -#endif -#endif /* INCLUDE_LLHTTP_API_H_ */ diff --git a/llhttp/src/native/http.c b/llhttp/src/native/http.c deleted file mode 100644 index e6279f3..0000000 --- a/llhttp/src/native/http.c +++ /dev/null @@ -1,149 +0,0 @@ -#include -#ifndef LLHTTP__TEST -# include "llhttp.h" -#else -# define llhttp_t llparse_t -#endif /* */ - -int llhttp_message_needs_eof(const llhttp_t* parser); -int llhttp_should_keep_alive(const llhttp_t* parser); - -int llhttp__before_headers_complete(llhttp_t* parser, const char* p, - const char* endp) { - /* Set this here so that on_headers_complete() callbacks can see it */ - if ((parser->flags & F_UPGRADE) && - (parser->flags & F_CONNECTION_UPGRADE)) { - /* For responses, "Upgrade: foo" and "Connection: upgrade" are - * mandatory only when it is a 101 Switching Protocols response, - * otherwise it is purely informational, to announce support. - */ - parser->upgrade = - (parser->type == HTTP_REQUEST || parser->status_code == 101); - } else { - parser->upgrade = (parser->method == HTTP_CONNECT); - } - return 0; -} - - -/* Return values: - * 0 - No body, `restart`, message_complete - * 1 - CONNECT request, `restart`, message_complete, and pause - * 2 - chunk_size_start - * 3 - body_identity - * 4 - body_identity_eof - * 5 - invalid transfer-encoding for request - */ -int llhttp__after_headers_complete(llhttp_t* parser, const char* p, - const char* endp) { - int hasBody; - - hasBody = parser->flags & F_CHUNKED || parser->content_length > 0; - if (parser->upgrade && (parser->method == HTTP_CONNECT || - (parser->flags & F_SKIPBODY) || !hasBody)) { - /* Exit, the rest of the message is in a different protocol. */ - return 1; - } - - if (parser->flags & F_SKIPBODY) { - return 0; - } else if (parser->flags & F_CHUNKED) { - /* chunked encoding - ignore Content-Length header, prepare for a chunk */ - return 2; - } else if (parser->flags & F_TRANSFER_ENCODING) { - if (parser->type == HTTP_REQUEST && - (parser->lenient_flags & LENIENT_CHUNKED_LENGTH) == 0) { - /* RFC 7230 3.3.3 */ - - /* If a Transfer-Encoding header field - * is present in a request and the chunked transfer coding is not - * the final encoding, the message body length cannot be determined - * reliably; the server MUST respond with the 400 (Bad Request) - * status code and then close the connection. - */ - return 5; - } else { - /* RFC 7230 3.3.3 */ - - /* If a Transfer-Encoding header field is present in a response and - * the chunked transfer coding is not the final encoding, the - * message body length is determined by reading the connection until - * it is closed by the server. - */ - return 4; - } - } else { - if (!(parser->flags & F_CONTENT_LENGTH)) { - if (!llhttp_message_needs_eof(parser)) { - /* Assume content-length 0 - read the next */ - return 0; - } else { - /* Read body until EOF */ - return 4; - } - } else if (parser->content_length == 0) { - /* Content-Length header given but zero: Content-Length: 0\r\n */ - return 0; - } else { - /* Content-Length header given and non-zero */ - return 3; - } - } -} - - -int llhttp__after_message_complete(llhttp_t* parser, const char* p, - const char* endp) { - int should_keep_alive; - - should_keep_alive = llhttp_should_keep_alive(parser); - parser->finish = HTTP_FINISH_SAFE; - parser->flags = 0; - - /* NOTE: this is ignored in loose parsing mode */ - return should_keep_alive; -} - - -int llhttp_message_needs_eof(const llhttp_t* parser) { - if (parser->type == HTTP_REQUEST) { - return 0; - } - - /* See RFC 2616 section 4.4 */ - if (parser->status_code / 100 == 1 || /* 1xx e.g. Continue */ - parser->status_code == 204 || /* No Content */ - parser->status_code == 304 || /* Not Modified */ - (parser->flags & F_SKIPBODY)) { /* response to a HEAD request */ - return 0; - } - - /* RFC 7230 3.3.3, see `llhttp__after_headers_complete` */ - if ((parser->flags & F_TRANSFER_ENCODING) && - (parser->flags & F_CHUNKED) == 0) { - return 1; - } - - if (parser->flags & (F_CHUNKED | F_CONTENT_LENGTH)) { - return 0; - } - - return 1; -} - - -int llhttp_should_keep_alive(const llhttp_t* parser) { - if (parser->http_major > 0 && parser->http_minor > 0) { - /* HTTP/1.1 */ - if (parser->flags & F_CONNECTION_CLOSE) { - return 0; - } - } else { - /* HTTP/1.0 or earlier */ - if (!(parser->flags & F_CONNECTION_KEEP_ALIVE)) { - return 0; - } - } - - return !llhttp_message_needs_eof(parser); -} diff --git a/llhttp/test/fixtures/extra.c b/llhttp/test/fixtures/extra.c deleted file mode 100644 index 7686b65..0000000 --- a/llhttp/test/fixtures/extra.c +++ /dev/null @@ -1,200 +0,0 @@ -#include - -#include "fixture.h" - -int llhttp__on_url(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - - return llparse__print_span("url", p, endp); -} - - -int llhttp__on_url_complete(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - llparse__print(p, endp, "url complete"); - return 0; -} - - -int llhttp__on_url_schema(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - return llparse__print_span("url.schema", p, endp); -} - - -int llhttp__on_url_host(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - return llparse__print_span("url.host", p, endp); -} - - -int llhttp__on_url_path(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - return llparse__print_span("url.path", p, endp); -} - - -int llhttp__on_url_query(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - return llparse__print_span("url.query", p, endp); -} - - -int llhttp__on_url_fragment(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - return llparse__print_span("url.fragment", p, endp); -} - - -#ifdef LLHTTP__TEST_HTTP - -void llhttp__test_init_request(llparse_t* s) { - s->type = HTTP_REQUEST; -} - - -void llhttp__test_init_response(llparse_t* s) { - s->type = HTTP_RESPONSE; -} - - -void llhttp__test_init_request_lenient_headers(llparse_t* s) { - llhttp__test_init_request(s); - s->lenient_flags |= LENIENT_HEADERS; -} - - -void llhttp__test_init_request_lenient_chunked_length(llparse_t* s) { - llhttp__test_init_request(s); - s->lenient_flags |= LENIENT_CHUNKED_LENGTH; -} - - -void llhttp__test_init_request_lenient_keep_alive(llparse_t* s) { - llhttp__test_init_request(s); - s->lenient_flags |= LENIENT_KEEP_ALIVE; -} - - -void llhttp__test_init_response_lenient_keep_alive(llparse_t* s) { - llhttp__test_init_response(s); - s->lenient_flags |= LENIENT_KEEP_ALIVE; -} - - -void llhttp__test_finish(llparse_t* s) { - llparse__print(NULL, NULL, "finish=%d", s->finish); -} - - -int llhttp__on_status(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - return llparse__print_span("status", p, endp); -} - - -int llhttp__on_status_complete(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - llparse__print(p, endp, "status complete"); - return 0; -} - - -int llhttp__on_header_field(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - return llparse__print_span("header_field", p, endp); -} - - -int llhttp__on_header_field_complete(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - llparse__print(p, endp, "header_field complete"); - return 0; -} - - -int llhttp__on_header_value(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - return llparse__print_span("header_value", p, endp); -} - - -int llhttp__on_header_value_complete(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - llparse__print(p, endp, "header_value complete"); - return 0; -} - - -int llhttp__on_headers_complete(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - - if (s->type == HTTP_REQUEST) { - llparse__print(p, endp, - "headers complete method=%d v=%d/%d flags=%x content_length=%llu", - s->method, s->http_major, s->http_minor, s->flags, s->content_length); - } else if (s->type == HTTP_RESPONSE) { - llparse__print(p, endp, - "headers complete status=%d v=%d/%d flags=%x content_length=%llu", - s->status_code, s->http_major, s->http_minor, s->flags, - s->content_length); - } else { - llparse__print(p, endp, "invalid headers complete"); - } - return 0; -} - - -int llhttp__on_message_begin(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - llparse__print(p, endp, "message begin"); - return 0; -} - - -int llhttp__on_message_complete(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - llparse__print(p, endp, "message complete"); - return 0; -} - - -int llhttp__on_body(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - return llparse__print_span("body", p, endp); -} - - -int llhttp__on_chunk_header(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - llparse__print(p, endp, "chunk header len=%d", (int) s->content_length); - return 0; -} - - -int llhttp__on_chunk_complete(llparse_t* s, const char* p, const char* endp) { - if (llparse__in_bench) - return 0; - llparse__print(p, endp, "chunk complete"); - return 0; -} - -#endif /* LLHTTP__TEST_HTTP */ diff --git a/llhttp/test/fixtures/index.ts b/llhttp/test/fixtures/index.ts deleted file mode 100644 index ef8e794..0000000 --- a/llhttp/test/fixtures/index.ts +++ /dev/null @@ -1,82 +0,0 @@ -import * as fs from 'fs'; -import { ICompilerResult, LLParse } from 'llparse'; -import { Dot } from 'llparse-dot'; -import { - Fixture, FixtureResult, IFixtureBuildOptions, -} from 'llparse-test-fixture'; -import * as path from 'path'; - -import * as llhttp from '../../src/llhttp'; - -export type TestType = 'request' | 'response' | 'request-lenient-headers' | - 'request-lenient-chunked-length' | 'request-lenient-keep-alive' | - 'response-lenient-keep-alive' | 'request-finish' | 'response-finish' | - 'none' | 'url'; - -export { FixtureResult }; - -const BUILD_DIR = path.join(__dirname, '..', 'tmp'); -const CHEADERS_FILE = path.join(BUILD_DIR, 'cheaders.h'); - -const cheaders = new llhttp.CHeaders().build(); -try { - fs.mkdirSync(BUILD_DIR); -} catch (e) { - // no-op -} -fs.writeFileSync(CHEADERS_FILE, cheaders); - -const fixtures = new Fixture({ - buildDir: path.join(__dirname, '..', 'tmp'), - extra: [ - '-msse4.2', - '-DLLHTTP__TEST', - '-DLLPARSE__ERROR_PAUSE=' + llhttp.constants.ERROR.PAUSED, - '-include', CHEADERS_FILE, - path.join(__dirname, 'extra.c'), - ], - maxParallel: process.env.LLPARSE_DEBUG ? 1 : undefined, -}); - -const cache: Map = new Map(); - -export async function build( - llparse: LLParse, node: any, outFile: string, - options: IFixtureBuildOptions = {}, - ty: TestType = 'none'): Promise { - const dot = new Dot(); - fs.writeFileSync(path.join(BUILD_DIR, outFile + '.dot'), - dot.build(node)); - - let artifacts: ICompilerResult; - if (cache.has(node)) { - artifacts = cache.get(node)!; - } else { - artifacts = llparse.build(node, { - c: { header: outFile }, - debug: process.env.LLPARSE_DEBUG ? 'llparse__debug' : undefined, - }); - cache.set(node, artifacts); - } - - const extra = options.extra === undefined ? [] : options.extra.slice(); - if (ty === 'request' || ty === 'response' || - ty === 'request-lenient-headers' || - ty === 'request-lenient-chunked-length' || - ty === 'request-lenient-keep-alive' || - ty === 'response-lenient-keep-alive') { - extra.push( - `-DLLPARSE__TEST_INIT=llhttp__test_init_${ty.replace(/-/g, '_')}`); - } else if (ty === 'request-finish' || ty === 'response-finish') { - if (ty === 'request-finish') { - extra.push('-DLLPARSE__TEST_INIT=llhttp__test_init_request'); - } else { - extra.push('-DLLPARSE__TEST_INIT=llhttp__test_init_response'); - } - extra.push('-DLLPARSE__TEST_FINISH=llhttp__test_finish'); - } - - return await fixtures.build(artifacts, outFile, Object.assign(options, { - extra, - })); -} diff --git a/llhttp/test/fuzzers/fuzz_parser.c b/llhttp/test/fuzzers/fuzz_parser.c deleted file mode 100644 index 60d00ae..0000000 --- a/llhttp/test/fuzzers/fuzz_parser.c +++ /dev/null @@ -1,45 +0,0 @@ -#include "llhttp.h" -#include -#include -#include - -int handle_on_message_complete(llhttp_t *arg) { return 0; } - -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - llhttp_t parser; - llhttp_settings_t settings; - llhttp_type_t http_type; - - /* We need four bytes to determine variable parameters */ - if (size < 4) { - return 0; - } - - int headers = (data[0] & 0x01) == 1; - int chunked_length = (data[1] & 0x01) == 1; - int keep_alive = (data[2] & 0x01) == 1; - if (data[0] % 3 == 0) { - http_type = HTTP_BOTH; - } else if (data[0] % 3 == 1) { - http_type = HTTP_REQUEST; - } else { - http_type = HTTP_RESPONSE; - } - data += 4; - size -= 4; - - /* Initialize user callbacks and settings */ - llhttp_settings_init(&settings); - - /* Set user callback */ - settings.on_message_complete = handle_on_message_complete; - - llhttp_init(&parser, http_type, &settings); - llhttp_set_lenient_headers(&parser, headers); - llhttp_set_lenient_chunked_length(&parser, chunked_length); - llhttp_set_lenient_keep_alive(&parser, keep_alive); - - llhttp_execute(&parser, data, size); - - return 0; -} diff --git a/llhttp/test/md-test.ts b/llhttp/test/md-test.ts deleted file mode 100644 index 6af8f86..0000000 --- a/llhttp/test/md-test.ts +++ /dev/null @@ -1,290 +0,0 @@ -import * as assert from 'assert'; -import * as fs from 'fs'; -import { LLParse } from 'llparse'; -import { Group, MDGator, Metadata, Test } from 'mdgator'; -import * as path from 'path'; -import * as vm from 'vm'; - -import * as llhttp from '../src/llhttp'; -import { build, FixtureResult, TestType } from './fixtures'; - -// -// Cache nodes/llparse instances ahead of time -// (different types of tests will re-use them) -// - -function buildNode(mode: llhttp.HTTPMode) { - const p = new LLParse(); - const instance = new llhttp.HTTP(p, mode); - - return { llparse: p, entry: instance.build().entry }; -} - -const httpNode = { - loose: buildNode('loose'), - strict: buildNode('strict'), -}; - -function buildURL(mode: llhttp.HTTPMode) { - const p = new LLParse(); - const instance = new llhttp.URL(p, mode, true); - - const node = instance.build(); - - // Loop - node.exit.toHTTP.otherwise(node.entry.normal); - node.exit.toHTTP09.otherwise(node.entry.normal); - - return { llparse: p, entry: node.entry.normal }; -} - -const urlNode = { - loose: buildURL('loose'), - strict: buildURL('strict'), -}; - -// -// Build binaries using cached nodes/llparse -// - -async function buildMode(mode: llhttp.HTTPMode, ty: TestType) - : Promise { - let node; - let prefix: string; - let extra: ReadonlyArray; - if (ty === 'url') { - node = urlNode[mode]; - prefix = 'url'; - extra = []; - } else { - node = httpNode[mode]; - prefix = 'http'; - extra = [ - '-DLLHTTP__TEST_HTTP', - path.join(__dirname, '..', 'src', 'native', 'http.c'), - ]; - } - - return await build(node.llparse, node.entry, `${prefix}-${mode}-${ty}`, { - extra, - }, ty); -} - -interface IFixtureMap { - [key: string]: { [key: string]: Promise }; -} - -const http: IFixtureMap = { - loose: { - 'none': buildMode('loose', 'none'), - 'request': buildMode('loose', 'request'), - 'request-finish': buildMode('loose', 'request-finish'), - 'request-lenient-chunked-length': - buildMode('loose', 'request-lenient-chunked-length'), - 'request-lenient-headers': buildMode('loose', 'request-lenient-headers'), - 'request-lenient-keep-alive': buildMode( - 'loose', 'request-lenient-keep-alive'), - 'response': buildMode('loose', 'response'), - 'response-finish': buildMode('loose', 'response-finish'), - 'response-lenient-keep-alive': buildMode( - 'loose', 'response-lenient-keep-alive'), - 'url': buildMode('loose', 'url'), - }, - strict: { - 'none': buildMode('strict', 'none'), - 'request': buildMode('strict', 'request'), - 'request-finish': buildMode('strict', 'request-finish'), - 'request-lenient-chunked-length': - buildMode('strict', 'request-lenient-chunked-length'), - 'request-lenient-headers': buildMode('strict', 'request-lenient-headers'), - 'request-lenient-keep-alive': buildMode( - 'strict', 'request-lenient-keep-alive'), - 'response': buildMode('strict', 'response'), - 'response-finish': buildMode('strict', 'response-finish'), - 'response-lenient-keep-alive': buildMode( - 'strict', 'response-lenient-keep-alive'), - 'url': buildMode('strict', 'url'), - }, -}; - -// -// Run test suite -// - -function run(name: string): void { - const md = new MDGator(); - - const raw = fs.readFileSync(path.join(__dirname, name + '.md')).toString(); - const groups = md.parse(raw); - - function runSingleTest(mode: llhttp.HTTPMode, ty: TestType, meta: any, - input: string, - expected: ReadonlyArray): void { - it(`should pass in mode="${mode}" and for type="${ty}"`, async () => { - const binary = await http[mode][ty]; - await binary.check(input, expected, { - noScan: meta.noScan === true, - }); - }); - } - - function runTest(test: Test) { - describe(test.name + ` at ${name}.md:${test.line + 1}`, () => { - let modes: llhttp.HTTPMode[] = [ 'strict', 'loose' ]; - let types: TestType[] = [ 'none' ]; - - const isURL = test.values.has('url'); - const inputKey = isURL ? 'url' : 'http'; - - assert(test.values.has(inputKey), - `Missing "${inputKey}" code in md file`); - assert.strictEqual(test.values.get(inputKey)!.length, 1, - `Expected just one "${inputKey}" input`); - - let meta: Metadata; - if (test.meta.has(inputKey)) { - meta = test.meta.get(inputKey)![0]!; - } else { - assert(isURL, 'Missing required http metadata'); - meta = {}; - } - - if (isURL) { - types = [ 'url' ]; - } else { - assert(meta.hasOwnProperty('type'), 'Missing required `type` metadata'); - if (meta.type === 'request') { - types.push('request'); - } else if (meta.type === 'response') { - types.push('response'); - } else if (meta.type === 'request-only') { - types = [ 'request' ]; - } else if (meta.type === 'request-lenient-headers') { - types = [ 'request-lenient-headers' ]; - } else if (meta.type === 'request-lenient-chunked-length') { - types = [ 'request-lenient-chunked-length' ]; - } else if (meta.type === 'request-lenient-keep-alive') { - types = [ 'request-lenient-keep-alive' ]; - } else if (meta.type === 'response-lenient-keep-alive') { - types = [ 'response-lenient-keep-alive' ]; - } else if (meta.type === 'response-only') { - types = [ 'response' ]; - } else if (meta.type === 'request-finish') { - types = [ 'request-finish' ]; - } else if (meta.type === 'response-finish') { - types = [ 'response-finish' ]; - } else { - throw new Error(`Invalid value of \`type\` metadata: "${meta.type}"`); - } - } - - assert(test.values.has('log'), 'Missing `log` code in md file'); - - assert.strictEqual(test.values.get('log')!.length, 1, - 'Expected just one output'); - - if (meta.mode === 'strict') { - modes = [ 'strict' ]; - } else if (meta.mode === 'loose') { - modes = [ 'loose' ]; - } else { - assert(!meta.hasOwnProperty('mode'), - `Invalid value of \`mode\` metadata: "${meta.mode}"`); - } - - let input: string = test.values.get(inputKey)![0]; - let expected: string = test.values.get('log')![0]; - - // Remove trailing newline - input = input.replace(/\n$/, ''); - - // Remove escaped newlines - input = input.replace(/\\(\r\n|\r|\n)/g, ''); - - // Normalize all newlines - input = input.replace(/\r\n|\r|\n/g, '\r\n'); - - // Replace escaped CRLF, tabs, form-feed - input = input.replace(/\\r/g, '\r'); - input = input.replace(/\\n/g, '\n'); - input = input.replace(/\\t/g, '\t'); - input = input.replace(/\\f/g, '\f'); - input = input.replace(/\\x([0-9a-fA-F]+)/g, (all, hex) => { - return String.fromCharCode(parseInt(hex, 16)); - }); - - // Useful in token tests - input = input.replace(/\\([0-7]{1,3})/g, (_, digits) => { - return String.fromCharCode(parseInt(digits, 8)); - }); - - // Evaluate inline JavaScript - input = input.replace(/\$\{(.+?)\}/g, (_, code) => { - return vm.runInNewContext(code) + ''; - }); - - // Escape first symbol `\r` or `\n`, `|`, `&` for Windows - if (process.platform === 'win32') { - const firstByte = Buffer.from(input)[0]; - if (firstByte === 0x0a || firstByte === 0x0d) { - input = '\\' + input; - } - - input = input.replace(/\|/g, '^|'); - input = input.replace(/&/g, '^&'); - } - - // Replace escaped tabs/form-feed in expected too - expected = expected.replace(/\\t/g, '\t'); - expected = expected.replace(/\\f/g, '\f'); - - // Split - const expectedLines = expected.split(/\n/g).slice(0, -1); - - const fullExpected = expectedLines.map((line) => { - if (line.startsWith('/')) { - return new RegExp(line.trim().slice(1, -1)); - } else { - return line; - } - }); - - modes.forEach((mode) => { - types.forEach((ty) => { - runSingleTest(mode, ty, meta, input, fullExpected); - }); - }); - }); - } - - function runGroup(group: Group) { - describe(group.name + ` at ${name}.md:${group.line + 1}`, function() { - this.timeout(60000); - - group.children.forEach((child) => runGroup(child)); - - group.tests.forEach((test) => runTest(test)); - }); - } - - groups.forEach((group) => runGroup(group)); -} - -run('request/sample'); -run('request/lenient-headers'); -run('request/method'); -run('request/uri'); -run('request/connection'); -run('request/content-length'); -run('request/transfer-encoding'); -run('request/invalid'); -run('request/finish'); - -run('response/sample'); -run('response/connection'); -run('response/content-length'); -run('response/transfer-encoding'); -run('response/invalid'); -run('response/finish'); - -run('url'); diff --git a/llhttp/test/request/connection.md b/llhttp/test/request/connection.md deleted file mode 100644 index ef0393a..0000000 --- a/llhttp/test/request/connection.md +++ /dev/null @@ -1,582 +0,0 @@ -Connection header -================= - -## `keep-alive` - -### Setting flag - - -```http -PUT /url HTTP/1.1 -Connection: keep-alive - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=10 span[header_field]="Connection" -off=30 header_field complete -off=31 len=10 span[header_value]="keep-alive" -off=43 header_value complete -off=45 headers complete method=4 v=1/1 flags=1 content_length=0 -off=45 message complete -``` - -### Restarting when keep-alive is explicitly - - -```http -PUT /url HTTP/1.1 -Connection: keep-alive - -PUT /url HTTP/1.1 -Connection: keep-alive - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=10 span[header_field]="Connection" -off=30 header_field complete -off=31 len=10 span[header_value]="keep-alive" -off=43 header_value complete -off=45 headers complete method=4 v=1/1 flags=1 content_length=0 -off=45 message complete -off=45 message begin -off=49 len=4 span[url]="/url" -off=54 url complete -off=64 len=10 span[header_field]="Connection" -off=75 header_field complete -off=76 len=10 span[header_value]="keep-alive" -off=88 header_value complete -off=90 headers complete method=4 v=1/1 flags=1 content_length=0 -off=90 message complete -``` - -### No restart when keep-alive is off (1.0) and parser is in strict mode - - -```http -PUT /url HTTP/1.0 - -PUT /url HTTP/1.1 - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=21 headers complete method=4 v=1/0 flags=0 content_length=0 -off=21 message complete -off=22 error code=5 reason="Data after `Connection: close`" -``` - -### Resetting flags when keep-alive is off (1.0) and parser is in lenient mode - -Even though we allow restarts in loose mode, the flags should be still set to -`0` upon restart. - - -```http -PUT /url HTTP/1.0 -Content-Length: 0 - -PUT /url HTTP/1.1 -Transfer-Encoding: chunked - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=14 span[header_field]="Content-Length" -off=34 header_field complete -off=35 len=1 span[header_value]="0" -off=38 header_value complete -off=40 headers complete method=4 v=1/0 flags=20 content_length=0 -off=40 message complete -off=40 message begin -off=44 len=4 span[url]="/url" -off=49 url complete -off=59 len=17 span[header_field]="Transfer-Encoding" -off=77 header_field complete -off=78 len=7 span[header_value]="chunked" -off=87 header_value complete -off=89 headers complete method=4 v=1/1 flags=208 content_length=0 -``` - -### CRLF between requests, implicit `keep-alive` - - -```http -POST / HTTP/1.1 -Host: www.example.com -Content-Type: application/x-www-form-urlencoded -Content-Length: 4 - -q=42 - -GET / HTTP/1.1 -``` -_Note the trailing CRLF above_ - -```log -off=0 message begin -off=5 len=1 span[url]="/" -off=7 url complete -off=17 len=4 span[header_field]="Host" -off=22 header_field complete -off=23 len=15 span[header_value]="www.example.com" -off=40 header_value complete -off=40 len=12 span[header_field]="Content-Type" -off=53 header_field complete -off=54 len=33 span[header_value]="application/x-www-form-urlencoded" -off=89 header_value complete -off=89 len=14 span[header_field]="Content-Length" -off=104 header_field complete -off=105 len=1 span[header_value]="4" -off=108 header_value complete -off=110 headers complete method=3 v=1/1 flags=20 content_length=4 -off=110 len=4 span[body]="q=42" -off=114 message complete -off=118 message begin -off=122 len=1 span[url]="/" -off=124 url complete -``` - -### Not treating `\r` as `-` - - -```http -PUT /url HTTP/1.1 -Connection: keep\ralive - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=10 span[header_field]="Connection" -off=30 header_field complete -off=31 len=4 span[header_value]="keep" -off=36 error code=3 reason="Missing expected LF after header value" -``` - -## `close` - -### Setting flag on `close` - - -```http -PUT /url HTTP/1.1 -Connection: close - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=10 span[header_field]="Connection" -off=30 header_field complete -off=31 len=5 span[header_value]="close" -off=38 header_value complete -off=40 headers complete method=4 v=1/1 flags=2 content_length=0 -off=40 message complete -``` - -### CRLF between requests, explicit `close` (strict mode) - -`close` means closed connection in strict mode. - - -```http -POST / HTTP/1.1 -Host: www.example.com -Content-Type: application/x-www-form-urlencoded -Content-Length: 4 -Connection: close - -q=42 - -GET / HTTP/1.1 -``` -_Note the trailing CRLF above_ - -```log -off=0 message begin -off=5 len=1 span[url]="/" -off=7 url complete -off=17 len=4 span[header_field]="Host" -off=22 header_field complete -off=23 len=15 span[header_value]="www.example.com" -off=40 header_value complete -off=40 len=12 span[header_field]="Content-Type" -off=53 header_field complete -off=54 len=33 span[header_value]="application/x-www-form-urlencoded" -off=89 header_value complete -off=89 len=14 span[header_field]="Content-Length" -off=104 header_field complete -off=105 len=1 span[header_value]="4" -off=108 header_value complete -off=108 len=10 span[header_field]="Connection" -off=119 header_field complete -off=120 len=5 span[header_value]="close" -off=127 header_value complete -off=129 headers complete method=3 v=1/1 flags=22 content_length=4 -off=129 len=4 span[body]="q=42" -off=133 message complete -off=138 error code=5 reason="Data after `Connection: close`" -``` - -### CRLF between requests, explicit `close` (lenient mode) - -Loose mode is more lenient, and allows further requests. - - -```http -POST / HTTP/1.1 -Host: www.example.com -Content-Type: application/x-www-form-urlencoded -Content-Length: 4 -Connection: close - -q=42 - -GET / HTTP/1.1 -``` -_Note the trailing CRLF above_ - -```log -off=0 message begin -off=5 len=1 span[url]="/" -off=7 url complete -off=17 len=4 span[header_field]="Host" -off=22 header_field complete -off=23 len=15 span[header_value]="www.example.com" -off=40 header_value complete -off=40 len=12 span[header_field]="Content-Type" -off=53 header_field complete -off=54 len=33 span[header_value]="application/x-www-form-urlencoded" -off=89 header_value complete -off=89 len=14 span[header_field]="Content-Length" -off=104 header_field complete -off=105 len=1 span[header_value]="4" -off=108 header_value complete -off=108 len=10 span[header_field]="Connection" -off=119 header_field complete -off=120 len=5 span[header_value]="close" -off=127 header_value complete -off=129 headers complete method=3 v=1/1 flags=22 content_length=4 -off=129 len=4 span[body]="q=42" -off=133 message complete -off=137 message begin -off=141 len=1 span[url]="/" -off=143 url complete -``` - -## Parsing multiple tokens - -### Sample - - -```http -PUT /url HTTP/1.1 -Connection: close, token, upgrade, token, keep-alive - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=10 span[header_field]="Connection" -off=30 header_field complete -off=31 len=40 span[header_value]="close, token, upgrade, token, keep-alive" -off=73 header_value complete -off=75 headers complete method=4 v=1/1 flags=7 content_length=0 -off=75 message complete -``` - -### Multiple tokens with folding - - -```http -GET /demo HTTP/1.1 -Host: example.com -Connection: Something, - Upgrade, ,Keep-Alive -Sec-WebSocket-Key2: 12998 5 Y3 1 .P00 -Sec-WebSocket-Protocol: sample -Upgrade: WebSocket -Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5 -Origin: http://example.com - -Hot diggity dogg -``` - -```log -off=0 message begin -off=4 len=5 span[url]="/demo" -off=10 url complete -off=20 len=4 span[header_field]="Host" -off=25 header_field complete -off=26 len=11 span[header_value]="example.com" -off=39 header_value complete -off=39 len=10 span[header_field]="Connection" -off=50 header_field complete -off=51 len=10 span[header_value]="Something," -off=63 len=21 span[header_value]=" Upgrade, ,Keep-Alive" -off=86 header_value complete -off=86 len=18 span[header_field]="Sec-WebSocket-Key2" -off=105 header_field complete -off=106 len=18 span[header_value]="12998 5 Y3 1 .P00" -off=126 header_value complete -off=126 len=22 span[header_field]="Sec-WebSocket-Protocol" -off=149 header_field complete -off=150 len=6 span[header_value]="sample" -off=158 header_value complete -off=158 len=7 span[header_field]="Upgrade" -off=166 header_field complete -off=167 len=9 span[header_value]="WebSocket" -off=178 header_value complete -off=178 len=18 span[header_field]="Sec-WebSocket-Key1" -off=197 header_field complete -off=198 len=20 span[header_value]="4 @1 46546xW%0l 1 5" -off=220 header_value complete -off=220 len=6 span[header_field]="Origin" -off=227 header_field complete -off=228 len=18 span[header_value]="http://example.com" -off=248 header_value complete -off=250 headers complete method=1 v=1/1 flags=15 content_length=0 -off=250 message complete -off=250 error code=22 reason="Pause on CONNECT/Upgrade" -``` - -### Multiple tokens with folding and LWS - - -```http -GET /demo HTTP/1.1 -Connection: keep-alive, upgrade -Upgrade: WebSocket - -Hot diggity dogg -``` - -```log -off=0 message begin -off=4 len=5 span[url]="/demo" -off=10 url complete -off=20 len=10 span[header_field]="Connection" -off=31 header_field complete -off=32 len=19 span[header_value]="keep-alive, upgrade" -off=53 header_value complete -off=53 len=7 span[header_field]="Upgrade" -off=61 header_field complete -off=62 len=9 span[header_value]="WebSocket" -off=73 header_value complete -off=75 headers complete method=1 v=1/1 flags=15 content_length=0 -off=75 message complete -off=75 error code=22 reason="Pause on CONNECT/Upgrade" -``` - -### Multiple tokens with folding, LWS, and CRLF - - -```http -GET /demo HTTP/1.1 -Connection: keep-alive, \r\n upgrade -Upgrade: WebSocket - -Hot diggity dogg -``` - -```log -off=0 message begin -off=4 len=5 span[url]="/demo" -off=10 url complete -off=20 len=10 span[header_field]="Connection" -off=31 header_field complete -off=32 len=12 span[header_value]="keep-alive, " -off=46 len=8 span[header_value]=" upgrade" -off=56 header_value complete -off=56 len=7 span[header_field]="Upgrade" -off=64 header_field complete -off=65 len=9 span[header_value]="WebSocket" -off=76 header_value complete -off=78 headers complete method=1 v=1/1 flags=15 content_length=0 -off=78 message complete -off=78 error code=22 reason="Pause on CONNECT/Upgrade" -``` - -## `upgrade` - -### Setting a flag and pausing - - -```http -PUT /url HTTP/1.1 -Connection: upgrade -Upgrade: ws - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=10 span[header_field]="Connection" -off=30 header_field complete -off=31 len=7 span[header_value]="upgrade" -off=40 header_value complete -off=40 len=7 span[header_field]="Upgrade" -off=48 header_field complete -off=49 len=2 span[header_value]="ws" -off=53 header_value complete -off=55 headers complete method=4 v=1/1 flags=14 content_length=0 -off=55 message complete -off=55 error code=22 reason="Pause on CONNECT/Upgrade" -``` - -### Emitting part of body and pausing - - -```http -PUT /url HTTP/1.1 -Connection: upgrade -Content-Length: 4 -Upgrade: ws - -abcdefgh -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=10 span[header_field]="Connection" -off=30 header_field complete -off=31 len=7 span[header_value]="upgrade" -off=40 header_value complete -off=40 len=14 span[header_field]="Content-Length" -off=55 header_field complete -off=56 len=1 span[header_value]="4" -off=59 header_value complete -off=59 len=7 span[header_field]="Upgrade" -off=67 header_field complete -off=68 len=2 span[header_value]="ws" -off=72 header_value complete -off=74 headers complete method=4 v=1/1 flags=34 content_length=4 -off=74 len=4 span[body]="abcd" -off=78 message complete -off=78 error code=22 reason="Pause on CONNECT/Upgrade" -``` - -### Upgrade GET request - - -```http -GET /demo HTTP/1.1 -Host: example.com -Connection: Upgrade -Sec-WebSocket-Key2: 12998 5 Y3 1 .P00 -Sec-WebSocket-Protocol: sample -Upgrade: WebSocket -Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5 -Origin: http://example.com - -Hot diggity dogg -``` - -```log -off=0 message begin -off=4 len=5 span[url]="/demo" -off=10 url complete -off=20 len=4 span[header_field]="Host" -off=25 header_field complete -off=26 len=11 span[header_value]="example.com" -off=39 header_value complete -off=39 len=10 span[header_field]="Connection" -off=50 header_field complete -off=51 len=7 span[header_value]="Upgrade" -off=60 header_value complete -off=60 len=18 span[header_field]="Sec-WebSocket-Key2" -off=79 header_field complete -off=80 len=18 span[header_value]="12998 5 Y3 1 .P00" -off=100 header_value complete -off=100 len=22 span[header_field]="Sec-WebSocket-Protocol" -off=123 header_field complete -off=124 len=6 span[header_value]="sample" -off=132 header_value complete -off=132 len=7 span[header_field]="Upgrade" -off=140 header_field complete -off=141 len=9 span[header_value]="WebSocket" -off=152 header_value complete -off=152 len=18 span[header_field]="Sec-WebSocket-Key1" -off=171 header_field complete -off=172 len=20 span[header_value]="4 @1 46546xW%0l 1 5" -off=194 header_value complete -off=194 len=6 span[header_field]="Origin" -off=201 header_field complete -off=202 len=18 span[header_value]="http://example.com" -off=222 header_value complete -off=224 headers complete method=1 v=1/1 flags=14 content_length=0 -off=224 message complete -off=224 error code=22 reason="Pause on CONNECT/Upgrade" -``` - -### Upgrade POST request - - -```http -POST /demo HTTP/1.1 -Host: example.com -Connection: Upgrade -Upgrade: HTTP/2.0 -Content-Length: 15 - -sweet post body\ -Hot diggity dogg -``` - -```log -off=0 message begin -off=5 len=5 span[url]="/demo" -off=11 url complete -off=21 len=4 span[header_field]="Host" -off=26 header_field complete -off=27 len=11 span[header_value]="example.com" -off=40 header_value complete -off=40 len=10 span[header_field]="Connection" -off=51 header_field complete -off=52 len=7 span[header_value]="Upgrade" -off=61 header_value complete -off=61 len=7 span[header_field]="Upgrade" -off=69 header_field complete -off=70 len=8 span[header_value]="HTTP/2.0" -off=80 header_value complete -off=80 len=14 span[header_field]="Content-Length" -off=95 header_field complete -off=96 len=2 span[header_value]="15" -off=100 header_value complete -off=102 headers complete method=3 v=1/1 flags=34 content_length=15 -off=102 len=15 span[body]="sweet post body" -off=117 message complete -off=117 error code=22 reason="Pause on CONNECT/Upgrade" -``` diff --git a/llhttp/test/request/content-length.md b/llhttp/test/request/content-length.md deleted file mode 100644 index 923f1d6..0000000 --- a/llhttp/test/request/content-length.md +++ /dev/null @@ -1,275 +0,0 @@ -Content-Length header -===================== - -## `Content-Length` with zeroes - - -```http -PUT /url HTTP/1.1 -Content-Length: 003 - -abc -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=14 span[header_field]="Content-Length" -off=34 header_field complete -off=35 len=3 span[header_value]="003" -off=40 header_value complete -off=42 headers complete method=4 v=1/1 flags=20 content_length=3 -off=42 len=3 span[body]="abc" -off=45 message complete -``` - -## `Content-Length` with follow-up headers - -The way the parser works is that special headers (like `Content-Length`) first -set `header_state` to appropriate value, and then apply custom parsing using -that value. For `Content-Length`, in particular, the `header_state` is used for -setting the flag too. - -Make sure that `header_state` is reset to `0`, so that the flag won't be -attempted to set twice (and error). - - -```http -PUT /url HTTP/1.1 -Content-Length: 003 -Ohai: world - -abc -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=14 span[header_field]="Content-Length" -off=34 header_field complete -off=35 len=3 span[header_value]="003" -off=40 header_value complete -off=40 len=4 span[header_field]="Ohai" -off=45 header_field complete -off=46 len=5 span[header_value]="world" -off=53 header_value complete -off=55 headers complete method=4 v=1/1 flags=20 content_length=3 -off=55 len=3 span[body]="abc" -off=58 message complete -``` - -## Error on `Content-Length` overflow - - -```http -PUT /url HTTP/1.1 -Content-Length: 1000000000000000000000 - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=14 span[header_field]="Content-Length" -off=34 header_field complete -off=35 len=21 span[header_value]="100000000000000000000" -off=56 error code=11 reason="Content-Length overflow" -``` - -## Error on duplicate `Content-Length` - - -```http -PUT /url HTTP/1.1 -Content-Length: 1 -Content-Length: 2 - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=14 span[header_field]="Content-Length" -off=34 header_field complete -off=35 len=1 span[header_value]="1" -off=38 header_value complete -off=38 len=14 span[header_field]="Content-Length" -off=53 header_field complete -off=54 error code=4 reason="Duplicate Content-Length" -``` - -## Error on simultaneous `Content-Length` and `Transfer-Encoding: identity` - - -```http -PUT /url HTTP/1.1 -Content-Length: 1 -Transfer-Encoding: identity - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=14 span[header_field]="Content-Length" -off=34 header_field complete -off=35 len=1 span[header_value]="1" -off=38 header_value complete -off=38 len=17 span[header_field]="Transfer-Encoding" -off=56 header_field complete -off=57 len=8 span[header_value]="identity" -off=67 header_value complete -off=69 error code=4 reason="Content-Length can't be present with Transfer-Encoding" -``` - -## No error on simultaneous `Content-Length` and `Transfer-Encoding: identity` (lenient) - - -```http -PUT /url HTTP/1.1 -Content-Length: 1 -Transfer-Encoding: chunked - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=14 span[header_field]="Content-Length" -off=34 header_field complete -off=35 len=1 span[header_value]="1" -off=38 header_value complete -off=38 len=17 span[header_field]="Transfer-Encoding" -off=56 header_field complete -off=57 len=7 span[header_value]="chunked" -off=66 header_value complete -off=68 headers complete method=4 v=1/1 flags=228 content_length=1 -``` - -## Funky `Content-Length` with body - - -```http -GET /get_funky_content_length_body_hello HTTP/1.0 -conTENT-Length: 5 - -HELLO -``` - -```log -off=0 message begin -off=4 len=36 span[url]="/get_funky_content_length_body_hello" -off=41 url complete -off=51 len=14 span[header_field]="conTENT-Length" -off=66 header_field complete -off=67 len=1 span[header_value]="5" -off=70 header_value complete -off=72 headers complete method=1 v=1/0 flags=20 content_length=5 -off=72 len=5 span[body]="HELLO" -off=77 message complete -``` - -## Spaces in `Content-Length` (surrounding) - - -```http -POST / HTTP/1.1 -Content-Length: 42 - - -``` - -```log -off=0 message begin -off=5 len=1 span[url]="/" -off=7 url complete -off=17 len=14 span[header_field]="Content-Length" -off=32 header_field complete -off=34 len=3 span[header_value]="42 " -off=39 header_value complete -off=41 headers complete method=3 v=1/1 flags=20 content_length=42 -``` - -### Spaces in `Content-Length` #2 - - -```http -POST / HTTP/1.1 -Content-Length: 4 2 - - -``` - -```log -off=0 message begin -off=5 len=1 span[url]="/" -off=7 url complete -off=17 len=14 span[header_field]="Content-Length" -off=32 header_field complete -off=33 len=2 span[header_value]="4 " -off=35 error code=11 reason="Invalid character in Content-Length" -``` - -### Spaces in `Content-Length` #3 - - -```http -POST / HTTP/1.1 -Content-Length: 13 37 - - -``` - -```log -off=0 message begin -off=5 len=1 span[url]="/" -off=7 url complete -off=17 len=14 span[header_field]="Content-Length" -off=32 header_field complete -off=33 len=3 span[header_value]="13 " -off=36 error code=11 reason="Invalid character in Content-Length" -``` - -### Empty `Content-Length` - - -```http -POST / HTTP/1.1 -Content-Length: - - -``` - -```log -off=0 message begin -off=5 len=1 span[url]="/" -off=7 url complete -off=17 len=14 span[header_field]="Content-Length" -off=32 header_field complete -off=34 error code=11 reason="Empty Content-Length" -``` - -## `Content-Length` with CR instead of dash - - -```http -PUT /url HTTP/1.1 -Content\rLength: 003 - -abc -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=26 error code=10 reason="Invalid header token" -``` diff --git a/llhttp/test/request/finish.md b/llhttp/test/request/finish.md deleted file mode 100644 index 2dd74a9..0000000 --- a/llhttp/test/request/finish.md +++ /dev/null @@ -1,57 +0,0 @@ -Finish -====== - -Those tests check the return codes and the behavior of `llhttp_finish()` C API. - -## It should be safe to finish after GET request - - -```http -GET / HTTP/1.1 - - -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=6 url complete -off=18 headers complete method=1 v=1/1 flags=0 content_length=0 -off=18 message complete -off=NULL finish=0 -``` - -## It should be unsafe to finish after incomplete PUT request - - -```http -PUT / HTTP/1.1 -Content-Length: 100 - -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=6 url complete -off=16 len=14 span[header_field]="Content-Length" -off=31 header_field complete -off=32 len=3 span[header_value]="100" -off=NULL finish=2 -``` - -## It should be unsafe to finish inside of the header - - -```http -PUT / HTTP/1.1 -Content-Leng -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=6 url complete -off=16 len=12 span[header_field]="Content-Leng" -off=NULL finish=2 -``` diff --git a/llhttp/test/request/invalid.md b/llhttp/test/request/invalid.md deleted file mode 100644 index cea6a91..0000000 --- a/llhttp/test/request/invalid.md +++ /dev/null @@ -1,202 +0,0 @@ -Invalid requests -================ - -### ICE protocol and GET method - - -```http -GET /music/sweet/music ICE/1.0 -Host: example.com - - -``` - -```log -off=0 message begin -off=4 len=18 span[url]="/music/sweet/music" -off=23 url complete -off=27 error code=8 reason="Expected SOURCE method for ICE/x.x request" -``` - -### ICE protocol, but not really - - -```http -GET /music/sweet/music IHTTP/1.0 -Host: example.com - - -``` - -```log -off=0 message begin -off=4 len=18 span[url]="/music/sweet/music" -off=23 url complete -off=24 error code=8 reason="Expected HTTP/" -``` - -### RTSP protocol and PUT method - - -```http -PUT /music/sweet/music RTSP/1.0 -Host: example.com - - -``` - -```log -off=0 message begin -off=4 len=18 span[url]="/music/sweet/music" -off=23 url complete -off=28 error code=8 reason="Invalid method for RTSP/x.x request" -``` - -### HTTP protocol and ANNOUNCE method - - -```http -ANNOUNCE /music/sweet/music HTTP/1.0 -Host: example.com - - -``` - -```log -off=0 message begin -off=9 len=18 span[url]="/music/sweet/music" -off=28 url complete -off=33 error code=8 reason="Invalid method for HTTP/x.x request" -``` - -### Headers separated by CR - - -```http -GET / HTTP/1.1 -Foo: 1\rBar: 2 - - -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=6 url complete -off=16 len=3 span[header_field]="Foo" -off=20 header_field complete -off=21 len=1 span[header_value]="1" -off=23 error code=3 reason="Missing expected LF after header value" -``` - -### Invalid header token #1 - - -```http -GET / HTTP/1.1 -Fo@: Failure - - -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=6 url complete -off=18 error code=10 reason="Invalid header token" -``` - -### Invalid header token #2 - - -```http -GET / HTTP/1.1 -Foo\01\test: Bar - - -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=6 url complete -off=19 error code=10 reason="Invalid header token" -``` - -### Invalid method - - -```http -MKCOLA / HTTP/1.1 - - -``` - -```log -off=0 message begin -off=5 error code=6 reason="Expected space after method" -``` - -### Illegal header field name line folding - - -```http -GET / HTTP/1.1 -name - : value - - -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=6 url complete -off=20 error code=10 reason="Invalid header token" -``` - -### Corrupted Connection header - - -```http -GET / HTTP/1.1 -Host: www.example.com -Connection\r\033\065\325eep-Alive -Accept-Encoding: gzip - - -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=6 url complete -off=16 len=4 span[header_field]="Host" -off=21 header_field complete -off=22 len=15 span[header_value]="www.example.com" -off=39 header_value complete -off=49 error code=10 reason="Invalid header token" -``` - -### Corrupted header name - - -```http -GET / HTTP/1.1 -Host: www.example.com -X-Some-Header\r\033\065\325eep-Alive -Accept-Encoding: gzip - - -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=6 url complete -off=16 len=4 span[header_field]="Host" -off=21 header_field complete -off=22 len=15 span[header_value]="www.example.com" -off=39 header_value complete -off=52 error code=10 reason="Invalid header token" -``` diff --git a/llhttp/test/request/lenient-headers.md b/llhttp/test/request/lenient-headers.md deleted file mode 100644 index 8918e60..0000000 --- a/llhttp/test/request/lenient-headers.md +++ /dev/null @@ -1,81 +0,0 @@ -Lenient header value parsing -============================ - -Parsing with header value token checks off. - -## Header value with lenient - - -```http -GET /url HTTP/1.1 -Header1: \f - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=7 span[header_field]="Header1" -off=27 header_field complete -off=28 len=1 span[header_value]="\f" -off=31 header_value complete -off=33 headers complete method=1 v=1/1 flags=0 content_length=0 -off=33 message complete -``` - -## Second request header value with lenient - - -```http -GET /url HTTP/1.1 -Header1: Okay - - -GET /url HTTP/1.1 -Header1: \f - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=7 span[header_field]="Header1" -off=27 header_field complete -off=28 len=4 span[header_value]="Okay" -off=34 header_value complete -off=36 headers complete method=1 v=1/1 flags=0 content_length=0 -off=36 message complete -off=38 message begin -off=42 len=4 span[url]="/url" -off=47 url complete -off=57 len=7 span[header_field]="Header1" -off=65 header_field complete -off=66 len=1 span[header_value]="\f" -off=69 header_value complete -off=71 headers complete method=1 v=1/1 flags=0 content_length=0 -off=71 message complete -``` - -## Header value without lenient - - -```http -GET /url HTTP/1.1 -Header1: \f - - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=7 span[header_field]="Header1" -off=27 header_field complete -off=28 error code=10 reason="Invalid header value char" -``` diff --git a/llhttp/test/request/method.md b/llhttp/test/request/method.md deleted file mode 100644 index 60dcd8c..0000000 --- a/llhttp/test/request/method.md +++ /dev/null @@ -1,390 +0,0 @@ -Methods -======= - -### REPORT request - - -```http -REPORT /test HTTP/1.1 - - -``` - -```log -off=0 message begin -off=7 len=5 span[url]="/test" -off=13 url complete -off=25 headers complete method=20 v=1/1 flags=0 content_length=0 -off=25 message complete -``` - -### CONNECT request - - -```http -CONNECT 0-home0.netscape.com:443 HTTP/1.0 -User-agent: Mozilla/1.1N -Proxy-authorization: basic aGVsbG86d29ybGQ= - -some data -and yet even more data -``` - -```log -off=0 message begin -off=8 len=24 span[url]="0-home0.netscape.com:443" -off=33 url complete -off=43 len=10 span[header_field]="User-agent" -off=54 header_field complete -off=55 len=12 span[header_value]="Mozilla/1.1N" -off=69 header_value complete -off=69 len=19 span[header_field]="Proxy-authorization" -off=89 header_field complete -off=90 len=22 span[header_value]="basic aGVsbG86d29ybGQ=" -off=114 header_value complete -off=116 headers complete method=5 v=1/0 flags=0 content_length=0 -off=116 message complete -off=116 error code=22 reason="Pause on CONNECT/Upgrade" -``` - -### CONNECT request with CAPS - - -```http -CONNECT HOME0.NETSCAPE.COM:443 HTTP/1.0 -User-agent: Mozilla/1.1N -Proxy-authorization: basic aGVsbG86d29ybGQ= - - -``` - -```log -off=0 message begin -off=8 len=22 span[url]="HOME0.NETSCAPE.COM:443" -off=31 url complete -off=41 len=10 span[header_field]="User-agent" -off=52 header_field complete -off=53 len=12 span[header_value]="Mozilla/1.1N" -off=67 header_value complete -off=67 len=19 span[header_field]="Proxy-authorization" -off=87 header_field complete -off=88 len=22 span[header_value]="basic aGVsbG86d29ybGQ=" -off=112 header_value complete -off=114 headers complete method=5 v=1/0 flags=0 content_length=0 -off=114 message complete -off=114 error code=22 reason="Pause on CONNECT/Upgrade" -``` - -### CONNECT with body - - -```http -CONNECT foo.bar.com:443 HTTP/1.0 -User-agent: Mozilla/1.1N -Proxy-authorization: basic aGVsbG86d29ybGQ= -Content-Length: 10 - -blarfcicle" -``` - -```log -off=0 message begin -off=8 len=15 span[url]="foo.bar.com:443" -off=24 url complete -off=34 len=10 span[header_field]="User-agent" -off=45 header_field complete -off=46 len=12 span[header_value]="Mozilla/1.1N" -off=60 header_value complete -off=60 len=19 span[header_field]="Proxy-authorization" -off=80 header_field complete -off=81 len=22 span[header_value]="basic aGVsbG86d29ybGQ=" -off=105 header_value complete -off=105 len=14 span[header_field]="Content-Length" -off=120 header_field complete -off=121 len=2 span[header_value]="10" -off=125 header_value complete -off=127 headers complete method=5 v=1/0 flags=20 content_length=10 -off=127 message complete -off=127 error code=22 reason="Pause on CONNECT/Upgrade" -``` - -### M-SEARCH request - - -```http -M-SEARCH * HTTP/1.1 -HOST: 239.255.255.250:1900 -MAN: "ssdp:discover" -ST: "ssdp:all" - - -``` - -```log -off=0 message begin -off=9 len=1 span[url]="*" -off=11 url complete -off=21 len=4 span[header_field]="HOST" -off=26 header_field complete -off=27 len=20 span[header_value]="239.255.255.250:1900" -off=49 header_value complete -off=49 len=3 span[header_field]="MAN" -off=53 header_field complete -off=54 len=15 span[header_value]=""ssdp:discover"" -off=71 header_value complete -off=71 len=2 span[header_field]="ST" -off=74 header_field complete -off=75 len=10 span[header_value]=""ssdp:all"" -off=87 header_value complete -off=89 headers complete method=24 v=1/1 flags=0 content_length=0 -off=89 message complete -``` - -### PATCH request - - -```http -PATCH /file.txt HTTP/1.1 -Host: www.example.com -Content-Type: application/example -If-Match: "e0023aa4e" -Content-Length: 10 - -cccccccccc -``` - -```log -off=0 message begin -off=6 len=9 span[url]="/file.txt" -off=16 url complete -off=26 len=4 span[header_field]="Host" -off=31 header_field complete -off=32 len=15 span[header_value]="www.example.com" -off=49 header_value complete -off=49 len=12 span[header_field]="Content-Type" -off=62 header_field complete -off=63 len=19 span[header_value]="application/example" -off=84 header_value complete -off=84 len=8 span[header_field]="If-Match" -off=93 header_field complete -off=94 len=11 span[header_value]=""e0023aa4e"" -off=107 header_value complete -off=107 len=14 span[header_field]="Content-Length" -off=122 header_field complete -off=123 len=2 span[header_value]="10" -off=127 header_value complete -off=129 headers complete method=28 v=1/1 flags=20 content_length=10 -off=129 len=10 span[body]="cccccccccc" -off=139 message complete -``` - -### PURGE request - - -```http -PURGE /file.txt HTTP/1.1 -Host: www.example.com - - -``` - -```log -off=0 message begin -off=6 len=9 span[url]="/file.txt" -off=16 url complete -off=26 len=4 span[header_field]="Host" -off=31 header_field complete -off=32 len=15 span[header_value]="www.example.com" -off=49 header_value complete -off=51 headers complete method=29 v=1/1 flags=0 content_length=0 -off=51 message complete -``` - -### SEARCH request - - -```http -SEARCH / HTTP/1.1 -Host: www.example.com - - -``` - -```log -off=0 message begin -off=7 len=1 span[url]="/" -off=9 url complete -off=19 len=4 span[header_field]="Host" -off=24 header_field complete -off=25 len=15 span[header_value]="www.example.com" -off=42 header_value complete -off=44 headers complete method=14 v=1/1 flags=0 content_length=0 -off=44 message complete -``` - -### LINK request - - -```http -LINK /images/my_dog.jpg HTTP/1.1 -Host: example.com -Link: ; rel="tag" -Link: ; rel="tag" - - -``` - -```log -off=0 message begin -off=5 len=18 span[url]="/images/my_dog.jpg" -off=24 url complete -off=34 len=4 span[header_field]="Host" -off=39 header_field complete -off=40 len=11 span[header_value]="example.com" -off=53 header_value complete -off=53 len=4 span[header_field]="Link" -off=58 header_field complete -off=59 len=44 span[header_value]="; rel="tag"" -off=105 header_value complete -off=105 len=4 span[header_field]="Link" -off=110 header_field complete -off=111 len=46 span[header_value]="; rel="tag"" -off=159 header_value complete -off=161 headers complete method=31 v=1/1 flags=0 content_length=0 -off=161 message complete -``` - -### LINK request - - -```http -UNLINK /images/my_dog.jpg HTTP/1.1 -Host: example.com -Link: ; rel="tag" - - -``` - -```log -off=0 message begin -off=7 len=18 span[url]="/images/my_dog.jpg" -off=26 url complete -off=36 len=4 span[header_field]="Host" -off=41 header_field complete -off=42 len=11 span[header_value]="example.com" -off=55 header_value complete -off=55 len=4 span[header_field]="Link" -off=60 header_field complete -off=61 len=46 span[header_value]="; rel="tag"" -off=109 header_value complete -off=111 headers complete method=32 v=1/1 flags=0 content_length=0 -off=111 message complete -``` - -### SOURCE request - - -```http -SOURCE /music/sweet/music HTTP/1.1 -Host: example.com - - -``` - -```log -off=0 message begin -off=7 len=18 span[url]="/music/sweet/music" -off=26 url complete -off=36 len=4 span[header_field]="Host" -off=41 header_field complete -off=42 len=11 span[header_value]="example.com" -off=55 header_value complete -off=57 headers complete method=33 v=1/1 flags=0 content_length=0 -off=57 message complete -``` - -### SOURCE request with ICE - - -```http -SOURCE /music/sweet/music ICE/1.0 -Host: example.com - - -``` - -```log -off=0 message begin -off=7 len=18 span[url]="/music/sweet/music" -off=26 url complete -off=35 len=4 span[header_field]="Host" -off=40 header_field complete -off=41 len=11 span[header_value]="example.com" -off=54 header_value complete -off=56 headers complete method=33 v=1/0 flags=0 content_length=0 -off=56 message complete -``` - -### OPTIONS request with RTSP - -NOTE: `OPTIONS` is a valid HTTP metho too. - - -```http -OPTIONS /music/sweet/music RTSP/1.0 -Host: example.com - - -``` - -```log -off=0 message begin -off=8 len=18 span[url]="/music/sweet/music" -off=27 url complete -off=37 len=4 span[header_field]="Host" -off=42 header_field complete -off=43 len=11 span[header_value]="example.com" -off=56 header_value complete -off=58 headers complete method=6 v=1/0 flags=0 content_length=0 -off=58 message complete -``` - -### ANNOUNCE request with RTSP - - -```http -ANNOUNCE /music/sweet/music RTSP/1.0 -Host: example.com - - -``` - -```log -off=0 message begin -off=9 len=18 span[url]="/music/sweet/music" -off=28 url complete -off=38 len=4 span[header_field]="Host" -off=43 header_field complete -off=44 len=11 span[header_value]="example.com" -off=57 header_value complete -off=59 headers complete method=36 v=1/0 flags=0 content_length=0 -off=59 message complete -``` - -### PRI request HTTP2 - - -```http -PRI * HTTP/1.1 - -SM - - -``` - -```log -off=0 message begin -off=4 len=1 span[url]="*" -off=6 url complete -off=24 error code=23 reason="Pause on PRI/Upgrade" -``` diff --git a/llhttp/test/request/sample.md b/llhttp/test/request/sample.md deleted file mode 100644 index 8766d87..0000000 --- a/llhttp/test/request/sample.md +++ /dev/null @@ -1,547 +0,0 @@ -Sample requests -=============== - -Lots of sample requests, most ported from [http_parser][0] test suite. - -## Simple request - - -```http -OPTIONS /url HTTP/1.1 -Header1: Value1 -Header2:\t Value2 - - -``` - -```log -off=0 message begin -off=8 len=4 span[url]="/url" -off=13 url complete -off=23 len=7 span[header_field]="Header1" -off=31 header_field complete -off=32 len=6 span[header_value]="Value1" -off=40 header_value complete -off=40 len=7 span[header_field]="Header2" -off=48 header_field complete -off=50 len=6 span[header_value]="Value2" -off=58 header_value complete -off=60 headers complete method=6 v=1/1 flags=0 content_length=0 -off=60 message complete -``` - -## Request with method starting with `H` - -There's a optimization in `start_req_or_res` that passes execution to -`start_req` when the first character is not `H` (because response must start -with `HTTP/`). However, there're still methods like `HEAD` that should get -to `start_req`. Verify that it still works after optimization. - - -```http -HEAD /url HTTP/1.1 - - -``` - -```log -off=0 message begin -off=5 len=4 span[url]="/url" -off=10 url complete -off=22 headers complete method=2 v=1/1 flags=0 content_length=0 -off=22 message complete -``` - -## curl GET - - -```http -GET /test HTTP/1.1 -User-Agent: curl/7.18.0 (i486-pc-linux-gnu) libcurl/7.18.0 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.1 -Host: 0.0.0.0=5000 -Accept: */* - - -``` - -```log -off=0 message begin -off=4 len=5 span[url]="/test" -off=10 url complete -off=20 len=10 span[header_field]="User-Agent" -off=31 header_field complete -off=32 len=85 span[header_value]="curl/7.18.0 (i486-pc-linux-gnu) libcurl/7.18.0 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.1" -off=119 header_value complete -off=119 len=4 span[header_field]="Host" -off=124 header_field complete -off=125 len=12 span[header_value]="0.0.0.0=5000" -off=139 header_value complete -off=139 len=6 span[header_field]="Accept" -off=146 header_field complete -off=147 len=3 span[header_value]="*/*" -off=152 header_value complete -off=154 headers complete method=1 v=1/1 flags=0 content_length=0 -off=154 message complete -``` - -## Firefox GET - - -```http -GET /favicon.ico HTTP/1.1 -Host: 0.0.0.0=5000 -User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9) Gecko/2008061015 Firefox/3.0 -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 -Accept-Language: en-us,en;q=0.5 -Accept-Encoding: gzip,deflate -Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 -Keep-Alive: 300 -Connection: keep-alive - - -``` - -```log -off=0 message begin -off=4 len=12 span[url]="/favicon.ico" -off=17 url complete -off=27 len=4 span[header_field]="Host" -off=32 header_field complete -off=33 len=12 span[header_value]="0.0.0.0=5000" -off=47 header_value complete -off=47 len=10 span[header_field]="User-Agent" -off=58 header_field complete -off=59 len=76 span[header_value]="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9) Gecko/2008061015 Firefox/3.0" -off=137 header_value complete -off=137 len=6 span[header_field]="Accept" -off=144 header_field complete -off=145 len=63 span[header_value]="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -off=210 header_value complete -off=210 len=15 span[header_field]="Accept-Language" -off=226 header_field complete -off=227 len=14 span[header_value]="en-us,en;q=0.5" -off=243 header_value complete -off=243 len=15 span[header_field]="Accept-Encoding" -off=259 header_field complete -off=260 len=12 span[header_value]="gzip,deflate" -off=274 header_value complete -off=274 len=14 span[header_field]="Accept-Charset" -off=289 header_field complete -off=290 len=30 span[header_value]="ISO-8859-1,utf-8;q=0.7,*;q=0.7" -off=322 header_value complete -off=322 len=10 span[header_field]="Keep-Alive" -off=333 header_field complete -off=334 len=3 span[header_value]="300" -off=339 header_value complete -off=339 len=10 span[header_field]="Connection" -off=350 header_field complete -off=351 len=10 span[header_value]="keep-alive" -off=363 header_value complete -off=365 headers complete method=1 v=1/1 flags=1 content_length=0 -off=365 message complete -``` - -## DUMBPACK - - -```http -GET /dumbpack HTTP/1.1 -aaaaaaaaaaaaa:++++++++++ - - -``` - -```log -off=0 message begin -off=4 len=9 span[url]="/dumbpack" -off=14 url complete -off=24 len=13 span[header_field]="aaaaaaaaaaaaa" -off=38 header_field complete -off=38 len=10 span[header_value]="++++++++++" -off=50 header_value complete -off=52 headers complete method=1 v=1/1 flags=0 content_length=0 -off=52 message complete -``` - -## No headers and no body - - -```http -GET /get_no_headers_no_body/world HTTP/1.1 - - -``` - -```log -off=0 message begin -off=4 len=29 span[url]="/get_no_headers_no_body/world" -off=34 url complete -off=46 headers complete method=1 v=1/1 flags=0 content_length=0 -off=46 message complete -``` - -## One header and no body - - -```http -GET /get_one_header_no_body HTTP/1.1 -Accept: */* - - -``` - -```log -off=0 message begin -off=4 len=23 span[url]="/get_one_header_no_body" -off=28 url complete -off=38 len=6 span[header_field]="Accept" -off=45 header_field complete -off=46 len=3 span[header_value]="*/*" -off=51 header_value complete -off=53 headers complete method=1 v=1/1 flags=0 content_length=0 -off=53 message complete -``` - -## Apache bench GET - -The server receiving this request SHOULD NOT wait for EOF to know that -`Content-Length == 0`. - - -```http -GET /test HTTP/1.0 -Host: 0.0.0.0:5000 -User-Agent: ApacheBench/2.3 -Accept: */* - - -``` - -```log -off=0 message begin -off=4 len=5 span[url]="/test" -off=10 url complete -off=20 len=4 span[header_field]="Host" -off=25 header_field complete -off=26 len=12 span[header_value]="0.0.0.0:5000" -off=40 header_value complete -off=40 len=10 span[header_field]="User-Agent" -off=51 header_field complete -off=52 len=15 span[header_value]="ApacheBench/2.3" -off=69 header_value complete -off=69 len=6 span[header_field]="Accept" -off=76 header_field complete -off=77 len=3 span[header_value]="*/*" -off=82 header_value complete -off=84 headers complete method=1 v=1/0 flags=0 content_length=0 -off=84 message complete -``` - -## Prefix newline - -Some clients, especially after a POST in a keep-alive connection, -will send an extra CRLF before the next request. - - -```http -\r\nGET /test HTTP/1.1 - - -``` - -```log -off=2 message begin -off=6 len=5 span[url]="/test" -off=12 url complete -off=24 headers complete method=1 v=1/1 flags=0 content_length=0 -off=24 message complete -``` - -## No HTTP version - - -```http -GET / - - -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=7 url complete -off=9 headers complete method=1 v=0/9 flags=0 content_length=0 -off=9 message complete -``` - -## Line folding in header value with CRLF - - -```http -GET / HTTP/1.1 -Line1: abc -\tdef - ghi -\t\tjkl - mno -\t \tqrs -Line2: \t line2\t -Line3: - line3 -Line4: - -Connection: - close - - -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=6 url complete -off=16 len=5 span[header_field]="Line1" -off=22 header_field complete -off=25 len=3 span[header_value]="abc" -off=30 len=4 span[header_value]="\tdef" -off=36 len=4 span[header_value]=" ghi" -off=42 len=5 span[header_value]="\t\tjkl" -off=49 len=6 span[header_value]=" mno " -off=57 len=6 span[header_value]="\t \tqrs" -off=65 header_value complete -off=65 len=5 span[header_field]="Line2" -off=71 header_field complete -off=74 len=6 span[header_value]="line2\t" -off=82 header_value complete -off=82 len=5 span[header_field]="Line3" -off=88 header_field complete -off=91 len=5 span[header_value]="line3" -off=98 header_value complete -off=98 len=5 span[header_field]="Line4" -off=104 header_field complete -off=110 len=0 span[header_value]="" -off=110 header_value complete -off=110 len=10 span[header_field]="Connection" -off=121 header_field complete -off=124 len=5 span[header_value]="close" -off=131 header_value complete -off=133 headers complete method=1 v=1/1 flags=2 content_length=0 -off=133 message complete -``` - -## Line folding in header value with LF - - -```http -GET / HTTP/1.1\n\ -Line1: abc\n\ -\tdef\n\ - ghi\n\ -\t\tjkl\n\ - mno \n\ -\t \tqrs\n\ -Line2: \t line2\t\n\ -Line3:\n\ - line3\n\ -Line4: \n\ - \n\ -Connection:\n\ - close\n\ -\n -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=6 url complete -off=15 len=5 span[header_field]="Line1" -off=21 header_field complete -off=24 len=3 span[header_value]="abc" -off=28 len=4 span[header_value]="\tdef" -off=33 len=4 span[header_value]=" ghi" -off=38 len=5 span[header_value]="\t\tjkl" -off=44 len=6 span[header_value]=" mno " -off=51 len=6 span[header_value]="\t \tqrs" -off=58 header_value complete -off=58 len=5 span[header_field]="Line2" -off=64 header_field complete -off=67 len=6 span[header_value]="line2\t" -off=74 header_value complete -off=74 len=5 span[header_field]="Line3" -off=80 header_field complete -off=82 len=5 span[header_value]="line3" -off=88 header_value complete -off=88 len=5 span[header_field]="Line4" -off=94 header_field complete -off=98 len=0 span[header_value]="" -off=98 header_value complete -off=98 len=10 span[header_field]="Connection" -off=109 header_field complete -off=111 len=5 span[header_value]="close" -off=117 header_value complete -off=118 headers complete method=1 v=1/1 flags=2 content_length=0 -off=118 message complete -``` - -## Request starting with CRLF - - -```http -\r\nGET /url HTTP/1.1 -Header1: Value1 - - -``` - -```log -off=2 message begin -off=6 len=4 span[url]="/url" -off=11 url complete -off=21 len=7 span[header_field]="Header1" -off=29 header_field complete -off=30 len=6 span[header_value]="Value1" -off=38 header_value complete -off=40 headers complete method=1 v=1/1 flags=0 content_length=0 -off=40 message complete -``` - -## Extended Characters - -See nodejs/test/parallel/test-http-headers-obstext.js - - -```http -GET / HTTP/1.1 -Test: Düsseldorf - - -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=6 url complete -off=16 len=4 span[header_field]="Test" -off=21 header_field complete -off=22 len=11 span[header_value]="Düsseldorf" -off=35 header_value complete -off=37 headers complete method=1 v=1/1 flags=0 content_length=0 -off=37 message complete -``` - -## 255 ASCII in header value - -Note: `Buffer.from([ 0xff ]).toString('latin1') === 'ÿ'`. - - -```http -OPTIONS /url HTTP/1.1 -Header1: Value1 -Header2: \xffValue2 - - -``` - -```log -off=0 message begin -off=8 len=4 span[url]="/url" -off=13 url complete -off=23 len=7 span[header_field]="Header1" -off=31 header_field complete -off=32 len=6 span[header_value]="Value1" -off=40 header_value complete -off=40 len=7 span[header_field]="Header2" -off=48 header_field complete -off=49 len=8 span[header_value]="ÿValue2" -off=59 header_value complete -off=61 headers complete method=6 v=1/1 flags=0 content_length=0 -off=61 message complete -``` - -## X-SSL-Nonsense - -See nodejs/test/parallel/test-http-headers-obstext.js - - -```http -GET / HTTP/1.1 -X-SSL-Nonsense: -----BEGIN CERTIFICATE----- -\tMIIFbTCCBFWgAwIBAgICH4cwDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMCVUsx -\tETAPBgNVBAoTCGVTY2llbmNlMRIwEAYDVQQLEwlBdXRob3JpdHkxCzAJBgNVBAMT -\tAkNBMS0wKwYJKoZIhvcNAQkBFh5jYS1vcGVyYXRvckBncmlkLXN1cHBvcnQuYWMu -\tdWswHhcNMDYwNzI3MTQxMzI4WhcNMDcwNzI3MTQxMzI4WjBbMQswCQYDVQQGEwJV -\tSzERMA8GA1UEChMIZVNjaWVuY2UxEzARBgNVBAsTCk1hbmNoZXN0ZXIxCzAJBgNV -\tBAcTmrsogriqMWLAk1DMRcwFQYDVQQDEw5taWNoYWVsIHBhcmQYJKoZIhvcNAQEB -\tBQADggEPADCCAQoCggEBANPEQBgl1IaKdSS1TbhF3hEXSl72G9J+WC/1R64fAcEF -\tW51rEyFYiIeZGx/BVzwXbeBoNUK41OK65sxGuflMo5gLflbwJtHBRIEKAfVVp3YR -\tgW7cMA/s/XKgL1GEC7rQw8lIZT8RApukCGqOVHSi/F1SiFlPDxuDfmdiNzL31+sL -\t0iwHDdNkGjy5pyBSB8Y79dsSJtCW/iaLB0/n8Sj7HgvvZJ7x0fr+RQjYOUUfrePP -\tu2MSpFyf+9BbC/aXgaZuiCvSR+8Snv3xApQY+fULK/xY8h8Ua51iXoQ5jrgu2SqR -\twgA7BUi3G8LFzMBl8FRCDYGUDy7M6QaHXx1ZWIPWNKsCAwEAAaOCAiQwggIgMAwG -\tA1UdEwEB/wQCMAAwEQYJYIZIAYb4QgHTTPAQDAgWgMA4GA1UdDwEB/wQEAwID6DAs -\tBglghkgBhvhCAQ0EHxYdVUsgZS1TY2llbmNlIFVzZXIgQ2VydGlmaWNhdGUwHQYD -\tVR0OBBYEFDTt/sf9PeMaZDHkUIldrDYMNTBZMIGaBgNVHSMEgZIwgY+AFAI4qxGj -\tloCLDdMVKwiljjDastqooXSkcjBwMQswCQYDVQQGEwJVSzERMA8GA1UEChMIZVNj -\taWVuY2UxEjAQBgNVBAsTCUF1dGhvcml0eTELMAkGA1UEAxMCQ0ExLTArBgkqhkiG -\t9w0BCQEWHmNhLW9wZXJhdG9yQGdyaWQtc3VwcG9ydC5hYy51a4IBADApBgNVHRIE -\tIjAggR5jYS1vcGVyYXRvckBncmlkLXN1cHBvcnQuYWMudWswGQYDVR0gBBIwEDAO -\tBgwrBgEEAdkvAQEBAQYwPQYJYIZIAYb4QgEEBDAWLmh0dHA6Ly9jYS5ncmlkLXN1 -\tcHBvcnQuYWMudmT4sopwqlBWsvcHViL2NybC9jYWNybC5jcmwwPQYJYIZIAYb4QgEDBDAWLmh0 -\tdHA6Ly9jYS5ncmlkLXN1cHBvcnQuYWMudWsvcHViL2NybC9jYWNybC5jcmwwPwYD -\tVR0fBDgwNjA0oDKgMIYuaHR0cDovL2NhLmdyaWQt5hYy51ay9wdWIv -\tY3JsL2NhY3JsLmNybDANBgkqhkiG9w0BAQUFAAOCAQEAS/U4iiooBENGW/Hwmmd3 -\tXCy6Zrt08YjKCzGNjorT98g8uGsqYjSxv/hmi0qlnlHs+k/3Iobc3LjS5AMYr5L8 -\tUO7OSkgFFlLHQyC9JzPfmLCAugvzEbyv4Olnsr8hbxF1MbKZoQxUZtMVu29wjfXk -\thTeApBv7eaKCWpSp7MCbvgzm74izKhu3vlDk9w6qVrxePfGgpKPqfHiOoGhFnbTK -\twTC6o2xq5y0qZ03JonF7OJspEd3I5zKY3E+ov7/ZhW6DqT8UFvsAdjvQbXyhV8Eu -\tYhixw1aKEPzNjNowuIseVogKOLXxWI5vAi5HgXdS0/ES5gDGsABo4fqovUKlgop3 -\tRA== -\t-----END CERTIFICATE----- - - -``` - -```log -off=0 message begin -off=4 len=1 span[url]="/" -off=6 url complete -off=16 len=14 span[header_field]="X-SSL-Nonsense" -off=31 header_field complete -off=34 len=27 span[header_value]="-----BEGIN CERTIFICATE-----" -off=63 len=65 span[header_value]="\tMIIFbTCCBFWgAwIBAgICH4cwDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMCVUsx" -off=130 len=65 span[header_value]="\tETAPBgNVBAoTCGVTY2llbmNlMRIwEAYDVQQLEwlBdXRob3JpdHkxCzAJBgNVBAMT" -off=197 len=65 span[header_value]="\tAkNBMS0wKwYJKoZIhvcNAQkBFh5jYS1vcGVyYXRvckBncmlkLXN1cHBvcnQuYWMu" -off=264 len=65 span[header_value]="\tdWswHhcNMDYwNzI3MTQxMzI4WhcNMDcwNzI3MTQxMzI4WjBbMQswCQYDVQQGEwJV" -off=331 len=65 span[header_value]="\tSzERMA8GA1UEChMIZVNjaWVuY2UxEzARBgNVBAsTCk1hbmNoZXN0ZXIxCzAJBgNV" -off=398 len=65 span[header_value]="\tBAcTmrsogriqMWLAk1DMRcwFQYDVQQDEw5taWNoYWVsIHBhcmQYJKoZIhvcNAQEB" -off=465 len=65 span[header_value]="\tBQADggEPADCCAQoCggEBANPEQBgl1IaKdSS1TbhF3hEXSl72G9J+WC/1R64fAcEF" -off=532 len=65 span[header_value]="\tW51rEyFYiIeZGx/BVzwXbeBoNUK41OK65sxGuflMo5gLflbwJtHBRIEKAfVVp3YR" -off=599 len=65 span[header_value]="\tgW7cMA/s/XKgL1GEC7rQw8lIZT8RApukCGqOVHSi/F1SiFlPDxuDfmdiNzL31+sL" -off=666 len=65 span[header_value]="\t0iwHDdNkGjy5pyBSB8Y79dsSJtCW/iaLB0/n8Sj7HgvvZJ7x0fr+RQjYOUUfrePP" -off=733 len=65 span[header_value]="\tu2MSpFyf+9BbC/aXgaZuiCvSR+8Snv3xApQY+fULK/xY8h8Ua51iXoQ5jrgu2SqR" -off=800 len=65 span[header_value]="\twgA7BUi3G8LFzMBl8FRCDYGUDy7M6QaHXx1ZWIPWNKsCAwEAAaOCAiQwggIgMAwG" -off=867 len=66 span[header_value]="\tA1UdEwEB/wQCMAAwEQYJYIZIAYb4QgHTTPAQDAgWgMA4GA1UdDwEB/wQEAwID6DAs" -off=935 len=65 span[header_value]="\tBglghkgBhvhCAQ0EHxYdVUsgZS1TY2llbmNlIFVzZXIgQ2VydGlmaWNhdGUwHQYD" -off=1002 len=65 span[header_value]="\tVR0OBBYEFDTt/sf9PeMaZDHkUIldrDYMNTBZMIGaBgNVHSMEgZIwgY+AFAI4qxGj" -off=1069 len=65 span[header_value]="\tloCLDdMVKwiljjDastqooXSkcjBwMQswCQYDVQQGEwJVSzERMA8GA1UEChMIZVNj" -off=1136 len=65 span[header_value]="\taWVuY2UxEjAQBgNVBAsTCUF1dGhvcml0eTELMAkGA1UEAxMCQ0ExLTArBgkqhkiG" -off=1203 len=65 span[header_value]="\t9w0BCQEWHmNhLW9wZXJhdG9yQGdyaWQtc3VwcG9ydC5hYy51a4IBADApBgNVHRIE" -off=1270 len=65 span[header_value]="\tIjAggR5jYS1vcGVyYXRvckBncmlkLXN1cHBvcnQuYWMudWswGQYDVR0gBBIwEDAO" -off=1337 len=65 span[header_value]="\tBgwrBgEEAdkvAQEBAQYwPQYJYIZIAYb4QgEEBDAWLmh0dHA6Ly9jYS5ncmlkLXN1" -off=1404 len=75 span[header_value]="\tcHBvcnQuYWMudmT4sopwqlBWsvcHViL2NybC9jYWNybC5jcmwwPQYJYIZIAYb4QgEDBDAWLmh0" -off=1481 len=65 span[header_value]="\tdHA6Ly9jYS5ncmlkLXN1cHBvcnQuYWMudWsvcHViL2NybC9jYWNybC5jcmwwPwYD" -off=1548 len=55 span[header_value]="\tVR0fBDgwNjA0oDKgMIYuaHR0cDovL2NhLmdyaWQt5hYy51ay9wdWIv" -off=1605 len=65 span[header_value]="\tY3JsL2NhY3JsLmNybDANBgkqhkiG9w0BAQUFAAOCAQEAS/U4iiooBENGW/Hwmmd3" -off=1672 len=65 span[header_value]="\tXCy6Zrt08YjKCzGNjorT98g8uGsqYjSxv/hmi0qlnlHs+k/3Iobc3LjS5AMYr5L8" -off=1739 len=65 span[header_value]="\tUO7OSkgFFlLHQyC9JzPfmLCAugvzEbyv4Olnsr8hbxF1MbKZoQxUZtMVu29wjfXk" -off=1806 len=65 span[header_value]="\thTeApBv7eaKCWpSp7MCbvgzm74izKhu3vlDk9w6qVrxePfGgpKPqfHiOoGhFnbTK" -off=1873 len=65 span[header_value]="\twTC6o2xq5y0qZ03JonF7OJspEd3I5zKY3E+ov7/ZhW6DqT8UFvsAdjvQbXyhV8Eu" -off=1940 len=65 span[header_value]="\tYhixw1aKEPzNjNowuIseVogKOLXxWI5vAi5HgXdS0/ES5gDGsABo4fqovUKlgop3" -off=2007 len=5 span[header_value]="\tRA==" -off=2014 len=26 span[header_value]="\t-----END CERTIFICATE-----" -off=2042 header_value complete -off=2044 headers complete method=1 v=1/1 flags=0 content_length=0 -off=2044 message complete -``` - -[0]: https://github.com/nodejs/http-parser diff --git a/llhttp/test/request/transfer-encoding.md b/llhttp/test/request/transfer-encoding.md deleted file mode 100644 index b0891d6..0000000 --- a/llhttp/test/request/transfer-encoding.md +++ /dev/null @@ -1,480 +0,0 @@ -Transfer-Encoding header -======================== - -## `chunked` - -### Parsing and setting flag - - -```http -PUT /url HTTP/1.1 -Transfer-Encoding: chunked - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=17 span[header_field]="Transfer-Encoding" -off=37 header_field complete -off=38 len=7 span[header_value]="chunked" -off=47 header_value complete -off=49 headers complete method=4 v=1/1 flags=208 content_length=0 -``` - -### Parse chunks with lowercase size - - -```http -PUT /url HTTP/1.1 -Transfer-Encoding: chunked - -a -0123456789 -0 - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=17 span[header_field]="Transfer-Encoding" -off=37 header_field complete -off=38 len=7 span[header_value]="chunked" -off=47 header_value complete -off=49 headers complete method=4 v=1/1 flags=208 content_length=0 -off=52 chunk header len=10 -off=52 len=10 span[body]="0123456789" -off=64 chunk complete -off=67 chunk header len=0 -off=69 chunk complete -off=69 message complete -``` - -### Parse chunks with uppercase size - - -```http -PUT /url HTTP/1.1 -Transfer-Encoding: chunked - -A -0123456789 -0 - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=17 span[header_field]="Transfer-Encoding" -off=37 header_field complete -off=38 len=7 span[header_value]="chunked" -off=47 header_value complete -off=49 headers complete method=4 v=1/1 flags=208 content_length=0 -off=52 chunk header len=10 -off=52 len=10 span[body]="0123456789" -off=64 chunk complete -off=67 chunk header len=0 -off=69 chunk complete -off=69 message complete -``` - -### POST with `Transfer-Encoding: chunked` - - -```http -POST /post_chunked_all_your_base HTTP/1.1 -Transfer-Encoding: chunked - -1e -all your base are belong to us -0 - - -``` - -```log -off=0 message begin -off=5 len=27 span[url]="/post_chunked_all_your_base" -off=33 url complete -off=43 len=17 span[header_field]="Transfer-Encoding" -off=61 header_field complete -off=62 len=7 span[header_value]="chunked" -off=71 header_value complete -off=73 headers complete method=3 v=1/1 flags=208 content_length=0 -off=77 chunk header len=30 -off=77 len=30 span[body]="all your base are belong to us" -off=109 chunk complete -off=112 chunk header len=0 -off=114 chunk complete -off=114 message complete -``` - -### Two chunks and triple zero prefixed end chunk - - -```http -POST /two_chunks_mult_zero_end HTTP/1.1 -Transfer-Encoding: chunked - -5 -hello -6 - world -000 - - -``` - -```log -off=0 message begin -off=5 len=25 span[url]="/two_chunks_mult_zero_end" -off=31 url complete -off=41 len=17 span[header_field]="Transfer-Encoding" -off=59 header_field complete -off=60 len=7 span[header_value]="chunked" -off=69 header_value complete -off=71 headers complete method=3 v=1/1 flags=208 content_length=0 -off=74 chunk header len=5 -off=74 len=5 span[body]="hello" -off=81 chunk complete -off=84 chunk header len=6 -off=84 len=6 span[body]=" world" -off=92 chunk complete -off=97 chunk header len=0 -off=99 chunk complete -off=99 message complete -``` - -### Trailing headers - - -```http -POST /chunked_w_trailing_headers HTTP/1.1 -Transfer-Encoding: chunked - -5 -hello -6 - world -0 -Vary: * -Content-Type: text/plain - - -``` - -```log -off=0 message begin -off=5 len=27 span[url]="/chunked_w_trailing_headers" -off=33 url complete -off=43 len=17 span[header_field]="Transfer-Encoding" -off=61 header_field complete -off=62 len=7 span[header_value]="chunked" -off=71 header_value complete -off=73 headers complete method=3 v=1/1 flags=208 content_length=0 -off=76 chunk header len=5 -off=76 len=5 span[body]="hello" -off=83 chunk complete -off=86 chunk header len=6 -off=86 len=6 span[body]=" world" -off=94 chunk complete -off=97 chunk header len=0 -off=97 len=4 span[header_field]="Vary" -off=102 header_field complete -off=103 len=1 span[header_value]="*" -off=106 header_value complete -off=106 len=12 span[header_field]="Content-Type" -off=119 header_field complete -off=120 len=10 span[header_value]="text/plain" -off=132 header_value complete -off=134 chunk complete -off=134 message complete -``` - -### Parameters after chunk length - - -```http -POST /chunked_w_unicorns_after_length HTTP/1.1 -Transfer-Encoding: chunked - -5; ilovew3;somuchlove=aretheseparametersfor -hello -6; blahblah; blah - world -0 - -``` - -```log -off=0 message begin -off=5 len=32 span[url]="/chunked_w_unicorns_after_length" -off=38 url complete -off=48 len=17 span[header_field]="Transfer-Encoding" -off=66 header_field complete -off=67 len=7 span[header_value]="chunked" -off=76 header_value complete -off=78 headers complete method=3 v=1/1 flags=208 content_length=0 -off=123 chunk header len=5 -off=123 len=5 span[body]="hello" -off=130 chunk complete -off=149 chunk header len=6 -off=149 len=6 span[body]=" world" -off=157 chunk complete -off=160 chunk header len=0 -``` - -## Ignoring `pigeons` - -Requests cannot have invalid `Transfer-Encoding`. It is impossible to determine -their body size. Not erroring would make HTTP smuggling attacks possible. - - -```http -PUT /url HTTP/1.1 -Transfer-Encoding: pigeons - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=17 span[header_field]="Transfer-Encoding" -off=37 header_field complete -off=38 len=7 span[header_value]="pigeons" -off=47 header_value complete -off=49 headers complete method=4 v=1/1 flags=200 content_length=0 -off=49 error code=15 reason="Request has invalid `Transfer-Encoding`" -``` - -## POST with `Transfer-Encoding` and `Content-Length` - - -```http -POST /post_identity_body_world?q=search#hey HTTP/1.1 -Accept: */* -Transfer-Encoding: identity -Content-Length: 5 - -World -``` - -```log -off=0 message begin -off=5 len=38 span[url]="/post_identity_body_world?q=search#hey" -off=44 url complete -off=54 len=6 span[header_field]="Accept" -off=61 header_field complete -off=62 len=3 span[header_value]="*/*" -off=67 header_value complete -off=67 len=17 span[header_field]="Transfer-Encoding" -off=85 header_field complete -off=86 len=8 span[header_value]="identity" -off=96 header_value complete -off=96 len=14 span[header_field]="Content-Length" -off=111 header_field complete -off=112 len=1 span[header_value]="5" -off=115 header_value complete -off=117 error code=4 reason="Content-Length can't be present with Transfer-Encoding" -``` - -## POST with `Transfer-Encoding` and `Content-Length` (lenient) - -TODO(indutny): should we allow it even in lenient mode? (Consider disabling -this). - -NOTE: `Content-Length` is ignored when `Transfer-Encoding` is present. Messages -(in lenient mode) are read until EOF. - - -```http -POST /post_identity_body_world?q=search#hey HTTP/1.1 -Accept: */* -Transfer-Encoding: identity -Content-Length: 1 - -World -``` - -```log -off=0 message begin -off=5 len=38 span[url]="/post_identity_body_world?q=search#hey" -off=44 url complete -off=54 len=6 span[header_field]="Accept" -off=61 header_field complete -off=62 len=3 span[header_value]="*/*" -off=67 header_value complete -off=67 len=17 span[header_field]="Transfer-Encoding" -off=85 header_field complete -off=86 len=8 span[header_value]="identity" -off=96 header_value complete -off=96 len=14 span[header_field]="Content-Length" -off=111 header_field complete -off=112 len=1 span[header_value]="1" -off=115 header_value complete -off=117 headers complete method=3 v=1/1 flags=220 content_length=1 -off=117 len=5 span[body]="World" -``` - -## POST with `chunked` before other transfer coding names - - -```http -POST /post_identity_body_world?q=search#hey HTTP/1.1 -Accept: */* -Transfer-Encoding: chunked, deflate - -World -``` - -```log -off=0 message begin -off=5 len=38 span[url]="/post_identity_body_world?q=search#hey" -off=44 url complete -off=54 len=6 span[header_field]="Accept" -off=61 header_field complete -off=62 len=3 span[header_value]="*/*" -off=67 header_value complete -off=67 len=17 span[header_field]="Transfer-Encoding" -off=85 header_field complete -off=86 len=16 span[header_value]="chunked, deflate" -off=104 header_value complete -off=106 headers complete method=3 v=1/1 flags=200 content_length=0 -off=106 error code=15 reason="Request has invalid `Transfer-Encoding`" -``` - -## POST with `chunked` and duplicate transfer-encoding - - -```http -POST /post_identity_body_world?q=search#hey HTTP/1.1 -Accept: */* -Transfer-Encoding: chunked -Transfer-Encoding: deflate - -World -``` - -```log -off=0 message begin -off=5 len=38 span[url]="/post_identity_body_world?q=search#hey" -off=44 url complete -off=54 len=6 span[header_field]="Accept" -off=61 header_field complete -off=62 len=3 span[header_value]="*/*" -off=67 header_value complete -off=67 len=17 span[header_field]="Transfer-Encoding" -off=85 header_field complete -off=86 len=7 span[header_value]="chunked" -off=95 header_value complete -off=95 len=17 span[header_field]="Transfer-Encoding" -off=113 header_field complete -off=114 len=7 span[header_value]="deflate" -off=123 header_value complete -off=125 headers complete method=3 v=1/1 flags=200 content_length=0 -off=125 error code=15 reason="Request has invalid `Transfer-Encoding`" -``` - -## POST with `chunked` before other transfer-coding (lenient) - -TODO(indutny): should we allow it even in lenient mode? (Consider disabling -this). - - -```http -POST /post_identity_body_world?q=search#hey HTTP/1.1 -Accept: */* -Transfer-Encoding: chunked, deflate - -World -``` - -```log -off=0 message begin -off=5 len=38 span[url]="/post_identity_body_world?q=search#hey" -off=44 url complete -off=54 len=6 span[header_field]="Accept" -off=61 header_field complete -off=62 len=3 span[header_value]="*/*" -off=67 header_value complete -off=67 len=17 span[header_field]="Transfer-Encoding" -off=85 header_field complete -off=86 len=16 span[header_value]="chunked, deflate" -off=104 header_value complete -off=106 headers complete method=3 v=1/1 flags=200 content_length=0 -off=106 len=5 span[body]="World" -``` - -## POST with `chunked` as last transfer-coding - - -```http -POST /post_identity_body_world?q=search#hey HTTP/1.1 -Accept: */* -Transfer-Encoding: deflate, chunked - -5 -World -0 - - -``` - -```log -off=0 message begin -off=5 len=38 span[url]="/post_identity_body_world?q=search#hey" -off=44 url complete -off=54 len=6 span[header_field]="Accept" -off=61 header_field complete -off=62 len=3 span[header_value]="*/*" -off=67 header_value complete -off=67 len=17 span[header_field]="Transfer-Encoding" -off=85 header_field complete -off=86 len=16 span[header_value]="deflate, chunked" -off=104 header_value complete -off=106 headers complete method=3 v=1/1 flags=208 content_length=0 -off=109 chunk header len=5 -off=109 len=5 span[body]="World" -off=116 chunk complete -off=119 chunk header len=0 -off=121 chunk complete -off=121 message complete -``` - -## Missing last-chunk - - -```http -PUT /url HTTP/1.1 -Transfer-Encoding: chunked - -3 -foo - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/url" -off=9 url complete -off=19 len=17 span[header_field]="Transfer-Encoding" -off=37 header_field complete -off=38 len=7 span[header_value]="chunked" -off=47 header_value complete -off=49 headers complete method=4 v=1/1 flags=208 content_length=0 -off=52 chunk header len=3 -off=52 len=3 span[body]="foo" -off=57 chunk complete -off=57 error code=12 reason="Invalid character in chunk size" -``` diff --git a/llhttp/test/request/uri.md b/llhttp/test/request/uri.md deleted file mode 100644 index 5e02c3e..0000000 --- a/llhttp/test/request/uri.md +++ /dev/null @@ -1,225 +0,0 @@ -URI -=== - -## Quotes in URI - - -```http -GET /with_"lovely"_quotes?foo=\"bar\" HTTP/1.1 - - -``` - -```log -off=0 message begin -off=4 len=33 span[url]="/with_"lovely"_quotes?foo=\"bar\"" -off=38 url complete -off=50 headers complete method=1 v=1/1 flags=0 content_length=0 -off=50 message complete -``` - -## Query URL with question mark - -Some clients include `?` characters in query strings. - - -```http -GET /test.cgi?foo=bar?baz HTTP/1.1 - - -``` - -```log -off=0 message begin -off=4 len=21 span[url]="/test.cgi?foo=bar?baz" -off=26 url complete -off=38 headers complete method=1 v=1/1 flags=0 content_length=0 -off=38 message complete -``` - -## Host terminated by a query string - - -```http -GET http://hypnotoad.org?hail=all HTTP/1.1\r\n - - -``` - -```log -off=0 message begin -off=4 len=29 span[url]="http://hypnotoad.org?hail=all" -off=34 url complete -off=46 headers complete method=1 v=1/1 flags=0 content_length=0 -off=46 message complete -``` - -## `host:port` terminated by a query string - - -```http -GET http://hypnotoad.org:1234?hail=all HTTP/1.1 - - -``` - -```log -off=0 message begin -off=4 len=34 span[url]="http://hypnotoad.org:1234?hail=all" -off=39 url complete -off=51 headers complete method=1 v=1/1 flags=0 content_length=0 -off=51 message complete -``` - -## Query URL with vertical bar character - -It should be allowed to have vertical bar symbol in URI: `|`. - -See: https://github.com/nodejs/node/issues/27584 - - -```http -GET /test.cgi?query=| HTTP/1.1 - - -``` - -```log -off=0 message begin -off=4 len=17 span[url]="/test.cgi?query=|" -off=22 url complete -off=34 headers complete method=1 v=1/1 flags=0 content_length=0 -off=34 message complete -``` - -## `host:port` terminated by a space - - -```http -GET http://hypnotoad.org:1234 HTTP/1.1 - - -``` - -```log -off=0 message begin -off=4 len=25 span[url]="http://hypnotoad.org:1234" -off=30 url complete -off=42 headers complete method=1 v=1/1 flags=0 content_length=0 -off=42 message complete -``` - -## UTF-8 in URI path in loose mode - - -```http -GET /δ¶/δt/космос/pope?q=1#narf HTTP/1.1 -Host: github.com - - -``` - -```log -off=0 message begin -off=4 len=36 span[url]="/δ¶/δt/космос/pope?q=1#narf" -off=41 url complete -off=51 len=4 span[header_field]="Host" -off=56 header_field complete -off=57 len=10 span[header_value]="github.com" -off=69 header_value complete -off=71 headers complete method=1 v=1/1 flags=0 content_length=0 -off=71 message complete -``` - -## Disallow UTF-8 in URI path in strict mode - - -```http -GET /δ¶/δt/pope?q=1#narf HTTP/1.1 -Host: github.com - - -``` - -```log -off=0 message begin -off=5 error code=7 reason="Invalid char in url path" -``` - -## Fragment in URI - - -```http -GET /forums/1/topics/2375?page=1#posts-17408 HTTP/1.1 - - -``` - -```log -off=0 message begin -off=4 len=40 span[url]="/forums/1/topics/2375?page=1#posts-17408" -off=45 url complete -off=57 headers complete method=1 v=1/1 flags=0 content_length=0 -off=57 message complete -``` - -## Underscore in hostname - - -```http -CONNECT home_0.netscape.com:443 HTTP/1.0 -User-agent: Mozilla/1.1N -Proxy-authorization: basic aGVsbG86d29ybGQ= - - -``` - -```log -off=0 message begin -off=8 len=23 span[url]="home_0.netscape.com:443" -off=32 url complete -off=42 len=10 span[header_field]="User-agent" -off=53 header_field complete -off=54 len=12 span[header_value]="Mozilla/1.1N" -off=68 header_value complete -off=68 len=19 span[header_field]="Proxy-authorization" -off=88 header_field complete -off=89 len=22 span[header_value]="basic aGVsbG86d29ybGQ=" -off=113 header_value complete -off=115 headers complete method=5 v=1/0 flags=0 content_length=0 -off=115 message complete -off=115 error code=22 reason="Pause on CONNECT/Upgrade" -``` - -## `host:port` and basic auth - - -```http -GET http://a%12:b!&*$@hypnotoad.org:1234/toto HTTP/1.1 - - -``` - -```log -off=0 message begin -off=4 len=41 span[url]="http://a%12:b!&*$@hypnotoad.org:1234/toto" -off=46 url complete -off=58 headers complete method=1 v=1/1 flags=0 content_length=0 -off=58 message complete -``` - -## Space in URI - - -```http -GET /foo bar/ HTTP/1.1 - - -``` - -```log -off=0 message begin -off=4 len=4 span[url]="/foo" -off=9 url complete -off=9 error code=8 reason="Expected HTTP/" -``` diff --git a/llhttp/test/response/connection.md b/llhttp/test/response/connection.md deleted file mode 100644 index 1fa1f47..0000000 --- a/llhttp/test/response/connection.md +++ /dev/null @@ -1,460 +0,0 @@ -Connection header -================= - -## Proxy-Connection - - -```http -HTTP/1.1 200 OK -Content-Type: text/html; charset=UTF-8 -Content-Length: 11 -Proxy-Connection: close -Date: Thu, 31 Dec 2009 20:55:48 +0000 - -hello world -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=12 span[header_field]="Content-Type" -off=30 header_field complete -off=31 len=24 span[header_value]="text/html; charset=UTF-8" -off=57 header_value complete -off=57 len=14 span[header_field]="Content-Length" -off=72 header_field complete -off=73 len=2 span[header_value]="11" -off=77 header_value complete -off=77 len=16 span[header_field]="Proxy-Connection" -off=94 header_field complete -off=95 len=5 span[header_value]="close" -off=102 header_value complete -off=102 len=4 span[header_field]="Date" -off=107 header_field complete -off=108 len=31 span[header_value]="Thu, 31 Dec 2009 20:55:48 +0000" -off=141 header_value complete -off=143 headers complete status=200 v=1/1 flags=22 content_length=11 -off=143 len=11 span[body]="hello world" -off=154 message complete -``` - -## HTTP/1.0 with keep-alive and EOF-terminated 200 status - -There is no `Content-Length` in this response, so even though the -`keep-alive` is on - it should read until EOF. - - -```http -HTTP/1.0 200 OK -Connection: keep-alive - -HTTP/1.0 200 OK -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=10 span[header_field]="Connection" -off=28 header_field complete -off=29 len=10 span[header_value]="keep-alive" -off=41 header_value complete -off=43 headers complete status=200 v=1/0 flags=1 content_length=0 -off=43 len=15 span[body]="HTTP/1.0 200 OK" -``` - -## HTTP/1.0 with keep-alive and 204 status - -Responses with `204` status cannot have a body. - - -```http -HTTP/1.0 204 No content -Connection: keep-alive - -HTTP/1.0 200 OK -``` - -```log -off=0 message begin -off=13 len=10 span[status]="No content" -off=25 status complete -off=25 len=10 span[header_field]="Connection" -off=36 header_field complete -off=37 len=10 span[header_value]="keep-alive" -off=49 header_value complete -off=51 headers complete status=204 v=1/0 flags=1 content_length=0 -off=51 message complete -off=51 message begin -off=64 len=2 span[status]="OK" -``` - -## HTTP/1.1 with EOF-terminated 200 status - -There is no `Content-Length` in this response, so even though the -`keep-alive` is on (implicitly in HTTP 1.1) - it should read until EOF. - - -```http -HTTP/1.1 200 OK - -HTTP/1.1 200 OK -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=19 headers complete status=200 v=1/1 flags=0 content_length=0 -off=19 len=15 span[body]="HTTP/1.1 200 OK" -``` - -## HTTP/1.1 with 204 status - -Responses with `204` status cannot have a body. - - -```http -HTTP/1.1 204 No content - -HTTP/1.1 200 OK -``` - -```log -off=0 message begin -off=13 len=10 span[status]="No content" -off=25 status complete -off=27 headers complete status=204 v=1/1 flags=0 content_length=0 -off=27 message complete -off=27 message begin -off=40 len=2 span[status]="OK" -``` - -## HTTP/1.1 with keep-alive disabled and 204 status in strict mode - - -```http -HTTP/1.1 204 No content -Connection: close - -HTTP/1.1 200 OK -``` - -```log -off=0 message begin -off=13 len=10 span[status]="No content" -off=25 status complete -off=25 len=10 span[header_field]="Connection" -off=36 header_field complete -off=37 len=5 span[header_value]="close" -off=44 header_value complete -off=46 headers complete status=204 v=1/1 flags=2 content_length=0 -off=46 message complete -off=47 error code=5 reason="Data after `Connection: close`" -``` - -## HTTP/1.1 with keep-alive disabled, content-length, and in loose mode - -Parser should discard extra request in loose mode. - - -```http -HTTP/1.1 200 No content -Content-Length: 5 -Connection: close - -2ad731e3-4dcd-4f70-b871-0ad284b29ffc -``` - -```log -off=0 message begin -off=13 len=10 span[status]="No content" -off=25 status complete -off=25 len=14 span[header_field]="Content-Length" -off=40 header_field complete -off=41 len=1 span[header_value]="5" -off=44 header_value complete -off=44 len=10 span[header_field]="Connection" -off=55 header_field complete -off=56 len=5 span[header_value]="close" -off=63 header_value complete -off=65 headers complete status=200 v=1/1 flags=22 content_length=5 -off=65 len=5 span[body]="2ad73" -off=70 message complete -``` - -## HTTP/1.1 with keep-alive disabled, content-length, and in strict mode - -Parser should discard extra request in strict mode. - - -```http -HTTP/1.1 200 No content -Content-Length: 5 -Connection: close - -2ad731e3-4dcd-4f70-b871-0ad284b29ffc -``` - -```log -off=0 message begin -off=13 len=10 span[status]="No content" -off=25 status complete -off=25 len=14 span[header_field]="Content-Length" -off=40 header_field complete -off=41 len=1 span[header_value]="5" -off=44 header_value complete -off=44 len=10 span[header_field]="Connection" -off=55 header_field complete -off=56 len=5 span[header_value]="close" -off=63 header_value complete -off=65 headers complete status=200 v=1/1 flags=22 content_length=5 -off=65 len=5 span[body]="2ad73" -off=70 message complete -off=71 error code=5 reason="Data after `Connection: close`" -``` - -## HTTP/1.1 with keep-alive disabled, content-length, and in lenient mode - -Parser should process extra request in lenient mode. - - -```http -HTTP/1.1 200 No content -Content-Length: 5 -Connection: close - -2ad73HTTP/1.1 200 OK -``` - -```log -off=0 message begin -off=13 len=10 span[status]="No content" -off=25 status complete -off=25 len=14 span[header_field]="Content-Length" -off=40 header_field complete -off=41 len=1 span[header_value]="5" -off=44 header_value complete -off=44 len=10 span[header_field]="Connection" -off=55 header_field complete -off=56 len=5 span[header_value]="close" -off=63 header_value complete -off=65 headers complete status=200 v=1/1 flags=22 content_length=5 -off=65 len=5 span[body]="2ad73" -off=70 message complete -off=70 message begin -off=83 len=2 span[status]="OK" -``` - -## HTTP/1.1 with keep-alive disabled and 204 status in lenient mode - - -```http -HTTP/1.1 204 No content -Connection: close - -HTTP/1.1 200 OK -``` - -```log -off=0 message begin -off=13 len=10 span[status]="No content" -off=25 status complete -off=25 len=10 span[header_field]="Connection" -off=36 header_field complete -off=37 len=5 span[header_value]="close" -off=44 header_value complete -off=46 headers complete status=204 v=1/1 flags=2 content_length=0 -off=46 message complete -off=46 message begin -off=59 len=2 span[status]="OK" -``` - -## HTTP 101 response with Upgrade and Content-Length header - - -```http -HTTP/1.1 101 Switching Protocols -Connection: upgrade -Upgrade: h2c -Content-Length: 4 - -body\ -proto -``` - -```log -off=0 message begin -off=13 len=19 span[status]="Switching Protocols" -off=34 status complete -off=34 len=10 span[header_field]="Connection" -off=45 header_field complete -off=46 len=7 span[header_value]="upgrade" -off=55 header_value complete -off=55 len=7 span[header_field]="Upgrade" -off=63 header_field complete -off=64 len=3 span[header_value]="h2c" -off=69 header_value complete -off=69 len=14 span[header_field]="Content-Length" -off=84 header_field complete -off=85 len=1 span[header_value]="4" -off=88 header_value complete -off=90 headers complete status=101 v=1/1 flags=34 content_length=4 -off=90 len=4 span[body]="body" -off=94 message complete -off=94 error code=22 reason="Pause on CONNECT/Upgrade" -``` - -## HTTP 101 response with Upgrade and Transfer-Encoding header - - -```http -HTTP/1.1 101 Switching Protocols -Connection: upgrade -Upgrade: h2c -Transfer-Encoding: chunked - -2 -bo -2 -dy -0 - -proto -``` - -```log -off=0 message begin -off=13 len=19 span[status]="Switching Protocols" -off=34 status complete -off=34 len=10 span[header_field]="Connection" -off=45 header_field complete -off=46 len=7 span[header_value]="upgrade" -off=55 header_value complete -off=55 len=7 span[header_field]="Upgrade" -off=63 header_field complete -off=64 len=3 span[header_value]="h2c" -off=69 header_value complete -off=69 len=17 span[header_field]="Transfer-Encoding" -off=87 header_field complete -off=88 len=7 span[header_value]="chunked" -off=97 header_value complete -off=99 headers complete status=101 v=1/1 flags=21c content_length=0 -off=102 chunk header len=2 -off=102 len=2 span[body]="bo" -off=106 chunk complete -off=109 chunk header len=2 -off=109 len=2 span[body]="dy" -off=113 chunk complete -off=116 chunk header len=0 -off=118 chunk complete -off=118 message complete -off=118 error code=22 reason="Pause on CONNECT/Upgrade" -``` - -## HTTP 200 response with Upgrade header - - -```http -HTTP/1.1 200 OK -Connection: upgrade -Upgrade: h2c - -body -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=10 span[header_field]="Connection" -off=28 header_field complete -off=29 len=7 span[header_value]="upgrade" -off=38 header_value complete -off=38 len=7 span[header_field]="Upgrade" -off=46 header_field complete -off=47 len=3 span[header_value]="h2c" -off=52 header_value complete -off=54 headers complete status=200 v=1/1 flags=14 content_length=0 -off=54 len=4 span[body]="body" -``` - -## HTTP 200 response with Upgrade header and Content-Length - - -```http -HTTP/1.1 200 OK -Connection: upgrade -Upgrade: h2c -Content-Length: 4 - -body -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=10 span[header_field]="Connection" -off=28 header_field complete -off=29 len=7 span[header_value]="upgrade" -off=38 header_value complete -off=38 len=7 span[header_field]="Upgrade" -off=46 header_field complete -off=47 len=3 span[header_value]="h2c" -off=52 header_value complete -off=52 len=14 span[header_field]="Content-Length" -off=67 header_field complete -off=68 len=1 span[header_value]="4" -off=71 header_value complete -off=73 headers complete status=200 v=1/1 flags=34 content_length=4 -off=73 len=4 span[body]="body" -off=77 message complete -``` - -## HTTP 200 response with Upgrade header and Transfer-Encoding - - -```http -HTTP/1.1 200 OK -Connection: upgrade -Upgrade: h2c -Transfer-Encoding: chunked - -2 -bo -2 -dy -0 - - -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=10 span[header_field]="Connection" -off=28 header_field complete -off=29 len=7 span[header_value]="upgrade" -off=38 header_value complete -off=38 len=7 span[header_field]="Upgrade" -off=46 header_field complete -off=47 len=3 span[header_value]="h2c" -off=52 header_value complete -off=52 len=17 span[header_field]="Transfer-Encoding" -off=70 header_field complete -off=71 len=7 span[header_value]="chunked" -off=80 header_value complete -off=82 headers complete status=200 v=1/1 flags=21c content_length=0 -off=85 chunk header len=2 -off=85 len=2 span[body]="bo" -off=89 chunk complete -off=92 chunk header len=2 -off=92 len=2 span[body]="dy" -off=96 chunk complete -off=99 chunk header len=0 -off=101 chunk complete -off=101 message complete -``` diff --git a/llhttp/test/response/content-length.md b/llhttp/test/response/content-length.md deleted file mode 100644 index 48ef077..0000000 --- a/llhttp/test/response/content-length.md +++ /dev/null @@ -1,113 +0,0 @@ -Content-Length header -===================== - -## Response without `Content-Length`, but with body - -The client should wait for the server's EOF. That is, when -`Content-Length` is not specified, and `Connection: close`, the end of body is -specified by the EOF. - -_(Compare with APACHEBENCH_GET)_ - - -```http -HTTP/1.1 200 OK -Date: Tue, 04 Aug 2009 07:59:32 GMT -Server: Apache -X-Powered-By: Servlet/2.5 JSP/2.1 -Content-Type: text/xml; charset=utf-8 -Connection: close - -\n\ -\n\ - \n\ - \n\ - SOAP-ENV:Client\n\ - Client Error\n\ - \n\ - \n\ - -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=4 span[header_field]="Date" -off=22 header_field complete -off=23 len=29 span[header_value]="Tue, 04 Aug 2009 07:59:32 GMT" -off=54 header_value complete -off=54 len=6 span[header_field]="Server" -off=61 header_field complete -off=62 len=6 span[header_value]="Apache" -off=70 header_value complete -off=70 len=12 span[header_field]="X-Powered-By" -off=83 header_field complete -off=84 len=19 span[header_value]="Servlet/2.5 JSP/2.1" -off=105 header_value complete -off=105 len=12 span[header_field]="Content-Type" -off=118 header_field complete -off=119 len=23 span[header_value]="text/xml; charset=utf-8" -off=144 header_value complete -off=144 len=10 span[header_field]="Connection" -off=155 header_field complete -off=156 len=5 span[header_value]="close" -off=163 header_value complete -off=165 headers complete status=200 v=1/1 flags=2 content_length=0 -off=165 len=42 span[body]="" -off=207 len=1 span[body]=lf -off=208 len=80 span[body]="" -off=288 len=1 span[body]=lf -off=289 len=17 span[body]=" " -off=306 len=1 span[body]=lf -off=307 len=20 span[body]=" " -off=327 len=1 span[body]=lf -off=328 len=45 span[body]=" SOAP-ENV:Client" -off=373 len=1 span[body]=lf -off=374 len=46 span[body]=" Client Error" -off=420 len=1 span[body]=lf -off=421 len=21 span[body]=" " -off=442 len=1 span[body]=lf -off=443 len=18 span[body]=" " -off=461 len=1 span[body]=lf -off=462 len=20 span[body]="" -``` - -## Content-Length-X - -The header that starts with `Content-Length*` should not be treated as -`Content-Length`. - - -```http -HTTP/1.1 200 OK -Content-Length-X: 0 -Transfer-Encoding: chunked - -2 -OK -0 - - -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=16 span[header_field]="Content-Length-X" -off=34 header_field complete -off=35 len=1 span[header_value]="0" -off=38 header_value complete -off=38 len=17 span[header_field]="Transfer-Encoding" -off=56 header_field complete -off=57 len=7 span[header_value]="chunked" -off=66 header_value complete -off=68 headers complete status=200 v=1/1 flags=208 content_length=0 -off=71 chunk header len=2 -off=71 len=2 span[body]="OK" -off=75 chunk complete -off=78 chunk header len=0 -off=80 chunk complete -off=80 message complete -``` diff --git a/llhttp/test/response/finish.md b/llhttp/test/response/finish.md deleted file mode 100644 index 117ddb1..0000000 --- a/llhttp/test/response/finish.md +++ /dev/null @@ -1,21 +0,0 @@ -Finish -====== - -Those tests check the return codes and the behavior of `llhttp_finish()` C API. - -## It should be safe to finish with cb after empty response - - -```http -HTTP/1.1 200 OK - - -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=19 headers complete status=200 v=1/1 flags=0 content_length=0 -off=NULL finish=1 -``` diff --git a/llhttp/test/response/invalid.md b/llhttp/test/response/invalid.md deleted file mode 100644 index 60bd304..0000000 --- a/llhttp/test/response/invalid.md +++ /dev/null @@ -1,108 +0,0 @@ -Invalid responses -================= - -### Incomplete HTTP protocol - -*TODO(indutny): test `req_or_res` mode too* - - -```http -HTP/1.1 200 OK - - -``` - -```log -off=0 message begin -off=2 error code=8 reason="Expected HTTP/" -``` - -### Extra digit in HTTP major version - - -```http -HTTP/01.1 200 OK - - -``` - -```log -off=0 message begin -off=6 error code=9 reason="Expected dot" -``` - -### Extra digit in HTTP major version #2 - - -```http -HTTP/11.1 200 OK - - -``` - -```log -off=0 message begin -off=6 error code=9 reason="Expected dot" -``` - -### Extra digit in HTTP minor version - - -```http -HTTP/1.01 200 OK - - -``` - -```log -off=0 message begin -off=8 error code=9 reason="Expected space after version" -``` - -### Tab after HTTP version - - -```http -HTTP/1.1\t200 OK - - -``` - -```log -off=0 message begin -off=8 error code=9 reason="Expected space after version" -``` - -### CR before response and tab after HTTP version - - -```http -\rHTTP/1.1\t200 OK - - -``` - -```log -off=1 message begin -off=9 error code=9 reason="Expected space after version" -``` - -### Headers separated by CR - - -```http -HTTP/1.1 200 OK -Foo: 1\rBar: 2 - - -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=3 span[header_field]="Foo" -off=21 header_field complete -off=22 len=1 span[header_value]="1" -off=24 error code=3 reason="Missing expected LF after header value" -``` diff --git a/llhttp/test/response/sample.md b/llhttp/test/response/sample.md deleted file mode 100644 index bb12fe1..0000000 --- a/llhttp/test/response/sample.md +++ /dev/null @@ -1,656 +0,0 @@ -Sample responses -================ - -## Simple response - - -```http -HTTP/1.1 200 OK -Header1: Value1 -Header2:\t Value2 -Content-Length: 0 - - -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=7 span[header_field]="Header1" -off=25 header_field complete -off=26 len=6 span[header_value]="Value1" -off=34 header_value complete -off=34 len=7 span[header_field]="Header2" -off=42 header_field complete -off=44 len=6 span[header_value]="Value2" -off=52 header_value complete -off=52 len=14 span[header_field]="Content-Length" -off=67 header_field complete -off=68 len=1 span[header_value]="0" -off=71 header_value complete -off=73 headers complete status=200 v=1/1 flags=20 content_length=0 -off=73 message complete -``` - -## Error on invalid response start - -Every response must start with `HTTP/`. - - -```http -HTTPER/1.1 200 OK - - -``` - -```log -off=0 message begin -off=4 error code=8 reason="Expected HTTP/" -``` - -## Empty body should not trigger spurious span callbacks - - -```http -HTTP/1.1 200 OK - - -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=19 headers complete status=200 v=1/1 flags=0 content_length=0 -``` - -## Google 301 - - -```http -HTTP/1.1 301 Moved Permanently -Location: http://www.google.com/ -Content-Type: text/html; charset=UTF-8 -Date: Sun, 26 Apr 2009 11:11:49 GMT -Expires: Tue, 26 May 2009 11:11:49 GMT -X-$PrototypeBI-Version: 1.6.0.3 -Cache-Control: public, max-age=2592000 -Server: gws -Content-Length: 219 - -\n\ -301 Moved\n\ -

    301 Moved

    \n\ -The document has moved\n\ -here. - -``` -_(Note the `$` char in header field)_ - -```log -off=0 message begin -off=13 len=17 span[status]="Moved Permanently" -off=32 status complete -off=32 len=8 span[header_field]="Location" -off=41 header_field complete -off=42 len=22 span[header_value]="http://www.google.com/" -off=66 header_value complete -off=66 len=12 span[header_field]="Content-Type" -off=79 header_field complete -off=80 len=24 span[header_value]="text/html; charset=UTF-8" -off=106 header_value complete -off=106 len=4 span[header_field]="Date" -off=111 header_field complete -off=112 len=29 span[header_value]="Sun, 26 Apr 2009 11:11:49 GMT" -off=143 header_value complete -off=143 len=7 span[header_field]="Expires" -off=151 header_field complete -off=152 len=29 span[header_value]="Tue, 26 May 2009 11:11:49 GMT" -off=183 header_value complete -off=183 len=22 span[header_field]="X-$PrototypeBI-Version" -off=206 header_field complete -off=207 len=7 span[header_value]="1.6.0.3" -off=216 header_value complete -off=216 len=13 span[header_field]="Cache-Control" -off=230 header_field complete -off=231 len=23 span[header_value]="public, max-age=2592000" -off=256 header_value complete -off=256 len=6 span[header_field]="Server" -off=263 header_field complete -off=264 len=3 span[header_value]="gws" -off=269 header_value complete -off=269 len=14 span[header_field]="Content-Length" -off=284 header_field complete -off=286 len=5 span[header_value]="219 " -off=293 header_value complete -off=295 headers complete status=301 v=1/1 flags=20 content_length=219 -off=295 len=74 span[body]="" -off=369 len=1 span[body]=lf -off=370 len=37 span[body]="301 Moved" -off=407 len=1 span[body]=lf -off=408 len=18 span[body]="

    301 Moved

    " -off=426 len=1 span[body]=lf -off=427 len=22 span[body]="The document has moved" -off=449 len=1 span[body]=lf -off=450 len=42 span[body]="here." -off=492 len=1 span[body]=cr -off=493 len=1 span[body]=lf -off=494 len=14 span[body]="" -``` - -## amazon.com - - -```http -HTTP/1.1 301 MovedPermanently -Date: Wed, 15 May 2013 17:06:33 GMT -Server: Server -x-amz-id-1: 0GPHKXSJQ826RK7GZEB2 -p3p: policyref="http://www.amazon.com/w3c/p3p.xml",CP="CAO DSP LAW CUR ADM IVAo IVDo CONo OTPo OUR DELi PUBi OTRi BUS PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA HEA PRE LOC GOV OTC " -x-amz-id-2: STN69VZxIFSz9YJLbz1GDbxpbjG6Qjmmq5E3DxRhOUw+Et0p4hr7c/Q8qNcx4oAD -Location: http://www.amazon.com/Dan-Brown/e/B000AP9DSU/ref=s9_pop_gw_al1?_encoding=UTF8&refinementId=618073011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-2&pf_rd_r=0SHYY5BZXN3KR20BNFAY&pf_rd_t=101&pf_rd_p=1263340922&pf_rd_i=507846 -Vary: Accept-Encoding,User-Agent -Content-Type: text/html; charset=ISO-8859-1 -Transfer-Encoding: chunked - -1 -\n -0 - - -``` - -```log -off=0 message begin -off=13 len=16 span[status]="MovedPermanently" -off=31 status complete -off=31 len=4 span[header_field]="Date" -off=36 header_field complete -off=37 len=29 span[header_value]="Wed, 15 May 2013 17:06:33 GMT" -off=68 header_value complete -off=68 len=6 span[header_field]="Server" -off=75 header_field complete -off=76 len=6 span[header_value]="Server" -off=84 header_value complete -off=84 len=10 span[header_field]="x-amz-id-1" -off=95 header_field complete -off=96 len=20 span[header_value]="0GPHKXSJQ826RK7GZEB2" -off=118 header_value complete -off=118 len=3 span[header_field]="p3p" -off=122 header_field complete -off=123 len=178 span[header_value]="policyref="http://www.amazon.com/w3c/p3p.xml",CP="CAO DSP LAW CUR ADM IVAo IVDo CONo OTPo OUR DELi PUBi OTRi BUS PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA HEA PRE LOC GOV OTC "" -off=303 header_value complete -off=303 len=10 span[header_field]="x-amz-id-2" -off=314 header_field complete -off=315 len=64 span[header_value]="STN69VZxIFSz9YJLbz1GDbxpbjG6Qjmmq5E3DxRhOUw+Et0p4hr7c/Q8qNcx4oAD" -off=381 header_value complete -off=381 len=8 span[header_field]="Location" -off=390 header_field complete -off=391 len=214 span[header_value]="http://www.amazon.com/Dan-Brown/e/B000AP9DSU/ref=s9_pop_gw_al1?_encoding=UTF8&refinementId=618073011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-2&pf_rd_r=0SHYY5BZXN3KR20BNFAY&pf_rd_t=101&pf_rd_p=1263340922&pf_rd_i=507846" -off=607 header_value complete -off=607 len=4 span[header_field]="Vary" -off=612 header_field complete -off=613 len=26 span[header_value]="Accept-Encoding,User-Agent" -off=641 header_value complete -off=641 len=12 span[header_field]="Content-Type" -off=654 header_field complete -off=655 len=29 span[header_value]="text/html; charset=ISO-8859-1" -off=686 header_value complete -off=686 len=17 span[header_field]="Transfer-Encoding" -off=704 header_field complete -off=705 len=7 span[header_value]="chunked" -off=714 header_value complete -off=716 headers complete status=301 v=1/1 flags=208 content_length=0 -off=719 chunk header len=1 -off=719 len=1 span[body]=lf -off=722 chunk complete -off=725 chunk header len=0 -off=727 chunk complete -off=727 message complete -``` - -## No headers and no body - - -```http -HTTP/1.1 404 Not Found - - -``` - -```log -off=0 message begin -off=13 len=9 span[status]="Not Found" -off=24 status complete -off=26 headers complete status=404 v=1/1 flags=0 content_length=0 -``` - -## No reason phrase - - -```http -HTTP/1.1 301 - - -``` - -```log -off=0 message begin -off=14 status complete -off=16 headers complete status=301 v=1/1 flags=0 content_length=0 -``` - -## Empty reason phrase after space - - -```http -HTTP/1.1 200 \r\n\ - - -``` - -```log -off=0 message begin -off=15 status complete -off=17 headers complete status=200 v=1/1 flags=0 content_length=0 -``` - -## No carriage ret - - -```http -HTTP/1.1 200 OK\n\ -Content-Type: text/html; charset=utf-8\n\ -Connection: close\n\ -\n\ -these headers are from http://news.ycombinator.com/ -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=16 status complete -off=16 len=12 span[header_field]="Content-Type" -off=29 header_field complete -off=30 len=24 span[header_value]="text/html; charset=utf-8" -off=55 header_value complete -off=55 len=10 span[header_field]="Connection" -off=66 header_field complete -off=67 len=5 span[header_value]="close" -off=73 header_value complete -off=74 headers complete status=200 v=1/1 flags=2 content_length=0 -off=74 len=51 span[body]="these headers are from http://news.ycombinator.com/" -``` - -## Underscore in header key - -Shown by: `curl -o /dev/null -v "http://ad.doubleclick.net/pfadx/DARTSHELLCONFIGXML;dcmt=text/xml;"` - - -```http -HTTP/1.1 200 OK -Server: DCLK-AdSvr -Content-Type: text/xml -Content-Length: 0 -DCLK_imp: v7;x;114750856;0-0;0;17820020;0/0;21603567/21621457/1;;~okv=;dcmt=text/xml;;~cs=o - - -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=6 span[header_field]="Server" -off=24 header_field complete -off=25 len=10 span[header_value]="DCLK-AdSvr" -off=37 header_value complete -off=37 len=12 span[header_field]="Content-Type" -off=50 header_field complete -off=51 len=8 span[header_value]="text/xml" -off=61 header_value complete -off=61 len=14 span[header_field]="Content-Length" -off=76 header_field complete -off=77 len=1 span[header_value]="0" -off=80 header_value complete -off=80 len=8 span[header_field]="DCLK_imp" -off=89 header_field complete -off=90 len=81 span[header_value]="v7;x;114750856;0-0;0;17820020;0/0;21603567/21621457/1;;~okv=;dcmt=text/xml;;~cs=o" -off=173 header_value complete -off=175 headers complete status=200 v=1/1 flags=20 content_length=0 -off=175 message complete -``` - -## bonjourmadame.fr - -The client should not merge two headers fields when the first one doesn't -have a value. - - -```http -HTTP/1.0 301 Moved Permanently -Date: Thu, 03 Jun 2010 09:56:32 GMT -Server: Apache/2.2.3 (Red Hat) -Cache-Control: public -Pragma: \r\n\ -Location: http://www.bonjourmadame.fr/ -Vary: Accept-Encoding -Content-Length: 0 -Content-Type: text/html; charset=UTF-8 -Connection: keep-alive - - -``` - -```log -off=0 message begin -off=13 len=17 span[status]="Moved Permanently" -off=32 status complete -off=32 len=4 span[header_field]="Date" -off=37 header_field complete -off=38 len=29 span[header_value]="Thu, 03 Jun 2010 09:56:32 GMT" -off=69 header_value complete -off=69 len=6 span[header_field]="Server" -off=76 header_field complete -off=77 len=22 span[header_value]="Apache/2.2.3 (Red Hat)" -off=101 header_value complete -off=101 len=13 span[header_field]="Cache-Control" -off=115 header_field complete -off=116 len=6 span[header_value]="public" -off=124 header_value complete -off=124 len=6 span[header_field]="Pragma" -off=131 header_field complete -off=134 len=0 span[header_value]="" -off=134 header_value complete -off=134 len=8 span[header_field]="Location" -off=143 header_field complete -off=144 len=28 span[header_value]="http://www.bonjourmadame.fr/" -off=174 header_value complete -off=174 len=4 span[header_field]="Vary" -off=179 header_field complete -off=180 len=15 span[header_value]="Accept-Encoding" -off=197 header_value complete -off=197 len=14 span[header_field]="Content-Length" -off=212 header_field complete -off=213 len=1 span[header_value]="0" -off=216 header_value complete -off=216 len=12 span[header_field]="Content-Type" -off=229 header_field complete -off=230 len=24 span[header_value]="text/html; charset=UTF-8" -off=256 header_value complete -off=256 len=10 span[header_field]="Connection" -off=267 header_field complete -off=268 len=10 span[header_value]="keep-alive" -off=280 header_value complete -off=282 headers complete status=301 v=1/0 flags=21 content_length=0 -off=282 message complete -``` - -## Spaces in header value - - -```http -HTTP/1.1 200 OK -Date: Tue, 28 Sep 2010 01:14:13 GMT -Server: Apache -Cache-Control: no-cache, must-revalidate -Expires: Mon, 26 Jul 1997 05:00:00 GMT -.et-Cookie: PlaxoCS=1274804622353690521; path=/; domain=.plaxo.com -Vary: Accept-Encoding -_eep-Alive: timeout=45 -_onnection: Keep-Alive -Transfer-Encoding: chunked -Content-Type: text/html -Connection: close - -0 - - -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=4 span[header_field]="Date" -off=22 header_field complete -off=23 len=29 span[header_value]="Tue, 28 Sep 2010 01:14:13 GMT" -off=54 header_value complete -off=54 len=6 span[header_field]="Server" -off=61 header_field complete -off=62 len=6 span[header_value]="Apache" -off=70 header_value complete -off=70 len=13 span[header_field]="Cache-Control" -off=84 header_field complete -off=85 len=25 span[header_value]="no-cache, must-revalidate" -off=112 header_value complete -off=112 len=7 span[header_field]="Expires" -off=120 header_field complete -off=121 len=29 span[header_value]="Mon, 26 Jul 1997 05:00:00 GMT" -off=152 header_value complete -off=152 len=10 span[header_field]=".et-Cookie" -off=163 header_field complete -off=164 len=54 span[header_value]="PlaxoCS=1274804622353690521; path=/; domain=.plaxo.com" -off=220 header_value complete -off=220 len=4 span[header_field]="Vary" -off=225 header_field complete -off=226 len=15 span[header_value]="Accept-Encoding" -off=243 header_value complete -off=243 len=10 span[header_field]="_eep-Alive" -off=254 header_field complete -off=255 len=10 span[header_value]="timeout=45" -off=267 header_value complete -off=267 len=10 span[header_field]="_onnection" -off=278 header_field complete -off=279 len=10 span[header_value]="Keep-Alive" -off=291 header_value complete -off=291 len=17 span[header_field]="Transfer-Encoding" -off=309 header_field complete -off=310 len=7 span[header_value]="chunked" -off=319 header_value complete -off=319 len=12 span[header_field]="Content-Type" -off=332 header_field complete -off=333 len=9 span[header_value]="text/html" -off=344 header_value complete -off=344 len=10 span[header_field]="Connection" -off=355 header_field complete -off=356 len=5 span[header_value]="close" -off=363 header_value complete -off=365 headers complete status=200 v=1/1 flags=20a content_length=0 -off=368 chunk header len=0 -off=370 chunk complete -off=370 message complete -``` - -## Spaces in header name in strict mode - - -```http -HTTP/1.1 200 OK -Server: Microsoft-IIS/6.0 -X-Powered-By: ASP.NET -en-US Content-Type: text/xml -Content-Type: text/xml -Content-Length: 16 -Date: Fri, 23 Jul 2010 18:45:38 GMT -Connection: keep-alive - -hello -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=6 span[header_field]="Server" -off=24 header_field complete -off=25 len=17 span[header_value]="Microsoft-IIS/6.0" -off=44 header_value complete -off=44 len=12 span[header_field]="X-Powered-By" -off=57 header_field complete -off=58 len=7 span[header_value]="ASP.NET" -off=67 header_value complete -off=72 error code=10 reason="Invalid header token" -``` - -## Spaces in header name in loose mode - -`en-US Content-Type` must be treated as a header name - - -```http -HTTP/1.1 200 OK -Server: Microsoft-IIS/6.0 -X-Powered-By: ASP.NET -en-US Content-Type: text/xml -Content-Type: text/xml -Content-Length: 16 -Date: Fri, 23 Jul 2010 18:45:38 GMT -Connection: keep-alive - -hello -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=6 span[header_field]="Server" -off=24 header_field complete -off=25 len=17 span[header_value]="Microsoft-IIS/6.0" -off=44 header_value complete -off=44 len=12 span[header_field]="X-Powered-By" -off=57 header_field complete -off=58 len=7 span[header_value]="ASP.NET" -off=67 header_value complete -off=67 len=18 span[header_field]="en-US Content-Type" -off=86 header_field complete -off=87 len=8 span[header_value]="text/xml" -off=97 header_value complete -off=97 len=12 span[header_field]="Content-Type" -off=110 header_field complete -off=111 len=8 span[header_value]="text/xml" -off=121 header_value complete -off=121 len=14 span[header_field]="Content-Length" -off=136 header_field complete -off=137 len=2 span[header_value]="16" -off=141 header_value complete -off=141 len=4 span[header_field]="Date" -off=146 header_field complete -off=147 len=29 span[header_value]="Fri, 23 Jul 2010 18:45:38 GMT" -off=178 header_value complete -off=178 len=10 span[header_field]="Connection" -off=189 header_field complete -off=190 len=10 span[header_value]="keep-alive" -off=202 header_value complete -off=204 headers complete status=200 v=1/1 flags=21 content_length=16 -off=204 len=16 span[body]="hello" -off=220 message complete -``` - -## Non ASCII in status line - - -```http -HTTP/1.1 500 Oriëntatieprobleem -Date: Fri, 5 Nov 2010 23:07:12 GMT+2 -Content-Length: 0 -Connection: close - - -``` - -```log -off=0 message begin -off=13 len=19 span[status]="Oriëntatieprobleem" -off=34 status complete -off=34 len=4 span[header_field]="Date" -off=39 header_field complete -off=40 len=30 span[header_value]="Fri, 5 Nov 2010 23:07:12 GMT+2" -off=72 header_value complete -off=72 len=14 span[header_field]="Content-Length" -off=87 header_field complete -off=88 len=1 span[header_value]="0" -off=91 header_value complete -off=91 len=10 span[header_field]="Connection" -off=102 header_field complete -off=103 len=5 span[header_value]="close" -off=110 header_value complete -off=112 headers complete status=500 v=1/1 flags=22 content_length=0 -off=112 message complete -``` - -## HTTP version 0.9 - - -```http -HTTP/0.9 200 OK - - -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=19 headers complete status=200 v=0/9 flags=0 content_length=0 -``` - -## No Content-Length, no Transfer-Encoding - -The client should wait for the server's EOF. That is, when neither -content-length nor transfer-encoding is specified, the end of body -is specified by the EOF. - - -```http -HTTP/1.1 200 OK -Content-Type: text/plain - -hello world -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=12 span[header_field]="Content-Type" -off=30 header_field complete -off=31 len=10 span[header_value]="text/plain" -off=43 header_value complete -off=45 headers complete status=200 v=1/1 flags=0 content_length=0 -off=45 len=11 span[body]="hello world" -``` - -## Response starting with CRLF - - -```http -\r\nHTTP/1.1 200 OK -Header1: Value1 -Header2:\t Value2 -Content-Length: 0 - - -``` - -```log -off=2 message begin -off=15 len=2 span[status]="OK" -off=19 status complete -off=19 len=7 span[header_field]="Header1" -off=27 header_field complete -off=28 len=6 span[header_value]="Value1" -off=36 header_value complete -off=36 len=7 span[header_field]="Header2" -off=44 header_field complete -off=46 len=6 span[header_value]="Value2" -off=54 header_value complete -off=54 len=14 span[header_field]="Content-Length" -off=69 header_field complete -off=70 len=1 span[header_value]="0" -off=73 header_value complete -off=75 headers complete status=200 v=1/1 flags=20 content_length=0 -off=75 message complete -``` diff --git a/llhttp/test/response/transfer-encoding.md b/llhttp/test/response/transfer-encoding.md deleted file mode 100644 index dde9908..0000000 --- a/llhttp/test/response/transfer-encoding.md +++ /dev/null @@ -1,76 +0,0 @@ -Transfer-Encoding header -======================== - -## Trailing space on chunked body - - -```http -HTTP/1.1 200 OK -Content-Type: text/plain -Transfer-Encoding: chunked - -25 \r\n\ -This is the data in the first chunk - -1C -and this is the second one - -0 \r\n\ - - -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=12 span[header_field]="Content-Type" -off=30 header_field complete -off=31 len=10 span[header_value]="text/plain" -off=43 header_value complete -off=43 len=17 span[header_field]="Transfer-Encoding" -off=61 header_field complete -off=62 len=7 span[header_value]="chunked" -off=71 header_value complete -off=73 headers complete status=200 v=1/1 flags=208 content_length=0 -off=79 chunk header len=37 -off=79 len=35 span[body]="This is the data in the first chunk" -off=114 len=1 span[body]=cr -off=115 len=1 span[body]=lf -off=118 chunk complete -off=122 chunk header len=28 -off=122 len=26 span[body]="and this is the second one" -off=148 len=1 span[body]=cr -off=149 len=1 span[body]=lf -off=152 chunk complete -off=157 chunk header len=0 -off=159 chunk complete -off=159 message complete -``` - -## `chunked` before other transfer-coding - - -```http -HTTP/1.1 200 OK -Accept: */* -Transfer-Encoding: chunked, deflate - -World -``` - -```log -off=0 message begin -off=13 len=2 span[status]="OK" -off=17 status complete -off=17 len=6 span[header_field]="Accept" -off=24 header_field complete -off=25 len=3 span[header_value]="*/*" -off=30 header_value complete -off=30 len=17 span[header_field]="Transfer-Encoding" -off=48 header_field complete -off=49 len=16 span[header_value]="chunked, deflate" -off=67 header_value complete -off=69 headers complete status=200 v=1/1 flags=200 content_length=0 -off=69 len=5 span[body]="World" -``` diff --git a/llhttp/test/url.md b/llhttp/test/url.md deleted file mode 100644 index 6f0a7ed..0000000 --- a/llhttp/test/url.md +++ /dev/null @@ -1,283 +0,0 @@ -# URL tests - -## Absolute URL - -```url -http://example.com/path?query=value#schema -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=11 span[url.host]="example.com" -off=18 len=5 span[url.path]="/path" -off=24 len=11 span[url.query]="query=value" -off=36 len=6 span[url.fragment]="schema" -``` - -## Relative URL - -```url -/path?query=value#schema -``` - -```log -off=0 len=5 span[url.path]="/path" -off=6 len=11 span[url.query]="query=value" -off=18 len=6 span[url.fragment]="schema" -``` - -## Failing on broken schema - - -```url -schema:/path?query=value#schema -``` - -```log -off=0 len=6 span[url.schema]="schema" -off=8 error code=7 reason="Unexpected char in url schema" -``` - -## Proxy request - -```url -http://hostname/ -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=8 span[url.host]="hostname" -off=15 len=1 span[url.path]="/" -``` - -## Proxy request with port - -```url -http://hostname:444/ -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=12 span[url.host]="hostname:444" -off=19 len=1 span[url.path]="/" -``` - -## Proxy IPv6 request - -```url -http://[1:2::3:4]/ -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=10 span[url.host]="[1:2::3:4]" -off=17 len=1 span[url.path]="/" -``` - -## Proxy IPv6 request with port - -```url -http://[1:2::3:4]:67/ -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=13 span[url.host]="[1:2::3:4]:67" -off=20 len=1 span[url.path]="/" -``` - -## IPv4 in IPv6 address - -```url -http://[2001:0000:0000:0000:0000:0000:1.9.1.1]/ -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=39 span[url.host]="[2001:0000:0000:0000:0000:0000:1.9.1.1]" -off=46 len=1 span[url.path]="/" -``` - -## Extra `?` in query string - -```url -http://a.tbcdn.cn/p/fp/2010c/??fp-header-min.css,fp-base-min.css,\ -fp-channel-min.css,fp-product-min.css,fp-mall-min.css,fp-category-min.css,\ -fp-sub-min.css,fp-gdp4p-min.css,fp-css3-min.css,fp-misc-min.css?t=20101022.css -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=10 span[url.host]="a.tbcdn.cn" -off=17 len=12 span[url.path]="/p/fp/2010c/" -off=30 len=187 span[url.query]="?fp-header-min.css,fp-base-min.css,fp-channel-min.css,fp-product-min.css,fp-mall-min.css,fp-category-min.css,fp-sub-min.css,fp-gdp4p-min.css,fp-css3-min.css,fp-misc-min.css?t=20101022.css" -``` - -## URL encoded space - -```url -/toto.html?toto=a%20b -``` - -```log -off=0 len=10 span[url.path]="/toto.html" -off=11 len=10 span[url.query]="toto=a%20b" -``` - -## URL fragment - -```url -/toto.html#titi -``` - -```log -off=0 len=10 span[url.path]="/toto.html" -off=11 len=4 span[url.fragment]="titi" -``` - -## Complex URL fragment - -```url -http://www.webmasterworld.com/r.cgi?f=21&d=8405&url=\ -http://www.example.com/index.html?foo=bar&hello=world#midpage -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=22 span[url.host]="www.webmasterworld.com" -off=29 len=6 span[url.path]="/r.cgi" -off=36 len=69 span[url.query]="f=21&d=8405&url=http://www.example.com/index.html?foo=bar&hello=world" -off=106 len=7 span[url.fragment]="midpage" -``` - -## Complex URL from node.js url parser doc - -```url -http://host.com:8080/p/a/t/h?query=string#hash -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=13 span[url.host]="host.com:8080" -off=20 len=8 span[url.path]="/p/a/t/h" -off=29 len=12 span[url.query]="query=string" -off=42 len=4 span[url.fragment]="hash" -``` - -## Complex URL with basic auth from node.js url parser doc - -```url -http://a:b@host.com:8080/p/a/t/h?query=string#hash -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=17 span[url.host]="a:b@host.com:8080" -off=24 len=8 span[url.path]="/p/a/t/h" -off=33 len=12 span[url.query]="query=string" -off=46 len=4 span[url.fragment]="hash" -``` - -## Double `@` - - -```url -http://a:b@@hostname:443/ -``` - -```log -off=0 len=4 span[url.schema]="http" -off=12 error code=7 reason="Double @ in url" -``` - -## Proxy basic auth with url encoded space - -```url -http://a%20:b@host.com/ -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=15 span[url.host]="a%20:b@host.com" -off=22 len=1 span[url.path]="/" -``` - -## Proxy basic auth with unreserved chars - -```url -http://a!;-_!=+$@host.com/ -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=18 span[url.host]="a!;-_!=+$@host.com" -off=25 len=1 span[url.path]="/" -``` - -## IPv6 address with Zone ID - -```url -http://[fe80::a%25eth0]/ -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=16 span[url.host]="[fe80::a%25eth0]" -off=23 len=1 span[url.path]="/" -``` - -## IPv6 address with Zone ID, but `%` is not percent-encoded - -```url -http://[fe80::a%eth0]/ -``` - -```log -off=0 len=4 span[url.schema]="http" -off=7 len=14 span[url.host]="[fe80::a%eth0]" -off=21 len=1 span[url.path]="/" -``` - -## Disallow tab in URL in strict mode - - -```url -/foo\tbar/ -``` - -```log -off=5 error code=7 reason="Invalid characters in url (strict mode)" -``` - -## Tab in URL in loose mode - - -```url -/foo\tbar/ -``` - -```log -off=0 len=9 span[url.path]="/foo\tbar/" -``` - -## Disallow form-feed in URL in strict mode - - -```url -/foo\fbar/ -``` - -```log -off=5 error code=7 reason="Invalid characters in url (strict mode)" -``` - -## Form-feed in URL in loose mode - - -```url -/foo\fbar/ -``` - -```log -off=0 len=9 span[url.path]="/foo\fbar/" -``` diff --git a/llhttp/tsconfig.json b/llhttp/tsconfig.json deleted file mode 100644 index 01ec7c2..0000000 --- a/llhttp/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "strict": true, - "target": "es2017", - "module": "commonjs", - "moduleResolution": "node", - "outDir": "./lib", - "declaration": true, - "pretty": true, - "sourceMap": true - }, - "include": [ - "src/**/*.ts" - ] -} diff --git a/llhttp/tslint.json b/llhttp/tslint.json deleted file mode 100644 index b0aaf97..0000000 --- a/llhttp/tslint.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "defaultSeverity": "error", - "extends": [ - "tslint:recommended" - ], - "jsRules": {}, - "rules": { - "no-bitwise": null, - "quotemark": [ - true, "single", "avoid-escape", "avoid-template" - ] - }, - "rulesDirectory": [] -} diff --git a/server.c b/server.c index e7b9ccc..73cf9a3 100644 --- a/server.c +++ b/server.c @@ -24,8 +24,6 @@ void on_new_connection(struct uv_stream_s* handle, int status) { // Fix me // uv_read_start((uv_stream_t*)client, NULL, NULL); } - - } int main() {
  • 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℘X4}l@UV!; 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 z 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ℜTJn=m?-!Q514DXI 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%0DH{YHvhob~(#_Zcu%udmkkqIH^ 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

  • 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

  • IlG||>&m()vh!j1bs%Xt$;1BU+W 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 0 if there is data available or < 0 on error. When we've - reached EOF, `nread` will be set to ``UV_EOF``. When `nread` < 0, - the `buf` parameter might not point to a valid buffer; in that case - `buf.len` and `buf.base` are both set to 0. - - .. note:: - `nread` might be 0, which does *not* indicate an error or EOF. This - is equivalent to ``EAGAIN`` or ``EWOULDBLOCK`` under ``read(2)``. - - The callee is responsible for stopping/closing the stream when an error happens - by calling :c:func:`uv_read_stop` or :c:func:`uv_close`. Trying to read - from the stream again is undefined. - - The callee is responsible for freeing the buffer, libuv does not reuse it. - The buffer may be a null buffer (where `buf->base` == NULL and `buf->len` == 0) - on error. - -.. c:type:: void (*uv_write_cb)(uv_write_t* req, int status) - - Callback called after data was written on a stream. `status` will be 0 in - case of success, < 0 otherwise. - -.. c:type:: void (*uv_connect_cb)(uv_connect_t* req, int status) - - Callback called after a connection started by :c:func:`uv_connect` is done. - `status` will be 0 in case of success, < 0 otherwise. - -.. c:type:: void (*uv_shutdown_cb)(uv_shutdown_t* req, int status) - - Callback called after a shutdown request has been completed. `status` will - be 0 in case of success, < 0 otherwise. - -.. c:type:: void (*uv_connection_cb)(uv_stream_t* server, int status) - - Callback called when a stream server has received an incoming connection. - The user can accept the connection by calling :c:func:`uv_accept`. - `status` will be 0 in case of success, < 0 otherwise. - - -Public members -^^^^^^^^^^^^^^ - -.. c:member:: size_t uv_stream_t.write_queue_size - - Contains the amount of queued bytes waiting to be sent. Readonly. - -.. c:member:: uv_stream_t* uv_connect_t.handle - - Pointer to the stream where this connection request is running. - -.. c:member:: uv_stream_t* uv_shutdown_t.handle - - Pointer to the stream where this shutdown request is running. - -.. c:member:: uv_stream_t* uv_write_t.handle - - Pointer to the stream where this write request is running. - -.. c:member:: uv_stream_t* uv_write_t.send_handle - - Pointer to the stream being sent using this write request. - -.. seealso:: The :c:type:`uv_handle_t` members also apply. - - -API ---- - -.. c:function:: int uv_shutdown(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb cb) - - Shutdown the outgoing (write) side of a duplex stream. It waits for pending - write requests to complete. The `handle` should refer to a initialized stream. - `req` should be an uninitialized shutdown request struct. The `cb` is called - after shutdown is complete. - -.. c:function:: int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb) - - Start listening for incoming connections. `backlog` indicates the number of - connections the kernel might queue, same as :man:`listen(2)`. When a new - incoming connection is received the :c:type:`uv_connection_cb` callback is - called. - -.. c:function:: int uv_accept(uv_stream_t* server, uv_stream_t* client) - - This call is used in conjunction with :c:func:`uv_listen` to accept incoming - connections. Call this function after receiving a :c:type:`uv_connection_cb` - to accept the connection. Before calling this function the client handle must - be initialized. < 0 return value indicates an error. - - When the :c:type:`uv_connection_cb` callback is called it is guaranteed that - this function will complete successfully the first time. If you attempt to use - it more than once, it may fail. It is suggested to only call this function once - per :c:type:`uv_connection_cb` call. - - .. note:: - `server` and `client` must be handles running on the same loop. - -.. c:function:: int uv_read_start(uv_stream_t* stream, uv_alloc_cb alloc_cb, uv_read_cb read_cb) - - Read data from an incoming stream. The :c:type:`uv_read_cb` callback will - be made several times until there is no more data to read or - :c:func:`uv_read_stop` is called. - - .. versionchanged:: 1.38.0 :c:func:`uv_read_start()` now consistently - returns `UV_EALREADY` when called twice, and `UV_EINVAL` when the - stream is closing. With older libuv versions, it returns `UV_EALREADY` - on Windows but not UNIX, and `UV_EINVAL` on UNIX but not Windows. - -.. c:function:: int uv_read_stop(uv_stream_t*) - - Stop reading data from the stream. The :c:type:`uv_read_cb` callback will - no longer be called. - - This function is idempotent and may be safely called on a stopped stream. - - This function will always succeed; hence, checking its return value is - unnecessary. A non-zero return indicates that finishing releasing resources - may be pending on the next input event on that TTY on Windows, and does not - indicate failure. - -.. c:function:: int uv_write(uv_write_t* req, uv_stream_t* handle, const uv_buf_t bufs[], unsigned int nbufs, uv_write_cb cb) - - Write data to stream. Buffers are written in order. Example: - - :: - - void cb(uv_write_t* req, int status) { - /* Logic which handles the write result */ - } - - uv_buf_t a[] = { - { .base = "1", .len = 1 }, - { .base = "2", .len = 1 } - }; - - uv_buf_t b[] = { - { .base = "3", .len = 1 }, - { .base = "4", .len = 1 } - }; - - uv_write_t req1; - uv_write_t req2; - - /* writes "1234" */ - uv_write(&req1, stream, a, 2, cb); - uv_write(&req2, stream, b, 2, cb); - - .. note:: - The memory pointed to by the buffers must remain valid until the callback gets called. - This also holds for :c:func:`uv_write2`. - -.. c:function:: int uv_write2(uv_write_t* req, uv_stream_t* handle, const uv_buf_t bufs[], unsigned int nbufs, uv_stream_t* send_handle, uv_write_cb cb) - - Extended write function for sending handles over a pipe. The pipe must be - initialized with `ipc` == 1. - - .. note:: - `send_handle` must be a TCP, pipe and UDP handle on Unix, or a TCP - handle on Windows, which is a server or a connection (listening or - connected state). Bound sockets or pipes will be assumed to be servers. - -.. c:function:: int uv_try_write(uv_stream_t* handle, const uv_buf_t bufs[], unsigned int nbufs) - - Same as :c:func:`uv_write`, but won't queue a write request if it can't be - completed immediately. - - Will return either: - - * > 0: number of bytes written (can be less than the supplied buffer size). - * < 0: negative error code (``UV_EAGAIN`` is returned if no data can be sent - immediately). - -.. c:function:: int uv_try_write2(uv_stream_t* handle, const uv_buf_t bufs[], unsigned int nbufs, uv_stream_t* send_handle) - - Same as :c:func:`uv_try_write` and extended write function for sending - handles over a pipe like c:func:`uv_write2`. - - Try to send a handle is not supported on Windows, - where it returns ``UV_EAGAIN``. - - .. versionadded:: 1.42.0 - -.. c:function:: int uv_is_readable(const uv_stream_t* handle) - - Returns 1 if the stream is readable, 0 otherwise. - -.. c:function:: int uv_is_writable(const uv_stream_t* handle) - - Returns 1 if the stream is writable, 0 otherwise. - -.. c:function:: int uv_stream_set_blocking(uv_stream_t* handle, int blocking) - - Enable or disable blocking mode for a stream. - - When blocking mode is enabled all writes complete synchronously. The - interface remains unchanged otherwise, e.g. completion or failure of the - operation will still be reported through a callback which is made - asynchronously. - - .. warning:: - Relying too much on this API is not recommended. It is likely to change - significantly in the future. - - Currently only works on Windows for :c:type:`uv_pipe_t` handles. - On UNIX platforms, all :c:type:`uv_stream_t` handles are supported. - - Also libuv currently makes no ordering guarantee when the blocking mode - is changed after write requests have already been submitted. Therefore it is - recommended to set the blocking mode immediately after opening or creating - the stream. - - .. versionchanged:: 1.4.0 UNIX implementation added. - -.. c:function:: size_t uv_stream_get_write_queue_size(const uv_stream_t* stream) - - Returns `stream->write_queue_size`. - - .. versionadded:: 1.19.0 - -.. seealso:: The :c:type:`uv_handle_t` API functions also apply. diff --git a/libuv/docs/src/tcp.rst b/libuv/docs/src/tcp.rst deleted file mode 100644 index cccc86b..0000000 --- a/libuv/docs/src/tcp.rst +++ /dev/null @@ -1,146 +0,0 @@ - -.. _tcp: - -:c:type:`uv_tcp_t` --- TCP handle -================================= - -TCP handles are used to represent both TCP streams and servers. - -:c:type:`uv_tcp_t` is a 'subclass' of :c:type:`uv_stream_t`. - - -Data types ----------- - -.. c:type:: uv_tcp_t - - TCP handle type. - - -Public members -^^^^^^^^^^^^^^ - -N/A - -.. seealso:: The :c:type:`uv_stream_t` members also apply. - - -API ---- - -.. c:function:: int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle) - - Initialize the handle. No socket is created as of yet. - -.. c:function:: int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags) - - Initialize the handle with the specified flags. At the moment only the lower 8 bits - of the `flags` parameter are used as the socket domain. A socket will be created - for the given domain. If the specified domain is ``AF_UNSPEC`` no socket is created, - just like :c:func:`uv_tcp_init`. - - .. versionadded:: 1.7.0 - -.. c:function:: int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock) - - Open an existing file descriptor or SOCKET as a TCP handle. - - .. versionchanged:: 1.2.1 the file descriptor is set to non-blocking mode. - - .. note:: - The passed file descriptor or SOCKET is not checked for its type, but - it's required that it represents a valid stream socket. - -.. c:function:: int uv_tcp_nodelay(uv_tcp_t* handle, int enable) - - Enable `TCP_NODELAY`, which disables Nagle's algorithm. - -.. c:function:: int uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay) - - Enable / disable TCP keep-alive. `delay` is the initial delay in seconds, - ignored when `enable` is zero. - - After `delay` has been reached, 10 successive probes, each spaced 1 second - from the previous one, will still happen. If the connection is still lost - at the end of this procedure, then the handle is destroyed with a - ``UV_ETIMEDOUT`` error passed to the corresponding callback. - -.. c:function:: int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable) - - Enable / disable simultaneous asynchronous accept requests that are - queued by the operating system when listening for new TCP connections. - - This setting is used to tune a TCP server for the desired performance. - Having simultaneous accepts can significantly improve the rate of accepting - connections (which is why it is enabled by default) but may lead to uneven - load distribution in multi-process setups. - -.. c:function:: int uv_tcp_bind(uv_tcp_t* handle, const struct sockaddr* addr, unsigned int flags) - - Bind the handle to an address and port. `addr` should point to an - initialized ``struct sockaddr_in`` or ``struct sockaddr_in6``. - - When the port is already taken, you can expect to see an ``UV_EADDRINUSE`` - error from :c:func:`uv_listen` or :c:func:`uv_tcp_connect`. That is, - a successful call to this function does not guarantee that the call - to :c:func:`uv_listen` or :c:func:`uv_tcp_connect` will succeed as well. - - `flags` can contain ``UV_TCP_IPV6ONLY``, in which case dual-stack support - is disabled and only IPv6 is used. - -.. c:function:: int uv_tcp_getsockname(const uv_tcp_t* handle, struct sockaddr* name, int* namelen) - - Get the current address to which the handle is bound. `name` must point to - a valid and big enough chunk of memory, ``struct sockaddr_storage`` is - recommended for IPv4 and IPv6 support. - -.. c:function:: int uv_tcp_getpeername(const uv_tcp_t* handle, struct sockaddr* name, int* namelen) - - Get the address of the peer connected to the handle. `name` must point to - a valid and big enough chunk of memory, ``struct sockaddr_storage`` is - recommended for IPv4 and IPv6 support. - -.. c:function:: int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, const struct sockaddr* addr, uv_connect_cb cb) - - Establish an IPv4 or IPv6 TCP connection. Provide an initialized TCP handle - and an uninitialized :c:type:`uv_connect_t`. `addr` should point to an - initialized ``struct sockaddr_in`` or ``struct sockaddr_in6``. - - On Windows if the `addr` is initialized to point to an unspecified address - (``0.0.0.0`` or ``::``) it will be changed to point to ``localhost``. - This is done to match the behavior of Linux systems. - - The callback is made when the connection has been established or when a - connection error happened. - - .. versionchanged:: 1.19.0 added ``0.0.0.0`` and ``::`` to ``localhost`` - mapping - -.. seealso:: The :c:type:`uv_stream_t` API functions also apply. - -.. c:function:: int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb) - - Resets a TCP connection by sending a RST packet. This is accomplished by - setting the `SO_LINGER` socket option with a linger interval of zero and - then calling :c:func:`uv_close`. - Due to some platform inconsistencies, mixing of :c:func:`uv_shutdown` and - :c:func:`uv_tcp_close_reset` calls is not allowed. - - .. versionadded:: 1.32.0 - -.. c:function:: int uv_socketpair(int type, int protocol, uv_os_sock_t socket_vector[2], int flags0, int flags1) - - Create a pair of connected sockets with the specified properties. - The resulting handles can be passed to `uv_tcp_open`, used with `uv_spawn`, - or for any other purpose. - - Valid values for `flags0` and `flags1` are: - - - UV_NONBLOCK_PIPE: Opens the specified socket handle for `OVERLAPPED` - or `FIONBIO`/`O_NONBLOCK` I/O usage. - This is recommended for handles that will be used by libuv, - and not usually recommended otherwise. - - Equivalent to :man:`socketpair(2)` with a domain of AF_UNIX. - - .. versionadded:: 1.41.0 diff --git a/libuv/docs/src/threading.rst b/libuv/docs/src/threading.rst deleted file mode 100644 index 7ca1d4b..0000000 --- a/libuv/docs/src/threading.rst +++ /dev/null @@ -1,197 +0,0 @@ - -.. _threading: - -Threading and synchronization utilities -======================================= - -libuv provides cross-platform implementations for multiple threading and -synchronization primitives. The API largely follows the pthreads API. - - -Data types ----------- - -.. c:type:: uv_thread_t - - Thread data type. - -.. c:type:: void (*uv_thread_cb)(void* arg) - - Callback that is invoked to initialize thread execution. `arg` is the same - value that was passed to :c:func:`uv_thread_create`. - -.. c:type:: uv_key_t - - Thread-local key data type. - -.. c:type:: uv_once_t - - Once-only initializer data type. - -.. c:type:: uv_mutex_t - - Mutex data type. - -.. c:type:: uv_rwlock_t - - Read-write lock data type. - -.. c:type:: uv_sem_t - - Semaphore data type. - -.. c:type:: uv_cond_t - - Condition data type. - -.. c:type:: uv_barrier_t - - Barrier data type. - - -API ---- - -Threads -^^^^^^^ - -.. c:type:: uv_thread_options_t - - Options for spawning a new thread (passed to :c:func:`uv_thread_create_ex`). - - :: - - typedef struct uv_thread_options_s { - enum { - UV_THREAD_NO_FLAGS = 0x00, - UV_THREAD_HAS_STACK_SIZE = 0x01 - } flags; - size_t stack_size; - } uv_thread_options_t; - - More fields may be added to this struct at any time, so its exact - layout and size should not be relied upon. - - .. versionadded:: 1.26.0 - -.. c:function:: int uv_thread_create(uv_thread_t* tid, uv_thread_cb entry, void* arg) - - .. versionchanged:: 1.4.1 returns a UV_E* error code on failure - -.. c:function:: int uv_thread_create_ex(uv_thread_t* tid, const uv_thread_options_t* params, uv_thread_cb entry, void* arg) - - Like :c:func:`uv_thread_create`, but additionally specifies options for creating a new thread. - - If `UV_THREAD_HAS_STACK_SIZE` is set, `stack_size` specifies a stack size for the new thread. - `0` indicates that the default value should be used, i.e. behaves as if the flag was not set. - Other values will be rounded up to the nearest page boundary. - - .. versionadded:: 1.26.0 - -.. c:function:: uv_thread_t uv_thread_self(void) -.. c:function:: int uv_thread_join(uv_thread_t *tid) -.. c:function:: int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2) - -Thread-local storage -^^^^^^^^^^^^^^^^^^^^ - -.. note:: - The total thread-local storage size may be limited. That is, it may not be possible to - create many TLS keys. - -.. c:function:: int uv_key_create(uv_key_t* key) -.. c:function:: void uv_key_delete(uv_key_t* key) -.. c:function:: void* uv_key_get(uv_key_t* key) -.. c:function:: void uv_key_set(uv_key_t* key, void* value) - -Once-only initialization -^^^^^^^^^^^^^^^^^^^^^^^^ - -Runs a function once and only once. Concurrent calls to :c:func:`uv_once` with the -same guard will block all callers except one (it's unspecified which one). -The guard should be initialized statically with the UV_ONCE_INIT macro. - -.. c:function:: void uv_once(uv_once_t* guard, void (*callback)(void)) - -Mutex locks -^^^^^^^^^^^ - -Functions return 0 on success or an error code < 0 (unless the -return type is void, of course). - -.. c:function:: int uv_mutex_init(uv_mutex_t* handle) -.. c:function:: int uv_mutex_init_recursive(uv_mutex_t* handle) -.. c:function:: void uv_mutex_destroy(uv_mutex_t* handle) -.. c:function:: void uv_mutex_lock(uv_mutex_t* handle) -.. c:function:: int uv_mutex_trylock(uv_mutex_t* handle) -.. c:function:: void uv_mutex_unlock(uv_mutex_t* handle) - -Read-write locks -^^^^^^^^^^^^^^^^ - -Functions return 0 on success or an error code < 0 (unless the -return type is void, of course). - -.. c:function:: int uv_rwlock_init(uv_rwlock_t* rwlock) -.. c:function:: void uv_rwlock_destroy(uv_rwlock_t* rwlock) -.. c:function:: void uv_rwlock_rdlock(uv_rwlock_t* rwlock) -.. c:function:: int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock) -.. c:function:: void uv_rwlock_rdunlock(uv_rwlock_t* rwlock) -.. c:function:: void uv_rwlock_wrlock(uv_rwlock_t* rwlock) -.. c:function:: int uv_rwlock_trywrlock(uv_rwlock_t* rwlock) -.. c:function:: void uv_rwlock_wrunlock(uv_rwlock_t* rwlock) - -Semaphores -^^^^^^^^^^ - -Functions return 0 on success or an error code < 0 (unless the -return type is void, of course). - -.. c:function:: int uv_sem_init(uv_sem_t* sem, unsigned int value) -.. c:function:: void uv_sem_destroy(uv_sem_t* sem) -.. c:function:: void uv_sem_post(uv_sem_t* sem) -.. c:function:: void uv_sem_wait(uv_sem_t* sem) -.. c:function:: int uv_sem_trywait(uv_sem_t* sem) - -Conditions -^^^^^^^^^^ - -Functions return 0 on success or an error code < 0 (unless the -return type is void, of course). - -.. note:: - 1. Callers should be prepared to deal with spurious wakeups on :c:func:`uv_cond_wait` - and :c:func:`uv_cond_timedwait`. - 2. The timeout parameter for :c:func:`uv_cond_timedwait` is relative to the time - at which function is called. - 3. On z/OS, the timeout parameter for :c:func:`uv_cond_timedwait` is converted to an - absolute system time at which the wait expires. If the current system clock time - passes the absolute time calculated before the condition is signaled, an ETIMEDOUT - error results. After the wait begins, the wait time is not affected by changes - to the system clock. - -.. c:function:: int uv_cond_init(uv_cond_t* cond) -.. c:function:: void uv_cond_destroy(uv_cond_t* cond) -.. c:function:: void uv_cond_signal(uv_cond_t* cond) -.. c:function:: void uv_cond_broadcast(uv_cond_t* cond) -.. c:function:: void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) -.. c:function:: int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout) - -Barriers -^^^^^^^^ - -Functions return 0 on success or an error code < 0 (unless the -return type is void, of course). - -.. note:: - :c:func:`uv_barrier_wait` returns a value > 0 to an arbitrarily chosen "serializer" thread - to facilitate cleanup, i.e. - - :: - - if (uv_barrier_wait(&barrier) > 0) - uv_barrier_destroy(&barrier); - -.. c:function:: int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) -.. c:function:: void uv_barrier_destroy(uv_barrier_t* barrier) -.. c:function:: int uv_barrier_wait(uv_barrier_t* barrier) diff --git a/libuv/docs/src/threadpool.rst b/libuv/docs/src/threadpool.rst deleted file mode 100644 index cf6cdc1..0000000 --- a/libuv/docs/src/threadpool.rst +++ /dev/null @@ -1,69 +0,0 @@ - -.. _threadpool: - -Thread pool work scheduling -=========================== - -libuv provides a threadpool which can be used to run user code and get notified -in the loop thread. This thread pool is internally used to run all file system -operations, as well as getaddrinfo and getnameinfo requests. - -Its default size is 4, but it can be changed at startup time by setting the -``UV_THREADPOOL_SIZE`` environment variable to any value (the absolute maximum -is 1024). - -.. versionchanged:: 1.30.0 the maximum UV_THREADPOOL_SIZE allowed was increased from 128 to 1024. - -The threadpool is global and shared across all event loops. When a particular -function makes use of the threadpool (i.e. when using :c:func:`uv_queue_work`) -libuv preallocates and initializes the maximum number of threads allowed by -``UV_THREADPOOL_SIZE``. This causes a relatively minor memory overhead -(~1MB for 128 threads) but increases the performance of threading at runtime. - -.. note:: - Note that even though a global thread pool which is shared across all events - loops is used, the functions are not thread safe. - - -Data types ----------- - -.. c:type:: uv_work_t - - Work request type. - -.. c:type:: void (*uv_work_cb)(uv_work_t* req) - - Callback passed to :c:func:`uv_queue_work` which will be run on the thread - pool. - -.. c:type:: void (*uv_after_work_cb)(uv_work_t* req, int status) - - Callback passed to :c:func:`uv_queue_work` which will be called on the loop - thread after the work on the threadpool has been completed. If the work - was cancelled using :c:func:`uv_cancel` `status` will be ``UV_ECANCELED``. - - -Public members -^^^^^^^^^^^^^^ - -.. c:member:: uv_loop_t* uv_work_t.loop - - Loop that started this request and where completion will be reported. - Readonly. - -.. seealso:: The :c:type:`uv_req_t` members also apply. - - -API ---- - -.. c:function:: int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, uv_after_work_cb after_work_cb) - - Initializes a work request which will run the given `work_cb` in a thread - from the threadpool. Once `work_cb` is completed, `after_work_cb` will be - called on the loop thread. - - This request can be cancelled with :c:func:`uv_cancel`. - -.. seealso:: The :c:type:`uv_req_t` API functions also apply. diff --git a/libuv/docs/src/timer.rst b/libuv/docs/src/timer.rst deleted file mode 100644 index 070fa79..0000000 --- a/libuv/docs/src/timer.rst +++ /dev/null @@ -1,88 +0,0 @@ - -.. _timer: - -:c:type:`uv_timer_t` --- Timer handle -===================================== - -Timer handles are used to schedule callbacks to be called in the future. - - -Data types ----------- - -.. c:type:: uv_timer_t - - Timer handle type. - -.. c:type:: void (*uv_timer_cb)(uv_timer_t* handle) - - Type definition for callback passed to :c:func:`uv_timer_start`. - - -Public members -^^^^^^^^^^^^^^ - -N/A - -.. seealso:: The :c:type:`uv_handle_t` members also apply. - - -API ---- - -.. c:function:: int uv_timer_init(uv_loop_t* loop, uv_timer_t* handle) - - Initialize the handle. - -.. c:function:: int uv_timer_start(uv_timer_t* handle, uv_timer_cb cb, uint64_t timeout, uint64_t repeat) - - Start the timer. `timeout` and `repeat` are in milliseconds. - - If `timeout` is zero, the callback fires on the next event loop iteration. - If `repeat` is non-zero, the callback fires first after `timeout` - milliseconds and then repeatedly after `repeat` milliseconds. - - .. note:: - Does not update the event loop's concept of "now". See :c:func:`uv_update_time` for more information. - - If the timer is already active, it is simply updated. - -.. c:function:: int uv_timer_stop(uv_timer_t* handle) - - Stop the timer, the callback will not be called anymore. - -.. c:function:: int uv_timer_again(uv_timer_t* handle) - - Stop the timer, and if it is repeating restart it using the repeat value - as the timeout. If the timer has never been started before it returns - UV_EINVAL. - -.. c:function:: void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat) - - Set the repeat interval value in milliseconds. The timer will be scheduled - to run on the given interval, regardless of the callback execution - duration, and will follow normal timer semantics in the case of a - time-slice overrun. - - For example, if a 50ms repeating timer first runs for 17ms, it will be - scheduled to run again 33ms later. If other tasks consume more than the - 33ms following the first timer callback, then the callback will run as soon - as possible. - - .. note:: - If the repeat value is set from a timer callback it does not immediately take effect. - If the timer was non-repeating before, it will have been stopped. If it was repeating, - then the old repeat value will have been used to schedule the next timeout. - -.. c:function:: uint64_t uv_timer_get_repeat(const uv_timer_t* handle) - - Get the timer repeat value. - -.. c:function:: uint64_t uv_timer_get_due_in(const uv_timer_t* handle) - - Get the timer due value or 0 if it has expired. The time is relative to - :c:func:`uv_now()`. - - .. versionadded:: 1.40.0 - -.. seealso:: The :c:type:`uv_handle_t` API functions also apply. diff --git a/libuv/docs/src/tty.rst b/libuv/docs/src/tty.rst deleted file mode 100644 index f1acfdc..0000000 --- a/libuv/docs/src/tty.rst +++ /dev/null @@ -1,140 +0,0 @@ - -.. _tty: - -:c:type:`uv_tty_t` --- TTY handle -================================= - -TTY handles represent a stream for the console. - -:c:type:`uv_tty_t` is a 'subclass' of :c:type:`uv_stream_t`. - - -Data types ----------- - -.. c:type:: uv_tty_t - - TTY handle type. - -.. c:enum:: uv_tty_mode_t - - .. versionadded:: 1.2.0 - - TTY mode type: - - :: - - typedef enum { - /* Initial/normal terminal mode */ - UV_TTY_MODE_NORMAL, - /* Raw input mode (On Windows, ENABLE_WINDOW_INPUT is also enabled) */ - UV_TTY_MODE_RAW, - /* Binary-safe I/O mode for IPC (Unix-only) */ - UV_TTY_MODE_IO - } uv_tty_mode_t; - -.. c:enum:: uv_tty_vtermstate_t - - Console virtual terminal mode type: - - :: - - typedef enum { - /* - * The console supports handling of virtual terminal sequences - * (Windows10 new console, ConEmu) - */ - UV_TTY_SUPPORTED, - /* The console cannot process virtual terminal sequences. (Legacy - * console) - */ - UV_TTY_UNSUPPORTED - } uv_tty_vtermstate_t - - - -Public members -^^^^^^^^^^^^^^ - -N/A - -.. seealso:: The :c:type:`uv_stream_t` members also apply. - - -API ---- - -.. c:function:: int uv_tty_init(uv_loop_t* loop, uv_tty_t* handle, uv_file fd, int unused) - - Initialize a new TTY stream with the given file descriptor. Usually the - file descriptor will be: - - * 0 = stdin - * 1 = stdout - * 2 = stderr - - On Unix this function will determine the path of the fd of the terminal - using :man:`ttyname_r(3)`, open it, and use it if the passed file descriptor - refers to a TTY. This lets libuv put the tty in non-blocking mode without - affecting other processes that share the tty. - - This function is not thread safe on systems that don't support - ioctl TIOCGPTN or TIOCPTYGNAME, for instance OpenBSD and Solaris. - - .. note:: - If reopening the TTY fails, libuv falls back to blocking writes. - - .. versionchanged:: 1.23.1: the `readable` parameter is now unused and ignored. - The correct value will now be auto-detected from the kernel. - - .. versionchanged:: 1.9.0: the path of the TTY is determined by - :man:`ttyname_r(3)`. In earlier versions libuv opened - `/dev/tty` instead. - - .. versionchanged:: 1.5.0: trying to initialize a TTY stream with a file - descriptor that refers to a file returns `UV_EINVAL` - on UNIX. - -.. c:function:: int uv_tty_set_mode(uv_tty_t* handle, uv_tty_mode_t mode) - - .. versionchanged:: 1.2.0: the mode is specified as a - :c:type:`uv_tty_mode_t` value. - - Set the TTY using the specified terminal mode. - -.. c:function:: int uv_tty_reset_mode(void) - - To be called when the program exits. Resets TTY settings to default - values for the next process to take over. - - This function is async signal-safe on Unix platforms but can fail with error - code ``UV_EBUSY`` if you call it when execution is inside - :c:func:`uv_tty_set_mode`. - -.. c:function:: int uv_tty_get_winsize(uv_tty_t* handle, int* width, int* height) - - Gets the current Window size. On success it returns 0. - -.. seealso:: The :c:type:`uv_stream_t` API functions also apply. - -.. c:function:: void uv_tty_set_vterm_state(uv_tty_vtermstate_t state) - - Controls whether console virtual terminal sequences are processed by libuv - or console. - Useful in particular for enabling ConEmu support of ANSI X3.64 and Xterm - 256 colors. Otherwise Windows10 consoles are usually detected automatically. - - This function is only meaningful on Windows systems. On Unix it is silently - ignored. - - .. versionadded:: 1.33.0 - -.. c:function:: int uv_tty_get_vterm_state(uv_tty_vtermstate_t* state) - - Get the current state of whether console virtual terminal sequences are - handled by libuv or the console. - - This function is not implemented on Unix, where it returns ``UV_ENOTSUP``. - - .. versionadded:: 1.33.0 - diff --git a/libuv/docs/src/udp.rst b/libuv/docs/src/udp.rst deleted file mode 100644 index 009767d..0000000 --- a/libuv/docs/src/udp.rst +++ /dev/null @@ -1,450 +0,0 @@ - -.. _udp: - -:c:type:`uv_udp_t` --- UDP handle -================================= - -UDP handles encapsulate UDP communication for both clients and servers. - - -Data types ----------- - -.. c:type:: uv_udp_t - - UDP handle type. - -.. c:type:: uv_udp_send_t - - UDP send request type. - -.. c:type:: uv_udp_flags - - Flags used in :c:func:`uv_udp_bind` and :c:type:`uv_udp_recv_cb`.. - - :: - - enum uv_udp_flags { - /* Disables dual stack mode. */ - UV_UDP_IPV6ONLY = 1, - /* - * Indicates message was truncated because read buffer was too small. The - * remainder was discarded by the OS. Used in uv_udp_recv_cb. - */ - UV_UDP_PARTIAL = 2, - /* - * Indicates if SO_REUSEADDR will be set when binding the handle in - * uv_udp_bind. - * This sets the SO_REUSEPORT socket flag on the BSDs and OS X. On other - * Unix platforms, it sets the SO_REUSEADDR flag. What that means is that - * multiple threads or processes can bind to the same address without error - * (provided they all set the flag) but only the last one to bind will receive - * any traffic, in effect "stealing" the port from the previous listener. - */ - UV_UDP_REUSEADDR = 4, - /* - * Indicates that the message was received by recvmmsg, so the buffer provided - * must not be freed by the recv_cb callback. - */ - UV_UDP_MMSG_CHUNK = 8, - /* - * Indicates that the buffer provided has been fully utilized by recvmmsg and - * that it should now be freed by the recv_cb callback. When this flag is set - * in uv_udp_recv_cb, nread will always be 0 and addr will always be NULL. - */ - UV_UDP_MMSG_FREE = 16, - /* - * Indicates if IP_RECVERR/IPV6_RECVERR will be set when binding the handle. - * This sets IP_RECVERR for IPv4 and IPV6_RECVERR for IPv6 UDP sockets on - * Linux. This stops the Linux kernel from supressing some ICMP error messages - * and enables full ICMP error reporting for faster failover. - * This flag is no-op on platforms other than Linux. - */ - UV_UDP_LINUX_RECVERR = 32, - /* - * Indicates that recvmmsg should be used, if available. - */ - UV_UDP_RECVMMSG = 256 - }; - -.. c:type:: void (*uv_udp_send_cb)(uv_udp_send_t* req, int status) - - Type definition for callback passed to :c:func:`uv_udp_send`, which is - called after the data was sent. - -.. c:type:: void (*uv_udp_recv_cb)(uv_udp_t* handle, ssize_t nread, const uv_buf_t* buf, const struct sockaddr* addr, unsigned flags) - - Type definition for callback passed to :c:func:`uv_udp_recv_start`, which - is called when the endpoint receives data. - - * `handle`: UDP handle - * `nread`: Number of bytes that have been received. - 0 if there is no more data to read. Note that 0 may also mean that an - empty datagram was received (in this case `addr` is not NULL). < 0 if - a transmission error was detected; if using :man:`recvmmsg(2)` no more - chunks will be received and the buffer can be freed safely. - * `buf`: :c:type:`uv_buf_t` with the received data. - * `addr`: ``struct sockaddr*`` containing the address of the sender. - Can be NULL. Valid for the duration of the callback only. - * `flags`: One or more or'ed UV_UDP_* constants. - - The callee is responsible for freeing the buffer, libuv does not reuse it. - The buffer may be a null buffer (where `buf->base` == NULL and `buf->len` == 0) - on error. - - When using :man:`recvmmsg(2)`, chunks will have the `UV_UDP_MMSG_CHUNK` flag set, - those must not be freed. If no errors occur, there will be a final callback with - `nread` set to 0, `addr` set to NULL and the buffer pointing at the initially - allocated data with the `UV_UDP_MMSG_CHUNK` flag cleared and the `UV_UDP_MMSG_FREE` - flag set. If a UDP socket error occurs, `nread` will be < 0. In either scenario, - the callee can now safely free the provided buffer. - - .. versionchanged:: 1.40.0 added the `UV_UDP_MMSG_FREE` flag. - - .. note:: - The receive callback will be called with `nread` == 0 and `addr` == NULL when there is - nothing to read, and with `nread` == 0 and `addr` != NULL when an empty UDP packet is - received. - -.. c:enum:: uv_membership - - Membership type for a multicast address. - - :: - - typedef enum { - UV_LEAVE_GROUP = 0, - UV_JOIN_GROUP - } uv_membership; - - -Public members -^^^^^^^^^^^^^^ - -.. c:member:: size_t uv_udp_t.send_queue_size - - Number of bytes queued for sending. This field strictly shows how much - information is currently queued. - -.. c:member:: size_t uv_udp_t.send_queue_count - - Number of send requests currently in the queue awaiting to be processed. - -.. c:member:: uv_udp_t* uv_udp_send_t.handle - - UDP handle where this send request is taking place. - -.. seealso:: The :c:type:`uv_handle_t` members also apply. - - -API ---- - -.. c:function:: int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle) - - Initialize a new UDP handle. The actual socket is created lazily. - Returns 0 on success. - -.. c:function:: int uv_udp_init_ex(uv_loop_t* loop, uv_udp_t* handle, unsigned int flags) - - Initialize the handle with the specified flags. The lower 8 bits of the `flags` - parameter are used as the socket domain. A socket will be created for the given domain. - If the specified domain is ``AF_UNSPEC`` no socket is created, just like :c:func:`uv_udp_init`. - - The remaining bits can be used to set one of these flags: - - * `UV_UDP_RECVMMSG`: if set, and the platform supports it, :man:`recvmmsg(2)` will - be used. - - .. versionadded:: 1.7.0 - .. versionchanged:: 1.37.0 added the `UV_UDP_RECVMMSG` flag. - -.. c:function:: int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) - - Opens an existing file descriptor or Windows SOCKET as a UDP handle. - - Unix only: - The only requirement of the `sock` argument is that it follows the datagram - contract (works in unconnected mode, supports sendmsg()/recvmsg(), etc). - In other words, other datagram-type sockets like raw sockets or netlink - sockets can also be passed to this function. - - .. versionchanged:: 1.2.1 the file descriptor is set to non-blocking mode. - - .. note:: - The passed file descriptor or SOCKET is not checked for its type, but - it's required that it represents a valid datagram socket. - -.. c:function:: int uv_udp_bind(uv_udp_t* handle, const struct sockaddr* addr, unsigned int flags) - - Bind the UDP handle to an IP address and port. - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. - - :param addr: `struct sockaddr_in` or `struct sockaddr_in6` - with the address and port to bind to. - - :param flags: Indicate how the socket will be bound, - ``UV_UDP_IPV6ONLY``, ``UV_UDP_REUSEADDR``, and ``UV_UDP_RECVERR`` - are supported. - - :returns: 0 on success, or an error code < 0 on failure. - -.. c:function:: int uv_udp_connect(uv_udp_t* handle, const struct sockaddr* addr) - - Associate the UDP handle to a remote address and port, so every - message sent by this handle is automatically sent to that destination. - Calling this function with a `NULL` `addr` disconnects the handle. - Trying to call `uv_udp_connect()` on an already connected handle will result - in an `UV_EISCONN` error. Trying to disconnect a handle that is not - connected will return an `UV_ENOTCONN` error. - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. - - :param addr: `struct sockaddr_in` or `struct sockaddr_in6` - with the address and port to associate to. - - :returns: 0 on success, or an error code < 0 on failure. - - .. versionadded:: 1.27.0 - -.. c:function:: int uv_udp_getpeername(const uv_udp_t* handle, struct sockaddr* name, int* namelen) - - Get the remote IP and port of the UDP handle on connected UDP handles. - On unconnected handles, it returns `UV_ENOTCONN`. - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init` and bound. - - :param name: Pointer to the structure to be filled with the address data. - In order to support IPv4 and IPv6 `struct sockaddr_storage` should be - used. - - :param namelen: On input it indicates the data of the `name` field. On - output it indicates how much of it was filled. - - :returns: 0 on success, or an error code < 0 on failure - - .. versionadded:: 1.27.0 - -.. c:function:: int uv_udp_getsockname(const uv_udp_t* handle, struct sockaddr* name, int* namelen) - - Get the local IP and port of the UDP handle. - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init` and bound. - - :param name: Pointer to the structure to be filled with the address data. - In order to support IPv4 and IPv6 `struct sockaddr_storage` should be - used. - - :param namelen: On input it indicates the data of the `name` field. On - output it indicates how much of it was filled. - - :returns: 0 on success, or an error code < 0 on failure. - -.. c:function:: int uv_udp_set_membership(uv_udp_t* handle, const char* multicast_addr, const char* interface_addr, uv_membership membership) - - Set membership for a multicast address - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. - - :param multicast_addr: Multicast address to set membership for. - - :param interface_addr: Interface address. - - :param membership: Should be ``UV_JOIN_GROUP`` or ``UV_LEAVE_GROUP``. - - :returns: 0 on success, or an error code < 0 on failure. - -.. c:function:: int uv_udp_set_source_membership(uv_udp_t* handle, const char* multicast_addr, const char* interface_addr, const char* source_addr, uv_membership membership) - - Set membership for a source-specific multicast group. - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. - - :param multicast_addr: Multicast address to set membership for. - - :param interface_addr: Interface address. - - :param source_addr: Source address. - - :param membership: Should be ``UV_JOIN_GROUP`` or ``UV_LEAVE_GROUP``. - - :returns: 0 on success, or an error code < 0 on failure. - - .. versionadded:: 1.32.0 - -.. c:function:: int uv_udp_set_multicast_loop(uv_udp_t* handle, int on) - - Set IP multicast loop flag. Makes multicast packets loop back to - local sockets. - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. - - :param on: 1 for on, 0 for off. - - :returns: 0 on success, or an error code < 0 on failure. - -.. c:function:: int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl) - - Set the multicast ttl. - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. - - :param ttl: 1 through 255. - - :returns: 0 on success, or an error code < 0 on failure. - -.. c:function:: int uv_udp_set_multicast_interface(uv_udp_t* handle, const char* interface_addr) - - Set the multicast interface to send or receive data on. - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. - - :param interface_addr: interface address. - - :returns: 0 on success, or an error code < 0 on failure. - -.. c:function:: int uv_udp_set_broadcast(uv_udp_t* handle, int on) - - Set broadcast on or off. - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. - - :param on: 1 for on, 0 for off. - - :returns: 0 on success, or an error code < 0 on failure. - -.. c:function:: int uv_udp_set_ttl(uv_udp_t* handle, int ttl) - - Set the time to live. - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. - - :param ttl: 1 through 255. - - :returns: 0 on success, or an error code < 0 on failure. - -.. c:function:: int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, const uv_buf_t bufs[], unsigned int nbufs, const struct sockaddr* addr, uv_udp_send_cb send_cb) - - Send data over the UDP socket. If the socket has not previously been bound - with :c:func:`uv_udp_bind` it will be bound to 0.0.0.0 - (the "all interfaces" IPv4 address) and a random port number. - - On Windows if the `addr` is initialized to point to an unspecified address - (``0.0.0.0`` or ``::``) it will be changed to point to ``localhost``. - This is done to match the behavior of Linux systems. - - For connected UDP handles, `addr` must be set to `NULL`, otherwise it will - return `UV_EISCONN` error. - - For connectionless UDP handles, `addr` cannot be `NULL`, otherwise it will - return `UV_EDESTADDRREQ` error. - - :param req: UDP request handle. Need not be initialized. - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. - - :param bufs: List of buffers to send. - - :param nbufs: Number of buffers in `bufs`. - - :param addr: `struct sockaddr_in` or `struct sockaddr_in6` with the - address and port of the remote peer. - - :param send_cb: Callback to invoke when the data has been sent out. - - :returns: 0 on success, or an error code < 0 on failure. - - .. versionchanged:: 1.19.0 added ``0.0.0.0`` and ``::`` to ``localhost`` - mapping - - .. versionchanged:: 1.27.0 added support for connected sockets - -.. c:function:: int uv_udp_try_send(uv_udp_t* handle, const uv_buf_t bufs[], unsigned int nbufs, const struct sockaddr* addr) - - Same as :c:func:`uv_udp_send`, but won't queue a send request if it can't - be completed immediately. - - For connected UDP handles, `addr` must be set to `NULL`, otherwise it will - return `UV_EISCONN` error. - - For connectionless UDP handles, `addr` cannot be `NULL`, otherwise it will - return `UV_EDESTADDRREQ` error. - - :returns: >= 0: number of bytes sent (it matches the given buffer size). - < 0: negative error code (``UV_EAGAIN`` is returned when the message - can't be sent immediately). - - .. versionchanged:: 1.27.0 added support for connected sockets - -.. c:function:: int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb) - - Prepare for receiving data. If the socket has not previously been bound - with :c:func:`uv_udp_bind` it is bound to 0.0.0.0 (the "all interfaces" - IPv4 address) and a random port number. - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. - - :param alloc_cb: Callback to invoke when temporary storage is needed. - - :param recv_cb: Callback to invoke with received data. - - :returns: 0 on success, or an error code < 0 on failure. - - .. note:: - When using :man:`recvmmsg(2)`, the number of messages received at a time is limited - by the number of max size dgrams that will fit into the buffer allocated in `alloc_cb`, and - `suggested_size` in `alloc_cb` for udp_recv is always set to the size of 1 max size dgram. - - .. versionchanged:: 1.35.0 added support for :man:`recvmmsg(2)` on supported platforms). - The use of this feature requires a buffer larger than - 2 * 64KB to be passed to `alloc_cb`. - .. versionchanged:: 1.37.0 :man:`recvmmsg(2)` support is no longer enabled implicitly, - it must be explicitly requested by passing the `UV_UDP_RECVMMSG` flag to - :c:func:`uv_udp_init_ex`. - .. versionchanged:: 1.39.0 :c:func:`uv_udp_using_recvmmsg` can be used in `alloc_cb` to - determine if a buffer sized for use with :man:`recvmmsg(2)` should be - allocated for the current handle/platform. - -.. c:function:: int uv_udp_using_recvmmsg(uv_udp_t* handle) - - Returns 1 if the UDP handle was created with the `UV_UDP_RECVMMSG` flag - and the platform supports :man:`recvmmsg(2)`, 0 otherwise. - - .. versionadded:: 1.39.0 - -.. c:function:: int uv_udp_recv_stop(uv_udp_t* handle) - - Stop listening for incoming datagrams. - - :param handle: UDP handle. Should have been initialized with - :c:func:`uv_udp_init`. - - :returns: 0 on success, or an error code < 0 on failure. - -.. c:function:: size_t uv_udp_get_send_queue_size(const uv_udp_t* handle) - - Returns `handle->send_queue_size`. - - .. versionadded:: 1.19.0 - -.. c:function:: size_t uv_udp_get_send_queue_count(const uv_udp_t* handle) - - Returns `handle->send_queue_count`. - - .. versionadded:: 1.19.0 - -.. seealso:: The :c:type:`uv_handle_t` API functions also apply. diff --git a/libuv/docs/src/upgrading.rst b/libuv/docs/src/upgrading.rst deleted file mode 100644 index 32840c2..0000000 --- a/libuv/docs/src/upgrading.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. _upgrading: - -Upgrading -========= - -Migration guides for different libuv versions, starting with 1.0. - -.. toctree:: - :maxdepth: 1 - - migration_010_100 diff --git a/libuv/docs/src/version.rst b/libuv/docs/src/version.rst deleted file mode 100644 index 13b0940..0000000 --- a/libuv/docs/src/version.rst +++ /dev/null @@ -1,60 +0,0 @@ - -.. _version: - -Version-checking macros and functions -===================================== - -Starting with version 1.0.0 libuv follows the `semantic versioning`_ -scheme. This means that new APIs can be introduced throughout the lifetime of -a major release. In this section you'll find all macros and functions that -will allow you to write or compile code conditionally, in order to work with -multiple libuv versions. - -.. _semantic versioning: https://semver.org - - -Macros ------- - -.. c:macro:: UV_VERSION_MAJOR - - libuv version's major number. - -.. c:macro:: UV_VERSION_MINOR - - libuv version's minor number. - -.. c:macro:: UV_VERSION_PATCH - - libuv version's patch number. - -.. c:macro:: UV_VERSION_IS_RELEASE - - Set to 1 to indicate a release version of libuv, 0 for a development - snapshot. - -.. c:macro:: UV_VERSION_SUFFIX - - libuv version suffix. Certain development releases such as Release Candidates - might have a suffix such as "rc". - -.. c:macro:: UV_VERSION_HEX - - Returns the libuv version packed into a single integer. 8 bits are used for - each component, with the patch number stored in the 8 least significant - bits. E.g. for libuv 1.2.3 this would be 0x010203. - - .. versionadded:: 1.7.0 - - -Functions ---------- - -.. c:function:: unsigned int uv_version(void) - - Returns :c:macro:`UV_VERSION_HEX`. - -.. c:function:: const char* uv_version_string(void) - - Returns the libuv version number as a string. For non-release versions the - version suffix is included. diff --git a/libuv/img/banner.png b/libuv/img/banner.png deleted file mode 100644 index 7187daa2e574daa7aa84d81fbddcf6ec3e571d24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44102 zcmbUIby$?`_dS3DKCQ9s|`b^bhOF1?1DC+>UiwbxpEKe4)ZRf!4c2p|X|R##KjgCH#MB@B*-1Kw_@ zkX?W`d`~r#M-W6vf&LGJGTzWY5P^=9l9H~jqlb^jBS#NUW_2YcW>0SqdnZ>r2nv|W z(swY>U#F5eo;y&~dp(D@AtE625}L1M5$`G?}@^R zN)#EdAtSrHzAXIYmk%dk^MuIoY96vYy1WU4PC})nc~}v+tq?3=ln@U>XlEh>Z^WQT zHxyr+!{AXcgwLxxnt1T*kbK}v#Ue;v1qRPb=g^08u^_8HTbm_Fmk+Yy3|kq6;8`cH zgJ6(ZG7BXv_Z7rUVfR!Sa+HGJ4;nrD54tZ1UANcll7J@oAVGCwdo`%C0YVIr5mrNZ zM3CUUr_o#xRuE+M_2$h0DC#wIU1iT$`ZrHG*(x_!sn^xgO>7eXg`45=dEpux^E2KW zP^ad(E@q8kogvTP@%S~ZaJUF5a{n6y<-Vc>ce{TXFhEj1Fd+7_p2U)GqYVeeYGbo> zwLDnnDGxylKB2=`yaF|Ja48(P+tpk4Z7jzJgt@-Q&+V&8}UFv{AcZqsz1`})#7a<7-l8FBlhqN@rPE z&?~-o7Pgp2nw(_!eGrSs5VY6q(f<7w9wyu|a$(RPwIg?_n#&Hs?bQ>#An1WI8^1ws zja)Y#1S#i+b5|JcQryw&Hppp?K>_eWwQjU+Ojq-WN6+3mMJh2vu>e8r=%W|?{lvw3#^=1V;4*U={| z?P^%$&)JxJo?gGls`*M(O-S#V0kfeR!=8*chD40H%EwnyUm@X$izlB{g_6Uo@5y{8 zs#9uuCr%fo@|JMup^s2TJXLPykasPeOq^KW>QI>@=~TR|Qnw&tjRyC2m#ZNEmrlj1 zJG}TwwtZEs?}^I3&{Z0}$83&0v>mMS$085^4}mX+<*&$W&8VPuU+eze3AK03H`qk3 zP2r2TvysOt33E0jV5nCW z7>tmQsEoMl-CXA_$rMqeyP4E8_0XjnS0b60ndfWt&#a%FKX3n}|H-mvMv!GA?^ST3 zzj#Zp*I9#hnQU2P8OJVNSivwqLvQw7p20QIcvHm>dG&e~_hQ~ri1=nm^hZ*uYZiWZ zn=(r0NbPv+RI%ps@!D((2B)N>pPT4y^ASzc;{gtR}gA)8H;1msnw~YRB$i1%5v$` z7iL0R+L{1f78l~OC%)mLT^v>Ylfi!6&FPm6&Cg{@OY$U?Zfo2&uF>01wwJ?QO7}W> z<8v2(^;U7(e(1Bg>pNVFT=YdET1`TB<}RhFX{q zqR_3uY0jzY5I=yOwW>dQYFb*R1T{=3cy=p56KYo~`9kJomU| z_3TE7z@@>Z+gb6UD$#wM8X`8FX`%rd>Cd8G9?}c~-P6DCDOq&ND-~L&Sf?#Sy=oek z&L2~Gp+Xwx^u>IMZOQG6+n0O}91a!^P3;Zs?F>EbrXsE)DJ?0j?*4E6Z~K3|7R{6q z8WT+JNMoNur)4KU@ce^=jVr(XTjw8&(;{*!yOsf0=4eM3`=8kG-OAJ~61e`qeg zR@`(q>26u}4~Ndm-}OE9B@MKd%M&=$<@Ij$A=VBy)D8`w%R9G|T9QIOhP=3x!6lBF zBq?JsWe9y#>wR6)NOCS?;LWyN$mfI9bpeO_gJgpfx0mWE`nbBBvh*`YRUN1unjS^& zKYbpn8PUg|Cd;2m|7G@T%TEoTLobVkz>&kO%$m%Ot#{KE+hW^J+c7ga-$Zh_vQ2J3 z8tVM2guJ&rEJv7=BIq*zK2%3ZC)}ZK^`?NWz$@bqP z_=((0&!_k4hK15Z{fB3i9?dJCDW@vWWjYAyNL27?h;qx8@;ggUiGLLNDEEcm-sIcZ z{jB@yu9`O___@o)++ADeFShn$7PA%!mx8F%1-@E%KF%BHIEXH$D&Z&Rl}we_dV2Rx z@~#3I_dBXM_B{%J_Ll^YI~Y0~SOtc~hM!I-nR7GV-BaV%4ov*@>XYbWw$HZfX%TD9W=dvLW%x0>3Cl>f2t_8oO7K!FWzkNmci3=PvG?nHZx>yC_1XP-g8*X+ zZjVb%!h38JK7xA1qBR54TjSig)ed&X_HF&Ky%MQq**yJQ-)efN6U5)_kFS~8uKySUuk*oEKx1(^>~_Ki4vRVi4o3w>BeXE+-_q!Wn0E+<)JMcf!Z$N588Vp z+UsC0n}mi0%h4g5GviwpI`;)k=IgA_o@CL>QpP?jzdlW!Mj1A7YbIcsKE|WB?e$D@ zZAn>I)5Agg5&QL(IlgQ&lGM_)l{6A};>oF6;(4Rmt;3`LrUlaaZ%sEx)+;sTw@EjC zvMcTx=$Dc+C@?rMI5QC29+|DP9zSs(-lh-wbR_a?Y})M8@uh4}>$D-vPU>&N)>$Be|1Q+{zl?-y`Knfw?W7zCUZGxjo6GW9dg&1}p*>U@(O z{;@F^c%eGYMEXWV+T^juzCn-E)Oy5dlEdC$Tvkd}NGSj5jMenp`k+QtDat_Fm5!?sF1XD+wj?tzDgR^>27}0oKfCn?$Wd!*isi{ zf4okgEj}=N(DL{<73#-WwuH=V%YLB8@#o{id8*k^Z_dkszUE1P&g~DMbUs-g$Zsi3 zD$T}>$(dcvOzg~rIV1dY_lIXxk8z?S2d`co#*->x$G?v6dqVtVGy9ILgv6qp_vQLU zvC`nfL5^(dtG8Eu<3#No_}2Md{Plgw*#j zg{lXYsRx$^O+xEEiDX~n3(Aq8K%EEU}x+!GxVS22vDdF`Wal@%hxu0n&cO>2m&}h zl=|#h2vxQl`0T&)zt)0kOU5h} zB3aBo@wWYabv`8^fgr&6x1Q-xZY>++1BEtvE=c=GGC;_K_1l&Ad54_qDkoj9#4TZ- z?hhZHjIv>$`_3V+sOM0`5`i=q6qt&7h>n`1e@n#y-I`Q~Gu?gTIPB}=0|GN}z}nfF zAS9$kx5OYlJNrwWODDKF^6e2hVc}rz0jsv}^vE{uLaX_89~<}W?49Gz7*cgEEYxl~=9D;&SRL*r%#;~E$(a4Mp=lQLoq9U(_4(vNONT8Et zu=-X}aLZNdUHXIwiL0&=KP$HmHo=yA-9#pypQ^d_tD2 zp|gjOb4n9ETo8WFk|g{Te7 z%l|Sp3N=nnS65alYY(8~?S5!4qjjcYM|aOG`-Bc^ie?I(4H8%N*|0Y$y2f7 z3R*6;zkmOp3xc_&rKNQYLsClW_g-H&hP#ybD(x6G#+57Mq)vTlDfbQ8U_4xsfGZu( zGwA>OaPk99$Nf?+Y8;n~@bKvY6-OVrsodUdm;ZnsKYB;QzG zUUqbR*PW*n<8`u|r_7Co12ZpwHzEGDrRRSsg20mB=75NxR!Oh7*d2-Rh1!NTe29kT z1Ork`gpwI!NSRbZLS#soWUp5$Di9fc>VeBuhBNN;PkMy-kGN(Qu3gv*zafSxDF#aylJ-?nMer6BkymcLaC^ixo z+5z!90u}&7EDl0o+zJ;?x`jcNZgF~~IJm#MQ zuG!iyRn63qAUL7WN>ge9lMl~*XEMg$w-WM*Y ziS}d@dUJ>qaLodoyTLt#u+H>Fc6JTR%}Wc5SpW-bYinc-zvaTNFuvK}_Wy{Ll9sl# zoEE<@QDs|Ie#bv_v7 z=PxnP5M?);@lt`c#DU1%>)_$xu;AaHp<2@q9*^Y{vjH|NfkU(Oi9M;pK$7kr;8%L? z0O)g?G&xMZ1!_yi4_HX3E(DDDS zq@=yhW!y?Qq<;lYUZ_{H3qo}FY_p=Uvg81S35+`K8GsAwEqUWHPj-hY}{!5i9G?>$M$(J8EsSqwc?MOH*QY#r6B zHDtbSipQok6r?AY;_pQQy8X1Ro4P2LDyniLYStA70Wxi&r6Laq;uKk6C$ z7BPnubbnwr`%`<^75 zBRuE+hv$VeE`M@f3;JoZJCA8~1FrDvtf@%?y<-4%g!DX9#5j`hIg+@L{$a0D35Zrd zQ~N@2P@rPkt>8vw%dspVrttz}8>0vN$`|5i`6eBf zH-iG0mNNp zf-oPRoQ!?)B(N%T4GOjckwt*Kk%{#udfBOYpaRN^W5n$Z0lJI$7cZ6oc}XO?!X7Ut z2DoCNhKqX0w`Hua|ALTupwmilH|iBj@o4Oz>^bjLE!@A|`7gQTfT~4y#{mc~LCWK! zW}vz_aL(OhMZKK-=H}<>5N+n`*X@%vGBk8_1pX8Z(qmALr^o+x zhp!#g{8Vrw?DC8lY)ewT-K8G;oFN2R1qO0Eljjx{J>h(%h2Mvh4fd?5smW73D2)gE zPc0RKF&`t^zJm}Zx0bvJl6;pF|KpCfSXU{=+orI2szWh=T=?wNYLY7}D{l=kzqjiX z@A4m0{W&oO7M)UFvO>Dt>j+Mx z&BZix{)9hif)6!ep>_fz!z^}v6(eh(Qw!LCe%IE9G=#may3Y%sUTC(yurS&XGEuxg zC#;y?Cl)}5^~39bH_SYSm~ZvYHiXs@bz#c7i2DVf#i zy-Wb&FSt=TeIOHS4LSEGFKjU6o!i40;1y&=Kf@dy@j#T``|;uo_k8hrc)I(l=bd1E zoLW;it>ee*>|l@j0U^1YBOCepwbX*UH^}x+U0kq#0j$P;;<1l|@@*gI1J(1_BqI?C z$#Pe#U}is{oi78M7Z$87N9D8bQjgl!U@%KbWZgwW(knVFKg1}rZgp?@<#an#@dyfC2Y+B zB#a0LbKs4{3&43eFskK~xnPA>mj4UP5r&IS{XHh~r+5}uj|zXv-S|sBqeQUZWMn+) zdAN7!E=aSuu`MtocH#w&g+9>sHh(!4^P`SrI9?f+d9^9E+(P!h^=2MJuQwC3@Vw>y zIbO5oi|#)Angx(FG&H*+I6il7tZi)(H}+?G)OR1IkBy05s}QFlT3eUsW0R)>d#F*c zEIe=bNd6zH>Cs-$BWX`b@g+fl{5`C?`pCUCjJNf~1_Cqz9Eos^cy}dpOQ-@OBh9)S z^YW#C<5CT}4ytSr4#9LD$#cN|1YtU)=Da(9jsK)A^ipMD;5a^|-+rI(95*22w639{ z_}3{BPGp5ObI&y3^B@2y_?wJYwK2YX>HIJ4-Xl?o6TZ{}54uu#j2n{{(N+KKpiNuw zm8aawbTt8UP{0|+n{IGsVf;U=0qk^d1WMDUJuDd>#fsM;DesC8nSE;*TlX1S_nBER zNyY-D)28v*oGa;%Rs%fCRs3WJkNRTp+c!^6cA73yQc_Nzd8W`xNd8+3=7YdkO-%bt zkUxuypP#=-!}X{^8_mkb9a{k)&_R{{J9FvoJC?AaiHWBG zRaXgMCTPIB$qwTe`g@^T&`^CODqdDH9#pXH0=7n<61nne9c}INBGNSUmu)fZK6#Ks$W)nDx7amcY1_UZPJp*IPwH}To|5o#2w#|c3jn%x- zlMyE}99QwnTej77EM{~}02ydKQf*8Yn{+Tr}BrHr0lz`y2?%OtUGBT8-TOd1NrvCsD-F@bIl)Md@y?6+B)~{SmGb0t&anGXTiTs3NuB6GI)#tKF-a3 zr2Tcdu3&FJ6CJbFIxzom$KCl(q-E$_aE;8$G(ieh#C>|)Y{{|k_4W1i42q(RRzFJI z1D7G$wwD^0rU>8qXvK-NeJ_uCyqcuXl>)2#Sii}+Vakb6A=C=8)Gp=kB0i(!ffOTA zBv4v}Kn~zz@v>)69pa)QQAbA;6j1xkQyCeVYsJtBJq-LqIEW9=o4zy`KqYf3mXOH&bGZ=N#a?%K+2ZVTSz;RRdLF5Nz1@A zn$rH(5cn^mt4%1FTs1+S+-t)C_q((2w}v(lsmSAiA`(ckMnP%nL5^ZmwD?__F8X3d z#k`rRAGS`tVj;0m$QE}JGk~Hl^f^XfvJ$+1KqueY9#(R!87jZK<0JWd z(jlx5X^8_u#>Tl9)Rm!W`ib?n=4Pq9RaaN75DaL`+gZOUO~SDRFcR0;1`d#um0n760M`-2AcX5m9@ZWs`Sw zd)qhjX0bSz@h6=R=BKA|(V1#dJerqp8zf}mxd(J2NX7l>auUJXso`L6_O0{EkHgVN z<#vw86|27<`z-fT&U`%lFkzVX{>Oiq^G^THAdQYD1}`j#&Fk{=5}j%_lSDC{Kvu(Q zCgXsY5ru`4k#T5X5;Pu%&V%9cOU}5`n-9-#jJ?2t6AoI zuiKvv4Zb~w3NJy`C3D)Q%)?55XahVSU}srZP)DF1CU2CDl~#^t-5JKHGmV~`Yi*1O zShuMZ!{+EjS_xCv!gILC%?L3?B;?teIBQ%@5CbXS0l;-bW$G+}jfdppr^cc_=z20`X3+Nk|-`~H` zo5Evb>sHyFjFOcbhK`1f4zN6Do=ej!pGkB>qC%Phs zLM%7-xBdmEw|5D`tfBSu&``pJVNN9%GkU!M%bP{E5hI%0(`uH&{6^P(xEKyeNzN{} zW}B&HWLA+rl1fFmw?IDcn5Js$^0D!Z)QRLJ12SXn>T3S0RG>xw*`Iq$hZ1ymE0ofU z!hW6P%xV=?j2@YrZq32xU7Sk+CZg>fAOgrQ`n;NCK#EDqRoeL!Mrfh+AkY920{qy! z?DKa2;-fY=Huo{g^(>8Ex(q|Bc&!SP2~;Ko0TgpnMD0hiTd&v&HMk~p(9In(I|O3l z=|?Nmy#Mi;v32y{O5;Bj*~#(lL?Glf7{~3Kcg{^d7~yKc1Yc`4`nlaf9(91%%zEM2#Jc0sfU<9|GaoU8K#Z^se+aZp3@sD)I=YS3I=m>a`-y7hO^Rh z_!J96iHW-z-hHo7$eW3nPQjg4+?Zcf&0x&GqQw2ucF(r=eN>2qoXcP#T4)UAbpj)a zv~>f7cU9|Kn|XqHFZBAb8Jd{EkZuEqg%i{#g2XMio*y0^Jxl%RAyBpJN&rtV2lvR* z-j+9p#z>%XXUnDMpQ0{YuK}!d+zA8#SGx1~dM}@)F!LCAyWtcVH$b|*^g^GsCh#*{ z5MP-Au5)ttPq=eU|2|kB{VsFzk^#87!T7oTsOo=mjQ=z(pN^g$otOpEsr~j!#>Ndh z$JyD8=~^7%-@IK$we}~k4eJrjD>s1tE!Bje+RWRHz2Lv$7RXy7aeA~Itc8l?<|)G{ zEiLujHjke$YWeHHv>TGE94tL!|k0B;s`PZ8~GVUfUB)-0|SHc~lhy zs$BKFxP1+6OH0Vw_V(0~Z3wDG0(neG&5vb3bHgn(;>`GlI#Wmk-*ubZ3f_kgP_-tp zPBkOq#PS3;cfk#z*XpKrJP4Dx=A_T*VmvjAA!6d8!iNCCNlOR9)ZYAhrYHV+pe=}URgAGV*}VWIW&!yZ_(R%Vt;I}mEQ&y z<=Y_D!uCTiHC@XROQroD%Hi%Rfz_p>!>npjWYo1Ycn zjz?%c9th>3WVc1fQCk4=Y*q7zb!9{2<>33J_ay{0H*P2bM-i;_g#eXoSZI%&z~5Ap z->^^|N({Sw+usvN#K|_nXm3LF9t~BnOLvrUO)LAp2H%$_c)+>`S2A=fgan z^xIR&@SmCbYiRD;;$K}(rtJ#_)?II?*on#;<9{u2dSwV3wP*k0UOMXiO@Fy&@QP}6 z;84C$@6>X}zK*}%i~C=jAwkim5Cv=+z_F7LH#H1R8pysg4KH4JoYW}D8UaNKSo*F6V3yTAN6@bQ$d+ZM>~SN?7B*A< zDZN-&*+wjL7?_%jsp1Xns%XSY})`JH$MZMa4KUf78@lhDhdegJdT0DnvW!)$n92wxovH7 zR@OF2?SgrT-7N=g)T zbWRwJ04Spsgcb({P=Cy9u|lExFD83zL~_hyO~YTs?ziqop3}6IeA(J$7t--hhyXh2 zNhX2SyLS@~i#c>?q_@FfR!5VTh}4)w+x500*W3B~b#>?Bi&I8hSH2TWE8REL2yV6j zRQq<9>RjWjZjdv3&9iw=(9LM^N|EJP-)SY^byq3R>njK2B9gc1*fO7pz}nmH7I&_X zqQr{M>4

    ;+s0)O?4jMGXN_fjD^yY!L#d=Q=9Dh2|l}AL`Pw{cu#w0 zP`t01ks?AT=Kr1$H$$F-=byj>x~$lfEO2D0?02A}Y__+oFx@xbj#lhPEmGa%(73p_ zH;fxhqsbMWg;H-xoj7antxcLQD>M z9Kgy$cUQ!`TvYBMn`W%dZF1G*lg0E*b-t@++tN3M=TZ+5-qe~wIDW;U8;vj}J=C@N zDUzV#CnK=wJxOf!2KE$cz{nUSu$~t$6PQFe*oF|aEb@c=8htAI?vlS-QIIA%Ss8z( zWqZ4|XL&0Lj(9P>!y!)g-i!Dx!J72oFsi4b|7uUZmKDy4bp$SoXQZ4z8L$mE=XTML z+2OG7)Jbf`PQ*B-!ovYiY(ksT_G~xmpakWmPkF%e-q<+!e7hpr%7DwH%$D@xoE7EN z8I92aV&*N6V7kYo`MeB+U|amQ4rh32{%yeX8R-;rlX4!KlVYc8)Ncrwbt;$TBiZ9u z?EbjD6&{bUVN(*fELP-o#jXt}sD+)N7;ra4@w`2|UBavG_e< z>BBz}V~hFj}&?URH6l zVia6$65TV^@~%PZRC#T&<_@}s*}43`C&v8d<29LX^KPOaE{$Yv{ysnJuW03LlOB{G zDg;(6MoG$g?p>HE8?dVryvU{%R$Dy29mMfy5RTD=k$uwQ?eFh6T&{;jUiC!IFML8f zzG<_yRW$8Wi;ZurW_~g;{$53$%9+N^;Q#RekL0ss2A~crJ>Tq~*YBKE*R9Vd)IPS5 zz%Iq?HJ-Jvl$X>(I5QOKm3@v&vG$+_CjWTd762$taR9{*IjXlB_X$z=Y;*|V_!1ft zf&cLA!&6_?r7T*2OEhNfcFS*HA=lk4hO;((!(AiPUZ1hAqMiHr?i0hWW6h6_EjG9F zJ=1_s%r{&~ok92c37(49c(zKV4|*)ES-j&k8A^Xa$;;-|IP-C=IbZmarEnw#aYDq`ry#2OF>eKu+N}U?2k8{P_!v>J?=vMMMV#N9pka)aJ_Z4OBMtE_ ziLO8*k_?sLngXZb$sItZib^kQqeG2&Er=b?j{Z|IY$g>q$TMOf)Cd zp;=#pT?lP_+#loh7%t!^XZJ4r>FWgUhOW=@ZXU|qZ()bqt%>b9>`lN+JE0>^`bZ1L z7lVCD@gCoe>4V$FhGb<^a@Us3PZ>eC{f}u9)C-W#n#%~O&wX#|uX*VcTw#)TNO>{{ z1RH7}!Xl?e4q1o*npgO+ni###GBh;~-#Jfc%7p)&Am0CY> zv9ODINnHEeeH^^HF|EA7h`04P{^Q@rs|Bt#tC&1x*A?H6Ivf~DD0tv8w z<)7WcV+3XROLn#OzJ@@8YTw0WOkNqS$?9FElR%)I5~6Di?0#g#h^I%xhC@G19t2O? z926QBe?-r;f+#0-n@1QEdnl-p)$MEvL%M8t?d$nCH2rMlvZ z!ZtH_uw6l-qfqeZLkdDOjz|;s(1>_(8QOb(#(R&WY>9s#F_+>E6ZD4~O)__FudBBG z7Eh8k^=F`}zDHyktBZ3A4|q>G_X2bw@-AZT4L(nY zSX3MR!?NCj`456To9Nbw?1SxeqbZ%L&Yf|~N`&U3!LReFa%tht%%O~kItcodZ(fNp z#49Z2DLwoziITs5i;Zt0qYOdb66p`!I`lUHcIKHgdSsBr3wG8AvpH zUrs0GWlM67T4HO(7zF(QM3G674Ah~DkfMiBykAT)b2yn7k=M5U%hr01bm;ob34HO~ z8saCTxo4?UyRVUh;4|h)Zj?cC};Oq{FA>2|GSzS_pX%_eUAK!?| zPh4$hXIgS}gF4!U{uqw${uwKv<(>fkbkXM){Zl(qvdcal%AF2YyI8B*-krGH-Z#1? zdtDS|9mgANPYanyrfBk@dA@Fj#cUT%Y!_F>jxC>i=oxzx z1u50UvA)Rw>H-56(xW4-hUGzNe?E4f(c%6VUo}j*sL_f)u0xO!IL4ILn15sprf28R zh4W}xJ^(VTDGgI-=1cfVQafI|#3Cx%dk-QO) z^~gxbnFv3ji@8a;?Daq)Sud|$X1a@tO=vIaok@3nODK#yzJboOsWuT2 zt*<`+lW|=8m!4^8xH#?U-Z%fuY|k)><2^nq^xG{C&_7Vu`^pup+S2Nm2hGL5g3>YR zJt2AGDuK4VY8cS^&OADNSUKbeAf1YnJ<@XwlfB!*oYKYQHMcxkqsuyNLpyBN6T5cvbB-JV6TP^t|1Z6`^6g`_@Q&FwGZml#qq`f?vhOgmmO-) z`!n5Lx&XPVKHNW=caIIl1{2d+@N9S!Xy{(3MFI8UkLD^V_n;Ycn+NtunDT4&b-h{U zFI=q@3j*d%<54dubH-8g<33?!t%&`zr1Kr@SF^VoBEYI3*rg!M&)SYZr zsQp9gb;xs2JVEmr3B}97iyC1D<|lhdBUbb3yA``9OnwRL*acD>_cnbIPad%|b46eC zY{6Wip~|VFMW%}OhT_7umO+nALY-&7HU{bEm|Gi__D3u>$x40UDJQ5}4&!hx&&F$Z z&^8b>v7h>g(~&?a0#kM!WH#`w zwd_mBeUIFkGC1E_a@FD#{?llV?IvO=I`z4s91Q~uj!tE5`eHdTg35G}AuSyJu9%#o zIYN*)?S}A8OZksjaO0_}5wr3PV__Ip>jkDXp`e?+D&HJ;vW3JvN#m?75m;1DpjR(Qfm z!4YybwO+pTOG;G3_oeQqDrLWWw{&aoJwPt7iYWgIvDHPuj+%b2Vi*ay7s}FR+~wuE z&U>hLp^(<3`Al1N&lFRezH3!8tZcMB^n{5ksC3~DN7Of-AH{;$eGA4rf5kyH%{p?u zAyD@0kR(3yq3rFLEb~%BPoovh}*5;i8vkXNpCswDj zKFC=#ws?O1rANsyaiq_?bUq?$w^|l6cbGCxmy4+EwTh~q%y>l^YJ<5PN))XJu?f8y zArtaeMkG##BZk)tR$8Dj4@?PjFW36_yP08rVGOV+z%T)RqlwgiCqZsu1OHjvE%gOP-15@b8*A=NxK?6v0{oC= zUN`%t!4i;#24;JYF#Mz=I+T7=B(+o3}`_x8FvMK#7N>E1q%h>DVs@iGl^R|v* z_dNrPYcusWhTXEN5ZFZ=Ay`|@O#&#NqHS$XYt^@HBl%960p~net5wdBja{Z`i+_X0 zQ|?-U&mrOz2?A~LzaA6t$ibzVo>4t5KYlR`*p;#+7XLQBQQY|myC)<_bjdJxA`dGf zQ>70Eb*R#m4|a)HESNn1Yt&~;0q-2ZHX@21eLiMmk2 zckKIQ7bK$W_YH&TaD_MGyOTiNTObquzLJLK7arW!)9{hj`x@{h zJSQHR#eQII91o9P6Vz@Q?&F`jBCE^*oBaV878Y!om52!sIb!W)<)0c(jTUA9QP?>l zOwV0P@4F%e2}x0@r0(R?hEEVm-W&oRWs9ln)5x1ru{QA@L)%b3{F?mG^C;(nSU&5p z)K2}?+d7@R5NRvLyT>$s0o6HK?F%OMW_9@-t3E8&APgEBc?37Hu42qSs~0{F^3+nwBGEic-v`GyD>*oM@F8o0V^Sh7=L5^tL{+3 zpjiz%q&7s63RVq{xWi?g)vHng16w`y+=2RzMYCG@EsbPdPLj=2hv>`041Wa#rJM*M zNlaC}k`-BSf-<)_PO*v-7gj@aQ48um^*pqwMMVfEVs?`^UR`1paNv;(USz{f8D1yZ zFXq?di?Z_cuZ$5BZ*O!b+c?Tp-`py0Wrr4#B!<{F=tD4jIAOt^sg1M_kH+rAF~50Wu{DEHT~Y53Rgr%Q2P1;WtFPC)L@72Fw$A&AiG zWC49i3LAsn_+Vo_>)-hD#9G~px*M}&TH%MLUT&`K zvTbS=>pHs`6y56F2Z4A_3-w z*6rQewRmI_i6dj%M98r`CImk`UkJ}_bj5&t=loLb43iCjjysC5f|gP* zN;H`|Wt1GnHB!t=O%&TGO+xym#oIJZtha1%>B^47JM?Lj>)P#Ze?9Iq&9^wnY}S$g zY}}m)o}4g+tGhe0{|hDzdY;JmYOLj-n!ui&Uq^bYp@Zvu5_es-w(PvX7{Rscua3i4 zznF$HW_Tz|uxm^xLTHAl+wj+bKF>(S0MQUE=II)3Lg+REA&u9B4t6!GZ>_3ib87!M z(V|Z#Nya^(LMX-SK@;njNU<6OR8mt-B@A|I+*{GW@_7pJljId!Z9ZaYBGMf};dm3H zs*Q%HH}s172I{2OYr+OZu3#yIf84nD)!LVJd5mbNubgz zv7)9(M=YH=R?&HVCLm}~Hzz92$UoA5`Ru@SIDDVlGA~r}V>y^bzcGNlu-vamF7yVB z3e2vG0n-Es6k_k*avQh!TUSPE{_3L5o+LJ9 z_EChvr_;DO;_PG{uN!;KjZXkpqAE-$(6{=K-i~KOTEC-rw~@wf*!7+Z66`%wJ-Ye( z?SG%kT%Ga$3hAVLV(T8kCiNZqnv6qyZGGgsRZP3HB75%$McTP;b$bSE+_r;W)|8y< zE!8qHW@LuomkTjH`|@V~uFt&_8nn{wWyHG_L!7$jCM>Il+jk$)Y(FpX@{TVDsq3(L z5DcO1INS=}We^vPX^=B(UE>Sg?mK%O%x|1u`KF=e8BX3#4YJSAMi&zac)7p^{KXPC zcNA{jdl>4ZX& zZf8Na8Rccct-4bS@$O)BLtu5kvJe7AO`1iF;J3A3DHlIJoZ%|=;f!4Jh6U|*fj|1d zIzq%twY`{4XHE0-5-}Zs*t%~$;65FxrJ3mA;-NuL+yI;r9zDsJN}}ZUgxI;hwft;) z=ZATr%RInh#eSXe;O^x}@8Ta`&He#907AuYVQDqFJpX;_EE0;>qNJiyAP|SZI<8)~ z;QfDD(u8NEsF`rhlPl|Ec1NqfkEos}$*MsJp{iL)VXhh#!hYc{VhHv@$4hG0>R1%v z#*Ez(E`r27yD%@6X&k05+8Qcc!wC&`sbfjJxkz%GAccgrJGQSgX}Dj!{DU{@g7LnRQ@MCry;>IQw8HAr6$ z0)3>h*sR*=JeuJN!KcPG-_=nfAFN)HTw+V>mTQr+@?{dKA2DiCJ6~$k@iz{%&yL&T zZul0d=;!&cOn%^O_ke1&^=+yB4K|W-!+-;5e#^|cRyl3{oM}C<8O*k7o8CW8Z*iq2F4;FdhH&KG zYJT4bkaTW`SqPZ~mp&z7iN&@Bn)m@_rbk6aA2cb-(l5X#Ftif2$5ORMkiD!w(d??$ zMOi;HR!JZ3%|TO*P$uvVt>C#kVgbT9tSw^B2OB~ydlG5STUcmsC&8PG4b2jrb(Ef= zIu~)8DA?t7ZfASXl$p-7en$_W9k3DQyII4^yp1;&wdLlG`G-pz$4ZbbPyK~bLUnUb z|MRMhwBZ_7LJ;xOsN?)o*V6fwo_6@c@ORPUF00TZYOyZAn9K=KZbyRl|50c^5}`eG zVP09=X4}&=7kCygL1PImi>4zx_I`<(F=D`u zE?IT)hGweLZ@JfJmpuh>c+;k^1GGj6+3(e14}DZt@ls2lSL$R{XK{A(Bi1=P*1Dgx zdc9`joAg$C>g>aNuRz^=p6I@}?J{;vJGV_ET6pS#_-vK?#zYLhN=^Tr4ODvld!tU& z)uP);*t!&+{kH{!%OA5l-=DEpC(pdY@gI=;q?E5AtTo9&CP(*>V{d8)c>GRX&YEDw zjFuB7I#m)*Sdo5f!LJ}FVZp2>gP{QL=}N+A=D>t3L?vOJO;8VW6qGVqL5zDo-y*(caxTv~E7bU9#F%OYtzw!k zIS6;5qWPMgrbRc;^9!IfMn{&E4vmF|Mwn9r2>e$Gn!9-aLE_rK$)JfvON7a`Qli5o zu76}*rei(mCVD|$JYch#+;&a6c)o1yBE9hA@>b$C63^I9l%6}saJ)Tlp0fxL7OWhg zPeAyYY{x(6sWTQh3uQsL^h@(M;^kCxRdLp)L>+q4WcM*N{>TTof-&13t>}4NLwRHf zhd;Pqq*E7F9TKg_%G?YvBb&P6WCQ#J-Z*RUlsl0^l*wD-KKSgFGz?T4ZpqD!`GZZW z8@j4!TGF4r0te8Z87Oo<;+2t;HEdkq5G(#{HbUB3+?@fMgBSx-Sdu6qpZRXRPKeYS z`~A^sh|*8}+rW}S*+A~WAyI#wzzJ5N0mW9W_1^%n` zdm(yDkX}^GhJNRf#)X#Q1O{lQ-X`pU16r<#sq%JB&h5ZgbUyJKxMvwvQ|6 z{P%^yBus7z2~P}7M8=~kIAB-BI4-yYpmYvZ3`w4ALT9UAoTZwF@9kRN8N55RUX?R~ zz|Ao1XKI+kVMBpu`iTd!CRXFxR)@U#GE}Vimi0N*KH*KBzj#D)5C;OkB5)y~DcDm%qP zqvFoCrPGU(c8h=gKd!#TpXopTm!wrfB^Db~ic0J&g!hDE+VWVl=~&unOlfN?pR2v)VhAHb?gAT;&u1h_z1HPo(4b_v{eQF3>o@|`Q0brvG(%q1}B5Kz%EArGPA@%TjG^z(OQKBeV|}#&t=tN zMq9s-*N@QrWUj24YQA!)_SlVPA&SDv>yZm%nEdj_vmR@Gc$*0NAJ|Ne`n_Mp?36A-#_#tHc$`R(Y*n9*UdS_+Dnr2 z#0MA0if-d0imGQ=TXy&D22f|bT%9V(R#txwY4wMOscqzS!1e5H>Upv_tF04Hy6vJE z&e-WCayKAkL72nJjx#Y!Q}Ur+x$ZXu;E@X(K|)81sHmRaIYJKcN3gDcAhc(3bEMj< z(C*KToZ6|cOS`OnTP?M=z5QpUU6#&R71!)iO!)~-aVDNpng;FzUo9*XyWF}uoKac< zr*2FYuukTg0K@HmQo>P*4ydKGmJMAZdu2n6MC3CTsRX@5veMaPwndIOV&yNnU&Ek- zloG575(hG{lKbz2c6Tp5`1{YoLDjMcGKr}|8 zh;E4;kr0MyDcV1802CH9!@1@%OVk`p;r~**Um+B1>b*c6z@=j1%)}%+2+;^bNITMz zKlTh9G(%xfkp9j1^9Ow9UK+(Z!ntZg6?WjCU47Ss0~-O^^j`*rKSI+yyYpvQ_8_#* z-g15Y{3EO4JUt-zHfW_j!P6lF^!iuol~nHUHB~oJghEaKCHl}CUF|-~a7TS9e`ay_ z-Vf|Aw@JMx<72kFJGXgHq9u0c{Bl>DQ1_!k~c++?`5h8MoHg5`)TLNlWm~xG%fDCwjv^G>#Gm*nw2f~u?BrT z8N!~p_p?hRtDo%`2n%>CcKH&Cr?^`lS+G&R#mUZ(-DB`5S5_+ZyL7>_yi^g#FkeMS z*g|SL&jmcyPJYdcEupFF(e6obQ|)GqV{vW5GkJ)hORTdnZ?>|sKV6}=6GdG8Dcull z56D*98OfX%w_@YF5SNx%R#Oa&8vF|;?P3N&$!9jM@uw_;DdaK#UM(b%buyK_ucE>` zCCOfEwCuye(O6@IM!y+mNO;z9i44jZI_cFb&hsW4Yuk7PNdZvo)`fKyzCY`B_lJyu z$Yex7u5|+R4VtZdpP{KRE2}ya=5hW2X}2=4wxugb*1rz*|g*%3c>H` zT$(nPzZSgi%m+4Yr z=3b<|)G-KN*GA3$-K4)^j=C3WhuAXeS?*dcXInS8s@%n+kbZe(qtfRMEd+{+D7-6o?ZWUd|FeL7*IY2 z@F^DFH>;Kbi_5gE(+~75V?*f+>YHNp)_sW7yn61f{`LE7UDXqxAEM>eXYL^EZw1U^ z1dyHVy-?Am@1aJzme|JQ0l(7t!mXxRcLyv)!`iY}F-+dqSyU*L` zA_F?fhl+xOs171T+*8$!vuM3`g>;f4`uW0ZHN6?39f`7tm3AjEimznacNfl+iVY|h zkmf|twFR2NGvP~bfe<*1$zw+T6bYw-z`AO(9NHO29UzjSsltD$IRxNwMhEEWLpod^ z;p>QoF)({AT0R8qO_LIFI6Bq-7;MXaDv?N49c2sw$VsMHNwzZJ8S77i7{q`R(f4}e z@GL+rnz1LPmNF*G1pg0gCjgk?ny?B?;^mh6gjn@+U8)6`)Rkq&c1?Sp`A>CA( ziu_jPST^|N%<`FaU1qHiDH)}JIsm4jG*UigIk9;BPO*=D*6Z9KA)FBPAqv78H?y9@`rDz0x77gzoDv7Q-D)cH8}elcqT)MGylD|0`CP)a3IN`IA#FZkcq}> zjm@hK3rckV*XfAl!v!8}dzPG)c1e)1J+skXH6!7mR<`>(4*K%0Sf`WUuiA^F>gN*F zAx;H;6MAVHXSQ<2y+i%8?0mEM#ZT1Ii>t>*+>qVsGniG#y2wupdL2(|F>^issUCv; z5|VjD4~5)+&PLat-d$#sbJ`v_|ID(3N=e?7D0_e-~(*1o_s9v(BDl5l9YHC6>+A5;*85|X%9 z3ZJw|$4g=JRQ(;x)^e>NpNcGaLg4TMeh`yxD8lsLcS#X_T>%br_5FFE|CMqzkA(;e zX|=kJE`kK{`cI2U&Z>;N2C<3i5LUWGO(&yVe?tuVNSmNs(9e8`A+dmx*#jxT%Ugc$ zN_LN=si9~}+8dD#4KqnQzdc4DwGB{iU?Ki*+hPl#nz5VD>UAQ)e9q*x5q{RnmuQXl# z&XKX{4(Y>3==Ak}PiNoVvRt<-jX>B1sI>XHi^ob~K`o9^Dw7*mY6nhhZ0dJlAJp5Q% zIiW#_+XIZ7=(PnE@A;l7VH7WH>luUxy(6gd1i^W!M`6L#Yt zo%9DF({hNe-*xB81G?6*9kyX*Ha(LtXE$~<{Z7Yk0CnoJjMsRfM(6|{pT&b92-i@>Z^t$%l%`S}q3{`0-4-1fJtx)tb)O+#NF5PP$tA-SwnQLXkH2*^Yd z;zy12@3HGp=4f|AS6ZH9iA-tW(d>ux+0Cztqgs{S4YQTOD|`!hI6Ec3T$`GoN6#mr zP8&m!#NJi3ub|fe0eh5@VE2Jx-4gWT@leX)(cnvIjn_W}NA@A*Z)B~l$9+&Wh!rVV ze6_nEs_1rFF>68hmborR-@e{S50V-z1r2iwS-F55W9yrqP1A7D)9jUdZ8dhjckD{Q zZeBuDgcnn`u#eI%i)301tLue#eRo`H#-j2ed(8QDq1ctz829}^J-a`OA)|+r4Bj;S zS&vJu@K%H$u(IY4%jq*tW9`~M;2UNR8EhsAY>I$+TDm5Fors4#Cr-P9F15e4TgHGC z#N5}=tTXKs)MGW@tK%EAu@D7tFE@pwi3)m?v;CxD&c8|K{>lde7(~aN_E?TWxDpVp zb|b@|sS$y2MCa-YeQNJ6iEivqB3DMJh4~jZkR?~Mq3D_6j&3-*VT>cC3tRdwj>7;D z8EAH@BqjrVq$a{Z6zV?t&no(Xm}-eZs7zez_rU4hUE9cokLxncL&Xm}K6PN>gt-Eh zM1h}OIz1J6wyXVhyVV8f(`+sS3y@Lcnj9M#KC{r#=u259T%y5^p*_-L>BH3OI z6uRVX6FxLKJl5s)IhIX4%FO?uL&^LuRX%YB=q;gp@F#H$MJNkclP%X`Q;IT6tDh`4 zSZv9MuNSG5PNmJR`~KUq@blGQf%t7rTkJSt0Lj$`XeAWte%;sk>e%F`@7!-*BDJ;f zMFW>Bn^6ch?5commvot%7q5+wat(`F?YS6xm_r82{BS@7Aa&r)!-$=ebsLY`S`f8l z(`s_X`K&BAzKIYlE?S(9t8xsJo}9*3=Ri$EsS}GO-jzbu=^?8}87B|Zf4=WQpLbw9 z_)#|CQuRF4&%W5=`qGaWaBy92!dUKlwf5;bW3A!LzS-p-KjJGuFD3Mqcp$H_u=&-) zUc3EYA8mW%bNhPpo5G4&Ckk}+ekf=AlU=5GF7iXIznrH`1!7ONk!c8gz+*eLWd*Kw zTHyPOa#L-hOIu@Vph;+b+|A^l!EkNVZ&NxD4af*Q{-Q(-yIS7sweWz5y!>YU){_K# z$4BNL4BU=q>oVR-PQOq%HtaIp5KEE_i;&3@Tx^s~GKe6XD%Kl|#2kv>ca8TgVnBUc zo#nC0guc2L?Svpk!jVuzb*6qn4JXfeX7w`Cl`X_09v!_tgkTG6l}FC07;uP?bV_E) zBq#GE<8*@cMF#4|ZsO>#O}hUl5Ow5CI%lJ6w#Tl$sr_vYQyH>m66-Vn$^MNUS*ji% z-EqvOj;ar{zw-!?sZjOA7zCC@c?YGcYEi&Ty0faFIE;cXBXXty=1rEK^qv=k1XKG* zS|vHa%y}bhqDZ(Q79294a1kD)X3OR+#cw@Q1pcEm0DPqRv7%7CNl2tVaM~{_3R{&y z%NEM0NY-DeVQH_f(|me*7drr(Xm@FE&haDYu$wo^%5>%hS=TsyqO%(Ol+67edGR<( zhQx0B3(J=w-t<*A9U4ZhZI8jZbNrkuY4cZ9Y_P{v`ZLTk{d|vGr1u?xFGe<8c}vg` zv;%&4XSD|a8!4m}aSZR+9ki?4CpTW@px??J@X%&x04ZS=jyhk`~TeBw@&u^UNOK`m7A1rS`S?C_1qdqvtjZnwP#n)AI8`G^}R4? zloq;vcN{1YkHfw`HyJB-yk0j|RmcVIw`(Z&8oypc>qsc6!J;uHl2czD_}+#^X_+%HS_Y_#p0%K!M_`xXvZA*AdRq z>D<(dc6`kPWU z6oljENlG-yFgl>V{J&lSI5YB0+lb`h7H5B4DNzarC+u%;cX^Y3nzz(-NOuhn315f| z6bfM~d+wT8f&^pM@|J4Z{U(j*f<{7NrEhKfVb^;;nwaHsK|M1Q-9?FS+h&E9mw#07mXgs zF+9pB--LxN?XveyrY+a!MqB1;e!Y8E*qfFbA(+KFW4b=1qp~k?eV?8>i)5~erNQK) z`)A}y5+SUgDow<=d!D|R-kOGS-{+xf<^}+|*aR+ZYdCyO6T&rT(7$}ty`()akzLD- zna*%-%;O$0M;OmTKCTPu*5FHC>=Y`184Jgj&ac1Ua0#=4=mt84*&ujBN}aXCCl#F3 za$4MshE7lFno=x~2`XBwxpKqZZe65&z2{=k?!xqymC!$Exjvu3;OH#uge^SZF9Vx-EjbmNWW2?Q3`Ep{I}FY zdWWG0d)#blIK&scmRe?iyD=ZbXOF2p9C+~?{-Ay?c4GgGl;fI{TEf#}*l2IKfd5b% zBer+4xGq%V+Y?Jj810ly+0&Mg)x^f>@OZYlP2%MGW?Pdi+W7$ds3c&3t z#W+tS-1qlBGg;0^1WuoIa{US+7Kl*LD!1`Rm%H3l=)5keOPFaXg%B7o^R(CHvVMvp zIwQVfI1>|2Ajt?R)i4^jD_IFnq4vpFT8lxaPe*HW4=0;PsKMM>Dz(j^>CsjZQy`K} zVVxAAat^LGOU8DL#R^X2a|gs3{_T(k|ESK5?A zKXdqGCcLKelQqg0zJWns_GMkEV|GZ$-Pnz?66 z0o4-y)sgVn>GuO7!os>|dR94BI+T}|6I)X|nba4<1fPbvlC9tOSVS`!L0%R#68(`T zStedPg6I}Ra=s;c=ulRK)Dz1g*P*)vKC?DErsL3E$Vrz;icfP&UkWszi@Jg>C1mwl zZ^^18(XrejpB33HNCzYw6^`9TSs?tlOY-0D>z?V*dM3W1%ND12USis?Yb#g|9KE?N+1FiWZUxv-Y5onXh3}Qi-^x9b3za%$FAWz~~G% zYobCwN8QF6to7WfVN>1QWgb7qHom16axKXZe}oK7g#Y;qeShjieMIqsv#EJlWDYxK z%IAZ8Hu8r)#$6{j0lM=VCeVu0W0sb-4i*rCr5EOq^ncl1sR=;!BmHgIu& zS8?w#j$XW`A*u_og?H8J{(yCr5`u&b6xr=Z!SKtxk?z3zeI8xEB>PvEvoQ^A^z+l7 zoEXUvyg&ly)58jmMY5$MEW%;;%zaLKj3vB|N!%J~hai6a`iha6B+J&1vGcG;(Af}K zN7(cI&3nJaNGyXg3VB~hZh8^yI#5rS!)Pge_5G^~@Zl$@z$R4cG9Pb*^cJvRXl4$K zr>X$kpw5NVZj@En6JVB_N5l#()q!2{Nkt93!)yL%S>`k%$tXV-UcqtH-pm!e7&tsH zy_|NjZdN2TXar;DPYQPg?kmt+h}&ZdbG}*ztw#e8wm~zDWch~KIaNCjh1vxFO9p6f z19%dDq>%&=8FGx+UC;^gz^a|BE0l4L&;%UzF@KV5usI?l#hlh%dqx!=#%k^^eW*@U z-Lz}`tW$OTL6rHguE_o*T+JD{SYiV~1bICDCUSf>F03od3ccP1g*@_Tmg^eBlZw(S zY|?FOif)$KV4S)HQEMEy_As4J)5p?(#`aaL3;!jl=;w@%8nC2;k+ceKZrpB>FqJFV zjfz<)q+%-8zG0Npdb`&E1zam+$-2!C@Egn#T^JWe864in>oIepTphs0!u^BX&eZis zV-)yEC~<5)%rwbsV(lZV*ac11;eJW&h*QbZN!FeJcrQmYQ>0e!?xPj?9mb3EmA5M> zOZrmt;8rmN&=LC;2jFa5oMS|D4>JHboe@rL~=VmFqTeg!Ta`|4`r+ zo1L14vgCAs=(A+Eo!u%fq}9!tzTk{m9r<0OJ)b{~y!TqYK|Y~s3BSkyDi7(vXFl=n zN*whtVDgXQuy(X3fDr#h$n&GoC#9NTwNkEx%ssZzd@Lp+qh@U~8Y0Dm)3BkQrI z@EPRpF4t`ok=5DqbO*n1keO~^sEiKSO>`J{nX(dKa=Mp~*0Tkx z`hBv7650AQ3unESJ41)!E2ZV&Xx)*XK$EqT*rW~IE(KG%bj=hlz=Sa>5h}VvdIdGl zj?g0QUZ01n0NBo9lq7=8w{V69I%@l$Wp>}1#}tYUbXs+{(%#n5e1^RBT>R9b?mWqT zmuyxhvO@W~)NjjJg|rD4*=KOYjkLK@jTzsXwDEdrZ+>y=qI&Av{mjSz0aGB%)FAIr z%`@!cV~Z-B1>Px5`E8-OGhZ;4y~4R-J#sHQH0`mRDBL*UJvaldh`BBy-Y%fqyWtEE zyb)nYa563urmWBd+?%^^k=(u%Db)O5>rtMTYsq3%+Q*-EMa#=r=N{tNY{TQp2M`-= zcmg*gx8%@ccsi z#yBY~S?4Ltb-k8)Oa&g4;XQF^M?wM7y}r)@D;jd#6a+i6*J-iqr0`IpiF`mS4DVGw zh8Y7k1??>J?B8$y?YUPq`AOT495|Ga+=nHks@3Lp&u5fOy#r3JHVGs8yDr~N_IT?t zGRbwuh1vi3PG^OrccTwIqBQ=s(m6XaNC~|o-sQ~gU(E5(-j9e}_F6&gOa9=ae5C|5~}e)0xKUPWJKj_$gWD&FPnalHiGw zjg^#mX==xdu-y46P?=*aWk-%U`_%=IJ1K+l_+g2w!ss`AqQlzf8cvM%=ECdJH4wT^ z;9a%hR|Ibw@{9y`Kz+VjNF=NAnWRr`BWL=YgP8jKg%J+8p8Zyv1ic??*De!AqZ*@( z=^~k9BT@(llsA7K)HxOhM@2{+MPG`0{71ERgy{8ix+rW-DA_Y0I$EVWwmo-FAAMP% zbjl>>yq8jY$cUs}&=BNH`AwW|)K)F4QC6NJT^=pz+I4&Bq$w8O=q`Wp<7z}gB=VqM zYN(1AqocDWTDV16Ld^E<8Pcn1`|v<H0G~X?Z~I*Cj8>h$`-kn^ zg!+D}GIC(-_x&rs1LL{xqWWGP3-^vc8=Lgk&U0B-grLgQ^qR!G@J;S~-s}^)VEVTT z$YD2VO)=Q4@mKnM?l^P9adXXh#(1ZEVM@@56@tjcBW>82A)^+7YO zSJNV&mcP!F+O&6Neu?@x>eq73lh>;^`ils_iqlp!m6(dIE6~VUU5Lg2!h_kYlsMQop#B3dr?SxwFF>)oA$b zS-`BBKh>x&G8Q3GSJ`q_xvWdL4j&CkIi@YwXp?s*lNVGZyVKvP-^m(`wDO!&T~vmV z?%2TPQis=6@u0=>o6syn*Ot7LE6P$Kv+Z~c>6OO@{XLx7ts-M*$Gmo(UhdBvKZXsp;}8mw0+7Es@B2`QZQJVN zDByfhp0%4nRIeM$%h%`ef=gfM9bi?6Ljo>wviyO=m_wPu+VzXcz4^iCo00|_KP8-4 zWzL$zD`@?!R}h8iyOMT8$R$c_-?7O7@az?5-1-B)w|^wZ&Eq2o#_)GrNN(^^)Ow;1 zD(VzWYiJMt)%5vRK1rf64!hC`=xEBoGNL=8we>j3n9RX3wG44ta4?^hX|dZuZ$Cbs z<2G6mF3gy<+K0RH-0zJ7I{J%89f>pw|RT zs=;5e>RyVxuGzu0Gi`lXE{)VKFYKAWEe*nz3jsm;R1Rs9BK5wBNQ-Hk^tuP)3GN`Ix=~hX8 zne=X-J%6ylRKAj<=@vZ#fuG-G?8sw?BSO=GO6euUG#OPV+~8 z%6=5Y*9`NiqG-%29i@$%i57#SV*65eKHmYDuac};{ei`kOF#_YX#_?c@^h zJLj`5w2oOJyu9gz!*~U1c?+&XG_oqGiTx%GRQtXIJ-$3z55=?B_m`ocn!i2mhJYLR<>v8x0h$q7p>E5I< zhU=3Z z!F=h9$pGTP1MSiB)yet>W*GGEu@Izq)=}#3{V#4!eqE0`zH}LXlWBB5^Ar8QgXce! zQ|UPoE;_3UnbHcqGjd>P-tO7IG+)#DRo;Dy)1ApmW6HOEfAFSD+=)Pb;k3zvqy?cr z@ty1fy!Sa~6lLEsLJ2VuY?3~jD`vt5;qGn`qXbl z^s|IeVS$aL+RlFHrW8`RNjk$nbj+}bGa+7mYWmBoUr>lvd^MxXI)3v+_LIfwvNQ+u zZ-k@B=vod``ArOz0ej!O+jT8z@HvX2z0+f@7HT@iz8K7^eWci=UQkp@;C9|QR53uk z8r?un%kw*xH9Kk_qlt=_-rAY?-&z2as)vpyT1~}(F!UE@)(~#V1fWoHVjTsuQ>+3n zYa-J&%XAItslf}d51Rb8>Dteo*G!!fBkz0etG#2UGWHJJTlr{tRxEs}l@-&_V7bg3 z91&*5sc{FDulqZKG_;r|_aVuWLF{s${kV+=bAK>uG2doGPr9tE556^OGxwk22ygv-_M{ ztz;ZPAJ1;%AcG%!$_*ZuI3J)HQClWMi*KmAE*Um^Gedb(}FHX-i{M3qKCezfprpycwy;A)7!Am}Ep{T&!2zq+HZGO;|B?V;=?@ zv_rcZ`qxndr+^hZm|B3>T4UYz;iZ>#tj^Fq5L)Vk$ciujQ6}QioF?_Z3fq5WBIcE} z$iY`-u` zm!yB6pJ1rZ$7KF83Y;zIBgVX#^P(5n1{}vVY?4qmhHp1683t_6#h&fc+U-=07(Xy4 ztksPf*^K&&`{zlulYZ|nRdjZZG;-Y0Z&X_=FwF5QZznlojq93zJ4Va?N`b&SAbi~B zkLT45;s>3D9`Fwj1pZc?&}XW5B#OT8ZmIBkeFori@INDMy6x@5KfSussr%UdMZ%B3 z8TT(bfhpJ$d)WLNs07NXtoHR}XFCGsYO5!}Gdxg{IBT%2p()>{K7eHkoJ=-!e|yMk z-v3YFEXh$S<`q=SkvcWxIU6?_S~R(KR*x*NRq6X4e{ulm=iW?R=fGg$U^bPGi$+r; z(0nU9TU~Q7Loq-p?`gCor%iJ()pV454FbOu;m|-cVpG;X^?Wu~G6fh8tEf63#j?n% zo@$w{{wYR%q`*ItS%Qu}q?681dBFNb4498DVVFoZ%L39Ku=HoR3$IH$Eq9t@5gHUq zx(}QA2@|wYDWSz;4S%$X0K*0IhksciVo?5}H$WtGOMU+H&tCiOz1b;S`Nn-Zt%k}^ zsH7e1oT0-%ssFQ93DQkkX5_cQ6E~hqh^7!`O)1|J7ZJtQF{xwi_on}j0p!mDL{kQTK2XWJ{%ERH=4~l$r$Dl_l@a*Gt z>hmX}Ov)d>7#@=kO1FdAqtz0wnt;=b>Zk^jPSiP(x@DtkBDU3P@upBQR+#zqfNI#i zn&RENj}BXM{oh0`?j!ID17+T2{`37u`1(CCYCc^9ao@yalp&@uc;UhL^bZV9_Mhgm z)cQVm`fOsyj)AO@-TueM=$_Hu3qg+27FW*6g(t~}X_t7fV zH2NP{tXR97!^q7kzn0dqPWx-S%SA(hqJKKPOc8Rw>Ldd8a6H z#0BHIJN6*5|B2EizNq^z$T+Rl_jp63oj73&teRd$i!Aj@z?4y*lAn_GXa$i@`-%DmYWR?$gr04&g4T&xbSH}>nWNgh z&@55J^7?zQyp1C&F@xVP+b>Y(7`iY@lM;7jkyPM}b>XIHaUDRIkc8C`9M0}P4&1?? zJ&>IQWl1R@eX+WZ9g!F>iYX9b;4~xR-l42#NQc@FWV|E=3Qob>FwjjhV>Z;^^nL=c zJ!=R?&Vz(4^<$8b9wU{k=$MhS)uF??Dp5m!Y@7(+6a9{Wb-g(HlIw{7+u#U-CZ{K& zmGmksaPm}H*WD$d@Y2R_SyPXIzPDjRBg$5ff2T{E+?ICN8rweXRX!a4q?D(%92WV= zCWxHUYJMvJ++8r<6l<(8ENV^m_`7Qa4CsIa{$5odC7d&?@~8E(pO+)+I^#{{qZPizcY`!7D}ifs9SmDW4BPpbZyJvqKmdn%?JKkcD(m(O(*4x?9~(o#>9 zEsZ)mDa_2-6Br*oNZKYg`Ci=YO& zr)xT*nF5Y7@dO+MxGc1)2x!MhHg}tqMz)qeK7xS)!YDU;84(G)oNh}kd!D~5>#5YU zj4&hrnZ+w*?DxAgxh%^F$?Oj6Fc^m$X^J(d>KDn8O*O?dkx$Y2@jWw10w(~FuH%e^ zK_-VXqCFIwDzd6D;G$id@h2(VcFl2_$xl`rkB@^ z0lQy++HRxXikYf6Gvh3MKPd^mvmj~jK6}kE{70M2UWF4!Br#e^GFM8{E~uYzO;Qq4 zppheTNg(3Vi2|_2=9)=&iPWlg=3s$FeUmy<=UZ6 ztDSbqw2aFGX)H;3kEqWhasdo@HNi)kbAHkR<_AKzs+vXHGJ;q4+$^>2)rjDa@s z%y5LK?(Kh9i^M>)*rAFZ|ATwn2|9cj_@RuP@Z7Bz#xm))(n;^&xaVo_`1yAwodlES zf1mOU`T3aLB`KHf_X8*Z_{Fi@-s{&BELHkds8P1GB3yf_u0R+J8jI$%>txn5=2L4% zTtp;og4S&HW=@x40xJU&Fh~i*!1)Y`26lU(qbX{+&!guiT$@JzDe@T}wlvTJSMc!v z6MY_|fpTT*H(!>i<3<;V2LIZZv`QMf&Yzc>J`Mz-W+iQ(q$q{aO<_*0sX8qEMBxzH zD8L59bI)~|6iquhlB2|-9nON6F-T5~JR}0fpv0;31U%ETmt67buzvl@SZ(fWOWq95 zana-RBF!eb0G=vh8_>Vt(@e=vfVjG+10o=uCQEKOQ&f}~BoiP8(z@6Sp!r%hXv+(z z28h(-GyEg}PqxX3Y)cUay$F2fx0NLhLZp+XiqynRW8R$Zd}Vd}-rzm2_{pcGKMH;9 zuib0XE?~b)p1Nk85GxUwQh!U8_a`bUs?LAYxn|5A#{DAs&kVl!b%KM|%x|-v=vtE2 zmmcfgs+HE9b>R_O$YVuaf7XRx$MfnrS+>mGsKZ~h2R#bCL4PN!H?TJxcjxXbUW9FX zING?+DvfWNO^FGmDruzU4#jxpL1$O2Q!H}?;xv!8QsroF8RD@AK<+k;cT zwxLp36(W=NMQMrP@;-VewNF&6F0Ug-6abdzR7#*XrH&0+d#C!OM1{wS>8+FjMnnYC znGOTaVt%dJdp_YE6t2$fX%2DTm#eD^(h&9l?l7Z=tMtMhjAJb zvP3pbixyAULQ`V~NS>$%W>g5GA|*%Unzn3}JmnKfzef{G^_o8b&Cqa2zgzd#iVz2s z1aC8h#2pr2_x3Xiq?l4(T7^uq?5=ZBctMbcZ~%^=eEo75YDs@&7Bh5Ao~3b#G%qUo zI#Gx6L{cqe!|#|%Z8o+qA_Fdm@~?kzc5gQ^4?ekc7Dv(@iC^wifphcH#dZAh@>Mn$ zdO{)+;CdVKtm+tv83-JZJRaa)haKMh(Mfw%=Ov){rLrb^|8w~MKgovh>&UqvxfA~P zoHm>-j@>1un0DR?8#%Kt=2rJzyt9;N-gA8s+=;vXqp&ep^|g(J5m>w$@x4We*FJKm z-Um?`)FMuRj@8x}dI6DV$3c|0w`*Rs+$0E=xYrjihU#BXCd{~n$K$l|OZdL)tVs0( zZa-I^h_!7Hl}6?aw}0uLGIJsRGSNetHQ~f&b`p&eeU+v-#n2A_iF*xNE?w#M8xDLx z`vp$|>mfwlbf901O&nGvomD7pp!lAO$~;lRbD~8$AupfHIN7CLjOuCVpJaVVgmp_j zinc7T!O?)_wf)vFt46IJoXG5HJEV1RtvmTN)(ijjh5yu#LlwR0D79y(hY6CFs+OPw z>uSIt5&srl0TGn2ey4%N^L8o^Sa>~IWUqq?J_MSYX_t}rf7|tV>0?yGwQ%1@=8|$5 z4GSH(XIQu+U#o^>n|{7b$fHh~J=%$4&}ZsJT&Z3|x-bX5{&m?D{bps^y2_xL&TA04 zzYcJ~WHB7J_NJIs8vetwp*P7!gb|mbrbkW480ApJExR#{*B8N`VFLbd|1sF4Vn9XC zqD#_DBu=vde;()F|49U4lODVX%Ip((vubypN7pbe4_Uz%?8S!uX4nFzJ9TIEM`tLU zF{{CF&q%`Ub*?J zh?^{(^*<*h0al~h6LGx93SeO4I`F6Wd(V@5Mmtxv^PPdu2Ni5gRw}OFhUM#2++Nb( z0sr&+J?h?53l*>E$);+kZ`RT8vZ7j(w9q!BW7w5jP39#eEwa!gwlYsL6S_2hZTwN& zd4b|~c-MG3CwEy5UB!8lO31P!n)MzaX#YG5k)M)QbjJMHg6<_?oOR2;u3DfM)^N;k zzV@7dF4vK_SNysxGl z`h~5jZK6}w-wU;J4*RF?uZqOil*<%Jn`)h0i_qqDrdW7Va+Umjy=z7E2aVLzl{Sm> z61$w#XShZ{*`406;O=0fr2>IP7D@uHweT~NL`b@|L>0-&8IVFU0+?qBc~3QCtkIf7 zYY6UZ_oZvl^u~a~vm#8|>po^z9Q>$zg64Lw80puP5d;{>$6=~rA&K;nhHdb$#5vAbF!k?#u37iwi znO`{LlF@yxBzIP-M2J%Kbx6bgj5`W7LLfzWd`vi-WWB@r_@FWZ1_ywKBpnFXRp9XE zf#MhD3#j;s-zou@ERWy|Gv|pMLq#|6>W8lR@M3o_j;{BQE|sK3M5yt=x{*yc4D8uqHiCeWv+v@UB->d5TJUu9;E(%pY-T zS%jDc-X(7`eIpm&N2)7x8yK&6ivJqXT~PL|V#>XY?h^_M!n6!53UNkPqDq4Fl=V)e z5{+drItnR4EBceeOXd56~Y(hJtZlb29m5>{g#v{${8c0qEo z^CWmmP>ktaqrwTg)I?@Vi@O_p-Tq_GzAB$#$RG zg@2Re^KsPkXn5Hv=vXiFxJv2Hz@a+Ec?3&1Wan&*K&Bn9i}x(XotUsiGh_D#K1w~* zI>_%)JrU{4RYt^ku^OCk)fubwMSWb`<@sW6Z+*$z!BC zBOl=E*ZcVoPL$^KNCE$tMirSF5wP39b3&$Vt!*6RPNS;X!U3D z!`J)l8Q)6k9{ickhXy~air2-w*ix=$U-%MYY+l0tK4@}p;k)dV9r6Bl*+qu52kOVG zGRS+RjPE^R^~3%7B~vvxLsbPEx~Dw}4*-@yVHcl0 zX^ov8ko1qc8Tn&t>Rm!5Uq3g#q1?0EP82#{>i@3JwF(7sb#a}j_~2$ z6Zj?noOlIWV#;)1`P|KyNeX%DC?~N=lj0s!*1j9+tj*uRPCI-8>8r&yAF zkNnV2DDA3tOhCM~BhS9*d)LPLOLXKTN?FSzZBcClR-U|0`yM;wtL{HV>x-Kq!cSKS zTOsPbRQXHa=D+|^Q@{RDQNnBvO zxF0einIzG`>BqsJ4#>#6Q|M9-Z?y2U%e9xWF9gEBT57sMh7kB#oGI8FMOLno`8S;5 zYjgl!=E~&9Nv3o}zd}UFyhbnIb)iuh`}tqYJTDbMCY|M>x{ieQ@Jp1o)Qq-BjuJG8 zOa>45taNs$Tn6X{C-nK3L2QayccHST^LN4z&nwkB^%+@d)$ka2BZLB6C5wYm3I0TS zF9u#}U5BohLa_ZK@m8FH4k-sUMA?VLt~ImiRZbGMJfN;u38VlwHC;L*>BMz9!Z=hq zWS7zb4D)~4BxrZA3)or5Rk4=mZQ)D!j-sG|)v2a_>&{xu|2bIwl-1cU%lx;oV}9~| z6}bpPVLok8>a%ygVb<8%{Cu{11uN>r zeXYuS&t6c{TEB}`%$6VOvl2aVYiUi`fHQQzVmhc-s^fiS@E&*A;gZ%`xs%6F5!%W_ z(E4ilnn;JJOV(e#26H1*MWNQeRJ`~THA|Y+iPi+FBQ@H3`Zs~Hn(Ot?jg>;!$c%zb z`u6Hx0RZC_&iF)KlBycAXYUX*#SZSx6+>jheOZHZj;6z)aMlmOoyf2w>1N08@!7|V zdnS5+G?so0T&bSWEvaKwu{JT`0VvMcLw)27LP#}`d))6c+0GuUJ2YkRHd#P^;rtFt)ep5+0=RiVu7r->wYbHS0qcwAUr z01Hrx`GAsLj|uZT+&>#SkN(kje;y0LXP)ez>F?c(?UTnLxL!`=jj_M(i$12^e-<2oej+_QIu605?V)oYPBn_90LGHWA z&97tiTPw1G4uQ)xJD&?lFII!;HFITVpLh))r2^ews-Vl`IzD;|KyKhm&#>mRk~VuJ z6~yLEYUCa>n7X{T6iXsZCgA=qvwQ-9K)}A;5`Pr{v2ggKC2yaT5=|R@l5eiOshzVz zky5#4=^sa$#TcgA&e51eOdO|*j&2z!*McbBwW!v_fzdEh62iNXD~ z4{0v&`n1YDMErX04)=R zSyLweP&zlfHq(gD4qpRVgdb~mhQ-L(#=8>lA3m!$x~RYLRHRt!S|qU8!x|LCl-;+Qx8FZ7CTlOx233g!yXV9g{I()@G&3iLj_+_(3n^+ zcyGlDs<1~5vko{?B?kI|Fa$PA8iWb#H>c~pGlE+`unI7C+PmAKhs$qNn?YgQ& z9Aa&W<(1__2^ymIg8H_LwK4Lc7pC5NO?P7eSb=7zjrLRs_l5NIuE&susaH_~;328n z-g}-y_NslvZ!xh>Olz2*C7KD%mB-%#itGu0gBv<4=Y2rQu9&<_;xlYU#a2z=;J`EQZ9l zFP@w=gE1RDyH_i`hjL!rMEW}~%Pms7$E4F#*{rko)pms0Ot*z>v6<)rlCvxS zkoua9s%vBNH-k;W)~a}T5QW<*p-Wg0fpuWF#2p9XR4{JSyQEN>M_WN&2N^fzGC{vN z4O3u;Az&rD>%+-gJHHZmIL#$t{K9~l^_p;6&8V0ap9GTsUtFDuJCq9??<=7a&Pkcd zGL_im^v-WHic4I#%?eR3CS`=kt|awDqG0TjD2V@mN3@A3}c_oFq@e> z_qor#&%O6gc%SEe-uL_a{l4GNcl{u@|8SxY%f@Ux1*m7e@NuiQchD->BFdJbrUM)v zqba%lq^tLuFPq}o0F@7VhL%03UM?%jwJxc$tT=XXK*v-u9K4VP$wD_7y7(;7l;A8U z#Sf8($DIUxO1C1P+*9oX3y4tc0X!Ru!<6k;_laEkyZ`^+XI#kH&bvhIx_w-hi~VGq zuv&tF(+lBp%pGUpdkQaetwg{7_LmrLl|0=3?fTUlUshYb`>*+JGV9nwWq$WQOwJ|j zxR`USoVBOJu={H1j-j}h*|Q8M{`$0ovlKhMc=v+|n1&GHg$KNZm}n zPP2sxdf97O*vM9!sANDuWNy(B9eKTnAfg;VN`^JJj7Eggk+}4*i zL$bwmf;kUr<+sewz%cqz&C{G^KP`fEO<&z~31-O}pc$dWsQm_j$9H0b=9)TS;7A8n z&4oMVx%4B9PmO0?q#v9OG=h-t< z^u7AG?`CzJ|I1hYS5Ina_MoE5u}N zQ;TX*g_-rB(J(AnR=1%|zYI6zUU8{trmvu?^L2tI*rGL2p-m5T&wFNQ_9N7x^LW@} zR+&al*MX^p(CDaAwi0s;Js-PwlFpt!p|Q2XRkH!aQ0PD~zq`Pwas9Ot#MLvYAk;$@ z^g)je-8$DwdjUtJf!5_>SI6P5WmDnAS>v+v*DPg^uBDdW7^$viK9g1d|E=Uo&ExP0?kgrY#=K$9IFZluvS$9&m?C;vC?nvjxS*3M&>w$0^r-|C->QTqC{8yj6 zy(V)Ott9OX`RJGSA6Wkto&3cb=m*H{A>wEKoc@`8^4Fz?lk-lt{Z+o;r{Y0)cxTOm znpqNt^Q#)06A};nFz9^AX|1l zm}Ta7kh;Y&OIC#i1ub8B@bwFMP)SM^m1?S5^C;|Wy&1N7MmXWggt z-^5g15EC&2bUmXTG0&#ejO;ej9X_Du@@jvjiH z?UK9yA1q4mJO5X7t{wheOj|2)(!_CeDZHiW(Ns*H4zxpb zsp-hda?JX8!C{i|`wQ9?e_nnK)yqALXkYlJ>PoYh*4P_#b7lQ+C;;u9;TLa&x?iVo zn(&zKZY+tzt#;-uGIk{=FXWLdn>8@bVS-%^{?}Cc3h=WDD!!!sP;o+!TTGh$ZPP&Z z!|(A$g0ngW_L3RF9=g(W{9s*S;>bapGx%uw0aZ&7~x3x}P*vATe^jW=5uXKCGBTD-s#R+?HDhht3IP;x;___38NU3X%Yv`@ha@p@5 z{BQTx{~E3QzZze6et!GL7oUoIs}r0eW*#0{rK18`0=?yWz;!2AWpm{UBsG4 zirXKKBw^j^QMd1p)46}*IQ{ZFLZx4|d5ToYkBY2efj)8z_M`Ix@hToU)es&;4R<_6 z4Ik-cOZ4GiGq!6F0xsaTJG<7>fDpF4s4Z-@9%u&ybxwU}fhIXk4w98m?3rg2uU2ta&IRgW8bEuU zznyCFcY%y31_0g*+IP>OmeSwygl*9jyxO7OINxJ#T0A*@8cSc4y-D}K!91xv4 z9aR-fM_hFK{OH)6Vs6_nz1ojN+_?38Hn$@`4LV5(&A`90)v}`Q!-!wux-o%6jGQmH zoQwhTqm}T~`3}1&D^o4Ztof%|2RGJT)sE%AGqOlHon>~UB)V-pVEEmnraegDLAIz) z5p9OY+Xyl=BCL9spu8^QNFOfMa{KCqnfBca(Rpeht;hboH`iIQS`8_5%YeZPDb`Lt zO}1fl))$=1pc=JnCnXt-s>?@uZ+%d8T|O3T3U=W2J?x=to@F-g(26Fz)FXuYv?uk# z=TQ0MLI00EOtuP`>5NkLCv3;u+jU!hC@ikf6mx0lHw}u zj2+ac9=)+|ciElnWwRkcg-Hhr)j_nIck|!f5^wk2)2sm>zd;}o0>yd6NsM@48Dj3& z(1`x;dW1Hr_sZ%r6Tkd2eX)MxAvtSveDm)Tnz8JyY(QBv=HQ2|LJf0W{?McD$cg_Y z18(MT-24$^KNLZ266&Y}>=xSe!cN}eZiw-n*XtYsw^>8y!eG1pLT$Z3EwT`jzaevJ zF2ny;IfO~Z$>kr-O|kq%_P(>=asx*pLh#n~jARpcrbvC&KiXwws*dQ(_M$i98JqP@8<0&pf<1@bMCmoyp9q&5)dnc#;$6BT@yiAKqb zfM%?uBH+?i(S2IkxYIB$p+WMgI@u0A*Y2^&@N*SpQ%rqq9$7Dlq-=B16KH9et+dwek`co|jD^5)Rr|hc9b5tIy+M=GsnJG4Li+#XnkQ zrDjIRP8bny2DCG!p`-x~n7WZBM4L;7-7>NcJi@o8sLouC)W#`~^?iC5U z$v)^AIlB)VrwB*%=31mm3YGR`K*XFCnmll7Nw{KSd7-K=@Q>Lup{1M%! z+T{QHY7?(3_cUd{#Yy^|_Xlil{|H|EvaRs^Rd%T7j8G-uz!~jT$D%Rh-~Rir1P{F3 zQTqqV(O&T8{6FmnCHtQ)f9HS7a0u(z&*$?CDxbt|>TR2>Tsv0hQ$AUFufN{EFgke+ zl`?9cQew-ZO3Ic2MlG@;v{}7L(?<8_a=@>)tPvZ@L_lwXb4SQH0Q+RBdaa829d{4E znTB)iiYFvqZr5@R*@kzE7)sW+Ld+~lpIs#EpaQcf`qe12#)+B_Zs+-U=;U?5cYX#x z9kht{#F0ZND}$5m4;c@l^*u#T275mjnDPt6bdUKu1{9pmJw?8!=5MI5{q)M?f}o6W z-PTRXU`#tMp@^Wo~@_*`W>I^Eja5ePhd51=}o z3W`XooQbXGa_;mqjp)GE}oW?Ic zEY*Z>bpa2Km*N9WWTUsW#0yiql51p$UbO2_W)dE+)O!;tccF)~H#Z6OhL^;JWrc?O zT)6XQ6FO)RJ#v76xd+MgUxbTiYXmU>Y$LC8i_Hsek|#^c%I4N9mW=Ov)R_Yx8MfQ> zG-f}_)4v2X6y%lwx1wCMVW1xF`L+J>g-+>BhMu0UZ+7HI75ROk3bd@^lSL9$k$k~@5w!^ z1m2Y2M5(Fx!Ee9s`lH7G%V7L}Zk#H%3PRt_+y9JS9xpoiV*i&ax#dF2f6qrdM?D=M z{?>RNa@%F~*4f)Lk6ItMPPE@UaHsa>L!H;NKS&+3_D3K2VrFX0)#$~>;Eal z*UxMGDoAc0kw0p4B9RK0`o;<5_gAl-iu^CCSd`OH>k#3Gk5 z<{Wlr3tix&0YGs&I&yAjNxiEX?2rK}Fyrr0}yiSv0=vd`rJCAf~V15mrB8HeF#g}-7*GFwmU z4XbKKa1wD+_Yvp=_>}SH#J{Am9*XdT(t?-rt2|@D$26e7P__{`VQwJh{2L9%mA}5` z;$$1_)vZ|9CA#LhI_sh8pwSSp-UjC!F$z!Jsrssv|CtQ)AM?mHHxyK2ASDPMvl7ae zAw6c;y*R-l+gHjPqDew*sd2b#9K57cnN|efN?}*w(9JcAIzS%_^h|i$ri4Xt!qN#d z0$IXaxKe4O7+m*(l^NFPizMlzG1e^LRuh6O8{E@rt*G4f-x1HHGcw|c#u(rvK*B|rP1hFGk%rnXVkPn)lpJ~mDHog=^Vlborl z!tmJNwrjVMl{46*E*fTr+7>mA2_U&EVe17rcE(3Pb-`hBlxq7JtDmoBkg8JG(4N!K%FGt|h0FU7?{+3)hZ1*= z`qo6k2wu~4j}&bzg!y}*7VkE(=|~I7aH&0#fi)di8(_F6nMbIB9NXuN!SMdOz{(f4QXXmr5 zQ8zV$qba|1cNw0^`YZ5=cSiBTCvvmH`ZbR$+5VZA#Q!^4~|DYZY99W&WekPBXu zu6w1BBup643SLtZ!b+YRZj5B`Sxhm5{S_x9bl74Ta~_Nyv(PoyBP_mfW3D}>?XO&+ zcLvQEzLgj-riTAU>rx2fqGStuo3$>QoK%oOWRys5iC$&1q`eVIk_*zg5hBfvpZXTK zE@Q96z_K}STm;ivx1s9U(k;k;=4Y~bncs**W;y-?=5sf&g+u{XJ3}G_tF$@r3%EybPiX{Zy^Hj_ zY6#Yd*TX4?6A7U`E%Mk)wg_YF@HQBKA*dOM>^LGRzY=Hvho#$D)fWw>64tqEQQDTB z7SoXi2CF86+a)^bC(Wgk8Zzouq%M3O@(KJ`{Eqx9Q@06O;iB7sWQ*@nsl}uSh7fOva3sr2c5s)GJVYJnek}P zb?Ieyhn?$7G(C+i&(3nA_QB{3+~YCIu|hKRj8Pkrb#R#$(&wv*^H9R+NMvQcRt6Cr z{+=@nS4$SuLC(Q5F?O0=7KegiGK%FecB=EC(cn<%$WYhD3wv6(2NbAk!xOXl#-Jh@ zNx<`zgMY%8WC=)OyEla{OkoZ!-E|HJ)D_#SVvyR%{9^UGTv8%#wx=5;gS%q$wymmk>fmCGA=@dV1{JK z{#@%_0o>lzJbZqJ_iszr{d=`f-m*TGUIOxDl(yH#mNfDhPBRN72i$OB^7)l(6U#5b zxv`TM!PytG>yZM)&!B**l5<^xV_|Mi*)iCndZXoZIL{SEC@!k-8n^gldc;SFo>gi@ z%H%1OA5&1@X|fUf687NJ0gZYms%kIO^zxpa3`#5{Vj`pw)j$|k#;EiZnenx&IU>f=+&Ljy*(SLe zbxY_A({j!z!%|bI9L0aI3$H^R4A+rSOq{v7R&1ZT@wegqp=EcMPto013GHn9Xa{B33 z`K5ZxDTS-I*%w{;1M6y3<}7Y<>3dj0&m*f3=>c$~U10%ATC*6Tc#M&>UqE zfpeg+*6x}+#nEJ?irdR1Zsb9&H&Oh&*TmZ)GtuapCrBX@8SLt^t;+-~=uX=&4qE$Y z#SQXogia?FpuO8CfnC37lOB#+DQMfd){D;zr5y577;oI!Yj{3^S0f2wMvy4ZVau-c z?6KbrawYG1%OVu{)Mk6YaLwv3Xwo2%`yBsH4<-)sEUBCxtE0>`1TX0rYK9@{a*gEg z#_ofZ-s~r%yZqi?sB5#8?su27S4nMU^(po(6r`ybIQc(W{FtWd1g)N~a7$j)!$OeF z?V&!i{a#82br+yhf_TMOUC20)?}B$w-!m8;*Kl(#@yD4bZ||w>+`kvLdspYtrq!@1 zOEe=DqKQEYyq6O_*>{~5mP0}6|91H3KJXX(p(|KmZGCY@3AOxnw2x8#Xk$HC)3e-+qe_XN0qmtuCn`rtC9wt5O*58td=ohK0$;o?rj zkfH>U{bR9)y%KNjVJ&**mE?g1=kwYxX-K>!whdj)uDt(p9Wne$8o_mAiJfUx3WuI& z=ycwdO+WvH1c~QLB7e+9i4YOONhneE;$hu>9PhG$T;AYw*h74JvfXIgb8Vq-w z>b)RRx~buvb+ZnTbsGs*?1d(Bfrrc^1UuA|&lAI&0jskO=WspiYm#u5zLm?QpAfCj$jz-~1+rxJ!W5MzF%K~7?`~qa6aye7Mk;b0==y-~*E+2usm&9(% zl^l~?bOAF=EtSSiCzgi==zrWa6C1i(XE&plM?i+hIxCY2?|zEAl$}8d8jtEr$jX;0XJe8~^ zq~b&E#ht~42p^8`nKAJA7uDhlsFzk^rp+w>YvzU3z+<&nEt_|X^R)<^*T)5$3(73h#?Be9D*dWvmaQuf^LXvwnwWF&J|*~3=C{N@atJL%vpSY%MTf$x2LL&Gt9V{Mu~GYK#=+1b zaU5af#*C`o&*Fy-U092!t>Oy%#PTL^bAqT?G0<<0r z`TeOuXHK)`btL}|A55O?o7F&lJJ;_Xe`?EfKu=8+9%DJ?1QV2}8f<;QX`bBj`B*Xc zA?N}1QfOJgMOmr*y0_8b0IKXqZB3^Opx&?U!I#4D#2`|p*QS+uuc(AsOab7O7=CMS zM&m;4#KVIQK(n{@Whd~;yi1W93>uL2VQN48TQa-Mi%I|;TPY%nMrR0EsAyLdhcm0Y3kMWOelc{bVo zfeu!DuPUc0LTF~LFXZb-{M3DBxZ$pMy6jKah33}>Y{&RVdlx;+HD2I?KSRxcozuy< zj^=pCnes9to(2DuVV$5L8Az94HrC|D)rCc>;@&Ovz9SR=#kd^!`y=H~`7chN-$s0_ z#AYnD{ss?P7N-n9$@xzHt9YaA?d-Ke+CMrm`)$jjGR}XSe*9&ReC^@$yW+M*PxSDP zTU;?`(6e3Uw;GsCk(3#vySp~~g4Py+jM*A-Vs4>E#=M!8o02W`GML)e0%-JK-yZT3 z9FFv-N0~xqViJMSsUX(I90MY@BWXP4O7lQsUXDTpxyMVJlu|E9r2}vby~?s#+#Y2wLMQA$mZ7rZLlY zYByX4Sn>VW`-`{hi6ODyPIHw<7kWzU6L`%5X=w)`{Yd;^Lhr>1O{;dw^t;1UmnODH zuUv4=Q6thWRD~g1&JT5}{0ii3#WnWm*zG4v8#bGLIlM&GytGreM?rozS&52ux|lS$ zaL!sI5|E;(!h(xW>JQ~wf1hbTK%iu1$qkQLXpxhjZ@g!;gH+IE#Typ`#4(vhHWCCf z$oM(3<3V6lhp8la)no0RgmfEtcPgY^lmW-g!(ftrC5dS6O`5|=eC>=)w(TaS^vm3D zn}>t*Q?;$(t;n}WO1VHKrl#%#&f`A{aoiF5Pj`LC$Q84Q2#WqW|KT8w^QF8BTG#O8 z(B`ejR=QiUe;c_AZ?t+|5TI+aIOL zio_+$+^;oP)wd>y*(o8l`QSbGb(F(gQ6|ZOwQn^ z8E=>V&X)uT6DHO&%Y7<_V9Qyv2%m545*`b?H~dUiAMKa=3zaH&O!9J-#+ruYcV@lK zueX;_LN&%D`r^!VbQKZ(>k2PfFx;tT3b~yT?wYdh@^Y1g5fzi7dlYil)X3J}0@cF6Xv1XQ(7NTkm<-feS)i*r*({)krwZgF=|2^R*xW%4;C|QP*zo($ovuNh$ zBI2+61}<_0sFkmub}8H0CCqQ_*s%!tm6@pfZ>^TkieS`DE(z|oQNLPqHtpc*@s6|8 zfPd~Y!an!XE(K72I|%kj)2{xh0tBx3Or zt@QBcWXNg$TS{w2%<(#%_&C4^b~0$8dZN}#@R}+Gkg8p{$s|<*OSI(fgSJ&)B^P<&F<>y1s^e0+(P=HanVGkExn3!G?;v6_>M~mE!M*x5ETw!fPvw z&Ovirqp;C`^orF+sG+T#3n7{)VHIhfH$L{qSWRyn`65x1SrPp+{Z*x3lhttJF`t}} zBtOHN$Yg(Uz0u;awyvRwGgs7r8aGmXCD-o&nHG-ctEdbq3siw!}-h;mYG+4Stt;cL|eZoSGWtNnTzYPhu0 zY8?Hdb*zC~csfzA;OxMO{rjDZgND?4OON_{K#yR#p76TZVzZA(sAq;AEkk+S=a8zC zat>CQk`538`=dk(qnZDk1)yk?CGIM2(Ay*enZ|Ed_AE@zIfBBM180;0Ac!bL+JOJD z8W5YYygFez``1=b*(7vKA7qM5(4W_ZRbKfT^dG!85tn3?3J`BAF}}q|UnD%v9k9Z_ zURCyB*90`>c8{OgxP0(T#CLeb?t(tJ4I`#%WO=ci9nbVADUsh%O9}Sl-IB!p4Z}>; zl1h;a->Y`3ic`%0!A=VsNEw_Njb72Shs@~ubi0zqFSuukb7~{2_uPaNdIm6V648KJ z!yl^}hnuiIB1d5oZqFdx?3jba;`2Fss%Ul~V3|X0oZl2C2+G>^{(7*%+bKGs2lR6{ z#~lhPi)b;-@T*$4-AONa98UX`T4n-aMa)g|q7vLAWx7@qxs;#VGyI2XBR&bLMvl8xr6;3XlxKtKaos4P2DNfjscepG`c9*l4x5ifR5cmB|_%t8Jp3$5zBw)P~eNN~3Z z&E0xO^eU?E0p`07-)l(l@cXaE{F~lI9-YS*BEPz1BR-iRMT;C{o_^xv8LcFmT6p>$%PAEfLB|#Npa}p((D>ZzTLXnSH{pBkuPjV~wqp z3Rd8y(w=gdQdEYyX{6zs?rvJ0b~6l><^2r{v#t;vAb$%nlzkRV2vYXkH|%(21M7*` zX8!&h_)sUh>0JFVKuUo8~-Bo?i5P`1%*vmXc*V>RT;1c z56kZdnyc}<%M<3jae_7>Vj_VwzRcz8UdC+T-S@Kobn~OXOXlTgGNTBA=gkPbQ9qZV zVnvVsMw@=9s4!8{eljb&+<-V0_c*ehR=hKmKQ$5&n ztC7F?Gsa$4pgA3F@TE&Rp^Tr|XMpU|t&h;7xc5N8c^mTxT4|^_$t|FT_64HR*lVYS z5B?6S(R4k3Ip3}SkObr;?!-}*LYA}=ZSQ+(41Q9HGRoI zpcASYn1v1hHMo?>!Xs<>QZz5HHIlk$th<`!?H?S0lEa6b#c9`V4uQ7uEg+CNB9^XW zv4&i+EHop%HqMBmw7+p#;=Y~Q&zVssxTJlACfnN2Z|H-TvBx~Af7l?p^sxdi`AJUL z?`83Q@*M7-!*{Gv_C28M2R(}prM3`ZE!54ye06=UY5;V}bfoMTIl^ZyS)2F_^klD= zA?@{ht2#%(!&!FO`EH`AA)wrjO zEDSK06xiqHb}n*bQ{s0F&qpx@wWS53g~rstV|viecwq%H;I2PdgO3A6Zr*vekk-Ju zd@J?jKe4D+pX1EBhE!FvH!M#IPa+n{NB%9{`RJ^>q6#Kz?*|R+Vb584TZbYxD1w)l zCM%9r$WSTEBRVWB=0&%Cu-BeWD4ivF%6OZJj^o>76rTGy%x%ejXJ1fjk@ZN!Nduo*KU}+- z82`TRgcTRz*#lkAj9K8eMXooGzbR+-M2%i|4(eWA_%djON45GJ^OPW0j56M~oyS$t zdd3n=O)2jypQik|Q30Mu1d3nd>iK%Vv(9s4qk__o5tVI_n&aYwxb{CLD?ZL=9ekwh zMn$|Upr?U?krl7QV#1MCU4E-s)#|K1s{p#@1B1+v`zf+eaS*rp47(Yr8-RaNcY}ws}{4ETb|UP;z}OFr@RGb>a4tC zznQfD&B$s2K}JVl8$|M9>D0uX@#egg(SSS81;Oy*lUP?gFC4n6$7tN0K{&nQ z4xevpB#jp2)QCIHz+tt4n_46$T0ADWdv=kfuuYMFBn4cOZQOP%);jXB)?WO8T^MaF z=OYP=3@zCMa`VWO0jN0c-~SD1@O!l_ATN>wmF>Jg@RAdgds*ck4xO3ik$V$6fxf|( zU7S&qOQbhwGj&VdUnx6&C{a9!F0(i14d0vM0$0<5YQmR=Nt!mV?}@VbeW#(7?Imz= zRQOKSPOcv9qL~}R#vHlFTF}eb15L-i&KqQu`F3tY|IDp_XcnnpIhr4&6;qXZ_a{wB zYenW|3KIs;*aNXG!(%Dv^%q8E~Ji&{=$9jcgEs@9UCQh>{|DRh@rI#t}w ztfFaN-u6vi9;%z*7?XP>7V6G!-fn$${W3DO!w}!9D9@}r9$ls-T}VFV?8)Eu`>Kj& z!=Vp*kKuoIag?WH+Uy}`jgNMf>Zxx%<_A_^#Wi-8)vpaU8=?Z=9t`}a zjlutez)F={k1fF&MPZ?1o?Wswl(HCw-|TY`!C*>>6fuf%LKn`f0aGum>+BYP7}ty- zKLp-I3uuJ?Ek0S@l9E|(6*OXv_$O%7W&|zM=lyIAaCD+OcvhQ=j0R5CHvh9BuvqTpH<@L*fTwTgdF8y%Iy6g5 z>^TNg=}|`G>%)yC<(bv;KIQ#a*$RC02SfA*Gi-$FWUuXtt{S;4>FcU8S-HRUdk|^y z@nCk4i$9hr>!_|a;meM0Jqh)L*7U@w>8jAK8sF%!g4%!pMo10V%LoYFosb;D` zIot902T@@`fBN*0<*7*`m&oTh@O|Sa6)RmqUYWh0c)Aq}tnD?{Pl!PuIwUx}K#U%f z#7SpLPm#f18C_HjcPj7*H~_rG_A(@JHeo-l1uKIYI0Q*RS{3O7=ZqtJ!KPECkz_s5 zkR*e!UP}r?%?*ke+)m-w9j^0~AYAYUXN-yN54?mLl&Ur^qDc6<8+~w{H)Qv>t#_O( z=Q`${-{2ja@^j!h6|*<>>5PLX;d`izry~H3hODDG%LA>96kN$u{f^;?^YH<{k~LO3 zs(3$Q2~FX5+_qT)+dyP``{D8Ry6|aXr^d^t;Bq@?a8pIfM78n;w#S1; zNH&1)&aLRNl=vYE?FO7XElJ_%IZ0vkFHuIB#Ck zXgno_NO)aKxDIv>;N*{Ug4^PM=IMZc;j#y|e*(Iu3?aYR!XjN;D{{o~DykU)SH=CR zxP$1mR%sPRvJxP(aevKj8vT>nQ$1NO?v^K9SK_s`=t(-D$S5Y;UKY!IL8b5i+4cf& z947VYnH)i{D3cO%#kWbdUeelPk2Y)b)cc0-^D-ub+c``K*Evh@sQ8_7t;gT@bI1C^ zQ}+^VAX?)!MF|x~Rn3)MXD~CU`H6Yc(vKBc_Jjgr*yLOL=#XaNa*CkHIk zEnC2PT#57{GnRAyW$ZK$q>als8`QqwnjWtuhIwA(Y_`)P!{FvG_|7j~R@r5xdRhSCRwL2SIOFWCksV{~iLaQJYc=ifGB?DKyd2Nnunxa&vjA z7FooK!X6<8J`f%gops$Gp$zdLIhy)P=0Z+ap;FS|9z(T7p(j_eX`mB5RO)9!Etr*a z-E{d7)Z_Pcj~U%$z0Djr{y;Ht;I3@OxFet|Y4JvRRTq}Oy)O;C2DMMgg>)#CGIcw% z59ZlQAP`qO&h`a88N#LZTc~n}-pI43HGRg+-_89Wfmk$wC@GES(b!r z8#McH6|0=4oSb}2!(JbGq-K5bgYj~$DFzh21v;fStiQlOks)rm>yCtgTJ|T^&Ey(A zYpHko&0h2hhscZ^34E{>XG7>jsfQF?4QOG6(Nmb?bJfGyrWBjzUU8(B? z8DOl=g+&mzabjW89#WZ!?b(i-S<-}aJ{%&(+&ja%SkTWuMchVs21LUqR}f5+l+6)i zgr(`F;X@#hnJYq4&KShGI9M^1(uw@q7E3a6fr#;E*P>n_(X;l18veUhSP|cM4KAeE zrh8mvdXPnlq)aHPgOgy^;8(jo;zq@nwLa=NEoo8Y%dvjEw)i+%<~#eMq%8(GiR^Jp z(MBfR0Ji|8#;WY&UgG~2c9dypcuTWBN?wNzJB1Y_H>|#U4sl_4gL} z>+VI0KgLKO@42s`dIT4WeCDNZ=?)2OmZ?SI*wfSQD)z-qrB9k|O@mFc%fV-P6)#>5 zDF(KHQ04BI6#Y+@8O*a@C2Q7&p95U>qulE2U;B;|npfdXM0PlTHxXdVV11Xg?Blz7 zcoA$Dzs~?T`9CFF*m6zy=b+6g;iHfsK{yn-_9w1BA74wd4g0nAtNlwgtiLAwJlJg9 zM}@~YSY>)`T*3c-N>D_g3t4w4Vj0mfN7dxgeIGFpUoMn&Rc}0+d|1#IYa6ybI-eQW zx-h5MIJ`MKhSWUbolvm!n$gNP70T8vi=Bg7%ZAQ*X*u`C`9~aCc_b$y@gDYNAN$A0 zz09IKA)RPj)@Ou1?#Ds!4NW<-IM8uT8@jGr)k2nrRx44Jc9M9=5kGiC`iogss7$9G zPQV2Ex?aQYV-)4}X3*rW;P1sJ+xnp|D~nn6f0SzOXG&s3>40qR!*(k`qDM@6ylPje zNf_C;+5j%e%Zi9eFKFoR25MMC<88tn=*ghNHl{pdRsGo%OmFj;ed(C)M~LYM*I%L` z*7tTNSrrZz)8W?vUX|U3M-J2;^xje^J)4!1SW;VQwye;roPKJ~s~f%ABTH2`F@H;=_(67tDC9<8L!2 z^PXP~O3LB87QD$Nj;L*^r5D0S>l@};GeA;~FTikQvWmdfu@&Ep@Nl`pe>@q*Z{t;0 zk~vWdfh$ic^fwKUHRe)(+UJV1b3q0x8r!}Q;M+RSv45$;7Ki+@zCh7QIcD3fUuS59 zKh<(K7}cgFmp+dE+0b*nw~D~741$$&dh#p(z}B>ie97SxvnL2tF{nkG1PSq9W zOBp=}1~=re3$3jniRa*Z{slG6JmCGT<&{aJ+Xk1c{XYcV3F)|&8&lwT^a8l9lHHsL zDPI=%KUn>YGq7IhP;J9?pR+D2aL7jRT8Z%#y$g)7(uIxh{54q{`zQ<|>cH|zK+c{~ zXOMux8HM2AQ_^vdn}lVXG7st`z_rgbm9%B%LRb;-FFK=}^u=eYQOy(fCvNT~-Ghcl zpfV?E8Ci+aR2aG^a8X0z3+JeTFyP41FC-o?f*JUWhO4n&%7m3?`!6k$a%B`aFx#%w ztt5g7A0pFT$INzNOPS}UNqAvkQ}4NA+Q@I_Z>n$+x^8>37dZwPv5zI1kb#nQh;t}R z+>gJ97@y-!YTe!!M)K=`s?aZ~98fLrtEJD*bwKKVa0kOFtnOO>`5g@h7k=?I8)#K? zOJNPDQ4Du&?z3^|(DD}9ZLI{m(@msEARy@&(YLuc``%7ZO*=&GIsB4tT=hY1UXqug z-mr31*7AJ&#ZtlO+!7V#%s6A(tu)tLK9hf5Yh~3IncyaFE@m9D4i7eR3tOgG21*>&TPBxpX&Q`)y_=)T(omGxOd3h_ngV1ITHXAwZab%ud62B{U_`HUNIr2!|%tE5p>HJ*Zy`EJJ zubUqFctXWQ(^6we^GI2Yj32s?0D9f7hMOL^6GK_*od@Fifrz5JvuaM9cjjH3Xz>$b zZn?OFidf|=RA>)*0C6K#+74Nhx%IrBFBnl6`hM-|nw6|e-zZQ%3^mT zjZ`u<{4v9fwJXHznufV7ShaONdg_v4%I}G{ULN;->-;u(B$8xs(?GO*rQW`TeS?m1 ziw|q){U0>F`B##Q_rI-KTA5N=k+WsW>21n!2xqWNsZ2c`&&gRzElqKrPywe*%>k9l z3>D4NI!-yy^PD3&;XFWsVF`+cg!tw2to8f@_u_|pubaL1YhTx$sr8C+^G`Ez2E#8P zZchruD#$M#WRNdB+%~!bG*0erbkojtF#4WTXymz-@8<*1q~TnJv|#7 z5Q%<+|5N6G+6!r7N{iDJvBTjfEbo1(*?61$OU{;^E_>Kly#0|I+}%Gz>O2&@4Wkz? z5<^N+^kG>c?Y_L4roGVz*p(oSc7AGwi^AcX{$Gt#IT7zWtZDBZ{aQmB*ZwQX zYX9|mELc(t*aL9tAlMz$)NyhZ$z#143xmI?EqE8cV#Fge418^bWNJBrkKEoKc2u2N|iQmLraPR)0YC2PB?z)JDmt#V~9CEGVtuc!L0Y zY%%lFK5r@uGq~LYf>wfa3~g0@`FEn{sy)U6N3PFYBl1B}6@9_Jo1Y)M#0^`vbyq&+ zH%;FzH-x*Mw!YDaPr3PAJwjWR()Wg4ubrxHvK|_MyyUh2s@5OD! z3{XhxFnc5SwXHeP*%c`fIejQTUTm#X7Q1U;4q;D4=d8`eS_l7+i%v$M#`hm9sM@l{ z*5a_pjO zHaZSX{Ci*7svrJLZEx${E`)8zIsOQ7OIzy73H&k`LJM?pRztu*{(tA6WwwwMWYqbBG6HO=$Jxg)5LnJ|gr(&3u)}du0 zFqcpX-{>v(GwAky)6lyeGp87OJm52qw&wZEeqH&4?{?02PlC<7Fk=t*-_0}wZp>Je~OGOMy8c58?>(- z3|UwoHsv)l_7D8mecZ{zEN)&2v_Y;^f?%0vyI5V>V@T-E8D7@|le!#boj7*wa*VWu zY{q)6#G|#UO7%gBMXvdhnXOgLwOP~(A;eFRff9DyDZN1fN3DD*>`Jxb(%#fvaIne! zOj`qcZ^_}Oe>UE(d74{C5S{+BzqHm1(gpdpb1ur|Q-8%k>dgLr_fI6+`QB?!+6||m zOVDttTDxlfW@3h1^Y)+NffKVMQ$KR<<#BZSkGEF0Xcpz}ES9p^!wu&eH#u*5DtBMs zMvkE}vV&4`9z#F4{JuGpGT4J>QFl@d4K;4{+{)q$$^PD&TMqg~2*a3GV36+Wrc;dUss?W-_k5Gt#n^ z=%U+)l*OQsfj(YSZPfCpM?z7%`@{W#?{w!s)bwA4?%JKVOlt{^@;l!c^DFl#WX<>T z_+uvC@qhE7EYeo>PVn9Yca33JGFl7o8?xrGKIm?~!bN(aOI4^Xd0-8<@2W=-y*6=w z`DIR;VMz7cRh6WGbFj#&5Oi%l>Lgs((UtC=c~#<$0_v zotw!nzZA3gpgeiTDM&qOW-g&<{FOJZW^h6szP59MGK=R0p+idzvydV=B$ph@F^Fk#rr(07-_R zM>YM>N9gRYin5Ju5>N>9f2+F2{d@&WpA$E@ZPg`yJ6DJmU-W$JVP&Cw#M#@bO_vLc2u2Q)w|(wB zu&8nO61lG5aQ(A1j9Kb;`XVx2uco`X?gX%%We#$j^G}MCbn9}4pkF-wDO^lKOf zZxnvg-rtA6cA~P59MlY6MScb5Cd{yVfGs2o;1W62(r8EDq(C(|ow~I2fc))!~|#V?wE>)x+t@Hqm9K9;8%rdL&!y z*AkX!ILOgiNW~ zabGX;C50kC*u(b;vLN(2-sp4INLxYa}5JdF?P*OU9<*`(^qD|oCT)zih zFH0oZn$H(gzhqs0A~DkkQyQDA)UK4FHD2-`-p(LsxU}&{fqrGp()iR^_&-TAPrj-` zmUF?c)?aimPtQZviqiZFJ)br6Y9w{!7Y9P(C z&Z*0W67Re!X$${r$5GuB!ZG%{i$KS0+1nY7#-VyO3!&{P-Jp2B0xdJ3`^G7DtySf@ zR=83z`}uJ=f+7xT|1~MI`uxVu`A*BzSXEr$d3k4G z1reT-<~!N0pcZl0ZxcEA%E#LcHVBSDh`*HBXQ^P;qKC3fDFSAvM(&{XB?;679r~AM zgh-`_!UfW|w z4jR}wBpzKT0+`*cB|Z2lPL%tP^;U5%w{ZIe+i75e9uy98W@RIJ zN^lR?aZ&b4f%uQ~Mn{eipL1KZgG7+MK*}D$A}c~Xt4&33nG<|;^dNLm?#Wi(QRA=@ zD+Th+u(FF0YxhBXdYToNT7pZSYRFH{vPRyrB5pOVO8us4Ly_5T=oj*Oy>gui#2-xe zpZUTlA8yRW70z926Ig(1)OWf7@(yj9^mg>8PHmb+&7n37oZx7iLOkNP8AuS~i~)3z zl0iYX&}jofIHq5mY$D~x?!M~nQbz?!!lI>!1`(XjI_QcuDkW%c5CB`5@=y8{uh;|Q zAGI>x<+le%d3Ph0653U#_H2HrQ!zS6y9ce8B4!`FvmCgWeiVP>&i3CyT5*>;uE2QT zugDUi_SbL!Jy}p$R#v)8$#Rcij*BoiM0i{wOj)wi=EZx#aUUh~S~6qO#^~F(bQRaK zWPDoFSCiW4Meq#bKplP;2R-fRWdaD-n#;aD7c9i8{E(jj^I`W~$&x(s;lXxCAKys#^SHzETtzZ-bpbX`dbCq8%g4KI#u4ljNw4!AF<`;6S?tcBpG zM5STf{_h!Yn%67bMtH64*Fz;g(yH8sDm`**MD^CoD$@LPeM`@z$$-#|!s{KmoZ0B< z@3wm0-%C}hr6-I1m}UhJ8RTzp4o19HqV&V#;0o)WG}|_NHTij@qsWsVNwCe1!Sl_* zk8Q?aI@a5(QjE&}G-&uML?GwMjKSac3=Et_x>eU_lrc&5VXzaZ#U3Bn9}adIUL`oGTQB)9Eu5C?`rFWOzcjotxX?T;<;RD5r@9c<$BI)hYXyBa{`;2H)nyer!}qNP?5oC=qzbn_tffcEFVHjT#{KT^rj@nACB6 zPVW5Ebk5JXvv}yPNf_*v25i={fao-q_>KjlsRzYLv>R^O9yb|%yqUprIMh53$Ziu@ zX-puWw6hpDt2QZx)#19=59tfshMT+d^=oA}z87!seyQ^X3TJ)bgi2`DlG5kSt(Cc;1d7a%D7y!@2&{3Y1V(W;3(l$r11H1EgwB z!nX%5yd~q7n;^N|Z9>a4U7b++ZI{52leh$@Kr?_*zGA8+!D$<|0sBJ?TvDk+KtP^5p@{(c1lLExO&7uDNUn|Y>~@xwUNIKB^RhQva6p_XYYfa z_(TJaT0KyJ^#0Zak@S0UUAx{?VKbin-qJU6LlwhFV+)^dV#(6uNw=}fp5%SJ*= z71d=S=Ax6XnFRCFgJg>ATb1r@nCC>OmIXu!hdj**hw2UA=G}Gj!z#T!Mzy+)3iQIG$-tD z6PTOCtA4+FdNX!~YANQsVRlI`<`%+B=h$tfmZKNt^1)Y+*jk`bndt*1D(0E2r*T(s z7=wWdz)?(oAK@l3{wC2n`;@ekmUPa&CXS`*-lX*8K%a*}&8vI2^|;rNN-WQvD2b#v zWB$;ILh3WZLYe?ex%- z>M0m+`)-0Jp*A3JP*j@x9P;;O)phPpP$Um;Xt1x#ps-n18+DhutMJyP-E+=(SlW4u5|Jb@%KHdYOUedFc^GC_=gv% zwBh)OxQcR{Qa@iUwx~<&Yz0>H-=Ij5UML|=Y6fWjq8#~kUZHWVV91-waYV4H-K5&b zo_}JZg&-y73Tajy<)rV$oDWhJlsV1lF&ke$b?U-f-blk3qmcc%1GZmd{{+$glu!p+ zVVSkjOOwWzGZkUIC5Z(@GO!ib|97x0i^6cq9yVjxy+AA~8h%7^clLUh>w0YWtjqV6 ziR?P--u7=6B$7cwqO7!AJlv>lw!L367dacs|0xST?-4a)lJT}3H3e<*uQ8EaQ*2L# z_dW5ElHl{#HI@dx#Ax0hxB`RJZrA0B&>2|tZCuQ506is=LEpJ=|U9m4>x zog2gy10AlAtVs&`1`seV=`6o!SsLX&9lBo#7^t$$l7WV&XoMimFKn%*>kSm*3&GeI z5~*pN_Bwg#nx2=fH+enyn=t3iuVtlf9u^sZgR80YHbZ?Y_^gma2L;W2RvXGmseILf7x6M1SrbLA=rbJ8CdlDEaSFSVXDH( z%_ZaZFE`isxc^Ew6?&J^pt`*9510`Y%27z}Rm<2?ZM{`a^=z*g;AqF651nq<)L44e zUQwC#VozqD_Ln{?0MSY1bb5IE;O>b6{X`#)h!d0Ihynot27g@9+20$>pAa8s9V;H~ zU`eI&nU#2vQ^e5dYi%n7UxhPmjd*vQxF$s8CJ6kAmA`63F4As#2d-QJmEaOeA<#fB zdP2<8{&Pwhx>NXo`uPkYDk&+AvwllVa?)z9PNUPCS z5U+)W2hF?>yY{xd4|!<(^W?AVfvYqWBvc?d}We)>?llO8f7IC7}IP(?d3^0rJb?B9PowvryZD(mV%d-y%~-|tyU zESO|;>)YB{&{T1}(Fv@Z9#G1ixvk7--s4TWe)~@$M{zKuUf$`zux&I95|mwX&>L!2 z|C0${*sak0#sK3cpuLuXK@HSaUzfYf4} z^G^KRolJyD8_GVFwbQ*Y9JOz8$vc>zo^=se2Y;p z_8;aZsXBWdOc=E0>`&8H*MPc_2R3o8%KsPyN=3VHBb?Oy`Z_##0u9wl>oF2KUagp` z&D#8ev+MP>**eieI8#7JY9m2_=Q-~Z8e)n=C);eHgi8Kt|>a;HnI?wgo9a^)N*;P?X1(gW#*i{8Cj8r3ND0BOjq?ueL5Q9>@w%O?Oo2I+L5>Viq?uY6jeK@qB zBvS$I(J>2*{@R$Zqwp0d)EgVrS|zC!bM~~8Xj;mhOXH_xa;V2q>c9ietgy6`0g2UZ zW;-XawQW4Ho`3kYxRgkz979FhX}zJkCA-v-rcgJNujO$h;q_H}*%A@2x_!DyH(nE? zjWH2!031sAE!24~_~R}G@Z0};t+P+VKp&))l{zwBOHo!(YCmaQ83!0RW5?(cEMLVY zeb25;Jm~4C88Sj1=_ig}Ks`IGLkg;RG@wr@e2}N9&?l}SdGT;p&ViCj;0t=~;GbWH zGTyWYyQf6Rm!(#YY#QAOy|;VXr|)D1WpPfB08ZG^lp{DK6cqCz(GaT2q7kIN?=*H( zU*EurMy>N1drP_E;bKRWYo5C15@bGaK2d2=uOIOBP8-q#LWbn?Oq5{+ekDP|@625B zr~dY&crdlp8#P`k>py)9IN{LPAR`MIUf1CNc%xMhf)gIs21{%2%O7;ZfTBUBk9Zj( z0uU2NRg&v5LQU49D1`;>n2d5Xt14q`Pw{|`f&ZJ91~pg((xCdoO^!FsbjzhI0<~CA zcucC%V_&^IXaC{G7m~V?KQ;17`;~El)Q&!q`KajJ*5C8!z_yumtqJSH-EP~4CEkPO zCspk!zL|!E0k55jiHEzxo%&g9{bqXPkd^2D->|*41h>2Ma>8kGX|3Ovbh4ZY_X)w; z$0eCVAE|eOJP%&Bx;x(%2?V|V$&YQ!tgNhKJ+?9Awy?%4k)sE#gBr&6VWdEQas7|1 zw6hLYpX$$(TID+cx@Pa%!!4}GptSWh2Dq{0ZN-xN3T|xaSCOpse%Av;!pkF+wW4SO zaL|+}azWD*Qqe& zSUYyNdu44M>k@P*3p+~WnM~leRxRZ?LAm(wgm#+m?6#M_LQTt0D>!f9`bCVA z!K5de3dEX#6PH&LOvSgR7u1az-a4VvkV0@k0qLsfb*#@GU6S6P(2|J*T-gh`$D~Tx zvOlpRA3h!Z1Knvsd^b`-O)c-SRQMe4+pc7L@~uJT>LszuxT3P2!)}^}LY4PE*^)m{ z>Qfa1sv`**`g_hPp;0LW?An=T$Zg+&{(ic0LRK368=>xIapOmMnD$|BYTns>W|bvS zfV7X7Q>f|oVLcuhLl~JDWqVLxh2*7Nl9NaFsLJJj+DMXUVRx$_SSL~?uPaFzGm-hE z5=$tDoTvc<$~dfn`aLwE=ahaue8~7{apc5)>VlZaozrfylQca$F&QI;xVU~3MsAcjmhaaVTm}cc23zq9G%M@-BHb$6iDJvo5OSqW`LR?%l-J>uG`LM=FXe-t78HFR zXV7>#4#YC|6C4MJrOm)ngMQr}a}1hnX=;XeR$nDT4R?-`2m5SJ_mfNYUCfA= zYkp-E@9T}HEKAJ%0BNmN#XN3)dyMyHSETH3QqAmX!;S5+rop1?Jpo30G|`?OwS*mR ztKG&*R*3ELvEz|=i$+!r8p38bzmZ4u5gQ+AHoi4V3=2HdTAdbO{Q6lD#p2#3(>bSK zzBrGdzfTq=mZ{MDtYp(EWAybM`T)7{Y8;Wr%y>&s+onE`ng)lz58ZCS2*cNIo8nxL z;X$mwy(r!$oKet25wDRS;q6I=HF$=3Wj^v|*`kTd6SPM;srLf