noderb 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ext/noderb_extension/libuv/AUTHORS +11 -1
- data/ext/noderb_extension/libuv/LICENSE +0 -8
- data/ext/noderb_extension/libuv/Makefile +5 -5
- data/ext/noderb_extension/libuv/README +11 -6
- data/ext/noderb_extension/libuv/common.gypi +158 -7
- data/ext/noderb_extension/libuv/config-unix.mk +34 -26
- data/ext/noderb_extension/libuv/gyp_uv +22 -4
- data/ext/noderb_extension/libuv/include/{eio.h → uv-private/eio.h} +2 -2
- data/ext/noderb_extension/libuv/include/{uv-unix.h → uv-private/uv-unix.h} +40 -0
- data/ext/noderb_extension/libuv/include/{uv-win.h → uv-private/uv-win.h} +96 -14
- data/ext/noderb_extension/libuv/include/uv.h +508 -83
- data/ext/noderb_extension/libuv/src/unix/cares.c +185 -0
- data/ext/noderb_extension/libuv/src/unix/core.c +828 -0
- data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_darwin.h +4 -0
- data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_linux.h +5 -15
- data/ext/noderb_extension/libuv/src/{eio → unix/eio}/eio.c +23 -2
- data/ext/noderb_extension/libuv/src/unix/error.c +102 -0
- data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_linux.h +26 -15
- data/ext/noderb_extension/libuv/src/unix/fs.c +562 -0
- data/ext/noderb_extension/libuv/src/unix/internal.h +75 -0
- data/ext/noderb_extension/libuv/src/unix/pipe.c +282 -0
- data/ext/noderb_extension/libuv/src/unix/process.c +287 -0
- data/ext/noderb_extension/libuv/src/unix/stream.c +727 -0
- data/ext/noderb_extension/libuv/src/unix/tcp.c +226 -0
- data/ext/noderb_extension/libuv/src/unix/udp.c +524 -0
- data/ext/noderb_extension/libuv/src/{uv-eio.c → unix/uv-eio.c} +48 -27
- data/ext/noderb_extension/libuv/src/{uv-eio.h → unix/uv-eio.h} +1 -1
- data/ext/noderb_extension/libuv/src/uv-common.c +24 -14
- data/ext/noderb_extension/libuv/src/uv-common.h +12 -7
- data/ext/noderb_extension/libuv/src/win/async.c +14 -16
- data/ext/noderb_extension/libuv/src/win/cares.c +64 -79
- data/ext/noderb_extension/libuv/src/win/core.c +105 -53
- data/ext/noderb_extension/libuv/src/win/error.c +23 -13
- data/ext/noderb_extension/libuv/src/win/fs.c +807 -0
- data/ext/noderb_extension/libuv/src/win/getaddrinfo.c +61 -41
- data/ext/noderb_extension/libuv/src/win/handle.c +56 -30
- data/ext/noderb_extension/libuv/src/win/internal.h +134 -95
- data/ext/noderb_extension/libuv/src/win/loop-watcher.c +21 -18
- data/ext/noderb_extension/libuv/src/win/pipe.c +313 -158
- data/ext/noderb_extension/libuv/src/win/process.c +117 -131
- data/ext/noderb_extension/libuv/src/win/req.c +55 -31
- data/ext/noderb_extension/libuv/src/win/stdio.c +5 -5
- data/ext/noderb_extension/libuv/src/win/stream.c +19 -14
- data/ext/noderb_extension/libuv/src/win/tcp.c +278 -336
- data/ext/noderb_extension/libuv/src/win/threadpool.c +73 -0
- data/ext/noderb_extension/libuv/src/win/timer.c +44 -37
- data/ext/noderb_extension/libuv/src/win/udp.c +592 -0
- data/ext/noderb_extension/libuv/src/win/util.c +20 -6
- data/ext/noderb_extension/libuv/src/win/winapi.c +23 -6
- data/ext/noderb_extension/libuv/src/win/winapi.h +4206 -0
- data/ext/noderb_extension/libuv/src/win/winsock.c +270 -0
- data/ext/noderb_extension/libuv/src/win/winsock.h +134 -0
- data/ext/noderb_extension/libuv/test/benchmark-ares.c +10 -6
- data/ext/noderb_extension/libuv/test/benchmark-getaddrinfo.c +10 -7
- data/ext/noderb_extension/libuv/test/benchmark-list.h +21 -0
- data/ext/noderb_extension/libuv/test/benchmark-ping-pongs.c +11 -7
- data/ext/noderb_extension/libuv/test/benchmark-pound.c +147 -58
- data/ext/noderb_extension/libuv/test/benchmark-pump.c +29 -23
- data/ext/noderb_extension/libuv/test/benchmark-spawn.c +13 -10
- data/ext/noderb_extension/libuv/test/benchmark-udp-packet-storm.c +250 -0
- data/ext/noderb_extension/libuv/test/dns-server.c +11 -6
- data/ext/noderb_extension/libuv/test/echo-server.c +30 -22
- data/ext/noderb_extension/libuv/test/test-async.c +3 -3
- data/ext/noderb_extension/libuv/test/test-callback-stack.c +6 -6
- data/ext/noderb_extension/libuv/test/test-connection-fail.c +6 -5
- data/ext/noderb_extension/libuv/test/test-delayed-accept.c +13 -13
- data/ext/noderb_extension/libuv/test/test-fs.c +715 -0
- data/ext/noderb_extension/libuv/test/test-getaddrinfo.c +11 -8
- data/ext/noderb_extension/libuv/test/test-gethostbyname.c +8 -9
- data/ext/noderb_extension/libuv/test/test-getsockname.c +142 -16
- data/ext/noderb_extension/libuv/test/test-idle.c +4 -3
- data/ext/noderb_extension/libuv/test/test-list.h +29 -2
- data/ext/noderb_extension/libuv/test/test-loop-handles.c +9 -8
- data/ext/noderb_extension/libuv/test/test-ping-pong.c +9 -9
- data/ext/noderb_extension/libuv/test/test-pipe-bind-error.c +18 -14
- data/ext/noderb_extension/libuv/test/test-ref.c +17 -16
- data/ext/noderb_extension/libuv/test/test-shutdown-eof.c +5 -5
- data/ext/noderb_extension/libuv/test/test-spawn.c +17 -17
- data/ext/noderb_extension/libuv/test/test-tcp-bind-error.c +24 -18
- data/ext/noderb_extension/libuv/test/test-tcp-bind6-error.c +19 -14
- data/ext/noderb_extension/libuv/test/test-tcp-writealot.c +6 -5
- data/ext/noderb_extension/libuv/test/test-threadpool.c +59 -0
- data/ext/noderb_extension/libuv/test/test-timer-again.c +15 -12
- data/ext/noderb_extension/libuv/test/test-timer.c +8 -8
- data/ext/noderb_extension/libuv/test/test-udp-dgram-too-big.c +88 -0
- data/ext/noderb_extension/libuv/test/test-udp-ipv6.c +158 -0
- data/ext/noderb_extension/libuv/test/test-udp-send-and-recv.c +210 -0
- data/ext/noderb_extension/libuv/{all.gyp → uv.gyp} +75 -77
- data/ext/noderb_extension/libuv/vcbuild.bat +93 -0
- data/ext/noderb_extension/noderb.c +13 -0
- data/ext/noderb_extension/noderb_common.h +2 -1
- data/ext/noderb_extension/noderb_defer.c +54 -0
- data/ext/noderb_extension/noderb_defer.h +15 -0
- data/ext/noderb_extension/noderb_dns.c +1 -1
- data/ext/noderb_extension/noderb_fs.c +277 -0
- data/ext/noderb_extension/noderb_fs.h +27 -0
- data/ext/noderb_extension/noderb_process.c +5 -5
- data/ext/noderb_extension/noderb_tcp.c +10 -6
- data/ext/noderb_extension/noderb_timers.c +1 -1
- data/ext/noderb_extension/noderb_tools.c +42 -8
- data/ext/noderb_extension/noderb_tools.h +3 -1
- data/lib/noderb/defer.rb +25 -0
- data/lib/noderb/file.rb +119 -0
- data/lib/noderb/fs.rb +72 -0
- data/lib/noderb/version.rb +1 -1
- data/lib/noderb.rb +8 -0
- metadata +102 -266
- data/ext/noderb_extension/libuv/BSDmakefile +0 -2
- data/ext/noderb_extension/libuv/create-msvs-files.bat +0 -21
- data/ext/noderb_extension/libuv/deps/pthread-win32/ANNOUNCE +0 -482
- data/ext/noderb_extension/libuv/deps/pthread-win32/BUGS +0 -141
- data/ext/noderb_extension/libuv/deps/pthread-win32/Bmakefile +0 -268
- data/ext/noderb_extension/libuv/deps/pthread-win32/CONTRIBUTORS +0 -140
- data/ext/noderb_extension/libuv/deps/pthread-win32/COPYING +0 -150
- data/ext/noderb_extension/libuv/deps/pthread-win32/COPYING.LIB +0 -504
- data/ext/noderb_extension/libuv/deps/pthread-win32/ChangeLog +0 -5194
- data/ext/noderb_extension/libuv/deps/pthread-win32/FAQ +0 -451
- data/ext/noderb_extension/libuv/deps/pthread-win32/GNUmakefile +0 -593
- data/ext/noderb_extension/libuv/deps/pthread-win32/MAINTAINERS +0 -4
- data/ext/noderb_extension/libuv/deps/pthread-win32/Makefile +0 -516
- data/ext/noderb_extension/libuv/deps/pthread-win32/NEWS +0 -1245
- data/ext/noderb_extension/libuv/deps/pthread-win32/Nmakefile +0 -24
- data/ext/noderb_extension/libuv/deps/pthread-win32/Nmakefile.tests +0 -260
- data/ext/noderb_extension/libuv/deps/pthread-win32/PROGRESS +0 -4
- data/ext/noderb_extension/libuv/deps/pthread-win32/README +0 -601
- data/ext/noderb_extension/libuv/deps/pthread-win32/README.Borland +0 -57
- data/ext/noderb_extension/libuv/deps/pthread-win32/README.CV +0 -3036
- data/ext/noderb_extension/libuv/deps/pthread-win32/README.NONPORTABLE +0 -783
- data/ext/noderb_extension/libuv/deps/pthread-win32/README.Watcom +0 -62
- data/ext/noderb_extension/libuv/deps/pthread-win32/README.WinCE +0 -6
- data/ext/noderb_extension/libuv/deps/pthread-win32/TODO +0 -7
- data/ext/noderb_extension/libuv/deps/pthread-win32/WinCE-PORT +0 -222
- data/ext/noderb_extension/libuv/deps/pthread-win32/attr.c +0 -53
- data/ext/noderb_extension/libuv/deps/pthread-win32/autostatic.c +0 -69
- data/ext/noderb_extension/libuv/deps/pthread-win32/barrier.c +0 -47
- data/ext/noderb_extension/libuv/deps/pthread-win32/build/all.gyp +0 -207
- data/ext/noderb_extension/libuv/deps/pthread-win32/builddmc.bat +0 -9
- data/ext/noderb_extension/libuv/deps/pthread-win32/cancel.c +0 -44
- data/ext/noderb_extension/libuv/deps/pthread-win32/cleanup.c +0 -148
- data/ext/noderb_extension/libuv/deps/pthread-win32/condvar.c +0 -50
- data/ext/noderb_extension/libuv/deps/pthread-win32/config.h +0 -153
- data/ext/noderb_extension/libuv/deps/pthread-win32/context.h +0 -74
- data/ext/noderb_extension/libuv/deps/pthread-win32/create.c +0 -308
- data/ext/noderb_extension/libuv/deps/pthread-win32/dll.c +0 -92
- data/ext/noderb_extension/libuv/deps/pthread-win32/errno.c +0 -94
- data/ext/noderb_extension/libuv/deps/pthread-win32/exit.c +0 -44
- data/ext/noderb_extension/libuv/deps/pthread-win32/fork.c +0 -39
- data/ext/noderb_extension/libuv/deps/pthread-win32/global.c +0 -107
- data/ext/noderb_extension/libuv/deps/pthread-win32/implement.h +0 -944
- data/ext/noderb_extension/libuv/deps/pthread-win32/misc.c +0 -50
- data/ext/noderb_extension/libuv/deps/pthread-win32/mutex.c +0 -62
- data/ext/noderb_extension/libuv/deps/pthread-win32/need_errno.h +0 -145
- data/ext/noderb_extension/libuv/deps/pthread-win32/nonportable.c +0 -47
- data/ext/noderb_extension/libuv/deps/pthread-win32/private.c +0 -54
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.c +0 -66
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.dsp +0 -142
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.dsw +0 -29
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.h +0 -1368
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_destroy.c +0 -79
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getdetachstate.c +0 -86
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getinheritsched.c +0 -51
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getschedparam.c +0 -52
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getschedpolicy.c +0 -61
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getscope.c +0 -54
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getstackaddr.c +0 -97
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getstacksize.c +0 -100
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_init.c +0 -117
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setdetachstate.c +0 -91
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setinheritsched.c +0 -57
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setschedparam.c +0 -63
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setschedpolicy.c +0 -55
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setscope.c +0 -62
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setstackaddr.c +0 -97
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setstacksize.c +0 -110
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_destroy.c +0 -103
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_init.c +0 -69
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_wait.c +0 -104
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_destroy.c +0 -83
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_getpshared.c +0 -95
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_init.c +0 -85
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_setpshared.c +0 -119
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cancel.c +0 -189
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_destroy.c +0 -253
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_init.c +0 -167
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_signal.c +0 -231
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_wait.c +0 -567
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_destroy.c +0 -86
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_getpshared.c +0 -97
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_init.c +0 -87
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_setpshared.c +0 -117
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_delay_np.c +0 -172
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_detach.c +0 -136
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_equal.c +0 -76
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_exit.c +0 -106
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getconcurrency.c +0 -45
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getschedparam.c +0 -75
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getspecific.c +0 -87
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getunique_np.c +0 -47
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getw32threadhandle_np.c +0 -65
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_join.c +0 -157
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_key_create.c +0 -108
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_key_delete.c +0 -125
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_kill.c +0 -105
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_consistent.c +0 -187
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_destroy.c +0 -148
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_init.c +0 -130
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_lock.c +0 -269
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_timedlock.c +0 -324
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_trylock.c +0 -154
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_unlock.c +0 -175
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_destroy.c +0 -83
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getkind_np.c +0 -44
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getpshared.c +0 -95
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getrobust.c +0 -113
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_gettype.c +0 -56
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_init.c +0 -86
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setkind_np.c +0 -44
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setpshared.c +0 -119
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setrobust.c +0 -119
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_settype.c +0 -143
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_num_processors_np.c +0 -56
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_once.c +0 -79
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_destroy.c +0 -143
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_init.c +0 -109
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_rdlock.c +0 -102
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_timedrdlock.c +0 -109
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_timedwrlock.c +0 -139
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_tryrdlock.c +0 -102
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_trywrlock.c +0 -122
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_unlock.c +0 -93
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_wrlock.c +0 -133
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_destroy.c +0 -84
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_getpshared.c +0 -97
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_init.c +0 -83
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_setpshared.c +0 -120
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_self.c +0 -141
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setcancelstate.c +0 -125
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setcanceltype.c +0 -126
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setconcurrency.c +0 -53
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setschedparam.c +0 -123
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setspecific.c +0 -167
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_destroy.c +0 -111
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_init.c +0 -123
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_lock.c +0 -80
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_trylock.c +0 -77
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_unlock.c +0 -71
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_testcancel.c +0 -103
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_timechange_handler_np.c +0 -108
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_win32_attach_detach_np.c +0 -258
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_MCS_lock.c +0 -278
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_callUserDestroyRoutines.c +0 -232
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_calloc.c +0 -56
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_cond_check_need_init.c +0 -78
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_getprocessors.c +0 -91
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_is_attr.c +0 -47
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_mutex_check_need_init.c +0 -92
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_new.c +0 -94
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_processInitialize.c +0 -92
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_processTerminate.c +0 -105
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_relmillisecs.c +0 -132
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_reuse.c +0 -151
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_rwlock_cancelwrwait.c +0 -50
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_rwlock_check_need_init.c +0 -77
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_semwait.c +0 -135
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_spinlock_check_need_init.c +0 -78
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_threadDestroy.c +0 -79
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_threadStart.c +0 -357
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_throw.c +0 -189
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_timespec.c +0 -83
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_tkAssocCreate.c +0 -118
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_tkAssocDestroy.c +0 -114
- data/ext/noderb_extension/libuv/deps/pthread-win32/rwlock.c +0 -51
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched.c +0 -53
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched.h +0 -183
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched_get_priority_max.c +0 -134
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched_get_priority_min.c +0 -135
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched_getscheduler.c +0 -71
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched_setscheduler.c +0 -83
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched_yield.c +0 -71
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_close.c +0 -58
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_destroy.c +0 -144
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_getvalue.c +0 -110
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_init.c +0 -169
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_open.c +0 -58
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_post.c +0 -128
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_post_multiple.c +0 -142
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_timedwait.c +0 -238
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_trywait.c +0 -117
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_unlink.c +0 -58
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_wait.c +0 -187
- data/ext/noderb_extension/libuv/deps/pthread-win32/semaphore.c +0 -69
- data/ext/noderb_extension/libuv/deps/pthread-win32/semaphore.h +0 -169
- data/ext/noderb_extension/libuv/deps/pthread-win32/signal.c +0 -179
- data/ext/noderb_extension/libuv/deps/pthread-win32/spin.c +0 -46
- data/ext/noderb_extension/libuv/deps/pthread-win32/sync.c +0 -43
- data/ext/noderb_extension/libuv/deps/pthread-win32/tsd.c +0 -44
- data/ext/noderb_extension/libuv/deps/pthread-win32/version.rc +0 -388
- data/ext/noderb_extension/libuv/deps/pthread-win32/w32_CancelableWait.c +0 -161
- data/ext/noderb_extension/libuv/doc/iocp-links.html +0 -574
- data/ext/noderb_extension/libuv/src/uv-unix.c +0 -2421
- data/ext/noderb_extension/libuv/src/win/ntdll.h +0 -130
- /data/ext/noderb_extension/libuv/include/{ev.h → uv-private/ev.h} +0 -0
- /data/ext/noderb_extension/libuv/include/{ngx-queue.h → uv-private/ngx-queue.h} +0 -0
- /data/ext/noderb_extension/libuv/include/{tree.h → uv-private/tree.h} +0 -0
- /data/ext/noderb_extension/libuv/src/{uv-cygwin.c → unix/cygwin.c} +0 -0
- /data/ext/noderb_extension/libuv/src/{uv-darwin.c → unix/darwin.c} +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/Changes +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/LICENSE +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/Makefile.am +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/aclocal.m4 +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/autogen.sh +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config.h.in +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_cygwin.h +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_freebsd.h +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_sunos.h +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/configure.ac +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/demo.c +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/ecb.h +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/eio.3 +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/eio.pod +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/libeio.m4 +0 -0
- /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/xthread.h +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/Changes +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/LICENSE +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/Makefile.am +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/Makefile.in +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/README +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/aclocal.m4 +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/autogen.sh +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config.guess +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config.h.in +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config.sub +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_cygwin.h +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_darwin.h +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_freebsd.h +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_sunos.h +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/configure +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/configure.ac +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/depcomp +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev++.h +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev.3 +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev.c +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev.pod +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_epoll.c +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_kqueue.c +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_poll.c +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_port.c +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_select.c +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_vars.h +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_win32.c +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_wrap.h +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/event.c +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/event.h +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/install-sh +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/libev.m4 +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ltmain.sh +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/missing +0 -0
- /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/mkinstalldirs +0 -0
- /data/ext/noderb_extension/libuv/src/{uv-freebsd.c → unix/freebsd.c} +0 -0
- /data/ext/noderb_extension/libuv/src/{uv-linux.c → unix/linux.c} +0 -0
- /data/ext/noderb_extension/libuv/src/{uv-sunos.c → unix/sunos.c} +0 -0
|
@@ -45,19 +45,16 @@ typedef struct env_var {
|
|
|
45
45
|
uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); \
|
|
46
46
|
} \
|
|
47
47
|
if (!uv_utf8_to_utf16(s, t, size / sizeof(wchar_t))) { \
|
|
48
|
-
uv_set_sys_error(GetLastError()); \
|
|
48
|
+
uv_set_sys_error(loop, GetLastError()); \
|
|
49
49
|
err = -1; \
|
|
50
50
|
goto done; \
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
|
|
54
|
-
static
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
static void uv_process_init(uv_process_t* handle) {
|
|
54
|
+
static void uv_process_init(uv_loop_t* loop, uv_process_t* handle) {
|
|
58
55
|
handle->type = UV_PROCESS;
|
|
56
|
+
handle->loop = loop;
|
|
59
57
|
handle->flags = 0;
|
|
60
|
-
handle->error = uv_ok_;
|
|
61
58
|
handle->exit_cb = NULL;
|
|
62
59
|
handle->pid = 0;
|
|
63
60
|
handle->exit_signal = 0;
|
|
@@ -71,17 +68,17 @@ static void uv_process_init(uv_process_t* handle) {
|
|
|
71
68
|
handle->stdio_pipes[2].server_pipe = NULL;
|
|
72
69
|
handle->stdio_pipes[2].child_pipe = INVALID_HANDLE_VALUE;
|
|
73
70
|
|
|
74
|
-
uv_req_init((uv_req_t*)&handle->exit_req);
|
|
71
|
+
uv_req_init(loop, (uv_req_t*)&handle->exit_req);
|
|
75
72
|
handle->exit_req.type = UV_PROCESS_EXIT;
|
|
76
73
|
handle->exit_req.data = handle;
|
|
77
|
-
uv_req_init((uv_req_t*)&handle->close_req);
|
|
74
|
+
uv_req_init(loop, (uv_req_t*)&handle->close_req);
|
|
78
75
|
handle->close_req.type = UV_PROCESS_CLOSE;
|
|
79
76
|
handle->close_req.data = handle;
|
|
80
77
|
|
|
81
|
-
|
|
82
|
-
|
|
78
|
+
loop->counters.handle_init++;
|
|
79
|
+
loop->counters.process_init++;
|
|
83
80
|
|
|
84
|
-
uv_ref();
|
|
81
|
+
uv_ref(loop);
|
|
85
82
|
}
|
|
86
83
|
|
|
87
84
|
|
|
@@ -126,8 +123,8 @@ static wchar_t* search_path_join_test(const wchar_t* dir,
|
|
|
126
123
|
}
|
|
127
124
|
|
|
128
125
|
/* Allocate buffer for output */
|
|
129
|
-
result = result_pos =
|
|
130
|
-
(
|
|
126
|
+
result = result_pos = (wchar_t*)malloc(sizeof(wchar_t) *
|
|
127
|
+
(cwd_len + 1 + dir_len + 1 + name_len + 1 + ext_len + 1));
|
|
131
128
|
|
|
132
129
|
/* Copy cwd */
|
|
133
130
|
wcsncpy(result_pos, cwd, cwd_len);
|
|
@@ -153,10 +150,14 @@ static wchar_t* search_path_join_test(const wchar_t* dir,
|
|
|
153
150
|
wcsncpy(result_pos, name, name_len);
|
|
154
151
|
result_pos += name_len;
|
|
155
152
|
|
|
156
|
-
/* Copy extension */
|
|
157
153
|
if (ext_len) {
|
|
158
|
-
|
|
159
|
-
result_pos
|
|
154
|
+
/* Add a dot if the filename didn't end with one */
|
|
155
|
+
if (name_len && result_pos[-1] != '.') {
|
|
156
|
+
result_pos[0] = L'.';
|
|
157
|
+
result_pos++;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* Copy extension */
|
|
160
161
|
wcsncpy(result_pos, ext, ext_len);
|
|
161
162
|
result_pos += ext_len;
|
|
162
163
|
}
|
|
@@ -185,54 +186,39 @@ static wchar_t* path_search_walk_ext(const wchar_t *dir,
|
|
|
185
186
|
int name_len,
|
|
186
187
|
wchar_t *cwd,
|
|
187
188
|
int cwd_len,
|
|
188
|
-
const wchar_t *path_ext,
|
|
189
189
|
int name_has_ext) {
|
|
190
|
-
wchar_t* result
|
|
191
|
-
|
|
192
|
-
const wchar_t *ext_start,
|
|
193
|
-
*ext_end = path_ext;
|
|
190
|
+
wchar_t* result;
|
|
194
191
|
|
|
195
|
-
/* If the name itself has a
|
|
192
|
+
/* If the name itself has a nonempty extension, try this extension first */
|
|
196
193
|
if (name_has_ext) {
|
|
197
194
|
result = search_path_join_test(dir, dir_len,
|
|
198
195
|
name, name_len,
|
|
199
196
|
L"", 0,
|
|
200
197
|
cwd, cwd_len);
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
/* Add path_ext extensions and try to find a name that matches */
|
|
204
|
-
while (result == NULL) {
|
|
205
|
-
if (*ext_end == L'\0') {
|
|
206
|
-
break;
|
|
198
|
+
if (result != NULL) {
|
|
199
|
+
return result;
|
|
207
200
|
}
|
|
201
|
+
}
|
|
208
202
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
break;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
/* Skip the dot */
|
|
221
|
-
ext_start++;
|
|
222
|
-
|
|
223
|
-
/* Slice until we found a ; or alternatively a \0 */
|
|
224
|
-
ext_end = wcschr(ext_start, L';');
|
|
225
|
-
if (ext_end == NULL) {
|
|
226
|
-
ext_end = wcschr(ext_start, '\0');
|
|
227
|
-
}
|
|
203
|
+
/* Try .com extension */
|
|
204
|
+
result = search_path_join_test(dir, dir_len,
|
|
205
|
+
name, name_len,
|
|
206
|
+
L"com", 3,
|
|
207
|
+
cwd, cwd_len);
|
|
208
|
+
if (result != NULL) {
|
|
209
|
+
return result;
|
|
210
|
+
}
|
|
228
211
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
212
|
+
/* Try .exe extension */
|
|
213
|
+
result = search_path_join_test(dir, dir_len,
|
|
214
|
+
name, name_len,
|
|
215
|
+
L"exe", 3,
|
|
216
|
+
cwd, cwd_len);
|
|
217
|
+
if (result != NULL) {
|
|
218
|
+
return result;
|
|
233
219
|
}
|
|
234
220
|
|
|
235
|
-
return
|
|
221
|
+
return NULL;
|
|
236
222
|
}
|
|
237
223
|
|
|
238
224
|
|
|
@@ -243,35 +229,28 @@ static wchar_t* path_search_walk_ext(const wchar_t *dir,
|
|
|
243
229
|
*
|
|
244
230
|
* It tries to return an absolute filename.
|
|
245
231
|
*
|
|
246
|
-
* Furthermore, it tries to follow the semantics that cmd.exe
|
|
247
|
-
*
|
|
232
|
+
* Furthermore, it tries to follow the semantics that cmd.exe, with this
|
|
233
|
+
* exception that PATHEXT environment variable isn't used. Since CreateProcess
|
|
234
|
+
* can start only .com and .exe files, only those extensions are tried. This
|
|
235
|
+
* behavior equals that of msvcrt's spawn functions.
|
|
248
236
|
*
|
|
249
237
|
* - Do not search the path if the filename already contains a path (either
|
|
250
238
|
* relative or absolute).
|
|
251
|
-
* (but do use path_ext)
|
|
252
239
|
*
|
|
253
240
|
* - If there's really only a filename, check the current directory for file,
|
|
254
241
|
* then search all path directories.
|
|
255
242
|
*
|
|
256
|
-
* - If filename
|
|
243
|
+
* - If filename specified has *any* extension, search for the file with the
|
|
257
244
|
* specified extension first.
|
|
258
|
-
* (not necessary an executable one or one that appears in path_ext;
|
|
259
|
-
* *but* no extension or just a dot is *not* allowed)
|
|
260
245
|
*
|
|
261
246
|
* - If the literal filename is not found in a directory, try *appending*
|
|
262
|
-
* (not replacing)
|
|
263
|
-
* (an extension consisting of just a dot *may* appear in path_ext;
|
|
264
|
-
* unlike what happens if the specified filename ends with a dot,
|
|
265
|
-
* if path_ext specifies a single dot cmd.exe *does* look for an
|
|
266
|
-
* extension-less file)
|
|
247
|
+
* (not replacing) .com first and then .exe.
|
|
267
248
|
*
|
|
268
249
|
* - The path variable may contain relative paths; relative paths are relative
|
|
269
250
|
* to the cwd.
|
|
270
251
|
*
|
|
271
252
|
* - Directories in path may or may not end with a trailing backslash.
|
|
272
253
|
*
|
|
273
|
-
* - Extensions path_ext portions must always start with a dot.
|
|
274
|
-
*
|
|
275
254
|
* - CMD does not trim leading/trailing whitespace from path/pathex entries
|
|
276
255
|
* nor from the environment variables as a whole.
|
|
277
256
|
*
|
|
@@ -281,13 +260,10 @@ static wchar_t* path_search_walk_ext(const wchar_t *dir,
|
|
|
281
260
|
* continue searching.
|
|
282
261
|
*
|
|
283
262
|
* TODO: correctly interpret UNC paths
|
|
284
|
-
* TODO: check with cmd what should happen when a pathext entry does not start
|
|
285
|
-
* with a dot
|
|
286
263
|
*/
|
|
287
264
|
static wchar_t* search_path(const wchar_t *file,
|
|
288
265
|
wchar_t *cwd,
|
|
289
|
-
const wchar_t *path
|
|
290
|
-
const wchar_t *path_ext) {
|
|
266
|
+
const wchar_t *path) {
|
|
291
267
|
int file_has_dir;
|
|
292
268
|
wchar_t* result = NULL;
|
|
293
269
|
wchar_t *file_name_start;
|
|
@@ -305,7 +281,8 @@ static wchar_t* search_path(const wchar_t *file,
|
|
|
305
281
|
return NULL;
|
|
306
282
|
}
|
|
307
283
|
|
|
308
|
-
/* Find the start of the filename so we can split the directory from the
|
|
284
|
+
/* Find the start of the filename so we can split the directory from the */
|
|
285
|
+
/* name. */
|
|
309
286
|
for (file_name_start = (wchar_t*)file + file_len;
|
|
310
287
|
file_name_start > file
|
|
311
288
|
&& file_name_start[-1] != L'\\'
|
|
@@ -320,12 +297,12 @@ static wchar_t* search_path(const wchar_t *file,
|
|
|
320
297
|
name_has_ext = (dot != NULL && dot[1] != L'\0');
|
|
321
298
|
|
|
322
299
|
if (file_has_dir) {
|
|
323
|
-
/* The file has a path inside, don't use path
|
|
300
|
+
/* The file has a path inside, don't use path */
|
|
324
301
|
result = path_search_walk_ext(
|
|
325
302
|
file, file_name_start - file,
|
|
326
303
|
file_name_start, file_len - (file_name_start - file),
|
|
327
304
|
cwd, cwd_len,
|
|
328
|
-
|
|
305
|
+
name_has_ext);
|
|
329
306
|
|
|
330
307
|
} else {
|
|
331
308
|
const wchar_t *dir_start,
|
|
@@ -335,7 +312,7 @@ static wchar_t* search_path(const wchar_t *file,
|
|
|
335
312
|
result = path_search_walk_ext(L"", 0,
|
|
336
313
|
file, file_len,
|
|
337
314
|
cwd, cwd_len,
|
|
338
|
-
|
|
315
|
+
name_has_ext);
|
|
339
316
|
|
|
340
317
|
while (result == NULL) {
|
|
341
318
|
if (*dir_end == L'\0') {
|
|
@@ -364,7 +341,7 @@ static wchar_t* search_path(const wchar_t *file,
|
|
|
364
341
|
result = path_search_walk_ext(dir_start, dir_end - dir_start,
|
|
365
342
|
file, file_len,
|
|
366
343
|
cwd, cwd_len,
|
|
367
|
-
|
|
344
|
+
name_has_ext);
|
|
368
345
|
}
|
|
369
346
|
}
|
|
370
347
|
|
|
@@ -381,7 +358,7 @@ wchar_t* quote_cmd_arg(const wchar_t *source, wchar_t *target) {
|
|
|
381
358
|
i, quote_hit;
|
|
382
359
|
wchar_t* start;
|
|
383
360
|
|
|
384
|
-
/*
|
|
361
|
+
/*
|
|
385
362
|
* Check if the string must be quoted;
|
|
386
363
|
* if unnecessary, don't do it, it may only confuse older programs.
|
|
387
364
|
*/
|
|
@@ -397,7 +374,7 @@ wchar_t* quote_cmd_arg(const wchar_t *source, wchar_t *target) {
|
|
|
397
374
|
}
|
|
398
375
|
|
|
399
376
|
if (NULL == wcspbrk(source, L"\"\\")) {
|
|
400
|
-
/*
|
|
377
|
+
/*
|
|
401
378
|
* No embedded double quotes or backlashes, so I can just wrap
|
|
402
379
|
* quote marks around the whole thing.
|
|
403
380
|
*/
|
|
@@ -468,7 +445,7 @@ wchar_t* make_program_args(char** args, int verbatim_arguments) {
|
|
|
468
445
|
arg_count++;
|
|
469
446
|
}
|
|
470
447
|
|
|
471
|
-
/* Adjust for potential quotes. Also assume the worst-case scenario
|
|
448
|
+
/* Adjust for potential quotes. Also assume the worst-case scenario
|
|
472
449
|
/* that every character needs escaping, so we need twice as much space. */
|
|
473
450
|
size = size * 2 + arg_count * 2;
|
|
474
451
|
|
|
@@ -511,10 +488,11 @@ error:
|
|
|
511
488
|
* If we learn that people are passing in huge environment blocks
|
|
512
489
|
* then we should probably qsort() the array and then bsearch()
|
|
513
490
|
* to see if it contains this variable. But there are ownership
|
|
514
|
-
* issues associated with that solution; this is the caller's
|
|
491
|
+
* issues associated with that solution; this is the caller's
|
|
515
492
|
* char**, and modifying it is rude.
|
|
516
493
|
*/
|
|
517
|
-
static void check_required_vars_contains_var(env_var_t* required, int size,
|
|
494
|
+
static void check_required_vars_contains_var(env_var_t* required, int size,
|
|
495
|
+
const char* var) {
|
|
518
496
|
int i;
|
|
519
497
|
for (i = 0; i < size; ++i) {
|
|
520
498
|
if (_strnicmp(required[i].narrow, var, required[i].len) == 0) {
|
|
@@ -529,7 +507,7 @@ static void check_required_vars_contains_var(env_var_t* required, int size, cons
|
|
|
529
507
|
* The way windows takes environment variables is different than what C does;
|
|
530
508
|
* Windows wants a contiguous block of null-terminated strings, terminated
|
|
531
509
|
* with an additional null.
|
|
532
|
-
*
|
|
510
|
+
*
|
|
533
511
|
* Windows has a few "essential" environment variables. winsock will fail
|
|
534
512
|
* to initialize if SYSTEMROOT is not defined; some APIs make reference to
|
|
535
513
|
* TEMP. SYSTEMDRIVE is probably also important. We therefore ensure that
|
|
@@ -552,7 +530,9 @@ wchar_t* make_program_env(char** env_block) {
|
|
|
552
530
|
};
|
|
553
531
|
|
|
554
532
|
for (env = env_block; *env; env++) {
|
|
555
|
-
check_required_vars_contains_var(required_vars,
|
|
533
|
+
check_required_vars_contains_var(required_vars,
|
|
534
|
+
COUNTOF(required_vars),
|
|
535
|
+
*env);
|
|
556
536
|
env_len += (uv_utf8_to_utf16(*env, NULL, 0) * sizeof(wchar_t));
|
|
557
537
|
}
|
|
558
538
|
|
|
@@ -588,7 +568,9 @@ wchar_t* make_program_env(char** env_block) {
|
|
|
588
568
|
wcscpy(ptr, required_vars[i].wide);
|
|
589
569
|
ptr += required_vars[i].len - 1;
|
|
590
570
|
*ptr++ = L'=';
|
|
591
|
-
var_size = GetEnvironmentVariableW(required_vars[i].wide,
|
|
571
|
+
var_size = GetEnvironmentVariableW(required_vars[i].wide,
|
|
572
|
+
ptr,
|
|
573
|
+
required_vars[i].value_len);
|
|
592
574
|
if (var_size == 0) {
|
|
593
575
|
uv_fatal_error(GetLastError(), "GetEnvironmentVariableW");
|
|
594
576
|
}
|
|
@@ -607,19 +589,13 @@ wchar_t* make_program_env(char** env_block) {
|
|
|
607
589
|
*/
|
|
608
590
|
static void CALLBACK exit_wait_callback(void* data, BOOLEAN didTimeout) {
|
|
609
591
|
uv_process_t* process = (uv_process_t*)data;
|
|
592
|
+
uv_loop_t* loop = process->loop;
|
|
610
593
|
|
|
611
594
|
assert(didTimeout == FALSE);
|
|
612
595
|
assert(process);
|
|
613
596
|
|
|
614
|
-
memset(&process->exit_req.overlapped, 0, sizeof(process->exit_req.overlapped));
|
|
615
|
-
|
|
616
597
|
/* Post completed */
|
|
617
|
-
|
|
618
|
-
0,
|
|
619
|
-
0,
|
|
620
|
-
&process->exit_req.overlapped)) {
|
|
621
|
-
uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus");
|
|
622
|
-
}
|
|
598
|
+
POST_COMPLETION_FOR_REQ(loop, &process->exit_req);
|
|
623
599
|
}
|
|
624
600
|
|
|
625
601
|
|
|
@@ -629,19 +605,13 @@ static void CALLBACK exit_wait_callback(void* data, BOOLEAN didTimeout) {
|
|
|
629
605
|
*/
|
|
630
606
|
static void CALLBACK close_wait_callback(void* data, BOOLEAN didTimeout) {
|
|
631
607
|
uv_process_t* process = (uv_process_t*)data;
|
|
608
|
+
uv_loop_t* loop = process->loop;
|
|
632
609
|
|
|
633
610
|
assert(didTimeout == FALSE);
|
|
634
611
|
assert(process);
|
|
635
612
|
|
|
636
|
-
memset(&process->close_req.overlapped, 0, sizeof(process->close_req.overlapped));
|
|
637
|
-
|
|
638
613
|
/* Post completed */
|
|
639
|
-
|
|
640
|
-
0,
|
|
641
|
-
0,
|
|
642
|
-
&process->close_req.overlapped)) {
|
|
643
|
-
uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus");
|
|
644
|
-
}
|
|
614
|
+
POST_COMPLETION_FOR_REQ(loop, &process->close_req);
|
|
645
615
|
}
|
|
646
616
|
|
|
647
617
|
|
|
@@ -654,6 +624,7 @@ static DWORD WINAPI spawn_failure(void* data) {
|
|
|
654
624
|
char syscall[] = "CreateProcessW: ";
|
|
655
625
|
char unknown[] = "unknown error\n";
|
|
656
626
|
uv_process_t* process = (uv_process_t*) data;
|
|
627
|
+
uv_loop_t* loop = process->loop;
|
|
657
628
|
HANDLE child_stderr = process->stdio_pipes[2].child_pipe;
|
|
658
629
|
char* buf = NULL;
|
|
659
630
|
DWORD count, written;
|
|
@@ -679,22 +650,15 @@ static DWORD WINAPI spawn_failure(void* data) {
|
|
|
679
650
|
|
|
680
651
|
FlushFileBuffers(child_stderr);
|
|
681
652
|
|
|
682
|
-
memset(&process->exit_req.overlapped, 0, sizeof(process->exit_req.overlapped));
|
|
683
|
-
|
|
684
653
|
/* Post completed */
|
|
685
|
-
|
|
686
|
-
0,
|
|
687
|
-
0,
|
|
688
|
-
&process->exit_req.overlapped)) {
|
|
689
|
-
uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus");
|
|
690
|
-
}
|
|
654
|
+
POST_COMPLETION_FOR_REQ(loop, &process->exit_req);
|
|
691
655
|
|
|
692
656
|
return 0;
|
|
693
657
|
}
|
|
694
658
|
|
|
695
659
|
|
|
696
660
|
/* Called on main thread after a child process has exited. */
|
|
697
|
-
void uv_process_proc_exit(uv_process_t* handle) {
|
|
661
|
+
void uv_process_proc_exit(uv_loop_t* loop, uv_process_t* handle) {
|
|
698
662
|
int i;
|
|
699
663
|
DWORD exit_code;
|
|
700
664
|
|
|
@@ -734,12 +698,12 @@ void uv_process_proc_exit(uv_process_t* handle) {
|
|
|
734
698
|
|
|
735
699
|
|
|
736
700
|
/* Called on main thread after UnregisterWaitEx finishes. */
|
|
737
|
-
void uv_process_proc_close(uv_process_t* handle) {
|
|
738
|
-
uv_want_endgame((uv_handle_t*)handle);
|
|
701
|
+
void uv_process_proc_close(uv_loop_t* loop, uv_process_t* handle) {
|
|
702
|
+
uv_want_endgame(loop, (uv_handle_t*)handle);
|
|
739
703
|
}
|
|
740
704
|
|
|
741
705
|
|
|
742
|
-
void uv_process_endgame(uv_process_t* handle) {
|
|
706
|
+
void uv_process_endgame(uv_loop_t* loop, uv_process_t* handle) {
|
|
743
707
|
if (handle->flags & UV_HANDLE_CLOSING) {
|
|
744
708
|
assert(!(handle->flags & UV_HANDLE_CLOSED));
|
|
745
709
|
handle->flags |= UV_HANDLE_CLOSED;
|
|
@@ -748,12 +712,12 @@ void uv_process_endgame(uv_process_t* handle) {
|
|
|
748
712
|
handle->close_cb((uv_handle_t*)handle);
|
|
749
713
|
}
|
|
750
714
|
|
|
751
|
-
uv_unref();
|
|
715
|
+
uv_unref(loop);
|
|
752
716
|
}
|
|
753
717
|
}
|
|
754
718
|
|
|
755
719
|
|
|
756
|
-
void uv_process_close(uv_process_t* handle) {
|
|
720
|
+
void uv_process_close(uv_loop_t* loop, uv_process_t* handle) {
|
|
757
721
|
if (handle->wait_handle != INVALID_HANDLE_VALUE) {
|
|
758
722
|
handle->close_handle = CreateEvent(NULL, FALSE, FALSE, NULL);
|
|
759
723
|
UnregisterWaitEx(handle->wait_handle, handle->close_handle);
|
|
@@ -763,25 +727,30 @@ void uv_process_close(uv_process_t* handle) {
|
|
|
763
727
|
close_wait_callback, (void*)handle, INFINITE,
|
|
764
728
|
WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE);
|
|
765
729
|
} else {
|
|
766
|
-
uv_want_endgame((uv_handle_t*)handle);
|
|
730
|
+
uv_want_endgame(loop, (uv_handle_t*)handle);
|
|
767
731
|
}
|
|
768
732
|
}
|
|
769
733
|
|
|
770
734
|
|
|
771
|
-
static int uv_create_stdio_pipe_pair(
|
|
735
|
+
static int uv_create_stdio_pipe_pair(uv_loop_t* loop, uv_pipe_t* server_pipe,
|
|
736
|
+
HANDLE* child_pipe, DWORD server_access, DWORD child_access) {
|
|
772
737
|
int err;
|
|
773
738
|
SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };
|
|
774
739
|
char pipe_name[64];
|
|
775
740
|
DWORD mode = PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT;
|
|
776
741
|
|
|
777
742
|
if (server_pipe->type != UV_NAMED_PIPE) {
|
|
778
|
-
uv_set_error(UV_EINVAL, 0);
|
|
743
|
+
uv_set_error(loop, UV_EINVAL, 0);
|
|
779
744
|
err = -1;
|
|
780
745
|
goto done;
|
|
781
746
|
}
|
|
782
747
|
|
|
783
748
|
/* Create server pipe handle. */
|
|
784
|
-
err = uv_stdio_pipe_server(
|
|
749
|
+
err = uv_stdio_pipe_server(loop,
|
|
750
|
+
server_pipe,
|
|
751
|
+
server_access,
|
|
752
|
+
pipe_name,
|
|
753
|
+
sizeof(pipe_name));
|
|
785
754
|
if (err) {
|
|
786
755
|
goto done;
|
|
787
756
|
}
|
|
@@ -796,13 +765,13 @@ static int uv_create_stdio_pipe_pair(uv_pipe_t* server_pipe, HANDLE* child_pipe,
|
|
|
796
765
|
NULL);
|
|
797
766
|
|
|
798
767
|
if (*child_pipe == INVALID_HANDLE_VALUE) {
|
|
799
|
-
uv_set_sys_error(GetLastError());
|
|
768
|
+
uv_set_sys_error(loop, GetLastError());
|
|
800
769
|
err = -1;
|
|
801
770
|
goto done;
|
|
802
771
|
}
|
|
803
772
|
|
|
804
773
|
if (!SetNamedPipeHandleState(*child_pipe, &mode, NULL, NULL)) {
|
|
805
|
-
uv_set_sys_error(GetLastError());
|
|
774
|
+
uv_set_sys_error(loop, GetLastError());
|
|
806
775
|
err = -1;
|
|
807
776
|
goto done;
|
|
808
777
|
}
|
|
@@ -812,7 +781,7 @@ static int uv_create_stdio_pipe_pair(uv_pipe_t* server_pipe, HANDLE* child_pipe,
|
|
|
812
781
|
*/
|
|
813
782
|
if (!ConnectNamedPipe(server_pipe->handle, NULL)) {
|
|
814
783
|
if (GetLastError() != ERROR_PIPE_CONNECTED) {
|
|
815
|
-
uv_set_sys_error(GetLastError());
|
|
784
|
+
uv_set_sys_error(loop, GetLastError());
|
|
816
785
|
err = -1;
|
|
817
786
|
goto done;
|
|
818
787
|
}
|
|
@@ -836,19 +805,22 @@ done:
|
|
|
836
805
|
}
|
|
837
806
|
|
|
838
807
|
|
|
839
|
-
int uv_spawn(uv_process_t* process,
|
|
808
|
+
int uv_spawn(uv_loop_t* loop, uv_process_t* process,
|
|
809
|
+
uv_process_options_t options) {
|
|
840
810
|
int err = 0, i;
|
|
841
811
|
wchar_t* path;
|
|
842
812
|
int size;
|
|
813
|
+
BOOL result;
|
|
843
814
|
wchar_t* application_path, *application, *arguments, *env, *cwd;
|
|
844
815
|
STARTUPINFOW startup;
|
|
845
816
|
PROCESS_INFORMATION info;
|
|
846
817
|
|
|
847
|
-
uv_process_init(process);
|
|
818
|
+
uv_process_init(loop, process);
|
|
848
819
|
|
|
849
820
|
process->exit_cb = options.exit_cb;
|
|
850
821
|
UTF8_TO_UTF16(options.file, application);
|
|
851
|
-
arguments = options.args ? make_program_args(options.args,
|
|
822
|
+
arguments = options.args ? make_program_args(options.args,
|
|
823
|
+
options.windows_verbatim_arguments) : NULL;
|
|
852
824
|
env = options.env ? make_program_env(options.env) : NULL;
|
|
853
825
|
|
|
854
826
|
if (options.cwd) {
|
|
@@ -862,7 +834,7 @@ int uv_spawn(uv_process_t* process, uv_process_options_t options) {
|
|
|
862
834
|
}
|
|
863
835
|
GetCurrentDirectoryW(size, cwd);
|
|
864
836
|
} else {
|
|
865
|
-
uv_set_sys_error(GetLastError());
|
|
837
|
+
uv_set_sys_error(loop, GetLastError());
|
|
866
838
|
err = -1;
|
|
867
839
|
goto done;
|
|
868
840
|
}
|
|
@@ -879,8 +851,7 @@ int uv_spawn(uv_process_t* process, uv_process_options_t options) {
|
|
|
879
851
|
|
|
880
852
|
application_path = search_path(application,
|
|
881
853
|
cwd,
|
|
882
|
-
path
|
|
883
|
-
DEFAULT_PATH_EXT);
|
|
854
|
+
path);
|
|
884
855
|
|
|
885
856
|
if (!application_path) {
|
|
886
857
|
/* CreateProcess will fail, but this allows us to pass this error to */
|
|
@@ -890,7 +861,12 @@ int uv_spawn(uv_process_t* process, uv_process_options_t options) {
|
|
|
890
861
|
|
|
891
862
|
/* Create stdio pipes. */
|
|
892
863
|
if (options.stdin_stream) {
|
|
893
|
-
err = uv_create_stdio_pipe_pair(
|
|
864
|
+
err = uv_create_stdio_pipe_pair(
|
|
865
|
+
loop,
|
|
866
|
+
options.stdin_stream,
|
|
867
|
+
&process->stdio_pipes[0].child_pipe,
|
|
868
|
+
PIPE_ACCESS_OUTBOUND,
|
|
869
|
+
GENERIC_READ | FILE_WRITE_ATTRIBUTES);
|
|
894
870
|
if (err) {
|
|
895
871
|
goto done;
|
|
896
872
|
}
|
|
@@ -899,7 +875,11 @@ int uv_spawn(uv_process_t* process, uv_process_options_t options) {
|
|
|
899
875
|
}
|
|
900
876
|
|
|
901
877
|
if (options.stdout_stream) {
|
|
902
|
-
err = uv_create_stdio_pipe_pair(
|
|
878
|
+
err = uv_create_stdio_pipe_pair(
|
|
879
|
+
loop, options.stdout_stream,
|
|
880
|
+
&process->stdio_pipes[1].child_pipe,
|
|
881
|
+
PIPE_ACCESS_INBOUND,
|
|
882
|
+
GENERIC_WRITE);
|
|
903
883
|
if (err) {
|
|
904
884
|
goto done;
|
|
905
885
|
}
|
|
@@ -908,7 +888,12 @@ int uv_spawn(uv_process_t* process, uv_process_options_t options) {
|
|
|
908
888
|
}
|
|
909
889
|
|
|
910
890
|
if (options.stderr_stream) {
|
|
911
|
-
err = uv_create_stdio_pipe_pair(
|
|
891
|
+
err = uv_create_stdio_pipe_pair(
|
|
892
|
+
loop,
|
|
893
|
+
options.stderr_stream,
|
|
894
|
+
&process->stdio_pipes[2].child_pipe,
|
|
895
|
+
PIPE_ACCESS_INBOUND,
|
|
896
|
+
GENERIC_WRITE);
|
|
912
897
|
if (err) {
|
|
913
898
|
goto done;
|
|
914
899
|
}
|
|
@@ -942,9 +927,10 @@ int uv_spawn(uv_process_t* process, uv_process_options_t options) {
|
|
|
942
927
|
process->pid = info.dwProcessId;
|
|
943
928
|
|
|
944
929
|
/* Setup notifications for when the child process exits. */
|
|
945
|
-
|
|
946
|
-
exit_wait_callback, (void*)process, INFINITE,
|
|
947
|
-
WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE)
|
|
930
|
+
result = RegisterWaitForSingleObject(&process->wait_handle,
|
|
931
|
+
process->process_handle, exit_wait_callback, (void*)process, INFINITE,
|
|
932
|
+
WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE);
|
|
933
|
+
if (!result) {
|
|
948
934
|
uv_fatal_error(GetLastError(), "RegisterWaitForSingleObject");
|
|
949
935
|
}
|
|
950
936
|
|