Author: Matti Picus <matti.pi...@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], _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit