ffi 0.1.0

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 (279) hide show
  1. data/LICENSE +51 -0
  2. data/README +0 -0
  3. data/Rakefile +90 -0
  4. data/ext/AbstractMemory.c +254 -0
  5. data/ext/AbstractMemory.h +36 -0
  6. data/ext/Buffer.c +94 -0
  7. data/ext/Callback.c +240 -0
  8. data/ext/Callback.h +47 -0
  9. data/ext/Invoker.c +269 -0
  10. data/ext/MemoryPointer.c +164 -0
  11. data/ext/MemoryPointer.h +25 -0
  12. data/ext/Platform.c +41 -0
  13. data/ext/Platform.h +23 -0
  14. data/ext/Types.c +65 -0
  15. data/ext/Types.h +51 -0
  16. data/ext/extconf.rb +13 -0
  17. data/ext/ffi.c +54 -0
  18. data/ext/ffi.mk +24 -0
  19. data/ext/libffi.darwin.mk +44 -0
  20. data/ext/libffi.mk +10 -0
  21. data/ext/libffi/ChangeLog +3243 -0
  22. data/ext/libffi/ChangeLog.libffi +347 -0
  23. data/ext/libffi/ChangeLog.libgcj +40 -0
  24. data/ext/libffi/ChangeLog.v1 +764 -0
  25. data/ext/libffi/LICENSE +21 -0
  26. data/ext/libffi/Makefile.am +177 -0
  27. data/ext/libffi/Makefile.in +1640 -0
  28. data/ext/libffi/README +328 -0
  29. data/ext/libffi/TODO +1 -0
  30. data/ext/libffi/acinclude.m4 +92 -0
  31. data/ext/libffi/aclocal.m4 +7516 -0
  32. data/ext/libffi/compile +142 -0
  33. data/ext/libffi/config.guess +1516 -0
  34. data/ext/libffi/config.sub +1626 -0
  35. data/ext/libffi/configure +24414 -0
  36. data/ext/libffi/configure.ac +365 -0
  37. data/ext/libffi/configure.host +11 -0
  38. data/ext/libffi/depcomp +584 -0
  39. data/ext/libffi/doc/libffi.info +533 -0
  40. data/ext/libffi/doc/libffi.texi +541 -0
  41. data/ext/libffi/doc/stamp-vti +4 -0
  42. data/ext/libffi/doc/version.texi +4 -0
  43. data/ext/libffi/fficonfig.h.in +160 -0
  44. data/ext/libffi/include/Makefile.am +9 -0
  45. data/ext/libffi/include/Makefile.in +422 -0
  46. data/ext/libffi/include/ffi.h.in +393 -0
  47. data/ext/libffi/include/ffi_common.h +98 -0
  48. data/ext/libffi/install-sh +323 -0
  49. data/ext/libffi/libffi.pc.in +10 -0
  50. data/ext/libffi/libtool-version +29 -0
  51. data/ext/libffi/ltcf-c.sh +861 -0
  52. data/ext/libffi/ltcf-cxx.sh +1069 -0
  53. data/ext/libffi/ltcf-gcj.sh +700 -0
  54. data/ext/libffi/ltconfig +2862 -0
  55. data/ext/libffi/ltmain.sh +6930 -0
  56. data/ext/libffi/man/Makefile.am +8 -0
  57. data/ext/libffi/man/Makefile.in +395 -0
  58. data/ext/libffi/man/ffi.3 +31 -0
  59. data/ext/libffi/man/ffi_call.3 +103 -0
  60. data/ext/libffi/man/ffi_prep_cif.3 +66 -0
  61. data/ext/libffi/mdate-sh +201 -0
  62. data/ext/libffi/missing +353 -0
  63. data/ext/libffi/mkinstalldirs +158 -0
  64. data/ext/libffi/src/alpha/ffi.c +284 -0
  65. data/ext/libffi/src/alpha/ffitarget.h +48 -0
  66. data/ext/libffi/src/alpha/osf.S +366 -0
  67. data/ext/libffi/src/arm/ffi.c +309 -0
  68. data/ext/libffi/src/arm/ffitarget.h +49 -0
  69. data/ext/libffi/src/arm/sysv.S +299 -0
  70. data/ext/libffi/src/closures.c +596 -0
  71. data/ext/libffi/src/cris/ffi.c +383 -0
  72. data/ext/libffi/src/cris/ffitarget.h +51 -0
  73. data/ext/libffi/src/cris/sysv.S +215 -0
  74. data/ext/libffi/src/debug.c +59 -0
  75. data/ext/libffi/src/dlmalloc.c +5099 -0
  76. data/ext/libffi/src/frv/eabi.S +128 -0
  77. data/ext/libffi/src/frv/ffi.c +292 -0
  78. data/ext/libffi/src/frv/ffitarget.h +61 -0
  79. data/ext/libffi/src/ia64/ffi.c +580 -0
  80. data/ext/libffi/src/ia64/ffitarget.h +50 -0
  81. data/ext/libffi/src/ia64/ia64_flags.h +40 -0
  82. data/ext/libffi/src/ia64/unix.S +560 -0
  83. data/ext/libffi/src/java_raw_api.c +359 -0
  84. data/ext/libffi/src/m32r/ffi.c +232 -0
  85. data/ext/libffi/src/m32r/ffitarget.h +48 -0
  86. data/ext/libffi/src/m32r/sysv.S +121 -0
  87. data/ext/libffi/src/m68k/ffi.c +278 -0
  88. data/ext/libffi/src/m68k/ffitarget.h +49 -0
  89. data/ext/libffi/src/m68k/sysv.S +234 -0
  90. data/ext/libffi/src/mips/ffi.c +926 -0
  91. data/ext/libffi/src/mips/ffitarget.h +202 -0
  92. data/ext/libffi/src/mips/n32.S +534 -0
  93. data/ext/libffi/src/mips/o32.S +381 -0
  94. data/ext/libffi/src/pa/ffi.c +709 -0
  95. data/ext/libffi/src/pa/ffitarget.h +77 -0
  96. data/ext/libffi/src/pa/hpux32.S +368 -0
  97. data/ext/libffi/src/pa/linux.S +357 -0
  98. data/ext/libffi/src/powerpc/aix.S +225 -0
  99. data/ext/libffi/src/powerpc/aix_closure.S +247 -0
  100. data/ext/libffi/src/powerpc/asm.h +125 -0
  101. data/ext/libffi/src/powerpc/darwin.S +245 -0
  102. data/ext/libffi/src/powerpc/darwin_closure.S +317 -0
  103. data/ext/libffi/src/powerpc/ffi.c +1429 -0
  104. data/ext/libffi/src/powerpc/ffi_darwin.c +800 -0
  105. data/ext/libffi/src/powerpc/ffitarget.h +118 -0
  106. data/ext/libffi/src/powerpc/linux64.S +187 -0
  107. data/ext/libffi/src/powerpc/linux64_closure.S +236 -0
  108. data/ext/libffi/src/powerpc/ppc_closure.S +327 -0
  109. data/ext/libffi/src/powerpc/sysv.S +230 -0
  110. data/ext/libffi/src/prep_cif.c +174 -0
  111. data/ext/libffi/src/raw_api.c +254 -0
  112. data/ext/libffi/src/s390/ffi.c +780 -0
  113. data/ext/libffi/src/s390/ffitarget.h +60 -0
  114. data/ext/libffi/src/s390/sysv.S +434 -0
  115. data/ext/libffi/src/sh/ffi.c +716 -0
  116. data/ext/libffi/src/sh/ffitarget.h +49 -0
  117. data/ext/libffi/src/sh/sysv.S +850 -0
  118. data/ext/libffi/src/sh64/ffi.c +453 -0
  119. data/ext/libffi/src/sh64/ffitarget.h +53 -0
  120. data/ext/libffi/src/sh64/sysv.S +530 -0
  121. data/ext/libffi/src/sparc/ffi.c +610 -0
  122. data/ext/libffi/src/sparc/ffitarget.h +66 -0
  123. data/ext/libffi/src/sparc/v8.S +272 -0
  124. data/ext/libffi/src/sparc/v9.S +307 -0
  125. data/ext/libffi/src/types.c +77 -0
  126. data/ext/libffi/src/x86/darwin.S +443 -0
  127. data/ext/libffi/src/x86/darwin64.S +416 -0
  128. data/ext/libffi/src/x86/ffi.c +475 -0
  129. data/ext/libffi/src/x86/ffi64.c +572 -0
  130. data/ext/libffi/src/x86/ffitarget.h +90 -0
  131. data/ext/libffi/src/x86/freebsd.S +458 -0
  132. data/ext/libffi/src/x86/sysv.S +437 -0
  133. data/ext/libffi/src/x86/unix64.S +418 -0
  134. data/ext/libffi/src/x86/win32.S +391 -0
  135. data/ext/libffi/testsuite/Makefile.am +71 -0
  136. data/ext/libffi/testsuite/Makefile.in +447 -0
  137. data/ext/libffi/testsuite/config/default.exp +1 -0
  138. data/ext/libffi/testsuite/lib/libffi-dg.exp +289 -0
  139. data/ext/libffi/testsuite/lib/target-libpath.exp +263 -0
  140. data/ext/libffi/testsuite/lib/wrapper.exp +45 -0
  141. data/ext/libffi/testsuite/libffi.call/call.exp +36 -0
  142. data/ext/libffi/testsuite/libffi.call/closure_fn0.c +97 -0
  143. data/ext/libffi/testsuite/libffi.call/closure_fn1.c +89 -0
  144. data/ext/libffi/testsuite/libffi.call/closure_fn2.c +89 -0
  145. data/ext/libffi/testsuite/libffi.call/closure_fn3.c +90 -0
  146. data/ext/libffi/testsuite/libffi.call/closure_fn4.c +97 -0
  147. data/ext/libffi/testsuite/libffi.call/closure_fn5.c +99 -0
  148. data/ext/libffi/testsuite/libffi.call/closure_fn6.c +98 -0
  149. data/ext/libffi/testsuite/libffi.call/closure_stdcall.c +72 -0
  150. data/ext/libffi/testsuite/libffi.call/cls_12byte.c +102 -0
  151. data/ext/libffi/testsuite/libffi.call/cls_16byte.c +103 -0
  152. data/ext/libffi/testsuite/libffi.call/cls_18byte.c +104 -0
  153. data/ext/libffi/testsuite/libffi.call/cls_19byte.c +110 -0
  154. data/ext/libffi/testsuite/libffi.call/cls_1_1byte.c +97 -0
  155. data/ext/libffi/testsuite/libffi.call/cls_20byte.c +99 -0
  156. data/ext/libffi/testsuite/libffi.call/cls_20byte1.c +101 -0
  157. data/ext/libffi/testsuite/libffi.call/cls_24byte.c +121 -0
  158. data/ext/libffi/testsuite/libffi.call/cls_2byte.c +98 -0
  159. data/ext/libffi/testsuite/libffi.call/cls_3_1byte.c +103 -0
  160. data/ext/libffi/testsuite/libffi.call/cls_3byte1.c +98 -0
  161. data/ext/libffi/testsuite/libffi.call/cls_3byte2.c +98 -0
  162. data/ext/libffi/testsuite/libffi.call/cls_4_1byte.c +106 -0
  163. data/ext/libffi/testsuite/libffi.call/cls_4byte.c +98 -0
  164. data/ext/libffi/testsuite/libffi.call/cls_5_1_byte.c +117 -0
  165. data/ext/libffi/testsuite/libffi.call/cls_5byte.c +106 -0
  166. data/ext/libffi/testsuite/libffi.call/cls_64byte.c +132 -0
  167. data/ext/libffi/testsuite/libffi.call/cls_6_1_byte.c +121 -0
  168. data/ext/libffi/testsuite/libffi.call/cls_6byte.c +107 -0
  169. data/ext/libffi/testsuite/libffi.call/cls_7_1_byte.c +125 -0
  170. data/ext/libffi/testsuite/libffi.call/cls_7byte.c +105 -0
  171. data/ext/libffi/testsuite/libffi.call/cls_8byte.c +96 -0
  172. data/ext/libffi/testsuite/libffi.call/cls_9byte1.c +98 -0
  173. data/ext/libffi/testsuite/libffi.call/cls_9byte2.c +99 -0
  174. data/ext/libffi/testsuite/libffi.call/cls_align_double.c +101 -0
  175. data/ext/libffi/testsuite/libffi.call/cls_align_float.c +99 -0
  176. data/ext/libffi/testsuite/libffi.call/cls_align_longdouble.c +100 -0
  177. data/ext/libffi/testsuite/libffi.call/cls_align_pointer.c +101 -0
  178. data/ext/libffi/testsuite/libffi.call/cls_align_sint16.c +99 -0
  179. data/ext/libffi/testsuite/libffi.call/cls_align_sint32.c +99 -0
  180. data/ext/libffi/testsuite/libffi.call/cls_align_sint64.c +99 -0
  181. data/ext/libffi/testsuite/libffi.call/cls_align_uint16.c +99 -0
  182. data/ext/libffi/testsuite/libffi.call/cls_align_uint32.c +99 -0
  183. data/ext/libffi/testsuite/libffi.call/cls_align_uint64.c +100 -0
  184. data/ext/libffi/testsuite/libffi.call/cls_double.c +51 -0
  185. data/ext/libffi/testsuite/libffi.call/cls_float.c +51 -0
  186. data/ext/libffi/testsuite/libffi.call/cls_multi_schar.c +82 -0
  187. data/ext/libffi/testsuite/libffi.call/cls_multi_sshort.c +82 -0
  188. data/ext/libffi/testsuite/libffi.call/cls_multi_sshortchar.c +94 -0
  189. data/ext/libffi/testsuite/libffi.call/cls_multi_uchar.c +99 -0
  190. data/ext/libffi/testsuite/libffi.call/cls_multi_ushort.c +82 -0
  191. data/ext/libffi/testsuite/libffi.call/cls_multi_ushortchar.c +94 -0
  192. data/ext/libffi/testsuite/libffi.call/cls_schar.c +52 -0
  193. data/ext/libffi/testsuite/libffi.call/cls_sint.c +50 -0
  194. data/ext/libffi/testsuite/libffi.call/cls_sshort.c +50 -0
  195. data/ext/libffi/testsuite/libffi.call/cls_uchar.c +50 -0
  196. data/ext/libffi/testsuite/libffi.call/cls_uint.c +51 -0
  197. data/ext/libffi/testsuite/libffi.call/cls_ulonglong.c +54 -0
  198. data/ext/libffi/testsuite/libffi.call/cls_ushort.c +51 -0
  199. data/ext/libffi/testsuite/libffi.call/ffitest.h +86 -0
  200. data/ext/libffi/testsuite/libffi.call/float.c +59 -0
  201. data/ext/libffi/testsuite/libffi.call/float1.c +58 -0
  202. data/ext/libffi/testsuite/libffi.call/float2.c +57 -0
  203. data/ext/libffi/testsuite/libffi.call/float3.c +72 -0
  204. data/ext/libffi/testsuite/libffi.call/float4.c +62 -0
  205. data/ext/libffi/testsuite/libffi.call/many.c +69 -0
  206. data/ext/libffi/testsuite/libffi.call/many_win32.c +63 -0
  207. data/ext/libffi/testsuite/libffi.call/negint.c +53 -0
  208. data/ext/libffi/testsuite/libffi.call/nested_struct.c +160 -0
  209. data/ext/libffi/testsuite/libffi.call/nested_struct1.c +169 -0
  210. data/ext/libffi/testsuite/libffi.call/nested_struct10.c +141 -0
  211. data/ext/libffi/testsuite/libffi.call/nested_struct2.c +118 -0
  212. data/ext/libffi/testsuite/libffi.call/nested_struct3.c +119 -0
  213. data/ext/libffi/testsuite/libffi.call/nested_struct4.c +119 -0
  214. data/ext/libffi/testsuite/libffi.call/nested_struct5.c +120 -0
  215. data/ext/libffi/testsuite/libffi.call/nested_struct6.c +139 -0
  216. data/ext/libffi/testsuite/libffi.call/nested_struct7.c +119 -0
  217. data/ext/libffi/testsuite/libffi.call/nested_struct8.c +139 -0
  218. data/ext/libffi/testsuite/libffi.call/nested_struct9.c +139 -0
  219. data/ext/libffi/testsuite/libffi.call/problem1.c +98 -0
  220. data/ext/libffi/testsuite/libffi.call/promotion.c +59 -0
  221. data/ext/libffi/testsuite/libffi.call/pyobjc-tc.c +114 -0
  222. data/ext/libffi/testsuite/libffi.call/return_dbl.c +35 -0
  223. data/ext/libffi/testsuite/libffi.call/return_dbl1.c +43 -0
  224. data/ext/libffi/testsuite/libffi.call/return_dbl2.c +42 -0
  225. data/ext/libffi/testsuite/libffi.call/return_fl.c +35 -0
  226. data/ext/libffi/testsuite/libffi.call/return_fl1.c +36 -0
  227. data/ext/libffi/testsuite/libffi.call/return_fl2.c +49 -0
  228. data/ext/libffi/testsuite/libffi.call/return_fl3.c +42 -0
  229. data/ext/libffi/testsuite/libffi.call/return_ldl.c +34 -0
  230. data/ext/libffi/testsuite/libffi.call/return_ll.c +41 -0
  231. data/ext/libffi/testsuite/libffi.call/return_ll1.c +42 -0
  232. data/ext/libffi/testsuite/libffi.call/return_sc.c +36 -0
  233. data/ext/libffi/testsuite/libffi.call/return_sl.c +38 -0
  234. data/ext/libffi/testsuite/libffi.call/return_uc.c +38 -0
  235. data/ext/libffi/testsuite/libffi.call/return_ul.c +38 -0
  236. data/ext/libffi/testsuite/libffi.call/strlen.c +44 -0
  237. data/ext/libffi/testsuite/libffi.call/strlen_win32.c +44 -0
  238. data/ext/libffi/testsuite/libffi.call/struct1.c +65 -0
  239. data/ext/libffi/testsuite/libffi.call/struct2.c +67 -0
  240. data/ext/libffi/testsuite/libffi.call/struct3.c +59 -0
  241. data/ext/libffi/testsuite/libffi.call/struct4.c +63 -0
  242. data/ext/libffi/testsuite/libffi.call/struct5.c +65 -0
  243. data/ext/libffi/testsuite/libffi.call/struct6.c +64 -0
  244. data/ext/libffi/testsuite/libffi.call/struct7.c +74 -0
  245. data/ext/libffi/testsuite/libffi.call/struct8.c +80 -0
  246. data/ext/libffi/testsuite/libffi.call/struct9.c +67 -0
  247. data/ext/libffi/testsuite/libffi.special/ffitestcxx.h +86 -0
  248. data/ext/libffi/testsuite/libffi.special/special.exp +38 -0
  249. data/ext/libffi/testsuite/libffi.special/unwindtest.cc +123 -0
  250. data/ext/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc +53 -0
  251. data/ext/libffi/texinfo.tex +7482 -0
  252. data/ext/rbffi.h +32 -0
  253. data/lib/ffi.rb +2 -0
  254. data/lib/ffi/buffer.rb +25 -0
  255. data/lib/ffi/callback.rb +10 -0
  256. data/lib/ffi/ffi.rb +259 -0
  257. data/lib/ffi/memorypointer.rb +169 -0
  258. data/lib/ffi/platform.rb +75 -0
  259. data/lib/ffi/struct.rb +263 -0
  260. data/nbproject/Makefile-Default.mk +54 -0
  261. data/nbproject/Makefile-impl.mk +123 -0
  262. data/nbproject/configurations.xml +169 -0
  263. data/nbproject/private/configurations.xml +22 -0
  264. data/nbproject/private/private.xml +7 -0
  265. data/nbproject/project.properties +0 -0
  266. data/nbproject/project.xml +11 -0
  267. data/samples/getlogin.rb +7 -0
  268. data/samples/getpid.rb +7 -0
  269. data/samples/gettimeofday.rb +13 -0
  270. data/samples/hello.rb +7 -0
  271. data/samples/qsort.rb +20 -0
  272. data/specs/buffer_spec.rb +141 -0
  273. data/specs/callback_spec.rb +31 -0
  274. data/specs/rbx/attach_function_spec.rb +26 -0
  275. data/specs/rbx/memory_pointer_spec.rb +108 -0
  276. data/specs/rbx/spec_helper.rb +1 -0
  277. data/specs/rbx/struct_spec.rb +13 -0
  278. data/specs/spec_helper.rb +2 -0
  279. metadata +359 -0
@@ -0,0 +1,26 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
2
+
3
+ class Timeval < FFI::Struct
4
+ layout :tv_sec, :ulong, 0, :tv_usec, :ulong, 4
5
+ end
6
+
7
+ module LibC
8
+ extend FFI::Library
9
+
10
+ attach_function :gettimeofday, [:pointer, :pointer], :int
11
+ end
12
+
13
+ describe FFI::Library, "#attach_function" do
14
+ it "correctly returns a value for gettimeofday" do
15
+ t = Timeval.new
16
+ time = LibC.gettimeofday(t.pointer, nil)
17
+ time.should be_kind_of(Integer)
18
+ end
19
+
20
+ it "correctly populates a struct for gettimeofday" do
21
+ t = Timeval.new
22
+ time = LibC.gettimeofday(t.pointer, nil)
23
+ t[:tv_sec].should be_kind_of(Numeric)
24
+ t[:tv_usec].should be_kind_of(Numeric)
25
+ end
26
+ end
@@ -0,0 +1,108 @@
1
+ require "rubygems"
2
+ require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
3
+
4
+ module CTest
5
+ extend FFI::Library
6
+
7
+ attach_function :strcat, [:pointer, :pointer], :pointer
8
+ end
9
+
10
+ describe MemoryPointer do
11
+ it "makes a pointer from a string" do
12
+ m = MemoryPointer.from_string("FFI is Awesome")
13
+ m.type_size.should == 15
14
+ end
15
+
16
+ it "reads back a string" do
17
+ m = MemoryPointer.from_string("FFI is Awesome")
18
+ m.read_string.should == "FFI is Awesome"
19
+ end
20
+
21
+ it "reads back a string from an Array of ints" do
22
+ m = MemoryPointer.new(:int, 4)
23
+ m.write_array_of_int([541673030, 1092645737, 1869833591, 538994029])
24
+ m.read_string(16).should == "FFI is Awesome "
25
+ end
26
+
27
+ it "makes a pointer for a certain number of bytes" do
28
+ m = MemoryPointer.new(8)
29
+ m.write_array_of_int([1,2])
30
+ m.read_array_of_int(2).should == [1,2]
31
+ end
32
+
33
+ it "allows access to an element of the pointer (as an array)" do
34
+ m = MemoryPointer.new(:int, 2)
35
+ m.write_array_of_int([1,2])
36
+ m[0].read_int.should == 1
37
+ m[1].read_int.should == 2
38
+ end
39
+
40
+ it "allows writing as an int" do
41
+ m = MemoryPointer.new(:int)
42
+ m.write_int(1)
43
+ m.read_int.should == 1
44
+ end
45
+
46
+ it "allows writing as a long" do
47
+ m = MemoryPointer.new(:long)
48
+ m.write_long(10)
49
+ m.read_long.should == 10
50
+ end
51
+
52
+ it "raises an error if you try putting a long into a pointer of size 1" do
53
+ m = MemoryPointer.new(1)
54
+ lambda { m.write_long(10) }.should raise_error
55
+ end
56
+
57
+ it "raises an error if you try putting an int into a pointer of size 1" do
58
+ m = MemoryPointer.new(1)
59
+ lambda { m.write_int(10) }.should raise_error
60
+ end
61
+ it "does not raise IndexError for opaque pointers" do
62
+ m = MemoryPointer.new(8)
63
+ p2 = MemoryPointer.new(1024)
64
+ m.write_long(p2.address)
65
+ p = m.read_pointer
66
+ lambda { p.write_int(10) }.should_not raise_error
67
+ end
68
+
69
+ it "makes a pointer for a certain type" do
70
+ m = MemoryPointer.new(:int)
71
+ m.write_int(10)
72
+ m.read_int.should == 10
73
+ end
74
+
75
+ it "makes a memory pointer for a number of a certain type" do
76
+ m = MemoryPointer.new(:int, 2)
77
+ m.write_array_of_int([1,2])
78
+ m.read_array_of_int(2).should == [1,2]
79
+ end
80
+
81
+ it "makes a pointer for an object responding to #size" do
82
+ m = MemoryPointer.new(Struct.new(:size).new(8))
83
+ m.write_array_of_int([1,2])
84
+ m.read_array_of_int(2).should == [1,2]
85
+ end
86
+
87
+ it "makes a pointer for a number of an object responding to #size" do
88
+ m = MemoryPointer.new(Struct.new(:size).new(4), 2)
89
+ m.write_array_of_int([1,2])
90
+ m.read_array_of_int(2).should == [1,2]
91
+ end
92
+ it "MemoryPointer#address returns correct value" do
93
+ m = MemoryPointer.new(:long_long)
94
+ magic = 0x12345678
95
+ m.write_long(magic)
96
+ m.read_pointer.address.should == magic
97
+ end
98
+ it "MemoryPointer#null? returns true for zero value" do
99
+ m = MemoryPointer.new(:long_long)
100
+ m.write_long(0)
101
+ m.read_pointer.null?.should == true
102
+ end
103
+ it "MemoryPointer#null? returns false for non-zero value" do
104
+ m = MemoryPointer.new(:long_long)
105
+ m.write_long(0x12345678)
106
+ m.read_pointer.null?.should == false
107
+ end
108
+ end
@@ -0,0 +1 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "spec_helper"))
@@ -0,0 +1,13 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
2
+
3
+ class Timeval < FFI::Struct
4
+ layout :tv_sec, :ulong, 0, :tv_usec, :ulong, 4
5
+ end
6
+
7
+ describe FFI::Struct do
8
+ it "allows setting fields" do
9
+ t = Timeval.new
10
+ t[:tv_sec] = 12
11
+ t[:tv_sec].should == 12
12
+ end
13
+ end
@@ -0,0 +1,2 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib") if ENV["MRI_FFI"]
2
+ require "ffi"
metadata ADDED
@@ -0,0 +1,359 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ffi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Wayne Meissner
8
+ autorequire: ffi
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-10-30 00:00:00 +10:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: A Ruby foreign function interface (compatible with Rubinius and JRuby FFI)
17
+ email: wmeissner@gmail.com
18
+ executables: []
19
+
20
+ extensions:
21
+ - ext/extconf.rb
22
+ extra_rdoc_files:
23
+ - README
24
+ - LICENSE
25
+ files:
26
+ - LICENSE
27
+ - README
28
+ - Rakefile
29
+ - ext/AbstractMemory.c
30
+ - ext/AbstractMemory.h
31
+ - ext/Buffer.c
32
+ - ext/Callback.c
33
+ - ext/Callback.h
34
+ - ext/extconf.rb
35
+ - ext/ffi.c
36
+ - ext/ffi.mk
37
+ - ext/Invoker.c
38
+ - ext/libffi
39
+ - ext/libffi/acinclude.m4
40
+ - ext/libffi/aclocal.m4
41
+ - ext/libffi/ChangeLog
42
+ - ext/libffi/ChangeLog.libffi
43
+ - ext/libffi/ChangeLog.libgcj
44
+ - ext/libffi/ChangeLog.v1
45
+ - ext/libffi/compile
46
+ - ext/libffi/config.guess
47
+ - ext/libffi/config.sub
48
+ - ext/libffi/configure
49
+ - ext/libffi/configure.ac
50
+ - ext/libffi/configure.host
51
+ - ext/libffi/depcomp
52
+ - ext/libffi/doc
53
+ - ext/libffi/doc/libffi.info
54
+ - ext/libffi/doc/libffi.texi
55
+ - ext/libffi/doc/stamp-vti
56
+ - ext/libffi/doc/version.texi
57
+ - ext/libffi/fficonfig.h.in
58
+ - ext/libffi/include
59
+ - ext/libffi/include/ffi.h.in
60
+ - ext/libffi/include/ffi_common.h
61
+ - ext/libffi/include/Makefile.am
62
+ - ext/libffi/include/Makefile.in
63
+ - ext/libffi/install-sh
64
+ - ext/libffi/libffi.pc.in
65
+ - ext/libffi/libtool-version
66
+ - ext/libffi/LICENSE
67
+ - ext/libffi/ltcf-c.sh
68
+ - ext/libffi/ltcf-cxx.sh
69
+ - ext/libffi/ltcf-gcj.sh
70
+ - ext/libffi/ltconfig
71
+ - ext/libffi/ltmain.sh
72
+ - ext/libffi/Makefile.am
73
+ - ext/libffi/Makefile.in
74
+ - ext/libffi/man
75
+ - ext/libffi/man/ffi.3
76
+ - ext/libffi/man/ffi_call.3
77
+ - ext/libffi/man/ffi_prep_cif.3
78
+ - ext/libffi/man/Makefile.am
79
+ - ext/libffi/man/Makefile.in
80
+ - ext/libffi/mdate-sh
81
+ - ext/libffi/missing
82
+ - ext/libffi/mkinstalldirs
83
+ - ext/libffi/README
84
+ - ext/libffi/src
85
+ - ext/libffi/src/alpha
86
+ - ext/libffi/src/alpha/ffi.c
87
+ - ext/libffi/src/alpha/ffitarget.h
88
+ - ext/libffi/src/alpha/osf.S
89
+ - ext/libffi/src/arm
90
+ - ext/libffi/src/arm/ffi.c
91
+ - ext/libffi/src/arm/ffitarget.h
92
+ - ext/libffi/src/arm/sysv.S
93
+ - ext/libffi/src/closures.c
94
+ - ext/libffi/src/cris
95
+ - ext/libffi/src/cris/ffi.c
96
+ - ext/libffi/src/cris/ffitarget.h
97
+ - ext/libffi/src/cris/sysv.S
98
+ - ext/libffi/src/debug.c
99
+ - ext/libffi/src/dlmalloc.c
100
+ - ext/libffi/src/frv
101
+ - ext/libffi/src/frv/eabi.S
102
+ - ext/libffi/src/frv/ffi.c
103
+ - ext/libffi/src/frv/ffitarget.h
104
+ - ext/libffi/src/ia64
105
+ - ext/libffi/src/ia64/ffi.c
106
+ - ext/libffi/src/ia64/ffitarget.h
107
+ - ext/libffi/src/ia64/ia64_flags.h
108
+ - ext/libffi/src/ia64/unix.S
109
+ - ext/libffi/src/java_raw_api.c
110
+ - ext/libffi/src/m32r
111
+ - ext/libffi/src/m32r/ffi.c
112
+ - ext/libffi/src/m32r/ffitarget.h
113
+ - ext/libffi/src/m32r/sysv.S
114
+ - ext/libffi/src/m68k
115
+ - ext/libffi/src/m68k/ffi.c
116
+ - ext/libffi/src/m68k/ffitarget.h
117
+ - ext/libffi/src/m68k/sysv.S
118
+ - ext/libffi/src/mips
119
+ - ext/libffi/src/mips/ffi.c
120
+ - ext/libffi/src/mips/ffitarget.h
121
+ - ext/libffi/src/mips/n32.S
122
+ - ext/libffi/src/mips/o32.S
123
+ - ext/libffi/src/pa
124
+ - ext/libffi/src/pa/ffi.c
125
+ - ext/libffi/src/pa/ffitarget.h
126
+ - ext/libffi/src/pa/hpux32.S
127
+ - ext/libffi/src/pa/linux.S
128
+ - ext/libffi/src/powerpc
129
+ - ext/libffi/src/powerpc/aix.S
130
+ - ext/libffi/src/powerpc/aix_closure.S
131
+ - ext/libffi/src/powerpc/asm.h
132
+ - ext/libffi/src/powerpc/darwin.S
133
+ - ext/libffi/src/powerpc/darwin_closure.S
134
+ - ext/libffi/src/powerpc/ffi.c
135
+ - ext/libffi/src/powerpc/ffi_darwin.c
136
+ - ext/libffi/src/powerpc/ffitarget.h
137
+ - ext/libffi/src/powerpc/linux64.S
138
+ - ext/libffi/src/powerpc/linux64_closure.S
139
+ - ext/libffi/src/powerpc/ppc_closure.S
140
+ - ext/libffi/src/powerpc/sysv.S
141
+ - ext/libffi/src/prep_cif.c
142
+ - ext/libffi/src/raw_api.c
143
+ - ext/libffi/src/s390
144
+ - ext/libffi/src/s390/ffi.c
145
+ - ext/libffi/src/s390/ffitarget.h
146
+ - ext/libffi/src/s390/sysv.S
147
+ - ext/libffi/src/sh
148
+ - ext/libffi/src/sh/ffi.c
149
+ - ext/libffi/src/sh/ffitarget.h
150
+ - ext/libffi/src/sh/sysv.S
151
+ - ext/libffi/src/sh64
152
+ - ext/libffi/src/sh64/ffi.c
153
+ - ext/libffi/src/sh64/ffitarget.h
154
+ - ext/libffi/src/sh64/sysv.S
155
+ - ext/libffi/src/sparc
156
+ - ext/libffi/src/sparc/ffi.c
157
+ - ext/libffi/src/sparc/ffitarget.h
158
+ - ext/libffi/src/sparc/v8.S
159
+ - ext/libffi/src/sparc/v9.S
160
+ - ext/libffi/src/types.c
161
+ - ext/libffi/src/x86
162
+ - ext/libffi/src/x86/darwin.S
163
+ - ext/libffi/src/x86/darwin64.S
164
+ - ext/libffi/src/x86/ffi.c
165
+ - ext/libffi/src/x86/ffi64.c
166
+ - ext/libffi/src/x86/ffitarget.h
167
+ - ext/libffi/src/x86/freebsd.S
168
+ - ext/libffi/src/x86/sysv.S
169
+ - ext/libffi/src/x86/unix64.S
170
+ - ext/libffi/src/x86/win32.S
171
+ - ext/libffi/testsuite
172
+ - ext/libffi/testsuite/config
173
+ - ext/libffi/testsuite/config/default.exp
174
+ - ext/libffi/testsuite/lib
175
+ - ext/libffi/testsuite/lib/libffi-dg.exp
176
+ - ext/libffi/testsuite/lib/target-libpath.exp
177
+ - ext/libffi/testsuite/lib/wrapper.exp
178
+ - ext/libffi/testsuite/libffi.call
179
+ - ext/libffi/testsuite/libffi.call/call.exp
180
+ - ext/libffi/testsuite/libffi.call/closure_fn0.c
181
+ - ext/libffi/testsuite/libffi.call/closure_fn1.c
182
+ - ext/libffi/testsuite/libffi.call/closure_fn2.c
183
+ - ext/libffi/testsuite/libffi.call/closure_fn3.c
184
+ - ext/libffi/testsuite/libffi.call/closure_fn4.c
185
+ - ext/libffi/testsuite/libffi.call/closure_fn5.c
186
+ - ext/libffi/testsuite/libffi.call/closure_fn6.c
187
+ - ext/libffi/testsuite/libffi.call/closure_stdcall.c
188
+ - ext/libffi/testsuite/libffi.call/cls_12byte.c
189
+ - ext/libffi/testsuite/libffi.call/cls_16byte.c
190
+ - ext/libffi/testsuite/libffi.call/cls_18byte.c
191
+ - ext/libffi/testsuite/libffi.call/cls_19byte.c
192
+ - ext/libffi/testsuite/libffi.call/cls_1_1byte.c
193
+ - ext/libffi/testsuite/libffi.call/cls_20byte.c
194
+ - ext/libffi/testsuite/libffi.call/cls_20byte1.c
195
+ - ext/libffi/testsuite/libffi.call/cls_24byte.c
196
+ - ext/libffi/testsuite/libffi.call/cls_2byte.c
197
+ - ext/libffi/testsuite/libffi.call/cls_3_1byte.c
198
+ - ext/libffi/testsuite/libffi.call/cls_3byte1.c
199
+ - ext/libffi/testsuite/libffi.call/cls_3byte2.c
200
+ - ext/libffi/testsuite/libffi.call/cls_4_1byte.c
201
+ - ext/libffi/testsuite/libffi.call/cls_4byte.c
202
+ - ext/libffi/testsuite/libffi.call/cls_5_1_byte.c
203
+ - ext/libffi/testsuite/libffi.call/cls_5byte.c
204
+ - ext/libffi/testsuite/libffi.call/cls_64byte.c
205
+ - ext/libffi/testsuite/libffi.call/cls_6_1_byte.c
206
+ - ext/libffi/testsuite/libffi.call/cls_6byte.c
207
+ - ext/libffi/testsuite/libffi.call/cls_7_1_byte.c
208
+ - ext/libffi/testsuite/libffi.call/cls_7byte.c
209
+ - ext/libffi/testsuite/libffi.call/cls_8byte.c
210
+ - ext/libffi/testsuite/libffi.call/cls_9byte1.c
211
+ - ext/libffi/testsuite/libffi.call/cls_9byte2.c
212
+ - ext/libffi/testsuite/libffi.call/cls_align_double.c
213
+ - ext/libffi/testsuite/libffi.call/cls_align_float.c
214
+ - ext/libffi/testsuite/libffi.call/cls_align_longdouble.c
215
+ - ext/libffi/testsuite/libffi.call/cls_align_pointer.c
216
+ - ext/libffi/testsuite/libffi.call/cls_align_sint16.c
217
+ - ext/libffi/testsuite/libffi.call/cls_align_sint32.c
218
+ - ext/libffi/testsuite/libffi.call/cls_align_sint64.c
219
+ - ext/libffi/testsuite/libffi.call/cls_align_uint16.c
220
+ - ext/libffi/testsuite/libffi.call/cls_align_uint32.c
221
+ - ext/libffi/testsuite/libffi.call/cls_align_uint64.c
222
+ - ext/libffi/testsuite/libffi.call/cls_double.c
223
+ - ext/libffi/testsuite/libffi.call/cls_float.c
224
+ - ext/libffi/testsuite/libffi.call/cls_multi_schar.c
225
+ - ext/libffi/testsuite/libffi.call/cls_multi_sshort.c
226
+ - ext/libffi/testsuite/libffi.call/cls_multi_sshortchar.c
227
+ - ext/libffi/testsuite/libffi.call/cls_multi_uchar.c
228
+ - ext/libffi/testsuite/libffi.call/cls_multi_ushort.c
229
+ - ext/libffi/testsuite/libffi.call/cls_multi_ushortchar.c
230
+ - ext/libffi/testsuite/libffi.call/cls_schar.c
231
+ - ext/libffi/testsuite/libffi.call/cls_sint.c
232
+ - ext/libffi/testsuite/libffi.call/cls_sshort.c
233
+ - ext/libffi/testsuite/libffi.call/cls_uchar.c
234
+ - ext/libffi/testsuite/libffi.call/cls_uint.c
235
+ - ext/libffi/testsuite/libffi.call/cls_ulonglong.c
236
+ - ext/libffi/testsuite/libffi.call/cls_ushort.c
237
+ - ext/libffi/testsuite/libffi.call/ffitest.h
238
+ - ext/libffi/testsuite/libffi.call/float.c
239
+ - ext/libffi/testsuite/libffi.call/float1.c
240
+ - ext/libffi/testsuite/libffi.call/float2.c
241
+ - ext/libffi/testsuite/libffi.call/float3.c
242
+ - ext/libffi/testsuite/libffi.call/float4.c
243
+ - ext/libffi/testsuite/libffi.call/many.c
244
+ - ext/libffi/testsuite/libffi.call/many_win32.c
245
+ - ext/libffi/testsuite/libffi.call/negint.c
246
+ - ext/libffi/testsuite/libffi.call/nested_struct.c
247
+ - ext/libffi/testsuite/libffi.call/nested_struct1.c
248
+ - ext/libffi/testsuite/libffi.call/nested_struct10.c
249
+ - ext/libffi/testsuite/libffi.call/nested_struct2.c
250
+ - ext/libffi/testsuite/libffi.call/nested_struct3.c
251
+ - ext/libffi/testsuite/libffi.call/nested_struct4.c
252
+ - ext/libffi/testsuite/libffi.call/nested_struct5.c
253
+ - ext/libffi/testsuite/libffi.call/nested_struct6.c
254
+ - ext/libffi/testsuite/libffi.call/nested_struct7.c
255
+ - ext/libffi/testsuite/libffi.call/nested_struct8.c
256
+ - ext/libffi/testsuite/libffi.call/nested_struct9.c
257
+ - ext/libffi/testsuite/libffi.call/problem1.c
258
+ - ext/libffi/testsuite/libffi.call/promotion.c
259
+ - ext/libffi/testsuite/libffi.call/pyobjc-tc.c
260
+ - ext/libffi/testsuite/libffi.call/return_dbl.c
261
+ - ext/libffi/testsuite/libffi.call/return_dbl1.c
262
+ - ext/libffi/testsuite/libffi.call/return_dbl2.c
263
+ - ext/libffi/testsuite/libffi.call/return_fl.c
264
+ - ext/libffi/testsuite/libffi.call/return_fl1.c
265
+ - ext/libffi/testsuite/libffi.call/return_fl2.c
266
+ - ext/libffi/testsuite/libffi.call/return_fl3.c
267
+ - ext/libffi/testsuite/libffi.call/return_ldl.c
268
+ - ext/libffi/testsuite/libffi.call/return_ll.c
269
+ - ext/libffi/testsuite/libffi.call/return_ll1.c
270
+ - ext/libffi/testsuite/libffi.call/return_sc.c
271
+ - ext/libffi/testsuite/libffi.call/return_sl.c
272
+ - ext/libffi/testsuite/libffi.call/return_uc.c
273
+ - ext/libffi/testsuite/libffi.call/return_ul.c
274
+ - ext/libffi/testsuite/libffi.call/strlen.c
275
+ - ext/libffi/testsuite/libffi.call/strlen_win32.c
276
+ - ext/libffi/testsuite/libffi.call/struct1.c
277
+ - ext/libffi/testsuite/libffi.call/struct2.c
278
+ - ext/libffi/testsuite/libffi.call/struct3.c
279
+ - ext/libffi/testsuite/libffi.call/struct4.c
280
+ - ext/libffi/testsuite/libffi.call/struct5.c
281
+ - ext/libffi/testsuite/libffi.call/struct6.c
282
+ - ext/libffi/testsuite/libffi.call/struct7.c
283
+ - ext/libffi/testsuite/libffi.call/struct8.c
284
+ - ext/libffi/testsuite/libffi.call/struct9.c
285
+ - ext/libffi/testsuite/libffi.special
286
+ - ext/libffi/testsuite/libffi.special/ffitestcxx.h
287
+ - ext/libffi/testsuite/libffi.special/special.exp
288
+ - ext/libffi/testsuite/libffi.special/unwindtest.cc
289
+ - ext/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc
290
+ - ext/libffi/testsuite/Makefile.am
291
+ - ext/libffi/testsuite/Makefile.in
292
+ - ext/libffi/texinfo.tex
293
+ - ext/libffi/TODO
294
+ - ext/libffi.darwin.mk
295
+ - ext/libffi.mk
296
+ - ext/MemoryPointer.c
297
+ - ext/MemoryPointer.h
298
+ - ext/Platform.c
299
+ - ext/Platform.h
300
+ - ext/rbffi.h
301
+ - ext/Types.c
302
+ - ext/Types.h
303
+ - lib/ffi
304
+ - lib/ffi/buffer.rb
305
+ - lib/ffi/callback.rb
306
+ - lib/ffi/ffi.rb
307
+ - lib/ffi/memorypointer.rb
308
+ - lib/ffi/platform.rb
309
+ - lib/ffi/struct.rb
310
+ - lib/ffi.rb
311
+ - nbproject/configurations.xml
312
+ - nbproject/Makefile-Default.mk
313
+ - nbproject/Makefile-impl.mk
314
+ - nbproject/private
315
+ - nbproject/private/configurations.xml
316
+ - nbproject/private/private.xml
317
+ - nbproject/project.properties
318
+ - nbproject/project.xml
319
+ - samples/getlogin.rb
320
+ - samples/getpid.rb
321
+ - samples/gettimeofday.rb
322
+ - samples/hello.rb
323
+ - samples/qsort.rb
324
+ - specs/buffer_spec.rb
325
+ - specs/callback_spec.rb
326
+ - specs/rbx
327
+ - specs/rbx/attach_function_spec.rb
328
+ - specs/rbx/memory_pointer_spec.rb
329
+ - specs/rbx/spec_helper.rb
330
+ - specs/rbx/struct_spec.rb
331
+ - specs/spec_helper.rb
332
+ has_rdoc: true
333
+ homepage: http://kenai.com/projects/ruby-ffi
334
+ post_install_message:
335
+ rdoc_options: []
336
+
337
+ require_paths:
338
+ - lib
339
+ required_ruby_version: !ruby/object:Gem::Requirement
340
+ requirements:
341
+ - - ">="
342
+ - !ruby/object:Gem::Version
343
+ version: "0"
344
+ version:
345
+ required_rubygems_version: !ruby/object:Gem::Requirement
346
+ requirements:
347
+ - - ">="
348
+ - !ruby/object:Gem::Version
349
+ version: "0"
350
+ version:
351
+ requirements: []
352
+
353
+ rubyforge_project: ffi
354
+ rubygems_version: 1.3.0
355
+ signing_key:
356
+ specification_version: 2
357
+ summary: A Ruby foreign function interface (compatible with Rubinius and JRuby FFI)
358
+ test_files: []
359
+