ffi 0.6.3-x86-mingw32 → 1.0.1-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ffi might be problematic. Click here for more details.
- data/History.txt +7 -0
- data/LICENSE +10 -21
- data/README.rdoc +1 -0
- data/Rakefile +4 -2
- data/ext/ffi_c/AbstractMemory.c +103 -38
- data/ext/ffi_c/AbstractMemory.h +15 -22
- data/ext/ffi_c/Buffer.c +61 -22
- data/ext/ffi_c/Call.c +52 -540
- data/ext/ffi_c/Call.h +1 -1
- data/ext/ffi_c/DataConverter.c +62 -0
- data/ext/ffi_c/DynamicLibrary.c +21 -1
- data/ext/ffi_c/Function.c +315 -30
- data/ext/ffi_c/MappedType.c +146 -0
- data/ext/ffi_c/MappedType.h +57 -0
- data/ext/ffi_c/MemoryPointer.c +12 -33
- data/ext/ffi_c/Platform.c +2 -0
- data/ext/ffi_c/Pointer.c +66 -28
- data/ext/ffi_c/Struct.c +19 -306
- data/ext/ffi_c/Struct.h +6 -0
- data/ext/ffi_c/StructByReference.c +150 -0
- data/ext/ffi_c/StructByReference.h +50 -0
- data/ext/ffi_c/StructLayout.c +25 -14
- data/ext/ffi_c/Type.c +39 -68
- data/ext/ffi_c/Type.h +12 -22
- data/ext/ffi_c/Types.c +20 -5
- data/ext/ffi_c/Types.h +7 -7
- data/ext/ffi_c/Variadic.c +21 -17
- data/ext/ffi_c/extconf.rb +4 -0
- data/ext/ffi_c/ffi.c +8 -2
- data/ext/ffi_c/rbffi.h +1 -0
- data/lib/ffi/autopointer.rb +23 -22
- data/lib/ffi/enum.rb +36 -21
- data/lib/ffi/errno.rb +20 -0
- data/lib/ffi/ffi.rb +13 -80
- data/lib/ffi/io.rb +12 -20
- data/lib/ffi/library.rb +109 -92
- data/lib/ffi/managedstruct.rb +1 -1
- data/lib/ffi/memorypointer.rb +15 -21
- data/lib/ffi/platform.rb +24 -28
- data/lib/ffi/pointer.rb +14 -21
- data/lib/ffi/struct.rb +98 -49
- data/lib/ffi/struct_layout_builder.rb +158 -0
- data/lib/ffi/types.rb +99 -128
- data/lib/ffi/union.rb +20 -0
- data/lib/ffi/variadic.rb +33 -22
- data/lib/ffi_c.so +0 -0
- data/spec/ffi/async_callback_spec.rb +23 -0
- data/spec/ffi/callback_spec.rb +62 -0
- data/spec/ffi/custom_param_type.rb +31 -0
- data/spec/ffi/custom_type_spec.rb +73 -0
- data/spec/ffi/enum_spec.rb +19 -0
- data/spec/ffi/ffi_spec.rb +24 -0
- data/spec/ffi/pointer_spec.rb +15 -0
- data/spec/ffi/rbx/memory_pointer_spec.rb +7 -1
- data/spec/ffi/strptr_spec.rb +36 -0
- data/spec/ffi/struct_packed_spec.rb +46 -0
- data/spec/ffi/struct_spec.rb +19 -5
- data/spec/ffi/typedef_spec.rb +14 -0
- data/tasks/setup.rb +2 -1
- metadata +15 -6
- data/ext/ffi_c/AutoPointer.c +0 -60
- data/ext/ffi_c/AutoPointer.h +0 -18
- data/lib/1.8/ffi_c.so +0 -0
- data/lib/1.9/ffi_c.so +0 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
|
2
|
+
|
3
|
+
describe "functions with custom parameter types" do
|
4
|
+
before :each do
|
5
|
+
|
6
|
+
Custom_enum = Class.new do
|
7
|
+
extend FFI::DataConverter
|
8
|
+
ToNativeMap= { :a => 1, :b => 2 }
|
9
|
+
FromNativeMap = { 1 => :a, 2 => :b }
|
10
|
+
|
11
|
+
def self.native_type
|
12
|
+
@native_type_called = true
|
13
|
+
FFI::Type::INT32
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.to_native(val, ctx)
|
17
|
+
@to_native_called = true
|
18
|
+
ToNativeMap[val]
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.from_native(val, ctx)
|
22
|
+
@from_native_called = true
|
23
|
+
FromNativeMap[val]
|
24
|
+
end
|
25
|
+
def self.native_type_called?; @native_type_called; end
|
26
|
+
def self.from_native_called?; @from_native_called; end
|
27
|
+
def self.to_native_called?; @to_native_called; end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
|
2
|
+
|
3
|
+
describe "functions with custom types" do
|
4
|
+
before :each do
|
5
|
+
|
6
|
+
Custom_enum = Class.new do
|
7
|
+
extend FFI::DataConverter
|
8
|
+
ToNativeMap= { :a => 1, :b => 2, :c => 3 }
|
9
|
+
FromNativeMap = { 1 => :a, 2 => :b, 3 => :c }
|
10
|
+
|
11
|
+
def self.native_type
|
12
|
+
@native_type_called = true
|
13
|
+
FFI::Type::INT32
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.to_native(val, ctx)
|
17
|
+
@to_native_called = true
|
18
|
+
ToNativeMap[val]
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.from_native(val, ctx)
|
22
|
+
@from_native_called = true
|
23
|
+
FromNativeMap[val]
|
24
|
+
end
|
25
|
+
def self.native_type_called?; @native_type_called; end
|
26
|
+
def self.from_native_called?; @from_native_called; end
|
27
|
+
def self.to_native_called?; @to_native_called; end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
it "can attach with custom return type" do
|
33
|
+
lambda do
|
34
|
+
m = Module.new do
|
35
|
+
extend FFI::Library
|
36
|
+
ffi_lib TestLibrary::PATH
|
37
|
+
attach_function :ret_s32, [ :int ], Custom_enum
|
38
|
+
end
|
39
|
+
end.should_not raise_error
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should return object of correct type" do
|
43
|
+
|
44
|
+
m = Module.new do
|
45
|
+
|
46
|
+
extend FFI::Library
|
47
|
+
ffi_lib TestLibrary::PATH
|
48
|
+
attach_function :ret_s32, [ :int ], Custom_enum
|
49
|
+
end
|
50
|
+
|
51
|
+
m.ret_s32(1).is_a?(Symbol).should be_true
|
52
|
+
end
|
53
|
+
|
54
|
+
it "from_native should be called for result" do
|
55
|
+
m = Module.new do
|
56
|
+
extend FFI::Library
|
57
|
+
ffi_lib TestLibrary::PATH
|
58
|
+
attach_function :ret_s32, [ :int ], Custom_enum
|
59
|
+
end
|
60
|
+
m.ret_s32(1)
|
61
|
+
Custom_enum.from_native_called?.should be_true
|
62
|
+
end
|
63
|
+
|
64
|
+
it "to_native should be called for parameter" do
|
65
|
+
m = Module.new do
|
66
|
+
extend FFI::Library
|
67
|
+
ffi_lib TestLibrary::PATH
|
68
|
+
attach_function :ret_s32, [ Custom_enum ], :int
|
69
|
+
end
|
70
|
+
m.ret_s32(:a)
|
71
|
+
Custom_enum.to_native_called?.should be_true
|
72
|
+
end
|
73
|
+
end
|
data/spec/ffi/enum_spec.rb
CHANGED
@@ -89,6 +89,25 @@ describe "A tagged typedef enum" do
|
|
89
89
|
TestEnum3.test_tagged_typedef_enum4(:c15).should == :c15
|
90
90
|
TestEnum3.test_tagged_typedef_enum4(:c16).should == :c16
|
91
91
|
end
|
92
|
+
|
93
|
+
it "integers can be used instead of constants" do
|
94
|
+
TestEnum3.test_tagged_typedef_enum1(0).should == :c1
|
95
|
+
TestEnum3.test_tagged_typedef_enum1(1).should == :c2
|
96
|
+
TestEnum3.test_tagged_typedef_enum1(2).should == :c3
|
97
|
+
TestEnum3.test_tagged_typedef_enum1(3).should == :c4
|
98
|
+
TestEnum3.test_tagged_typedef_enum2(42).should == :c5
|
99
|
+
TestEnum3.test_tagged_typedef_enum2(43).should == :c6
|
100
|
+
TestEnum3.test_tagged_typedef_enum2(44).should == :c7
|
101
|
+
TestEnum3.test_tagged_typedef_enum2(45).should == :c8
|
102
|
+
TestEnum3.test_tagged_typedef_enum3(42).should == :c9
|
103
|
+
TestEnum3.test_tagged_typedef_enum3(43).should == :c10
|
104
|
+
TestEnum3.test_tagged_typedef_enum3(4242).should == :c11
|
105
|
+
TestEnum3.test_tagged_typedef_enum3(4243).should == :c12
|
106
|
+
TestEnum3.test_tagged_typedef_enum4(42).should == :c13
|
107
|
+
TestEnum3.test_tagged_typedef_enum4(4242).should == :c14
|
108
|
+
TestEnum3.test_tagged_typedef_enum4(424242).should == :c15
|
109
|
+
TestEnum3.test_tagged_typedef_enum4(42424242).should == :c16
|
110
|
+
end
|
92
111
|
end
|
93
112
|
|
94
113
|
describe "All enums" do
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
|
2
|
+
|
3
|
+
describe "FFI" do
|
4
|
+
|
5
|
+
describe ".map_library_name" do
|
6
|
+
|
7
|
+
let(:prefix) { FFI::Platform::LIBPREFIX }
|
8
|
+
let(:suffix) { FFI::Platform::LIBSUFFIX }
|
9
|
+
|
10
|
+
it "should add platform library extension if not present" do
|
11
|
+
FFI.map_library_name("#{prefix}dummy").should == "#{prefix}dummy.#{suffix}"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should add platform library extension even if lib suffix is present in name" do
|
15
|
+
FFI.map_library_name("#{prefix}dummy_with_#{suffix}").should == "#{prefix}dummy_with_#{suffix}.#{suffix}"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should return Platform::LIBC when called with 'c'" do
|
19
|
+
FFI.map_library_name('c').should == FFI::Library::LIBC
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/spec/ffi/pointer_spec.rb
CHANGED
@@ -177,7 +177,21 @@ describe "AutoPointer" do
|
|
177
177
|
end
|
178
178
|
AutoPointerTestHelper.gc_everything loop_count
|
179
179
|
end
|
180
|
+
|
181
|
+
it "can be used as the return type of a function" do
|
182
|
+
lambda do
|
183
|
+
Module.new do
|
184
|
+
extend FFI::Library
|
185
|
+
ffi_lib TestLibrary::PATH
|
186
|
+
class CustomAutoPointer < FFI::AutoPointer
|
187
|
+
def self.release(ptr); end
|
188
|
+
end
|
189
|
+
attach_function :ptr_from_address, [ FFI::Platform::ADDRESS_SIZE == 32 ? :uint : :ulong_long ], CustomAutoPointer
|
190
|
+
end
|
191
|
+
end.should_not raise_error
|
192
|
+
end
|
180
193
|
end
|
194
|
+
|
181
195
|
describe "AutoPointer#new" do
|
182
196
|
class AutoPointerSubclass < FFI::AutoPointer
|
183
197
|
def self.release(ptr); end
|
@@ -193,3 +207,4 @@ describe "AutoPointer#new" do
|
|
193
207
|
end
|
194
208
|
|
195
209
|
end
|
210
|
+
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require "rubygems"
|
2
3
|
require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
|
3
4
|
|
@@ -13,7 +14,12 @@ describe "MemoryPointer" do
|
|
13
14
|
m = FFI::MemoryPointer.from_string("FFI is Awesome")
|
14
15
|
m.type_size.should == 15
|
15
16
|
end
|
16
|
-
|
17
|
+
|
18
|
+
it "makes a pointer from a string with multibyte characters" do
|
19
|
+
m = FFI::MemoryPointer.from_string("ぱんだ")
|
20
|
+
m.type_size.should == 10
|
21
|
+
end
|
22
|
+
|
17
23
|
it "reads back a string" do
|
18
24
|
m = FFI::MemoryPointer.from_string("FFI is Awesome")
|
19
25
|
m.read_string.should == "FFI is Awesome"
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
|
2
|
+
|
3
|
+
describe "functions returning :strptr" do
|
4
|
+
it "can attach function with :strptr return type" do
|
5
|
+
lambda do
|
6
|
+
m = Module.new do
|
7
|
+
extend FFI::Library
|
8
|
+
ffi_lib FFI::Library::LIBC
|
9
|
+
attach_function :strdup, [ :string ], :strptr
|
10
|
+
end
|
11
|
+
end.should_not raise_error
|
12
|
+
end
|
13
|
+
|
14
|
+
module StrPtr
|
15
|
+
extend FFI::Library
|
16
|
+
ffi_lib FFI::Library::LIBC
|
17
|
+
attach_function :strdup, [ :string ], :strptr
|
18
|
+
attach_function :free, [ :pointer ], :void
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return [ String, Pointer ]" do
|
22
|
+
result = StrPtr.strdup("test")
|
23
|
+
result[0].is_a?(String).should be_true
|
24
|
+
result[1].is_a?(FFI::Pointer).should be_true
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return the correct value" do
|
28
|
+
result = StrPtr.strdup("test")
|
29
|
+
result[0].should == "test"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should return non-NULL pointer" do
|
33
|
+
result = StrPtr.strdup("test")
|
34
|
+
result[1].null?.should be_false
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
|
2
|
+
|
3
|
+
describe FFI::Struct do
|
4
|
+
it "packed :char followed by :int should have size of 5" do
|
5
|
+
Class.new(FFI::Struct) do
|
6
|
+
packed
|
7
|
+
layout :c, :char, :i, :int
|
8
|
+
end.size.should == 5
|
9
|
+
end
|
10
|
+
|
11
|
+
it "packed :char followed by :int should have alignment of 1" do
|
12
|
+
Class.new(FFI::Struct) do
|
13
|
+
packed
|
14
|
+
layout :c, :char, :i, :int
|
15
|
+
end.alignment.should == 1
|
16
|
+
end
|
17
|
+
|
18
|
+
it "packed(2) :char followed by :int should have size of 6" do
|
19
|
+
Class.new(FFI::Struct) do
|
20
|
+
packed 2
|
21
|
+
layout :c, :char, :i, :int
|
22
|
+
end.size.should == 6
|
23
|
+
end
|
24
|
+
|
25
|
+
it "packed(2) :char followed by :int should have alignment of 2" do
|
26
|
+
Class.new(FFI::Struct) do
|
27
|
+
packed 2
|
28
|
+
layout :c, :char, :i, :int
|
29
|
+
end.alignment.should == 2
|
30
|
+
end
|
31
|
+
|
32
|
+
it "packed :short followed by int should have size of 6" do
|
33
|
+
Class.new(FFI::Struct) do
|
34
|
+
packed
|
35
|
+
layout :s, :short, :i, :int
|
36
|
+
end.size.should == 6
|
37
|
+
end
|
38
|
+
|
39
|
+
it "packed :short followed by int should have alignment of 1" do
|
40
|
+
Class.new(FFI::Struct) do
|
41
|
+
packed
|
42
|
+
layout :s, :short, :i, :int
|
43
|
+
end.alignment.should == 1
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
data/spec/ffi/struct_spec.rb
CHANGED
@@ -158,7 +158,7 @@ describe "Struct tests" do
|
|
158
158
|
class TestStruct < FFI::Struct
|
159
159
|
layout :c, :char
|
160
160
|
end
|
161
|
-
attach_function :struct_field_s8, [ TestStruct ], :char
|
161
|
+
attach_function :struct_field_s8, [ TestStruct.in ], :char
|
162
162
|
end
|
163
163
|
end
|
164
164
|
it "Can use Struct subclass as IN parameter type" do
|
@@ -327,8 +327,8 @@ describe "Struct tests" do
|
|
327
327
|
layout :add, :add,
|
328
328
|
:sub, :sub
|
329
329
|
end
|
330
|
-
attach_function :struct_call_add_cb, [TestStruct, :int, :int], :int
|
331
|
-
attach_function :struct_call_sub_cb, [TestStruct, :int, :int], :int
|
330
|
+
attach_function :struct_call_add_cb, [TestStruct.in, :int, :int], :int
|
331
|
+
attach_function :struct_call_sub_cb, [TestStruct.in, :int, :int], :int
|
332
332
|
end
|
333
333
|
it "Can have CallbackInfo struct field" do
|
334
334
|
s = CallbackMember::TestStruct.new
|
@@ -336,8 +336,8 @@ describe "Struct tests" do
|
|
336
336
|
sub_proc = lambda { |a, b| a-b }
|
337
337
|
s[:add] = add_proc
|
338
338
|
s[:sub] = sub_proc
|
339
|
-
CallbackMember.struct_call_add_cb(s
|
340
|
-
CallbackMember.struct_call_sub_cb(s
|
339
|
+
CallbackMember.struct_call_add_cb(s, 40, 2).should == 42
|
340
|
+
CallbackMember.struct_call_sub_cb(s, 44, 2).should == 42
|
341
341
|
end
|
342
342
|
it "Can return its members as a list" do
|
343
343
|
class TestStruct < FFI::Struct
|
@@ -621,4 +621,18 @@ describe "Struct allocation" do
|
|
621
621
|
p.put_uint(4, 0xdeadbeef)
|
622
622
|
S.new(p[1])[:i].should == 0xdeadbeef
|
623
623
|
end
|
624
|
+
|
625
|
+
it "null? should be true when initialized with NULL pointer" do
|
626
|
+
class S < FFI::Struct
|
627
|
+
layout :i, :uint
|
628
|
+
end
|
629
|
+
S.new(Pointer::NULL).null?.should be_true
|
630
|
+
end
|
631
|
+
|
632
|
+
it "null? should be false when initialized with non-NULL pointer" do
|
633
|
+
class S < FFI::Struct
|
634
|
+
layout :i, :uint
|
635
|
+
end
|
636
|
+
S.new(MemoryPointer.new(S)).null?.should be_false
|
637
|
+
end
|
624
638
|
end
|
data/spec/ffi/typedef_spec.rb
CHANGED
@@ -45,4 +45,18 @@ describe "Custom type definitions" do
|
|
45
45
|
s[:a] = 0x12345678
|
46
46
|
s.pointer.get_uint(0).should == 0x12345678
|
47
47
|
end
|
48
|
+
|
49
|
+
it "attach_function after a typedef should not reject normal types" do
|
50
|
+
lambda do
|
51
|
+
Module.new do
|
52
|
+
extend FFI::Library
|
53
|
+
# enum() will insert a custom typedef called :foo for the enum
|
54
|
+
enum :foo, [ :a, :b ]
|
55
|
+
typedef :int, :bar
|
56
|
+
|
57
|
+
ffi_lib TestLibrary::PATH
|
58
|
+
attach_function :ptr_ret_int32_t, [ :string, :foo ], :bar
|
59
|
+
end
|
60
|
+
end.should_not raise_error
|
61
|
+
end
|
48
62
|
end
|
data/tasks/setup.rb
CHANGED
@@ -171,7 +171,8 @@ HAVE_GIT = (Dir.entries(Dir.pwd).include?('.git') and
|
|
171
171
|
# Add bones as a development dependency
|
172
172
|
#
|
173
173
|
if HAVE_BONES
|
174
|
-
|
174
|
+
bones_version = defined?(Bones::VERSION) ? Bones::VERSION : Bones.version
|
175
|
+
PROJ.gem.development_dependencies << ['bones', ">= #{bones_version}"]
|
175
176
|
end
|
176
177
|
|
177
178
|
# Reads a file at +path+ and spits out an array of the +paragraphs+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ffi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: x86-mingw32
|
6
6
|
authors:
|
7
7
|
- Wayne Meissner
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-03
|
12
|
+
date: 2010-12-03 00:00:00 +10:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -45,14 +45,13 @@ files:
|
|
45
45
|
- ext/ffi_c/AbstractMemory.h
|
46
46
|
- ext/ffi_c/ArrayType.c
|
47
47
|
- ext/ffi_c/ArrayType.h
|
48
|
-
- ext/ffi_c/AutoPointer.c
|
49
|
-
- ext/ffi_c/AutoPointer.h
|
50
48
|
- ext/ffi_c/Buffer.c
|
51
49
|
- ext/ffi_c/Call.c
|
52
50
|
- ext/ffi_c/Call.h
|
53
51
|
- ext/ffi_c/ClosurePool.c
|
54
52
|
- ext/ffi_c/ClosurePool.h
|
55
53
|
- ext/ffi_c/compat.h
|
54
|
+
- ext/ffi_c/DataConverter.c
|
56
55
|
- ext/ffi_c/DynamicLibrary.c
|
57
56
|
- ext/ffi_c/DynamicLibrary.h
|
58
57
|
- ext/ffi_c/endian.h
|
@@ -318,6 +317,8 @@ files:
|
|
318
317
|
- ext/ffi_c/libffi.darwin.mk
|
319
318
|
- ext/ffi_c/libffi.gnu.mk
|
320
319
|
- ext/ffi_c/libffi.mk
|
320
|
+
- ext/ffi_c/MappedType.c
|
321
|
+
- ext/ffi_c/MappedType.h
|
321
322
|
- ext/ffi_c/MemoryPointer.c
|
322
323
|
- ext/ffi_c/MemoryPointer.h
|
323
324
|
- ext/ffi_c/MethodHandle.c
|
@@ -329,6 +330,8 @@ files:
|
|
329
330
|
- ext/ffi_c/rbffi.h
|
330
331
|
- ext/ffi_c/Struct.c
|
331
332
|
- ext/ffi_c/Struct.h
|
333
|
+
- ext/ffi_c/StructByReference.c
|
334
|
+
- ext/ffi_c/StructByReference.h
|
332
335
|
- ext/ffi_c/StructByValue.c
|
333
336
|
- ext/ffi_c/StructByValue.h
|
334
337
|
- ext/ffi_c/StructLayout.c
|
@@ -351,6 +354,7 @@ files:
|
|
351
354
|
- lib/ffi/platform.rb
|
352
355
|
- lib/ffi/pointer.rb
|
353
356
|
- lib/ffi/struct.rb
|
357
|
+
- lib/ffi/struct_layout_builder.rb
|
354
358
|
- lib/ffi/tools/const_generator.rb
|
355
359
|
- lib/ffi/tools/generator.rb
|
356
360
|
- lib/ffi/tools/generator_task.rb
|
@@ -360,11 +364,15 @@ files:
|
|
360
364
|
- lib/ffi/union.rb
|
361
365
|
- lib/ffi/variadic.rb
|
362
366
|
- lib/ffi.rb
|
367
|
+
- spec/ffi/async_callback_spec.rb
|
363
368
|
- spec/ffi/bool_spec.rb
|
364
369
|
- spec/ffi/buffer_spec.rb
|
365
370
|
- spec/ffi/callback_spec.rb
|
371
|
+
- spec/ffi/custom_param_type.rb
|
372
|
+
- spec/ffi/custom_type_spec.rb
|
366
373
|
- spec/ffi/enum_spec.rb
|
367
374
|
- spec/ffi/errno_spec.rb
|
375
|
+
- spec/ffi/ffi_spec.rb
|
368
376
|
- spec/ffi/function_spec.rb
|
369
377
|
- spec/ffi/library_spec.rb
|
370
378
|
- spec/ffi/managed_struct_spec.rb
|
@@ -376,8 +384,10 @@ files:
|
|
376
384
|
- spec/ffi/rbx/struct_spec.rb
|
377
385
|
- spec/ffi/spec_helper.rb
|
378
386
|
- spec/ffi/string_spec.rb
|
387
|
+
- spec/ffi/strptr_spec.rb
|
379
388
|
- spec/ffi/struct_callback_spec.rb
|
380
389
|
- spec/ffi/struct_initialize_spec.rb
|
390
|
+
- spec/ffi/struct_packed_spec.rb
|
381
391
|
- spec/ffi/struct_spec.rb
|
382
392
|
- spec/ffi/typedef_spec.rb
|
383
393
|
- spec/ffi/union_spec.rb
|
@@ -395,8 +405,7 @@ files:
|
|
395
405
|
- tasks/spec.rake
|
396
406
|
- tasks/svn.rake
|
397
407
|
- tasks/test.rake
|
398
|
-
- lib/
|
399
|
-
- lib/1.9/ffi_c.so
|
408
|
+
- lib/ffi_c.so
|
400
409
|
has_rdoc: true
|
401
410
|
homepage: http://wiki.github.com/ffi/ffi
|
402
411
|
licenses: []
|