fiddle 1.0.4 → 1.0.9
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/ext/fiddle/closure.c +20 -6
- data/ext/fiddle/conversions.h +0 -1
- data/ext/fiddle/extconf.rb +47 -2
- data/ext/fiddle/function.c +10 -2
- data/ext/fiddle/memory_view.c +76 -7
- data/ext/fiddle/pointer.c +4 -3
- data/lib/fiddle.rb +12 -0
- data/lib/fiddle/cparser.rb +4 -2
- data/lib/fiddle/function.rb +6 -0
- data/lib/fiddle/types.rb +18 -17
- data/lib/fiddle/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 05f04e2fc988a1635621c537e5836231c2ae496ed45990523be623b44c8557be
|
4
|
+
data.tar.gz: b81aec1d67a6a08413245b483c6aed84052df7f5b907e8111bf1b8a47c2e69bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b1c8640fb5a93f6b8c36eb3062f7b795cc10160176fe6d8e3f1370c5ce4ffd2e3036581ed4a3842a8eeb6d595219e8ee370c9c0d996e6213dfcb400fea10c58
|
7
|
+
data.tar.gz: fcd3f9cf4d08f760065770d2529f95c17dc8c95f889d691824f98bad1cb03fbeee20dcf005493b4bc9b66850b7fecdf022b13aaa6c359949a2266696a313619f
|
data/ext/fiddle/closure.c
CHANGED
@@ -130,6 +130,10 @@ with_gvl_callback(void *ptr)
|
|
130
130
|
rb_ary_push(params, ULL2NUM(*(unsigned LONG_LONG *)x->args[i]));
|
131
131
|
break;
|
132
132
|
#endif
|
133
|
+
case TYPE_CONST_STRING:
|
134
|
+
rb_ary_push(params,
|
135
|
+
rb_str_new_cstr(*((const char **)(x->args[i]))));
|
136
|
+
break;
|
133
137
|
default:
|
134
138
|
rb_raise(rb_eRuntimeError, "closure args: %d", type);
|
135
139
|
}
|
@@ -175,6 +179,10 @@ with_gvl_callback(void *ptr)
|
|
175
179
|
*(unsigned LONG_LONG *)x->resp = NUM2ULL(ret);
|
176
180
|
break;
|
177
181
|
#endif
|
182
|
+
case TYPE_CONST_STRING:
|
183
|
+
/* Dangerous. Callback must keep reference of the String. */
|
184
|
+
*((const char **)(x->resp)) = StringValueCStr(ret);
|
185
|
+
break;
|
178
186
|
default:
|
179
187
|
rb_raise(rb_eRuntimeError, "closure retval: %d", type);
|
180
188
|
}
|
@@ -221,6 +229,7 @@ initialize(int rbargc, VALUE argv[], VALUE self)
|
|
221
229
|
{
|
222
230
|
VALUE ret;
|
223
231
|
VALUE args;
|
232
|
+
VALUE normalized_args;
|
224
233
|
VALUE abi;
|
225
234
|
fiddle_closure * cl;
|
226
235
|
ffi_cif * cif;
|
@@ -239,21 +248,26 @@ initialize(int rbargc, VALUE argv[], VALUE self)
|
|
239
248
|
|
240
249
|
cl->argv = (ffi_type **)xcalloc(argc + 1, sizeof(ffi_type *));
|
241
250
|
|
251
|
+
normalized_args = rb_ary_new_capa(argc);
|
242
252
|
for (i = 0; i < argc; i++) {
|
243
|
-
|
244
|
-
|
253
|
+
VALUE arg = rb_fiddle_type_ensure(RARRAY_AREF(args, i));
|
254
|
+
rb_ary_push(normalized_args, arg);
|
255
|
+
cl->argv[i] = rb_fiddle_int_to_ffi_type(NUM2INT(arg));
|
245
256
|
}
|
246
257
|
cl->argv[argc] = NULL;
|
247
258
|
|
259
|
+
ret = rb_fiddle_type_ensure(ret);
|
248
260
|
rb_iv_set(self, "@ctype", ret);
|
249
|
-
rb_iv_set(self, "@args",
|
261
|
+
rb_iv_set(self, "@args", normalized_args);
|
250
262
|
|
251
263
|
cif = &cl->cif;
|
252
264
|
pcl = cl->pcl;
|
253
265
|
|
254
|
-
result = ffi_prep_cif(cif,
|
255
|
-
|
256
|
-
|
266
|
+
result = ffi_prep_cif(cif,
|
267
|
+
NUM2INT(abi),
|
268
|
+
argc,
|
269
|
+
rb_fiddle_int_to_ffi_type(NUM2INT(ret)),
|
270
|
+
cl->argv);
|
257
271
|
|
258
272
|
if (FFI_OK != result)
|
259
273
|
rb_raise(rb_eRuntimeError, "error prepping CIF %d", result);
|
data/ext/fiddle/conversions.h
CHANGED
@@ -24,7 +24,6 @@ typedef union
|
|
24
24
|
void * pointer; /* ffi_type_pointer */
|
25
25
|
} fiddle_generic;
|
26
26
|
|
27
|
-
/* Deprecated. Use rb_fiddle_*() version. */
|
28
27
|
VALUE rb_fiddle_type_ensure(VALUE type);
|
29
28
|
ffi_type * rb_fiddle_int_to_ffi_type(int type);
|
30
29
|
void rb_fiddle_value_to_generic(int type, VALUE *src, fiddle_generic *dst);
|
data/ext/fiddle/extconf.rb
CHANGED
@@ -3,6 +3,47 @@ require 'mkmf'
|
|
3
3
|
|
4
4
|
# :stopdoc:
|
5
5
|
|
6
|
+
def gcc?
|
7
|
+
RbConfig::CONFIG["GCC"] == "yes"
|
8
|
+
end
|
9
|
+
|
10
|
+
def disable_optimization_build_flag(flags)
|
11
|
+
if gcc?
|
12
|
+
expanded_flags = RbConfig.expand(flags.dup)
|
13
|
+
optimization_option_pattern = /(^|\s)?-O\d(\s|$)?/
|
14
|
+
if optimization_option_pattern.match?(expanded_flags)
|
15
|
+
expanded_flags.gsub(optimization_option_pattern, '\\1-Og\\2')
|
16
|
+
else
|
17
|
+
flags + " -Og"
|
18
|
+
end
|
19
|
+
else
|
20
|
+
flags
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def enable_debug_build_flag(flags)
|
25
|
+
if gcc?
|
26
|
+
expanded_flags = RbConfig.expand(flags.dup)
|
27
|
+
debug_option_pattern = /(^|\s)-g(?:gdb)?\d?(\s|$)/
|
28
|
+
if debug_option_pattern.match?(expanded_flags)
|
29
|
+
expanded_flags.gsub(debug_option_pattern, '\\1-ggdb3\\2')
|
30
|
+
else
|
31
|
+
flags + " -ggdb3"
|
32
|
+
end
|
33
|
+
else
|
34
|
+
flags
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
checking_for(checking_message("--enable-debug-build option")) do
|
39
|
+
enable_debug_build = enable_config("debug-build", false)
|
40
|
+
if enable_debug_build
|
41
|
+
$CFLAGS = disable_optimization_build_flag($CFLAGS)
|
42
|
+
$CFLAGS = enable_debug_build_flag($CFLAGS)
|
43
|
+
end
|
44
|
+
enable_debug_build
|
45
|
+
end
|
46
|
+
|
6
47
|
libffi_version = nil
|
7
48
|
have_libffi = false
|
8
49
|
bundle = enable_config('bundled-libffi')
|
@@ -137,8 +178,10 @@ else
|
|
137
178
|
have_func('ffi_closure_alloc', ffi_header)
|
138
179
|
end
|
139
180
|
|
140
|
-
if
|
141
|
-
|
181
|
+
if libffi_version
|
182
|
+
if (libffi_version <=> [3, 0, 11]) >= 0
|
183
|
+
$defs << "-DHAVE_FFI_PREP_CIF_VAR"
|
184
|
+
end
|
142
185
|
else
|
143
186
|
have_func('ffi_prep_cif_var', ffi_header)
|
144
187
|
end
|
@@ -157,6 +200,8 @@ elsif have_header "windows.h"
|
|
157
200
|
%w{ LoadLibrary FreeLibrary GetProcAddress }.each do |func|
|
158
201
|
abort "missing function #{func}" unless have_func(func)
|
159
202
|
end
|
203
|
+
|
204
|
+
have_library "ws2_32"
|
160
205
|
end
|
161
206
|
|
162
207
|
have_const('FFI_STDCALL', ffi_header)
|
data/ext/fiddle/function.c
CHANGED
@@ -375,10 +375,18 @@ function_call(int argc, VALUE argv[], VALUE self)
|
|
375
375
|
(void)rb_thread_call_without_gvl(nogvl_ffi_call, &args, 0, 0);
|
376
376
|
}
|
377
377
|
|
378
|
-
|
378
|
+
{
|
379
|
+
int errno_keep = errno;
|
379
380
|
#if defined(_WIN32)
|
380
|
-
|
381
|
+
DWORD error = WSAGetLastError();
|
382
|
+
int socket_error = WSAGetLastError();
|
383
|
+
rb_funcall(mFiddle, rb_intern("win32_last_error="), 1,
|
384
|
+
ULONG2NUM(error));
|
385
|
+
rb_funcall(mFiddle, rb_intern("win32_last_socket_error="), 1,
|
386
|
+
INT2NUM(socket_error));
|
381
387
|
#endif
|
388
|
+
rb_funcall(mFiddle, rb_intern("last_error="), 1, INT2NUM(errno_keep));
|
389
|
+
}
|
382
390
|
|
383
391
|
ALLOCV_END(alloc_buffer);
|
384
392
|
|
data/ext/fiddle/memory_view.c
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#include <stdbool.h>
|
2
2
|
#include <ruby/ruby.h>
|
3
|
+
#include <ruby/encoding.h>
|
3
4
|
|
4
5
|
#ifdef HAVE_RUBY_MEMORY_VIEW_H
|
5
6
|
# include <ruby/memory_view.h>
|
@@ -35,12 +36,25 @@ fiddle_memview_mark(void *ptr)
|
|
35
36
|
}
|
36
37
|
|
37
38
|
static void
|
38
|
-
|
39
|
+
fiddle_memview_release(struct memview_data *data)
|
39
40
|
{
|
40
|
-
|
41
|
+
if (NIL_P(data->view.obj)) return;
|
42
|
+
|
41
43
|
rb_memory_view_release(&data->view);
|
42
|
-
|
44
|
+
data->view.obj = Qnil;
|
45
|
+
data->view.byte_size = 0;
|
46
|
+
if (data->members) {
|
43
47
|
xfree(data->members);
|
48
|
+
data->members = NULL;
|
49
|
+
data->n_members = 0;
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
static void
|
54
|
+
fiddle_memview_free(void *ptr)
|
55
|
+
{
|
56
|
+
struct memview_data *data = ptr;
|
57
|
+
fiddle_memview_release(data);
|
44
58
|
xfree(ptr);
|
45
59
|
}
|
46
60
|
|
@@ -48,7 +62,7 @@ static size_t
|
|
48
62
|
fiddle_memview_memsize(const void *ptr)
|
49
63
|
{
|
50
64
|
const struct memview_data *data = ptr;
|
51
|
-
return sizeof(*data) + sizeof(rb_memory_view_item_component_t)*data->n_members + (size_t)data->view.
|
65
|
+
return sizeof(*data) + sizeof(rb_memory_view_item_component_t)*data->n_members + (size_t)data->view.byte_size;
|
52
66
|
}
|
53
67
|
|
54
68
|
static const rb_data_type_t fiddle_memview_data_type = {
|
@@ -62,11 +76,32 @@ rb_fiddle_memview_s_allocate(VALUE klass)
|
|
62
76
|
struct memview_data *data;
|
63
77
|
VALUE obj = TypedData_Make_Struct(klass, struct memview_data, &fiddle_memview_data_type, data);
|
64
78
|
data->view.obj = Qnil;
|
79
|
+
data->view.byte_size = 0;
|
65
80
|
data->members = NULL;
|
66
81
|
data->n_members = 0;
|
67
82
|
return obj;
|
68
83
|
}
|
69
84
|
|
85
|
+
static VALUE
|
86
|
+
rb_fiddle_memview_release(VALUE obj)
|
87
|
+
{
|
88
|
+
struct memview_data *data;
|
89
|
+
TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data);
|
90
|
+
|
91
|
+
if (NIL_P(data->view.obj)) return Qnil;
|
92
|
+
fiddle_memview_release(data);
|
93
|
+
return Qnil;
|
94
|
+
}
|
95
|
+
|
96
|
+
static VALUE
|
97
|
+
rb_fiddle_memview_s_export(VALUE klass, VALUE target)
|
98
|
+
{
|
99
|
+
ID id_new;
|
100
|
+
CONST_ID(id_new, "new");
|
101
|
+
VALUE memview = rb_funcall(klass, id_new, 1, target);
|
102
|
+
return rb_ensure(rb_yield, memview, rb_fiddle_memview_release, memview);
|
103
|
+
}
|
104
|
+
|
70
105
|
static VALUE
|
71
106
|
rb_fiddle_memview_initialize(VALUE obj, VALUE target)
|
72
107
|
{
|
@@ -74,6 +109,7 @@ rb_fiddle_memview_initialize(VALUE obj, VALUE target)
|
|
74
109
|
TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data);
|
75
110
|
|
76
111
|
if (!rb_memory_view_get(target, &data->view, 0)) {
|
112
|
+
data->view.obj = Qnil;
|
77
113
|
rb_raise(rb_eArgError, "Unable to get a memory view from %+"PRIsVALUE, target);
|
78
114
|
}
|
79
115
|
|
@@ -90,13 +126,13 @@ rb_fiddle_memview_get_obj(VALUE obj)
|
|
90
126
|
}
|
91
127
|
|
92
128
|
static VALUE
|
93
|
-
|
129
|
+
rb_fiddle_memview_get_byte_size(VALUE obj)
|
94
130
|
{
|
95
131
|
struct memview_data *data;
|
96
132
|
TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data);
|
97
133
|
|
98
134
|
if (NIL_P(data->view.obj)) return Qnil;
|
99
|
-
return SSIZET2NUM(data->view.
|
135
|
+
return SSIZET2NUM(data->view.byte_size);
|
100
136
|
}
|
101
137
|
|
102
138
|
static VALUE
|
@@ -233,14 +269,46 @@ rb_fiddle_memview_aref(int argc, VALUE *argv, VALUE obj)
|
|
233
269
|
return rb_memory_view_extract_item_members(ptr, data->members, data->n_members);
|
234
270
|
}
|
235
271
|
|
272
|
+
static VALUE
|
273
|
+
rb_fiddle_memview_to_s(VALUE self)
|
274
|
+
{
|
275
|
+
struct memview_data *data;
|
276
|
+
const char *raw_data;
|
277
|
+
long byte_size;
|
278
|
+
VALUE string;
|
279
|
+
|
280
|
+
TypedData_Get_Struct(self,
|
281
|
+
struct memview_data,
|
282
|
+
&fiddle_memview_data_type,
|
283
|
+
data);
|
284
|
+
|
285
|
+
if (NIL_P(data->view.obj)) {
|
286
|
+
raw_data = NULL;
|
287
|
+
byte_size = 0;
|
288
|
+
} else {
|
289
|
+
raw_data = data->view.data;
|
290
|
+
byte_size = data->view.byte_size;
|
291
|
+
}
|
292
|
+
|
293
|
+
string = rb_enc_str_new_static(raw_data, byte_size, rb_ascii8bit_encoding());
|
294
|
+
{
|
295
|
+
ID id_memory_view;
|
296
|
+
CONST_ID(id_memory_view, "memory_view");
|
297
|
+
rb_ivar_set(string, id_memory_view, self);
|
298
|
+
}
|
299
|
+
return rb_obj_freeze(string);
|
300
|
+
}
|
301
|
+
|
236
302
|
void
|
237
303
|
Init_fiddle_memory_view(void)
|
238
304
|
{
|
239
305
|
rb_cMemoryView = rb_define_class_under(mFiddle, "MemoryView", rb_cObject);
|
240
306
|
rb_define_alloc_func(rb_cMemoryView, rb_fiddle_memview_s_allocate);
|
307
|
+
rb_define_singleton_method(rb_cMemoryView, "export", rb_fiddle_memview_s_export, 1);
|
241
308
|
rb_define_method(rb_cMemoryView, "initialize", rb_fiddle_memview_initialize, 1);
|
309
|
+
rb_define_method(rb_cMemoryView, "release", rb_fiddle_memview_release, 0);
|
242
310
|
rb_define_method(rb_cMemoryView, "obj", rb_fiddle_memview_get_obj, 0);
|
243
|
-
rb_define_method(rb_cMemoryView, "
|
311
|
+
rb_define_method(rb_cMemoryView, "byte_size", rb_fiddle_memview_get_byte_size, 0);
|
244
312
|
rb_define_method(rb_cMemoryView, "readonly?", rb_fiddle_memview_get_readonly, 0);
|
245
313
|
rb_define_method(rb_cMemoryView, "format", rb_fiddle_memview_get_format, 0);
|
246
314
|
rb_define_method(rb_cMemoryView, "item_size", rb_fiddle_memview_get_item_size, 0);
|
@@ -249,6 +317,7 @@ Init_fiddle_memory_view(void)
|
|
249
317
|
rb_define_method(rb_cMemoryView, "strides", rb_fiddle_memview_get_strides, 0);
|
250
318
|
rb_define_method(rb_cMemoryView, "sub_offsets", rb_fiddle_memview_get_sub_offsets, 0);
|
251
319
|
rb_define_method(rb_cMemoryView, "[]", rb_fiddle_memview_aref, -1);
|
320
|
+
rb_define_method(rb_cMemoryView, "to_s", rb_fiddle_memview_to_s, 0);
|
252
321
|
}
|
253
322
|
|
254
323
|
#endif /* FIDDLE_MEMORY_VIEW */
|
data/ext/fiddle/pointer.c
CHANGED
@@ -102,19 +102,19 @@ fiddle_ptr_check_memory_view(VALUE obj)
|
|
102
102
|
return data;
|
103
103
|
}
|
104
104
|
|
105
|
-
static
|
105
|
+
static bool
|
106
106
|
fiddle_ptr_memory_view_available_p(VALUE obj)
|
107
107
|
{
|
108
108
|
return fiddle_ptr_check_memory_view(obj) != NULL;
|
109
109
|
}
|
110
110
|
|
111
|
-
static
|
111
|
+
static bool
|
112
112
|
fiddle_ptr_get_memory_view(VALUE obj, rb_memory_view_t *view, int flags)
|
113
113
|
{
|
114
114
|
struct ptr_data *data = fiddle_ptr_check_memory_view(obj);
|
115
115
|
rb_memory_view_init_as_byte_array(view, obj, data->ptr, data->size, true);
|
116
116
|
|
117
|
-
return
|
117
|
+
return true;
|
118
118
|
}
|
119
119
|
|
120
120
|
static const rb_memory_view_entry_t fiddle_ptr_memory_view_entry = {
|
@@ -770,6 +770,7 @@ rb_fiddle_ptr_s_to_ptr(VALUE self, VALUE val)
|
|
770
770
|
}
|
771
771
|
else if (RTEST(rb_obj_is_kind_of(val, rb_cString))){
|
772
772
|
char *str = StringValuePtr(val);
|
773
|
+
wrap = val;
|
773
774
|
ptr = rb_fiddle_ptr_new(str, RSTRING_LEN(val), NULL);
|
774
775
|
}
|
775
776
|
else if ((vptr = rb_check_funcall(val, id_to_ptr, 0, 0)) != Qundef){
|
data/lib/fiddle.rb
CHANGED
@@ -17,6 +17,18 @@ module Fiddle
|
|
17
17
|
def self.win32_last_error= error
|
18
18
|
Thread.current[:__FIDDLE_WIN32_LAST_ERROR__] = error
|
19
19
|
end
|
20
|
+
|
21
|
+
# Returns the last win32 socket +Error+ of the current executing
|
22
|
+
# +Thread+ or nil if none
|
23
|
+
def self.win32_last_socket_error
|
24
|
+
Thread.current[:__FIDDLE_WIN32_LAST_SOCKET_ERROR__]
|
25
|
+
end
|
26
|
+
|
27
|
+
# Sets the last win32 socket +Error+ of the current executing
|
28
|
+
# +Thread+ to +error+
|
29
|
+
def self.win32_last_socket_error= error
|
30
|
+
Thread.current[:__FIDDLE_WIN32_LAST_SOCKET_ERROR__] = error
|
31
|
+
end
|
20
32
|
end
|
21
33
|
|
22
34
|
# Returns the last +Error+ of the current executing +Thread+ or nil if none
|
data/lib/fiddle/cparser.rb
CHANGED
@@ -148,9 +148,11 @@ module Fiddle
|
|
148
148
|
#
|
149
149
|
def parse_ctype(ty, tymap=nil)
|
150
150
|
tymap ||= {}
|
151
|
-
|
152
|
-
when Array
|
151
|
+
if ty.is_a?(Array)
|
153
152
|
return [parse_ctype(ty[0], tymap), ty[1]]
|
153
|
+
end
|
154
|
+
ty = ty.gsub(/\Aconst\s+/, "")
|
155
|
+
case ty
|
154
156
|
when 'void'
|
155
157
|
return TYPE_VOID
|
156
158
|
when /\A(?:(?:signed\s+)?long\s+long(?:\s+int\s+)?|int64_t)(?:\s+\w+)?\z/
|
data/lib/fiddle/function.rb
CHANGED
data/lib/fiddle/types.rb
CHANGED
@@ -27,28 +27,29 @@ module Fiddle
|
|
27
27
|
# * WORD
|
28
28
|
module Win32Types
|
29
29
|
def included(m) # :nodoc:
|
30
|
+
# https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types
|
30
31
|
m.module_eval{
|
31
|
-
typealias "
|
32
|
-
typealias "PDWORD", "unsigned long *"
|
33
|
-
typealias "DWORD32", "unsigned long"
|
34
|
-
typealias "DWORD64", "unsigned long long"
|
35
|
-
typealias "WORD", "unsigned short"
|
36
|
-
typealias "PWORD", "unsigned short *"
|
32
|
+
typealias "ATOM", "WORD"
|
37
33
|
typealias "BOOL", "int"
|
38
|
-
typealias "ATOM", "int"
|
39
34
|
typealias "BYTE", "unsigned char"
|
40
|
-
typealias "
|
35
|
+
typealias "DWORD", "unsigned long"
|
36
|
+
typealias "DWORD32", "uint32_t"
|
37
|
+
typealias "DWORD64", "uint64_t"
|
38
|
+
typealias "HANDLE", "PVOID"
|
39
|
+
typealias "HDC", "HANDLE"
|
40
|
+
typealias "HINSTANCE", "HANDLE"
|
41
|
+
typealias "HWND", "HANDLE"
|
42
|
+
typealias "LPCSTR", "const char *"
|
43
|
+
typealias "LPSTR", "char *"
|
44
|
+
typealias "PBYTE", "BYTE *"
|
45
|
+
typealias "PDWORD", "DWORD *"
|
46
|
+
typealias "PHANDLE", "HANDLE *"
|
47
|
+
typealias "PVOID", "void *"
|
48
|
+
typealias "PWORD", "WORD *"
|
49
|
+
typealias "UCHAR", "unsigned char"
|
41
50
|
typealias "UINT", "unsigned int"
|
42
51
|
typealias "ULONG", "unsigned long"
|
43
|
-
typealias "
|
44
|
-
typealias "HANDLE", "uintptr_t"
|
45
|
-
typealias "PHANDLE", "void*"
|
46
|
-
typealias "PVOID", "void*"
|
47
|
-
typealias "LPCSTR", "char*"
|
48
|
-
typealias "LPSTR", "char*"
|
49
|
-
typealias "HINSTANCE", "unsigned int"
|
50
|
-
typealias "HDC", "unsigned int"
|
51
|
-
typealias "HWND", "unsigned int"
|
52
|
+
typealias "WORD", "unsigned short"
|
52
53
|
}
|
53
54
|
end
|
54
55
|
module_function :included
|
data/lib/fiddle/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fiddle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-06-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -118,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: '0'
|
120
120
|
requirements: []
|
121
|
-
rubygems_version: 3.
|
121
|
+
rubygems_version: 3.3.0.dev
|
122
122
|
signing_key:
|
123
123
|
specification_version: 4
|
124
124
|
summary: A libffi wrapper for Ruby.
|