diff options
author | tenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-06-28 16:26:59 +0000 |
---|---|---|
committer | tenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-06-28 16:26:59 +0000 |
commit | 50bb2544bb38cef85cae6467763d0fde336f9ee3 (patch) | |
tree | 7666cdbd203a8e08d49bfd610945f15e6621433d | |
parent | f6a93900dc95beb85240c48d2e5ae06039b8a69d (diff) |
* ext/fiddle/fiddle.h: added FFI type detection to avoid bug in ffi
header files. Thanks Yugui! [ruby-core:30917]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28465 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | ext/fiddle/fiddle.h | 49 |
2 files changed, 54 insertions, 0 deletions
@@ -1,3 +1,8 @@ +Tue Jun 29 01:22:08 2010 Aaron Patterson <aaron@tenderlovemaking.com> + + * ext/fiddle/fiddle.h: added FFI type detection to avoid bug in ffi + header files. Thanks Yugui! [ruby-core:30917] + Mon Jun 28 22:14:22 2010 Yusuke Endoh <mame@tsg.ne.jp> * test/rdoc/test_rdoc_ri_driver.rb (TestRDocRIDriver#test_formatter): diff --git a/ext/fiddle/fiddle.h b/ext/fiddle/fiddle.h index 0c573871dc..a73e560593 100644 --- a/ext/fiddle/fiddle.h +++ b/ext/fiddle/fiddle.h @@ -18,6 +18,55 @@ #include <ffi.h> #endif +#undef ffi_type_uchar +#undef ffi_type_schar +#undef ffi_type_ushort +#undef ffi_type_sshort +#undef ffi_type_uint +#undef ffi_type_sint +#undef ffi_type_ulong +#undef ffi_type_slong + +#ifdef CHAR_BIT == 8 +# define ffi_type_uchar ffi_type_uint8 +# define ffi_type_schar ffi_type_sint8 +#else +# error "CHAR_BIT not supported" +#endif + +# ifdef SIZEOF_SHORT == 2 +# define ffi_type_ushort ffi_type_uint16 +# define ffi_type_sshort ffi_type_sint16 +# elif SIZEOF_SHORT == 4 +# define ffi_type_ushort ffi_type_uint32 +# define ffi_type_sshort ffi_type_sint32 +# else +# error "short size not supported" +# endif + +# if SIZEOF_INT == 2 +# define ffi_type_uint ffi_type_uint16 +# define ffi_type_sint ffi_type_sint16 +# elif SIZEOF_INT == 4 +# define ffi_type_uint ffi_type_uint32 +# define ffi_type_sint ffi_type_sint32 +# elif SIZEOF_INT == 8 +# define ffi_type_uint ffi_type_uint64 +# define ffi_type_sint ffi_type_sint64 +# else +# error "int size not supported" +# endif + +# if SIZEOF_LONG == 4 +# define ffi_type_ulong ffi_type_uint32 +# define ffi_type_slong ffi_type_sint32 +# elif SIZEOF_LONG == 8 +# define ffi_type_ulong ffi_type_uint64 +# define ffi_type_slong ffi_type_sint64 +# else +# error "long size not supported" +# endif + #include <closure.h> #include <conversions.h> #include <function.h> |