remogatto-ffi 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (324) hide show
  1. data/LICENSE +51 -0
  2. data/README.rdoc +69 -0
  3. data/Rakefile +144 -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 +431 -0
  12. data/ext/ffi_c/Call.h +77 -0
  13. data/ext/ffi_c/DynamicLibrary.c +216 -0
  14. data/ext/ffi_c/DynamicLibrary.h +22 -0
  15. data/ext/ffi_c/Function.c +498 -0
  16. data/ext/ffi_c/Function.h +73 -0
  17. data/ext/ffi_c/FunctionInfo.c +213 -0
  18. data/ext/ffi_c/LastError.c +159 -0
  19. data/ext/ffi_c/LastError.h +18 -0
  20. data/ext/ffi_c/MemoryPointer.c +178 -0
  21. data/ext/ffi_c/MemoryPointer.h +20 -0
  22. data/ext/ffi_c/MethodHandle.c +356 -0
  23. data/ext/ffi_c/MethodHandle.h +53 -0
  24. data/ext/ffi_c/Platform.c +59 -0
  25. data/ext/ffi_c/Platform.h +16 -0
  26. data/ext/ffi_c/Pointer.c +217 -0
  27. data/ext/ffi_c/Pointer.h +49 -0
  28. data/ext/ffi_c/Struct.c +770 -0
  29. data/ext/ffi_c/Struct.h +80 -0
  30. data/ext/ffi_c/StructByValue.c +140 -0
  31. data/ext/ffi_c/StructByValue.h +53 -0
  32. data/ext/ffi_c/StructLayout.c +450 -0
  33. data/ext/ffi_c/Type.c +329 -0
  34. data/ext/ffi_c/Type.h +57 -0
  35. data/ext/ffi_c/Types.c +103 -0
  36. data/ext/ffi_c/Types.h +85 -0
  37. data/ext/ffi_c/Variadic.c +260 -0
  38. data/ext/ffi_c/compat.h +72 -0
  39. data/ext/ffi_c/endian.h +40 -0
  40. data/ext/ffi_c/extconf.rb +34 -0
  41. data/ext/ffi_c/ffi.c +80 -0
  42. data/ext/ffi_c/libffi.bsd.mk +34 -0
  43. data/ext/ffi_c/libffi.darwin.mk +75 -0
  44. data/ext/ffi_c/libffi.gnu.mk +29 -0
  45. data/ext/ffi_c/libffi.mk +13 -0
  46. data/ext/ffi_c/libffi/ChangeLog +3243 -0
  47. data/ext/ffi_c/libffi/ChangeLog.libffi +347 -0
  48. data/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
  49. data/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
  50. data/ext/ffi_c/libffi/LICENSE +21 -0
  51. data/ext/ffi_c/libffi/Makefile.am +177 -0
  52. data/ext/ffi_c/libffi/Makefile.in +1640 -0
  53. data/ext/ffi_c/libffi/README +328 -0
  54. data/ext/ffi_c/libffi/TODO +1 -0
  55. data/ext/ffi_c/libffi/acinclude.m4 +92 -0
  56. data/ext/ffi_c/libffi/aclocal.m4 +7516 -0
  57. data/ext/ffi_c/libffi/compile +142 -0
  58. data/ext/ffi_c/libffi/config.guess +1516 -0
  59. data/ext/ffi_c/libffi/config.sub +1626 -0
  60. data/ext/ffi_c/libffi/configure +24414 -0
  61. data/ext/ffi_c/libffi/configure.ac +365 -0
  62. data/ext/ffi_c/libffi/configure.host +11 -0
  63. data/ext/ffi_c/libffi/depcomp +584 -0
  64. data/ext/ffi_c/libffi/doc/libffi.info +533 -0
  65. data/ext/ffi_c/libffi/doc/libffi.texi +541 -0
  66. data/ext/ffi_c/libffi/doc/stamp-vti +4 -0
  67. data/ext/ffi_c/libffi/doc/version.texi +4 -0
  68. data/ext/ffi_c/libffi/fficonfig.h.in +160 -0
  69. data/ext/ffi_c/libffi/include/Makefile.am +9 -0
  70. data/ext/ffi_c/libffi/include/Makefile.in +422 -0
  71. data/ext/ffi_c/libffi/include/ffi.h.in +393 -0
  72. data/ext/ffi_c/libffi/include/ffi_common.h +98 -0
  73. data/ext/ffi_c/libffi/install-sh +323 -0
  74. data/ext/ffi_c/libffi/libffi.pc.in +10 -0
  75. data/ext/ffi_c/libffi/libtool-version +29 -0
  76. data/ext/ffi_c/libffi/ltcf-c.sh +861 -0
  77. data/ext/ffi_c/libffi/ltcf-cxx.sh +1069 -0
  78. data/ext/ffi_c/libffi/ltcf-gcj.sh +700 -0
  79. data/ext/ffi_c/libffi/ltconfig +2862 -0
  80. data/ext/ffi_c/libffi/ltmain.sh +6930 -0
  81. data/ext/ffi_c/libffi/man/Makefile.am +8 -0
  82. data/ext/ffi_c/libffi/man/Makefile.in +395 -0
  83. data/ext/ffi_c/libffi/man/ffi.3 +31 -0
  84. data/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
  85. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +66 -0
  86. data/ext/ffi_c/libffi/mdate-sh +201 -0
  87. data/ext/ffi_c/libffi/missing +353 -0
  88. data/ext/ffi_c/libffi/mkinstalldirs +158 -0
  89. data/ext/ffi_c/libffi/src/alpha/ffi.c +284 -0
  90. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +48 -0
  91. data/ext/ffi_c/libffi/src/alpha/osf.S +366 -0
  92. data/ext/ffi_c/libffi/src/arm/ffi.c +309 -0
  93. data/ext/ffi_c/libffi/src/arm/ffitarget.h +49 -0
  94. data/ext/ffi_c/libffi/src/arm/sysv.S +299 -0
  95. data/ext/ffi_c/libffi/src/closures.c +596 -0
  96. data/ext/ffi_c/libffi/src/cris/ffi.c +383 -0
  97. data/ext/ffi_c/libffi/src/cris/ffitarget.h +51 -0
  98. data/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
  99. data/ext/ffi_c/libffi/src/debug.c +59 -0
  100. data/ext/ffi_c/libffi/src/dlmalloc.c +5099 -0
  101. data/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
  102. data/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
  103. data/ext/ffi_c/libffi/src/frv/ffitarget.h +61 -0
  104. data/ext/ffi_c/libffi/src/ia64/ffi.c +580 -0
  105. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +50 -0
  106. data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
  107. data/ext/ffi_c/libffi/src/ia64/unix.S +560 -0
  108. data/ext/ffi_c/libffi/src/java_raw_api.c +359 -0
  109. data/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
  110. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +48 -0
  111. data/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
  112. data/ext/ffi_c/libffi/src/m68k/ffi.c +278 -0
  113. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +49 -0
  114. data/ext/ffi_c/libffi/src/m68k/sysv.S +234 -0
  115. data/ext/ffi_c/libffi/src/mips/ffi.c +926 -0
  116. data/ext/ffi_c/libffi/src/mips/ffitarget.h +202 -0
  117. data/ext/ffi_c/libffi/src/mips/n32.S +534 -0
  118. data/ext/ffi_c/libffi/src/mips/o32.S +381 -0
  119. data/ext/ffi_c/libffi/src/pa/ffi.c +709 -0
  120. data/ext/ffi_c/libffi/src/pa/ffitarget.h +77 -0
  121. data/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
  122. data/ext/ffi_c/libffi/src/pa/linux.S +357 -0
  123. data/ext/ffi_c/libffi/src/powerpc/aix.S +225 -0
  124. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +247 -0
  125. data/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
  126. data/ext/ffi_c/libffi/src/powerpc/darwin.S +245 -0
  127. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +317 -0
  128. data/ext/ffi_c/libffi/src/powerpc/ffi.c +1429 -0
  129. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +800 -0
  130. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +118 -0
  131. data/ext/ffi_c/libffi/src/powerpc/linux64.S +187 -0
  132. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +236 -0
  133. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +327 -0
  134. data/ext/ffi_c/libffi/src/powerpc/sysv.S +230 -0
  135. data/ext/ffi_c/libffi/src/prep_cif.c +174 -0
  136. data/ext/ffi_c/libffi/src/raw_api.c +254 -0
  137. data/ext/ffi_c/libffi/src/s390/ffi.c +780 -0
  138. data/ext/ffi_c/libffi/src/s390/ffitarget.h +60 -0
  139. data/ext/ffi_c/libffi/src/s390/sysv.S +434 -0
  140. data/ext/ffi_c/libffi/src/sh/ffi.c +716 -0
  141. data/ext/ffi_c/libffi/src/sh/ffitarget.h +49 -0
  142. data/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
  143. data/ext/ffi_c/libffi/src/sh64/ffi.c +453 -0
  144. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +53 -0
  145. data/ext/ffi_c/libffi/src/sh64/sysv.S +530 -0
  146. data/ext/ffi_c/libffi/src/sparc/ffi.c +610 -0
  147. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +66 -0
  148. data/ext/ffi_c/libffi/src/sparc/v8.S +272 -0
  149. data/ext/ffi_c/libffi/src/sparc/v9.S +307 -0
  150. data/ext/ffi_c/libffi/src/types.c +77 -0
  151. data/ext/ffi_c/libffi/src/x86/darwin.S +443 -0
  152. data/ext/ffi_c/libffi/src/x86/darwin64.S +416 -0
  153. data/ext/ffi_c/libffi/src/x86/ffi.c +475 -0
  154. data/ext/ffi_c/libffi/src/x86/ffi64.c +572 -0
  155. data/ext/ffi_c/libffi/src/x86/ffitarget.h +90 -0
  156. data/ext/ffi_c/libffi/src/x86/freebsd.S +458 -0
  157. data/ext/ffi_c/libffi/src/x86/sysv.S +437 -0
  158. data/ext/ffi_c/libffi/src/x86/unix64.S +418 -0
  159. data/ext/ffi_c/libffi/src/x86/win32.S +391 -0
  160. data/ext/ffi_c/libffi/testsuite/Makefile.am +71 -0
  161. data/ext/ffi_c/libffi/testsuite/Makefile.in +447 -0
  162. data/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
  163. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +289 -0
  164. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +263 -0
  165. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +36 -0
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +97 -0
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +89 -0
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +89 -0
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +90 -0
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +97 -0
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +99 -0
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +98 -0
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +72 -0
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +102 -0
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +103 -0
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +104 -0
  178. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +110 -0
  179. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +97 -0
  180. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +99 -0
  181. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +101 -0
  182. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +121 -0
  183. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +98 -0
  184. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +103 -0
  185. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +98 -0
  186. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +98 -0
  187. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +106 -0
  188. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +98 -0
  189. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +117 -0
  190. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +106 -0
  191. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +132 -0
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +121 -0
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +107 -0
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +125 -0
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +105 -0
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +96 -0
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +98 -0
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +99 -0
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +101 -0
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +99 -0
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +100 -0
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +101 -0
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +99 -0
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +99 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +99 -0
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +99 -0
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +99 -0
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +100 -0
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +51 -0
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +51 -0
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +82 -0
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +82 -0
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +94 -0
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +99 -0
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +82 -0
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +94 -0
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +52 -0
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +50 -0
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +50 -0
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +50 -0
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +51 -0
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +54 -0
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +51 -0
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +86 -0
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +58 -0
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +57 -0
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +72 -0
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +69 -0
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +63 -0
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +53 -0
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +160 -0
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +169 -0
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +141 -0
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +118 -0
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +119 -0
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +119 -0
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +120 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +139 -0
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +119 -0
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +139 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +139 -0
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +98 -0
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +35 -0
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +42 -0
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
  263. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +65 -0
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +59 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +63 -0
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +65 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +80 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +67 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +86 -0
  273. data/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +38 -0
  274. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +123 -0
  275. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
  276. data/ext/ffi_c/libffi/texinfo.tex +7482 -0
  277. data/ext/ffi_c/rbffi.h +26 -0
  278. data/gen/Rakefile +12 -0
  279. data/lib/ffi.rb +11 -0
  280. data/lib/ffi/autopointer.rb +61 -0
  281. data/lib/ffi/buffer.rb +0 -0
  282. data/lib/ffi/callback.rb +10 -0
  283. data/lib/ffi/enum.rb +78 -0
  284. data/lib/ffi/errno.rb +8 -0
  285. data/lib/ffi/ffi.rb +99 -0
  286. data/lib/ffi/io.rb +21 -0
  287. data/lib/ffi/library.rb +218 -0
  288. data/lib/ffi/managedstruct.rb +55 -0
  289. data/lib/ffi/memorypointer.rb +73 -0
  290. data/lib/ffi/platform.rb +78 -0
  291. data/lib/ffi/pointer.rb +119 -0
  292. data/lib/ffi/struct.rb +164 -0
  293. data/lib/ffi/tools/const_generator.rb +177 -0
  294. data/lib/ffi/tools/generator.rb +58 -0
  295. data/lib/ffi/tools/generator_task.rb +35 -0
  296. data/lib/ffi/tools/struct_generator.rb +194 -0
  297. data/lib/ffi/tools/types_generator.rb +123 -0
  298. data/lib/ffi/types.rb +153 -0
  299. data/lib/ffi/union.rb +12 -0
  300. data/lib/ffi/variadic.rb +25 -0
  301. data/spec/ffi/bool_spec.rb +24 -0
  302. data/spec/ffi/buffer_spec.rb +202 -0
  303. data/spec/ffi/callback_spec.rb +591 -0
  304. data/spec/ffi/enum_spec.rb +164 -0
  305. data/spec/ffi/errno_spec.rb +13 -0
  306. data/spec/ffi/function_spec.rb +47 -0
  307. data/spec/ffi/library_spec.rb +144 -0
  308. data/spec/ffi/managed_struct_spec.rb +56 -0
  309. data/spec/ffi/number_spec.rb +231 -0
  310. data/spec/ffi/pointer_spec.rb +195 -0
  311. data/spec/ffi/rbx/attach_function_spec.rb +27 -0
  312. data/spec/ffi/rbx/memory_pointer_spec.rb +102 -0
  313. data/spec/ffi/rbx/spec_helper.rb +1 -0
  314. data/spec/ffi/rbx/struct_spec.rb +13 -0
  315. data/spec/ffi/spec_helper.rb +17 -0
  316. data/spec/ffi/string_spec.rb +103 -0
  317. data/spec/ffi/struct_callback_spec.rb +62 -0
  318. data/spec/ffi/struct_initialize_spec.rb +30 -0
  319. data/spec/ffi/struct_spec.rb +529 -0
  320. data/spec/ffi/typedef_spec.rb +48 -0
  321. data/spec/ffi/union_spec.rb +60 -0
  322. data/spec/ffi/variadic_spec.rb +84 -0
  323. data/spec/spec.opts +4 -0
  324. metadata +432 -0
@@ -0,0 +1,393 @@
1
+ /* -----------------------------------------------------------------*-C-*-
2
+ libffi @VERSION@ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc.
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ ``Software''), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included
13
+ in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22
+ DEALINGS IN THE SOFTWARE.
23
+
24
+ ----------------------------------------------------------------------- */
25
+
26
+ /* -------------------------------------------------------------------
27
+ The basic API is described in the README file.
28
+
29
+ The raw API is designed to bypass some of the argument packing
30
+ and unpacking on architectures for which it can be avoided.
31
+
32
+ The closure API allows interpreted functions to be packaged up
33
+ inside a C function pointer, so that they can be called as C functions,
34
+ with no understanding on the client side that they are interpreted.
35
+ It can also be used in other cases in which it is necessary to package
36
+ up a user specified parameter and a function pointer as a single
37
+ function pointer.
38
+
39
+ The closure API must be implemented in order to get its functionality,
40
+ e.g. for use by gij. Routines are provided to emulate the raw API
41
+ if the underlying platform doesn't allow faster implementation.
42
+
43
+ More details on the raw and cloure API can be found in:
44
+
45
+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html
46
+
47
+ and
48
+
49
+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html
50
+ -------------------------------------------------------------------- */
51
+
52
+ #ifndef LIBFFI_H
53
+ #define LIBFFI_H
54
+
55
+ #ifdef __cplusplus
56
+ extern "C" {
57
+ #endif
58
+
59
+ /* Specify which architecture libffi is configured for. */
60
+ #ifndef @TARGET@
61
+ #define @TARGET@
62
+ #endif
63
+
64
+ /* ---- System configuration information --------------------------------- */
65
+
66
+ #include <ffitarget.h>
67
+
68
+ #ifndef LIBFFI_ASM
69
+
70
+ #include <stddef.h>
71
+ #include <limits.h>
72
+
73
+ /* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example).
74
+ But we can find it either under the correct ANSI name, or under GNU
75
+ C's internal name. */
76
+ #ifdef LONG_LONG_MAX
77
+ # define FFI_LONG_LONG_MAX LONG_LONG_MAX
78
+ #else
79
+ # ifdef LLONG_MAX
80
+ # define FFI_LONG_LONG_MAX LLONG_MAX
81
+ # else
82
+ # ifdef __GNUC__
83
+ # define FFI_LONG_LONG_MAX __LONG_LONG_MAX__
84
+ # endif
85
+ # endif
86
+ #endif
87
+
88
+ /* The closure code assumes that this works on pointers, i.e. a size_t */
89
+ /* can hold a pointer. */
90
+
91
+ typedef struct _ffi_type
92
+ {
93
+ size_t size;
94
+ unsigned short alignment;
95
+ unsigned short type;
96
+ struct _ffi_type **elements;
97
+ } ffi_type;
98
+
99
+ #ifndef LIBFFI_HIDE_BASIC_TYPES
100
+ #if SCHAR_MAX == 127
101
+ # define ffi_type_uchar ffi_type_uint8
102
+ # define ffi_type_schar ffi_type_sint8
103
+ #else
104
+ #error "char size not supported"
105
+ #endif
106
+
107
+ #if SHRT_MAX == 32767
108
+ # define ffi_type_ushort ffi_type_uint16
109
+ # define ffi_type_sshort ffi_type_sint16
110
+ #elif SHRT_MAX == 2147483647
111
+ # define ffi_type_ushort ffi_type_uint32
112
+ # define ffi_type_sshort ffi_type_sint32
113
+ #else
114
+ #error "short size not supported"
115
+ #endif
116
+
117
+ #if INT_MAX == 32767
118
+ # define ffi_type_uint ffi_type_uint16
119
+ # define ffi_type_sint ffi_type_sint16
120
+ #elif INT_MAX == 2147483647
121
+ # define ffi_type_uint ffi_type_uint32
122
+ # define ffi_type_sint ffi_type_sint32
123
+ #elif INT_MAX == 9223372036854775807
124
+ # define ffi_type_uint ffi_type_uint64
125
+ # define ffi_type_sint ffi_type_sint64
126
+ #else
127
+ #error "int size not supported"
128
+ #endif
129
+
130
+ #if LONG_MAX == 2147483647
131
+ # if FFI_LONG_LONG_MAX != 9223372036854775807
132
+ #error "no 64-bit data type supported"
133
+ # endif
134
+ #elif LONG_MAX != 9223372036854775807
135
+ #error "long size not supported"
136
+ #endif
137
+
138
+ #if LONG_MAX == 2147483647
139
+ # define ffi_type_ulong ffi_type_uint32
140
+ # define ffi_type_slong ffi_type_sint32
141
+ #elif LONG_MAX == 9223372036854775807
142
+ # define ffi_type_ulong ffi_type_uint64
143
+ # define ffi_type_slong ffi_type_sint64
144
+ #else
145
+ #error "long size not supported"
146
+ #endif
147
+
148
+ /* These are defined in types.c */
149
+ extern ffi_type ffi_type_void;
150
+ extern ffi_type ffi_type_uint8;
151
+ extern ffi_type ffi_type_sint8;
152
+ extern ffi_type ffi_type_uint16;
153
+ extern ffi_type ffi_type_sint16;
154
+ extern ffi_type ffi_type_uint32;
155
+ extern ffi_type ffi_type_sint32;
156
+ extern ffi_type ffi_type_uint64;
157
+ extern ffi_type ffi_type_sint64;
158
+ extern ffi_type ffi_type_float;
159
+ extern ffi_type ffi_type_double;
160
+ extern ffi_type ffi_type_pointer;
161
+
162
+ #if @HAVE_LONG_DOUBLE@
163
+ extern ffi_type ffi_type_longdouble;
164
+ #else
165
+ #define ffi_type_longdouble ffi_type_double
166
+ #endif
167
+ #endif /* LIBFFI_HIDE_BASIC_TYPES */
168
+
169
+ typedef enum {
170
+ FFI_OK = 0,
171
+ FFI_BAD_TYPEDEF,
172
+ FFI_BAD_ABI
173
+ } ffi_status;
174
+
175
+ typedef unsigned FFI_TYPE;
176
+
177
+ typedef struct {
178
+ ffi_abi abi;
179
+ unsigned nargs;
180
+ ffi_type **arg_types;
181
+ ffi_type *rtype;
182
+ unsigned bytes;
183
+ unsigned flags;
184
+ #ifdef FFI_EXTRA_CIF_FIELDS
185
+ FFI_EXTRA_CIF_FIELDS;
186
+ #endif
187
+ } ffi_cif;
188
+
189
+ /* ---- Definitions for the raw API -------------------------------------- */
190
+
191
+ #ifndef FFI_SIZEOF_ARG
192
+ # if LONG_MAX == 2147483647
193
+ # define FFI_SIZEOF_ARG 4
194
+ # elif LONG_MAX == 9223372036854775807
195
+ # define FFI_SIZEOF_ARG 8
196
+ # endif
197
+ #endif
198
+
199
+ #ifndef FFI_SIZEOF_JAVA_RAW
200
+ # define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG
201
+ #endif
202
+
203
+ typedef union {
204
+ ffi_sarg sint;
205
+ ffi_arg uint;
206
+ float flt;
207
+ char data[FFI_SIZEOF_ARG];
208
+ void* ptr;
209
+ } ffi_raw;
210
+
211
+ #if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8
212
+ /* This is a special case for mips64/n32 ABI (and perhaps others) where
213
+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */
214
+ typedef union {
215
+ signed int sint;
216
+ unsigned int uint;
217
+ float flt;
218
+ char data[FFI_SIZEOF_JAVA_RAW];
219
+ void* ptr;
220
+ } ffi_java_raw;
221
+ #else
222
+ typedef ffi_raw ffi_java_raw;
223
+ #endif
224
+
225
+
226
+ void ffi_raw_call (ffi_cif *cif,
227
+ void (*fn)(void),
228
+ void *rvalue,
229
+ ffi_raw *avalue);
230
+
231
+ void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw);
232
+ void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args);
233
+ size_t ffi_raw_size (ffi_cif *cif);
234
+
235
+ /* This is analogous to the raw API, except it uses Java parameter */
236
+ /* packing, even on 64-bit machines. I.e. on 64-bit machines */
237
+ /* longs and doubles are followed by an empty 64-bit word. */
238
+
239
+ void ffi_java_raw_call (ffi_cif *cif,
240
+ void (*fn)(void),
241
+ void *rvalue,
242
+ ffi_java_raw *avalue);
243
+
244
+ void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw);
245
+ void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args);
246
+ size_t ffi_java_raw_size (ffi_cif *cif);
247
+
248
+ /* ---- Definitions for closures ----------------------------------------- */
249
+
250
+ #if FFI_CLOSURES
251
+
252
+ typedef struct {
253
+ char tramp[FFI_TRAMPOLINE_SIZE];
254
+ ffi_cif *cif;
255
+ void (*fun)(ffi_cif*,void*,void**,void*);
256
+ void *user_data;
257
+ } ffi_closure __attribute__((aligned (8)));
258
+
259
+ void *ffi_closure_alloc (size_t size, void **code);
260
+ void ffi_closure_free (void *);
261
+
262
+ ffi_status
263
+ ffi_prep_closure (ffi_closure*,
264
+ ffi_cif *,
265
+ void (*fun)(ffi_cif*,void*,void**,void*),
266
+ void *user_data);
267
+
268
+ ffi_status
269
+ ffi_prep_closure_loc (ffi_closure*,
270
+ ffi_cif *,
271
+ void (*fun)(ffi_cif*,void*,void**,void*),
272
+ void *user_data,
273
+ void*codeloc);
274
+
275
+ typedef struct {
276
+ char tramp[FFI_TRAMPOLINE_SIZE];
277
+
278
+ ffi_cif *cif;
279
+
280
+ #if !FFI_NATIVE_RAW_API
281
+
282
+ /* if this is enabled, then a raw closure has the same layout
283
+ as a regular closure. We use this to install an intermediate
284
+ handler to do the transaltion, void** -> ffi_raw*. */
285
+
286
+ void (*translate_args)(ffi_cif*,void*,void**,void*);
287
+ void *this_closure;
288
+
289
+ #endif
290
+
291
+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*);
292
+ void *user_data;
293
+
294
+ } ffi_raw_closure;
295
+
296
+ typedef struct {
297
+ char tramp[FFI_TRAMPOLINE_SIZE];
298
+
299
+ ffi_cif *cif;
300
+
301
+ #if !FFI_NATIVE_RAW_API
302
+
303
+ /* if this is enabled, then a raw closure has the same layout
304
+ as a regular closure. We use this to install an intermediate
305
+ handler to do the transaltion, void** -> ffi_raw*. */
306
+
307
+ void (*translate_args)(ffi_cif*,void*,void**,void*);
308
+ void *this_closure;
309
+
310
+ #endif
311
+
312
+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*);
313
+ void *user_data;
314
+
315
+ } ffi_java_raw_closure;
316
+
317
+ ffi_status
318
+ ffi_prep_raw_closure (ffi_raw_closure*,
319
+ ffi_cif *cif,
320
+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
321
+ void *user_data);
322
+
323
+ ffi_status
324
+ ffi_prep_raw_closure_loc (ffi_raw_closure*,
325
+ ffi_cif *cif,
326
+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
327
+ void *user_data,
328
+ void *codeloc);
329
+
330
+ ffi_status
331
+ ffi_prep_java_raw_closure (ffi_java_raw_closure*,
332
+ ffi_cif *cif,
333
+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*),
334
+ void *user_data);
335
+
336
+ ffi_status
337
+ ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*,
338
+ ffi_cif *cif,
339
+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*),
340
+ void *user_data,
341
+ void *codeloc);
342
+
343
+ #endif /* FFI_CLOSURES */
344
+
345
+ /* ---- Public interface definition -------------------------------------- */
346
+
347
+ ffi_status ffi_prep_cif(ffi_cif *cif,
348
+ ffi_abi abi,
349
+ unsigned int nargs,
350
+ ffi_type *rtype,
351
+ ffi_type **atypes);
352
+
353
+ void ffi_call(ffi_cif *cif,
354
+ void (*fn)(void),
355
+ void *rvalue,
356
+ void **avalue);
357
+
358
+ /* Useful for eliminating compiler warnings */
359
+ #define FFI_FN(f) ((void (*)(void))f)
360
+
361
+ /* ---- Definitions shared with assembly code ---------------------------- */
362
+
363
+ #endif
364
+
365
+ /* If these change, update src/mips/ffitarget.h. */
366
+ #define FFI_TYPE_VOID 0
367
+ #define FFI_TYPE_INT 1
368
+ #define FFI_TYPE_FLOAT 2
369
+ #define FFI_TYPE_DOUBLE 3
370
+ #if @HAVE_LONG_DOUBLE@
371
+ #define FFI_TYPE_LONGDOUBLE 4
372
+ #else
373
+ #define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE
374
+ #endif
375
+ #define FFI_TYPE_UINT8 5
376
+ #define FFI_TYPE_SINT8 6
377
+ #define FFI_TYPE_UINT16 7
378
+ #define FFI_TYPE_SINT16 8
379
+ #define FFI_TYPE_UINT32 9
380
+ #define FFI_TYPE_SINT32 10
381
+ #define FFI_TYPE_UINT64 11
382
+ #define FFI_TYPE_SINT64 12
383
+ #define FFI_TYPE_STRUCT 13
384
+ #define FFI_TYPE_POINTER 14
385
+
386
+ /* This should always refer to the last type code (for sanity checks) */
387
+ #define FFI_TYPE_LAST FFI_TYPE_POINTER
388
+
389
+ #ifdef __cplusplus
390
+ }
391
+ #endif
392
+
393
+ #endif
@@ -0,0 +1,98 @@
1
+ /* -----------------------------------------------------------------------
2
+ ffi_common.h - Copyright (c) 1996 Red Hat, Inc.
3
+ Copyright (C) 2007 Free Software Foundation, Inc
4
+
5
+ Common internal definitions and macros. Only necessary for building
6
+ libffi.
7
+ ----------------------------------------------------------------------- */
8
+
9
+ #ifndef FFI_COMMON_H
10
+ #define FFI_COMMON_H
11
+
12
+ #ifdef __cplusplus
13
+ extern "C" {
14
+ #endif
15
+
16
+ #include <fficonfig.h>
17
+
18
+ /* Do not move this. Some versions of AIX are very picky about where
19
+ this is positioned. */
20
+ #ifdef __GNUC__
21
+ # define alloca __builtin_alloca
22
+ # define MAYBE_UNUSED __attribute__((__unused__))
23
+ #else
24
+ # define MAYBE_UNUSED
25
+ # if HAVE_ALLOCA_H
26
+ # include <alloca.h>
27
+ # else
28
+ # ifdef _AIX
29
+ #pragma alloca
30
+ # else
31
+ # ifndef alloca /* predefined by HP cc +Olibcalls */
32
+ char *alloca ();
33
+ # endif
34
+ # endif
35
+ # endif
36
+ #endif
37
+
38
+ /* Check for the existence of memcpy. */
39
+ #if STDC_HEADERS
40
+ # include <string.h>
41
+ #else
42
+ # ifndef HAVE_MEMCPY
43
+ # define memcpy(d, s, n) bcopy ((s), (d), (n))
44
+ # endif
45
+ #endif
46
+
47
+ #if defined(FFI_DEBUG)
48
+ #include <stdio.h>
49
+ #endif
50
+
51
+ #ifdef FFI_DEBUG
52
+ void ffi_assert(char *expr, char *file, int line);
53
+ void ffi_stop_here(void);
54
+ void ffi_type_test(ffi_type *a, char *file, int line);
55
+
56
+ #define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__))
57
+ #define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l)))
58
+ #define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__)
59
+ #else
60
+ #define FFI_ASSERT(x)
61
+ #define FFI_ASSERT_AT(x, f, l)
62
+ #define FFI_ASSERT_VALID_TYPE(x)
63
+ #endif
64
+
65
+ #define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1)
66
+ #define ALIGN_DOWN(v, a) (((size_t) (v)) & -a)
67
+
68
+ /* Perform machine dependent cif processing */
69
+ ffi_status ffi_prep_cif_machdep(ffi_cif *cif);
70
+
71
+ /* Extended cif, used in callback from assembly routine */
72
+ typedef struct
73
+ {
74
+ ffi_cif *cif;
75
+ void *rvalue;
76
+ void **avalue;
77
+ } extended_cif;
78
+
79
+ /* Terse sized type definitions. */
80
+ typedef unsigned int UINT8 __attribute__((__mode__(__QI__)));
81
+ typedef signed int SINT8 __attribute__((__mode__(__QI__)));
82
+ typedef unsigned int UINT16 __attribute__((__mode__(__HI__)));
83
+ typedef signed int SINT16 __attribute__((__mode__(__HI__)));
84
+ typedef unsigned int UINT32 __attribute__((__mode__(__SI__)));
85
+ typedef signed int SINT32 __attribute__((__mode__(__SI__)));
86
+ typedef unsigned int UINT64 __attribute__((__mode__(__DI__)));
87
+ typedef signed int SINT64 __attribute__((__mode__(__DI__)));
88
+
89
+ typedef float FLOAT32;
90
+
91
+
92
+ #ifdef __cplusplus
93
+ }
94
+ #endif
95
+
96
+ #endif
97
+
98
+