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,391 @@
1
+ /* -----------------------------------------------------------------------
2
+ win32.S - Copyright (c) 1996, 1998, 2001, 2002 Red Hat, Inc.
3
+ Copyright (c) 2001 John Beniton
4
+ Copyright (c) 2002 Ranjit Mathew
5
+
6
+
7
+ X86 Foreign Function Interface
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining
10
+ a copy of this software and associated documentation files (the
11
+ ``Software''), to deal in the Software without restriction, including
12
+ without limitation the rights to use, copy, modify, merge, publish,
13
+ distribute, sublicense, and/or sell copies of the Software, and to
14
+ permit persons to whom the Software is furnished to do so, subject to
15
+ the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included
18
+ in all copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
21
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
24
+ ANY CLAIM, DAMAGES OR
25
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
26
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
27
+ OTHER DEALINGS IN THE SOFTWARE.
28
+ ----------------------------------------------------------------------- */
29
+
30
+ #define LIBFFI_ASM
31
+ #include <fficonfig.h>
32
+ #include <ffi.h>
33
+
34
+ .text
35
+
36
+ .globl ffi_prep_args
37
+
38
+ # This assumes we are using gas.
39
+ .balign 16
40
+ .globl _ffi_call_SYSV
41
+
42
+ _ffi_call_SYSV:
43
+ pushl %ebp
44
+ movl %esp,%ebp
45
+
46
+ # Make room for all of the new args.
47
+ movl 16(%ebp),%ecx
48
+ subl %ecx,%esp
49
+
50
+ movl %esp,%eax
51
+
52
+ # Place all of the ffi_prep_args in position
53
+ pushl 12(%ebp)
54
+ pushl %eax
55
+ call *8(%ebp)
56
+
57
+ # Return stack to previous state and call the function
58
+ addl $8,%esp
59
+
60
+ # FIXME: Align the stack to a 128-bit boundary to avoid
61
+ # potential performance hits.
62
+
63
+ call *28(%ebp)
64
+
65
+ # Remove the space we pushed for the args
66
+ movl 16(%ebp),%ecx
67
+ addl %ecx,%esp
68
+
69
+ # Load %ecx with the return type code
70
+ movl 20(%ebp),%ecx
71
+
72
+ # If the return value pointer is NULL, assume no return value.
73
+ cmpl $0,24(%ebp)
74
+ jne retint
75
+
76
+ # Even if there is no space for the return value, we are
77
+ # obliged to handle floating-point values.
78
+ cmpl $FFI_TYPE_FLOAT,%ecx
79
+ jne noretval
80
+ fstp %st(0)
81
+
82
+ jmp epilogue
83
+
84
+ retint:
85
+ cmpl $FFI_TYPE_INT,%ecx
86
+ jne retfloat
87
+ # Load %ecx with the pointer to storage for the return value
88
+ movl 24(%ebp),%ecx
89
+ movl %eax,0(%ecx)
90
+ jmp epilogue
91
+
92
+ retfloat:
93
+ cmpl $FFI_TYPE_FLOAT,%ecx
94
+ jne retdouble
95
+ # Load %ecx with the pointer to storage for the return value
96
+ movl 24(%ebp),%ecx
97
+ fstps (%ecx)
98
+ jmp epilogue
99
+
100
+ retdouble:
101
+ cmpl $FFI_TYPE_DOUBLE,%ecx
102
+ jne retlongdouble
103
+ # Load %ecx with the pointer to storage for the return value
104
+ movl 24(%ebp),%ecx
105
+ fstpl (%ecx)
106
+ jmp epilogue
107
+
108
+ retlongdouble:
109
+ cmpl $FFI_TYPE_LONGDOUBLE,%ecx
110
+ jne retint64
111
+ # Load %ecx with the pointer to storage for the return value
112
+ movl 24(%ebp),%ecx
113
+ fstpt (%ecx)
114
+ jmp epilogue
115
+
116
+ retint64:
117
+ cmpl $FFI_TYPE_SINT64,%ecx
118
+ jne retstruct1b
119
+ # Load %ecx with the pointer to storage for the return value
120
+ movl 24(%ebp),%ecx
121
+ movl %eax,0(%ecx)
122
+ movl %edx,4(%ecx)
123
+
124
+ retstruct1b:
125
+ cmpl $FFI_TYPE_SINT8,%ecx
126
+ jne retstruct2b
127
+ # Load %ecx with the pointer to storage for the return value
128
+ movl 24(%ebp),%ecx
129
+ movb %al,0(%ecx)
130
+ jmp epilogue
131
+
132
+ retstruct2b:
133
+ cmpl $FFI_TYPE_SINT16,%ecx
134
+ jne retstruct
135
+ # Load %ecx with the pointer to storage for the return value
136
+ movl 24(%ebp),%ecx
137
+ movw %ax,0(%ecx)
138
+ jmp epilogue
139
+
140
+ retstruct:
141
+ # Nothing to do!
142
+
143
+ noretval:
144
+ epilogue:
145
+ movl %ebp,%esp
146
+ popl %ebp
147
+ ret
148
+
149
+ .ffi_call_SYSV_end:
150
+
151
+ # This assumes we are using gas.
152
+ .balign 16
153
+ .globl _ffi_call_STDCALL
154
+
155
+ _ffi_call_STDCALL:
156
+ pushl %ebp
157
+ movl %esp,%ebp
158
+
159
+ # Make room for all of the new args.
160
+ movl 16(%ebp),%ecx
161
+ subl %ecx,%esp
162
+
163
+ movl %esp,%eax
164
+
165
+ # Place all of the ffi_prep_args in position
166
+ pushl 12(%ebp)
167
+ pushl %eax
168
+ call *8(%ebp)
169
+
170
+ # Return stack to previous state and call the function
171
+ addl $8,%esp
172
+
173
+ # FIXME: Align the stack to a 128-bit boundary to avoid
174
+ # potential performance hits.
175
+
176
+ call *28(%ebp)
177
+
178
+ # stdcall functions pop arguments off the stack themselves
179
+
180
+ # Load %ecx with the return type code
181
+ movl 20(%ebp),%ecx
182
+
183
+ # If the return value pointer is NULL, assume no return value.
184
+ cmpl $0,24(%ebp)
185
+ jne sc_retint
186
+
187
+ # Even if there is no space for the return value, we are
188
+ # obliged to handle floating-point values.
189
+ cmpl $FFI_TYPE_FLOAT,%ecx
190
+ jne sc_noretval
191
+ fstp %st(0)
192
+
193
+ jmp sc_epilogue
194
+
195
+ sc_retint:
196
+ cmpl $FFI_TYPE_INT,%ecx
197
+ jne sc_retfloat
198
+ # Load %ecx with the pointer to storage for the return value
199
+ movl 24(%ebp),%ecx
200
+ movl %eax,0(%ecx)
201
+ jmp sc_epilogue
202
+
203
+ sc_retfloat:
204
+ cmpl $FFI_TYPE_FLOAT,%ecx
205
+ jne sc_retdouble
206
+ # Load %ecx with the pointer to storage for the return value
207
+ movl 24(%ebp),%ecx
208
+ fstps (%ecx)
209
+ jmp sc_epilogue
210
+
211
+ sc_retdouble:
212
+ cmpl $FFI_TYPE_DOUBLE,%ecx
213
+ jne sc_retlongdouble
214
+ # Load %ecx with the pointer to storage for the return value
215
+ movl 24(%ebp),%ecx
216
+ fstpl (%ecx)
217
+ jmp sc_epilogue
218
+
219
+ sc_retlongdouble:
220
+ cmpl $FFI_TYPE_LONGDOUBLE,%ecx
221
+ jne sc_retint64
222
+ # Load %ecx with the pointer to storage for the return value
223
+ movl 24(%ebp),%ecx
224
+ fstpt (%ecx)
225
+ jmp sc_epilogue
226
+
227
+ sc_retint64:
228
+ cmpl $FFI_TYPE_SINT64,%ecx
229
+ jne sc_retstruct1b
230
+ # Load %ecx with the pointer to storage for the return value
231
+ movl 24(%ebp),%ecx
232
+ movl %eax,0(%ecx)
233
+ movl %edx,4(%ecx)
234
+
235
+ sc_retstruct1b:
236
+ cmpl $FFI_TYPE_SINT8,%ecx
237
+ jne sc_retstruct2b
238
+ # Load %ecx with the pointer to storage for the return value
239
+ movl 24(%ebp),%ecx
240
+ movb %al,0(%ecx)
241
+ jmp sc_epilogue
242
+
243
+ sc_retstruct2b:
244
+ cmpl $FFI_TYPE_SINT16,%ecx
245
+ jne sc_retstruct
246
+ # Load %ecx with the pointer to storage for the return value
247
+ movl 24(%ebp),%ecx
248
+ movw %ax,0(%ecx)
249
+ jmp sc_epilogue
250
+
251
+ sc_retstruct:
252
+ # Nothing to do!
253
+
254
+ sc_noretval:
255
+ sc_epilogue:
256
+ movl %ebp,%esp
257
+ popl %ebp
258
+ ret
259
+
260
+ .ffi_call_STDCALL_end:
261
+
262
+ .globl _ffi_closure_STDCALL
263
+ _ffi_closure_STDCALL:
264
+ pushl %ebp
265
+ movl %esp, %ebp
266
+ subl $40, %esp
267
+ leal -24(%ebp), %edx
268
+ movl %edx, -12(%ebp) /* resp */
269
+ leal 12(%ebp), %edx /* account for stub return address on stack */
270
+ movl %edx, 4(%esp) /* args */
271
+ leal -12(%ebp), %edx
272
+ movl %edx, (%esp) /* &resp */
273
+ call _ffi_closure_SYSV_inner
274
+ movl -12(%ebp), %ecx
275
+ jmp .Lcls_return_result
276
+ .ffi_closure_STDCALL_end:
277
+
278
+ .globl _ffi_closure_SYSV
279
+ _ffi_closure_SYSV:
280
+ pushl %ebp
281
+ movl %esp, %ebp
282
+ subl $40, %esp
283
+ leal -24(%ebp), %edx
284
+ movl %edx, -12(%ebp) /* resp */
285
+ leal 8(%ebp), %edx
286
+ movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */
287
+ leal -12(%ebp), %edx
288
+ movl %edx, (%esp) /* &resp */
289
+ call _ffi_closure_SYSV_inner
290
+ movl -12(%ebp), %ecx
291
+ .Lcls_return_result:
292
+ cmpl $FFI_TYPE_INT, %eax
293
+ je .Lcls_retint
294
+ cmpl $FFI_TYPE_FLOAT, %eax
295
+ je .Lcls_retfloat
296
+ cmpl $FFI_TYPE_DOUBLE, %eax
297
+ je .Lcls_retdouble
298
+ cmpl $FFI_TYPE_LONGDOUBLE, %eax
299
+ je .Lcls_retldouble
300
+ cmpl $FFI_TYPE_SINT64, %eax
301
+ je .Lcls_retllong
302
+ cmpl $FFI_TYPE_SINT8, %eax /* 1-byte struct */
303
+ je .Lcls_retstruct1
304
+ cmpl $FFI_TYPE_SINT16, %eax /* 2-bytes struct */
305
+ je .Lcls_retstruct2
306
+ .Lcls_epilogue:
307
+ movl %ebp, %esp
308
+ popl %ebp
309
+ ret
310
+ .Lcls_retint:
311
+ movl (%ecx), %eax
312
+ jmp .Lcls_epilogue
313
+ .Lcls_retfloat:
314
+ flds (%ecx)
315
+ jmp .Lcls_epilogue
316
+ .Lcls_retdouble:
317
+ fldl (%ecx)
318
+ jmp .Lcls_epilogue
319
+ .Lcls_retldouble:
320
+ fldt (%ecx)
321
+ jmp .Lcls_epilogue
322
+ .Lcls_retllong:
323
+ movl (%ecx), %eax
324
+ movl 4(%ecx), %edx
325
+ jmp .Lcls_epilogue
326
+ .Lcls_retstruct1:
327
+ movsbl (%ecx), %eax
328
+ jmp .Lcls_epilogue
329
+ .Lcls_retstruct2:
330
+ movswl (%ecx), %eax
331
+ jmp .Lcls_epilogue
332
+ .ffi_closure_SYSV_end:
333
+
334
+ #if !FFI_NO_RAW_API
335
+
336
+ #define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3)
337
+ #define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4)
338
+ #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
339
+ #define CIF_FLAGS_OFFSET 20
340
+
341
+ .balign 16
342
+ .globl _ffi_closure_raw_SYSV
343
+ _ffi_closure_raw_SYSV:
344
+ pushl %ebp
345
+ movl %esp, %ebp
346
+ pushl %esi
347
+ subl $36, %esp
348
+ movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */
349
+ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */
350
+ movl %edx, 12(%esp) /* user_data */
351
+ leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */
352
+ movl %edx, 8(%esp) /* raw_args */
353
+ leal -24(%ebp), %edx
354
+ movl %edx, 4(%esp) /* &res */
355
+ movl %esi, (%esp) /* cif */
356
+ call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */
357
+ movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */
358
+ cmpl $FFI_TYPE_INT, %eax
359
+ je .Lrcls_retint
360
+ cmpl $FFI_TYPE_FLOAT, %eax
361
+ je .Lrcls_retfloat
362
+ cmpl $FFI_TYPE_DOUBLE, %eax
363
+ je .Lrcls_retdouble
364
+ cmpl $FFI_TYPE_LONGDOUBLE, %eax
365
+ je .Lrcls_retldouble
366
+ cmpl $FFI_TYPE_SINT64, %eax
367
+ je .Lrcls_retllong
368
+ .Lrcls_epilogue:
369
+ addl $36, %esp
370
+ popl %esi
371
+ popl %ebp
372
+ ret
373
+ .Lrcls_retint:
374
+ movl -24(%ebp), %eax
375
+ jmp .Lrcls_epilogue
376
+ .Lrcls_retfloat:
377
+ flds -24(%ebp)
378
+ jmp .Lrcls_epilogue
379
+ .Lrcls_retdouble:
380
+ fldl -24(%ebp)
381
+ jmp .Lrcls_epilogue
382
+ .Lrcls_retldouble:
383
+ fldt -24(%ebp)
384
+ jmp .Lrcls_epilogue
385
+ .Lrcls_retllong:
386
+ movl -24(%ebp), %eax
387
+ movl -20(%ebp), %edx
388
+ jmp .Lrcls_epilogue
389
+ .ffi_closure_raw_SYSV_end:
390
+
391
+ #endif
@@ -0,0 +1,71 @@
1
+ ## Process this file with automake to produce Makefile.in.
2
+
3
+ AUTOMAKE_OPTIONS = foreign dejagnu
4
+
5
+ # Setup the testing framework, if you have one
6
+ EXPECT = `if [ -f $(top_builddir)/../expect/expect ] ; then \
7
+ echo $(top_builddir)/../expect/expect ; \
8
+ else echo expect ; fi`
9
+
10
+ RUNTEST = `if [ -f $(top_srcdir)/../dejagnu/runtest ] ; then \
11
+ echo $(top_srcdir)/../dejagnu/runtest ; \
12
+ else echo runtest; fi`
13
+
14
+ AM_RUNTESTFLAGS =
15
+
16
+ CLEANFILES = *.exe core* *.log *.sum
17
+
18
+ EXTRA_DIST = config/default.exp lib/libffi-dg.exp \
19
+ lib/target-libpath.exp lib/wrapper.exp libffi.call/call.exp \
20
+ libffi.call/closure_fn0.c libffi.call/closure_fn1.c \
21
+ libffi.call/closure_fn2.c libffi.call/closure_fn3.c \
22
+ libffi.call/closure_fn4.c libffi.call/closure_fn5.c \
23
+ libffi.call/closure_fn6.c libffi.call/closure_stdcall.c \
24
+ libffi.call/cls_1_1byte.c libffi.call/cls_12byte.c \
25
+ libffi.call/cls_16byte.c libffi.call/cls_18byte.c \
26
+ libffi.call/cls_19byte.c libffi.call/cls_20byte1.c \
27
+ libffi.call/cls_20byte.c libffi.call/cls_24byte.c \
28
+ libffi.call/cls_2byte.c libffi.call/cls_3_1byte.c \
29
+ libffi.call/cls_3byte1.c libffi.call/cls_3byte2.c \
30
+ libffi.call/cls_4_1byte.c libffi.call/cls_4byte.c \
31
+ libffi.call/cls_5_1_byte.c libffi.call/cls_5byte.c \
32
+ libffi.call/cls_6_1_byte.c libffi.call/cls_64byte.c \
33
+ libffi.call/cls_6byte.c libffi.call/cls_7_1_byte.c \
34
+ libffi.call/cls_7byte.c libffi.call/cls_8byte.c \
35
+ libffi.call/cls_9byte1.c libffi.call/cls_9byte2.c \
36
+ libffi.call/cls_align_double.c libffi.call/cls_align_float.c \
37
+ libffi.call/cls_align_longdouble.c libffi.call/cls_align_pointer.c \
38
+ libffi.call/cls_align_sint16.c libffi.call/cls_align_sint32.c \
39
+ libffi.call/cls_align_sint64.c libffi.call/cls_align_uint16.c \
40
+ libffi.call/cls_align_uint32.c libffi.call/cls_align_uint64.c \
41
+ libffi.call/cls_double.c libffi.call/cls_float.c \
42
+ libffi.call/cls_multi_schar.c libffi.call/cls_multi_sshort.c \
43
+ libffi.call/cls_multi_sshortchar.c libffi.call/cls_multi_uchar.c \
44
+ libffi.call/cls_multi_ushort.c libffi.call/cls_multi_ushortchar.c \
45
+ libffi.call/cls_schar.c libffi.call/cls_sint.c \
46
+ libffi.call/cls_sshort.c libffi.call/cls_uchar.c \
47
+ libffi.call/cls_uint.c libffi.call/cls_ulonglong.c \
48
+ libffi.call/cls_ushort.c libffi.call/ffitest.h libffi.call/float1.c \
49
+ libffi.call/float2.c libffi.call/float3.c libffi.call/float4.c \
50
+ libffi.call/float.c libffi.call/many.c libffi.call/many_win32.c \
51
+ libffi.call/negint.c libffi.call/nested_struct10.c \
52
+ libffi.call/nested_struct1.c libffi.call/nested_struct2.c \
53
+ libffi.call/nested_struct3.c libffi.call/nested_struct4.c \
54
+ libffi.call/nested_struct5.c libffi.call/nested_struct6.c \
55
+ libffi.call/nested_struct7.c libffi.call/nested_struct8.c \
56
+ libffi.call/nested_struct9.c libffi.call/nested_struct.c \
57
+ libffi.call/problem1.c libffi.call/promotion.c \
58
+ libffi.call/pyobjc-tc.c libffi.call/return_dbl1.c \
59
+ libffi.call/return_dbl2.c libffi.call/return_dbl.c \
60
+ libffi.call/return_fl1.c libffi.call/return_fl2.c \
61
+ libffi.call/return_fl3.c libffi.call/return_fl.c \
62
+ libffi.call/return_ldl.c libffi.call/return_ll1.c \
63
+ libffi.call/return_ll.c libffi.call/return_sc.c \
64
+ libffi.call/return_sl.c libffi.call/return_uc.c \
65
+ libffi.call/return_ul.c libffi.call/strlen.c \
66
+ libffi.call/strlen_win32.c libffi.call/struct1.c \
67
+ libffi.call/struct2.c libffi.call/struct3.c libffi.call/struct4.c \
68
+ libffi.call/struct5.c libffi.call/struct6.c libffi.call/struct7.c \
69
+ libffi.call/struct8.c libffi.call/struct9.c \
70
+ libffi.special/ffitestcxx.h libffi.special/special.exp \
71
+ libffi.special/unwindtest.cc libffi.special/unwindtest_ffi_call.cc