ffi 1.0.10 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ffi might be problematic. Click here for more details.
- data/Rakefile +13 -13
 - data/ext/ffi_c/AbstractMemory.c +1 -1
 - data/ext/ffi_c/compat.h +2 -2
 - data/ext/ffi_c/extconf.rb +3 -3
 - data/lib/ffi/library.rb +10 -8
 - data/lib/ffi/platform.rb +0 -2
 - data/lib/ffi/struct.rb +1 -5
 - data/lib/ffi/tools/const_generator.rb +10 -13
 - data/spec/ffi/async_callback_spec.rb +2 -2
 - data/spec/ffi/bool_spec.rb +6 -6
 - data/spec/ffi/buffer_spec.rb +23 -23
 - data/spec/ffi/callback_spec.rb +101 -102
 - data/spec/ffi/custom_type_spec.rb +20 -24
 - data/spec/ffi/dup_spec.rb +7 -7
 - data/spec/ffi/enum_spec.rb +127 -127
 - data/spec/ffi/errno_spec.rb +2 -2
 - data/spec/ffi/ffi_spec.rb +3 -3
 - data/spec/ffi/function_spec.rb +10 -10
 - data/spec/ffi/library_spec.rb +30 -12
 - data/spec/ffi/managed_struct_spec.rb +4 -4
 - data/spec/ffi/number_spec.rb +40 -40
 - data/spec/ffi/pointer_spec.rb +21 -24
 - data/spec/ffi/rbx/memory_pointer_spec.rb +17 -17
 - data/spec/ffi/rbx/struct_spec.rb +2 -2
 - data/spec/ffi/spec_helper.rb +1 -1
 - data/spec/ffi/string_spec.rb +9 -9
 - data/spec/ffi/strptr_spec.rb +3 -3
 - data/spec/ffi/struct_callback_spec.rb +7 -7
 - data/spec/ffi/struct_initialize_spec.rb +2 -2
 - data/spec/ffi/struct_packed_spec.rb +6 -6
 - data/spec/ffi/struct_spec.rb +85 -85
 - data/spec/ffi/typedef_spec.rb +4 -4
 - data/spec/ffi/union_spec.rb +3 -3
 - data/spec/ffi/variadic_spec.rb +17 -14
 - data/tasks/rdoc.rake +1 -1
 - metadata +4 -4
 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -20,13 +20,13 @@ LIBEXT = case RbConfig::CONFIG['host_os'].downcase 
     | 
|
| 
       20 
20 
     | 
    
         
             
              when /mswin|mingw/
         
     | 
| 
       21 
21 
     | 
    
         
             
                "dll"
         
     | 
| 
       22 
22 
     | 
    
         
             
              else
         
     | 
| 
       23 
     | 
    
         
            -
                 
     | 
| 
      
 23 
     | 
    
         
            +
                RbConfig::CONFIG['DLEXT']
         
     | 
| 
       24 
24 
     | 
    
         
             
              end
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
            CPU = case RbConfig::CONFIG['host_cpu'].downcase
         
     | 
| 
       27 
27 
     | 
    
         
             
              when /i[3456]86/
         
     | 
| 
       28 
28 
     | 
    
         
             
                # Darwin always reports i686, even when running in 64bit mode
         
     | 
| 
       29 
     | 
    
         
            -
                if  
     | 
| 
      
 29 
     | 
    
         
            +
                if RbConfig::CONFIG['host_os'] =~ /darwin/ && 0xfee1deadbeef.is_a?(Fixnum)
         
     | 
| 
       30 
30 
     | 
    
         
             
                  "x86_64"
         
     | 
| 
       31 
31 
     | 
    
         
             
                else
         
     | 
| 
       32 
32 
     | 
    
         
             
                  "i386"
         
     | 
| 
         @@ -42,10 +42,10 @@ CPU = case RbConfig::CONFIG['host_cpu'].downcase 
     | 
|
| 
       42 
42 
     | 
    
         
             
                "powerpc"
         
     | 
| 
       43 
43 
     | 
    
         | 
| 
       44 
44 
     | 
    
         
             
              else
         
     | 
| 
       45 
     | 
    
         
            -
                 
     | 
| 
      
 45 
     | 
    
         
            +
                RbConfig::CONFIG['host_cpu']
         
     | 
| 
       46 
46 
     | 
    
         
             
              end
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
            OS = case  
     | 
| 
      
 48 
     | 
    
         
            +
            OS = case RbConfig::CONFIG['host_os'].downcase
         
     | 
| 
       49 
49 
     | 
    
         
             
              when /linux/
         
     | 
| 
       50 
50 
     | 
    
         
             
                "linux"
         
     | 
| 
       51 
51 
     | 
    
         
             
              when /darwin/
         
     | 
| 
         @@ -59,23 +59,23 @@ OS = case Config::CONFIG['host_os'].downcase 
     | 
|
| 
       59 
59 
     | 
    
         
             
              when /mswin|mingw/
         
     | 
| 
       60 
60 
     | 
    
         
             
                "win32"
         
     | 
| 
       61 
61 
     | 
    
         
             
              else
         
     | 
| 
       62 
     | 
    
         
            -
                 
     | 
| 
      
 62 
     | 
    
         
            +
                RbConfig::CONFIG['host_os'].downcase
         
     | 
| 
       63 
63 
     | 
    
         
             
              end
         
     | 
| 
       64 
64 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
            CC=ENV['CC'] ||  
     | 
| 
      
 65 
     | 
    
         
            +
            CC=ENV['CC'] || RbConfig::CONFIG['CC'] || "gcc"
         
     | 
| 
       66 
66 
     | 
    
         | 
| 
       67 
67 
     | 
    
         
             
            GMAKE = system('which gmake >/dev/null') && 'gmake' || 'make'
         
     | 
| 
       68 
68 
     | 
    
         | 
| 
       69 
69 
     | 
    
         
             
            LIBTEST = "build/libtest.#{LIBEXT}"
         
     | 
| 
       70 
70 
     | 
    
         
             
            BUILD_DIR = "build"
         
     | 
| 
       71 
     | 
    
         
            -
            BUILD_EXT_DIR = File.join(BUILD_DIR, "#{ 
     | 
| 
      
 71 
     | 
    
         
            +
            BUILD_EXT_DIR = File.join(BUILD_DIR, "#{RbConfig::CONFIG['arch']}", 'ffi_c', RUBY_VERSION)
         
     | 
| 
       72 
72 
     | 
    
         | 
| 
       73 
73 
     | 
    
         
             
            # Project general information
         
     | 
| 
       74 
74 
     | 
    
         
             
            PROJ.name = 'ffi'
         
     | 
| 
       75 
75 
     | 
    
         
             
            PROJ.authors = 'Wayne Meissner'
         
     | 
| 
       76 
76 
     | 
    
         
             
            PROJ.email = 'wmeissner@gmail.com'
         
     | 
| 
       77 
77 
     | 
    
         
             
            PROJ.url = 'http://wiki.github.com/ffi/ffi'
         
     | 
| 
       78 
     | 
    
         
            -
            PROJ.version = '1.0. 
     | 
| 
      
 78 
     | 
    
         
            +
            PROJ.version = '1.0.11'
         
     | 
| 
       79 
79 
     | 
    
         
             
            PROJ.rubyforge.name = 'ffi'
         
     | 
| 
       80 
80 
     | 
    
         
             
            PROJ.readme_file = 'README.rdoc'
         
     | 
| 
       81 
81 
     | 
    
         | 
| 
         @@ -116,23 +116,23 @@ TEST_DEPS = [ LIBTEST ] 
     | 
|
| 
       116 
116 
     | 
    
         
             
            if RUBY_PLATFORM == "java"
         
     | 
| 
       117 
117 
     | 
    
         
             
              desc "Run all specs"
         
     | 
| 
       118 
118 
     | 
    
         
             
              task :specs => TEST_DEPS do
         
     | 
| 
       119 
     | 
    
         
            -
                sh %{#{Gem.ruby} -S rspec #{Dir["spec/ffi/*_spec.rb"].join(" ")} -fs --color}
         
     | 
| 
      
 119 
     | 
    
         
            +
                sh %{#{Gem.ruby} -w -S rspec #{Dir["spec/ffi/*_spec.rb"].join(" ")} -fs --color}
         
     | 
| 
       120 
120 
     | 
    
         
             
              end
         
     | 
| 
       121 
121 
     | 
    
         
             
              desc "Run rubinius specs"
         
     | 
| 
       122 
122 
     | 
    
         
             
              task :rbxspecs => TEST_DEPS do
         
     | 
| 
       123 
     | 
    
         
            -
                sh %{#{Gem.ruby} -S rspec #{Dir["spec/ffi/rbx/*_spec.rb"].join(" ")} -fs --color}
         
     | 
| 
      
 123 
     | 
    
         
            +
                sh %{#{Gem.ruby} -w -S rspec #{Dir["spec/ffi/rbx/*_spec.rb"].join(" ")} -fs --color}
         
     | 
| 
       124 
124 
     | 
    
         
             
              end
         
     | 
| 
       125 
125 
     | 
    
         
             
            else
         
     | 
| 
       126 
126 
     | 
    
         
             
              TEST_DEPS.unshift :compile
         
     | 
| 
       127 
127 
     | 
    
         
             
              desc "Run all specs"
         
     | 
| 
       128 
128 
     | 
    
         
             
              task :specs => TEST_DEPS do
         
     | 
| 
       129 
129 
     | 
    
         
             
                ENV["MRI_FFI"] = "1"
         
     | 
| 
       130 
     | 
    
         
            -
                sh %{#{Gem.ruby} -Ilib -I#{BUILD_EXT_DIR} -S rspec #{Dir["spec/ffi/*_spec.rb"].join(" ")} -fs --color}
         
     | 
| 
      
 130 
     | 
    
         
            +
                sh %{#{Gem.ruby} -w -Ilib -I#{BUILD_EXT_DIR} -S rspec #{Dir["spec/ffi/*_spec.rb"].join(" ")} -fs --color}
         
     | 
| 
       131 
131 
     | 
    
         
             
              end
         
     | 
| 
       132 
132 
     | 
    
         
             
              desc "Run rubinius specs"
         
     | 
| 
       133 
133 
     | 
    
         
             
              task :rbxspecs => TEST_DEPS do
         
     | 
| 
       134 
134 
     | 
    
         
             
                ENV["MRI_FFI"] = "1"
         
     | 
| 
       135 
     | 
    
         
            -
                sh %{#{Gem.ruby} -Ilib -I#{BUILD_EXT_DIR} -S rspec #{Dir["spec/ffi/rbx/*_spec.rb"].join(" ")} -fs --color}
         
     | 
| 
      
 135 
     | 
    
         
            +
                sh %{#{Gem.ruby} -w -Ilib -I#{BUILD_EXT_DIR} -S rspec #{Dir["spec/ffi/rbx/*_spec.rb"].join(" ")} -fs --color}
         
     | 
| 
       136 
136 
     | 
    
         
             
              end
         
     | 
| 
       137 
137 
     | 
    
         
             
            end
         
     | 
| 
       138 
138 
     | 
    
         | 
| 
         @@ -146,7 +146,7 @@ task :install => 'gem:install' 
     | 
|
| 
       146 
146 
     | 
    
         
             
            desc "Clean all built files"
         
     | 
| 
       147 
147 
     | 
    
         
             
            task :distclean => :clobber do
         
     | 
| 
       148 
148 
     | 
    
         
             
              FileUtils.rm_rf('build')
         
     | 
| 
       149 
     | 
    
         
            -
              FileUtils.rm_rf(Dir["lib/**/ffi_c.#{ 
     | 
| 
      
 149 
     | 
    
         
            +
              FileUtils.rm_rf(Dir["lib/**/ffi_c.#{RbConfig::CONFIG['DLEXT']}"])
         
     | 
| 
       150 
150 
     | 
    
         
             
              FileUtils.rm_rf('lib/1.8')
         
     | 
| 
       151 
151 
     | 
    
         
             
              FileUtils.rm_rf('lib/1.9')
         
     | 
| 
       152 
152 
     | 
    
         
             
              FileUtils.rm_rf('lib/ffi/types.conf')
         
     | 
    
        data/ext/ffi_c/AbstractMemory.c
    CHANGED
    
    
    
        data/ext/ffi_c/compat.h
    CHANGED
    
    | 
         @@ -62,11 +62,11 @@ 
     | 
|
| 
       62 
62 
     | 
    
         
             
            #  define MIN(a, b) ((a) < (b) ? (a) : (b))
         
     | 
| 
       63 
63 
     | 
    
         
             
            #endif
         
     | 
| 
       64 
64 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
            #ifndef RB_GC_GUARD 
     | 
| 
      
 65 
     | 
    
         
            +
            #ifndef RB_GC_GUARD
         
     | 
| 
       66 
66 
     | 
    
         
             
            #  define RB_GC_GUARD(x) (x)
         
     | 
| 
       67 
67 
     | 
    
         
             
            #endif
         
     | 
| 
       68 
68 
     | 
    
         | 
| 
       69 
     | 
    
         
            -
            #ifndef RB_GC_GUARD_PTR 
     | 
| 
      
 69 
     | 
    
         
            +
            #ifndef RB_GC_GUARD_PTR
         
     | 
| 
       70 
70 
     | 
    
         
             
            #  define RB_GC_GUARD_PTR(x) (x)
         
     | 
| 
       71 
71 
     | 
    
         
             
            #endif
         
     | 
| 
       72 
72 
     | 
    
         | 
    
        data/ext/ffi_c/extconf.rb
    CHANGED
    
    | 
         @@ -5,9 +5,9 @@ if !defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby" 
     | 
|
| 
       5 
5 
     | 
    
         
             
              require 'rbconfig'
         
     | 
| 
       6 
6 
     | 
    
         
             
              dir_config("ffi_c")
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
              if pkg_config("libffi") ||
         
     | 
| 
      
 8 
     | 
    
         
            +
              if ENV['RUBY_CC_VERSION'].nil? && (pkg_config("libffi") ||
         
     | 
| 
       9 
9 
     | 
    
         
             
                 have_header("ffi.h") ||
         
     | 
| 
       10 
     | 
    
         
            -
                 find_header("ffi.h", "/usr/local/include")
         
     | 
| 
      
 10 
     | 
    
         
            +
                 find_header("ffi.h", "/usr/local/include"))
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                # We need at least ffi_call and ffi_prep_closure
         
     | 
| 
       13 
13 
     | 
    
         
             
                libffi_ok = have_library("ffi", "ffi_call", [ "ffi.h" ]) ||
         
     | 
| 
         @@ -43,7 +43,7 @@ if !defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby" 
     | 
|
| 
       43 
43 
     | 
    
         
             
                    mf.puts "include ${srcdir}/libffi.darwin.mk"
         
     | 
| 
       44 
44 
     | 
    
         
             
                  elsif RbConfig::CONFIG['host_os'].downcase =~ /bsd/
         
     | 
| 
       45 
45 
     | 
    
         
             
                    mf.puts '.include "${srcdir}/libffi.bsd.mk"'
         
     | 
| 
       46 
     | 
    
         
            -
                   
     | 
| 
      
 46 
     | 
    
         
            +
                  else
         
     | 
| 
       47 
47 
     | 
    
         
             
                    mf.puts "include ${srcdir}/libffi.mk"
         
     | 
| 
       48 
48 
     | 
    
         
             
                  end
         
     | 
| 
       49 
49 
     | 
    
         
             
                end
         
     | 
    
        data/lib/ffi/library.rb
    CHANGED
    
    | 
         @@ -136,8 +136,10 @@ module FFI 
     | 
|
| 
       136 
136 
     | 
    
         
             
                #
         
     | 
| 
       137 
137 
     | 
    
         
             
                # @param [Symbol] convention one of +:default+, +:stdcall+
         
     | 
| 
       138 
138 
     | 
    
         
             
                # @return [Symbol] the new calling convention
         
     | 
| 
       139 
     | 
    
         
            -
                def ffi_convention(convention)
         
     | 
| 
       140 
     | 
    
         
            -
                  @ffi_convention  
     | 
| 
      
 139 
     | 
    
         
            +
                def ffi_convention(convention = nil)
         
     | 
| 
      
 140 
     | 
    
         
            +
                  @ffi_convention ||= :default
         
     | 
| 
      
 141 
     | 
    
         
            +
                  @ffi_convention = convention if convention
         
     | 
| 
      
 142 
     | 
    
         
            +
                  @ffi_convention
         
     | 
| 
       141 
143 
     | 
    
         
             
                end
         
     | 
| 
       142 
144 
     | 
    
         | 
| 
       143 
145 
     | 
    
         
             
                # @see #ffi_lib
         
     | 
| 
         @@ -212,7 +214,7 @@ module FFI 
     | 
|
| 
       212 
214 
     | 
    
         
             
                  # Convert :foo to the native type
         
     | 
| 
       213 
215 
     | 
    
         
             
                  arg_types.map! { |e| find_type(e) }
         
     | 
| 
       214 
216 
     | 
    
         
             
                  options = {
         
     | 
| 
       215 
     | 
    
         
            -
                    :convention =>  
     | 
| 
      
 217 
     | 
    
         
            +
                    :convention => ffi_convention,
         
     | 
| 
       216 
218 
     | 
    
         
             
                    :type_map => defined?(@ffi_typedefs) ? @ffi_typedefs : nil,
         
     | 
| 
       217 
219 
     | 
    
         
             
                    :blocking => defined?(@blocking) && @blocking,
         
     | 
| 
       218 
220 
     | 
    
         
             
                    :enums => defined?(@ffi_enums) ? @ffi_enums : nil,
         
     | 
| 
         @@ -227,8 +229,8 @@ module FFI 
     | 
|
| 
       227 
229 
     | 
    
         
             
                    if invokers.empty?
         
     | 
| 
       228 
230 
     | 
    
         
             
                      begin
         
     | 
| 
       229 
231 
     | 
    
         
             
                        function = nil
         
     | 
| 
       230 
     | 
    
         
            -
                        function_names(cname, arg_types).find do | 
     | 
| 
       231 
     | 
    
         
            -
                          function = lib.find_function( 
     | 
| 
      
 232 
     | 
    
         
            +
                        function_names(cname, arg_types).find do |fname|
         
     | 
| 
      
 233 
     | 
    
         
            +
                          function = lib.find_function(fname)
         
     | 
| 
       232 
234 
     | 
    
         
             
                        end
         
     | 
| 
       233 
235 
     | 
    
         
             
                        raise LoadError unless function
         
     | 
| 
       234 
236 
     | 
    
         | 
| 
         @@ -239,7 +241,7 @@ module FFI 
     | 
|
| 
       239 
241 
     | 
    
         
             
                          Function.new(find_type(ret_type), arg_types, function, options)
         
     | 
| 
       240 
242 
     | 
    
         
             
                        end
         
     | 
| 
       241 
243 
     | 
    
         | 
| 
       242 
     | 
    
         
            -
                      rescue LoadError 
     | 
| 
      
 244 
     | 
    
         
            +
                      rescue LoadError
         
     | 
| 
       243 
245 
     | 
    
         
             
                      end
         
     | 
| 
       244 
246 
     | 
    
         
             
                    end
         
     | 
| 
       245 
247 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -262,7 +264,7 @@ module FFI 
     | 
|
| 
       262 
264 
     | 
    
         
             
                #   windows api, although using, doesn't have decorated names.
         
     | 
| 
       263 
265 
     | 
    
         
             
                def function_names(name, arg_types)
         
     | 
| 
       264 
266 
     | 
    
         
             
                  result = [name.to_s]
         
     | 
| 
       265 
     | 
    
         
            -
                  if  
     | 
| 
      
 267 
     | 
    
         
            +
                  if ffi_convention == :stdcall
         
     | 
| 
       266 
268 
     | 
    
         
             
                    # Get the size of each parameter
         
     | 
| 
       267 
269 
     | 
    
         
             
                    size = arg_types.inject(0) do |mem, arg|
         
     | 
| 
       268 
270 
     | 
    
         
             
                      mem + arg.size
         
     | 
| 
         @@ -360,7 +362,7 @@ code 
     | 
|
| 
       360 
362 
     | 
    
         
             
                  end
         
     | 
| 
       361 
363 
     | 
    
         | 
| 
       362 
364 
     | 
    
         
             
                  options = Hash.new
         
     | 
| 
       363 
     | 
    
         
            -
                  options[:convention] =  
     | 
| 
      
 365 
     | 
    
         
            +
                  options[:convention] = ffi_convention
         
     | 
| 
       364 
366 
     | 
    
         
             
                  options[:enums] = @ffi_enums if defined?(@ffi_enums)
         
     | 
| 
       365 
367 
     | 
    
         
             
                  cb = FFI::CallbackInfo.new(find_type(ret), params.map { |e| find_type(e) }, options)
         
     | 
| 
       366 
368 
     | 
    
         | 
    
        data/lib/ffi/platform.rb
    CHANGED
    
    
    
        data/lib/ffi/struct.rb
    CHANGED
    
    | 
         @@ -123,10 +123,6 @@ module FFI 
     | 
|
| 
       123 
123 
     | 
    
         
             
                  @layout.alignment
         
     | 
| 
       124 
124 
     | 
    
         
             
                end
         
     | 
| 
       125 
125 
     | 
    
         | 
| 
       126 
     | 
    
         
            -
                def self.align
         
     | 
| 
       127 
     | 
    
         
            -
                  @layout.alignment
         
     | 
| 
       128 
     | 
    
         
            -
                end
         
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
126 
     | 
    
         
             
                def self.members
         
     | 
| 
       131 
127 
     | 
    
         
             
                  @layout.members
         
     | 
| 
       132 
128 
     | 
    
         
             
                end
         
     | 
| 
         @@ -228,7 +224,7 @@ module FFI 
     | 
|
| 
       228 
224 
     | 
    
         
             
                    begin
         
     | 
| 
       229 
225 
     | 
    
         
             
                      mod = self.name.split("::")[0..-2].inject(Object) { |obj, c| obj.const_get(c) }
         
     | 
| 
       230 
226 
     | 
    
         
             
                      mod.respond_to?(:find_type) ? mod : nil
         
     | 
| 
       231 
     | 
    
         
            -
                    rescue Exception 
     | 
| 
      
 227 
     | 
    
         
            +
                    rescue Exception
         
     | 
| 
       232 
228 
     | 
    
         
             
                      nil
         
     | 
| 
       233 
229 
     | 
    
         
             
                    end
         
     | 
| 
       234 
230 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -36,7 +36,7 @@ module FFI 
     | 
|
| 
       36 
36 
     | 
    
         
             
                #  When passed a block, {#calculate} is automatically called at the end of
         
     | 
| 
       37 
37 
     | 
    
         
             
                #  the block, otherwise you must call it yourself.
         
     | 
| 
       38 
38 
     | 
    
         
             
                def initialize(prefix = nil, options = {})
         
     | 
| 
       39 
     | 
    
         
            -
                  @includes = []
         
     | 
| 
      
 39 
     | 
    
         
            +
                  @includes = ['stdio.h', 'stddef.h']
         
     | 
| 
       40 
40 
     | 
    
         
             
                  @constants = {}
         
     | 
| 
       41 
41 
     | 
    
         
             
                  @prefix = prefix
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
         @@ -61,10 +61,10 @@ module FFI 
     | 
|
| 
       61 
61 
     | 
    
         
             
                  @options
         
     | 
| 
       62 
62 
     | 
    
         
             
                end
         
     | 
| 
       63 
63 
     | 
    
         
             
                # @param [String] name
         
     | 
| 
       64 
     | 
    
         
            -
                # @return constant value
         
     | 
| 
      
 64 
     | 
    
         
            +
                # @return constant value (converted if a +converter+ was defined).
         
     | 
| 
       65 
65 
     | 
    
         
             
                # Access a constant by name.
         
     | 
| 
       66 
66 
     | 
    
         
             
                def [](name)
         
     | 
| 
       67 
     | 
    
         
            -
                  @constants[name]. 
     | 
| 
      
 67 
     | 
    
         
            +
                  @constants[name].converted_value
         
     | 
| 
       68 
68 
     | 
    
         
             
                end
         
     | 
| 
       69 
69 
     | 
    
         | 
| 
       70 
70 
     | 
    
         
             
                # Request the value for C constant +name+.
         
     | 
| 
         @@ -107,14 +107,10 @@ module FFI 
     | 
|
| 
       107 
107 
     | 
    
         
             
                  binary = File.join Dir.tmpdir, "rb_const_gen_bin_#{Process.pid}"
         
     | 
| 
       108 
108 
     | 
    
         | 
| 
       109 
109 
     | 
    
         
             
                  Tempfile.open("#{@prefix}.const_generator") do |f|
         
     | 
| 
       110 
     | 
    
         
            -
                    f.puts "#include <stdio.h>"
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
110 
     | 
    
         
             
                    @includes.each do |inc|
         
     | 
| 
       113 
111 
     | 
    
         
             
                      f.puts "#include <#{inc}>"
         
     | 
| 
       114 
112 
     | 
    
         
             
                    end
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
                    f.puts "#include <stddef.h>\n\n"
         
     | 
| 
       117 
     | 
    
         
            -
                    f.puts "int main(int argc, char **argv)\n{"
         
     | 
| 
      
 113 
     | 
    
         
            +
                    f.puts "\nint main(int argc, char **argv)\n{"
         
     | 
| 
       118 
114 
     | 
    
         | 
| 
       119 
115 
     | 
    
         
             
                    @constants.each_value do |const|
         
     | 
| 
       120 
116 
     | 
    
         
             
                      f.puts <<-EOF
         
     | 
| 
         @@ -175,11 +171,12 @@ module FFI 
     | 
|
| 
       175 
171 
     | 
    
         
             
                  end.join "\n"
         
     | 
| 
       176 
172 
     | 
    
         
             
                end
         
     | 
| 
       177 
173 
     | 
    
         | 
| 
       178 
     | 
    
         
            -
                # Add  
     | 
| 
       179 
     | 
    
         
            -
                # @ 
     | 
| 
       180 
     | 
    
         
            -
                # @ 
     | 
| 
       181 
     | 
    
         
            -
                 
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
      
 174 
     | 
    
         
            +
                # Add additional C include file(s) to calculate constants from.
         
     | 
| 
      
 175 
     | 
    
         
            +
                # @note +stdio.h+ and +stddef.h+ automatically included
         
     | 
| 
      
 176 
     | 
    
         
            +
                # @param [List<String>, Array<String>] i include file(s)
         
     | 
| 
      
 177 
     | 
    
         
            +
                # @return [Array<String>] array of include files
         
     | 
| 
      
 178 
     | 
    
         
            +
                def include(*i)
         
     | 
| 
      
 179 
     | 
    
         
            +
                  @includes |= i.flatten
         
     | 
| 
       183 
180 
     | 
    
         
             
                end
         
     | 
| 
       184 
181 
     | 
    
         | 
| 
       185 
182 
     | 
    
         
             
              end
         
     | 
| 
         @@ -32,7 +32,7 @@ describe "async callback" do 
     | 
|
| 
       32 
32 
     | 
    
         
             
                cb = Proc.new {|i| v = i; called = true }
         
     | 
| 
       33 
33 
     | 
    
         
             
                LibTest.testAsyncCallback(cb, 0x7fffffff) 
         
     | 
| 
       34 
34 
     | 
    
         
             
                called.should be_true
         
     | 
| 
       35 
     | 
    
         
            -
                v.should  
     | 
| 
      
 35 
     | 
    
         
            +
                v.should eq 0x7fffffff
         
     | 
| 
       36 
36 
     | 
    
         
             
              end
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
              it "called a second time" do
         
     | 
| 
         @@ -41,6 +41,6 @@ describe "async callback" do 
     | 
|
| 
       41 
41 
     | 
    
         
             
                cb = Proc.new {|i| v = i; called = true }
         
     | 
| 
       42 
42 
     | 
    
         
             
                LibTest.testAsyncCallback(cb, 0x7fffffff) 
         
     | 
| 
       43 
43 
     | 
    
         
             
                called.should be_true
         
     | 
| 
       44 
     | 
    
         
            -
                v.should  
     | 
| 
      
 44 
     | 
    
         
            +
                v.should eq 0x7fffffff
         
     | 
| 
       45 
45 
     | 
    
         
             
              end
         
     | 
| 
       46 
46 
     | 
    
         
             
            end
         
     | 
    
        data/spec/ffi/bool_spec.rb
    CHANGED
    
    | 
         @@ -25,14 +25,14 @@ describe "Function with primitive boolean arguments and return values" do 
     | 
|
| 
       25 
25 
     | 
    
         
             
                attach_function :bool_reverse_val, [ :bool ], :bool
         
     | 
| 
       26 
26 
     | 
    
         
             
              end
         
     | 
| 
       27 
27 
     | 
    
         
             
              it "bools" do
         
     | 
| 
       28 
     | 
    
         
            -
                LibTest.bool_return_true.should  
     | 
| 
       29 
     | 
    
         
            -
                LibTest.bool_return_false.should  
     | 
| 
      
 28 
     | 
    
         
            +
                LibTest.bool_return_true.should eq true
         
     | 
| 
      
 29 
     | 
    
         
            +
                LibTest.bool_return_false.should eq false
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
                LibTest.bool_return_val(true).should  
     | 
| 
       32 
     | 
    
         
            -
                LibTest.bool_return_val(false).should  
     | 
| 
      
 31 
     | 
    
         
            +
                LibTest.bool_return_val(true).should eq true
         
     | 
| 
      
 32 
     | 
    
         
            +
                LibTest.bool_return_val(false).should eq false
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
                LibTest.bool_reverse_val(true).should  
     | 
| 
       35 
     | 
    
         
            -
                LibTest.bool_reverse_val(false).should  
     | 
| 
      
 34 
     | 
    
         
            +
                LibTest.bool_reverse_val(true).should eq false
         
     | 
| 
      
 35 
     | 
    
         
            +
                LibTest.bool_reverse_val(false).should eq true
         
     | 
| 
       36 
36 
     | 
    
         
             
              end
         
     | 
| 
       37 
37 
     | 
    
         
             
              it "raise error on invalid types" do
         
     | 
| 
       38 
38 
     | 
    
         
             
                lambda { LibTest.bool_return_val(nil) }.should raise_error(::TypeError)
         
     | 
    
        data/spec/ffi/buffer_spec.rb
    CHANGED
    
    | 
         @@ -23,13 +23,13 @@ describe "Buffer#total" do 
     | 
|
| 
       23 
23 
     | 
    
         
             
                  :long_long => 8, :ulong_long => 8, :float => 4, :double => 8
         
     | 
| 
       24 
24 
     | 
    
         
             
                }.each_pair do |t, s|
         
     | 
| 
       25 
25 
     | 
    
         
             
                  it "Buffer.alloc_in(#{t}, #{i}).total == #{i * s}" do
         
     | 
| 
       26 
     | 
    
         
            -
                    FFI::Buffer.alloc_in(t, i).total.should  
     | 
| 
      
 26 
     | 
    
         
            +
                    FFI::Buffer.alloc_in(t, i).total.should eq i * s
         
     | 
| 
       27 
27 
     | 
    
         
             
                  end
         
     | 
| 
       28 
28 
     | 
    
         
             
                  it "Buffer.alloc_out(#{t}, #{i}).total == #{i * s}" do
         
     | 
| 
       29 
     | 
    
         
            -
                    FFI::Buffer.alloc_out(t, i).total.should  
     | 
| 
      
 29 
     | 
    
         
            +
                    FFI::Buffer.alloc_out(t, i).total.should eq i * s
         
     | 
| 
       30 
30 
     | 
    
         
             
                  end
         
     | 
| 
       31 
31 
     | 
    
         
             
                  it "Buffer.alloc_inout(#{t}, #{i}).total == #{i * s}" do
         
     | 
| 
       32 
     | 
    
         
            -
                    FFI::Buffer.alloc_inout(t, i).total.should  
     | 
| 
      
 32 
     | 
    
         
            +
                    FFI::Buffer.alloc_inout(t, i).total.should eq i * s
         
     | 
| 
       33 
33 
     | 
    
         
             
                  end
         
     | 
| 
       34 
34 
     | 
    
         
             
                end
         
     | 
| 
       35 
35 
     | 
    
         
             
              end
         
     | 
| 
         @@ -40,7 +40,7 @@ describe "Buffer#put_char" do 
     | 
|
| 
       40 
40 
     | 
    
         
             
              (0..127).each do |i|
         
     | 
| 
       41 
41 
     | 
    
         
             
                (0..bufsize-1).each do |offset|
         
     | 
| 
       42 
42 
     | 
    
         
             
                  it "put_char(#{offset}, #{i}).get_char(#{offset}) == #{i}" do
         
     | 
| 
       43 
     | 
    
         
            -
                    FFI::Buffer.alloc_in(bufsize).put_char(offset, i).get_char(offset).should  
     | 
| 
      
 43 
     | 
    
         
            +
                    FFI::Buffer.alloc_in(bufsize).put_char(offset, i).get_char(offset).should eq i
         
     | 
| 
       44 
44 
     | 
    
         
             
                  end
         
     | 
| 
       45 
45 
     | 
    
         
             
                end
         
     | 
| 
       46 
46 
     | 
    
         
             
              end
         
     | 
| 
         @@ -50,7 +50,7 @@ describe "Buffer#put_uchar" do 
     | 
|
| 
       50 
50 
     | 
    
         
             
              (0..255).each do |i|
         
     | 
| 
       51 
51 
     | 
    
         
             
                (0..bufsize-1).each do |offset|
         
     | 
| 
       52 
52 
     | 
    
         
             
                  it "Buffer.put_uchar(#{offset}, #{i}).get_uchar(#{offset}) == #{i}" do
         
     | 
| 
       53 
     | 
    
         
            -
                    FFI::Buffer.alloc_in(bufsize).put_uchar(offset, i).get_uchar(offset).should  
     | 
| 
      
 53 
     | 
    
         
            +
                    FFI::Buffer.alloc_in(bufsize).put_uchar(offset, i).get_uchar(offset).should eq i
         
     | 
| 
       54 
54 
     | 
    
         
             
                  end
         
     | 
| 
       55 
55 
     | 
    
         
             
                end
         
     | 
| 
       56 
56 
     | 
    
         
             
              end 
         
     | 
| 
         @@ -60,7 +60,7 @@ describe "Buffer#put_short" do 
     | 
|
| 
       60 
60 
     | 
    
         
             
              [0, 1, 128, 32767].each do |i|
         
     | 
| 
       61 
61 
     | 
    
         
             
                (0..bufsize-2).each do |offset|
         
     | 
| 
       62 
62 
     | 
    
         
             
                  it "put_short(#{offset}, #{i}).get_short(#{offset}) == #{i}" do
         
     | 
| 
       63 
     | 
    
         
            -
                    FFI::Buffer.alloc_in(bufsize).put_short(offset, i).get_short(offset).should  
     | 
| 
      
 63 
     | 
    
         
            +
                    FFI::Buffer.alloc_in(bufsize).put_short(offset, i).get_short(offset).should eq i
         
     | 
| 
       64 
64 
     | 
    
         
             
                  end
         
     | 
| 
       65 
65 
     | 
    
         
             
                end
         
     | 
| 
       66 
66 
     | 
    
         
             
              end
         
     | 
| 
         @@ -70,7 +70,7 @@ describe "Buffer#put_ushort" do 
     | 
|
| 
       70 
70 
     | 
    
         
             
              [ 0, 1, 128, 32767, 65535, 0xfee1, 0xdead, 0xbeef, 0xcafe ].each do |i|
         
     | 
| 
       71 
71 
     | 
    
         
             
                (0..bufsize-2).each do |offset|
         
     | 
| 
       72 
72 
     | 
    
         
             
                  it "put_ushort(#{offset}, #{i}).get_ushort(#{offset}) == #{i}" do
         
     | 
| 
       73 
     | 
    
         
            -
                    FFI::Buffer.alloc_in(bufsize).put_ushort(offset, i).get_ushort(offset).should  
     | 
| 
      
 73 
     | 
    
         
            +
                    FFI::Buffer.alloc_in(bufsize).put_ushort(offset, i).get_ushort(offset).should eq i
         
     | 
| 
       74 
74 
     | 
    
         
             
                  end
         
     | 
| 
       75 
75 
     | 
    
         
             
                end
         
     | 
| 
       76 
76 
     | 
    
         
             
              end
         
     | 
| 
         @@ -80,7 +80,7 @@ describe "Buffer#put_int" do 
     | 
|
| 
       80 
80 
     | 
    
         
             
              [0, 1, 128, 32767, 0x7ffffff ].each do |i|
         
     | 
| 
       81 
81 
     | 
    
         
             
                (0..bufsize-4).each do |offset|
         
     | 
| 
       82 
82 
     | 
    
         
             
                  it "put_int(#{offset}, #{i}).get_int(#{offset}) == #{i}" do
         
     | 
| 
       83 
     | 
    
         
            -
                    FFI::Buffer.alloc_in(bufsize).put_int(offset, i).get_int(offset).should  
     | 
| 
      
 83 
     | 
    
         
            +
                    FFI::Buffer.alloc_in(bufsize).put_int(offset, i).get_int(offset).should eq i
         
     | 
| 
       84 
84 
     | 
    
         
             
                  end
         
     | 
| 
       85 
85 
     | 
    
         
             
                end
         
     | 
| 
       86 
86 
     | 
    
         
             
              end
         
     | 
| 
         @@ -90,7 +90,7 @@ describe "Buffer#put_uint" do 
     | 
|
| 
       90 
90 
     | 
    
         
             
              [ 0, 1, 128, 32767, 65535, 0xfee1dead, 0xcafebabe, 0xffffffff ].each do |i|
         
     | 
| 
       91 
91 
     | 
    
         
             
                (0..bufsize-4).each do |offset|
         
     | 
| 
       92 
92 
     | 
    
         
             
                  it "put_uint(#{offset}, #{i}).get_uint(#{offset}) == #{i}" do
         
     | 
| 
       93 
     | 
    
         
            -
                    FFI::Buffer.alloc_in(bufsize).put_uint(offset, i).get_uint(offset).should  
     | 
| 
      
 93 
     | 
    
         
            +
                    FFI::Buffer.alloc_in(bufsize).put_uint(offset, i).get_uint(offset).should eq i
         
     | 
| 
       94 
94 
     | 
    
         
             
                  end
         
     | 
| 
       95 
95 
     | 
    
         
             
                end
         
     | 
| 
       96 
96 
     | 
    
         
             
              end
         
     | 
| 
         @@ -100,7 +100,7 @@ describe "Buffer#put_long" do 
     | 
|
| 
       100 
100 
     | 
    
         
             
              [0, 1, 128, 32767, 0x7ffffff ].each do |i|
         
     | 
| 
       101 
101 
     | 
    
         
             
                (0..bufsize-FFI::Type::LONG.size).each do |offset|
         
     | 
| 
       102 
102 
     | 
    
         
             
                  it "put_long(#{offset}, #{i}).get_long(#{offset}) == #{i}" do
         
     | 
| 
       103 
     | 
    
         
            -
                    FFI::Buffer.alloc_in(bufsize).put_long(offset, i).get_long(offset).should  
     | 
| 
      
 103 
     | 
    
         
            +
                    FFI::Buffer.alloc_in(bufsize).put_long(offset, i).get_long(offset).should eq i
         
     | 
| 
       104 
104 
     | 
    
         
             
                  end
         
     | 
| 
       105 
105 
     | 
    
         
             
                end
         
     | 
| 
       106 
106 
     | 
    
         
             
              end
         
     | 
| 
         @@ -110,7 +110,7 @@ describe "Buffer#put_ulong" do 
     | 
|
| 
       110 
110 
     | 
    
         
             
              [ 0, 1, 128, 32767, 65535, 0xfee1dead, 0xcafebabe, 0xffffffff ].each do |i|
         
     | 
| 
       111 
111 
     | 
    
         
             
                (0..bufsize-FFI::Type::LONG.size).each do |offset|
         
     | 
| 
       112 
112 
     | 
    
         
             
                  it "put_ulong(#{offset}, #{i}).get_ulong(#{offset}) == #{i}" do
         
     | 
| 
       113 
     | 
    
         
            -
                    FFI::Buffer.alloc_in(bufsize).put_ulong(offset, i).get_ulong(offset).should  
     | 
| 
      
 113 
     | 
    
         
            +
                    FFI::Buffer.alloc_in(bufsize).put_ulong(offset, i).get_ulong(offset).should eq i
         
     | 
| 
       114 
114 
     | 
    
         
             
                  end
         
     | 
| 
       115 
115 
     | 
    
         
             
                end
         
     | 
| 
       116 
116 
     | 
    
         
             
              end
         
     | 
| 
         @@ -120,7 +120,7 @@ describe "Buffer#put_long_long" do 
     | 
|
| 
       120 
120 
     | 
    
         
             
              [0, 1, 128, 32767, 0x7ffffffffffffff ].each do |i|
         
     | 
| 
       121 
121 
     | 
    
         
             
                (0..bufsize-8).each do |offset|
         
     | 
| 
       122 
122 
     | 
    
         
             
                  it "put_long_long(#{offset}, #{i}).get_long_long(#{offset}) == #{i}" do
         
     | 
| 
       123 
     | 
    
         
            -
                    FFI::Buffer.alloc_in(bufsize).put_long_long(offset, i).get_long_long(offset).should  
     | 
| 
      
 123 
     | 
    
         
            +
                    FFI::Buffer.alloc_in(bufsize).put_long_long(offset, i).get_long_long(offset).should eq i
         
     | 
| 
       124 
124 
     | 
    
         
             
                  end
         
     | 
| 
       125 
125 
     | 
    
         
             
                end
         
     | 
| 
       126 
126 
     | 
    
         
             
              end
         
     | 
| 
         @@ -130,7 +130,7 @@ describe "Buffer#put_ulong_long" do 
     | 
|
| 
       130 
130 
     | 
    
         
             
              [ 0, 1, 128, 32767, 65535, 0xdeadcafebabe, 0x7fffffffffffffff ].each do |i|
         
     | 
| 
       131 
131 
     | 
    
         
             
                (0..bufsize-8).each do |offset|
         
     | 
| 
       132 
132 
     | 
    
         
             
                  it "put_ulong_long(#{offset}, #{i}).get_ulong_long(#{offset}) == #{i}" do
         
     | 
| 
       133 
     | 
    
         
            -
                    FFI::Buffer.alloc_in(bufsize).put_ulong_long(offset, i).get_ulong_long(offset).should  
     | 
| 
      
 133 
     | 
    
         
            +
                    FFI::Buffer.alloc_in(bufsize).put_ulong_long(offset, i).get_ulong_long(offset).should eq i
         
     | 
| 
       134 
134 
     | 
    
         
             
                  end
         
     | 
| 
       135 
135 
     | 
    
         
             
                end
         
     | 
| 
       136 
136 
     | 
    
         
             
              end
         
     | 
| 
         @@ -141,21 +141,21 @@ describe "Reading/Writing binary strings" do 
     | 
|
| 
       141 
141 
     | 
    
         
             
                buf = FFI::Buffer.new 1024
         
     | 
| 
       142 
142 
     | 
    
         
             
                buf.put_bytes(0, str);
         
     | 
| 
       143 
143 
     | 
    
         
             
                s2 = buf.get_bytes(0, 11);
         
     | 
| 
       144 
     | 
    
         
            -
                s2.should  
     | 
| 
      
 144 
     | 
    
         
            +
                s2.should eq str
         
     | 
| 
       145 
145 
     | 
    
         
             
              end
         
     | 
| 
       146 
146 
     | 
    
         
             
              it "Buffer#put_bytes with index and length" do
         
     | 
| 
       147 
147 
     | 
    
         
             
                str = "hello\0world"
         
     | 
| 
       148 
148 
     | 
    
         
             
                buf = FFI::Buffer.new 1024
         
     | 
| 
       149 
149 
     | 
    
         
             
                buf.put_bytes(0, str, 5, 6);
         
     | 
| 
       150 
150 
     | 
    
         
             
                s2 = buf.get_bytes(0, 6);
         
     | 
| 
       151 
     | 
    
         
            -
                s2.should  
     | 
| 
      
 151 
     | 
    
         
            +
                s2.should eq str[5..-1]
         
     | 
| 
       152 
152 
     | 
    
         
             
              end
         
     | 
| 
       153 
153 
     | 
    
         
             
              it "Buffer#put_bytes with only index" do
         
     | 
| 
       154 
154 
     | 
    
         
             
                str = "hello\0world"
         
     | 
| 
       155 
155 
     | 
    
         
             
                buf = FFI::Buffer.new 1024
         
     | 
| 
       156 
156 
     | 
    
         
             
                buf.put_bytes(0, str, 5);
         
     | 
| 
       157 
157 
     | 
    
         
             
                s2 = buf.get_bytes(0, 6);
         
     | 
| 
       158 
     | 
    
         
            -
                s2.should  
     | 
| 
      
 158 
     | 
    
         
            +
                s2.should eq str[5..-1]
         
     | 
| 
       159 
159 
     | 
    
         
             
              end
         
     | 
| 
       160 
160 
     | 
    
         
             
              it "Buffer#put_bytes with index > str.length" do
         
     | 
| 
       161 
161 
     | 
    
         
             
                str = "hello\0world"
         
     | 
| 
         @@ -179,21 +179,21 @@ describe "Reading/Writing ascii strings" do 
     | 
|
| 
       179 
179 
     | 
    
         
             
                buf = FFI::Buffer.new 1024
         
     | 
| 
       180 
180 
     | 
    
         
             
                buf.put_string(0, str);
         
     | 
| 
       181 
181 
     | 
    
         
             
                s2 = buf.get_bytes(0, 11);
         
     | 
| 
       182 
     | 
    
         
            -
                s2.should  
     | 
| 
      
 182 
     | 
    
         
            +
                s2.should eq str
         
     | 
| 
       183 
183 
     | 
    
         
             
              end
         
     | 
| 
       184 
184 
     | 
    
         
             
              it "Buffer#get_string with string containing zero byte" do
         
     | 
| 
       185 
185 
     | 
    
         
             
                str = "hello\0world"
         
     | 
| 
       186 
186 
     | 
    
         
             
                buf = FFI::Buffer.new 1024
         
     | 
| 
       187 
187 
     | 
    
         
             
                buf.put_bytes(0, str);
         
     | 
| 
       188 
188 
     | 
    
         
             
                s2 = buf.get_string(0, 11);
         
     | 
| 
       189 
     | 
    
         
            -
                s2.should  
     | 
| 
      
 189 
     | 
    
         
            +
                s2.should eq "hello"
         
     | 
| 
       190 
190 
     | 
    
         
             
              end
         
     | 
| 
       191 
191 
     | 
    
         
             
              it "Buffer#put_string without length should NUL terminate" do
         
     | 
| 
       192 
192 
     | 
    
         
             
                str = "hello"
         
     | 
| 
       193 
193 
     | 
    
         
             
                buf = FFI::Buffer.new 1024
         
     | 
| 
       194 
194 
     | 
    
         
             
                buf.put_string(0, str);
         
     | 
| 
       195 
195 
     | 
    
         
             
                s2 = buf.get_bytes(0, 6);
         
     | 
| 
       196 
     | 
    
         
            -
                s2.should  
     | 
| 
      
 196 
     | 
    
         
            +
                s2.should eq "hello\0"
         
     | 
| 
       197 
197 
     | 
    
         
             
              end
         
     | 
| 
       198 
198 
     | 
    
         
             
            end
         
     | 
| 
       199 
199 
     | 
    
         
             
            describe "Buffer#put_pointer" do
         
     | 
| 
         @@ -203,13 +203,13 @@ describe "Buffer#put_pointer" do 
     | 
|
| 
       203 
203 
     | 
    
         
             
                buf = FFI::Buffer.alloc_inout 8
         
     | 
| 
       204 
204 
     | 
    
         
             
                p2 = buf.put_pointer(0, p).get_pointer(0)
         
     | 
| 
       205 
205 
     | 
    
         
             
                p2.should_not be_nil
         
     | 
| 
       206 
     | 
    
         
            -
                p2.should  
     | 
| 
       207 
     | 
    
         
            -
                p2.get_uint(0).should  
     | 
| 
      
 206 
     | 
    
         
            +
                p2.should eq p
         
     | 
| 
      
 207 
     | 
    
         
            +
                p2.get_uint(0).should eq 0xdeadbeef
         
     | 
| 
       208 
208 
     | 
    
         
             
              end
         
     | 
| 
       209 
209 
     | 
    
         
             
            end
         
     | 
| 
       210 
210 
     | 
    
         
             
            describe "Buffer#size" do
         
     | 
| 
       211 
211 
     | 
    
         
             
              it "should return size" do
         
     | 
| 
       212 
212 
     | 
    
         
             
                buf = FFI::Buffer.new 14
         
     | 
| 
       213 
     | 
    
         
            -
                buf.size.should  
     | 
| 
      
 213 
     | 
    
         
            +
                buf.size.should eq 14
         
     | 
| 
       214 
214 
     | 
    
         
             
              end
         
     | 
| 
       215 
     | 
    
         
            -
            end
         
     | 
| 
      
 215 
     | 
    
         
            +
            end
         
     |