ffi 1.9.18 → 1.9.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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;