[PATCH 5/5] quartz: Simplify FilterMapper_RegisterFilter().

Zebediah Figura z.figura12 at gmail.com
Wed Jan 22 00:09:00 CST 2020


Avoid some unnecessary allocations.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/quartz/filtermapper.c | 62 +++++++++++++++-----------------------
 1 file changed, 24 insertions(+), 38 deletions(-)

diff --git a/dlls/quartz/filtermapper.c b/dlls/quartz/filtermapper.c
index 763e378b21..357c9c61f2 100644
--- a/dlls/quartz/filtermapper.c
+++ b/dlls/quartz/filtermapper.c
@@ -1119,53 +1119,39 @@ static HRESULT WINAPI FilterMapper_EnumMatchingFilters(
 }
 
 
-static HRESULT WINAPI FilterMapper_RegisterFilter(IFilterMapper * iface, CLSID clsid, LPCWSTR szName, DWORD dwMerit)
+static HRESULT WINAPI FilterMapper_RegisterFilter(IFilterMapper * iface,
+        CLSID clsid, const WCHAR *name, DWORD merit)
 {
-    HRESULT hr;
-    LPWSTR wszClsid = NULL;
-    HKEY hKey;
-    LONG lRet;
-    WCHAR wszKeyName[ARRAY_SIZE(wszFilterSlash)-1 + (CHARS_IN_GUID-1) + 1];
-
-    TRACE("(%p)->(%s, %s, %x)\n", iface, debugstr_guid(&clsid), debugstr_w(szName), dwMerit);
+    WCHAR keypath[46], guidstr[39];
+    HKEY key;
+    LONG ret;
 
-    hr = StringFromCLSID(&clsid, &wszClsid);
+    TRACE("iface %p, clsid %s, name %s, merit %#x.\n",
+            iface, debugstr_guid(&clsid), debugstr_w(name), merit);
 
-    if (SUCCEEDED(hr))
-    {
-        lstrcpyW(wszKeyName, wszFilterSlash);
-        lstrcatW(wszKeyName, wszClsid);
-    
-        lRet = RegCreateKeyExW(HKEY_CLASSES_ROOT, wszKeyName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
-        hr = HRESULT_FROM_WIN32(lRet);
-    }
+    StringFromGUID2(&clsid, guidstr, ARRAY_SIZE(guidstr));
 
-    if (SUCCEEDED(hr))
-    {
-        lRet = RegSetValueExW(hKey, NULL, 0, REG_SZ, (const BYTE*)szName, (lstrlenW(szName) + 1) * sizeof(WCHAR));
-        hr = HRESULT_FROM_WIN32(lRet);
-        RegCloseKey(hKey);
-    }
+    wcscpy(keypath, L"Filter\\");
+    wcscat(keypath, guidstr);
+    if ((ret = RegCreateKeyExW(HKEY_CLASSES_ROOT, keypath, 0, NULL, 0, KEY_WRITE, NULL, &key, NULL)))
+        return HRESULT_FROM_WIN32(ret);
 
-    if (SUCCEEDED(hr))
-    {
-        lstrcpyW(wszKeyName, wszClsidSlash);
-        lstrcatW(wszKeyName, wszClsid);
-    
-        lRet = RegCreateKeyExW(HKEY_CLASSES_ROOT, wszKeyName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
-        hr = HRESULT_FROM_WIN32(lRet);
-    }
+    if ((ret = RegSetValueExW(key, NULL, 0, REG_SZ, (const BYTE *)name, (wcslen(name) + 1) * sizeof(WCHAR))))
+        ERR("Failed to set filter name, error %u.\n", ret);
+    RegCloseKey(key);
 
-    if (SUCCEEDED(hr))
+    wcscpy(keypath, L"CLSID\\");
+    wcscat(keypath, guidstr);
+    if (!(ret = RegCreateKeyExW(HKEY_CLASSES_ROOT, keypath, 0, NULL, 0, KEY_WRITE, NULL, &key, NULL)))
     {
-        lRet = RegSetValueExW(hKey, wszMeritName, 0, REG_DWORD, (LPBYTE)&dwMerit, sizeof(dwMerit));
-        hr = HRESULT_FROM_WIN32(lRet);
-        RegCloseKey(hKey);
+        if ((ret = RegSetValueExW(key, L"Merit", 0, REG_DWORD, (const BYTE *)&merit, sizeof(DWORD))))
+            ERR("Failed to set merit, error %u.\n", ret);
+        RegCloseKey(key);
     }
-    
-    CoTaskMemFree(wszClsid);
+    else
+        ERR("Failed to create CLSID key, error %u.\n", ret);
 
-    return hr;
+    return S_OK;
 }
 
 static HRESULT WINAPI FilterMapper_RegisterFilterInstance(IFilterMapper * iface, CLSID clsid, LPCWSTR szName, CLSID *MRId)
-- 
2.25.0




More information about the wine-devel mailing list