diff options
Diffstat (limited to 'ext/fiddle/lib')
-rw-r--r-- | ext/fiddle/lib/fiddle.rb | 27 | ||||
-rw-r--r-- | ext/fiddle/lib/fiddle/closure.rb | 17 | ||||
-rw-r--r-- | ext/fiddle/lib/fiddle/function.rb | 5 |
3 files changed, 49 insertions, 0 deletions
diff --git a/ext/fiddle/lib/fiddle.rb b/ext/fiddle/lib/fiddle.rb new file mode 100644 index 0000000000..bc4017eee0 --- /dev/null +++ b/ext/fiddle/lib/fiddle.rb @@ -0,0 +1,27 @@ +require 'fiddle.so' +require 'fiddle/function' +require 'fiddle/closure' +require 'dl' + +module Fiddle + Pointer = DL::CPtr + + if WINDOWS + def self.win32_last_error + Thread.current[:__FIDDLE_WIN32_LAST_ERROR__] + end + + def self.win32_last_error= error + Thread.current[:__FIDDLE_WIN32_LAST_ERROR__] = error + end + end + + def self.last_error + Thread.current[:__FIDDLE_LAST_ERROR__] + end + + def self.last_error= error + Thread.current[:__DL2_LAST_ERROR__] = error + Thread.current[:__FIDDLE_LAST_ERROR__] = error + end +end diff --git a/ext/fiddle/lib/fiddle/closure.rb b/ext/fiddle/lib/fiddle/closure.rb new file mode 100644 index 0000000000..dc2b7a65be --- /dev/null +++ b/ext/fiddle/lib/fiddle/closure.rb @@ -0,0 +1,17 @@ +module Fiddle + class Closure + attr_reader :ctype + attr_reader :args + + class BlockCaller < Fiddle::Closure + def initialize ctype, args, abi = Fiddle::Function::DEFAULT, &block + super(ctype, args, abi) + @block = block + end + + def call *args + @block.call(*args) + end + end + end +end diff --git a/ext/fiddle/lib/fiddle/function.rb b/ext/fiddle/lib/fiddle/function.rb new file mode 100644 index 0000000000..7b9e735874 --- /dev/null +++ b/ext/fiddle/lib/fiddle/function.rb @@ -0,0 +1,5 @@ +module Fiddle + class Function + attr_reader :abi + end +end |