ffi 1.12.2 → 1.14.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +82 -0
- data/Gemfile +4 -2
- data/README.md +10 -2
- data/Rakefile +31 -43
- data/ext/ffi_c/AbstractMemory.c +24 -25
- data/ext/ffi_c/Buffer.c +4 -9
- data/ext/ffi_c/Call.c +3 -14
- data/ext/ffi_c/ClosurePool.c +75 -25
- data/ext/ffi_c/ClosurePool.h +3 -1
- data/ext/ffi_c/DynamicLibrary.c +1 -6
- data/ext/ffi_c/Function.c +15 -35
- data/ext/ffi_c/FunctionInfo.c +3 -8
- data/ext/ffi_c/LastError.c +2 -6
- data/ext/ffi_c/LongDouble.c +5 -3
- data/ext/ffi_c/LongDouble.h +0 -4
- data/ext/ffi_c/MemoryPointer.c +3 -8
- data/ext/ffi_c/MethodHandle.c +21 -31
- data/ext/ffi_c/MethodHandle.h +3 -2
- data/ext/ffi_c/Platform.c +3 -7
- data/ext/ffi_c/Pointer.c +25 -26
- data/ext/ffi_c/Struct.c +3 -6
- data/ext/ffi_c/StructByValue.c +2 -7
- data/ext/ffi_c/StructLayout.c +9 -7
- data/ext/ffi_c/Thread.c +0 -8
- data/ext/ffi_c/Thread.h +1 -9
- data/ext/ffi_c/Type.c +1 -1
- data/ext/ffi_c/Variadic.c +2 -7
- data/ext/ffi_c/compat.h +4 -0
- data/ext/ffi_c/extconf.rb +33 -23
- data/ext/ffi_c/libffi/.travis.yml +4 -0
- data/ext/ffi_c/libffi/.travis/bfin-sim.exp +1 -1
- data/ext/ffi_c/libffi/.travis/build.sh +4 -0
- data/ext/ffi_c/libffi/.travis/m32r-sim.exp +1 -1
- data/ext/ffi_c/libffi/.travis/moxie-sim.exp +1 -1
- data/ext/ffi_c/libffi/.travis/or1k-sim.exp +1 -1
- data/ext/ffi_c/libffi/.travis/powerpc-eabisim.exp +1 -1
- data/ext/ffi_c/libffi/.travis/wine-sim.exp +1 -1
- data/ext/ffi_c/libffi/Makefile.am +49 -58
- data/ext/ffi_c/libffi/README.md +11 -1
- data/ext/ffi_c/libffi/config.guess +552 -331
- data/ext/ffi_c/libffi/config.sub +1321 -1306
- data/ext/ffi_c/libffi/configure.ac +31 -10
- data/ext/ffi_c/libffi/configure.host +32 -20
- data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
- data/ext/ffi_c/libffi/doc/libffi.texi +997 -0
- data/ext/ffi_c/libffi/doc/version.texi +4 -0
- data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +1 -1
- data/ext/ffi_c/libffi/include/ffi.h.in +8 -0
- data/ext/ffi_c/libffi/libffi.map.in +8 -12
- data/ext/ffi_c/libffi/libtool-version +1 -1
- data/ext/ffi_c/libffi/msvcc.sh +11 -11
- data/ext/ffi_c/libffi/src/aarch64/ffi.c +51 -35
- data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +10 -5
- data/ext/ffi_c/libffi/src/aarch64/internal.h +1 -0
- data/ext/ffi_c/libffi/src/aarch64/sysv.S +14 -3
- data/ext/ffi_c/libffi/src/aarch64/win64_armasm.S +1 -1
- data/ext/ffi_c/libffi/src/arm/ffi.c +22 -0
- data/ext/ffi_c/libffi/src/arm/sysv.S +4 -4
- data/ext/ffi_c/libffi/src/closures.c +33 -10
- data/ext/ffi_c/libffi/src/csky/ffi.c +395 -0
- data/ext/ffi_c/libffi/src/csky/ffitarget.h +63 -0
- data/ext/ffi_c/libffi/src/csky/sysv.S +371 -0
- data/ext/ffi_c/libffi/src/dlmalloc.c +1 -1
- data/ext/ffi_c/libffi/src/kvx/asm.h +5 -0
- data/ext/ffi_c/libffi/src/kvx/ffi.c +273 -0
- data/ext/ffi_c/libffi/src/kvx/ffitarget.h +75 -0
- data/ext/ffi_c/libffi/src/kvx/sysv.S +127 -0
- data/ext/ffi_c/libffi/src/mips/ffi.c +5 -1
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +1 -1
- data/ext/ffi_c/libffi/src/pa/ffi.c +46 -91
- data/ext/ffi_c/libffi/src/pa/ffitarget.h +1 -6
- data/ext/ffi_c/libffi/src/pa/hpux32.S +4 -2
- data/ext/ffi_c/libffi/src/pa/linux.S +4 -2
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +13 -1
- data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +1 -1
- data/ext/ffi_c/libffi/src/powerpc/linux64.S +8 -0
- data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +13 -1
- data/ext/ffi_c/libffi/src/powerpc/sysv.S +5 -7
- data/ext/ffi_c/libffi/src/prep_cif.c +1 -1
- data/ext/ffi_c/libffi/src/x86/ffi.c +15 -6
- data/ext/ffi_c/libffi/src/x86/ffi64.c +17 -8
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +15 -2
- data/ext/ffi_c/libffi/src/x86/ffiw64.c +15 -8
- data/ext/ffi_c/libffi/src/x86/sysv.S +15 -6
- data/ext/ffi_c/libffi/src/x86/unix64.S +59 -4
- data/ext/ffi_c/libffi/src/x86/win64.S +7 -3
- data/ext/ffi_c/libffi/src/x86/win64_intel.S +3 -2
- data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +22 -2
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.closures/huge_struct.c +2 -0
- data/ffi.gemspec +2 -2
- data/lib/ffi.rb +10 -2
- data/lib/ffi/abstract_memory.rb +44 -0
- data/lib/ffi/autopointer.rb +1 -1
- data/lib/ffi/ffi.rb +1 -0
- data/lib/ffi/io.rb +3 -3
- data/lib/ffi/library.rb +6 -2
- data/lib/ffi/managedstruct.rb +2 -2
- data/lib/ffi/platform.rb +21 -8
- data/lib/ffi/platform/aarch64-darwin/types.conf +130 -0
- data/lib/ffi/platform/aarch64-openbsd/types.conf +134 -0
- data/lib/ffi/platform/arm-linux/types.conf +32 -4
- data/lib/ffi/platform/i386-windows/types.conf +26 -79
- data/lib/ffi/platform/powerpc-linux/types.conf +32 -2
- data/lib/ffi/platform/powerpc-openbsd/types.conf +156 -0
- data/lib/ffi/platform/sparcv9-openbsd/types.conf +156 -0
- data/lib/ffi/platform/x86_64-darwin/types.conf +4 -0
- data/lib/ffi/platform/x86_64-dragonflybsd/types.conf +4 -22
- data/lib/ffi/platform/x86_64-haiku/types.conf +117 -0
- data/lib/ffi/platform/x86_64-linux/types.conf +21 -0
- data/lib/ffi/platform/x86_64-msys/types.conf +119 -0
- data/lib/ffi/platform/x86_64-windows/types.conf +10 -78
- data/lib/ffi/pointer.rb +21 -14
- data/lib/ffi/struct.rb +8 -2
- data/lib/ffi/tools/types_generator.rb +2 -0
- data/lib/ffi/variadic.rb +1 -1
- data/lib/ffi/version.rb +1 -1
- data/samples/getlogin.rb +1 -1
- data/samples/getpid.rb +1 -1
- data/samples/gettimeofday.rb +8 -8
- data/samples/hello.rb +2 -1
- data/samples/inotify.rb +1 -1
- data/samples/pty.rb +1 -2
- data/samples/qsort.rb +0 -1
- metadata +18 -12
- data/.appveyor.yml +0 -27
- data/.gitignore +0 -25
- data/.gitmodules +0 -4
- data/.travis.yml +0 -44
- data/.yardopts +0 -5
- data/ext/ffi_c/win32/stdbool.h +0 -8
- data/ext/ffi_c/win32/stdint.h +0 -201
- data/samples/sample_helper.rb +0 -6
|
@@ -1,64 +1,20 @@
|
|
|
1
|
-
rbx.platform.typedef.*addr_t = char
|
|
2
|
-
rbx.platform.typedef.__ULong = ulong
|
|
3
|
-
rbx.platform.typedef.__blkcnt32_t = long
|
|
4
|
-
rbx.platform.typedef.__blkcnt64_t = long_long
|
|
5
|
-
rbx.platform.typedef.__dev16_t = short
|
|
6
|
-
rbx.platform.typedef.__dev32_t = ulong
|
|
7
|
-
rbx.platform.typedef.__dev_t = short
|
|
8
|
-
rbx.platform.typedef.__gid16_t = ushort
|
|
9
|
-
rbx.platform.typedef.__gid32_t = ulong
|
|
10
|
-
rbx.platform.typedef.__gid_t = ushort
|
|
11
|
-
rbx.platform.typedef.__ino32_t = ulong
|
|
12
|
-
rbx.platform.typedef.__ino64_t = ulong_long
|
|
13
|
-
rbx.platform.typedef.__int16_t = short
|
|
14
|
-
rbx.platform.typedef.__int32_t = int
|
|
15
|
-
rbx.platform.typedef.__int64_t = long_long
|
|
16
|
-
rbx.platform.typedef.__int8_t = char
|
|
17
|
-
rbx.platform.typedef.__int_least16_t = short
|
|
18
|
-
rbx.platform.typedef.__int_least32_t = int
|
|
19
|
-
rbx.platform.typedef.__loff_t = long_long
|
|
20
|
-
rbx.platform.typedef.__off_t = long
|
|
21
|
-
rbx.platform.typedef.__pid_t = int
|
|
22
1
|
rbx.platform.typedef.__time32_t = long
|
|
23
2
|
rbx.platform.typedef.__time64_t = long_long
|
|
24
|
-
rbx.platform.typedef.__uid16_t = ushort
|
|
25
|
-
rbx.platform.typedef.__uid32_t = ulong
|
|
26
|
-
rbx.platform.typedef.__uid_t = ushort
|
|
27
|
-
rbx.platform.typedef.__uint16_t = ushort
|
|
28
|
-
rbx.platform.typedef.__uint32_t = uint
|
|
29
|
-
rbx.platform.typedef.__uint64_t = ulong_long
|
|
30
|
-
rbx.platform.typedef.__uint8_t = uchar
|
|
31
|
-
rbx.platform.typedef.__uint_least16_t = ushort
|
|
32
|
-
rbx.platform.typedef.__uint_least32_t = uint
|
|
33
3
|
rbx.platform.typedef._dev_t = uint
|
|
34
|
-
rbx.platform.typedef._fpos64_t = long_long
|
|
35
|
-
rbx.platform.typedef._fpos_t = long_long
|
|
36
4
|
rbx.platform.typedef._ino_t = ushort
|
|
37
5
|
rbx.platform.typedef._mode_t = ushort
|
|
38
6
|
rbx.platform.typedef._off64_t = long_long
|
|
39
7
|
rbx.platform.typedef._off_t = long
|
|
8
|
+
rbx.platform.typedef._pid_t = long_long
|
|
40
9
|
rbx.platform.typedef._sigset_t = ulong_long
|
|
41
|
-
rbx.platform.typedef._ssize_t = long_long
|
|
42
|
-
rbx.platform.typedef.blkcnt_t = long_long
|
|
43
|
-
rbx.platform.typedef.blksize_t = long
|
|
44
|
-
rbx.platform.typedef.caddr_t = string
|
|
45
|
-
rbx.platform.typedef.clock_t = ulong
|
|
46
|
-
rbx.platform.typedef.clockid_t = ulong
|
|
47
|
-
rbx.platform.typedef.daddr_t = long
|
|
48
10
|
rbx.platform.typedef.dev_t = uint
|
|
49
11
|
rbx.platform.typedef.errno_t = int
|
|
50
|
-
rbx.platform.typedef.fd_mask = long
|
|
51
|
-
rbx.platform.typedef.fpos_t = long_long
|
|
52
|
-
rbx.platform.typedef.fsblkcnt_t = ulong
|
|
53
|
-
rbx.platform.typedef.fsfilcnt_t = ulong
|
|
54
|
-
rbx.platform.typedef.gid_t = ulong
|
|
55
|
-
rbx.platform.typedef.id_t = ulong
|
|
56
12
|
rbx.platform.typedef.ino_t = ushort
|
|
57
13
|
rbx.platform.typedef.int16_t = short
|
|
58
14
|
rbx.platform.typedef.int32_t = int
|
|
59
15
|
rbx.platform.typedef.int64_t = long_long
|
|
60
16
|
rbx.platform.typedef.int8_t = char
|
|
61
|
-
rbx.platform.typedef.int_fast16_t =
|
|
17
|
+
rbx.platform.typedef.int_fast16_t = short
|
|
62
18
|
rbx.platform.typedef.int_fast32_t = int
|
|
63
19
|
rbx.platform.typedef.int_fast64_t = long_long
|
|
64
20
|
rbx.platform.typedef.int_fast8_t = char
|
|
@@ -68,53 +24,29 @@ rbx.platform.typedef.int_least64_t = long_long
|
|
|
68
24
|
rbx.platform.typedef.int_least8_t = char
|
|
69
25
|
rbx.platform.typedef.intmax_t = long_long
|
|
70
26
|
rbx.platform.typedef.intptr_t = long_long
|
|
71
|
-
rbx.platform.typedef.key_t = long_long
|
|
72
|
-
rbx.platform.typedef.loff_t = long_long
|
|
73
27
|
rbx.platform.typedef.mode_t = ushort
|
|
74
|
-
rbx.platform.typedef.
|
|
28
|
+
rbx.platform.typedef.off32_t = long
|
|
29
|
+
rbx.platform.typedef.off64_t = long_long
|
|
75
30
|
rbx.platform.typedef.off_t = long_long
|
|
76
|
-
rbx.platform.typedef.pid_t =
|
|
31
|
+
rbx.platform.typedef.pid_t = long_long
|
|
77
32
|
rbx.platform.typedef.ptrdiff_t = long_long
|
|
78
|
-
rbx.platform.typedef.
|
|
79
|
-
rbx.platform.typedef.rlim_t = ulong
|
|
80
|
-
rbx.platform.typedef.sa_family_t = ushort
|
|
81
|
-
rbx.platform.typedef.sig_atomic_t = int
|
|
82
|
-
rbx.platform.typedef.sigset_t = ulong
|
|
33
|
+
rbx.platform.typedef.rsize_t = ulong_long
|
|
83
34
|
rbx.platform.typedef.size_t = ulong_long
|
|
84
|
-
rbx.platform.typedef.
|
|
85
|
-
rbx.platform.typedef.ssize_t = int
|
|
86
|
-
rbx.platform.typedef.suseconds_t = long
|
|
35
|
+
rbx.platform.typedef.ssize_t = long_long
|
|
87
36
|
rbx.platform.typedef.time_t = long_long
|
|
88
|
-
rbx.platform.typedef.timer_t = ulong
|
|
89
|
-
rbx.platform.typedef.u_char = uchar
|
|
90
|
-
rbx.platform.typedef.u_int = uint
|
|
91
|
-
rbx.platform.typedef.u_int16_t = ushort
|
|
92
|
-
rbx.platform.typedef.u_int32_t = uint
|
|
93
|
-
rbx.platform.typedef.u_int64_t = ulong_long
|
|
94
|
-
rbx.platform.typedef.u_int8_t = uchar
|
|
95
|
-
rbx.platform.typedef.u_long = ulong
|
|
96
|
-
rbx.platform.typedef.u_short = ushort
|
|
97
|
-
rbx.platform.typedef.uid_t = ulong
|
|
98
|
-
rbx.platform.typedef.uint = uint
|
|
99
37
|
rbx.platform.typedef.uint16_t = ushort
|
|
100
|
-
rbx.platform.typedef.uint32_t = uint
|
|
101
38
|
rbx.platform.typedef.uint64_t = ulong_long
|
|
102
39
|
rbx.platform.typedef.uint8_t = uchar
|
|
103
|
-
rbx.platform.typedef.uint_fast16_t =
|
|
40
|
+
rbx.platform.typedef.uint_fast16_t = ushort
|
|
104
41
|
rbx.platform.typedef.uint_fast32_t = uint
|
|
105
42
|
rbx.platform.typedef.uint_fast64_t = ulong_long
|
|
106
43
|
rbx.platform.typedef.uint_fast8_t = uchar
|
|
107
44
|
rbx.platform.typedef.uint_least16_t = ushort
|
|
108
|
-
rbx.platform.typedef.uint_least32_t = uint
|
|
109
45
|
rbx.platform.typedef.uint_least64_t = ulong_long
|
|
110
46
|
rbx.platform.typedef.uint_least8_t = uchar
|
|
111
47
|
rbx.platform.typedef.uintmax_t = ulong_long
|
|
112
48
|
rbx.platform.typedef.uintptr_t = ulong_long
|
|
113
|
-
rbx.platform.typedef.
|
|
114
|
-
rbx.platform.typedef.useconds_t = ulong
|
|
115
|
-
rbx.platform.typedef.ushort = ushort
|
|
116
|
-
rbx.platform.typedef.vm_offset_t = ulong
|
|
117
|
-
rbx.platform.typedef.vm_size_t = ulong
|
|
49
|
+
rbx.platform.typedef.useconds_t = uint
|
|
118
50
|
rbx.platform.typedef.wchar_t = ushort
|
|
119
51
|
rbx.platform.typedef.wctype_t = ushort
|
|
120
|
-
rbx.platform.typedef.wint_t =
|
|
52
|
+
rbx.platform.typedef.wint_t = ushort
|
data/lib/ffi/pointer.rb
CHANGED
|
@@ -31,21 +31,28 @@
|
|
|
31
31
|
#
|
|
32
32
|
|
|
33
33
|
require 'ffi/platform'
|
|
34
|
+
|
|
35
|
+
# NOTE: all method definitions in this file are conditional on
|
|
36
|
+
# whether they are not already defined. This is needed because
|
|
37
|
+
# some Ruby implementations (e.g., TruffleRuby) might already
|
|
38
|
+
# provide these methods due to using FFI internally, and we
|
|
39
|
+
# should not override them to avoid warnings.
|
|
40
|
+
|
|
34
41
|
module FFI
|
|
35
42
|
class Pointer
|
|
36
43
|
|
|
37
44
|
# Pointer size
|
|
38
|
-
SIZE = Platform::ADDRESS_SIZE / 8
|
|
45
|
+
SIZE = Platform::ADDRESS_SIZE / 8 unless const_defined?(:SIZE)
|
|
39
46
|
|
|
40
47
|
# Return the size of a pointer on the current platform, in bytes
|
|
41
48
|
# @return [Numeric]
|
|
42
49
|
def self.size
|
|
43
50
|
SIZE
|
|
44
|
-
end
|
|
51
|
+
end unless respond_to?(:size)
|
|
45
52
|
|
|
46
53
|
# @param [nil,Numeric] len length of string to return
|
|
47
54
|
# @return [String]
|
|
48
|
-
# Read pointer's contents as a string, or the first +len+ bytes of the
|
|
55
|
+
# Read pointer's contents as a string, or the first +len+ bytes of the
|
|
49
56
|
# equivalent string if +len+ is not +nil+.
|
|
50
57
|
def read_string(len=nil)
|
|
51
58
|
if len
|
|
@@ -54,7 +61,7 @@ module FFI
|
|
|
54
61
|
else
|
|
55
62
|
get_string(0)
|
|
56
63
|
end
|
|
57
|
-
end
|
|
64
|
+
end unless method_defined?(:read_string)
|
|
58
65
|
|
|
59
66
|
# @param [Numeric] len length of string to return
|
|
60
67
|
# @return [String]
|
|
@@ -64,7 +71,7 @@ module FFI
|
|
|
64
71
|
# ptr.read_string(len) # with len not nil
|
|
65
72
|
def read_string_length(len)
|
|
66
73
|
get_bytes(0, len)
|
|
67
|
-
end
|
|
74
|
+
end unless method_defined?(:read_string_length)
|
|
68
75
|
|
|
69
76
|
# @return [String]
|
|
70
77
|
# Read pointer's contents as a string.
|
|
@@ -73,7 +80,7 @@ module FFI
|
|
|
73
80
|
# ptr.read_string # with no len
|
|
74
81
|
def read_string_to_null
|
|
75
82
|
get_string(0)
|
|
76
|
-
end
|
|
83
|
+
end unless method_defined?(:read_string_to_null)
|
|
77
84
|
|
|
78
85
|
# @param [String] str string to write
|
|
79
86
|
# @param [Numeric] len length of string to return
|
|
@@ -84,18 +91,18 @@ module FFI
|
|
|
84
91
|
# ptr.write_string(str, len) # with len not nil
|
|
85
92
|
def write_string_length(str, len)
|
|
86
93
|
put_bytes(0, str, 0, len)
|
|
87
|
-
end
|
|
94
|
+
end unless method_defined?(:write_string_length)
|
|
88
95
|
|
|
89
96
|
# @param [String] str string to write
|
|
90
97
|
# @param [Numeric] len length of string to return
|
|
91
98
|
# @return [self]
|
|
92
|
-
# Write +str+ in pointer's contents, or first +len+ bytes if
|
|
99
|
+
# Write +str+ in pointer's contents, or first +len+ bytes if
|
|
93
100
|
# +len+ is not +nil+.
|
|
94
101
|
def write_string(str, len=nil)
|
|
95
102
|
len = str.bytesize unless len
|
|
96
103
|
# Write the string data without NUL termination
|
|
97
104
|
put_bytes(0, str, 0, len)
|
|
98
|
-
end
|
|
105
|
+
end unless method_defined?(:write_string)
|
|
99
106
|
|
|
100
107
|
# @param [Type] type type of data to read from pointer's contents
|
|
101
108
|
# @param [Symbol] reader method to send to +self+ to read +type+
|
|
@@ -113,7 +120,7 @@ module FFI
|
|
|
113
120
|
tmp += size unless j == length-1 # avoid OOB
|
|
114
121
|
}
|
|
115
122
|
ary
|
|
116
|
-
end
|
|
123
|
+
end unless method_defined?(:read_array_of_type)
|
|
117
124
|
|
|
118
125
|
# @param [Type] type type of data to write to pointer's contents
|
|
119
126
|
# @param [Symbol] writer method to send to +self+ to write +type+
|
|
@@ -129,12 +136,12 @@ module FFI
|
|
|
129
136
|
self.send(writer, i * size, val)
|
|
130
137
|
}
|
|
131
138
|
self
|
|
132
|
-
end
|
|
139
|
+
end unless method_defined?(:write_array_of_type)
|
|
133
140
|
|
|
134
141
|
# @return [self]
|
|
135
142
|
def to_ptr
|
|
136
143
|
self
|
|
137
|
-
end
|
|
144
|
+
end unless method_defined?(:to_ptr)
|
|
138
145
|
|
|
139
146
|
# @param [Symbol,Type] type of data to read
|
|
140
147
|
# @return [Object]
|
|
@@ -144,7 +151,7 @@ module FFI
|
|
|
144
151
|
# ptr.get(type, 0)
|
|
145
152
|
def read(type)
|
|
146
153
|
get(type, 0)
|
|
147
|
-
end
|
|
154
|
+
end unless method_defined?(:read)
|
|
148
155
|
|
|
149
156
|
# @param [Symbol,Type] type of data to read
|
|
150
157
|
# @param [Object] value to write
|
|
@@ -155,6 +162,6 @@ module FFI
|
|
|
155
162
|
# ptr.put(type, 0)
|
|
156
163
|
def write(type, value)
|
|
157
164
|
put(type, 0, value)
|
|
158
|
-
end
|
|
165
|
+
end unless method_defined?(:write)
|
|
159
166
|
end
|
|
160
167
|
end
|
data/lib/ffi/struct.rb
CHANGED
|
@@ -228,7 +228,11 @@ module FFI
|
|
|
228
228
|
|
|
229
229
|
def callback(params, ret)
|
|
230
230
|
mod = enclosing_module
|
|
231
|
-
|
|
231
|
+
ret_type = find_type(ret, mod)
|
|
232
|
+
if ret_type == Type::STRING
|
|
233
|
+
raise TypeError, ":string is not allowed as return type of callbacks"
|
|
234
|
+
end
|
|
235
|
+
FFI::CallbackInfo.new(ret_type, params.map { |e| find_type(e, mod) })
|
|
232
236
|
end
|
|
233
237
|
|
|
234
238
|
def packed(packed = 1)
|
|
@@ -244,7 +248,9 @@ module FFI
|
|
|
244
248
|
def enclosing_module
|
|
245
249
|
begin
|
|
246
250
|
mod = self.name.split("::")[0..-2].inject(Object) { |obj, c| obj.const_get(c) }
|
|
247
|
-
(
|
|
251
|
+
if mod.respond_to?(:find_type) && (mod.is_a?(FFI::Library) || mod < FFI::Struct)
|
|
252
|
+
mod
|
|
253
|
+
end
|
|
248
254
|
rescue Exception
|
|
249
255
|
nil
|
|
250
256
|
end
|
data/lib/ffi/variadic.rb
CHANGED
data/lib/ffi/version.rb
CHANGED
data/samples/getlogin.rb
CHANGED
data/samples/getpid.rb
CHANGED
data/samples/gettimeofday.rb
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
require 'rubygems'
|
|
2
1
|
require 'ffi'
|
|
2
|
+
require 'rbconfig'
|
|
3
|
+
|
|
3
4
|
class Timeval < FFI::Struct
|
|
4
|
-
|
|
5
|
-
if rb_maj.to_i >= 1 && rb_min.to_i >= 9 || RUBY_PLATFORM =~ /java/
|
|
6
|
-
layout :tv_sec => :ulong, :tv_usec => :ulong
|
|
7
|
-
else
|
|
8
|
-
layout :tv_sec, :ulong, 0, :tv_usec, :ulong, 4
|
|
9
|
-
end
|
|
5
|
+
layout tv_sec: :ulong, tv_usec: :ulong
|
|
10
6
|
end
|
|
11
7
|
module LibC
|
|
12
8
|
extend FFI::Library
|
|
13
|
-
|
|
9
|
+
if FFI::Platform.windows?
|
|
10
|
+
ffi_lib RbConfig::CONFIG["LIBRUBY_SO"]
|
|
11
|
+
else
|
|
12
|
+
ffi_lib FFI::Library::LIBC
|
|
13
|
+
end
|
|
14
14
|
attach_function :gettimeofday, [ :pointer, :pointer ], :int
|
|
15
15
|
end
|
|
16
16
|
t = Timeval.new
|
data/samples/hello.rb
CHANGED
data/samples/inotify.rb
CHANGED
data/samples/pty.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
require 'ffi'
|
|
2
2
|
|
|
3
|
-
|
|
4
3
|
module PTY
|
|
5
4
|
private
|
|
6
5
|
module LibC
|
|
@@ -41,7 +40,7 @@ module PTY
|
|
|
41
40
|
#
|
|
42
41
|
exec_cmd, exec_args = build_args(args)
|
|
43
42
|
pid = LibC.forkpty(mfdp, name, nil, nil)
|
|
44
|
-
raise "forkpty failed: #{LibC.strerror(FFI.errno)}" if pid < 0
|
|
43
|
+
raise "forkpty failed: #{LibC.strerror(FFI.errno)}" if pid < 0
|
|
45
44
|
if pid == 0
|
|
46
45
|
LibC.execvp(exec_cmd, exec_args)
|
|
47
46
|
exit 1
|
data/samples/qsort.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ffi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.14.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Wayne Meissner
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-12-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -87,11 +87,6 @@ extensions:
|
|
|
87
87
|
- ext/ffi_c/extconf.rb
|
|
88
88
|
extra_rdoc_files: []
|
|
89
89
|
files:
|
|
90
|
-
- ".appveyor.yml"
|
|
91
|
-
- ".gitignore"
|
|
92
|
-
- ".gitmodules"
|
|
93
|
-
- ".travis.yml"
|
|
94
|
-
- ".yardopts"
|
|
95
90
|
- CHANGELOG.md
|
|
96
91
|
- COPYING
|
|
97
92
|
- Gemfile
|
|
@@ -250,6 +245,9 @@ files:
|
|
|
250
245
|
- ext/ffi_c/libffi/src/cris/ffi.c
|
|
251
246
|
- ext/ffi_c/libffi/src/cris/ffitarget.h
|
|
252
247
|
- ext/ffi_c/libffi/src/cris/sysv.S
|
|
248
|
+
- ext/ffi_c/libffi/src/csky/ffi.c
|
|
249
|
+
- ext/ffi_c/libffi/src/csky/ffitarget.h
|
|
250
|
+
- ext/ffi_c/libffi/src/csky/sysv.S
|
|
253
251
|
- ext/ffi_c/libffi/src/debug.c
|
|
254
252
|
- ext/ffi_c/libffi/src/dlmalloc.c
|
|
255
253
|
- ext/ffi_c/libffi/src/frv/eabi.S
|
|
@@ -260,6 +258,10 @@ files:
|
|
|
260
258
|
- ext/ffi_c/libffi/src/ia64/ia64_flags.h
|
|
261
259
|
- ext/ffi_c/libffi/src/ia64/unix.S
|
|
262
260
|
- ext/ffi_c/libffi/src/java_raw_api.c
|
|
261
|
+
- ext/ffi_c/libffi/src/kvx/asm.h
|
|
262
|
+
- ext/ffi_c/libffi/src/kvx/ffi.c
|
|
263
|
+
- ext/ffi_c/libffi/src/kvx/ffitarget.h
|
|
264
|
+
- ext/ffi_c/libffi/src/kvx/sysv.S
|
|
263
265
|
- ext/ffi_c/libffi/src/m32r/ffi.c
|
|
264
266
|
- ext/ffi_c/libffi/src/m32r/ffitarget.h
|
|
265
267
|
- ext/ffi_c/libffi/src/m32r/sysv.S
|
|
@@ -564,10 +566,9 @@ files:
|
|
|
564
566
|
- ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h
|
|
565
567
|
- ext/ffi_c/rbffi.h
|
|
566
568
|
- ext/ffi_c/rbffi_endian.h
|
|
567
|
-
- ext/ffi_c/win32/stdbool.h
|
|
568
|
-
- ext/ffi_c/win32/stdint.h
|
|
569
569
|
- ffi.gemspec
|
|
570
570
|
- lib/ffi.rb
|
|
571
|
+
- lib/ffi/abstract_memory.rb
|
|
571
572
|
- lib/ffi/autopointer.rb
|
|
572
573
|
- lib/ffi/buffer.rb
|
|
573
574
|
- lib/ffi/callback.rb
|
|
@@ -580,9 +581,11 @@ files:
|
|
|
580
581
|
- lib/ffi/managedstruct.rb
|
|
581
582
|
- lib/ffi/memorypointer.rb
|
|
582
583
|
- lib/ffi/platform.rb
|
|
584
|
+
- lib/ffi/platform/aarch64-darwin/types.conf
|
|
583
585
|
- lib/ffi/platform/aarch64-freebsd/types.conf
|
|
584
586
|
- lib/ffi/platform/aarch64-freebsd12/types.conf
|
|
585
587
|
- lib/ffi/platform/aarch64-linux/types.conf
|
|
588
|
+
- lib/ffi/platform/aarch64-openbsd/types.conf
|
|
586
589
|
- lib/ffi/platform/arm-freebsd/types.conf
|
|
587
590
|
- lib/ffi/platform/arm-freebsd12/types.conf
|
|
588
591
|
- lib/ffi/platform/arm-linux/types.conf
|
|
@@ -608,19 +611,23 @@ files:
|
|
|
608
611
|
- lib/ffi/platform/powerpc-aix/types.conf
|
|
609
612
|
- lib/ffi/platform/powerpc-darwin/types.conf
|
|
610
613
|
- lib/ffi/platform/powerpc-linux/types.conf
|
|
614
|
+
- lib/ffi/platform/powerpc-openbsd/types.conf
|
|
611
615
|
- lib/ffi/platform/powerpc64-linux/types.conf
|
|
612
616
|
- lib/ffi/platform/s390-linux/types.conf
|
|
613
617
|
- lib/ffi/platform/s390x-linux/types.conf
|
|
614
618
|
- lib/ffi/platform/sparc-linux/types.conf
|
|
615
619
|
- lib/ffi/platform/sparc-solaris/types.conf
|
|
616
620
|
- lib/ffi/platform/sparc64-linux/types.conf
|
|
621
|
+
- lib/ffi/platform/sparcv9-openbsd/types.conf
|
|
617
622
|
- lib/ffi/platform/sparcv9-solaris/types.conf
|
|
618
623
|
- lib/ffi/platform/x86_64-cygwin/types.conf
|
|
619
624
|
- lib/ffi/platform/x86_64-darwin/types.conf
|
|
620
625
|
- lib/ffi/platform/x86_64-dragonflybsd/types.conf
|
|
621
626
|
- lib/ffi/platform/x86_64-freebsd/types.conf
|
|
622
627
|
- lib/ffi/platform/x86_64-freebsd12/types.conf
|
|
628
|
+
- lib/ffi/platform/x86_64-haiku/types.conf
|
|
623
629
|
- lib/ffi/platform/x86_64-linux/types.conf
|
|
630
|
+
- lib/ffi/platform/x86_64-msys/types.conf
|
|
624
631
|
- lib/ffi/platform/x86_64-netbsd/types.conf
|
|
625
632
|
- lib/ffi/platform/x86_64-openbsd/types.conf
|
|
626
633
|
- lib/ffi/platform/x86_64-solaris/types.conf
|
|
@@ -646,7 +653,6 @@ files:
|
|
|
646
653
|
- samples/inotify.rb
|
|
647
654
|
- samples/pty.rb
|
|
648
655
|
- samples/qsort.rb
|
|
649
|
-
- samples/sample_helper.rb
|
|
650
656
|
homepage: https://github.com/ffi/ffi/wiki
|
|
651
657
|
licenses:
|
|
652
658
|
- BSD-3-Clause
|
|
@@ -667,14 +673,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
667
673
|
requirements:
|
|
668
674
|
- - ">="
|
|
669
675
|
- !ruby/object:Gem::Version
|
|
670
|
-
version: '2.
|
|
676
|
+
version: '2.3'
|
|
671
677
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
672
678
|
requirements:
|
|
673
679
|
- - ">="
|
|
674
680
|
- !ruby/object:Gem::Version
|
|
675
681
|
version: '0'
|
|
676
682
|
requirements: []
|
|
677
|
-
rubygems_version: 3.1.
|
|
683
|
+
rubygems_version: 3.1.4
|
|
678
684
|
signing_key:
|
|
679
685
|
specification_version: 4
|
|
680
686
|
summary: Ruby FFI
|