ffi 1.15.4-x86-mingw32 → 1.16.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +68 -0
- data/Gemfile +1 -1
- data/README.md +3 -2
- data/Rakefile +28 -11
- data/ffi.gemspec +2 -2
- data/lib/2.5/ffi_c.so +0 -0
- data/lib/2.6/ffi_c.so +0 -0
- data/lib/2.7/ffi_c.so +0 -0
- data/lib/3.0/ffi_c.so +0 -0
- data/lib/3.1/ffi_c.so +0 -0
- data/lib/3.2/ffi_c.so +0 -0
- data/lib/ffi/autopointer.rb +7 -22
- data/lib/ffi/compat.rb +43 -0
- data/lib/ffi/data_converter.rb +2 -2
- data/lib/ffi/dynamic_library.rb +89 -0
- data/lib/ffi/enum.rb +18 -11
- data/lib/ffi/ffi.rb +3 -0
- data/lib/ffi/function.rb +71 -0
- data/lib/ffi/library.rb +55 -71
- data/lib/ffi/library_path.rb +109 -0
- data/lib/ffi/managedstruct.rb +1 -1
- data/lib/ffi/platform/aarch64-windows/types.conf +52 -0
- data/lib/ffi/platform/hppa1.1-linux/types.conf +178 -0
- data/lib/ffi/platform/hppa2.0-linux/types.conf +178 -0
- data/lib/ffi/platform/loongarch64-linux/types.conf +141 -0
- data/lib/ffi/platform/sw_64-linux/types.conf +141 -0
- data/lib/ffi/platform.rb +15 -13
- data/lib/ffi/struct.rb +2 -1
- data/lib/ffi/struct_layout.rb +1 -1
- data/lib/ffi/struct_layout_builder.rb +1 -1
- data/lib/ffi/tools/const_generator.rb +5 -4
- data/lib/ffi/types.rb +30 -5
- data/lib/ffi/variadic.rb +19 -8
- data/lib/ffi/version.rb +1 -1
- data/rakelib/ffi_gem_helper.rb +1 -1
- metadata +19 -10
- data/lib/2.3/ffi_c.so +0 -0
- data/lib/2.4/ffi_c.so +0 -0
- /data/lib/ffi/platform/{sparc64-linux → sparcv9-linux}/types.conf +0 -0
@@ -0,0 +1,178 @@
|
|
1
|
+
rbx.platform.typedef.*__caddr_t = char
|
2
|
+
rbx.platform.typedef.__blkcnt64_t = long_long
|
3
|
+
rbx.platform.typedef.__blkcnt_t = long
|
4
|
+
rbx.platform.typedef.__blksize_t = long
|
5
|
+
rbx.platform.typedef.__clock_t = long
|
6
|
+
rbx.platform.typedef.__clockid_t = int
|
7
|
+
rbx.platform.typedef.__daddr_t = int
|
8
|
+
rbx.platform.typedef.__dev_t = ulong_long
|
9
|
+
rbx.platform.typedef.__fd_mask = long
|
10
|
+
rbx.platform.typedef.__fsblkcnt64_t = ulong_long
|
11
|
+
rbx.platform.typedef.__fsblkcnt_t = ulong
|
12
|
+
rbx.platform.typedef.__fsfilcnt64_t = ulong_long
|
13
|
+
rbx.platform.typedef.__fsfilcnt_t = ulong
|
14
|
+
rbx.platform.typedef.__fsword_t = int
|
15
|
+
rbx.platform.typedef.__gid_t = uint
|
16
|
+
rbx.platform.typedef.__id_t = uint
|
17
|
+
rbx.platform.typedef.__ino64_t = ulong_long
|
18
|
+
rbx.platform.typedef.__ino_t = ulong
|
19
|
+
rbx.platform.typedef.__int16_t = short
|
20
|
+
rbx.platform.typedef.__int32_t = int
|
21
|
+
rbx.platform.typedef.__int64_t = long_long
|
22
|
+
rbx.platform.typedef.__int8_t = char
|
23
|
+
rbx.platform.typedef.__int_least16_t = short
|
24
|
+
rbx.platform.typedef.__int_least32_t = int
|
25
|
+
rbx.platform.typedef.__int_least64_t = long_long
|
26
|
+
rbx.platform.typedef.__int_least8_t = char
|
27
|
+
rbx.platform.typedef.__intmax_t = long_long
|
28
|
+
rbx.platform.typedef.__intptr_t = int
|
29
|
+
rbx.platform.typedef.__kernel_caddr_t = string
|
30
|
+
rbx.platform.typedef.__kernel_clock_t = long
|
31
|
+
rbx.platform.typedef.__kernel_clockid_t = int
|
32
|
+
rbx.platform.typedef.__kernel_daddr_t = int
|
33
|
+
rbx.platform.typedef.__kernel_gid16_t = ushort
|
34
|
+
rbx.platform.typedef.__kernel_gid32_t = uint
|
35
|
+
rbx.platform.typedef.__kernel_gid_t = uint
|
36
|
+
rbx.platform.typedef.__kernel_ino64_t = ulong_long
|
37
|
+
rbx.platform.typedef.__kernel_ino_t = ulong
|
38
|
+
rbx.platform.typedef.__kernel_ipc_pid_t = ushort
|
39
|
+
rbx.platform.typedef.__kernel_key_t = int
|
40
|
+
rbx.platform.typedef.__kernel_loff_t = long_long
|
41
|
+
rbx.platform.typedef.__kernel_long_t = long
|
42
|
+
rbx.platform.typedef.__kernel_mode_t = ushort
|
43
|
+
rbx.platform.typedef.__kernel_mqd_t = int
|
44
|
+
rbx.platform.typedef.__kernel_off64_t = long_long
|
45
|
+
rbx.platform.typedef.__kernel_off_t = long
|
46
|
+
rbx.platform.typedef.__kernel_old_dev_t = uint
|
47
|
+
rbx.platform.typedef.__kernel_old_gid_t = uint
|
48
|
+
rbx.platform.typedef.__kernel_old_time_t = long
|
49
|
+
rbx.platform.typedef.__kernel_old_uid_t = uint
|
50
|
+
rbx.platform.typedef.__kernel_pid_t = int
|
51
|
+
rbx.platform.typedef.__kernel_ptrdiff_t = int
|
52
|
+
rbx.platform.typedef.__kernel_size_t = uint
|
53
|
+
rbx.platform.typedef.__kernel_ssize_t = int
|
54
|
+
rbx.platform.typedef.__kernel_suseconds_t = long
|
55
|
+
rbx.platform.typedef.__kernel_time64_t = long_long
|
56
|
+
rbx.platform.typedef.__kernel_time_t = long
|
57
|
+
rbx.platform.typedef.__kernel_timer_t = int
|
58
|
+
rbx.platform.typedef.__kernel_uid16_t = ushort
|
59
|
+
rbx.platform.typedef.__kernel_uid32_t = uint
|
60
|
+
rbx.platform.typedef.__kernel_uid_t = uint
|
61
|
+
rbx.platform.typedef.__kernel_ulong_t = ulong
|
62
|
+
rbx.platform.typedef.__key_t = int
|
63
|
+
rbx.platform.typedef.__loff_t = long_long
|
64
|
+
rbx.platform.typedef.__mode_t = uint
|
65
|
+
rbx.platform.typedef.__nlink_t = uint
|
66
|
+
rbx.platform.typedef.__off64_t = long_long
|
67
|
+
rbx.platform.typedef.__off_t = long
|
68
|
+
rbx.platform.typedef.__pid_t = int
|
69
|
+
rbx.platform.typedef.__priority_which_t = int
|
70
|
+
rbx.platform.typedef.__quad_t = long_long
|
71
|
+
rbx.platform.typedef.__rlim64_t = ulong_long
|
72
|
+
rbx.platform.typedef.__rlim_t = ulong
|
73
|
+
rbx.platform.typedef.__rlimit_resource_t = int
|
74
|
+
rbx.platform.typedef.__rusage_who_t = int
|
75
|
+
rbx.platform.typedef.__sig_atomic_t = int
|
76
|
+
rbx.platform.typedef.__socklen_t = uint
|
77
|
+
rbx.platform.typedef.__ssize_t = int
|
78
|
+
rbx.platform.typedef.__suseconds64_t = long_long
|
79
|
+
rbx.platform.typedef.__suseconds_t = long
|
80
|
+
rbx.platform.typedef.__syscall_slong_t = long
|
81
|
+
rbx.platform.typedef.__syscall_ulong_t = ulong
|
82
|
+
rbx.platform.typedef.__thrd_t = ulong
|
83
|
+
rbx.platform.typedef.__time64_t = long_long
|
84
|
+
rbx.platform.typedef.__time_t = long
|
85
|
+
rbx.platform.typedef.__timer_t = pointer
|
86
|
+
rbx.platform.typedef.__tss_t = uint
|
87
|
+
rbx.platform.typedef.__u_char = uchar
|
88
|
+
rbx.platform.typedef.__u_int = uint
|
89
|
+
rbx.platform.typedef.__u_long = ulong
|
90
|
+
rbx.platform.typedef.__u_quad_t = ulong_long
|
91
|
+
rbx.platform.typedef.__u_short = ushort
|
92
|
+
rbx.platform.typedef.__uid_t = uint
|
93
|
+
rbx.platform.typedef.__uint16_t = ushort
|
94
|
+
rbx.platform.typedef.__uint32_t = uint
|
95
|
+
rbx.platform.typedef.__uint64_t = ulong_long
|
96
|
+
rbx.platform.typedef.__uint8_t = uchar
|
97
|
+
rbx.platform.typedef.__uint_least16_t = ushort
|
98
|
+
rbx.platform.typedef.__uint_least32_t = uint
|
99
|
+
rbx.platform.typedef.__uint_least64_t = ulong_long
|
100
|
+
rbx.platform.typedef.__uint_least8_t = uchar
|
101
|
+
rbx.platform.typedef.__uintmax_t = ulong_long
|
102
|
+
rbx.platform.typedef.__useconds_t = uint
|
103
|
+
rbx.platform.typedef.blkcnt_t = long_long
|
104
|
+
rbx.platform.typedef.blksize_t = long
|
105
|
+
rbx.platform.typedef.clock_t = long
|
106
|
+
rbx.platform.typedef.clockid_t = int
|
107
|
+
rbx.platform.typedef.daddr_t = int
|
108
|
+
rbx.platform.typedef.dev_t = ulong_long
|
109
|
+
rbx.platform.typedef.fd_mask = long
|
110
|
+
rbx.platform.typedef.fsblkcnt_t = ulong_long
|
111
|
+
rbx.platform.typedef.fsfilcnt_t = ulong_long
|
112
|
+
rbx.platform.typedef.gid_t = uint
|
113
|
+
rbx.platform.typedef.id_t = uint
|
114
|
+
rbx.platform.typedef.in_addr_t = uint
|
115
|
+
rbx.platform.typedef.in_port_t = ushort
|
116
|
+
rbx.platform.typedef.ino_t = ulong_long
|
117
|
+
rbx.platform.typedef.int16_t = short
|
118
|
+
rbx.platform.typedef.int32_t = int
|
119
|
+
rbx.platform.typedef.int64_t = long_long
|
120
|
+
rbx.platform.typedef.int8_t = char
|
121
|
+
rbx.platform.typedef.int_fast16_t = int
|
122
|
+
rbx.platform.typedef.int_fast32_t = int
|
123
|
+
rbx.platform.typedef.int_fast64_t = long_long
|
124
|
+
rbx.platform.typedef.int_fast8_t = char
|
125
|
+
rbx.platform.typedef.int_least16_t = short
|
126
|
+
rbx.platform.typedef.int_least32_t = int
|
127
|
+
rbx.platform.typedef.int_least64_t = long_long
|
128
|
+
rbx.platform.typedef.int_least8_t = char
|
129
|
+
rbx.platform.typedef.intmax_t = long_long
|
130
|
+
rbx.platform.typedef.intptr_t = int
|
131
|
+
rbx.platform.typedef.key_t = int
|
132
|
+
rbx.platform.typedef.loff_t = long_long
|
133
|
+
rbx.platform.typedef.mode_t = uint
|
134
|
+
rbx.platform.typedef.nlink_t = uint
|
135
|
+
rbx.platform.typedef.off_t = long_long
|
136
|
+
rbx.platform.typedef.pid_t = int
|
137
|
+
rbx.platform.typedef.pthread_key_t = uint
|
138
|
+
rbx.platform.typedef.pthread_once_t = int
|
139
|
+
rbx.platform.typedef.pthread_t = ulong
|
140
|
+
rbx.platform.typedef.ptrdiff_t = int
|
141
|
+
rbx.platform.typedef.quad_t = long_long
|
142
|
+
rbx.platform.typedef.register_t = long
|
143
|
+
rbx.platform.typedef.rlim_t = ulong_long
|
144
|
+
rbx.platform.typedef.sa_family_t = ushort
|
145
|
+
rbx.platform.typedef.size_t = uint
|
146
|
+
rbx.platform.typedef.socklen_t = uint
|
147
|
+
rbx.platform.typedef.ssize_t = int
|
148
|
+
rbx.platform.typedef.suseconds_t = long
|
149
|
+
rbx.platform.typedef.time_t = long
|
150
|
+
rbx.platform.typedef.timer_t = pointer
|
151
|
+
rbx.platform.typedef.u_char = uchar
|
152
|
+
rbx.platform.typedef.u_int = uint
|
153
|
+
rbx.platform.typedef.u_int16_t = ushort
|
154
|
+
rbx.platform.typedef.u_int32_t = uint
|
155
|
+
rbx.platform.typedef.u_int64_t = ulong_long
|
156
|
+
rbx.platform.typedef.u_int8_t = uchar
|
157
|
+
rbx.platform.typedef.u_long = ulong
|
158
|
+
rbx.platform.typedef.u_quad_t = ulong_long
|
159
|
+
rbx.platform.typedef.u_short = ushort
|
160
|
+
rbx.platform.typedef.uid_t = uint
|
161
|
+
rbx.platform.typedef.uint = uint
|
162
|
+
rbx.platform.typedef.uint16_t = ushort
|
163
|
+
rbx.platform.typedef.uint32_t = uint
|
164
|
+
rbx.platform.typedef.uint64_t = ulong_long
|
165
|
+
rbx.platform.typedef.uint8_t = uchar
|
166
|
+
rbx.platform.typedef.uint_fast16_t = uint
|
167
|
+
rbx.platform.typedef.uint_fast32_t = uint
|
168
|
+
rbx.platform.typedef.uint_fast64_t = ulong_long
|
169
|
+
rbx.platform.typedef.uint_fast8_t = uchar
|
170
|
+
rbx.platform.typedef.uint_least16_t = ushort
|
171
|
+
rbx.platform.typedef.uint_least32_t = uint
|
172
|
+
rbx.platform.typedef.uint_least64_t = ulong_long
|
173
|
+
rbx.platform.typedef.uint_least8_t = uchar
|
174
|
+
rbx.platform.typedef.uintmax_t = ulong_long
|
175
|
+
rbx.platform.typedef.uintptr_t = uint
|
176
|
+
rbx.platform.typedef.ulong = ulong
|
177
|
+
rbx.platform.typedef.ushort = ushort
|
178
|
+
rbx.platform.typedef.wchar_t = long
|
@@ -0,0 +1,141 @@
|
|
1
|
+
rbx.platform.typedef.*__caddr_t = char
|
2
|
+
rbx.platform.typedef.__blkcnt64_t = long
|
3
|
+
rbx.platform.typedef.__blkcnt_t = long
|
4
|
+
rbx.platform.typedef.__blksize_t = int
|
5
|
+
rbx.platform.typedef.__clock_t = long
|
6
|
+
rbx.platform.typedef.__clockid_t = int
|
7
|
+
rbx.platform.typedef.__daddr_t = int
|
8
|
+
rbx.platform.typedef.__dev_t = ulong
|
9
|
+
rbx.platform.typedef.__fd_mask = long
|
10
|
+
rbx.platform.typedef.__fsblkcnt64_t = ulong
|
11
|
+
rbx.platform.typedef.__fsblkcnt_t = ulong
|
12
|
+
rbx.platform.typedef.__fsfilcnt64_t = ulong
|
13
|
+
rbx.platform.typedef.__fsfilcnt_t = ulong
|
14
|
+
rbx.platform.typedef.__fsword_t = long
|
15
|
+
rbx.platform.typedef.__gid_t = uint
|
16
|
+
rbx.platform.typedef.__id_t = uint
|
17
|
+
rbx.platform.typedef.__ino64_t = ulong
|
18
|
+
rbx.platform.typedef.__ino_t = ulong
|
19
|
+
rbx.platform.typedef.__int16_t = short
|
20
|
+
rbx.platform.typedef.__int32_t = int
|
21
|
+
rbx.platform.typedef.__int64_t = long
|
22
|
+
rbx.platform.typedef.__int8_t = char
|
23
|
+
rbx.platform.typedef.__int_least16_t = short
|
24
|
+
rbx.platform.typedef.__int_least32_t = int
|
25
|
+
rbx.platform.typedef.__int_least64_t = long
|
26
|
+
rbx.platform.typedef.__int_least8_t = char
|
27
|
+
rbx.platform.typedef.__intmax_t = long
|
28
|
+
rbx.platform.typedef.__intptr_t = long
|
29
|
+
rbx.platform.typedef.__key_t = int
|
30
|
+
rbx.platform.typedef.__loff_t = long
|
31
|
+
rbx.platform.typedef.__mode_t = uint
|
32
|
+
rbx.platform.typedef.__nlink_t = uint
|
33
|
+
rbx.platform.typedef.__off64_t = long
|
34
|
+
rbx.platform.typedef.__off_t = long
|
35
|
+
rbx.platform.typedef.__pid_t = int
|
36
|
+
rbx.platform.typedef.__priority_which_t = int
|
37
|
+
rbx.platform.typedef.__quad_t = long
|
38
|
+
rbx.platform.typedef.__rlim64_t = ulong
|
39
|
+
rbx.platform.typedef.__rlim_t = ulong
|
40
|
+
rbx.platform.typedef.__rlimit_resource_t = int
|
41
|
+
rbx.platform.typedef.__rusage_who_t = int
|
42
|
+
rbx.platform.typedef.__sig_atomic_t = int
|
43
|
+
rbx.platform.typedef.__socklen_t = uint
|
44
|
+
rbx.platform.typedef.__ssize_t = long
|
45
|
+
rbx.platform.typedef.__suseconds_t = long
|
46
|
+
rbx.platform.typedef.__syscall_slong_t = long
|
47
|
+
rbx.platform.typedef.__syscall_ulong_t = ulong
|
48
|
+
rbx.platform.typedef.__time_t = long
|
49
|
+
rbx.platform.typedef.__timer_t = pointer
|
50
|
+
rbx.platform.typedef.__u_char = uchar
|
51
|
+
rbx.platform.typedef.__u_int = uint
|
52
|
+
rbx.platform.typedef.__u_long = ulong
|
53
|
+
rbx.platform.typedef.__u_quad_t = ulong
|
54
|
+
rbx.platform.typedef.__u_short = ushort
|
55
|
+
rbx.platform.typedef.__uid_t = uint
|
56
|
+
rbx.platform.typedef.__uint16_t = ushort
|
57
|
+
rbx.platform.typedef.__uint32_t = uint
|
58
|
+
rbx.platform.typedef.__uint64_t = ulong
|
59
|
+
rbx.platform.typedef.__uint8_t = uchar
|
60
|
+
rbx.platform.typedef.__uint_least16_t = ushort
|
61
|
+
rbx.platform.typedef.__uint_least32_t = uint
|
62
|
+
rbx.platform.typedef.__uint_least64_t = ulong
|
63
|
+
rbx.platform.typedef.__uint_least8_t = uchar
|
64
|
+
rbx.platform.typedef.__uintmax_t = ulong
|
65
|
+
rbx.platform.typedef.__useconds_t = uint
|
66
|
+
rbx.platform.typedef.blkcnt_t = long
|
67
|
+
rbx.platform.typedef.blksize_t = int
|
68
|
+
rbx.platform.typedef.clock_t = long
|
69
|
+
rbx.platform.typedef.clockid_t = int
|
70
|
+
rbx.platform.typedef.daddr_t = int
|
71
|
+
rbx.platform.typedef.dev_t = ulong
|
72
|
+
rbx.platform.typedef.fd_mask = long
|
73
|
+
rbx.platform.typedef.fsblkcnt_t = ulong
|
74
|
+
rbx.platform.typedef.fsfilcnt_t = ulong
|
75
|
+
rbx.platform.typedef.gid_t = uint
|
76
|
+
rbx.platform.typedef.id_t = uint
|
77
|
+
rbx.platform.typedef.in_addr_t = uint
|
78
|
+
rbx.platform.typedef.in_port_t = ushort
|
79
|
+
rbx.platform.typedef.ino_t = ulong
|
80
|
+
rbx.platform.typedef.int16_t = short
|
81
|
+
rbx.platform.typedef.int32_t = int
|
82
|
+
rbx.platform.typedef.int64_t = long
|
83
|
+
rbx.platform.typedef.int8_t = char
|
84
|
+
rbx.platform.typedef.int_fast16_t = long
|
85
|
+
rbx.platform.typedef.int_fast32_t = long
|
86
|
+
rbx.platform.typedef.int_fast64_t = long
|
87
|
+
rbx.platform.typedef.int_fast8_t = char
|
88
|
+
rbx.platform.typedef.int_least16_t = short
|
89
|
+
rbx.platform.typedef.int_least32_t = int
|
90
|
+
rbx.platform.typedef.int_least64_t = long
|
91
|
+
rbx.platform.typedef.int_least8_t = char
|
92
|
+
rbx.platform.typedef.intmax_t = long
|
93
|
+
rbx.platform.typedef.intptr_t = long
|
94
|
+
rbx.platform.typedef.key_t = int
|
95
|
+
rbx.platform.typedef.loff_t = long
|
96
|
+
rbx.platform.typedef.mode_t = uint
|
97
|
+
rbx.platform.typedef.nlink_t = uint
|
98
|
+
rbx.platform.typedef.off_t = long
|
99
|
+
rbx.platform.typedef.pid_t = int
|
100
|
+
rbx.platform.typedef.pthread_key_t = uint
|
101
|
+
rbx.platform.typedef.pthread_once_t = int
|
102
|
+
rbx.platform.typedef.pthread_t = ulong
|
103
|
+
rbx.platform.typedef.ptrdiff_t = long
|
104
|
+
rbx.platform.typedef.quad_t = long
|
105
|
+
rbx.platform.typedef.register_t = long
|
106
|
+
rbx.platform.typedef.rlim_t = ulong
|
107
|
+
rbx.platform.typedef.sa_family_t = ushort
|
108
|
+
rbx.platform.typedef.size_t = ulong
|
109
|
+
rbx.platform.typedef.socklen_t = uint
|
110
|
+
rbx.platform.typedef.ssize_t = long
|
111
|
+
rbx.platform.typedef.suseconds_t = long
|
112
|
+
rbx.platform.typedef.time_t = long
|
113
|
+
rbx.platform.typedef.timer_t = pointer
|
114
|
+
rbx.platform.typedef.u_char = uchar
|
115
|
+
rbx.platform.typedef.u_int = uint
|
116
|
+
rbx.platform.typedef.u_int16_t = ushort
|
117
|
+
rbx.platform.typedef.u_int32_t = uint
|
118
|
+
rbx.platform.typedef.u_int64_t = ulong_long
|
119
|
+
rbx.platform.typedef.u_int8_t = uchar
|
120
|
+
rbx.platform.typedef.u_long = ulong
|
121
|
+
rbx.platform.typedef.u_quad_t = ulong
|
122
|
+
rbx.platform.typedef.u_short = ushort
|
123
|
+
rbx.platform.typedef.uid_t = uint
|
124
|
+
rbx.platform.typedef.uint = uint
|
125
|
+
rbx.platform.typedef.uint16_t = ushort
|
126
|
+
rbx.platform.typedef.uint32_t = uint
|
127
|
+
rbx.platform.typedef.uint64_t = ulong
|
128
|
+
rbx.platform.typedef.uint8_t = uchar
|
129
|
+
rbx.platform.typedef.uint_fast16_t = ulong
|
130
|
+
rbx.platform.typedef.uint_fast32_t = ulong
|
131
|
+
rbx.platform.typedef.uint_fast64_t = ulong
|
132
|
+
rbx.platform.typedef.uint_fast8_t = uchar
|
133
|
+
rbx.platform.typedef.uint_least16_t = ushort
|
134
|
+
rbx.platform.typedef.uint_least32_t = uint
|
135
|
+
rbx.platform.typedef.uint_least64_t = ulong
|
136
|
+
rbx.platform.typedef.uint_least8_t = uchar
|
137
|
+
rbx.platform.typedef.uintmax_t = ulong
|
138
|
+
rbx.platform.typedef.uintptr_t = ulong
|
139
|
+
rbx.platform.typedef.ulong = ulong
|
140
|
+
rbx.platform.typedef.ushort = ushort
|
141
|
+
rbx.platform.typedef.wchar_t = int
|
@@ -0,0 +1,141 @@
|
|
1
|
+
rbx.platform.typedef.*__caddr_t = char
|
2
|
+
rbx.platform.typedef.__blkcnt64_t = long
|
3
|
+
rbx.platform.typedef.__blkcnt_t = long
|
4
|
+
rbx.platform.typedef.__blksize_t = int
|
5
|
+
rbx.platform.typedef.__clock_t = long
|
6
|
+
rbx.platform.typedef.__clockid_t = int
|
7
|
+
rbx.platform.typedef.__daddr_t = int
|
8
|
+
rbx.platform.typedef.__dev_t = ulong
|
9
|
+
rbx.platform.typedef.__fd_mask = long
|
10
|
+
rbx.platform.typedef.__fsblkcnt64_t = ulong
|
11
|
+
rbx.platform.typedef.__fsblkcnt_t = ulong
|
12
|
+
rbx.platform.typedef.__fsfilcnt64_t = ulong
|
13
|
+
rbx.platform.typedef.__fsfilcnt_t = ulong
|
14
|
+
rbx.platform.typedef.__fsword_t = long
|
15
|
+
rbx.platform.typedef.__gid_t = uint
|
16
|
+
rbx.platform.typedef.__id_t = uint
|
17
|
+
rbx.platform.typedef.__ino64_t = ulong
|
18
|
+
rbx.platform.typedef.__ino_t = ulong
|
19
|
+
rbx.platform.typedef.__int16_t = short
|
20
|
+
rbx.platform.typedef.__int32_t = int
|
21
|
+
rbx.platform.typedef.__int64_t = long
|
22
|
+
rbx.platform.typedef.__int8_t = char
|
23
|
+
rbx.platform.typedef.__int_least16_t = short
|
24
|
+
rbx.platform.typedef.__int_least32_t = int
|
25
|
+
rbx.platform.typedef.__int_least64_t = long
|
26
|
+
rbx.platform.typedef.__int_least8_t = char
|
27
|
+
rbx.platform.typedef.__intmax_t = long
|
28
|
+
rbx.platform.typedef.__intptr_t = long
|
29
|
+
rbx.platform.typedef.__key_t = int
|
30
|
+
rbx.platform.typedef.__loff_t = long
|
31
|
+
rbx.platform.typedef.__mode_t = uint
|
32
|
+
rbx.platform.typedef.__nlink_t = uint
|
33
|
+
rbx.platform.typedef.__off64_t = long
|
34
|
+
rbx.platform.typedef.__off_t = long
|
35
|
+
rbx.platform.typedef.__pid_t = int
|
36
|
+
rbx.platform.typedef.__priority_which_t = int
|
37
|
+
rbx.platform.typedef.__quad_t = long
|
38
|
+
rbx.platform.typedef.__rlim64_t = ulong
|
39
|
+
rbx.platform.typedef.__rlim_t = ulong
|
40
|
+
rbx.platform.typedef.__rlimit_resource_t = int
|
41
|
+
rbx.platform.typedef.__rusage_who_t = int
|
42
|
+
rbx.platform.typedef.__sig_atomic_t = int
|
43
|
+
rbx.platform.typedef.__socklen_t = uint
|
44
|
+
rbx.platform.typedef.__ssize_t = long
|
45
|
+
rbx.platform.typedef.__suseconds_t = long
|
46
|
+
rbx.platform.typedef.__syscall_slong_t = long
|
47
|
+
rbx.platform.typedef.__syscall_ulong_t = ulong
|
48
|
+
rbx.platform.typedef.__time_t = long
|
49
|
+
rbx.platform.typedef.__timer_t = pointer
|
50
|
+
rbx.platform.typedef.__u_char = uchar
|
51
|
+
rbx.platform.typedef.__u_int = uint
|
52
|
+
rbx.platform.typedef.__u_long = ulong
|
53
|
+
rbx.platform.typedef.__u_quad_t = ulong
|
54
|
+
rbx.platform.typedef.__u_short = ushort
|
55
|
+
rbx.platform.typedef.__uid_t = uint
|
56
|
+
rbx.platform.typedef.__uint16_t = ushort
|
57
|
+
rbx.platform.typedef.__uint32_t = uint
|
58
|
+
rbx.platform.typedef.__uint64_t = ulong
|
59
|
+
rbx.platform.typedef.__uint8_t = uchar
|
60
|
+
rbx.platform.typedef.__uint_least16_t = ushort
|
61
|
+
rbx.platform.typedef.__uint_least32_t = uint
|
62
|
+
rbx.platform.typedef.__uint_least64_t = ulong
|
63
|
+
rbx.platform.typedef.__uint_least8_t = uchar
|
64
|
+
rbx.platform.typedef.__uintmax_t = ulong
|
65
|
+
rbx.platform.typedef.__useconds_t = uint
|
66
|
+
rbx.platform.typedef.blkcnt_t = long
|
67
|
+
rbx.platform.typedef.blksize_t = int
|
68
|
+
rbx.platform.typedef.clock_t = long
|
69
|
+
rbx.platform.typedef.clockid_t = int
|
70
|
+
rbx.platform.typedef.daddr_t = int
|
71
|
+
rbx.platform.typedef.dev_t = ulong
|
72
|
+
rbx.platform.typedef.fd_mask = long
|
73
|
+
rbx.platform.typedef.fsblkcnt_t = ulong
|
74
|
+
rbx.platform.typedef.fsfilcnt_t = ulong
|
75
|
+
rbx.platform.typedef.gid_t = uint
|
76
|
+
rbx.platform.typedef.id_t = uint
|
77
|
+
rbx.platform.typedef.in_addr_t = uint
|
78
|
+
rbx.platform.typedef.in_port_t = ushort
|
79
|
+
rbx.platform.typedef.ino_t = ulong
|
80
|
+
rbx.platform.typedef.int16_t = short
|
81
|
+
rbx.platform.typedef.int32_t = int
|
82
|
+
rbx.platform.typedef.int64_t = long
|
83
|
+
rbx.platform.typedef.int8_t = char
|
84
|
+
rbx.platform.typedef.int_fast16_t = long
|
85
|
+
rbx.platform.typedef.int_fast32_t = long
|
86
|
+
rbx.platform.typedef.int_fast64_t = long
|
87
|
+
rbx.platform.typedef.int_fast8_t = char
|
88
|
+
rbx.platform.typedef.int_least16_t = short
|
89
|
+
rbx.platform.typedef.int_least32_t = int
|
90
|
+
rbx.platform.typedef.int_least64_t = long
|
91
|
+
rbx.platform.typedef.int_least8_t = char
|
92
|
+
rbx.platform.typedef.intmax_t = long
|
93
|
+
rbx.platform.typedef.intptr_t = long
|
94
|
+
rbx.platform.typedef.key_t = int
|
95
|
+
rbx.platform.typedef.loff_t = long
|
96
|
+
rbx.platform.typedef.mode_t = uint
|
97
|
+
rbx.platform.typedef.nlink_t = uint
|
98
|
+
rbx.platform.typedef.off_t = long
|
99
|
+
rbx.platform.typedef.pid_t = int
|
100
|
+
rbx.platform.typedef.pthread_key_t = uint
|
101
|
+
rbx.platform.typedef.pthread_once_t = int
|
102
|
+
rbx.platform.typedef.pthread_t = ulong
|
103
|
+
rbx.platform.typedef.ptrdiff_t = long
|
104
|
+
rbx.platform.typedef.quad_t = long
|
105
|
+
rbx.platform.typedef.register_t = long
|
106
|
+
rbx.platform.typedef.rlim_t = ulong
|
107
|
+
rbx.platform.typedef.sa_family_t = ushort
|
108
|
+
rbx.platform.typedef.size_t = ulong
|
109
|
+
rbx.platform.typedef.socklen_t = uint
|
110
|
+
rbx.platform.typedef.ssize_t = long
|
111
|
+
rbx.platform.typedef.suseconds_t = long
|
112
|
+
rbx.platform.typedef.time_t = long
|
113
|
+
rbx.platform.typedef.timer_t = pointer
|
114
|
+
rbx.platform.typedef.u_char = uchar
|
115
|
+
rbx.platform.typedef.u_int = uint
|
116
|
+
rbx.platform.typedef.u_int16_t = ushort
|
117
|
+
rbx.platform.typedef.u_int32_t = uint
|
118
|
+
rbx.platform.typedef.u_int64_t = ulong_long
|
119
|
+
rbx.platform.typedef.u_int8_t = uchar
|
120
|
+
rbx.platform.typedef.u_long = ulong
|
121
|
+
rbx.platform.typedef.u_quad_t = ulong
|
122
|
+
rbx.platform.typedef.u_short = ushort
|
123
|
+
rbx.platform.typedef.uid_t = uint
|
124
|
+
rbx.platform.typedef.uint = uint
|
125
|
+
rbx.platform.typedef.uint16_t = ushort
|
126
|
+
rbx.platform.typedef.uint32_t = uint
|
127
|
+
rbx.platform.typedef.uint64_t = ulong
|
128
|
+
rbx.platform.typedef.uint8_t = uchar
|
129
|
+
rbx.platform.typedef.uint_fast16_t = ulong
|
130
|
+
rbx.platform.typedef.uint_fast32_t = ulong
|
131
|
+
rbx.platform.typedef.uint_fast64_t = ulong
|
132
|
+
rbx.platform.typedef.uint_fast8_t = uchar
|
133
|
+
rbx.platform.typedef.uint_least16_t = ushort
|
134
|
+
rbx.platform.typedef.uint_least32_t = uint
|
135
|
+
rbx.platform.typedef.uint_least64_t = ulong
|
136
|
+
rbx.platform.typedef.uint_least8_t = uchar
|
137
|
+
rbx.platform.typedef.uintmax_t = ulong
|
138
|
+
rbx.platform.typedef.uintptr_t = ulong
|
139
|
+
rbx.platform.typedef.ulong = ulong
|
140
|
+
rbx.platform.typedef.ushort = ushort
|
141
|
+
rbx.platform.typedef.wchar_t = int
|
data/lib/ffi/platform.rb
CHANGED
@@ -29,13 +29,15 @@
|
|
29
29
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
|
30
30
|
|
31
31
|
require 'rbconfig'
|
32
|
+
require_relative 'compat'
|
33
|
+
|
32
34
|
module FFI
|
33
35
|
class PlatformError < LoadError; end
|
34
36
|
|
35
37
|
# This module defines different constants and class methods to play with
|
36
38
|
# various platforms.
|
37
39
|
module Platform
|
38
|
-
OS = case RbConfig::CONFIG['host_os'].downcase
|
40
|
+
OS = FFI.make_shareable(case RbConfig::CONFIG['host_os'].downcase
|
39
41
|
when /linux/
|
40
42
|
"linux"
|
41
43
|
when /darwin/
|
@@ -54,13 +56,13 @@ module FFI
|
|
54
56
|
"windows"
|
55
57
|
else
|
56
58
|
RbConfig::CONFIG['host_os'].downcase
|
57
|
-
end
|
59
|
+
end)
|
58
60
|
|
59
61
|
OSVERSION = RbConfig::CONFIG['host_os'].gsub(/[^\d]/, '').to_i
|
60
62
|
|
61
|
-
CPU = RbConfig::CONFIG['host_cpu']
|
63
|
+
CPU = FFI.make_shareable(RbConfig::CONFIG['host_cpu'])
|
62
64
|
|
63
|
-
ARCH = case CPU.downcase
|
65
|
+
ARCH = FFI.make_shareable(case CPU.downcase
|
64
66
|
when /amd64|x86_64|x64/
|
65
67
|
"x86_64"
|
66
68
|
when /i\d86|x86|i86pc/
|
@@ -81,7 +83,7 @@ module FFI
|
|
81
83
|
end
|
82
84
|
else
|
83
85
|
RbConfig::CONFIG['host_cpu']
|
84
|
-
end
|
86
|
+
end)
|
85
87
|
|
86
88
|
private
|
87
89
|
# @param [String) os
|
@@ -105,21 +107,21 @@ module FFI
|
|
105
107
|
# Add the version for known ABI breaks
|
106
108
|
name_version = "12" if IS_FREEBSD && OSVERSION >= 12 # 64-bit inodes
|
107
109
|
|
108
|
-
NAME = "#{ARCH}-#{OS}#{name_version}"
|
109
|
-
CONF_DIR = File.join(File.dirname(__FILE__), 'platform', NAME)
|
110
|
+
NAME = FFI.make_shareable("#{ARCH}-#{OS}#{name_version}")
|
111
|
+
CONF_DIR = FFI.make_shareable(File.join(File.dirname(__FILE__), 'platform', NAME))
|
110
112
|
|
111
113
|
public
|
112
114
|
|
113
|
-
LIBPREFIX = case OS
|
115
|
+
LIBPREFIX = FFI.make_shareable(case OS
|
114
116
|
when /windows|msys/
|
115
117
|
''
|
116
118
|
when /cygwin/
|
117
119
|
'cyg'
|
118
120
|
else
|
119
121
|
'lib'
|
120
|
-
end
|
122
|
+
end)
|
121
123
|
|
122
|
-
LIBSUFFIX = case OS
|
124
|
+
LIBSUFFIX = FFI.make_shareable(case OS
|
123
125
|
when /darwin/
|
124
126
|
'dylib'
|
125
127
|
when /linux|bsd|solaris/
|
@@ -129,9 +131,9 @@ module FFI
|
|
129
131
|
else
|
130
132
|
# Punt and just assume a sane unix (i.e. anything but AIX)
|
131
133
|
'so'
|
132
|
-
end
|
134
|
+
end)
|
133
135
|
|
134
|
-
LIBC = if IS_WINDOWS
|
136
|
+
LIBC = FFI.make_shareable(if IS_WINDOWS
|
135
137
|
crtname = RbConfig::CONFIG["RUBY_SO_NAME"][/msvc\w+/] || 'ucrtbase'
|
136
138
|
"#{crtname}.dll"
|
137
139
|
elsif IS_GNU
|
@@ -143,7 +145,7 @@ module FFI
|
|
143
145
|
"msys-2.0.dll"
|
144
146
|
else
|
145
147
|
"#{LIBPREFIX}c.#{LIBSUFFIX}"
|
146
|
-
end
|
148
|
+
end)
|
147
149
|
|
148
150
|
LITTLE_ENDIAN = 1234 unless defined?(LITTLE_ENDIAN)
|
149
151
|
BIG_ENDIAN = 4321 unless defined?(BIG_ENDIAN)
|
data/lib/ffi/struct.rb
CHANGED
@@ -203,9 +203,10 @@ module FFI
|
|
203
203
|
# :field3, :string
|
204
204
|
# end
|
205
205
|
def layout(*spec)
|
206
|
-
warn "[DEPRECATION] Struct layout is already defined for class #{self.inspect}. Redefinition as in #{caller[0]} will be disallowed in ffi-2.0." if defined?(@layout)
|
207
206
|
return @layout if spec.size == 0
|
208
207
|
|
208
|
+
warn "[DEPRECATION] Struct layout is already defined for class #{self.inspect}. Redefinition as in #{caller[0]} will be disallowed in ffi-2.0." if defined?(@layout)
|
209
|
+
|
209
210
|
builder = StructLayoutBuilder.new
|
210
211
|
builder.union = self < Union
|
211
212
|
builder.packed = @packed if defined?(@packed)
|
data/lib/ffi/struct_layout.rb
CHANGED
@@ -105,9 +105,10 @@ module FFI
|
|
105
105
|
# @return [nil]
|
106
106
|
# @raise if a constant is missing and +:required+ was set to +true+ (see {#initialize})
|
107
107
|
def calculate(options = {})
|
108
|
-
|
108
|
+
binary_path = nil
|
109
109
|
|
110
110
|
Tempfile.open("#{@prefix}.const_generator") do |f|
|
111
|
+
binary_path = f.path + ".bin"
|
111
112
|
@includes.each do |inc|
|
112
113
|
f.puts "#include <#{inc}>"
|
113
114
|
end
|
@@ -125,7 +126,7 @@ module FFI
|
|
125
126
|
f.flush
|
126
127
|
|
127
128
|
cc = ENV['CC'] || 'gcc'
|
128
|
-
output = `#{cc} #{options[:cppflags]} -D_DARWIN_USE_64_BIT_INODE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -x c -Wall -Werror #{f.path} -o #{
|
129
|
+
output = `#{cc} #{options[:cppflags]} -D_DARWIN_USE_64_BIT_INODE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -x c -Wall -Werror #{f.path} -o #{binary_path} 2>&1`
|
129
130
|
|
130
131
|
unless $?.success? then
|
131
132
|
output = output.split("\n").map { |l| "\t#{l}" }.join "\n"
|
@@ -133,8 +134,8 @@ module FFI
|
|
133
134
|
end
|
134
135
|
end
|
135
136
|
|
136
|
-
output = `#{
|
137
|
-
File.unlink(
|
137
|
+
output = `#{binary_path}`
|
138
|
+
File.unlink(binary_path + (FFI::Platform.windows? ? ".exe" : ""))
|
138
139
|
output.each_line do |line|
|
139
140
|
line =~ /^(\S+)\s(.*)$/
|
140
141
|
const = @constants[$1]
|
data/lib/ffi/types.rb
CHANGED
@@ -33,12 +33,24 @@
|
|
33
33
|
# see {file:README}
|
34
34
|
module FFI
|
35
35
|
|
36
|
+
unless defined?(self.custom_typedefs)
|
37
|
+
# Truffleruby and JRuby don't support Ractor so far.
|
38
|
+
# So they don't need separation between builtin and custom types.
|
39
|
+
def self.custom_typedefs
|
40
|
+
TypeDefs
|
41
|
+
end
|
42
|
+
writable_typemap = true
|
43
|
+
end
|
44
|
+
|
36
45
|
# @param [Type, DataConverter, Symbol] old type definition used by {FFI.find_type}
|
37
46
|
# @param [Symbol] add new type definition's name to add
|
38
47
|
# @return [Type]
|
39
48
|
# Add a definition type to type definitions.
|
49
|
+
#
|
50
|
+
# The type definition is local per Ractor.
|
40
51
|
def self.typedef(old, add)
|
41
|
-
|
52
|
+
tm = custom_typedefs
|
53
|
+
tm[add] = self.find_type(old)
|
42
54
|
end
|
43
55
|
|
44
56
|
# (see FFI.typedef)
|
@@ -46,6 +58,14 @@ module FFI
|
|
46
58
|
typedef old, add
|
47
59
|
end
|
48
60
|
|
61
|
+
class << self
|
62
|
+
private def __typedef(old, add)
|
63
|
+
TypeDefs[add] = self.find_type(old)
|
64
|
+
end
|
65
|
+
|
66
|
+
private :custom_typedefs
|
67
|
+
end
|
68
|
+
|
49
69
|
|
50
70
|
# @param [Type, DataConverter, Symbol] name
|
51
71
|
# @param [Hash] type_map if nil, {FFI::TypeDefs} is used
|
@@ -57,9 +77,12 @@ module FFI
|
|
57
77
|
if name.is_a?(Type)
|
58
78
|
name
|
59
79
|
|
60
|
-
elsif type_map
|
80
|
+
elsif type_map&.has_key?(name)
|
61
81
|
type_map[name]
|
62
82
|
|
83
|
+
elsif (tm=custom_typedefs).has_key?(name)
|
84
|
+
tm[name]
|
85
|
+
|
63
86
|
elsif TypeDefs.has_key?(name)
|
64
87
|
TypeDefs[name]
|
65
88
|
|
@@ -168,7 +191,7 @@ module FFI
|
|
168
191
|
end
|
169
192
|
end
|
170
193
|
|
171
|
-
|
194
|
+
__typedef(StrPtrConverter, :strptr)
|
172
195
|
|
173
196
|
# @param type +type+ is an instance of class accepted by {FFI.find_type}
|
174
197
|
# @return [Numeric]
|
@@ -184,11 +207,13 @@ module FFI
|
|
184
207
|
f.each_line { |line|
|
185
208
|
if line.index(prefix) == 0
|
186
209
|
new_type, orig_type = line.chomp.slice(prefix.length..-1).split(/\s*=\s*/)
|
187
|
-
|
210
|
+
__typedef(orig_type.to_sym, new_type.to_sym)
|
188
211
|
end
|
189
212
|
}
|
190
213
|
end
|
191
|
-
|
214
|
+
__typedef :pointer, :caddr_t
|
192
215
|
rescue Errno::ENOENT
|
193
216
|
end
|
217
|
+
|
218
|
+
FFI.make_shareable(TypeDefs) unless writable_typemap
|
194
219
|
end
|