fiddle 1.0.7 → 1.0.8
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.
- checksums.yaml +4 -4
- data/ext/fiddle/extconf.rb +43 -0
- data/ext/fiddle/function.c +9 -2
- data/lib/fiddle.rb +12 -0
- data/lib/fiddle/cparser.rb +4 -2
- data/lib/fiddle/types.rb +18 -17
- data/lib/fiddle/version.rb +1 -1
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: f60ecd26479775fa123a883a89a39ebae034c408e99bd0bc33a4d802cc04c648
         | 
| 4 | 
            +
              data.tar.gz: 7466888aaca2242fd13af7c6663212d4c7404c4e5336626baea9c2519a068c7f
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: bd4349a30d8aa6b0113261cb3f53e2dee46b56b1ea72617abfbf921f31b13161897f39277358aa8e1bf3d6329d41b4b260f198ac850916eb677e7a46a21ee299
         | 
| 7 | 
            +
              data.tar.gz: 99dd69a25bb75de362d244ebc0d4d338710b93195ce417356e44e9d7415ec7a1c0e553da2406a3ae3c5d907d705ad40e9bb9ab46eb7c95fc2ddd0aee7ea42df5
         | 
    
        data/ext/fiddle/extconf.rb
    CHANGED
    
    | @@ -3,6 +3,47 @@ require 'mkmf' | |
| 3 3 |  | 
| 4 4 | 
             
            # :stopdoc:
         | 
| 5 5 |  | 
| 6 | 
            +
            def gcc?
         | 
| 7 | 
            +
              RbConfig::CONFIG["GCC"] == "yes"
         | 
| 8 | 
            +
            end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            def disable_optimization_build_flag(flags)
         | 
| 11 | 
            +
              if gcc?
         | 
| 12 | 
            +
                expanded_flags = RbConfig.expand(flags.dup)
         | 
| 13 | 
            +
                optimization_option_pattern = /(^|\s)?-O\d(\s|$)?/
         | 
| 14 | 
            +
                if optimization_option_pattern.match?(expanded_flags)
         | 
| 15 | 
            +
                  expanded_flags.gsub(optimization_option_pattern, '\\1-Og\\2')
         | 
| 16 | 
            +
                else
         | 
| 17 | 
            +
                  flags + " -Og"
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              else
         | 
| 20 | 
            +
                flags
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            def enable_debug_build_flag(flags)
         | 
| 25 | 
            +
              if gcc?
         | 
| 26 | 
            +
                expanded_flags = RbConfig.expand(flags.dup)
         | 
| 27 | 
            +
                debug_option_pattern = /(^|\s)-g(?:gdb)?\d?(\s|$)/
         | 
| 28 | 
            +
                if debug_option_pattern.match?(expanded_flags)
         | 
| 29 | 
            +
                  expanded_flags.gsub(debug_option_pattern, '\\1-ggdb3\\2')
         | 
| 30 | 
            +
                else
         | 
| 31 | 
            +
                  flags + " -ggdb3"
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              else
         | 
| 34 | 
            +
                flags
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
            end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            checking_for(checking_message("--enable-debug-build option")) do
         | 
| 39 | 
            +
              enable_debug_build = enable_config("debug-build", false)
         | 
| 40 | 
            +
              if enable_debug_build
         | 
| 41 | 
            +
                $CFLAGS = disable_optimization_build_flag($CFLAGS)
         | 
| 42 | 
            +
                $CFLAGS = enable_debug_build_flag($CFLAGS)
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
              enable_debug_build
         | 
| 45 | 
            +
            end
         | 
| 46 | 
            +
             | 
| 6 47 | 
             
            libffi_version = nil
         | 
| 7 48 | 
             
            have_libffi = false
         | 
| 8 49 | 
             
            bundle = enable_config('bundled-libffi')
         | 
| @@ -159,6 +200,8 @@ elsif have_header "windows.h" | |
| 159 200 | 
             
              %w{ LoadLibrary FreeLibrary GetProcAddress }.each do |func|
         | 
| 160 201 | 
             
                abort "missing function #{func}" unless have_func(func)
         | 
| 161 202 | 
             
              end
         | 
| 203 | 
            +
             | 
| 204 | 
            +
              have_library "ws2_32"
         | 
| 162 205 | 
             
            end
         | 
| 163 206 |  | 
| 164 207 | 
             
            have_const('FFI_STDCALL', ffi_header)
         | 
    
        data/ext/fiddle/function.c
    CHANGED
    
    | @@ -375,10 +375,17 @@ function_call(int argc, VALUE argv[], VALUE self) | |
| 375 375 | 
             
                    (void)rb_thread_call_without_gvl(nogvl_ffi_call, &args, 0, 0);
         | 
| 376 376 | 
             
                }
         | 
| 377 377 |  | 
| 378 | 
            -
                 | 
| 378 | 
            +
                {
         | 
| 379 | 
            +
                    int errno_keep = errno;
         | 
| 379 380 | 
             
            #if defined(_WIN32)
         | 
| 380 | 
            -
             | 
| 381 | 
            +
                    int socket_error = WSAGetLastError();
         | 
| 382 | 
            +
                    rb_funcall(mFiddle, rb_intern("win32_last_error="), 1,
         | 
| 383 | 
            +
                               INT2NUM(errno_keep));
         | 
| 384 | 
            +
                    rb_funcall(mFiddle, rb_intern("win32_last_socket_error="), 1,
         | 
| 385 | 
            +
                               INT2NUM(socket_error));
         | 
| 381 386 | 
             
            #endif
         | 
| 387 | 
            +
                    rb_funcall(mFiddle, rb_intern("last_error="), 1, INT2NUM(errno_keep));
         | 
| 388 | 
            +
                }
         | 
| 382 389 |  | 
| 383 390 | 
             
                ALLOCV_END(alloc_buffer);
         | 
| 384 391 |  | 
    
        data/lib/fiddle.rb
    CHANGED
    
    | @@ -17,6 +17,18 @@ module Fiddle | |
| 17 17 | 
             
                def self.win32_last_error= error
         | 
| 18 18 | 
             
                  Thread.current[:__FIDDLE_WIN32_LAST_ERROR__] = error
         | 
| 19 19 | 
             
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                # Returns the last win32 socket +Error+ of the current executing
         | 
| 22 | 
            +
                # +Thread+ or nil if none
         | 
| 23 | 
            +
                def self.win32_last_socket_error
         | 
| 24 | 
            +
                  Thread.current[:__FIDDLE_WIN32_LAST_SOCKET_ERROR__]
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                # Sets the last win32 socket +Error+ of the current executing
         | 
| 28 | 
            +
                # +Thread+ to +error+
         | 
| 29 | 
            +
                def self.win32_last_socket_error= error
         | 
| 30 | 
            +
                  Thread.current[:__FIDDLE_WIN32_LAST_SOCKET_ERROR__] = error
         | 
| 31 | 
            +
                end
         | 
| 20 32 | 
             
              end
         | 
| 21 33 |  | 
| 22 34 | 
             
              # Returns the last +Error+ of the current executing +Thread+ or nil if none
         | 
    
        data/lib/fiddle/cparser.rb
    CHANGED
    
    | @@ -148,9 +148,11 @@ module Fiddle | |
| 148 148 | 
             
                #
         | 
| 149 149 | 
             
                def parse_ctype(ty, tymap=nil)
         | 
| 150 150 | 
             
                  tymap ||= {}
         | 
| 151 | 
            -
                   | 
| 152 | 
            -
                  when Array
         | 
| 151 | 
            +
                  if ty.is_a?(Array)
         | 
| 153 152 | 
             
                    return [parse_ctype(ty[0], tymap), ty[1]]
         | 
| 153 | 
            +
                  end
         | 
| 154 | 
            +
                  ty = ty.gsub(/\Aconst\s+/, "")
         | 
| 155 | 
            +
                  case ty
         | 
| 154 156 | 
             
                  when 'void'
         | 
| 155 157 | 
             
                    return TYPE_VOID
         | 
| 156 158 | 
             
                  when /\A(?:(?:signed\s+)?long\s+long(?:\s+int\s+)?|int64_t)(?:\s+\w+)?\z/
         | 
    
        data/lib/fiddle/types.rb
    CHANGED
    
    | @@ -27,28 +27,29 @@ module Fiddle | |
| 27 27 | 
             
              # * WORD
         | 
| 28 28 | 
             
              module Win32Types
         | 
| 29 29 | 
             
                def included(m) # :nodoc:
         | 
| 30 | 
            +
                  # https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types
         | 
| 30 31 | 
             
                  m.module_eval{
         | 
| 31 | 
            -
                    typealias " | 
| 32 | 
            -
                    typealias "PDWORD", "unsigned long *"
         | 
| 33 | 
            -
                    typealias "DWORD32", "unsigned long"
         | 
| 34 | 
            -
                    typealias "DWORD64", "unsigned long long"
         | 
| 35 | 
            -
                    typealias "WORD", "unsigned short"
         | 
| 36 | 
            -
                    typealias "PWORD", "unsigned short *"
         | 
| 32 | 
            +
                    typealias "ATOM", "WORD"
         | 
| 37 33 | 
             
                    typealias "BOOL", "int"
         | 
| 38 | 
            -
                    typealias "ATOM", "int"
         | 
| 39 34 | 
             
                    typealias "BYTE", "unsigned char"
         | 
| 40 | 
            -
                    typealias " | 
| 35 | 
            +
                    typealias "DWORD", "unsigned long"
         | 
| 36 | 
            +
                    typealias "DWORD32", "uint32_t"
         | 
| 37 | 
            +
                    typealias "DWORD64", "uint64_t"
         | 
| 38 | 
            +
                    typealias "HANDLE", "PVOID"
         | 
| 39 | 
            +
                    typealias "HDC", "HANDLE"
         | 
| 40 | 
            +
                    typealias "HINSTANCE", "HANDLE"
         | 
| 41 | 
            +
                    typealias "HWND", "HANDLE"
         | 
| 42 | 
            +
                    typealias "LPCSTR", "const char *"
         | 
| 43 | 
            +
                    typealias "LPSTR", "char *"
         | 
| 44 | 
            +
                    typealias "PBYTE", "BYTE *"
         | 
| 45 | 
            +
                    typealias "PDWORD", "DWORD *"
         | 
| 46 | 
            +
                    typealias "PHANDLE", "HANDLE *"
         | 
| 47 | 
            +
                    typealias "PVOID", "void *"
         | 
| 48 | 
            +
                    typealias "PWORD", "WORD *"
         | 
| 49 | 
            +
                    typealias "UCHAR", "unsigned char"
         | 
| 41 50 | 
             
                    typealias "UINT", "unsigned int"
         | 
| 42 51 | 
             
                    typealias "ULONG", "unsigned long"
         | 
| 43 | 
            -
                    typealias " | 
| 44 | 
            -
                    typealias "HANDLE", "uintptr_t"
         | 
| 45 | 
            -
                    typealias "PHANDLE", "void*"
         | 
| 46 | 
            -
                    typealias "PVOID", "void*"
         | 
| 47 | 
            -
                    typealias "LPCSTR", "char*"
         | 
| 48 | 
            -
                    typealias "LPSTR", "char*"
         | 
| 49 | 
            -
                    typealias "HINSTANCE", "unsigned int"
         | 
| 50 | 
            -
                    typealias "HDC", "unsigned int"
         | 
| 51 | 
            -
                    typealias "HWND", "unsigned int"
         | 
| 52 | 
            +
                    typealias "WORD", "unsigned short"
         | 
| 52 53 | 
             
                  }
         | 
| 53 54 | 
             
                end
         | 
| 54 55 | 
             
                module_function :included
         | 
    
        data/lib/fiddle/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: fiddle
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0. | 
| 4 | 
            +
              version: 1.0.8
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Aaron Patterson
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2021-04-19 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: bundler
         | 
| @@ -118,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 118 118 | 
             
                - !ruby/object:Gem::Version
         | 
| 119 119 | 
             
                  version: '0'
         | 
| 120 120 | 
             
            requirements: []
         | 
| 121 | 
            -
            rubygems_version: 3. | 
| 121 | 
            +
            rubygems_version: 3.3.0.dev
         | 
| 122 122 | 
             
            signing_key: 
         | 
| 123 123 | 
             
            specification_version: 4
         | 
| 124 124 | 
             
            summary: A libffi wrapper for Ruby.
         |