[前][次][番号順一覧][スレッド一覧]

ruby-changes:25419

From: shirosaki <ko1@a...>
Date: Mon, 5 Nov 2012 23:00:51 +0900 (JST)
Subject: [ruby-changes:25419] shirosaki:r37476 (trunk): * ext/dl/win32/lib/Win32API.rb (Win32API#call): use 64bit pointer for x64

shirosaki	2012-11-05 23:00:41 +0900 (Mon, 05 Nov 2012)

  New Revision: 37476

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37476

  Log:
    * ext/dl/win32/lib/Win32API.rb (Win32API#call): use 64bit pointer for x64
      Windows. This would fix
      TestSecureRandom#test_s_random_bytes_without_openssl error.
      [ruby-core:47451] [Bug #6990]

  Modified files:
    trunk/ChangeLog
    trunk/ext/dl/win32/lib/Win32API.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 37475)
+++ ChangeLog	(revision 37476)
@@ -1,3 +1,10 @@
+Mon Nov  5 22:45:03 2012  Hiroshi Shirosaki  <h.shirosaki@g...>
+
+	* ext/dl/win32/lib/Win32API.rb (Win32API#call): use 64bit pointer for x64
+	  Windows. This would fix
+	  TestSecureRandom#test_s_random_bytes_without_openssl error.
+	  [ruby-core:47451] [Bug #6990]
+
 Mon Nov  5 22:09:26 2012  Hiroshi Shirosaki  <h.shirosaki@g...>
 
 	* cygwin/GNUmakefile.in (uncommon.mk): link *.res.o.
Index: ext/dl/win32/lib/Win32API.rb
===================================================================
--- ext/dl/win32/lib/Win32API.rb	(revision 37475)
+++ ext/dl/win32/lib/Win32API.rb	(revision 37476)
@@ -7,6 +7,7 @@
 class Win32API
   DLL = {}
   TYPEMAP = {"0" => DL::TYPE_VOID, "S" => DL::TYPE_VOIDP, "I" => DL::TYPE_LONG}
+  POINTER_TYPE = DL::SIZEOF_VOIDP == DL::SIZEOF_LONG_LONG ? 'q*' : 'l!*'
 
   def initialize(dllname, func, import, export = "0", calltype = :stdcall)
     @proto = [import].join.tr("VPpNnLlIi", "0SSI").sub(/^(.)0*$/, '\1')
@@ -19,7 +20,7 @@
   def call(*args)
     import = @proto.split("")
     args.each_with_index do |x, i|
-      args[i], = [x == 0 ? nil : x].pack("p").unpack("l!*") if import[i] == "S"
+      args[i], = [x == 0 ? nil : x].pack("p").unpack(POINTER_TYPE) if import[i] == "S"
       args[i], = [x].pack("I").unpack("i") if import[i] == "I"
     end
     ret, = @func.call(args)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]