summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-02-09 07:20:53 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-02-09 07:20:53 +0000
commitb97d91dd4afe7861c8301776cae3b9e3e58e2556 (patch)
tree12af6d1eff0c433c07761b5060cedf5e37e47853 /ext
parentc65134a3278b918fe3daf0dbb147c85c7d89d416 (diff)
merge revision(s) 34504,34506,34507,34508:
* ext/dl/lib/types.rb: Win64 support. * ext/fiddle/conversions.c (value_to_generic): src is not guranteed as a Bignum if the type is LONG_LONG. it may be a Fixnum if the value is small. * ext/dl/lib/value.rb (DL::ValueUtil.{unsigned_value,signed_value}): currenly pack/unpack does not accept "q!" and "Q!". * test/ruby/memory_status.rb (Memory::Win32): 64bit support. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@34509 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r--ext/dl/lib/dl/types.rb10
-rw-r--r--ext/dl/lib/dl/value.rb4
-rw-r--r--ext/fiddle/conversions.c2
3 files changed, 12 insertions, 4 deletions
diff --git a/ext/dl/lib/dl/types.rb b/ext/dl/lib/dl/types.rb
index c79f74f95c..3dfa40807a 100644
--- a/ext/dl/lib/dl/types.rb
+++ b/ext/dl/lib/dl/types.rb
@@ -7,6 +7,8 @@ module DL
# * BOOL
# * BYTE
# * DWORD
+ # * DWORD32
+ # * DWORD64
# * HANDLE
# * HDC
# * HINSTANCE
@@ -27,6 +29,8 @@ module DL
m.module_eval{
typealias "DWORD", "unsigned long"
typealias "PDWORD", "unsigned long *"
+ typealias "DWORD32", "unsigned long"
+ typealias "DWORD64", "unsigned long long"
typealias "WORD", "unsigned short"
typealias "PWORD", "unsigned short *"
typealias "BOOL", "int"
@@ -36,7 +40,11 @@ module DL
typealias "UINT", "unsigned int"
typealias "ULONG", "unsigned long"
typealias "UCHAR", "unsigned char"
- typealias "HANDLE", "unsigned long"
+ if [nil].pack('p').bytesize == 8
+ typealias "HANDLE", "unsigned long long"
+ else
+ typealias "HANDLE", "unsigned long"
+ end
typealias "PHANDLE", "void*"
typealias "PVOID", "void*"
typealias "LPCSTR", "char*"
diff --git a/ext/dl/lib/dl/value.rb b/ext/dl/lib/dl/value.rb
index 51f96b293b..e99e3cf3bf 100644
--- a/ext/dl/lib/dl/value.rb
+++ b/ext/dl/lib/dl/value.rb
@@ -13,7 +13,7 @@ module DL
when TYPE_LONG
[val].pack("l!").unpack("L!")[0]
when TYPE_LONG_LONG
- [val].pack("q!").unpack("Q!")[0]
+ [val].pack("q").unpack("Q")[0]
else
val
end
@@ -30,7 +30,7 @@ module DL
when TYPE_LONG
[val].pack("L!").unpack("l!")[0]
when TYPE_LONG_LONG
- [val].pack("Q!").unpack("q!")[0]
+ [val].pack("Q").unpack("q")[0]
else
val
end
diff --git a/ext/fiddle/conversions.c b/ext/fiddle/conversions.c
index 8ffd7c5e08..14b444fb65 100644
--- a/ext/fiddle/conversions.c
+++ b/ext/fiddle/conversions.c
@@ -72,7 +72,7 @@ value_to_generic(int type, VALUE src, fiddle_generic * dst)
break;
#if HAVE_LONG_LONG
case TYPE_LONG_LONG:
- dst->long_long = rb_big2ull(src);
+ dst->long_long = NUM2ULL(src);
break;
#endif
case TYPE_FLOAT: