ffi 1.0.0 → 1.17.1

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.
Files changed (694) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +4 -0
  3. data/CHANGELOG.md +465 -0
  4. data/COPYING +49 -0
  5. data/Gemfile +21 -0
  6. data/LICENSE +21 -11
  7. data/LICENSE.SPECS +22 -0
  8. data/README.md +137 -0
  9. data/Rakefile +165 -148
  10. data/ext/ffi_c/AbstractMemory.c +716 -97
  11. data/ext/ffi_c/AbstractMemory.h +38 -17
  12. data/ext/ffi_c/ArrayType.c +102 -33
  13. data/ext/ffi_c/ArrayType.h +20 -18
  14. data/ext/ffi_c/Buffer.c +229 -54
  15. data/ext/ffi_c/Call.c +211 -100
  16. data/ext/ffi_c/Call.h +46 -28
  17. data/ext/ffi_c/ClosurePool.c +110 -81
  18. data/ext/ffi_c/ClosurePool.h +31 -1
  19. data/ext/ffi_c/DynamicLibrary.c +216 -54
  20. data/ext/ffi_c/DynamicLibrary.h +76 -0
  21. data/ext/ffi_c/Function.c +527 -164
  22. data/ext/ffi_c/Function.h +24 -20
  23. data/ext/ffi_c/FunctionInfo.c +151 -50
  24. data/ext/ffi_c/LastError.c +112 -28
  25. data/ext/ffi_c/LastError.h +29 -0
  26. data/ext/ffi_c/LongDouble.c +65 -0
  27. data/ext/ffi_c/LongDouble.h +47 -0
  28. data/ext/ffi_c/MappedType.c +107 -42
  29. data/ext/ffi_c/MappedType.h +20 -20
  30. data/ext/ffi_c/MemoryPointer.c +108 -46
  31. data/ext/ffi_c/MemoryPointer.h +33 -4
  32. data/ext/ffi_c/MethodHandle.c +71 -67
  33. data/ext/ffi_c/MethodHandle.h +26 -23
  34. data/ext/ffi_c/Platform.c +42 -25
  35. data/ext/ffi_c/Platform.h +32 -3
  36. data/ext/ffi_c/Pointer.c +324 -51
  37. data/ext/ffi_c/Pointer.h +29 -18
  38. data/ext/ffi_c/Struct.c +434 -161
  39. data/ext/ffi_c/Struct.h +47 -27
  40. data/ext/ffi_c/StructByValue.c +74 -37
  41. data/ext/ffi_c/StructByValue.h +20 -18
  42. data/ext/ffi_c/StructLayout.c +358 -87
  43. data/ext/ffi_c/Thread.c +129 -0
  44. data/ext/ffi_c/Thread.h +76 -0
  45. data/ext/ffi_c/Type.c +241 -76
  46. data/ext/ffi_c/Type.h +27 -11
  47. data/ext/ffi_c/Types.c +54 -34
  48. data/ext/ffi_c/Types.h +24 -24
  49. data/ext/ffi_c/Variadic.c +151 -55
  50. data/ext/ffi_c/compat.h +48 -38
  51. data/ext/ffi_c/extconf.rb +106 -34
  52. data/ext/ffi_c/ffi.c +35 -26
  53. data/ext/ffi_c/libffi/.allow-ai-service +0 -0
  54. data/ext/ffi_c/libffi/.appveyor/site.exp +16 -0
  55. data/ext/ffi_c/libffi/.appveyor/unix-noexec.exp +7 -0
  56. data/ext/ffi_c/libffi/.appveyor.yml +84 -0
  57. data/ext/ffi_c/libffi/.ci/ar-lib +270 -0
  58. data/ext/ffi_c/libffi/.ci/bfin-sim.exp +58 -0
  59. data/ext/ffi_c/libffi/.ci/build-cross-in-container.sh +18 -0
  60. data/ext/ffi_c/libffi/.ci/build-in-container.sh +10 -0
  61. data/ext/ffi_c/libffi/.ci/build.sh +124 -0
  62. data/ext/ffi_c/libffi/.ci/compile +351 -0
  63. data/ext/ffi_c/libffi/.ci/install.sh +78 -0
  64. data/ext/ffi_c/libffi/.ci/m32r-sim.exp +58 -0
  65. data/ext/ffi_c/libffi/.ci/moxie-sim.exp +60 -0
  66. data/ext/ffi_c/libffi/.ci/msvs-detect +1103 -0
  67. data/ext/ffi_c/libffi/.ci/or1k-sim.exp +58 -0
  68. data/ext/ffi_c/libffi/.ci/powerpc-eabisim.exp +58 -0
  69. data/ext/ffi_c/libffi/.ci/site.exp +29 -0
  70. data/ext/ffi_c/libffi/.ci/wine-sim.exp +55 -0
  71. data/ext/ffi_c/libffi/.circleci/config.yml +156 -0
  72. data/ext/ffi_c/libffi/.gitattributes +4 -0
  73. data/ext/ffi_c/libffi/.github/issue_template.md +10 -0
  74. data/ext/ffi_c/libffi/.github/workflows/build.yml +479 -0
  75. data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +172 -0
  76. data/ext/ffi_c/libffi/.gitignore +46 -0
  77. data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.old} +6528 -3180
  78. data/ext/ffi_c/libffi/LICENSE +3 -3
  79. data/ext/ffi_c/libffi/LICENSE-BUILDTOOLS +353 -0
  80. data/ext/ffi_c/libffi/Makefile.am +132 -162
  81. data/ext/ffi_c/libffi/Makefile.in +1339 -1003
  82. data/ext/ffi_c/libffi/README.md +531 -0
  83. data/ext/ffi_c/libffi/acinclude.m4 +289 -4
  84. data/ext/ffi_c/libffi/autogen.sh +2 -0
  85. data/ext/ffi_c/libffi/compile +227 -21
  86. data/ext/ffi_c/libffi/config.guess +1034 -778
  87. data/ext/ffi_c/libffi/config.sub +1394 -1204
  88. data/ext/ffi_c/libffi/configure +14327 -8503
  89. data/ext/ffi_c/libffi/configure.ac +294 -247
  90. data/ext/ffi_c/libffi/configure.host +330 -4
  91. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  92. data/ext/ffi_c/libffi/doc/Makefile.in +818 -0
  93. data/ext/ffi_c/libffi/doc/libffi.texi +572 -67
  94. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  95. data/ext/ffi_c/libffi/fficonfig.h.in +53 -46
  96. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +312 -0
  97. data/ext/ffi_c/libffi/include/Makefile.am +3 -3
  98. data/ext/ffi_c/libffi/include/Makefile.in +219 -79
  99. data/ext/ffi_c/libffi/include/ffi.h.in +230 -111
  100. data/ext/ffi_c/libffi/include/ffi_cfi.h +76 -0
  101. data/ext/ffi_c/libffi/include/ffi_common.h +78 -16
  102. data/ext/ffi_c/libffi/include/tramp.h +45 -0
  103. data/ext/ffi_c/libffi/install-sh +402 -184
  104. data/ext/ffi_c/libffi/libffi.map.in +81 -0
  105. data/ext/ffi_c/libffi/libffi.pc.in +3 -2
  106. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +997 -0
  107. data/ext/ffi_c/libffi/libtool-ldflags +106 -0
  108. data/ext/ffi_c/libffi/libtool-version +2 -2
  109. data/ext/ffi_c/libffi/ltmain.sh +5752 -2722
  110. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  111. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +50 -0
  112. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +198 -0
  113. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +158 -0
  114. data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +53 -0
  115. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +119 -0
  116. data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +49 -0
  117. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +302 -0
  118. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +267 -0
  119. data/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +89 -0
  120. data/ext/ffi_c/libffi/m4/ax_prepend_flag.m4 +51 -0
  121. data/ext/ffi_c/libffi/m4/ax_require_defined.m4 +37 -0
  122. data/ext/ffi_c/libffi/make_sunver.pl +333 -0
  123. data/ext/ffi_c/libffi/man/Makefile.am +2 -2
  124. data/ext/ffi_c/libffi/man/Makefile.in +174 -57
  125. data/ext/ffi_c/libffi/man/ffi.3 +10 -0
  126. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
  127. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  128. data/ext/ffi_c/libffi/missing +155 -300
  129. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.sln +33 -0
  130. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj +130 -0
  131. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters +57 -0
  132. data/ext/ffi_c/libffi/msvc_build/aarch64/Ffi_staticLib.vcxproj.user +4 -0
  133. data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/ffi.h +511 -0
  134. data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/fficonfig.h +219 -0
  135. data/ext/ffi_c/libffi/msvcc.sh +353 -0
  136. data/ext/ffi_c/libffi/src/aarch64/ffi.c +1142 -0
  137. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +97 -0
  138. data/ext/ffi_c/libffi/src/aarch64/internal.h +100 -0
  139. data/ext/ffi_c/libffi/src/aarch64/sysv.S +695 -0
  140. data/ext/ffi_c/libffi/src/aarch64/win64_armasm.S +506 -0
  141. data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
  142. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
  143. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  144. data/ext/ffi_c/libffi/src/alpha/osf.S +162 -246
  145. data/ext/ffi_c/libffi/src/arc/arcompact.S +210 -0
  146. data/ext/ffi_c/libffi/src/arc/ffi.c +443 -0
  147. data/ext/ffi_c/libffi/src/arc/ffitarget.h +67 -0
  148. data/ext/ffi_c/libffi/src/arm/ffi.c +806 -194
  149. data/ext/ffi_c/libffi/src/arm/ffitarget.h +43 -3
  150. data/ext/ffi_c/libffi/src/arm/internal.h +17 -0
  151. data/ext/ffi_c/libffi/src/arm/sysv.S +381 -231
  152. data/ext/ffi_c/libffi/src/arm/sysv_msvc_arm32.S +311 -0
  153. data/ext/ffi_c/libffi/src/avr32/ffi.c +4 -2
  154. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +8 -3
  155. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  156. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  157. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  158. data/ext/ffi_c/libffi/src/closures.c +574 -100
  159. data/ext/ffi_c/libffi/src/cris/ffi.c +11 -8
  160. data/ext/ffi_c/libffi/src/cris/ffitarget.h +8 -3
  161. data/ext/ffi_c/libffi/src/csky/ffi.c +395 -0
  162. data/ext/ffi_c/libffi/src/csky/ffitarget.h +63 -0
  163. data/ext/ffi_c/libffi/src/csky/sysv.S +371 -0
  164. data/ext/ffi_c/libffi/src/debug.c +8 -3
  165. data/ext/ffi_c/libffi/src/dlmalloc.c +89 -17
  166. data/ext/ffi_c/libffi/src/frv/ffi.c +2 -2
  167. data/ext/ffi_c/libffi/src/frv/ffitarget.h +8 -7
  168. data/ext/ffi_c/libffi/src/ia64/ffi.c +48 -12
  169. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +10 -4
  170. data/ext/ffi_c/libffi/src/ia64/unix.S +28 -3
  171. data/ext/ffi_c/libffi/src/java_raw_api.c +24 -6
  172. data/ext/ffi_c/libffi/src/kvx/asm.h +5 -0
  173. data/ext/ffi_c/libffi/src/kvx/ffi.c +273 -0
  174. data/ext/ffi_c/libffi/src/kvx/ffitarget.h +75 -0
  175. data/ext/ffi_c/libffi/src/kvx/sysv.S +127 -0
  176. data/ext/ffi_c/libffi/src/loongarch64/ffi.c +624 -0
  177. data/ext/ffi_c/libffi/src/loongarch64/ffitarget.h +82 -0
  178. data/ext/ffi_c/libffi/src/loongarch64/sysv.S +327 -0
  179. data/ext/ffi_c/libffi/src/m32r/ffi.c +32 -15
  180. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +8 -3
  181. data/ext/ffi_c/libffi/src/m68k/ffi.c +97 -13
  182. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +8 -3
  183. data/ext/ffi_c/libffi/src/m68k/sysv.S +148 -25
  184. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  185. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  186. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  187. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  188. data/ext/ffi_c/libffi/src/metag/ffitarget.h +53 -0
  189. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  190. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  191. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  192. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  193. data/ext/ffi_c/libffi/src/mips/ffi.c +392 -104
  194. data/ext/ffi_c/libffi/src/mips/ffitarget.h +40 -24
  195. data/ext/ffi_c/libffi/src/mips/n32.S +325 -93
  196. data/ext/ffi_c/libffi/src/mips/o32.S +211 -31
  197. data/ext/ffi_c/libffi/src/moxie/eabi.S +101 -0
  198. data/ext/ffi_c/libffi/src/moxie/ffi.c +310 -0
  199. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  200. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  201. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  202. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  203. data/ext/ffi_c/libffi/src/or1k/ffi.c +341 -0
  204. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  205. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  206. data/ext/ffi_c/libffi/src/pa/ffi.c +68 -111
  207. data/ext/ffi_c/libffi/src/pa/ffi64.c +614 -0
  208. data/ext/ffi_c/libffi/src/pa/ffitarget.h +34 -17
  209. data/ext/ffi_c/libffi/src/pa/hpux32.S +87 -38
  210. data/ext/ffi_c/libffi/src/pa/hpux64.S +681 -0
  211. data/ext/ffi_c/libffi/src/pa/linux.S +109 -39
  212. data/ext/ffi_c/libffi/src/powerpc/aix.S +250 -8
  213. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +255 -4
  214. data/ext/ffi_c/libffi/src/powerpc/asm.h +3 -3
  215. data/ext/ffi_c/libffi/src/powerpc/darwin.S +211 -78
  216. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +356 -102
  217. data/ext/ffi_c/libffi/src/powerpc/ffi.c +108 -1375
  218. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +746 -210
  219. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +1153 -0
  220. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +105 -0
  221. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  222. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +126 -48
  223. data/ext/ffi_c/libffi/src/powerpc/linux64.S +191 -85
  224. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +438 -108
  225. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
  226. data/ext/ffi_c/libffi/src/powerpc/sysv.S +73 -119
  227. data/ext/ffi_c/libffi/src/powerpc/t-aix +5 -0
  228. data/ext/ffi_c/libffi/src/prep_cif.c +141 -32
  229. data/ext/ffi_c/libffi/src/raw_api.c +18 -5
  230. data/ext/ffi_c/libffi/src/riscv/ffi.c +514 -0
  231. data/ext/ffi_c/libffi/src/riscv/ffitarget.h +69 -0
  232. data/ext/ffi_c/libffi/src/riscv/sysv.S +293 -0
  233. data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
  234. data/ext/ffi_c/libffi/src/s390/ffitarget.h +13 -3
  235. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  236. data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
  237. data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
  238. data/ext/ffi_c/libffi/src/sh/ffitarget.h +8 -3
  239. data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
  240. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +8 -3
  241. data/ext/ffi_c/libffi/src/sparc/ffi.c +334 -491
  242. data/ext/ffi_c/libffi/src/sparc/ffi64.c +630 -0
  243. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -5
  244. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  245. data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
  246. data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
  247. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  248. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  249. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  250. data/ext/ffi_c/libffi/src/tramp.c +716 -0
  251. data/ext/ffi_c/libffi/src/types.c +48 -19
  252. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  253. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  254. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  255. data/ext/ffi_c/libffi/src/wasm32/ffi.c +947 -0
  256. data/ext/ffi_c/libffi/src/wasm32/ffitarget.h +62 -0
  257. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  258. data/ext/ffi_c/libffi/src/x86/ffi.c +690 -540
  259. data/ext/ffi_c/libffi/src/x86/ffi64.c +450 -126
  260. data/ext/ffi_c/libffi/src/x86/ffitarget.h +86 -42
  261. data/ext/ffi_c/libffi/src/x86/ffiw64.c +361 -0
  262. data/ext/ffi_c/libffi/src/x86/internal.h +43 -0
  263. data/ext/ffi_c/libffi/src/x86/internal64.h +36 -0
  264. data/ext/ffi_c/libffi/src/x86/sysv.S +1199 -381
  265. data/ext/ffi_c/libffi/src/x86/sysv_intel.S +998 -0
  266. data/ext/ffi_c/libffi/src/x86/unix64.S +587 -298
  267. data/ext/ffi_c/libffi/src/x86/win64.S +251 -457
  268. data/ext/ffi_c/libffi/src/x86/win64_intel.S +238 -0
  269. data/ext/ffi_c/libffi/src/xtensa/ffi.c +306 -0
  270. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +57 -0
  271. data/ext/ffi_c/libffi/src/xtensa/sysv.S +268 -0
  272. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  273. data/ext/ffi_c/libffi/testsuite/Makefile.am +80 -73
  274. data/ext/ffi_c/libffi/testsuite/Makefile.in +251 -117
  275. data/ext/ffi_c/libffi/testsuite/emscripten/build-tests.sh +54 -0
  276. data/ext/ffi_c/libffi/testsuite/emscripten/build.sh +63 -0
  277. data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +86 -0
  278. data/ext/ffi_c/libffi/testsuite/emscripten/node-tests.sh +48 -0
  279. data/ext/ffi_c/libffi/testsuite/emscripten/test.html +7 -0
  280. data/ext/ffi_c/libffi/testsuite/emscripten/test_libffi.py +51 -0
  281. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +682 -0
  282. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +22 -2
  283. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +28 -0
  284. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +78 -0
  285. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +50 -0
  286. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +63 -0
  287. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +1746 -0
  288. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +2885 -0
  289. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +747 -0
  290. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  291. data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +46 -0
  292. data/ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c +41 -0
  293. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +28 -10
  294. data/ext/ffi_c/libffi/testsuite/libffi.call/callback.c +99 -0
  295. data/ext/ffi_c/libffi/testsuite/libffi.call/callback2.c +108 -0
  296. data/ext/ffi_c/libffi/testsuite/libffi.call/callback3.c +114 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.call/callback4.c +119 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +4 -3
  299. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +88 -42
  300. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
  301. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +15 -12
  302. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
  303. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +110 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
  305. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
  309. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  313. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +6 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
  315. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +4 -0
  316. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
  317. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +4 -0
  318. data/ext/ffi_c/libffi/testsuite/libffi.call/s55.c +60 -0
  319. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +9 -10
  320. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  321. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  322. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  323. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
  324. data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +57 -0
  325. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
  326. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
  327. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
  328. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
  329. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
  330. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
  331. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
  332. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
  333. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_2.c +63 -0
  334. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3.c +65 -0
  335. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3f.c +65 -0
  336. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4.c +67 -0
  337. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4f.c +67 -0
  338. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_big.c +93 -0
  339. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_small.c +61 -0
  340. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_2H.c +63 -0
  341. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_8H.c +90 -0
  342. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  343. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +78 -0
  344. data/ext/ffi_c/libffi/testsuite/libffi.call/va_2.c +220 -0
  345. data/ext/ffi_c/libffi/testsuite/libffi.call/va_3.c +154 -0
  346. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +134 -0
  347. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +134 -0
  348. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +140 -0
  349. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure.exp +67 -0
  350. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn0.c +3 -2
  351. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn1.c +2 -0
  352. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn2.c +2 -0
  353. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn3.c +21 -1
  354. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn4.c +2 -0
  355. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn5.c +2 -0
  356. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_fn6.c +2 -0
  357. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/closure_loc_fn0.c +7 -6
  358. data/ext/ffi_c/libffi/testsuite/{libffi.call/closure_stdcall.c → libffi.closures/closure_simple.c} +13 -16
  359. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_12byte.c +22 -4
  360. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_16byte.c +26 -4
  361. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_18byte.c +28 -4
  362. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_19byte.c +33 -4
  363. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_1_1byte.c +8 -4
  364. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_20byte.c +23 -5
  365. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_20byte1.c +25 -5
  366. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_24byte.c +40 -8
  367. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_2byte.c +17 -4
  368. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3_1byte.c +23 -4
  369. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3byte1.c +17 -4
  370. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_3byte2.c +17 -4
  371. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3float.c +113 -0
  372. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_4_1byte.c +26 -4
  373. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_4byte.c +17 -4
  374. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_5_1_byte.c +33 -5
  375. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_5byte.c +23 -5
  376. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_64byte.c +29 -5
  377. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_6_1_byte.c +32 -5
  378. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_6byte.c +28 -6
  379. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_7_1_byte.c +43 -5
  380. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_7byte.c +29 -5
  381. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_8byte.c +18 -4
  382. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_9byte1.c +18 -5
  383. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_9byte2.c +18 -6
  384. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_double.c +23 -5
  385. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_float.c +23 -5
  386. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble.c +24 -5
  387. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble_split.c +44 -31
  388. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_longdouble_split2.c +44 -9
  389. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_pointer.c +23 -5
  390. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint16.c +22 -5
  391. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint32.c +22 -7
  392. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_sint64.c +23 -5
  393. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint16.c +22 -5
  394. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint32.c +23 -5
  395. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_align_uint64.c +24 -5
  396. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_dbls_struct.c +7 -5
  397. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_double_va.c +21 -9
  398. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_float.c +4 -0
  399. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_longdouble.c +13 -3
  400. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_longdouble_va.c +34 -11
  401. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_args.c +70 -0
  402. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c +55 -0
  403. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_schar.c +5 -1
  404. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_sshort.c +6 -1
  405. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_sshortchar.c +9 -1
  406. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_uchar.c +9 -1
  407. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_ushort.c +6 -2
  408. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_multi_ushortchar.c +9 -1
  409. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_pointer.c +7 -2
  410. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_pointer_stack.c +22 -10
  411. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_schar.c +3 -0
  412. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_sint.c +2 -0
  413. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_sshort.c +3 -0
  414. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_struct_va1.c +125 -0
  415. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_uchar.c +3 -0
  416. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_uint.c +4 -0
  417. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint_va.c +49 -0
  418. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulong_va.c +49 -0
  419. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_ulonglong.c +8 -5
  420. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_ushort.c +3 -0
  421. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/err_bad_abi.c +2 -3
  422. data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +1 -0
  423. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/huge_struct.c +57 -56
  424. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct.c +38 -15
  425. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct1.c +9 -9
  426. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct10.c +19 -6
  427. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct11.c +137 -0
  428. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct12.c +86 -0
  429. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct13.c +115 -0
  430. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct2.c +15 -6
  431. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct3.c +15 -6
  432. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct4.c +14 -5
  433. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct5.c +14 -5
  434. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct6.c +17 -6
  435. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct7.c +14 -5
  436. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct8.c +17 -6
  437. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/nested_struct9.c +17 -6
  438. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs1.c +86 -0
  439. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs2.c +102 -0
  440. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs3.c +101 -0
  441. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_large.c +7 -7
  442. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_large2.c +7 -7
  443. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_medium.c +6 -6
  444. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/stret_medium2.c +7 -6
  445. data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/testclosure.c +8 -3
  446. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.closures}/unwindtest.cc +4 -10
  447. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.closures}/unwindtest_ffi_call.cc +4 -2
  448. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  449. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  450. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  451. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  452. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  453. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  454. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  455. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  456. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  457. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  458. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  459. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  460. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  461. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  462. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  463. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  464. data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -10
  465. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  466. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  467. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  468. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  469. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  470. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  471. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  472. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  473. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  474. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  475. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  476. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  477. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  478. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  479. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  480. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  481. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  482. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  483. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  484. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  485. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  486. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  487. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  488. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  489. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  490. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  491. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  492. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  493. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  494. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  495. data/ext/ffi_c/libffi.bsd.mk +14 -8
  496. data/ext/ffi_c/libffi.darwin.mk +56 -26
  497. data/ext/ffi_c/libffi.gnu.mk +9 -6
  498. data/ext/ffi_c/libffi.mk +13 -8
  499. data/ext/ffi_c/libffi.vc.mk +26 -0
  500. data/ext/ffi_c/libffi.vc64.mk +26 -0
  501. data/ext/ffi_c/rbffi.h +34 -6
  502. data/ext/ffi_c/{endian.h → rbffi_endian.h} +21 -2
  503. data/ffi.gemspec +42 -0
  504. data/lib/ffi/abstract_memory.rb +44 -0
  505. data/lib/ffi/autopointer.rb +111 -52
  506. data/lib/ffi/compat.rb +43 -0
  507. data/lib/ffi/data_converter.rb +67 -0
  508. data/lib/ffi/dynamic_library.rb +118 -0
  509. data/lib/ffi/enum.rb +203 -22
  510. data/lib/ffi/errno.rb +27 -12
  511. data/lib/ffi/ffi.rb +88 -11
  512. data/lib/ffi/function.rb +71 -0
  513. data/lib/ffi/io.rb +35 -14
  514. data/lib/ffi/library.rb +382 -96
  515. data/lib/ffi/library_path.rb +109 -0
  516. data/lib/ffi/managedstruct.rb +64 -35
  517. data/lib/ffi/memorypointer.rb +1 -33
  518. data/lib/ffi/platform/aarch64-darwin/types.conf +130 -0
  519. data/lib/ffi/platform/aarch64-freebsd/types.conf +128 -0
  520. data/lib/ffi/platform/aarch64-freebsd12/types.conf +181 -0
  521. data/lib/ffi/platform/aarch64-linux/types.conf +175 -0
  522. data/lib/ffi/platform/aarch64-openbsd/types.conf +134 -0
  523. data/lib/ffi/platform/aarch64-windows/types.conf +52 -0
  524. data/lib/ffi/platform/arm-freebsd/types.conf +152 -0
  525. data/lib/ffi/platform/arm-freebsd12/types.conf +152 -0
  526. data/lib/ffi/platform/arm-linux/types.conf +132 -0
  527. data/lib/ffi/platform/hppa1.1-linux/types.conf +178 -0
  528. data/lib/ffi/platform/hppa2.0-linux/types.conf +178 -0
  529. data/lib/ffi/platform/i386-cygwin/types.conf +3 -0
  530. data/lib/ffi/platform/i386-darwin/types.conf +100 -0
  531. data/lib/ffi/platform/i386-freebsd/types.conf +152 -0
  532. data/lib/ffi/platform/i386-freebsd12/types.conf +152 -0
  533. data/lib/ffi/platform/i386-gnu/types.conf +107 -0
  534. data/lib/ffi/platform/i386-linux/types.conf +103 -0
  535. data/lib/ffi/platform/i386-netbsd/types.conf +126 -0
  536. data/lib/ffi/platform/i386-openbsd/types.conf +128 -0
  537. data/lib/ffi/platform/i386-solaris/types.conf +122 -0
  538. data/lib/ffi/platform/i386-windows/types.conf +52 -0
  539. data/lib/ffi/platform/ia64-linux/types.conf +104 -0
  540. data/lib/ffi/platform/loongarch64-linux/types.conf +141 -0
  541. data/lib/ffi/platform/mips-linux/types.conf +102 -0
  542. data/lib/ffi/platform/mips64-linux/types.conf +104 -0
  543. data/lib/ffi/platform/mips64el-linux/types.conf +104 -0
  544. data/lib/ffi/platform/mipsel-linux/types.conf +102 -0
  545. data/lib/ffi/platform/mipsisa32r6-linux/types.conf +102 -0
  546. data/lib/ffi/platform/mipsisa32r6el-linux/types.conf +102 -0
  547. data/lib/ffi/platform/mipsisa64r6-linux/types.conf +104 -0
  548. data/lib/ffi/platform/mipsisa64r6el-linux/types.conf +104 -0
  549. data/lib/ffi/platform/powerpc-aix/types.conf +180 -0
  550. data/lib/ffi/platform/powerpc-darwin/types.conf +100 -0
  551. data/lib/ffi/platform/powerpc-linux/types.conf +130 -0
  552. data/lib/ffi/platform/powerpc-openbsd/types.conf +156 -0
  553. data/lib/ffi/platform/powerpc64-linux/types.conf +104 -0
  554. data/lib/ffi/platform/powerpc64le-linux/types.conf +100 -0
  555. data/lib/ffi/platform/riscv64-linux/types.conf +104 -0
  556. data/lib/ffi/platform/s390-linux/types.conf +102 -0
  557. data/lib/ffi/platform/s390x-linux/types.conf +102 -0
  558. data/lib/ffi/platform/sparc-linux/types.conf +102 -0
  559. data/lib/ffi/platform/sparc-solaris/types.conf +128 -0
  560. data/lib/ffi/platform/sparcv9-linux/types.conf +102 -0
  561. data/lib/ffi/platform/sparcv9-openbsd/types.conf +156 -0
  562. data/lib/ffi/platform/sparcv9-solaris/types.conf +128 -0
  563. data/lib/ffi/platform/sw_64-linux/types.conf +141 -0
  564. data/lib/ffi/platform/x86_64-cygwin/types.conf +3 -0
  565. data/lib/ffi/platform/x86_64-darwin/types.conf +130 -0
  566. data/lib/ffi/platform/x86_64-dragonflybsd/types.conf +130 -0
  567. data/lib/ffi/platform/x86_64-freebsd/types.conf +128 -0
  568. data/lib/ffi/platform/x86_64-freebsd12/types.conf +158 -0
  569. data/lib/ffi/platform/x86_64-haiku/types.conf +117 -0
  570. data/lib/ffi/platform/x86_64-linux/types.conf +132 -0
  571. data/lib/ffi/platform/x86_64-msys/types.conf +119 -0
  572. data/lib/ffi/platform/x86_64-netbsd/types.conf +128 -0
  573. data/lib/ffi/platform/x86_64-openbsd/types.conf +134 -0
  574. data/lib/ffi/platform/x86_64-solaris/types.conf +122 -0
  575. data/lib/ffi/platform/x86_64-windows/types.conf +52 -0
  576. data/lib/ffi/platform.rb +110 -34
  577. data/lib/ffi/pointer.rb +117 -90
  578. data/lib/ffi/struct.rb +101 -70
  579. data/lib/ffi/struct_by_reference.rb +72 -0
  580. data/lib/ffi/struct_layout.rb +96 -0
  581. data/lib/ffi/struct_layout_builder.rb +90 -21
  582. data/lib/ffi/tools/const_generator.rb +86 -31
  583. data/lib/ffi/tools/generator.rb +49 -2
  584. data/lib/ffi/tools/generator_task.rb +13 -16
  585. data/lib/ffi/tools/struct_generator.rb +6 -5
  586. data/lib/ffi/tools/types_generator.rb +25 -11
  587. data/lib/ffi/types.rb +105 -36
  588. data/lib/ffi/union.rb +23 -12
  589. data/lib/ffi/variadic.rb +44 -29
  590. data/lib/ffi/version.rb +3 -0
  591. data/lib/ffi.rb +25 -9
  592. data/rakelib/ffi_gem_helper.rb +65 -0
  593. data/samples/getlogin.rb +8 -0
  594. data/samples/getpid.rb +8 -0
  595. data/samples/gettimeofday.rb +18 -0
  596. data/samples/hello.rb +8 -0
  597. data/samples/hello_ractor.rb +11 -0
  598. data/samples/inotify.rb +60 -0
  599. data/samples/pty.rb +75 -0
  600. data/samples/qsort.rb +20 -0
  601. data/samples/qsort_ractor.rb +28 -0
  602. data/sig/ffi/abstract_memory.rbs +165 -0
  603. data/sig/ffi/auto_pointer.rbs +26 -0
  604. data/sig/ffi/buffer.rbs +18 -0
  605. data/sig/ffi/data_converter.rbs +10 -0
  606. data/sig/ffi/dynamic_library.rbs +9 -0
  607. data/sig/ffi/enum.rbs +38 -0
  608. data/sig/ffi/function.rbs +39 -0
  609. data/sig/ffi/library.rbs +42 -0
  610. data/sig/ffi/native_type.rbs +86 -0
  611. data/sig/ffi/pointer.rbs +42 -0
  612. data/sig/ffi/struct.rbs +76 -0
  613. data/sig/ffi/struct_by_reference.rbs +11 -0
  614. data/sig/ffi/struct_by_value.rbs +7 -0
  615. data/sig/ffi/struct_layout.rbs +9 -0
  616. data/sig/ffi/struct_layout_builder.rbs +5 -0
  617. data/sig/ffi/type.rbs +39 -0
  618. data/sig/ffi.rbs +26 -0
  619. data.tar.gz.sig +0 -0
  620. metadata +547 -248
  621. metadata.gz.sig +0 -0
  622. data/History.txt +0 -109
  623. data/README.rdoc +0 -70
  624. data/ext/ffi_c/DataConverter.c +0 -62
  625. data/ext/ffi_c/StructByReference.c +0 -150
  626. data/ext/ffi_c/StructByReference.h +0 -50
  627. data/ext/ffi_c/libffi/ChangeLog.libffi +0 -658
  628. data/ext/ffi_c/libffi/ChangeLog.libgcj +0 -40
  629. data/ext/ffi_c/libffi/ChangeLog.v1 +0 -764
  630. data/ext/ffi_c/libffi/README +0 -306
  631. data/ext/ffi_c/libffi/aclocal.m4 +0 -8998
  632. data/ext/ffi_c/libffi/depcomp +0 -584
  633. data/ext/ffi_c/libffi/doc/libffi.info +0 -533
  634. data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
  635. data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7360
  636. data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -368
  637. data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -123
  638. data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
  639. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -92
  640. data/ext/ffi_c/libffi/mdate-sh +0 -201
  641. data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
  642. data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
  643. data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
  644. data/ext/ffi_c/libffi/src/x86/win32.S +0 -877
  645. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
  646. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
  647. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
  648. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
  649. data/ext/ffi_c/libffi/texinfo.tex +0 -7210
  650. data/gen/Rakefile +0 -14
  651. data/spec/ffi/async_callback_spec.rb +0 -23
  652. data/spec/ffi/bool_spec.rb +0 -24
  653. data/spec/ffi/buffer_spec.rb +0 -202
  654. data/spec/ffi/callback_spec.rb +0 -653
  655. data/spec/ffi/custom_param_type.rb +0 -31
  656. data/spec/ffi/custom_type_spec.rb +0 -73
  657. data/spec/ffi/enum_spec.rb +0 -183
  658. data/spec/ffi/errno_spec.rb +0 -13
  659. data/spec/ffi/ffi_spec.rb +0 -24
  660. data/spec/ffi/function_spec.rb +0 -73
  661. data/spec/ffi/library_spec.rb +0 -174
  662. data/spec/ffi/managed_struct_spec.rb +0 -56
  663. data/spec/ffi/number_spec.rb +0 -231
  664. data/spec/ffi/pointer_spec.rb +0 -210
  665. data/spec/ffi/rbx/attach_function_spec.rb +0 -28
  666. data/spec/ffi/rbx/memory_pointer_spec.rb +0 -109
  667. data/spec/ffi/rbx/spec_helper.rb +0 -1
  668. data/spec/ffi/rbx/struct_spec.rb +0 -13
  669. data/spec/ffi/spec_helper.rb +0 -21
  670. data/spec/ffi/string_spec.rb +0 -103
  671. data/spec/ffi/strptr_spec.rb +0 -36
  672. data/spec/ffi/struct_callback_spec.rb +0 -64
  673. data/spec/ffi/struct_initialize_spec.rb +0 -30
  674. data/spec/ffi/struct_packed_spec.rb +0 -46
  675. data/spec/ffi/struct_spec.rb +0 -638
  676. data/spec/ffi/typedef_spec.rb +0 -62
  677. data/spec/ffi/union_spec.rb +0 -60
  678. data/spec/ffi/variadic_spec.rb +0 -84
  679. data/spec/spec.opts +0 -4
  680. data/tasks/ann.rake +0 -80
  681. data/tasks/extension.rake +0 -25
  682. data/tasks/gem.rake +0 -200
  683. data/tasks/git.rake +0 -41
  684. data/tasks/notes.rake +0 -27
  685. data/tasks/post_load.rake +0 -34
  686. data/tasks/rdoc.rake +0 -50
  687. data/tasks/rubyforge.rake +0 -55
  688. data/tasks/setup.rb +0 -301
  689. data/tasks/spec.rake +0 -54
  690. data/tasks/svn.rake +0 -47
  691. data/tasks/test.rake +0 -40
  692. /data/ext/ffi_c/libffi/testsuite/libffi.call/{pyobjc-tc.c → pyobjc_tc.c} +0 -0
  693. /data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/cls_double.c +0 -0
  694. /data/ext/ffi_c/libffi/testsuite/{libffi.call → libffi.closures}/problem1.c +0 -0
@@ -1,653 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
2
-
3
- describe "Callback" do
4
- # module LibC
5
- # extend FFI::Library
6
- # callback :qsort_cmp, [ :pointer, :pointer ], :int
7
- # attach_function :qsort, [ :pointer, :int, :int, :qsort_cmp ], :int
8
- # end
9
- # it "arguments get passed correctly" do
10
- # p = MemoryPointer.new(:int, 2)
11
- # p.put_array_of_int32(0, [ 1 , 2 ])
12
- # args = []
13
- # cmp = proc do |p1, p2| args.push(p1.get_int(0)); args.push(p2.get_int(0)); 0; end
14
- # # this is a bit dodgey, as it relies on qsort passing the args in order
15
- # LibC.qsort(p, 2, 4, cmp)
16
- # args.should == [ 1, 2 ]
17
- # end
18
- #
19
- # it "Block can be substituted for Callback as last argument" do
20
- # p = MemoryPointer.new(:int, 2)
21
- # p.put_array_of_int32(0, [ 1 , 2 ])
22
- # args = []
23
- # # this is a bit dodgey, as it relies on qsort passing the args in order
24
- # LibC.qsort(p, 2, 4) do |p1, p2|
25
- # args.push(p1.get_int(0))
26
- # args.push(p2.get_int(0))
27
- # 0
28
- # end
29
- # args.should == [ 1, 2 ]
30
- # end
31
- module LibTest
32
- extend FFI::Library
33
- ffi_lib TestLibrary::PATH
34
- class S8F32S32 < FFI::Struct
35
- layout :s8, :char, :f32, :float, :s32, :int
36
- end
37
-
38
- callback :cbVrS8, [ ], :char
39
- callback :cbVrU8, [ ], :uchar
40
- callback :cbVrS16, [ ], :short
41
- callback :cbVrU16, [ ], :ushort
42
- callback :cbVrS32, [ ], :int
43
- callback :cbVrU32, [ ], :uint
44
- callback :cbVrL, [ ], :long
45
- callback :cbVrUL, [ ], :ulong
46
- callback :cbVrS64, [ ], :long_long
47
- callback :cbVrU64, [ ], :ulong_long
48
- callback :cbVrP, [], :pointer
49
- callback :cbVrZ, [], :bool
50
- callback :cbCrV, [ :char ], :void
51
- callback :cbSrV, [ :short ], :void
52
- callback :cbIrV, [ :int ], :void
53
- callback :cbLrV, [ :long ], :void
54
- callback :cbULrV, [ :ulong ], :void
55
- callback :cbLrV, [ :long_long ], :void
56
- callback :cbVrT, [ ], S8F32S32.by_value
57
- callback :cbTrV, [ S8F32S32.by_value ], :void
58
- callback :cbYrV, [ S8F32S32.ptr ], :void
59
- callback :cbVrY, [ ], S8F32S32.ptr
60
-
61
- attach_function :testCallbackVrS8, :testClosureVrB, [ :cbVrS8 ], :char
62
- attach_function :testCallbackVrU8, :testClosureVrB, [ :cbVrU8 ], :uchar
63
- attach_function :testCallbackVrS16, :testClosureVrS, [ :cbVrS16 ], :short
64
- attach_function :testCallbackVrU16, :testClosureVrS, [ :cbVrU16 ], :ushort
65
- attach_function :testCallbackVrS32, :testClosureVrI, [ :cbVrS32 ], :int
66
- attach_function :testCallbackVrU32, :testClosureVrI, [ :cbVrU32 ], :uint
67
- attach_function :testCallbackVrL, :testClosureVrL, [ :cbVrL ], :long
68
- attach_function :testCallbackVrZ, :testClosureVrZ, [ :cbVrZ ], :bool
69
- attach_function :testCallbackVrUL, :testClosureVrL, [ :cbVrUL ], :ulong
70
- attach_function :testCallbackVrS64, :testClosureVrLL, [ :cbVrS64 ], :long_long
71
- attach_function :testCallbackVrU64, :testClosureVrLL, [ :cbVrU64 ], :ulong_long
72
- attach_function :testCallbackVrP, :testClosureVrP, [ :cbVrP ], :pointer
73
- attach_function :testCallbackVrY, :testClosureVrP, [ :cbVrY ], S8F32S32.ptr
74
- attach_function :testCallbackCrV, :testClosureBrV, [ :cbCrV, :char ], :void
75
- attach_function :testCallbackVrT, :testClosureVrT, [ :cbVrT ], S8F32S32.by_value
76
- attach_function :testCallbackTrV, :testClosureTrV, [ :cbTrV, S8F32S32.ptr ], :void
77
- attach_variable :cbVrS8, :gvar_pointer, :cbVrS8
78
- attach_variable :pVrS8, :gvar_pointer, :pointer
79
- attach_function :testGVarCallbackVrS8, :testClosureVrB, [ :pointer ], :char
80
- attach_function :testOptionalCallbackCrV, :testOptionalClosureBrV, [ :cbCrV, :char ], :void
81
-
82
- end
83
- it "function with Callback plus another arg should raise error if no arg given" do
84
- lambda { LibTest.testCallbackCrV { |*a| }}.should raise_error
85
- end
86
- it "returning :char (0)" do
87
- LibTest.testCallbackVrS8 { 0 }.should == 0
88
- end
89
- it "returning :char (127)" do
90
- LibTest.testCallbackVrS8 { 127 }.should == 127
91
- end
92
- it "returning :char (-128)" do
93
- LibTest.testCallbackVrS8 { -128 }.should == -128
94
- end
95
- # test wrap around
96
- it "returning :char (128)" do
97
- LibTest.testCallbackVrS8 { 128 }.should == -128
98
- end
99
- it "returning :char (255)" do
100
- LibTest.testCallbackVrS8 { 0xff }.should == -1
101
- end
102
- it "returning :uchar (0)" do
103
- LibTest.testCallbackVrU8 { 0 }.should == 0
104
- end
105
- it "returning :uchar (0xff)" do
106
- LibTest.testCallbackVrU8 { 0xff }.should == 0xff
107
- end
108
- it "returning :uchar (-1)" do
109
- LibTest.testCallbackVrU8 { -1 }.should == 0xff
110
- end
111
- it "returning :uchar (128)" do
112
- LibTest.testCallbackVrU8 { 128 }.should == 128
113
- end
114
- it "returning :uchar (-128)" do
115
- LibTest.testCallbackVrU8 { -128 }.should == 128
116
- end
117
- it "returning :short (0)" do
118
- LibTest.testCallbackVrS16 { 0 }.should == 0
119
- end
120
- it "returning :short (0x7fff)" do
121
- LibTest.testCallbackVrS16 { 0x7fff }.should == 0x7fff
122
- end
123
- # test wrap around
124
- it "returning :short (0x8000)" do
125
- LibTest.testCallbackVrS16 { 0x8000 }.should == -0x8000
126
- end
127
- it "returning :short (0xffff)" do
128
- LibTest.testCallbackVrS16 { 0xffff }.should == -1
129
- end
130
- it "returning :ushort (0)" do
131
- LibTest.testCallbackVrU16 { 0 }.should == 0
132
- end
133
- it "returning :ushort (0x7fff)" do
134
- LibTest.testCallbackVrU16 { 0x7fff }.should == 0x7fff
135
- end
136
- it "returning :ushort (0x8000)" do
137
- LibTest.testCallbackVrU16 { 0x8000 }.should == 0x8000
138
- end
139
- it "returning :ushort (0xffff)" do
140
- LibTest.testCallbackVrU16 { 0xffff }.should == 0xffff
141
- end
142
- it "returning :ushort (-1)" do
143
- LibTest.testCallbackVrU16 { -1 }.should == 0xffff
144
- end
145
- it "returning :int (0)" do
146
- LibTest.testCallbackVrS32 { 0 }.should == 0
147
- end
148
- it "returning :int (0x7fffffff)" do
149
- LibTest.testCallbackVrS32 { 0x7fffffff }.should == 0x7fffffff
150
- end
151
- # test wrap around
152
- it "returning :int (-0x80000000)" do
153
- LibTest.testCallbackVrS32 { -0x80000000 }.should == -0x80000000
154
- end
155
- it "returning :int (-1)" do
156
- LibTest.testCallbackVrS32 { -1 }.should == -1
157
- end
158
- it "returning :uint (0)" do
159
- LibTest.testCallbackVrU32 { 0 }.should == 0
160
- end
161
- it "returning :uint (0x7fffffff)" do
162
- LibTest.testCallbackVrU32 { 0x7fffffff }.should == 0x7fffffff
163
- end
164
- # test wrap around
165
- it "returning :uint (0x80000000)" do
166
- LibTest.testCallbackVrU32 { 0x80000000 }.should == 0x80000000
167
- end
168
- it "returning :uint (0xffffffff)" do
169
- LibTest.testCallbackVrU32 { 0xffffffff }.should == 0xffffffff
170
- end
171
- it "returning :uint (-1)" do
172
- LibTest.testCallbackVrU32 { -1 }.should == 0xffffffff
173
- end
174
- it "returning :long (0)" do
175
- LibTest.testCallbackVrL { 0 }.should == 0
176
- end
177
- it "returning :long (0x7fffffff)" do
178
- LibTest.testCallbackVrL { 0x7fffffff }.should == 0x7fffffff
179
- end
180
- # test wrap around
181
- it "returning :long (-0x80000000)" do
182
- LibTest.testCallbackVrL { -0x80000000 }.should == -0x80000000
183
- end
184
- it "returning :long (-1)" do
185
- LibTest.testCallbackVrL { -1 }.should == -1
186
- end
187
- it "returning :ulong (0)" do
188
- LibTest.testCallbackVrUL { 0 }.should == 0
189
- end
190
- it "returning :ulong (0x7fffffff)" do
191
- LibTest.testCallbackVrUL { 0x7fffffff }.should == 0x7fffffff
192
- end
193
- # test wrap around
194
- it "returning :ulong (0x80000000)" do
195
- LibTest.testCallbackVrUL { 0x80000000 }.should == 0x80000000
196
- end
197
- it "returning :ulong (0xffffffff)" do
198
- LibTest.testCallbackVrUL { 0xffffffff }.should == 0xffffffff
199
- end
200
- it "Callback returning :ulong (-1)" do
201
- if FFI::Platform::LONG_SIZE == 32
202
- LibTest.testCallbackVrUL { -1 }.should == 0xffffffff
203
- else
204
- LibTest.testCallbackVrUL { -1 }.should == 0xffffffffffffffff
205
- end
206
- end
207
- it "returning :long_long (0)" do
208
- LibTest.testCallbackVrS64 { 0 }.should == 0
209
- end
210
- it "returning :long_long (0x7fffffffffffffff)" do
211
- LibTest.testCallbackVrS64 { 0x7fffffffffffffff }.should == 0x7fffffffffffffff
212
- end
213
- # test wrap around
214
- it "returning :long_long (-0x8000000000000000)" do
215
- LibTest.testCallbackVrS64 { -0x8000000000000000 }.should == -0x8000000000000000
216
- end
217
- it "returning :long_long (-1)" do
218
- LibTest.testCallbackVrS64 { -1 }.should == -1
219
- end
220
- it "returning bool" do
221
- LibTest.testCallbackVrZ { true }.should be_true
222
- end
223
- it "returning :pointer (nil)" do
224
- LibTest.testCallbackVrP { nil }.null?.should be_true
225
- end
226
- it "returning :pointer (MemoryPointer)" do
227
- p = FFI::MemoryPointer.new :long
228
- LibTest.testCallbackVrP { p }.should == p
229
- end
230
-
231
-
232
- it "returning struct by value" do
233
- s = LibTest::S8F32S32.new
234
- s[:s8] = 0x12
235
- s[:s32] = 0x1eefbeef
236
- s[:f32] = 1.234567
237
- ret = LibTest.testCallbackVrT { s }
238
- ret[:s8].should == s[:s8]
239
- ret[:f32].should == s[:f32]
240
- ret[:s32].should == s[:s32]
241
-
242
- end
243
-
244
- it "struct by value parameter" do
245
- s = LibTest::S8F32S32.new
246
- s[:s8] = 0x12
247
- s[:s32] = 0x1eefbeef
248
- s[:f32] = 1.234567
249
- s2 = LibTest::S8F32S32.new
250
- LibTest.testCallbackTrV(s) do |struct|
251
- s2[:s8] = struct[:s8]
252
- s2[:f32] = struct[:f32]
253
- s2[:s32] = struct[:s32]
254
- end
255
- end
256
-
257
-
258
- it "global variable" do
259
- proc = Proc.new { 0x1e }
260
- LibTest.cbVrS8 = proc
261
- LibTest.testGVarCallbackVrS8(LibTest.pVrS8).should == 0x1e
262
- end
263
-
264
- describe "When the callback is considered optional by the underlying library" do
265
- it "should handle receiving 'nil' in place of the closure" do
266
- LibTest.testOptionalCallbackCrV(nil, 13)
267
- end
268
- end
269
-
270
- describe 'when inlined' do
271
- it 'could be anonymous' do
272
- module LibTest
273
- extend FFI::Library
274
- ffi_lib TestLibrary::PATH
275
- attach_function :testCallbackVrS8, :testClosureVrB, [ callback([ ], :char) ], :char
276
- end
277
- LibTest.testCallbackVrS8 { 0 }.should == 0
278
- end
279
- end
280
-
281
- describe "as return value" do
282
-
283
- it "should not blow up when a callback is defined that returns a callback" do
284
- module LibTest
285
- extend FFI::Library
286
- ffi_lib TestLibrary::PATH
287
- callback :cb_return_type_1, [ :short ], :short
288
- callback :cb_lookup_1, [ :short ], :cb_return_type_1
289
- attach_function :testReturnsCallback_1, :testReturnsClosure, [ :cb_lookup_1, :short ], :cb_return_type_1
290
- end
291
- end
292
-
293
- it "should return a callback" do
294
- module LibTest
295
- extend FFI::Library
296
- ffi_lib TestLibrary::PATH
297
- callback :cb_return_type, [ :int ], :int
298
- callback :cb_lookup, [ ], :cb_return_type
299
- attach_function :testReturnsCallback, :testReturnsClosure, [ :cb_lookup, :int ], :int
300
- end
301
-
302
- lookup_proc_called = false
303
- return_proc_called = false
304
-
305
- return_proc = Proc.new do |a|
306
- return_proc_called = true
307
- a * 2
308
- end
309
- lookup_proc = Proc.new do
310
- lookup_proc_called = true
311
- return_proc
312
- end
313
-
314
- val = LibTest.testReturnsCallback(lookup_proc, 0x1234)
315
- val.should == 0x1234 * 2
316
- lookup_proc_called.should be_true
317
- return_proc_called.should be_true
318
- end
319
-
320
- it "should return a method callback" do
321
- module LibTest
322
- extend FFI::Library
323
- ffi_lib TestLibrary::PATH
324
- callback :cb_return_type, [ :int ], :int
325
- callback :cb_lookup, [ ], :cb_return_type
326
- attach_function :testReturnsCallback, :testReturnsClosure, [ :cb_lookup, :int ], :int
327
- end
328
- module MethodCallback
329
- def self.lookup
330
- method(:perform)
331
- end
332
- def self.perform num
333
- num * 2
334
- end
335
- end
336
-
337
- LibTest.testReturnsCallback(MethodCallback.method(:lookup), 0x1234).should == 0x2468
338
- end
339
-
340
- it 'should not blow up when a callback takes a callback as argument' do
341
- module LibTest
342
- extend FFI::Library
343
- ffi_lib TestLibrary::PATH
344
- callback :cb_argument, [ :int ], :int
345
- callback :cb_with_cb_argument, [ :cb_argument, :int ], :int
346
- attach_function :testCallbackAsArgument, :testArgumentClosure, [ :cb_with_cb_argument, :int ], :int
347
- end
348
- end
349
- it 'should be able to use the callback argument' do
350
- module LibTest
351
- extend FFI::Library
352
- ffi_lib TestLibrary::PATH
353
- callback :cb_argument, [ :int ], :int
354
- callback :cb_with_cb_argument, [ :cb_argument, :int ], :int
355
- attach_function :testCallbackAsArgument, :testArgumentClosure, [ :cb_with_cb_argument, :cb_argument, :int ], :int
356
- end
357
- callback_arg_called = false
358
- callback_with_callback_arg_called = false
359
- callback_arg = Proc.new do |val|
360
- callback_arg_called = true
361
- val * 2
362
- end
363
- callback_with_callback_arg = Proc.new do |cb, val|
364
- callback_with_callback_arg_called = true
365
- cb.call(val)
366
- end
367
- val = LibTest.testCallbackAsArgument(callback_with_callback_arg, callback_arg, 0xff1)
368
- val.should == 0xff1 * 2
369
- callback_arg_called.should be_true
370
- callback_with_callback_arg_called.should be_true
371
- end
372
- it 'function returns callable object' do
373
- module LibTest
374
- extend FFI::Library
375
- ffi_lib TestLibrary::PATH
376
- callback :funcptr, [ :int ], :int
377
- attach_function :testReturnsFunctionPointer, [ ], :funcptr
378
- end
379
- f = LibTest.testReturnsFunctionPointer
380
- f.call(3).should == 6
381
- end
382
- end
383
-
384
- end
385
-
386
-
387
- describe "Callback with " do
388
- #
389
- # Test callbacks that take an argument, returning void
390
- #
391
- module LibTest
392
- extend FFI::Library
393
- ffi_lib TestLibrary::PATH
394
-
395
- class S8F32S32 < FFI::Struct
396
- layout :s8, :char, :f32, :float, :s32, :int
397
- end
398
-
399
- callback :cbS8rV, [ :char ], :void
400
- callback :cbU8rV, [ :uchar ], :void
401
- callback :cbS16rV, [ :short ], :void
402
- callback :cbU16rV, [ :ushort ], :void
403
-
404
- callback :cbZrV, [ :bool ], :void
405
- callback :cbS32rV, [ :int ], :void
406
- callback :cbU32rV, [ :uint ], :void
407
-
408
- callback :cbLrV, [ :long ], :void
409
- callback :cbULrV, [ :ulong ], :void
410
- callback :cbArV, [ :string ], :void
411
- callback :cbPrV, [ :pointer], :void
412
- callback :cbYrV, [ S8F32S32.ptr ], :void
413
-
414
- callback :cbS64rV, [ :long_long ], :void
415
- attach_function :testCallbackCrV, :testClosureBrV, [ :cbS8rV, :char ], :void
416
- attach_function :testCallbackU8rV, :testClosureBrV, [ :cbU8rV, :uchar ], :void
417
- attach_function :testCallbackSrV, :testClosureSrV, [ :cbS16rV, :short ], :void
418
- attach_function :testCallbackU16rV, :testClosureSrV, [ :cbU16rV, :ushort ], :void
419
- attach_function :testCallbackZrV, :testClosureZrV, [ :cbZrV, :bool ], :void
420
- attach_function :testCallbackIrV, :testClosureIrV, [ :cbS32rV, :int ], :void
421
- attach_function :testCallbackU32rV, :testClosureIrV, [ :cbU32rV, :uint ], :void
422
-
423
- attach_function :testCallbackLrV, :testClosureLrV, [ :cbLrV, :long ], :void
424
- attach_function :testCallbackULrV, :testClosureULrV, [ :cbULrV, :ulong ], :void
425
-
426
- attach_function :testCallbackLLrV, :testClosureLLrV, [ :cbS64rV, :long_long ], :void
427
- attach_function :testCallbackArV, :testClosurePrV, [ :cbArV, :string ], :void
428
- attach_function :testCallbackPrV, :testClosurePrV, [ :cbPrV, :pointer], :void
429
- attach_function :testCallbackYrV, :testClosurePrV, [ :cbYrV, S8F32S32.in ], :void
430
- end
431
- it ":char (0) argument" do
432
- v = 0xdeadbeef
433
- LibTest.testCallbackCrV(0) { |i| v = i }
434
- v.should == 0
435
- end
436
- it ":char (127) argument" do
437
- v = 0xdeadbeef
438
- LibTest.testCallbackCrV(127) { |i| v = i }
439
- v.should == 127
440
- end
441
- it ":char (-128) argument" do
442
- v = 0xdeadbeef
443
- LibTest.testCallbackCrV(-128) { |i| v = i }
444
- v.should == -128
445
- end
446
- it ":char (-1) argument" do
447
- v = 0xdeadbeef
448
- LibTest.testCallbackCrV(-1) { |i| v = i }
449
- v.should == -1
450
- end
451
- it ":uchar (0) argument" do
452
- v = 0xdeadbeef
453
- LibTest.testCallbackU8rV(0) { |i| v = i }
454
- v.should == 0
455
- end
456
- it ":uchar (127) argument" do
457
- v = 0xdeadbeef
458
- LibTest.testCallbackU8rV(127) { |i| v = i }
459
- v.should == 127
460
- end
461
- it ":uchar (128) argument" do
462
- v = 0xdeadbeef
463
- LibTest.testCallbackU8rV(128) { |i| v = i }
464
- v.should == 128
465
- end
466
- it ":uchar (255) argument" do
467
- v = 0xdeadbeef
468
- LibTest.testCallbackU8rV(255) { |i| v = i }
469
- v.should == 255
470
- end
471
-
472
- it ":short (0) argument" do
473
- v = 0xdeadbeef
474
- LibTest.testCallbackSrV(0) { |i| v = i }
475
- v.should == 0
476
- end
477
- it ":short (0x7fff) argument" do
478
- v = 0xdeadbeef
479
- LibTest.testCallbackSrV(0x7fff) { |i| v = i }
480
- v.should == 0x7fff
481
- end
482
- it ":short (-0x8000) argument" do
483
- v = 0xdeadbeef
484
- LibTest.testCallbackSrV(-0x8000) { |i| v = i }
485
- v.should == -0x8000
486
- end
487
- it ":short (-1) argument" do
488
- v = 0xdeadbeef
489
- LibTest.testCallbackSrV(-1) { |i| v = i }
490
- v.should == -1
491
- end
492
- it ":ushort (0) argument" do
493
- v = 0xdeadbeef
494
- LibTest.testCallbackU16rV(0) { |i| v = i }
495
- v.should == 0
496
- end
497
- it ":ushort (0x7fff) argument" do
498
- v = 0xdeadbeef
499
- LibTest.testCallbackU16rV(0x7fff) { |i| v = i }
500
- v.should == 0x7fff
501
- end
502
- it ":ushort (0x8000) argument" do
503
- v = 0xdeadbeef
504
- LibTest.testCallbackU16rV(0x8000) { |i| v = i }
505
- v.should == 0x8000
506
- end
507
- it ":ushort (0xffff) argument" do
508
- v = 0xdeadbeef
509
- LibTest.testCallbackU16rV(0xffff) { |i| v = i }
510
- v.should == 0xffff
511
- end
512
- it ":bool (true) argument" do
513
- v = false
514
- LibTest.testCallbackZrV(true) { |i| v = i }
515
- v.should be_true
516
- end
517
- it ":int (0) argument" do
518
- v = 0xdeadbeef
519
- LibTest.testCallbackIrV(0) { |i| v = i }
520
- v.should == 0
521
- end
522
- it ":int (0x7fffffff) argument" do
523
- v = 0xdeadbeef
524
- LibTest.testCallbackIrV(0x7fffffff) { |i| v = i }
525
- v.should == 0x7fffffff
526
- end
527
- it ":int (-0x80000000) argument" do
528
- v = 0xdeadbeef
529
- LibTest.testCallbackIrV(-0x80000000) { |i| v = i }
530
- v.should == -0x80000000
531
- end
532
- it ":int (-1) argument" do
533
- v = 0xdeadbeef
534
- LibTest.testCallbackIrV(-1) { |i| v = i }
535
- v.should == -1
536
- end
537
- it ":uint (0) argument" do
538
- v = 0xdeadbeef
539
- LibTest.testCallbackU32rV(0) { |i| v = i }
540
- v.should == 0
541
- end
542
- it ":uint (0x7fffffff) argument" do
543
- v = 0xdeadbeef
544
- LibTest.testCallbackU32rV(0x7fffffff) { |i| v = i }
545
- v.should == 0x7fffffff
546
- end
547
- it ":uint (0x80000000) argument" do
548
- v = 0xdeadbeef
549
- LibTest.testCallbackU32rV(0x80000000) { |i| v = i }
550
- v.should == 0x80000000
551
- end
552
- it ":uint (0xffffffff) argument" do
553
- v = 0xdeadbeef
554
- LibTest.testCallbackU32rV(0xffffffff) { |i| v = i }
555
- v.should == 0xffffffff
556
- end
557
- it ":long (0) argument" do
558
- v = 0xdeadbeef
559
- LibTest.testCallbackLrV(0) { |i| v = i }
560
- v.should == 0
561
- end
562
- it ":long (0x7fffffff) argument" do
563
- v = 0xdeadbeef
564
- LibTest.testCallbackLrV(0x7fffffff) { |i| v = i }
565
- v.should == 0x7fffffff
566
- end
567
- it ":long (-0x80000000) argument" do
568
- v = 0xdeadbeef
569
- LibTest.testCallbackLrV(-0x80000000) { |i| v = i }
570
- v.should == -0x80000000
571
- end
572
- it ":long (-1) argument" do
573
- v = 0xdeadbeef
574
- LibTest.testCallbackLrV(-1) { |i| v = i }
575
- v.should == -1
576
- end
577
- it ":ulong (0) argument" do
578
- v = 0xdeadbeef
579
- LibTest.testCallbackULrV(0) { |i| v = i }
580
- v.should == 0
581
- end
582
- it ":ulong (0x7fffffff) argument" do
583
- v = 0xdeadbeef
584
- LibTest.testCallbackULrV(0x7fffffff) { |i| v = i }
585
- v.should == 0x7fffffff
586
- end
587
- it ":ulong (0x80000000) argument" do
588
- v = 0xdeadbeef
589
- LibTest.testCallbackULrV(0x80000000) { |i| v = i }
590
- v.should == 0x80000000
591
- end
592
- it ":ulong (0xffffffff) argument" do
593
- v = 0xdeadbeef
594
- LibTest.testCallbackULrV(0xffffffff) { |i| v = i }
595
- v.should == 0xffffffff
596
- end
597
- it ":long_long (0) argument" do
598
- v = 0xdeadbeef
599
- LibTest.testCallbackLLrV(0) { |i| v = i }
600
- v.should == 0
601
- end
602
- it ":long_long (0x7fffffffffffffff) argument" do
603
- v = 0xdeadbeef
604
- LibTest.testCallbackLLrV(0x7fffffffffffffff) { |i| v = i }
605
- v.should == 0x7fffffffffffffff
606
- end
607
- it ":long_long (-0x8000000000000000) argument" do
608
- v = 0xdeadbeef
609
- LibTest.testCallbackLLrV(-0x8000000000000000) { |i| v = i }
610
- v.should == -0x8000000000000000
611
- end
612
- it ":long_long (-1) argument" do
613
- v = 0xdeadbeef
614
- LibTest.testCallbackLLrV(-1) { |i| v = i }
615
- v.should == -1
616
- end
617
- it ":string argument" do
618
- v = nil
619
- LibTest.testCallbackArV("Hello, World") { |i| v = i }
620
- v.should == "Hello, World"
621
- end
622
- it ":string (nil) argument" do
623
- v = "Hello, World"
624
- LibTest.testCallbackArV(nil) { |i| v = i }
625
- v.should be_nil
626
- end
627
- it ":pointer argument" do
628
- v = nil
629
- magic = FFI::Pointer.new(0xdeadbeef)
630
- LibTest.testCallbackPrV(magic) { |i| v = i }
631
- v.should == magic
632
- end
633
- it ":pointer (nil) argument" do
634
- v = "Hello, World"
635
- LibTest.testCallbackPrV(nil) { |i| v = i }
636
- v.should == FFI::Pointer::NULL
637
- end
638
- it "struct by reference argument" do
639
- v = nil
640
- magic = LibTest::S8F32S32.new
641
- LibTest.testCallbackYrV(magic) { |i| v = i }
642
- v.class.should == magic.class
643
- v.pointer == magic.pointer
644
- end
645
-
646
- it "struct by reference argument with nil value" do
647
- v = LibTest::S8F32S32.new
648
- LibTest.testCallbackYrV(nil) { |i| v = i }
649
- v.is_a?(FFI::Struct).should be_true
650
- v.pointer.should == FFI::Pointer::NULL
651
- end
652
-
653
- end # unless true
@@ -1,31 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
2
-
3
- describe "functions with custom parameter types" do
4
- before :each do
5
-
6
- Custom_enum = Class.new do
7
- extend FFI::DataConverter
8
- ToNativeMap= { :a => 1, :b => 2 }
9
- FromNativeMap = { 1 => :a, 2 => :b }
10
-
11
- def self.native_type
12
- @native_type_called = true
13
- FFI::Type::INT32
14
- end
15
-
16
- def self.to_native(val, ctx)
17
- @to_native_called = true
18
- ToNativeMap[val]
19
- end
20
-
21
- def self.from_native(val, ctx)
22
- @from_native_called = true
23
- FromNativeMap[val]
24
- end
25
- def self.native_type_called?; @native_type_called; end
26
- def self.from_native_called?; @from_native_called; end
27
- def self.to_native_called?; @to_native_called; end
28
- end
29
-
30
- end
31
- end