ffi 1.9.18 → 1.9.23
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/Gemfile +15 -0
- data/{spec/ffi/LICENSE.SPECS → LICENSE.SPECS} +1 -1
- data/README.md +3 -4
- data/Rakefile +41 -5
- data/appveyor.yml +22 -0
- data/ext/ffi_c/AbstractMemory.c +6 -1
- data/ext/ffi_c/Call.c +1 -22
- 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 +16 -25
- 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/extconf.rb +10 -5
- data/ext/ffi_c/ffi.c +2 -2
- data/ext/ffi_c/libffi/.appveyor.yml +48 -0
- data/ext/ffi_c/libffi/.gitignore +36 -0
- data/ext/ffi_c/libffi/.travis/install.sh +14 -0
- data/ext/ffi_c/libffi/.travis.yml +30 -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/Makefile.am +169 -158
- data/ext/ffi_c/libffi/Makefile.in +927 -938
- data/ext/ffi_c/libffi/README +164 -52
- 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 +148 -256
- data/ext/ffi_c/libffi/configure.host +277 -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 +112 -50
- data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
- data/ext/ffi_c/libffi/include/ffi_common.h +32 -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 +69 -0
- data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
- data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
- data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
- data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
- data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
- data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
- 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 +72 -9
- data/ext/ffi_c/libffi/src/aarch64/ffi.c +964 -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 +366 -45
- 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 +11 -7
- data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
- data/ext/ffi_c/libffi/src/ia64/unix.S +2 -0
- 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 +103 -28
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +10 -3
- 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 +40 -44
- 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 +945 -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/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 +43 -14
- 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 +591 -500
- data/ext/ffi_c/libffi/src/x86/ffi64.c +359 -116
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
- data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -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 +253 -0
- data/ext/ffi_c/libffi/stamp-h.in +1 -0
- data/ext/ffi_c/libffi/testsuite/Makefile.am +79 -73
- data/ext/ffi_c/libffi/testsuite/Makefile.in +219 -111
- data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +121 -25
- data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -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 +23 -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 +6 -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/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 +2 -1
- 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 +66 -14
- 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 +164 -115
- 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/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: 286fc5e69721d659cb72bba4dbafc0a65ce8ddd3d85432eefe94c4f8fae78d6c
|
|
4
|
+
data.tar.gz: e1395b53a83cd497c8fe32176d029f0a5daf47de36a40390f6fadc2d478cc748
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5538683e786da7e3c4ec7665f9e1ca3cfdd6ec2df3aaf3529b008f3acaf39b840889fe8cbdc8f19ecc1ea979882508a4b4e284ec59d1dd43ef6d6fa7062ce4c3
|
|
7
|
+
data.tar.gz: b5cca527e86e49ac8e3d8d157a907f9601f68d1ccaf06fd922d7b3706ae1c5df4ff1539be2305fde2db7d357377530a76238082bd0f8577fe5d2b79a6936c8ed
|
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/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'
|
|
@@ -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
|
@@ -62,28 +62,7 @@
|
|
|
62
62
|
#include "Thread.h"
|
|
63
63
|
#include "LongDouble.h"
|
|
64
64
|
|
|
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
|
|
65
|
+
#define ADJ(p, a) (++(p))
|
|
87
66
|
|
|
88
67
|
static void* callback_param(VALUE proc, VALUE cbinfo);
|
|
89
68
|
static inline void* getPointer(VALUE value, int type);
|
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
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
#include "Type.h"
|
|
65
65
|
#include "LastError.h"
|
|
66
66
|
#include "Call.h"
|
|
67
|
-
#include "
|
|
67
|
+
#include "Closure.h"
|
|
68
68
|
#include "MappedType.h"
|
|
69
69
|
#include "Thread.h"
|
|
70
70
|
#include "LongDouble.h"
|
|
@@ -297,6 +297,7 @@ static VALUE
|
|
|
297
297
|
function_init(VALUE self, VALUE rbFunctionInfo, VALUE rbProc)
|
|
298
298
|
{
|
|
299
299
|
Function* fn = NULL;
|
|
300
|
+
ffi_status ffiStatus;
|
|
300
301
|
|
|
301
302
|
Data_Get_Struct(self, Function, fn);
|
|
302
303
|
|
|
@@ -311,13 +312,6 @@ function_init(VALUE self, VALUE rbFunctionInfo, VALUE rbProc)
|
|
|
311
312
|
fn->base.rbParent = rbProc;
|
|
312
313
|
|
|
313
314
|
} 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
315
|
#if defined(DEFER_ASYNC_CALLBACK)
|
|
322
316
|
if (async_cb_thread == Qnil) {
|
|
323
317
|
#if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) && defined(_WIN32)
|
|
@@ -332,10 +326,22 @@ function_init(VALUE self, VALUE rbFunctionInfo, VALUE rbProc)
|
|
|
332
326
|
|
|
333
327
|
#endif
|
|
334
328
|
|
|
335
|
-
fn->closure = rbffi_Closure_Alloc(
|
|
329
|
+
fn->closure = rbffi_Closure_Alloc();
|
|
336
330
|
fn->closure->info = fn;
|
|
337
|
-
|
|
331
|
+
|
|
332
|
+
ffiStatus = ffi_prep_closure_loc(fn->closure->libffi_closure,
|
|
333
|
+
&fn->info->ffi_cif, /* callback signature */
|
|
334
|
+
callback_invoke,
|
|
335
|
+
fn->closure, /* user_data for callback_invoke */
|
|
336
|
+
fn->closure->libffi_trampoline);
|
|
337
|
+
if (ffiStatus != FFI_OK) {
|
|
338
|
+
rb_raise(rb_eRuntimeError, "ffi_prep_closure_loc in function_init failed. status=%#x",
|
|
339
|
+
ffiStatus);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
fn->base.memory.address = fn->closure->libffi_trampoline;
|
|
338
343
|
fn->base.memory.size = sizeof(*fn->closure);
|
|
344
|
+
|
|
339
345
|
fn->autorelease = true;
|
|
340
346
|
|
|
341
347
|
} else {
|
|
@@ -939,21 +945,6 @@ save_callback_exception(void* data, VALUE exc)
|
|
|
939
945
|
return Qnil;
|
|
940
946
|
}
|
|
941
947
|
|
|
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
948
|
void
|
|
958
949
|
rbffi_Function_Init(VALUE moduleFFI)
|
|
959
950
|
{
|
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;
|
data/ext/ffi_c/FunctionInfo.c
CHANGED
|
@@ -72,7 +72,6 @@ fntype_allocate(VALUE klass)
|
|
|
72
72
|
fnInfo->rbParameterTypes = Qnil;
|
|
73
73
|
fnInfo->rbEnums = Qnil;
|
|
74
74
|
fnInfo->invoke = rbffi_CallFunction;
|
|
75
|
-
fnInfo->closurePool = NULL;
|
|
76
75
|
|
|
77
76
|
return obj;
|
|
78
77
|
}
|
|
@@ -95,9 +94,6 @@ fntype_free(FunctionType* fnInfo)
|
|
|
95
94
|
xfree(fnInfo->ffiParameterTypes);
|
|
96
95
|
xfree(fnInfo->nativeParameterTypes);
|
|
97
96
|
xfree(fnInfo->callbackParameters);
|
|
98
|
-
if (fnInfo->closurePool != NULL) {
|
|
99
|
-
rbffi_ClosurePool_Free(fnInfo->closurePool);
|
|
100
|
-
}
|
|
101
97
|
xfree(fnInfo);
|
|
102
98
|
}
|
|
103
99
|
|