ffi 0.5.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ffi might be problematic. Click here for more details.

Files changed (328) hide show
  1. data/LICENSE +51 -0
  2. data/README.rdoc +69 -0
  3. data/Rakefile +191 -0
  4. data/ext/ffi_c/AbstractMemory.c +489 -0
  5. data/ext/ffi_c/AbstractMemory.h +160 -0
  6. data/ext/ffi_c/ArrayType.c +129 -0
  7. data/ext/ffi_c/ArrayType.h +58 -0
  8. data/ext/ffi_c/AutoPointer.c +61 -0
  9. data/ext/ffi_c/AutoPointer.h +18 -0
  10. data/ext/ffi_c/Buffer.c +187 -0
  11. data/ext/ffi_c/Call.c +853 -0
  12. data/ext/ffi_c/Call.h +86 -0
  13. data/ext/ffi_c/ClosurePool.c +302 -0
  14. data/ext/ffi_c/ClosurePool.h +29 -0
  15. data/ext/ffi_c/DynamicLibrary.c +216 -0
  16. data/ext/ffi_c/DynamicLibrary.h +22 -0
  17. data/ext/ffi_c/Function.c +478 -0
  18. data/ext/ffi_c/Function.h +80 -0
  19. data/ext/ffi_c/FunctionInfo.c +221 -0
  20. data/ext/ffi_c/LastError.c +159 -0
  21. data/ext/ffi_c/LastError.h +18 -0
  22. data/ext/ffi_c/MemoryPointer.c +178 -0
  23. data/ext/ffi_c/MemoryPointer.h +20 -0
  24. data/ext/ffi_c/MethodHandle.c +346 -0
  25. data/ext/ffi_c/MethodHandle.h +53 -0
  26. data/ext/ffi_c/Platform.c +59 -0
  27. data/ext/ffi_c/Platform.h +16 -0
  28. data/ext/ffi_c/Pointer.c +224 -0
  29. data/ext/ffi_c/Pointer.h +49 -0
  30. data/ext/ffi_c/Struct.c +770 -0
  31. data/ext/ffi_c/Struct.h +80 -0
  32. data/ext/ffi_c/StructByValue.c +140 -0
  33. data/ext/ffi_c/StructByValue.h +53 -0
  34. data/ext/ffi_c/StructLayout.c +450 -0
  35. data/ext/ffi_c/Type.c +329 -0
  36. data/ext/ffi_c/Type.h +57 -0
  37. data/ext/ffi_c/Types.c +103 -0
  38. data/ext/ffi_c/Types.h +85 -0
  39. data/ext/ffi_c/Variadic.c +260 -0
  40. data/ext/ffi_c/compat.h +72 -0
  41. data/ext/ffi_c/endian.h +40 -0
  42. data/ext/ffi_c/extconf.rb +30 -0
  43. data/ext/ffi_c/ffi.c +82 -0
  44. data/ext/ffi_c/libffi.bsd.mk +34 -0
  45. data/ext/ffi_c/libffi.darwin.mk +75 -0
  46. data/ext/ffi_c/libffi.gnu.mk +29 -0
  47. data/ext/ffi_c/libffi.mk +13 -0
  48. data/ext/ffi_c/libffi/ChangeLog +3243 -0
  49. data/ext/ffi_c/libffi/ChangeLog.libffi +347 -0
  50. data/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
  51. data/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
  52. data/ext/ffi_c/libffi/LICENSE +21 -0
  53. data/ext/ffi_c/libffi/Makefile.am +177 -0
  54. data/ext/ffi_c/libffi/Makefile.in +1640 -0
  55. data/ext/ffi_c/libffi/README +328 -0
  56. data/ext/ffi_c/libffi/TODO +1 -0
  57. data/ext/ffi_c/libffi/acinclude.m4 +92 -0
  58. data/ext/ffi_c/libffi/aclocal.m4 +7516 -0
  59. data/ext/ffi_c/libffi/compile +142 -0
  60. data/ext/ffi_c/libffi/config.guess +1516 -0
  61. data/ext/ffi_c/libffi/config.sub +1626 -0
  62. data/ext/ffi_c/libffi/configure +24414 -0
  63. data/ext/ffi_c/libffi/configure.ac +365 -0
  64. data/ext/ffi_c/libffi/configure.host +11 -0
  65. data/ext/ffi_c/libffi/depcomp +584 -0
  66. data/ext/ffi_c/libffi/doc/libffi.info +533 -0
  67. data/ext/ffi_c/libffi/doc/libffi.texi +541 -0
  68. data/ext/ffi_c/libffi/doc/stamp-vti +4 -0
  69. data/ext/ffi_c/libffi/doc/version.texi +4 -0
  70. data/ext/ffi_c/libffi/fficonfig.h.in +160 -0
  71. data/ext/ffi_c/libffi/include/Makefile.am +9 -0
  72. data/ext/ffi_c/libffi/include/Makefile.in +422 -0
  73. data/ext/ffi_c/libffi/include/ffi.h.in +393 -0
  74. data/ext/ffi_c/libffi/include/ffi_common.h +98 -0
  75. data/ext/ffi_c/libffi/install-sh +323 -0
  76. data/ext/ffi_c/libffi/libffi.pc.in +10 -0
  77. data/ext/ffi_c/libffi/libtool-version +29 -0
  78. data/ext/ffi_c/libffi/ltcf-c.sh +861 -0
  79. data/ext/ffi_c/libffi/ltcf-cxx.sh +1069 -0
  80. data/ext/ffi_c/libffi/ltcf-gcj.sh +700 -0
  81. data/ext/ffi_c/libffi/ltconfig +2862 -0
  82. data/ext/ffi_c/libffi/ltmain.sh +6930 -0
  83. data/ext/ffi_c/libffi/man/Makefile.am +8 -0
  84. data/ext/ffi_c/libffi/man/Makefile.in +395 -0
  85. data/ext/ffi_c/libffi/man/ffi.3 +31 -0
  86. data/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
  87. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +66 -0
  88. data/ext/ffi_c/libffi/mdate-sh +201 -0
  89. data/ext/ffi_c/libffi/missing +353 -0
  90. data/ext/ffi_c/libffi/mkinstalldirs +158 -0
  91. data/ext/ffi_c/libffi/src/alpha/ffi.c +284 -0
  92. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +48 -0
  93. data/ext/ffi_c/libffi/src/alpha/osf.S +366 -0
  94. data/ext/ffi_c/libffi/src/arm/ffi.c +309 -0
  95. data/ext/ffi_c/libffi/src/arm/ffitarget.h +49 -0
  96. data/ext/ffi_c/libffi/src/arm/sysv.S +299 -0
  97. data/ext/ffi_c/libffi/src/closures.c +596 -0
  98. data/ext/ffi_c/libffi/src/cris/ffi.c +383 -0
  99. data/ext/ffi_c/libffi/src/cris/ffitarget.h +51 -0
  100. data/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
  101. data/ext/ffi_c/libffi/src/debug.c +59 -0
  102. data/ext/ffi_c/libffi/src/dlmalloc.c +5099 -0
  103. data/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
  104. data/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
  105. data/ext/ffi_c/libffi/src/frv/ffitarget.h +61 -0
  106. data/ext/ffi_c/libffi/src/ia64/ffi.c +580 -0
  107. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +50 -0
  108. data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
  109. data/ext/ffi_c/libffi/src/ia64/unix.S +560 -0
  110. data/ext/ffi_c/libffi/src/java_raw_api.c +359 -0
  111. data/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
  112. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +48 -0
  113. data/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
  114. data/ext/ffi_c/libffi/src/m68k/ffi.c +278 -0
  115. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +49 -0
  116. data/ext/ffi_c/libffi/src/m68k/sysv.S +234 -0
  117. data/ext/ffi_c/libffi/src/mips/ffi.c +926 -0
  118. data/ext/ffi_c/libffi/src/mips/ffitarget.h +202 -0
  119. data/ext/ffi_c/libffi/src/mips/n32.S +534 -0
  120. data/ext/ffi_c/libffi/src/mips/o32.S +381 -0
  121. data/ext/ffi_c/libffi/src/pa/ffi.c +709 -0
  122. data/ext/ffi_c/libffi/src/pa/ffitarget.h +77 -0
  123. data/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
  124. data/ext/ffi_c/libffi/src/pa/linux.S +357 -0
  125. data/ext/ffi_c/libffi/src/powerpc/aix.S +225 -0
  126. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +247 -0
  127. data/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
  128. data/ext/ffi_c/libffi/src/powerpc/darwin.S +245 -0
  129. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +317 -0
  130. data/ext/ffi_c/libffi/src/powerpc/ffi.c +1429 -0
  131. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +800 -0
  132. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +118 -0
  133. data/ext/ffi_c/libffi/src/powerpc/linux64.S +187 -0
  134. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +236 -0
  135. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +327 -0
  136. data/ext/ffi_c/libffi/src/powerpc/sysv.S +230 -0
  137. data/ext/ffi_c/libffi/src/prep_cif.c +174 -0
  138. data/ext/ffi_c/libffi/src/raw_api.c +254 -0
  139. data/ext/ffi_c/libffi/src/s390/ffi.c +780 -0
  140. data/ext/ffi_c/libffi/src/s390/ffitarget.h +60 -0
  141. data/ext/ffi_c/libffi/src/s390/sysv.S +434 -0
  142. data/ext/ffi_c/libffi/src/sh/ffi.c +716 -0
  143. data/ext/ffi_c/libffi/src/sh/ffitarget.h +49 -0
  144. data/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
  145. data/ext/ffi_c/libffi/src/sh64/ffi.c +453 -0
  146. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +53 -0
  147. data/ext/ffi_c/libffi/src/sh64/sysv.S +530 -0
  148. data/ext/ffi_c/libffi/src/sparc/ffi.c +610 -0
  149. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +66 -0
  150. data/ext/ffi_c/libffi/src/sparc/v8.S +272 -0
  151. data/ext/ffi_c/libffi/src/sparc/v9.S +307 -0
  152. data/ext/ffi_c/libffi/src/types.c +77 -0
  153. data/ext/ffi_c/libffi/src/x86/darwin.S +443 -0
  154. data/ext/ffi_c/libffi/src/x86/darwin64.S +416 -0
  155. data/ext/ffi_c/libffi/src/x86/ffi.c +475 -0
  156. data/ext/ffi_c/libffi/src/x86/ffi64.c +572 -0
  157. data/ext/ffi_c/libffi/src/x86/ffitarget.h +90 -0
  158. data/ext/ffi_c/libffi/src/x86/freebsd.S +458 -0
  159. data/ext/ffi_c/libffi/src/x86/sysv.S +437 -0
  160. data/ext/ffi_c/libffi/src/x86/unix64.S +418 -0
  161. data/ext/ffi_c/libffi/src/x86/win32.S +391 -0
  162. data/ext/ffi_c/libffi/testsuite/Makefile.am +71 -0
  163. data/ext/ffi_c/libffi/testsuite/Makefile.in +447 -0
  164. data/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
  165. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +289 -0
  166. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +263 -0
  167. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +36 -0
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +97 -0
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +89 -0
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +89 -0
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +90 -0
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +97 -0
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +99 -0
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +98 -0
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +72 -0
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +102 -0
  178. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +103 -0
  179. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +104 -0
  180. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +110 -0
  181. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +97 -0
  182. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +99 -0
  183. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +101 -0
  184. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +121 -0
  185. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +98 -0
  186. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +103 -0
  187. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +98 -0
  188. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +98 -0
  189. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +106 -0
  190. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +98 -0
  191. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +117 -0
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +106 -0
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +132 -0
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +121 -0
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +107 -0
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +125 -0
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +105 -0
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +96 -0
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +98 -0
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +99 -0
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +101 -0
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +99 -0
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +100 -0
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +101 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +99 -0
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +99 -0
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +99 -0
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +99 -0
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +99 -0
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +100 -0
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +51 -0
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +51 -0
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +82 -0
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +82 -0
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +94 -0
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +99 -0
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +82 -0
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +94 -0
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +52 -0
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +50 -0
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +50 -0
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +50 -0
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +51 -0
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +54 -0
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +51 -0
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +86 -0
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +58 -0
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +57 -0
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +72 -0
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +69 -0
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +63 -0
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +53 -0
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +160 -0
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +169 -0
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +141 -0
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +118 -0
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +119 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +119 -0
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +120 -0
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +139 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +119 -0
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +139 -0
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +139 -0
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +98 -0
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +35 -0
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +42 -0
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
  263. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +65 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +59 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +63 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +65 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +80 -0
  273. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +67 -0
  274. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +86 -0
  275. data/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +38 -0
  276. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +123 -0
  277. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
  278. data/ext/ffi_c/libffi/texinfo.tex +7482 -0
  279. data/ext/ffi_c/rbffi.h +26 -0
  280. data/gen/Rakefile +12 -0
  281. data/lib/1.8/ffi_c.so +0 -0
  282. data/lib/1.9/ffi_c.so +0 -0
  283. data/lib/ffi.rb +11 -0
  284. data/lib/ffi/autopointer.rb +61 -0
  285. data/lib/ffi/buffer.rb +0 -0
  286. data/lib/ffi/callback.rb +10 -0
  287. data/lib/ffi/enum.rb +78 -0
  288. data/lib/ffi/errno.rb +8 -0
  289. data/lib/ffi/ffi.rb +99 -0
  290. data/lib/ffi/io.rb +21 -0
  291. data/lib/ffi/library.rb +218 -0
  292. data/lib/ffi/managedstruct.rb +55 -0
  293. data/lib/ffi/memorypointer.rb +73 -0
  294. data/lib/ffi/platform.rb +88 -0
  295. data/lib/ffi/pointer.rb +119 -0
  296. data/lib/ffi/struct.rb +183 -0
  297. data/lib/ffi/tools/const_generator.rb +177 -0
  298. data/lib/ffi/tools/generator.rb +58 -0
  299. data/lib/ffi/tools/generator_task.rb +35 -0
  300. data/lib/ffi/tools/struct_generator.rb +194 -0
  301. data/lib/ffi/tools/types_generator.rb +123 -0
  302. data/lib/ffi/types.rb +153 -0
  303. data/lib/ffi/union.rb +12 -0
  304. data/lib/ffi/variadic.rb +25 -0
  305. data/spec/ffi/bool_spec.rb +24 -0
  306. data/spec/ffi/buffer_spec.rb +202 -0
  307. data/spec/ffi/callback_spec.rb +591 -0
  308. data/spec/ffi/enum_spec.rb +164 -0
  309. data/spec/ffi/errno_spec.rb +13 -0
  310. data/spec/ffi/function_spec.rb +73 -0
  311. data/spec/ffi/library_spec.rb +148 -0
  312. data/spec/ffi/managed_struct_spec.rb +56 -0
  313. data/spec/ffi/number_spec.rb +231 -0
  314. data/spec/ffi/pointer_spec.rb +195 -0
  315. data/spec/ffi/rbx/attach_function_spec.rb +27 -0
  316. data/spec/ffi/rbx/memory_pointer_spec.rb +102 -0
  317. data/spec/ffi/rbx/spec_helper.rb +1 -0
  318. data/spec/ffi/rbx/struct_spec.rb +13 -0
  319. data/spec/ffi/spec_helper.rb +17 -0
  320. data/spec/ffi/string_spec.rb +103 -0
  321. data/spec/ffi/struct_callback_spec.rb +64 -0
  322. data/spec/ffi/struct_initialize_spec.rb +30 -0
  323. data/spec/ffi/struct_spec.rb +529 -0
  324. data/spec/ffi/typedef_spec.rb +48 -0
  325. data/spec/ffi/union_spec.rb +60 -0
  326. data/spec/ffi/variadic_spec.rb +84 -0
  327. data/spec/spec.opts +4 -0
  328. metadata +396 -0
@@ -0,0 +1,99 @@
1
+ /* Area: ffi_call, closure_call
2
+ Purpose: Check structure passing with different structure size.
3
+ Depending on the ABI. Darwin/AIX do double-word
4
+ alignment of the struct if the first element is a double.
5
+ Check that it does here.
6
+ Limitations: none.
7
+ PR: none.
8
+ Originator: <andreast@gcc.gnu.org> 20030914 */
9
+
10
+ /* { dg-do run } */
11
+ #include "ffitest.h"
12
+
13
+ typedef struct cls_struct_9byte {
14
+ double a;
15
+ int b;
16
+ } cls_struct_9byte;
17
+
18
+ cls_struct_9byte cls_struct_9byte_fn(struct cls_struct_9byte b1,
19
+ struct cls_struct_9byte b2)
20
+ {
21
+ struct cls_struct_9byte result;
22
+
23
+ result.a = b1.a + b2.a;
24
+ result.b = b1.b + b2.b;
25
+
26
+ printf("%g %d %g %d: %g %d\n", b1.a, b1.b, b2.a, b2.b,
27
+ result.a, result.b);
28
+
29
+ return result;
30
+ }
31
+
32
+ static void cls_struct_9byte_gn(ffi_cif* cif __UNUSED__, void* resp,
33
+ void** args, void* userdata __UNUSED__)
34
+ {
35
+ struct cls_struct_9byte b1, b2;
36
+
37
+ b1 = *(struct cls_struct_9byte*)(args[0]);
38
+ b2 = *(struct cls_struct_9byte*)(args[1]);
39
+
40
+ *(cls_struct_9byte*)resp = cls_struct_9byte_fn(b1, b2);
41
+ }
42
+
43
+ int main (void)
44
+ {
45
+ ffi_cif cif;
46
+ #ifndef USING_MMAP
47
+ static ffi_closure cl;
48
+ #endif
49
+ ffi_closure *pcl;
50
+ void* args_dbl[3];
51
+ ffi_type* cls_struct_fields[3];
52
+ ffi_type cls_struct_type;
53
+ ffi_type* dbl_arg_types[3];
54
+
55
+ #ifdef USING_MMAP
56
+ pcl = allocate_mmap (sizeof(ffi_closure));
57
+ #else
58
+ pcl = &cl;
59
+ #endif
60
+
61
+ cls_struct_type.size = 0;
62
+ cls_struct_type.alignment = 0;
63
+ cls_struct_type.type = FFI_TYPE_STRUCT;
64
+ cls_struct_type.elements = cls_struct_fields;
65
+
66
+ struct cls_struct_9byte h_dbl = { 7.0, 8};
67
+ struct cls_struct_9byte j_dbl = { 1.0, 9};
68
+ struct cls_struct_9byte res_dbl;
69
+
70
+ cls_struct_fields[0] = &ffi_type_double;
71
+ cls_struct_fields[1] = &ffi_type_sint;
72
+ cls_struct_fields[2] = NULL;
73
+
74
+ dbl_arg_types[0] = &cls_struct_type;
75
+ dbl_arg_types[1] = &cls_struct_type;
76
+ dbl_arg_types[2] = NULL;
77
+
78
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
79
+ dbl_arg_types) == FFI_OK);
80
+
81
+ args_dbl[0] = &h_dbl;
82
+ args_dbl[1] = &j_dbl;
83
+ args_dbl[2] = NULL;
84
+
85
+ ffi_call(&cif, FFI_FN(cls_struct_9byte_fn), &res_dbl, args_dbl);
86
+ /* { dg-output "7 8 1 9: 8 17" } */
87
+ printf("res: %g %d\n", res_dbl.a, res_dbl.b);
88
+ /* { dg-output "\nres: 8 17" } */
89
+
90
+
91
+ CHECK(ffi_prep_closure(pcl, &cif, cls_struct_9byte_gn, NULL) == FFI_OK);
92
+
93
+ res_dbl = ((cls_struct_9byte(*)(cls_struct_9byte, cls_struct_9byte))(pcl))(h_dbl, j_dbl);
94
+ /* { dg-output "\n7 8 1 9: 8 17" } */
95
+ printf("res: %g %d\n", res_dbl.a, res_dbl.b);
96
+ /* { dg-output "\nres: 8 17" } */
97
+
98
+ exit(0);
99
+ }
@@ -0,0 +1,101 @@
1
+ /* Area: ffi_call, closure_call
2
+ Purpose: Check structure alignment of double.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: <hos@tamanegi.org> 20031203 */
6
+
7
+
8
+
9
+ /* { dg-do run } */
10
+ #include "ffitest.h"
11
+
12
+ typedef struct cls_struct_align {
13
+ unsigned char a;
14
+ double b;
15
+ unsigned char c;
16
+ } cls_struct_align;
17
+
18
+ cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
19
+ struct cls_struct_align a2)
20
+ {
21
+ struct cls_struct_align result;
22
+
23
+ result.a = a1.a + a2.a;
24
+ result.b = a1.b + a2.b;
25
+ result.c = a1.c + a2.c;
26
+
27
+ printf("%d %g %d %d %g %d: %d %g %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c);
28
+
29
+ return result;
30
+ }
31
+
32
+ static void
33
+ cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
34
+ void* userdata __UNUSED__)
35
+ {
36
+
37
+ struct cls_struct_align a1, a2;
38
+
39
+ a1 = *(struct cls_struct_align*)(args[0]);
40
+ a2 = *(struct cls_struct_align*)(args[1]);
41
+
42
+ *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2);
43
+ }
44
+
45
+ int main (void)
46
+ {
47
+ ffi_cif cif;
48
+ #ifndef USING_MMAP
49
+ static ffi_closure cl;
50
+ #endif
51
+ ffi_closure *pcl;
52
+ void* args_dbl[5];
53
+ ffi_type* cls_struct_fields[4];
54
+ ffi_type cls_struct_type;
55
+ ffi_type* dbl_arg_types[5];
56
+
57
+ #ifdef USING_MMAP
58
+ pcl = allocate_mmap (sizeof(ffi_closure));
59
+ #else
60
+ pcl = &cl;
61
+ #endif
62
+
63
+ cls_struct_type.size = 0;
64
+ cls_struct_type.alignment = 0;
65
+ cls_struct_type.type = FFI_TYPE_STRUCT;
66
+ cls_struct_type.elements = cls_struct_fields;
67
+
68
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
69
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
70
+ struct cls_struct_align res_dbl;
71
+
72
+ cls_struct_fields[0] = &ffi_type_uchar;
73
+ cls_struct_fields[1] = &ffi_type_double;
74
+ cls_struct_fields[2] = &ffi_type_uchar;
75
+ cls_struct_fields[3] = NULL;
76
+
77
+ dbl_arg_types[0] = &cls_struct_type;
78
+ dbl_arg_types[1] = &cls_struct_type;
79
+ dbl_arg_types[2] = NULL;
80
+
81
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
82
+ dbl_arg_types) == FFI_OK);
83
+
84
+ args_dbl[0] = &g_dbl;
85
+ args_dbl[1] = &f_dbl;
86
+ args_dbl[2] = NULL;
87
+
88
+ ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl);
89
+ /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
90
+ printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
91
+ /* { dg-output "\nres: 13 14271 140" } */
92
+
93
+ CHECK(ffi_prep_closure(pcl, &cif, cls_struct_align_gn, NULL) == FFI_OK);
94
+
95
+ res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(pcl))(g_dbl, f_dbl);
96
+ /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
97
+ printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
98
+ /* { dg-output "\nres: 13 14271 140" } */
99
+
100
+ exit(0);
101
+ }
@@ -0,0 +1,99 @@
1
+ /* Area: ffi_call, closure_call
2
+ Purpose: Check structure alignment of float.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: <hos@tamanegi.org> 20031203 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ typedef struct cls_struct_align {
11
+ unsigned char a;
12
+ float b;
13
+ unsigned char c;
14
+ } cls_struct_align;
15
+
16
+ cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
17
+ struct cls_struct_align a2)
18
+ {
19
+ struct cls_struct_align result;
20
+
21
+ result.a = a1.a + a2.a;
22
+ result.b = a1.b + a2.b;
23
+ result.c = a1.c + a2.c;
24
+
25
+ printf("%d %g %d %d %g %d: %d %g %d\n", a1.a, (double)a1.b, a1.c, a2.a, (double)a2.b, a2.c, result.a, (double)result.b, result.c);
26
+
27
+ return result;
28
+ }
29
+
30
+ static void
31
+ cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
32
+ void* userdata __UNUSED__)
33
+ {
34
+
35
+ struct cls_struct_align a1, a2;
36
+
37
+ a1 = *(struct cls_struct_align*)(args[0]);
38
+ a2 = *(struct cls_struct_align*)(args[1]);
39
+
40
+ *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2);
41
+ }
42
+
43
+ int main (void)
44
+ {
45
+ ffi_cif cif;
46
+ #ifndef USING_MMAP
47
+ static ffi_closure cl;
48
+ #endif
49
+ ffi_closure *pcl;
50
+ void* args_dbl[5];
51
+ ffi_type* cls_struct_fields[4];
52
+ ffi_type cls_struct_type;
53
+ ffi_type* dbl_arg_types[5];
54
+
55
+ #ifdef USING_MMAP
56
+ pcl = allocate_mmap (sizeof(ffi_closure));
57
+ #else
58
+ pcl = &cl;
59
+ #endif
60
+
61
+ cls_struct_type.size = 0;
62
+ cls_struct_type.alignment = 0;
63
+ cls_struct_type.type = FFI_TYPE_STRUCT;
64
+ cls_struct_type.elements = cls_struct_fields;
65
+
66
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
67
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
68
+ struct cls_struct_align res_dbl;
69
+
70
+ cls_struct_fields[0] = &ffi_type_uchar;
71
+ cls_struct_fields[1] = &ffi_type_float;
72
+ cls_struct_fields[2] = &ffi_type_uchar;
73
+ cls_struct_fields[3] = NULL;
74
+
75
+ dbl_arg_types[0] = &cls_struct_type;
76
+ dbl_arg_types[1] = &cls_struct_type;
77
+ dbl_arg_types[2] = NULL;
78
+
79
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
80
+ dbl_arg_types) == FFI_OK);
81
+
82
+ args_dbl[0] = &g_dbl;
83
+ args_dbl[1] = &f_dbl;
84
+ args_dbl[2] = NULL;
85
+
86
+ ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl);
87
+ /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
88
+ printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c);
89
+ /* { dg-output "\nres: 13 14271 140" } */
90
+
91
+ CHECK(ffi_prep_closure(pcl, &cif, cls_struct_align_gn, NULL) == FFI_OK);
92
+
93
+ res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(pcl))(g_dbl, f_dbl);
94
+ /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
95
+ printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c);
96
+ /* { dg-output "\nres: 13 14271 140" } */
97
+
98
+ exit(0);
99
+ }
@@ -0,0 +1,100 @@
1
+ /* Area: ffi_call, closure_call
2
+ Purpose: Check structure alignment of long double.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: <hos@tamanegi.org> 20031203 */
6
+
7
+ /* { dg-do run } */
8
+
9
+ #include "ffitest.h"
10
+
11
+ typedef struct cls_struct_align {
12
+ unsigned char a;
13
+ long double b;
14
+ unsigned char c;
15
+ } cls_struct_align;
16
+
17
+ cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
18
+ struct cls_struct_align a2)
19
+ {
20
+ struct cls_struct_align result;
21
+
22
+ result.a = a1.a + a2.a;
23
+ result.b = a1.b + a2.b;
24
+ result.c = a1.c + a2.c;
25
+
26
+ printf("%d %g %d %d %g %d: %d %g %d\n", a1.a, (double)a1.b, a1.c, a2.a, (double)a2.b, a2.c, result.a, (double)result.b, result.c);
27
+
28
+ return result;
29
+ }
30
+
31
+ static void
32
+ cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
33
+ void* userdata __UNUSED__)
34
+ {
35
+
36
+ struct cls_struct_align a1, a2;
37
+
38
+ a1 = *(struct cls_struct_align*)(args[0]);
39
+ a2 = *(struct cls_struct_align*)(args[1]);
40
+
41
+ *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2);
42
+ }
43
+
44
+ int main (void)
45
+ {
46
+ ffi_cif cif;
47
+ #ifndef USING_MMAP
48
+ static ffi_closure cl;
49
+ #endif
50
+ ffi_closure *pcl;
51
+ void* args_dbl[5];
52
+ ffi_type* cls_struct_fields[4];
53
+ ffi_type cls_struct_type;
54
+ ffi_type* dbl_arg_types[5];
55
+
56
+ #ifdef USING_MMAP
57
+ pcl = allocate_mmap (sizeof(ffi_closure));
58
+ #else
59
+ pcl = &cl;
60
+ #endif
61
+
62
+ cls_struct_type.size = 0;
63
+ cls_struct_type.alignment = 0;
64
+ cls_struct_type.type = FFI_TYPE_STRUCT;
65
+ cls_struct_type.elements = cls_struct_fields;
66
+
67
+ struct cls_struct_align g_dbl = { 12, 4951, 127 };
68
+ struct cls_struct_align f_dbl = { 1, 9320, 13 };
69
+ struct cls_struct_align res_dbl;
70
+
71
+ cls_struct_fields[0] = &ffi_type_uchar;
72
+ cls_struct_fields[1] = &ffi_type_longdouble;
73
+ cls_struct_fields[2] = &ffi_type_uchar;
74
+ cls_struct_fields[3] = NULL;
75
+
76
+ dbl_arg_types[0] = &cls_struct_type;
77
+ dbl_arg_types[1] = &cls_struct_type;
78
+ dbl_arg_types[2] = NULL;
79
+
80
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
81
+ dbl_arg_types) == FFI_OK);
82
+
83
+ args_dbl[0] = &g_dbl;
84
+ args_dbl[1] = &f_dbl;
85
+ args_dbl[2] = NULL;
86
+
87
+ ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl);
88
+ /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
89
+ printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c);
90
+ /* { dg-output "\nres: 13 14271 140" } */
91
+
92
+ CHECK(ffi_prep_closure(pcl, &cif, cls_struct_align_gn, NULL) == FFI_OK);
93
+
94
+ res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(pcl))(g_dbl, f_dbl);
95
+ /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
96
+ printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c);
97
+ /* { dg-output "\nres: 13 14271 140" } */
98
+
99
+ exit(0);
100
+ }
@@ -0,0 +1,101 @@
1
+ /* Area: ffi_call, closure_call
2
+ Purpose: Check structure alignment of pointer.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: <hos@tamanegi.org> 20031203 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ typedef struct cls_struct_align {
11
+ unsigned char a;
12
+ void *b;
13
+ unsigned char c;
14
+ } cls_struct_align;
15
+
16
+ cls_struct_align cls_struct_align_fn(struct cls_struct_align a1,
17
+ struct cls_struct_align a2)
18
+ {
19
+ struct cls_struct_align result;
20
+
21
+ result.a = a1.a + a2.a;
22
+ result.b = (void *)((unsigned long)a1.b + (unsigned long)a2.b);
23
+ result.c = a1.c + a2.c;
24
+
25
+ printf("%d %lu %d %d %lu %d: %d %lu %d\n", a1.a, (unsigned long)a1.b, a1.c,
26
+ a2.a, (unsigned long)a2.b, a2.c, result.a, (unsigned long)result.b,
27
+ result.c);
28
+
29
+ return result;
30
+ }
31
+
32
+ static void
33
+ cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
34
+ void* userdata __UNUSED__)
35
+ {
36
+
37
+ struct cls_struct_align a1, a2;
38
+
39
+ a1 = *(struct cls_struct_align*)(args[0]);
40
+ a2 = *(struct cls_struct_align*)(args[1]);
41
+
42
+ *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2);
43
+ }
44
+
45
+ int main (void)
46
+ {
47
+ ffi_cif cif;
48
+ #ifndef USING_MMAP
49
+ static ffi_closure cl;
50
+ #endif
51
+ ffi_closure *pcl;
52
+ void* args_dbl[5];
53
+ ffi_type* cls_struct_fields[4];
54
+ ffi_type cls_struct_type;
55
+ ffi_type* dbl_arg_types[5];
56
+
57
+ #ifdef USING_MMAP
58
+ pcl = allocate_mmap (sizeof(ffi_closure));
59
+ #else
60
+ pcl = &cl;
61
+ #endif
62
+
63
+ cls_struct_type.size = 0;
64
+ cls_struct_type.alignment = 0;
65
+ cls_struct_type.type = FFI_TYPE_STRUCT;
66
+ cls_struct_type.elements = cls_struct_fields;
67
+
68
+ struct cls_struct_align g_dbl = { 12, (void *)4951, 127 };
69
+ struct cls_struct_align f_dbl = { 1, (void *)9320, 13 };
70
+ struct cls_struct_align res_dbl;
71
+
72
+ cls_struct_fields[0] = &ffi_type_uchar;
73
+ cls_struct_fields[1] = &ffi_type_pointer;
74
+ cls_struct_fields[2] = &ffi_type_uchar;
75
+ cls_struct_fields[3] = NULL;
76
+
77
+ dbl_arg_types[0] = &cls_struct_type;
78
+ dbl_arg_types[1] = &cls_struct_type;
79
+ dbl_arg_types[2] = NULL;
80
+
81
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
82
+ dbl_arg_types) == FFI_OK);
83
+
84
+ args_dbl[0] = &g_dbl;
85
+ args_dbl[1] = &f_dbl;
86
+ args_dbl[2] = NULL;
87
+
88
+ ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl);
89
+ /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */
90
+ printf("res: %d %lu %d\n", res_dbl.a, (unsigned long)res_dbl.b, res_dbl.c);
91
+ /* { dg-output "\nres: 13 14271 140" } */
92
+
93
+ CHECK(ffi_prep_closure(pcl, &cif, cls_struct_align_gn, NULL) == FFI_OK);
94
+
95
+ res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(pcl))(g_dbl, f_dbl);
96
+ /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */
97
+ printf("res: %d %lu %d\n", res_dbl.a, (unsigned long)res_dbl.b, res_dbl.c);
98
+ /* { dg-output "\nres: 13 14271 140" } */
99
+
100
+ exit(0);
101
+ }