[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