ffi 0.4.0-x86-mswin32

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