[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