diff options
author | Nobuyoshi Nakada <[email protected]> | 2024-04-27 22:03:13 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2024-05-03 14:49:29 +0900 |
commit | 0b091e6675e58afbc52d200440c8ed31c13d4a00 () | |
tree | d6dafcb93fd0fb9f43703c6261c12708365dd2f2 /ext/win32 | |
parent | 9f8e87c44bc87f5b37364707d1f570da1d7a6f89 (diff) |
win32/registry: Refine pack/unpack
* Use 'J' for HANDLE. * Use 'Q' for QWORD. * Define template constants. * Supply zero bytes in `unpackqw` as well as `unpackdw`. * Use `String#unpack1`.
-rw-r--r-- | ext/win32/lib/win32/registry.rb | 22 |
1 files changed, 13 insertions, 9 deletions
@@ -254,30 +254,34 @@ For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/pr /^(?:x64|x86_64)/ =~ RUBY_PLATFORM end def packhandle(h) - win64? ? packqw(h) : packdw(h) end def unpackhandle(h) - win64? ? unpackqw(h) : unpackdw(h) end def packdw(dw) - [dw].pack('V') end def unpackdw(dw) - dw += [0].pack('V') - dw.unpack('V')[0] end def packqw(qw) - [ qw & 0xFFFFFFFF, qw >> 32 ].pack('VV') end def unpackqw(qw) - qw = qw.unpack('VV') - (qw[1] << 32) | qw[0] end def make_wstr(str) @@ -657,7 +661,7 @@ For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/pr when REG_DWORD [ type, API.unpackdw(data) ] when REG_DWORD_BIG_ENDIAN - [ type, data.unpack('N')[0] ] when REG_QWORD [ type, API.unpackqw(data) ] else |