[pypy-commit] pypy py3.5: generalize win Reg* calls for A and W variants, use and fix tests
mattip
pypy.commits at gmail.com
Thu Mar 1 05:37:33 EST 2018
Author: Matti Picus <matti.picus at gmail.com>
Branch: py3.5
Changeset: r93929:0684dbb33360
Date: 2018-03-01 05:35 -0500
http://bitbucket.org/pypy/pypy/changeset/0684dbb33360/
Log: generalize win Reg* calls for A and W variants, use and fix tests
diff --git a/pypy/module/_winreg/interp_winreg.py b/pypy/module/_winreg/interp_winreg.py
--- a/pypy/module/_winreg/interp_winreg.py
+++ b/pypy/module/_winreg/interp_winreg.py
@@ -175,7 +175,7 @@
c_subkey = rffi.cast(rffi.CCHARP, wide_subkey)
with rffi.scoped_unicode2wcharp(filename) as wide_filename:
c_filename = rffi.cast(rffi.CCHARP, wide_filename)
- ret = rwinreg.RegLoadKey(hkey, c_subkey, c_filename)
+ ret = rwinreg.RegLoadKeyW(hkey, c_subkey, c_filename)
if ret != 0:
raiseWindowsError(space, ret, 'RegLoadKey')
@@ -196,7 +196,7 @@
hkey = hkey_w(w_hkey, space)
with rffi.scoped_unicode2wcharp(filename) as wide_filename:
c_filename = rffi.cast(rffi.CCHARP, wide_filename)
- ret = rwinreg.RegSaveKey(hkey, c_filename, None)
+ ret = rwinreg.RegSaveKeyW(hkey, c_filename, None)
if ret != 0:
raiseWindowsError(space, ret, 'RegSaveKey')
@@ -226,7 +226,7 @@
c_subkey = rffi.cast(rffi.CCHARP, subkey)
with rffi.scoped_unicode2wcharp(value) as dataptr:
c_dataptr = rffi.cast(rffi.CCHARP, dataptr)
- ret = rwinreg.RegSetValue(hkey, c_subkey, rwinreg.REG_SZ,
+ ret = rwinreg.RegSetValueW(hkey, c_subkey, rwinreg.REG_SZ,
c_dataptr, len(value))
if ret != 0:
raiseWindowsError(space, ret, 'RegSetValue')
@@ -250,7 +250,7 @@
with rffi.scoped_unicode2wcharp(subkey) as wide_subkey:
c_subkey = rffi.cast(rffi.CCHARP, wide_subkey)
with lltype.scoped_alloc(rwin32.PLONG.TO, 1) as bufsize_p:
- ret = rwinreg.RegQueryValue(hkey, c_subkey, None, bufsize_p)
+ ret = rwinreg.RegQueryValueW(hkey, c_subkey, None, bufsize_p)
bufSize = intmask(bufsize_p[0])
if ret == rwinreg.ERROR_MORE_DATA:
bufSize = 256
@@ -259,7 +259,7 @@
while True:
with lltype.scoped_alloc(rffi.CCHARP.TO, bufSize) as buf:
- ret = rwinreg.RegQueryValue(hkey, c_subkey, buf, bufsize_p)
+ ret = rwinreg.RegQueryValueW(hkey, c_subkey, buf, bufsize_p)
if ret == rwinreg.ERROR_MORE_DATA:
print 'bufSize was %d, too small' % bufSize
# Resize and retry
@@ -440,7 +440,7 @@
try:
with rffi.scoped_unicode2wcharp(value_name) as wide_vn:
c_vn = rffi.cast(rffi.CCHARP, wide_vn)
- ret = rwinreg.RegSetValueEx(hkey, c_vn, 0, typ, buf, buflen)
+ ret = rwinreg.RegSetValueExW(hkey, c_vn, 0, typ, buf, buflen)
finally:
lltype.free(buf, flavor='raw')
if ret != 0:
@@ -460,7 +460,7 @@
with rffi.scoped_unicode2wcharp(subkey) as wide_subkey:
c_subkey = rffi.cast(rffi.CCHARP, wide_subkey)
with lltype.scoped_alloc(rwin32.LPDWORD.TO, 1) as retDataSize:
- ret = rwinreg.RegQueryValueEx(hkey, c_subkey, null_dword, null_dword,
+ ret = rwinreg.RegQueryValueExW(hkey, c_subkey, null_dword, null_dword,
None, retDataSize)
bufSize = intmask(retDataSize[0])
if ret == rwinreg.ERROR_MORE_DATA:
@@ -472,7 +472,7 @@
with lltype.scoped_alloc(rffi.CCHARP.TO, bufSize) as databuf:
with lltype.scoped_alloc(rwin32.LPDWORD.TO, 1) as retType:
- ret = rwinreg.RegQueryValueEx(hkey, c_subkey, null_dword,
+ ret = rwinreg.RegQueryValueExW(hkey, c_subkey, null_dword,
retType, databuf, retDataSize)
if ret == rwinreg.ERROR_MORE_DATA:
# Resize and retry
@@ -505,7 +505,7 @@
with rffi.scoped_unicode2wcharp(subkey) as wide_subkey:
c_subkey = rffi.cast(rffi.CCHARP, wide_subkey)
with lltype.scoped_alloc(rwinreg.PHKEY.TO, 1) as rethkey:
- ret = rwinreg.RegCreateKey(hkey, c_subkey, rethkey)
+ ret = rwinreg.RegCreateKeyW(hkey, c_subkey, rethkey)
if ret != 0:
raiseWindowsError(space, ret, 'CreateKey')
return W_HKEY(space, rethkey[0])
@@ -527,7 +527,7 @@
with rffi.scoped_unicode2wcharp(sub_key) as wide_sub_key:
c_subkey = rffi.cast(rffi.CCHARP, wide_sub_key)
with lltype.scoped_alloc(rwinreg.PHKEY.TO, 1) as rethkey:
- ret = rwinreg.RegCreateKeyEx(hkey, c_subkey, reserved, None, 0,
+ ret = rwinreg.RegCreateKeyExW(hkey, c_subkey, reserved, None, 0,
access, None, rethkey,
lltype.nullptr(rwin32.LPDWORD.TO))
if ret != 0:
@@ -549,7 +549,7 @@
hkey = hkey_w(w_hkey, space)
with rffi.scoped_unicode2wcharp(subkey) as wide_subkey:
c_subkey = rffi.cast(rffi.CCHARP, wide_subkey)
- ret = rwinreg.RegDeleteKey(hkey, c_subkey)
+ ret = rwinreg.RegDeleteKeyW(hkey, c_subkey)
if ret != 0:
raiseWindowsError(space, ret, 'RegDeleteKey')
@@ -562,7 +562,7 @@
hkey = hkey_w(w_hkey, space)
with rffi.scoped_unicode2wcharp(subkey) as wide_subkey:
c_subkey = rffi.cast(rffi.CCHARP, wide_subkey)
- ret = rwinreg.RegDeleteValue(hkey, c_subkey)
+ ret = rwinreg.RegDeleteValueW(hkey, c_subkey)
if ret != 0:
raiseWindowsError(space, ret, 'RegDeleteValue')
@@ -582,7 +582,7 @@
with rffi.scoped_unicode2wcharp(sub_key) as wide_subkey:
c_subkey = rffi.cast(rffi.CCHARP, wide_subkey)
with lltype.scoped_alloc(rwinreg.PHKEY.TO, 1) as rethkey:
- ret = rwinreg.RegOpenKeyEx(hkey, c_subkey, reserved, access, rethkey)
+ ret = rwinreg.RegOpenKeyExW(hkey, c_subkey, reserved, access, rethkey)
if ret != 0:
raiseWindowsError(space, ret, 'RegOpenKeyEx')
return W_HKEY(space, rethkey[0])
@@ -607,7 +607,7 @@
with lltype.scoped_alloc(rwin32.LPDWORD.TO, 1) as retValueSize:
with lltype.scoped_alloc(rwin32.LPDWORD.TO, 1) as retDataSize:
- ret = rwinreg.RegQueryInfoKey(
+ ret = rwinreg.RegQueryInfoKeyW(
hkey, None, null_dword, null_dword,
null_dword, null_dword, null_dword,
null_dword, retValueSize, retDataSize,
@@ -628,7 +628,7 @@
with lltype.scoped_alloc(rwin32.LPDWORD.TO,
1) as retType:
c_valuebuf = rffi.cast(rffi.CCHARP, valuebuf)
- ret = rwinreg.RegEnumValue(
+ ret = rwinreg.RegEnumValueW(
hkey, index, c_valuebuf, retValueSize,
null_dword, retType, databuf, retDataSize)
if ret == rwinreg.ERROR_MORE_DATA:
@@ -673,7 +673,7 @@
with lltype.scoped_alloc(rffi.CCHARP.TO, 257) as buf:
with lltype.scoped_alloc(rwin32.LPDWORD.TO, 1) as retValueSize:
retValueSize[0] = r_uint(257) # includes NULL terminator
- ret = rwinreg.RegEnumKeyEx(hkey, index, buf, retValueSize,
+ ret = rwinreg.RegEnumKeyExW(hkey, index, buf, retValueSize,
null_dword, None, null_dword,
lltype.nullptr(rwin32.PFILETIME.TO))
if ret != 0:
@@ -695,7 +695,7 @@
with lltype.scoped_alloc(rwin32.LPDWORD.TO, 1) as nValues:
with lltype.scoped_alloc(rwin32.PFILETIME.TO, 1) as ft:
null_dword = lltype.nullptr(rwin32.LPDWORD.TO)
- ret = rwinreg.RegQueryInfoKey(
+ ret = rwinreg.RegQueryInfoKeyW(
hkey, None, null_dword, null_dword,
nSubKeys, null_dword, null_dword,
nValues, null_dword, null_dword,
@@ -722,7 +722,7 @@
machine = space.text_or_none_w(w_machine)
hkey = hkey_w(w_hkey, space)
with lltype.scoped_alloc(rwinreg.PHKEY.TO, 1) as rethkey:
- ret = rwinreg.RegConnectRegistry(machine, hkey, rethkey)
+ ret = rwinreg.RegConnectRegistryW(machine, hkey, rethkey)
if ret != 0:
raiseWindowsError(space, ret, 'RegConnectRegistry')
return W_HKEY(space, rethkey[0])
diff --git a/pypy/module/_winreg/test/test_winreg.py b/pypy/module/_winreg/test/test_winreg.py
--- a/pypy/module/_winreg/test/test_winreg.py
+++ b/pypy/module/_winreg/test/test_winreg.py
@@ -207,18 +207,20 @@
except:
pass
- key = OpenKey(self.root_key, self.test_key_name, 0, KEY_ALL_ACCESS)
- SaveKey(key, self.tmpfilename)
+ with OpenKey(self.root_key, self.test_key_name, 0, KEY_ALL_ACCESS) as key:
+ SaveKey(key, self.tmpfilename)
def test_expand_environment_string(self):
from winreg import ExpandEnvironmentStrings
import nt
r = ExpandEnvironmentStrings("%windir%\\test")
assert isinstance(r, str)
- if 'WINDIR' in list(nt.environ.keys()):
+ if 'WINDIR' in nt.environ:
assert r == nt.environ["WINDIR"] + "\\test"
+ elif 'windir' in nt.environ:
+ assert r == nt.environ["windir"] + "\\test"
else:
- assert r == nt.environ["windir"] + "\\test"
+ skip('nt.environ not filled in for untranslated tests')
def test_long_key(self):
from winreg import (
diff --git a/rpython/rlib/rwinreg.py b/rpython/rlib/rwinreg.py
--- a/rpython/rlib/rwinreg.py
+++ b/rpython/rlib/rwinreg.py
@@ -47,77 +47,107 @@
HKEY = rwin32.HANDLE
PHKEY = rffi.CArrayPtr(HKEY)
REGSAM = rwin32.DWORD
-suffix = 'A'
+suffix = 'W'
+def get_traits(suffix):
+ RegSetValue = external(
+ 'RegSetValue' + suffix,
+ [HKEY, rffi.CCHARP, rwin32.DWORD, rffi.CCHARP, rwin32.DWORD],
+ rffi.LONG)
-RegSetValue = external(
- 'RegSetValue' + suffix,
- [HKEY, rffi.CCHARP, rwin32.DWORD, rffi.CCHARP, rwin32.DWORD],
- rffi.LONG)
+ RegSetValueEx = external(
+ 'RegSetValueEx' + suffix,
+ [HKEY, rffi.CCHARP, rwin32.DWORD,
+ rwin32.DWORD, rffi.CCHARP, rwin32.DWORD],
+ rffi.LONG)
-RegSetValueEx = external(
- 'RegSetValueEx' + suffix,
- [HKEY, rffi.CCHARP, rwin32.DWORD,
- rwin32.DWORD, rffi.CCHARP, rwin32.DWORD],
- rffi.LONG)
+ RegQueryValue = external(
+ 'RegQueryValue' + suffix,
+ [HKEY, rffi.CCHARP, rffi.CCHARP, rwin32.PLONG],
+ rffi.LONG)
-RegQueryValue = external(
- 'RegQueryValue' + suffix,
- [HKEY, rffi.CCHARP, rffi.CCHARP, rwin32.PLONG],
- rffi.LONG)
+ RegQueryValueEx = external(
+ 'RegQueryValueEx' + suffix,
+ [HKEY, rffi.CCHARP, rwin32.LPDWORD, rwin32.LPDWORD,
+ rffi.CCHARP, rwin32.LPDWORD],
+ rffi.LONG)
-RegQueryValueEx = external(
- 'RegQueryValueEx' + suffix,
- [HKEY, rffi.CCHARP, rwin32.LPDWORD, rwin32.LPDWORD,
- rffi.CCHARP, rwin32.LPDWORD],
- rffi.LONG)
+ RegCreateKey = external(
+ 'RegCreateKey' + suffix,
+ [HKEY, rffi.CCHARP, PHKEY],
+ rffi.LONG)
-RegCreateKey = external(
- 'RegCreateKey' + suffix,
- [HKEY, rffi.CCHARP, PHKEY],
- rffi.LONG)
+ RegCreateKeyEx = external(
+ 'RegCreateKeyEx' + suffix,
+ [HKEY, rffi.CCHARP, rwin32.DWORD, rffi.CCHARP, rwin32.DWORD,
+ REGSAM, rffi.VOIDP, PHKEY, rwin32.LPDWORD],
+ rffi.LONG)
-RegCreateKeyEx = external(
- 'RegCreateKeyEx' + suffix,
- [HKEY, rffi.CCHARP, rwin32.DWORD, rffi.CCHARP, rwin32.DWORD,
- REGSAM, rffi.VOIDP, PHKEY, rwin32.LPDWORD],
- rffi.LONG)
+ RegDeleteValue = external(
+ 'RegDeleteValue' + suffix,
+ [HKEY, rffi.CCHARP],
+ rffi.LONG)
-RegDeleteValue = external(
- 'RegDeleteValue' + suffix,
- [HKEY, rffi.CCHARP],
- rffi.LONG)
+ RegDeleteKey = external(
+ 'RegDeleteKey' + suffix,
+ [HKEY, rffi.CCHARP],
+ rffi.LONG)
-RegDeleteKey = external(
- 'RegDeleteKey' + suffix,
- [HKEY, rffi.CCHARP],
- rffi.LONG)
+ RegOpenKeyEx = external(
+ 'RegOpenKeyEx' + suffix,
+ [HKEY, rffi.CCHARP, rwin32.DWORD, REGSAM, PHKEY],
+ rffi.LONG)
-RegOpenKeyEx = external(
- 'RegOpenKeyEx' + suffix,
- [HKEY, rffi.CCHARP, rwin32.DWORD, REGSAM, PHKEY],
- rffi.LONG)
+ RegEnumValue = external(
+ 'RegEnumValue' + suffix,
+ [HKEY, rwin32.DWORD, rffi.CCHARP,
+ rwin32.LPDWORD, rwin32.LPDWORD, rwin32.LPDWORD,
+ rffi.CCHARP, rwin32.LPDWORD],
+ rffi.LONG)
-RegEnumValue = external(
- 'RegEnumValue' + suffix,
- [HKEY, rwin32.DWORD, rffi.CCHARP,
- rwin32.LPDWORD, rwin32.LPDWORD, rwin32.LPDWORD,
- rffi.CCHARP, rwin32.LPDWORD],
- rffi.LONG)
+ RegEnumKeyEx = external(
+ 'RegEnumKeyEx' + suffix,
+ [HKEY, rwin32.DWORD, rffi.CCHARP,
+ rwin32.LPDWORD, rwin32.LPDWORD,
+ rffi.CCHARP, rwin32.LPDWORD, rwin32.PFILETIME],
+ rffi.LONG)
-RegEnumKeyEx = external(
- 'RegEnumKeyEx' + suffix,
- [HKEY, rwin32.DWORD, rffi.CCHARP,
- rwin32.LPDWORD, rwin32.LPDWORD,
- rffi.CCHARP, rwin32.LPDWORD, rwin32.PFILETIME],
- rffi.LONG)
+ RegQueryInfoKey = external(
+ 'RegQueryInfoKey' + suffix,
+ [HKEY, rffi.CCHARP, rwin32.LPDWORD, rwin32.LPDWORD,
+ rwin32.LPDWORD, rwin32.LPDWORD, rwin32.LPDWORD,
+ rwin32.LPDWORD, rwin32.LPDWORD, rwin32.LPDWORD,
+ rwin32.LPDWORD, rwin32.PFILETIME],
+ rffi.LONG)
-RegQueryInfoKey = external(
- 'RegQueryInfoKey' + suffix,
- [HKEY, rffi.CCHARP, rwin32.LPDWORD, rwin32.LPDWORD,
- rwin32.LPDWORD, rwin32.LPDWORD, rwin32.LPDWORD,
- rwin32.LPDWORD, rwin32.LPDWORD, rwin32.LPDWORD,
- rwin32.LPDWORD, rwin32.PFILETIME],
- rffi.LONG)
+ RegLoadKey = external(
+ 'RegLoadKey' + suffix,
+ [HKEY, rffi.CCHARP, rffi.CCHARP],
+ rffi.LONG)
+
+ RegSaveKey = external(
+ 'RegSaveKey' + suffix,
+ [HKEY, rffi.CCHARP, rffi.VOIDP],
+ rffi.LONG)
+
+ RegConnectRegistry = external(
+ 'RegConnectRegistry' + suffix,
+ [rffi.CCHARP, HKEY, PHKEY],
+ rffi.LONG)
+
+ return (RegSetValue, RegSetValueEx, RegQueryValue, RegQueryValueEx,
+ RegCreateKey, RegCreateKeyEx, RegDeleteValue, RegDeleteKey,
+ RegOpenKeyEx, RegEnumValue, RegEnumKeyEx, RegQueryInfoKey,
+ RegLoadKey, RegSaveKey, RegConnectRegistry)
+
+RegSetValueW, RegSetValueExW, RegQueryValueW, RegQueryValueExW, \
+ RegCreateKeyW, RegCreateKeyExW, RegDeleteValueW, RegDeleteKeyW, \
+ RegOpenKeyExW, RegEnumValueW, RegEnumKeyExW, RegQueryInfoKeyW, \
+ RegLoadKeyW, RegSaveKeyW, RegConnectRegistryW = get_traits('W')
+
+RegSetValueA, RegSetValueExA, RegQueryValueA, RegQueryValueExA, \
+ RegCreateKeyA, RegCreateKeyExA, RegDeleteValueA, RegDeleteKeyA, \
+ RegOpenKeyExA, RegEnumValueA, RegEnumKeyExA, RegQueryInfoKeyA, \
+ RegLoadKeyA, RegSaveKeyA, RegConnectRegistryA = get_traits('A')
RegCloseKey = external(
'RegCloseKey',
@@ -129,21 +159,6 @@
[HKEY],
rffi.LONG)
-RegLoadKey = external(
- 'RegLoadKey' + suffix,
- [HKEY, rffi.CCHARP, rffi.CCHARP],
- rffi.LONG)
-
-RegSaveKey = external(
- 'RegSaveKey' + suffix,
- [HKEY, rffi.CCHARP, rffi.VOIDP],
- rffi.LONG)
-
-RegConnectRegistry = external(
- 'RegConnectRegistry' + suffix,
- [rffi.CCHARP, HKEY, PHKEY],
- rffi.LONG)
-
_ExpandEnvironmentStringsW = external(
'ExpandEnvironmentStringsW',
[rffi.CWCHARP, rffi.CWCHARP, rwin32.DWORD],
More information about the pypy-commit
mailing list