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,64 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check structures.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: From the original ffitest.c */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+ typedef struct
10
+ {
11
+ float f;
12
+ double d;
13
+ } test_structure_6;
14
+
15
+ static test_structure_6 struct6 (test_structure_6 ts)
16
+ {
17
+ ts.f += 1;
18
+ ts.d += 1;
19
+
20
+ return ts;
21
+ }
22
+
23
+ int main (void)
24
+ {
25
+ ffi_cif cif;
26
+ ffi_type *args[MAX_ARGS];
27
+ void *values[MAX_ARGS];
28
+ ffi_type ts6_type;
29
+ ffi_type *ts6_type_elements[3];
30
+ ts6_type.size = 0;
31
+ ts6_type.alignment = 0;
32
+ ts6_type.type = FFI_TYPE_STRUCT;
33
+ ts6_type.elements = ts6_type_elements;
34
+ ts6_type_elements[0] = &ffi_type_float;
35
+ ts6_type_elements[1] = &ffi_type_double;
36
+ ts6_type_elements[2] = NULL;
37
+
38
+
39
+ test_structure_6 ts6_arg;
40
+
41
+ /* This is a hack to get a properly aligned result buffer */
42
+ test_structure_6 *ts6_result =
43
+ (test_structure_6 *) malloc (sizeof(test_structure_6));
44
+
45
+ args[0] = &ts6_type;
46
+ values[0] = &ts6_arg;
47
+
48
+ /* Initialize the cif */
49
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts6_type, args) == FFI_OK);
50
+
51
+ ts6_arg.f = 5.55f;
52
+ ts6_arg.d = 6.66;
53
+
54
+ printf ("%g\n", ts6_arg.f);
55
+ printf ("%g\n", ts6_arg.d);
56
+
57
+ ffi_call(&cif, FFI_FN(struct6), ts6_result, values);
58
+
59
+ CHECK(ts6_result->f == 5.55f + 1);
60
+ CHECK(ts6_result->d == 6.66 + 1);
61
+
62
+ free (ts6_result);
63
+ exit(0);
64
+ }
@@ -0,0 +1,74 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check structures.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: From the original ffitest.c */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+ typedef struct
10
+ {
11
+ float f1;
12
+ float f2;
13
+ double d;
14
+ } test_structure_7;
15
+
16
+ static test_structure_7 struct7 (test_structure_7 ts)
17
+ {
18
+ ts.f1 += 1;
19
+ ts.f2 += 1;
20
+ ts.d += 1;
21
+
22
+ return ts;
23
+ }
24
+
25
+ int main (void)
26
+ {
27
+ ffi_cif cif;
28
+ ffi_type *args[MAX_ARGS];
29
+ void *values[MAX_ARGS];
30
+ ffi_type ts7_type;
31
+ ffi_type *ts7_type_elements[4];
32
+ ts7_type.size = 0;
33
+ ts7_type.alignment = 0;
34
+ ts7_type.type = FFI_TYPE_STRUCT;
35
+ ts7_type.elements = ts7_type_elements;
36
+ ts7_type_elements[0] = &ffi_type_float;
37
+ ts7_type_elements[1] = &ffi_type_float;
38
+ ts7_type_elements[2] = &ffi_type_double;
39
+ ts7_type_elements[3] = NULL;
40
+
41
+
42
+ test_structure_7 ts7_arg;
43
+
44
+ /* This is a hack to get a properly aligned result buffer */
45
+ test_structure_7 *ts7_result =
46
+ (test_structure_7 *) malloc (sizeof(test_structure_7));
47
+
48
+ args[0] = &ts7_type;
49
+ values[0] = &ts7_arg;
50
+
51
+ /* Initialize the cif */
52
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts7_type, args) == FFI_OK);
53
+
54
+ ts7_arg.f1 = 5.55f;
55
+ ts7_arg.f2 = 55.5f;
56
+ ts7_arg.d = 6.66;
57
+
58
+ printf ("%g\n", ts7_arg.f1);
59
+ printf ("%g\n", ts7_arg.f2);
60
+ printf ("%g\n", ts7_arg.d);
61
+
62
+ ffi_call(&cif, FFI_FN(struct7), ts7_result, values);
63
+
64
+ printf ("%g\n", ts7_result->f1);
65
+ printf ("%g\n", ts7_result->f2);
66
+ printf ("%g\n", ts7_result->d);
67
+
68
+ CHECK(ts7_result->f1 == 5.55f + 1);
69
+ CHECK(ts7_result->f2 == 55.5f + 1);
70
+ CHECK(ts7_result->d == 6.66 + 1);
71
+
72
+ free (ts7_result);
73
+ exit(0);
74
+ }
@@ -0,0 +1,80 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check structures.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: From the original ffitest.c */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+ typedef struct
10
+ {
11
+ float f1;
12
+ float f2;
13
+ float f3;
14
+ float f4;
15
+ } test_structure_8;
16
+
17
+ static test_structure_8 struct8 (test_structure_8 ts)
18
+ {
19
+ ts.f1 += 1;
20
+ ts.f2 += 1;
21
+ ts.f3 += 1;
22
+ ts.f4 += 1;
23
+
24
+ return ts;
25
+ }
26
+
27
+ int main (void)
28
+ {
29
+ ffi_cif cif;
30
+ ffi_type *args[MAX_ARGS];
31
+ void *values[MAX_ARGS];
32
+ ffi_type ts8_type;
33
+ ffi_type *ts8_type_elements[5];
34
+ ts8_type.size = 0;
35
+ ts8_type.alignment = 0;
36
+ ts8_type.type = FFI_TYPE_STRUCT;
37
+ ts8_type.elements = ts8_type_elements;
38
+ ts8_type_elements[0] = &ffi_type_float;
39
+ ts8_type_elements[1] = &ffi_type_float;
40
+ ts8_type_elements[2] = &ffi_type_float;
41
+ ts8_type_elements[3] = &ffi_type_float;
42
+ ts8_type_elements[4] = NULL;
43
+
44
+ test_structure_8 ts8_arg;
45
+
46
+ /* This is a hack to get a properly aligned result buffer */
47
+ test_structure_8 *ts8_result =
48
+ (test_structure_8 *) malloc (sizeof(test_structure_8));
49
+
50
+ args[0] = &ts8_type;
51
+ values[0] = &ts8_arg;
52
+
53
+ /* Initialize the cif */
54
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts8_type, args) == FFI_OK);
55
+
56
+ ts8_arg.f1 = 5.55f;
57
+ ts8_arg.f2 = 55.5f;
58
+ ts8_arg.f3 = -5.55f;
59
+ ts8_arg.f4 = -55.5f;
60
+
61
+ printf ("%g\n", ts8_arg.f1);
62
+ printf ("%g\n", ts8_arg.f2);
63
+ printf ("%g\n", ts8_arg.f3);
64
+ printf ("%g\n", ts8_arg.f4);
65
+
66
+ ffi_call(&cif, FFI_FN(struct8), ts8_result, values);
67
+
68
+ printf ("%g\n", ts8_result->f1);
69
+ printf ("%g\n", ts8_result->f2);
70
+ printf ("%g\n", ts8_result->f3);
71
+ printf ("%g\n", ts8_result->f4);
72
+
73
+ CHECK(ts8_result->f1 == 5.55f + 1);
74
+ CHECK(ts8_result->f2 == 55.5f + 1);
75
+ CHECK(ts8_result->f3 == -5.55f + 1);
76
+ CHECK(ts8_result->f4 == -55.5f + 1);
77
+
78
+ free (ts8_result);
79
+ exit(0);
80
+ }
@@ -0,0 +1,67 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check structures.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: From the original ffitest.c */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ typedef struct
11
+ {
12
+ float f;
13
+ int i;
14
+ } test_structure_9;
15
+
16
+ static test_structure_9 struct9 (test_structure_9 ts)
17
+ {
18
+ ts.f += 1;
19
+ ts.i += 1;
20
+
21
+ return ts;
22
+ }
23
+
24
+ int main (void)
25
+ {
26
+ ffi_cif cif;
27
+ ffi_type *args[MAX_ARGS];
28
+ void *values[MAX_ARGS];
29
+ ffi_type ts9_type;
30
+ ffi_type *ts9_type_elements[3];
31
+ ts9_type.size = 0;
32
+ ts9_type.alignment = 0;
33
+ ts9_type.type = FFI_TYPE_STRUCT;
34
+ ts9_type.elements = ts9_type_elements;
35
+ ts9_type_elements[0] = &ffi_type_float;
36
+ ts9_type_elements[1] = &ffi_type_sint;
37
+ ts9_type_elements[2] = NULL;
38
+
39
+ test_structure_9 ts9_arg;
40
+
41
+ /* This is a hack to get a properly aligned result buffer */
42
+ test_structure_9 *ts9_result =
43
+ (test_structure_9 *) malloc (sizeof(test_structure_9));
44
+
45
+ args[0] = &ts9_type;
46
+ values[0] = &ts9_arg;
47
+
48
+ /* Initialize the cif */
49
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts9_type, args) == FFI_OK);
50
+
51
+ ts9_arg.f = 5.55f;
52
+ ts9_arg.i = 5;
53
+
54
+ printf ("%g\n", ts9_arg.f);
55
+ printf ("%d\n", ts9_arg.i);
56
+
57
+ ffi_call(&cif, FFI_FN(struct9), ts9_result, values);
58
+
59
+ printf ("%g\n", ts9_result->f);
60
+ printf ("%d\n", ts9_result->i);
61
+
62
+ CHECK(ts9_result->f == 5.55f + 1);
63
+ CHECK(ts9_result->i == 5 + 1);
64
+
65
+ free (ts9_result);
66
+ exit(0);
67
+ }
@@ -0,0 +1,86 @@
1
+ #include <stdlib.h>
2
+ #include <stdio.h>
3
+ #include <fcntl.h>
4
+ #include <ffi.h>
5
+ #include "fficonfig.h"
6
+
7
+ #define MAX_ARGS 256
8
+
9
+
10
+ /* Define __UNUSED__ that also other compilers than gcc can run the tests. */
11
+ #undef __UNUSED__
12
+ #if defined(__GNUC__)
13
+ #define __UNUSED__ __attribute__((__unused__))
14
+ #else
15
+ #define __UNUSED__
16
+ #endif
17
+
18
+ #define CHECK(x) (!(x) ? abort() : (void)0)
19
+
20
+ /* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
21
+ file open. */
22
+ #ifdef HAVE_MMAP_ANON
23
+ # undef HAVE_MMAP_DEV_ZERO
24
+
25
+ # include <sys/mman.h>
26
+ # ifndef MAP_FAILED
27
+ # define MAP_FAILED -1
28
+ # endif
29
+ # if !defined (MAP_ANONYMOUS) && defined (MAP_ANON)
30
+ # define MAP_ANONYMOUS MAP_ANON
31
+ # endif
32
+ # define USING_MMAP
33
+
34
+ #endif
35
+
36
+ #ifdef HAVE_MMAP_DEV_ZERO
37
+
38
+ # include <sys/mman.h>
39
+ # ifndef MAP_FAILED
40
+ # define MAP_FAILED -1
41
+ # endif
42
+ # define USING_MMAP
43
+
44
+ #endif
45
+
46
+ #ifdef USING_MMAP
47
+ static inline void *
48
+ allocate_mmap (size_t size)
49
+ {
50
+ void *page;
51
+ #if defined (HAVE_MMAP_DEV_ZERO)
52
+ static int dev_zero_fd = -1;
53
+ #endif
54
+
55
+ #ifdef HAVE_MMAP_DEV_ZERO
56
+ if (dev_zero_fd == -1)
57
+ {
58
+ dev_zero_fd = open ("/dev/zero", O_RDONLY);
59
+ if (dev_zero_fd == -1)
60
+ {
61
+ perror ("open /dev/zero: %m");
62
+ exit (1);
63
+ }
64
+ }
65
+ #endif
66
+
67
+
68
+ #ifdef HAVE_MMAP_ANON
69
+ page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
70
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
71
+ #endif
72
+ #ifdef HAVE_MMAP_DEV_ZERO
73
+ page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
74
+ MAP_PRIVATE, dev_zero_fd, 0);
75
+ #endif
76
+
77
+ if (page == MAP_FAILED)
78
+ {
79
+ perror ("virtual memory exhausted");
80
+ exit (1);
81
+ }
82
+
83
+ return page;
84
+ }
85
+
86
+ #endif
@@ -0,0 +1,38 @@
1
+ # Copyright (C) 2003, 2006 Free Software Foundation, Inc.
2
+
3
+ # This program is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation; either version 2 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with this program; if not, write to the Free Software
15
+ # Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16
+ # libffi testsuite that uses the 'dg.exp' driver.
17
+
18
+ load_lib libffi-dg.exp
19
+
20
+ dg-init
21
+ libffi-init
22
+
23
+ global srcdir subdir
24
+
25
+ global cxx_options
26
+
27
+ set cxx_options " -shared-libgcc -lstdc++"
28
+
29
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O0 -W -Wall"
30
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O2"
31
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O3"
32
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-Os"
33
+
34
+ dg-finish
35
+
36
+ # Local Variables:
37
+ # tcl-indent-level:4
38
+ # End:
@@ -0,0 +1,123 @@
1
+ /* Area: ffi_closure, unwind info
2
+ Purpose: Check if the unwind information is passed correctly.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: Jeff Sturm <jsturm@one-point.com> */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitestcxx.h"
9
+
10
+ void
11
+ closure_test_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
12
+ void** args __UNUSED__, void* userdata __UNUSED__)
13
+ {
14
+ throw 9;
15
+ }
16
+
17
+ typedef void (*closure_test_type)();
18
+
19
+ void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp,
20
+ void** args, void* userdata __UNUSED__)
21
+ {
22
+ *(ffi_arg*)resp =
23
+ (int)*(float *)args[0] +(int)(*(float *)args[1]) +
24
+ (int)(*(float *)args[2]) + (int)*(float *)args[3] +
25
+ (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) +
26
+ (int)*(float *)args[6] + (int)(*(int *)args[7]) +
27
+ (int)(*(double*)args[8]) + (int)*(int *)args[9] +
28
+ (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
29
+ (int)*(int *)args[12] + (int)(*(int *)args[13]) +
30
+ (int)(*(int *)args[14]) + *(int *)args[15] + (int)(long)userdata;
31
+
32
+ printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
33
+ (int)*(float *)args[0], (int)(*(float *)args[1]),
34
+ (int)(*(float *)args[2]), (int)*(float *)args[3],
35
+ (int)(*(signed short *)args[4]), (int)(*(float *)args[5]),
36
+ (int)*(float *)args[6], (int)(*(int *)args[7]),
37
+ (int)(*(double *)args[8]), (int)*(int *)args[9],
38
+ (int)(*(int *)args[10]), (int)(*(float *)args[11]),
39
+ (int)*(int *)args[12], (int)(*(int *)args[13]),
40
+ (int)(*(int *)args[14]), *(int *)args[15],
41
+ (int)(long)userdata, (int)*(ffi_arg*)resp);
42
+
43
+ throw (int)*(ffi_arg*)resp;
44
+ }
45
+
46
+ typedef int (*closure_test_type1)(float, float, float, float, signed short,
47
+ float, float, int, double, int, int, float,
48
+ int, int, int, int);
49
+
50
+ int main (void)
51
+ {
52
+ ffi_cif cif;
53
+ #ifndef USING_MMAP
54
+ static ffi_closure cl;
55
+ #endif
56
+ ffi_closure *pcl;
57
+ ffi_type * cl_arg_types[17];
58
+ #ifdef USING_MMAP
59
+ pcl = (ffi_closure *) allocate_mmap (sizeof(ffi_closure));
60
+ #else
61
+ pcl = &cl;
62
+ #endif
63
+
64
+ {
65
+ cl_arg_types[1] = NULL;
66
+
67
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0,
68
+ &ffi_type_void, cl_arg_types) == FFI_OK);
69
+ CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn, NULL) == FFI_OK);
70
+
71
+ try
72
+ {
73
+ (*((closure_test_type)(pcl)))();
74
+ } catch (int exception_code)
75
+ {
76
+ CHECK(exception_code == 9);
77
+ }
78
+
79
+ printf("part one OK\n");
80
+ /* { dg-output "part one OK" } */
81
+ }
82
+
83
+ {
84
+
85
+ cl_arg_types[0] = &ffi_type_float;
86
+ cl_arg_types[1] = &ffi_type_float;
87
+ cl_arg_types[2] = &ffi_type_float;
88
+ cl_arg_types[3] = &ffi_type_float;
89
+ cl_arg_types[4] = &ffi_type_sshort;
90
+ cl_arg_types[5] = &ffi_type_float;
91
+ cl_arg_types[6] = &ffi_type_float;
92
+ cl_arg_types[7] = &ffi_type_uint;
93
+ cl_arg_types[8] = &ffi_type_double;
94
+ cl_arg_types[9] = &ffi_type_uint;
95
+ cl_arg_types[10] = &ffi_type_uint;
96
+ cl_arg_types[11] = &ffi_type_float;
97
+ cl_arg_types[12] = &ffi_type_uint;
98
+ cl_arg_types[13] = &ffi_type_uint;
99
+ cl_arg_types[14] = &ffi_type_uint;
100
+ cl_arg_types[15] = &ffi_type_uint;
101
+ cl_arg_types[16] = NULL;
102
+
103
+ /* Initialize the cif */
104
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
105
+ &ffi_type_sint, cl_arg_types) == FFI_OK);
106
+
107
+ CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn1,
108
+ (void *) 3 /* userdata */) == FFI_OK);
109
+ try
110
+ {
111
+ (*((closure_test_type1)pcl))
112
+ (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13,
113
+ 19, 21, 1);
114
+ /* { dg-output "\n1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */
115
+ } catch (int exception_code)
116
+ {
117
+ CHECK(exception_code == 255);
118
+ }
119
+ printf("part two OK\n");
120
+ /* { dg-output "\npart two OK" } */
121
+ }
122
+ exit(0);
123
+ }