fiddle 1.1.2 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +9 -4
- data/ext/fiddle/closure.c +2 -2
- data/ext/fiddle/conversions.c +0 -2
- data/ext/fiddle/extconf.rb +7 -0
- data/ext/fiddle/fiddle.c +0 -1
- data/ext/fiddle/fiddle.h +10 -1
- data/ext/fiddle/function.c +5 -3
- data/ext/fiddle/handle.c +2 -3
- data/ext/fiddle/memory_view.c +7 -2
- data/ext/fiddle/pinned.c +7 -3
- data/ext/fiddle/pointer.c +2 -2
- data/fiddle.gemspec +2 -4
- data/lib/fiddle/ffi_backend.rb +613 -0
- data/lib/fiddle/pack.rb +6 -0
- data/lib/fiddle/struct.rb +27 -6
- data/lib/fiddle/version.rb +1 -1
- data/lib/fiddle.rb +39 -8
- metadata +5 -10
- data/ext/fiddle/win32/fficonfig.h +0 -29
- data/ext/fiddle/win32/libffi-3.2.1-mswin.patch +0 -191
- data/ext/fiddle/win32/libffi-config.rb +0 -48
- data/ext/fiddle/win32/libffi.mk.tmpl +0 -96
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96a73d1da87f69ec3f4aae33ed5a80ac8c920eb69fd93d91fb2d68c6ad0189af
|
4
|
+
data.tar.gz: 50a145cd8275945f292bd8a82184d5955d64ef75a1ed44601daffc6716196dac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d1dda953aab9d5cb9fef0e0f437accfdf9c2cc891cc7319a2d53726d6e71570248a0a5b2308a18d75b7737e6667e798e404d0b5bdab2ad50d88106a061c74a6
|
7
|
+
data.tar.gz: d4da3f220dfcbae91f58fd958de75746918a8bf20b1bedc342d99bfbeb3885d124bfece0c7c21523478b0d0c3f961a30b0a5103c65b8263dc37b03ddbc5db47a
|
data/Rakefile
CHANGED
@@ -17,8 +17,13 @@ namespace :version do
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
Rake::ExtensionTask.new("
|
20
|
+
if RUBY_ENGINE == "ruby"
|
21
|
+
require 'rake/extensiontask'
|
22
|
+
Rake::ExtensionTask.new("fiddle")
|
23
|
+
Rake::ExtensionTask.new("-test-/memory_view")
|
24
|
+
task test: :compile
|
25
|
+
else
|
26
|
+
task :compile
|
27
|
+
end
|
23
28
|
|
24
|
-
task
|
29
|
+
task default: :test
|
data/ext/fiddle/closure.c
CHANGED
@@ -61,7 +61,7 @@ const rb_data_type_t closure_data_type = {
|
|
61
61
|
.dfree = dealloc,
|
62
62
|
.dsize = closure_memsize
|
63
63
|
},
|
64
|
-
.flags =
|
64
|
+
.flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS,
|
65
65
|
};
|
66
66
|
|
67
67
|
struct callback_args {
|
@@ -300,6 +300,7 @@ initialize_body(VALUE user_data)
|
|
300
300
|
cl->argv[i] = rb_fiddle_int_to_ffi_type(NUM2INT(arg));
|
301
301
|
}
|
302
302
|
cl->argv[argc] = NULL;
|
303
|
+
OBJ_FREEZE_RAW(normalized_args);
|
303
304
|
|
304
305
|
ret = rb_fiddle_type_ensure(ret);
|
305
306
|
rb_iv_set(data->self, "@ctype", ret);
|
@@ -455,4 +456,3 @@ Init_fiddle_closure(void)
|
|
455
456
|
*/
|
456
457
|
rb_define_method(cFiddleClosure, "freed?", closure_freed_p, 0);
|
457
458
|
}
|
458
|
-
/* vim: set noet sw=4 sts=4 */
|
data/ext/fiddle/conversions.c
CHANGED
data/ext/fiddle/extconf.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'mkmf'
|
3
3
|
|
4
|
+
unless RUBY_ENGINE == "ruby"
|
5
|
+
File.write('Makefile', dummy_makefile("").join)
|
6
|
+
return
|
7
|
+
end
|
8
|
+
|
4
9
|
# :stopdoc:
|
5
10
|
|
6
11
|
def gcc?
|
@@ -218,6 +223,8 @@ if libffi
|
|
218
223
|
$LOCAL_LIBS.prepend("#{libffi.a} ").strip! # to exts.mk
|
219
224
|
$INCFLAGS.gsub!(/-I#{libffi.dir}/, '-I$(LIBFFI_DIR)')
|
220
225
|
end
|
226
|
+
|
227
|
+
have_func("rb_str_to_interned_str")
|
221
228
|
create_makefile 'fiddle' do |conf|
|
222
229
|
if !libffi
|
223
230
|
next conf << "LIBFFI_CLEAN = none\n"
|
data/ext/fiddle/fiddle.c
CHANGED
data/ext/fiddle/fiddle.h
CHANGED
@@ -236,5 +236,14 @@ VALUE rb_fiddle_new_function(VALUE address, VALUE arg_types, VALUE ret_type);
|
|
236
236
|
typedef void (*rb_fiddle_freefunc_t)(void*);
|
237
237
|
VALUE rb_fiddle_ptr_new_wrap(void *ptr, long size, rb_fiddle_freefunc_t func, VALUE wrap0, VALUE wrap1);
|
238
238
|
|
239
|
+
enum {
|
240
|
+
FIDDLE_DEFAULT_TYPED_DATA_FLAGS = (
|
241
|
+
RUBY_TYPED_FREE_IMMEDIATELY |
|
242
|
+
RUBY_TYPED_WB_PROTECTED |
|
243
|
+
#ifdef RUBY_TYPED_FROZEN_SHAREABLE
|
244
|
+
RUBY_TYPED_FROZEN_SHAREABLE |
|
245
|
+
#endif
|
246
|
+
0)
|
247
|
+
};
|
248
|
+
|
239
249
|
#endif
|
240
|
-
/* vim: set noet sws=4 sw=4: */
|
data/ext/fiddle/function.c
CHANGED
@@ -59,7 +59,7 @@ const rb_data_type_t function_data_type = {
|
|
59
59
|
.dfree = deallocate,
|
60
60
|
.dsize = function_memsize
|
61
61
|
},
|
62
|
-
.flags =
|
62
|
+
.flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS,
|
63
63
|
};
|
64
64
|
|
65
65
|
static VALUE
|
@@ -153,6 +153,9 @@ initialize(int argc, VALUE argv[], VALUE self)
|
|
153
153
|
rb_get_kwargs(kwargs, kw, 0, kw_max_, args);
|
154
154
|
if (args[kw_name] != Qundef) {
|
155
155
|
name = args[kw_name];
|
156
|
+
#ifdef HAVE_RB_STR_TO_INTERNED_STR
|
157
|
+
name = rb_str_to_interned_str(name);
|
158
|
+
#endif
|
156
159
|
}
|
157
160
|
if (args[kw_need_gvl] != Qundef) {
|
158
161
|
need_gvl = args[kw_need_gvl];
|
@@ -371,7 +374,7 @@ function_call(int argc, VALUE argv[], VALUE self)
|
|
371
374
|
args.values[i_call] = (void *)&generic_args[i_call];
|
372
375
|
}
|
373
376
|
args.values[i_call] = NULL;
|
374
|
-
args.fn = (void(*)(void))NUM2PTR(cfunc);
|
377
|
+
args.fn = (void(*)(void))(VALUE)NUM2PTR(cfunc);
|
375
378
|
|
376
379
|
if (RTEST(need_gvl)) {
|
377
380
|
ffi_call(args.cif, args.fn, &(args.retval), args.values);
|
@@ -493,4 +496,3 @@ Init_fiddle_function(void)
|
|
493
496
|
*/
|
494
497
|
rb_define_method(cFiddleFunction, "initialize", initialize, -1);
|
495
498
|
}
|
496
|
-
/* vim: set noet sws=4 sw=4: */
|
data/ext/fiddle/handle.c
CHANGED
@@ -56,7 +56,8 @@ static const rb_data_type_t fiddle_handle_data_type = {
|
|
56
56
|
.dfree = fiddle_handle_free,
|
57
57
|
.dsize = fiddle_handle_memsize
|
58
58
|
},
|
59
|
-
.flags =
|
59
|
+
.flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS & ~RUBY_TYPED_FREE_IMMEDIATELY,
|
60
|
+
/* keeping while its symbols are referred. */
|
60
61
|
};
|
61
62
|
|
62
63
|
/*
|
@@ -587,5 +588,3 @@ Init_fiddle_handle(void)
|
|
587
588
|
rb_define_method(rb_cHandle, "enable_close", rb_fiddle_handle_enable_close, 0);
|
588
589
|
rb_define_method(rb_cHandle, "close_enabled?", rb_fiddle_handle_close_enabled_p, 0);
|
589
590
|
}
|
590
|
-
|
591
|
-
/* vim: set noet sws=4 sw=4: */
|
data/ext/fiddle/memory_view.c
CHANGED
@@ -64,8 +64,13 @@ fiddle_memview_memsize(const void *ptr)
|
|
64
64
|
}
|
65
65
|
|
66
66
|
static const rb_data_type_t fiddle_memview_data_type = {
|
67
|
-
"fiddle/memory_view",
|
68
|
-
|
67
|
+
.wrap_struct_name = "fiddle/memory_view",
|
68
|
+
.function = {
|
69
|
+
.dmark = fiddle_memview_mark,
|
70
|
+
.dfree = fiddle_memview_free,
|
71
|
+
.dsize = fiddle_memview_memsize,
|
72
|
+
},
|
73
|
+
.flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS,
|
69
74
|
};
|
70
75
|
|
71
76
|
static VALUE
|
data/ext/fiddle/pinned.c
CHANGED
@@ -24,9 +24,13 @@ pinned_memsize(const void *ptr)
|
|
24
24
|
}
|
25
25
|
|
26
26
|
static const rb_data_type_t pinned_data_type = {
|
27
|
-
"fiddle/pinned",
|
28
|
-
|
29
|
-
|
27
|
+
.wrap_struct_name = "fiddle/pinned",
|
28
|
+
.function = {
|
29
|
+
.dmark = pinned_mark,
|
30
|
+
.dfree = RUBY_TYPED_DEFAULT_FREE,
|
31
|
+
.dsize = pinned_memsize,
|
32
|
+
},
|
33
|
+
.flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS,
|
30
34
|
};
|
31
35
|
|
32
36
|
static VALUE
|
data/ext/fiddle/pointer.c
CHANGED
@@ -94,7 +94,7 @@ static const rb_data_type_t fiddle_ptr_data_type = {
|
|
94
94
|
.dfree = fiddle_ptr_free,
|
95
95
|
.dsize = fiddle_ptr_memsize,
|
96
96
|
},
|
97
|
-
.flags =
|
97
|
+
.flags = FIDDLE_DEFAULT_TYPED_DATA_FLAGS,
|
98
98
|
};
|
99
99
|
|
100
100
|
#ifdef HAVE_RUBY_MEMORY_VIEW_H
|
@@ -570,7 +570,7 @@ rb_fiddle_ptr_inspect(VALUE self)
|
|
570
570
|
|
571
571
|
TypedData_Get_Struct(self, struct ptr_data, &fiddle_ptr_data_type, data);
|
572
572
|
return rb_sprintf("#<%"PRIsVALUE":%p ptr=%p size=%ld free=%p>",
|
573
|
-
RB_OBJ_CLASSNAME(self), (void *)data, data->ptr, data->size, (void *)data->free);
|
573
|
+
RB_OBJ_CLASSNAME(self), (void *)data, data->ptr, data->size, (void *)(VALUE)data->free);
|
574
574
|
}
|
575
575
|
|
576
576
|
/*
|
data/fiddle.gemspec
CHANGED
@@ -34,14 +34,11 @@ Gem::Specification.new do |spec|
|
|
34
34
|
"ext/fiddle/memory_view.c",
|
35
35
|
"ext/fiddle/pinned.c",
|
36
36
|
"ext/fiddle/pointer.c",
|
37
|
-
"ext/fiddle/win32/fficonfig.h",
|
38
|
-
"ext/fiddle/win32/libffi-3.2.1-mswin.patch",
|
39
|
-
"ext/fiddle/win32/libffi-config.rb",
|
40
|
-
"ext/fiddle/win32/libffi.mk.tmpl",
|
41
37
|
"fiddle.gemspec",
|
42
38
|
"lib/fiddle.rb",
|
43
39
|
"lib/fiddle/closure.rb",
|
44
40
|
"lib/fiddle/cparser.rb",
|
41
|
+
"lib/fiddle/ffi_backend.rb",
|
45
42
|
"lib/fiddle/function.rb",
|
46
43
|
"lib/fiddle/import.rb",
|
47
44
|
"lib/fiddle/pack.rb",
|
@@ -56,4 +53,5 @@ Gem::Specification.new do |spec|
|
|
56
53
|
spec.required_ruby_version = ">= 2.5.0"
|
57
54
|
|
58
55
|
spec.metadata["msys2_mingw_dependencies"] = "libffi"
|
56
|
+
spec.metadata["changelog_uri"] = "https://github.com/ruby/fiddle/releases"
|
59
57
|
end
|