Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions ext/fiddle/closure.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,8 @@ with_gvl_callback(void *ptr)
int argc = RARRAY_LENINT(rbargs);
VALUE params = rb_ary_tmp_new(argc);
VALUE ret;
VALUE cPointer;
int i, type;

cPointer = rb_const_get(mFiddle, rb_intern("Pointer"));

for (i = 0; i < argc; i++) {
type = NUM2INT(RARRAY_AREF(rbargs, i));
switch (type) {
Expand All @@ -101,7 +98,7 @@ with_gvl_callback(void *ptr)
break;
case TYPE_VOIDP:
rb_ary_push(params,
rb_funcall(cPointer, rb_intern("[]"), 1,
rb_funcall(rb_cPointer, rb_intern("[]"), 1,
PTR2NUM(*(void **)x->args[i])));
break;
case TYPE_LONG:
Expand Down
11 changes: 3 additions & 8 deletions ext/fiddle/conversions.c
Original file line number Diff line number Diff line change
Expand Up @@ -308,18 +308,13 @@ value_to_generic(int type, VALUE src, fiddle_generic *dst)
}

VALUE
rb_fiddle_generic_to_value(VALUE rettype, fiddle_generic retval)
rb_fiddle_generic_to_value(int type, fiddle_generic retval)
{
int type = NUM2INT(rettype);
VALUE cPointer;

cPointer = rb_const_get(mFiddle, rb_intern("Pointer"));

switch (type) {
case TYPE_VOID:
return Qnil;
case TYPE_VOIDP:
return rb_funcall(cPointer, rb_intern("[]"), 1,
return rb_funcall(rb_cPointer, rb_intern("[]"), 1,
PTR2NUM((void *)retval.pointer));
case TYPE_CHAR:
return INT2NUM((signed char)retval.fffi_sarg);
Expand Down Expand Up @@ -377,5 +372,5 @@ rb_fiddle_generic_to_value(VALUE rettype, fiddle_generic retval)
VALUE
generic_to_value(VALUE rettype, fiddle_generic retval)
{
return rb_fiddle_generic_to_value(rettype, retval);
return rb_fiddle_generic_to_value(NUM2INT(rettype), retval);
}
2 changes: 1 addition & 1 deletion ext/fiddle/conversions.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ typedef union
VALUE rb_fiddle_type_ensure(VALUE type);
ffi_type * rb_fiddle_int_to_ffi_type(int type);
void rb_fiddle_value_to_generic(int type, VALUE *src, fiddle_generic *dst);
VALUE rb_fiddle_generic_to_value(VALUE rettype, fiddle_generic retval);
VALUE rb_fiddle_generic_to_value(int type, fiddle_generic retval);

/* Deprecated. Use rb_fiddle_*() version. */
ffi_type * int_to_ffi_type(int type);
Expand Down
1 change: 1 addition & 0 deletions ext/fiddle/extconf.rb
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@ def enable_debug_build_flag(flags)
end

have_func("rb_str_to_interned_str")
have_const("RUBY_TYPED_EMBEDDABLE", "ruby.h") # RUBY_VERSION >= 3.3
create_makefile 'fiddle' do |conf|
if !libffi
next conf << "LIBFFI_CLEAN = none\n"
Expand Down
2 changes: 2 additions & 0 deletions ext/fiddle/fiddle.h
Original file line number Diff line number Diff line change
Expand Up @@ -230,12 +230,14 @@
#define ALIGN_INT64_T ALIGN_OF(int64_t)

extern VALUE mFiddle;
extern VALUE rb_cPointer;
extern VALUE rb_eFiddleDLError;

VALUE rb_fiddle_new_function(VALUE address, VALUE arg_types, VALUE ret_type);

typedef void (*rb_fiddle_freefunc_t)(void*);
VALUE rb_fiddle_ptr_new_wrap(void *ptr, long size, rb_fiddle_freefunc_t func, VALUE wrap0, VALUE wrap1);
void *rb_fiddle_ptr2cptr(VALUE ptr);

enum {
FIDDLE_DEFAULT_TYPED_DATA_FLAGS = (
Expand Down
Loading