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

Reply via email to