noderb 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (361) hide show
  1. data/ext/noderb_extension/libuv/AUTHORS +11 -1
  2. data/ext/noderb_extension/libuv/LICENSE +0 -8
  3. data/ext/noderb_extension/libuv/Makefile +5 -5
  4. data/ext/noderb_extension/libuv/README +11 -6
  5. data/ext/noderb_extension/libuv/common.gypi +158 -7
  6. data/ext/noderb_extension/libuv/config-unix.mk +34 -26
  7. data/ext/noderb_extension/libuv/gyp_uv +22 -4
  8. data/ext/noderb_extension/libuv/include/{eio.h → uv-private/eio.h} +2 -2
  9. data/ext/noderb_extension/libuv/include/{uv-unix.h → uv-private/uv-unix.h} +40 -0
  10. data/ext/noderb_extension/libuv/include/{uv-win.h → uv-private/uv-win.h} +96 -14
  11. data/ext/noderb_extension/libuv/include/uv.h +508 -83
  12. data/ext/noderb_extension/libuv/src/unix/cares.c +185 -0
  13. data/ext/noderb_extension/libuv/src/unix/core.c +828 -0
  14. data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_darwin.h +4 -0
  15. data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_linux.h +5 -15
  16. data/ext/noderb_extension/libuv/src/{eio → unix/eio}/eio.c +23 -2
  17. data/ext/noderb_extension/libuv/src/unix/error.c +102 -0
  18. data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_linux.h +26 -15
  19. data/ext/noderb_extension/libuv/src/unix/fs.c +562 -0
  20. data/ext/noderb_extension/libuv/src/unix/internal.h +75 -0
  21. data/ext/noderb_extension/libuv/src/unix/pipe.c +282 -0
  22. data/ext/noderb_extension/libuv/src/unix/process.c +287 -0
  23. data/ext/noderb_extension/libuv/src/unix/stream.c +727 -0
  24. data/ext/noderb_extension/libuv/src/unix/tcp.c +226 -0
  25. data/ext/noderb_extension/libuv/src/unix/udp.c +524 -0
  26. data/ext/noderb_extension/libuv/src/{uv-eio.c → unix/uv-eio.c} +48 -27
  27. data/ext/noderb_extension/libuv/src/{uv-eio.h → unix/uv-eio.h} +1 -1
  28. data/ext/noderb_extension/libuv/src/uv-common.c +24 -14
  29. data/ext/noderb_extension/libuv/src/uv-common.h +12 -7
  30. data/ext/noderb_extension/libuv/src/win/async.c +14 -16
  31. data/ext/noderb_extension/libuv/src/win/cares.c +64 -79
  32. data/ext/noderb_extension/libuv/src/win/core.c +105 -53
  33. data/ext/noderb_extension/libuv/src/win/error.c +23 -13
  34. data/ext/noderb_extension/libuv/src/win/fs.c +807 -0
  35. data/ext/noderb_extension/libuv/src/win/getaddrinfo.c +61 -41
  36. data/ext/noderb_extension/libuv/src/win/handle.c +56 -30
  37. data/ext/noderb_extension/libuv/src/win/internal.h +134 -95
  38. data/ext/noderb_extension/libuv/src/win/loop-watcher.c +21 -18
  39. data/ext/noderb_extension/libuv/src/win/pipe.c +313 -158
  40. data/ext/noderb_extension/libuv/src/win/process.c +117 -131
  41. data/ext/noderb_extension/libuv/src/win/req.c +55 -31
  42. data/ext/noderb_extension/libuv/src/win/stdio.c +5 -5
  43. data/ext/noderb_extension/libuv/src/win/stream.c +19 -14
  44. data/ext/noderb_extension/libuv/src/win/tcp.c +278 -336
  45. data/ext/noderb_extension/libuv/src/win/threadpool.c +73 -0
  46. data/ext/noderb_extension/libuv/src/win/timer.c +44 -37
  47. data/ext/noderb_extension/libuv/src/win/udp.c +592 -0
  48. data/ext/noderb_extension/libuv/src/win/util.c +20 -6
  49. data/ext/noderb_extension/libuv/src/win/winapi.c +23 -6
  50. data/ext/noderb_extension/libuv/src/win/winapi.h +4206 -0
  51. data/ext/noderb_extension/libuv/src/win/winsock.c +270 -0
  52. data/ext/noderb_extension/libuv/src/win/winsock.h +134 -0
  53. data/ext/noderb_extension/libuv/test/benchmark-ares.c +10 -6
  54. data/ext/noderb_extension/libuv/test/benchmark-getaddrinfo.c +10 -7
  55. data/ext/noderb_extension/libuv/test/benchmark-list.h +21 -0
  56. data/ext/noderb_extension/libuv/test/benchmark-ping-pongs.c +11 -7
  57. data/ext/noderb_extension/libuv/test/benchmark-pound.c +147 -58
  58. data/ext/noderb_extension/libuv/test/benchmark-pump.c +29 -23
  59. data/ext/noderb_extension/libuv/test/benchmark-spawn.c +13 -10
  60. data/ext/noderb_extension/libuv/test/benchmark-udp-packet-storm.c +250 -0
  61. data/ext/noderb_extension/libuv/test/dns-server.c +11 -6
  62. data/ext/noderb_extension/libuv/test/echo-server.c +30 -22
  63. data/ext/noderb_extension/libuv/test/test-async.c +3 -3
  64. data/ext/noderb_extension/libuv/test/test-callback-stack.c +6 -6
  65. data/ext/noderb_extension/libuv/test/test-connection-fail.c +6 -5
  66. data/ext/noderb_extension/libuv/test/test-delayed-accept.c +13 -13
  67. data/ext/noderb_extension/libuv/test/test-fs.c +715 -0
  68. data/ext/noderb_extension/libuv/test/test-getaddrinfo.c +11 -8
  69. data/ext/noderb_extension/libuv/test/test-gethostbyname.c +8 -9
  70. data/ext/noderb_extension/libuv/test/test-getsockname.c +142 -16
  71. data/ext/noderb_extension/libuv/test/test-idle.c +4 -3
  72. data/ext/noderb_extension/libuv/test/test-list.h +29 -2
  73. data/ext/noderb_extension/libuv/test/test-loop-handles.c +9 -8
  74. data/ext/noderb_extension/libuv/test/test-ping-pong.c +9 -9
  75. data/ext/noderb_extension/libuv/test/test-pipe-bind-error.c +18 -14
  76. data/ext/noderb_extension/libuv/test/test-ref.c +17 -16
  77. data/ext/noderb_extension/libuv/test/test-shutdown-eof.c +5 -5
  78. data/ext/noderb_extension/libuv/test/test-spawn.c +17 -17
  79. data/ext/noderb_extension/libuv/test/test-tcp-bind-error.c +24 -18
  80. data/ext/noderb_extension/libuv/test/test-tcp-bind6-error.c +19 -14
  81. data/ext/noderb_extension/libuv/test/test-tcp-writealot.c +6 -5
  82. data/ext/noderb_extension/libuv/test/test-threadpool.c +59 -0
  83. data/ext/noderb_extension/libuv/test/test-timer-again.c +15 -12
  84. data/ext/noderb_extension/libuv/test/test-timer.c +8 -8
  85. data/ext/noderb_extension/libuv/test/test-udp-dgram-too-big.c +88 -0
  86. data/ext/noderb_extension/libuv/test/test-udp-ipv6.c +158 -0
  87. data/ext/noderb_extension/libuv/test/test-udp-send-and-recv.c +210 -0
  88. data/ext/noderb_extension/libuv/{all.gyp → uv.gyp} +75 -77
  89. data/ext/noderb_extension/libuv/vcbuild.bat +93 -0
  90. data/ext/noderb_extension/noderb.c +13 -0
  91. data/ext/noderb_extension/noderb_common.h +2 -1
  92. data/ext/noderb_extension/noderb_defer.c +54 -0
  93. data/ext/noderb_extension/noderb_defer.h +15 -0
  94. data/ext/noderb_extension/noderb_dns.c +1 -1
  95. data/ext/noderb_extension/noderb_fs.c +277 -0
  96. data/ext/noderb_extension/noderb_fs.h +27 -0
  97. data/ext/noderb_extension/noderb_process.c +5 -5
  98. data/ext/noderb_extension/noderb_tcp.c +10 -6
  99. data/ext/noderb_extension/noderb_timers.c +1 -1
  100. data/ext/noderb_extension/noderb_tools.c +42 -8
  101. data/ext/noderb_extension/noderb_tools.h +3 -1
  102. data/lib/noderb/defer.rb +25 -0
  103. data/lib/noderb/file.rb +119 -0
  104. data/lib/noderb/fs.rb +72 -0
  105. data/lib/noderb/version.rb +1 -1
  106. data/lib/noderb.rb +8 -0
  107. metadata +102 -266
  108. data/ext/noderb_extension/libuv/BSDmakefile +0 -2
  109. data/ext/noderb_extension/libuv/create-msvs-files.bat +0 -21
  110. data/ext/noderb_extension/libuv/deps/pthread-win32/ANNOUNCE +0 -482
  111. data/ext/noderb_extension/libuv/deps/pthread-win32/BUGS +0 -141
  112. data/ext/noderb_extension/libuv/deps/pthread-win32/Bmakefile +0 -268
  113. data/ext/noderb_extension/libuv/deps/pthread-win32/CONTRIBUTORS +0 -140
  114. data/ext/noderb_extension/libuv/deps/pthread-win32/COPYING +0 -150
  115. data/ext/noderb_extension/libuv/deps/pthread-win32/COPYING.LIB +0 -504
  116. data/ext/noderb_extension/libuv/deps/pthread-win32/ChangeLog +0 -5194
  117. data/ext/noderb_extension/libuv/deps/pthread-win32/FAQ +0 -451
  118. data/ext/noderb_extension/libuv/deps/pthread-win32/GNUmakefile +0 -593
  119. data/ext/noderb_extension/libuv/deps/pthread-win32/MAINTAINERS +0 -4
  120. data/ext/noderb_extension/libuv/deps/pthread-win32/Makefile +0 -516
  121. data/ext/noderb_extension/libuv/deps/pthread-win32/NEWS +0 -1245
  122. data/ext/noderb_extension/libuv/deps/pthread-win32/Nmakefile +0 -24
  123. data/ext/noderb_extension/libuv/deps/pthread-win32/Nmakefile.tests +0 -260
  124. data/ext/noderb_extension/libuv/deps/pthread-win32/PROGRESS +0 -4
  125. data/ext/noderb_extension/libuv/deps/pthread-win32/README +0 -601
  126. data/ext/noderb_extension/libuv/deps/pthread-win32/README.Borland +0 -57
  127. data/ext/noderb_extension/libuv/deps/pthread-win32/README.CV +0 -3036
  128. data/ext/noderb_extension/libuv/deps/pthread-win32/README.NONPORTABLE +0 -783
  129. data/ext/noderb_extension/libuv/deps/pthread-win32/README.Watcom +0 -62
  130. data/ext/noderb_extension/libuv/deps/pthread-win32/README.WinCE +0 -6
  131. data/ext/noderb_extension/libuv/deps/pthread-win32/TODO +0 -7
  132. data/ext/noderb_extension/libuv/deps/pthread-win32/WinCE-PORT +0 -222
  133. data/ext/noderb_extension/libuv/deps/pthread-win32/attr.c +0 -53
  134. data/ext/noderb_extension/libuv/deps/pthread-win32/autostatic.c +0 -69
  135. data/ext/noderb_extension/libuv/deps/pthread-win32/barrier.c +0 -47
  136. data/ext/noderb_extension/libuv/deps/pthread-win32/build/all.gyp +0 -207
  137. data/ext/noderb_extension/libuv/deps/pthread-win32/builddmc.bat +0 -9
  138. data/ext/noderb_extension/libuv/deps/pthread-win32/cancel.c +0 -44
  139. data/ext/noderb_extension/libuv/deps/pthread-win32/cleanup.c +0 -148
  140. data/ext/noderb_extension/libuv/deps/pthread-win32/condvar.c +0 -50
  141. data/ext/noderb_extension/libuv/deps/pthread-win32/config.h +0 -153
  142. data/ext/noderb_extension/libuv/deps/pthread-win32/context.h +0 -74
  143. data/ext/noderb_extension/libuv/deps/pthread-win32/create.c +0 -308
  144. data/ext/noderb_extension/libuv/deps/pthread-win32/dll.c +0 -92
  145. data/ext/noderb_extension/libuv/deps/pthread-win32/errno.c +0 -94
  146. data/ext/noderb_extension/libuv/deps/pthread-win32/exit.c +0 -44
  147. data/ext/noderb_extension/libuv/deps/pthread-win32/fork.c +0 -39
  148. data/ext/noderb_extension/libuv/deps/pthread-win32/global.c +0 -107
  149. data/ext/noderb_extension/libuv/deps/pthread-win32/implement.h +0 -944
  150. data/ext/noderb_extension/libuv/deps/pthread-win32/misc.c +0 -50
  151. data/ext/noderb_extension/libuv/deps/pthread-win32/mutex.c +0 -62
  152. data/ext/noderb_extension/libuv/deps/pthread-win32/need_errno.h +0 -145
  153. data/ext/noderb_extension/libuv/deps/pthread-win32/nonportable.c +0 -47
  154. data/ext/noderb_extension/libuv/deps/pthread-win32/private.c +0 -54
  155. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.c +0 -66
  156. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.dsp +0 -142
  157. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.dsw +0 -29
  158. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.h +0 -1368
  159. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_destroy.c +0 -79
  160. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getdetachstate.c +0 -86
  161. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getinheritsched.c +0 -51
  162. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getschedparam.c +0 -52
  163. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getschedpolicy.c +0 -61
  164. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getscope.c +0 -54
  165. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getstackaddr.c +0 -97
  166. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getstacksize.c +0 -100
  167. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_init.c +0 -117
  168. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setdetachstate.c +0 -91
  169. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setinheritsched.c +0 -57
  170. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setschedparam.c +0 -63
  171. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setschedpolicy.c +0 -55
  172. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setscope.c +0 -62
  173. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setstackaddr.c +0 -97
  174. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setstacksize.c +0 -110
  175. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_destroy.c +0 -103
  176. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_init.c +0 -69
  177. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_wait.c +0 -104
  178. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_destroy.c +0 -83
  179. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_getpshared.c +0 -95
  180. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_init.c +0 -85
  181. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_setpshared.c +0 -119
  182. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cancel.c +0 -189
  183. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_destroy.c +0 -253
  184. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_init.c +0 -167
  185. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_signal.c +0 -231
  186. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_wait.c +0 -567
  187. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_destroy.c +0 -86
  188. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_getpshared.c +0 -97
  189. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_init.c +0 -87
  190. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_setpshared.c +0 -117
  191. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_delay_np.c +0 -172
  192. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_detach.c +0 -136
  193. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_equal.c +0 -76
  194. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_exit.c +0 -106
  195. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getconcurrency.c +0 -45
  196. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getschedparam.c +0 -75
  197. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getspecific.c +0 -87
  198. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getunique_np.c +0 -47
  199. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getw32threadhandle_np.c +0 -65
  200. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_join.c +0 -157
  201. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_key_create.c +0 -108
  202. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_key_delete.c +0 -125
  203. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_kill.c +0 -105
  204. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_consistent.c +0 -187
  205. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_destroy.c +0 -148
  206. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_init.c +0 -130
  207. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_lock.c +0 -269
  208. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_timedlock.c +0 -324
  209. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_trylock.c +0 -154
  210. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_unlock.c +0 -175
  211. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_destroy.c +0 -83
  212. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getkind_np.c +0 -44
  213. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getpshared.c +0 -95
  214. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getrobust.c +0 -113
  215. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_gettype.c +0 -56
  216. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_init.c +0 -86
  217. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setkind_np.c +0 -44
  218. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setpshared.c +0 -119
  219. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setrobust.c +0 -119
  220. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_settype.c +0 -143
  221. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_num_processors_np.c +0 -56
  222. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_once.c +0 -79
  223. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_destroy.c +0 -143
  224. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_init.c +0 -109
  225. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_rdlock.c +0 -102
  226. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_timedrdlock.c +0 -109
  227. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_timedwrlock.c +0 -139
  228. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_tryrdlock.c +0 -102
  229. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_trywrlock.c +0 -122
  230. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_unlock.c +0 -93
  231. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_wrlock.c +0 -133
  232. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_destroy.c +0 -84
  233. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_getpshared.c +0 -97
  234. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_init.c +0 -83
  235. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_setpshared.c +0 -120
  236. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_self.c +0 -141
  237. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setcancelstate.c +0 -125
  238. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setcanceltype.c +0 -126
  239. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setconcurrency.c +0 -53
  240. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setschedparam.c +0 -123
  241. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setspecific.c +0 -167
  242. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_destroy.c +0 -111
  243. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_init.c +0 -123
  244. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_lock.c +0 -80
  245. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_trylock.c +0 -77
  246. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_unlock.c +0 -71
  247. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_testcancel.c +0 -103
  248. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_timechange_handler_np.c +0 -108
  249. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_win32_attach_detach_np.c +0 -258
  250. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_MCS_lock.c +0 -278
  251. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_callUserDestroyRoutines.c +0 -232
  252. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_calloc.c +0 -56
  253. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_cond_check_need_init.c +0 -78
  254. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_getprocessors.c +0 -91
  255. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_is_attr.c +0 -47
  256. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_mutex_check_need_init.c +0 -92
  257. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_new.c +0 -94
  258. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_processInitialize.c +0 -92
  259. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_processTerminate.c +0 -105
  260. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_relmillisecs.c +0 -132
  261. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_reuse.c +0 -151
  262. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_rwlock_cancelwrwait.c +0 -50
  263. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_rwlock_check_need_init.c +0 -77
  264. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_semwait.c +0 -135
  265. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_spinlock_check_need_init.c +0 -78
  266. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_threadDestroy.c +0 -79
  267. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_threadStart.c +0 -357
  268. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_throw.c +0 -189
  269. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_timespec.c +0 -83
  270. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_tkAssocCreate.c +0 -118
  271. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_tkAssocDestroy.c +0 -114
  272. data/ext/noderb_extension/libuv/deps/pthread-win32/rwlock.c +0 -51
  273. data/ext/noderb_extension/libuv/deps/pthread-win32/sched.c +0 -53
  274. data/ext/noderb_extension/libuv/deps/pthread-win32/sched.h +0 -183
  275. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_get_priority_max.c +0 -134
  276. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_get_priority_min.c +0 -135
  277. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_getscheduler.c +0 -71
  278. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_setscheduler.c +0 -83
  279. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_yield.c +0 -71
  280. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_close.c +0 -58
  281. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_destroy.c +0 -144
  282. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_getvalue.c +0 -110
  283. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_init.c +0 -169
  284. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_open.c +0 -58
  285. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_post.c +0 -128
  286. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_post_multiple.c +0 -142
  287. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_timedwait.c +0 -238
  288. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_trywait.c +0 -117
  289. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_unlink.c +0 -58
  290. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_wait.c +0 -187
  291. data/ext/noderb_extension/libuv/deps/pthread-win32/semaphore.c +0 -69
  292. data/ext/noderb_extension/libuv/deps/pthread-win32/semaphore.h +0 -169
  293. data/ext/noderb_extension/libuv/deps/pthread-win32/signal.c +0 -179
  294. data/ext/noderb_extension/libuv/deps/pthread-win32/spin.c +0 -46
  295. data/ext/noderb_extension/libuv/deps/pthread-win32/sync.c +0 -43
  296. data/ext/noderb_extension/libuv/deps/pthread-win32/tsd.c +0 -44
  297. data/ext/noderb_extension/libuv/deps/pthread-win32/version.rc +0 -388
  298. data/ext/noderb_extension/libuv/deps/pthread-win32/w32_CancelableWait.c +0 -161
  299. data/ext/noderb_extension/libuv/doc/iocp-links.html +0 -574
  300. data/ext/noderb_extension/libuv/src/uv-unix.c +0 -2421
  301. data/ext/noderb_extension/libuv/src/win/ntdll.h +0 -130
  302. /data/ext/noderb_extension/libuv/include/{ev.h → uv-private/ev.h} +0 -0
  303. /data/ext/noderb_extension/libuv/include/{ngx-queue.h → uv-private/ngx-queue.h} +0 -0
  304. /data/ext/noderb_extension/libuv/include/{tree.h → uv-private/tree.h} +0 -0
  305. /data/ext/noderb_extension/libuv/src/{uv-cygwin.c → unix/cygwin.c} +0 -0
  306. /data/ext/noderb_extension/libuv/src/{uv-darwin.c → unix/darwin.c} +0 -0
  307. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/Changes +0 -0
  308. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/LICENSE +0 -0
  309. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/Makefile.am +0 -0
  310. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/aclocal.m4 +0 -0
  311. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/autogen.sh +0 -0
  312. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config.h.in +0 -0
  313. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_cygwin.h +0 -0
  314. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_freebsd.h +0 -0
  315. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/config_sunos.h +0 -0
  316. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/configure.ac +0 -0
  317. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/demo.c +0 -0
  318. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/ecb.h +0 -0
  319. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/eio.3 +0 -0
  320. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/eio.pod +0 -0
  321. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/libeio.m4 +0 -0
  322. /data/ext/noderb_extension/libuv/src/{eio → unix/eio}/xthread.h +0 -0
  323. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/Changes +0 -0
  324. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/LICENSE +0 -0
  325. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/Makefile.am +0 -0
  326. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/Makefile.in +0 -0
  327. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/README +0 -0
  328. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/aclocal.m4 +0 -0
  329. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/autogen.sh +0 -0
  330. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config.guess +0 -0
  331. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config.h.in +0 -0
  332. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config.sub +0 -0
  333. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_cygwin.h +0 -0
  334. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_darwin.h +0 -0
  335. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_freebsd.h +0 -0
  336. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/config_sunos.h +0 -0
  337. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/configure +0 -0
  338. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/configure.ac +0 -0
  339. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/depcomp +0 -0
  340. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev++.h +0 -0
  341. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev.3 +0 -0
  342. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev.c +0 -0
  343. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev.pod +0 -0
  344. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_epoll.c +0 -0
  345. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_kqueue.c +0 -0
  346. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_poll.c +0 -0
  347. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_port.c +0 -0
  348. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_select.c +0 -0
  349. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_vars.h +0 -0
  350. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_win32.c +0 -0
  351. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ev_wrap.h +0 -0
  352. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/event.c +0 -0
  353. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/event.h +0 -0
  354. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/install-sh +0 -0
  355. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/libev.m4 +0 -0
  356. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/ltmain.sh +0 -0
  357. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/missing +0 -0
  358. /data/ext/noderb_extension/libuv/src/{ev → unix/ev}/mkinstalldirs +0 -0
  359. /data/ext/noderb_extension/libuv/src/{uv-freebsd.c → unix/freebsd.c} +0 -0
  360. /data/ext/noderb_extension/libuv/src/{uv-linux.c → unix/linux.c} +0 -0
  361. /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 const wchar_t DEFAULT_PATH_EXT[10] = L".COM;.EXE";
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
- uv_counters()->handle_init++;
82
- uv_counters()->process_init++;
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
- (wchar_t*)malloc(sizeof(wchar_t) * (cwd_len + 1 + dir_len + 1 + name_len + 1 + ext_len + 1));
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
- result_pos[0] = L'.';
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 = NULL;
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 nonemtpy extension, try this extension first */
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
- /* Skip the separator that ext_end now points to */
210
- if (ext_end != path_ext) {
211
- ext_end++;
212
- }
213
-
214
- /* Find the next dot in path_ext */
215
- ext_start = wcschr(ext_end, L'.');
216
- if (ext_start == NULL) {
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
- result = search_path_join_test(dir, dir_len,
230
- name, name_len,
231
- ext_start, (ext_end - ext_start),
232
- cwd, cwd_len);
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 result;
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 uses as closely
247
- * as possible:
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 specifies has *any* extension, search for the file with the
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) extensions from path_ext in the specified order.
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 name */
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 (but do use path_ex) */
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
- path_ext, name_has_ext);
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
- path_ext, name_has_ext);
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
- path_ext, name_has_ext);
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, const char* var) {
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, COUNTOF(required_vars), *env);
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, ptr, required_vars[i].value_len);
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
- if (!PostQueuedCompletionStatus(LOOP->iocp,
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
- if (!PostQueuedCompletionStatus(LOOP->iocp,
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
- if (!PostQueuedCompletionStatus(LOOP->iocp,
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(uv_pipe_t* server_pipe, HANDLE* child_pipe, DWORD server_access, DWORD child_access) {
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(server_pipe, server_access, pipe_name, sizeof(pipe_name));
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, uv_process_options_t options) {
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, options.windows_verbatim_arguments) : NULL;
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(options.stdin_stream, &process->stdio_pipes[0].child_pipe, PIPE_ACCESS_OUTBOUND, GENERIC_READ | FILE_WRITE_ATTRIBUTES);
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(options.stdout_stream, &process->stdio_pipes[1].child_pipe, PIPE_ACCESS_INBOUND, GENERIC_WRITE);
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(options.stderr_stream, &process->stdio_pipes[2].child_pipe, PIPE_ACCESS_INBOUND, GENERIC_WRITE);
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
- if (!RegisterWaitForSingleObject(&process->wait_handle, process->process_handle,
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