Skip to content

Commit 80380df

Browse files
committed
Update to FFI 1.11.1
1 parent 83fd80f commit 80380df

File tree

21 files changed

+1168
-102
lines changed

21 files changed

+1168
-102
lines changed

lib/truffle/ffi/data_converter.rb

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#
2+
# Copyright (C) 2008-2010 Wayne Meissner
3+
#
4+
# This file is part of ruby-ffi.
5+
#
6+
# All rights reserved.
7+
#
8+
# Redistribution and use in source and binary forms, with or without
9+
# modification, are permitted provided that the following conditions are met:
10+
#
11+
# * Redistributions of source code must retain the above copyright notice, this
12+
# list of conditions and the following disclaimer.
13+
# * Redistributions in binary form must reproduce the above copyright notice
14+
# this list of conditions and the following disclaimer in the documentation
15+
# and/or other materials provided with the distribution.
16+
# * Neither the name of the Ruby FFI project nor the names of its contributors
17+
# may be used to endorse or promote products derived from this software
18+
# without specific prior written permission.
19+
#
20+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
24+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28+
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
30+
31+
module FFI
32+
# This module is used to extend somes classes and give then a common API.
33+
#
34+
# Most of methods defined here must be overriden.
35+
module DataConverter
36+
# Get native type.
37+
#
38+
# @overload native_type(type)
39+
# @param [String, Symbol, Type] type
40+
# @return [Type]
41+
# Get native type from +type+.
42+
#
43+
# @overload native_type
44+
# @raise {NotImplementedError} This method must be overriden.
45+
def native_type(type = nil)
46+
if type
47+
@native_type = FFI.find_type(type)
48+
else
49+
native_type = @native_type
50+
unless native_type
51+
raise NotImplementedError, 'native_type method not overridden and no native_type set'
52+
end
53+
native_type
54+
end
55+
end
56+
57+
# Convert to a native type.
58+
def to_native(value, ctx)
59+
value
60+
end
61+
62+
# Convert from a native type.
63+
def from_native(value, ctx)
64+
value
65+
end
66+
end
67+
end

lib/truffle/ffi/ffi.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3030

3131
require 'ffi/platform'
32+
require 'ffi/data_converter'
3233
require 'ffi/types'
3334
require 'ffi/library'
3435
require 'ffi/errno'

lib/truffle/ffi/library.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ def ffi_lib(*names)
126126
else
127127
# TODO better library lookup logic
128128
unless libname.start_with?("/") || FFI::Platform.windows?
129-
path = ['/usr/lib/','/usr/local/lib/'].find do |pth|
129+
path = ['/usr/lib/','/usr/local/lib/','/opt/local/lib/'].find do |pth|
130130
File.exist?(pth + libname)
131131
end
132132
if path

lib/truffle/ffi/platform.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ module Platform
5454
RbConfig::CONFIG['host_os'].downcase
5555
end
5656

57+
OSVERSION = RbConfig::CONFIG['host_os'].gsub(/[^\d]/, '').to_i
58+
59+
CPU = RbConfig::CONFIG['host_cpu']
60+
5761
ARCH = case CPU.downcase
5862
when /amd64|x86_64/
5963
"x86_64"
@@ -82,7 +86,6 @@ def self.is_os(os)
8286
OS == os
8387
end
8488

85-
NAME = "#{ARCH}-#{OS}"
8689
IS_GNU = defined?(GNU_LIBC)
8790
IS_LINUX = is_os("linux")
8891
IS_MAC = is_os("darwin")
@@ -92,6 +95,11 @@ def self.is_os(os)
9295
IS_SOLARIS = is_os("solaris")
9396
IS_WINDOWS = is_os("windows")
9497
IS_BSD = IS_MAC || IS_FREEBSD || IS_NETBSD || IS_OPENBSD
98+
99+
# Add the version for known ABI breaks
100+
name_version = "12" if IS_FREEBSD && OSVERSION >= 12 # 64-bit inodes
101+
102+
NAME = "#{ARCH}-#{OS}#{name_version}"
95103
CONF_DIR = File.join(File.dirname(__FILE__), 'platform', NAME)
96104

97105
public
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
rbx.platform.typedef.__int8_t = char
2+
rbx.platform.typedef.__uint8_t = uchar
3+
rbx.platform.typedef.__int16_t = short
4+
rbx.platform.typedef.__uint16_t = ushort
5+
rbx.platform.typedef.__int32_t = int
6+
rbx.platform.typedef.__uint32_t = uint
7+
rbx.platform.typedef.__int64_t = long_long
8+
rbx.platform.typedef.__uint64_t = ulong_long
9+
rbx.platform.typedef.__int_least8_t = char
10+
rbx.platform.typedef.__uint_least8_t = uchar
11+
rbx.platform.typedef.__int_least16_t = short
12+
rbx.platform.typedef.__uint_least16_t = ushort
13+
rbx.platform.typedef.__int_least32_t = int
14+
rbx.platform.typedef.__uint_least32_t = uint
15+
rbx.platform.typedef.__int_least64_t = long_long
16+
rbx.platform.typedef.__uint_least64_t = ulong_long
17+
rbx.platform.typedef.__int_fast8_t = int
18+
rbx.platform.typedef.__uint_fast8_t = uint
19+
rbx.platform.typedef.__int_fast16_t = int
20+
rbx.platform.typedef.__uint_fast16_t = uint
21+
rbx.platform.typedef.__int_fast32_t = int
22+
rbx.platform.typedef.__uint_fast32_t = uint
23+
rbx.platform.typedef.__int_fast64_t = long_long
24+
rbx.platform.typedef.__uint_fast64_t = ulong_long
25+
rbx.platform.typedef.__intptr_t = long
26+
rbx.platform.typedef.__uintptr_t = ulong
27+
rbx.platform.typedef.__intmax_t = long_long
28+
rbx.platform.typedef.__uintmax_t = ulong_long
29+
rbx.platform.typedef.__register_t = long_long
30+
rbx.platform.typedef.__vaddr_t = ulong
31+
rbx.platform.typedef.__paddr_t = ulong
32+
rbx.platform.typedef.__vsize_t = ulong
33+
rbx.platform.typedef.__psize_t = ulong
34+
rbx.platform.typedef.__clock_t = int
35+
rbx.platform.typedef.__clockid_t = int
36+
rbx.platform.typedef.__off_t = long_long
37+
rbx.platform.typedef.__ptrdiff_t = long
38+
rbx.platform.typedef.__size_t = ulong
39+
rbx.platform.typedef.__ssize_t = long
40+
rbx.platform.typedef.__time_t = int
41+
rbx.platform.typedef.__timer_t = int
42+
rbx.platform.typedef.__wchar_t = int
43+
rbx.platform.typedef.__wint_t = int
44+
rbx.platform.typedef.__rune_t = int
45+
rbx.platform.typedef.__wctrans_t = pointer
46+
rbx.platform.typedef.__wctype_t = pointer
47+
rbx.platform.typedef.__cpuid_t = ulong
48+
rbx.platform.typedef.__dev_t = int
49+
rbx.platform.typedef.__fixpt_t = uint
50+
rbx.platform.typedef.__gid_t = uint
51+
rbx.platform.typedef.__id_t = uint
52+
rbx.platform.typedef.__in_addr_t = uint
53+
rbx.platform.typedef.__in_port_t = ushort
54+
rbx.platform.typedef.__ino_t = uint
55+
rbx.platform.typedef.__key_t = long
56+
rbx.platform.typedef.__mode_t = uint
57+
rbx.platform.typedef.__nlink_t = uint
58+
rbx.platform.typedef.__pid_t = int
59+
rbx.platform.typedef.__rlim_t = ulong_long
60+
rbx.platform.typedef.__sa_family_t = uchar
61+
rbx.platform.typedef.__segsz_t = int
62+
rbx.platform.typedef.__socklen_t = uint
63+
rbx.platform.typedef.__swblk_t = int
64+
rbx.platform.typedef.__uid_t = uint
65+
rbx.platform.typedef.__useconds_t = uint
66+
rbx.platform.typedef.__suseconds_t = int
67+
rbx.platform.typedef.u_char = uchar
68+
rbx.platform.typedef.u_short = ushort
69+
rbx.platform.typedef.u_int = uint
70+
rbx.platform.typedef.u_long = ulong
71+
rbx.platform.typedef.unchar = uchar
72+
rbx.platform.typedef.ushort = ushort
73+
rbx.platform.typedef.uint = uint
74+
rbx.platform.typedef.ulong = ulong
75+
rbx.platform.typedef.cpuid_t = ulong
76+
rbx.platform.typedef.register_t = long_long
77+
rbx.platform.typedef.int8_t = char
78+
rbx.platform.typedef.uint8_t = uchar
79+
rbx.platform.typedef.int16_t = short
80+
rbx.platform.typedef.uint16_t = ushort
81+
rbx.platform.typedef.int32_t = int
82+
rbx.platform.typedef.uint32_t = uint
83+
rbx.platform.typedef.int64_t = long_long
84+
rbx.platform.typedef.uint64_t = ulong_long
85+
rbx.platform.typedef.intptr_t = long
86+
rbx.platform.typedef.uintptr_t = ulong
87+
rbx.platform.typedef.u_int8_t = uchar
88+
rbx.platform.typedef.u_int16_t = ushort
89+
rbx.platform.typedef.u_int32_t = uint
90+
rbx.platform.typedef.u_int64_t = ulong_long
91+
rbx.platform.typedef.quad_t = long_long
92+
rbx.platform.typedef.u_quad_t = ulong_long
93+
rbx.platform.typedef.qaddr_t = pointer
94+
rbx.platform.typedef.vaddr_t = ulong
95+
rbx.platform.typedef.paddr_t = ulong
96+
rbx.platform.typedef.vsize_t = ulong
97+
rbx.platform.typedef.psize_t = ulong
98+
rbx.platform.typedef.caddr_t = string
99+
rbx.platform.typedef.daddr_t = int
100+
rbx.platform.typedef.daddr32_t = int
101+
rbx.platform.typedef.daddr64_t = long_long
102+
rbx.platform.typedef.dev_t = int
103+
rbx.platform.typedef.fixpt_t = uint
104+
rbx.platform.typedef.gid_t = uint
105+
rbx.platform.typedef.id_t = uint
106+
rbx.platform.typedef.ino_t = uint
107+
rbx.platform.typedef.key_t = long
108+
rbx.platform.typedef.mode_t = uint
109+
rbx.platform.typedef.nlink_t = uint
110+
rbx.platform.typedef.pid_t = int
111+
rbx.platform.typedef.rlim_t = ulong_long
112+
rbx.platform.typedef.segsz_t = int
113+
rbx.platform.typedef.swblk_t = int
114+
rbx.platform.typedef.uid_t = uint
115+
rbx.platform.typedef.useconds_t = uint
116+
rbx.platform.typedef.suseconds_t = int
117+
rbx.platform.typedef.in_addr_t = uint
118+
rbx.platform.typedef.in_port_t = ushort
119+
rbx.platform.typedef.sa_family_t = uchar
120+
rbx.platform.typedef.socklen_t = uint
121+
rbx.platform.typedef.clock_t = int
122+
rbx.platform.typedef.clockid_t = int
123+
rbx.platform.typedef.size_t = ulong
124+
rbx.platform.typedef.ssize_t = long
125+
rbx.platform.typedef.time_t = int
126+
rbx.platform.typedef.timer_t = int
127+
rbx.platform.typedef.off_t = long_long
128+
rbx.platform.typedef.__fd_mask = int
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
rbx.platform.typedef.__int8_t = char
2+
rbx.platform.typedef.__uint8_t = uchar
3+
rbx.platform.typedef.__int16_t = short
4+
rbx.platform.typedef.__uint16_t = ushort
5+
rbx.platform.typedef.__int32_t = int
6+
rbx.platform.typedef.__uint32_t = uint
7+
rbx.platform.typedef.__int64_t = long_long
8+
rbx.platform.typedef.__uint64_t = ulong_long
9+
rbx.platform.typedef.__int_least8_t = char
10+
rbx.platform.typedef.__uint_least8_t = uchar
11+
rbx.platform.typedef.__int_least16_t = short
12+
rbx.platform.typedef.__uint_least16_t = ushort
13+
rbx.platform.typedef.__int_least32_t = int
14+
rbx.platform.typedef.__uint_least32_t = uint
15+
rbx.platform.typedef.__int_least64_t = long_long
16+
rbx.platform.typedef.__uint_least64_t = ulong_long
17+
rbx.platform.typedef.__int_fast8_t = int
18+
rbx.platform.typedef.__uint_fast8_t = uint
19+
rbx.platform.typedef.__int_fast16_t = int
20+
rbx.platform.typedef.__uint_fast16_t = uint
21+
rbx.platform.typedef.__int_fast32_t = int
22+
rbx.platform.typedef.__uint_fast32_t = uint
23+
rbx.platform.typedef.__int_fast64_t = long_long
24+
rbx.platform.typedef.__uint_fast64_t = ulong_long
25+
rbx.platform.typedef.__intptr_t = long
26+
rbx.platform.typedef.__uintptr_t = ulong
27+
rbx.platform.typedef.__intmax_t = long_long
28+
rbx.platform.typedef.__uintmax_t = ulong_long
29+
rbx.platform.typedef.__register_t = long_long
30+
rbx.platform.typedef.__vaddr_t = ulong
31+
rbx.platform.typedef.__paddr_t = ulong
32+
rbx.platform.typedef.__vsize_t = ulong
33+
rbx.platform.typedef.__psize_t = ulong
34+
rbx.platform.typedef.__clock_t = int
35+
rbx.platform.typedef.__clockid_t = int
36+
rbx.platform.typedef.__off_t = long_long
37+
rbx.platform.typedef.__ptrdiff_t = long
38+
rbx.platform.typedef.__size_t = ulong
39+
rbx.platform.typedef.__ssize_t = long
40+
rbx.platform.typedef.__time_t = int
41+
rbx.platform.typedef.__timer_t = int
42+
rbx.platform.typedef.__wchar_t = int
43+
rbx.platform.typedef.__wint_t = int
44+
rbx.platform.typedef.__rune_t = int
45+
rbx.platform.typedef.__wctrans_t = pointer
46+
rbx.platform.typedef.__wctype_t = pointer
47+
rbx.platform.typedef.__cpuid_t = ulong
48+
rbx.platform.typedef.__dev_t = ulong_long
49+
rbx.platform.typedef.__fixpt_t = uint
50+
rbx.platform.typedef.__gid_t = uint
51+
rbx.platform.typedef.__id_t = uint
52+
rbx.platform.typedef.__in_addr_t = uint
53+
rbx.platform.typedef.__in_port_t = ushort
54+
rbx.platform.typedef.__ino_t = ulong_long
55+
rbx.platform.typedef.__key_t = long
56+
rbx.platform.typedef.__mode_t = uint
57+
rbx.platform.typedef.__nlink_t = ulong_long
58+
rbx.platform.typedef.__pid_t = int
59+
rbx.platform.typedef.__rlim_t = ulong_long
60+
rbx.platform.typedef.__sa_family_t = uchar
61+
rbx.platform.typedef.__segsz_t = int
62+
rbx.platform.typedef.__socklen_t = uint
63+
rbx.platform.typedef.__swblk_t = int
64+
rbx.platform.typedef.__uid_t = uint
65+
rbx.platform.typedef.__useconds_t = uint
66+
rbx.platform.typedef.__suseconds_t = int
67+
rbx.platform.typedef.u_char = uchar
68+
rbx.platform.typedef.u_short = ushort
69+
rbx.platform.typedef.u_int = uint
70+
rbx.platform.typedef.u_long = ulong
71+
rbx.platform.typedef.unchar = uchar
72+
rbx.platform.typedef.ushort = ushort
73+
rbx.platform.typedef.uint = uint
74+
rbx.platform.typedef.ulong = ulong
75+
rbx.platform.typedef.cpuid_t = ulong
76+
rbx.platform.typedef.register_t = long_long
77+
rbx.platform.typedef.int8_t = char
78+
rbx.platform.typedef.uint8_t = uchar
79+
rbx.platform.typedef.int16_t = short
80+
rbx.platform.typedef.uint16_t = ushort
81+
rbx.platform.typedef.int32_t = int
82+
rbx.platform.typedef.uint32_t = uint
83+
rbx.platform.typedef.int64_t = long_long
84+
rbx.platform.typedef.uint64_t = ulong_long
85+
rbx.platform.typedef.intptr_t = long
86+
rbx.platform.typedef.uintptr_t = ulong
87+
rbx.platform.typedef.u_int8_t = uchar
88+
rbx.platform.typedef.u_int16_t = ushort
89+
rbx.platform.typedef.u_int32_t = uint
90+
rbx.platform.typedef.u_int64_t = ulong_long
91+
rbx.platform.typedef.quad_t = long_long
92+
rbx.platform.typedef.u_quad_t = ulong_long
93+
rbx.platform.typedef.qaddr_t = pointer
94+
rbx.platform.typedef.vaddr_t = ulong
95+
rbx.platform.typedef.paddr_t = ulong
96+
rbx.platform.typedef.vsize_t = ulong
97+
rbx.platform.typedef.psize_t = ulong
98+
rbx.platform.typedef.caddr_t = string
99+
rbx.platform.typedef.daddr_t = int
100+
rbx.platform.typedef.daddr32_t = int
101+
rbx.platform.typedef.daddr64_t = long_long
102+
rbx.platform.typedef.dev_t = ulong_long
103+
rbx.platform.typedef.fixpt_t = uint
104+
rbx.platform.typedef.gid_t = uint
105+
rbx.platform.typedef.id_t = uint
106+
rbx.platform.typedef.ino_t = ulong_long
107+
rbx.platform.typedef.key_t = long
108+
rbx.platform.typedef.mode_t = uint
109+
rbx.platform.typedef.nlink_t = ulong_long
110+
rbx.platform.typedef.pid_t = int
111+
rbx.platform.typedef.rlim_t = ulong_long
112+
rbx.platform.typedef.segsz_t = int
113+
rbx.platform.typedef.swblk_t = int
114+
rbx.platform.typedef.uid_t = uint
115+
rbx.platform.typedef.useconds_t = uint
116+
rbx.platform.typedef.suseconds_t = int
117+
rbx.platform.typedef.in_addr_t = uint
118+
rbx.platform.typedef.in_port_t = ushort
119+
rbx.platform.typedef.sa_family_t = uchar
120+
rbx.platform.typedef.socklen_t = uint
121+
rbx.platform.typedef.clock_t = int
122+
rbx.platform.typedef.clockid_t = int
123+
rbx.platform.typedef.size_t = ulong
124+
rbx.platform.typedef.ssize_t = long
125+
rbx.platform.typedef.time_t = int
126+
rbx.platform.typedef.timer_t = int
127+
rbx.platform.typedef.off_t = long_long
128+
rbx.platform.typedef.__fd_mask = int

0 commit comments

Comments
 (0)