ffi 1.11.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 (530) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +25 -0
  3. data/.gitmodules +4 -0
  4. data/.travis.yml +42 -0
  5. data/.yardopts +5 -0
  6. data/CHANGELOG.md +131 -0
  7. data/COPYING +49 -0
  8. data/Gemfile +15 -0
  9. data/LICENSE +24 -0
  10. data/LICENSE.SPECS +22 -0
  11. data/README.md +115 -0
  12. data/Rakefile +195 -0
  13. data/appveyor.yml +27 -0
  14. data/ext/ffi_c/AbstractMemory.c +1109 -0
  15. data/ext/ffi_c/AbstractMemory.h +175 -0
  16. data/ext/ffi_c/ArrayType.c +162 -0
  17. data/ext/ffi_c/ArrayType.h +59 -0
  18. data/ext/ffi_c/Buffer.c +365 -0
  19. data/ext/ffi_c/Call.c +503 -0
  20. data/ext/ffi_c/Call.h +107 -0
  21. data/ext/ffi_c/ClosurePool.c +283 -0
  22. data/ext/ffi_c/ClosurePool.h +57 -0
  23. data/ext/ffi_c/DynamicLibrary.c +339 -0
  24. data/ext/ffi_c/DynamicLibrary.h +98 -0
  25. data/ext/ffi_c/Function.c +917 -0
  26. data/ext/ffi_c/Function.h +87 -0
  27. data/ext/ffi_c/FunctionInfo.c +271 -0
  28. data/ext/ffi_c/LastError.c +229 -0
  29. data/ext/ffi_c/LastError.h +47 -0
  30. data/ext/ffi_c/LongDouble.c +63 -0
  31. data/ext/ffi_c/LongDouble.h +51 -0
  32. data/ext/ffi_c/MappedType.c +168 -0
  33. data/ext/ffi_c/MappedType.h +59 -0
  34. data/ext/ffi_c/MemoryPointer.c +197 -0
  35. data/ext/ffi_c/MemoryPointer.h +53 -0
  36. data/ext/ffi_c/MethodHandle.c +358 -0
  37. data/ext/ffi_c/MethodHandle.h +55 -0
  38. data/ext/ffi_c/Platform.c +82 -0
  39. data/ext/ffi_c/Platform.h +45 -0
  40. data/ext/ffi_c/Pointer.c +508 -0
  41. data/ext/ffi_c/Pointer.h +63 -0
  42. data/ext/ffi_c/Struct.c +829 -0
  43. data/ext/ffi_c/Struct.h +106 -0
  44. data/ext/ffi_c/StructByValue.c +150 -0
  45. data/ext/ffi_c/StructByValue.h +55 -0
  46. data/ext/ffi_c/StructLayout.c +698 -0
  47. data/ext/ffi_c/Thread.c +137 -0
  48. data/ext/ffi_c/Thread.h +84 -0
  49. data/ext/ffi_c/Type.c +379 -0
  50. data/ext/ffi_c/Type.h +61 -0
  51. data/ext/ffi_c/Types.c +139 -0
  52. data/ext/ffi_c/Types.h +89 -0
  53. data/ext/ffi_c/Variadic.c +298 -0
  54. data/ext/ffi_c/compat.h +78 -0
  55. data/ext/ffi_c/extconf.rb +86 -0
  56. data/ext/ffi_c/ffi.c +93 -0
  57. data/ext/ffi_c/libffi.bsd.mk +40 -0
  58. data/ext/ffi_c/libffi.darwin.mk +105 -0
  59. data/ext/ffi_c/libffi.gnu.mk +32 -0
  60. data/ext/ffi_c/libffi.mk +18 -0
  61. data/ext/ffi_c/libffi.vc.mk +26 -0
  62. data/ext/ffi_c/libffi.vc64.mk +26 -0
  63. data/ext/ffi_c/libffi/.appveyor.yml +50 -0
  64. data/ext/ffi_c/libffi/.github/issue_template.md +10 -0
  65. data/ext/ffi_c/libffi/.gitignore +38 -0
  66. data/ext/ffi_c/libffi/.travis.yml +34 -0
  67. data/ext/ffi_c/libffi/.travis/ar-lib +270 -0
  68. data/ext/ffi_c/libffi/.travis/build.sh +34 -0
  69. data/ext/ffi_c/libffi/.travis/compile +351 -0
  70. data/ext/ffi_c/libffi/.travis/install.sh +22 -0
  71. data/ext/ffi_c/libffi/.travis/moxie-sim.exp +60 -0
  72. data/ext/ffi_c/libffi/.travis/site.exp +18 -0
  73. data/ext/ffi_c/libffi/ChangeLog.libffi +584 -0
  74. data/ext/ffi_c/libffi/ChangeLog.libffi-3.1 +6000 -0
  75. data/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
  76. data/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
  77. data/ext/ffi_c/libffi/LICENSE +21 -0
  78. data/ext/ffi_c/libffi/LICENSE-BUILDTOOLS +352 -0
  79. data/ext/ffi_c/libffi/Makefile.am +166 -0
  80. data/ext/ffi_c/libffi/README.md +461 -0
  81. data/ext/ffi_c/libffi/acinclude.m4 +479 -0
  82. data/ext/ffi_c/libffi/autogen.sh +2 -0
  83. data/ext/ffi_c/libffi/config.guess +1466 -0
  84. data/ext/ffi_c/libffi/config.sub +1836 -0
  85. data/ext/ffi_c/libffi/configure.ac +394 -0
  86. data/ext/ffi_c/libffi/configure.host +289 -0
  87. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +203 -0
  88. data/ext/ffi_c/libffi/include/Makefile.am +9 -0
  89. data/ext/ffi_c/libffi/include/ffi.h.in +511 -0
  90. data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
  91. data/ext/ffi_c/libffi/include/ffi_common.h +149 -0
  92. data/ext/ffi_c/libffi/libffi.map.in +80 -0
  93. data/ext/ffi_c/libffi/libffi.pc.in +11 -0
  94. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +1043 -0
  95. data/ext/ffi_c/libffi/libtool-version +29 -0
  96. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  97. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +71 -0
  98. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +194 -0
  99. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +122 -0
  100. data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +74 -0
  101. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +87 -0
  102. data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +70 -0
  103. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +302 -0
  104. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +263 -0
  105. data/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +89 -0
  106. data/ext/ffi_c/libffi/m4/ax_require_defined.m4 +37 -0
  107. data/ext/ffi_c/libffi/man/Makefile.am +8 -0
  108. data/ext/ffi_c/libffi/man/ffi.3 +41 -0
  109. data/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
  110. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +68 -0
  111. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  112. data/ext/ffi_c/libffi/msvcc.sh +328 -0
  113. data/ext/ffi_c/libffi/src/aarch64/ffi.c +941 -0
  114. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
  115. data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
  116. data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
  117. data/ext/ffi_c/libffi/src/alpha/ffi.c +521 -0
  118. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +57 -0
  119. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  120. data/ext/ffi_c/libffi/src/alpha/osf.S +282 -0
  121. data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
  122. data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
  123. data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
  124. data/ext/ffi_c/libffi/src/arm/ffi.c +819 -0
  125. data/ext/ffi_c/libffi/src/arm/ffitarget.h +82 -0
  126. data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
  127. data/ext/ffi_c/libffi/src/arm/sysv.S +383 -0
  128. data/ext/ffi_c/libffi/src/avr32/ffi.c +423 -0
  129. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +55 -0
  130. data/ext/ffi_c/libffi/src/avr32/sysv.S +208 -0
  131. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  132. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  133. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  134. data/ext/ffi_c/libffi/src/closures.c +966 -0
  135. data/ext/ffi_c/libffi/src/cris/ffi.c +386 -0
  136. data/ext/ffi_c/libffi/src/cris/ffitarget.h +56 -0
  137. data/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
  138. data/ext/ffi_c/libffi/src/debug.c +64 -0
  139. data/ext/ffi_c/libffi/src/dlmalloc.c +5166 -0
  140. data/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
  141. data/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
  142. data/ext/ffi_c/libffi/src/frv/ffitarget.h +62 -0
  143. data/ext/ffi_c/libffi/src/ia64/ffi.c +604 -0
  144. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +56 -0
  145. data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
  146. data/ext/ffi_c/libffi/src/ia64/unix.S +567 -0
  147. data/ext/ffi_c/libffi/src/java_raw_api.c +374 -0
  148. data/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
  149. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +53 -0
  150. data/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
  151. data/ext/ffi_c/libffi/src/m68k/ffi.c +362 -0
  152. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +54 -0
  153. data/ext/ffi_c/libffi/src/m68k/sysv.S +357 -0
  154. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  155. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  156. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  157. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  158. data/ext/ffi_c/libffi/src/metag/ffitarget.h +53 -0
  159. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  160. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  161. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  162. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  163. data/ext/ffi_c/libffi/src/mips/ffi.c +1130 -0
  164. data/ext/ffi_c/libffi/src/mips/ffitarget.h +244 -0
  165. data/ext/ffi_c/libffi/src/mips/n32.S +663 -0
  166. data/ext/ffi_c/libffi/src/mips/o32.S +502 -0
  167. data/ext/ffi_c/libffi/src/moxie/eabi.S +101 -0
  168. data/ext/ffi_c/libffi/src/moxie/ffi.c +285 -0
  169. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  170. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  171. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  172. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  173. data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
  174. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  175. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  176. data/ext/ffi_c/libffi/src/pa/ffi.c +719 -0
  177. data/ext/ffi_c/libffi/src/pa/ffitarget.h +85 -0
  178. data/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
  179. data/ext/ffi_c/libffi/src/pa/linux.S +357 -0
  180. data/ext/ffi_c/libffi/src/powerpc/aix.S +566 -0
  181. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +694 -0
  182. data/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
  183. data/ext/ffi_c/libffi/src/powerpc/darwin.S +378 -0
  184. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +571 -0
  185. data/ext/ffi_c/libffi/src/powerpc/ffi.c +173 -0
  186. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +1440 -0
  187. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +974 -0
  188. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
  189. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  190. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +198 -0
  191. data/ext/ffi_c/libffi/src/powerpc/linux64.S +228 -0
  192. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +488 -0
  193. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +397 -0
  194. data/ext/ffi_c/libffi/src/powerpc/sysv.S +175 -0
  195. data/ext/ffi_c/libffi/src/prep_cif.c +261 -0
  196. data/ext/ffi_c/libffi/src/raw_api.c +267 -0
  197. data/ext/ffi_c/libffi/src/riscv/ffi.c +481 -0
  198. data/ext/ffi_c/libffi/src/riscv/ffitarget.h +69 -0
  199. data/ext/ffi_c/libffi/src/riscv/sysv.S +293 -0
  200. data/ext/ffi_c/libffi/src/s390/ffi.c +756 -0
  201. data/ext/ffi_c/libffi/src/s390/ffitarget.h +70 -0
  202. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  203. data/ext/ffi_c/libffi/src/s390/sysv.S +325 -0
  204. data/ext/ffi_c/libffi/src/sh/ffi.c +717 -0
  205. data/ext/ffi_c/libffi/src/sh/ffitarget.h +54 -0
  206. data/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
  207. data/ext/ffi_c/libffi/src/sh64/ffi.c +469 -0
  208. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +58 -0
  209. data/ext/ffi_c/libffi/src/sh64/sysv.S +539 -0
  210. data/ext/ffi_c/libffi/src/sparc/ffi.c +468 -0
  211. data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
  212. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +81 -0
  213. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  214. data/ext/ffi_c/libffi/src/sparc/v8.S +443 -0
  215. data/ext/ffi_c/libffi/src/sparc/v9.S +440 -0
  216. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  217. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  218. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  219. data/ext/ffi_c/libffi/src/types.c +108 -0
  220. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  221. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  222. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  223. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  224. data/ext/ffi_c/libffi/src/x86/ffi.c +754 -0
  225. data/ext/ffi_c/libffi/src/x86/ffi64.c +884 -0
  226. data/ext/ffi_c/libffi/src/x86/ffitarget.h +147 -0
  227. data/ext/ffi_c/libffi/src/x86/ffiw64.c +308 -0
  228. data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
  229. data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
  230. data/ext/ffi_c/libffi/src/x86/sysv.S +1129 -0
  231. data/ext/ffi_c/libffi/src/x86/unix64.S +566 -0
  232. data/ext/ffi_c/libffi/src/x86/win64.S +232 -0
  233. data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
  234. data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
  235. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
  236. data/ext/ffi_c/libffi/src/xtensa/sysv.S +258 -0
  237. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  238. data/ext/ffi_c/libffi/testsuite/Makefile.am +117 -0
  239. data/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
  240. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +636 -0
  241. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +283 -0
  242. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +28 -0
  244. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +78 -0
  245. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +50 -0
  246. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +58 -0
  247. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +1745 -0
  248. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +2885 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +743 -0
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +46 -0
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +43 -0
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +89 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +81 -0
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +81 -0
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +82 -0
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +89 -0
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +92 -0
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +90 -0
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_loc_fn0.c +95 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_simple.c +55 -0
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +94 -0
  263. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +95 -0
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +96 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +102 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +89 -0
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +91 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +93 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +113 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +90 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +95 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +90 -0
  273. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +90 -0
  274. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3float.c +95 -0
  275. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +98 -0
  276. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +90 -0
  277. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +109 -0
  278. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +98 -0
  279. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +124 -0
  280. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +113 -0
  281. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +99 -0
  282. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +117 -0
  283. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +97 -0
  284. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +88 -0
  285. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +90 -0
  286. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +91 -0
  287. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +93 -0
  288. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +91 -0
  289. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +92 -0
  290. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +132 -0
  291. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +115 -0
  292. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +95 -0
  293. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +91 -0
  294. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +91 -0
  295. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +92 -0
  296. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +91 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +91 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +93 -0
  299. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +66 -0
  300. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +43 -0
  301. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +61 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +42 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +105 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +61 -0
  305. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +74 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +74 -0
  309. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +86 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +91 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +74 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +86 -0
  313. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +74 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +142 -0
  315. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +44 -0
  316. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +42 -0
  317. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +42 -0
  318. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
  319. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +42 -0
  320. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
  321. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +43 -0
  322. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
  323. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
  324. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +47 -0
  325. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +43 -0
  326. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
  327. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_abi.c +36 -0
  328. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +26 -0
  329. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +138 -0
  330. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
  331. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +60 -0
  332. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +60 -0
  333. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +74 -0
  334. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
  335. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
  336. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +341 -0
  337. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +59 -0
  338. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  339. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  340. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  341. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +52 -0
  342. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +152 -0
  343. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +161 -0
  344. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +134 -0
  345. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
  346. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +110 -0
  347. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +111 -0
  348. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +111 -0
  349. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +112 -0
  350. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +131 -0
  351. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +111 -0
  352. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +131 -0
  353. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +131 -0
  354. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  355. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  356. data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +90 -0
  357. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
  358. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
  359. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +36 -0
  360. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
  361. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
  362. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
  363. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
  364. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
  365. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
  366. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
  367. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
  368. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +43 -0
  369. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
  370. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
  371. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
  372. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
  373. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +145 -0
  374. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +148 -0
  375. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +124 -0
  376. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +125 -0
  377. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
  378. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  379. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  380. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  381. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +67 -0
  382. data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +57 -0
  383. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
  384. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +60 -0
  385. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +64 -0
  386. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +66 -0
  387. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
  388. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
  389. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +81 -0
  390. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +68 -0
  391. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +70 -0
  392. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  393. data/ext/ffi_c/libffi/testsuite/libffi.call/unwindtest.cc +117 -0
  394. data/ext/ffi_c/libffi/testsuite/libffi.call/unwindtest_ffi_call.cc +54 -0
  395. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
  396. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
  397. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
  398. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
  399. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  400. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  401. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  402. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  403. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  404. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  405. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  406. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  407. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  408. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  409. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  410. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  411. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  412. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  413. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  414. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  415. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.exp +36 -0
  416. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  417. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  418. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  419. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  420. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  421. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  422. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  423. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  424. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  425. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  426. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  427. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  428. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  429. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  430. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  431. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  432. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  433. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  434. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  435. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  436. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  437. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  438. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  439. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  440. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  441. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  442. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  443. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  444. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  445. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  446. data/ext/ffi_c/rbffi.h +55 -0
  447. data/ext/ffi_c/rbffi_endian.h +59 -0
  448. data/ext/ffi_c/win32/stdbool.h +8 -0
  449. data/ext/ffi_c/win32/stdint.h +201 -0
  450. data/ffi.gemspec +43 -0
  451. data/lib/ffi.rb +20 -0
  452. data/lib/ffi/autopointer.rb +203 -0
  453. data/lib/ffi/buffer.rb +4 -0
  454. data/lib/ffi/callback.rb +4 -0
  455. data/lib/ffi/data_converter.rb +67 -0
  456. data/lib/ffi/enum.rb +296 -0
  457. data/lib/ffi/errno.rb +43 -0
  458. data/lib/ffi/ffi.rb +45 -0
  459. data/lib/ffi/io.rb +62 -0
  460. data/lib/ffi/library.rb +588 -0
  461. data/lib/ffi/managedstruct.rb +84 -0
  462. data/lib/ffi/memorypointer.rb +1 -0
  463. data/lib/ffi/platform.rb +172 -0
  464. data/lib/ffi/platform/aarch64-freebsd/types.conf +128 -0
  465. data/lib/ffi/platform/aarch64-freebsd12/types.conf +128 -0
  466. data/lib/ffi/platform/aarch64-linux/types.conf +104 -0
  467. data/lib/ffi/platform/arm-freebsd/types.conf +152 -0
  468. data/lib/ffi/platform/arm-freebsd12/types.conf +152 -0
  469. data/lib/ffi/platform/arm-linux/types.conf +104 -0
  470. data/lib/ffi/platform/i386-cygwin/types.conf +3 -0
  471. data/lib/ffi/platform/i386-darwin/types.conf +100 -0
  472. data/lib/ffi/platform/i386-freebsd/types.conf +152 -0
  473. data/lib/ffi/platform/i386-freebsd12/types.conf +152 -0
  474. data/lib/ffi/platform/i386-gnu/types.conf +107 -0
  475. data/lib/ffi/platform/i386-linux/types.conf +103 -0
  476. data/lib/ffi/platform/i386-netbsd/types.conf +126 -0
  477. data/lib/ffi/platform/i386-openbsd/types.conf +128 -0
  478. data/lib/ffi/platform/i386-solaris/types.conf +122 -0
  479. data/lib/ffi/platform/i386-windows/types.conf +105 -0
  480. data/lib/ffi/platform/ia64-linux/types.conf +104 -0
  481. data/lib/ffi/platform/mips-linux/types.conf +102 -0
  482. data/lib/ffi/platform/mips64-linux/types.conf +104 -0
  483. data/lib/ffi/platform/mips64el-linux/types.conf +104 -0
  484. data/lib/ffi/platform/mipsel-linux/types.conf +102 -0
  485. data/lib/ffi/platform/mipsisa32r6-linux/types.conf +102 -0
  486. data/lib/ffi/platform/mipsisa32r6el-linux/types.conf +102 -0
  487. data/lib/ffi/platform/mipsisa64r6-linux/types.conf +104 -0
  488. data/lib/ffi/platform/mipsisa64r6el-linux/types.conf +104 -0
  489. data/lib/ffi/platform/powerpc-aix/types.conf +180 -0
  490. data/lib/ffi/platform/powerpc-darwin/types.conf +100 -0
  491. data/lib/ffi/platform/powerpc-linux/types.conf +100 -0
  492. data/lib/ffi/platform/powerpc64-linux/types.conf +104 -0
  493. data/lib/ffi/platform/s390-linux/types.conf +102 -0
  494. data/lib/ffi/platform/s390x-linux/types.conf +102 -0
  495. data/lib/ffi/platform/sparc-linux/types.conf +102 -0
  496. data/lib/ffi/platform/sparc-solaris/types.conf +128 -0
  497. data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
  498. data/lib/ffi/platform/sparcv9-solaris/types.conf +128 -0
  499. data/lib/ffi/platform/x86_64-cygwin/types.conf +3 -0
  500. data/lib/ffi/platform/x86_64-darwin/types.conf +126 -0
  501. data/lib/ffi/platform/x86_64-freebsd/types.conf +128 -0
  502. data/lib/ffi/platform/x86_64-freebsd12/types.conf +128 -0
  503. data/lib/ffi/platform/x86_64-linux/types.conf +102 -0
  504. data/lib/ffi/platform/x86_64-netbsd/types.conf +128 -0
  505. data/lib/ffi/platform/x86_64-openbsd/types.conf +134 -0
  506. data/lib/ffi/platform/x86_64-solaris/types.conf +122 -0
  507. data/lib/ffi/platform/x86_64-windows/types.conf +120 -0
  508. data/lib/ffi/pointer.rb +160 -0
  509. data/lib/ffi/struct.rb +311 -0
  510. data/lib/ffi/struct_by_reference.rb +72 -0
  511. data/lib/ffi/struct_layout.rb +96 -0
  512. data/lib/ffi/struct_layout_builder.rb +227 -0
  513. data/lib/ffi/tools/const_generator.rb +230 -0
  514. data/lib/ffi/tools/generator.rb +105 -0
  515. data/lib/ffi/tools/generator_task.rb +32 -0
  516. data/lib/ffi/tools/struct_generator.rb +194 -0
  517. data/lib/ffi/tools/types_generator.rb +134 -0
  518. data/lib/ffi/types.rb +194 -0
  519. data/lib/ffi/union.rb +43 -0
  520. data/lib/ffi/variadic.rb +78 -0
  521. data/lib/ffi/version.rb +3 -0
  522. data/samples/getlogin.rb +8 -0
  523. data/samples/getpid.rb +8 -0
  524. data/samples/gettimeofday.rb +18 -0
  525. data/samples/hello.rb +7 -0
  526. data/samples/inotify.rb +60 -0
  527. data/samples/pty.rb +76 -0
  528. data/samples/qsort.rb +21 -0
  529. data/samples/sample_helper.rb +6 -0
  530. metadata +663 -0
@@ -0,0 +1,84 @@
1
+ # Copyright (C) 2008 Mike Dalessio
2
+ #
3
+ # This file is part of ruby-ffi.
4
+ #
5
+ # All rights reserved.
6
+ #
7
+ # Redistribution and use in source and binary forms, with or without
8
+ # modification, are permitted provided that the following conditions are met:
9
+ #
10
+ # * Redistributions of source code must retain the above copyright notice, this
11
+ # list of conditions and the following disclaimer.
12
+ # * Redistributions in binary form must reproduce the above copyright notice
13
+ # this list of conditions and the following disclaimer in the documentation
14
+ # and/or other materials provided with the distribution.
15
+ # * Neither the name of the Ruby FFI project nor the names of its contributors
16
+ # may be used to endorse or promote products derived from this software
17
+ # without specific prior written permission.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
23
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+
30
+ module FFI
31
+ #
32
+ # FFI::ManagedStruct allows custom garbage-collection of your FFI::Structs.
33
+ #
34
+ # The typical use case would be when interacting with a library
35
+ # that has a nontrivial memory management design, such as a linked
36
+ # list or a binary tree.
37
+ #
38
+ # When the {Struct} instance is garbage collected, FFI::ManagedStruct will
39
+ # invoke the class's release() method during object finalization.
40
+ #
41
+ # @example Example usage:
42
+ # module MyLibrary
43
+ # ffi_lib "libmylibrary"
44
+ # attach_function :new_dlist, [], :pointer
45
+ # attach_function :destroy_dlist, [:pointer], :void
46
+ # end
47
+ #
48
+ # class DoublyLinkedList < FFI::ManagedStruct
49
+ # @@@
50
+ # struct do |s|
51
+ # s.name 'struct dlist'
52
+ # s.include 'dlist.h'
53
+ # s.field :head, :pointer
54
+ # s.field :tail, :pointer
55
+ # end
56
+ # @@@
57
+ #
58
+ # def self.release ptr
59
+ # MyLibrary.destroy_dlist(ptr)
60
+ # end
61
+ # end
62
+ #
63
+ # begin
64
+ # ptr = DoublyLinkedList.new(MyLibrary.new_dlist)
65
+ # # do something with the list
66
+ # end
67
+ # # struct is out of scope, and will be GC'd using DoublyLinkedList#release
68
+ #
69
+ #
70
+ class ManagedStruct < FFI::Struct
71
+
72
+ # @overload initialize(pointer)
73
+ # @param [Pointer] pointer
74
+ # Create a new ManagedStruct which will invoke the class method #release on
75
+ # @overload initialize
76
+ # A new instance of FFI::ManagedStruct.
77
+ def initialize(pointer=nil)
78
+ raise NoMethodError, "release() not implemented for class #{self}" unless self.class.respond_to? :release
79
+ raise ArgumentError, "Must supply a pointer to memory for the Struct" unless pointer
80
+ super AutoPointer.new(pointer, self.class.method(:release))
81
+ end
82
+
83
+ end
84
+ end
@@ -0,0 +1 @@
1
+ # This class is now implemented in C
@@ -0,0 +1,172 @@
1
+ #
2
+ # Copyright (C) 2008, 2009 Wayne Meissner
3
+ #
4
+ # This file is part of ruby-ffi.
5
+ #
6
+ # All rights reserved.
7
+ #
8
+ # Redistribution and use in source and binary forms, with or without
9
+ # modification, are permitted provided that the following conditions are met:
10
+ #
11
+ # * Redistributions of source code must retain the above copyright notice, this
12
+ # list of conditions and the following disclaimer.
13
+ # * Redistributions in binary form must reproduce the above copyright notice
14
+ # this list of conditions and the following disclaimer in the documentation
15
+ # and/or other materials provided with the distribution.
16
+ # * Neither the name of the Ruby FFI project nor the names of its contributors
17
+ # may be used to endorse or promote products derived from this software
18
+ # without specific prior written permission.
19
+ #
20
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
24
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
30
+
31
+ require 'rbconfig'
32
+ module FFI
33
+ class PlatformError < LoadError; end
34
+
35
+ # This module defines different constants and class methods to play with
36
+ # various platforms.
37
+ module Platform
38
+ OS = case RbConfig::CONFIG['host_os'].downcase
39
+ when /linux/
40
+ "linux"
41
+ when /darwin/
42
+ "darwin"
43
+ when /freebsd/
44
+ "freebsd"
45
+ when /netbsd/
46
+ "netbsd"
47
+ when /openbsd/
48
+ "openbsd"
49
+ when /sunos|solaris/
50
+ "solaris"
51
+ when /mingw|mswin/
52
+ "windows"
53
+ else
54
+ RbConfig::CONFIG['host_os'].downcase
55
+ end
56
+
57
+ OSVERSION = RbConfig::CONFIG['host_os'].gsub(/[^\d]/, '').to_i
58
+
59
+ CPU = RbConfig::CONFIG['host_cpu']
60
+
61
+ ARCH = case CPU.downcase
62
+ when /amd64|x86_64/
63
+ "x86_64"
64
+ when /i?86|x86|i86pc/
65
+ "i386"
66
+ when /ppc64|powerpc64/
67
+ "powerpc64"
68
+ when /ppc|powerpc/
69
+ "powerpc"
70
+ when /sparcv9|sparc64/
71
+ "sparcv9"
72
+ else
73
+ case RbConfig::CONFIG['host_cpu']
74
+ when /^arm/
75
+ "arm"
76
+ else
77
+ RbConfig::CONFIG['host_cpu']
78
+ end
79
+ end
80
+
81
+ private
82
+ # @param [String) os
83
+ # @return [Boolean]
84
+ # Test if current OS is +os+.
85
+ def self.is_os(os)
86
+ OS == os
87
+ end
88
+
89
+ IS_GNU = defined?(GNU_LIBC)
90
+ IS_LINUX = is_os("linux")
91
+ IS_MAC = is_os("darwin")
92
+ IS_FREEBSD = is_os("freebsd")
93
+ IS_NETBSD = is_os("netbsd")
94
+ IS_OPENBSD = is_os("openbsd")
95
+ IS_SOLARIS = is_os("solaris")
96
+ IS_WINDOWS = is_os("windows")
97
+ IS_BSD = IS_MAC || IS_FREEBSD || IS_NETBSD || IS_OPENBSD
98
+
99
+ # Add the version for known ABI breaks
100
+ name_version = "12" if IS_FREEBSD && OSVERSION >= 12 # 64-bit inodes
101
+
102
+ NAME = "#{ARCH}-#{OS}#{name_version}"
103
+ CONF_DIR = File.join(File.dirname(__FILE__), 'platform', NAME)
104
+
105
+ public
106
+
107
+ LIBPREFIX = case OS
108
+ when /windows|msys/
109
+ ''
110
+ when /cygwin/
111
+ 'cyg'
112
+ else
113
+ 'lib'
114
+ end
115
+
116
+ LIBSUFFIX = case OS
117
+ when /darwin/
118
+ 'dylib'
119
+ when /linux|bsd|solaris/
120
+ 'so'
121
+ when /windows|cygwin|msys/
122
+ 'dll'
123
+ else
124
+ # Punt and just assume a sane unix (i.e. anything but AIX)
125
+ 'so'
126
+ end
127
+
128
+ LIBC = if IS_WINDOWS
129
+ RbConfig::CONFIG['RUBY_SO_NAME'].split('-')[-2] + '.dll'
130
+ elsif IS_GNU
131
+ GNU_LIBC
132
+ elsif OS == 'cygwin'
133
+ "cygwin1.dll"
134
+ elsif OS == 'msys'
135
+ # Not sure how msys 1.0 behaves, tested on MSYS2.
136
+ "msys-2.0.dll"
137
+ else
138
+ "#{LIBPREFIX}c.#{LIBSUFFIX}"
139
+ end
140
+
141
+ # Test if current OS is a *BSD (include MAC)
142
+ # @return [Boolean]
143
+ def self.bsd?
144
+ IS_BSD
145
+ end
146
+
147
+ # Test if current OS is Windows
148
+ # @return [Boolean]
149
+ def self.windows?
150
+ IS_WINDOWS
151
+ end
152
+
153
+ # Test if current OS is Mac OS
154
+ # @return [Boolean]
155
+ def self.mac?
156
+ IS_MAC
157
+ end
158
+
159
+ # Test if current OS is Solaris (Sun OS)
160
+ # @return [Boolean]
161
+ def self.solaris?
162
+ IS_SOLARIS
163
+ end
164
+
165
+ # Test if current OS is a unix OS
166
+ # @return [Boolean]
167
+ def self.unix?
168
+ !IS_WINDOWS
169
+ end
170
+ end
171
+ end
172
+
@@ -0,0 +1,128 @@
1
+ rbx.platform.typedef.__int8_t = char
2
+ rbx.platform.typedef.__uint8_t = uchar
3
+ rbx.platform.typedef.__int16_t = short
4
+ rbx.platform.typedef.__uint16_t = ushort
5
+ rbx.platform.typedef.__int32_t = int
6
+ rbx.platform.typedef.__uint32_t = uint
7
+ rbx.platform.typedef.__int64_t = long_long
8
+ rbx.platform.typedef.__uint64_t = ulong_long
9
+ rbx.platform.typedef.__int_least8_t = char
10
+ rbx.platform.typedef.__uint_least8_t = uchar
11
+ rbx.platform.typedef.__int_least16_t = short
12
+ rbx.platform.typedef.__uint_least16_t = ushort
13
+ rbx.platform.typedef.__int_least32_t = int
14
+ rbx.platform.typedef.__uint_least32_t = uint
15
+ rbx.platform.typedef.__int_least64_t = long_long
16
+ rbx.platform.typedef.__uint_least64_t = ulong_long
17
+ rbx.platform.typedef.__int_fast8_t = int
18
+ rbx.platform.typedef.__uint_fast8_t = uint
19
+ rbx.platform.typedef.__int_fast16_t = int
20
+ rbx.platform.typedef.__uint_fast16_t = uint
21
+ rbx.platform.typedef.__int_fast32_t = int
22
+ rbx.platform.typedef.__uint_fast32_t = uint
23
+ rbx.platform.typedef.__int_fast64_t = long_long
24
+ rbx.platform.typedef.__uint_fast64_t = ulong_long
25
+ rbx.platform.typedef.__intptr_t = long
26
+ rbx.platform.typedef.__uintptr_t = ulong
27
+ rbx.platform.typedef.__intmax_t = long_long
28
+ rbx.platform.typedef.__uintmax_t = ulong_long
29
+ rbx.platform.typedef.__register_t = long_long
30
+ rbx.platform.typedef.__vaddr_t = ulong
31
+ rbx.platform.typedef.__paddr_t = ulong
32
+ rbx.platform.typedef.__vsize_t = ulong
33
+ rbx.platform.typedef.__psize_t = ulong
34
+ rbx.platform.typedef.__clock_t = int
35
+ rbx.platform.typedef.__clockid_t = int
36
+ rbx.platform.typedef.__off_t = long_long
37
+ rbx.platform.typedef.__ptrdiff_t = long
38
+ rbx.platform.typedef.__size_t = ulong
39
+ rbx.platform.typedef.__ssize_t = long
40
+ rbx.platform.typedef.__time_t = int
41
+ rbx.platform.typedef.__timer_t = int
42
+ rbx.platform.typedef.__wchar_t = int
43
+ rbx.platform.typedef.__wint_t = int
44
+ rbx.platform.typedef.__rune_t = int
45
+ rbx.platform.typedef.__wctrans_t = pointer
46
+ rbx.platform.typedef.__wctype_t = pointer
47
+ rbx.platform.typedef.__cpuid_t = ulong
48
+ rbx.platform.typedef.__dev_t = int
49
+ rbx.platform.typedef.__fixpt_t = uint
50
+ rbx.platform.typedef.__gid_t = uint
51
+ rbx.platform.typedef.__id_t = uint
52
+ rbx.platform.typedef.__in_addr_t = uint
53
+ rbx.platform.typedef.__in_port_t = ushort
54
+ rbx.platform.typedef.__ino_t = uint
55
+ rbx.platform.typedef.__key_t = long
56
+ rbx.platform.typedef.__mode_t = uint
57
+ rbx.platform.typedef.__nlink_t = uint
58
+ rbx.platform.typedef.__pid_t = int
59
+ rbx.platform.typedef.__rlim_t = ulong_long
60
+ rbx.platform.typedef.__sa_family_t = uchar
61
+ rbx.platform.typedef.__segsz_t = int
62
+ rbx.platform.typedef.__socklen_t = uint
63
+ rbx.platform.typedef.__swblk_t = int
64
+ rbx.platform.typedef.__uid_t = uint
65
+ rbx.platform.typedef.__useconds_t = uint
66
+ rbx.platform.typedef.__suseconds_t = int
67
+ rbx.platform.typedef.u_char = uchar
68
+ rbx.platform.typedef.u_short = ushort
69
+ rbx.platform.typedef.u_int = uint
70
+ rbx.platform.typedef.u_long = ulong
71
+ rbx.platform.typedef.unchar = uchar
72
+ rbx.platform.typedef.ushort = ushort
73
+ rbx.platform.typedef.uint = uint
74
+ rbx.platform.typedef.ulong = ulong
75
+ rbx.platform.typedef.cpuid_t = ulong
76
+ rbx.platform.typedef.register_t = long_long
77
+ rbx.platform.typedef.int8_t = char
78
+ rbx.platform.typedef.uint8_t = uchar
79
+ rbx.platform.typedef.int16_t = short
80
+ rbx.platform.typedef.uint16_t = ushort
81
+ rbx.platform.typedef.int32_t = int
82
+ rbx.platform.typedef.uint32_t = uint
83
+ rbx.platform.typedef.int64_t = long_long
84
+ rbx.platform.typedef.uint64_t = ulong_long
85
+ rbx.platform.typedef.intptr_t = long
86
+ rbx.platform.typedef.uintptr_t = ulong
87
+ rbx.platform.typedef.u_int8_t = uchar
88
+ rbx.platform.typedef.u_int16_t = ushort
89
+ rbx.platform.typedef.u_int32_t = uint
90
+ rbx.platform.typedef.u_int64_t = ulong_long
91
+ rbx.platform.typedef.quad_t = long_long
92
+ rbx.platform.typedef.u_quad_t = ulong_long
93
+ rbx.platform.typedef.qaddr_t = pointer
94
+ rbx.platform.typedef.vaddr_t = ulong
95
+ rbx.platform.typedef.paddr_t = ulong
96
+ rbx.platform.typedef.vsize_t = ulong
97
+ rbx.platform.typedef.psize_t = ulong
98
+ rbx.platform.typedef.caddr_t = string
99
+ rbx.platform.typedef.daddr_t = int
100
+ rbx.platform.typedef.daddr32_t = int
101
+ rbx.platform.typedef.daddr64_t = long_long
102
+ rbx.platform.typedef.dev_t = int
103
+ rbx.platform.typedef.fixpt_t = uint
104
+ rbx.platform.typedef.gid_t = uint
105
+ rbx.platform.typedef.id_t = uint
106
+ rbx.platform.typedef.ino_t = uint
107
+ rbx.platform.typedef.key_t = long
108
+ rbx.platform.typedef.mode_t = uint
109
+ rbx.platform.typedef.nlink_t = uint
110
+ rbx.platform.typedef.pid_t = int
111
+ rbx.platform.typedef.rlim_t = ulong_long
112
+ rbx.platform.typedef.segsz_t = int
113
+ rbx.platform.typedef.swblk_t = int
114
+ rbx.platform.typedef.uid_t = uint
115
+ rbx.platform.typedef.useconds_t = uint
116
+ rbx.platform.typedef.suseconds_t = int
117
+ rbx.platform.typedef.in_addr_t = uint
118
+ rbx.platform.typedef.in_port_t = ushort
119
+ rbx.platform.typedef.sa_family_t = uchar
120
+ rbx.platform.typedef.socklen_t = uint
121
+ rbx.platform.typedef.clock_t = int
122
+ rbx.platform.typedef.clockid_t = int
123
+ rbx.platform.typedef.size_t = ulong
124
+ rbx.platform.typedef.ssize_t = long
125
+ rbx.platform.typedef.time_t = int
126
+ rbx.platform.typedef.timer_t = int
127
+ rbx.platform.typedef.off_t = long_long
128
+ rbx.platform.typedef.__fd_mask = int
@@ -0,0 +1,128 @@
1
+ rbx.platform.typedef.__int8_t = char
2
+ rbx.platform.typedef.__uint8_t = uchar
3
+ rbx.platform.typedef.__int16_t = short
4
+ rbx.platform.typedef.__uint16_t = ushort
5
+ rbx.platform.typedef.__int32_t = int
6
+ rbx.platform.typedef.__uint32_t = uint
7
+ rbx.platform.typedef.__int64_t = long_long
8
+ rbx.platform.typedef.__uint64_t = ulong_long
9
+ rbx.platform.typedef.__int_least8_t = char
10
+ rbx.platform.typedef.__uint_least8_t = uchar
11
+ rbx.platform.typedef.__int_least16_t = short
12
+ rbx.platform.typedef.__uint_least16_t = ushort
13
+ rbx.platform.typedef.__int_least32_t = int
14
+ rbx.platform.typedef.__uint_least32_t = uint
15
+ rbx.platform.typedef.__int_least64_t = long_long
16
+ rbx.platform.typedef.__uint_least64_t = ulong_long
17
+ rbx.platform.typedef.__int_fast8_t = int
18
+ rbx.platform.typedef.__uint_fast8_t = uint
19
+ rbx.platform.typedef.__int_fast16_t = int
20
+ rbx.platform.typedef.__uint_fast16_t = uint
21
+ rbx.platform.typedef.__int_fast32_t = int
22
+ rbx.platform.typedef.__uint_fast32_t = uint
23
+ rbx.platform.typedef.__int_fast64_t = long_long
24
+ rbx.platform.typedef.__uint_fast64_t = ulong_long
25
+ rbx.platform.typedef.__intptr_t = long
26
+ rbx.platform.typedef.__uintptr_t = ulong
27
+ rbx.platform.typedef.__intmax_t = long_long
28
+ rbx.platform.typedef.__uintmax_t = ulong_long
29
+ rbx.platform.typedef.__register_t = long_long
30
+ rbx.platform.typedef.__vaddr_t = ulong
31
+ rbx.platform.typedef.__paddr_t = ulong
32
+ rbx.platform.typedef.__vsize_t = ulong
33
+ rbx.platform.typedef.__psize_t = ulong
34
+ rbx.platform.typedef.__clock_t = int
35
+ rbx.platform.typedef.__clockid_t = int
36
+ rbx.platform.typedef.__off_t = long_long
37
+ rbx.platform.typedef.__ptrdiff_t = long
38
+ rbx.platform.typedef.__size_t = ulong
39
+ rbx.platform.typedef.__ssize_t = long
40
+ rbx.platform.typedef.__time_t = int
41
+ rbx.platform.typedef.__timer_t = int
42
+ rbx.platform.typedef.__wchar_t = int
43
+ rbx.platform.typedef.__wint_t = int
44
+ rbx.platform.typedef.__rune_t = int
45
+ rbx.platform.typedef.__wctrans_t = pointer
46
+ rbx.platform.typedef.__wctype_t = pointer
47
+ rbx.platform.typedef.__cpuid_t = ulong
48
+ rbx.platform.typedef.__dev_t = ulong_long
49
+ rbx.platform.typedef.__fixpt_t = uint
50
+ rbx.platform.typedef.__gid_t = uint
51
+ rbx.platform.typedef.__id_t = uint
52
+ rbx.platform.typedef.__in_addr_t = uint
53
+ rbx.platform.typedef.__in_port_t = ushort
54
+ rbx.platform.typedef.__ino_t = ulong_long
55
+ rbx.platform.typedef.__key_t = long
56
+ rbx.platform.typedef.__mode_t = uint
57
+ rbx.platform.typedef.__nlink_t = ulong_long
58
+ rbx.platform.typedef.__pid_t = int
59
+ rbx.platform.typedef.__rlim_t = ulong_long
60
+ rbx.platform.typedef.__sa_family_t = uchar
61
+ rbx.platform.typedef.__segsz_t = int
62
+ rbx.platform.typedef.__socklen_t = uint
63
+ rbx.platform.typedef.__swblk_t = int
64
+ rbx.platform.typedef.__uid_t = uint
65
+ rbx.platform.typedef.__useconds_t = uint
66
+ rbx.platform.typedef.__suseconds_t = int
67
+ rbx.platform.typedef.u_char = uchar
68
+ rbx.platform.typedef.u_short = ushort
69
+ rbx.platform.typedef.u_int = uint
70
+ rbx.platform.typedef.u_long = ulong
71
+ rbx.platform.typedef.unchar = uchar
72
+ rbx.platform.typedef.ushort = ushort
73
+ rbx.platform.typedef.uint = uint
74
+ rbx.platform.typedef.ulong = ulong
75
+ rbx.platform.typedef.cpuid_t = ulong
76
+ rbx.platform.typedef.register_t = long_long
77
+ rbx.platform.typedef.int8_t = char
78
+ rbx.platform.typedef.uint8_t = uchar
79
+ rbx.platform.typedef.int16_t = short
80
+ rbx.platform.typedef.uint16_t = ushort
81
+ rbx.platform.typedef.int32_t = int
82
+ rbx.platform.typedef.uint32_t = uint
83
+ rbx.platform.typedef.int64_t = long_long
84
+ rbx.platform.typedef.uint64_t = ulong_long
85
+ rbx.platform.typedef.intptr_t = long
86
+ rbx.platform.typedef.uintptr_t = ulong
87
+ rbx.platform.typedef.u_int8_t = uchar
88
+ rbx.platform.typedef.u_int16_t = ushort
89
+ rbx.platform.typedef.u_int32_t = uint
90
+ rbx.platform.typedef.u_int64_t = ulong_long
91
+ rbx.platform.typedef.quad_t = long_long
92
+ rbx.platform.typedef.u_quad_t = ulong_long
93
+ rbx.platform.typedef.qaddr_t = pointer
94
+ rbx.platform.typedef.vaddr_t = ulong
95
+ rbx.platform.typedef.paddr_t = ulong
96
+ rbx.platform.typedef.vsize_t = ulong
97
+ rbx.platform.typedef.psize_t = ulong
98
+ rbx.platform.typedef.caddr_t = string
99
+ rbx.platform.typedef.daddr_t = int
100
+ rbx.platform.typedef.daddr32_t = int
101
+ rbx.platform.typedef.daddr64_t = long_long
102
+ rbx.platform.typedef.dev_t = ulong_long
103
+ rbx.platform.typedef.fixpt_t = uint
104
+ rbx.platform.typedef.gid_t = uint
105
+ rbx.platform.typedef.id_t = uint
106
+ rbx.platform.typedef.ino_t = ulong_long
107
+ rbx.platform.typedef.key_t = long
108
+ rbx.platform.typedef.mode_t = uint
109
+ rbx.platform.typedef.nlink_t = ulong_long
110
+ rbx.platform.typedef.pid_t = int
111
+ rbx.platform.typedef.rlim_t = ulong_long
112
+ rbx.platform.typedef.segsz_t = int
113
+ rbx.platform.typedef.swblk_t = int
114
+ rbx.platform.typedef.uid_t = uint
115
+ rbx.platform.typedef.useconds_t = uint
116
+ rbx.platform.typedef.suseconds_t = int
117
+ rbx.platform.typedef.in_addr_t = uint
118
+ rbx.platform.typedef.in_port_t = ushort
119
+ rbx.platform.typedef.sa_family_t = uchar
120
+ rbx.platform.typedef.socklen_t = uint
121
+ rbx.platform.typedef.clock_t = int
122
+ rbx.platform.typedef.clockid_t = int
123
+ rbx.platform.typedef.size_t = ulong
124
+ rbx.platform.typedef.ssize_t = long
125
+ rbx.platform.typedef.time_t = int
126
+ rbx.platform.typedef.timer_t = int
127
+ rbx.platform.typedef.off_t = long_long
128
+ rbx.platform.typedef.__fd_mask = int