[PATCH 3/5] quartz: Simplify FilterMapper_UnregisterFilter().
Zebediah Figura
z.figura12 at gmail.com
Wed Jan 22 16:30:51 CST 2020
Avoid some unnecessary allocations.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/quartz/filtermapper.c | 71 ++++++++++++--------------------------
1 file changed, 22 insertions(+), 49 deletions(-)
diff --git a/dlls/quartz/filtermapper.c b/dlls/quartz/filtermapper.c
index 32d3e1a822..dde4a6caa5 100644
--- a/dlls/quartz/filtermapper.c
+++ b/dlls/quartz/filtermapper.c
@@ -83,12 +83,8 @@ static const WCHAR wszFriendlyName[] = {'F','r','i','e','n','d','l','y','N','a',
static const WCHAR wszMeritName[] = {'M','e','r','i','t',0};
/* FilterData property in media category Moniker (not CLSID_ActiveMovieCategories) */
static const WCHAR wszFilterDataName[] = {'F','i','l','t','e','r','D','a','t','a',0};
-/* For filters registered with IFilterMapper */
-static const WCHAR wszFilter[] = {'F','i','l','t','e','r',0};
/* For pins registered with IFilterMapper */
static const WCHAR wszPins[] = {'P','i','n','s',0};
-/* For types registered with IFilterMapper */
-static const WCHAR wszTypes[] = {'T','y','p','e','s',0};
/* registry format for REGFILTER2 */
@@ -1253,59 +1249,36 @@ static HRESULT WINAPI FilterMapper_RegisterPinType(IFilterMapper *iface,
return HRESULT_FROM_WIN32(ret);
}
-static HRESULT WINAPI FilterMapper_UnregisterFilter(IFilterMapper * iface, CLSID Filter)
+static HRESULT WINAPI FilterMapper_UnregisterFilter(IFilterMapper *iface, CLSID clsid)
{
- HRESULT hr;
- LONG lRet;
- LPWSTR wszClsid = NULL;
- HKEY hKey;
- WCHAR wszKeyName[ARRAY_SIZE(wszClsidSlash)-1 + (CHARS_IN_GUID-1) + 1];
-
- TRACE("(%p)->(%s)\n", iface, debugstr_guid(&Filter));
-
- hr = StringFromCLSID(&Filter, &wszClsid);
-
- if (SUCCEEDED(hr))
- {
- lRet = RegOpenKeyExW(HKEY_CLASSES_ROOT, wszFilter, 0, KEY_WRITE, &hKey);
- hr = HRESULT_FROM_WIN32(lRet);
- }
+ WCHAR guidstr[39], keypath[6 + 38 + 1];
+ LONG ret;
+ HKEY key;
- if (SUCCEEDED(hr))
- {
- lRet = RegDeleteKeyW(hKey, wszClsid);
- hr = HRESULT_FROM_WIN32(lRet);
- RegCloseKey(hKey);
- }
+ TRACE("iface %p, clsid %s.\n", iface, debugstr_guid(&clsid));
- if (SUCCEEDED(hr))
- {
- lstrcpyW(wszKeyName, wszClsidSlash);
- lstrcatW(wszKeyName, wszClsid);
+ StringFromGUID2(&clsid, guidstr, ARRAY_SIZE(guidstr));
- lRet = RegOpenKeyExW(HKEY_CLASSES_ROOT, wszKeyName, 0, KEY_WRITE, &hKey);
- if (lRet == ERROR_FILE_NOT_FOUND)
- goto done;
- hr = HRESULT_FROM_WIN32(lRet);
- }
+ if ((ret = RegOpenKeyExW(HKEY_CLASSES_ROOT, L"Filter", 0, 0, &key)))
+ return HRESULT_FROM_WIN32(ret);
+ if ((ret = RegDeleteKeyW(key, guidstr)))
+ ERR("Failed to delete filter key, error %u.\n", ret);
+ RegCloseKey(key);
- if (SUCCEEDED(hr))
+ wcscpy(keypath, L"CLSID\\");
+ wcscat(keypath, guidstr);
+ if (!(ret = RegOpenKeyExW(HKEY_CLASSES_ROOT, keypath, 0, KEY_WRITE, &key)))
{
- lRet = RegDeleteValueW(hKey, wszMeritName);
- if (lRet != ERROR_SUCCESS && lRet != ERROR_FILE_NOT_FOUND)
- hr = HRESULT_FROM_WIN32(lRet);
-
- lRet = RegDeleteTreeW(hKey, wszPins);
- if (lRet != ERROR_SUCCESS && lRet != ERROR_FILE_NOT_FOUND)
- hr = HRESULT_FROM_WIN32(lRet);
-
- RegCloseKey(hKey);
+ if ((ret = RegDeleteValueW(key, L"Merit")))
+ ERR("Failed to delete Merit value, error %u.\n", ret);
+ if ((ret = RegDeleteTreeW(key, L"Pins")))
+ ERR("Failed to delete Pins key, error %u.\n", ret);
+ RegCloseKey(key);
}
+ else
+ ERR("Failed to open CLSID key, error %u.\n", ret);
-done:
- CoTaskMemFree(wszClsid);
-
- return hr;
+ return S_OK;
}
static HRESULT WINAPI FilterMapper_UnregisterFilterInstance(IFilterMapper * iface, CLSID MRId)
--
2.25.0
More information about the wine-devel
mailing list