From 402b93394d7d226cb4903d090e07253e0e4a7a16 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 18 Feb 2015 09:47:12 +0530 Subject: [PATCH] When deleting registry values do not raise an exception if the value does not exist --- src/calibre/utils/winreg/lib.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/calibre/utils/winreg/lib.py b/src/calibre/utils/winreg/lib.py index 6b2378d3fd..e96037d7ec 100644 --- a/src/calibre/utils/winreg/lib.py +++ b/src/calibre/utils/winreg/lib.py @@ -131,8 +131,15 @@ RegSetKeyValue = cwrap( RegDeleteTree = cwrap( 'RegDeleteTreeW', LONG, a('key', HKEY), a('sub_key', LPCWSTR, None)) + +def delete_value_errcheck(result, func, args): + if result == winerror.ERROR_FILE_NOT_FOUND: + return args + if result != 0: + raise ctypes.WinError(result) + return args RegDeleteKeyValue = cwrap( - 'RegDeleteKeyValueW', LONG, a('key', HKEY), a('sub_key', LPCWSTR, None), a('name', LPCWSTR, None)) + 'RegDeleteKeyValueW', LONG, a('key', HKEY), a('sub_key', LPCWSTR, None), a('name', LPCWSTR, None), errcheck=delete_value_errcheck) RegEnumKeyEx = cwrap( 'RegEnumKeyExW', LONG, a('key', HKEY), a('index', DWORD), a('name', LPWSTR), a('name_size', LPDWORD), a('reserved', LPDWORD, None), a('cls', LPWSTR, None), a('cls_size', LPDWORD, None), a('last_write_time', ctypes.POINTER(FILETIME), in_arg=False), @@ -176,7 +183,7 @@ class Key(object): yield name_buf.value[:lname_buf.value] i += 1 - def delete_value(self, sub_key=None, name=None): + def delete_value(self, name=None, sub_key=None): ' Delete the named value from this key. If name is None the default value is deleted. ' RegDeleteKeyValue(self.hkey, sub_key, name)