Hello community, here is the log from the commit of package rubygem-ffi for openSUSE:Factory checked in at 2015-03-19 21:17:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rubygem-ffi (Old) and /work/SRC/openSUSE:Factory/.rubygem-ffi.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-ffi" Changes: -------- --- /work/SRC/openSUSE:Factory/rubygem-ffi/rubygem-ffi.changes 2014-11-24 11:18:39.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.rubygem-ffi.new/rubygem-ffi.changes 2015-03-19 21:17:26.000000000 +0100 @@ -1,0 +2,5 @@ +Wed Mar 18 15:35:36 UTC 2015 - co...@suse.com + +- updated to version 1.9.8, no changelog + +------------------------------------------------------------------- Old: ---- ffi-1.9.6.gem New: ---- ffi-1.9.8.gem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rubygem-ffi.spec ++++++ --- /var/tmp/diff_new_pack.d42MU9/_old 2015-03-19 21:17:26.000000000 +0100 +++ /var/tmp/diff_new_pack.d42MU9/_new 2015-03-19 21:17:26.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package rubygem-ffi # -# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -24,7 +24,7 @@ # Name: rubygem-ffi -Version: 1.9.6 +Version: 1.9.8 Release: 0 %define mod_name ffi %define mod_full_name %{mod_name}-%{version} ++++++ ffi-1.9.6.gem -> ffi-1.9.8.gem ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/README.md new/README.md --- old/README.md 2014-10-09 19:09:37.000000000 +0200 +++ new/README.md 2015-03-15 03:46:02.000000000 +0100 @@ -63,7 +63,7 @@ ## Credits -The following people have submitted code, bug reports, or otherwide contributed to the success of this project: +The following people have submitted code, bug reports, or otherwise contributed to the success of this project: * Alban Peignier <alban.peign...@free.fr> * Aman Gupta <a...@tmm1.net> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Rakefile new/Rakefile --- old/Rakefile 2014-10-09 19:09:37.000000000 +0200 +++ new/Rakefile 2015-03-15 03:46:02.000000000 +0100 @@ -82,8 +82,8 @@ TEST_DEPS = [ LIBTEST ] if RUBY_PLATFORM == "java" desc "Run all specs" - task :specs => TEST_DEPS do - sh %{#{Gem.ruby} -w -S rspec #{Dir["spec/ffi/*_spec.rb"].join(" ")} -fs --color} + task :specs, [:options] => TEST_DEPS do |t, args| + sh %{#{Gem.ruby} -w -S rspec #{args.options || Dir["spec/ffi/*_spec.rb"].join(" ")} -fs --color} end desc "Run rubinius specs" task :rbxspecs => TEST_DEPS do @@ -92,9 +92,9 @@ else TEST_DEPS.unshift :compile desc "Run all specs" - task :specs => TEST_DEPS do + task :specs, [:options] => TEST_DEPS do |t, args| ENV["MRI_FFI"] = "1" - sh %{#{Gem.ruby} -w -Ilib -I#{BUILD_EXT_DIR} -S rspec #{Dir["spec/ffi/*_spec.rb"].join(" ")} -fs --color} + sh %{#{Gem.ruby} -w -Ilib -I#{BUILD_EXT_DIR} -S rspec #{args.options || Dir["spec/ffi/*_spec.rb"].join(" ")} -fs --color} end desc "Run rubinius specs" task :rbxspecs => TEST_DEPS do @@ -187,21 +187,21 @@ task 'gem:win32' => ['gem:win32-x64', 'gem:win32-i386'] - task 'gem:win32-x86' do - sh("rake cross native:i386-mingw32 gem RUBY_CC_VERSION='1.8.7:1.9.3:2.0.0:2.1.3'") || raise("win32-i386 build failed!") + task 'gem:win32-i386' do + sh("rake cross native:i386-mingw32 gem RUBY_CC_VERSION='1.8.7:1.9.3:2.0.0:2.1.5:2.2.1'") || raise("win32-i386 build failed!") end task 'gem:win32-x64' do - sh("rake cross native:x64-mingw32 gem RUBY_CC_VERSION='2.0.0:2.1.3'") || raise("win32-x64 build failed!") + sh("rake cross native:x64-mingw32 gem RUBY_CC_VERSION='2.0.0:2.1.5:2.2.1'") || raise("win32-x64 build failed!") end - (ENV['RUBY_CC_VERSION'] || '1.8.7:1.9.3:2.0.0:2.1.3' ).to_s.split(':').each do |ruby_version| + (ENV['RUBY_CC_VERSION'] || '1.8.7:1.9.3:2.0.0:2.1.5:2.2.1' ).to_s.split(':').each do |ruby_version| task "copy:ffi_c:i386-mingw32:#{ruby_version}" do |t| sh "i686-w64-mingw32-strip -S #{BUILD_DIR}/i386-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/ffi_c.so" end end - (ENV['RUBY_CC_VERSION'] || '2.0.0:2.1.3' ).to_s.split(':').each do |ruby_version| + (ENV['RUBY_CC_VERSION'] || '2.0.0:2.1.5:2.2.1' ).to_s.split(':').each do |ruby_version| task "copy:ffi_c:x64-mingw32:#{ruby_version}" do |t| sh "x86_64-w64-mingw32-strip -S #{BUILD_DIR}/x64-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/ffi_c.so" end Files old/checksums.yaml.gz and new/checksums.yaml.gz differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/Call.c new/ext/ffi_c/Call.c --- old/ext/ffi_c/Call.c 2014-10-09 19:09:37.000000000 +0200 +++ new/ext/ffi_c/Call.c 2015-03-15 03:46:02.000000000 +0100 @@ -126,19 +126,30 @@ switch (paramType->nativeType) { case NATIVE_INT8: - param->s8 = NUM2INT(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + param->s8 = NUM2INT(value); + } else { + param->s8 = NUM2INT(argv[argidx]); + } + ++argidx; ADJ(param, INT8); break; - case NATIVE_INT16: - param->s16 = NUM2INT(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + param->s16 = NUM2INT(value); + + } else { + param->s16 = NUM2INT(argv[argidx]); + } + ++argidx; ADJ(param, INT16); break; - case NATIVE_INT32: if (unlikely(type == T_SYMBOL && enums != Qnil)) { VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); @@ -152,7 +163,6 @@ ADJ(param, INT32); break; - case NATIVE_BOOL: if (type != T_TRUE && type != T_FALSE) { rb_raise(rb_eTypeError, "wrong argument type (expected a boolean parameter)"); @@ -161,67 +171,122 @@ ADJ(param, INT8); break; - case NATIVE_UINT8: - param->u8 = NUM2UINT(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + param->u8 = NUM2UINT(value); + } else { + param->u8 = NUM2UINT(argv[argidx]); + } + ADJ(param, INT8); ++argidx; break; - case NATIVE_UINT16: - param->u16 = NUM2UINT(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + param->u16 = NUM2UINT(value); + } else { + param->u16 = NUM2UINT(argv[argidx]); + } + ADJ(param, INT16); ++argidx; break; - case NATIVE_UINT32: - param->u32 = NUM2UINT(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + param->u32 = NUM2UINT(value); + } else { + param->u32 = NUM2UINT(argv[argidx]); + } + ADJ(param, INT32); ++argidx; break; - case NATIVE_INT64: - param->i64 = NUM2LL(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + param->i64 = NUM2LL(value); + } else { + param->i64 = NUM2LL(argv[argidx]); + } + ADJ(param, INT64); ++argidx; break; - case NATIVE_UINT64: - param->u64 = NUM2ULL(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + param->u64 = NUM2ULL(value); + } else { + param->u64 = NUM2ULL(argv[argidx]); + } + ADJ(param, INT64); ++argidx; break; case NATIVE_LONG: - *(ffi_sarg *) param = NUM2LONG(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + *(ffi_sarg *) param = NUM2LONG(value); + } else { + *(ffi_sarg *) param = NUM2LONG(argv[argidx]); + } + ADJ(param, LONG); ++argidx; break; case NATIVE_ULONG: - *(ffi_arg *) param = NUM2ULONG(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + *(ffi_arg *) param = NUM2ULONG(value); + } else { + *(ffi_arg *) param = NUM2ULONG(argv[argidx]); + } + ADJ(param, LONG); ++argidx; break; case NATIVE_FLOAT32: - param->f32 = (float) NUM2DBL(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + param->f32 = (float) NUM2DBL(value); + } else { + param->f32 = (float) NUM2DBL(argv[argidx]); + } + ADJ(param, FLOAT32); ++argidx; break; case NATIVE_FLOAT64: - param->f64 = NUM2DBL(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + param->f64 = NUM2DBL(value); + } else { + param->f64 = NUM2DBL(argv[argidx]); + } + ADJ(param, FLOAT64); ++argidx; break; case NATIVE_LONGDOUBLE: - param->ld = rbffi_num2longdouble(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + param->ld = rbffi_num2longdouble(value); + } else { + param->ld = rbffi_num2longdouble(argv[argidx]); + } + ADJ(param, LONGDOUBLE); ++argidx; break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/Variadic.c new/ext/ffi_c/Variadic.c --- old/ext/ffi_c/Variadic.c 2014-10-09 19:09:37.000000000 +0200 +++ new/ext/ffi_c/Variadic.c 2015-03-15 03:46:02.000000000 +0100 @@ -170,7 +170,7 @@ ffi_type* ffiReturnType; Type** paramTypes; VALUE* argv; - int paramCount = 0, i; + int paramCount = 0, fixedCount = 0, i; ffi_status ffiStatus; rbffi_frame_t frame = { 0 }; @@ -229,8 +229,12 @@ if (ffiReturnType == NULL) { rb_raise(rb_eArgError, "Invalid return type"); } + + /*Get the number of fixed args from @fixed array*/ + fixedCount = RARRAY_LEN(rb_iv_get(self, "@fixed")); + #ifdef HAVE_FFI_PREP_CIF_VAR - ffiStatus = ffi_prep_cif_var(&cif, invoker->abi, paramCount, paramCount, ffiReturnType, ffiParamTypes); + ffiStatus = ffi_prep_cif_var(&cif, invoker->abi, fixedCount, paramCount, ffiReturnType, ffiParamTypes); #else ffiStatus = ffi_prep_cif(&cif, invoker->abi, paramCount, ffiReturnType, ffiParamTypes); #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/ffi_c/libffi/src/x86/win32.S new/ext/ffi_c/libffi/src/x86/win32.S --- old/ext/ffi_c/libffi/src/x86/win32.S 2014-10-09 19:09:37.000000000 +0200 +++ new/ext/ffi_c/libffi/src/x86/win32.S 2015-03-15 03:46:02.000000000 +0100 @@ -156,7 +156,7 @@ ret ffi_call_win32 ENDP -ffi_closure_SYSV PROC NEAR FORCEFRAME +ffi_closure_SYSV PROC NEAR <FORCEFRAME> ;; the ffi_closure ctx is passed in eax by the trampoline. sub esp, 40 @@ -314,7 +314,7 @@ #endif /* !FFI_NO_RAW_API */ -ffi_closure_STDCALL PROC NEAR FORCEFRAME +ffi_closure_STDCALL PROC NEAR <FORCEFRAME> ;; the ffi_closure ctx is passed in eax by the trampoline. sub esp, 40 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ffi.gemspec new/ffi.gemspec --- old/ffi.gemspec 2014-10-09 19:09:37.000000000 +0200 +++ new/ffi.gemspec 2015-03-15 03:46:02.000000000 +0100 @@ -8,7 +8,7 @@ s.homepage = 'http://wiki.github.com/ffi/ffi' s.summary = 'Ruby FFI' s.description = 'Ruby FFI library' - s.files = %w(ffi.gemspec LICENSE COPYING README.md Rakefile) + Dir.glob("{ext,gen,lib,spec,libtest}/**/*").reject { |f| f =~ /(lib\/[12]\.[089]|\.so$|\.bundle|\.dylib$)/ } + s.files = %w(ffi.gemspec LICENSE COPYING README.md Rakefile) + Dir.glob("{ext,gen,lib,spec,libtest}/**/*").reject { |f| f =~ /(lib\/[12]\.[089]|\.s?[ao]$|\.bundle|\.dylib$)/ } s.extensions << 'ext/ffi_c/extconf.rb' s.has_rdoc = false s.rdoc_options = %w[--exclude=ext/ffi_c/.*\.o$ --exclude=ffi_c\.(bundle|so)$] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi/enum.rb new/lib/ffi/enum.rb --- old/lib/ffi/enum.rb 2014-10-09 19:09:37.000000000 +0200 +++ new/lib/ffi/enum.rb 2015-03-15 03:46:02.000000000 +0100 @@ -86,10 +86,16 @@ attr_reader :tag - # @param [nil, Enumerable] info - # @param tag enum tag - def initialize(info, tag=nil) - @tag = tag + # @overload initialize(info, tag=nil) + # @param [nil, Enumerable] info + # @param [nil, Symbol] tag enum tag + # @overload initialize(native_type, info, tag=nil) + # @param [FFI::Type] native_type Native type for new Enum + # @param [nil, Enumerable] info symbols and values for new Enum + # @param [nil, Symbol] tag name of new Enum + def initialize(*args) + @native_type = args.shift if args.first.kind_of?(FFI::Type) + info, @tag = *args @kv_map = Hash.new unless info.nil? last_cst = nil @@ -144,9 +150,9 @@ alias to_hash symbol_map # Get native type of Enum - # @return [Type::INT] + # @return [Type] def native_type - Type::INT + @native_type || Type::INT end # @param [Symbol, Integer, #to_int] val diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi/library.rb new/lib/ffi/library.rb --- old/lib/ffi/library.rb 2014-10-09 19:09:37.000000000 +0200 +++ new/lib/ffi/library.rb 2015-03-15 03:46:02.000000000 +0100 @@ -444,9 +444,29 @@ # @example # enum [:zero, :one, :two] # unnamed enum, equivalent to above example # @param [Array] values values for enum + # @overload enum(native_type, name, values) + # Create a named enum and specify the native type. + # @example + # enum FFI::Type::UINT64, :foo, [:zero, :one, :two] # named enum + # @param [FFI::Type] native_type native type for new enum + # @param [Symbol] name name for new enum + # @param [Array] values values for enum + # @overload enum(native_type, *args) + # Create an unnamed enum and specify the native type. + # @example + # enum FFI::Type::UINT64, :zero, :one, :two # unnamed enum + # @param [FFI::Type] native_type native type for new enum + # @param args values for enum + # @overload enum(native_type, values) + # Create an unnamed enum and specify the native type. + # @example + # enum Type::UINT64, [:zero, :one, :two] # unnamed enum, equivalent to above example + # @param [FFI::Type] native_type native type for new enum + # @param [Array] values values for enum # @return [FFI::Enum] # Create a new {FFI::Enum}. def enum(*args) + native_type = args.first.kind_of?(FFI::Type) ? args.shift : nil name, values = if args[0].kind_of?(Symbol) && args[1].kind_of?(Array) [ args[0], args[1] ] elsif args[0].kind_of?(Array) @@ -455,7 +475,7 @@ [ nil, args ] end @ffi_enums = FFI::Enums.new unless defined?(@ffi_enums) - @ffi_enums << (e = FFI::Enum.new(values, name)) + @ffi_enums << (e = native_type ? FFI::Enum.new(native_type, values, name) : FFI::Enum.new(values, name)) # If called as enum :foo, [ :zero, :one, :two ], add a typedef alias typedef(e, name) if name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi/platform/aarch64-linux/types.conf new/lib/ffi/platform/aarch64-linux/types.conf --- old/lib/ffi/platform/aarch64-linux/types.conf 1970-01-01 01:00:00.000000000 +0100 +++ new/lib/ffi/platform/aarch64-linux/types.conf 2015-03-15 03:46:02.000000000 +0100 @@ -0,0 +1,104 @@ +rbx.platform.typedef.__u_char = uchar +rbx.platform.typedef.__u_short = ushort +rbx.platform.typedef.__u_int = uint +rbx.platform.typedef.__u_long = ulong +rbx.platform.typedef.__int8_t = char +rbx.platform.typedef.__uint8_t = uchar +rbx.platform.typedef.__int16_t = short +rbx.platform.typedef.__uint16_t = ushort +rbx.platform.typedef.__int32_t = int +rbx.platform.typedef.__uint32_t = uint +rbx.platform.typedef.__int64_t = long +rbx.platform.typedef.__uint64_t = ulong +rbx.platform.typedef.__quad_t = long +rbx.platform.typedef.__u_quad_t = ulong +rbx.platform.typedef.__dev_t = ulong +rbx.platform.typedef.__uid_t = uint +rbx.platform.typedef.__gid_t = uint +rbx.platform.typedef.__ino_t = ulong +rbx.platform.typedef.__ino64_t = ulong +rbx.platform.typedef.__mode_t = uint +rbx.platform.typedef.__nlink_t = uint +rbx.platform.typedef.__off_t = long +rbx.platform.typedef.__off64_t = long +rbx.platform.typedef.__pid_t = int +rbx.platform.typedef.__clock_t = long +rbx.platform.typedef.__rlim_t = ulong +rbx.platform.typedef.__rlim64_t = ulong +rbx.platform.typedef.__id_t = uint +rbx.platform.typedef.__time_t = long +rbx.platform.typedef.__useconds_t = uint +rbx.platform.typedef.__suseconds_t = long +rbx.platform.typedef.__daddr_t = int +rbx.platform.typedef.__key_t = int +rbx.platform.typedef.__clockid_t = int +rbx.platform.typedef.__timer_t = pointer +rbx.platform.typedef.__blksize_t = int +rbx.platform.typedef.__blkcnt_t = long +rbx.platform.typedef.__blkcnt64_t = long +rbx.platform.typedef.__fsblkcnt_t = ulong +rbx.platform.typedef.__fsblkcnt64_t = ulong +rbx.platform.typedef.__fsfilcnt_t = ulong +rbx.platform.typedef.__fsfilcnt64_t = ulong +rbx.platform.typedef.__fsword_t = long +rbx.platform.typedef.__ssize_t = long +rbx.platform.typedef.__syscall_slong_t = long +rbx.platform.typedef.__syscall_ulong_t = ulong +rbx.platform.typedef.__loff_t = long +rbx.platform.typedef.*__qaddr_t = long +rbx.platform.typedef.*__caddr_t = char +rbx.platform.typedef.__intptr_t = long +rbx.platform.typedef.__socklen_t = uint +rbx.platform.typedef.u_char = uchar +rbx.platform.typedef.u_short = ushort +rbx.platform.typedef.u_int = uint +rbx.platform.typedef.u_long = ulong +rbx.platform.typedef.quad_t = long +rbx.platform.typedef.u_quad_t = ulong +rbx.platform.typedef.loff_t = long +rbx.platform.typedef.ino_t = ulong +rbx.platform.typedef.dev_t = ulong +rbx.platform.typedef.gid_t = uint +rbx.platform.typedef.mode_t = uint +rbx.platform.typedef.nlink_t = uint +rbx.platform.typedef.uid_t = uint +rbx.platform.typedef.off_t = long +rbx.platform.typedef.pid_t = int +rbx.platform.typedef.id_t = uint +rbx.platform.typedef.ssize_t = long +rbx.platform.typedef.daddr_t = int +rbx.platform.typedef.key_t = int +rbx.platform.typedef.clock_t = long +rbx.platform.typedef.time_t = long +rbx.platform.typedef.clockid_t = int +rbx.platform.typedef.timer_t = pointer +rbx.platform.typedef.size_t = ulong +rbx.platform.typedef.ulong = ulong +rbx.platform.typedef.ushort = ushort +rbx.platform.typedef.uint = uint +rbx.platform.typedef.int8_t = char +rbx.platform.typedef.int16_t = short +rbx.platform.typedef.int32_t = int +rbx.platform.typedef.int64_t = long_long +rbx.platform.typedef.u_int8_t = uchar +rbx.platform.typedef.u_int16_t = ushort +rbx.platform.typedef.u_int32_t = uint +rbx.platform.typedef.u_int64_t = ulong_long +rbx.platform.typedef.register_t = long +rbx.platform.typedef.__sig_atomic_t = int +rbx.platform.typedef.suseconds_t = long +rbx.platform.typedef.__fd_mask = long +rbx.platform.typedef.fd_mask = long +rbx.platform.typedef.blksize_t = int +rbx.platform.typedef.blkcnt_t = long +rbx.platform.typedef.fsblkcnt_t = ulong +rbx.platform.typedef.fsfilcnt_t = ulong +rbx.platform.typedef.pthread_t = ulong +rbx.platform.typedef.pthread_key_t = uint +rbx.platform.typedef.pthread_once_t = int +rbx.platform.typedef.socklen_t = uint +rbx.platform.typedef.sa_family_t = ushort +rbx.platform.typedef.rlim_t = ulong +rbx.platform.typedef.__rlimit_resource_t = int +rbx.platform.typedef.__rusage_who_t = int +rbx.platform.typedef.__priority_which_t = int diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi/platform/mips64el-linux/types.conf new/lib/ffi/platform/mips64el-linux/types.conf --- old/lib/ffi/platform/mips64el-linux/types.conf 1970-01-01 01:00:00.000000000 +0100 +++ new/lib/ffi/platform/mips64el-linux/types.conf 2015-03-15 03:46:02.000000000 +0100 @@ -0,0 +1,104 @@ +rbx.platform.typedef.__u_char = uchar +rbx.platform.typedef.__u_short = ushort +rbx.platform.typedef.__u_int = uint +rbx.platform.typedef.__u_long = ulong +rbx.platform.typedef.__int8_t = char +rbx.platform.typedef.__uint8_t = uchar +rbx.platform.typedef.__int16_t = short +rbx.platform.typedef.__uint16_t = ushort +rbx.platform.typedef.__int32_t = int +rbx.platform.typedef.__uint32_t = uint +rbx.platform.typedef.__int64_t = long +rbx.platform.typedef.__uint64_t = ulong +rbx.platform.typedef.__quad_t = long +rbx.platform.typedef.__u_quad_t = ulong +rbx.platform.typedef.__dev_t = ulong +rbx.platform.typedef.__uid_t = uint +rbx.platform.typedef.__gid_t = uint +rbx.platform.typedef.__ino_t = ulong +rbx.platform.typedef.__ino64_t = ulong +rbx.platform.typedef.__mode_t = uint +rbx.platform.typedef.__nlink_t = ulong +rbx.platform.typedef.__off_t = long +rbx.platform.typedef.__off64_t = long +rbx.platform.typedef.__pid_t = int +rbx.platform.typedef.__clock_t = long +rbx.platform.typedef.__rlim_t = ulong +rbx.platform.typedef.__rlim64_t = ulong +rbx.platform.typedef.__id_t = uint +rbx.platform.typedef.__time_t = long +rbx.platform.typedef.__useconds_t = uint +rbx.platform.typedef.__suseconds_t = long +rbx.platform.typedef.__daddr_t = int +rbx.platform.typedef.__key_t = int +rbx.platform.typedef.__clockid_t = int +rbx.platform.typedef.__timer_t = pointer +rbx.platform.typedef.__blksize_t = long +rbx.platform.typedef.__blkcnt_t = long +rbx.platform.typedef.__blkcnt64_t = long +rbx.platform.typedef.__fsblkcnt_t = ulong +rbx.platform.typedef.__fsblkcnt64_t = ulong +rbx.platform.typedef.__fsfilcnt_t = ulong +rbx.platform.typedef.__fsfilcnt64_t = ulong +rbx.platform.typedef.__fsword_t = long +rbx.platform.typedef.__ssize_t = long +rbx.platform.typedef.__syscall_slong_t = long +rbx.platform.typedef.__syscall_ulong_t = ulong +rbx.platform.typedef.__loff_t = long +rbx.platform.typedef.*__qaddr_t = long +rbx.platform.typedef.*__caddr_t = char +rbx.platform.typedef.__intptr_t = long +rbx.platform.typedef.__socklen_t = uint +rbx.platform.typedef.u_char = uchar +rbx.platform.typedef.u_short = ushort +rbx.platform.typedef.u_int = uint +rbx.platform.typedef.u_long = ulong +rbx.platform.typedef.quad_t = long +rbx.platform.typedef.u_quad_t = ulong +rbx.platform.typedef.loff_t = long +rbx.platform.typedef.ino_t = ulong +rbx.platform.typedef.dev_t = ulong +rbx.platform.typedef.gid_t = uint +rbx.platform.typedef.mode_t = uint +rbx.platform.typedef.nlink_t = ulong +rbx.platform.typedef.uid_t = uint +rbx.platform.typedef.off_t = long +rbx.platform.typedef.pid_t = int +rbx.platform.typedef.id_t = uint +rbx.platform.typedef.ssize_t = long +rbx.platform.typedef.daddr_t = int +rbx.platform.typedef.key_t = int +rbx.platform.typedef.clock_t = long +rbx.platform.typedef.time_t = long +rbx.platform.typedef.clockid_t = int +rbx.platform.typedef.timer_t = pointer +rbx.platform.typedef.size_t = ulong +rbx.platform.typedef.ulong = ulong +rbx.platform.typedef.ushort = ushort +rbx.platform.typedef.uint = uint +rbx.platform.typedef.int8_t = char +rbx.platform.typedef.int16_t = short +rbx.platform.typedef.int32_t = int +rbx.platform.typedef.int64_t = long_long +rbx.platform.typedef.u_int8_t = uchar +rbx.platform.typedef.u_int16_t = ushort +rbx.platform.typedef.u_int32_t = uint +rbx.platform.typedef.u_int64_t = ulong_long +rbx.platform.typedef.register_t = long +rbx.platform.typedef.__sig_atomic_t = int +rbx.platform.typedef.suseconds_t = long +rbx.platform.typedef.__fd_mask = long +rbx.platform.typedef.fd_mask = long +rbx.platform.typedef.blksize_t = long +rbx.platform.typedef.blkcnt_t = long +rbx.platform.typedef.fsblkcnt_t = ulong +rbx.platform.typedef.fsfilcnt_t = ulong +rbx.platform.typedef.pthread_t = ulong +rbx.platform.typedef.pthread_key_t = uint +rbx.platform.typedef.pthread_once_t = int +rbx.platform.typedef.socklen_t = uint +rbx.platform.typedef.sa_family_t = ushort +rbx.platform.typedef.rlim_t = ulong +rbx.platform.typedef.__rlimit_resource_t = int +rbx.platform.typedef.__rusage_who_t = int +rbx.platform.typedef.__priority_which_t = int diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi/platform/powerpc64-linux/types.conf new/lib/ffi/platform/powerpc64-linux/types.conf --- old/lib/ffi/platform/powerpc64-linux/types.conf 1970-01-01 01:00:00.000000000 +0100 +++ new/lib/ffi/platform/powerpc64-linux/types.conf 2015-03-15 03:46:02.000000000 +0100 @@ -0,0 +1,104 @@ +rbx.platform.typedef.__u_char = uchar +rbx.platform.typedef.__u_short = ushort +rbx.platform.typedef.__u_int = uint +rbx.platform.typedef.__u_long = ulong +rbx.platform.typedef.__int8_t = char +rbx.platform.typedef.__uint8_t = uchar +rbx.platform.typedef.__int16_t = short +rbx.platform.typedef.__uint16_t = ushort +rbx.platform.typedef.__int32_t = int +rbx.platform.typedef.__uint32_t = uint +rbx.platform.typedef.__int64_t = long +rbx.platform.typedef.__uint64_t = ulong +rbx.platform.typedef.__quad_t = long +rbx.platform.typedef.__u_quad_t = ulong +rbx.platform.typedef.__dev_t = ulong +rbx.platform.typedef.__uid_t = uint +rbx.platform.typedef.__gid_t = uint +rbx.platform.typedef.__ino_t = ulong +rbx.platform.typedef.__ino64_t = ulong +rbx.platform.typedef.__mode_t = uint +rbx.platform.typedef.__nlink_t = ulong +rbx.platform.typedef.__off_t = long +rbx.platform.typedef.__off64_t = long +rbx.platform.typedef.__pid_t = int +rbx.platform.typedef.__clock_t = long +rbx.platform.typedef.__rlim_t = ulong +rbx.platform.typedef.__rlim64_t = ulong +rbx.platform.typedef.__id_t = uint +rbx.platform.typedef.__time_t = long +rbx.platform.typedef.__useconds_t = uint +rbx.platform.typedef.__suseconds_t = long +rbx.platform.typedef.__daddr_t = int +rbx.platform.typedef.__key_t = int +rbx.platform.typedef.__clockid_t = int +rbx.platform.typedef.__timer_t = pointer +rbx.platform.typedef.__blksize_t = long +rbx.platform.typedef.__blkcnt_t = long +rbx.platform.typedef.__blkcnt64_t = long +rbx.platform.typedef.__fsblkcnt_t = ulong +rbx.platform.typedef.__fsblkcnt64_t = ulong +rbx.platform.typedef.__fsfilcnt_t = ulong +rbx.platform.typedef.__fsfilcnt64_t = ulong +rbx.platform.typedef.__fsword_t = long +rbx.platform.typedef.__ssize_t = long +rbx.platform.typedef.__syscall_slong_t = long +rbx.platform.typedef.__syscall_ulong_t = ulong +rbx.platform.typedef.__loff_t = long +rbx.platform.typedef.*__qaddr_t = long +rbx.platform.typedef.*__caddr_t = char +rbx.platform.typedef.__intptr_t = long +rbx.platform.typedef.__socklen_t = uint +rbx.platform.typedef.u_char = uchar +rbx.platform.typedef.u_short = ushort +rbx.platform.typedef.u_int = uint +rbx.platform.typedef.u_long = ulong +rbx.platform.typedef.quad_t = long +rbx.platform.typedef.u_quad_t = ulong +rbx.platform.typedef.loff_t = long +rbx.platform.typedef.ino_t = ulong +rbx.platform.typedef.dev_t = ulong +rbx.platform.typedef.gid_t = uint +rbx.platform.typedef.mode_t = uint +rbx.platform.typedef.nlink_t = ulong +rbx.platform.typedef.uid_t = uint +rbx.platform.typedef.off_t = long +rbx.platform.typedef.pid_t = int +rbx.platform.typedef.id_t = uint +rbx.platform.typedef.ssize_t = long +rbx.platform.typedef.daddr_t = int +rbx.platform.typedef.key_t = int +rbx.platform.typedef.clock_t = long +rbx.platform.typedef.time_t = long +rbx.platform.typedef.clockid_t = int +rbx.platform.typedef.timer_t = pointer +rbx.platform.typedef.size_t = ulong +rbx.platform.typedef.ulong = ulong +rbx.platform.typedef.ushort = ushort +rbx.platform.typedef.uint = uint +rbx.platform.typedef.int8_t = char +rbx.platform.typedef.int16_t = short +rbx.platform.typedef.int32_t = int +rbx.platform.typedef.int64_t = long_long +rbx.platform.typedef.u_int8_t = uchar +rbx.platform.typedef.u_int16_t = ushort +rbx.platform.typedef.u_int32_t = uint +rbx.platform.typedef.u_int64_t = ulong_long +rbx.platform.typedef.register_t = long +rbx.platform.typedef.__sig_atomic_t = int +rbx.platform.typedef.suseconds_t = long +rbx.platform.typedef.__fd_mask = long +rbx.platform.typedef.fd_mask = long +rbx.platform.typedef.blksize_t = long +rbx.platform.typedef.blkcnt_t = long +rbx.platform.typedef.fsblkcnt_t = ulong +rbx.platform.typedef.fsfilcnt_t = ulong +rbx.platform.typedef.pthread_t = ulong +rbx.platform.typedef.pthread_key_t = uint +rbx.platform.typedef.pthread_once_t = int +rbx.platform.typedef.socklen_t = uint +rbx.platform.typedef.sa_family_t = ushort +rbx.platform.typedef.rlim_t = ulong +rbx.platform.typedef.__rlimit_resource_t = int +rbx.platform.typedef.__rusage_who_t = int +rbx.platform.typedef.__priority_which_t = int diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi/platform/x86_64-darwin/types.conf new/lib/ffi/platform/x86_64-darwin/types.conf --- old/lib/ffi/platform/x86_64-darwin/types.conf 2014-10-09 19:09:37.000000000 +0200 +++ new/lib/ffi/platform/x86_64-darwin/types.conf 2015-03-15 03:46:02.000000000 +0100 @@ -19,12 +19,12 @@ rbx.platform.typedef.__darwin_ssize_t = long rbx.platform.typedef.__darwin_time_t = long rbx.platform.typedef.int8_t = char -rbx.platform.typedef.u_int8_t = uchar rbx.platform.typedef.int16_t = short -rbx.platform.typedef.u_int16_t = ushort rbx.platform.typedef.int32_t = int -rbx.platform.typedef.u_int32_t = uint rbx.platform.typedef.int64_t = long_long +rbx.platform.typedef.u_int8_t = uchar +rbx.platform.typedef.u_int16_t = ushort +rbx.platform.typedef.u_int32_t = uint rbx.platform.typedef.u_int64_t = ulong_long rbx.platform.typedef.register_t = long_long rbx.platform.typedef.intptr_t = long @@ -35,6 +35,7 @@ rbx.platform.typedef.user_long_t = long_long rbx.platform.typedef.user_ulong_t = ulong_long rbx.platform.typedef.user_time_t = long_long +rbx.platform.typedef.user_off_t = long_long rbx.platform.typedef.syscall_arg_t = ulong_long rbx.platform.typedef.__darwin_blkcnt_t = long_long rbx.platform.typedef.__darwin_blksize_t = int @@ -50,12 +51,13 @@ rbx.platform.typedef.__darwin_mode_t = ushort rbx.platform.typedef.__darwin_off_t = long_long rbx.platform.typedef.__darwin_pid_t = int -rbx.platform.typedef.__darwin_pthread_key_t = ulong rbx.platform.typedef.__darwin_sigset_t = uint rbx.platform.typedef.__darwin_suseconds_t = int rbx.platform.typedef.__darwin_uid_t = uint rbx.platform.typedef.__darwin_useconds_t = uint rbx.platform.typedef.__darwin_uuid_t[16] = uchar +rbx.platform.typedef.__darwin_uuid_string_t[37] = char +rbx.platform.typedef.__darwin_pthread_key_t = ulong rbx.platform.typedef.u_char = uchar rbx.platform.typedef.u_short = ushort rbx.platform.typedef.u_int = uint @@ -91,10 +93,34 @@ rbx.platform.typedef.time_t = long rbx.platform.typedef.useconds_t = uint rbx.platform.typedef.suseconds_t = int +rbx.platform.typedef.rsize_t = ulong +rbx.platform.typedef.errno_t = int rbx.platform.typedef.fd_mask = int rbx.platform.typedef.pthread_key_t = ulong rbx.platform.typedef.fsblkcnt_t = uint rbx.platform.typedef.fsfilcnt_t = uint rbx.platform.typedef.sa_family_t = uchar rbx.platform.typedef.socklen_t = uint +rbx.platform.typedef.uint8_t = uchar +rbx.platform.typedef.uint16_t = ushort +rbx.platform.typedef.uint32_t = uint +rbx.platform.typedef.uint64_t = ulong_long +rbx.platform.typedef.int_least8_t = char +rbx.platform.typedef.int_least16_t = short +rbx.platform.typedef.int_least32_t = int +rbx.platform.typedef.int_least64_t = long_long +rbx.platform.typedef.uint_least8_t = uchar +rbx.platform.typedef.uint_least16_t = ushort +rbx.platform.typedef.uint_least32_t = uint +rbx.platform.typedef.uint_least64_t = ulong_long +rbx.platform.typedef.int_fast8_t = char +rbx.platform.typedef.int_fast16_t = short +rbx.platform.typedef.int_fast32_t = int +rbx.platform.typedef.int_fast64_t = long_long +rbx.platform.typedef.uint_fast8_t = uchar +rbx.platform.typedef.uint_fast16_t = ushort +rbx.platform.typedef.uint_fast32_t = uint +rbx.platform.typedef.uint_fast64_t = ulong_long +rbx.platform.typedef.intmax_t = long +rbx.platform.typedef.uintmax_t = ulong rbx.platform.typedef.rlim_t = ulong_long diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi/platform.rb new/lib/ffi/platform.rb --- old/lib/ffi/platform.rb 2014-10-09 19:09:37.000000000 +0200 +++ new/lib/ffi/platform.rb 2015-03-15 03:46:02.000000000 +0100 @@ -59,6 +59,8 @@ "x86_64" when /i?86|x86|i86pc/ "i386" + when /ppc64|powerpc64/ + "powerpc64" when /ppc|powerpc/ "powerpc" else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi/struct.rb new/lib/ffi/struct.rb --- old/lib/ffi/struct.rb 2014-10-09 19:09:37.000000000 +0200 +++ new/lib/ffi/struct.rb 2015-03-15 03:46:02.000000000 +0100 @@ -256,6 +256,12 @@ # :field2 => :pointer, # :field3 => :string # end + # @example Creating a layout with pointers to functions + # class MyFunctionTable < Struct + # layout :function1, callback([:int, :int], :int), + # :function2, callback([:pointer], :void), + # :field3, :string + # end # @note Creating a layout from a hash +spec+ is supported only for Ruby 1.9. def layout(*spec) #raise RuntimeError, "struct layout already defined for #{self.inspect}" if defined?(@layout) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi/version.rb new/lib/ffi/version.rb --- old/lib/ffi/version.rb 2014-10-09 19:09:37.000000000 +0200 +++ new/lib/ffi/version.rb 2015-03-15 03:46:02.000000000 +0100 @@ -1,4 +1,4 @@ module FFI - VERSION = '1.9.6' + VERSION = '1.9.8' end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/ffi.rb new/lib/ffi.rb --- old/lib/ffi.rb 2014-10-09 19:09:37.000000000 +0200 +++ new/lib/ffi.rb 2015-03-15 03:46:02.000000000 +0100 @@ -1,14 +1,16 @@ if !defined?(RUBY_ENGINE) || RUBY_ENGINE == 'ruby' || RUBY_ENGINE == 'rbx' Object.send(:remove_const, :FFI) if defined?(::FFI) begin - if RUBY_VERSION =~ /1.8/ + if RUBY_VERSION =~ /1\.8/ require '1.8/ffi_c' - elsif RUBY_VERSION =~ /1.9/ + elsif RUBY_VERSION =~ /1\.9/ require '1.9/ffi_c' - elsif RUBY_VERSION =~ /2.0/ + elsif RUBY_VERSION =~ /2\.0/ require '2.0/ffi_c' - elsif RUBY_VERSION =~ /2.1/ + elsif RUBY_VERSION =~ /2\.1/ require '2.1/ffi_c' + elsif RUBY_VERSION =~ /2\.2/ + require '2.2/ffi_c' else require 'ffi_c' end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libtest/EnumTest.c new/libtest/EnumTest.c --- old/libtest/EnumTest.c 2014-10-09 19:09:37.000000000 +0200 +++ new/libtest/EnumTest.c 2015-03-15 03:46:02.000000000 +0100 @@ -3,6 +3,7 @@ * * For licensing, see LICENSE.SPECS */ +#include <stdint.h> int test_untagged_enum(int val) { return val; @@ -12,6 +13,22 @@ return val; } +uint8_t test_untagged_nonint_enum(uint8_t val) { + return val; +} + +uint16_t test_tagged_nonint_enum1(uint16_t val) { + return val; +} + +uint32_t test_tagged_nonint_enum2(uint32_t val) { + return val; +} + +uint64_t test_tagged_nonint_enum3(uint64_t val) { + return val; +} + typedef enum {c1, c2, c3, c4} enum_type1; enum_type1 test_tagged_typedef_enum1(enum_type1 val) { return val; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata --- old/metadata 2014-10-09 19:09:37.000000000 +0200 +++ new/metadata 2015-03-15 03:46:02.000000000 +0100 @@ -1,14 +1,14 @@ --- !ruby/object:Gem::Specification name: ffi version: !ruby/object:Gem::Version - version: 1.9.6 + version: 1.9.8 platform: ruby authors: - Wayne Meissner autorequire: bindir: bin cert_chain: [] -date: 2014-10-09 00:00:00.000000000 Z +date: 2015-03-15 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: rake @@ -418,6 +418,7 @@ - lib/ffi/managedstruct.rb - lib/ffi/memorypointer.rb - lib/ffi/platform.rb +- lib/ffi/platform/aarch64-linux/types.conf - lib/ffi/platform/arm-linux/types.conf - lib/ffi/platform/i386-cygwin/types.conf - lib/ffi/platform/i386-darwin/types.conf @@ -430,10 +431,12 @@ - lib/ffi/platform/i386-windows/types.conf - lib/ffi/platform/ia64-linux/types.conf - lib/ffi/platform/mips-linux/types.conf +- lib/ffi/platform/mips64el-linux/types.conf - lib/ffi/platform/mipsel-linux/types.conf - lib/ffi/platform/powerpc-aix/types.conf - lib/ffi/platform/powerpc-darwin/types.conf - lib/ffi/platform/powerpc-linux/types.conf +- lib/ffi/platform/powerpc64-linux/types.conf - lib/ffi/platform/s390-linux/types.conf - lib/ffi/platform/s390x-linux/types.conf - lib/ffi/platform/sparc-linux/types.conf @@ -487,36 +490,21 @@ - spec/ffi/errno_spec.rb - spec/ffi/ffi_spec.rb - spec/ffi/fixtures/Benchmark.c -- spec/ffi/fixtures/Benchmark.o - spec/ffi/fixtures/BoolTest.c -- spec/ffi/fixtures/BoolTest.o - spec/ffi/fixtures/BufferTest.c -- spec/ffi/fixtures/BufferTest.o - spec/ffi/fixtures/ClosureTest.c -- spec/ffi/fixtures/ClosureTest.o - spec/ffi/fixtures/EnumTest.c -- spec/ffi/fixtures/EnumTest.o - spec/ffi/fixtures/FunctionTest.c -- spec/ffi/fixtures/FunctionTest.o - spec/ffi/fixtures/GNUmakefile - spec/ffi/fixtures/GlobalVariable.c -- spec/ffi/fixtures/GlobalVariable.o - spec/ffi/fixtures/LastErrorTest.c -- spec/ffi/fixtures/LastErrorTest.o - spec/ffi/fixtures/NumberTest.c -- spec/ffi/fixtures/NumberTest.o - spec/ffi/fixtures/PointerTest.c -- spec/ffi/fixtures/PointerTest.o - spec/ffi/fixtures/ReferenceTest.c -- spec/ffi/fixtures/ReferenceTest.o - spec/ffi/fixtures/StringTest.c -- spec/ffi/fixtures/StringTest.o - spec/ffi/fixtures/StructTest.c -- spec/ffi/fixtures/StructTest.o - spec/ffi/fixtures/UnionTest.c -- spec/ffi/fixtures/UnionTest.o - spec/ffi/fixtures/VariadicTest.c -- spec/ffi/fixtures/VariadicTest.o - spec/ffi/fixtures/classes.rb - spec/ffi/function_spec.rb - spec/ffi/io_spec.rb @@ -565,7 +553,7 @@ version: '0' requirements: [] rubyforge_project: -rubygems_version: 2.2.2 +rubygems_version: 2.4.6 signing_key: specification_version: 4 summary: Ruby FFI diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/ffi/enum_spec.rb new/spec/ffi/enum_spec.rb --- old/spec/ffi/enum_spec.rb 2014-10-09 19:09:37.000000000 +0200 +++ new/spec/ffi/enum_spec.rb 2015-03-15 03:46:02.000000000 +0100 @@ -36,6 +36,28 @@ attach_function :test_tagged_typedef_enum4, [:enum_type4], :enum_type4 end +module TestEnum4 + extend FFI::Library + ffi_lib TestLibrary::PATH + + enum [:c1, :c2, :c3, :c4] + enum :enum_type1, [:c5, 0x42, :c6, :c7, :c8] + enum :enum_type2, [:c9, 0x42, :c10, :c11, 0x4242, :c12] + enum :enum_type3, [:c13, 0x42, :c14, 0x4242, :c15, 0x42424242, :c16, 0x4242424242424242] + enum FFI::Type::UINT16, :enum_type4, [:c17, 0x42, :c18, :c19, :c20] + enum FFI::Type::UINT32, :enum_type5, [:c21, 0x42, :c22, :c23, 0x4242, :c24] + enum FFI::Type::UINT64, :enum_type6, [:c25, 0x42, :c26, 0x4242, :c27, 0x42424242, :c28, 0x4242424242424242] + enum FFI::Type::UINT64, [:c29, 0x4242424242424242, :c30, :c31, :c32] + + attach_function :test_untagged_nonint_enum, [:uint8], :uint8 + attach_function :test_tagged_nonint_enum1, [:uint16], :uint16 + attach_function :test_tagged_nonint_enum2, [:uint32], :uint32 + attach_function :test_tagged_nonint_enum3, [:uint64], :uint64 + attach_function :test_tagged_nonint_enum4, :test_tagged_nonint_enum1, [:enum_type4], :enum_type4 + attach_function :test_tagged_nonint_enum5, :test_tagged_nonint_enum2, [:enum_type5], :enum_type5 + attach_function :test_tagged_nonint_enum6, :test_tagged_nonint_enum3, [:enum_type6], :enum_type6 +end + describe "A library with no enum defined" do it "returns nil when asked for an enum" do expect(TestEnum0.enum_type(:foo)).to be_nil @@ -60,6 +82,14 @@ expect(TestEnum1.test_untagged_enum(:c14)).to eq(4242) expect(TestEnum1.test_untagged_enum(:c15)).to eq(424242) expect(TestEnum1.test_untagged_enum(:c16)).to eq(42424242) + expect(TestEnum4.test_untagged_nonint_enum(:c1)).to eq(0) + expect(TestEnum4.test_untagged_nonint_enum(:c2)).to eq(1) + expect(TestEnum4.test_untagged_nonint_enum(:c3)).to eq(2) + expect(TestEnum4.test_untagged_nonint_enum(:c4)).to eq(3) + expect(TestEnum4.test_tagged_nonint_enum3(:c29)).to eq(0x4242424242424242) + expect(TestEnum4.test_tagged_nonint_enum3(:c30)).to eq(0x4242424242424243) + expect(TestEnum4.test_tagged_nonint_enum3(:c31)).to eq(0x4242424242424244) + expect(TestEnum4.test_tagged_nonint_enum3(:c32)).to eq(0x4242424242424245) end end @@ -69,6 +99,12 @@ expect(TestEnum3.enum_type(:enum_type2)).not_to be_nil expect(TestEnum3.enum_type(:enum_type3)).not_to be_nil expect(TestEnum3.enum_type(:enum_type4)).not_to be_nil + expect(TestEnum4.enum_type(:enum_type1)).not_to be_nil + expect(TestEnum4.enum_type(:enum_type2)).not_to be_nil + expect(TestEnum4.enum_type(:enum_type3)).not_to be_nil + expect(TestEnum4.enum_type(:enum_type4)).not_to be_nil + expect(TestEnum4.enum_type(:enum_type5)).not_to be_nil + expect(TestEnum4.enum_type(:enum_type6)).not_to be_nil end it "contains enum constants" do @@ -76,6 +112,12 @@ expect(TestEnum3.enum_type(:enum_type2).symbols.length).to eq(4) expect(TestEnum3.enum_type(:enum_type3).symbols.length).to eq(4) expect(TestEnum3.enum_type(:enum_type4).symbols.length).to eq(4) + expect(TestEnum4.enum_type(:enum_type1).symbols.length).to eq(4) + expect(TestEnum4.enum_type(:enum_type2).symbols.length).to eq(4) + expect(TestEnum4.enum_type(:enum_type3).symbols.length).to eq(4) + expect(TestEnum4.enum_type(:enum_type4).symbols.length).to eq(4) + expect(TestEnum4.enum_type(:enum_type5).symbols.length).to eq(4) + expect(TestEnum4.enum_type(:enum_type6).symbols.length).to eq(4) end it "constants can be used as function parameters and return value" do @@ -95,6 +137,30 @@ expect(TestEnum3.test_tagged_typedef_enum4(:c14)).to be :c14 expect(TestEnum3.test_tagged_typedef_enum4(:c15)).to be :c15 expect(TestEnum3.test_tagged_typedef_enum4(:c16)).to be :c16 + expect(TestEnum4.test_tagged_nonint_enum1(:c5)).to eq(0x42) + expect(TestEnum4.test_tagged_nonint_enum1(:c6)).to eq(0x43) + expect(TestEnum4.test_tagged_nonint_enum1(:c7)).to eq(0x44) + expect(TestEnum4.test_tagged_nonint_enum1(:c8)).to eq(0x45) + expect(TestEnum4.test_tagged_nonint_enum2(:c9)).to eq(0x42) + expect(TestEnum4.test_tagged_nonint_enum2(:c10)).to eq(0x43) + expect(TestEnum4.test_tagged_nonint_enum2(:c11)).to eq(0x4242) + expect(TestEnum4.test_tagged_nonint_enum2(:c12)).to eq(0x4243) + expect(TestEnum4.test_tagged_nonint_enum3(:c13)).to eq(0x42) + expect(TestEnum4.test_tagged_nonint_enum3(:c14)).to eq(0x4242) + expect(TestEnum4.test_tagged_nonint_enum3(:c15)).to eq(0x42424242) + expect(TestEnum4.test_tagged_nonint_enum3(:c16)).to eq(0x4242424242424242) + expect(TestEnum4.test_tagged_nonint_enum4(:c17)).to eq(:c17) + expect(TestEnum4.test_tagged_nonint_enum4(:c18)).to eq(:c18) + expect(TestEnum4.test_tagged_nonint_enum4(:c19)).to eq(:c19) + expect(TestEnum4.test_tagged_nonint_enum4(:c20)).to eq(:c20) + expect(TestEnum4.test_tagged_nonint_enum5(:c21)).to eq(:c21) + expect(TestEnum4.test_tagged_nonint_enum5(:c22)).to eq(:c22) + expect(TestEnum4.test_tagged_nonint_enum5(:c23)).to eq(:c23) + expect(TestEnum4.test_tagged_nonint_enum5(:c24)).to eq(:c24) + expect(TestEnum4.test_tagged_nonint_enum6(:c25)).to eq(:c25) + expect(TestEnum4.test_tagged_nonint_enum6(:c26)).to eq(:c26) + expect(TestEnum4.test_tagged_nonint_enum6(:c27)).to eq(:c27) + expect(TestEnum4.test_tagged_nonint_enum6(:c28)).to eq(:c28) end it "integers can be used instead of constants" do @@ -114,6 +180,18 @@ expect(TestEnum3.test_tagged_typedef_enum4(4242)).to be :c14 expect(TestEnum3.test_tagged_typedef_enum4(424242)).to be :c15 expect(TestEnum3.test_tagged_typedef_enum4(42424242)).to be :c16 + expect(TestEnum4.test_tagged_nonint_enum4(0x42)).to eq(:c17) + expect(TestEnum4.test_tagged_nonint_enum4(0x43)).to eq(:c18) + expect(TestEnum4.test_tagged_nonint_enum4(0x44)).to eq(:c19) + expect(TestEnum4.test_tagged_nonint_enum4(0x45)).to eq(:c20) + expect(TestEnum4.test_tagged_nonint_enum5(0x42)).to eq(:c21) + expect(TestEnum4.test_tagged_nonint_enum5(0x43)).to eq(:c22) + expect(TestEnum4.test_tagged_nonint_enum5(0x4242)).to eq(:c23) + expect(TestEnum4.test_tagged_nonint_enum5(0x4243)).to eq(:c24) + expect(TestEnum4.test_tagged_nonint_enum6(0x42)).to eq(:c25) + expect(TestEnum4.test_tagged_nonint_enum6(0x4242)).to eq(:c26) + expect(TestEnum4.test_tagged_nonint_enum6(0x42424242)).to eq(:c27) + expect(TestEnum4.test_tagged_nonint_enum6(0x4242424242424242)).to eq(:c28) end end @@ -128,6 +206,11 @@ expect(TestEnum3.enum_value(:c2)).to eq(1) expect(TestEnum3.enum_value(:c3)).to eq(2) expect(TestEnum3.enum_value(:c4)).to eq(3) + + expect(TestEnum4.enum_value(:c1)).to eq(0) + expect(TestEnum4.enum_value(:c2)).to eq(1) + expect(TestEnum4.enum_value(:c3)).to eq(2) + expect(TestEnum4.enum_value(:c4)).to eq(3) end it "can have an explicit first constant and autonumbered subsequent constants" do @@ -140,6 +223,16 @@ expect(TestEnum3.enum_value(:c6)).to eq(43) expect(TestEnum3.enum_value(:c7)).to eq(44) expect(TestEnum3.enum_value(:c8)).to eq(45) + + expect(TestEnum4.enum_value(:c5)).to eq(0x42) + expect(TestEnum4.enum_value(:c6)).to eq(0x43) + expect(TestEnum4.enum_value(:c7)).to eq(0x44) + expect(TestEnum4.enum_value(:c8)).to eq(0x45) + + expect(TestEnum4.enum_value(:c29)).to eq(0x4242424242424242) + expect(TestEnum4.enum_value(:c30)).to eq(0x4242424242424243) + expect(TestEnum4.enum_value(:c31)).to eq(0x4242424242424244) + expect(TestEnum4.enum_value(:c32)).to eq(0x4242424242424245) end it "can have a mix of explicit and autonumbered constants" do @@ -152,6 +245,16 @@ expect(TestEnum3.enum_value(:c10)).to eq(43) expect(TestEnum3.enum_value(:c11)).to eq(4242) expect(TestEnum3.enum_value(:c12)).to eq(4243) + + expect(TestEnum4.enum_value(:c9)).to eq(0x42) + expect(TestEnum4.enum_value(:c10)).to eq(0x43) + expect(TestEnum4.enum_value(:c11)).to eq(0x4242) + expect(TestEnum4.enum_value(:c12)).to eq(0x4243) + + expect(TestEnum4.enum_value(:c21)).to eq(0x42) + expect(TestEnum4.enum_value(:c22)).to eq(0x43) + expect(TestEnum4.enum_value(:c23)).to eq(0x4242) + expect(TestEnum4.enum_value(:c24)).to eq(0x4243) end it "can have all its constants explicitely valued" do @@ -164,6 +267,16 @@ expect(TestEnum3.enum_value(:c14)).to eq(4242) expect(TestEnum3.enum_value(:c15)).to eq(424242) expect(TestEnum3.enum_value(:c16)).to eq(42424242) + + expect(TestEnum4.enum_value(:c13)).to eq(0x42) + expect(TestEnum4.enum_value(:c14)).to eq(0x4242) + expect(TestEnum4.enum_value(:c15)).to eq(0x42424242) + expect(TestEnum4.enum_value(:c16)).to eq(0x4242424242424242) + + expect(TestEnum4.enum_value(:c25)).to eq(0x42) + expect(TestEnum4.enum_value(:c26)).to eq(0x4242) + expect(TestEnum4.enum_value(:c27)).to eq(0x42424242) + expect(TestEnum4.enum_value(:c28)).to eq(0x4242424242424242) end it "return the constant corresponding to a specific value" do @@ -190,6 +303,42 @@ expect(enum[4242]).to be :c14 expect(enum[424242]).to be :c15 expect(enum[42424242]).to be :c16 + + enum = TestEnum4.enum_type(:enum_type1) + expect(enum[0x42]).to eq(:c5) + expect(enum[0x43]).to eq(:c6) + expect(enum[0x44]).to eq(:c7) + expect(enum[0x45]).to eq(:c8) + + enum = TestEnum4.enum_type(:enum_type2) + expect(enum[0x42]).to eq(:c9) + expect(enum[0x43]).to eq(:c10) + expect(enum[0x4242]).to eq(:c11) + expect(enum[0x4243]).to eq(:c12) + + enum = TestEnum4.enum_type(:enum_type3) + expect(enum[0x42]).to eq(:c13) + expect(enum[0x4242]).to eq(:c14) + expect(enum[0x42424242]).to eq(:c15) + expect(enum[0x4242424242424242]).to eq(:c16) + + enum = TestEnum4.enum_type(:enum_type4) + expect(enum[0x42]).to eq(:c17) + expect(enum[0x43]).to eq(:c18) + expect(enum[0x44]).to eq(:c19) + expect(enum[0x45]).to eq(:c20) + + enum = TestEnum4.enum_type(:enum_type5) + expect(enum[0x42]).to eq(:c21) + expect(enum[0x43]).to eq(:c22) + expect(enum[0x4242]).to eq(:c23) + expect(enum[0x4243]).to eq(:c24) + + enum = TestEnum4.enum_type(:enum_type6) + expect(enum[0x42]).to eq(:c25) + expect(enum[0x4242]).to eq(:c26) + expect(enum[0x42424242]).to eq(:c27) + expect(enum[0x4242424242424242]).to eq(:c28) end it "return nil for values that don't have a symbol" do @@ -219,9 +368,56 @@ expect(enum[424243]).to be_nil expect(enum[42424241]).to be_nil expect(enum[42424243]).to be_nil + + enum = TestEnum4.enum_type(:enum_type1) + expect(enum[0x0]).to be_nil + expect(enum[0x41]).to be_nil + expect(enum[0x46]).to be_nil + + enum = TestEnum4.enum_type(:enum_type2) + expect(enum[0x0]).to be_nil + expect(enum[0x41]).to be_nil + expect(enum[0x44]).to be_nil + expect(enum[0x4241]).to be_nil + expect(enum[0x4244]).to be_nil + + enum = TestEnum4.enum_type(:enum_type3) + expect(enum[0x0]).to be_nil + expect(enum[0x41]).to be_nil + expect(enum[0x43]).to be_nil + expect(enum[0x4241]).to be_nil + expect(enum[0x4243]).to be_nil + expect(enum[0x42424241]).to be_nil + expect(enum[0x42424243]).to be_nil + expect(enum[0x4242424242424241]).to be_nil + expect(enum[0x4242424242424243]).to be_nil + + enum = TestEnum4.enum_type(:enum_type4) + expect(enum[0x0]).to be_nil + expect(enum[0x41]).to be_nil + expect(enum[0x46]).to be_nil + + enum = TestEnum4.enum_type(:enum_type5) + expect(enum[0x0]).to be_nil + expect(enum[0x41]).to be_nil + expect(enum[0x44]).to be_nil + expect(enum[0x4241]).to be_nil + expect(enum[0x4244]).to be_nil + + enum = TestEnum4.enum_type(:enum_type6) + expect(enum[0x0]).to be_nil + expect(enum[0x41]).to be_nil + expect(enum[0x43]).to be_nil + expect(enum[0x4241]).to be_nil + expect(enum[0x4243]).to be_nil + expect(enum[0x42424241]).to be_nil + expect(enum[0x42424243]).to be_nil + expect(enum[0x4242424242424241]).to be_nil + expect(enum[0x4242424242424243]).to be_nil end it "duplicate enum keys rejected" do expect { enum [ :a, 0xfee1dead, :b, 0xdeadbeef, :a, 0 ] }.to raise_error + expect { enum FFI::Type::UINT64, [ :a, 0xfee1dead, :b, 0xdeadbeef, :a, 0 ] }.to raise_error end end Files old/spec/ffi/fixtures/Benchmark.o and new/spec/ffi/fixtures/Benchmark.o differ Files old/spec/ffi/fixtures/BoolTest.o and new/spec/ffi/fixtures/BoolTest.o differ Files old/spec/ffi/fixtures/BufferTest.o and new/spec/ffi/fixtures/BufferTest.o differ Files old/spec/ffi/fixtures/ClosureTest.o and new/spec/ffi/fixtures/ClosureTest.o differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/ffi/fixtures/EnumTest.c new/spec/ffi/fixtures/EnumTest.c --- old/spec/ffi/fixtures/EnumTest.c 2014-10-09 19:09:37.000000000 +0200 +++ new/spec/ffi/fixtures/EnumTest.c 2015-03-15 03:46:02.000000000 +0100 @@ -3,6 +3,7 @@ * * For licensing, see LICENSE.SPECS */ +#include <stdint.h> int test_untagged_enum(int val) { return val; @@ -12,6 +13,22 @@ return val; } +uint8_t test_untagged_nonint_enum(uint8_t val) { + return val; +} + +uint16_t test_tagged_nonint_enum1(uint16_t val) { + return val; +} + +uint32_t test_tagged_nonint_enum2(uint32_t val) { + return val; +} + +uint64_t test_tagged_nonint_enum3(uint64_t val) { + return val; +} + typedef enum {c1, c2, c3, c4} enum_type1; enum_type1 test_tagged_typedef_enum1(enum_type1 val) { return val; Files old/spec/ffi/fixtures/EnumTest.o and new/spec/ffi/fixtures/EnumTest.o differ Files old/spec/ffi/fixtures/FunctionTest.o and new/spec/ffi/fixtures/FunctionTest.o differ Files old/spec/ffi/fixtures/GlobalVariable.o and new/spec/ffi/fixtures/GlobalVariable.o differ Files old/spec/ffi/fixtures/LastErrorTest.o and new/spec/ffi/fixtures/LastErrorTest.o differ Files old/spec/ffi/fixtures/NumberTest.o and new/spec/ffi/fixtures/NumberTest.o differ Files old/spec/ffi/fixtures/PointerTest.o and new/spec/ffi/fixtures/PointerTest.o differ Files old/spec/ffi/fixtures/ReferenceTest.o and new/spec/ffi/fixtures/ReferenceTest.o differ Files old/spec/ffi/fixtures/StringTest.o and new/spec/ffi/fixtures/StringTest.o differ Files old/spec/ffi/fixtures/StructTest.o and new/spec/ffi/fixtures/StructTest.o differ Files old/spec/ffi/fixtures/UnionTest.o and new/spec/ffi/fixtures/UnionTest.o differ Files old/spec/ffi/fixtures/VariadicTest.o and new/spec/ffi/fixtures/VariadicTest.o differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/ffi/function_spec.rb new/spec/ffi/function_spec.rb --- old/spec/ffi/function_spec.rb 2014-10-09 19:09:37.000000000 +0200 +++ new/spec/ffi/function_spec.rb 2015-03-15 03:46:02.000000000 +0100 @@ -64,10 +64,13 @@ it 'can wrap a blocking function' do fp = FFI::Function.new(:void, [ :int ], @libtest.find_function('testBlocking'), :blocking => true) - time = Time.now - threads = [] - threads << Thread.new { fp.call(2) } - threads << Thread.new(time) { expect(Time.now - time).to be < 1 } + threads = 10.times.map do |x| + Thread.new do + time = Time.now + fp.call(2) + expect(Time.now - time).to be >= 2 + end + end threads.each { |t| t.join } end -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org