ffi 1.16.3 → 1.17.0-java
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +42 -0
- data/Gemfile +9 -2
- data/README.md +1 -1
- data/Rakefile +17 -5
- data/lib/ffi/autopointer.rb +1 -9
- data/lib/ffi/dynamic_library.rb +34 -5
- data/lib/ffi/enum.rb +0 -1
- data/lib/ffi/function.rb +1 -1
- data/lib/ffi/io.rb +2 -2
- data/lib/ffi/library.rb +23 -23
- data/lib/ffi/platform/aarch64-linux/types.conf +74 -3
- data/lib/ffi/pointer.rb +6 -6
- data/lib/ffi/struct.rb +4 -4
- data/lib/ffi/struct_layout.rb +2 -2
- data/lib/ffi/struct_layout_builder.rb +8 -8
- data/lib/ffi/types.rb +51 -49
- data/lib/ffi/version.rb +1 -1
- data/sig/ffi/abstract_memory.rbs +165 -0
- data/sig/ffi/auto_pointer.rbs +27 -0
- data/sig/ffi/buffer.rbs +18 -0
- data/sig/ffi/data_converter.rbs +10 -0
- data/sig/ffi/dynamic_library.rbs +9 -0
- data/sig/ffi/enum.rbs +38 -0
- data/sig/ffi/function.rbs +39 -0
- data/sig/ffi/library.rbs +42 -0
- data/sig/ffi/native_type.rbs +86 -0
- data/sig/ffi/pointer.rbs +42 -0
- data/sig/ffi/struct.rbs +76 -0
- data/sig/ffi/struct_by_reference.rbs +11 -0
- data/sig/ffi/struct_by_value.rbs +7 -0
- data/sig/ffi/struct_layout.rbs +9 -0
- data/sig/ffi/struct_layout_builder.rbs +5 -0
- data/sig/ffi/type.rbs +39 -0
- data/sig/ffi.rbs +26 -0
- data.tar.gz.sig +0 -0
- metadata +34 -532
- metadata.gz.sig +0 -0
- data/ext/ffi_c/AbstractMemory.c +0 -1128
- data/ext/ffi_c/AbstractMemory.h +0 -176
- data/ext/ffi_c/ArrayType.c +0 -198
- data/ext/ffi_c/ArrayType.h +0 -60
- data/ext/ffi_c/Buffer.c +0 -417
- data/ext/ffi_c/Call.c +0 -498
- data/ext/ffi_c/Call.h +0 -107
- data/ext/ffi_c/ClosurePool.c +0 -333
- data/ext/ffi_c/ClosurePool.h +0 -59
- data/ext/ffi_c/DynamicLibrary.c +0 -397
- data/ext/ffi_c/DynamicLibrary.h +0 -98
- data/ext/ffi_c/Function.c +0 -1063
- data/ext/ffi_c/Function.h +0 -84
- data/ext/ffi_c/FunctionInfo.c +0 -322
- data/ext/ffi_c/LastError.c +0 -243
- data/ext/ffi_c/LastError.h +0 -47
- data/ext/ffi_c/LongDouble.c +0 -65
- data/ext/ffi_c/LongDouble.h +0 -47
- data/ext/ffi_c/MappedType.c +0 -211
- data/ext/ffi_c/MappedType.h +0 -57
- data/ext/ffi_c/MemoryPointer.c +0 -219
- data/ext/ffi_c/MemoryPointer.h +0 -49
- data/ext/ffi_c/MethodHandle.c +0 -350
- data/ext/ffi_c/MethodHandle.h +0 -56
- data/ext/ffi_c/Platform.c +0 -78
- data/ext/ffi_c/Platform.h +0 -45
- data/ext/ffi_c/Pointer.c +0 -546
- data/ext/ffi_c/Pointer.h +0 -60
- data/ext/ffi_c/Struct.c +0 -897
- data/ext/ffi_c/Struct.h +0 -115
- data/ext/ffi_c/StructByValue.c +0 -177
- data/ext/ffi_c/StructByValue.h +0 -55
- data/ext/ffi_c/StructLayout.c +0 -769
- data/ext/ffi_c/Thread.c +0 -129
- data/ext/ffi_c/Thread.h +0 -76
- data/ext/ffi_c/Type.c +0 -447
- data/ext/ffi_c/Type.h +0 -63
- data/ext/ffi_c/Types.c +0 -138
- data/ext/ffi_c/Types.h +0 -88
- data/ext/ffi_c/Variadic.c +0 -345
- data/ext/ffi_c/compat.h +0 -82
- data/ext/ffi_c/extconf.rb +0 -115
- data/ext/ffi_c/ffi.c +0 -97
- data/ext/ffi_c/libffi/.appveyor/site.exp +0 -16
- data/ext/ffi_c/libffi/.appveyor/unix-noexec.exp +0 -7
- data/ext/ffi_c/libffi/.appveyor.yml +0 -84
- data/ext/ffi_c/libffi/.ci/ar-lib +0 -270
- data/ext/ffi_c/libffi/.ci/bfin-sim.exp +0 -58
- data/ext/ffi_c/libffi/.ci/build-cross-in-container.sh +0 -18
- data/ext/ffi_c/libffi/.ci/build-in-container.sh +0 -10
- data/ext/ffi_c/libffi/.ci/build.sh +0 -124
- data/ext/ffi_c/libffi/.ci/compile +0 -351
- data/ext/ffi_c/libffi/.ci/install.sh +0 -78
- data/ext/ffi_c/libffi/.ci/m32r-sim.exp +0 -58
- data/ext/ffi_c/libffi/.ci/moxie-sim.exp +0 -60
- data/ext/ffi_c/libffi/.ci/msvs-detect +0 -1103
- data/ext/ffi_c/libffi/.ci/or1k-sim.exp +0 -58
- data/ext/ffi_c/libffi/.ci/powerpc-eabisim.exp +0 -58
- data/ext/ffi_c/libffi/.ci/site.exp +0 -29
- data/ext/ffi_c/libffi/.ci/wine-sim.exp +0 -55
- data/ext/ffi_c/libffi/.circleci/config.yml +0 -156
- data/ext/ffi_c/libffi/.gitattributes +0 -4
- data/ext/ffi_c/libffi/.github/issue_template.md +0 -10
- data/ext/ffi_c/libffi/.github/workflows/build.yml +0 -460
- data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +0 -171
- data/ext/ffi_c/libffi/.gitignore +0 -46
- data/ext/ffi_c/libffi/ChangeLog.old +0 -7407
- data/ext/ffi_c/libffi/LICENSE +0 -21
- data/ext/ffi_c/libffi/LICENSE-BUILDTOOLS +0 -353
- data/ext/ffi_c/libffi/Makefile.am +0 -157
- data/ext/ffi_c/libffi/Makefile.in +0 -2127
- data/ext/ffi_c/libffi/README.md +0 -526
- data/ext/ffi_c/libffi/acinclude.m4 +0 -377
- data/ext/ffi_c/libffi/autogen.sh +0 -2
- data/ext/ffi_c/libffi/compile +0 -348
- data/ext/ffi_c/libffi/config.guess +0 -1754
- data/ext/ffi_c/libffi/config.sub +0 -1892
- data/ext/ffi_c/libffi/configure +0 -22791
- data/ext/ffi_c/libffi/configure.ac +0 -451
- data/ext/ffi_c/libffi/configure.host +0 -337
- data/ext/ffi_c/libffi/doc/Makefile.am +0 -3
- data/ext/ffi_c/libffi/doc/Makefile.in +0 -818
- data/ext/ffi_c/libffi/doc/libffi.texi +0 -1046
- data/ext/ffi_c/libffi/doc/version.texi +0 -4
- data/ext/ffi_c/libffi/fficonfig.h.in +0 -188
- data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +0 -312
- data/ext/ffi_c/libffi/include/Makefile.am +0 -9
- data/ext/ffi_c/libffi/include/Makefile.in +0 -609
- data/ext/ffi_c/libffi/include/ffi.h.in +0 -527
- data/ext/ffi_c/libffi/include/ffi_cfi.h +0 -76
- data/ext/ffi_c/libffi/include/ffi_common.h +0 -182
- data/ext/ffi_c/libffi/include/tramp.h +0 -45
- data/ext/ffi_c/libffi/install-sh +0 -541
- data/ext/ffi_c/libffi/libffi.map.in +0 -76
- data/ext/ffi_c/libffi/libffi.pc.in +0 -11
- data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +0 -997
- data/ext/ffi_c/libffi/libtool-ldflags +0 -106
- data/ext/ffi_c/libffi/libtool-version +0 -29
- data/ext/ffi_c/libffi/ltmain.sh +0 -11448
- data/ext/ffi_c/libffi/m4/asmcfi.m4 +0 -13
- data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +0 -50
- data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +0 -198
- data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +0 -158
- data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +0 -53
- data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +0 -119
- data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +0 -49
- data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +0 -302
- data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +0 -267
- data/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +0 -89
- data/ext/ffi_c/libffi/m4/ax_prepend_flag.m4 +0 -51
- data/ext/ffi_c/libffi/m4/ax_require_defined.m4 +0 -37
- data/ext/ffi_c/libffi/make_sunver.pl +0 -333
- data/ext/ffi_c/libffi/man/Makefile.am +0 -8
- data/ext/ffi_c/libffi/man/Makefile.in +0 -565
- data/ext/ffi_c/libffi/man/ffi.3 +0 -41
- data/ext/ffi_c/libffi/man/ffi_call.3 +0 -103
- data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +0 -68
- data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +0 -73
- data/ext/ffi_c/libffi/missing +0 -215
- data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.sln +0 -33
- data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj +0 -130
- data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters +0 -57
- data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.user +0 -4
- data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/ffi.h +0 -511
- data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/fficonfig.h +0 -219
- data/ext/ffi_c/libffi/msvcc.sh +0 -353
- data/ext/ffi_c/libffi/src/aarch64/ffi.c +0 -1129
- data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +0 -97
- data/ext/ffi_c/libffi/src/aarch64/internal.h +0 -100
- data/ext/ffi_c/libffi/src/aarch64/sysv.S +0 -543
- data/ext/ffi_c/libffi/src/aarch64/win64_armasm.S +0 -506
- data/ext/ffi_c/libffi/src/alpha/ffi.c +0 -521
- data/ext/ffi_c/libffi/src/alpha/ffitarget.h +0 -57
- data/ext/ffi_c/libffi/src/alpha/internal.h +0 -23
- data/ext/ffi_c/libffi/src/alpha/osf.S +0 -282
- data/ext/ffi_c/libffi/src/arc/arcompact.S +0 -210
- data/ext/ffi_c/libffi/src/arc/ffi.c +0 -443
- data/ext/ffi_c/libffi/src/arc/ffitarget.h +0 -67
- data/ext/ffi_c/libffi/src/arm/ffi.c +0 -921
- data/ext/ffi_c/libffi/src/arm/ffitarget.h +0 -89
- data/ext/ffi_c/libffi/src/arm/internal.h +0 -17
- data/ext/ffi_c/libffi/src/arm/sysv.S +0 -456
- data/ext/ffi_c/libffi/src/arm/sysv_msvc_arm32.S +0 -311
- data/ext/ffi_c/libffi/src/avr32/ffi.c +0 -423
- data/ext/ffi_c/libffi/src/avr32/ffitarget.h +0 -55
- data/ext/ffi_c/libffi/src/avr32/sysv.S +0 -208
- data/ext/ffi_c/libffi/src/bfin/ffi.c +0 -196
- data/ext/ffi_c/libffi/src/bfin/ffitarget.h +0 -43
- data/ext/ffi_c/libffi/src/bfin/sysv.S +0 -179
- data/ext/ffi_c/libffi/src/closures.c +0 -1107
- data/ext/ffi_c/libffi/src/cris/ffi.c +0 -386
- data/ext/ffi_c/libffi/src/cris/ffitarget.h +0 -56
- data/ext/ffi_c/libffi/src/cris/sysv.S +0 -215
- data/ext/ffi_c/libffi/src/csky/ffi.c +0 -395
- data/ext/ffi_c/libffi/src/csky/ffitarget.h +0 -63
- data/ext/ffi_c/libffi/src/csky/sysv.S +0 -371
- data/ext/ffi_c/libffi/src/debug.c +0 -64
- data/ext/ffi_c/libffi/src/dlmalloc.c +0 -5171
- data/ext/ffi_c/libffi/src/frv/eabi.S +0 -128
- data/ext/ffi_c/libffi/src/frv/ffi.c +0 -292
- data/ext/ffi_c/libffi/src/frv/ffitarget.h +0 -62
- data/ext/ffi_c/libffi/src/ia64/ffi.c +0 -616
- data/ext/ffi_c/libffi/src/ia64/ffitarget.h +0 -56
- data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +0 -40
- data/ext/ffi_c/libffi/src/ia64/unix.S +0 -585
- data/ext/ffi_c/libffi/src/java_raw_api.c +0 -374
- data/ext/ffi_c/libffi/src/kvx/asm.h +0 -5
- data/ext/ffi_c/libffi/src/kvx/ffi.c +0 -273
- data/ext/ffi_c/libffi/src/kvx/ffitarget.h +0 -75
- data/ext/ffi_c/libffi/src/kvx/sysv.S +0 -127
- data/ext/ffi_c/libffi/src/loongarch64/ffi.c +0 -621
- data/ext/ffi_c/libffi/src/loongarch64/ffitarget.h +0 -82
- data/ext/ffi_c/libffi/src/loongarch64/sysv.S +0 -327
- data/ext/ffi_c/libffi/src/m32r/ffi.c +0 -249
- data/ext/ffi_c/libffi/src/m32r/ffitarget.h +0 -53
- data/ext/ffi_c/libffi/src/m32r/sysv.S +0 -121
- data/ext/ffi_c/libffi/src/m68k/ffi.c +0 -362
- data/ext/ffi_c/libffi/src/m68k/ffitarget.h +0 -54
- data/ext/ffi_c/libffi/src/m68k/sysv.S +0 -357
- data/ext/ffi_c/libffi/src/m88k/ffi.c +0 -400
- data/ext/ffi_c/libffi/src/m88k/ffitarget.h +0 -49
- data/ext/ffi_c/libffi/src/m88k/obsd.S +0 -209
- data/ext/ffi_c/libffi/src/metag/ffi.c +0 -330
- data/ext/ffi_c/libffi/src/metag/ffitarget.h +0 -53
- data/ext/ffi_c/libffi/src/metag/sysv.S +0 -311
- data/ext/ffi_c/libffi/src/microblaze/ffi.c +0 -321
- data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +0 -53
- data/ext/ffi_c/libffi/src/microblaze/sysv.S +0 -302
- data/ext/ffi_c/libffi/src/mips/ffi.c +0 -1309
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +0 -251
- data/ext/ffi_c/libffi/src/mips/n32.S +0 -772
- data/ext/ffi_c/libffi/src/mips/o32.S +0 -561
- data/ext/ffi_c/libffi/src/moxie/eabi.S +0 -101
- data/ext/ffi_c/libffi/src/moxie/ffi.c +0 -310
- data/ext/ffi_c/libffi/src/moxie/ffitarget.h +0 -52
- data/ext/ffi_c/libffi/src/nios2/ffi.c +0 -304
- data/ext/ffi_c/libffi/src/nios2/ffitarget.h +0 -52
- data/ext/ffi_c/libffi/src/nios2/sysv.S +0 -136
- data/ext/ffi_c/libffi/src/or1k/ffi.c +0 -341
- data/ext/ffi_c/libffi/src/or1k/ffitarget.h +0 -58
- data/ext/ffi_c/libffi/src/or1k/sysv.S +0 -107
- data/ext/ffi_c/libffi/src/pa/ffi.c +0 -673
- data/ext/ffi_c/libffi/src/pa/ffi64.c +0 -614
- data/ext/ffi_c/libffi/src/pa/ffitarget.h +0 -94
- data/ext/ffi_c/libffi/src/pa/hpux32.S +0 -417
- data/ext/ffi_c/libffi/src/pa/hpux64.S +0 -681
- data/ext/ffi_c/libffi/src/pa/linux.S +0 -427
- data/ext/ffi_c/libffi/src/powerpc/aix.S +0 -566
- data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +0 -694
- data/ext/ffi_c/libffi/src/powerpc/asm.h +0 -125
- data/ext/ffi_c/libffi/src/powerpc/darwin.S +0 -378
- data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +0 -571
- data/ext/ffi_c/libffi/src/powerpc/ffi.c +0 -175
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +0 -1452
- data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +0 -1153
- data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +0 -105
- data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +0 -923
- data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +0 -204
- data/ext/ffi_c/libffi/src/powerpc/linux64.S +0 -293
- data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +0 -566
- data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +0 -397
- data/ext/ffi_c/libffi/src/powerpc/sysv.S +0 -173
- data/ext/ffi_c/libffi/src/powerpc/t-aix +0 -5
- data/ext/ffi_c/libffi/src/prep_cif.c +0 -283
- data/ext/ffi_c/libffi/src/raw_api.c +0 -267
- data/ext/ffi_c/libffi/src/riscv/ffi.c +0 -514
- data/ext/ffi_c/libffi/src/riscv/ffitarget.h +0 -69
- data/ext/ffi_c/libffi/src/riscv/sysv.S +0 -293
- data/ext/ffi_c/libffi/src/s390/ffi.c +0 -756
- data/ext/ffi_c/libffi/src/s390/ffitarget.h +0 -70
- data/ext/ffi_c/libffi/src/s390/internal.h +0 -11
- data/ext/ffi_c/libffi/src/s390/sysv.S +0 -325
- data/ext/ffi_c/libffi/src/sh/ffi.c +0 -717
- data/ext/ffi_c/libffi/src/sh/ffitarget.h +0 -54
- data/ext/ffi_c/libffi/src/sh/sysv.S +0 -850
- data/ext/ffi_c/libffi/src/sh64/ffi.c +0 -469
- data/ext/ffi_c/libffi/src/sh64/ffitarget.h +0 -58
- data/ext/ffi_c/libffi/src/sh64/sysv.S +0 -539
- data/ext/ffi_c/libffi/src/sparc/ffi.c +0 -468
- data/ext/ffi_c/libffi/src/sparc/ffi64.c +0 -624
- data/ext/ffi_c/libffi/src/sparc/ffitarget.h +0 -81
- data/ext/ffi_c/libffi/src/sparc/internal.h +0 -26
- data/ext/ffi_c/libffi/src/sparc/v8.S +0 -443
- data/ext/ffi_c/libffi/src/sparc/v9.S +0 -440
- data/ext/ffi_c/libffi/src/tile/ffi.c +0 -355
- data/ext/ffi_c/libffi/src/tile/ffitarget.h +0 -65
- data/ext/ffi_c/libffi/src/tile/tile.S +0 -360
- data/ext/ffi_c/libffi/src/tramp.c +0 -716
- data/ext/ffi_c/libffi/src/types.c +0 -108
- data/ext/ffi_c/libffi/src/vax/elfbsd.S +0 -195
- data/ext/ffi_c/libffi/src/vax/ffi.c +0 -276
- data/ext/ffi_c/libffi/src/vax/ffitarget.h +0 -49
- data/ext/ffi_c/libffi/src/wasm32/ffi.c +0 -934
- data/ext/ffi_c/libffi/src/wasm32/ffitarget.h +0 -62
- data/ext/ffi_c/libffi/src/x86/asmnames.h +0 -30
- data/ext/ffi_c/libffi/src/x86/ffi.c +0 -832
- data/ext/ffi_c/libffi/src/x86/ffi64.c +0 -950
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +0 -164
- data/ext/ffi_c/libffi/src/x86/ffiw64.c +0 -361
- data/ext/ffi_c/libffi/src/x86/internal.h +0 -43
- data/ext/ffi_c/libffi/src/x86/internal64.h +0 -36
- data/ext/ffi_c/libffi/src/x86/sysv.S +0 -1272
- data/ext/ffi_c/libffi/src/x86/sysv_intel.S +0 -998
- data/ext/ffi_c/libffi/src/x86/unix64.S +0 -711
- data/ext/ffi_c/libffi/src/x86/win64.S +0 -254
- data/ext/ffi_c/libffi/src/x86/win64_intel.S +0 -238
- data/ext/ffi_c/libffi/src/xtensa/ffi.c +0 -306
- data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +0 -57
- data/ext/ffi_c/libffi/src/xtensa/sysv.S +0 -268
- data/ext/ffi_c/libffi/stamp-h.in +0 -1
- data/ext/ffi_c/libffi/testsuite/Makefile.am +0 -135
- data/ext/ffi_c/libffi/testsuite/Makefile.in +0 -664
- data/ext/ffi_c/libffi/testsuite/config/default.exp +0 -1
- data/ext/ffi_c/libffi/testsuite/emscripten/build-tests.sh +0 -54
- data/ext/ffi_c/libffi/testsuite/emscripten/build.sh +0 -63
- data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +0 -80
- data/ext/ffi_c/libffi/testsuite/emscripten/node-tests.sh +0 -48
- data/ext/ffi_c/libffi/testsuite/emscripten/test.html +0 -7
- data/ext/ffi_c/libffi/testsuite/emscripten/test_libffi.py +0 -51
- data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +0 -682
- data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +0 -283
- data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +0 -45
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +0 -28
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +0 -78
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +0 -50
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +0 -63
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +0 -1746
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +0 -2885
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +0 -747
- data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +0 -46
- data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +0 -46
- data/ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c +0 -41
- data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +0 -54
- data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +0 -26
- data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +0 -163
- data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +0 -59
- data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +0 -60
- data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +0 -61
- data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +0 -74
- data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +0 -62
- data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +0 -110
- data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +0 -59
- data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +0 -57
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +0 -70
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +0 -78
- data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -52
- data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +0 -46
- data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +0 -127
- data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +0 -59
- data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc_tc.c +0 -114
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +0 -36
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +0 -43
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +0 -42
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +0 -35
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +0 -36
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +0 -49
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +0 -42
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +0 -34
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +0 -41
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +0 -48
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +0 -36
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +0 -42
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +0 -38
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +0 -42
- data/ext/ffi_c/libffi/testsuite/libffi.call/s55.c +0 -60
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +0 -43
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +0 -49
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +0 -49
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +0 -55
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +0 -67
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +0 -57
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +0 -67
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +0 -60
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +0 -64
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +0 -66
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +0 -64
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +0 -74
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +0 -81
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +0 -68
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_2.c +0 -63
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3.c +0 -65
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3f.c +0 -65
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4.c +0 -67
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4f.c +0 -67
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_big.c +0 -93
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_small.c +0 -61
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_2H.c +0 -63
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_8H.c +0 -90
- data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +0 -61
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +0 -78
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_2.c +0 -220
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_3.c +0 -154
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +0 -134
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +0 -134
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +0 -140
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure.exp +0 -67
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn0.c +0 -90
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn1.c +0 -83
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn2.c +0 -83
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn3.c +0 -102
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn4.c +0 -91
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn5.c +0 -94
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn6.c +0 -92
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_loc_fn0.c +0 -96
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_simple.c +0 -61
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_12byte.c +0 -112
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_16byte.c +0 -117
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_18byte.c +0 -120
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_19byte.c +0 -131
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_1_1byte.c +0 -93
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte.c +0 -109
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte1.c +0 -113
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_24byte.c +0 -145
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_2byte.c +0 -103
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3_1byte.c +0 -114
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte1.c +0 -103
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte2.c +0 -103
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3float.c +0 -113
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4_1byte.c +0 -120
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4byte.c +0 -103
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5_1_byte.c +0 -137
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5byte.c +0 -116
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_64byte.c +0 -148
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6_1_byte.c +0 -140
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6byte.c +0 -121
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7_1_byte.c +0 -155
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7byte.c +0 -121
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_8byte.c +0 -102
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte1.c +0 -103
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte2.c +0 -103
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_double.c +0 -111
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_float.c +0 -109
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble.c +0 -111
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split.c +0 -147
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split2.c +0 -152
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_pointer.c +0 -113
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint16.c +0 -108
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint32.c +0 -106
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint64.c +0 -109
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint16.c +0 -108
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint32.c +0 -109
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint64.c +0 -111
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_dbls_struct.c +0 -68
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double.c +0 -43
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double_va.c +0 -69
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_float.c +0 -46
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble.c +0 -115
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble_va.c +0 -80
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_args.c +0 -70
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c +0 -55
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_schar.c +0 -78
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshort.c +0 -79
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshortchar.c +0 -94
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_uchar.c +0 -99
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushort.c +0 -78
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushortchar.c +0 -94
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer.c +0 -79
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer_stack.c +0 -152
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_schar.c +0 -47
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sint.c +0 -44
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sshort.c +0 -45
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_struct_va1.c +0 -125
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uchar.c +0 -45
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint.c +0 -47
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint_va.c +0 -49
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulong_va.c +0 -49
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulonglong.c +0 -49
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ushort.c +0 -46
- data/ext/ffi_c/libffi/testsuite/libffi.closures/err_bad_abi.c +0 -36
- data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +0 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/huge_struct.c +0 -343
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct.c +0 -175
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct1.c +0 -161
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct10.c +0 -146
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct11.c +0 -137
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct12.c +0 -86
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct13.c +0 -115
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct2.c +0 -119
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct3.c +0 -120
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct4.c +0 -120
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct5.c +0 -121
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct6.c +0 -142
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct7.c +0 -120
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct8.c +0 -142
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct9.c +0 -142
- data/ext/ffi_c/libffi/testsuite/libffi.closures/problem1.c +0 -90
- data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs1.c +0 -86
- data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs2.c +0 -102
- data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs3.c +0 -101
- data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large.c +0 -145
- data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large2.c +0 -148
- data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium.c +0 -124
- data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium2.c +0 -125
- data/ext/ffi_c/libffi/testsuite/libffi.closures/testclosure.c +0 -75
- data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest.cc +0 -118
- data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest_ffi_call.cc +0 -55
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +0 -91
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +0 -42
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +0 -71
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +0 -80
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +0 -16
- data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.exp +0 -36
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +0 -51
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +0 -7
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +0 -7
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +0 -7
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +0 -86
- data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +0 -1
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +0 -78
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +0 -37
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +0 -41
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +0 -44
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +0 -10
- data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +0 -34
- data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +0 -28
- data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +0 -1
- data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +0 -36
- data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +0 -19
- data/ext/ffi_c/libffi.bsd.mk +0 -40
- data/ext/ffi_c/libffi.darwin.mk +0 -105
- data/ext/ffi_c/libffi.gnu.mk +0 -32
- data/ext/ffi_c/libffi.mk +0 -18
- data/ext/ffi_c/libffi.vc.mk +0 -26
- data/ext/ffi_c/libffi.vc64.mk +0 -26
- data/ext/ffi_c/rbffi.h +0 -55
- data/ext/ffi_c/rbffi_endian.h +0 -59
data/ext/ffi_c/Call.c
DELETED
|
@@ -1,498 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2009, Wayne Meissner
|
|
3
|
-
* Copyright (c) 2009, Luc Heinrich <luc@honk-honk.com>
|
|
4
|
-
* Copyright (c) 2009, Mike Dalessio <mike.dalessio@gmail.com>
|
|
5
|
-
* Copyright (c) 2009, Aman Gupta.
|
|
6
|
-
* Copyright (c) 2008-2013, Ruby FFI project contributors
|
|
7
|
-
* All rights reserved.
|
|
8
|
-
*
|
|
9
|
-
* Redistribution and use in source and binary forms, with or without
|
|
10
|
-
* modification, are permitted provided that the following conditions are met:
|
|
11
|
-
* * Redistributions of source code must retain the above copyright
|
|
12
|
-
* notice, this list of conditions and the following disclaimer.
|
|
13
|
-
* * Redistributions in binary form must reproduce the above copyright
|
|
14
|
-
* notice, this list of conditions and the following disclaimer in the
|
|
15
|
-
* documentation and/or other materials provided with the distribution.
|
|
16
|
-
* * Neither the name of the Ruby FFI project nor the
|
|
17
|
-
* names of its contributors may be used to endorse or promote products
|
|
18
|
-
* derived from this software without specific prior written permission.
|
|
19
|
-
*
|
|
20
|
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
21
|
-
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
22
|
-
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
23
|
-
* DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
|
24
|
-
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
25
|
-
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
26
|
-
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
27
|
-
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
28
|
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
29
|
-
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
#ifndef _MSC_VER
|
|
33
|
-
#include <sys/param.h>
|
|
34
|
-
#endif
|
|
35
|
-
#include <sys/types.h>
|
|
36
|
-
#include <stdio.h>
|
|
37
|
-
#include <stdint.h>
|
|
38
|
-
#include <stdbool.h>
|
|
39
|
-
#include <errno.h>
|
|
40
|
-
#include <ruby.h>
|
|
41
|
-
#include <ruby/thread.h>
|
|
42
|
-
#if defined(HAVE_NATIVETHREAD) && !defined(_WIN32)
|
|
43
|
-
# include <signal.h>
|
|
44
|
-
# include <pthread.h>
|
|
45
|
-
#endif
|
|
46
|
-
#include <ffi.h>
|
|
47
|
-
#include "extconf.h"
|
|
48
|
-
#include "rbffi.h"
|
|
49
|
-
#include "compat.h"
|
|
50
|
-
#include "AbstractMemory.h"
|
|
51
|
-
#include "Pointer.h"
|
|
52
|
-
#include "Struct.h"
|
|
53
|
-
#include "Function.h"
|
|
54
|
-
#include "Type.h"
|
|
55
|
-
#include "LastError.h"
|
|
56
|
-
#include "Call.h"
|
|
57
|
-
#include "MappedType.h"
|
|
58
|
-
#include "Thread.h"
|
|
59
|
-
#include "LongDouble.h"
|
|
60
|
-
|
|
61
|
-
#ifdef USE_RAW
|
|
62
|
-
# ifndef __i386__
|
|
63
|
-
# error "RAW argument packing only supported on i386"
|
|
64
|
-
# endif
|
|
65
|
-
|
|
66
|
-
#define INT8_ADJ (4)
|
|
67
|
-
#define INT16_ADJ (4)
|
|
68
|
-
#define INT32_ADJ (4)
|
|
69
|
-
#define INT64_ADJ (8)
|
|
70
|
-
#define LONG_ADJ (sizeof(long))
|
|
71
|
-
#define FLOAT32_ADJ (4)
|
|
72
|
-
#define FLOAT64_ADJ (8)
|
|
73
|
-
#define ADDRESS_ADJ (sizeof(void *))
|
|
74
|
-
#define LONGDOUBLE_ADJ (ffi_type_longdouble.alignment > sizeof(long double) ? ffi_type_longdouble.alignment : sizeof(long double))
|
|
75
|
-
|
|
76
|
-
#endif /* USE_RAW */
|
|
77
|
-
|
|
78
|
-
#ifdef USE_RAW
|
|
79
|
-
# define ADJ(p, a) ((p) = (FFIStorage*) (((char *) p) + a##_ADJ))
|
|
80
|
-
#else
|
|
81
|
-
# define ADJ(p, a) (++(p))
|
|
82
|
-
#endif
|
|
83
|
-
|
|
84
|
-
static void* callback_param(VALUE proc, VALUE cbinfo);
|
|
85
|
-
static inline void* getPointer(VALUE value, int type);
|
|
86
|
-
|
|
87
|
-
static ID id_to_ptr, id_map_symbol, id_to_native;
|
|
88
|
-
|
|
89
|
-
void
|
|
90
|
-
rbffi_SetupCallParams(int argc, VALUE* argv, int paramCount, Type** paramTypes,
|
|
91
|
-
FFIStorage* paramStorage, void** ffiValues,
|
|
92
|
-
VALUE* callbackParameters, int callbackCount, VALUE enums)
|
|
93
|
-
{
|
|
94
|
-
VALUE callbackProc = Qnil;
|
|
95
|
-
FFIStorage* param = ¶mStorage[0];
|
|
96
|
-
int i, argidx, cbidx, argCount;
|
|
97
|
-
|
|
98
|
-
if (unlikely(paramCount != -1 && paramCount != argc)) {
|
|
99
|
-
if (argc == (paramCount - 1) && callbackCount == 1 && rb_block_given_p()) {
|
|
100
|
-
callbackProc = rb_block_proc();
|
|
101
|
-
} else {
|
|
102
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", argc, paramCount);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
argCount = paramCount != -1 ? paramCount : argc;
|
|
107
|
-
|
|
108
|
-
for (i = 0, argidx = 0, cbidx = 0; i < argCount; ++i) {
|
|
109
|
-
Type* paramType = paramTypes[i];
|
|
110
|
-
int type;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (unlikely(paramType->nativeType == NATIVE_MAPPED)) {
|
|
114
|
-
VALUE values[] = { argv[argidx], Qnil };
|
|
115
|
-
argv[argidx] = rb_funcall2(((MappedType *) paramType)->rbConverter, id_to_native, 2, values);
|
|
116
|
-
paramType = ((MappedType *) paramType)->type;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
type = argidx < argc ? TYPE(argv[argidx]) : T_NONE;
|
|
120
|
-
ffiValues[i] = param;
|
|
121
|
-
|
|
122
|
-
switch (paramType->nativeType) {
|
|
123
|
-
|
|
124
|
-
case NATIVE_INT8:
|
|
125
|
-
if (unlikely(type == T_SYMBOL && enums != Qnil)) {
|
|
126
|
-
VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]);
|
|
127
|
-
param->s8 = NUM2INT(value);
|
|
128
|
-
} else {
|
|
129
|
-
param->s8 = NUM2INT(argv[argidx]);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
++argidx;
|
|
133
|
-
ADJ(param, INT8);
|
|
134
|
-
break;
|
|
135
|
-
|
|
136
|
-
case NATIVE_INT16:
|
|
137
|
-
if (unlikely(type == T_SYMBOL && enums != Qnil)) {
|
|
138
|
-
VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]);
|
|
139
|
-
param->s16 = NUM2INT(value);
|
|
140
|
-
|
|
141
|
-
} else {
|
|
142
|
-
param->s16 = NUM2INT(argv[argidx]);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
++argidx;
|
|
146
|
-
ADJ(param, INT16);
|
|
147
|
-
break;
|
|
148
|
-
|
|
149
|
-
case NATIVE_INT32:
|
|
150
|
-
if (unlikely(type == T_SYMBOL && enums != Qnil)) {
|
|
151
|
-
VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]);
|
|
152
|
-
param->s32 = NUM2INT(value);
|
|
153
|
-
|
|
154
|
-
} else {
|
|
155
|
-
param->s32 = NUM2INT(argv[argidx]);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
++argidx;
|
|
159
|
-
ADJ(param, INT32);
|
|
160
|
-
break;
|
|
161
|
-
|
|
162
|
-
case NATIVE_BOOL:
|
|
163
|
-
if (type != T_TRUE && type != T_FALSE) {
|
|
164
|
-
rb_raise(rb_eTypeError, "wrong argument type (expected a boolean parameter)");
|
|
165
|
-
}
|
|
166
|
-
param->s8 = argv[argidx++] == Qtrue;
|
|
167
|
-
ADJ(param, INT8);
|
|
168
|
-
break;
|
|
169
|
-
|
|
170
|
-
case NATIVE_UINT8:
|
|
171
|
-
if (unlikely(type == T_SYMBOL && enums != Qnil)) {
|
|
172
|
-
VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]);
|
|
173
|
-
param->u8 = NUM2UINT(value);
|
|
174
|
-
} else {
|
|
175
|
-
param->u8 = NUM2UINT(argv[argidx]);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
ADJ(param, INT8);
|
|
179
|
-
++argidx;
|
|
180
|
-
break;
|
|
181
|
-
|
|
182
|
-
case NATIVE_UINT16:
|
|
183
|
-
if (unlikely(type == T_SYMBOL && enums != Qnil)) {
|
|
184
|
-
VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]);
|
|
185
|
-
param->u16 = NUM2UINT(value);
|
|
186
|
-
} else {
|
|
187
|
-
param->u16 = NUM2UINT(argv[argidx]);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
ADJ(param, INT16);
|
|
191
|
-
++argidx;
|
|
192
|
-
break;
|
|
193
|
-
|
|
194
|
-
case NATIVE_UINT32:
|
|
195
|
-
if (unlikely(type == T_SYMBOL && enums != Qnil)) {
|
|
196
|
-
VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]);
|
|
197
|
-
param->u32 = NUM2UINT(value);
|
|
198
|
-
} else {
|
|
199
|
-
param->u32 = NUM2UINT(argv[argidx]);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
ADJ(param, INT32);
|
|
203
|
-
++argidx;
|
|
204
|
-
break;
|
|
205
|
-
|
|
206
|
-
case NATIVE_INT64:
|
|
207
|
-
if (unlikely(type == T_SYMBOL && enums != Qnil)) {
|
|
208
|
-
VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]);
|
|
209
|
-
param->i64 = NUM2LL(value);
|
|
210
|
-
} else {
|
|
211
|
-
param->i64 = NUM2LL(argv[argidx]);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
ADJ(param, INT64);
|
|
215
|
-
++argidx;
|
|
216
|
-
break;
|
|
217
|
-
|
|
218
|
-
case NATIVE_UINT64:
|
|
219
|
-
if (unlikely(type == T_SYMBOL && enums != Qnil)) {
|
|
220
|
-
VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]);
|
|
221
|
-
param->u64 = NUM2ULL(value);
|
|
222
|
-
} else {
|
|
223
|
-
param->u64 = NUM2ULL(argv[argidx]);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
ADJ(param, INT64);
|
|
227
|
-
++argidx;
|
|
228
|
-
break;
|
|
229
|
-
|
|
230
|
-
case NATIVE_LONG:
|
|
231
|
-
if (unlikely(type == T_SYMBOL && enums != Qnil)) {
|
|
232
|
-
VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]);
|
|
233
|
-
*(ffi_sarg *) param = NUM2LONG(value);
|
|
234
|
-
} else {
|
|
235
|
-
*(ffi_sarg *) param = NUM2LONG(argv[argidx]);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
ADJ(param, LONG);
|
|
239
|
-
++argidx;
|
|
240
|
-
break;
|
|
241
|
-
|
|
242
|
-
case NATIVE_ULONG:
|
|
243
|
-
if (unlikely(type == T_SYMBOL && enums != Qnil)) {
|
|
244
|
-
VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]);
|
|
245
|
-
*(ffi_arg *) param = NUM2ULONG(value);
|
|
246
|
-
} else {
|
|
247
|
-
*(ffi_arg *) param = NUM2ULONG(argv[argidx]);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
ADJ(param, LONG);
|
|
251
|
-
++argidx;
|
|
252
|
-
break;
|
|
253
|
-
|
|
254
|
-
case NATIVE_FLOAT32:
|
|
255
|
-
if (unlikely(type == T_SYMBOL && enums != Qnil)) {
|
|
256
|
-
VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]);
|
|
257
|
-
param->f32 = (float) NUM2DBL(value);
|
|
258
|
-
} else {
|
|
259
|
-
param->f32 = (float) NUM2DBL(argv[argidx]);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
ADJ(param, FLOAT32);
|
|
263
|
-
++argidx;
|
|
264
|
-
break;
|
|
265
|
-
|
|
266
|
-
case NATIVE_FLOAT64:
|
|
267
|
-
if (unlikely(type == T_SYMBOL && enums != Qnil)) {
|
|
268
|
-
VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]);
|
|
269
|
-
param->f64 = NUM2DBL(value);
|
|
270
|
-
} else {
|
|
271
|
-
param->f64 = NUM2DBL(argv[argidx]);
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
ADJ(param, FLOAT64);
|
|
275
|
-
++argidx;
|
|
276
|
-
break;
|
|
277
|
-
|
|
278
|
-
case NATIVE_LONGDOUBLE:
|
|
279
|
-
if (unlikely(type == T_SYMBOL && enums != Qnil)) {
|
|
280
|
-
VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]);
|
|
281
|
-
param->ld = rbffi_num2longdouble(value);
|
|
282
|
-
} else {
|
|
283
|
-
param->ld = rbffi_num2longdouble(argv[argidx]);
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
ADJ(param, LONGDOUBLE);
|
|
287
|
-
++argidx;
|
|
288
|
-
break;
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
case NATIVE_STRING:
|
|
292
|
-
if (type == T_NIL) {
|
|
293
|
-
param->ptr = NULL;
|
|
294
|
-
|
|
295
|
-
} else {
|
|
296
|
-
param->ptr = StringValueCStr(argv[argidx]);
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
ADJ(param, ADDRESS);
|
|
300
|
-
++argidx;
|
|
301
|
-
break;
|
|
302
|
-
|
|
303
|
-
case NATIVE_POINTER:
|
|
304
|
-
case NATIVE_BUFFER_IN:
|
|
305
|
-
case NATIVE_BUFFER_OUT:
|
|
306
|
-
case NATIVE_BUFFER_INOUT:
|
|
307
|
-
param->ptr = getPointer(argv[argidx++], type);
|
|
308
|
-
ADJ(param, ADDRESS);
|
|
309
|
-
break;
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
case NATIVE_FUNCTION:
|
|
313
|
-
if (callbackProc != Qnil) {
|
|
314
|
-
param->ptr = callback_param(callbackProc, callbackParameters[cbidx++]);
|
|
315
|
-
} else {
|
|
316
|
-
param->ptr = callback_param(argv[argidx], callbackParameters[cbidx++]);
|
|
317
|
-
++argidx;
|
|
318
|
-
}
|
|
319
|
-
ADJ(param, ADDRESS);
|
|
320
|
-
break;
|
|
321
|
-
|
|
322
|
-
case NATIVE_STRUCT:
|
|
323
|
-
ffiValues[i] = getPointer(argv[argidx++], type);
|
|
324
|
-
break;
|
|
325
|
-
|
|
326
|
-
default:
|
|
327
|
-
rb_raise(rb_eArgError, "Invalid parameter type: %d", paramType->nativeType);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
static void *
|
|
333
|
-
call_blocking_function(void* data)
|
|
334
|
-
{
|
|
335
|
-
rbffi_blocking_call_t* b = (rbffi_blocking_call_t *) data;
|
|
336
|
-
ffi_call(&b->cif, FFI_FN(b->function), b->retval, b->ffiValues);
|
|
337
|
-
|
|
338
|
-
return NULL;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
VALUE
|
|
342
|
-
rbffi_do_blocking_call(VALUE data)
|
|
343
|
-
{
|
|
344
|
-
rb_thread_call_without_gvl(call_blocking_function, (void*)data, (rb_unblock_function_t *) -1, NULL);
|
|
345
|
-
|
|
346
|
-
return Qnil;
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
VALUE
|
|
350
|
-
rbffi_save_frame_exception(VALUE data, VALUE exc)
|
|
351
|
-
{
|
|
352
|
-
rbffi_frame_t* frame = (rbffi_frame_t *) data;
|
|
353
|
-
frame->exc = exc;
|
|
354
|
-
return Qnil;
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
VALUE
|
|
358
|
-
rbffi_CallFunction(int argc, VALUE* argv, void* function, FunctionType* fnInfo)
|
|
359
|
-
{
|
|
360
|
-
void* retval;
|
|
361
|
-
void** ffiValues;
|
|
362
|
-
FFIStorage* params;
|
|
363
|
-
VALUE rbReturnValue;
|
|
364
|
-
rbffi_frame_t frame = { 0 };
|
|
365
|
-
|
|
366
|
-
retval = alloca(MAX(fnInfo->ffi_cif.rtype->size, FFI_SIZEOF_ARG));
|
|
367
|
-
|
|
368
|
-
if (unlikely(fnInfo->blocking)) {
|
|
369
|
-
rbffi_blocking_call_t* bc;
|
|
370
|
-
|
|
371
|
-
/* allocate information passed to the blocking function on the stack */
|
|
372
|
-
ffiValues = ALLOCA_N(void *, fnInfo->parameterCount);
|
|
373
|
-
params = ALLOCA_N(FFIStorage, fnInfo->parameterCount);
|
|
374
|
-
bc = ALLOCA_N(rbffi_blocking_call_t, 1);
|
|
375
|
-
bc->retval = retval;
|
|
376
|
-
bc->cif = fnInfo->ffi_cif;
|
|
377
|
-
bc->function = function;
|
|
378
|
-
bc->ffiValues = ffiValues;
|
|
379
|
-
bc->params = params;
|
|
380
|
-
bc->frame = &frame;
|
|
381
|
-
|
|
382
|
-
rbffi_SetupCallParams(argc, argv,
|
|
383
|
-
fnInfo->parameterCount, fnInfo->parameterTypes, params, ffiValues,
|
|
384
|
-
fnInfo->callbackParameters, fnInfo->callbackCount, fnInfo->rbEnums);
|
|
385
|
-
|
|
386
|
-
rbffi_frame_push(&frame);
|
|
387
|
-
rb_rescue2(rbffi_do_blocking_call, (VALUE) bc, rbffi_save_frame_exception, (VALUE) &frame, rb_eException, (VALUE) 0);
|
|
388
|
-
rbffi_frame_pop(&frame);
|
|
389
|
-
|
|
390
|
-
} else {
|
|
391
|
-
|
|
392
|
-
ffiValues = ALLOCA_N(void *, fnInfo->parameterCount);
|
|
393
|
-
params = ALLOCA_N(FFIStorage, fnInfo->parameterCount);
|
|
394
|
-
|
|
395
|
-
rbffi_SetupCallParams(argc, argv,
|
|
396
|
-
fnInfo->parameterCount, fnInfo->parameterTypes, params, ffiValues,
|
|
397
|
-
fnInfo->callbackParameters, fnInfo->callbackCount, fnInfo->rbEnums);
|
|
398
|
-
|
|
399
|
-
rbffi_frame_push(&frame);
|
|
400
|
-
ffi_call(&fnInfo->ffi_cif, FFI_FN(function), retval, ffiValues);
|
|
401
|
-
rbffi_frame_pop(&frame);
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
if (unlikely(!fnInfo->ignoreErrno)) {
|
|
405
|
-
rbffi_save_errno();
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
if (RTEST(frame.exc) && frame.exc != Qnil) {
|
|
409
|
-
rb_exc_raise(frame.exc);
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
RB_GC_GUARD(rbReturnValue) = rbffi_NativeValue_ToRuby(fnInfo->returnType, fnInfo->rbReturnType, retval);
|
|
413
|
-
RB_GC_GUARD(fnInfo->rbReturnType);
|
|
414
|
-
|
|
415
|
-
return rbReturnValue;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
static inline void*
|
|
419
|
-
getPointer(VALUE value, int type)
|
|
420
|
-
{
|
|
421
|
-
if (likely(type == T_DATA && rb_obj_is_kind_of(value, rbffi_AbstractMemoryClass))) {
|
|
422
|
-
|
|
423
|
-
AbstractMemory *mem;
|
|
424
|
-
TypedData_Get_Struct(value, AbstractMemory, &rbffi_abstract_memory_data_type, mem);
|
|
425
|
-
return mem->address;
|
|
426
|
-
|
|
427
|
-
} else if (type == T_DATA && rb_obj_is_kind_of(value, rbffi_StructClass)) {
|
|
428
|
-
|
|
429
|
-
Struct* s;
|
|
430
|
-
AbstractMemory* memory;
|
|
431
|
-
|
|
432
|
-
TypedData_Get_Struct(value, Struct, &rbffi_struct_data_type, s);
|
|
433
|
-
memory = s->pointer;
|
|
434
|
-
return memory != NULL ? memory->address : NULL;
|
|
435
|
-
|
|
436
|
-
} else if (type == T_STRING) {
|
|
437
|
-
|
|
438
|
-
return StringValuePtr(value);
|
|
439
|
-
|
|
440
|
-
} else if (type == T_NIL) {
|
|
441
|
-
|
|
442
|
-
return NULL;
|
|
443
|
-
|
|
444
|
-
} else if (rb_respond_to(value, id_to_ptr)) {
|
|
445
|
-
|
|
446
|
-
VALUE ptr = rb_funcall2(value, id_to_ptr, 0, NULL);
|
|
447
|
-
if (rb_obj_is_kind_of(ptr, rbffi_AbstractMemoryClass) && TYPE(ptr) == T_DATA) {
|
|
448
|
-
AbstractMemory *mem;
|
|
449
|
-
TypedData_Get_Struct(ptr, AbstractMemory, &rbffi_abstract_memory_data_type, mem);
|
|
450
|
-
return mem->address;
|
|
451
|
-
}
|
|
452
|
-
rb_raise(rb_eArgError, "to_ptr returned an invalid pointer");
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
rb_raise(rb_eArgError, ":pointer argument is not a valid pointer");
|
|
456
|
-
return NULL;
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
Invoker
|
|
460
|
-
rbffi_GetInvoker(FunctionType *fnInfo)
|
|
461
|
-
{
|
|
462
|
-
return rbffi_CallFunction;
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
static void*
|
|
467
|
-
callback_param(VALUE proc, VALUE cbInfo)
|
|
468
|
-
{
|
|
469
|
-
VALUE callback;
|
|
470
|
-
AbstractMemory *mem;
|
|
471
|
-
|
|
472
|
-
if (unlikely(proc == Qnil)) {
|
|
473
|
-
return NULL ;
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
/* Handle Function pointers here */
|
|
477
|
-
if (rb_obj_is_kind_of(proc, rbffi_FunctionClass)) {
|
|
478
|
-
AbstractMemory* ptr;
|
|
479
|
-
TypedData_Get_Struct(proc, AbstractMemory, &rbffi_abstract_memory_data_type, ptr);
|
|
480
|
-
return ptr->address;
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
callback = rbffi_Function_ForProc(cbInfo, proc);
|
|
484
|
-
RB_GC_GUARD(callback);
|
|
485
|
-
|
|
486
|
-
TypedData_Get_Struct(callback, AbstractMemory, &rbffi_abstract_memory_data_type, mem);
|
|
487
|
-
return mem->address;
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
void
|
|
492
|
-
rbffi_Call_Init(VALUE moduleFFI)
|
|
493
|
-
{
|
|
494
|
-
id_to_ptr = rb_intern("to_ptr");
|
|
495
|
-
id_to_native = rb_intern("to_native");
|
|
496
|
-
id_map_symbol = rb_intern("__map_symbol");
|
|
497
|
-
}
|
|
498
|
-
|
data/ext/ffi_c/Call.h
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2009, Wayne Meissner
|
|
3
|
-
* Copyright (c) 2009, Luc Heinrich <luc@honk-honk.com>
|
|
4
|
-
* Copyright (c) 2009, Mike Dalessio <mike.dalessio@gmail.com>
|
|
5
|
-
* Copyright (c) 2009, Aman Gupta.
|
|
6
|
-
*
|
|
7
|
-
* Copyright (c) 2008-2013, Ruby FFI project contributors
|
|
8
|
-
* All rights reserved.
|
|
9
|
-
*
|
|
10
|
-
* Redistribution and use in source and binary forms, with or without
|
|
11
|
-
* modification, are permitted provided that the following conditions are met:
|
|
12
|
-
* * Redistributions of source code must retain the above copyright
|
|
13
|
-
* notice, this list of conditions and the following disclaimer.
|
|
14
|
-
* * Redistributions in binary form must reproduce the above copyright
|
|
15
|
-
* notice, this list of conditions and the following disclaimer in the
|
|
16
|
-
* documentation and/or other materials provided with the distribution.
|
|
17
|
-
* * Neither the name of the Ruby FFI project nor the
|
|
18
|
-
* names of its contributors may be used to endorse or promote products
|
|
19
|
-
* derived from this software without specific prior written permission.
|
|
20
|
-
*
|
|
21
|
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
22
|
-
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
23
|
-
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
24
|
-
* DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
|
25
|
-
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
26
|
-
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
27
|
-
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
28
|
-
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
29
|
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
30
|
-
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
-
*/
|
|
32
|
-
|
|
33
|
-
#ifndef RBFFI_CALL_H
|
|
34
|
-
#define RBFFI_CALL_H
|
|
35
|
-
|
|
36
|
-
#include "Thread.h"
|
|
37
|
-
|
|
38
|
-
#ifdef __cplusplus
|
|
39
|
-
extern "C" {
|
|
40
|
-
#endif
|
|
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
|
-
|
|
48
|
-
#if (defined(__i386__) || defined(__x86_64__)) && !(defined(_WIN32) || defined(__WIN32__))
|
|
49
|
-
# define BYPASS_FFI 1
|
|
50
|
-
#endif
|
|
51
|
-
|
|
52
|
-
typedef union {
|
|
53
|
-
#ifdef USE_RAW
|
|
54
|
-
signed int s8, s16, s32;
|
|
55
|
-
unsigned int u8, u16, u32;
|
|
56
|
-
#else
|
|
57
|
-
signed char s8;
|
|
58
|
-
unsigned char u8;
|
|
59
|
-
signed short s16;
|
|
60
|
-
unsigned short u16;
|
|
61
|
-
signed int s32;
|
|
62
|
-
unsigned int u32;
|
|
63
|
-
#endif
|
|
64
|
-
signed long long i64;
|
|
65
|
-
unsigned long long u64;
|
|
66
|
-
signed long sl;
|
|
67
|
-
unsigned long ul;
|
|
68
|
-
void* ptr;
|
|
69
|
-
float f32;
|
|
70
|
-
double f64;
|
|
71
|
-
long double ld;
|
|
72
|
-
} FFIStorage;
|
|
73
|
-
|
|
74
|
-
extern void rbffi_Call_Init(VALUE moduleFFI);
|
|
75
|
-
|
|
76
|
-
extern void rbffi_SetupCallParams(int argc, VALUE* argv, int paramCount, Type** paramTypes,
|
|
77
|
-
FFIStorage* paramStorage, void** ffiValues,
|
|
78
|
-
VALUE* callbackParameters, int callbackCount, VALUE enums);
|
|
79
|
-
|
|
80
|
-
struct FunctionType_;
|
|
81
|
-
extern VALUE rbffi_CallFunction(int argc, VALUE* argv, void* function, struct FunctionType_* fnInfo);
|
|
82
|
-
|
|
83
|
-
typedef VALUE (*Invoker)(int argc, VALUE* argv, void* function, struct FunctionType_* fnInfo);
|
|
84
|
-
|
|
85
|
-
Invoker rbffi_GetInvoker(struct FunctionType_* fnInfo);
|
|
86
|
-
|
|
87
|
-
extern VALUE rbffi_GetEnumValue(VALUE enums, VALUE value);
|
|
88
|
-
extern int rbffi_GetSignedIntValue(VALUE value, int type, int minValue, int maxValue, const char* typeName, VALUE enums);
|
|
89
|
-
|
|
90
|
-
typedef struct rbffi_blocking_call {
|
|
91
|
-
rbffi_frame_t* frame;
|
|
92
|
-
void* function;
|
|
93
|
-
ffi_cif cif;
|
|
94
|
-
void **ffiValues;
|
|
95
|
-
void* retval;
|
|
96
|
-
void* params;
|
|
97
|
-
} rbffi_blocking_call_t;
|
|
98
|
-
|
|
99
|
-
VALUE rbffi_do_blocking_call(VALUE data);
|
|
100
|
-
VALUE rbffi_save_frame_exception(VALUE data, VALUE exc);
|
|
101
|
-
|
|
102
|
-
#ifdef __cplusplus
|
|
103
|
-
}
|
|
104
|
-
#endif
|
|
105
|
-
|
|
106
|
-
#endif /* RBFFI_CALL_H */
|
|
107
|
-
|