From 881b2dc89865c1b7a7fbc2c89e13789a068f335d Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Fri, 25 Dec 2020 06:02:19 +0900 Subject: [ruby/fiddle] closure: add support for const char * GitHub: fix GH-62 Reported by Cody Krieger. Thanks!!! https://github.com/ruby/fiddle/commit/284b820f2d --- ext/fiddle/closure.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'ext/fiddle/closure.c') diff --git a/ext/fiddle/closure.c b/ext/fiddle/closure.c index fc2965591e..3679e5c9ad 100644 --- a/ext/fiddle/closure.c +++ b/ext/fiddle/closure.c @@ -130,6 +130,10 @@ with_gvl_callback(void *ptr) rb_ary_push(params, ULL2NUM(*(unsigned LONG_LONG *)x->args[i])); break; #endif + case TYPE_CONST_STRING: + rb_ary_push(params, + rb_str_new_cstr(*((const char **)(x->args[i])))); + break; default: rb_raise(rb_eRuntimeError, "closure args: %d", type); } @@ -175,6 +179,10 @@ with_gvl_callback(void *ptr) *(unsigned LONG_LONG *)x->resp = NUM2ULL(ret); break; #endif + case TYPE_CONST_STRING: + /* Dangerous. Callback must keep reference of the String. */ + *((const char **)(x->resp)) = StringValueCStr(ret); + break; default: rb_raise(rb_eRuntimeError, "closure retval: %d", type); } -- cgit v1.2.3