1
+ # truffleruby_primitives: true
2
+
1
3
# Copyright (c) 2013, Brian Shirai
2
4
# All rights reserved.
3
5
#
@@ -95,31 +97,30 @@ module Foreign
95
97
attach_function :freeifaddrs , [ :pointer ] , :void
96
98
97
99
def self . bind ( descriptor , sockaddr )
98
- sockaddr_p = Truffle :: FFI :: Pool . stack_alloc ( :char , sockaddr . bytesize )
100
+ sockaddr_p = Primitive . io_thread_buffer_allocate ( sockaddr . bytesize )
99
101
begin
100
102
sockaddr_p . write_bytes ( sockaddr )
101
103
_bind ( descriptor , sockaddr_p , sockaddr . bytesize )
102
104
ensure
103
- Truffle :: FFI :: Pool . stack_free ( sockaddr_p )
105
+ Primitive . io_thread_buffer_free ( sockaddr_p )
104
106
end
105
107
end
106
108
107
109
def self . connect ( descriptor , sockaddr )
108
110
sockaddr = Socket . coerce_to_string ( sockaddr )
109
111
110
- sockaddr_p = Truffle ::FFI ::Pool . stack_alloc ( :char , sockaddr . bytesize )
111
-
112
+ sockaddr_p = Primitive . io_thread_buffer_allocate ( sockaddr . bytesize )
112
113
begin
113
114
sockaddr_p . write_bytes ( sockaddr )
114
115
115
116
_connect ( descriptor , sockaddr_p , sockaddr . bytesize )
116
117
ensure
117
- Truffle :: FFI :: Pool . stack_free ( sockaddr_p )
118
+ Primitive . io_thread_buffer_free ( sockaddr_p )
118
119
end
119
120
end
120
121
121
122
def self . getsockopt ( descriptor , level , optname )
122
- val , length = Truffle ::FFI ::Pool . stack_alloc ( :char , 256 , :socklen_t , 1 )
123
+ val , length = Truffle ::FFI ::Pool . stack_alloc ( 256 , Primitive . pointer_find_type_size ( :socklen_t ) )
123
124
124
125
begin
125
126
length . write_int ( 256 )
@@ -143,10 +144,10 @@ def self.getaddrinfo(host, service = nil, family = nil, socktype = nil,
143
144
hints [ :ai_protocol ] = protocol || 0
144
145
hints [ :ai_flags ] = flags || 0
145
146
146
- res_p = Truffle :: FFI :: Pool . stack_alloc ( :pointer , 1 )
147
+ res_p = Primitive . io_thread_buffer_allocate ( Primitive . pointer_find_type_size ( :pointer ) )
147
148
148
149
res_p . clear
149
- err = _getaddrinfo ( host , service , hints . pointer , res_p )
150
+ err = _getaddrinfo ( host , service , hints . pointer , res_p )
150
151
151
152
raise SocketError , gai_strerror ( err ) unless err == 0
152
153
@@ -183,7 +184,7 @@ def self.getaddrinfo(host, service = nil, family = nil, socktype = nil,
183
184
184
185
# Be sure to feed a legit pointer to freeaddrinfo
185
186
freeaddrinfo ( ptr ) unless ptr . null?
186
- Truffle :: FFI :: Pool . stack_free ( res_p )
187
+ Primitive . io_thread_buffer_free ( res_p )
187
188
end
188
189
end
189
190
@@ -198,7 +199,7 @@ def self.getnameinfo(sockaddr, flags = ::Socket::NI_NUMERICHOST | ::Socket::NI_N
198
199
name_info = [ ]
199
200
200
201
sockaddr_p , node , service = Truffle ::FFI ::Pool . stack_alloc (
201
- :char , sockaddr . bytesize , :char , :: Socket ::NI_MAXHOST , :char , ::Socket ::NI_MAXSERV )
202
+ sockaddr . bytesize , :: Socket ::NI_MAXHOST , ::Socket ::NI_MAXSERV )
202
203
203
204
begin
204
205
sockaddr_p . write_bytes ( sockaddr )
@@ -231,7 +232,7 @@ def self.getnameinfo(sockaddr, flags = ::Socket::NI_NUMERICHOST | ::Socket::NI_N
231
232
end
232
233
233
234
def self . getpeername ( descriptor )
234
- sockaddr_storage_p , len_p = Truffle ::FFI ::Pool . stack_alloc ( :char , 128 , :socklen_t , 1 )
235
+ sockaddr_storage_p , len_p = Truffle ::FFI ::Pool . stack_alloc ( 128 , Primitive . pointer_find_type_size ( :socklen_t ) )
235
236
begin
236
237
len_p . write_int ( 128 )
237
238
@@ -246,7 +247,7 @@ def self.getpeername(descriptor)
246
247
end
247
248
248
249
def self . getsockname ( descriptor )
249
- sockaddr_storage_p , len_p = Truffle ::FFI ::Pool . stack_alloc ( :char , 128 , :socklen_t , 1 )
250
+ sockaddr_storage_p , len_p = Truffle ::FFI ::Pool . stack_alloc ( 128 , Primitive . pointer_find_type_size ( :socklen_t ) )
250
251
251
252
begin
252
253
len_p . write_int ( 128 )
@@ -283,7 +284,7 @@ def self.pack_sockaddr_in(host, port, family = ::Socket::AF_UNSPEC,
283
284
host = '0.0.0.0'
284
285
end
285
286
286
- res_p = Truffle :: FFI :: Pool . stack_alloc ( :pointer , 1 )
287
+ res_p = Primitive . io_thread_buffer_allocate ( Primitive . pointer_find_type_size ( :pointer ) )
287
288
res_p . clear
288
289
289
290
err = _getaddrinfo ( host , port . to_s , hints . pointer , res_p )
@@ -302,7 +303,7 @@ def self.pack_sockaddr_in(host, port, family = ::Socket::AF_UNSPEC,
302
303
ptr = res_p . read_pointer
303
304
304
305
freeaddrinfo ( ptr ) unless ptr . null?
305
- Truffle :: FFI :: Pool . stack_free ( res_p )
306
+ Primitive . io_thread_buffer_free ( res_p )
306
307
end
307
308
end
308
309
@@ -328,7 +329,7 @@ def self.getpeereid(*)
328
329
end
329
330
330
331
def self . socketpair ( family , type , protocol )
331
- pointer = Truffle :: FFI :: Pool . stack_alloc ( :int , 2 )
332
+ pointer = Primitive . io_thread_buffer_allocate ( Primitive . pointer_find_type_size ( :int ) * 2 )
332
333
begin
333
334
pointer . clear
334
335
status = _socketpair ( family , type , protocol , pointer )
@@ -337,7 +338,7 @@ def self.socketpair(family, type, protocol)
337
338
338
339
pointer . read_array_of_int ( 2 )
339
340
ensure
340
- Truffle :: FFI :: Pool . stack_free ( pointer )
341
+ Primitive . io_thread_buffer_free ( pointer )
341
342
end
342
343
end
343
344
@@ -373,7 +374,7 @@ def self.ip_to_bytes(family, address)
373
374
address = address [ 0 ...i ]
374
375
end
375
376
376
- pointer = Truffle :: FFI :: Pool . stack_alloc ( :pointer , size )
377
+ pointer = Primitive . io_thread_buffer_allocate ( Primitive . pointer_find_type_size ( :pointer ) * size )
377
378
378
379
begin
379
380
status = inet_pton ( family , address , pointer )
@@ -382,7 +383,7 @@ def self.ip_to_bytes(family, address)
382
383
383
384
pointer . get_array_of_uchar ( 0 , size )
384
385
ensure
385
- Truffle :: FFI :: Pool . stack_free ( pointer )
386
+ Primitive . io_thread_buffer_free ( pointer )
386
387
end
387
388
end
388
389
end
0 commit comments