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 passing of multiple unsigned char values.
3
+ Limitations: none.
4
+ PR: PR13221.
5
+ Originator: <andreast@gcc.gnu.org> 20031129 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ unsigned char test_func_fn(unsigned char a1, unsigned char a2,
11
+ unsigned char a3, unsigned char a4)
12
+ {
13
+ unsigned char result;
14
+
15
+ result = a1 + a2 + a3 + a4;
16
+
17
+ printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result);
18
+
19
+ return result;
20
+
21
+ }
22
+
23
+ static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
24
+ void *data __UNUSED__)
25
+ {
26
+ unsigned char a1, a2, a3, a4;
27
+
28
+ a1 = *(unsigned char *)avals[0];
29
+ a2 = *(unsigned char *)avals[1];
30
+ a3 = *(unsigned char *)avals[2];
31
+ a4 = *(unsigned char *)avals[3];
32
+
33
+ *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4);
34
+
35
+ }
36
+
37
+ typedef unsigned char (*test_type)(unsigned char, unsigned char,
38
+ unsigned char, unsigned char);
39
+
40
+ void test_func(ffi_cif *cif __UNUSED__, void *rval __UNUSED__, void **avals,
41
+ void *data __UNUSED__)
42
+ {
43
+ printf("%d %d %d %d\n", *(unsigned char *)avals[0],
44
+ *(unsigned char *)avals[1], *(unsigned char *)avals[2],
45
+ *(unsigned char *)avals[3]);
46
+ }
47
+ int main (void)
48
+ {
49
+ ffi_cif cif;
50
+ #ifndef USING_MMAP
51
+ static ffi_closure cl;
52
+ #endif
53
+ ffi_closure *pcl;
54
+ void * args_dbl[5];
55
+ ffi_type * cl_arg_types[5];
56
+ ffi_arg res_call;
57
+ unsigned char a, b, c, d, res_closure;
58
+
59
+ #ifdef USING_MMAP
60
+ pcl = allocate_mmap (sizeof(ffi_closure));
61
+ #else
62
+ pcl = &cl;
63
+ #endif
64
+
65
+ a = 1;
66
+ b = 2;
67
+ c = 127;
68
+ d = 125;
69
+
70
+ args_dbl[0] = &a;
71
+ args_dbl[1] = &b;
72
+ args_dbl[2] = &c;
73
+ args_dbl[3] = &d;
74
+ args_dbl[4] = NULL;
75
+
76
+ cl_arg_types[0] = &ffi_type_uchar;
77
+ cl_arg_types[1] = &ffi_type_uchar;
78
+ cl_arg_types[2] = &ffi_type_uchar;
79
+ cl_arg_types[3] = &ffi_type_uchar;
80
+ cl_arg_types[4] = NULL;
81
+
82
+ /* Initialize the cif */
83
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
84
+ &ffi_type_uchar, cl_arg_types) == FFI_OK);
85
+
86
+ ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
87
+ /* { dg-output "1 2 127 125: 255" } */
88
+ printf("res: %d\n", (unsigned char)res_call);
89
+ /* { dg-output "\nres: 255" } */
90
+
91
+ CHECK(ffi_prep_closure(pcl, &cif, test_func_gn, NULL) == FFI_OK);
92
+
93
+ res_closure = (*((test_type)pcl))(1, 2, 127, 125);
94
+ /* { dg-output "\n1 2 127 125: 255" } */
95
+ printf("res: %d\n", res_closure);
96
+ /* { dg-output "\nres: 255" } */
97
+
98
+ exit(0);
99
+ }
@@ -0,0 +1,82 @@
1
+ /* Area: ffi_call, closure_call
2
+ Purpose: Check passing of multiple unsigned short values.
3
+ Limitations: none.
4
+ PR: PR13221.
5
+ Originator: <andreast@gcc.gnu.org> 20031129 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ unsigned short test_func_fn(unsigned short a1, unsigned short a2)
11
+ {
12
+ unsigned short result;
13
+
14
+ result = a1 + a2;
15
+
16
+ printf("%d %d: %d\n", a1, a2, result);
17
+
18
+ return result;
19
+
20
+ }
21
+
22
+ static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
23
+ void *data __UNUSED__)
24
+ {
25
+ unsigned short a1, a2;
26
+
27
+ a1 = *(unsigned short *)avals[0];
28
+ a2 = *(unsigned short *)avals[1];
29
+
30
+ *(ffi_arg *)rval = test_func_fn(a1, a2);
31
+
32
+ }
33
+
34
+ typedef unsigned short (*test_type)(unsigned short, unsigned short);
35
+
36
+ int main (void)
37
+ {
38
+ ffi_cif cif;
39
+ #ifndef USING_MMAP
40
+ static ffi_closure cl;
41
+ #endif
42
+ ffi_closure *pcl;
43
+ void * args_dbl[3];
44
+ ffi_type * cl_arg_types[3];
45
+ ffi_arg res_call;
46
+ unsigned short a, b, res_closure;
47
+
48
+ #ifdef USING_MMAP
49
+ pcl = allocate_mmap (sizeof(ffi_closure));
50
+ #else
51
+ pcl = &cl;
52
+ #endif
53
+
54
+ a = 2;
55
+ b = 32765;
56
+
57
+ args_dbl[0] = &a;
58
+ args_dbl[1] = &b;
59
+ args_dbl[2] = NULL;
60
+
61
+ cl_arg_types[0] = &ffi_type_ushort;
62
+ cl_arg_types[1] = &ffi_type_ushort;
63
+ cl_arg_types[2] = NULL;
64
+
65
+ /* Initialize the cif */
66
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
67
+ &ffi_type_ushort, cl_arg_types) == FFI_OK);
68
+
69
+ ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
70
+ /* { dg-output "2 32765: 32767" } */
71
+ printf("res: %d\n", (unsigned short)res_call);
72
+ /* { dg-output "\nres: 32767" } */
73
+
74
+ CHECK(ffi_prep_closure(pcl, &cif, test_func_gn, NULL) == FFI_OK);
75
+
76
+ res_closure = (*((test_type)pcl))(2, 32765);
77
+ /* { dg-output "\n2 32765: 32767" } */
78
+ printf("res: %d\n", res_closure);
79
+ /* { dg-output "\nres: 32767" } */
80
+
81
+ exit(0);
82
+ }
@@ -0,0 +1,94 @@
1
+ /* Area: ffi_call, closure_call
2
+ Purpose: Check passing of multiple unsigned short/char values.
3
+ Limitations: none.
4
+ PR: PR13221.
5
+ Originator: <andreast@gcc.gnu.org> 20031129 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ unsigned short test_func_fn(unsigned char a1, unsigned short a2,
11
+ unsigned char a3, unsigned short a4)
12
+ {
13
+ unsigned short result;
14
+
15
+ result = a1 + a2 + a3 + a4;
16
+
17
+ printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result);
18
+
19
+ return result;
20
+
21
+ }
22
+
23
+ static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals,
24
+ void *data __UNUSED__)
25
+ {
26
+ unsigned char a1, a3;
27
+ unsigned short a2, a4;
28
+
29
+ a1 = *(unsigned char *)avals[0];
30
+ a2 = *(unsigned short *)avals[1];
31
+ a3 = *(unsigned char *)avals[2];
32
+ a4 = *(unsigned short *)avals[3];
33
+
34
+ *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4);
35
+
36
+ }
37
+
38
+ typedef unsigned short (*test_type)(unsigned char, unsigned short,
39
+ unsigned char, unsigned short);
40
+
41
+ int main (void)
42
+ {
43
+ ffi_cif cif;
44
+ #ifndef USING_MMAP
45
+ static ffi_closure cl;
46
+ #endif
47
+ ffi_closure *pcl;
48
+ void * args_dbl[5];
49
+ ffi_type * cl_arg_types[5];
50
+ ffi_arg res_call;
51
+ unsigned char a, c;
52
+ unsigned short b, d, res_closure;
53
+
54
+ #ifdef USING_MMAP
55
+ pcl = allocate_mmap (sizeof(ffi_closure));
56
+ #else
57
+ pcl = &cl;
58
+ #endif
59
+
60
+ a = 1;
61
+ b = 2;
62
+ c = 127;
63
+ d = 128;
64
+
65
+ args_dbl[0] = &a;
66
+ args_dbl[1] = &b;
67
+ args_dbl[2] = &c;
68
+ args_dbl[3] = &d;
69
+ args_dbl[4] = NULL;
70
+
71
+ cl_arg_types[0] = &ffi_type_uchar;
72
+ cl_arg_types[1] = &ffi_type_ushort;
73
+ cl_arg_types[2] = &ffi_type_uchar;
74
+ cl_arg_types[3] = &ffi_type_ushort;
75
+ cl_arg_types[4] = NULL;
76
+
77
+ /* Initialize the cif */
78
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
79
+ &ffi_type_ushort, cl_arg_types) == FFI_OK);
80
+
81
+ ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl);
82
+ /* { dg-output "1 2 127 128: 258" } */
83
+ printf("res: %d\n", (unsigned short)res_call);
84
+ /* { dg-output "\nres: 258" } */
85
+
86
+ CHECK(ffi_prep_closure(pcl, &cif, test_func_gn, NULL) == FFI_OK);
87
+
88
+ res_closure = (*((test_type)pcl))(1, 2, 127, 128);
89
+ /* { dg-output "\n1 2 127 128: 258" } */
90
+ printf("res: %d\n", res_closure);
91
+ /* { dg-output "\nres: 258" } */
92
+
93
+ exit(0);
94
+ }
@@ -0,0 +1,52 @@
1
+ /* Area: closure_call
2
+ Purpose: Check return value schar.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: <andreast@gcc.gnu.org> 20031108 */
6
+
7
+
8
+
9
+ /* { dg-do run } */
10
+ #include "ffitest.h"
11
+
12
+ static void cls_ret_schar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
13
+ void* userdata __UNUSED__)
14
+ {
15
+ *(ffi_arg*)resp = *(signed char *)args[0];
16
+ printf("%d: %d\n",*(signed char *)args[0],
17
+ (int)*(ffi_arg *)(resp));
18
+ }
19
+ typedef signed char (*cls_ret_schar)(signed char);
20
+
21
+ int main (void)
22
+ {
23
+ ffi_cif cif;
24
+ #ifndef USING_MMAP
25
+ static ffi_closure cl;
26
+ #endif
27
+ ffi_closure *pcl;
28
+ ffi_type * cl_arg_types[2];
29
+ signed char res;
30
+
31
+ #ifdef USING_MMAP
32
+ pcl = allocate_mmap (sizeof(ffi_closure));
33
+ #else
34
+ pcl = &cl;
35
+ #endif
36
+
37
+ cl_arg_types[0] = &ffi_type_schar;
38
+ cl_arg_types[1] = NULL;
39
+
40
+ /* Initialize the cif */
41
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
42
+ &ffi_type_schar, cl_arg_types) == FFI_OK);
43
+
44
+ CHECK(ffi_prep_closure(pcl, &cif, cls_ret_schar_fn, NULL) == FFI_OK);
45
+
46
+ res = (*((cls_ret_schar)pcl))(127);
47
+ /* { dg-output "127: 127" } */
48
+ printf("res: %d\n", res);
49
+ /* { dg-output "\nres: 127" } */
50
+
51
+ exit(0);
52
+ }
@@ -0,0 +1,50 @@
1
+ /* Area: closure_call
2
+ Purpose: Check return value sint32.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: <andreast@gcc.gnu.org> 20031108 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ static void cls_ret_sint_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
11
+ void* userdata __UNUSED__)
12
+ {
13
+ *(ffi_arg*)resp = *(signed int *)args[0];
14
+ printf("%d: %d\n",*(signed int *)args[0],
15
+ (int)*(ffi_arg *)(resp));
16
+ }
17
+ typedef signed int (*cls_ret_sint)(signed int);
18
+
19
+ int main (void)
20
+ {
21
+ ffi_cif cif;
22
+ #ifndef USING_MMAP
23
+ static ffi_closure cl;
24
+ #endif
25
+ ffi_closure *pcl;
26
+ ffi_type * cl_arg_types[2];
27
+ signed int res;
28
+
29
+ #ifdef USING_MMAP
30
+ pcl = allocate_mmap (sizeof(ffi_closure));
31
+ #else
32
+ pcl = &cl;
33
+ #endif
34
+
35
+ cl_arg_types[0] = &ffi_type_sint;
36
+ cl_arg_types[1] = NULL;
37
+
38
+ /* Initialize the cif */
39
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
40
+ &ffi_type_sint, cl_arg_types) == FFI_OK);
41
+
42
+ CHECK(ffi_prep_closure(pcl, &cif, cls_ret_sint_fn, NULL) == FFI_OK);
43
+
44
+ res = (*((cls_ret_sint)pcl))(65534);
45
+ /* { dg-output "65534: 65534" } */
46
+ printf("res: %d\n",res);
47
+ /* { dg-output "\nres: 65534" } */
48
+
49
+ exit(0);
50
+ }
@@ -0,0 +1,50 @@
1
+ /* Area: closure_call
2
+ Purpose: Check return value sshort.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: <andreast@gcc.gnu.org> 20031108 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ static void cls_ret_sshort_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
11
+ void* userdata __UNUSED__)
12
+ {
13
+ *(ffi_arg*)resp = *(signed short *)args[0];
14
+ printf("%d: %d\n",*(signed short *)args[0],
15
+ (int)*(ffi_arg *)(resp));
16
+ }
17
+ typedef signed short (*cls_ret_sshort)(signed short);
18
+
19
+ int main (void)
20
+ {
21
+ ffi_cif cif;
22
+ #ifndef USING_MMAP
23
+ static ffi_closure cl;
24
+ #endif
25
+ ffi_closure *pcl;
26
+ ffi_type * cl_arg_types[2];
27
+ signed short res;
28
+
29
+ #ifdef USING_MMAP
30
+ pcl = allocate_mmap (sizeof(ffi_closure));
31
+ #else
32
+ pcl = &cl;
33
+ #endif
34
+
35
+ cl_arg_types[0] = &ffi_type_sshort;
36
+ cl_arg_types[1] = NULL;
37
+
38
+ /* Initialize the cif */
39
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
40
+ &ffi_type_sshort, cl_arg_types) == FFI_OK);
41
+
42
+ CHECK(ffi_prep_closure(pcl, &cif, cls_ret_sshort_fn, NULL) == FFI_OK);
43
+
44
+ res = (*((cls_ret_sshort)pcl))(255);
45
+ /* { dg-output "255: 255" } */
46
+ printf("res: %d\n",res);
47
+ /* { dg-output "\nres: 255" } */
48
+
49
+ exit(0);
50
+ }
@@ -0,0 +1,50 @@
1
+ /* Area: closure_call
2
+ Purpose: Check return value uchar.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: <andreast@gcc.gnu.org> 20030828 */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+
10
+ static void cls_ret_uchar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
11
+ void* userdata __UNUSED__)
12
+ {
13
+ *(ffi_arg*)resp = *(unsigned char *)args[0];
14
+ printf("%d: %d\n",*(unsigned char *)args[0],
15
+ (int)*(ffi_arg *)(resp));
16
+ }
17
+ typedef unsigned char (*cls_ret_uchar)(unsigned char);
18
+
19
+ int main (void)
20
+ {
21
+ ffi_cif cif;
22
+ #ifndef USING_MMAP
23
+ static ffi_closure cl;
24
+ #endif
25
+ ffi_closure *pcl;
26
+ ffi_type * cl_arg_types[2];
27
+ unsigned char res;
28
+
29
+ #ifdef USING_MMAP
30
+ pcl = allocate_mmap (sizeof(ffi_closure));
31
+ #else
32
+ pcl = &cl;
33
+ #endif
34
+
35
+ cl_arg_types[0] = &ffi_type_uchar;
36
+ cl_arg_types[1] = NULL;
37
+
38
+ /* Initialize the cif */
39
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
40
+ &ffi_type_uchar, cl_arg_types) == FFI_OK);
41
+
42
+ CHECK(ffi_prep_closure(pcl, &cif, cls_ret_uchar_fn, NULL) == FFI_OK);
43
+
44
+ res = (*((cls_ret_uchar)pcl))(127);
45
+ /* { dg-output "127: 127" } */
46
+ printf("res: %d\n",res);
47
+ /* { dg-output "\nres: 127" } */
48
+
49
+ exit(0);
50
+ }