Skip to content

Commit 30abc9b

Browse files
committed
Pass an integer number of bytes to #stack_alloc
1 parent 93b5568 commit 30abc9b

File tree

3 files changed

+9
-17
lines changed

3 files changed

+9
-17
lines changed

lib/truffle/socket/truffle/foreign.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ def self.connect(descriptor, sockaddr)
120120
end
121121

122122
def self.getsockopt(descriptor, level, optname)
123-
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))
124124

125125
begin
126126
length.write_int(256)
@@ -199,7 +199,7 @@ def self.getnameinfo(sockaddr, flags = ::Socket::NI_NUMERICHOST | ::Socket::NI_N
199199
name_info = []
200200

201201
sockaddr_p, node, service = Truffle::FFI::Pool.stack_alloc(
202-
:char, sockaddr.bytesize, :char, ::Socket::NI_MAXHOST, :char, ::Socket::NI_MAXSERV)
202+
sockaddr.bytesize, ::Socket::NI_MAXHOST, ::Socket::NI_MAXSERV)
203203

204204
begin
205205
sockaddr_p.write_bytes(sockaddr)
@@ -232,7 +232,7 @@ def self.getnameinfo(sockaddr, flags = ::Socket::NI_NUMERICHOST | ::Socket::NI_N
232232
end
233233

234234
def self.getpeername(descriptor)
235-
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))
236236
begin
237237
len_p.write_int(128)
238238

@@ -247,7 +247,7 @@ def self.getpeername(descriptor)
247247
end
248248

249249
def self.getsockname(descriptor)
250-
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))
251251

252252
begin
253253
len_p.write_int(128)

src/main/ruby/truffleruby/core/truffle/ffi/pointer.rb

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -271,18 +271,10 @@ class Pool
271271
def self.stack_alloc(*args)
272272
total_length = 0
273273
offsets = []
274-
args.each_slice(2) do |type, count|
275-
type_size = case type
276-
when nil
277-
1
278-
when Integer
279-
type
280-
when Symbol
281-
Primitive.pointer_find_type_size(type)
282-
else
283-
raise ArgumentError, "incorrect pointer type: #{type.inspect}"
284-
end
285-
length = (type_size * count)
274+
args.each do |length|
275+
unless Primitive.object_kind_of?(length, Integer)
276+
raise ArgumentError, "incorrect pointer type: #{length.inspect}"
277+
end
286278
offsets << [total_length, length]
287279
total_length += length
288280
end

src/main/ruby/truffleruby/core/truffle/io_operations.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ def self.select(readables, readable_ios, writables, writable_ios, errorables, er
137137
end
138138

139139
readables_pointer, writables_pointer, errorables_pointer =
140-
Truffle::FFI::Pool.stack_alloc(:int, readables.size, :int, writables.size, :int, errorables.size)
140+
Truffle::FFI::Pool.stack_alloc(readables.size * SIZEOF_INT, writables.size * SIZEOF_INT, errorables.size * SIZEOF_INT)
141141

142142
begin
143143
to_fds(readable_ios, readables_pointer)

0 commit comments

Comments
 (0)