summaryrefslogtreecommitdiff
path: root/ext/win32
diff options
context:
space:
mode:
authorNobuyoshi Nakada <[email protected]>2024-04-27 22:03:13 +0900
committerNobuyoshi Nakada <[email protected]>2024-05-03 14:49:29 +0900
commit0b091e6675e58afbc52d200440c8ed31c13d4a00 ()
treed6dafcb93fd0fb9f43703c6261c12708365dd2f2 /ext/win32
parent9f8e87c44bc87f5b37364707d1f570da1d7a6f89 (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.rb22
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