libuv 0.10.0 → 0.10.2

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 (55) hide show
  1. data/.gitignore +17 -17
  2. data/.gitmodules +3 -3
  3. data/.rspec +1 -1
  4. data/.travis.yml +16 -16
  5. data/Gemfile +2 -2
  6. data/LICENSE +23 -23
  7. data/README.md +82 -73
  8. data/Rakefile +31 -31
  9. data/lib/libuv.rb +53 -34
  10. data/lib/libuv/async.rb +47 -33
  11. data/lib/libuv/check.rb +55 -48
  12. data/lib/libuv/error.rb +70 -70
  13. data/lib/libuv/ext/ext.rb +264 -256
  14. data/lib/libuv/ext/platform/darwin_x64.rb +12 -12
  15. data/lib/libuv/ext/platform/linux.rb +7 -7
  16. data/lib/libuv/ext/platform/unix.rb +13 -13
  17. data/lib/libuv/ext/platform/windows.rb +26 -26
  18. data/lib/libuv/ext/tasks.rb +27 -27
  19. data/lib/libuv/ext/tasks/mac.rb +23 -23
  20. data/lib/libuv/ext/tasks/unix.rb +23 -23
  21. data/lib/libuv/ext/tasks/win.rb +11 -11
  22. data/lib/libuv/ext/types.rb +234 -229
  23. data/lib/libuv/file.rb +192 -0
  24. data/lib/libuv/filesystem.rb +233 -0
  25. data/lib/libuv/fs_event.rb +31 -31
  26. data/lib/libuv/handle.rb +85 -81
  27. data/lib/libuv/idle.rb +56 -49
  28. data/lib/libuv/loop.rb +338 -310
  29. data/lib/libuv/{assertions.rb → mixins/assertions.rb} +23 -23
  30. data/lib/libuv/mixins/fs_checks.rb +55 -0
  31. data/lib/libuv/{listener.rb → mixins/listener.rb} +34 -34
  32. data/lib/libuv/{net.rb → mixins/net.rb} +37 -37
  33. data/lib/libuv/{resource.rb → mixins/resource.rb} +27 -27
  34. data/lib/libuv/{stream.rb → mixins/stream.rb} +143 -123
  35. data/lib/libuv/pipe.rb +197 -97
  36. data/lib/libuv/prepare.rb +56 -49
  37. data/lib/libuv/q.rb +1 -1
  38. data/lib/libuv/signal.rb +51 -0
  39. data/lib/libuv/tcp.rb +204 -193
  40. data/lib/libuv/timer.rb +88 -75
  41. data/lib/libuv/tty.rb +37 -34
  42. data/lib/libuv/udp.rb +273 -255
  43. data/lib/libuv/version.rb +3 -3
  44. data/lib/libuv/work.rb +63 -61
  45. data/libuv.gemspec +54 -54
  46. data/spec/async_spec.rb +60 -60
  47. data/spec/cpu_spec.rb +10 -0
  48. data/spec/defer_spec.rb +980 -980
  49. data/spec/filesystem_spec.rb +119 -0
  50. data/spec/idle_spec.rb +56 -56
  51. data/spec/pipe_spec.rb +153 -148
  52. data/spec/tcp_spec.rb +203 -188
  53. metadata +73 -49
  54. checksums.yaml +0 -15
  55. data/lib/libuv/simple_async.rb +0 -28
data/lib/libuv/check.rb CHANGED
@@ -1,49 +1,56 @@
1
- module Libuv
2
- class Check < Handle
3
-
4
-
5
- def initialize(loop, callback = nil, &blk)
6
- @loop = loop
7
- @callback = callback || blk
8
-
9
- check_ptr = ::Libuv::Ext.create_handle(:uv_check)
10
- error = check_result(::Libuv::Ext.check_init(loop.handle, check_ptr))
11
-
12
- super(check_ptr, error)
13
- end
14
-
15
- def start
16
- return if @closed
17
- error = check_result ::Libuv::Ext.check_start(handle, callback(:on_check))
18
- reject(error) if error
19
- end
20
-
21
- def stop
22
- return if @closed
23
- error = check_result ::Libuv::Ext.check_stop(handle)
24
- reject(error) if error
25
- end
26
-
27
- def progress(callback = nil, &blk)
28
- @callback = callback || blk
29
- end
30
-
31
-
32
- private
33
-
34
-
35
- def on_check(handle, status)
36
- e = check_result(status)
37
-
38
- if e
39
- reject(e)
40
- else
41
- begin
42
- @callback.call
43
- rescue Exception => e
44
- @loop.log :error, :check_cb, e
45
- end
46
- end
47
- end
48
- end
1
+ module Libuv
2
+ class Check < Handle
3
+
4
+
5
+ # @param loop [::Libuv::Loop] loop this check will be associated
6
+ # @param callback [Proc] callback to be called on loop check
7
+ def initialize(loop, callback = nil, &blk)
8
+ @loop = loop
9
+ @callback = callback || blk
10
+
11
+ check_ptr = ::Libuv::Ext.create_handle(:uv_check)
12
+ error = check_result(::Libuv::Ext.check_init(loop.handle, check_ptr))
13
+
14
+ super(check_ptr, error)
15
+ end
16
+
17
+ # Enables the check handler.
18
+ def start
19
+ return if @closed
20
+ error = check_result ::Libuv::Ext.check_start(handle, callback(:on_check))
21
+ reject(error) if error
22
+ end
23
+
24
+ # Disables the check handler.
25
+ def stop
26
+ return if @closed
27
+ error = check_result ::Libuv::Ext.check_stop(handle)
28
+ reject(error) if error
29
+ end
30
+
31
+ # Used to update the callback that will be triggered on loop check
32
+ #
33
+ # @param callback [Proc] the callback to be called on loop check
34
+ def progress(callback = nil, &blk)
35
+ @callback = callback || blk
36
+ end
37
+
38
+
39
+ private
40
+
41
+
42
+ def on_check(handle, status)
43
+ e = check_result(status)
44
+
45
+ if e
46
+ reject(e)
47
+ else
48
+ begin
49
+ @callback.call
50
+ rescue Exception => e
51
+ @loop.log :error, :check_cb, e
52
+ end
53
+ end
54
+ end
55
+ end
49
56
  end
data/lib/libuv/error.rb CHANGED
@@ -1,70 +1,70 @@
1
- module Libuv
2
- class Error < StandardError
3
- class EACCES < Error; end
4
- class EADDRINUSE < Error; end
5
- class EADDRNOTAVAIL < Error; end
6
- class EAFNOSUPPORT < Error; end
7
- class EAGAIN < Error; end
8
- class EAI_ADDRFAMILY < Error; end
9
- class EAI_AGAIN < Error; end
10
- class EAI_BADFLAGS < Error; end
11
- class EAI_CANCELED < Error; end
12
- class EAI_FAIL < Error; end
13
- class EAI_FAMILY < Error; end
14
- class EAI_MEMORY < Error; end
15
- class EAI_NODATA < Error; end
16
- class EAI_NONAME < Error; end
17
- class EAI_SERVICE < Error; end
18
- class EAI_SOCKTYPE < Error; end
19
- class EAI_SYSTEM < Error; end
20
- class EALREADY < Error; end
21
- class EBADF < Error; end
22
- class EBUSY < Error; end
23
- class ECANCELED < Error; end
24
- class ECHARSET < Error; end
25
- class ECONNABORTED < Error; end
26
- class ECONNREFUSED < Error; end
27
- class ECONNRESET < Error; end
28
- class EDESTADDRREQ < Error; end
29
- class EEXIST < Error; end
30
- class EFAULT < Error; end
31
- class EHOSTUNREACH < Error; end
32
- class EINTR < Error; end
33
- class EINVAL < Error; end
34
- class EIO < Error; end
35
- class EISCONN < Error; end
36
- class EISDIR < Error; end
37
- class ELOOP < Error; end
38
- class EMFILE < Error; end
39
- class EMSGSIZE < Error; end
40
- class ENAMETOOLONG < Error; end
41
- class ENETDOWN < Error; end
42
- class ENETUNREACH < Error; end
43
- class ENFILE < Error; end
44
- class ENOBUFS < Error; end
45
- class ENODEV < Error; end
46
- class ENOENT < Error; end
47
- class ENOMEM < Error; end
48
- class ENONET < Error; end
49
- class ENOSPC < Error; end
50
- class ENOSYS < Error; end
51
- class ENOTCONN < Error; end
52
- class ENOTDIR < Error; end
53
- class ENOTEMPTY < Error; end
54
- class ENOTSOCK < Error; end
55
- class ENOTSUP < Error; end
56
- class EPERM < Error; end
57
- class EPIPE < Error; end
58
- class EPROTO < Error; end
59
- class EPROTONOSUPPORT < Error; end
60
- class EPROTOTYPE < Error; end
61
- class EROFS < Error; end
62
- class ESHUTDOWN < Error; end
63
- class ESPIPE < Error; end
64
- class ESRCH < Error; end
65
- class ETIMEDOUT < Error; end
66
- class EXDEV < Error; end
67
- class UNKNOWN < Error; end
68
- class EOF < Error; end
69
- end
70
- end
1
+ module Libuv
2
+ class Error < StandardError
3
+ class EACCES < Error; end
4
+ class EADDRINUSE < Error; end
5
+ class EADDRNOTAVAIL < Error; end
6
+ class EAFNOSUPPORT < Error; end
7
+ class EAGAIN < Error; end
8
+ class EAI_ADDRFAMILY < Error; end
9
+ class EAI_AGAIN < Error; end
10
+ class EAI_BADFLAGS < Error; end
11
+ class EAI_CANCELED < Error; end
12
+ class EAI_FAIL < Error; end
13
+ class EAI_FAMILY < Error; end
14
+ class EAI_MEMORY < Error; end
15
+ class EAI_NODATA < Error; end
16
+ class EAI_NONAME < Error; end
17
+ class EAI_SERVICE < Error; end
18
+ class EAI_SOCKTYPE < Error; end
19
+ class EAI_SYSTEM < Error; end
20
+ class EALREADY < Error; end
21
+ class EBADF < Error; end
22
+ class EBUSY < Error; end
23
+ class ECANCELED < Error; end
24
+ class ECHARSET < Error; end
25
+ class ECONNABORTED < Error; end
26
+ class ECONNREFUSED < Error; end
27
+ class ECONNRESET < Error; end
28
+ class EDESTADDRREQ < Error; end
29
+ class EEXIST < Error; end
30
+ class EFAULT < Error; end
31
+ class EHOSTUNREACH < Error; end
32
+ class EINTR < Error; end
33
+ class EINVAL < Error; end
34
+ class EIO < Error; end
35
+ class EISCONN < Error; end
36
+ class EISDIR < Error; end
37
+ class ELOOP < Error; end
38
+ class EMFILE < Error; end
39
+ class EMSGSIZE < Error; end
40
+ class ENAMETOOLONG < Error; end
41
+ class ENETDOWN < Error; end
42
+ class ENETUNREACH < Error; end
43
+ class ENFILE < Error; end
44
+ class ENOBUFS < Error; end
45
+ class ENODEV < Error; end
46
+ class ENOENT < Error; end
47
+ class ENOMEM < Error; end
48
+ class ENONET < Error; end
49
+ class ENOSPC < Error; end
50
+ class ENOSYS < Error; end
51
+ class ENOTCONN < Error; end
52
+ class ENOTDIR < Error; end
53
+ class ENOTEMPTY < Error; end
54
+ class ENOTSOCK < Error; end
55
+ class ENOTSUP < Error; end
56
+ class EPERM < Error; end
57
+ class EPIPE < Error; end
58
+ class EPROTO < Error; end
59
+ class EPROTONOSUPPORT < Error; end
60
+ class EPROTOTYPE < Error; end
61
+ class EROFS < Error; end
62
+ class ESHUTDOWN < Error; end
63
+ class ESPIPE < Error; end
64
+ class ESRCH < Error; end
65
+ class ETIMEDOUT < Error; end
66
+ class EXDEV < Error; end
67
+ class UNKNOWN < Error; end
68
+ class EOF < Error; end
69
+ end
70
+ end
data/lib/libuv/ext/ext.rb CHANGED
@@ -1,257 +1,265 @@
1
- require 'forwardable'
2
- require 'ffi'
3
-
4
- module Libuv
5
- module Ext
6
- extend Forwardable
7
- extend FFI::Library
8
- FFI::DEBUG = 10
9
-
10
-
11
- # In windows each library requires its own module
12
- module LIBC
13
- extend FFI::Library
14
- ffi_lib(FFI::Library::LIBC).first
15
-
16
- attach_function :malloc, [:size_t], :pointer, :blocking => true
17
- attach_function :free, [:pointer], :void, :blocking => true
18
- end
19
- def_delegators :LIBC, :malloc, :free
20
- module_function :malloc, :free
21
-
22
-
23
- begin
24
- # bias the library discovery to a path inside the gem first, then
25
- # to the usual system paths
26
- path_to_internal_libuv = File.dirname(__FILE__) + '/../../../ext'
27
- LIBUV_PATHS = [
28
- path_to_internal_libuv, '/usr/local/lib', '/opt/local/lib', '/usr/lib64'
29
- ].map{|path| "#{path}/libuv.#{FFI::Platform::LIBSUFFIX}"}
30
- libuv = ffi_lib(LIBUV_PATHS + %w{libuv}).first
31
- rescue LoadError
32
- warn <<-WARNING
33
- Unable to load this gem. The libuv library (or DLL) could not be found.
34
- If this is a Windows platform, make sure libuv.dll is on the PATH.
35
- For non-Windows platforms, make sure libuv is located in this search path:
36
- #{LIBUV_PATHS.inspect}
37
- WARNING
38
- exit 255
39
- end
40
-
41
-
42
- require 'libuv/ext/types'
43
-
44
- attach_function :version_number, :uv_version, [], :uint, :blocking => true
45
- attach_function :version_string, :uv_version_string, [], :string, :blocking => true
46
-
47
- attach_function :loop_new, :uv_loop_new, [], :uv_loop_t, :blocking => true
48
- attach_function :loop_delete, :uv_loop_delete, [:uv_loop_t], :void, :blocking => true
49
- attach_function :default_loop, :uv_default_loop, [], :uv_loop_t, :blocking => true
50
- attach_function :run, :uv_run, [:uv_loop_t, :uv_run_mode], :int, :blocking => true
51
- attach_function :stop, :uv_stop, [:uv_loop_t], :void, :blocking => true
52
- #attach_function :run_once, :uv_run_once, [:uv_loop_t], :int
53
- attach_function :update_time, :uv_update_time, [:uv_loop_t], :void, :blocking => true
54
- attach_function :now, :uv_now, [:uv_loop_t], :int64, :blocking => true
55
-
56
- attach_function :backend_timeout, :uv_backend_timeout, [:uv_loop_t], :int, :blocking => true
57
- attach_function :backend_fd, :uv_backend_fd, [:uv_loop_t], :int, :blocking => true
58
-
59
- #attach_function :last_error, :uv_last_error, [:uv_loop_t], :int
60
- attach_function :strerror, :uv_strerror, [:int], :string, :blocking => true
61
- attach_function :err_name, :uv_err_name, [:int], :string, :blocking => true
62
-
63
- attach_function :ref, :uv_ref, [:uv_handle_t], :void, :blocking => true
64
- attach_function :unref, :uv_unref, [:uv_handle_t], :void, :blocking => true
65
- attach_function :has_ref, :uv_has_ref, [:uv_handle_t], :int, :blocking => true
66
- attach_function :is_active, :uv_is_active, [:uv_handle_t], :int, :blocking => true
67
- attach_function :walk, :uv_walk, [:uv_loop_t, :uv_walk_cb, :pointer], :void, :blocking => true
68
- attach_function :close, :uv_close, [:uv_handle_t, :uv_close_cb], :void, :blocking => true
69
- attach_function :is_closing, :uv_is_closing, [:uv_handle_t], :int, :blocking => true
70
-
71
- attach_function :buf_init, :uv_buf_init, [:pointer, :size_t], :uv_buf_t, :blocking => true
72
- attach_function :strlcpy, :uv_strlcpy, [:string, :string, :size_t], :size_t, :blocking => true
73
- attach_function :strlcat, :uv_strlcat, [:string, :string, :size_t], :size_t, :blocking => true
74
-
75
- attach_function :listen, :uv_listen, [:uv_stream_t, :int, :uv_connection_cb], :int, :blocking => true
76
- attach_function :accept, :uv_accept, [:uv_stream_t, :uv_stream_t], :int, :blocking => true
77
- attach_function :read_start, :uv_read_start, [:uv_stream_t, :uv_alloc_cb, :uv_read_cb], :int, :blocking => true
78
- attach_function :read_stop, :uv_read_stop, [:uv_stream_t], :int, :blocking => true
79
- attach_function :read2_start, :uv_read2_start, [:uv_stream_t, :uv_alloc_cb, :uv_read2_cb], :int, :blocking => true
80
- attach_function :write, :uv_write, [:uv_write_t, :uv_stream_t, :pointer, :int, :uv_write_cb], :int, :blocking => true
81
- attach_function :write2, :uv_write2, [:uv_write_t, :uv_stream_t, :pointer, :int, :uv_stream_t, :uv_write_cb], :int, :blocking => true
82
- attach_function :is_readable, :uv_is_readable, [:uv_stream_t], :int, :blocking => true
83
- attach_function :is_writable, :uv_is_writable, [:uv_stream_t], :int, :blocking => true
84
- attach_function :shutdown, :uv_shutdown, [:uv_shutdown_t, :uv_stream_t, :uv_shutdown_cb], :int, :blocking => true
85
-
86
- attach_function :tcp_init, :uv_tcp_init, [:uv_loop_t, :uv_tcp_t], :int, :blocking => true
87
- #attach_function :tcp_open, :uv_tcp_open, [:uv_tcp_t, :uv_os_sock_t], :int
88
- attach_function :tcp_nodelay, :uv_tcp_nodelay, [:uv_tcp_t, :int], :int, :blocking => true
89
- attach_function :tcp_keepalive, :uv_tcp_keepalive, [:uv_tcp_t, :int, :uint], :int, :blocking => true
90
- attach_function :tcp_simultaneous_accepts, :uv_tcp_simultaneous_accepts, [:uv_tcp_t, :int], :int, :blocking => true
91
- attach_function :tcp_bind, :uv_tcp_bind, [:uv_tcp_t, :sockaddr_in], :int, :blocking => true
92
- attach_function :tcp_bind6, :uv_tcp_bind6, [:uv_tcp_t, :sockaddr_in6], :int, :blocking => true
93
- attach_function :tcp_getsockname, :uv_tcp_getsockname, [:uv_tcp_t, :pointer, :pointer], :int, :blocking => true
94
- attach_function :tcp_getpeername, :uv_tcp_getpeername, [:uv_tcp_t, :pointer, :pointer], :int, :blocking => true
95
- attach_function :tcp_connect, :uv_tcp_connect, [:uv_connect_t, :uv_tcp_t, :sockaddr_in, :uv_connect_cb], :int, :blocking => true
96
- attach_function :tcp_connect6, :uv_tcp_connect6, [:uv_connect_t, :uv_tcp_t, :sockaddr_in6, :uv_connect_cb], :int, :blocking => true
97
-
98
- attach_function :udp_init, :uv_udp_init, [:uv_loop_t, :uv_udp_t], :int, :blocking => true
99
- attach_function :udp_bind, :uv_udp_bind, [:uv_udp_t, :sockaddr_in, :uint], :int, :blocking => true
100
- attach_function :udp_bind6, :uv_udp_bind6, [:uv_udp_t, :sockaddr_in6, :uint], :int, :blocking => true
101
- attach_function :udp_getsockname, :uv_udp_getsockname, [:uv_udp_t, :pointer, :pointer], :int, :blocking => true
102
- attach_function :udp_set_membership, :uv_udp_set_membership, [:uv_udp_t, :string, :string, :uv_membership], :int, :blocking => true
103
- attach_function :udp_set_multicast_loop, :uv_udp_set_multicast_loop, [:uv_udp_t, :int], :int, :blocking => true
104
- attach_function :udp_set_multicast_ttl, :uv_udp_set_multicast_ttl, [:uv_udp_t, :int], :int, :blocking => true
105
- attach_function :udp_set_broadcast, :uv_udp_set_broadcast, [:uv_udp_t, :int], :int, :blocking => true
106
- attach_function :udp_set_ttl, :uv_udp_set_ttl, [:uv_udp_t, :int], :int, :blocking => true
107
- attach_function :udp_send, :uv_udp_send, [:uv_udp_send_t, :uv_udp_t, :pointer, :int, :sockaddr_in, :uv_udp_send_cb], :int, :blocking => true
108
- attach_function :udp_send6, :uv_udp_send6, [:uv_udp_send_t, :uv_udp_t, :pointer, :int, :sockaddr_in6, :uv_udp_send_cb], :int, :blocking => true
109
- attach_function :udp_recv_start, :uv_udp_recv_start, [:uv_udp_t, :uv_alloc_cb, :uv_udp_recv_cb], :int, :blocking => true
110
- attach_function :udp_recv_stop, :uv_udp_recv_stop, [:uv_udp_t], :int, :blocking => true
111
-
112
- attach_function :tty_init, :uv_tty_init, [:uv_loop_t, :uv_tty_t, :uv_file, :int], :int, :blocking => true
113
- attach_function :tty_set_mode, :uv_tty_set_mode, [:uv_tty_t, :int], :int, :blocking => true
114
- attach_function :tty_reset_mode, :uv_tty_reset_mode, [], :void, :blocking => true
115
- attach_function :tty_get_winsize, :uv_tty_get_winsize, [:uv_tty_t, :pointer, :pointer], :int, :blocking => true
116
-
117
- attach_function :guess_handle, :uv_guess_handle, [:uv_file], :uv_handle_type, :blocking => true
118
-
119
- attach_function :pipe_init, :uv_pipe_init, [:uv_loop_t, :uv_pipe_t, :int], :int, :blocking => true
120
- attach_function :pipe_open, :uv_pipe_open, [:uv_pipe_t, :uv_file], :void, :blocking => true
121
- attach_function :pipe_bind, :uv_pipe_bind, [:uv_pipe_t, :string], :int, :blocking => true
122
- attach_function :pipe_connect, :uv_pipe_connect, [:uv_connect_t, :uv_pipe_t, :string, :uv_connect_cb], :void, :blocking => true
123
- attach_function :pipe_pending_instances, :uv_pipe_pending_instances, [:uv_pipe_t, :int], :void, :blocking => true
124
-
125
- attach_function :prepare_init, :uv_prepare_init, [:uv_loop_t, :uv_prepare_t], :int, :blocking => true
126
- attach_function :prepare_start, :uv_prepare_start, [:uv_prepare_t, :uv_prepare_cb], :int, :blocking => true
127
- attach_function :prepare_stop, :uv_prepare_stop, [:uv_prepare_t], :int, :blocking => true
128
-
129
- attach_function :check_init, :uv_check_init, [:uv_loop_t, :uv_check_t], :int, :blocking => true
130
- attach_function :check_start, :uv_check_start, [:uv_check_t, :uv_check_cb], :int, :blocking => true
131
- attach_function :check_stop, :uv_check_stop, [:uv_check_t], :int, :blocking => true
132
-
133
- attach_function :idle_init, :uv_idle_init, [:uv_loop_t, :uv_idle_t], :int, :blocking => true
134
- attach_function :idle_start, :uv_idle_start, [:uv_idle_t, :uv_idle_cb], :int, :blocking => true
135
- attach_function :idle_stop, :uv_idle_stop, [:uv_idle_t], :int, :blocking => true
136
-
137
- attach_function :async_init, :uv_async_init, [:uv_loop_t, :uv_async_t, :uv_async_cb], :int, :blocking => true
138
- attach_function :async_send, :uv_async_send, [:uv_async_t], :int, :blocking => true
139
-
140
- attach_function :timer_init, :uv_timer_init, [:uv_loop_t, :uv_timer_t], :int, :blocking => true
141
- attach_function :timer_start, :uv_timer_start, [:uv_timer_t, :uv_timer_cb, :int64_t, :int64_t], :int, :blocking => true
142
- attach_function :timer_stop, :uv_timer_stop, [:uv_timer_t], :int, :blocking => true
143
- attach_function :timer_again, :uv_timer_again, [:uv_timer_t], :int, :blocking => true
144
- attach_function :timer_set_repeat, :uv_timer_set_repeat, [:uv_timer_t, :int64_t], :void, :blocking => true
145
- attach_function :timer_get_repeat, :uv_timer_get_repeat, [:uv_timer_t], :int64_t, :blocking => true
146
-
147
- #attach_function :ares_init_options, :uv_ares_init_options, [:uv_loop_t, :ares_channel, :ares_options, :int], :int
148
- #attach_function :ares_destroy, :uv_ares_destroy, [:uv_loop_t, :ares_channel], :void
149
-
150
- attach_function :getaddrinfo, :uv_getaddrinfo, [:uv_loop_t, :uv_getaddrinfo_t, :uv_getaddrinfo_cb, :string, :string, :addrinfo], :int, :blocking => true
151
- attach_function :freeaddrinfo, :uv_freeaddrinfo, [:addrinfo], :void, :blocking => true
152
-
153
- attach_function :spawn, :uv_spawn, [:uv_loop_t, :uv_process_t, :uv_options_t], :int, :blocking => true
154
- attach_function :process_kill, :uv_process_kill, [:uv_process_t, :int], :int, :blocking => true
155
- attach_function :kill, :uv_kill, [:int, :int], :int, :blocking => true
156
- attach_function :queue_work, :uv_queue_work, [:uv_loop_t, :uv_work_t, :uv_work_cb, :uv_after_work_cb], :int, :blocking => true
157
- attach_function :cancel, :uv_cancel, [:pointer], :int, :blocking => true
158
- attach_function :setup_args, :uv_setup_args, [:int, :varargs], :pointer, :blocking => true
159
- attach_function :get_process_title, :uv_get_process_title, [:pointer, :size_t], :int, :blocking => true
160
- attach_function :set_process_title, :uv_set_process_title, [:string], :int, :blocking => true
161
- attach_function :resident_set_memory, :uv_resident_set_memory, [:size_t], :int, :blocking => true
162
-
163
- attach_function :uptime, :uv_uptime, [:pointer], :int, :blocking => true
164
- attach_function :cpu_info, :uv_cpu_info, [:uv_cpu_info_t, :pointer], :int, :blocking => true
165
- attach_function :loadavg, :uv_loadavg, [:pointer], :void, :blocking => true
166
- attach_function :free_cpu_info, :uv_free_cpu_info, [:uv_cpu_info_t, :int], :void, :blocking => true
167
- attach_function :interface_addresses, :uv_interface_addresses, [:uv_interface_address_t, :pointer], :int, :blocking => true
168
- attach_function :free_interface_addresses, :uv_free_interface_addresses, [:uv_interface_address_t, :int], :void, :blocking => true
169
-
170
- #attach_function :fs_req_result, :uv_fs_req_result, [:uv_fs_t], :ssize_t
171
- #attach_function :fs_req_stat, :uv_fs_req_stat, [:uv_fs_t], :uv_fs_stat_t
172
- #attach_function :fs_req_pointer, :uv_fs_req_pointer, [:uv_fs_t], :pointer
173
-
174
- attach_function :fs_req_cleanup, :uv_fs_req_cleanup, [:uv_fs_t], :void, :blocking => true
175
- attach_function :fs_close, :uv_fs_close, [:uv_loop_t, :uv_fs_t, :uv_file, :uv_fs_cb], :int, :blocking => true
176
- attach_function :fs_open, :uv_fs_open, [:uv_loop_t, :uv_fs_t, :string, :int, :int, :uv_fs_cb], :int, :blocking => true
177
- attach_function :fs_read, :uv_fs_read, [:uv_loop_t, :uv_fs_t, :uv_file, :string, :size_t, :off_t, :uv_fs_cb], :int, :blocking => true
178
- attach_function :fs_unlink, :uv_fs_unlink, [:uv_loop_t, :uv_fs_t, :string, :uv_fs_cb], :int, :blocking => true
179
- attach_function :fs_write, :uv_fs_write, [:uv_loop_t, :uv_fs_t, :uv_file, :string, :size_t, :off_t, :uv_fs_cb], :int, :blocking => true
180
- attach_function :fs_mkdir, :uv_fs_mkdir, [:uv_loop_t, :uv_fs_t, :string, :int, :uv_fs_cb], :int, :blocking => true
181
- attach_function :fs_rmdir, :uv_fs_rmdir, [:uv_loop_t, :uv_fs_t, :string, :uv_fs_cb], :int, :blocking => true
182
- attach_function :fs_readdir, :uv_fs_readdir, [:uv_loop_t, :uv_fs_t, :string, :int, :uv_fs_cb], :int, :blocking => true
183
- attach_function :fs_stat, :uv_fs_stat, [:uv_loop_t, :uv_fs_t, :string, :uv_fs_cb], :int, :blocking => true
184
- attach_function :fs_fstat, :uv_fs_fstat, [:uv_loop_t, :uv_fs_t, :uv_file, :uv_fs_cb], :int, :blocking => true
185
- attach_function :fs_rename, :uv_fs_rename, [:uv_loop_t, :uv_fs_t, :string, :string, :uv_fs_cb], :int, :blocking => true
186
- attach_function :fs_fsync, :uv_fs_fsync, [:uv_loop_t, :uv_fs_t, :uv_file, :uv_fs_cb], :int, :blocking => true
187
- attach_function :fs_fdatasync, :uv_fs_fdatasync, [:uv_loop_t, :uv_fs_t, :uv_file, :uv_fs_cb], :int, :blocking => true
188
- attach_function :fs_ftruncate, :uv_fs_ftruncate, [:uv_loop_t, :uv_fs_t, :uv_file, :off_t, :uv_fs_cb], :int, :blocking => true
189
- attach_function :fs_sendfile, :uv_fs_sendfile, [:uv_loop_t, :uv_fs_t, :uv_file, :uv_file, :off_t, :size_t, :uv_fs_cb], :int, :blocking => true
190
- attach_function :fs_chmod, :uv_fs_chmod, [:uv_loop_t, :uv_fs_t, :string, :int, :uv_fs_cb], :int, :blocking => true
191
- attach_function :fs_utime, :uv_fs_utime, [:uv_loop_t, :uv_fs_t, :string, :double, :double, :uv_fs_cb], :int, :blocking => true
192
- attach_function :fs_futime, :uv_fs_futime, [:uv_loop_t, :uv_fs_t, :uv_file, :double, :double, :uv_fs_cb], :int, :blocking => true
193
- attach_function :fs_lstat, :uv_fs_lstat, [:uv_loop_t, :uv_fs_t, :string, :uv_fs_cb], :int, :blocking => true
194
- attach_function :fs_link, :uv_fs_link, [:uv_loop_t, :uv_fs_t, :string, :string, :uv_fs_cb], :int, :blocking => true
195
- attach_function :fs_symlink, :uv_fs_symlink, [:uv_loop_t, :uv_fs_t, :string, :string, :int, :uv_fs_cb], :int, :blocking => true
196
- attach_function :fs_readlink, :uv_fs_readlink, [:uv_loop_t, :uv_fs_t, :string, :uv_fs_cb], :int, :blocking => true
197
- attach_function :fs_fchmod, :uv_fs_fchmod, [:uv_loop_t, :uv_fs_t, :uv_file, :int, :uv_fs_cb], :int, :blocking => true
198
- attach_function :fs_chown, :uv_fs_chown, [:uv_loop_t, :uv_fs_t, :string, :int, :int, :uv_fs_cb], :int, :blocking => true
199
- attach_function :fs_fchown, :uv_fs_fchown, [:uv_loop_t, :uv_fs_t, :uv_file, :int, :int, :uv_fs_cb], :int, :blocking => true
200
-
201
- attach_function :fs_event_init, :uv_fs_event_init, [:uv_loop_t, :uv_fs_event_t, :string, :uv_fs_event_cb, :int], :int, :blocking => true
202
-
203
- attach_function :ip4_addr, :uv_ip4_addr, [:string, :int], :sockaddr_in, :blocking => true
204
- attach_function :ip6_addr, :uv_ip6_addr, [:string, :int], :sockaddr_in6, :blocking => true
205
- attach_function :ip4_name, :uv_ip4_name, [SockaddrIn.by_ref, :pointer, :size_t], :int, :blocking => true
206
- attach_function :ip6_name, :uv_ip6_name, [SockaddrIn6.by_ref, :pointer, :size_t], :int, :blocking => true
207
- #TODO:: attach_function :inet_ntop, :uv_inet_ntop, [:int, :pointer, ]
208
- #TODO:: attach_function :uv_inet_pton
209
-
210
- attach_function :exepath, :uv_exepath, [:pointer, :size_t], :int, :blocking => true
211
- attach_function :cwd, :uv_cwd, [:pointer, :size_t], :int, :blocking => true
212
- attach_function :chdir, :uv_chdir, [:string], :int, :blocking => true
213
- attach_function :get_free_memory, :uv_get_free_memory, [], :uint64, :blocking => true
214
- attach_function :get_total_memory, :uv_get_total_memory, [], :uint64, :blocking => true
215
- attach_function :hrtime, :uv_hrtime, [], :uint64, :blocking => true
216
- attach_function :disable_stdio_inheritance, :uv_disable_stdio_inheritance, [], :void, :blocking => true
217
- attach_function :dlopen, :uv_dlopen, [:string, :uv_lib_t], :int, :blocking => true
218
- attach_function :dlclose, :uv_dlclose, [:uv_lib_t], :int, :blocking => true
219
- attach_function :dlsym, :uv_dlsym, [:uv_lib_t, :string, :pointer], :int, :blocking => true
220
- #attach_function :dlerror, :uv_dlerror, [:uv_lib_t], :string
221
- #attach_function :dlerror_free, :uv_dlerror_free, [:uv_lib_t, :string], :void
222
-
223
- attach_function :mutex_init, :uv_mutex_init, [:uv_mutex_t], :int, :blocking => true
224
- attach_function :mutex_destroy, :uv_mutex_destroy, [:uv_mutex_t], :void, :blocking => true
225
- attach_function :mutex_lock, :uv_mutex_lock, [:uv_mutex_t], :void, :blocking => true
226
- attach_function :mutex_trylock, :uv_mutex_trylock, [:uv_mutex_t], :int, :blocking => true
227
- attach_function :mutex_unlock, :uv_mutex_unlock, [:uv_mutex_t], :void, :blocking => true
228
-
229
- attach_function :rwlock_init, :uv_rwlock_init, [:uv_rwlock_t], :int, :blocking => true
230
- attach_function :rwlock_destroy, :uv_rwlock_destroy, [:uv_rwlock_t], :void, :blocking => true
231
- attach_function :rwlock_rdlock, :uv_rwlock_rdlock, [:uv_rwlock_t], :void, :blocking => true
232
- attach_function :rwlock_tryrdlock, :uv_rwlock_tryrdlock, [:uv_rwlock_t], :int, :blocking => true
233
- attach_function :rwlock_rdunlock, :uv_rwlock_rdunlock, [:uv_rwlock_t], :void, :blocking => true
234
- attach_function :rwlock_wrlock, :uv_rwlock_wrlock, [:uv_rwlock_t], :void, :blocking => true
235
- attach_function :rwlock_trywrlock, :uv_rwlock_trywrlock, [:uv_rwlock_t], :int, :blocking => true
236
- attach_function :rwlock_wrunlock, :uv_rwlock_wrunlock, [:uv_rwlock_t], :void, :blocking => true
237
-
238
- attach_function :once, :uv_once, [:uv_once_t, :uv_cb], :void, :blocking => true
239
- attach_function :thread_create, :uv_thread_create, [:uv_thread_t, :uv_cb], :int, :blocking => true
240
- attach_function :thread_join, :uv_thread_join, [:uv_thread_t], :int, :blocking => true
241
-
242
- attach_function :handle_size, :uv_handle_size, [:uv_handle_type], :size_t, :blocking => true
243
- attach_function :req_size, :uv_req_size, [:uv_req_type], :size_t, :blocking => true
244
-
245
- # This function is attached differently in windows - see ./types/windows.rb
246
- attach_function :ntohs, [:ushort], :ushort, :blocking => true unless FFI::Platform.windows?
247
-
248
-
249
- def self.create_handle(type)
250
- LIBC.malloc(Ext.handle_size(type))
251
- end
252
-
253
- def self.create_request(type)
254
- LIBC.malloc(Ext.req_size(type))
255
- end
256
- end
1
+ require 'forwardable'
2
+ require 'ffi'
3
+
4
+ module Libuv
5
+ module Ext
6
+ extend Forwardable
7
+ extend FFI::Library
8
+ FFI::DEBUG = 10
9
+
10
+
11
+ # In windows each library requires its own module
12
+ module LIBC
13
+ extend FFI::Library
14
+ ffi_lib(FFI::Library::LIBC).first
15
+
16
+ attach_function :malloc, [:size_t], :pointer, :blocking => true
17
+ attach_function :free, [:pointer], :void, :blocking => true
18
+ end
19
+ def_delegators :LIBC, :malloc, :free
20
+ module_function :malloc, :free
21
+
22
+
23
+ begin
24
+ # bias the library discovery to a path inside the gem first, then
25
+ # to the usual system paths
26
+ path_to_internal_libuv = File.dirname(__FILE__) + '/../../../ext'
27
+ LIBUV_PATHS = [
28
+ path_to_internal_libuv, '/usr/local/lib', '/opt/local/lib', '/usr/lib64'
29
+ ].map{|path| "#{path}/libuv.#{FFI::Platform::LIBSUFFIX}"}
30
+ libuv = ffi_lib(LIBUV_PATHS + %w{libuv}).first
31
+ rescue LoadError
32
+ warn <<-WARNING
33
+ Unable to load this gem. The libuv library (or DLL) could not be found.
34
+ If this is a Windows platform, make sure libuv.dll is on the PATH.
35
+ For non-Windows platforms, make sure libuv is located in this search path:
36
+ #{LIBUV_PATHS.inspect}
37
+ WARNING
38
+ exit 255
39
+ end
40
+
41
+
42
+ require 'libuv/ext/types'
43
+
44
+
45
+ attach_function :handle_size, :uv_handle_size, [:uv_handle_type], :size_t, :blocking => true
46
+ attach_function :req_size, :uv_req_size, [:uv_req_type], :size_t, :blocking => true
47
+
48
+
49
+ # We need to calculate where the FS request data is located using req_size
50
+ class FsRequest < FFI::Struct
51
+ layout :req_data, [:uint8, Ext.req_size(:uv_req)],
52
+ :fs_type, :uv_fs_type,
53
+ :loop, :uv_loop_t,
54
+ :fs_callback, :pointer,
55
+ :result, :ssize_t,
56
+ :ptr, :pointer,
57
+ :path, :string,
58
+ :stat, UvStat
59
+ end
60
+ callback :uv_fs_cb, [FsRequest.by_ref], :void
61
+
62
+
63
+ attach_function :version_number, :uv_version, [], :uint, :blocking => true
64
+ attach_function :version_string, :uv_version_string, [], :string, :blocking => true
65
+
66
+ attach_function :loop_new, :uv_loop_new, [], :uv_loop_t, :blocking => true
67
+ attach_function :loop_delete, :uv_loop_delete, [:uv_loop_t], :void, :blocking => true
68
+ attach_function :default_loop, :uv_default_loop, [], :uv_loop_t, :blocking => true
69
+ attach_function :run, :uv_run, [:uv_loop_t, :uv_run_mode], :int, :blocking => true
70
+ attach_function :stop, :uv_stop, [:uv_loop_t], :void, :blocking => true
71
+ attach_function :update_time, :uv_update_time, [:uv_loop_t], :void, :blocking => true
72
+ attach_function :now, :uv_now, [:uv_loop_t], :int64, :blocking => true
73
+
74
+ attach_function :backend_timeout, :uv_backend_timeout, [:uv_loop_t], :int, :blocking => true
75
+ attach_function :backend_fd, :uv_backend_fd, [:uv_loop_t], :int, :blocking => true
76
+
77
+ attach_function :strerror, :uv_strerror, [:int], :string, :blocking => true
78
+ attach_function :err_name, :uv_err_name, [:int], :string, :blocking => true
79
+
80
+ attach_function :ref, :uv_ref, [:uv_handle_t], :void, :blocking => true
81
+ attach_function :unref, :uv_unref, [:uv_handle_t], :void, :blocking => true
82
+ attach_function :has_ref, :uv_has_ref, [:uv_handle_t], :int, :blocking => true
83
+ attach_function :is_active, :uv_is_active, [:uv_handle_t], :int, :blocking => true
84
+ attach_function :walk, :uv_walk, [:uv_loop_t, :uv_walk_cb, :pointer], :void, :blocking => true
85
+ attach_function :close, :uv_close, [:uv_handle_t, :uv_close_cb], :void, :blocking => true
86
+ attach_function :is_closing, :uv_is_closing, [:uv_handle_t], :int, :blocking => true
87
+
88
+ attach_function :buf_init, :uv_buf_init, [:pointer, :size_t], :uv_buf_t, :blocking => true
89
+ attach_function :strlcpy, :uv_strlcpy, [:string, :string, :size_t], :size_t, :blocking => true
90
+ attach_function :strlcat, :uv_strlcat, [:string, :string, :size_t], :size_t, :blocking => true
91
+
92
+ attach_function :listen, :uv_listen, [:uv_stream_t, :int, :uv_connection_cb], :int, :blocking => true
93
+ attach_function :accept, :uv_accept, [:uv_stream_t, :uv_stream_t], :int, :blocking => true
94
+ attach_function :read_start, :uv_read_start, [:uv_stream_t, :uv_alloc_cb, :uv_read_cb], :int, :blocking => true
95
+ attach_function :read_stop, :uv_read_stop, [:uv_stream_t], :int, :blocking => true
96
+ attach_function :read2_start, :uv_read2_start, [:uv_stream_t, :uv_alloc_cb, :uv_read2_cb], :int, :blocking => true
97
+ attach_function :write, :uv_write, [:uv_write_t, :uv_stream_t, :pointer, :int, :uv_write_cb], :int, :blocking => true
98
+ attach_function :write2, :uv_write2, [:uv_write_t, :uv_stream_t, :pointer, :int, :uv_stream_t, :uv_write_cb], :int, :blocking => true
99
+ attach_function :is_readable, :uv_is_readable, [:uv_stream_t], :int, :blocking => true
100
+ attach_function :is_writable, :uv_is_writable, [:uv_stream_t], :int, :blocking => true
101
+ attach_function :shutdown, :uv_shutdown, [:uv_shutdown_t, :uv_stream_t, :uv_shutdown_cb], :int, :blocking => true
102
+
103
+ attach_function :tcp_init, :uv_tcp_init, [:uv_loop_t, :uv_tcp_t], :int, :blocking => true
104
+ #attach_function :tcp_open, :uv_tcp_open, [:uv_tcp_t, :uv_os_sock_t], :int, :blocking => true
105
+ attach_function :tcp_nodelay, :uv_tcp_nodelay, [:uv_tcp_t, :int], :int, :blocking => true
106
+ attach_function :tcp_keepalive, :uv_tcp_keepalive, [:uv_tcp_t, :int, :uint], :int, :blocking => true
107
+ attach_function :tcp_simultaneous_accepts, :uv_tcp_simultaneous_accepts, [:uv_tcp_t, :int], :int, :blocking => true
108
+ attach_function :tcp_bind, :uv_tcp_bind, [:uv_tcp_t, :sockaddr_in], :int, :blocking => true
109
+ attach_function :tcp_bind6, :uv_tcp_bind6, [:uv_tcp_t, :sockaddr_in6], :int, :blocking => true
110
+ attach_function :tcp_getsockname, :uv_tcp_getsockname, [:uv_tcp_t, :pointer, :pointer], :int, :blocking => true
111
+ attach_function :tcp_getpeername, :uv_tcp_getpeername, [:uv_tcp_t, :pointer, :pointer], :int, :blocking => true
112
+ attach_function :tcp_connect, :uv_tcp_connect, [:uv_connect_t, :uv_tcp_t, :sockaddr_in, :uv_connect_cb], :int, :blocking => true
113
+ attach_function :tcp_connect6, :uv_tcp_connect6, [:uv_connect_t, :uv_tcp_t, :sockaddr_in6, :uv_connect_cb], :int, :blocking => true
114
+
115
+ attach_function :udp_init, :uv_udp_init, [:uv_loop_t, :uv_udp_t], :int, :blocking => true
116
+ #attach_function :udp_open, :uv_udp_open, [:uv_udp_t, :uv_os_sock_t], :int, :blocking => true
117
+ attach_function :udp_bind, :uv_udp_bind, [:uv_udp_t, :sockaddr_in, :uint], :int, :blocking => true
118
+ attach_function :udp_bind6, :uv_udp_bind6, [:uv_udp_t, :sockaddr_in6, :uint], :int, :blocking => true
119
+ attach_function :udp_getsockname, :uv_udp_getsockname, [:uv_udp_t, :pointer, :pointer], :int, :blocking => true
120
+ attach_function :udp_set_membership, :uv_udp_set_membership, [:uv_udp_t, :string, :string, :uv_membership], :int, :blocking => true
121
+ attach_function :udp_set_multicast_loop, :uv_udp_set_multicast_loop, [:uv_udp_t, :int], :int, :blocking => true
122
+ attach_function :udp_set_multicast_ttl, :uv_udp_set_multicast_ttl, [:uv_udp_t, :int], :int, :blocking => true
123
+ attach_function :udp_set_broadcast, :uv_udp_set_broadcast, [:uv_udp_t, :int], :int, :blocking => true
124
+ attach_function :udp_set_ttl, :uv_udp_set_ttl, [:uv_udp_t, :int], :int, :blocking => true
125
+ attach_function :udp_send, :uv_udp_send, [:uv_udp_send_t, :uv_udp_t, :pointer, :int, :sockaddr_in, :uv_udp_send_cb], :int, :blocking => true
126
+ attach_function :udp_send6, :uv_udp_send6, [:uv_udp_send_t, :uv_udp_t, :pointer, :int, :sockaddr_in6, :uv_udp_send_cb], :int, :blocking => true
127
+ attach_function :udp_recv_start, :uv_udp_recv_start, [:uv_udp_t, :uv_alloc_cb, :uv_udp_recv_cb], :int, :blocking => true
128
+ attach_function :udp_recv_stop, :uv_udp_recv_stop, [:uv_udp_t], :int, :blocking => true
129
+
130
+ attach_function :tty_init, :uv_tty_init, [:uv_loop_t, :uv_tty_t, :uv_file, :int], :int, :blocking => true
131
+ attach_function :tty_set_mode, :uv_tty_set_mode, [:uv_tty_t, :int], :int, :blocking => true
132
+ attach_function :tty_reset_mode, :uv_tty_reset_mode, [], :void, :blocking => true
133
+ attach_function :tty_get_winsize, :uv_tty_get_winsize, [:uv_tty_t, :pointer, :pointer], :int, :blocking => true
134
+
135
+ attach_function :guess_handle, :uv_guess_handle, [:uv_file], :uv_handle_type, :blocking => true
136
+
137
+ attach_function :pipe_init, :uv_pipe_init, [:uv_loop_t, :uv_pipe_t, :int], :int, :blocking => true
138
+ attach_function :pipe_open, :uv_pipe_open, [:uv_pipe_t, :uv_file], :void, :blocking => true
139
+ attach_function :pipe_bind, :uv_pipe_bind, [:uv_pipe_t, :string], :int, :blocking => true
140
+ attach_function :pipe_connect, :uv_pipe_connect, [:uv_connect_t, :uv_pipe_t, :string, :uv_connect_cb], :void, :blocking => true
141
+ attach_function :pipe_pending_instances, :uv_pipe_pending_instances, [:uv_pipe_t, :int], :void, :blocking => true
142
+
143
+ attach_function :prepare_init, :uv_prepare_init, [:uv_loop_t, :uv_prepare_t], :int, :blocking => true
144
+ attach_function :prepare_start, :uv_prepare_start, [:uv_prepare_t, :uv_prepare_cb], :int, :blocking => true
145
+ attach_function :prepare_stop, :uv_prepare_stop, [:uv_prepare_t], :int, :blocking => true
146
+
147
+ attach_function :check_init, :uv_check_init, [:uv_loop_t, :uv_check_t], :int, :blocking => true
148
+ attach_function :check_start, :uv_check_start, [:uv_check_t, :uv_check_cb], :int, :blocking => true
149
+ attach_function :check_stop, :uv_check_stop, [:uv_check_t], :int, :blocking => true
150
+
151
+ attach_function :idle_init, :uv_idle_init, [:uv_loop_t, :uv_idle_t], :int, :blocking => true
152
+ attach_function :idle_start, :uv_idle_start, [:uv_idle_t, :uv_idle_cb], :int, :blocking => true
153
+ attach_function :idle_stop, :uv_idle_stop, [:uv_idle_t], :int, :blocking => true
154
+
155
+ attach_function :async_init, :uv_async_init, [:uv_loop_t, :uv_async_t, :uv_async_cb], :int, :blocking => true
156
+ attach_function :async_send, :uv_async_send, [:uv_async_t], :int, :blocking => true
157
+
158
+ attach_function :timer_init, :uv_timer_init, [:uv_loop_t, :uv_timer_t], :int, :blocking => true
159
+ attach_function :timer_start, :uv_timer_start, [:uv_timer_t, :uv_timer_cb, :int64_t, :int64_t], :int, :blocking => true
160
+ attach_function :timer_stop, :uv_timer_stop, [:uv_timer_t], :int, :blocking => true
161
+ attach_function :timer_again, :uv_timer_again, [:uv_timer_t], :int, :blocking => true
162
+ attach_function :timer_set_repeat, :uv_timer_set_repeat, [:uv_timer_t, :int64_t], :void, :blocking => true
163
+ attach_function :timer_get_repeat, :uv_timer_get_repeat, [:uv_timer_t], :int64_t, :blocking => true
164
+
165
+ attach_function :getaddrinfo, :uv_getaddrinfo, [:uv_loop_t, :uv_getaddrinfo_t, :uv_getaddrinfo_cb, :string, :string, :addrinfo], :int, :blocking => true
166
+ attach_function :freeaddrinfo, :uv_freeaddrinfo, [:addrinfo], :void, :blocking => true
167
+
168
+ attach_function :spawn, :uv_spawn, [:uv_loop_t, :uv_process_t, :uv_options_t], :int, :blocking => true
169
+ attach_function :process_kill, :uv_process_kill, [:uv_process_t, :int], :int, :blocking => true
170
+ attach_function :kill, :uv_kill, [:int, :int], :int, :blocking => true
171
+ attach_function :queue_work, :uv_queue_work, [:uv_loop_t, :uv_work_t, :uv_work_cb, :uv_after_work_cb], :int, :blocking => true
172
+ attach_function :cancel, :uv_cancel, [:pointer], :int, :blocking => true
173
+ attach_function :setup_args, :uv_setup_args, [:int, :varargs], :pointer, :blocking => true
174
+ attach_function :get_process_title, :uv_get_process_title, [:pointer, :size_t], :int, :blocking => true
175
+ attach_function :set_process_title, :uv_set_process_title, [:string], :int, :blocking => true
176
+ attach_function :resident_set_memory, :uv_resident_set_memory, [:size_t], :int, :blocking => true
177
+
178
+ attach_function :uptime, :uv_uptime, [:pointer], :int, :blocking => true
179
+ attach_function :cpu_info, :uv_cpu_info, [:uv_cpu_info_t, :pointer], :int, :blocking => true
180
+ attach_function :loadavg, :uv_loadavg, [:pointer], :void, :blocking => true
181
+ attach_function :free_cpu_info, :uv_free_cpu_info, [:uv_cpu_info_t, :int], :void, :blocking => true
182
+ attach_function :interface_addresses, :uv_interface_addresses, [:uv_interface_address_t, :pointer], :int, :blocking => true
183
+ attach_function :free_interface_addresses, :uv_free_interface_addresses, [:uv_interface_address_t, :int], :void, :blocking => true
184
+
185
+ attach_function :fs_req_cleanup, :uv_fs_req_cleanup, [:uv_fs_t], :void, :blocking => true
186
+ attach_function :fs_close, :uv_fs_close, [:uv_loop_t, :uv_fs_t, :uv_file, :uv_fs_cb], :int, :blocking => true
187
+ attach_function :fs_open, :uv_fs_open, [:uv_loop_t, :uv_fs_t, :string, :int, :int, :uv_fs_cb], :int, :blocking => true
188
+ attach_function :fs_read, :uv_fs_read, [:uv_loop_t, :uv_fs_t, :uv_file, :pointer, :size_t, :off_t, :uv_fs_cb], :int, :blocking => true
189
+ attach_function :fs_unlink, :uv_fs_unlink, [:uv_loop_t, :uv_fs_t, :string, :uv_fs_cb], :int, :blocking => true
190
+ attach_function :fs_write, :uv_fs_write, [:uv_loop_t, :uv_fs_t, :uv_file, :pointer, :size_t, :off_t, :uv_fs_cb], :int, :blocking => true
191
+ attach_function :fs_mkdir, :uv_fs_mkdir, [:uv_loop_t, :uv_fs_t, :string, :int, :uv_fs_cb], :int, :blocking => true
192
+ attach_function :fs_rmdir, :uv_fs_rmdir, [:uv_loop_t, :uv_fs_t, :string, :uv_fs_cb], :int, :blocking => true
193
+ attach_function :fs_readdir, :uv_fs_readdir, [:uv_loop_t, :uv_fs_t, :string, :int, :uv_fs_cb], :int, :blocking => true
194
+ attach_function :fs_stat, :uv_fs_stat, [:uv_loop_t, :uv_fs_t, :string, :uv_fs_cb], :int, :blocking => true
195
+ attach_function :fs_fstat, :uv_fs_fstat, [:uv_loop_t, :uv_fs_t, :uv_file, :uv_fs_cb], :int, :blocking => true
196
+ attach_function :fs_rename, :uv_fs_rename, [:uv_loop_t, :uv_fs_t, :string, :string, :uv_fs_cb], :int, :blocking => true
197
+ attach_function :fs_fsync, :uv_fs_fsync, [:uv_loop_t, :uv_fs_t, :uv_file, :uv_fs_cb], :int, :blocking => true
198
+ attach_function :fs_fdatasync, :uv_fs_fdatasync, [:uv_loop_t, :uv_fs_t, :uv_file, :uv_fs_cb], :int, :blocking => true
199
+ attach_function :fs_ftruncate, :uv_fs_ftruncate, [:uv_loop_t, :uv_fs_t, :uv_file, :off_t, :uv_fs_cb], :int, :blocking => true
200
+ attach_function :fs_sendfile, :uv_fs_sendfile, [:uv_loop_t, :uv_fs_t, :uv_file, :uv_file, :off_t, :size_t, :uv_fs_cb], :int, :blocking => true
201
+ attach_function :fs_chmod, :uv_fs_chmod, [:uv_loop_t, :uv_fs_t, :string, :int, :uv_fs_cb], :int, :blocking => true
202
+ attach_function :fs_utime, :uv_fs_utime, [:uv_loop_t, :uv_fs_t, :string, :double, :double, :uv_fs_cb], :int, :blocking => true
203
+ attach_function :fs_futime, :uv_fs_futime, [:uv_loop_t, :uv_fs_t, :uv_file, :double, :double, :uv_fs_cb], :int, :blocking => true
204
+ attach_function :fs_lstat, :uv_fs_lstat, [:uv_loop_t, :uv_fs_t, :string, :uv_fs_cb], :int, :blocking => true
205
+ attach_function :fs_link, :uv_fs_link, [:uv_loop_t, :uv_fs_t, :string, :string, :uv_fs_cb], :int, :blocking => true
206
+ attach_function :fs_symlink, :uv_fs_symlink, [:uv_loop_t, :uv_fs_t, :string, :string, :int, :uv_fs_cb], :int, :blocking => true
207
+ attach_function :fs_readlink, :uv_fs_readlink, [:uv_loop_t, :uv_fs_t, :string, :uv_fs_cb], :int, :blocking => true
208
+ attach_function :fs_fchmod, :uv_fs_fchmod, [:uv_loop_t, :uv_fs_t, :uv_file, :int, :uv_fs_cb], :int, :blocking => true
209
+ attach_function :fs_chown, :uv_fs_chown, [:uv_loop_t, :uv_fs_t, :string, :int, :int, :uv_fs_cb], :int, :blocking => true
210
+ attach_function :fs_fchown, :uv_fs_fchown, [:uv_loop_t, :uv_fs_t, :uv_file, :int, :int, :uv_fs_cb], :int, :blocking => true
211
+
212
+ attach_function :fs_event_init, :uv_fs_event_init, [:uv_loop_t, :uv_fs_event_t, :string, :uv_fs_event_cb, :int], :int, :blocking => true
213
+
214
+ attach_function :ip4_addr, :uv_ip4_addr, [:string, :int], :sockaddr_in, :blocking => true
215
+ attach_function :ip6_addr, :uv_ip6_addr, [:string, :int], :sockaddr_in6, :blocking => true
216
+ attach_function :ip4_name, :uv_ip4_name, [SockaddrIn.by_ref, :pointer, :size_t], :int, :blocking => true
217
+ attach_function :ip6_name, :uv_ip6_name, [SockaddrIn6.by_ref, :pointer, :size_t], :int, :blocking => true
218
+ #TODO:: attach_function :inet_ntop, :uv_inet_ntop, [:int, :pointer, ]
219
+ #TODO:: attach_function :uv_inet_pton
220
+
221
+ attach_function :exepath, :uv_exepath, [:pointer, :size_t], :int, :blocking => true
222
+ attach_function :cwd, :uv_cwd, [:pointer, :size_t], :int, :blocking => true
223
+ attach_function :chdir, :uv_chdir, [:string], :int, :blocking => true
224
+ attach_function :get_free_memory, :uv_get_free_memory, [], :uint64, :blocking => true
225
+ attach_function :get_total_memory, :uv_get_total_memory, [], :uint64, :blocking => true
226
+ attach_function :hrtime, :uv_hrtime, [], :uint64, :blocking => true
227
+ attach_function :disable_stdio_inheritance, :uv_disable_stdio_inheritance, [], :void, :blocking => true
228
+ attach_function :dlopen, :uv_dlopen, [:string, :uv_lib_t], :int, :blocking => true
229
+ attach_function :dlclose, :uv_dlclose, [:uv_lib_t], :int, :blocking => true
230
+ attach_function :dlsym, :uv_dlsym, [:uv_lib_t, :string, :pointer], :int, :blocking => true
231
+ attach_function :dlerror, :uv_dlerror, [:uv_lib_t], :string
232
+
233
+ attach_function :mutex_init, :uv_mutex_init, [:uv_mutex_t], :int, :blocking => true
234
+ attach_function :mutex_destroy, :uv_mutex_destroy, [:uv_mutex_t], :void, :blocking => true
235
+ attach_function :mutex_lock, :uv_mutex_lock, [:uv_mutex_t], :void, :blocking => true
236
+ attach_function :mutex_trylock, :uv_mutex_trylock, [:uv_mutex_t], :int, :blocking => true
237
+ attach_function :mutex_unlock, :uv_mutex_unlock, [:uv_mutex_t], :void, :blocking => true
238
+
239
+ attach_function :signal_init, :uv_signal_init, [:uv_loop_t, :uv_signal_t], :int, :blocking => true
240
+ attach_function :signal_start, :uv_signal_start, [:uv_signal_t, :uv_signal_cb, :int], :int, :blocking => true
241
+ attach_function :signal_stop, :uv_signal_stop, [:uv_signal_t], :int, :blocking => true
242
+
243
+ attach_function :rwlock_init, :uv_rwlock_init, [:uv_rwlock_t], :int, :blocking => true
244
+ attach_function :rwlock_destroy, :uv_rwlock_destroy, [:uv_rwlock_t], :void, :blocking => true
245
+ attach_function :rwlock_rdlock, :uv_rwlock_rdlock, [:uv_rwlock_t], :void, :blocking => true
246
+ attach_function :rwlock_tryrdlock, :uv_rwlock_tryrdlock, [:uv_rwlock_t], :int, :blocking => true
247
+ attach_function :rwlock_rdunlock, :uv_rwlock_rdunlock, [:uv_rwlock_t], :void, :blocking => true
248
+ attach_function :rwlock_wrlock, :uv_rwlock_wrlock, [:uv_rwlock_t], :void, :blocking => true
249
+ attach_function :rwlock_trywrlock, :uv_rwlock_trywrlock, [:uv_rwlock_t], :int, :blocking => true
250
+ attach_function :rwlock_wrunlock, :uv_rwlock_wrunlock, [:uv_rwlock_t], :void, :blocking => true
251
+
252
+ attach_function :once, :uv_once, [:uv_once_t, :uv_cb], :void, :blocking => true
253
+ attach_function :thread_create, :uv_thread_create, [:uv_thread_t, :uv_cb], :int, :blocking => true
254
+ attach_function :thread_join, :uv_thread_join, [:uv_thread_t], :int, :blocking => true
255
+
256
+
257
+ def self.create_handle(type)
258
+ LIBC.malloc(Ext.handle_size(type))
259
+ end
260
+
261
+ def self.create_request(type)
262
+ LIBC.malloc(Ext.req_size(type))
263
+ end
264
+ end
257
265
  end