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.
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