Nikolay Sivov : msdmo: Fix DMOGetName() error handling and error values.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Apr 22 10:26:41 CDT 2015


Module: wine
Branch: master
Commit: 6238adc81782b8db8ea0de48d73a3bb3ddcc33f0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6238adc81782b8db8ea0de48d73a3bb3ddcc33f0

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Apr 22 14:31:42 2015 +0300

msdmo: Fix DMOGetName() error handling and error values.

---

 dlls/msdmo/dmoreg.c      | 41 ++++++++++++++++++++---------------------
 dlls/msdmo/tests/msdmo.c | 17 +++++++++++++++++
 2 files changed, 37 insertions(+), 21 deletions(-)

diff --git a/dlls/msdmo/dmoreg.c b/dlls/msdmo/dmoreg.c
index 25480e5..4bd7ab4 100644
--- a/dlls/msdmo/dmoreg.c
+++ b/dlls/msdmo/dmoreg.c
@@ -325,38 +325,37 @@ lend:
 /***************************************************************
  * DMOGetName (MSDMO.@)
  *
- * Get DMP Name from the registry
+ * Get DMO Name from the registry
  */
-HRESULT WINAPI DMOGetName(REFCLSID clsidDMO, WCHAR szName[])
+HRESULT WINAPI DMOGetName(REFCLSID clsidDMO, WCHAR name[])
 {
+    static const INT max_name_len = 80*sizeof(WCHAR);
+    DWORD count = max_name_len;
     WCHAR szguid[64];
-    HKEY hrkey = 0;
-    HKEY hkey = 0;
-    static const INT max_name_len = 80;
-    DWORD count;
+    HKEY hrkey, hkey;
     LONG ret;
 
-    TRACE("%s\n", debugstr_guid(clsidDMO));
+    TRACE("%s %p\n", debugstr_guid(clsidDMO), name);
 
-    ret = RegOpenKeyExW(HKEY_CLASSES_ROOT, szDMORootKey, 0, KEY_READ, &hrkey);
-    if (ERROR_SUCCESS != ret)
-        goto lend;
+    if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szDMORootKey, 0, KEY_READ, &hrkey))
+        return E_FAIL;
 
     ret = RegOpenKeyExW(hrkey, GUIDToString(szguid, clsidDMO), 0, KEY_READ, &hkey);
-    if (ERROR_SUCCESS != ret)
-        goto lend;
+    RegCloseKey(hrkey);
+    if (ret)
+        return E_FAIL;
 
-    count = max_name_len * sizeof(WCHAR);
-    ret = RegQueryValueExW(hkey, NULL, NULL, NULL, (LPBYTE) szName, &count);
+    ret = RegQueryValueExW(hkey, NULL, NULL, NULL, (LPBYTE)name, &count);
+    RegCloseKey(hkey);
 
-    TRACE(" szName=%s\n", debugstr_w(szName));
-lend:
-    if (hkey)
-        RegCloseKey(hrkey);
-    if (hkey)
-        RegCloseKey(hkey);
+    if (!ret && count > 1)
+    {
+        TRACE("name=%s\n", debugstr_w(name));
+        return S_OK;
+    }
 
-    return HRESULT_FROM_WIN32(ret);
+    name[0] = 0;
+    return S_FALSE;
 }
 
 /**************************************************************************
diff --git a/dlls/msdmo/tests/msdmo.c b/dlls/msdmo/tests/msdmo.c
index 4fc0c35..00ab656 100644
--- a/dlls/msdmo/tests/msdmo.c
+++ b/dlls/msdmo/tests/msdmo.c
@@ -25,6 +25,7 @@
 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
 static const GUID GUID_unknowndmo = {0x14d99047,0x441f,0x4cd3,{0xbc,0xa8,0x3e,0x67,0x99,0xaf,0x34,0x75}};
 static const GUID GUID_unknowncategory = {0x14d99048,0x441f,0x4cd3,{0xbc,0xa8,0x3e,0x67,0x99,0xaf,0x34,0x75}};
+static const GUID GUID_wmp1 = {0x13a7995e,0x7d8f,0x45b4,{0x9c,0x77,0x81,0x92,0x65,0x22,0x57,0x63}};
 
 static void test_DMOUnregister(void)
 {
@@ -54,7 +55,23 @@ static void test_DMOUnregister(void)
     ok(hr == S_FALSE, "got 0x%08x\n", hr);
 }
 
+static void test_DMOGetName(void)
+{
+    WCHAR name[80];
+    HRESULT hr;
+
+    hr = DMOGetName(&GUID_unknowndmo, NULL);
+    ok(hr == E_FAIL, "got 0x%08x\n", hr);
+
+    /* no such DMO */
+    name[0] = 'a';
+    hr = DMOGetName(&GUID_wmp1, name);
+    ok(hr == E_FAIL, "got 0x%08x\n", hr);
+    ok(name[0] == 'a', "got %x\n", name[0]);
+}
+
 START_TEST(msdmo)
 {
     test_DMOUnregister();
+    test_DMOGetName();
 }




More information about the wine-cvs mailing list