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,51 @@
1
+ /* Area: closure_call
2
+ Purpose: Check return value uint.
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_uint_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
11
+ void* userdata __UNUSED__)
12
+ {
13
+ *(ffi_arg *)resp = *(unsigned int *)args[0];
14
+
15
+ printf("%d: %d\n",*(unsigned int *)args[0],
16
+ (int)*(ffi_arg *)(resp));
17
+ }
18
+ typedef unsigned int (*cls_ret_uint)(unsigned int);
19
+
20
+ int main (void)
21
+ {
22
+ ffi_cif cif;
23
+ #ifndef USING_MMAP
24
+ static ffi_closure cl;
25
+ #endif
26
+ ffi_closure *pcl;
27
+ ffi_type * cl_arg_types[2];
28
+ unsigned int res;
29
+
30
+ #ifdef USING_MMAP
31
+ pcl = allocate_mmap (sizeof(ffi_closure));
32
+ #else
33
+ pcl = &cl;
34
+ #endif
35
+
36
+ cl_arg_types[0] = &ffi_type_uint;
37
+ cl_arg_types[1] = NULL;
38
+
39
+ /* Initialize the cif */
40
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
41
+ &ffi_type_uint, cl_arg_types) == FFI_OK);
42
+
43
+ CHECK(ffi_prep_closure(pcl, &cif, cls_ret_uint_fn, NULL) == FFI_OK);
44
+
45
+ res = (*((cls_ret_uint)pcl))(2147483647);
46
+ /* { dg-output "2147483647: 2147483647" } */
47
+ printf("res: %d\n",res);
48
+ /* { dg-output "\nres: 2147483647" } */
49
+
50
+ exit(0);
51
+ }
@@ -0,0 +1,54 @@
1
+ /* Area: closure_call
2
+ Purpose: Check return value long long.
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_ulonglong_fn(ffi_cif* cif __UNUSED__, void* resp,
11
+ void** args, void* userdata __UNUSED__)
12
+ {
13
+ *(unsigned long long *)resp= *(unsigned long long *)args[0];
14
+
15
+ printf("%llu: %llu\n",*(unsigned long long *)args[0],
16
+ *(unsigned long long *)(resp));
17
+ }
18
+ typedef unsigned long long (*cls_ret_ulonglong)(unsigned long long);
19
+
20
+ int main (void)
21
+ {
22
+ ffi_cif cif;
23
+ #ifndef USING_MMAP
24
+ static ffi_closure cl;
25
+ #endif
26
+ ffi_closure *pcl;
27
+ ffi_type * cl_arg_types[2];
28
+ unsigned long long res;
29
+
30
+ #ifdef USING_MMAP
31
+ pcl = allocate_mmap (sizeof(ffi_closure));
32
+ #else
33
+ pcl = &cl;
34
+ #endif
35
+
36
+ cl_arg_types[0] = &ffi_type_uint64;
37
+ cl_arg_types[1] = NULL;
38
+
39
+ /* Initialize the cif */
40
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
41
+ &ffi_type_uint64, cl_arg_types) == FFI_OK);
42
+ CHECK(ffi_prep_closure(pcl, &cif, cls_ret_ulonglong_fn, NULL) == FFI_OK);
43
+ res = (*((cls_ret_ulonglong)pcl))(214LL);
44
+ /* { dg-output "214: 214" } */
45
+ printf("res: %lld\n", res);
46
+ /* { dg-output "\nres: 214" } */
47
+
48
+ res = (*((cls_ret_ulonglong)pcl))(9223372035854775808LL);
49
+ /* { dg-output "\n9223372035854775808: 9223372035854775808" } */
50
+ printf("res: %lld\n", res);
51
+ /* { dg-output "\nres: 9223372035854775808" } */
52
+
53
+ exit(0);
54
+ }
@@ -0,0 +1,51 @@
1
+ /* Area: closure_call
2
+ Purpose: Check return value ushort.
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_ushort_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
11
+ void* userdata __UNUSED__)
12
+ {
13
+ *(ffi_arg*)resp = *(unsigned short *)args[0];
14
+
15
+ printf("%d: %d\n",*(unsigned short *)args[0],
16
+ (int)*(ffi_arg *)(resp));
17
+ }
18
+ typedef unsigned short (*cls_ret_ushort)(unsigned short);
19
+
20
+ int main (void)
21
+ {
22
+ ffi_cif cif;
23
+ #ifndef USING_MMAP
24
+ static ffi_closure cl;
25
+ #endif
26
+ ffi_closure *pcl;
27
+ ffi_type * cl_arg_types[2];
28
+ unsigned short res;
29
+
30
+ #ifdef USING_MMAP
31
+ pcl = allocate_mmap (sizeof(ffi_closure));
32
+ #else
33
+ pcl = &cl;
34
+ #endif
35
+
36
+ cl_arg_types[0] = &ffi_type_ushort;
37
+ cl_arg_types[1] = NULL;
38
+
39
+ /* Initialize the cif */
40
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
41
+ &ffi_type_ushort, cl_arg_types) == FFI_OK);
42
+
43
+ CHECK(ffi_prep_closure(pcl, &cif, cls_ret_ushort_fn, NULL) == FFI_OK);
44
+
45
+ res = (*((cls_ret_ushort)pcl))(65535);
46
+ /* { dg-output "65535: 65535" } */
47
+ printf("res: %d\n",res);
48
+ /* { dg-output "\nres: 65535" } */
49
+
50
+ exit(0);
51
+ }
@@ -0,0 +1,86 @@
1
+ #include <stdlib.h>
2
+ #include <stdio.h>
3
+ #include <string.h>
4
+ #include <fcntl.h>
5
+ #include <ffi.h>
6
+ #include "fficonfig.h"
7
+
8
+ #define MAX_ARGS 256
9
+
10
+ #define CHECK(x) !(x) ? abort() : 0
11
+
12
+ /* Define __UNUSED__ that also other compilers than gcc can run the tests. */
13
+ #undef __UNUSED__
14
+ #if defined(__GNUC__)
15
+ #define __UNUSED__ __attribute__((__unused__))
16
+ #else
17
+ #define __UNUSED__
18
+ #endif
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 == (void *) MAP_FAILED)
78
+ {
79
+ perror ("virtual memory exhausted");
80
+ exit (1);
81
+ }
82
+
83
+ return page;
84
+ }
85
+
86
+ #endif
@@ -0,0 +1,59 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check return value float.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: From the original ffitest.c */
6
+
7
+ /* { dg-do run } */
8
+
9
+ #include "ffitest.h"
10
+
11
+ static int floating(int a, float b, double c, long double d)
12
+ {
13
+ int i;
14
+
15
+ i = (int) ((float)a/b + ((float)c/(float)d));
16
+
17
+ return i;
18
+ }
19
+
20
+ int main (void)
21
+ {
22
+ ffi_cif cif;
23
+ ffi_type *args[MAX_ARGS];
24
+ void *values[MAX_ARGS];
25
+ ffi_arg rint;
26
+
27
+ float f;
28
+ signed int si1;
29
+ double d;
30
+ long double ld;
31
+
32
+ args[0] = &ffi_type_sint;
33
+ values[0] = &si1;
34
+ args[1] = &ffi_type_float;
35
+ values[1] = &f;
36
+ args[2] = &ffi_type_double;
37
+ values[2] = &d;
38
+ args[3] = &ffi_type_longdouble;
39
+ values[3] = &ld;
40
+
41
+ /* Initialize the cif */
42
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
43
+ &ffi_type_sint, args) == FFI_OK);
44
+
45
+ si1 = 6;
46
+ f = 3.14159;
47
+ d = (double)1.0/(double)3.0;
48
+ ld = 2.71828182846L;
49
+
50
+ floating (si1, f, d, ld);
51
+
52
+ ffi_call(&cif, FFI_FN(floating), &rint, values);
53
+
54
+ printf ("%d vs %d\n", (int)rint, floating (si1, f, d, ld));
55
+
56
+ CHECK((int)rint == floating(si1, f, d, ld));
57
+
58
+ exit (0);
59
+ }
@@ -0,0 +1,58 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check return value double.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: From the original ffitest.c */
6
+
7
+ /* { dg-do run } */
8
+ #include "ffitest.h"
9
+ #include "float.h"
10
+
11
+ typedef union
12
+ {
13
+ double d;
14
+ unsigned char c[sizeof (double)];
15
+ } value_type;
16
+
17
+ #define CANARY 0xba
18
+
19
+ static double dblit(float f)
20
+ {
21
+ return f/3.0;
22
+ }
23
+
24
+ int main (void)
25
+ {
26
+ ffi_cif cif;
27
+ ffi_type *args[MAX_ARGS];
28
+ void *values[MAX_ARGS];
29
+ float f;
30
+ value_type result[2];
31
+ unsigned int i;
32
+
33
+ args[0] = &ffi_type_float;
34
+ values[0] = &f;
35
+
36
+ /* Initialize the cif */
37
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
38
+ &ffi_type_double, args) == FFI_OK);
39
+
40
+ f = 3.14159;
41
+
42
+ /* Put a canary in the return array. This is a regression test for
43
+ a buffer overrun. */
44
+ memset(result[1].c, CANARY, sizeof (double));
45
+
46
+ ffi_call(&cif, FFI_FN(dblit), &result[0].d, values);
47
+
48
+ /* These are not always the same!! Check for a reasonable delta */
49
+
50
+ CHECK(result[0].d - dblit(f) < DBL_EPSILON);
51
+
52
+ /* Check the canary. */
53
+ for (i = 0; i < sizeof (double); ++i)
54
+ CHECK(result[1].c[i] == CANARY);
55
+
56
+ exit(0);
57
+
58
+ }
@@ -0,0 +1,57 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check return value long double.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: From the original ffitest.c */
6
+
7
+ /* { dg-do run } */
8
+
9
+ #include "ffitest.h"
10
+ #include "float.h"
11
+
12
+ static long double ldblit(float f)
13
+ {
14
+ return (long double) (((long double) f)/ (long double) 3.0);
15
+ }
16
+
17
+ int main (void)
18
+ {
19
+ ffi_cif cif;
20
+ ffi_type *args[MAX_ARGS];
21
+ void *values[MAX_ARGS];
22
+ float f;
23
+ long double ld;
24
+
25
+ args[0] = &ffi_type_float;
26
+ values[0] = &f;
27
+
28
+ /* Initialize the cif */
29
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
30
+ &ffi_type_longdouble, args) == FFI_OK);
31
+
32
+ f = 3.14159;
33
+
34
+ #if 1
35
+ /* This is ifdef'd out for now. long double support under SunOS/gcc
36
+ is pretty much non-existent. You'll get the odd bus error in library
37
+ routines like printf(). */
38
+ printf ("%Lf\n", ldblit(f));
39
+ #endif
40
+ ld = 666;
41
+ ffi_call(&cif, FFI_FN(ldblit), &ld, values);
42
+
43
+ #if 1
44
+ /* This is ifdef'd out for now. long double support under SunOS/gcc
45
+ is pretty much non-existent. You'll get the odd bus error in library
46
+ routines like printf(). */
47
+ printf ("%Lf, %Lf, %Lf, %Lf\n", ld, ldblit(f), ld - ldblit(f), LDBL_EPSILON);
48
+ #endif
49
+
50
+ /* These are not always the same!! Check for a reasonable delta */
51
+ if (ld - ldblit(f) < LDBL_EPSILON)
52
+ puts("long double return value tests ok!");
53
+ else
54
+ CHECK(0);
55
+
56
+ exit(0);
57
+ }
@@ -0,0 +1,72 @@
1
+ /* Area: ffi_call
2
+ Purpose: Check float arguments with different orders.
3
+ Limitations: none.
4
+ PR: none.
5
+ Originator: From the original ffitest.c */
6
+
7
+ /* { dg-do run } */
8
+
9
+ #include "ffitest.h"
10
+ #include "float.h"
11
+
12
+ static double floating_1(float a, double b, long double c)
13
+ {
14
+ return (double) a + b + (double) c;
15
+ }
16
+
17
+ static double floating_2(long double a, double b, float c)
18
+ {
19
+ return (double) a + b + (double) c;
20
+ }
21
+
22
+ int main (void)
23
+ {
24
+ ffi_cif cif;
25
+ ffi_type *args[MAX_ARGS];
26
+ void *values[MAX_ARGS];
27
+ double rd;
28
+
29
+ float f;
30
+ double d;
31
+ long double ld;
32
+
33
+ args[0] = &ffi_type_float;
34
+ values[0] = &f;
35
+ args[1] = &ffi_type_double;
36
+ values[1] = &d;
37
+ args[2] = &ffi_type_longdouble;
38
+ values[2] = &ld;
39
+
40
+ /* Initialize the cif */
41
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
42
+ &ffi_type_double, args) == FFI_OK);
43
+
44
+ f = 3.14159;
45
+ d = (double)1.0/(double)3.0;
46
+ ld = 2.71828182846L;
47
+
48
+ floating_1 (f, d, ld);
49
+
50
+ ffi_call(&cif, FFI_FN(floating_1), &rd, values);
51
+
52
+ CHECK(rd - floating_1(f, d, ld) < DBL_EPSILON);
53
+
54
+ args[0] = &ffi_type_longdouble;
55
+ values[0] = &ld;
56
+ args[1] = &ffi_type_double;
57
+ values[1] = &d;
58
+ args[2] = &ffi_type_float;
59
+ values[2] = &f;
60
+
61
+ /* Initialize the cif */
62
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
63
+ &ffi_type_double, args) == FFI_OK);
64
+
65
+ floating_2 (ld, d, f);
66
+
67
+ ffi_call(&cif, FFI_FN(floating_2), &rd, values);
68
+
69
+ CHECK(rd - floating_2(ld, d, f) < DBL_EPSILON);
70
+
71
+ exit (0);
72
+ }