ffi 1.9.18 → 1.9.24

Sign up to get free protection for your applications and to get access to all the features.
Files changed (498) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +22 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +52 -0
  5. data/.yardopts +5 -0
  6. data/CHANGELOG.md +66 -0
  7. data/Gemfile +15 -0
  8. data/{spec/ffi/LICENSE.SPECS → LICENSE.SPECS} +1 -1
  9. data/README.md +3 -4
  10. data/Rakefile +42 -6
  11. data/appveyor.yml +22 -0
  12. data/ext/ffi_c/AbstractMemory.c +6 -1
  13. data/ext/ffi_c/Call.c +6 -24
  14. data/ext/ffi_c/Call.h +0 -9
  15. data/ext/ffi_c/Closure.c +54 -0
  16. data/ext/ffi_c/{ClosurePool.h → Closure.h} +13 -23
  17. data/ext/ffi_c/Function.c +24 -30
  18. data/ext/ffi_c/Function.h +1 -2
  19. data/ext/ffi_c/FunctionInfo.c +0 -4
  20. data/ext/ffi_c/MethodHandle.c +33 -268
  21. data/ext/ffi_c/Platform.c +10 -2
  22. data/ext/ffi_c/Thread.c +1 -0
  23. data/ext/ffi_c/extconf.rb +11 -5
  24. data/ext/ffi_c/ffi.c +2 -2
  25. data/ext/ffi_c/libffi/.appveyor.yml +50 -0
  26. data/ext/ffi_c/libffi/.github/issue_template.md +10 -0
  27. data/ext/ffi_c/libffi/.gitignore +38 -0
  28. data/ext/ffi_c/libffi/.travis/ar-lib +270 -0
  29. data/ext/ffi_c/libffi/.travis/build.sh +34 -0
  30. data/ext/ffi_c/libffi/.travis/compile +351 -0
  31. data/ext/ffi_c/libffi/.travis/install.sh +22 -0
  32. data/ext/ffi_c/libffi/.travis/moxie-sim.exp +60 -0
  33. data/ext/ffi_c/libffi/.travis/site.exp +18 -0
  34. data/ext/ffi_c/libffi/.travis.yml +34 -0
  35. data/ext/ffi_c/libffi/ChangeLog.libffi +2 -2
  36. data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.libffi-3.1} +1402 -2
  37. data/ext/ffi_c/libffi/ChangeLog.v1 +1 -1
  38. data/ext/ffi_c/libffi/LICENSE +1 -1
  39. data/ext/ffi_c/libffi/LICENSE-BUILDTOOLS +352 -0
  40. data/ext/ffi_c/libffi/Makefile.am +139 -169
  41. data/ext/ffi_c/libffi/Makefile.in +927 -938
  42. data/ext/ffi_c/libffi/README.md +461 -0
  43. data/ext/ffi_c/libffi/acinclude.m4 +387 -0
  44. data/ext/ffi_c/libffi/autogen.sh +2 -0
  45. data/ext/ffi_c/libffi/config.guess +336 -371
  46. data/ext/ffi_c/libffi/config.sub +246 -115
  47. data/ext/ffi_c/libffi/configure +6976 -2189
  48. data/ext/ffi_c/libffi/configure.ac +152 -258
  49. data/ext/ffi_c/libffi/configure.host +282 -4
  50. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  51. data/ext/ffi_c/libffi/doc/Makefile.in +811 -0
  52. data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
  53. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  54. data/ext/ffi_c/libffi/fficonfig.h.in +24 -13
  55. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +203 -0
  56. data/ext/ffi_c/libffi/include/Makefile.am +3 -3
  57. data/ext/ffi_c/libffi/include/Makefile.in +188 -71
  58. data/ext/ffi_c/libffi/include/ffi.h.in +145 -61
  59. data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
  60. data/ext/ffi_c/libffi/include/ffi_common.h +34 -11
  61. data/ext/ffi_c/libffi/install-sh +190 -202
  62. data/ext/ffi_c/libffi/libffi.map.in +80 -0
  63. data/ext/ffi_c/libffi/libffi.pc.in +3 -2
  64. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +1043 -0
  65. data/ext/ffi_c/libffi/libtool-ldflags +106 -0
  66. data/ext/ffi_c/libffi/libtool-version +1 -1
  67. data/ext/ffi_c/libffi/ltmain.sh +3553 -2033
  68. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  69. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +71 -0
  70. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +32 -14
  71. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +33 -106
  72. data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +33 -35
  73. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +37 -13
  74. data/ext/ffi_c/libffi/m4/ax_configure_args.m4 +5 -5
  75. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +11 -9
  76. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +100 -52
  77. data/ext/ffi_c/libffi/m4/ax_gcc_x86_cpuid.m4 +18 -8
  78. data/ext/ffi_c/libffi/m4/ax_require_defined.m4 +37 -0
  79. data/ext/ffi_c/libffi/man/Makefile.am +2 -2
  80. data/ext/ffi_c/libffi/man/Makefile.in +141 -49
  81. data/ext/ffi_c/libffi/man/ffi.3 +10 -0
  82. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
  83. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  84. data/ext/ffi_c/libffi/missing +150 -311
  85. data/ext/ffi_c/libffi/msvcc.sh +147 -16
  86. data/ext/ffi_c/libffi/src/aarch64/ffi.c +941 -0
  87. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
  88. data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
  89. data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
  90. data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
  91. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
  92. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  93. data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
  94. data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
  95. data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
  96. data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
  97. data/ext/ffi_c/libffi/src/arm/ffi.c +608 -517
  98. data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
  99. data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
  100. data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
  101. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
  102. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  103. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  104. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  105. data/ext/ffi_c/libffi/src/closures.c +397 -46
  106. data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
  107. data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
  108. data/ext/ffi_c/libffi/src/debug.c +6 -1
  109. data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
  110. data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
  111. data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
  112. data/ext/ffi_c/libffi/src/ia64/ffi.c +35 -13
  113. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +8 -2
  114. data/ext/ffi_c/libffi/src/ia64/unix.S +8 -1
  115. data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
  116. data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
  117. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
  118. data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
  119. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
  120. data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
  121. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  122. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  123. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  124. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  125. data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
  126. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  127. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  128. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  129. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  130. data/ext/ffi_c/libffi/src/mips/ffi.c +132 -40
  131. data/ext/ffi_c/libffi/src/mips/ffitarget.h +15 -13
  132. data/ext/ffi_c/libffi/src/mips/n32.S +128 -56
  133. data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
  134. data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
  135. data/ext/ffi_c/libffi/src/moxie/ffi.c +54 -45
  136. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  137. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  138. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  139. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  140. data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
  141. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  142. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  143. data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
  144. data/ext/ffi_c/libffi/src/powerpc/aix.S +245 -7
  145. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +253 -4
  146. data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
  147. data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
  148. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
  149. data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
  150. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +111 -30
  151. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +974 -0
  152. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
  153. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  154. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +103 -44
  155. data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
  156. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
  157. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
  158. data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
  159. data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
  160. data/ext/ffi_c/libffi/src/raw_api.c +18 -5
  161. data/ext/ffi_c/libffi/src/riscv/ffi.c +445 -0
  162. data/ext/ffi_c/libffi/src/riscv/ffitarget.h +68 -0
  163. data/ext/ffi_c/libffi/src/riscv/sysv.S +214 -0
  164. data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
  165. data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
  166. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  167. data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
  168. data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
  169. data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
  170. data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
  171. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
  172. data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
  173. data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
  174. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
  175. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  176. data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
  177. data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
  178. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  179. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  180. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  181. data/ext/ffi_c/libffi/src/types.c +46 -15
  182. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  183. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  184. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  185. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  186. data/ext/ffi_c/libffi/src/x86/ffi.c +609 -500
  187. data/ext/ffi_c/libffi/src/x86/ffi64.c +365 -116
  188. data/ext/ffi_c/libffi/src/x86/ffitarget.h +61 -35
  189. data/ext/ffi_c/libffi/src/x86/ffiw64.c +308 -0
  190. data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
  191. data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
  192. data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
  193. data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
  194. data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
  195. data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
  196. data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
  197. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
  198. data/ext/ffi_c/libffi/src/xtensa/sysv.S +258 -0
  199. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  200. data/ext/ffi_c/libffi/testsuite/Makefile.am +110 -73
  201. data/ext/ffi_c/libffi/testsuite/Makefile.in +219 -111
  202. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +310 -24
  203. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
  204. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +28 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +78 -0
  206. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +50 -0
  207. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +58 -0
  208. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +1745 -0
  209. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +2885 -0
  210. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +743 -0
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +46 -0
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +17 -6
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3float.c +95 -0
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
  263. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +25 -40
  268. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
  269. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
  270. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
  271. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
  273. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
  274. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  275. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  276. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  277. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
  278. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
  279. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
  280. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +7 -6
  281. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
  282. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
  283. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
  284. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
  285. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
  286. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
  287. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
  288. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
  289. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
  290. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  291. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  292. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
  293. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  294. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
  295. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
  296. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
  297. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
  298. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
  299. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
  300. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
  301. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
  305. data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +57 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
  307. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
  308. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
  309. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
  310. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
  311. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
  312. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
  313. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
  314. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
  315. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  316. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
  317. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +3 -2
  318. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
  319. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
  320. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
  321. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
  322. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  323. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  324. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  325. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  326. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  327. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  328. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  329. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  330. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  331. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  332. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  333. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  334. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  335. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  336. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  337. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  338. data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
  339. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  340. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  341. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  342. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  343. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  344. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  345. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  346. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  347. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  348. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  349. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  350. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  351. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  352. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  353. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  354. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  355. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  356. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  357. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  358. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  359. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  360. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  361. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  362. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  363. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  364. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  365. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  366. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  367. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  368. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  369. data/ext/ffi_c/libffi.bsd.mk +11 -5
  370. data/ext/ffi_c/libffi.darwin.mk +14 -4
  371. data/ext/ffi_c/libffi.gnu.mk +3 -2
  372. data/ext/ffi_c/libffi.mk +10 -5
  373. data/ext/ffi_c/libffi.vc.mk +1 -1
  374. data/ext/ffi_c/libffi.vc64.mk +1 -1
  375. data/ffi.gemspec +16 -3
  376. data/lib/ffi/enum.rb +124 -0
  377. data/lib/ffi/library.rb +68 -18
  378. data/lib/ffi/platform/mips64-linux/types.conf +104 -0
  379. data/lib/ffi/platform/mipsisa32r6-linux/types.conf +102 -0
  380. data/lib/ffi/platform/mipsisa32r6el-linux/types.conf +102 -0
  381. data/lib/ffi/platform/mipsisa64r6-linux/types.conf +104 -0
  382. data/lib/ffi/platform/mipsisa64r6el-linux/types.conf +104 -0
  383. data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
  384. data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
  385. data/lib/ffi/platform.rb +7 -2
  386. data/lib/ffi/pointer.rb +1 -0
  387. data/lib/ffi/struct.rb +0 -2
  388. data/lib/ffi/version.rb +1 -2
  389. data/samples/getlogin.rb +8 -0
  390. data/samples/getpid.rb +8 -0
  391. data/samples/gettimeofday.rb +18 -0
  392. data/samples/hello.rb +7 -0
  393. data/samples/inotify.rb +60 -0
  394. data/samples/pty.rb +76 -0
  395. data/samples/qsort.rb +21 -0
  396. data/samples/sample_helper.rb +6 -0
  397. metadata +191 -116
  398. data/ext/ffi_c/ClosurePool.c +0 -283
  399. data/ext/ffi_c/libffi/Makefile.vc +0 -141
  400. data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
  401. data/ext/ffi_c/libffi/README +0 -342
  402. data/ext/ffi_c/libffi/aclocal.m4 +0 -1873
  403. data/ext/ffi_c/libffi/build-ios.sh +0 -67
  404. data/ext/ffi_c/libffi/compile +0 -143
  405. data/ext/ffi_c/libffi/depcomp +0 -630
  406. data/ext/ffi_c/libffi/doc/libffi.info +0 -593
  407. data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
  408. data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
  409. data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
  410. data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7831
  411. data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -369
  412. data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -123
  413. data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
  414. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -98
  415. data/ext/ffi_c/libffi/mdate-sh +0 -201
  416. data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
  417. data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
  418. data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
  419. data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
  420. data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
  421. data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
  422. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
  423. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
  424. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
  425. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
  426. data/ext/ffi_c/libffi/texinfo.tex +0 -7210
  427. data/gen/Rakefile +0 -30
  428. data/libtest/Benchmark.c +0 -52
  429. data/libtest/BoolTest.c +0 -34
  430. data/libtest/BufferTest.c +0 -31
  431. data/libtest/ClosureTest.c +0 -205
  432. data/libtest/EnumTest.c +0 -51
  433. data/libtest/FunctionTest.c +0 -70
  434. data/libtest/GNUmakefile +0 -149
  435. data/libtest/GlobalVariable.c +0 -62
  436. data/libtest/LastErrorTest.c +0 -21
  437. data/libtest/NumberTest.c +0 -132
  438. data/libtest/PointerTest.c +0 -63
  439. data/libtest/ReferenceTest.c +0 -23
  440. data/libtest/StringTest.c +0 -34
  441. data/libtest/StructTest.c +0 -243
  442. data/libtest/UnionTest.c +0 -43
  443. data/libtest/VariadicTest.c +0 -99
  444. data/spec/ffi/async_callback_spec.rb +0 -35
  445. data/spec/ffi/bool_spec.rb +0 -32
  446. data/spec/ffi/buffer_spec.rb +0 -279
  447. data/spec/ffi/callback_spec.rb +0 -773
  448. data/spec/ffi/custom_param_type.rb +0 -37
  449. data/spec/ffi/custom_type_spec.rb +0 -74
  450. data/spec/ffi/dup_spec.rb +0 -52
  451. data/spec/ffi/enum_spec.rb +0 -423
  452. data/spec/ffi/errno_spec.rb +0 -20
  453. data/spec/ffi/ffi_spec.rb +0 -28
  454. data/spec/ffi/fixtures/Benchmark.c +0 -52
  455. data/spec/ffi/fixtures/BoolTest.c +0 -34
  456. data/spec/ffi/fixtures/BufferTest.c +0 -31
  457. data/spec/ffi/fixtures/ClosureTest.c +0 -205
  458. data/spec/ffi/fixtures/EnumTest.c +0 -51
  459. data/spec/ffi/fixtures/FunctionTest.c +0 -142
  460. data/spec/ffi/fixtures/GNUmakefile +0 -149
  461. data/spec/ffi/fixtures/GlobalVariable.c +0 -62
  462. data/spec/ffi/fixtures/LastErrorTest.c +0 -21
  463. data/spec/ffi/fixtures/NumberTest.c +0 -132
  464. data/spec/ffi/fixtures/PipeHelper.h +0 -21
  465. data/spec/ffi/fixtures/PipeHelperPosix.c +0 -41
  466. data/spec/ffi/fixtures/PipeHelperWindows.c +0 -72
  467. data/spec/ffi/fixtures/PointerTest.c +0 -63
  468. data/spec/ffi/fixtures/ReferenceTest.c +0 -23
  469. data/spec/ffi/fixtures/StringTest.c +0 -34
  470. data/spec/ffi/fixtures/StructTest.c +0 -243
  471. data/spec/ffi/fixtures/UnionTest.c +0 -43
  472. data/spec/ffi/fixtures/VariadicTest.c +0 -99
  473. data/spec/ffi/fixtures/classes.rb +0 -438
  474. data/spec/ffi/function_spec.rb +0 -97
  475. data/spec/ffi/io_spec.rb +0 -16
  476. data/spec/ffi/library_spec.rb +0 -286
  477. data/spec/ffi/long_double.rb +0 -30
  478. data/spec/ffi/managed_struct_spec.rb +0 -68
  479. data/spec/ffi/memorypointer_spec.rb +0 -78
  480. data/spec/ffi/number_spec.rb +0 -247
  481. data/spec/ffi/platform_spec.rb +0 -114
  482. data/spec/ffi/pointer_spec.rb +0 -285
  483. data/spec/ffi/rbx/attach_function_spec.rb +0 -34
  484. data/spec/ffi/rbx/memory_pointer_spec.rb +0 -194
  485. data/spec/ffi/rbx/spec_helper.rb +0 -6
  486. data/spec/ffi/rbx/struct_spec.rb +0 -18
  487. data/spec/ffi/spec_helper.rb +0 -93
  488. data/spec/ffi/string_spec.rb +0 -118
  489. data/spec/ffi/strptr_spec.rb +0 -50
  490. data/spec/ffi/struct_by_ref_spec.rb +0 -43
  491. data/spec/ffi/struct_callback_spec.rb +0 -69
  492. data/spec/ffi/struct_initialize_spec.rb +0 -35
  493. data/spec/ffi/struct_packed_spec.rb +0 -50
  494. data/spec/ffi/struct_spec.rb +0 -886
  495. data/spec/ffi/typedef_spec.rb +0 -91
  496. data/spec/ffi/union_spec.rb +0 -67
  497. data/spec/ffi/variadic_spec.rb +0 -132
  498. data/spec/spec.opts +0 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 310481484c2ef881dc83069461236a238e31614b
4
- data.tar.gz: 951d6446172624561da969bd47db63a88eacb01d
2
+ SHA256:
3
+ metadata.gz: 3c08414eed21b4a4c2dbb89687f9004a970ce2b997fc419566221ee01384e5eb
4
+ data.tar.gz: 4849cae15554e04a89322a7e1738b804be57f09e8606170803655c4804ba03a3
5
5
  SHA512:
6
- metadata.gz: d839e3af476ba00b2c80063aa47455b47b734b79b6435a8bfb3ca8aa875fad89e7cbdc7d1874f1d136f6dbc8b0b5d7dc53286d1e546197c841ff5bcbdbbb7f77
7
- data.tar.gz: 292b7cf397c8eadd3d7d300168deffedae37c95bc6a72a5f9da2a0202b92934f1e62165e5c721849768e44cc1086390e92044422f9ed6a0406cac0d488e9b865
6
+ metadata.gz: a4984c832d1358e61c05b50b936e6f757cb301202d441a686bbd2b2a963f77fd1371bfcb2644e75522ded093d0f9055843d28bf7593ef7f037c349cd443efab5
7
+ data.tar.gz: cae427a16110ac965beb4e999f9f5a8950a69f321a09d641343dfd2b3ec4f3fcd5ad428047f25e1b87800b4f0dd2827eb5cd143e51c50af9944ce2c0f38eb892
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ doc/
2
+ bin/
3
+ .yardoc
4
+ *.orig
5
+ nbproject/private
6
+ pkg
7
+ *.orig
8
+ *.rej
9
+ *.patch
10
+ *.diff
11
+ build
12
+ *.so
13
+ *.[oa]
14
+ core
15
+ lib/ffi/types.conf
16
+ lib/ffi_c.bundle
17
+ lib/ffi_c.so
18
+ vendor
19
+ .bundle
20
+ Gemfile.lock
21
+ types_log
22
+ *.gem
data/.gitmodules ADDED
@@ -0,0 +1,3 @@
1
+ [submodule "ext/ffi_c/libffi"]
2
+ path = ext/ffi_c/libffi
3
+ url = https://github.com/libffi/libffi.git
data/.travis.yml ADDED
@@ -0,0 +1,52 @@
1
+ dist: trusty
2
+ sudo: false
3
+ group: beta
4
+ language: ruby
5
+ before_install:
6
+ - gem install bundler
7
+ script:
8
+ - bundle exec rake compile || bundle exec rake compile
9
+ - bundle exec rake test
10
+ os:
11
+ - linux
12
+ - osx
13
+ rvm:
14
+ - 1.9.3
15
+ - 2.0.0
16
+ - 2.1
17
+ - 2.2.8
18
+ - 2.3.5
19
+ - 2.4.3
20
+ - 2.5.0
21
+ - ruby-head
22
+ - rbx
23
+ - system
24
+ env:
25
+ - CC=gcc
26
+ - CC=clang
27
+ matrix:
28
+ allow_failures:
29
+ - rvm: system
30
+ - os: osx
31
+ rvm: 2.0.0
32
+ - os: osx
33
+ rvm: ruby-head
34
+ - rvm: rbx
35
+ - rvm: rbx-head
36
+ - rvm: 1.9.3
37
+ exclude: # ruby 2.4.2 needs build with xcode9 or later on osx
38
+ - os: osx
39
+ rvm: 2.4.2
40
+ include:
41
+ - os: osx
42
+ osx_image: xcode9.1
43
+ rvm: 2.4.2
44
+ env:
45
+ - CC=gcc
46
+ - os: osx
47
+ osx_image: xcode9.1
48
+ rvm: 2.4.2
49
+ env:
50
+ - CC=clang
51
+ after_failure:
52
+ - "find build -name mkmf.log | xargs cat"
data/.yardopts ADDED
@@ -0,0 +1,5 @@
1
+ --title "Ruby FFI"
2
+ --charset UTF-8
3
+ --private
4
+ lib/**/*.rb
5
+ ext/**/*.c
data/CHANGELOG.md ADDED
@@ -0,0 +1,66 @@
1
+ 1.9.24 / 2018-06-02
2
+ -------------------
3
+
4
+ Added:
5
+ * Added a CHANGELOG file
6
+ * Add mips64(eb) support, and mips r6 support. (#601)
7
+
8
+ Changed:
9
+ * Update libffi to latest changes on master.
10
+ * Don't search in hardcoded /usr paths on Windows.
11
+ * Don't treat Symbol args different to Strings in ffi_lib.
12
+ * Make sure size_t is defined in Thread.c. Fixes #609
13
+
14
+
15
+ 1.9.23 / 2018-02-25
16
+ -------------------
17
+
18
+ Changed:
19
+ * Fix unnecessary rebuild of configure in darwin multi arch. Fixes #605
20
+
21
+
22
+ 1.9.22 / 2018-02-22
23
+ -------------------
24
+
25
+ Changed:
26
+ * Update libffi to latest changes on master.
27
+ * Update detection of system libffi to match new requirements. Fixes #617
28
+ * Prefer bundled libffi over system libffi on Mac OS.
29
+ * Do closures via libffi. This removes ClosurePool and fixes compat with PaX. #540
30
+ * Use a more deterministic gem packaging.
31
+ * Fix unnecessary update of autoconf files at gem install.
32
+
33
+
34
+ 1.9.21 / 2018-02-06
35
+ -------------------
36
+
37
+ Added:
38
+ * Ruby-2.5 support by Windows binary gems. Fixes #598
39
+ * Add missing win64 types.
40
+ * Added support for Bitmask. (#573)
41
+ * Add support for MSYS2 (#572) and Sparc64 Linux. (#574)
42
+
43
+ Changed:
44
+ * Fix read_string to not throw an error on length 0.
45
+ * Don't use absolute paths for sh and env. Fixes usage on Adroid #528
46
+ * Use Ruby implementation for `which` for better compat with Windows. Fixes #315
47
+ * Fix compatibility with PPC64LE platform. (#577)
48
+ * Normalize sparc64 to sparcv9. (#575)
49
+
50
+ Removed:
51
+ * Drop Ruby 1.8.7 support (#480)
52
+
53
+
54
+ 1.9.18 / 2017-03-03
55
+ -------------------
56
+
57
+ Added:
58
+ * Add compatibility with Ruby-2.4.
59
+
60
+ Changed:
61
+ * Add missing shlwapi.h include to fix Windows build.
62
+ * Avoid undefined behaviour of LoadLibrary() on Windows. #553
63
+
64
+
65
+ 1.9.17 / 2017-01-13
66
+ -------------------
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'rake', '~> 10.1'
5
+ gem 'rake-compiler', '~> 1.0.3'
6
+ gem 'rake-compiler-dock', '~> 0.6.2'
7
+ gem 'rspec', '~> 3.0'
8
+ gem 'rubygems-tasks', '~> 0.2.4', :require => 'rubygems/tasks'
9
+ gem "rubysl", "~> 2.0", :platforms => 'rbx'
10
+ end
11
+
12
+ group :doc do
13
+ gem 'kramdown'
14
+ gem 'yard', '~> 0.9'
15
+ end
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008-2014 Ruby-FFI contributors
1
+ Copyright (c) 2008-2012 Ruby-FFI contributors
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person
4
4
  obtaining a copy of this software and associated documentation
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # ruby-ffi https://wiki.github.com/ffi/ffi [![Build Status](https://travis-ci.org/ffi/ffi.png?branch=master)](https://travis-ci.org/ffi/ffi)
1
+ # ruby-ffi https://wiki.github.com/ffi/ffi [![Build Status](https://travis-ci.org/ffi/ffi.png?branch=master)](https://travis-ci.org/ffi/ffi) [![Build status Windows](https://ci.appveyor.com/api/projects/status/r8wxn1sd4s794gg1/branch/master?svg=true)](https://ci.appveyor.com/project/larskanis/ffi-aofqa/branch/master)
2
2
 
3
3
  ## Description
4
4
 
@@ -43,8 +43,6 @@ At a minimum, you will need:
43
43
  * A C compiler (e.g. Xcode on OSX, gcc on everything else)
44
44
  * libffi development library - this is commonly in the libffi-dev or libffi-devel
45
45
 
46
- On Linux systems running with [PaX](https://en.wikipedia.org/wiki/PaX) (Gentoo, Alpine, etc.) FFI may trigger `mprotrect` errors. You may need to disable [mprotect](https://en.wikibooks.org/wiki/Grsecurity/Appendix/Grsecurity_and_PaX_Configuration_Options#Restrict_mprotect.28.29) for ruby (`paxctl -m [/path/to/ruby]`) for the time being until a solution is found.
47
-
48
46
  ## Installation
49
47
 
50
48
  From rubygems:
@@ -54,8 +52,9 @@ From rubygems:
54
52
  or from the git repository on github:
55
53
 
56
54
  git clone git://github.com/ffi/ffi.git
55
+ git submodule update --init --recursive
57
56
  cd ffi
58
- rake gem:install
57
+ rake install
59
58
 
60
59
  ## License
61
60
 
data/Rakefile CHANGED
@@ -65,7 +65,18 @@ OS = case RbConfig::CONFIG['host_os'].downcase
65
65
  RbConfig::CONFIG['host_os'].downcase
66
66
  end
67
67
 
68
- GMAKE = system('which gmake >/dev/null') && 'gmake' || 'make'
68
+ def which(name)
69
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
70
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
71
+ exts.each do |ext|
72
+ app = File.join(path, name+ext)
73
+ return app if File.executable? app
74
+ end
75
+ end
76
+ nil
77
+ end
78
+
79
+ GMAKE = which('gmake').nil? ? 'make' : 'gmake'
69
80
 
70
81
  LIBTEST = "build/libtest.#{LIBEXT}"
71
82
  BUILD_DIR = "build"
@@ -89,7 +100,7 @@ else
89
100
  end
90
101
 
91
102
  desc "Build all packages"
92
- task :package => 'gem:package'
103
+ task :package => %w[ gem:java gem:windows ]
93
104
 
94
105
  CLOBBER.include 'lib/ffi/types.conf'
95
106
  CLOBBER.include 'pkg'
@@ -150,7 +161,7 @@ namespace 'java' do
150
161
  s.homepage = gem_spec.homepage
151
162
  s.summary = gem_spec.summary
152
163
  s.description = gem_spec.description
153
- s.files = %w(LICENSE COPYING README.md Rakefile)
164
+ s.files = %w(LICENSE COPYING README.md CHANGELOG.md Rakefile)
154
165
  s.has_rdoc = false
155
166
  s.license = gem_spec.license
156
167
  s.platform = 'java'
@@ -173,10 +184,11 @@ if USE_RAKE_COMPILER
173
184
  ext.tmp_dir = BUILD_DIR # temporary folder used during compilation.
174
185
  ext.cross_compile = true # enable cross compilation (requires cross compile toolchain)
175
186
  ext.cross_platform = %w[i386-mingw32 x64-mingw32] # forces the Windows platform instead of the default one
187
+ ext.cross_compiling do |spec|
188
+ spec.files.reject! { |path| File.fnmatch?('ext/*', path) }
189
+ end
176
190
  end
177
191
 
178
- ENV['RUBY_CC_VERSION'] ||= '1.8.7:1.9.3:2.0.0:2.1.6:2.2.2:2.3.0'
179
-
180
192
  # To reduce the gem file size strip mingw32 dlls before packaging
181
193
  ENV['RUBY_CC_VERSION'].to_s.split(':').each do |ruby_version|
182
194
  task "build/i386-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/ffi_c.so" do |t|
@@ -191,7 +203,31 @@ if USE_RAKE_COMPILER
191
203
  desc "build a windows gem without all the ceremony."
192
204
  task "gem:windows" do
193
205
  require "rake_compiler_dock"
194
- RakeCompilerDock.sh "bundle && rake cross native gem MAKE='nice make -j`nproc`'"
206
+ RakeCompilerDock.sh "sudo apt-get update && sudo apt-get install -y libltdl-dev && bundle && rake cross native gem MAKE='nice make -j`nproc`'"
207
+ end
208
+ end
209
+
210
+ directory "ext/ffi_c/libffi"
211
+ file "ext/ffi_c/libffi/autogen.sh" => "ext/ffi_c/libffi" do
212
+ warn "Downloading libffi ..."
213
+ sh "git submodule update --init --recursive"
214
+ end
215
+
216
+ LIBFFI_GIT_FILES = `git --git-dir ext/ffi_c/libffi/.git ls-files -z`.split("\x0")
217
+
218
+ # Generate files in gemspec but not in libffi's git repo by running autogen.sh
219
+ gem_spec.files.select do |f|
220
+ f =~ /ext\/ffi_c\/libffi\/(.*)/ && !LIBFFI_GIT_FILES.include?($1)
221
+ end.each do |f|
222
+ file f => "ext/ffi_c/libffi/autogen.sh" do
223
+ chdir "ext/ffi_c/libffi" do
224
+ sh "sh ./autogen.sh"
225
+ end
226
+ touch f
227
+ if gem_spec.files != Gem::Specification.load('./ffi.gemspec').files
228
+ warn "gemspec files have changed -> Please restart rake!"
229
+ exit 1
230
+ end
195
231
  end
196
232
  end
197
233
 
data/appveyor.yml ADDED
@@ -0,0 +1,22 @@
1
+ install:
2
+ - SET PATH=C:\Ruby%RUBYVER%\bin;%PATH%
3
+ - SET RAKEOPT=-rdevkit
4
+ - ps: |
5
+ if ($env:RUBYVER -like "*head*") {
6
+ $(new-object net.webclient).DownloadFile("https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-$env:RUBYVER.exe", "$pwd/ruby-setup.exe")
7
+ cmd /c ruby-setup.exe /verysilent /dir=C:/Ruby$env:RUBYVER
8
+ }
9
+ - ridk version
10
+ - gem --version
11
+ - gem install bundler --quiet --no-ri --no-rdoc
12
+ - bundle install
13
+ build: off
14
+ build_script:
15
+ - bundle exec rake compile || bundle exec rake compile
16
+ test_script:
17
+ - bundle exec rake test
18
+ environment:
19
+ matrix:
20
+ - RUBYVER: "head-x64"
21
+ - RUBYVER: 24
22
+ - RUBYVER: 25-x64
@@ -49,8 +49,13 @@
49
49
  #include "Function.h"
50
50
  #include "LongDouble.h"
51
51
 
52
- #ifndef PRIsVALUE
52
+ #ifdef PRIsVALUE
53
+ # define RB_OBJ_CLASSNAME(obj) rb_obj_class(obj)
54
+ # define RB_OBJ_STRING(obj) (obj)
55
+ #else
53
56
  # define PRIsVALUE "s"
57
+ # define RB_OBJ_CLASSNAME(obj) rb_obj_classname(obj)
58
+ # define RB_OBJ_STRING(obj) StringValueCStr(obj)
54
59
  #endif
55
60
 
56
61
  static inline char* memory_address(VALUE self);
data/ext/ffi_c/Call.c CHANGED
@@ -43,6 +43,9 @@
43
43
  #endif
44
44
  #include <errno.h>
45
45
  #include <ruby.h>
46
+ #if defined(HAVE_RUBY_THREAD_H)
47
+ #include <ruby/thread.h>
48
+ #endif
46
49
  #if defined(HAVE_NATIVETHREAD) && (defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) && !defined(_WIN32)
47
50
  # include <signal.h>
48
51
  # include <pthread.h>
@@ -62,28 +65,7 @@
62
65
  #include "Thread.h"
63
66
  #include "LongDouble.h"
64
67
 
65
- #ifdef USE_RAW
66
- # ifndef __i386__
67
- # error "RAW argument packing only supported on i386"
68
- # endif
69
-
70
- #define INT8_ADJ (4)
71
- #define INT16_ADJ (4)
72
- #define INT32_ADJ (4)
73
- #define INT64_ADJ (8)
74
- #define LONG_ADJ (sizeof(long))
75
- #define FLOAT32_ADJ (4)
76
- #define FLOAT64_ADJ (8)
77
- #define ADDRESS_ADJ (sizeof(void *))
78
- #define LONGDOUBLE_ADJ (ffi_type_longdouble.alignment)
79
-
80
- #endif /* USE_RAW */
81
-
82
- #ifdef USE_RAW
83
- # define ADJ(p, a) ((p) = (FFIStorage*) (((char *) p) + a##_ADJ))
84
- #else
85
- # define ADJ(p, a) (++(p))
86
- #endif
68
+ #define ADJ(p, a) (++(p))
87
69
 
88
70
  static void* callback_param(VALUE proc, VALUE cbinfo);
89
71
  static inline void* getPointer(VALUE value, int type);
@@ -338,7 +320,7 @@ rbffi_SetupCallParams(int argc, VALUE* argv, int paramCount, Type** paramTypes,
338
320
  }
339
321
  }
340
322
 
341
- static VALUE
323
+ static void *
342
324
  call_blocking_function(void* data)
343
325
  {
344
326
  rbffi_blocking_call_t* b = (rbffi_blocking_call_t *) data;
@@ -346,7 +328,7 @@ call_blocking_function(void* data)
346
328
  ffi_call(&b->cif, FFI_FN(b->function), b->retval, b->ffiValues);
347
329
  b->frame->has_gvl = true;
348
330
 
349
- return Qnil;
331
+ return NULL;
350
332
  }
351
333
 
352
334
  VALUE
data/ext/ffi_c/Call.h CHANGED
@@ -39,16 +39,7 @@
39
39
  extern "C" {
40
40
  #endif
41
41
 
42
- #if defined(__i386__) && \
43
- (defined(HAVE_RAW_API) || defined(USE_INTERNAL_LIBFFI)) && \
44
- !defined(_WIN32) && !defined(__WIN32__)
45
- # define USE_RAW
46
- #endif
47
42
 
48
- #if (defined(__i386__) || defined(__x86_64__)) && !(defined(_WIN32) || defined(__WIN32__))
49
- # define BYPASS_FFI 1
50
- #endif
51
-
52
43
  typedef union {
53
44
  #ifdef USE_RAW
54
45
  signed int s8, s16, s32;
@@ -0,0 +1,54 @@
1
+ /*
2
+ * Copyright (c) 2009, 2010 Wayne Meissner
3
+ * Copyright (c) 2008-2016, Ruby FFI project contributors
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted provided that the following conditions are met:
8
+ * * Redistributions of source code must retain the above copyright
9
+ * notice, this list of conditions and the following disclaimer.
10
+ * * Redistributions in binary form must reproduce the above copyright
11
+ * notice, this list of conditions and the following disclaimer in the
12
+ * documentation and/or other materials provided with the distribution.
13
+ * * Neither the name of the Ruby FFI project nor the
14
+ * names of its contributors may be used to endorse or promote products
15
+ * derived from this software without specific prior written permission.
16
+ *
17
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
21
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+
29
+ #include <ffi.h>
30
+ #include "Closure.h"
31
+ #include "rbffi.h"
32
+
33
+ Closure* rbffi_Closure_Alloc(void)
34
+ {
35
+ Closure *self;
36
+
37
+ self = xmalloc(sizeof(Closure));
38
+ self->libffi_closure = ffi_closure_alloc(sizeof(ffi_closure), &self->libffi_trampoline);
39
+ if (!self->libffi_closure) {
40
+ return NULL;
41
+ }
42
+
43
+ return self;
44
+ }
45
+
46
+ void rbffi_Closure_Free(Closure *self)
47
+ {
48
+ ffi_closure_free(self->libffi_closure);
49
+ free(self);
50
+ }
51
+
52
+ void rbffi_Closure_Init(VALUE moduleFFI)
53
+ {
54
+ }
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Copyright (c) 2009, 2010 Wayne Meissner
3
- * Copyright (c) 2008-2013, Ruby FFI project contributors
3
+ * Copyright (c) 2008-2016, Ruby FFI project contributors
4
4
  * All rights reserved.
5
5
  *
6
6
  * Redistribution and use in source and binary forms, with or without
@@ -26,32 +26,22 @@
26
26
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
27
  */
28
28
 
29
- #ifndef RUBYFFI_CLOSUREPOOL_H
30
- #define RUBYFFI_CLOSUREPOOL_H
29
+ #ifndef RUBYFFI_CLOSURE_H
30
+ #define RUBYFFI_CLOSURE_H
31
31
 
32
- typedef struct ClosurePool_ ClosurePool;
33
- typedef struct Closure_ Closure;
32
+ #include <ruby.h>
34
33
 
35
- struct Closure_ {
36
- void* info; /* opaque handle for storing closure-instance specific data */
37
- void* function; /* closure-instance specific function, called by custom trampoline */
38
- void* code; /* The native trampoline code location */
39
- struct ClosurePool_* pool;
40
- Closure* next;
41
- };
34
+ typedef struct Closure_ {
35
+ void* info; /* Data to pass when calling */
36
+ void* function; /* Function to call */
37
+ void* libffi_trampoline; /* Calls .function */
38
+ void *libffi_closure; /* Allocates .libffi_trampoline */
39
+ } Closure;
42
40
 
43
- void rbffi_ClosurePool_Init(VALUE module);
44
-
45
- ClosurePool* rbffi_ClosurePool_New(int closureSize,
46
- bool (*prep)(void* ctx, void *code, Closure* closure, char* errbuf, size_t errbufsize),
47
- void* ctx);
48
-
49
- void rbffi_ClosurePool_Free(ClosurePool *);
50
-
51
- Closure* rbffi_Closure_Alloc(ClosurePool *);
41
+ Closure* rbffi_Closure_Alloc();
52
42
  void rbffi_Closure_Free(Closure *);
53
43
 
54
- void* rbffi_Closure_GetCodeAddress(Closure *);
44
+ void rbffi_Closure_Init(VALUE ffiModule);
55
45
 
56
- #endif /* RUBYFFI_CLOSUREPOOL_H */
46
+ #endif /* RUBYFFI_CLOSURE_H */
57
47
 
data/ext/ffi_c/Function.c CHANGED
@@ -47,6 +47,9 @@
47
47
  # endif
48
48
  #endif
49
49
  #include <ruby.h>
50
+ #if defined(HAVE_RUBY_THREAD_H)
51
+ #include <ruby/thread.h>
52
+ #endif
50
53
 
51
54
  #include <ffi.h>
52
55
  #if defined(HAVE_NATIVETHREAD) && !defined(_WIN32)
@@ -64,7 +67,7 @@
64
67
  #include "Type.h"
65
68
  #include "LastError.h"
66
69
  #include "Call.h"
67
- #include "ClosurePool.h"
70
+ #include "Closure.h"
68
71
  #include "MappedType.h"
69
72
  #include "Thread.h"
70
73
  #include "LongDouble.h"
@@ -297,6 +300,7 @@ static VALUE
297
300
  function_init(VALUE self, VALUE rbFunctionInfo, VALUE rbProc)
298
301
  {
299
302
  Function* fn = NULL;
303
+ ffi_status ffiStatus;
300
304
 
301
305
  Data_Get_Struct(self, Function, fn);
302
306
 
@@ -311,13 +315,6 @@ function_init(VALUE self, VALUE rbFunctionInfo, VALUE rbProc)
311
315
  fn->base.rbParent = rbProc;
312
316
 
313
317
  } else if (rb_obj_is_kind_of(rbProc, rb_cProc) || rb_respond_to(rbProc, id_call)) {
314
- if (fn->info->closurePool == NULL) {
315
- fn->info->closurePool = rbffi_ClosurePool_New(sizeof(ffi_closure), callback_prep, fn->info);
316
- if (fn->info->closurePool == NULL) {
317
- rb_raise(rb_eNoMemError, "failed to create closure pool");
318
- }
319
- }
320
-
321
318
  #if defined(DEFER_ASYNC_CALLBACK)
322
319
  if (async_cb_thread == Qnil) {
323
320
  #if !(defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)) && defined(_WIN32)
@@ -332,10 +329,22 @@ function_init(VALUE self, VALUE rbFunctionInfo, VALUE rbProc)
332
329
 
333
330
  #endif
334
331
 
335
- fn->closure = rbffi_Closure_Alloc(fn->info->closurePool);
332
+ fn->closure = rbffi_Closure_Alloc();
336
333
  fn->closure->info = fn;
337
- fn->base.memory.address = fn->closure->code;
334
+
335
+ ffiStatus = ffi_prep_closure_loc(fn->closure->libffi_closure,
336
+ &fn->info->ffi_cif, /* callback signature */
337
+ callback_invoke,
338
+ fn->closure, /* user_data for callback_invoke */
339
+ fn->closure->libffi_trampoline);
340
+ if (ffiStatus != FFI_OK) {
341
+ rb_raise(rb_eRuntimeError, "ffi_prep_closure_loc in function_init failed. status=%#x",
342
+ ffiStatus);
343
+ }
344
+
345
+ fn->base.memory.address = fn->closure->libffi_trampoline;
338
346
  fn->base.memory.size = sizeof(*fn->closure);
347
+
339
348
  fn->autorelease = true;
340
349
 
341
350
  } else {
@@ -548,7 +557,7 @@ struct async_wait {
548
557
  bool stop;
549
558
  };
550
559
 
551
- static VALUE async_cb_wait(void *);
560
+ static void * async_cb_wait(void *);
552
561
  static void async_cb_stop(void *);
553
562
 
554
563
  #if defined(HAVE_RB_THREAD_BLOCKING_REGION) || defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)
@@ -637,7 +646,7 @@ async_cb_event(void* unused)
637
646
  #endif
638
647
 
639
648
  #ifdef _WIN32
640
- static VALUE
649
+ static void *
641
650
  async_cb_wait(void *data)
642
651
  {
643
652
  struct async_wait* w = (struct async_wait *) data;
@@ -659,7 +668,7 @@ async_cb_wait(void *data)
659
668
 
660
669
  LeaveCriticalSection(&async_cb_lock);
661
670
 
662
- return Qnil;
671
+ return NULL;
663
672
  }
664
673
 
665
674
  static void
@@ -674,7 +683,7 @@ async_cb_stop(void *data)
674
683
  }
675
684
 
676
685
  #else
677
- static VALUE
686
+ static void *
678
687
  async_cb_wait(void *data)
679
688
  {
680
689
  struct async_wait* w = (struct async_wait *) data;
@@ -694,7 +703,7 @@ async_cb_wait(void *data)
694
703
 
695
704
  pthread_mutex_unlock(&async_cb_mutex);
696
705
 
697
- return Qnil;
706
+ return NULL;
698
707
  }
699
708
 
700
709
  static void
@@ -939,21 +948,6 @@ save_callback_exception(void* data, VALUE exc)
939
948
  return Qnil;
940
949
  }
941
950
 
942
- static bool
943
- callback_prep(void* ctx, void* code, Closure* closure, char* errmsg, size_t errmsgsize)
944
- {
945
- FunctionType* fnInfo = (FunctionType *) ctx;
946
- ffi_status ffiStatus;
947
-
948
- ffiStatus = ffi_prep_closure(code, &fnInfo->ffi_cif, callback_invoke, closure);
949
- if (ffiStatus != FFI_OK) {
950
- snprintf(errmsg, errmsgsize, "ffi_prep_closure failed. status=%#x", ffiStatus);
951
- return false;
952
- }
953
-
954
- return true;
955
- }
956
-
957
951
  void
958
952
  rbffi_Function_Init(VALUE moduleFFI)
959
953
  {
data/ext/ffi_c/Function.h CHANGED
@@ -46,7 +46,7 @@ typedef struct FunctionType_ FunctionType;
46
46
 
47
47
  #include "Type.h"
48
48
  #include "Call.h"
49
- #include "ClosurePool.h"
49
+ #include "Closure.h"
50
50
 
51
51
  struct FunctionType_ {
52
52
  Type type; /* The native type of a FunctionInfo object */
@@ -60,7 +60,6 @@ struct FunctionType_ {
60
60
  ffi_type** ffiParameterTypes;
61
61
  ffi_cif ffi_cif;
62
62
  Invoker invoke;
63
- ClosurePool* closurePool;
64
63
  int parameterCount;
65
64
  int flags;
66
65
  ffi_abi abi;