ffi 0.5.0-x86-mingw32
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.
Potentially problematic release.
This version of ffi might be problematic. Click here for more details.
- data/LICENSE +51 -0
- data/README.rdoc +69 -0
- data/Rakefile +191 -0
- data/ext/ffi_c/AbstractMemory.c +489 -0
- data/ext/ffi_c/AbstractMemory.h +160 -0
- data/ext/ffi_c/ArrayType.c +129 -0
- data/ext/ffi_c/ArrayType.h +58 -0
- data/ext/ffi_c/AutoPointer.c +61 -0
- data/ext/ffi_c/AutoPointer.h +18 -0
- data/ext/ffi_c/Buffer.c +187 -0
- data/ext/ffi_c/Call.c +853 -0
- data/ext/ffi_c/Call.h +86 -0
- data/ext/ffi_c/ClosurePool.c +302 -0
- data/ext/ffi_c/ClosurePool.h +29 -0
- data/ext/ffi_c/DynamicLibrary.c +216 -0
- data/ext/ffi_c/DynamicLibrary.h +22 -0
- data/ext/ffi_c/Function.c +478 -0
- data/ext/ffi_c/Function.h +80 -0
- data/ext/ffi_c/FunctionInfo.c +221 -0
- data/ext/ffi_c/LastError.c +159 -0
- data/ext/ffi_c/LastError.h +18 -0
- data/ext/ffi_c/MemoryPointer.c +178 -0
- data/ext/ffi_c/MemoryPointer.h +20 -0
- data/ext/ffi_c/MethodHandle.c +346 -0
- data/ext/ffi_c/MethodHandle.h +53 -0
- data/ext/ffi_c/Platform.c +59 -0
- data/ext/ffi_c/Platform.h +16 -0
- data/ext/ffi_c/Pointer.c +224 -0
- data/ext/ffi_c/Pointer.h +49 -0
- data/ext/ffi_c/Struct.c +770 -0
- data/ext/ffi_c/Struct.h +80 -0
- data/ext/ffi_c/StructByValue.c +140 -0
- data/ext/ffi_c/StructByValue.h +53 -0
- data/ext/ffi_c/StructLayout.c +450 -0
- data/ext/ffi_c/Type.c +329 -0
- data/ext/ffi_c/Type.h +57 -0
- data/ext/ffi_c/Types.c +103 -0
- data/ext/ffi_c/Types.h +85 -0
- data/ext/ffi_c/Variadic.c +260 -0
- data/ext/ffi_c/compat.h +72 -0
- data/ext/ffi_c/endian.h +40 -0
- data/ext/ffi_c/extconf.rb +30 -0
- data/ext/ffi_c/ffi.c +82 -0
- data/ext/ffi_c/libffi.bsd.mk +34 -0
- data/ext/ffi_c/libffi.darwin.mk +75 -0
- data/ext/ffi_c/libffi.gnu.mk +29 -0
- data/ext/ffi_c/libffi.mk +13 -0
- data/ext/ffi_c/libffi/ChangeLog +3243 -0
- data/ext/ffi_c/libffi/ChangeLog.libffi +347 -0
- data/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
- data/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
- data/ext/ffi_c/libffi/LICENSE +21 -0
- data/ext/ffi_c/libffi/Makefile.am +177 -0
- data/ext/ffi_c/libffi/Makefile.in +1640 -0
- data/ext/ffi_c/libffi/README +328 -0
- data/ext/ffi_c/libffi/TODO +1 -0
- data/ext/ffi_c/libffi/acinclude.m4 +92 -0
- data/ext/ffi_c/libffi/aclocal.m4 +7516 -0
- data/ext/ffi_c/libffi/compile +142 -0
- data/ext/ffi_c/libffi/config.guess +1516 -0
- data/ext/ffi_c/libffi/config.sub +1626 -0
- data/ext/ffi_c/libffi/configure +24414 -0
- data/ext/ffi_c/libffi/configure.ac +365 -0
- data/ext/ffi_c/libffi/configure.host +11 -0
- data/ext/ffi_c/libffi/depcomp +584 -0
- data/ext/ffi_c/libffi/doc/libffi.info +533 -0
- data/ext/ffi_c/libffi/doc/libffi.texi +541 -0
- data/ext/ffi_c/libffi/doc/stamp-vti +4 -0
- data/ext/ffi_c/libffi/doc/version.texi +4 -0
- data/ext/ffi_c/libffi/fficonfig.h.in +160 -0
- data/ext/ffi_c/libffi/include/Makefile.am +9 -0
- data/ext/ffi_c/libffi/include/Makefile.in +422 -0
- data/ext/ffi_c/libffi/include/ffi.h.in +393 -0
- data/ext/ffi_c/libffi/include/ffi_common.h +98 -0
- data/ext/ffi_c/libffi/install-sh +323 -0
- data/ext/ffi_c/libffi/libffi.pc.in +10 -0
- data/ext/ffi_c/libffi/libtool-version +29 -0
- data/ext/ffi_c/libffi/ltcf-c.sh +861 -0
- data/ext/ffi_c/libffi/ltcf-cxx.sh +1069 -0
- data/ext/ffi_c/libffi/ltcf-gcj.sh +700 -0
- data/ext/ffi_c/libffi/ltconfig +2862 -0
- data/ext/ffi_c/libffi/ltmain.sh +6930 -0
- data/ext/ffi_c/libffi/man/Makefile.am +8 -0
- data/ext/ffi_c/libffi/man/Makefile.in +395 -0
- data/ext/ffi_c/libffi/man/ffi.3 +31 -0
- data/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
- data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +66 -0
- data/ext/ffi_c/libffi/mdate-sh +201 -0
- data/ext/ffi_c/libffi/missing +353 -0
- data/ext/ffi_c/libffi/mkinstalldirs +158 -0
- data/ext/ffi_c/libffi/src/alpha/ffi.c +284 -0
- data/ext/ffi_c/libffi/src/alpha/ffitarget.h +48 -0
- data/ext/ffi_c/libffi/src/alpha/osf.S +366 -0
- data/ext/ffi_c/libffi/src/arm/ffi.c +309 -0
- data/ext/ffi_c/libffi/src/arm/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/arm/sysv.S +299 -0
- data/ext/ffi_c/libffi/src/closures.c +596 -0
- data/ext/ffi_c/libffi/src/cris/ffi.c +383 -0
- data/ext/ffi_c/libffi/src/cris/ffitarget.h +51 -0
- data/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
- data/ext/ffi_c/libffi/src/debug.c +59 -0
- data/ext/ffi_c/libffi/src/dlmalloc.c +5099 -0
- data/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
- data/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
- data/ext/ffi_c/libffi/src/frv/ffitarget.h +61 -0
- data/ext/ffi_c/libffi/src/ia64/ffi.c +580 -0
- data/ext/ffi_c/libffi/src/ia64/ffitarget.h +50 -0
- data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
- data/ext/ffi_c/libffi/src/ia64/unix.S +560 -0
- data/ext/ffi_c/libffi/src/java_raw_api.c +359 -0
- data/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
- data/ext/ffi_c/libffi/src/m32r/ffitarget.h +48 -0
- data/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
- data/ext/ffi_c/libffi/src/m68k/ffi.c +278 -0
- data/ext/ffi_c/libffi/src/m68k/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/m68k/sysv.S +234 -0
- data/ext/ffi_c/libffi/src/mips/ffi.c +926 -0
- data/ext/ffi_c/libffi/src/mips/ffitarget.h +202 -0
- data/ext/ffi_c/libffi/src/mips/n32.S +534 -0
- data/ext/ffi_c/libffi/src/mips/o32.S +381 -0
- data/ext/ffi_c/libffi/src/pa/ffi.c +709 -0
- data/ext/ffi_c/libffi/src/pa/ffitarget.h +77 -0
- data/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
- data/ext/ffi_c/libffi/src/pa/linux.S +357 -0
- data/ext/ffi_c/libffi/src/powerpc/aix.S +225 -0
- data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +247 -0
- data/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
- data/ext/ffi_c/libffi/src/powerpc/darwin.S +245 -0
- data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +317 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi.c +1429 -0
- data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +800 -0
- data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +118 -0
- data/ext/ffi_c/libffi/src/powerpc/linux64.S +187 -0
- data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +236 -0
- data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +327 -0
- data/ext/ffi_c/libffi/src/powerpc/sysv.S +230 -0
- data/ext/ffi_c/libffi/src/prep_cif.c +174 -0
- data/ext/ffi_c/libffi/src/raw_api.c +254 -0
- data/ext/ffi_c/libffi/src/s390/ffi.c +780 -0
- data/ext/ffi_c/libffi/src/s390/ffitarget.h +60 -0
- data/ext/ffi_c/libffi/src/s390/sysv.S +434 -0
- data/ext/ffi_c/libffi/src/sh/ffi.c +716 -0
- data/ext/ffi_c/libffi/src/sh/ffitarget.h +49 -0
- data/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
- data/ext/ffi_c/libffi/src/sh64/ffi.c +453 -0
- data/ext/ffi_c/libffi/src/sh64/ffitarget.h +53 -0
- data/ext/ffi_c/libffi/src/sh64/sysv.S +530 -0
- data/ext/ffi_c/libffi/src/sparc/ffi.c +610 -0
- data/ext/ffi_c/libffi/src/sparc/ffitarget.h +66 -0
- data/ext/ffi_c/libffi/src/sparc/v8.S +272 -0
- data/ext/ffi_c/libffi/src/sparc/v9.S +307 -0
- data/ext/ffi_c/libffi/src/types.c +77 -0
- data/ext/ffi_c/libffi/src/x86/darwin.S +443 -0
- data/ext/ffi_c/libffi/src/x86/darwin64.S +416 -0
- data/ext/ffi_c/libffi/src/x86/ffi.c +475 -0
- data/ext/ffi_c/libffi/src/x86/ffi64.c +572 -0
- data/ext/ffi_c/libffi/src/x86/ffitarget.h +90 -0
- data/ext/ffi_c/libffi/src/x86/freebsd.S +458 -0
- data/ext/ffi_c/libffi/src/x86/sysv.S +437 -0
- data/ext/ffi_c/libffi/src/x86/unix64.S +418 -0
- data/ext/ffi_c/libffi/src/x86/win32.S +391 -0
- data/ext/ffi_c/libffi/testsuite/Makefile.am +71 -0
- data/ext/ffi_c/libffi/testsuite/Makefile.in +447 -0
- data/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
- data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +289 -0
- data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +263 -0
- data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +97 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +89 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +89 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +90 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +97 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +72 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +102 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +103 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +104 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +110 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +97 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +101 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +103 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +106 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +117 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +106 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +132 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +121 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +107 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +125 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +105 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +96 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +101 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +100 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +101 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +100 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +82 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +82 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +94 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +99 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +82 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +94 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +52 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +50 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +50 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +50 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +54 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +51 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +58 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +57 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +72 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +69 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +63 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +53 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +160 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +169 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +141 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +118 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +119 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +119 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +120 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +139 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +119 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +139 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +139 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +98 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +35 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +42 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +65 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +59 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +63 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +65 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +80 -0
- data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +67 -0
- data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +86 -0
- data/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +38 -0
- data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +123 -0
- data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
- data/ext/ffi_c/libffi/texinfo.tex +7482 -0
- data/ext/ffi_c/rbffi.h +26 -0
- data/gen/Rakefile +12 -0
- data/lib/1.8/ffi_c.so +0 -0
- data/lib/1.9/ffi_c.so +0 -0
- data/lib/ffi.rb +11 -0
- data/lib/ffi/autopointer.rb +61 -0
- data/lib/ffi/buffer.rb +0 -0
- data/lib/ffi/callback.rb +10 -0
- data/lib/ffi/enum.rb +78 -0
- data/lib/ffi/errno.rb +8 -0
- data/lib/ffi/ffi.rb +99 -0
- data/lib/ffi/io.rb +21 -0
- data/lib/ffi/library.rb +218 -0
- data/lib/ffi/managedstruct.rb +55 -0
- data/lib/ffi/memorypointer.rb +73 -0
- data/lib/ffi/platform.rb +88 -0
- data/lib/ffi/pointer.rb +119 -0
- data/lib/ffi/struct.rb +183 -0
- data/lib/ffi/tools/const_generator.rb +177 -0
- data/lib/ffi/tools/generator.rb +58 -0
- data/lib/ffi/tools/generator_task.rb +35 -0
- data/lib/ffi/tools/struct_generator.rb +194 -0
- data/lib/ffi/tools/types_generator.rb +123 -0
- data/lib/ffi/types.rb +153 -0
- data/lib/ffi/union.rb +12 -0
- data/lib/ffi/variadic.rb +25 -0
- data/spec/ffi/bool_spec.rb +24 -0
- data/spec/ffi/buffer_spec.rb +202 -0
- data/spec/ffi/callback_spec.rb +591 -0
- data/spec/ffi/enum_spec.rb +164 -0
- data/spec/ffi/errno_spec.rb +13 -0
- data/spec/ffi/function_spec.rb +73 -0
- data/spec/ffi/library_spec.rb +148 -0
- data/spec/ffi/managed_struct_spec.rb +56 -0
- data/spec/ffi/number_spec.rb +231 -0
- data/spec/ffi/pointer_spec.rb +195 -0
- data/spec/ffi/rbx/attach_function_spec.rb +27 -0
- data/spec/ffi/rbx/memory_pointer_spec.rb +102 -0
- data/spec/ffi/rbx/spec_helper.rb +1 -0
- data/spec/ffi/rbx/struct_spec.rb +13 -0
- data/spec/ffi/spec_helper.rb +17 -0
- data/spec/ffi/string_spec.rb +103 -0
- data/spec/ffi/struct_callback_spec.rb +64 -0
- data/spec/ffi/struct_initialize_spec.rb +30 -0
- data/spec/ffi/struct_spec.rb +529 -0
- data/spec/ffi/typedef_spec.rb +48 -0
- data/spec/ffi/union_spec.rb +60 -0
- data/spec/ffi/variadic_spec.rb +84 -0
- data/spec/spec.opts +4 -0
- metadata +396 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
/* Area: closure_call
|
2
|
+
Purpose: Check return value uint.
|
3
|
+
Limitations: none.
|
4
|
+
PR: none.
|
5
|
+
Originator: <andreast@gcc.gnu.org> 20030828 */
|
6
|
+
|
7
|
+
/* { dg-do run } */
|
8
|
+
#include "ffitest.h"
|
9
|
+
|
10
|
+
static void cls_ret_uint_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
|
11
|
+
void* userdata __UNUSED__)
|
12
|
+
{
|
13
|
+
*(ffi_arg *)resp = *(unsigned int *)args[0];
|
14
|
+
|
15
|
+
printf("%d: %d\n",*(unsigned int *)args[0],
|
16
|
+
(int)*(ffi_arg *)(resp));
|
17
|
+
}
|
18
|
+
typedef unsigned int (*cls_ret_uint)(unsigned int);
|
19
|
+
|
20
|
+
int main (void)
|
21
|
+
{
|
22
|
+
ffi_cif cif;
|
23
|
+
#ifndef USING_MMAP
|
24
|
+
static ffi_closure cl;
|
25
|
+
#endif
|
26
|
+
ffi_closure *pcl;
|
27
|
+
ffi_type * cl_arg_types[2];
|
28
|
+
unsigned int res;
|
29
|
+
|
30
|
+
#ifdef USING_MMAP
|
31
|
+
pcl = allocate_mmap (sizeof(ffi_closure));
|
32
|
+
#else
|
33
|
+
pcl = &cl;
|
34
|
+
#endif
|
35
|
+
|
36
|
+
cl_arg_types[0] = &ffi_type_uint;
|
37
|
+
cl_arg_types[1] = NULL;
|
38
|
+
|
39
|
+
/* Initialize the cif */
|
40
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
|
41
|
+
&ffi_type_uint, cl_arg_types) == FFI_OK);
|
42
|
+
|
43
|
+
CHECK(ffi_prep_closure(pcl, &cif, cls_ret_uint_fn, NULL) == FFI_OK);
|
44
|
+
|
45
|
+
res = (*((cls_ret_uint)pcl))(2147483647);
|
46
|
+
/* { dg-output "2147483647: 2147483647" } */
|
47
|
+
printf("res: %d\n",res);
|
48
|
+
/* { dg-output "\nres: 2147483647" } */
|
49
|
+
|
50
|
+
exit(0);
|
51
|
+
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
/* Area: closure_call
|
2
|
+
Purpose: Check return value long long.
|
3
|
+
Limitations: none.
|
4
|
+
PR: none.
|
5
|
+
Originator: <andreast@gcc.gnu.org> 20030828 */
|
6
|
+
|
7
|
+
/* { dg-do run } */
|
8
|
+
#include "ffitest.h"
|
9
|
+
|
10
|
+
static void cls_ret_ulonglong_fn(ffi_cif* cif __UNUSED__, void* resp,
|
11
|
+
void** args, void* userdata __UNUSED__)
|
12
|
+
{
|
13
|
+
*(unsigned long long *)resp= *(unsigned long long *)args[0];
|
14
|
+
|
15
|
+
printf("%llu: %llu\n",*(unsigned long long *)args[0],
|
16
|
+
*(unsigned long long *)(resp));
|
17
|
+
}
|
18
|
+
typedef unsigned long long (*cls_ret_ulonglong)(unsigned long long);
|
19
|
+
|
20
|
+
int main (void)
|
21
|
+
{
|
22
|
+
ffi_cif cif;
|
23
|
+
#ifndef USING_MMAP
|
24
|
+
static ffi_closure cl;
|
25
|
+
#endif
|
26
|
+
ffi_closure *pcl;
|
27
|
+
ffi_type * cl_arg_types[2];
|
28
|
+
unsigned long long res;
|
29
|
+
|
30
|
+
#ifdef USING_MMAP
|
31
|
+
pcl = allocate_mmap (sizeof(ffi_closure));
|
32
|
+
#else
|
33
|
+
pcl = &cl;
|
34
|
+
#endif
|
35
|
+
|
36
|
+
cl_arg_types[0] = &ffi_type_uint64;
|
37
|
+
cl_arg_types[1] = NULL;
|
38
|
+
|
39
|
+
/* Initialize the cif */
|
40
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
|
41
|
+
&ffi_type_uint64, cl_arg_types) == FFI_OK);
|
42
|
+
CHECK(ffi_prep_closure(pcl, &cif, cls_ret_ulonglong_fn, NULL) == FFI_OK);
|
43
|
+
res = (*((cls_ret_ulonglong)pcl))(214LL);
|
44
|
+
/* { dg-output "214: 214" } */
|
45
|
+
printf("res: %lld\n", res);
|
46
|
+
/* { dg-output "\nres: 214" } */
|
47
|
+
|
48
|
+
res = (*((cls_ret_ulonglong)pcl))(9223372035854775808LL);
|
49
|
+
/* { dg-output "\n9223372035854775808: 9223372035854775808" } */
|
50
|
+
printf("res: %lld\n", res);
|
51
|
+
/* { dg-output "\nres: 9223372035854775808" } */
|
52
|
+
|
53
|
+
exit(0);
|
54
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
/* Area: closure_call
|
2
|
+
Purpose: Check return value ushort.
|
3
|
+
Limitations: none.
|
4
|
+
PR: none.
|
5
|
+
Originator: <andreast@gcc.gnu.org> 20030828 */
|
6
|
+
|
7
|
+
/* { dg-do run } */
|
8
|
+
#include "ffitest.h"
|
9
|
+
|
10
|
+
static void cls_ret_ushort_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
|
11
|
+
void* userdata __UNUSED__)
|
12
|
+
{
|
13
|
+
*(ffi_arg*)resp = *(unsigned short *)args[0];
|
14
|
+
|
15
|
+
printf("%d: %d\n",*(unsigned short *)args[0],
|
16
|
+
(int)*(ffi_arg *)(resp));
|
17
|
+
}
|
18
|
+
typedef unsigned short (*cls_ret_ushort)(unsigned short);
|
19
|
+
|
20
|
+
int main (void)
|
21
|
+
{
|
22
|
+
ffi_cif cif;
|
23
|
+
#ifndef USING_MMAP
|
24
|
+
static ffi_closure cl;
|
25
|
+
#endif
|
26
|
+
ffi_closure *pcl;
|
27
|
+
ffi_type * cl_arg_types[2];
|
28
|
+
unsigned short res;
|
29
|
+
|
30
|
+
#ifdef USING_MMAP
|
31
|
+
pcl = allocate_mmap (sizeof(ffi_closure));
|
32
|
+
#else
|
33
|
+
pcl = &cl;
|
34
|
+
#endif
|
35
|
+
|
36
|
+
cl_arg_types[0] = &ffi_type_ushort;
|
37
|
+
cl_arg_types[1] = NULL;
|
38
|
+
|
39
|
+
/* Initialize the cif */
|
40
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
|
41
|
+
&ffi_type_ushort, cl_arg_types) == FFI_OK);
|
42
|
+
|
43
|
+
CHECK(ffi_prep_closure(pcl, &cif, cls_ret_ushort_fn, NULL) == FFI_OK);
|
44
|
+
|
45
|
+
res = (*((cls_ret_ushort)pcl))(65535);
|
46
|
+
/* { dg-output "65535: 65535" } */
|
47
|
+
printf("res: %d\n",res);
|
48
|
+
/* { dg-output "\nres: 65535" } */
|
49
|
+
|
50
|
+
exit(0);
|
51
|
+
}
|
@@ -0,0 +1,86 @@
|
|
1
|
+
#include <stdlib.h>
|
2
|
+
#include <stdio.h>
|
3
|
+
#include <string.h>
|
4
|
+
#include <fcntl.h>
|
5
|
+
#include <ffi.h>
|
6
|
+
#include "fficonfig.h"
|
7
|
+
|
8
|
+
#define MAX_ARGS 256
|
9
|
+
|
10
|
+
#define CHECK(x) !(x) ? abort() : 0
|
11
|
+
|
12
|
+
/* Define __UNUSED__ that also other compilers than gcc can run the tests. */
|
13
|
+
#undef __UNUSED__
|
14
|
+
#if defined(__GNUC__)
|
15
|
+
#define __UNUSED__ __attribute__((__unused__))
|
16
|
+
#else
|
17
|
+
#define __UNUSED__
|
18
|
+
#endif
|
19
|
+
|
20
|
+
/* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
|
21
|
+
file open. */
|
22
|
+
#ifdef HAVE_MMAP_ANON
|
23
|
+
# undef HAVE_MMAP_DEV_ZERO
|
24
|
+
|
25
|
+
# include <sys/mman.h>
|
26
|
+
# ifndef MAP_FAILED
|
27
|
+
# define MAP_FAILED -1
|
28
|
+
# endif
|
29
|
+
# if !defined (MAP_ANONYMOUS) && defined (MAP_ANON)
|
30
|
+
# define MAP_ANONYMOUS MAP_ANON
|
31
|
+
# endif
|
32
|
+
# define USING_MMAP
|
33
|
+
|
34
|
+
#endif
|
35
|
+
|
36
|
+
#ifdef HAVE_MMAP_DEV_ZERO
|
37
|
+
|
38
|
+
# include <sys/mman.h>
|
39
|
+
# ifndef MAP_FAILED
|
40
|
+
# define MAP_FAILED -1
|
41
|
+
# endif
|
42
|
+
# define USING_MMAP
|
43
|
+
|
44
|
+
#endif
|
45
|
+
|
46
|
+
#ifdef USING_MMAP
|
47
|
+
static inline void *
|
48
|
+
allocate_mmap (size_t size)
|
49
|
+
{
|
50
|
+
void *page;
|
51
|
+
#if defined (HAVE_MMAP_DEV_ZERO)
|
52
|
+
static int dev_zero_fd = -1;
|
53
|
+
#endif
|
54
|
+
|
55
|
+
#ifdef HAVE_MMAP_DEV_ZERO
|
56
|
+
if (dev_zero_fd == -1)
|
57
|
+
{
|
58
|
+
dev_zero_fd = open ("/dev/zero", O_RDONLY);
|
59
|
+
if (dev_zero_fd == -1)
|
60
|
+
{
|
61
|
+
perror ("open /dev/zero: %m");
|
62
|
+
exit (1);
|
63
|
+
}
|
64
|
+
}
|
65
|
+
#endif
|
66
|
+
|
67
|
+
|
68
|
+
#ifdef HAVE_MMAP_ANON
|
69
|
+
page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
|
70
|
+
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
71
|
+
#endif
|
72
|
+
#ifdef HAVE_MMAP_DEV_ZERO
|
73
|
+
page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
|
74
|
+
MAP_PRIVATE, dev_zero_fd, 0);
|
75
|
+
#endif
|
76
|
+
|
77
|
+
if (page == (void *) MAP_FAILED)
|
78
|
+
{
|
79
|
+
perror ("virtual memory exhausted");
|
80
|
+
exit (1);
|
81
|
+
}
|
82
|
+
|
83
|
+
return page;
|
84
|
+
}
|
85
|
+
|
86
|
+
#endif
|
@@ -0,0 +1,59 @@
|
|
1
|
+
/* Area: ffi_call
|
2
|
+
Purpose: Check return value float.
|
3
|
+
Limitations: none.
|
4
|
+
PR: none.
|
5
|
+
Originator: From the original ffitest.c */
|
6
|
+
|
7
|
+
/* { dg-do run } */
|
8
|
+
|
9
|
+
#include "ffitest.h"
|
10
|
+
|
11
|
+
static int floating(int a, float b, double c, long double d)
|
12
|
+
{
|
13
|
+
int i;
|
14
|
+
|
15
|
+
i = (int) ((float)a/b + ((float)c/(float)d));
|
16
|
+
|
17
|
+
return i;
|
18
|
+
}
|
19
|
+
|
20
|
+
int main (void)
|
21
|
+
{
|
22
|
+
ffi_cif cif;
|
23
|
+
ffi_type *args[MAX_ARGS];
|
24
|
+
void *values[MAX_ARGS];
|
25
|
+
ffi_arg rint;
|
26
|
+
|
27
|
+
float f;
|
28
|
+
signed int si1;
|
29
|
+
double d;
|
30
|
+
long double ld;
|
31
|
+
|
32
|
+
args[0] = &ffi_type_sint;
|
33
|
+
values[0] = &si1;
|
34
|
+
args[1] = &ffi_type_float;
|
35
|
+
values[1] = &f;
|
36
|
+
args[2] = &ffi_type_double;
|
37
|
+
values[2] = &d;
|
38
|
+
args[3] = &ffi_type_longdouble;
|
39
|
+
values[3] = &ld;
|
40
|
+
|
41
|
+
/* Initialize the cif */
|
42
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
|
43
|
+
&ffi_type_sint, args) == FFI_OK);
|
44
|
+
|
45
|
+
si1 = 6;
|
46
|
+
f = 3.14159;
|
47
|
+
d = (double)1.0/(double)3.0;
|
48
|
+
ld = 2.71828182846L;
|
49
|
+
|
50
|
+
floating (si1, f, d, ld);
|
51
|
+
|
52
|
+
ffi_call(&cif, FFI_FN(floating), &rint, values);
|
53
|
+
|
54
|
+
printf ("%d vs %d\n", (int)rint, floating (si1, f, d, ld));
|
55
|
+
|
56
|
+
CHECK((int)rint == floating(si1, f, d, ld));
|
57
|
+
|
58
|
+
exit (0);
|
59
|
+
}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
/* Area: ffi_call
|
2
|
+
Purpose: Check return value double.
|
3
|
+
Limitations: none.
|
4
|
+
PR: none.
|
5
|
+
Originator: From the original ffitest.c */
|
6
|
+
|
7
|
+
/* { dg-do run } */
|
8
|
+
#include "ffitest.h"
|
9
|
+
#include "float.h"
|
10
|
+
|
11
|
+
typedef union
|
12
|
+
{
|
13
|
+
double d;
|
14
|
+
unsigned char c[sizeof (double)];
|
15
|
+
} value_type;
|
16
|
+
|
17
|
+
#define CANARY 0xba
|
18
|
+
|
19
|
+
static double dblit(float f)
|
20
|
+
{
|
21
|
+
return f/3.0;
|
22
|
+
}
|
23
|
+
|
24
|
+
int main (void)
|
25
|
+
{
|
26
|
+
ffi_cif cif;
|
27
|
+
ffi_type *args[MAX_ARGS];
|
28
|
+
void *values[MAX_ARGS];
|
29
|
+
float f;
|
30
|
+
value_type result[2];
|
31
|
+
unsigned int i;
|
32
|
+
|
33
|
+
args[0] = &ffi_type_float;
|
34
|
+
values[0] = &f;
|
35
|
+
|
36
|
+
/* Initialize the cif */
|
37
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
|
38
|
+
&ffi_type_double, args) == FFI_OK);
|
39
|
+
|
40
|
+
f = 3.14159;
|
41
|
+
|
42
|
+
/* Put a canary in the return array. This is a regression test for
|
43
|
+
a buffer overrun. */
|
44
|
+
memset(result[1].c, CANARY, sizeof (double));
|
45
|
+
|
46
|
+
ffi_call(&cif, FFI_FN(dblit), &result[0].d, values);
|
47
|
+
|
48
|
+
/* These are not always the same!! Check for a reasonable delta */
|
49
|
+
|
50
|
+
CHECK(result[0].d - dblit(f) < DBL_EPSILON);
|
51
|
+
|
52
|
+
/* Check the canary. */
|
53
|
+
for (i = 0; i < sizeof (double); ++i)
|
54
|
+
CHECK(result[1].c[i] == CANARY);
|
55
|
+
|
56
|
+
exit(0);
|
57
|
+
|
58
|
+
}
|
@@ -0,0 +1,57 @@
|
|
1
|
+
/* Area: ffi_call
|
2
|
+
Purpose: Check return value long double.
|
3
|
+
Limitations: none.
|
4
|
+
PR: none.
|
5
|
+
Originator: From the original ffitest.c */
|
6
|
+
|
7
|
+
/* { dg-do run } */
|
8
|
+
|
9
|
+
#include "ffitest.h"
|
10
|
+
#include "float.h"
|
11
|
+
|
12
|
+
static long double ldblit(float f)
|
13
|
+
{
|
14
|
+
return (long double) (((long double) f)/ (long double) 3.0);
|
15
|
+
}
|
16
|
+
|
17
|
+
int main (void)
|
18
|
+
{
|
19
|
+
ffi_cif cif;
|
20
|
+
ffi_type *args[MAX_ARGS];
|
21
|
+
void *values[MAX_ARGS];
|
22
|
+
float f;
|
23
|
+
long double ld;
|
24
|
+
|
25
|
+
args[0] = &ffi_type_float;
|
26
|
+
values[0] = &f;
|
27
|
+
|
28
|
+
/* Initialize the cif */
|
29
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
|
30
|
+
&ffi_type_longdouble, args) == FFI_OK);
|
31
|
+
|
32
|
+
f = 3.14159;
|
33
|
+
|
34
|
+
#if 1
|
35
|
+
/* This is ifdef'd out for now. long double support under SunOS/gcc
|
36
|
+
is pretty much non-existent. You'll get the odd bus error in library
|
37
|
+
routines like printf(). */
|
38
|
+
printf ("%Lf\n", ldblit(f));
|
39
|
+
#endif
|
40
|
+
ld = 666;
|
41
|
+
ffi_call(&cif, FFI_FN(ldblit), &ld, values);
|
42
|
+
|
43
|
+
#if 1
|
44
|
+
/* This is ifdef'd out for now. long double support under SunOS/gcc
|
45
|
+
is pretty much non-existent. You'll get the odd bus error in library
|
46
|
+
routines like printf(). */
|
47
|
+
printf ("%Lf, %Lf, %Lf, %Lf\n", ld, ldblit(f), ld - ldblit(f), LDBL_EPSILON);
|
48
|
+
#endif
|
49
|
+
|
50
|
+
/* These are not always the same!! Check for a reasonable delta */
|
51
|
+
if (ld - ldblit(f) < LDBL_EPSILON)
|
52
|
+
puts("long double return value tests ok!");
|
53
|
+
else
|
54
|
+
CHECK(0);
|
55
|
+
|
56
|
+
exit(0);
|
57
|
+
}
|
@@ -0,0 +1,72 @@
|
|
1
|
+
/* Area: ffi_call
|
2
|
+
Purpose: Check float arguments with different orders.
|
3
|
+
Limitations: none.
|
4
|
+
PR: none.
|
5
|
+
Originator: From the original ffitest.c */
|
6
|
+
|
7
|
+
/* { dg-do run } */
|
8
|
+
|
9
|
+
#include "ffitest.h"
|
10
|
+
#include "float.h"
|
11
|
+
|
12
|
+
static double floating_1(float a, double b, long double c)
|
13
|
+
{
|
14
|
+
return (double) a + b + (double) c;
|
15
|
+
}
|
16
|
+
|
17
|
+
static double floating_2(long double a, double b, float c)
|
18
|
+
{
|
19
|
+
return (double) a + b + (double) c;
|
20
|
+
}
|
21
|
+
|
22
|
+
int main (void)
|
23
|
+
{
|
24
|
+
ffi_cif cif;
|
25
|
+
ffi_type *args[MAX_ARGS];
|
26
|
+
void *values[MAX_ARGS];
|
27
|
+
double rd;
|
28
|
+
|
29
|
+
float f;
|
30
|
+
double d;
|
31
|
+
long double ld;
|
32
|
+
|
33
|
+
args[0] = &ffi_type_float;
|
34
|
+
values[0] = &f;
|
35
|
+
args[1] = &ffi_type_double;
|
36
|
+
values[1] = &d;
|
37
|
+
args[2] = &ffi_type_longdouble;
|
38
|
+
values[2] = &ld;
|
39
|
+
|
40
|
+
/* Initialize the cif */
|
41
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
|
42
|
+
&ffi_type_double, args) == FFI_OK);
|
43
|
+
|
44
|
+
f = 3.14159;
|
45
|
+
d = (double)1.0/(double)3.0;
|
46
|
+
ld = 2.71828182846L;
|
47
|
+
|
48
|
+
floating_1 (f, d, ld);
|
49
|
+
|
50
|
+
ffi_call(&cif, FFI_FN(floating_1), &rd, values);
|
51
|
+
|
52
|
+
CHECK(rd - floating_1(f, d, ld) < DBL_EPSILON);
|
53
|
+
|
54
|
+
args[0] = &ffi_type_longdouble;
|
55
|
+
values[0] = &ld;
|
56
|
+
args[1] = &ffi_type_double;
|
57
|
+
values[1] = &d;
|
58
|
+
args[2] = &ffi_type_float;
|
59
|
+
values[2] = &f;
|
60
|
+
|
61
|
+
/* Initialize the cif */
|
62
|
+
CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
|
63
|
+
&ffi_type_double, args) == FFI_OK);
|
64
|
+
|
65
|
+
floating_2 (ld, d, f);
|
66
|
+
|
67
|
+
ffi_call(&cif, FFI_FN(floating_2), &rd, values);
|
68
|
+
|
69
|
+
CHECK(rd - floating_2(ld, d, f) < DBL_EPSILON);
|
70
|
+
|
71
|
+
exit (0);
|
72
|
+
}
|