ffi 1.15.5 → 1.17.0
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 +118 -0
- data/Gemfile +10 -3
- data/README.md +4 -3
- data/Rakefile +25 -10
- data/ext/ffi_c/AbstractMemory.c +99 -74
- data/ext/ffi_c/AbstractMemory.h +3 -2
- data/ext/ffi_c/ArrayType.c +51 -15
- data/ext/ffi_c/ArrayType.h +1 -0
- data/ext/ffi_c/Buffer.c +90 -33
- data/ext/ffi_c/Call.c +29 -12
- data/ext/ffi_c/Call.h +3 -2
- data/ext/ffi_c/DynamicLibrary.c +90 -27
- data/ext/ffi_c/Function.c +244 -98
- data/ext/ffi_c/Function.h +1 -0
- data/ext/ffi_c/FunctionInfo.c +81 -25
- data/ext/ffi_c/LastError.c +29 -11
- data/ext/ffi_c/MappedType.c +66 -23
- data/ext/ffi_c/MappedType.h +0 -2
- data/ext/ffi_c/MemoryPointer.c +36 -9
- data/ext/ffi_c/MethodHandle.c +3 -1
- data/ext/ffi_c/Pointer.c +82 -40
- data/ext/ffi_c/Pointer.h +1 -0
- data/ext/ffi_c/Struct.c +166 -84
- data/ext/ffi_c/Struct.h +7 -4
- data/ext/ffi_c/StructByValue.c +48 -16
- data/ext/ffi_c/StructLayout.c +130 -61
- data/ext/ffi_c/Type.c +120 -51
- data/ext/ffi_c/Type.h +3 -1
- data/ext/ffi_c/Types.c +8 -2
- data/ext/ffi_c/Types.h +0 -1
- data/ext/ffi_c/Variadic.c +71 -26
- data/ext/ffi_c/compat.h +22 -22
- data/ext/ffi_c/extconf.rb +19 -2
- data/ext/ffi_c/ffi.c +4 -0
- data/ext/ffi_c/libffi/.allow-ai-service +0 -0
- data/ext/ffi_c/libffi/.appveyor/site.exp +16 -0
- data/ext/ffi_c/libffi/.appveyor/unix-noexec.exp +7 -0
- data/ext/ffi_c/libffi/.appveyor.yml +27 -9
- data/ext/ffi_c/libffi/.ci/build-cross-in-container.sh +18 -0
- data/ext/ffi_c/libffi/{.travis → .ci}/build-in-container.sh +4 -6
- data/ext/ffi_c/libffi/.ci/build.sh +124 -0
- data/ext/ffi_c/libffi/{.travis → .ci}/install.sh +14 -7
- data/ext/ffi_c/libffi/.ci/msvs-detect +1103 -0
- data/ext/ffi_c/libffi/{.travis → .ci}/site.exp +5 -3
- data/ext/ffi_c/libffi/.circleci/config.yml +156 -0
- data/ext/ffi_c/libffi/.github/workflows/build.yml +479 -0
- data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +172 -0
- data/ext/ffi_c/libffi/.gitignore +10 -2
- data/ext/ffi_c/libffi/LICENSE +1 -1
- data/ext/ffi_c/libffi/Makefile.am +12 -5
- data/ext/ffi_c/libffi/Makefile.in +118 -51
- data/ext/ffi_c/libffi/README.md +150 -105
- data/ext/ffi_c/libffi/acinclude.m4 +10 -112
- data/ext/ffi_c/libffi/compile +348 -0
- data/ext/ffi_c/libffi/config.guess +623 -556
- data/ext/ffi_c/libffi/config.sub +75 -34
- data/ext/ffi_c/libffi/configure +4571 -3830
- data/ext/ffi_c/libffi/configure.ac +64 -28
- data/ext/ffi_c/libffi/configure.host +26 -7
- data/ext/ffi_c/libffi/doc/Makefile.in +9 -6
- data/ext/ffi_c/libffi/doc/libffi.texi +82 -33
- data/ext/ffi_c/libffi/doc/version.texi +4 -4
- data/ext/ffi_c/libffi/fficonfig.h.in +12 -47
- data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +163 -52
- data/ext/ffi_c/libffi/include/Makefile.am +1 -1
- data/ext/ffi_c/libffi/include/Makefile.in +10 -9
- data/ext/ffi_c/libffi/include/ffi.h.in +55 -60
- data/ext/ffi_c/libffi/include/ffi_cfi.h +21 -0
- data/ext/ffi_c/libffi/include/ffi_common.h +33 -2
- data/ext/ffi_c/libffi/include/tramp.h +45 -0
- data/ext/ffi_c/libffi/install-sh +92 -69
- data/ext/ffi_c/libffi/libffi.map.in +5 -0
- data/ext/ffi_c/libffi/libtool-version +2 -2
- data/ext/ffi_c/libffi/ltmain.sh +518 -333
- data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +18 -14
- data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +108 -72
- data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +76 -45
- data/ext/ffi_c/libffi/m4/ax_prepend_flag.m4 +51 -0
- data/ext/ffi_c/libffi/man/Makefile.in +9 -6
- data/ext/ffi_c/libffi/missing +1 -1
- data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/ffi.h +2 -2
- data/ext/ffi_c/libffi/msvcc.sh +1 -1
- data/ext/ffi_c/libffi/src/aarch64/ffi.c +172 -55
- data/ext/ffi_c/libffi/src/aarch64/internal.h +32 -0
- data/ext/ffi_c/libffi/src/aarch64/sysv.S +331 -87
- data/ext/ffi_c/libffi/src/arc/arcompact.S +169 -94
- data/ext/ffi_c/libffi/src/arc/ffi.c +325 -148
- data/ext/ffi_c/libffi/src/arc/ffitarget.h +14 -0
- data/ext/ffi_c/libffi/src/arm/ffi.c +62 -17
- data/ext/ffi_c/libffi/src/arm/ffitarget.h +3 -3
- data/ext/ffi_c/libffi/src/arm/internal.h +10 -0
- data/ext/ffi_c/libffi/src/arm/sysv.S +113 -42
- data/ext/ffi_c/libffi/src/closures.c +136 -50
- data/ext/ffi_c/libffi/src/debug.c +2 -2
- data/ext/ffi_c/libffi/src/dlmalloc.c +6 -1
- data/ext/ffi_c/libffi/src/ia64/ffi.c +12 -0
- data/ext/ffi_c/libffi/src/ia64/unix.S +20 -2
- data/ext/ffi_c/libffi/src/loongarch64/ffi.c +624 -0
- data/ext/ffi_c/libffi/src/loongarch64/ffitarget.h +82 -0
- data/ext/ffi_c/libffi/src/loongarch64/sysv.S +327 -0
- data/ext/ffi_c/libffi/src/m32r/ffi.c +31 -14
- data/ext/ffi_c/libffi/src/mips/ffi.c +250 -67
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +7 -0
- data/ext/ffi_c/libffi/src/mips/n32.S +193 -33
- data/ext/ffi_c/libffi/src/mips/o32.S +61 -4
- data/ext/ffi_c/libffi/src/moxie/ffi.c +47 -22
- data/ext/ffi_c/libffi/src/or1k/ffi.c +25 -12
- data/ext/ffi_c/libffi/src/pa/ffi.c +32 -33
- data/ext/ffi_c/libffi/src/pa/ffi64.c +614 -0
- data/ext/ffi_c/libffi/src/pa/ffitarget.h +22 -8
- data/ext/ffi_c/libffi/src/pa/hpux32.S +83 -36
- data/ext/ffi_c/libffi/src/pa/hpux64.S +681 -0
- data/ext/ffi_c/libffi/src/pa/linux.S +82 -35
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +36 -24
- data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +1 -1
- data/ext/ffi_c/libffi/src/powerpc/linux64.S +2 -0
- data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +2 -0
- data/ext/ffi_c/libffi/src/powerpc/t-aix +5 -0
- data/ext/ffi_c/libffi/src/prep_cif.c +22 -2
- data/ext/ffi_c/libffi/src/riscv/ffi.c +37 -4
- data/ext/ffi_c/libffi/src/sparc/ffi64.c +23 -1
- data/ext/ffi_c/libffi/src/tramp.c +716 -0
- data/ext/ffi_c/libffi/src/types.c +4 -6
- data/ext/ffi_c/libffi/src/wasm32/ffi.c +947 -0
- data/ext/ffi_c/libffi/src/wasm32/ffitarget.h +62 -0
- data/ext/ffi_c/libffi/src/x86/ffi.c +99 -37
- data/ext/ffi_c/libffi/src/x86/ffi64.c +67 -12
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +9 -5
- data/ext/ffi_c/libffi/src/x86/ffiw64.c +44 -1
- data/ext/ffi_c/libffi/src/x86/internal.h +14 -0
- data/ext/ffi_c/libffi/src/x86/internal64.h +14 -0
- data/ext/ffi_c/libffi/src/x86/sysv.S +172 -38
- data/ext/ffi_c/libffi/src/x86/sysv_intel.S +91 -88
- data/ext/ffi_c/libffi/src/x86/unix64.S +96 -6
- data/ext/ffi_c/libffi/src/x86/win64.S +20 -7
- data/ext/ffi_c/libffi/src/xtensa/ffi.c +16 -8
- data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +4 -0
- data/ext/ffi_c/libffi/src/xtensa/sysv.S +26 -16
- data/ext/ffi_c/libffi/testsuite/Makefile.am +79 -114
- data/ext/ffi_c/libffi/testsuite/Makefile.in +89 -121
- data/ext/ffi_c/libffi/testsuite/emscripten/build-tests.sh +54 -0
- data/ext/ffi_c/libffi/testsuite/emscripten/build.sh +63 -0
- data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +86 -0
- data/ext/ffi_c/libffi/testsuite/emscripten/node-tests.sh +48 -0
- data/ext/ffi_c/libffi/testsuite/emscripten/test.html +7 -0
- data/ext/ffi_c/libffi/testsuite/emscripten/test_libffi.py +51 -0
- data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +43 -21
- data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +1 -0
- data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +5 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c +41 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/callback.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/callback2.c +108 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/callback3.c +114 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/callback4.c +119 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +28 -3
- data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +3 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +5 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +4 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +4 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/s55.c +60 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +8 -9
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +2 -2
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_2.c +63 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3.c +65 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3f.c +65 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4.c +67 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4f.c +67 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_big.c +93 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_small.c +61 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_2H.c +63 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_8H.c +90 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +1 -119
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_2.c +220 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_3.c +154 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +13 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +11 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +15 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn0.c +3 -2
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn1.c +2 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn2.c +2 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn3.c +21 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn4.c +2 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn5.c +2 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn6.c +2 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_loc_fn0.c +7 -6
- data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_simple.c +6 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_12byte.c +18 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_16byte.c +22 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_18byte.c +24 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_19byte.c +29 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_1_1byte.c +4 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte.c +19 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte1.c +21 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_24byte.c +35 -3
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_2byte.c +13 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3_1byte.c +19 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte1.c +13 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte2.c +13 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3float.c +18 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4_1byte.c +22 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4byte.c +13 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5_1_byte.c +29 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5byte.c +19 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_64byte.c +24 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6_1_byte.c +28 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6byte.c +24 -2
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7_1_byte.c +39 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7byte.c +25 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_8byte.c +14 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte1.c +14 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte2.c +14 -2
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_double.c +19 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_float.c +19 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble.c +20 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split.c +40 -25
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split2.c +40 -3
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_pointer.c +19 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint16.c +18 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint32.c +18 -3
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint64.c +18 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint16.c +18 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint32.c +19 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint64.c +19 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_dbls_struct.c +3 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double_va.c +9 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_float.c +4 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble.c +11 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble_va.c +22 -3
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_schar.c +5 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshort.c +6 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshortchar.c +9 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_uchar.c +9 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushort.c +6 -2
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushortchar.c +9 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer.c +5 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer_stack.c +10 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_schar.c +3 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sint.c +2 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sshort.c +3 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_struct_va1.c +11 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uchar.c +3 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint.c +4 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint_va.c +4 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulong_va.c +4 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulonglong.c +2 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ushort.c +3 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +1 -138
- data/ext/ffi_c/libffi/testsuite/libffi.closures/huge_struct.c +21 -21
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct.c +32 -9
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct1.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct10.c +12 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct11.c +21 -5
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct12.c +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct13.c +115 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct2.c +10 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct3.c +10 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct4.c +9 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct5.c +9 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct6.c +11 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct7.c +9 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct8.c +11 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct9.c +11 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs1.c +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs2.c +102 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs3.c +101 -0
- data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium2.c +1 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/testclosure.c +6 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest.cc +2 -1
- data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest_ffi_call.cc +1 -0
- data/ext/ffi_c/libffi.bsd.mk +2 -2
- data/ext/ffi_c/libffi.darwin.mk +2 -2
- data/ext/ffi_c/libffi.gnu.mk +2 -2
- data/ext/ffi_c/rbffi.h +1 -1
- data/ffi.gemspec +3 -3
- data/lib/ffi/autopointer.rb +8 -31
- data/lib/ffi/compat.rb +43 -0
- data/lib/ffi/data_converter.rb +2 -2
- data/lib/ffi/dynamic_library.rb +118 -0
- data/lib/ffi/enum.rb +18 -12
- data/lib/ffi/ffi.rb +3 -0
- data/lib/ffi/function.rb +71 -0
- data/lib/ffi/io.rb +2 -2
- data/lib/ffi/library.rb +72 -88
- data/lib/ffi/library_path.rb +109 -0
- data/lib/ffi/managedstruct.rb +1 -1
- data/lib/ffi/platform/aarch64-linux/types.conf +74 -3
- data/lib/ffi/platform/aarch64-windows/types.conf +52 -0
- data/lib/ffi/platform/hppa1.1-linux/types.conf +178 -0
- data/lib/ffi/platform/hppa2.0-linux/types.conf +178 -0
- data/lib/ffi/platform/loongarch64-linux/types.conf +141 -0
- data/lib/ffi/platform/sw_64-linux/types.conf +141 -0
- data/lib/ffi/platform.rb +15 -13
- data/lib/ffi/pointer.rb +6 -6
- data/lib/ffi/struct.rb +6 -5
- data/lib/ffi/struct_layout.rb +3 -3
- data/lib/ffi/struct_layout_builder.rb +9 -9
- data/lib/ffi/types.rb +65 -37
- data/lib/ffi/variadic.rb +19 -8
- data/lib/ffi/version.rb +1 -1
- data/samples/hello_ractor.rb +11 -0
- data/samples/qsort_ractor.rb +28 -0
- 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 +122 -28
- metadata.gz.sig +1 -0
- data/ext/ffi_c/libffi/.travis/build-cross-in-container.sh +0 -14
- data/ext/ffi_c/libffi/.travis/build.sh +0 -142
- data/ext/ffi_c/libffi/.travis.yml +0 -83
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uchar_va.c +0 -44
- data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ushort_va.c +0 -44
- /data/ext/ffi_c/libffi/{.travis → .ci}/ar-lib +0 -0
- /data/ext/ffi_c/libffi/{.travis → .ci}/bfin-sim.exp +0 -0
- /data/ext/ffi_c/libffi/{.travis → .ci}/compile +0 -0
- /data/ext/ffi_c/libffi/{.travis → .ci}/m32r-sim.exp +0 -0
- /data/ext/ffi_c/libffi/{.travis → .ci}/moxie-sim.exp +0 -0
- /data/ext/ffi_c/libffi/{.travis → .ci}/or1k-sim.exp +0 -0
- /data/ext/ffi_c/libffi/{.travis → .ci}/powerpc-eabisim.exp +0 -0
- /data/ext/ffi_c/libffi/{.travis → .ci}/wine-sim.exp +0 -0
- /data/ext/ffi_c/libffi/testsuite/libffi.call/{pyobjc-tc.c → pyobjc_tc.c} +0 -0
- /data/lib/ffi/platform/{sparc64-linux → sparcv9-linux}/types.conf +0 -0
@@ -1,6 +1,7 @@
|
|
1
1
|
/* -----------------------------------------------------------------*-C-*-
|
2
|
-
libffi @VERSION@
|
3
|
-
|
2
|
+
libffi @VERSION@
|
3
|
+
- Copyright (c) 2011, 2014, 2019, 2021, 2022, 2024 Anthony Green
|
4
|
+
- Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc.
|
4
5
|
|
5
6
|
Permission is hereby granted, free of charge, to any person
|
6
7
|
obtaining a copy of this software and associated documentation
|
@@ -55,6 +56,31 @@ extern "C" {
|
|
55
56
|
|
56
57
|
/* ---- System configuration information --------------------------------- */
|
57
58
|
|
59
|
+
/* If these change, update src/mips/ffitarget.h. */
|
60
|
+
#define FFI_TYPE_VOID 0
|
61
|
+
#define FFI_TYPE_INT 1
|
62
|
+
#define FFI_TYPE_FLOAT 2
|
63
|
+
#define FFI_TYPE_DOUBLE 3
|
64
|
+
#if @HAVE_LONG_DOUBLE@
|
65
|
+
#define FFI_TYPE_LONGDOUBLE 4
|
66
|
+
#else
|
67
|
+
#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE
|
68
|
+
#endif
|
69
|
+
#define FFI_TYPE_UINT8 5
|
70
|
+
#define FFI_TYPE_SINT8 6
|
71
|
+
#define FFI_TYPE_UINT16 7
|
72
|
+
#define FFI_TYPE_SINT16 8
|
73
|
+
#define FFI_TYPE_UINT32 9
|
74
|
+
#define FFI_TYPE_SINT32 10
|
75
|
+
#define FFI_TYPE_UINT64 11
|
76
|
+
#define FFI_TYPE_SINT64 12
|
77
|
+
#define FFI_TYPE_STRUCT 13
|
78
|
+
#define FFI_TYPE_POINTER 14
|
79
|
+
#define FFI_TYPE_COMPLEX 15
|
80
|
+
|
81
|
+
/* This should always refer to the last type code (for sanity checks). */
|
82
|
+
#define FFI_TYPE_LAST FFI_TYPE_COMPLEX
|
83
|
+
|
58
84
|
#include <ffitarget.h>
|
59
85
|
|
60
86
|
#ifndef LIBFFI_ASM
|
@@ -114,13 +140,11 @@ typedef struct _ffi_type
|
|
114
140
|
when using the static version of the library.
|
115
141
|
Besides, as a workaround, they can define FFI_BUILDING if they
|
116
142
|
*know* they are going to link with the static library. */
|
117
|
-
#if defined _MSC_VER
|
143
|
+
#if defined _MSC_VER && !defined(FFI_STATIC_BUILD)
|
118
144
|
# if defined FFI_BUILDING_DLL /* Building libffi.DLL with msvcc.sh */
|
119
145
|
# define FFI_API __declspec(dllexport)
|
120
|
-
#
|
146
|
+
# else /* Importing libffi.DLL */
|
121
147
|
# define FFI_API __declspec(dllimport)
|
122
|
-
# else /* Building/linking static library */
|
123
|
-
# define FFI_API
|
124
148
|
# endif
|
125
149
|
#else
|
126
150
|
# define FFI_API
|
@@ -196,28 +220,20 @@ FFI_EXTERN ffi_type ffi_type_sint64;
|
|
196
220
|
FFI_EXTERN ffi_type ffi_type_float;
|
197
221
|
FFI_EXTERN ffi_type ffi_type_double;
|
198
222
|
FFI_EXTERN ffi_type ffi_type_pointer;
|
199
|
-
|
200
|
-
#if @HAVE_LONG_DOUBLE@
|
201
223
|
FFI_EXTERN ffi_type ffi_type_longdouble;
|
202
|
-
#else
|
203
|
-
#define ffi_type_longdouble ffi_type_double
|
204
|
-
#endif
|
205
224
|
|
206
225
|
#ifdef FFI_TARGET_HAS_COMPLEX_TYPE
|
207
226
|
FFI_EXTERN ffi_type ffi_type_complex_float;
|
208
227
|
FFI_EXTERN ffi_type ffi_type_complex_double;
|
209
|
-
#if @HAVE_LONG_DOUBLE@
|
210
228
|
FFI_EXTERN ffi_type ffi_type_complex_longdouble;
|
211
|
-
#else
|
212
|
-
#define ffi_type_complex_longdouble ffi_type_complex_double
|
213
|
-
#endif
|
214
229
|
#endif
|
215
230
|
#endif /* LIBFFI_HIDE_BASIC_TYPES */
|
216
231
|
|
217
232
|
typedef enum {
|
218
233
|
FFI_OK = 0,
|
219
234
|
FFI_BAD_TYPEDEF,
|
220
|
-
FFI_BAD_ABI
|
235
|
+
FFI_BAD_ABI,
|
236
|
+
FFI_BAD_ARGTYPE
|
221
237
|
} ffi_status;
|
222
238
|
|
223
239
|
typedef struct {
|
@@ -269,7 +285,7 @@ typedef ffi_raw ffi_java_raw;
|
|
269
285
|
#endif
|
270
286
|
|
271
287
|
|
272
|
-
FFI_API
|
288
|
+
FFI_API
|
273
289
|
void ffi_raw_call (ffi_cif *cif,
|
274
290
|
void (*fn)(void),
|
275
291
|
void *rvalue,
|
@@ -310,11 +326,17 @@ typedef struct {
|
|
310
326
|
void *trampoline_table;
|
311
327
|
void *trampoline_table_entry;
|
312
328
|
#else
|
313
|
-
|
329
|
+
union {
|
330
|
+
char tramp[FFI_TRAMPOLINE_SIZE];
|
331
|
+
void *ftramp;
|
332
|
+
};
|
314
333
|
#endif
|
315
334
|
ffi_cif *cif;
|
316
335
|
void (*fun)(ffi_cif*,void*,void**,void*);
|
317
336
|
void *user_data;
|
337
|
+
#if defined(_MSC_VER) && defined(_M_IX86)
|
338
|
+
void *padding;
|
339
|
+
#endif
|
318
340
|
} ffi_closure
|
319
341
|
#ifdef __GNUC__
|
320
342
|
__attribute__((aligned (8)))
|
@@ -330,14 +352,6 @@ typedef struct {
|
|
330
352
|
FFI_API void *ffi_closure_alloc (size_t size, void **code);
|
331
353
|
FFI_API void ffi_closure_free (void *);
|
332
354
|
|
333
|
-
#if defined(PA_LINUX) || defined(PA_HPUX)
|
334
|
-
#define FFI_CLOSURE_PTR(X) ((void *)((unsigned int)(X) | 2))
|
335
|
-
#define FFI_RESTORE_PTR(X) ((void *)((unsigned int)(X) & ~3))
|
336
|
-
#else
|
337
|
-
#define FFI_CLOSURE_PTR(X) (X)
|
338
|
-
#define FFI_RESTORE_PTR(X) (X)
|
339
|
-
#endif
|
340
|
-
|
341
355
|
FFI_API ffi_status
|
342
356
|
ffi_prep_closure (ffi_closure*,
|
343
357
|
ffi_cif *,
|
@@ -355,7 +369,7 @@ ffi_prep_closure_loc (ffi_closure*,
|
|
355
369
|
ffi_cif *,
|
356
370
|
void (*fun)(ffi_cif*,void*,void**,void*),
|
357
371
|
void *user_data,
|
358
|
-
void*codeloc);
|
372
|
+
void *codeloc);
|
359
373
|
|
360
374
|
#ifdef __sgi
|
361
375
|
# pragma pack 8
|
@@ -371,9 +385,9 @@ typedef struct {
|
|
371
385
|
|
372
386
|
#if !FFI_NATIVE_RAW_API
|
373
387
|
|
374
|
-
/* If this is enabled, then a raw closure has the same layout
|
375
|
-
as a regular closure. We use this to install an intermediate
|
376
|
-
handler to do the
|
388
|
+
/* If this is enabled, then a raw closure has the same layout
|
389
|
+
as a regular closure. We use this to install an intermediate
|
390
|
+
handler to do the translation, void** -> ffi_raw*. */
|
377
391
|
|
378
392
|
void (*translate_args)(ffi_cif*,void*,void**,void*);
|
379
393
|
void *this_closure;
|
@@ -397,8 +411,8 @@ typedef struct {
|
|
397
411
|
|
398
412
|
#if !FFI_NATIVE_RAW_API
|
399
413
|
|
400
|
-
/* If this is enabled, then a raw closure has the same layout
|
401
|
-
as a regular closure. We use this to install an intermediate
|
414
|
+
/* If this is enabled, then a raw closure has the same layout
|
415
|
+
as a regular closure. We use this to install an intermediate
|
402
416
|
handler to do the translation, void** -> ffi_raw*. */
|
403
417
|
|
404
418
|
void (*translate_args)(ffi_cif*,void*,void**,void*);
|
@@ -441,7 +455,7 @@ ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*,
|
|
441
455
|
|
442
456
|
#endif /* FFI_CLOSURES */
|
443
457
|
|
444
|
-
#
|
458
|
+
#ifdef FFI_GO_CLOSURES
|
445
459
|
|
446
460
|
typedef struct {
|
447
461
|
void *tramp;
|
@@ -459,7 +473,7 @@ FFI_API void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue,
|
|
459
473
|
|
460
474
|
/* ---- Public interface definition -------------------------------------- */
|
461
475
|
|
462
|
-
FFI_API
|
476
|
+
FFI_API
|
463
477
|
ffi_status ffi_prep_cif(ffi_cif *cif,
|
464
478
|
ffi_abi abi,
|
465
479
|
unsigned int nargs,
|
@@ -484,38 +498,19 @@ FFI_API
|
|
484
498
|
ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type *struct_type,
|
485
499
|
size_t *offsets);
|
486
500
|
|
487
|
-
/*
|
501
|
+
/* Convert between closure and function pointers. */
|
502
|
+
#if defined(PA_LINUX) || defined(PA_HPUX)
|
503
|
+
#define FFI_FN(f) ((void (*)(void))((unsigned int)(f) | 2))
|
504
|
+
#define FFI_CL(f) ((void *)((unsigned int)(f) & ~3))
|
505
|
+
#else
|
488
506
|
#define FFI_FN(f) ((void (*)(void))f)
|
507
|
+
#define FFI_CL(f) ((void *)(f))
|
508
|
+
#endif
|
489
509
|
|
490
510
|
/* ---- Definitions shared with assembly code ---------------------------- */
|
491
511
|
|
492
512
|
#endif
|
493
513
|
|
494
|
-
/* If these change, update src/mips/ffitarget.h. */
|
495
|
-
#define FFI_TYPE_VOID 0
|
496
|
-
#define FFI_TYPE_INT 1
|
497
|
-
#define FFI_TYPE_FLOAT 2
|
498
|
-
#define FFI_TYPE_DOUBLE 3
|
499
|
-
#if @HAVE_LONG_DOUBLE@
|
500
|
-
#define FFI_TYPE_LONGDOUBLE 4
|
501
|
-
#else
|
502
|
-
#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE
|
503
|
-
#endif
|
504
|
-
#define FFI_TYPE_UINT8 5
|
505
|
-
#define FFI_TYPE_SINT8 6
|
506
|
-
#define FFI_TYPE_UINT16 7
|
507
|
-
#define FFI_TYPE_SINT16 8
|
508
|
-
#define FFI_TYPE_UINT32 9
|
509
|
-
#define FFI_TYPE_SINT32 10
|
510
|
-
#define FFI_TYPE_UINT64 11
|
511
|
-
#define FFI_TYPE_SINT64 12
|
512
|
-
#define FFI_TYPE_STRUCT 13
|
513
|
-
#define FFI_TYPE_POINTER 14
|
514
|
-
#define FFI_TYPE_COMPLEX 15
|
515
|
-
|
516
|
-
/* This should always refer to the last type code (for sanity checks). */
|
517
|
-
#define FFI_TYPE_LAST FFI_TYPE_COMPLEX
|
518
|
-
|
519
514
|
#ifdef __cplusplus
|
520
515
|
}
|
521
516
|
#endif
|
@@ -2,6 +2,27 @@
|
|
2
2
|
ffi_cfi.h - Copyright (c) 2014 Red Hat, Inc.
|
3
3
|
|
4
4
|
Conditionally assemble cfi directives. Only necessary for building libffi.
|
5
|
+
|
6
|
+
Permission is hereby granted, free of charge, to any person
|
7
|
+
obtaining a copy of this software and associated documentation
|
8
|
+
files (the ``Software''), to deal in the Software without
|
9
|
+
restriction, including without limitation the rights to use, copy,
|
10
|
+
modify, merge, publish, distribute, sublicense, and/or sell copies
|
11
|
+
of the Software, and to permit persons to whom the Software is
|
12
|
+
furnished to do so, subject to the following conditions:
|
13
|
+
|
14
|
+
The above copyright notice and this permission notice shall be
|
15
|
+
included in all copies or substantial portions of the Software.
|
16
|
+
|
17
|
+
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
|
18
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
19
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
20
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
21
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
22
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
24
|
+
DEALINGS IN THE SOFTWARE.
|
25
|
+
|
5
26
|
----------------------------------------------------------------------- */
|
6
27
|
|
7
28
|
#ifndef FFI_CFI_H
|
@@ -5,6 +5,27 @@
|
|
5
5
|
|
6
6
|
Common internal definitions and macros. Only necessary for building
|
7
7
|
libffi.
|
8
|
+
|
9
|
+
Permission is hereby granted, free of charge, to any person
|
10
|
+
obtaining a copy of this software and associated documentation
|
11
|
+
files (the ``Software''), to deal in the Software without
|
12
|
+
restriction, including without limitation the rights to use, copy,
|
13
|
+
modify, merge, publish, distribute, sublicense, and/or sell copies
|
14
|
+
of the Software, and to permit persons to whom the Software is
|
15
|
+
furnished to do so, subject to the following conditions:
|
16
|
+
|
17
|
+
The above copyright notice and this permission notice shall be
|
18
|
+
included in all copies or substantial portions of the Software.
|
19
|
+
|
20
|
+
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
|
21
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
22
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
23
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
24
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
25
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
26
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
27
|
+
DEALINGS IN THE SOFTWARE.
|
28
|
+
|
8
29
|
----------------------------------------------------------------------- */
|
9
30
|
|
10
31
|
#ifndef FFI_COMMON_H
|
@@ -28,8 +49,10 @@ extern "C" {
|
|
28
49
|
# endif
|
29
50
|
# endif
|
30
51
|
# define MAYBE_UNUSED __attribute__((__unused__))
|
52
|
+
# define NORETURN __attribute__((__noreturn__))
|
31
53
|
#else
|
32
54
|
# define MAYBE_UNUSED
|
55
|
+
# define NORETURN
|
33
56
|
# if HAVE_ALLOCA_H
|
34
57
|
# include <alloca.h>
|
35
58
|
# else
|
@@ -61,9 +84,9 @@ char *alloca ();
|
|
61
84
|
#endif
|
62
85
|
|
63
86
|
#ifdef FFI_DEBUG
|
64
|
-
void ffi_assert(char *expr, char *file, int line);
|
87
|
+
NORETURN void ffi_assert(const char *expr, const char *file, int line);
|
65
88
|
void ffi_stop_here(void);
|
66
|
-
void ffi_type_test(ffi_type *a, char *file, int line);
|
89
|
+
void ffi_type_test(ffi_type *a, const char *file, int line);
|
67
90
|
|
68
91
|
#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__))
|
69
92
|
#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l)))
|
@@ -103,6 +126,14 @@ ffi_status ffi_prep_cif_core(ffi_cif *cif,
|
|
103
126
|
some targets. */
|
104
127
|
void *ffi_data_to_code_pointer (void *data) FFI_HIDDEN;
|
105
128
|
|
129
|
+
/* The arch code calls this to determine if a given closure has a
|
130
|
+
static trampoline. */
|
131
|
+
int ffi_tramp_is_present (void *closure) FFI_HIDDEN;
|
132
|
+
|
133
|
+
/* Return a file descriptor of a temporary zero-sized file in a
|
134
|
+
writable and executable filesystem. */
|
135
|
+
int open_temp_exec_file(void) FFI_HIDDEN;
|
136
|
+
|
106
137
|
/* Extended cif, used in callback from assembly routine */
|
107
138
|
typedef struct
|
108
139
|
{
|
@@ -0,0 +1,45 @@
|
|
1
|
+
/* -----------------------------------------------------------------------
|
2
|
+
ffi_tramp.h - Copyright (C) 2021 Microsoft, Inc.
|
3
|
+
|
4
|
+
Static trampoline definitions.
|
5
|
+
|
6
|
+
Permission is hereby granted, free of charge, to any person
|
7
|
+
obtaining a copy of this software and associated documentation
|
8
|
+
files (the ``Software''), to deal in the Software without
|
9
|
+
restriction, including without limitation the rights to use, copy,
|
10
|
+
modify, merge, publish, distribute, sublicense, and/or sell copies
|
11
|
+
of the Software, and to permit persons to whom the Software is
|
12
|
+
furnished to do so, subject to the following conditions:
|
13
|
+
|
14
|
+
The above copyright notice and this permission notice shall be
|
15
|
+
included in all copies or substantial portions of the Software.
|
16
|
+
|
17
|
+
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
|
18
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
19
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
20
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
21
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
22
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
24
|
+
DEALINGS IN THE SOFTWARE.
|
25
|
+
|
26
|
+
----------------------------------------------------------------------- */
|
27
|
+
|
28
|
+
#ifndef FFI_TRAMP_H
|
29
|
+
#define FFI_TRAMP_H
|
30
|
+
|
31
|
+
#ifdef __cplusplus
|
32
|
+
extern "C" {
|
33
|
+
#endif
|
34
|
+
|
35
|
+
int ffi_tramp_is_supported(void);
|
36
|
+
void *ffi_tramp_alloc (int flags);
|
37
|
+
void ffi_tramp_set_parms (void *tramp, void *data, void *code);
|
38
|
+
void *ffi_tramp_get_addr (void *tramp);
|
39
|
+
void ffi_tramp_free (void *tramp);
|
40
|
+
|
41
|
+
#ifdef __cplusplus
|
42
|
+
}
|
43
|
+
#endif
|
44
|
+
|
45
|
+
#endif /* FFI_TRAMP_H */
|
data/ext/ffi_c/libffi/install-sh
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/bin/sh
|
2
2
|
# install - install a program, script, or datafile
|
3
3
|
|
4
|
-
scriptversion=
|
4
|
+
scriptversion=2020-11-14.01; # UTC
|
5
5
|
|
6
6
|
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
7
7
|
# later released in X11R6 (xc/config/util/install.sh) with the
|
@@ -69,6 +69,11 @@ posix_mkdir=
|
|
69
69
|
# Desired mode of installed file.
|
70
70
|
mode=0755
|
71
71
|
|
72
|
+
# Create dirs (including intermediate dirs) using mode 755.
|
73
|
+
# This is like GNU 'install' as of coreutils 8.32 (2020).
|
74
|
+
mkdir_umask=22
|
75
|
+
|
76
|
+
backupsuffix=
|
72
77
|
chgrpcmd=
|
73
78
|
chmodcmd=$chmodprog
|
74
79
|
chowncmd=
|
@@ -99,18 +104,28 @@ Options:
|
|
99
104
|
--version display version info and exit.
|
100
105
|
|
101
106
|
-c (ignored)
|
102
|
-
-C install only if different (preserve
|
107
|
+
-C install only if different (preserve data modification time)
|
103
108
|
-d create directories instead of installing files.
|
104
109
|
-g GROUP $chgrpprog installed files to GROUP.
|
105
110
|
-m MODE $chmodprog installed files to MODE.
|
106
111
|
-o USER $chownprog installed files to USER.
|
112
|
+
-p pass -p to $cpprog.
|
107
113
|
-s $stripprog installed files.
|
114
|
+
-S SUFFIX attempt to back up existing files, with suffix SUFFIX.
|
108
115
|
-t DIRECTORY install into DIRECTORY.
|
109
116
|
-T report an error if DSTFILE is a directory.
|
110
117
|
|
111
118
|
Environment variables override the default commands:
|
112
119
|
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
113
120
|
RMPROG STRIPPROG
|
121
|
+
|
122
|
+
By default, rm is invoked with -f; when overridden with RMPROG,
|
123
|
+
it's up to you to specify -f if you want it.
|
124
|
+
|
125
|
+
If -S is not specified, no backups are attempted.
|
126
|
+
|
127
|
+
Email bug reports to bug-automake@gnu.org.
|
128
|
+
Automake home page: https://www.gnu.org/software/automake/
|
114
129
|
"
|
115
130
|
|
116
131
|
while test $# -ne 0; do
|
@@ -137,8 +152,13 @@ while test $# -ne 0; do
|
|
137
152
|
-o) chowncmd="$chownprog $2"
|
138
153
|
shift;;
|
139
154
|
|
155
|
+
-p) cpprog="$cpprog -p";;
|
156
|
+
|
140
157
|
-s) stripcmd=$stripprog;;
|
141
158
|
|
159
|
+
-S) backupsuffix="$2"
|
160
|
+
shift;;
|
161
|
+
|
142
162
|
-t)
|
143
163
|
is_target_a_directory=always
|
144
164
|
dst_arg=$2
|
@@ -255,6 +275,10 @@ do
|
|
255
275
|
dstdir=$dst
|
256
276
|
test -d "$dstdir"
|
257
277
|
dstdir_status=$?
|
278
|
+
# Don't chown directories that already exist.
|
279
|
+
if test $dstdir_status = 0; then
|
280
|
+
chowncmd=""
|
281
|
+
fi
|
258
282
|
else
|
259
283
|
|
260
284
|
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
@@ -301,22 +325,6 @@ do
|
|
301
325
|
if test $dstdir_status != 0; then
|
302
326
|
case $posix_mkdir in
|
303
327
|
'')
|
304
|
-
# Create intermediate dirs using mode 755 as modified by the umask.
|
305
|
-
# This is like FreeBSD 'install' as of 1997-10-28.
|
306
|
-
umask=`umask`
|
307
|
-
case $stripcmd.$umask in
|
308
|
-
# Optimize common cases.
|
309
|
-
*[2367][2367]) mkdir_umask=$umask;;
|
310
|
-
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
311
|
-
|
312
|
-
*[0-7])
|
313
|
-
mkdir_umask=`expr $umask + 22 \
|
314
|
-
- $umask % 100 % 40 + $umask % 20 \
|
315
|
-
- $umask % 10 % 4 + $umask % 2
|
316
|
-
`;;
|
317
|
-
*) mkdir_umask=$umask,go-w;;
|
318
|
-
esac
|
319
|
-
|
320
328
|
# With -d, create the new directory with the user-specified mode.
|
321
329
|
# Otherwise, rely on $mkdir_umask.
|
322
330
|
if test -n "$dir_arg"; then
|
@@ -326,52 +334,49 @@ do
|
|
326
334
|
fi
|
327
335
|
|
328
336
|
posix_mkdir=false
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
fi
|
373
|
-
trap '' 0;;
|
374
|
-
esac;;
|
337
|
+
# The $RANDOM variable is not portable (e.g., dash). Use it
|
338
|
+
# here however when possible just to lower collision chance.
|
339
|
+
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
340
|
+
|
341
|
+
trap '
|
342
|
+
ret=$?
|
343
|
+
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
|
344
|
+
exit $ret
|
345
|
+
' 0
|
346
|
+
|
347
|
+
# Because "mkdir -p" follows existing symlinks and we likely work
|
348
|
+
# directly in world-writeable /tmp, make sure that the '$tmpdir'
|
349
|
+
# directory is successfully created first before we actually test
|
350
|
+
# 'mkdir -p'.
|
351
|
+
if (umask $mkdir_umask &&
|
352
|
+
$mkdirprog $mkdir_mode "$tmpdir" &&
|
353
|
+
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
354
|
+
then
|
355
|
+
if test -z "$dir_arg" || {
|
356
|
+
# Check for POSIX incompatibilities with -m.
|
357
|
+
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
358
|
+
# other-writable bit of parent directory when it shouldn't.
|
359
|
+
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
360
|
+
test_tmpdir="$tmpdir/a"
|
361
|
+
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
362
|
+
case $ls_ld_tmpdir in
|
363
|
+
d????-?r-*) different_mode=700;;
|
364
|
+
d????-?--*) different_mode=755;;
|
365
|
+
*) false;;
|
366
|
+
esac &&
|
367
|
+
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
368
|
+
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
369
|
+
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
370
|
+
}
|
371
|
+
}
|
372
|
+
then posix_mkdir=:
|
373
|
+
fi
|
374
|
+
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
375
|
+
else
|
376
|
+
# Remove any dirs left behind by ancient mkdir implementations.
|
377
|
+
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
378
|
+
fi
|
379
|
+
trap '' 0;;
|
375
380
|
esac
|
376
381
|
|
377
382
|
if
|
@@ -382,7 +387,7 @@ do
|
|
382
387
|
then :
|
383
388
|
else
|
384
389
|
|
385
|
-
#
|
390
|
+
# mkdir does not conform to POSIX,
|
386
391
|
# or it failed possibly due to a race condition. Create the
|
387
392
|
# directory the slow way, step by step, checking for races as we go.
|
388
393
|
|
@@ -411,7 +416,7 @@ do
|
|
411
416
|
prefixes=
|
412
417
|
else
|
413
418
|
if $posix_mkdir; then
|
414
|
-
(umask
|
419
|
+
(umask $mkdir_umask &&
|
415
420
|
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
416
421
|
# Don't fail if two instances are running concurrently.
|
417
422
|
test -d "$prefix" || exit 1
|
@@ -451,7 +456,18 @@ do
|
|
451
456
|
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
452
457
|
|
453
458
|
# Copy the file name to the temp name.
|
454
|
-
(umask $cp_umask &&
|
459
|
+
(umask $cp_umask &&
|
460
|
+
{ test -z "$stripcmd" || {
|
461
|
+
# Create $dsttmp read-write so that cp doesn't create it read-only,
|
462
|
+
# which would cause strip to fail.
|
463
|
+
if test -z "$doit"; then
|
464
|
+
: >"$dsttmp" # No need to fork-exec 'touch'.
|
465
|
+
else
|
466
|
+
$doit touch "$dsttmp"
|
467
|
+
fi
|
468
|
+
}
|
469
|
+
} &&
|
470
|
+
$doit_exec $cpprog "$src" "$dsttmp") &&
|
455
471
|
|
456
472
|
# and set any options; do chmod last to preserve setuid bits.
|
457
473
|
#
|
@@ -477,6 +493,13 @@ do
|
|
477
493
|
then
|
478
494
|
rm -f "$dsttmp"
|
479
495
|
else
|
496
|
+
# If $backupsuffix is set, and the file being installed
|
497
|
+
# already exists, attempt a backup. Don't worry if it fails,
|
498
|
+
# e.g., if mv doesn't support -f.
|
499
|
+
if test -n "$backupsuffix" && test -f "$dst"; then
|
500
|
+
$doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
|
501
|
+
fi
|
502
|
+
|
480
503
|
# Rename the file to the real destination.
|
481
504
|
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
482
505
|
|
@@ -491,9 +514,9 @@ do
|
|
491
514
|
# file should still install successfully.
|
492
515
|
{
|
493
516
|
test ! -f "$dst" ||
|
494
|
-
$doit $rmcmd
|
517
|
+
$doit $rmcmd "$dst" 2>/dev/null ||
|
495
518
|
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
496
|
-
{ $doit $rmcmd
|
519
|
+
{ $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
|
497
520
|
} ||
|
498
521
|
{ echo "$0: cannot unlink or rename $dst" >&2
|
499
522
|
(exit 1); exit 1
|
@@ -33,7 +33,10 @@ LIBFFI_BASE_8.0 {
|
|
33
33
|
ffi_raw_to_ptrarray;
|
34
34
|
ffi_raw_size;
|
35
35
|
|
36
|
+
#if !FFI_NATIVE_RAW_API
|
36
37
|
ffi_java_raw_call;
|
38
|
+
#endif
|
39
|
+
|
37
40
|
ffi_java_ptrarray_to_raw;
|
38
41
|
ffi_java_raw_to_ptrarray;
|
39
42
|
ffi_java_raw_size;
|
@@ -62,8 +65,10 @@ LIBFFI_CLOSURE_8.0 {
|
|
62
65
|
ffi_prep_closure_loc;
|
63
66
|
ffi_prep_raw_closure;
|
64
67
|
ffi_prep_raw_closure_loc;
|
68
|
+
#if !FFI_NATIVE_RAW_API
|
65
69
|
ffi_prep_java_raw_closure;
|
66
70
|
ffi_prep_java_raw_closure_loc;
|
71
|
+
#endif
|
67
72
|
} LIBFFI_BASE_8.0;
|
68
73
|
#endif
|
69
74
|
|
@@ -5,7 +5,7 @@
|
|
5
5
|
#
|
6
6
|
# Here are a set of rules to help you update your library version
|
7
7
|
# information:
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# 1. Start with version information of `0:0:0' for each libtool library.
|
10
10
|
#
|
11
11
|
# 2. Update the version information only immediately before a public
|
@@ -26,4 +26,4 @@
|
|
26
26
|
# release, then set age to 0.
|
27
27
|
#
|
28
28
|
# CURRENT:REVISION:AGE
|
29
|
-
9:
|
29
|
+
9:4:1
|