ffi 1.9.3-x64-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 (436) hide show
  1. data/COPYING +49 -0
  2. data/LICENSE +24 -0
  3. data/README.md +109 -0
  4. data/Rakefile +220 -0
  5. data/ext/ffi_c/AbstractMemory.c +1032 -0
  6. data/ext/ffi_c/AbstractMemory.h +175 -0
  7. data/ext/ffi_c/ArrayType.c +162 -0
  8. data/ext/ffi_c/ArrayType.h +59 -0
  9. data/ext/ffi_c/Buffer.c +365 -0
  10. data/ext/ffi_c/Call.c +465 -0
  11. data/ext/ffi_c/Call.h +93 -0
  12. data/ext/ffi_c/ClosurePool.c +283 -0
  13. data/ext/ffi_c/ClosurePool.h +57 -0
  14. data/ext/ffi_c/DataConverter.c +91 -0
  15. data/ext/ffi_c/DynamicLibrary.c +333 -0
  16. data/ext/ffi_c/DynamicLibrary.h +49 -0
  17. data/ext/ffi_c/Function.c +999 -0
  18. data/ext/ffi_c/Function.h +87 -0
  19. data/ext/ffi_c/FunctionInfo.c +271 -0
  20. data/ext/ffi_c/LastError.c +184 -0
  21. data/ext/ffi_c/LastError.h +47 -0
  22. data/ext/ffi_c/LongDouble.c +63 -0
  23. data/ext/ffi_c/LongDouble.h +51 -0
  24. data/ext/ffi_c/MappedType.c +168 -0
  25. data/ext/ffi_c/MappedType.h +59 -0
  26. data/ext/ffi_c/MemoryPointer.c +197 -0
  27. data/ext/ffi_c/MemoryPointer.h +53 -0
  28. data/ext/ffi_c/MethodHandle.c +360 -0
  29. data/ext/ffi_c/MethodHandle.h +55 -0
  30. data/ext/ffi_c/Platform.c +121 -0
  31. data/ext/ffi_c/Platform.h +45 -0
  32. data/ext/ffi_c/Pointer.c +508 -0
  33. data/ext/ffi_c/Pointer.h +63 -0
  34. data/ext/ffi_c/Struct.c +828 -0
  35. data/ext/ffi_c/Struct.h +106 -0
  36. data/ext/ffi_c/StructByReference.c +190 -0
  37. data/ext/ffi_c/StructByReference.h +50 -0
  38. data/ext/ffi_c/StructByValue.c +150 -0
  39. data/ext/ffi_c/StructByValue.h +55 -0
  40. data/ext/ffi_c/StructLayout.c +698 -0
  41. data/ext/ffi_c/Thread.c +352 -0
  42. data/ext/ffi_c/Thread.h +95 -0
  43. data/ext/ffi_c/Type.c +397 -0
  44. data/ext/ffi_c/Type.h +62 -0
  45. data/ext/ffi_c/Types.c +139 -0
  46. data/ext/ffi_c/Types.h +89 -0
  47. data/ext/ffi_c/Variadic.c +276 -0
  48. data/ext/ffi_c/compat.h +83 -0
  49. data/ext/ffi_c/extconf.rb +64 -0
  50. data/ext/ffi_c/ffi.c +98 -0
  51. data/ext/ffi_c/libffi.bsd.mk +34 -0
  52. data/ext/ffi_c/libffi.darwin.mk +95 -0
  53. data/ext/ffi_c/libffi.gnu.mk +31 -0
  54. data/ext/ffi_c/libffi.mk +13 -0
  55. data/ext/ffi_c/libffi.vc.mk +26 -0
  56. data/ext/ffi_c/libffi.vc64.mk +26 -0
  57. data/ext/ffi_c/libffi/ChangeLog +4600 -0
  58. data/ext/ffi_c/libffi/ChangeLog.libffi +584 -0
  59. data/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
  60. data/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
  61. data/ext/ffi_c/libffi/LICENSE +21 -0
  62. data/ext/ffi_c/libffi/Makefile.am +196 -0
  63. data/ext/ffi_c/libffi/Makefile.in +1820 -0
  64. data/ext/ffi_c/libffi/Makefile.vc +141 -0
  65. data/ext/ffi_c/libffi/Makefile.vc64 +141 -0
  66. data/ext/ffi_c/libffi/README +342 -0
  67. data/ext/ffi_c/libffi/acinclude.m4 +92 -0
  68. data/ext/ffi_c/libffi/aclocal.m4 +1873 -0
  69. data/ext/ffi_c/libffi/build-ios.sh +67 -0
  70. data/ext/ffi_c/libffi/compile +143 -0
  71. data/ext/ffi_c/libffi/config.guess +1501 -0
  72. data/ext/ffi_c/libffi/config.sub +1705 -0
  73. data/ext/ffi_c/libffi/configure +17191 -0
  74. data/ext/ffi_c/libffi/configure.ac +496 -0
  75. data/ext/ffi_c/libffi/configure.host +11 -0
  76. data/ext/ffi_c/libffi/depcomp +630 -0
  77. data/ext/ffi_c/libffi/doc/libffi.info +593 -0
  78. data/ext/ffi_c/libffi/doc/libffi.texi +600 -0
  79. data/ext/ffi_c/libffi/doc/stamp-vti +4 -0
  80. data/ext/ffi_c/libffi/doc/version.texi +4 -0
  81. data/ext/ffi_c/libffi/fficonfig.h.in +199 -0
  82. data/ext/ffi_c/libffi/fficonfig.hw +57 -0
  83. data/ext/ffi_c/libffi/include/Makefile.am +9 -0
  84. data/ext/ffi_c/libffi/include/Makefile.in +487 -0
  85. data/ext/ffi_c/libffi/include/ffi.h.in +427 -0
  86. data/ext/ffi_c/libffi/include/ffi.h.vc +427 -0
  87. data/ext/ffi_c/libffi/include/ffi.h.vc64 +427 -0
  88. data/ext/ffi_c/libffi/include/ffi_common.h +126 -0
  89. data/ext/ffi_c/libffi/install-sh +520 -0
  90. data/ext/ffi_c/libffi/libffi.pc.in +10 -0
  91. data/ext/ffi_c/libffi/libtool-version +29 -0
  92. data/ext/ffi_c/libffi/ltmain.sh +9636 -0
  93. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +176 -0
  94. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +195 -0
  95. data/ext/ffi_c/libffi/m4/ax_check_compiler_flags.m4 +76 -0
  96. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +63 -0
  97. data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +70 -0
  98. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +300 -0
  99. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +215 -0
  100. data/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +79 -0
  101. data/ext/ffi_c/libffi/m4/libtool.m4 +7831 -0
  102. data/ext/ffi_c/libffi/m4/ltoptions.m4 +369 -0
  103. data/ext/ffi_c/libffi/m4/ltsugar.m4 +123 -0
  104. data/ext/ffi_c/libffi/m4/ltversion.m4 +23 -0
  105. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +98 -0
  106. data/ext/ffi_c/libffi/man/Makefile.am +8 -0
  107. data/ext/ffi_c/libffi/man/Makefile.in +466 -0
  108. data/ext/ffi_c/libffi/man/ffi.3 +31 -0
  109. data/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
  110. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +66 -0
  111. data/ext/ffi_c/libffi/mdate-sh +201 -0
  112. data/ext/ffi_c/libffi/missing +376 -0
  113. data/ext/ffi_c/libffi/msvcc.sh +197 -0
  114. data/ext/ffi_c/libffi/src/alpha/ffi.c +284 -0
  115. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +48 -0
  116. data/ext/ffi_c/libffi/src/alpha/osf.S +387 -0
  117. data/ext/ffi_c/libffi/src/arm/ffi.c +728 -0
  118. data/ext/ffi_c/libffi/src/arm/ffitarget.h +65 -0
  119. data/ext/ffi_c/libffi/src/arm/gentramp.sh +118 -0
  120. data/ext/ffi_c/libffi/src/arm/sysv.S +497 -0
  121. data/ext/ffi_c/libffi/src/arm/trampoline.S +4450 -0
  122. data/ext/ffi_c/libffi/src/avr32/ffi.c +423 -0
  123. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +50 -0
  124. data/ext/ffi_c/libffi/src/avr32/sysv.S +208 -0
  125. data/ext/ffi_c/libffi/src/closures.c +615 -0
  126. data/ext/ffi_c/libffi/src/cris/ffi.c +383 -0
  127. data/ext/ffi_c/libffi/src/cris/ffitarget.h +51 -0
  128. data/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
  129. data/ext/ffi_c/libffi/src/debug.c +59 -0
  130. data/ext/ffi_c/libffi/src/dlmalloc.c +5161 -0
  131. data/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
  132. data/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
  133. data/ext/ffi_c/libffi/src/frv/ffitarget.h +57 -0
  134. data/ext/ffi_c/libffi/src/ia64/ffi.c +582 -0
  135. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +50 -0
  136. data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
  137. data/ext/ffi_c/libffi/src/ia64/unix.S +560 -0
  138. data/ext/ffi_c/libffi/src/java_raw_api.c +356 -0
  139. data/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
  140. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +48 -0
  141. data/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
  142. data/ext/ffi_c/libffi/src/m68k/ffi.c +288 -0
  143. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +49 -0
  144. data/ext/ffi_c/libffi/src/m68k/sysv.S +270 -0
  145. data/ext/ffi_c/libffi/src/mips/ffi.c +1036 -0
  146. data/ext/ffi_c/libffi/src/mips/ffitarget.h +242 -0
  147. data/ext/ffi_c/libffi/src/mips/n32.S +591 -0
  148. data/ext/ffi_c/libffi/src/mips/o32.S +381 -0
  149. data/ext/ffi_c/libffi/src/moxie/eabi.S +128 -0
  150. data/ext/ffi_c/libffi/src/moxie/ffi.c +276 -0
  151. data/ext/ffi_c/libffi/src/pa/ffi.c +719 -0
  152. data/ext/ffi_c/libffi/src/pa/ffitarget.h +78 -0
  153. data/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
  154. data/ext/ffi_c/libffi/src/pa/linux.S +357 -0
  155. data/ext/ffi_c/libffi/src/powerpc/aix.S +328 -0
  156. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +445 -0
  157. data/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
  158. data/ext/ffi_c/libffi/src/powerpc/darwin.S +383 -0
  159. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +575 -0
  160. data/ext/ffi_c/libffi/src/powerpc/ffi.c +1448 -0
  161. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +1359 -0
  162. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +139 -0
  163. data/ext/ffi_c/libffi/src/powerpc/linux64.S +187 -0
  164. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +236 -0
  165. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +327 -0
  166. data/ext/ffi_c/libffi/src/powerpc/sysv.S +219 -0
  167. data/ext/ffi_c/libffi/src/prep_cif.c +177 -0
  168. data/ext/ffi_c/libffi/src/raw_api.c +254 -0
  169. data/ext/ffi_c/libffi/src/s390/ffi.c +780 -0
  170. data/ext/ffi_c/libffi/src/s390/ffitarget.h +62 -0
  171. data/ext/ffi_c/libffi/src/s390/sysv.S +434 -0
  172. data/ext/ffi_c/libffi/src/sh/ffi.c +716 -0
  173. data/ext/ffi_c/libffi/src/sh/ffitarget.h +49 -0
  174. data/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
  175. data/ext/ffi_c/libffi/src/sh64/ffi.c +468 -0
  176. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +53 -0
  177. data/ext/ffi_c/libffi/src/sh64/sysv.S +539 -0
  178. data/ext/ffi_c/libffi/src/sparc/ffi.c +669 -0
  179. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +68 -0
  180. data/ext/ffi_c/libffi/src/sparc/v8.S +313 -0
  181. data/ext/ffi_c/libffi/src/sparc/v9.S +307 -0
  182. data/ext/ffi_c/libffi/src/types.c +77 -0
  183. data/ext/ffi_c/libffi/src/x86/darwin.S +444 -0
  184. data/ext/ffi_c/libffi/src/x86/darwin64.S +416 -0
  185. data/ext/ffi_c/libffi/src/x86/ffi.c +644 -0
  186. data/ext/ffi_c/libffi/src/x86/ffi64.c +635 -0
  187. data/ext/ffi_c/libffi/src/x86/ffitarget.h +121 -0
  188. data/ext/ffi_c/libffi/src/x86/freebsd.S +458 -0
  189. data/ext/ffi_c/libffi/src/x86/sysv.S +468 -0
  190. data/ext/ffi_c/libffi/src/x86/unix64.S +426 -0
  191. data/ext/ffi_c/libffi/src/x86/win32.S +1065 -0
  192. data/ext/ffi_c/libffi/src/x86/win64.S +468 -0
  193. data/ext/ffi_c/libffi/testsuite/Makefile.am +80 -0
  194. data/ext/ffi_c/libffi/testsuite/Makefile.in +500 -0
  195. data/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
  196. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +300 -0
  197. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +350 -0
  198. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +263 -0
  199. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +32 -0
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +89 -0
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +81 -0
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +81 -0
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +82 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +89 -0
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +92 -0
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +90 -0
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_loc_fn0.c +95 -0
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +64 -0
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +94 -0
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +95 -0
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +96 -0
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +102 -0
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +89 -0
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +91 -0
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +93 -0
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +113 -0
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +90 -0
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +95 -0
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +90 -0
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +90 -0
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +98 -0
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +90 -0
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +109 -0
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +98 -0
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +124 -0
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +113 -0
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +99 -0
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +117 -0
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +97 -0
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +88 -0
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +90 -0
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +91 -0
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +93 -0
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +91 -0
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +92 -0
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +134 -0
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +117 -0
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +95 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +91 -0
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +91 -0
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +92 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +91 -0
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +91 -0
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +93 -0
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +66 -0
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +43 -0
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +60 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +42 -0
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +105 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +60 -0
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +74 -0
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +74 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +86 -0
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +91 -0
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +74 -0
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +86 -0
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +74 -0
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +140 -0
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +44 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +42 -0
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +42 -0
  263. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +42 -0
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +43 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +47 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +43 -0
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_abi.c +36 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +26 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +153 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +58 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +58 -0
  273. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +72 -0
  274. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
  275. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +342 -0
  276. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +69 -0
  277. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +63 -0
  278. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +53 -0
  279. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +152 -0
  280. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +161 -0
  281. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +133 -0
  282. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +110 -0
  283. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +111 -0
  284. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +111 -0
  285. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +112 -0
  286. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +131 -0
  287. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +111 -0
  288. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +131 -0
  289. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +131 -0
  290. data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +90 -0
  291. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
  292. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
  293. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +35 -0
  294. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
  295. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
  296. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
  299. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
  300. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
  301. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +43 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
  305. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +145 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +148 -0
  309. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +124 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +125 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
  313. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +65 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
  315. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +59 -0
  316. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +63 -0
  317. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +65 -0
  318. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
  319. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
  320. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +80 -0
  321. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +67 -0
  322. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +70 -0
  323. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +96 -0
  324. data/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +35 -0
  325. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +124 -0
  326. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
  327. data/ext/ffi_c/libffi/texinfo.tex +7210 -0
  328. data/ext/ffi_c/rbffi.h +57 -0
  329. data/ext/ffi_c/rbffi_endian.h +59 -0
  330. data/ext/ffi_c/win32/stdbool.h +8 -0
  331. data/ext/ffi_c/win32/stdint.h +201 -0
  332. data/ffi.gemspec +22 -0
  333. data/gen/Rakefile +30 -0
  334. data/lib/ffi.rb +28 -0
  335. data/lib/ffi/autopointer.rb +194 -0
  336. data/lib/ffi/buffer.rb +4 -0
  337. data/lib/ffi/callback.rb +4 -0
  338. data/lib/ffi/enum.rb +173 -0
  339. data/lib/ffi/errno.rb +43 -0
  340. data/lib/ffi/ffi.rb +44 -0
  341. data/lib/ffi/io.rb +62 -0
  342. data/lib/ffi/library.rb +499 -0
  343. data/lib/ffi/managedstruct.rb +84 -0
  344. data/lib/ffi/memorypointer.rb +1 -0
  345. data/lib/ffi/platform.rb +148 -0
  346. data/lib/ffi/platform/arm-linux/types.conf +104 -0
  347. data/lib/ffi/platform/i386-cygwin/types.conf +3 -0
  348. data/lib/ffi/platform/i386-darwin/types.conf +100 -0
  349. data/lib/ffi/platform/i386-freebsd/types.conf +152 -0
  350. data/lib/ffi/platform/i386-gnu/types.conf +107 -0
  351. data/lib/ffi/platform/i386-linux/types.conf +103 -0
  352. data/lib/ffi/platform/i386-netbsd/types.conf +126 -0
  353. data/lib/ffi/platform/i386-openbsd/types.conf +128 -0
  354. data/lib/ffi/platform/i386-solaris/types.conf +122 -0
  355. data/lib/ffi/platform/i386-windows/types.conf +105 -0
  356. data/lib/ffi/platform/ia64-linux/types.conf +104 -0
  357. data/lib/ffi/platform/mips-linux/types.conf +102 -0
  358. data/lib/ffi/platform/mipsel-linux/types.conf +102 -0
  359. data/lib/ffi/platform/powerpc-aix/types.conf +180 -0
  360. data/lib/ffi/platform/powerpc-darwin/types.conf +100 -0
  361. data/lib/ffi/platform/powerpc-linux/types.conf +100 -0
  362. data/lib/ffi/platform/s390-linux/types.conf +102 -0
  363. data/lib/ffi/platform/s390x-linux/types.conf +102 -0
  364. data/lib/ffi/platform/sparc-linux/types.conf +102 -0
  365. data/lib/ffi/platform/sparc-solaris/types.conf +128 -0
  366. data/lib/ffi/platform/sparcv9-solaris/types.conf +128 -0
  367. data/lib/ffi/platform/x86_64-cygwin/types.conf +3 -0
  368. data/lib/ffi/platform/x86_64-darwin/types.conf +100 -0
  369. data/lib/ffi/platform/x86_64-freebsd/types.conf +128 -0
  370. data/lib/ffi/platform/x86_64-linux/types.conf +102 -0
  371. data/lib/ffi/platform/x86_64-netbsd/types.conf +126 -0
  372. data/lib/ffi/platform/x86_64-openbsd/types.conf +128 -0
  373. data/lib/ffi/platform/x86_64-solaris/types.conf +122 -0
  374. data/lib/ffi/platform/x86_64-windows/types.conf +27 -0
  375. data/lib/ffi/pointer.rb +134 -0
  376. data/lib/ffi/struct.rb +367 -0
  377. data/lib/ffi/struct_layout_builder.rb +222 -0
  378. data/lib/ffi/tools/const_generator.rb +229 -0
  379. data/lib/ffi/tools/generator.rb +60 -0
  380. data/lib/ffi/tools/generator_task.rb +36 -0
  381. data/lib/ffi/tools/struct_generator.rb +194 -0
  382. data/lib/ffi/tools/types_generator.rb +135 -0
  383. data/lib/ffi/types.rb +190 -0
  384. data/lib/ffi/union.rb +43 -0
  385. data/lib/ffi/variadic.rb +78 -0
  386. data/lib/ffi/version.rb +4 -0
  387. data/lib/ffi_c.so +0 -0
  388. data/libtest/Benchmark.c +52 -0
  389. data/libtest/BoolTest.c +34 -0
  390. data/libtest/BufferTest.c +31 -0
  391. data/libtest/ClosureTest.c +190 -0
  392. data/libtest/EnumTest.c +34 -0
  393. data/libtest/FunctionTest.c +58 -0
  394. data/libtest/GNUmakefile +149 -0
  395. data/libtest/GlobalVariable.c +62 -0
  396. data/libtest/LastErrorTest.c +21 -0
  397. data/libtest/NumberTest.c +132 -0
  398. data/libtest/PointerTest.c +63 -0
  399. data/libtest/ReferenceTest.c +23 -0
  400. data/libtest/StringTest.c +34 -0
  401. data/libtest/StructTest.c +243 -0
  402. data/libtest/UnionTest.c +43 -0
  403. data/libtest/VariadicTest.c +62 -0
  404. data/spec/ffi/async_callback_spec.rb +35 -0
  405. data/spec/ffi/bool_spec.rb +29 -0
  406. data/spec/ffi/buffer_spec.rb +251 -0
  407. data/spec/ffi/callback_spec.rb +667 -0
  408. data/spec/ffi/custom_param_type.rb +36 -0
  409. data/spec/ffi/custom_type_spec.rb +74 -0
  410. data/spec/ffi/dup_spec.rb +54 -0
  411. data/spec/ffi/enum_spec.rb +220 -0
  412. data/spec/ffi/errno_spec.rb +18 -0
  413. data/spec/ffi/ffi_spec.rb +29 -0
  414. data/spec/ffi/function_spec.rb +76 -0
  415. data/spec/ffi/library_spec.rb +216 -0
  416. data/spec/ffi/long_double.rb +30 -0
  417. data/spec/ffi/managed_struct_spec.rb +57 -0
  418. data/spec/ffi/number_spec.rb +236 -0
  419. data/spec/ffi/pointer_spec.rb +265 -0
  420. data/spec/ffi/rbx/attach_function_spec.rb +28 -0
  421. data/spec/ffi/rbx/memory_pointer_spec.rb +123 -0
  422. data/spec/ffi/rbx/spec_helper.rb +1 -0
  423. data/spec/ffi/rbx/struct_spec.rb +13 -0
  424. data/spec/ffi/spec_helper.rb +33 -0
  425. data/spec/ffi/string_spec.rb +108 -0
  426. data/spec/ffi/strptr_spec.rb +50 -0
  427. data/spec/ffi/struct_by_ref_spec.rb +43 -0
  428. data/spec/ffi/struct_callback_spec.rb +69 -0
  429. data/spec/ffi/struct_initialize_spec.rb +35 -0
  430. data/spec/ffi/struct_packed_spec.rb +51 -0
  431. data/spec/ffi/struct_spec.rb +748 -0
  432. data/spec/ffi/typedef_spec.rb +78 -0
  433. data/spec/ffi/union_spec.rb +65 -0
  434. data/spec/ffi/variadic_spec.rb +92 -0
  435. data/spec/spec.opts +4 -0
  436. metadata +562 -0
data/ext/ffi_c/rbffi.h ADDED
@@ -0,0 +1,57 @@
1
+ /*
2
+ * Copyright (c) 2008, 2009, Wayne Meissner
3
+ *
4
+ * Copyright (c) 2008-2013, Ruby FFI project contributors
5
+ * All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions are met:
9
+ * * Redistributions of source code must retain the above copyright
10
+ * notice, this list of conditions and the following disclaimer.
11
+ * * Redistributions in binary form must reproduce the above copyright
12
+ * notice, this list of conditions and the following disclaimer in the
13
+ * documentation and/or other materials provided with the distribution.
14
+ * * Neither the name of the Ruby FFI project nor the
15
+ * names of its contributors may be used to endorse or promote products
16
+ * derived from this software without specific prior written permission.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ */
29
+
30
+ #ifndef RBFFI_RBFFI_H
31
+ #define RBFFI_RBFFI_H
32
+
33
+ #include <ruby.h>
34
+
35
+ #ifdef __cplusplus
36
+ extern "C" {
37
+ #endif
38
+
39
+ #define MAX_PARAMETERS (32)
40
+
41
+ extern VALUE rbffi_FFIModule;
42
+
43
+ extern void rbffi_Type_Init(VALUE ffiModule);
44
+ extern void rbffi_Buffer_Init(VALUE ffiModule);
45
+ extern void rbffi_Invoker_Init(VALUE ffiModule);
46
+ extern void rbffi_Variadic_Init(VALUE ffiModule);
47
+ extern void rbffi_DataConverter_Init(VALUE ffiModule);
48
+ extern VALUE rbffi_AbstractMemoryClass, rbffi_InvokerClass;
49
+ extern int rbffi_type_size(VALUE type);
50
+ extern void rbffi_Thread_Init(VALUE moduleFFI);
51
+
52
+ #ifdef __cplusplus
53
+ }
54
+ #endif
55
+
56
+ #endif /* RBFFI_RBFFI_H */
57
+
@@ -0,0 +1,59 @@
1
+ #ifndef JFFI_ENDIAN_H
2
+ #define JFFI_ENDIAN_H
3
+
4
+ #ifndef _MSC_VER
5
+ #include <sys/param.h>
6
+ #endif
7
+
8
+ #include <sys/types.h>
9
+
10
+ #if defined(__linux__) || defined(__CYGWIN__) || defined(__GNU__) || defined(__GLIBC__)
11
+ # include <endian.h>
12
+ # if !defined(LITTLE_ENDIAN) && defined(__LITTLE_ENDIAN)
13
+ # define LITTLE_ENDIAN __LITTLE_ENDIAN
14
+ # endif
15
+ # if !defined(BIG_ENDIAN) && defined(__BIG_ENDIAN)
16
+ # define BIG_ENDIAN __BIG_ENDIAN
17
+ # endif
18
+ # if !defined(BYTE_ORDER) && defined(__BYTE_ORDER)
19
+ # define BYTE_ORDER __BYTE_ORDER
20
+ # endif
21
+ #endif
22
+
23
+ #ifdef __sun
24
+ # include <sys/byteorder.h>
25
+ # define LITTLE_ENDIAN 1234
26
+ # define BIG_ENDIAN 4321
27
+ # if defined(_BIG_ENDIAN)
28
+ # define BYTE_ORDER BIG_ENDIAN
29
+ # elif defined(_LITTLE_ENDIAN)
30
+ # define BYTE_ORDER LITTLE_ENDIAN
31
+ # else
32
+ # error "Cannot determine endian-ness"
33
+ # endif
34
+ #endif
35
+
36
+ #if defined(_AIX) && !defined(BYTE_ORDER)
37
+ # define LITTLE_ENDIAN 1234
38
+ # define BIG_ENDIAN 4321
39
+ # if defined(__BIG_ENDIAN__)
40
+ # define BYTE_ORDER BIG_ENDIAN
41
+ # elif defined(__LITTLE_ENDIAN__)
42
+ # define BYTE_ORDER LITTLE_ENDIAN
43
+ # else
44
+ # error "Cannot determine endian-ness"
45
+ # endif
46
+ #endif
47
+
48
+ #if defined(_WIN32)
49
+ # define LITTLE_ENDIAN 1234
50
+ # define BIG_ENDIAN 4321
51
+ # define BYTE_ORDER LITTLE_ENDIAN
52
+ #endif
53
+
54
+ #if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN) || !defined(BIG_ENDIAN)
55
+ # error "Cannot determine the endian-ness of this platform"
56
+ #endif
57
+
58
+ #endif /* JFFI_ENDIAN_H */
59
+
@@ -0,0 +1,8 @@
1
+ #ifndef FFI_STDBOOL_H
2
+ #define FFI_STDBOOL_H
3
+
4
+ typedef int bool;
5
+ #define true 1
6
+ #define false 0
7
+
8
+ #endif /* FFI_STDBOOL_H */
@@ -0,0 +1,201 @@
1
+ /* stdint.h standard header */
2
+ #if !defined(_MSC_VER) && !defined(INT8_MIN)
3
+ #pragma once
4
+ #ifndef _STDINT
5
+ #define _STDINT
6
+ #ifndef RC_INVOKED
7
+ #include <yvals.h>
8
+
9
+ /* NB: assumes
10
+ byte has 8 bits
11
+ long is 32 bits
12
+ pointer can convert to and from long long
13
+ long long is longest type
14
+ */
15
+
16
+ _C_STD_BEGIN
17
+ /* TYPE DEFINITIONS */
18
+ typedef signed char int8_t;
19
+ typedef short int16_t;
20
+ typedef int int32_t;
21
+
22
+ typedef unsigned char uint8_t;
23
+ typedef unsigned short uint16_t;
24
+ typedef unsigned int uint32_t;
25
+
26
+ typedef signed char int_least8_t;
27
+ typedef short int_least16_t;
28
+ typedef int int_least32_t;
29
+
30
+ typedef unsigned char uint_least8_t;
31
+ typedef unsigned short uint_least16_t;
32
+ typedef unsigned int uint_least32_t;
33
+
34
+ typedef char int_fast8_t;
35
+ typedef int int_fast16_t;
36
+ typedef int int_fast32_t;
37
+
38
+ typedef unsigned char uint_fast8_t;
39
+ typedef unsigned int uint_fast16_t;
40
+ typedef unsigned int uint_fast32_t;
41
+
42
+ #ifndef _INTPTR_T_DEFINED
43
+ #define _INTPTR_T_DEFINED
44
+ #ifdef _WIN64
45
+ typedef __int64 intptr_t;
46
+ #else /* _WIN64 */
47
+ typedef _W64 int intptr_t;
48
+ #endif /* _WIN64 */
49
+ #endif /* _INTPTR_T_DEFINED */
50
+
51
+ #ifndef _UINTPTR_T_DEFINED
52
+ #define _UINTPTR_T_DEFINED
53
+ #ifdef _WIN64
54
+ typedef unsigned __int64 uintptr_t;
55
+ #else /* _WIN64 */
56
+ typedef _W64 unsigned int uintptr_t;
57
+ #endif /* _WIN64 */
58
+ #endif /* _UINTPTR_T_DEFINED */
59
+
60
+ typedef _Longlong int64_t;
61
+ typedef _ULonglong uint64_t;
62
+
63
+ typedef _Longlong int_least64_t;
64
+ typedef _ULonglong uint_least64_t;
65
+
66
+ typedef _Longlong int_fast64_t;
67
+ typedef _ULonglong uint_fast64_t;
68
+
69
+ typedef _Longlong intmax_t;
70
+ typedef _ULonglong uintmax_t;
71
+
72
+ /* LIMIT MACROS */
73
+ #define INT8_MIN (-0x7f - _C2)
74
+ #define INT16_MIN (-0x7fff - _C2)
75
+ #define INT32_MIN (-0x7fffffff - _C2)
76
+
77
+ #define INT8_MAX 0x7f
78
+ #define INT16_MAX 0x7fff
79
+ #define INT32_MAX 0x7fffffff
80
+ #define UINT8_MAX 0xff
81
+ #define UINT16_MAX 0xffff
82
+ #define UINT32_MAX 0xffffffff
83
+
84
+ #define INT_LEAST8_MIN (-0x7f - _C2)
85
+ #define INT_LEAST16_MIN (-0x7fff - _C2)
86
+ #define INT_LEAST32_MIN (-0x7fffffff - _C2)
87
+
88
+ #define INT_LEAST8_MAX 0x7f
89
+ #define INT_LEAST16_MAX 0x7fff
90
+ #define INT_LEAST32_MAX 0x7fffffff
91
+ #define UINT_LEAST8_MAX 0xff
92
+ #define UINT_LEAST16_MAX 0xffff
93
+ #define UINT_LEAST32_MAX 0xffffffff
94
+
95
+ #define INT_FAST8_MIN (-0x7f - _C2)
96
+ #define INT_FAST16_MIN (-0x7fff - _C2)
97
+ #define INT_FAST32_MIN (-0x7fffffff - _C2)
98
+
99
+ #define INT_FAST8_MAX 0x7f
100
+ #define INT_FAST16_MAX 0x7fff
101
+ #define INT_FAST32_MAX 0x7fffffff
102
+ #define UINT_FAST8_MAX 0xff
103
+ #define UINT_FAST16_MAX 0xffff
104
+ #define UINT_FAST32_MAX 0xffffffff
105
+
106
+ #if _INTPTR == 0 || _INTPTR == 1
107
+ #define INTPTR_MAX 0x7fffffff
108
+ #define INTPTR_MIN (-INTPTR_MAX - _C2)
109
+ #define UINTPTR_MAX 0xffffffff
110
+
111
+ #else /* _INTPTR == 2 */
112
+ #define INTPTR_MIN (-_LLONG_MAX - _C2)
113
+ #define INTPTR_MAX _LLONG_MAX
114
+ #define UINTPTR_MAX _ULLONG_MAX
115
+ #endif /* _INTPTR */
116
+
117
+ #define INT8_C(x) (x)
118
+ #define INT16_C(x) (x)
119
+ #define INT32_C(x) ((x) + (INT32_MAX - INT32_MAX))
120
+
121
+ #define UINT8_C(x) (x)
122
+ #define UINT16_C(x) (x)
123
+ #define UINT32_C(x) ((x) + (UINT32_MAX - UINT32_MAX))
124
+
125
+ #ifdef _WIN64
126
+ #define PTRDIFF_MIN INT64_MIN
127
+ #define PTRDIFF_MAX INT64_MAX
128
+ #else /* _WIN64 */
129
+ #define PTRDIFF_MIN INT32_MIN
130
+ #define PTRDIFF_MAX INT32_MAX
131
+ #endif /* _WIN64 */
132
+
133
+ #define SIG_ATOMIC_MIN INT32_MIN
134
+ #define SIG_ATOMIC_MAX INT32_MAX
135
+
136
+ #ifndef SIZE_MAX
137
+ #ifdef _WIN64
138
+ #define SIZE_MAX UINT64_MAX
139
+ #else /* _WIN64 */
140
+ #define SIZE_MAX UINT32_MAX
141
+ #endif /* _WIN64 */
142
+ #endif /* SIZE_MAX */
143
+
144
+ #define WCHAR_MIN 0x0000
145
+ #define WCHAR_MAX 0xffff
146
+
147
+ #define WINT_MIN 0x0000
148
+ #define WINT_MAX 0xffff
149
+
150
+ #define INT64_MIN (-0x7fffffffffffffff - _C2)
151
+ #define INT64_MAX 0x7fffffffffffffff
152
+ #define UINT64_MAX 0xffffffffffffffffU
153
+
154
+ #define INT_LEAST64_MIN (-0x7fffffffffffffff - _C2)
155
+ #define INT_LEAST64_MAX 0x7fffffffffffffff
156
+ #define UINT_LEAST64_MAX 0xffffffffffffffffU
157
+
158
+ #define INT_FAST64_MIN (-0x7fffffffffffffff - _C2)
159
+ #define INT_FAST64_MAX 0x7fffffffffffffff
160
+ #define UINT_FAST64_MAX 0xffffffffffffffffU
161
+
162
+ #define INTMAX_MIN (-0x7fffffffffffffff - _C2)
163
+ #define INTMAX_MAX 0x7fffffffffffffff
164
+ #define UINTMAX_MAX 0xffffffffffffffffU
165
+
166
+ #define INT64_C(x) ((x) + (INT64_MAX - INT64_MAX))
167
+ #define UINT64_C(x) ((x) + (UINT64_MAX - UINT64_MAX))
168
+ #define INTMAX_C(x) INT64_C(x)
169
+ #define UINTMAX_C(x) UINT64_C(x)
170
+ _C_STD_END
171
+ #endif /* RC_INVOKED */
172
+ #endif /* _STDINT */
173
+
174
+ #if defined(_STD_USING)
175
+ using _CSTD int8_t; using _CSTD int16_t;
176
+ using _CSTD int32_t; using _CSTD int64_t;
177
+
178
+ using _CSTD uint8_t; using _CSTD uint16_t;
179
+ using _CSTD uint32_t; using _CSTD uint64_t;
180
+
181
+ using _CSTD int_least8_t; using _CSTD int_least16_t;
182
+ using _CSTD int_least32_t; using _CSTD int_least64_t;
183
+ using _CSTD uint_least8_t; using _CSTD uint_least16_t;
184
+ using _CSTD uint_least32_t; using _CSTD uint_least64_t;
185
+
186
+ using _CSTD intmax_t; using _CSTD uintmax_t;
187
+
188
+ using _CSTD uintptr_t;
189
+ using _CSTD intptr_t;
190
+
191
+ using _CSTD int_fast8_t; using _CSTD int_fast16_t;
192
+ using _CSTD int_fast32_t; using _CSTD int_fast64_t;
193
+ using _CSTD uint_fast8_t; using _CSTD uint_fast16_t;
194
+ using _CSTD uint_fast32_t; using _CSTD uint_fast64_t;
195
+ #endif /* defined(_STD_USING) */
196
+
197
+ /*
198
+ * Copyright (c) 1992-2009 by P.J. Plauger. ALL RIGHTS RESERVED.
199
+ * Consult your license regarding permissions and restrictions.
200
+ V5.20:0009 */
201
+ #endif /* !defined(_MSC_VER) && !defined(INT8_MIN) */
data/ffi.gemspec ADDED
@@ -0,0 +1,22 @@
1
+ require File.expand_path("../lib/#{File.basename(__FILE__, '.gemspec')}/version", __FILE__)
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'ffi'
5
+ s.version = FFI::VERSION
6
+ s.author = 'Wayne Meissner'
7
+ s.email = 'wmeissner@gmail.com'
8
+ s.homepage = 'http://wiki.github.com/ffi/ffi'
9
+ s.summary = 'Ruby FFI'
10
+ s.description = 'Ruby FFI library'
11
+ s.files = %w(ffi.gemspec LICENSE COPYING README.md Rakefile) + Dir.glob("{ext,gen,lib,spec,libtest}/**/*").reject { |f| f =~ /(lib\/[12]\.[089]|\.so$|\.bundle$)/ }
12
+ s.extensions << 'ext/ffi_c/extconf.rb'
13
+ s.has_rdoc = false
14
+ s.rdoc_options = %w[--exclude=ext/ffi_c/.*\.o$ --exclude=ffi_c\.(bundle|so)$]
15
+ s.license = 'BSD'
16
+ s.require_paths << 'ext/ffi_c'
17
+ s.required_ruby_version = '>= 1.8.7'
18
+ s.add_development_dependency 'rake'
19
+ s.add_development_dependency 'rake-compiler', '>=0.6.0'
20
+ s.add_development_dependency 'rspec'
21
+ s.add_development_dependency 'rubygems-tasks'
22
+ end
data/gen/Rakefile ADDED
@@ -0,0 +1,30 @@
1
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
+ require 'fileutils'
3
+ require 'ffi'
4
+ require 'ffi/platform'
5
+ require 'ffi/tools/types_generator'
6
+ types_conf = File.expand_path(File.join(FFI::Platform::CONF_DIR, 'types.conf'))
7
+
8
+ logfile = File.join(File.dirname(__FILE__), 'log')
9
+
10
+ file types_conf do |task|
11
+ options = {}
12
+ FileUtils.mkdir_p(File.dirname(task.name), { :mode => 0755 })
13
+ File.open(task.name, File::CREAT|File::TRUNC|File::RDWR, 0644) do |f|
14
+ f.puts FFI::TypesGenerator.generate(options)
15
+ end
16
+ File.open(logfile, 'w') do |log|
17
+ log.puts(types_conf)
18
+ end
19
+ end
20
+
21
+ task :default => types_conf do
22
+ end
23
+
24
+ task :clean do
25
+ File.readlines(logfile).each do |file|
26
+ file.strip!
27
+ rm_f file
28
+ end
29
+ rm_f logfile
30
+ end
data/lib/ffi.rb ADDED
@@ -0,0 +1,28 @@
1
+ if !defined?(RUBY_ENGINE) || RUBY_ENGINE == 'ruby' || RUBY_ENGINE == 'rbx'
2
+ Object.send(:remove_const, :FFI) if defined?(::FFI)
3
+ begin
4
+ if RUBY_VERSION =~ /1.8/
5
+ require '1.8/ffi_c'
6
+ elsif RUBY_VERSION =~ /1.9/
7
+ require '1.9/ffi_c'
8
+ elsif RUBY_VERSION =~ /2.0/
9
+ require '2.0/ffi_c'
10
+ else
11
+ require 'ffi_c'
12
+ end
13
+ rescue Exception
14
+ require 'ffi_c'
15
+ end
16
+
17
+ require 'ffi/ffi'
18
+
19
+ elsif defined?(RUBY_ENGINE)
20
+ # Remove the ffi gem dir from the load path, then reload the internal ffi implementation
21
+ $LOAD_PATH.delete(File.dirname(__FILE__))
22
+ $LOAD_PATH.delete(File.join(File.dirname(__FILE__), 'ffi'))
23
+ unless $LOADED_FEATURES.nil?
24
+ $LOADED_FEATURES.delete(__FILE__)
25
+ $LOADED_FEATURES.delete('ffi.rb')
26
+ end
27
+ require 'ffi.rb'
28
+ end
@@ -0,0 +1,194 @@
1
+ #
2
+ # Copyright (C) 2008-2010 Wayne Meissner
3
+ # Copyright (C) 2008 Mike Dalessio
4
+ #
5
+ # This file is part of ruby-ffi.
6
+ #
7
+ # All rights reserved.
8
+ #
9
+ # Redistribution and use in source and binary forms, with or without
10
+ # modification, are permitted provided that the following conditions are met:
11
+ #
12
+ # * Redistributions of source code must retain the above copyright notice, this
13
+ # list of conditions and the following disclaimer.
14
+ # * Redistributions in binary form must reproduce the above copyright notice
15
+ # this list of conditions and the following disclaimer in the documentation
16
+ # and/or other materials provided with the distribution.
17
+ # * Neither the name of the Ruby FFI project nor the names of its contributors
18
+ # may be used to endorse or promote products derived from this software
19
+ # without specific prior written permission.
20
+ #
21
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
25
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+
32
+ module FFI
33
+ class AutoPointer < Pointer
34
+ extend DataConverter
35
+
36
+ # @overload initialize(pointer, method)
37
+ # @param [Pointer] pointer
38
+ # @param [Method] method
39
+ # @return [self]
40
+ # The passed Method will be invoked at GC time.
41
+ # @overload initialize(pointer, proc)
42
+ # @param [Pointer] pointer
43
+ # @return [self]
44
+ # The passed Proc will be invoked at GC time (SEE WARNING BELOW!)
45
+ # @note WARNING: passing a proc _may_ cause your pointer to never be GC'd, unless you're
46
+ # careful to avoid trapping a reference to the pointer in the proc. See the test
47
+ # specs for examples.
48
+ # @overload initialize(pointer) { |p| ... }
49
+ # @param [Pointer] pointer
50
+ # @yieldparam [Pointer] p +pointer+ passed to the block
51
+ # @return [self]
52
+ # The passed block will be invoked at GC time.
53
+ # @note WARNING: passing a block will cause your pointer to never be GC'd. This is bad.
54
+ # @overload initialize(pointer)
55
+ # @param [Pointer] pointer
56
+ # @return [self]
57
+ # The pointer's release() class method will be invoked at GC time.
58
+ #
59
+ # @note The safest, and therefore preferred, calling
60
+ # idiom is to pass a Method as the second parameter. Example usage:
61
+ #
62
+ # class PointerHelper
63
+ # def self.release(pointer)
64
+ # ...
65
+ # end
66
+ # end
67
+ #
68
+ # p = AutoPointer.new(other_pointer, PointerHelper.method(:release))
69
+ #
70
+ # The above code will cause PointerHelper#release to be invoked at GC time.
71
+ #
72
+ # @note
73
+ # The last calling idiom (only one parameter) is generally only
74
+ # going to be useful if you subclass {AutoPointer}, and override
75
+ # #release, which by default does nothing.
76
+ def initialize(ptr, proc=nil, &block)
77
+ super(ptr.type_size, ptr)
78
+ raise TypeError, "Invalid pointer" if ptr.nil? || !ptr.kind_of?(Pointer) \
79
+ || ptr.kind_of?(MemoryPointer) || ptr.kind_of?(AutoPointer)
80
+
81
+ @releaser = if proc
82
+ raise RuntimeError.new("proc must be callable") unless proc.respond_to?(:call)
83
+ CallableReleaser.new(ptr, proc)
84
+
85
+ else
86
+ raise RuntimeError.new("no release method defined") unless self.class.respond_to?(:release)
87
+ DefaultReleaser.new(ptr, self.class)
88
+ end
89
+
90
+ ObjectSpace.define_finalizer(self, @releaser)
91
+ self
92
+ end
93
+
94
+ # @return [nil]
95
+ # Free the pointer.
96
+ def free
97
+ @releaser.free
98
+ end
99
+
100
+ # @param [Boolean] autorelease
101
+ # @return [Boolean] +autorelease+
102
+ # Set +autorelease+ property. See {Pointer Autorelease section at Pointer}.
103
+ def autorelease=(autorelease)
104
+ @releaser.autorelease=(autorelease)
105
+ end
106
+
107
+ # @return [Boolean] +autorelease+
108
+ # Get +autorelease+ property. See {Pointer Autorelease section at Pointer}.
109
+ def autorelease?
110
+ @releaser.autorelease
111
+ end
112
+
113
+ # @abstract Base class for {AutoPointer}'s releasers.
114
+ #
115
+ # All subclasses of Releaser should define a +#release(ptr)+ method.
116
+ # A releaser is an object in charge of release an {AutoPointer}.
117
+ class Releaser
118
+ attr_accessor :autorelease
119
+
120
+ # @param [Pointer] ptr
121
+ # @param [#call] proc
122
+ # @return [nil]
123
+ # A new instance of Releaser.
124
+ def initialize(ptr, proc)
125
+ @ptr = ptr
126
+ @proc = proc
127
+ @autorelease = true
128
+ end
129
+
130
+ # @return [nil]
131
+ # Free pointer.
132
+ def free
133
+ if @ptr
134
+ release(@ptr)
135
+ @autorelease = false
136
+ @ptr = nil
137
+ @proc = nil
138
+ end
139
+ end
140
+
141
+ # @param args
142
+ # Release pointer if +autorelease+ is set.
143
+ def call(*args)
144
+ release(@ptr) if @autorelease && @ptr
145
+ end
146
+
147
+ end
148
+
149
+ # DefaultReleaser is a {Releaser} used when an {AutoPointer} is defined without Proc
150
+ # or Method. In this case, the pointer to release must be of a class derived from
151
+ # AutoPointer with a +#release+ class method.
152
+ class DefaultReleaser < Releaser
153
+ # @param [Pointer] ptr
154
+ # @return [nil]
155
+ # Release +ptr+ by using his #release class method.
156
+ def release(ptr)
157
+ @proc.release(ptr)
158
+ end
159
+ end
160
+
161
+ # CallableReleaser is a {Releaser} used when an {AutoPointer} is defined with a
162
+ # Proc or a Method.
163
+ class CallableReleaser < Releaser
164
+ # @param [Pointer] ptr
165
+ # @return [nil]
166
+ # Release +ptr+ by using Proc or Method defined at +ptr+ {AutoPointer#initialize initialization}.
167
+ def release(ptr)
168
+ @proc.call(ptr)
169
+ end
170
+ end
171
+
172
+ # Return native type of AutoPointer.
173
+ #
174
+ # Override {DataConverter#native_type}.
175
+ # @return [Type::POINTER]
176
+ # @raise {RuntimeError} if class does not implement a +#release+ method
177
+ def self.native_type
178
+ raise RuntimeError.new("no release method defined for #{self.inspect}") unless self.respond_to?(:release)
179
+ Type::POINTER
180
+ end
181
+
182
+ # Create a new AutoPointer.
183
+ #
184
+ # Override {DataConverter#from_native}.
185
+ # @overload self.from_native(ptr, ctx)
186
+ # @param [Pointer] ptr
187
+ # @param ctx not used. Please set +nil+.
188
+ # @return [AutoPointer]
189
+ def self.from_native(val, ctx)
190
+ self.new(val)
191
+ end
192
+ end
193
+
194
+ end