ffi 0.4.0-x86-mswin32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ffi might be problematic. Click here for more details.

Files changed (316) hide show
  1. data/LICENSE +51 -0
  2. data/README.rdoc +69 -0
  3. data/Rakefile +142 -0
  4. data/ext/ffi_c/AbstractMemory.c +412 -0
  5. data/ext/ffi_c/AbstractMemory.h +68 -0
  6. data/ext/ffi_c/AutoPointer.c +60 -0
  7. data/ext/ffi_c/AutoPointer.h +18 -0
  8. data/ext/ffi_c/Buffer.c +171 -0
  9. data/ext/ffi_c/Callback.c +374 -0
  10. data/ext/ffi_c/Callback.h +47 -0
  11. data/ext/ffi_c/DynamicLibrary.c +213 -0
  12. data/ext/ffi_c/DynamicLibrary.h +22 -0
  13. data/ext/ffi_c/Invoker.c +962 -0
  14. data/ext/ffi_c/LastError.c +135 -0
  15. data/ext/ffi_c/LastError.h +18 -0
  16. data/ext/ffi_c/MemoryPointer.c +156 -0
  17. data/ext/ffi_c/MemoryPointer.h +20 -0
  18. data/ext/ffi_c/NullPointer.c +143 -0
  19. data/ext/ffi_c/Platform.c +59 -0
  20. data/ext/ffi_c/Platform.h +16 -0
  21. data/ext/ffi_c/Pointer.c +164 -0
  22. data/ext/ffi_c/Pointer.h +25 -0
  23. data/ext/ffi_c/Struct.c +477 -0
  24. data/ext/ffi_c/Struct.h +26 -0
  25. data/ext/ffi_c/Type.c +230 -0
  26. data/ext/ffi_c/Type.h +28 -0
  27. data/ext/ffi_c/Types.c +118 -0
  28. data/ext/ffi_c/Types.h +54 -0
  29. data/ext/ffi_c/compat.h +22 -0
  30. data/ext/ffi_c/endian.h +40 -0
  31. data/ext/ffi_c/extconf.rb +31 -0
  32. data/ext/ffi_c/ffi.c +76 -0
  33. data/ext/ffi_c/libffi.bsd.mk +34 -0
  34. data/ext/ffi_c/libffi.darwin.mk +75 -0
  35. data/ext/ffi_c/libffi.gnu.mk +29 -0
  36. data/ext/ffi_c/libffi.mk +13 -0
  37. data/ext/ffi_c/libffi/ChangeLog +3243 -0
  38. data/ext/ffi_c/libffi/ChangeLog.libffi +347 -0
  39. data/ext/ffi_c/libffi/ChangeLog.libgcj +40 -0
  40. data/ext/ffi_c/libffi/ChangeLog.v1 +764 -0
  41. data/ext/ffi_c/libffi/LICENSE +21 -0
  42. data/ext/ffi_c/libffi/Makefile.am +177 -0
  43. data/ext/ffi_c/libffi/Makefile.in +1640 -0
  44. data/ext/ffi_c/libffi/README +328 -0
  45. data/ext/ffi_c/libffi/TODO +1 -0
  46. data/ext/ffi_c/libffi/acinclude.m4 +92 -0
  47. data/ext/ffi_c/libffi/aclocal.m4 +7516 -0
  48. data/ext/ffi_c/libffi/compile +142 -0
  49. data/ext/ffi_c/libffi/config.guess +1516 -0
  50. data/ext/ffi_c/libffi/config.sub +1626 -0
  51. data/ext/ffi_c/libffi/configure +24414 -0
  52. data/ext/ffi_c/libffi/configure.ac +365 -0
  53. data/ext/ffi_c/libffi/configure.host +11 -0
  54. data/ext/ffi_c/libffi/depcomp +584 -0
  55. data/ext/ffi_c/libffi/doc/libffi.info +533 -0
  56. data/ext/ffi_c/libffi/doc/libffi.texi +541 -0
  57. data/ext/ffi_c/libffi/doc/stamp-vti +4 -0
  58. data/ext/ffi_c/libffi/doc/version.texi +4 -0
  59. data/ext/ffi_c/libffi/fficonfig.h.in +160 -0
  60. data/ext/ffi_c/libffi/include/Makefile.am +9 -0
  61. data/ext/ffi_c/libffi/include/Makefile.in +422 -0
  62. data/ext/ffi_c/libffi/include/ffi.h.in +393 -0
  63. data/ext/ffi_c/libffi/include/ffi_common.h +98 -0
  64. data/ext/ffi_c/libffi/install-sh +323 -0
  65. data/ext/ffi_c/libffi/libffi.pc.in +10 -0
  66. data/ext/ffi_c/libffi/libtool-version +29 -0
  67. data/ext/ffi_c/libffi/ltcf-c.sh +861 -0
  68. data/ext/ffi_c/libffi/ltcf-cxx.sh +1069 -0
  69. data/ext/ffi_c/libffi/ltcf-gcj.sh +700 -0
  70. data/ext/ffi_c/libffi/ltconfig +2862 -0
  71. data/ext/ffi_c/libffi/ltmain.sh +6930 -0
  72. data/ext/ffi_c/libffi/man/Makefile.am +8 -0
  73. data/ext/ffi_c/libffi/man/Makefile.in +395 -0
  74. data/ext/ffi_c/libffi/man/ffi.3 +31 -0
  75. data/ext/ffi_c/libffi/man/ffi_call.3 +103 -0
  76. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +66 -0
  77. data/ext/ffi_c/libffi/mdate-sh +201 -0
  78. data/ext/ffi_c/libffi/missing +353 -0
  79. data/ext/ffi_c/libffi/mkinstalldirs +158 -0
  80. data/ext/ffi_c/libffi/src/alpha/ffi.c +284 -0
  81. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +48 -0
  82. data/ext/ffi_c/libffi/src/alpha/osf.S +366 -0
  83. data/ext/ffi_c/libffi/src/arm/ffi.c +309 -0
  84. data/ext/ffi_c/libffi/src/arm/ffitarget.h +49 -0
  85. data/ext/ffi_c/libffi/src/arm/sysv.S +299 -0
  86. data/ext/ffi_c/libffi/src/closures.c +596 -0
  87. data/ext/ffi_c/libffi/src/cris/ffi.c +383 -0
  88. data/ext/ffi_c/libffi/src/cris/ffitarget.h +51 -0
  89. data/ext/ffi_c/libffi/src/cris/sysv.S +215 -0
  90. data/ext/ffi_c/libffi/src/debug.c +59 -0
  91. data/ext/ffi_c/libffi/src/dlmalloc.c +5099 -0
  92. data/ext/ffi_c/libffi/src/frv/eabi.S +128 -0
  93. data/ext/ffi_c/libffi/src/frv/ffi.c +292 -0
  94. data/ext/ffi_c/libffi/src/frv/ffitarget.h +61 -0
  95. data/ext/ffi_c/libffi/src/ia64/ffi.c +580 -0
  96. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +50 -0
  97. data/ext/ffi_c/libffi/src/ia64/ia64_flags.h +40 -0
  98. data/ext/ffi_c/libffi/src/ia64/unix.S +560 -0
  99. data/ext/ffi_c/libffi/src/java_raw_api.c +359 -0
  100. data/ext/ffi_c/libffi/src/m32r/ffi.c +232 -0
  101. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +48 -0
  102. data/ext/ffi_c/libffi/src/m32r/sysv.S +121 -0
  103. data/ext/ffi_c/libffi/src/m68k/ffi.c +278 -0
  104. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +49 -0
  105. data/ext/ffi_c/libffi/src/m68k/sysv.S +234 -0
  106. data/ext/ffi_c/libffi/src/mips/ffi.c +926 -0
  107. data/ext/ffi_c/libffi/src/mips/ffitarget.h +202 -0
  108. data/ext/ffi_c/libffi/src/mips/n32.S +534 -0
  109. data/ext/ffi_c/libffi/src/mips/o32.S +381 -0
  110. data/ext/ffi_c/libffi/src/pa/ffi.c +709 -0
  111. data/ext/ffi_c/libffi/src/pa/ffitarget.h +77 -0
  112. data/ext/ffi_c/libffi/src/pa/hpux32.S +368 -0
  113. data/ext/ffi_c/libffi/src/pa/linux.S +357 -0
  114. data/ext/ffi_c/libffi/src/powerpc/aix.S +225 -0
  115. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +247 -0
  116. data/ext/ffi_c/libffi/src/powerpc/asm.h +125 -0
  117. data/ext/ffi_c/libffi/src/powerpc/darwin.S +245 -0
  118. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +317 -0
  119. data/ext/ffi_c/libffi/src/powerpc/ffi.c +1429 -0
  120. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +800 -0
  121. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +118 -0
  122. data/ext/ffi_c/libffi/src/powerpc/linux64.S +187 -0
  123. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +236 -0
  124. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +327 -0
  125. data/ext/ffi_c/libffi/src/powerpc/sysv.S +230 -0
  126. data/ext/ffi_c/libffi/src/prep_cif.c +174 -0
  127. data/ext/ffi_c/libffi/src/raw_api.c +254 -0
  128. data/ext/ffi_c/libffi/src/s390/ffi.c +780 -0
  129. data/ext/ffi_c/libffi/src/s390/ffitarget.h +60 -0
  130. data/ext/ffi_c/libffi/src/s390/sysv.S +434 -0
  131. data/ext/ffi_c/libffi/src/sh/ffi.c +716 -0
  132. data/ext/ffi_c/libffi/src/sh/ffitarget.h +49 -0
  133. data/ext/ffi_c/libffi/src/sh/sysv.S +850 -0
  134. data/ext/ffi_c/libffi/src/sh64/ffi.c +453 -0
  135. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +53 -0
  136. data/ext/ffi_c/libffi/src/sh64/sysv.S +530 -0
  137. data/ext/ffi_c/libffi/src/sparc/ffi.c +610 -0
  138. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +66 -0
  139. data/ext/ffi_c/libffi/src/sparc/v8.S +272 -0
  140. data/ext/ffi_c/libffi/src/sparc/v9.S +307 -0
  141. data/ext/ffi_c/libffi/src/types.c +77 -0
  142. data/ext/ffi_c/libffi/src/x86/darwin.S +443 -0
  143. data/ext/ffi_c/libffi/src/x86/darwin64.S +416 -0
  144. data/ext/ffi_c/libffi/src/x86/ffi.c +475 -0
  145. data/ext/ffi_c/libffi/src/x86/ffi64.c +572 -0
  146. data/ext/ffi_c/libffi/src/x86/ffitarget.h +90 -0
  147. data/ext/ffi_c/libffi/src/x86/freebsd.S +458 -0
  148. data/ext/ffi_c/libffi/src/x86/sysv.S +437 -0
  149. data/ext/ffi_c/libffi/src/x86/unix64.S +418 -0
  150. data/ext/ffi_c/libffi/src/x86/win32.S +391 -0
  151. data/ext/ffi_c/libffi/testsuite/Makefile.am +71 -0
  152. data/ext/ffi_c/libffi/testsuite/Makefile.in +447 -0
  153. data/ext/ffi_c/libffi/testsuite/config/default.exp +1 -0
  154. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +289 -0
  155. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +263 -0
  156. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +45 -0
  157. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +36 -0
  158. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn0.c +97 -0
  159. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn1.c +89 -0
  160. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn2.c +89 -0
  161. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn3.c +90 -0
  162. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn4.c +97 -0
  163. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn5.c +99 -0
  164. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_fn6.c +98 -0
  165. data/ext/ffi_c/libffi/testsuite/libffi.call/closure_stdcall.c +72 -0
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +102 -0
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +103 -0
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +104 -0
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +110 -0
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +97 -0
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +99 -0
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +101 -0
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +121 -0
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +98 -0
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +103 -0
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +98 -0
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +98 -0
  178. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +106 -0
  179. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +98 -0
  180. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +117 -0
  181. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +106 -0
  182. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +132 -0
  183. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +121 -0
  184. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +107 -0
  185. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +125 -0
  186. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +105 -0
  187. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +96 -0
  188. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +98 -0
  189. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +99 -0
  190. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +101 -0
  191. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +99 -0
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +100 -0
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +101 -0
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +99 -0
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +99 -0
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +99 -0
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +99 -0
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +99 -0
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +100 -0
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double.c +51 -0
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_float.c +51 -0
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_schar.c +82 -0
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshort.c +82 -0
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +94 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_uchar.c +99 -0
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushort.c +82 -0
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +94 -0
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_schar.c +52 -0
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sint.c +50 -0
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_sshort.c +50 -0
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar.c +50 -0
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint.c +51 -0
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +54 -0
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort.c +51 -0
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +86 -0
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +59 -0
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +58 -0
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +57 -0
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +72 -0
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +62 -0
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +69 -0
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +63 -0
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +53 -0
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +160 -0
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +169 -0
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +141 -0
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +118 -0
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +119 -0
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +119 -0
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +120 -0
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +139 -0
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +119 -0
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +139 -0
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +139 -0
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/problem1.c +98 -0
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +59 -0
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +35 -0
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +35 -0
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +36 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +49 -0
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +42 -0
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +34 -0
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +41 -0
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +42 -0
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +36 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +38 -0
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +38 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +38 -0
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +44 -0
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +65 -0
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +67 -0
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +59 -0
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +63 -0
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +65 -0
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +64 -0
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +74 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +80 -0
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +67 -0
  263. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +86 -0
  264. data/ext/ffi_c/libffi/testsuite/libffi.special/special.exp +38 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest.cc +123 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
  267. data/ext/ffi_c/libffi/texinfo.tex +7482 -0
  268. data/ext/ffi_c/rbffi.h +23 -0
  269. data/gen/Rakefile +12 -0
  270. data/lib/1.8/ffi_c.so +0 -0
  271. data/lib/1.9/ffi_c.so +0 -0
  272. data/lib/ffi.rb +11 -0
  273. data/lib/ffi/autopointer.rb +61 -0
  274. data/lib/ffi/buffer.rb +0 -0
  275. data/lib/ffi/callback.rb +10 -0
  276. data/lib/ffi/enum.rb +78 -0
  277. data/lib/ffi/errno.rb +8 -0
  278. data/lib/ffi/ffi.rb +96 -0
  279. data/lib/ffi/io.rb +21 -0
  280. data/lib/ffi/library.rb +243 -0
  281. data/lib/ffi/managedstruct.rb +55 -0
  282. data/lib/ffi/memorypointer.rb +73 -0
  283. data/lib/ffi/platform.rb +78 -0
  284. data/lib/ffi/pointer.rb +119 -0
  285. data/lib/ffi/struct.rb +354 -0
  286. data/lib/ffi/tools/const_generator.rb +177 -0
  287. data/lib/ffi/tools/generator.rb +58 -0
  288. data/lib/ffi/tools/generator_task.rb +35 -0
  289. data/lib/ffi/tools/struct_generator.rb +194 -0
  290. data/lib/ffi/tools/types_generator.rb +123 -0
  291. data/lib/ffi/types.rb +153 -0
  292. data/lib/ffi/union.rb +17 -0
  293. data/lib/ffi/variadic.rb +30 -0
  294. data/spec/ffi/bool_spec.rb +24 -0
  295. data/spec/ffi/buffer_spec.rb +196 -0
  296. data/spec/ffi/callback_spec.rb +560 -0
  297. data/spec/ffi/enum_spec.rb +164 -0
  298. data/spec/ffi/errno_spec.rb +13 -0
  299. data/spec/ffi/library_spec.rb +144 -0
  300. data/spec/ffi/managed_struct_spec.rb +56 -0
  301. data/spec/ffi/number_spec.rb +231 -0
  302. data/spec/ffi/pointer_spec.rb +195 -0
  303. data/spec/ffi/rbx/attach_function_spec.rb +27 -0
  304. data/spec/ffi/rbx/memory_pointer_spec.rb +102 -0
  305. data/spec/ffi/rbx/spec_helper.rb +1 -0
  306. data/spec/ffi/rbx/struct_spec.rb +13 -0
  307. data/spec/ffi/spec_helper.rb +17 -0
  308. data/spec/ffi/string_spec.rb +103 -0
  309. data/spec/ffi/struct_callback_spec.rb +41 -0
  310. data/spec/ffi/struct_initialize_spec.rb +30 -0
  311. data/spec/ffi/struct_spec.rb +476 -0
  312. data/spec/ffi/typedef_spec.rb +48 -0
  313. data/spec/ffi/union_spec.rb +60 -0
  314. data/spec/ffi/variadic_spec.rb +84 -0
  315. data/spec/spec.opts +4 -0
  316. metadata +375 -0
@@ -0,0 +1,560 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
2
+
3
+ describe "Callback" do
4
+ # module LibC
5
+ # extend FFI::Library
6
+ # callback :qsort_cmp, [ :pointer, :pointer ], :int
7
+ # attach_function :qsort, [ :pointer, :int, :int, :qsort_cmp ], :int
8
+ # end
9
+ # it "arguments get passed correctly" do
10
+ # p = MemoryPointer.new(:int, 2)
11
+ # p.put_array_of_int32(0, [ 1 , 2 ])
12
+ # args = []
13
+ # cmp = proc do |p1, p2| args.push(p1.get_int(0)); args.push(p2.get_int(0)); 0; end
14
+ # # this is a bit dodgey, as it relies on qsort passing the args in order
15
+ # LibC.qsort(p, 2, 4, cmp)
16
+ # args.should == [ 1, 2 ]
17
+ # end
18
+ #
19
+ # it "Block can be substituted for Callback as last argument" do
20
+ # p = MemoryPointer.new(:int, 2)
21
+ # p.put_array_of_int32(0, [ 1 , 2 ])
22
+ # args = []
23
+ # # this is a bit dodgey, as it relies on qsort passing the args in order
24
+ # LibC.qsort(p, 2, 4) do |p1, p2|
25
+ # args.push(p1.get_int(0))
26
+ # args.push(p2.get_int(0))
27
+ # 0
28
+ # end
29
+ # args.should == [ 1, 2 ]
30
+ # end
31
+ module LibTest
32
+ extend FFI::Library
33
+ ffi_lib TestLibrary::PATH
34
+ callback :cbVrS8, [ ], :char
35
+ callback :cbVrU8, [ ], :uchar
36
+ callback :cbVrS16, [ ], :short
37
+ callback :cbVrU16, [ ], :ushort
38
+ callback :cbVrS32, [ ], :int
39
+ callback :cbVrU32, [ ], :uint
40
+ callback :cbVrL, [ ], :long
41
+ callback :cbVrUL, [ ], :ulong
42
+ callback :cbVrS64, [ ], :long_long
43
+ callback :cbVrU64, [ ], :ulong_long
44
+ callback :cbVrP, [], :pointer
45
+ callback :cbVrZ, [], :bool
46
+ callback :cbCrV, [ :char ], :void
47
+ callback :cbSrV, [ :short ], :void
48
+ callback :cbIrV, [ :int ], :void
49
+ callback :cbLrV, [ :long ], :void
50
+ callback :cbULrV, [ :ulong ], :void
51
+ callback :cbLrV, [ :long_long ], :void
52
+
53
+ attach_function :testCallbackVrS8, :testClosureVrB, [ :cbVrS8 ], :char
54
+ attach_function :testCallbackVrU8, :testClosureVrB, [ :cbVrU8 ], :uchar
55
+ attach_function :testCallbackVrS16, :testClosureVrS, [ :cbVrS16 ], :short
56
+ attach_function :testCallbackVrU16, :testClosureVrS, [ :cbVrU16 ], :ushort
57
+ attach_function :testCallbackVrS32, :testClosureVrI, [ :cbVrS32 ], :int
58
+ attach_function :testCallbackVrU32, :testClosureVrI, [ :cbVrU32 ], :uint
59
+ attach_function :testCallbackVrL, :testClosureVrL, [ :cbVrL ], :long
60
+ attach_function :testCallbackVrZ, :testClosureVrZ, [ :cbVrZ ], :bool
61
+ attach_function :testCallbackVrUL, :testClosureVrL, [ :cbVrUL ], :ulong
62
+ attach_function :testCallbackVrS64, :testClosureVrLL, [ :cbVrS64 ], :long_long
63
+ attach_function :testCallbackVrU64, :testClosureVrLL, [ :cbVrU64 ], :ulong_long
64
+ attach_function :testCallbackVrP, :testClosureVrP, [ :cbVrP ], :pointer
65
+ attach_function :testCallbackCrV, :testClosureBrV, [ :cbCrV, :char ], :void
66
+ attach_variable :cbVrS8, :gvar_pointer, :cbVrS8
67
+ attach_variable :pVrS8, :gvar_pointer, :pointer
68
+ attach_function :testGVarCallbackVrS8, :testClosureVrB, [ :pointer ], :char
69
+ attach_function :testOptionalCallbackCrV, :testOptionalClosureBrV, [ :cbCrV, :char ], :void
70
+
71
+ end
72
+ it "function with Callback plus another arg should raise error if no arg given" do
73
+ lambda { LibTest.testCallbackCrV { |*a| }}.should raise_error
74
+ end
75
+ it "returning :char (0)" do
76
+ LibTest.testCallbackVrS8 { 0 }.should == 0
77
+ end
78
+ it "returning :char (127)" do
79
+ LibTest.testCallbackVrS8 { 127 }.should == 127
80
+ end
81
+ it "returning :char (-128)" do
82
+ LibTest.testCallbackVrS8 { -128 }.should == -128
83
+ end
84
+ # test wrap around
85
+ it "returning :char (128)" do
86
+ LibTest.testCallbackVrS8 { 128 }.should == -128
87
+ end
88
+ it "returning :char (255)" do
89
+ LibTest.testCallbackVrS8 { 0xff }.should == -1
90
+ end
91
+ it "returning :uchar (0)" do
92
+ LibTest.testCallbackVrU8 { 0 }.should == 0
93
+ end
94
+ it "returning :uchar (0xff)" do
95
+ LibTest.testCallbackVrU8 { 0xff }.should == 0xff
96
+ end
97
+ it "returning :uchar (-1)" do
98
+ LibTest.testCallbackVrU8 { -1 }.should == 0xff
99
+ end
100
+ it "returning :uchar (128)" do
101
+ LibTest.testCallbackVrU8 { 128 }.should == 128
102
+ end
103
+ it "returning :uchar (-128)" do
104
+ LibTest.testCallbackVrU8 { -128 }.should == 128
105
+ end
106
+ it "returning :short (0)" do
107
+ LibTest.testCallbackVrS16 { 0 }.should == 0
108
+ end
109
+ it "returning :short (0x7fff)" do
110
+ LibTest.testCallbackVrS16 { 0x7fff }.should == 0x7fff
111
+ end
112
+ # test wrap around
113
+ it "returning :short (0x8000)" do
114
+ LibTest.testCallbackVrS16 { 0x8000 }.should == -0x8000
115
+ end
116
+ it "returning :short (0xffff)" do
117
+ LibTest.testCallbackVrS16 { 0xffff }.should == -1
118
+ end
119
+ it "returning :ushort (0)" do
120
+ LibTest.testCallbackVrU16 { 0 }.should == 0
121
+ end
122
+ it "returning :ushort (0x7fff)" do
123
+ LibTest.testCallbackVrU16 { 0x7fff }.should == 0x7fff
124
+ end
125
+ it "returning :ushort (0x8000)" do
126
+ LibTest.testCallbackVrU16 { 0x8000 }.should == 0x8000
127
+ end
128
+ it "returning :ushort (0xffff)" do
129
+ LibTest.testCallbackVrU16 { 0xffff }.should == 0xffff
130
+ end
131
+ it "returning :ushort (-1)" do
132
+ LibTest.testCallbackVrU16 { -1 }.should == 0xffff
133
+ end
134
+ it "returning :int (0)" do
135
+ LibTest.testCallbackVrS32 { 0 }.should == 0
136
+ end
137
+ it "returning :int (0x7fffffff)" do
138
+ LibTest.testCallbackVrS32 { 0x7fffffff }.should == 0x7fffffff
139
+ end
140
+ # test wrap around
141
+ it "returning :int (-0x80000000)" do
142
+ LibTest.testCallbackVrS32 { -0x80000000 }.should == -0x80000000
143
+ end
144
+ it "returning :int (-1)" do
145
+ LibTest.testCallbackVrS32 { -1 }.should == -1
146
+ end
147
+ it "returning :uint (0)" do
148
+ LibTest.testCallbackVrU32 { 0 }.should == 0
149
+ end
150
+ it "returning :uint (0x7fffffff)" do
151
+ LibTest.testCallbackVrU32 { 0x7fffffff }.should == 0x7fffffff
152
+ end
153
+ # test wrap around
154
+ it "returning :uint (0x80000000)" do
155
+ LibTest.testCallbackVrU32 { 0x80000000 }.should == 0x80000000
156
+ end
157
+ it "returning :uint (0xffffffff)" do
158
+ LibTest.testCallbackVrU32 { 0xffffffff }.should == 0xffffffff
159
+ end
160
+ it "Callback returning :uint (-1)" do
161
+ LibTest.testCallbackVrU32 { -1 }.should == 0xffffffff
162
+ end
163
+ it "returning :long (0)" do
164
+ LibTest.testCallbackVrL { 0 }.should == 0
165
+ end
166
+ it "returning :long (0x7fffffff)" do
167
+ LibTest.testCallbackVrL { 0x7fffffff }.should == 0x7fffffff
168
+ end
169
+ # test wrap around
170
+ it "returning :long (-0x80000000)" do
171
+ LibTest.testCallbackVrL { -0x80000000 }.should == -0x80000000
172
+ end
173
+ it "returning :long (-1)" do
174
+ LibTest.testCallbackVrL { -1 }.should == -1
175
+ end
176
+ it "returning :ulong (0)" do
177
+ LibTest.testCallbackVrUL { 0 }.should == 0
178
+ end
179
+ it "returning :ulong (0x7fffffff)" do
180
+ LibTest.testCallbackVrUL { 0x7fffffff }.should == 0x7fffffff
181
+ end
182
+ # test wrap around
183
+ it "returning :ulong (0x80000000)" do
184
+ LibTest.testCallbackVrUL { 0x80000000 }.should == 0x80000000
185
+ end
186
+ it "returning :ulong (0xffffffff)" do
187
+ LibTest.testCallbackVrUL { 0xffffffff }.should == 0xffffffff
188
+ end
189
+ it "Callback returning :ulong (-1)" do
190
+ if FFI::Platform::LONG_SIZE == 32
191
+ LibTest.testCallbackVrUL { -1 }.should == 0xffffffff
192
+ else
193
+ LibTest.testCallbackVrUL { -1 }.should == 0xffffffffffffffff
194
+ end
195
+ end
196
+ it "returning :long_long (0)" do
197
+ LibTest.testCallbackVrS64 { 0 }.should == 0
198
+ end
199
+ it "returning :long_long (0x7fffffffffffffff)" do
200
+ LibTest.testCallbackVrS64 { 0x7fffffffffffffff }.should == 0x7fffffffffffffff
201
+ end
202
+ # test wrap around
203
+ it "returning :long_long (-0x8000000000000000)" do
204
+ LibTest.testCallbackVrS64 { -0x8000000000000000 }.should == -0x8000000000000000
205
+ end
206
+ it "returning :long_long (-1)" do
207
+ LibTest.testCallbackVrS64 { -1 }.should == -1
208
+ end
209
+ it "returning bool" do
210
+ LibTest.testCallbackVrZ { true }.should be_true
211
+ end
212
+ it "returning :pointer (nil)" do
213
+ LibTest.testCallbackVrP { nil }.null?.should be_true
214
+ end
215
+ it "returning :pointer (MemoryPointer)" do
216
+ p = FFI::MemoryPointer.new :long
217
+ LibTest.testCallbackVrP { p }.should == p
218
+ end
219
+
220
+ it "global variable" do
221
+ proc = Proc.new { 0x1e }
222
+ LibTest.cbVrS8 = proc
223
+ LibTest.testGVarCallbackVrS8(LibTest.pVrS8).should == 0x1e
224
+ end
225
+
226
+ describe "When the callback is considered optional by the underlying library" do
227
+ it "should handle receiving 'nil' in place of the closure" do
228
+ LibTest.testOptionalCallbackCrV(nil, 13)
229
+ end
230
+ end
231
+
232
+ describe 'when inlined' do
233
+ it 'could be anonymous' do
234
+ module LibTest
235
+ extend FFI::Library
236
+ attach_function :testCallbackVrS8, :testClosureVrB, [ callback([ ], :char) ], :char
237
+ end
238
+ LibTest.testCallbackVrS8 { 0 }.should == 0
239
+ end
240
+ end
241
+
242
+ describe "as return value" do
243
+
244
+ it "should not blow up when a callback is defined that returns a callback" do
245
+ module LibTest
246
+ extend FFI::Library
247
+ callback :cb_return_type_1, [ :short ], :short
248
+ callback :cb_lookup_1, [ :short ], :cb_return_type_1
249
+ attach_function :testReturnsCallback_1, :testReturnsClosure, [ :cb_lookup_1, :short ], :cb_return_type_1
250
+ end
251
+ end
252
+
253
+ it "should return a callback" do
254
+ module LibTest
255
+ extend FFI::Library
256
+ callback :cb_return_type, [ :int ], :int
257
+ callback :cb_lookup, [ ], :cb_return_type
258
+ attach_function :testReturnsCallback, :testReturnsClosure, [ :cb_lookup, :int ], :int
259
+ end
260
+
261
+ lookup_proc_called = false
262
+ return_proc_called = false
263
+
264
+ return_proc = Proc.new do |a|
265
+ return_proc_called = true
266
+ a * 2
267
+ end
268
+ lookup_proc = Proc.new do
269
+ lookup_proc_called = true
270
+ return_proc
271
+ end
272
+
273
+ val = LibTest.testReturnsCallback(lookup_proc, 0x1234)
274
+ val.should == 0x1234 * 2
275
+ lookup_proc_called.should be_true
276
+ return_proc_called.should be_true
277
+ end
278
+
279
+ it "should return a method callback" do
280
+ module LibTest
281
+ extend FFI::Library
282
+ callback :cb_return_type, [ :int ], :int
283
+ callback :cb_lookup, [ ], :cb_return_type
284
+ attach_function :testReturnsCallback, :testReturnsClosure, [ :cb_lookup, :int ], :int
285
+ end
286
+ module MethodCallback
287
+ def self.lookup
288
+ method(:perform)
289
+ end
290
+ def self.perform num
291
+ num * 2
292
+ end
293
+ end
294
+
295
+ LibTest.testReturnsCallback(MethodCallback.method(:lookup), 0x1234).should == 0x2468
296
+ end
297
+
298
+ it 'should not blow up when a callback takes a callback as argument' do
299
+ module LibTest
300
+ extend FFI::Library
301
+ callback :cb_argument, [ :int ], :int
302
+ callback :cb_with_cb_argument, [ :cb_argument, :int ], :int
303
+ attach_function :testCallbackAsArgument, :testArgumentClosure, [ :cb_with_cb_argument, :int ], :int
304
+ end
305
+ end
306
+ it 'should be able to use the callback argument' do
307
+ module LibTest
308
+ extend FFI::Library
309
+ callback :cb_argument, [ :int ], :int
310
+ callback :cb_with_cb_argument, [ :cb_argument, :int ], :int
311
+ attach_function :testCallbackAsArgument, :testArgumentClosure, [ :cb_with_cb_argument, :cb_argument, :int ], :int
312
+ end
313
+ callback_arg_called = false
314
+ callback_with_callback_arg_called = false
315
+ callback_arg = Proc.new do |val|
316
+ callback_arg_called = true
317
+ val * 2
318
+ end
319
+ callback_with_callback_arg = Proc.new do |cb, val|
320
+ callback_with_callback_arg_called = true
321
+ cb.call(val)
322
+ end
323
+ val = LibTest.testCallbackAsArgument(callback_with_callback_arg, callback_arg, 0xff1)
324
+ val.should == 0xff1 * 2
325
+ callback_arg_called.should be_true
326
+ callback_with_callback_arg_called.should be_true
327
+ end
328
+ it 'function returns callable object' do
329
+ module LibTest
330
+ extend FFI::Library
331
+ callback :funcptr, [ :int ], :int
332
+ attach_function :testReturnsFunctionPointer, [ ], :funcptr
333
+ end
334
+ f = LibTest.testReturnsFunctionPointer
335
+ f.call(3).should == 6
336
+ end
337
+ end
338
+
339
+ end
340
+ describe "primitive argument" do
341
+ #
342
+ # Test callbacks that take an argument, returning void
343
+ #
344
+ module LibTest
345
+ extend FFI::Library
346
+ ffi_lib TestLibrary::PATH
347
+ callback :cbS8rV, [ :char ], :void
348
+ callback :cbU8rV, [ :uchar ], :void
349
+ callback :cbS16rV, [ :short ], :void
350
+ callback :cbU16rV, [ :ushort ], :void
351
+
352
+ callback :cbZrV, [ :bool ], :void
353
+ callback :cbS32rV, [ :int ], :void
354
+ callback :cbU32rV, [ :uint ], :void
355
+
356
+ callback :cbLrV, [ :long ], :void
357
+ callback :cbULrV, [ :ulong ], :void
358
+
359
+ callback :cbS64rV, [ :long_long ], :void
360
+ attach_function :testCallbackCrV, :testClosureBrV, [ :cbS8rV, :char ], :void
361
+ attach_function :testCallbackU8rV, :testClosureBrV, [ :cbU8rV, :uchar ], :void
362
+ attach_function :testCallbackSrV, :testClosureSrV, [ :cbS16rV, :short ], :void
363
+ attach_function :testCallbackU16rV, :testClosureSrV, [ :cbU16rV, :ushort ], :void
364
+ attach_function :testCallbackZrV, :testClosureZrV, [ :cbZrV, :bool ], :void
365
+ attach_function :testCallbackIrV, :testClosureIrV, [ :cbS32rV, :int ], :void
366
+ attach_function :testCallbackU32rV, :testClosureIrV, [ :cbU32rV, :uint ], :void
367
+
368
+ attach_function :testCallbackLrV, :testClosureLrV, [ :cbLrV, :long ], :void
369
+ attach_function :testCallbackULrV, :testClosureULrV, [ :cbULrV, :ulong ], :void
370
+
371
+ attach_function :testCallbackLLrV, :testClosureLLrV, [ :cbS64rV, :long_long ], :void
372
+ end
373
+ it ":char (0) argument" do
374
+ v = 0xdeadbeef
375
+ LibTest.testCallbackCrV(0) { |i| v = i }
376
+ v.should == 0
377
+ end
378
+ it ":char (127) argument" do
379
+ v = 0xdeadbeef
380
+ LibTest.testCallbackCrV(127) { |i| v = i }
381
+ v.should == 127
382
+ end
383
+ it ":char (-128) argument" do
384
+ v = 0xdeadbeef
385
+ LibTest.testCallbackCrV(-128) { |i| v = i }
386
+ v.should == -128
387
+ end
388
+ it ":char (-1) argument" do
389
+ v = 0xdeadbeef
390
+ LibTest.testCallbackCrV(-1) { |i| v = i }
391
+ v.should == -1
392
+ end
393
+ it ":uchar (0) argument" do
394
+ v = 0xdeadbeef
395
+ LibTest.testCallbackU8rV(0) { |i| v = i }
396
+ v.should == 0
397
+ end
398
+ it ":uchar (127) argument" do
399
+ v = 0xdeadbeef
400
+ LibTest.testCallbackU8rV(127) { |i| v = i }
401
+ v.should == 127
402
+ end
403
+ it ":uchar (128) argument" do
404
+ v = 0xdeadbeef
405
+ LibTest.testCallbackU8rV(128) { |i| v = i }
406
+ v.should == 128
407
+ end
408
+ it ":uchar (255) argument" do
409
+ v = 0xdeadbeef
410
+ LibTest.testCallbackU8rV(255) { |i| v = i }
411
+ v.should == 255
412
+ end
413
+
414
+ it ":short (0) argument" do
415
+ v = 0xdeadbeef
416
+ LibTest.testCallbackSrV(0) { |i| v = i }
417
+ v.should == 0
418
+ end
419
+ it ":short (0x7fff) argument" do
420
+ v = 0xdeadbeef
421
+ LibTest.testCallbackSrV(0x7fff) { |i| v = i }
422
+ v.should == 0x7fff
423
+ end
424
+ it ":short (-0x8000) argument" do
425
+ v = 0xdeadbeef
426
+ LibTest.testCallbackSrV(-0x8000) { |i| v = i }
427
+ v.should == -0x8000
428
+ end
429
+ it ":short (-1) argument" do
430
+ v = 0xdeadbeef
431
+ LibTest.testCallbackSrV(-1) { |i| v = i }
432
+ v.should == -1
433
+ end
434
+ it ":ushort (0) argument" do
435
+ v = 0xdeadbeef
436
+ LibTest.testCallbackU16rV(0) { |i| v = i }
437
+ v.should == 0
438
+ end
439
+ it ":ushort (0x7fff) argument" do
440
+ v = 0xdeadbeef
441
+ LibTest.testCallbackU16rV(0x7fff) { |i| v = i }
442
+ v.should == 0x7fff
443
+ end
444
+ it ":ushort (0x8000) argument" do
445
+ v = 0xdeadbeef
446
+ LibTest.testCallbackU16rV(0x8000) { |i| v = i }
447
+ v.should == 0x8000
448
+ end
449
+ it ":ushort (0xffff) argument" do
450
+ v = 0xdeadbeef
451
+ LibTest.testCallbackU16rV(0xffff) { |i| v = i }
452
+ v.should == 0xffff
453
+ end
454
+ it ":bool (true) argument" do
455
+ v = false
456
+ LibTest.testCallbackZrV(true) { |i| v = i }
457
+ v.should be_true
458
+ end
459
+ it ":int (0) argument" do
460
+ v = 0xdeadbeef
461
+ LibTest.testCallbackIrV(0) { |i| v = i }
462
+ v.should == 0
463
+ end
464
+ it ":int (0x7fffffff) argument" do
465
+ v = 0xdeadbeef
466
+ LibTest.testCallbackIrV(0x7fffffff) { |i| v = i }
467
+ v.should == 0x7fffffff
468
+ end
469
+ it ":int (-0x80000000) argument" do
470
+ v = 0xdeadbeef
471
+ LibTest.testCallbackIrV(-0x80000000) { |i| v = i }
472
+ v.should == -0x80000000
473
+ end
474
+ it ":int (-1) argument" do
475
+ v = 0xdeadbeef
476
+ LibTest.testCallbackIrV(-1) { |i| v = i }
477
+ v.should == -1
478
+ end
479
+ it ":uint (0) argument" do
480
+ v = 0xdeadbeef
481
+ LibTest.testCallbackU32rV(0) { |i| v = i }
482
+ v.should == 0
483
+ end
484
+ it ":uint (0x7fffffff) argument" do
485
+ v = 0xdeadbeef
486
+ LibTest.testCallbackU32rV(0x7fffffff) { |i| v = i }
487
+ v.should == 0x7fffffff
488
+ end
489
+ it ":uint (0x80000000) argument" do
490
+ v = 0xdeadbeef
491
+ LibTest.testCallbackU32rV(0x80000000) { |i| v = i }
492
+ v.should == 0x80000000
493
+ end
494
+ it ":uint (0xffffffff) argument" do
495
+ v = 0xdeadbeef
496
+ LibTest.testCallbackU32rV(0xffffffff) { |i| v = i }
497
+ v.should == 0xffffffff
498
+ end
499
+ it ":long (0) argument" do
500
+ v = 0xdeadbeef
501
+ LibTest.testCallbackLrV(0) { |i| v = i }
502
+ v.should == 0
503
+ end
504
+ it ":long (0x7fffffff) argument" do
505
+ v = 0xdeadbeef
506
+ LibTest.testCallbackLrV(0x7fffffff) { |i| v = i }
507
+ v.should == 0x7fffffff
508
+ end
509
+ it ":long (-0x80000000) argument" do
510
+ v = 0xdeadbeef
511
+ LibTest.testCallbackLrV(-0x80000000) { |i| v = i }
512
+ v.should == -0x80000000
513
+ end
514
+ it ":long (-1) argument" do
515
+ v = 0xdeadbeef
516
+ LibTest.testCallbackLrV(-1) { |i| v = i }
517
+ v.should == -1
518
+ end
519
+ it ":ulong (0) argument" do
520
+ v = 0xdeadbeef
521
+ LibTest.testCallbackULrV(0) { |i| v = i }
522
+ v.should == 0
523
+ end
524
+ it ":ulong (0x7fffffff) argument" do
525
+ v = 0xdeadbeef
526
+ LibTest.testCallbackULrV(0x7fffffff) { |i| v = i }
527
+ v.should == 0x7fffffff
528
+ end
529
+ it ":ulong (0x80000000) argument" do
530
+ v = 0xdeadbeef
531
+ LibTest.testCallbackULrV(0x80000000) { |i| v = i }
532
+ v.should == 0x80000000
533
+ end
534
+ it ":ulong (0xffffffff) argument" do
535
+ v = 0xdeadbeef
536
+ LibTest.testCallbackULrV(0xffffffff) { |i| v = i }
537
+ v.should == 0xffffffff
538
+ end
539
+ it ":long_long (0) argument" do
540
+ v = 0xdeadbeef
541
+ LibTest.testCallbackLLrV(0) { |i| v = i }
542
+ v.should == 0
543
+ end
544
+ it ":long_long (0x7fffffffffffffff) argument" do
545
+ v = 0xdeadbeef
546
+ LibTest.testCallbackLLrV(0x7fffffffffffffff) { |i| v = i }
547
+ v.should == 0x7fffffffffffffff
548
+ end
549
+ it ":long_long (-0x8000000000000000) argument" do
550
+ v = 0xdeadbeef
551
+ LibTest.testCallbackLLrV(-0x8000000000000000) { |i| v = i }
552
+ v.should == -0x8000000000000000
553
+ end
554
+ it ":long_long (-1) argument" do
555
+ v = 0xdeadbeef
556
+ LibTest.testCallbackLLrV(-1) { |i| v = i }
557
+ v.should == -1
558
+ end
559
+
560
+ end # unless true