Zebediah Figura : devenum: Return S_FALSE from CreateClassEnumerator() if no devices exist.
Alexandre Julliard
julliard at winehq.org
Tue Apr 9 16:31:03 CDT 2019
Module: wine
Branch: master
Commit: e0da0b777a293059c32a7c846dff16ef0738b2de
URL: https://source.winehq.org/git/wine.git/?a=commit;h=e0da0b777a293059c32a7c846dff16ef0738b2de
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Fri Apr 5 19:41:13 2019 -0500
devenum: Return S_FALSE from CreateClassEnumerator() if no devices exist.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46316
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/devenum/createdevenum.c | 18 +++++++++++++++++-
dlls/devenum/tests/devenum.c | 6 ++++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/dlls/devenum/createdevenum.c b/dlls/devenum/createdevenum.c
index 8a3160c..65c1ccd 100644
--- a/dlls/devenum/createdevenum.c
+++ b/dlls/devenum/createdevenum.c
@@ -862,7 +862,23 @@ static HRESULT WINAPI DEVENUM_ICreateDevEnum_CreateClassEnumerator(
else if (IsEqualGUID(class, &CLSID_VideoInputDeviceCategory))
register_avicap_devices();
- return create_EnumMoniker(class, out);
+ if (SUCCEEDED(hr = create_EnumMoniker(class, out)))
+ {
+ IMoniker *mon;
+ hr = IEnumMoniker_Next(*out, 1, &mon, NULL);
+ if (hr == S_OK)
+ {
+ IMoniker_Release(mon);
+ IEnumMoniker_Reset(*out);
+ }
+ else
+ {
+ IEnumMoniker_Release(*out);
+ *out = NULL;
+ }
+ }
+
+ return hr;
}
/**********************************************************************
diff --git a/dlls/devenum/tests/devenum.c b/dlls/devenum/tests/devenum.c
index 9fcfdcf..945bc67 100644
--- a/dlls/devenum/tests/devenum.c
+++ b/dlls/devenum/tests/devenum.c
@@ -69,6 +69,7 @@ static void test_devenum(IBindCtx *bind_ctx)
WCHAR *displayname;
VARIANT var;
HRESULT hr;
+ int count;
hr = CoCreateInstance(&CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
&IID_ICreateDevEnum, (LPVOID*)&create_devenum);
@@ -105,6 +106,8 @@ static void test_devenum(IBindCtx *bind_ctx)
if (hr == S_OK)
{
+ count = 0;
+
while (IEnumMoniker_Next(enum_moniker, 1, &moniker, NULL) == S_OK)
{
hr = IMoniker_GetDisplayName(moniker, NULL, NULL, &displayname);
@@ -136,8 +139,11 @@ static void test_devenum(IBindCtx *bind_ctx)
CoTaskMemFree(displayname);
IPropertyBag_Release(prop_bag);
IMoniker_Release(moniker);
+ count++;
}
IEnumMoniker_Release(enum_moniker);
+
+ ok(count > 0, "CreateClassEnumerator() returned S_OK but no devices were enumerated.\n");
}
}
More information about the wine-cvs
mailing list