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