[pypy-svn] r62024 - in pypy/trunk/pypy: module/_winreg module/_winreg/test rlib
afa at codespeak.net
afa at codespeak.net
Thu Feb 19 18:46:21 CET 2009
Author: afa
Date: Thu Feb 19 18:46:19 2009
New Revision: 62024
Modified:
pypy/trunk/pypy/module/_winreg/__init__.py
pypy/trunk/pypy/module/_winreg/interp_winreg.py
pypy/trunk/pypy/module/_winreg/test/test_winreg.py
pypy/trunk/pypy/rlib/rwinreg.py
Log:
_winreg.QueryValueEx
Modified: pypy/trunk/pypy/module/_winreg/__init__.py
==============================================================================
--- pypy/trunk/pypy/module/_winreg/__init__.py (original)
+++ pypy/trunk/pypy/module/_winreg/__init__.py Thu Feb 19 18:46:19 2009
@@ -10,6 +10,7 @@
'SetValue': 'interp_winreg.SetValue',
'SetValueEx': 'interp_winreg.SetValueEx',
'QueryValue': 'interp_winreg.QueryValue',
+ 'QueryValueEx' : 'interp_winreg.QueryValueEx',
'CreateKey': 'interp_winreg.CreateKey',
'OpenKey' : 'interp_winreg.OpenKey',
'OpenKeyEx' : 'interp_winreg.OpenKey',
Modified: pypy/trunk/pypy/module/_winreg/interp_winreg.py
==============================================================================
--- pypy/trunk/pypy/module/_winreg/interp_winreg.py (original)
+++ pypy/trunk/pypy/module/_winreg/interp_winreg.py Thu Feb 19 18:46:19 2009
@@ -223,6 +223,39 @@
raiseWindowsError(space, ret, 'RegSetValueEx')
SetValueEx.unwrap_spec = [ObjSpace, W_Root, str, W_Root, int, W_Root]
+def QueryValueEx(space, w_hkey, subkey):
+ hkey = hkey_w(w_hkey, space)
+ null_dword = lltype.nullptr(rwin32.LPDWORD.TO)
+ retDataSize = lltype.malloc(rwin32.LPDWORD.TO, 1, flavor='raw')
+ try:
+ ret = rwinreg.RegQueryValueEx(hkey, subkey, null_dword, null_dword,
+ None, retDataSize)
+ if ret != 0:
+ print "AFA??", hkey, subkey
+ raiseWindowsError(space, ret, 'RegQueryValueEx')
+ databuf = lltype.malloc(rffi.CCHARP.TO, retDataSize[0], flavor='raw')
+ try:
+ retType = lltype.malloc(rwin32.LPDWORD.TO, 1, flavor='raw')
+ try:
+
+ ret = rwinreg.RegQueryValueEx(hkey, subkey, null_dword,
+ retType, databuf, retDataSize)
+ if ret != 0:
+ raiseWindowsError(space, ret, 'RegQueryValueEx')
+ return space.wrap((
+ convert_from_regdata(space, databuf,
+ retDataSize[0], retType[0]),
+ retType[0],
+ ))
+ finally:
+ lltype.free(retType, flavor='raw')
+ finally:
+ lltype.free(databuf, flavor='raw')
+ finally:
+ lltype.free(retDataSize, flavor='raw')
+
+QueryValueEx.unwrap_spec = [ObjSpace, W_Root, str]
+
def CreateKey(space, w_hkey, subkey):
hkey = hkey_w(w_hkey, space)
rethkey = lltype.malloc(rwinreg.PHKEY.TO, 1, flavor='raw')
@@ -284,7 +317,7 @@
rffi.charp2str(valuebuf),
convert_from_regdata(space, databuf,
retDataSize[0], retType[0]),
- retType[0]
+ retType[0],
))
finally:
lltype.free(retType, flavor='raw')
Modified: pypy/trunk/pypy/module/_winreg/test/test_winreg.py
==============================================================================
--- pypy/trunk/pypy/module/_winreg/test/test_winreg.py (original)
+++ pypy/trunk/pypy/module/_winreg/test/test_winreg.py Thu Feb 19 18:46:19 2009
@@ -87,7 +87,7 @@
SetValueEx(sub_key, name, 0, type, value)
def test_readValues(self):
- from _winreg import OpenKey, EnumValue
+ from _winreg import OpenKey, EnumValue, QueryValueEx
key = OpenKey(self.root_key, self.test_key_name)
sub_key = OpenKey(key, "sub_key")
index = 0
@@ -99,3 +99,6 @@
assert data in self.test_data
index = index + 1
assert index == len(self.test_data)
+
+ for name, data, type in self.test_data:
+ assert QueryValueEx(sub_key, name) == (data, type)
Modified: pypy/trunk/pypy/rlib/rwinreg.py
==============================================================================
--- pypy/trunk/pypy/rlib/rwinreg.py (original)
+++ pypy/trunk/pypy/rlib/rwinreg.py Thu Feb 19 18:46:19 2009
@@ -60,6 +60,12 @@
[HKEY, rffi.CCHARP, rffi.CCHARP, rwin32.PLONG],
rffi.LONG)
+RegQueryValueEx = external(
+ 'RegQueryValueExA',
+ [HKEY, rffi.CCHARP, rwin32.LPDWORD, rwin32.LPDWORD,
+ rffi.CCHARP, rwin32.LPDWORD],
+ rffi.LONG)
+
RegCreateKey = external(
'RegCreateKeyA',
[HKEY, rffi.CCHARP, PHKEY],
More information about the Pypy-commit
mailing list