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
@@ -0,0 +1,277 @@
1
+ #include <noderb_common.h>
2
+
3
+ #include <noderb_fs.h>
4
+ #include <noderb_tools.h>
5
+ #include <fcntl.h>
6
+ #include <sys/types.h>
7
+ #include <sys/stat.h>
8
+
9
+ typedef struct {
10
+ long target;
11
+ char* buffer;
12
+ } nodeRb_file_handle;
13
+
14
+ void nodeRb_fs_operation_callback(uv_fs_t* handle){
15
+ nodeRb_file_handle* data = (nodeRb_file_handle*) handle->data;
16
+ VALUE target = nodeRb_get_class_from_id(data->target);
17
+ if(handle->result == -1){
18
+ rb_funcall(target, rb_intern("call"), 1, Qnil);
19
+ }else{
20
+ switch(handle->fs_type) {
21
+ case UV_FS_UNLINK:
22
+ case UV_FS_MKDIR:
23
+ case UV_FS_RMDIR:
24
+ case UV_FS_RENAME:
25
+ case UV_FS_CHMOD:
26
+ case UV_FS_UTIME:
27
+ case UV_FS_LINK:
28
+ case UV_FS_SYMLINK:
29
+ case UV_FS_CHOWN:
30
+ rb_funcall(target, rb_intern("call"), 1, Qtrue);
31
+ break;
32
+ case UV_FS_READLINK:
33
+ rb_funcall(target, rb_intern("call"), 1, rb_str_new((char*) handle->ptr, handle->result));
34
+ break;
35
+ case UV_FS_READDIR:
36
+ rb_funcall(target, rb_intern("call"), 1, rb_str_new((char*) handle->ptr, handle->result));
37
+ break;
38
+ case UV_FS_LSTAT:
39
+ case UV_FS_STAT:
40
+ {
41
+ NODERB_STAT_STRUCT* stats = (NODERB_STAT_STRUCT*) handle->ptr;
42
+ VALUE values = rb_funcall(rb_path2class("NodeRb::Stat"), rb_intern("new"), 0, 0);
43
+
44
+ rb_iv_set(values, "@device", LONG2NUM(stats->st_dev));
45
+ rb_iv_set(values, "@inode", LONG2NUM(stats->st_ino));
46
+ rb_iv_set(values, "@rdevice", LONG2NUM(stats->st_rdev));
47
+
48
+ rb_iv_set(values, "@uid", LONG2NUM(stats->st_uid));
49
+ rb_iv_set(values, "@gid", LONG2NUM(stats->st_gid));
50
+ rb_iv_set(values, "@size", LONG2NUM(stats->st_size));
51
+ rb_iv_set(values, "@links", LONG2NUM(stats->st_nlink));
52
+ rb_iv_set(values, "@mode", LONG2NUM(stats->st_mode));
53
+ rb_iv_set(values, "@block_size", LONG2NUM(stats->st_blksize));
54
+ rb_iv_set(values, "@blocks", LONG2NUM(stats->st_blocks));
55
+
56
+ rb_iv_set(values, "@accessed", LONG2NUM(stats->st_atime));
57
+ rb_iv_set(values, "@modified", LONG2NUM(stats->st_mtime));
58
+ rb_iv_set(values, "@changed", LONG2NUM(stats->st_ctime));
59
+
60
+ rb_funcall(target, rb_intern("call"), 1, values);
61
+ }
62
+ break;
63
+ }
64
+ }
65
+ nodeRb_unregister_instance(target);
66
+ free(handle->data);
67
+ uv_fs_req_cleanup(handle);
68
+ }
69
+
70
+ VALUE nodeRb_fs_operation(VALUE self, VALUE roperation, VALUE path, VALUE params, VALUE callback){
71
+ uv_fs_t* handle = malloc(sizeof(uv_fs_t));
72
+ nodeRb_file_handle* data = malloc(sizeof(nodeRb_file_handle));
73
+ nodeRb_register_instance(callback);
74
+ data->target = rb_num2long(rb_obj_id(callback));
75
+ long operation = rb_num2long(roperation);
76
+ switch(operation){
77
+ case 0:
78
+ uv_fs_unlink(uv_default_loop(), handle, rb_string_value_cstr(&path), nodeRb_fs_operation_callback);
79
+ break;
80
+ case 1:
81
+ uv_fs_mkdir(uv_default_loop(), handle, rb_string_value_cstr(&path), (int) rb_num2long(params), nodeRb_fs_operation_callback);
82
+ break;
83
+ case 2:
84
+ uv_fs_rmdir(uv_default_loop(), handle, rb_string_value_cstr(&path), nodeRb_fs_operation_callback);
85
+ break;
86
+ case 3:
87
+ uv_fs_readdir(uv_default_loop(), handle, rb_string_value_cstr(&path), (int) rb_num2long(params), nodeRb_fs_operation_callback);
88
+ break;
89
+ case 4:
90
+ uv_fs_stat(uv_default_loop(), handle, rb_string_value_cstr(&path), nodeRb_fs_operation_callback);
91
+ break;
92
+ case 5:
93
+ uv_fs_rename(uv_default_loop(), handle, rb_string_value_cstr(&path), rb_string_value_cstr(&params), nodeRb_fs_operation_callback);
94
+ break;
95
+ case 6:
96
+ uv_fs_chmod(uv_default_loop(), handle, rb_string_value_cstr(&path), (int) rb_num2long(params), nodeRb_fs_operation_callback);
97
+ break;
98
+ case 7:
99
+ uv_fs_utime(uv_default_loop(), handle, rb_string_value_cstr(&path), (int) rb_num2long(rb_ary_entry(params, 0)), (int) rb_num2long(rb_ary_entry(params, 1)), nodeRb_fs_operation_callback);
100
+ break;
101
+ case 8:
102
+ uv_fs_lstat(uv_default_loop(), handle, rb_string_value_cstr(&path), nodeRb_fs_operation_callback);
103
+ break;
104
+ case 9:
105
+ uv_fs_link(uv_default_loop(), handle, rb_string_value_cstr(&path), rb_string_value_cstr(&params), nodeRb_fs_operation_callback);
106
+ break;
107
+ case 10:
108
+ {
109
+ VALUE new_path = rb_ary_entry(params, 0);
110
+ // (int) rb_num2long(rb_ary_entry(params, 1))
111
+ uv_fs_symlink(uv_default_loop(), handle, rb_string_value_cstr(&path), rb_string_value_cstr(&new_path), nodeRb_fs_operation_callback);
112
+ }
113
+ break;
114
+ case 11:
115
+ uv_fs_readlink(uv_default_loop(), handle, rb_string_value_cstr(&path), nodeRb_fs_operation_callback);
116
+ break;
117
+ case 12:
118
+ uv_fs_chown(uv_default_loop(), handle, rb_string_value_cstr(&path), (int) rb_num2long(rb_ary_entry(params, 0)), (int) rb_num2long(rb_ary_entry(params, 1)), nodeRb_fs_operation_callback);
119
+ break;
120
+ }
121
+ handle->data = data;
122
+ }
123
+
124
+ void nodeRb_fs_file_operation_callback(uv_fs_t* handle){
125
+ nodeRb_file_handle* data = (nodeRb_file_handle*) handle->data;
126
+ VALUE target = nodeRb_get_class_from_id(data->target);
127
+ if(handle->result == -1){
128
+ rb_funcall(target, rb_intern("on_error"), 0, 0);
129
+ }else{
130
+ switch(handle->fs_type) {
131
+ case UV_FS_SENDFILE:
132
+ rb_funcall(target, rb_intern("on_sendfile"), 0, 0);
133
+ break;
134
+ case UV_FS_FTRUNCATE:
135
+ rb_funcall(target, rb_intern("on_truncate"), 0, 0);
136
+ break;
137
+ case UV_FS_FUTIME:
138
+ rb_funcall(target, rb_intern("on_utime"), 0, 0);
139
+ break;
140
+ case UV_FS_FCHMOD:
141
+ rb_funcall(target, rb_intern("on_chmod"), 0, 0);
142
+ break;
143
+ case UV_FS_FSYNC:
144
+ rb_funcall(target, rb_intern("on_sync"), 0, 0);
145
+ break;
146
+ case UV_FS_FDATASYNC:
147
+ rb_funcall(target, rb_intern("on_datasync"), 0, 0);
148
+ break;
149
+ case UV_FS_FCHOWN:
150
+ rb_funcall(target, rb_intern("on_chown"), 0, 0);
151
+ break;
152
+ case UV_FS_WRITE:
153
+ rb_funcall(target, rb_intern("on_write"), 0, 0);
154
+ break;
155
+ case UV_FS_FSTAT:
156
+ {
157
+ NODERB_STAT_STRUCT* stats = (NODERB_STAT_STRUCT*) handle->ptr;
158
+ VALUE values = rb_funcall(rb_path2class("NodeRb::Stat"), rb_intern("new"), 0, 0);
159
+
160
+ rb_iv_set(values, "@device", LONG2NUM(stats->st_dev));
161
+ rb_iv_set(values, "@inode", LONG2NUM(stats->st_ino));
162
+ rb_iv_set(values, "@rdevice", LONG2NUM(stats->st_rdev));
163
+
164
+ rb_iv_set(values, "@uid", LONG2NUM(stats->st_uid));
165
+ rb_iv_set(values, "@gid", LONG2NUM(stats->st_gid));
166
+ rb_iv_set(values, "@size", LONG2NUM(stats->st_size));
167
+ rb_iv_set(values, "@links", LONG2NUM(stats->st_nlink));
168
+ rb_iv_set(values, "@mode", LONG2NUM(stats->st_mode));
169
+ rb_iv_set(values, "@block_size", LONG2NUM(stats->st_blksize));
170
+ rb_iv_set(values, "@blocks", LONG2NUM(stats->st_blocks));
171
+
172
+ rb_iv_set(values, "@accessed", LONG2NUM(stats->st_atime));
173
+ rb_iv_set(values, "@modified", LONG2NUM(stats->st_mtime));
174
+ rb_iv_set(values, "@changed", LONG2NUM(stats->st_ctime));
175
+
176
+ rb_funcall(target, rb_intern("on_stat"), 1, values);
177
+ }
178
+ break;
179
+ case UV_FS_OPEN:
180
+ {
181
+ uv_file fd = (uv_file) handle->result;
182
+ rb_iv_set(target, "@_handle", INT2NUM(fd));
183
+ rb_funcall(target, rb_intern("on_open"), 0, 0);
184
+ }
185
+ break;
186
+ case UV_FS_READ:
187
+ {
188
+ int size = (int) handle->result;
189
+ char* buf = data->buffer;
190
+ rb_funcall(target, rb_intern("on_read"), 1, rb_str_new(buf, size));
191
+ free(buf);
192
+ }
193
+ break;
194
+ case UV_FS_CLOSE:
195
+ rb_funcall(target, rb_intern("on_close"), 0, 0);
196
+ nodeRb_unregister_instance(target);
197
+ rb_iv_set(target, "@_handle", Qnil);
198
+ break;
199
+ }
200
+ }
201
+ free(handle->data);
202
+ uv_fs_req_cleanup(handle);
203
+ }
204
+
205
+ VALUE nodeRb_fs_file_operation(VALUE self, VALUE roperation, VALUE params){
206
+ long operation = rb_num2long(roperation);
207
+ uv_file fd;
208
+ if(operation > 0){
209
+ fd = (int) rb_num2long(rb_iv_get(self, "@_handle"));
210
+ }
211
+ // Allocate memory
212
+ uv_fs_t* handle = malloc(sizeof(uv_fs_t));
213
+ nodeRb_file_handle* data = malloc(sizeof(nodeRb_file_handle));
214
+ // Save Ruby data
215
+ data->target = rb_num2long(rb_obj_id(self));
216
+ // Open file
217
+ switch(operation){
218
+ case 0:
219
+ {
220
+ int mode = (int) rb_num2long(rb_ary_entry(params,1));
221
+ switch(mode){
222
+ case 0:
223
+ mode = O_RDWR | O_CREAT;
224
+ break;
225
+ case 1:
226
+ mode = O_RDONLY;
227
+ break;
228
+ case 2:
229
+ mode = O_WRONLY | O_CREAT;
230
+ break;
231
+ }
232
+ VALUE file = rb_ary_entry(params,0);
233
+ uv_fs_open(uv_default_loop(), handle, rb_string_value_cstr(&file), mode, (int) rb_num2long(rb_ary_entry(params,2)), nodeRb_fs_file_operation_callback);
234
+ }
235
+ break;
236
+ case 1:
237
+ {
238
+ long size = rb_num2long(rb_ary_entry(params,0));
239
+ long offset = rb_num2long(rb_ary_entry(params,1));
240
+ char* buf = (char*) malloc(size);
241
+ data->buffer = buf;
242
+ uv_fs_read(uv_default_loop(), handle, fd, buf, size, offset, nodeRb_fs_file_operation_callback);
243
+ }
244
+ break;
245
+ case 2:
246
+ uv_fs_write(uv_default_loop(), handle, fd, rb_string_value_ptr(&params), RSTRING_LEN(params), 0, nodeRb_fs_file_operation_callback);
247
+ break;
248
+ case 3:
249
+ uv_fs_fstat(uv_default_loop(), handle, fd, nodeRb_fs_file_operation_callback);
250
+ break;
251
+ case 4:
252
+ uv_fs_fsync(uv_default_loop(), handle, fd, nodeRb_fs_file_operation_callback);
253
+ break;
254
+ case 5:
255
+ uv_fs_fdatasync(uv_default_loop(), handle, fd, nodeRb_fs_file_operation_callback);
256
+ break;
257
+ case 6:
258
+ uv_fs_ftruncate(uv_default_loop(), handle, fd, (int) rb_num2long(params), nodeRb_fs_file_operation_callback);
259
+ break;
260
+ case 7:
261
+ uv_fs_sendfile(uv_default_loop(), handle, fd, (int) rb_num2long(rb_ary_entry(params,0)), (int) rb_num2long(rb_ary_entry(params,1)), (int) rb_num2long(rb_ary_entry(params,2)), nodeRb_fs_file_operation_callback);
262
+ break;
263
+ case 8:
264
+ uv_fs_futime(uv_default_loop(), handle, fd, (int) rb_num2long(rb_ary_entry(params,0)), (int) rb_num2long(rb_ary_entry(params,1)), nodeRb_fs_file_operation_callback);
265
+ break;
266
+ case 9:
267
+ uv_fs_fchmod(uv_default_loop(), handle, fd, (int) rb_num2long(params), nodeRb_fs_file_operation_callback);
268
+ break;
269
+ case 10:
270
+ uv_fs_fchown(uv_default_loop(), handle, fd, (int) rb_num2long(rb_ary_entry(params,0)), (int) rb_num2long(rb_ary_entry(params,1)), nodeRb_fs_file_operation_callback);
271
+ break;
272
+ case 11:
273
+ uv_fs_close(uv_default_loop(), handle, fd, nodeRb_fs_file_operation_callback);
274
+ break;
275
+ }
276
+ handle->data = data;
277
+ }
@@ -0,0 +1,27 @@
1
+ #ifndef NODERB_FS_H
2
+ #define NODERB_FS_H
3
+
4
+ #ifdef __cplusplus
5
+ extern "C" {
6
+ #endif
7
+
8
+ VALUE nodeRb_fs_open(VALUE self, VALUE file, VALUE mode, VALUE rgh);
9
+ VALUE nodeRb_fs_read(VALUE self, VALUE size, VALUE fromToRead);
10
+ VALUE nodeRb_fs_write(VALUE self, VALUE data);
11
+ VALUE nodeRb_fs_close(VALUE self);
12
+
13
+ VALUE nodeRb_fs_operation(VALUE self, VALUE roperation, VALUE path, VALUE params, VALUE callback);
14
+ VALUE nodeRb_fs_file_operation(VALUE self, VALUE roperation, VALUE params);
15
+
16
+ // ToDo: Taken from NodeJs
17
+
18
+ #define NODERB_STAT stat
19
+ #define NODERB_FSTAT fstat
20
+ #define NODERB_STAT_STRUCT struct stat
21
+
22
+ #ifdef __cplusplus
23
+ }
24
+ #endif
25
+
26
+ #endif /* NODERB_FS_H */
27
+
@@ -30,7 +30,7 @@ VALUE nodeRb_process_write(VALUE self, VALUE data) {
30
30
  uv_write_t write_req;
31
31
  uv_buf_t buf;
32
32
  // Get data to write from Ruby
33
- char* buffer = rb_string_value_cstr(&data);
33
+ char* buffer = rb_string_value_ptr(&data);
34
34
  // Get process handle
35
35
  nodeRb_process_handle* process_handle = (nodeRb_process_handle*) handle->data;
36
36
  // Write data to stream
@@ -90,12 +90,12 @@ VALUE nodeRb_startProcess(VALUE self, VALUE executable, VALUE arguments, VALUE e
90
90
  nodeRb_register_instance(clazz);
91
91
  // stdin
92
92
  uv_pipe_t* stdin = malloc(sizeof(uv_pipe_t));
93
- uv_pipe_init(stdin);
93
+ uv_pipe_init(uv_default_loop(), stdin);
94
94
  options.stdin_stream = stdin;
95
95
  process_handle->stdin = stdin;
96
96
  // stdout
97
97
  uv_pipe_t* stdout = malloc(sizeof(uv_pipe_t));
98
- uv_pipe_init(stdout);
98
+ uv_pipe_init(uv_default_loop(), stdout);
99
99
  options.stdout_stream = stdout;
100
100
  nodeRb_process_read_handle* stdout_handle = malloc(sizeof(nodeRb_process_read_handle));
101
101
  stdout_handle->target = process_handle->target;
@@ -104,7 +104,7 @@ VALUE nodeRb_startProcess(VALUE self, VALUE executable, VALUE arguments, VALUE e
104
104
  process_handle->stdout = stdout;
105
105
  // stderr
106
106
  uv_pipe_t* stderr = malloc(sizeof(uv_pipe_t));
107
- uv_pipe_init(stderr);
107
+ uv_pipe_init(uv_default_loop(), stderr);
108
108
  options.stderr_stream = stderr;
109
109
  nodeRb_process_read_handle* stderr_handle = malloc(sizeof(nodeRb_process_read_handle));
110
110
  stderr_handle->target = process_handle->target;
@@ -117,7 +117,7 @@ VALUE nodeRb_startProcess(VALUE self, VALUE executable, VALUE arguments, VALUE e
117
117
  // Save reference into Ruby object
118
118
  rb_iv_set(clazz, "@_handle", Data_Wrap_Struct(nodeRb_get_nodeRb_pointer(), 0, NULL, handle));
119
119
  // spawn process
120
- uv_spawn(handle, options);
120
+ uv_spawn(uv_default_loop(), handle, options);
121
121
  // Listen to stdout/err
122
122
  uv_read_start((uv_stream_t*) stdout, nodeRb_read_alloc, nodeRb_read);
123
123
  uv_read_start((uv_stream_t*) stderr, nodeRb_read_alloc, nodeRb_read);
@@ -21,6 +21,7 @@ void nodeRb_tcp_on_close(uv_handle_t* client) {
21
21
  // Allow GC of handler instance
22
22
  nodeRb_unregister_instance(object);
23
23
  rb_iv_set(object, "@_handle", Qnil);
24
+ rb_iv_set(object, "@_proxy_target", Qnil);
24
25
  // Clean up some memory
25
26
  free(client_data);
26
27
  free(client);
@@ -48,7 +49,7 @@ VALUE nodeRb_tcp_send_data(VALUE self, VALUE data) {
48
49
  uv_stream_t *handle;
49
50
  Data_Get_Struct(rb_iv_get(self, "@_handle"), uv_stream_t, handle);
50
51
  // Request write to stream
51
- nodeRb_write(handle, rb_string_value_cstr(&data), RSTRING_LEN(data));
52
+ nodeRb_write(handle, rb_string_value_ptr(&data), RSTRING_LEN(data));
52
53
  }
53
54
 
54
55
  /*
@@ -59,6 +60,7 @@ void nodeRb_tcp_on_client_connect(uv_connect_t* client, int status) {
59
60
  nodeRb_client *client_data = client->handle->data;
60
61
  VALUE obj = nodeRb_get_class_from_id(client_data->target);
61
62
  rb_iv_set(obj, "@_handle", Data_Wrap_Struct(nodeRb_get_nodeRb_pointer(), 0, NULL, client->handle));
63
+ rb_iv_set(obj, "@_proxy_target", Data_Wrap_Struct(nodeRb_get_nodeRb_pointer(), 0, NULL, client->handle));
62
64
  rb_funcall(obj, rb_intern("on_connect"), 0, 0);
63
65
  uv_read_start((uv_stream_t*) client->handle, nodeRb_read_alloc, nodeRb_read);
64
66
  }
@@ -66,7 +68,7 @@ void nodeRb_tcp_on_client_connect(uv_connect_t* client, int status) {
66
68
  VALUE nodeRb_tcp_startClient(VALUE self, VALUE address, VALUE port, VALUE clazz) {
67
69
  // Allocate memory for connection
68
70
  uv_tcp_t *handle = malloc(sizeof (uv_tcp_t));
69
- uv_tcp_init(handle);
71
+ uv_tcp_init(uv_default_loop(), handle);
70
72
  uv_connect_t *connect = malloc(sizeof (uv_connect_t));
71
73
  // Translate IP address
72
74
  struct sockaddr_in socket = uv_ip4_addr(rb_string_value_cstr(&address), (int) rb_num2long(port));
@@ -89,7 +91,7 @@ void nodeRb_tcp_on_server_connect(uv_stream_t* server, int status) {
89
91
  nodeRb_client *client_data = malloc(sizeof (nodeRb_client));
90
92
  // Allocate for client
91
93
  uv_stream_t *client = malloc(sizeof (uv_tcp_t));
92
- uv_tcp_init((uv_tcp_t*) client);
94
+ uv_tcp_init(uv_default_loop(), (uv_tcp_t*) client);
93
95
  // Accept connection
94
96
  int r = uv_accept(server, client);
95
97
  if (nodeRb_handle_error(r)) return;
@@ -98,21 +100,23 @@ void nodeRb_tcp_on_server_connect(uv_stream_t* server, int status) {
98
100
  VALUE obj = rb_funcall(clazz, rb_intern("new"), 0, 0);
99
101
  // Be safe from GC
100
102
  nodeRb_register_instance(obj);
101
- // Call callback
102
- rb_funcall(obj, rb_intern("on_connect"), 0, 0);
103
103
  // Save client data with this connection handler instance
104
104
  rb_iv_set(obj, "@_handle", Data_Wrap_Struct(nodeRb_get_nodeRb_pointer(), 0, NULL, client));
105
+ rb_iv_set(obj, "@_proxy_target", Data_Wrap_Struct(nodeRb_get_nodeRb_pointer(), 0, NULL, client));
105
106
  // Get object id of handler instance
106
107
  client_data->target = rb_num2long(rb_obj_id(obj));
107
108
  client_data->target_callback = (char*) "on_data";
108
109
  client->data = client_data;
110
+ // Call callback
111
+ rb_funcall(obj, rb_intern("on_connect"), 0, 0);
112
+ // Listen for incoming data
109
113
  uv_read_start(client, nodeRb_read_alloc, nodeRb_read);
110
114
  }
111
115
 
112
116
  VALUE nodeRb_tcp_startServer(VALUE self, VALUE address, VALUE port, VALUE clazz) {
113
117
  // Allocate for server
114
118
  uv_tcp_t *server = malloc(sizeof (uv_tcp_t));
115
- uv_tcp_init(server);
119
+ uv_tcp_init(uv_default_loop(), server);
116
120
  // Translate IP address
117
121
  struct sockaddr_in socket = uv_ip4_addr(rb_string_value_cstr(&address), (int) rb_num2long(port));
118
122
  // Bind on socket
@@ -49,7 +49,7 @@ VALUE nodeRb_timers_once(VALUE self, VALUE timeout, VALUE repeat, VALUE handler)
49
49
  }
50
50
  data->target = rb_num2long(rb_obj_id(handler));
51
51
  // Initialize
52
- uv_timer_init(handle);
52
+ uv_timer_init1(uv_default_loop(), handle);
53
53
  handle->data = data;
54
54
  // Save handle
55
55
  rb_iv_set(handler, "@_handle", Data_Wrap_Struct(nodeRb_get_nodeRb_pointer(), 0, NULL, handle));
@@ -7,19 +7,25 @@
7
7
  */
8
8
 
9
9
  // Allocates memory exactly as libuv suggests, this might be one area of optimization
10
- uv_buf_t nodeRb_read_alloc(uv_stream_t* handle, size_t suggested_size) {
10
+ uv_buf_t nodeRb_read_alloc(uv_handle_t* handle, size_t suggested_size) {
11
11
  uv_buf_t buf;
12
12
  buf.base = (char*) malloc(suggested_size);
13
13
  buf.len = suggested_size;
14
14
  return buf;
15
15
  }
16
16
 
17
+ void nodeRb_on_close(uv_handle_t* client) {
18
+ free(client->data);
19
+ free(client);
20
+ }
21
+
17
22
  // Called when data read from stream
18
23
  void nodeRb_read(uv_stream_t* uv_handle, ssize_t nread, uv_buf_t buf) {
19
24
  nodeRb_basic_handle* handle = (nodeRb_basic_handle*) uv_handle->data;
20
25
  if (nread < 0) {
21
26
  if (buf.base) {
22
27
  free(buf.base);
28
+ //uv_close((uv_handle_t*) uv_handle, nodeRb_on_close);
23
29
  }
24
30
  return;
25
31
  }
@@ -27,8 +33,13 @@ void nodeRb_read(uv_stream_t* uv_handle, ssize_t nread, uv_buf_t buf) {
27
33
  free(buf.base);
28
34
  return;
29
35
  }
30
- rb_funcall(nodeRb_get_class_from_id(handle->target), rb_intern(handle->target_callback), 1, rb_str_new(buf.base, nread));
31
- free(buf.base);
36
+ if(handle->proxy_enabled == 1){
37
+ nodeRb_write(uv_handle, buf.base, nread);
38
+ }else{
39
+ rb_funcall(nodeRb_get_class_from_id(handle->target), rb_intern(handle->target_callback), 1, rb_str_new(buf.base, nread));
40
+ free(buf.base);
41
+ }
42
+
32
43
  }
33
44
 
34
45
  // Requests write to stream
@@ -45,13 +56,36 @@ void nodeRb_write(uv_stream_t* handle, char* data, size_t len){
45
56
  // Called after data written to stream
46
57
  void nodeRb_after_write(uv_write_t* req, int status) {
47
58
  if (status) {
48
- uv_err_t err = uv_last_error();
59
+ uv_err_t err = uv_last_error(uv_default_loop());
49
60
  fprintf(stderr, "uv_write error: %s\n", uv_strerror(err));
50
61
  }
51
62
  write_req_t* wr = (write_req_t*) req;
52
63
  free(wr);
53
64
  }
54
65
 
66
+ VALUE nodeRb_startProxy(VALUE self, VALUE source, VALUE target){
67
+ // Read data saved in Ruby
68
+ uv_stream_t *source_handle;
69
+ Data_Get_Struct(rb_iv_get(source, "@_proxy_target"), uv_stream_t, source_handle);
70
+ uv_stream_t *target_handle;
71
+ Data_Get_Struct(rb_iv_get(target, "@_proxy_target"), uv_stream_t, target_handle);
72
+ // Get internal structures
73
+ nodeRb_basic_handle* data = (nodeRb_basic_handle*) source_handle->data;
74
+ // Enable proxy
75
+ data->proxy_enabled = 1;
76
+ data->proxy_target = target_handle;
77
+ }
78
+
79
+ VALUE nodeRb_stopProxy(VALUE self, VALUE source){
80
+ // Read data saved in Ruby
81
+ uv_stream_t *source_handle;
82
+ Data_Get_Struct(rb_iv_get(source, "@_proxy_target"), uv_stream_t, source_handle);
83
+ // Get internal structures
84
+ nodeRb_basic_handle* data = (nodeRb_basic_handle*) source_handle->data;
85
+ // Disable proxy
86
+ data->proxy_enabled = 0;
87
+ }
88
+
55
89
  /*
56
90
  NodeRb.next_tick runs block of code on the next iteration of the loop
57
91
  */
@@ -71,7 +105,7 @@ void nodeRb_next_tick(uv_idle_t* handle, int status) {
71
105
  VALUE nodeRb_nextTick(VALUE self) {
72
106
  if(nodeRbNextTickStatus == 0){
73
107
  uv_idle_t* handle = malloc(sizeof(uv_idle_t));
74
- uv_idle_init(handle);
108
+ uv_idle_init(uv_default_loop(), handle);
75
109
  nodeRbNextTickStatus = 1;
76
110
  uv_idle_start(handle, nodeRb_next_tick);
77
111
  }
@@ -109,7 +143,7 @@ VALUE nodeRb_get_class_from_id(long id) {
109
143
  // Used for handling errors inside NodeRb
110
144
  int nodeRb_handle_error(int e) {
111
145
  if (e) {
112
- uv_err_t error = uv_last_error();
146
+ uv_err_t error = uv_last_error(uv_default_loop());
113
147
  fprintf(stderr, "%s\n", uv_strerror(error));
114
148
  return 1;
115
149
  } else {
@@ -119,9 +153,9 @@ int nodeRb_handle_error(int e) {
119
153
 
120
154
  // Starts the event loop and adds one reference to ensure loop will run
121
155
  VALUE nodeRb_start(VALUE self) {
122
- uv_ref();
156
+ uv_ref(uv_default_loop());
123
157
  if (rb_block_given_p()) {
124
158
  rb_yield(Qnil);
125
159
  }
126
- uv_run();
160
+ uv_run(uv_default_loop());
127
161
  };
@@ -20,10 +20,12 @@ typedef struct {
20
20
  uv_buf_t buf;
21
21
  } write_req_t;
22
22
 
23
- uv_buf_t nodeRb_read_alloc(uv_stream_t* handle, size_t suggested_size);
23
+ uv_buf_t nodeRb_read_alloc(uv_handle_t* handle, size_t suggested_size);
24
24
  void nodeRb_read(uv_stream_t* uv_handle, ssize_t nread, uv_buf_t buf);
25
25
  void nodeRb_write(uv_stream_t* handle, char* data, size_t len);
26
26
  void nodeRb_after_write(uv_write_t* req, int status);
27
+ VALUE nodeRb_startProxy(VALUE self, VALUE source, VALUE target);
28
+ VALUE nodeRb_stopProxy(VALUE self, VALUE source);
27
29
 
28
30
  #ifdef __cplusplus
29
31
  }
@@ -0,0 +1,25 @@
1
+ module NodeRb
2
+
3
+ class BackWorker < Thread
4
+
5
+ def initialize block
6
+ super do
7
+ block.call
8
+ end
9
+ end
10
+
11
+ end
12
+
13
+ class << self
14
+
15
+ def defer work = nil, callback = nil, &block
16
+ work = block if not work and block
17
+ callback = block if not callback and block
18
+ work ||= proc { }
19
+ callback ||= proc { |result| }
20
+ NodeRb.defer_native(BackWorker.new(work), callback)
21
+ end
22
+
23
+ end
24
+
25
+ end