From 4bada8b864e445b6eebe1a341e30cad94dbcaf84 Mon Sep 17 00:00:00 2001 From: tenderlove Date: Thu, 6 May 2010 06:59:24 +0000 Subject: * ext/fiddle/*: Adding fiddle library to wrap libffi * test/fiddle/*: testing fiddle extension * ext/dl/lib/dl.rb: Requiring fiddle if it is available * ext/dl/lib/dl/callback.rb: using Fiddle if it is available * ext/dl/lib/dl/func.rb: ditto git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27640 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/fiddle/lib/fiddle.rb | 27 +++++++++++++++++++++++++++ ext/fiddle/lib/fiddle/closure.rb | 17 +++++++++++++++++ ext/fiddle/lib/fiddle/function.rb | 5 +++++ 3 files changed, 49 insertions(+) create mode 100644 ext/fiddle/lib/fiddle.rb create mode 100644 ext/fiddle/lib/fiddle/closure.rb create mode 100644 ext/fiddle/lib/fiddle/function.rb (limited to 'ext/fiddle/lib') 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 -- cgit v1.2.3