diff options
author | Wayne Meissner <wmeissner@gmail.com> | 2012-08-05 09:04:52 +1000 |
---|---|---|
committer | Wayne Meissner <wmeissner@gmail.com> | 2012-08-05 09:04:52 +1000 |
commit | 118dafa64d8cf36b6bdf3490607aded10ab73257 (patch) | |
tree | 3690b1fc7282f8be881472df205fce663cbe8aba | |
parent | 25984ef41634359213869f2757dcd85712bc580d (diff) | |
download | ffi-118dafa64d8cf36b6bdf3490607aded10ab73257.tar.gz |
Only use ffi_prep_cif_var if it is available
-rw-r--r-- | ext/ffi_c/Variadic.c | 4 | ||||
-rw-r--r-- | ext/ffi_c/extconf.rb | 1 |
2 files changed, 5 insertions, 0 deletions
diff --git a/ext/ffi_c/Variadic.c b/ext/ffi_c/Variadic.c index 65b4dd6..8b18a65 100644 --- a/ext/ffi_c/Variadic.c +++ b/ext/ffi_c/Variadic.c @@ -219,7 +219,11 @@ variadic_invoke(VALUE self, VALUE parameterTypes, VALUE parameterValues) if (ffiReturnType == NULL) { rb_raise(rb_eArgError, "Invalid return type"); } +#ifdef HAVE_FFI_PREP_CIF_VAR ffiStatus = ffi_prep_cif_var(&cif, invoker->abi, paramCount, paramCount, ffiReturnType, ffiParamTypes); +#else + ffiStatus = ffi_prep_cif(&cif, invoker->abi, paramCount, ffiReturnType, ffiParamTypes); +#endif switch (ffiStatus) { case FFI_BAD_ABI: rb_raise(rb_eArgError, "Invalid ABI specified"); diff --git a/ext/ffi_c/extconf.rb b/ext/ffi_c/extconf.rb index 5b76074..170f81d 100644 --- a/ext/ffi_c/extconf.rb +++ b/ext/ffi_c/extconf.rb @@ -21,6 +21,7 @@ if !defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby" have_func('rb_thread_blocking_region') have_func('ruby_native_thread_p') have_func('rb_thread_call_with_gvl') + have_func('ffi_prep_cif_var') $defs << "-DHAVE_EXTCONF_H" if $defs.empty? # needed so create_header works $defs << "-DUSE_INTERNAL_LIBFFI" unless libffi_ok |