summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--ext/fiddle/closure.c2
-rw-r--r--ext/fiddle/extconf.rb30
-rw-r--r--ext/fiddle/function.c4
-rw-r--r--version.h2
5 files changed, 40 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index d3d67d6f1f..cd43b9ce2e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Thu Dec 20 18:43:00 2012 Naohisa Goto <ngotogenome@gmail.com>
+
+ * ext/fiddle/extconf.rb, ext/fiddle/function.c
+ (Fiddle::Function::STDCALL): FFI_STDCALL is not a macro, but an
+ enumeration. [ruby-core:50398] [Bug #7483]
+
Thu Dec 20 18:40:25 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* thread.c (exec_event_hooks): exceptions in event hooks should not
diff --git a/ext/fiddle/closure.c b/ext/fiddle/closure.c
index a3c0792fc2..21796660c4 100644
--- a/ext/fiddle/closure.c
+++ b/ext/fiddle/closure.c
@@ -284,7 +284,7 @@ Init_fiddle_closure()
/*
* Document-method: new
*
- * call-seq: new(ret, *args, abi = Fiddle::DEFAULT)
+ * call-seq: new(ret, args, abi = Fiddle::DEFAULT)
*
* Construct a new Closure object.
*
diff --git a/ext/fiddle/extconf.rb b/ext/fiddle/extconf.rb
index 78622b6a6f..2cb9ae0ace 100644
--- a/ext/fiddle/extconf.rb
+++ b/ext/fiddle/extconf.rb
@@ -19,6 +19,36 @@ end
have_header 'sys/mman.h'
+if have_header "dlfcn.h"
+ have_library "dl"
+
+ %w{ dlopen dlclose dlsym }.each do |func|
+ abort "missing function #{func}" unless have_func(func)
+ end
+
+ have_func "dlerror"
+elsif have_header "windows.h"
+ %w{ LoadLibrary FreeLibrary GetProcAddress }.each do |func|
+ abort "missing function #{func}" unless have_func(func)
+ end
+end
+
+have_const('FFI_STDCALL', 'ffi.h') || have_const('FFI_STDCALL', 'ffi/ffi.h')
+
+config = File.read(RbConfig.expand(File.join($arch_hdrdir, "ruby/config.h")))
+types = {"SIZE_T"=>"SSIZE_T", "PTRDIFF_T"=>nil, "INTPTR_T"=>nil}
+types.each do |type, signed|
+ if /^\#define\s+SIZEOF_#{type}\s+(SIZEOF_(.+)|\d+)/ =~ config
+ if size = $2 and size != 'VOIDP'
+ size = types.fetch(size) {size}
+ $defs << format("-DTYPE_%s=TYPE_%s", signed||type, size)
+ end
+ if signed
+ check_signedness(type.downcase, "stddef.h")
+ end
+ end
+end
+
create_makefile 'fiddle'
# :startdoc:
diff --git a/ext/fiddle/function.c b/ext/fiddle/function.c
index 6e8909991a..ada37a4942 100644
--- a/ext/fiddle/function.c
+++ b/ext/fiddle/function.c
@@ -179,7 +179,7 @@ Init_fiddle_function(void)
*/
rb_define_const(cFiddleFunction, "DEFAULT", INT2NUM(FFI_DEFAULT_ABI));
-#ifdef FFI_STDCALL
+#ifdef HAVE_CONST_FFI_STDCALL
/*
* Document-const: STDCALL
*
@@ -203,7 +203,7 @@ Init_fiddle_function(void)
/*
* Document-method: new
- * call-seq: new(ptr, *args, ret_type, abi = DEFAULT)
+ * call-seq: new(ptr, args, ret_type, abi = DEFAULT)
*
* Constructs a Function object.
* * +ptr+ is a referenced function, of a DL::Handle
diff --git a/version.h b/version.h
index a3c892e99e..8afae20985 100644
--- a/version.h
+++ b/version.h
@@ -1,5 +1,5 @@
#define RUBY_VERSION "1.9.3"
-#define RUBY_PATCHLEVEL 351
+#define RUBY_PATCHLEVEL 352
#define RUBY_RELEASE_DATE "2012-12-20"
#define RUBY_RELEASE_YEAR 2012