ffi 1.9.18 → 1.9.24
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 +5 -5
- data/.gitignore +22 -0
- data/.gitmodules +3 -0
- data/.travis.yml +52 -0
- data/.yardopts +5 -0
- data/CHANGELOG.md +66 -0
- data/Gemfile +15 -0
- data/{spec/ffi/LICENSE.SPECS → LICENSE.SPECS} +1 -1
- data/README.md +3 -4
- data/Rakefile +42 -6
- data/appveyor.yml +22 -0
- data/ext/ffi_c/AbstractMemory.c +6 -1
- data/ext/ffi_c/Call.c +6 -24
- data/ext/ffi_c/Call.h +0 -9
- data/ext/ffi_c/Closure.c +54 -0
- data/ext/ffi_c/{ClosurePool.h → Closure.h} +13 -23
- data/ext/ffi_c/Function.c +24 -30
- data/ext/ffi_c/Function.h +1 -2
- data/ext/ffi_c/FunctionInfo.c +0 -4
- data/ext/ffi_c/MethodHandle.c +33 -268
- data/ext/ffi_c/Platform.c +10 -2
- data/ext/ffi_c/Thread.c +1 -0
- data/ext/ffi_c/extconf.rb +11 -5
- data/ext/ffi_c/ffi.c +2 -2
- data/ext/ffi_c/libffi/.appveyor.yml +50 -0
- data/ext/ffi_c/libffi/.github/issue_template.md +10 -0
- data/ext/ffi_c/libffi/.gitignore +38 -0
- data/ext/ffi_c/libffi/.travis/ar-lib +270 -0
- data/ext/ffi_c/libffi/.travis/build.sh +34 -0
- data/ext/ffi_c/libffi/.travis/compile +351 -0
- data/ext/ffi_c/libffi/.travis/install.sh +22 -0
- data/ext/ffi_c/libffi/.travis/moxie-sim.exp +60 -0
- data/ext/ffi_c/libffi/.travis/site.exp +18 -0
- data/ext/ffi_c/libffi/.travis.yml +34 -0
- data/ext/ffi_c/libffi/ChangeLog.libffi +2 -2
- data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.libffi-3.1} +1402 -2
- data/ext/ffi_c/libffi/ChangeLog.v1 +1 -1
- data/ext/ffi_c/libffi/LICENSE +1 -1
- data/ext/ffi_c/libffi/LICENSE-BUILDTOOLS +352 -0
- data/ext/ffi_c/libffi/Makefile.am +139 -169
- data/ext/ffi_c/libffi/Makefile.in +927 -938
- data/ext/ffi_c/libffi/README.md +461 -0
- data/ext/ffi_c/libffi/acinclude.m4 +387 -0
- data/ext/ffi_c/libffi/autogen.sh +2 -0
- data/ext/ffi_c/libffi/config.guess +336 -371
- data/ext/ffi_c/libffi/config.sub +246 -115
- data/ext/ffi_c/libffi/configure +6976 -2189
- data/ext/ffi_c/libffi/configure.ac +152 -258
- data/ext/ffi_c/libffi/configure.host +282 -4
- data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
- data/ext/ffi_c/libffi/doc/Makefile.in +811 -0
- data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
- data/ext/ffi_c/libffi/doc/version.texi +4 -4
- data/ext/ffi_c/libffi/fficonfig.h.in +24 -13
- data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +203 -0
- data/ext/ffi_c/libffi/include/Makefile.am +3 -3
- data/ext/ffi_c/libffi/include/Makefile.in +188 -71
- data/ext/ffi_c/libffi/include/ffi.h.in +145 -61
- data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
- data/ext/ffi_c/libffi/include/ffi_common.h +34 -11
- data/ext/ffi_c/libffi/install-sh +190 -202
- data/ext/ffi_c/libffi/libffi.map.in +80 -0
- data/ext/ffi_c/libffi/libffi.pc.in +3 -2
- data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +1043 -0
- data/ext/ffi_c/libffi/libtool-ldflags +106 -0
- data/ext/ffi_c/libffi/libtool-version +1 -1
- data/ext/ffi_c/libffi/ltmain.sh +3553 -2033
- data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
- data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +71 -0
- data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +32 -14
- data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +33 -106
- data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +33 -35
- data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +37 -13
- data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +5 -5
- data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +11 -9
- data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +100 -52
- data/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +18 -8
- data/ext/ffi_c/libffi/m4/ax_require_defined.m4 +37 -0
- data/ext/ffi_c/libffi/man/Makefile.am +2 -2
- data/ext/ffi_c/libffi/man/Makefile.in +141 -49
- data/ext/ffi_c/libffi/man/ffi.3 +10 -0
- data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
- data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
- data/ext/ffi_c/libffi/missing +150 -311
- data/ext/ffi_c/libffi/msvcc.sh +147 -16
- data/ext/ffi_c/libffi/src/aarch64/ffi.c +941 -0
- data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
- data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
- data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
- data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
- data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
- data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
- data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
- data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
- data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
- data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/arm/ffi.c +608 -517
- data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
- data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
- data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
- data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
- data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
- data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
- data/ext/ffi_c/libffi/src/closures.c +397 -46
- data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
- data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/debug.c +6 -1
- data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
- data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
- data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/ia64/ffi.c +35 -13
- data/ext/ffi_c/libffi/src/ia64/ffitarget.h +8 -2
- data/ext/ffi_c/libffi/src/ia64/unix.S +8 -1
- data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
- data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
- data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
- data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
- data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
- data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
- data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
- data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
- data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
- data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
- data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
- data/ext/ffi_c/libffi/src/mips/ffi.c +132 -40
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +15 -13
- data/ext/ffi_c/libffi/src/mips/n32.S +128 -56
- data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
- data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
- data/ext/ffi_c/libffi/src/moxie/ffi.c +54 -45
- data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
- data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
- data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
- data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
- data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
- data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
- data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
- data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
- data/ext/ffi_c/libffi/src/powerpc/aix.S +245 -7
- data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +253 -4
- data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
- data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
- data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
- data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +111 -30
- data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +974 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
- data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +103 -44
- data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
- data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
- data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
- data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
- data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
- data/ext/ffi_c/libffi/src/raw_api.c +18 -5
- data/ext/ffi_c/libffi/src/riscv/ffi.c +445 -0
- data/ext/ffi_c/libffi/src/riscv/ffitarget.h +68 -0
- data/ext/ffi_c/libffi/src/riscv/sysv.S +214 -0
- data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
- data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
- data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
- data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
- data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
- data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
- data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
- data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
- data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
- data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
- data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
- data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
- data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
- data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
- data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
- data/ext/ffi_c/libffi/src/types.c +46 -15
- data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
- data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
- data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
- data/ext/ffi_c/libffi/src/x86/ffi.c +609 -500
- data/ext/ffi_c/libffi/src/x86/ffi64.c +365 -116
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +61 -35
- data/ext/ffi_c/libffi/src/x86/ffiw64.c +308 -0
- data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
- data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
- data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
- data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
- data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
- data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
- data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
- data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/xtensa/sysv.S +258 -0
- data/ext/ffi_c/libffi/stamp-h.in +1 -0
- data/ext/ffi_c/libffi/testsuite/Makefile.am +110 -73
- data/ext/ffi_c/libffi/testsuite/Makefile.in +219 -111
- data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +310 -24
- data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +28 -0
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +78 -0
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +50 -0
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +58 -0
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +1745 -0
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +2885 -0
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +743 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +17 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3float.c +95 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +25 -40
- data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
- data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
- data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
- data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +7 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +57 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
- data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +3 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
- data/ext/ffi_c/libffi.bsd.mk +11 -5
- data/ext/ffi_c/libffi.darwin.mk +14 -4
- data/ext/ffi_c/libffi.gnu.mk +3 -2
- data/ext/ffi_c/libffi.mk +10 -5
- data/ext/ffi_c/libffi.vc.mk +1 -1
- data/ext/ffi_c/libffi.vc64.mk +1 -1
- data/ffi.gemspec +16 -3
- data/lib/ffi/enum.rb +124 -0
- data/lib/ffi/library.rb +68 -18
- data/lib/ffi/platform/mips64-linux/types.conf +104 -0
- data/lib/ffi/platform/mipsisa32r6-linux/types.conf +102 -0
- data/lib/ffi/platform/mipsisa32r6el-linux/types.conf +102 -0
- data/lib/ffi/platform/mipsisa64r6-linux/types.conf +104 -0
- data/lib/ffi/platform/mipsisa64r6el-linux/types.conf +104 -0
- data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
- data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
- data/lib/ffi/platform.rb +7 -2
- data/lib/ffi/pointer.rb +1 -0
- data/lib/ffi/struct.rb +0 -2
- data/lib/ffi/version.rb +1 -2
- data/samples/getlogin.rb +8 -0
- data/samples/getpid.rb +8 -0
- data/samples/gettimeofday.rb +18 -0
- data/samples/hello.rb +7 -0
- data/samples/inotify.rb +60 -0
- data/samples/pty.rb +76 -0
- data/samples/qsort.rb +21 -0
- data/samples/sample_helper.rb +6 -0
- metadata +191 -116
- data/ext/ffi_c/ClosurePool.c +0 -283
- data/ext/ffi_c/libffi/Makefile.vc +0 -141
- data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
- data/ext/ffi_c/libffi/README +0 -342
- data/ext/ffi_c/libffi/aclocal.m4 +0 -1873
- data/ext/ffi_c/libffi/build-ios.sh +0 -67
- data/ext/ffi_c/libffi/compile +0 -143
- data/ext/ffi_c/libffi/depcomp +0 -630
- data/ext/ffi_c/libffi/doc/libffi.info +0 -593
- data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
- data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
- data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
- data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7831
- data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -369
- data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -123
- data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
- data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -98
- data/ext/ffi_c/libffi/mdate-sh +0 -201
- data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
- data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
- data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
- data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
- data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
- data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
- data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
- data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
- data/ext/ffi_c/libffi/texinfo.tex +0 -7210
- data/gen/Rakefile +0 -30
- data/libtest/Benchmark.c +0 -52
- data/libtest/BoolTest.c +0 -34
- data/libtest/BufferTest.c +0 -31
- data/libtest/ClosureTest.c +0 -205
- data/libtest/EnumTest.c +0 -51
- data/libtest/FunctionTest.c +0 -70
- data/libtest/GNUmakefile +0 -149
- data/libtest/GlobalVariable.c +0 -62
- data/libtest/LastErrorTest.c +0 -21
- data/libtest/NumberTest.c +0 -132
- data/libtest/PointerTest.c +0 -63
- data/libtest/ReferenceTest.c +0 -23
- data/libtest/StringTest.c +0 -34
- data/libtest/StructTest.c +0 -243
- data/libtest/UnionTest.c +0 -43
- data/libtest/VariadicTest.c +0 -99
- data/spec/ffi/async_callback_spec.rb +0 -35
- data/spec/ffi/bool_spec.rb +0 -32
- data/spec/ffi/buffer_spec.rb +0 -279
- data/spec/ffi/callback_spec.rb +0 -773
- data/spec/ffi/custom_param_type.rb +0 -37
- data/spec/ffi/custom_type_spec.rb +0 -74
- data/spec/ffi/dup_spec.rb +0 -52
- data/spec/ffi/enum_spec.rb +0 -423
- data/spec/ffi/errno_spec.rb +0 -20
- data/spec/ffi/ffi_spec.rb +0 -28
- data/spec/ffi/fixtures/Benchmark.c +0 -52
- data/spec/ffi/fixtures/BoolTest.c +0 -34
- data/spec/ffi/fixtures/BufferTest.c +0 -31
- data/spec/ffi/fixtures/ClosureTest.c +0 -205
- data/spec/ffi/fixtures/EnumTest.c +0 -51
- data/spec/ffi/fixtures/FunctionTest.c +0 -142
- data/spec/ffi/fixtures/GNUmakefile +0 -149
- data/spec/ffi/fixtures/GlobalVariable.c +0 -62
- data/spec/ffi/fixtures/LastErrorTest.c +0 -21
- data/spec/ffi/fixtures/NumberTest.c +0 -132
- data/spec/ffi/fixtures/PipeHelper.h +0 -21
- data/spec/ffi/fixtures/PipeHelperPosix.c +0 -41
- data/spec/ffi/fixtures/PipeHelperWindows.c +0 -72
- data/spec/ffi/fixtures/PointerTest.c +0 -63
- data/spec/ffi/fixtures/ReferenceTest.c +0 -23
- data/spec/ffi/fixtures/StringTest.c +0 -34
- data/spec/ffi/fixtures/StructTest.c +0 -243
- data/spec/ffi/fixtures/UnionTest.c +0 -43
- data/spec/ffi/fixtures/VariadicTest.c +0 -99
- data/spec/ffi/fixtures/classes.rb +0 -438
- data/spec/ffi/function_spec.rb +0 -97
- data/spec/ffi/io_spec.rb +0 -16
- data/spec/ffi/library_spec.rb +0 -286
- data/spec/ffi/long_double.rb +0 -30
- data/spec/ffi/managed_struct_spec.rb +0 -68
- data/spec/ffi/memorypointer_spec.rb +0 -78
- data/spec/ffi/number_spec.rb +0 -247
- data/spec/ffi/platform_spec.rb +0 -114
- data/spec/ffi/pointer_spec.rb +0 -285
- data/spec/ffi/rbx/attach_function_spec.rb +0 -34
- data/spec/ffi/rbx/memory_pointer_spec.rb +0 -194
- data/spec/ffi/rbx/spec_helper.rb +0 -6
- data/spec/ffi/rbx/struct_spec.rb +0 -18
- data/spec/ffi/spec_helper.rb +0 -93
- data/spec/ffi/string_spec.rb +0 -118
- data/spec/ffi/strptr_spec.rb +0 -50
- data/spec/ffi/struct_by_ref_spec.rb +0 -43
- data/spec/ffi/struct_callback_spec.rb +0 -69
- data/spec/ffi/struct_initialize_spec.rb +0 -35
- data/spec/ffi/struct_packed_spec.rb +0 -50
- data/spec/ffi/struct_spec.rb +0 -886
- data/spec/ffi/typedef_spec.rb +0 -91
- data/spec/ffi/union_spec.rb +0 -67
- data/spec/ffi/variadic_spec.rb +0 -132
- data/spec/spec.opts +0 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 3c08414eed21b4a4c2dbb89687f9004a970ce2b997fc419566221ee01384e5eb
|
|
4
|
+
data.tar.gz: 4849cae15554e04a89322a7e1738b804be57f09e8606170803655c4804ba03a3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a4984c832d1358e61c05b50b936e6f757cb301202d441a686bbd2b2a963f77fd1371bfcb2644e75522ded093d0f9055843d28bf7593ef7f037c349cd443efab5
|
|
7
|
+
data.tar.gz: cae427a16110ac965beb4e999f9f5a8950a69f321a09d641343dfd2b3ec4f3fcd5ad428047f25e1b87800b4f0dd2827eb5cd143e51c50af9944ce2c0f38eb892
|
data/.gitignore
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
doc/
|
|
2
|
+
bin/
|
|
3
|
+
.yardoc
|
|
4
|
+
*.orig
|
|
5
|
+
nbproject/private
|
|
6
|
+
pkg
|
|
7
|
+
*.orig
|
|
8
|
+
*.rej
|
|
9
|
+
*.patch
|
|
10
|
+
*.diff
|
|
11
|
+
build
|
|
12
|
+
*.so
|
|
13
|
+
*.[oa]
|
|
14
|
+
core
|
|
15
|
+
lib/ffi/types.conf
|
|
16
|
+
lib/ffi_c.bundle
|
|
17
|
+
lib/ffi_c.so
|
|
18
|
+
vendor
|
|
19
|
+
.bundle
|
|
20
|
+
Gemfile.lock
|
|
21
|
+
types_log
|
|
22
|
+
*.gem
|
data/.gitmodules
ADDED
data/.travis.yml
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
dist: trusty
|
|
2
|
+
sudo: false
|
|
3
|
+
group: beta
|
|
4
|
+
language: ruby
|
|
5
|
+
before_install:
|
|
6
|
+
- gem install bundler
|
|
7
|
+
script:
|
|
8
|
+
- bundle exec rake compile || bundle exec rake compile
|
|
9
|
+
- bundle exec rake test
|
|
10
|
+
os:
|
|
11
|
+
- linux
|
|
12
|
+
- osx
|
|
13
|
+
rvm:
|
|
14
|
+
- 1.9.3
|
|
15
|
+
- 2.0.0
|
|
16
|
+
- 2.1
|
|
17
|
+
- 2.2.8
|
|
18
|
+
- 2.3.5
|
|
19
|
+
- 2.4.3
|
|
20
|
+
- 2.5.0
|
|
21
|
+
- ruby-head
|
|
22
|
+
- rbx
|
|
23
|
+
- system
|
|
24
|
+
env:
|
|
25
|
+
- CC=gcc
|
|
26
|
+
- CC=clang
|
|
27
|
+
matrix:
|
|
28
|
+
allow_failures:
|
|
29
|
+
- rvm: system
|
|
30
|
+
- os: osx
|
|
31
|
+
rvm: 2.0.0
|
|
32
|
+
- os: osx
|
|
33
|
+
rvm: ruby-head
|
|
34
|
+
- rvm: rbx
|
|
35
|
+
- rvm: rbx-head
|
|
36
|
+
- rvm: 1.9.3
|
|
37
|
+
exclude: # ruby 2.4.2 needs build with xcode9 or later on osx
|
|
38
|
+
- os: osx
|
|
39
|
+
rvm: 2.4.2
|
|
40
|
+
include:
|
|
41
|
+
- os: osx
|
|
42
|
+
osx_image: xcode9.1
|
|
43
|
+
rvm: 2.4.2
|
|
44
|
+
env:
|
|
45
|
+
- CC=gcc
|
|
46
|
+
- os: osx
|
|
47
|
+
osx_image: xcode9.1
|
|
48
|
+
rvm: 2.4.2
|
|
49
|
+
env:
|
|
50
|
+
- CC=clang
|
|
51
|
+
after_failure:
|
|
52
|
+
- "find build -name mkmf.log | xargs cat"
|
data/.yardopts
ADDED
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
1.9.24 / 2018-06-02
|
|
2
|
+
-------------------
|
|
3
|
+
|
|
4
|
+
Added:
|
|
5
|
+
* Added a CHANGELOG file
|
|
6
|
+
* Add mips64(eb) support, and mips r6 support. (#601)
|
|
7
|
+
|
|
8
|
+
Changed:
|
|
9
|
+
* Update libffi to latest changes on master.
|
|
10
|
+
* Don't search in hardcoded /usr paths on Windows.
|
|
11
|
+
* Don't treat Symbol args different to Strings in ffi_lib.
|
|
12
|
+
* Make sure size_t is defined in Thread.c. Fixes #609
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
1.9.23 / 2018-02-25
|
|
16
|
+
-------------------
|
|
17
|
+
|
|
18
|
+
Changed:
|
|
19
|
+
* Fix unnecessary rebuild of configure in darwin multi arch. Fixes #605
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
1.9.22 / 2018-02-22
|
|
23
|
+
-------------------
|
|
24
|
+
|
|
25
|
+
Changed:
|
|
26
|
+
* Update libffi to latest changes on master.
|
|
27
|
+
* Update detection of system libffi to match new requirements. Fixes #617
|
|
28
|
+
* Prefer bundled libffi over system libffi on Mac OS.
|
|
29
|
+
* Do closures via libffi. This removes ClosurePool and fixes compat with PaX. #540
|
|
30
|
+
* Use a more deterministic gem packaging.
|
|
31
|
+
* Fix unnecessary update of autoconf files at gem install.
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
1.9.21 / 2018-02-06
|
|
35
|
+
-------------------
|
|
36
|
+
|
|
37
|
+
Added:
|
|
38
|
+
* Ruby-2.5 support by Windows binary gems. Fixes #598
|
|
39
|
+
* Add missing win64 types.
|
|
40
|
+
* Added support for Bitmask. (#573)
|
|
41
|
+
* Add support for MSYS2 (#572) and Sparc64 Linux. (#574)
|
|
42
|
+
|
|
43
|
+
Changed:
|
|
44
|
+
* Fix read_string to not throw an error on length 0.
|
|
45
|
+
* Don't use absolute paths for sh and env. Fixes usage on Adroid #528
|
|
46
|
+
* Use Ruby implementation for `which` for better compat with Windows. Fixes #315
|
|
47
|
+
* Fix compatibility with PPC64LE platform. (#577)
|
|
48
|
+
* Normalize sparc64 to sparcv9. (#575)
|
|
49
|
+
|
|
50
|
+
Removed:
|
|
51
|
+
* Drop Ruby 1.8.7 support (#480)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
1.9.18 / 2017-03-03
|
|
55
|
+
-------------------
|
|
56
|
+
|
|
57
|
+
Added:
|
|
58
|
+
* Add compatibility with Ruby-2.4.
|
|
59
|
+
|
|
60
|
+
Changed:
|
|
61
|
+
* Add missing shlwapi.h include to fix Windows build.
|
|
62
|
+
* Avoid undefined behaviour of LoadLibrary() on Windows. #553
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
1.9.17 / 2017-01-13
|
|
66
|
+
-------------------
|
data/Gemfile
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
|
+
|
|
3
|
+
group :development do
|
|
4
|
+
gem 'rake', '~> 10.1'
|
|
5
|
+
gem 'rake-compiler', '~> 1.0.3'
|
|
6
|
+
gem 'rake-compiler-dock', '~> 0.6.2'
|
|
7
|
+
gem 'rspec', '~> 3.0'
|
|
8
|
+
gem 'rubygems-tasks', '~> 0.2.4', :require => 'rubygems/tasks'
|
|
9
|
+
gem "rubysl", "~> 2.0", :platforms => 'rbx'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
group :doc do
|
|
13
|
+
gem 'kramdown'
|
|
14
|
+
gem 'yard', '~> 0.9'
|
|
15
|
+
end
|
data/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ruby-ffi https://wiki.github.com/ffi/ffi [](https://travis-ci.org/ffi/ffi)
|
|
1
|
+
# ruby-ffi https://wiki.github.com/ffi/ffi [](https://travis-ci.org/ffi/ffi) [](https://ci.appveyor.com/project/larskanis/ffi-aofqa/branch/master)
|
|
2
2
|
|
|
3
3
|
## Description
|
|
4
4
|
|
|
@@ -43,8 +43,6 @@ At a minimum, you will need:
|
|
|
43
43
|
* A C compiler (e.g. Xcode on OSX, gcc on everything else)
|
|
44
44
|
* libffi development library - this is commonly in the libffi-dev or libffi-devel
|
|
45
45
|
|
|
46
|
-
On Linux systems running with [PaX](https://en.wikipedia.org/wiki/PaX) (Gentoo, Alpine, etc.) FFI may trigger `mprotrect` errors. You may need to disable [mprotect](https://en.wikibooks.org/wiki/Grsecurity/Appendix/Grsecurity_and_PaX_Configuration_Options#Restrict_mprotect.28.29) for ruby (`paxctl -m [/path/to/ruby]`) for the time being until a solution is found.
|
|
47
|
-
|
|
48
46
|
## Installation
|
|
49
47
|
|
|
50
48
|
From rubygems:
|
|
@@ -54,8 +52,9 @@ From rubygems:
|
|
|
54
52
|
or from the git repository on github:
|
|
55
53
|
|
|
56
54
|
git clone git://github.com/ffi/ffi.git
|
|
55
|
+
git submodule update --init --recursive
|
|
57
56
|
cd ffi
|
|
58
|
-
rake
|
|
57
|
+
rake install
|
|
59
58
|
|
|
60
59
|
## License
|
|
61
60
|
|
data/Rakefile
CHANGED
|
@@ -65,7 +65,18 @@ OS = case RbConfig::CONFIG['host_os'].downcase
|
|
|
65
65
|
RbConfig::CONFIG['host_os'].downcase
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
def which(name)
|
|
69
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
|
70
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
|
71
|
+
exts.each do |ext|
|
|
72
|
+
app = File.join(path, name+ext)
|
|
73
|
+
return app if File.executable? app
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
nil
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
GMAKE = which('gmake').nil? ? 'make' : 'gmake'
|
|
69
80
|
|
|
70
81
|
LIBTEST = "build/libtest.#{LIBEXT}"
|
|
71
82
|
BUILD_DIR = "build"
|
|
@@ -89,7 +100,7 @@ else
|
|
|
89
100
|
end
|
|
90
101
|
|
|
91
102
|
desc "Build all packages"
|
|
92
|
-
task :package =>
|
|
103
|
+
task :package => %w[ gem:java gem:windows ]
|
|
93
104
|
|
|
94
105
|
CLOBBER.include 'lib/ffi/types.conf'
|
|
95
106
|
CLOBBER.include 'pkg'
|
|
@@ -150,7 +161,7 @@ namespace 'java' do
|
|
|
150
161
|
s.homepage = gem_spec.homepage
|
|
151
162
|
s.summary = gem_spec.summary
|
|
152
163
|
s.description = gem_spec.description
|
|
153
|
-
s.files = %w(LICENSE COPYING README.md Rakefile)
|
|
164
|
+
s.files = %w(LICENSE COPYING README.md CHANGELOG.md Rakefile)
|
|
154
165
|
s.has_rdoc = false
|
|
155
166
|
s.license = gem_spec.license
|
|
156
167
|
s.platform = 'java'
|
|
@@ -173,10 +184,11 @@ if USE_RAKE_COMPILER
|
|
|
173
184
|
ext.tmp_dir = BUILD_DIR # temporary folder used during compilation.
|
|
174
185
|
ext.cross_compile = true # enable cross compilation (requires cross compile toolchain)
|
|
175
186
|
ext.cross_platform = %w[i386-mingw32 x64-mingw32] # forces the Windows platform instead of the default one
|
|
187
|
+
ext.cross_compiling do |spec|
|
|
188
|
+
spec.files.reject! { |path| File.fnmatch?('ext/*', path) }
|
|
189
|
+
end
|
|
176
190
|
end
|
|
177
191
|
|
|
178
|
-
ENV['RUBY_CC_VERSION'] ||= '1.8.7:1.9.3:2.0.0:2.1.6:2.2.2:2.3.0'
|
|
179
|
-
|
|
180
192
|
# To reduce the gem file size strip mingw32 dlls before packaging
|
|
181
193
|
ENV['RUBY_CC_VERSION'].to_s.split(':').each do |ruby_version|
|
|
182
194
|
task "build/i386-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/ffi_c.so" do |t|
|
|
@@ -191,7 +203,31 @@ if USE_RAKE_COMPILER
|
|
|
191
203
|
desc "build a windows gem without all the ceremony."
|
|
192
204
|
task "gem:windows" do
|
|
193
205
|
require "rake_compiler_dock"
|
|
194
|
-
RakeCompilerDock.sh "bundle && rake cross native gem MAKE='nice make -j`nproc`'"
|
|
206
|
+
RakeCompilerDock.sh "sudo apt-get update && sudo apt-get install -y libltdl-dev && bundle && rake cross native gem MAKE='nice make -j`nproc`'"
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
directory "ext/ffi_c/libffi"
|
|
211
|
+
file "ext/ffi_c/libffi/autogen.sh" => "ext/ffi_c/libffi" do
|
|
212
|
+
warn "Downloading libffi ..."
|
|
213
|
+
sh "git submodule update --init --recursive"
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
LIBFFI_GIT_FILES = `git --git-dir ext/ffi_c/libffi/.git ls-files -z`.split("\x0")
|
|
217
|
+
|
|
218
|
+
# Generate files in gemspec but not in libffi's git repo by running autogen.sh
|
|
219
|
+
gem_spec.files.select do |f|
|
|
220
|
+
f =~ /ext\/ffi_c\/libffi\/(.*)/ && !LIBFFI_GIT_FILES.include?($1)
|
|
221
|
+
end.each do |f|
|
|
222
|
+
file f => "ext/ffi_c/libffi/autogen.sh" do
|
|
223
|
+
chdir "ext/ffi_c/libffi" do
|
|
224
|
+
sh "sh ./autogen.sh"
|
|
225
|
+
end
|
|
226
|
+
touch f
|
|
227
|
+
if gem_spec.files != Gem::Specification.load('./ffi.gemspec').files
|
|
228
|
+
warn "gemspec files have changed -> Please restart rake!"
|
|
229
|
+
exit 1
|
|
230
|
+
end
|
|
195
231
|
end
|
|
196
232
|
end
|
|
197
233
|
|
data/appveyor.yml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
install:
|
|
2
|
+
- SET PATH=C:\Ruby%RUBYVER%\bin;%PATH%
|
|
3
|
+
- SET RAKEOPT=-rdevkit
|
|
4
|
+
- ps: |
|
|
5
|
+
if ($env:RUBYVER -like "*head*") {
|
|
6
|
+
$(new-object net.webclient).DownloadFile("https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-$env:RUBYVER.exe", "$pwd/ruby-setup.exe")
|
|
7
|
+
cmd /c ruby-setup.exe /verysilent /dir=C:/Ruby$env:RUBYVER
|
|
8
|
+
}
|
|
9
|
+
- ridk version
|
|
10
|
+
- gem --version
|
|
11
|
+
- gem install bundler --quiet --no-ri --no-rdoc
|
|
12
|
+
- bundle install
|
|
13
|
+
build: off
|
|
14
|
+
build_script:
|
|
15
|
+
- bundle exec rake compile || bundle exec rake compile
|
|
16
|
+
test_script:
|
|
17
|
+
- bundle exec rake test
|
|
18
|
+
environment:
|
|
19
|
+
matrix:
|
|
20
|
+
- RUBYVER: "head-x64"
|
|
21
|
+
- RUBYVER: 24
|
|
22
|
+
- RUBYVER: 25-x64
|
data/ext/ffi_c/AbstractMemory.c
CHANGED
|
@@ -49,8 +49,13 @@
|
|
|
49
49
|
#include "Function.h"
|
|
50
50
|
#include "LongDouble.h"
|
|
51
51
|
|
|
52
|
-
#
|
|
52
|
+
#ifdef PRIsVALUE
|
|
53
|
+
# define RB_OBJ_CLASSNAME(obj) rb_obj_class(obj)
|
|
54
|
+
# define RB_OBJ_STRING(obj) (obj)
|
|
55
|
+
#else
|
|
53
56
|
# define PRIsVALUE "s"
|
|
57
|
+
# define RB_OBJ_CLASSNAME(obj) rb_obj_classname(obj)
|
|
58
|
+
# define RB_OBJ_STRING(obj) StringValueCStr(obj)
|
|
54
59
|
#endif
|
|
55
60
|
|
|
56
61
|
static inline char* memory_address(VALUE self);
|
data/ext/ffi_c/Call.c
CHANGED
|
@@ -43,6 +43,9 @@
|
|
|
43
43
|
#endif
|
|
44
44
|
#include <errno.h>
|
|
45
45
|
#include <ruby.h>
|
|
46
|
+
#if defined(HAVE_RUBY_THREAD_H)
|
|
47
|
+
#include <ruby/thread.h>
|
|
48
|
+
#endif
|
|
46
49
|
#if defined(HAVE_NATIVETHREAD) && (defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) && !defined(_WIN32)
|
|
47
50
|
# include <signal.h>
|
|
48
51
|
# include <pthread.h>
|
|
@@ -62,28 +65,7 @@
|
|
|
62
65
|
#include "Thread.h"
|
|
63
66
|
#include "LongDouble.h"
|
|
64
67
|
|
|
65
|
-
#
|
|
66
|
-
# ifndef __i386__
|
|
67
|
-
# error "RAW argument packing only supported on i386"
|
|
68
|
-
# endif
|
|
69
|
-
|
|
70
|
-
#define INT8_ADJ (4)
|
|
71
|
-
#define INT16_ADJ (4)
|
|
72
|
-
#define INT32_ADJ (4)
|
|
73
|
-
#define INT64_ADJ (8)
|
|
74
|
-
#define LONG_ADJ (sizeof(long))
|
|
75
|
-
#define FLOAT32_ADJ (4)
|
|
76
|
-
#define FLOAT64_ADJ (8)
|
|
77
|
-
#define ADDRESS_ADJ (sizeof(void *))
|
|
78
|
-
#define LONGDOUBLE_ADJ (ffi_type_longdouble.alignment)
|
|
79
|
-
|
|
80
|
-
#endif /* USE_RAW */
|
|
81
|
-
|
|
82
|
-
#ifdef USE_RAW
|
|
83
|
-
# define ADJ(p, a) ((p) = (FFIStorage*) (((char *) p) + a##_ADJ))
|
|
84
|
-
#else
|
|
85
|
-
# define ADJ(p, a) (++(p))
|
|
86
|
-
#endif
|
|
68
|
+
#define ADJ(p, a) (++(p))
|
|
87
69
|
|
|
88
70
|
static void* callback_param(VALUE proc, VALUE cbinfo);
|
|
89
71
|
static inline void* getPointer(VALUE value, int type);
|
|
@@ -338,7 +320,7 @@ rbffi_SetupCallParams(int argc, VALUE* argv, int paramCount, Type** paramTypes,
|
|
|
338
320
|
}
|
|
339
321
|
}
|
|
340
322
|
|
|
341
|
-
static
|
|
323
|
+
static void *
|
|
342
324
|
call_blocking_function(void* data)
|
|
343
325
|
{
|
|
344
326
|
rbffi_blocking_call_t* b = (rbffi_blocking_call_t *) data;
|
|
@@ -346,7 +328,7 @@ call_blocking_function(void* data)
|
|
|
346
328
|
ffi_call(&b->cif, FFI_FN(b->function), b->retval, b->ffiValues);
|
|
347
329
|
b->frame->has_gvl = true;
|
|
348
330
|
|
|
349
|
-
return
|
|
331
|
+
return NULL;
|
|
350
332
|
}
|
|
351
333
|
|
|
352
334
|
VALUE
|
data/ext/ffi_c/Call.h
CHANGED
|
@@ -39,16 +39,7 @@
|
|
|
39
39
|
extern "C" {
|
|
40
40
|
#endif
|
|
41
41
|
|
|
42
|
-
#if defined(__i386__) && \
|
|
43
|
-
(defined(HAVE_RAW_API) || defined(USE_INTERNAL_LIBFFI)) && \
|
|
44
|
-
!defined(_WIN32) && !defined(__WIN32__)
|
|
45
|
-
# define USE_RAW
|
|
46
|
-
#endif
|
|
47
42
|
|
|
48
|
-
#if (defined(__i386__) || defined(__x86_64__)) && !(defined(_WIN32) || defined(__WIN32__))
|
|
49
|
-
# define BYPASS_FFI 1
|
|
50
|
-
#endif
|
|
51
|
-
|
|
52
43
|
typedef union {
|
|
53
44
|
#ifdef USE_RAW
|
|
54
45
|
signed int s8, s16, s32;
|
data/ext/ffi_c/Closure.c
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2009, 2010 Wayne Meissner
|
|
3
|
+
* Copyright (c) 2008-2016, Ruby FFI project contributors
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
|
7
|
+
* modification, are permitted provided that the following conditions are met:
|
|
8
|
+
* * Redistributions of source code must retain the above copyright
|
|
9
|
+
* notice, this list of conditions and the following disclaimer.
|
|
10
|
+
* * Redistributions in binary form must reproduce the above copyright
|
|
11
|
+
* notice, this list of conditions and the following disclaimer in the
|
|
12
|
+
* documentation and/or other materials provided with the distribution.
|
|
13
|
+
* * Neither the name of the Ruby FFI project nor the
|
|
14
|
+
* names of its contributors may be used to endorse or promote products
|
|
15
|
+
* derived from this software without specific prior written permission.
|
|
16
|
+
*
|
|
17
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
18
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
19
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
20
|
+
* DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
|
21
|
+
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
22
|
+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
23
|
+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
24
|
+
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
25
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
26
|
+
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
#include <ffi.h>
|
|
30
|
+
#include "Closure.h"
|
|
31
|
+
#include "rbffi.h"
|
|
32
|
+
|
|
33
|
+
Closure* rbffi_Closure_Alloc(void)
|
|
34
|
+
{
|
|
35
|
+
Closure *self;
|
|
36
|
+
|
|
37
|
+
self = xmalloc(sizeof(Closure));
|
|
38
|
+
self->libffi_closure = ffi_closure_alloc(sizeof(ffi_closure), &self->libffi_trampoline);
|
|
39
|
+
if (!self->libffi_closure) {
|
|
40
|
+
return NULL;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return self;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
void rbffi_Closure_Free(Closure *self)
|
|
47
|
+
{
|
|
48
|
+
ffi_closure_free(self->libffi_closure);
|
|
49
|
+
free(self);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
void rbffi_Closure_Init(VALUE moduleFFI)
|
|
53
|
+
{
|
|
54
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Copyright (c) 2009, 2010 Wayne Meissner
|
|
3
|
-
* Copyright (c) 2008-
|
|
3
|
+
* Copyright (c) 2008-2016, Ruby FFI project contributors
|
|
4
4
|
* All rights reserved.
|
|
5
5
|
*
|
|
6
6
|
* Redistribution and use in source and binary forms, with or without
|
|
@@ -26,32 +26,22 @@
|
|
|
26
26
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
|
-
#ifndef
|
|
30
|
-
#define
|
|
29
|
+
#ifndef RUBYFFI_CLOSURE_H
|
|
30
|
+
#define RUBYFFI_CLOSURE_H
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
typedef struct Closure_ Closure;
|
|
32
|
+
#include <ruby.h>
|
|
34
33
|
|
|
35
|
-
struct Closure_ {
|
|
36
|
-
void* info;
|
|
37
|
-
void* function;
|
|
38
|
-
void*
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
};
|
|
34
|
+
typedef struct Closure_ {
|
|
35
|
+
void* info; /* Data to pass when calling */
|
|
36
|
+
void* function; /* Function to call */
|
|
37
|
+
void* libffi_trampoline; /* Calls .function */
|
|
38
|
+
void *libffi_closure; /* Allocates .libffi_trampoline */
|
|
39
|
+
} Closure;
|
|
42
40
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
ClosurePool* rbffi_ClosurePool_New(int closureSize,
|
|
46
|
-
bool (*prep)(void* ctx, void *code, Closure* closure, char* errbuf, size_t errbufsize),
|
|
47
|
-
void* ctx);
|
|
48
|
-
|
|
49
|
-
void rbffi_ClosurePool_Free(ClosurePool *);
|
|
50
|
-
|
|
51
|
-
Closure* rbffi_Closure_Alloc(ClosurePool *);
|
|
41
|
+
Closure* rbffi_Closure_Alloc();
|
|
52
42
|
void rbffi_Closure_Free(Closure *);
|
|
53
43
|
|
|
54
|
-
void
|
|
44
|
+
void rbffi_Closure_Init(VALUE ffiModule);
|
|
55
45
|
|
|
56
|
-
#endif /*
|
|
46
|
+
#endif /* RUBYFFI_CLOSURE_H */
|
|
57
47
|
|
data/ext/ffi_c/Function.c
CHANGED
|
@@ -47,6 +47,9 @@
|
|
|
47
47
|
# endif
|
|
48
48
|
#endif
|
|
49
49
|
#include <ruby.h>
|
|
50
|
+
#if defined(HAVE_RUBY_THREAD_H)
|
|
51
|
+
#include <ruby/thread.h>
|
|
52
|
+
#endif
|
|
50
53
|
|
|
51
54
|
#include <ffi.h>
|
|
52
55
|
#if defined(HAVE_NATIVETHREAD) && !defined(_WIN32)
|
|
@@ -64,7 +67,7 @@
|
|
|
64
67
|
#include "Type.h"
|
|
65
68
|
#include "LastError.h"
|
|
66
69
|
#include "Call.h"
|
|
67
|
-
#include "
|
|
70
|
+
#include "Closure.h"
|
|
68
71
|
#include "MappedType.h"
|
|
69
72
|
#include "Thread.h"
|
|
70
73
|
#include "LongDouble.h"
|
|
@@ -297,6 +300,7 @@ static VALUE
|
|
|
297
300
|
function_init(VALUE self, VALUE rbFunctionInfo, VALUE rbProc)
|
|
298
301
|
{
|
|
299
302
|
Function* fn = NULL;
|
|
303
|
+
ffi_status ffiStatus;
|
|
300
304
|
|
|
301
305
|
Data_Get_Struct(self, Function, fn);
|
|
302
306
|
|
|
@@ -311,13 +315,6 @@ function_init(VALUE self, VALUE rbFunctionInfo, VALUE rbProc)
|
|
|
311
315
|
fn->base.rbParent = rbProc;
|
|
312
316
|
|
|
313
317
|
} else if (rb_obj_is_kind_of(rbProc, rb_cProc) || rb_respond_to(rbProc, id_call)) {
|
|
314
|
-
if (fn->info->closurePool == NULL) {
|
|
315
|
-
fn->info->closurePool = rbffi_ClosurePool_New(sizeof(ffi_closure), callback_prep, fn->info);
|
|
316
|
-
if (fn->info->closurePool == NULL) {
|
|
317
|
-
rb_raise(rb_eNoMemError, "failed to create closure pool");
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
|
|
321
318
|
#if defined(DEFER_ASYNC_CALLBACK)
|
|
322
319
|
if (async_cb_thread == Qnil) {
|
|
323
320
|
#if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) && defined(_WIN32)
|
|
@@ -332,10 +329,22 @@ function_init(VALUE self, VALUE rbFunctionInfo, VALUE rbProc)
|
|
|
332
329
|
|
|
333
330
|
#endif
|
|
334
331
|
|
|
335
|
-
fn->closure = rbffi_Closure_Alloc(
|
|
332
|
+
fn->closure = rbffi_Closure_Alloc();
|
|
336
333
|
fn->closure->info = fn;
|
|
337
|
-
|
|
334
|
+
|
|
335
|
+
ffiStatus = ffi_prep_closure_loc(fn->closure->libffi_closure,
|
|
336
|
+
&fn->info->ffi_cif, /* callback signature */
|
|
337
|
+
callback_invoke,
|
|
338
|
+
fn->closure, /* user_data for callback_invoke */
|
|
339
|
+
fn->closure->libffi_trampoline);
|
|
340
|
+
if (ffiStatus != FFI_OK) {
|
|
341
|
+
rb_raise(rb_eRuntimeError, "ffi_prep_closure_loc in function_init failed. status=%#x",
|
|
342
|
+
ffiStatus);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
fn->base.memory.address = fn->closure->libffi_trampoline;
|
|
338
346
|
fn->base.memory.size = sizeof(*fn->closure);
|
|
347
|
+
|
|
339
348
|
fn->autorelease = true;
|
|
340
349
|
|
|
341
350
|
} else {
|
|
@@ -548,7 +557,7 @@ struct async_wait {
|
|
|
548
557
|
bool stop;
|
|
549
558
|
};
|
|
550
559
|
|
|
551
|
-
static
|
|
560
|
+
static void * async_cb_wait(void *);
|
|
552
561
|
static void async_cb_stop(void *);
|
|
553
562
|
|
|
554
563
|
#if defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)
|
|
@@ -637,7 +646,7 @@ async_cb_event(void* unused)
|
|
|
637
646
|
#endif
|
|
638
647
|
|
|
639
648
|
#ifdef _WIN32
|
|
640
|
-
static
|
|
649
|
+
static void *
|
|
641
650
|
async_cb_wait(void *data)
|
|
642
651
|
{
|
|
643
652
|
struct async_wait* w = (struct async_wait *) data;
|
|
@@ -659,7 +668,7 @@ async_cb_wait(void *data)
|
|
|
659
668
|
|
|
660
669
|
LeaveCriticalSection(&async_cb_lock);
|
|
661
670
|
|
|
662
|
-
return
|
|
671
|
+
return NULL;
|
|
663
672
|
}
|
|
664
673
|
|
|
665
674
|
static void
|
|
@@ -674,7 +683,7 @@ async_cb_stop(void *data)
|
|
|
674
683
|
}
|
|
675
684
|
|
|
676
685
|
#else
|
|
677
|
-
static
|
|
686
|
+
static void *
|
|
678
687
|
async_cb_wait(void *data)
|
|
679
688
|
{
|
|
680
689
|
struct async_wait* w = (struct async_wait *) data;
|
|
@@ -694,7 +703,7 @@ async_cb_wait(void *data)
|
|
|
694
703
|
|
|
695
704
|
pthread_mutex_unlock(&async_cb_mutex);
|
|
696
705
|
|
|
697
|
-
return
|
|
706
|
+
return NULL;
|
|
698
707
|
}
|
|
699
708
|
|
|
700
709
|
static void
|
|
@@ -939,21 +948,6 @@ save_callback_exception(void* data, VALUE exc)
|
|
|
939
948
|
return Qnil;
|
|
940
949
|
}
|
|
941
950
|
|
|
942
|
-
static bool
|
|
943
|
-
callback_prep(void* ctx, void* code, Closure* closure, char* errmsg, size_t errmsgsize)
|
|
944
|
-
{
|
|
945
|
-
FunctionType* fnInfo = (FunctionType *) ctx;
|
|
946
|
-
ffi_status ffiStatus;
|
|
947
|
-
|
|
948
|
-
ffiStatus = ffi_prep_closure(code, &fnInfo->ffi_cif, callback_invoke, closure);
|
|
949
|
-
if (ffiStatus != FFI_OK) {
|
|
950
|
-
snprintf(errmsg, errmsgsize, "ffi_prep_closure failed. status=%#x", ffiStatus);
|
|
951
|
-
return false;
|
|
952
|
-
}
|
|
953
|
-
|
|
954
|
-
return true;
|
|
955
|
-
}
|
|
956
|
-
|
|
957
951
|
void
|
|
958
952
|
rbffi_Function_Init(VALUE moduleFFI)
|
|
959
953
|
{
|
data/ext/ffi_c/Function.h
CHANGED
|
@@ -46,7 +46,7 @@ typedef struct FunctionType_ FunctionType;
|
|
|
46
46
|
|
|
47
47
|
#include "Type.h"
|
|
48
48
|
#include "Call.h"
|
|
49
|
-
#include "
|
|
49
|
+
#include "Closure.h"
|
|
50
50
|
|
|
51
51
|
struct FunctionType_ {
|
|
52
52
|
Type type; /* The native type of a FunctionInfo object */
|
|
@@ -60,7 +60,6 @@ struct FunctionType_ {
|
|
|
60
60
|
ffi_type** ffiParameterTypes;
|
|
61
61
|
ffi_cif ffi_cif;
|
|
62
62
|
Invoker invoke;
|
|
63
|
-
ClosurePool* closurePool;
|
|
64
63
|
int parameterCount;
|
|
65
64
|
int flags;
|
|
66
65
|
ffi_abi abi;
|