Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
March 2018
- 90 participants
- 1704 messages
Wine staging 3.5 release
by Alistair Leslie-Hughes
Packages have been published to the following repository.
https://repos.wine-staging.com/alesliehughes/
Summary of the past few weeks
* Rebased to current wine 3.5 (950 patches are applied to wine vanilla)
* All existing bcrypt patches accepted upstream (Thank Hans for reviewing)
* Removed patches that have already being fixed upstream.
* Reviewed and upstreamed patches.
Fixes
* Corrected 1D Texture support.
New Patches
* Added support for Implicit MTA.
* Added more ntoskrnl stubs for BattlEye service
* Added support for fucntion BCryptDeriveKeyPBKDF2
* Added function _crtCaptureCurrentContext for Rise of the Tomb Raider
Where can you help
* Run Steam/Battle.net/UPlay.
* Try you favorite game: Banished, Claybook, Diablo 2
* Test your favorite applications.
* Steal staging patches and get them accepted upstream.
As always, if you find a bug, please report it via
https://bugs.winehq.com
Best Regards
Alistair.
March 31, 2018
Re: [PATCH v2] dsound/tests: Call interface methods properly.
by Marvin
Hi,
While running your changed tests on Windows, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at
https://testbot.winehq.org/JobDetails.pl?Key=37351
Your paranoid android.
=== w864 (32 bit dsound) ===
TestBot process died unexpectedly
March 31, 2018
[PATCH v2 4/4] devenum: Register VFW codecs as codec devices.
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
v2: fix test failures on 64-bit
dlls/devenum/createdevenum.c | 153 ++++++++++++++++++++++++-----------------
dlls/devenum/tests/Makefile.in | 2 +-
dlls/devenum/tests/devenum.c | 72 +++++++++++++++++++
3 files changed, 164 insertions(+), 63 deletions(-)
diff --git a/dlls/devenum/createdevenum.c b/dlls/devenum/createdevenum.c
index 677336c..2427469 100644
--- a/dlls/devenum/createdevenum.c
+++ b/dlls/devenum/createdevenum.c
@@ -107,28 +107,6 @@ static ULONG WINAPI DEVENUM_ICreateDevEnum_Release(ICreateDevEnum * iface)
return 1; /* non-heap based object */
}
-static HKEY open_special_category_key(const CLSID *clsid, BOOL create)
-{
- WCHAR key_name[sizeof(wszActiveMovieKey)/sizeof(WCHAR) + CHARS_IN_GUID-1];
- HKEY ret;
- LONG res;
-
- strcpyW(key_name, wszActiveMovieKey);
- if (!StringFromGUID2(clsid, key_name + sizeof(wszActiveMovieKey)/sizeof(WCHAR)-1, CHARS_IN_GUID))
- return NULL;
-
- if(create)
- res = RegCreateKeyW(HKEY_CURRENT_USER, key_name, &ret);
- else
- res = RegOpenKeyExW(HKEY_CURRENT_USER, key_name, 0, KEY_READ, &ret);
- if (res != ERROR_SUCCESS) {
- WARN("Could not open %s\n", debugstr_w(key_name));
- return NULL;
- }
-
- return ret;
-}
-
static HRESULT register_codec(const CLSID *class, const WCHAR *name, IMoniker **ret)
{
static const WCHAR deviceW[] = {'@','d','e','v','i','c','e',':','c','m',':',0};
@@ -818,6 +796,96 @@ cleanup:
}
}
+static void register_vfw_codecs(void)
+{
+ static const WCHAR fcchandlerW[] = {'F','c','c','H','a','n','d','l','e','r',0};
+ REGFILTERPINS2 rgpins[2] = {0};
+ IPropertyBag *prop_bag = NULL;
+ REGPINTYPES rgtypes[2] = {0};
+ REGFILTER2 rgf = {0};
+ WCHAR clsid[CHARS_IN_GUID];
+ IMoniker *mon = NULL;
+ GUID typeguid;
+ ICINFO info;
+ VARIANT var;
+ HRESULT hr;
+ int i = 0;
+ HIC hic;
+
+ hr = DEVENUM_CreateAMCategoryKey(&CLSID_AudioRendererCategory);
+ if (FAILED(hr)) return;
+
+ while (ICInfo(ICTYPE_VIDEO, i++, &info))
+ {
+ WCHAR name[5] = {LOBYTE(LOWORD(info.fccHandler)), HIBYTE(LOWORD(info.fccHandler)),
+ LOBYTE(HIWORD(info.fccHandler)), HIBYTE(HIWORD(info.fccHandler))};
+
+ hic = ICOpen(ICTYPE_VIDEO, info.fccHandler, ICMODE_QUERY);
+ ICGetInfo(hic, &info, sizeof(info));
+ ICClose(hic);
+
+ V_VT(&var) = VT_BSTR;
+
+ V_BSTR(&var) = SysAllocString(name);
+ if (!(V_BSTR(&var)))
+ goto cleanup;
+
+ hr = register_codec(&CLSID_VideoCompressorCategory, V_BSTR(&var), &mon);
+ if (FAILED(hr)) goto cleanup;
+
+ hr = IMoniker_BindToStorage(mon, NULL, NULL, &IID_IPropertyBag, (void **)&prop_bag);
+ if (FAILED(hr)) goto cleanup;
+
+ /* write WaveInId */
+ hr = IPropertyBag_Write(prop_bag, fcchandlerW, &var);
+ if (FAILED(hr)) goto cleanup;
+ VariantClear(&var);
+
+ /* write friendly name */
+ V_VT(&var) = VT_BSTR;
+ if (!(V_BSTR(&var) = SysAllocString(info.szDescription)))
+ goto cleanup;
+
+ hr = IPropertyBag_Write(prop_bag, wszFriendlyName, &var);
+ if (FAILED(hr)) goto cleanup;
+ VariantClear(&var);
+
+ /* write clsid */
+ V_VT(&var) = VT_BSTR;
+ StringFromGUID2(&CLSID_AVICo, clsid, CHARS_IN_GUID);
+ if (!(V_BSTR(&var) = SysAllocString(clsid)))
+ goto cleanup;
+ hr = IPropertyBag_Write(prop_bag, clsid_keyname, &var);
+ if (FAILED(hr)) goto cleanup;
+ VariantClear(&var);
+
+ /* write filter data */
+ rgf.dwVersion = 2;
+ rgf.dwMerit = MERIT_DO_NOT_USE;
+ rgf.u.s2.cPins2 = 2;
+ rgf.u.s2.rgPins2 = rgpins;
+ rgpins[0].dwFlags = 0;
+ rgpins[0].nMediaTypes = 1;
+ rgpins[0].lpMediaType = &rgtypes[0];
+ rgtypes[0].clsMajorType = &MEDIATYPE_Video;
+ typeguid = MEDIASUBTYPE_PCM;
+ typeguid.Data1 = info.fccHandler;
+ rgtypes[0].clsMinorType = &typeguid;
+ rgpins[1].dwFlags = REG_PINFLAG_B_OUTPUT;
+ rgpins[1].nMediaTypes = 1;
+ rgpins[1].lpMediaType = &rgtypes[1];
+ rgtypes[1].clsMajorType = &MEDIATYPE_Video;
+ rgtypes[1].clsMinorType = &GUID_NULL;
+
+ write_filter_data(prop_bag, &rgf);
+
+cleanup:
+ VariantClear(&var);
+ if (prop_bag) IPropertyBag_Release(prop_bag);
+ if (mon) IMoniker_Release(mon);
+ }
+}
+
/**********************************************************************
* DEVENUM_ICreateDevEnum_CreateClassEnumerator
*/
@@ -843,6 +911,7 @@ static HRESULT WINAPI DEVENUM_ICreateDevEnum_CreateClassEnumerator(
register_waveout_devices();
register_wavein_devices();
register_midiout_devices();
+ register_vfw_codecs();
return create_EnumMoniker(clsidDeviceClass, ppEnumMoniker);
}
@@ -895,44 +964,6 @@ static HRESULT DEVENUM_CreateAMCategoryKey(const CLSID * clsidCategory)
return res;
}
-static void register_vfw_codecs(void)
-{
- WCHAR avico_clsid_str[CHARS_IN_GUID];
- HKEY basekey, key;
- ICINFO icinfo;
- DWORD i, res;
-
- static const WCHAR CLSIDW[] = {'C','L','S','I','D',0};
- static const WCHAR FccHandlerW[] = {'F','c','c','H','a','n','d','l','e','r',0};
- static const WCHAR FriendlyNameW[] = {'F','r','i','e','n','d','l','y','N','a','m','e',0};
-
- StringFromGUID2(&CLSID_AVICo, avico_clsid_str, sizeof(avico_clsid_str)/sizeof(WCHAR));
-
- basekey = open_special_category_key(&CLSID_VideoCompressorCategory, TRUE);
- if(!basekey) {
- ERR("Could not create key\n");
- return;
- }
-
- for(i=0; ICInfo(FCC('v','i','d','c'), i, &icinfo); i++) {
- WCHAR fcc_str[5] = {LOBYTE(LOWORD(icinfo.fccHandler)), HIBYTE(LOWORD(icinfo.fccHandler)),
- LOBYTE(HIWORD(icinfo.fccHandler)), HIBYTE(HIWORD(icinfo.fccHandler))};
-
- res = RegCreateKeyW(basekey, fcc_str, &key);
- if(res != ERROR_SUCCESS)
- continue;
-
- RegSetValueExW(key, CLSIDW, 0, REG_SZ, (const BYTE*)avico_clsid_str, sizeof(avico_clsid_str));
- RegSetValueExW(key, FccHandlerW, 0, REG_SZ, (const BYTE*)fcc_str, sizeof(fcc_str));
- RegSetValueExW(key, FriendlyNameW, 0, REG_SZ, (const BYTE*)icinfo.szName, (strlenW(icinfo.szName)+1)*sizeof(WCHAR));
- /* FIXME: Set ClassManagerFlags and FilterData values */
-
- RegCloseKey(key);
- }
-
- RegCloseKey(basekey);
-}
-
static HRESULT register_codecs(void)
{
HRESULT res;
@@ -1038,7 +1069,5 @@ static HRESULT register_codecs(void)
if (pMapper)
IFilterMapper2_Release(pMapper);
- register_vfw_codecs();
-
return res;
}
diff --git a/dlls/devenum/tests/Makefile.in b/dlls/devenum/tests/Makefile.in
index a673f20..b268adf 100644
--- a/dlls/devenum/tests/Makefile.in
+++ b/dlls/devenum/tests/Makefile.in
@@ -1,5 +1,5 @@
TESTDLL = devenum.dll
-IMPORTS = advapi32 dsound oleaut32 ole32 winmm
+IMPORTS = advapi32 dsound msvfw32 oleaut32 ole32 winmm
C_SRCS = \
devenum.c
diff --git a/dlls/devenum/tests/devenum.c b/dlls/devenum/tests/devenum.c
index d9ea5e9..293ba8d 100644
--- a/dlls/devenum/tests/devenum.c
+++ b/dlls/devenum/tests/devenum.c
@@ -31,6 +31,7 @@
#include "mmsystem.h"
#include "dsound.h"
#include "mmddk.h"
+#include "vfw.h"
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
@@ -879,6 +880,76 @@ static void test_midiout(void)
IParseDisplayName_Release(parser);
}
+static void test_vfw(void)
+{
+ static const WCHAR fcchandlerW[] = {'F','c','c','H','a','n','d','l','e','r',0};
+ IParseDisplayName *parser;
+ IPropertyBag *prop_bag;
+ IMoniker *mon;
+ WCHAR buffer[200];
+ ICINFO info;
+ VARIANT var;
+ HRESULT hr;
+ int i = 0;
+ HIC hic;
+
+ if (broken(sizeof(void *) == 8))
+ {
+ win_skip("VFW codecs are not enumerated on 64-bit Windows\n");
+ return;
+ }
+
+ hr = CoCreateInstance(&CLSID_CDeviceMoniker, NULL, CLSCTX_INPROC, &IID_IParseDisplayName, (void **)&parser);
+ ok(hr == S_OK, "Failed to create ParseDisplayName: %#x\n", hr);
+
+ while (ICInfo(ICTYPE_VIDEO, i++, &info))
+ {
+ WCHAR name[5] = {LOBYTE(LOWORD(info.fccHandler)), HIBYTE(LOWORD(info.fccHandler)),
+ LOBYTE(HIWORD(info.fccHandler)), HIBYTE(HIWORD(info.fccHandler))};
+
+ hic = ICOpen(ICTYPE_VIDEO, info.fccHandler, ICMODE_QUERY);
+ ICGetInfo(hic, &info, sizeof(info));
+ ICClose(hic);
+
+ lstrcpyW(buffer, deviceW);
+ lstrcatW(buffer, cmW);
+ StringFromGUID2(&CLSID_VideoCompressorCategory, buffer + lstrlenW(buffer), CHARS_IN_GUID);
+ lstrcatW(buffer, backslashW);
+ lstrcatW(buffer, name);
+
+ mon = check_display_name(parser, buffer);
+
+ hr = IMoniker_BindToStorage(mon, NULL, NULL, &IID_IPropertyBag, (void **)&prop_bag);
+ ok(hr == S_OK, "BindToStorage failed: %#x\n", hr);
+
+ VariantInit(&var);
+ hr = IPropertyBag_Read(prop_bag, friendly_name, &var, NULL);
+ ok(hr == S_OK, "Read failed: %#x\n", hr);
+
+ ok(!lstrcmpW(info.szDescription, V_BSTR(&var)), "expected %s, got %s\n",
+ wine_dbgstr_w(info.szDescription), wine_dbgstr_w(V_BSTR(&var)));
+
+ VariantClear(&var);
+ hr = IPropertyBag_Read(prop_bag, clsidW, &var, NULL);
+ ok(hr == S_OK, "Read failed: %#x\n", hr);
+
+ StringFromGUID2(&CLSID_AVICo, buffer, CHARS_IN_GUID);
+ ok(!lstrcmpW(buffer, V_BSTR(&var)), "expected %s, got %s\n",
+ wine_dbgstr_w(buffer), wine_dbgstr_w(V_BSTR(&var)));
+
+ VariantClear(&var);
+ hr = IPropertyBag_Read(prop_bag, fcchandlerW, &var, NULL);
+ ok(hr == S_OK, "Read failed: %#x\n", hr);
+ ok(!lstrcmpW(name, V_BSTR(&var)), "expected %s, got %s\n",
+ wine_dbgstr_w(name), wine_dbgstr_w(V_BSTR(&var)));
+
+ IPropertyBag_Release(prop_bag);
+ IMoniker_Release(mon);
+ }
+
+ IParseDisplayName_Release(parser);
+}
+
START_TEST(devenum)
{
IBindCtx *bind_ctx = NULL;
@@ -907,6 +978,7 @@ START_TEST(devenum)
test_waveout();
test_wavein();
test_midiout();
+ test_vfw();
CoUninitialize();
}
--
2.7.4
March 31, 2018
[PATCH v2 3/4] devenum: Register midiOut devices as codec devices.
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/devenum/createdevenum.c | 132 +++++++++++++++++++++++++----------------
dlls/devenum/devenum.rc | 9 ---
dlls/devenum/devenum_private.h | 7 ---
dlls/devenum/tests/devenum.c | 68 +++++++++++++++++++++
4 files changed, 148 insertions(+), 68 deletions(-)
diff --git a/dlls/devenum/createdevenum.c b/dlls/devenum/createdevenum.c
index 9be34d7..677336c 100644
--- a/dlls/devenum/createdevenum.c
+++ b/dlls/devenum/createdevenum.c
@@ -739,6 +739,85 @@ cleanup:
}
}
+static void register_midiout_devices(void)
+{
+ static const WCHAR defaultW[] = {'D','e','f','a','u','l','t',' ','M','i','d','i','O','u','t',' ','D','e','v','i','c','e',0};
+ static const WCHAR midioutidW[] = {'M','i','d','i','O','u','t','I','d',0};
+ IPropertyBag *prop_bag = NULL;
+ REGFILTERPINS2 rgpins = {0};
+ REGPINTYPES rgtypes = {0};
+ REGFILTER2 rgf = {0};
+ WCHAR clsid[CHARS_IN_GUID];
+ IMoniker *mon = NULL;
+ MIDIOUTCAPSW caps;
+ int i, count;
+ VARIANT var;
+ HRESULT hr;
+
+ hr = DEVENUM_CreateAMCategoryKey(&CLSID_AudioRendererCategory);
+ if (FAILED(hr)) return;
+
+ count = midiOutGetNumDevs();
+
+ for (i = -1; i < count; i++)
+ {
+ midiOutGetDevCapsW(i, &caps, sizeof(caps));
+
+ V_VT(&var) = VT_BSTR;
+
+ if (i == -1) /* MIDI_MAPPER */
+ V_BSTR(&var) = SysAllocString(defaultW);
+ else
+ V_BSTR(&var) = SysAllocString(caps.szPname);
+ if (!(V_BSTR(&var)))
+ goto cleanup;
+
+ hr = register_codec(&CLSID_MidiRendererCategory, V_BSTR(&var), &mon);
+ if (FAILED(hr)) goto cleanup;
+
+ hr = IMoniker_BindToStorage(mon, NULL, NULL, &IID_IPropertyBag, (void **)&prop_bag);
+ if (FAILED(hr)) goto cleanup;
+
+ /* write friendly name */
+ hr = IPropertyBag_Write(prop_bag, wszFriendlyName, &var);
+ if (FAILED(hr)) goto cleanup;
+ VariantClear(&var);
+
+ /* write clsid */
+ V_VT(&var) = VT_BSTR;
+ StringFromGUID2(&CLSID_AVIMIDIRender, clsid, CHARS_IN_GUID);
+ if (!(V_BSTR(&var) = SysAllocString(clsid)))
+ goto cleanup;
+ hr = IPropertyBag_Write(prop_bag, clsid_keyname, &var);
+ if (FAILED(hr)) goto cleanup;
+ VariantClear(&var);
+
+ /* write filter data */
+ rgf.dwVersion = 2;
+ rgf.dwMerit = (i == -1) ? MERIT_PREFERRED : MERIT_DO_NOT_USE;
+ rgf.u.s2.cPins2 = 1;
+ rgf.u.s2.rgPins2 = &rgpins;
+ rgpins.dwFlags = REG_PINFLAG_B_RENDERER;
+ rgpins.nMediaTypes = 1;
+ rgpins.lpMediaType = &rgtypes;
+ rgtypes.clsMajorType = &MEDIATYPE_Midi;
+ rgtypes.clsMinorType = &MEDIASUBTYPE_NULL;
+
+ write_filter_data(prop_bag, &rgf);
+
+ /* write MidiOutId */
+ V_VT(&var) = VT_I4;
+ V_I4(&var) = i;
+ hr = IPropertyBag_Write(prop_bag, midioutidW, &var);
+ if (FAILED(hr)) goto cleanup;
+
+cleanup:
+ VariantClear(&var);
+ if (prop_bag) IPropertyBag_Release(prop_bag);
+ if (mon) IMoniker_Release(mon);
+ }
+}
+
/**********************************************************************
* DEVENUM_ICreateDevEnum_CreateClassEnumerator
*/
@@ -763,6 +842,7 @@ static HRESULT WINAPI DEVENUM_ICreateDevEnum_CreateClassEnumerator(
if (FAILED(hr)) return hr;
register_waveout_devices();
register_wavein_devices();
+ register_midiout_devices();
return create_EnumMoniker(clsidDeviceClass, ppEnumMoniker);
}
@@ -858,7 +938,6 @@ static HRESULT register_codecs(void)
HRESULT res;
WCHAR class[CHARS_IN_GUID];
DWORD iDefaultDevice = -1;
- UINT numDevs;
IFilterMapper2 * pMapper = NULL;
REGFILTER2 rf2;
REGFILTERPINS2 rfp2;
@@ -899,60 +978,9 @@ static HRESULT register_codecs(void)
if (SUCCEEDED(res))
{
UINT i;
- MIDIOUTCAPSW mocaps;
REGPINTYPES * pTypes;
IPropertyBag * pPropBag = NULL;
- numDevs = midiOutGetNumDevs();
-
- res = DEVENUM_CreateAMCategoryKey(&CLSID_MidiRendererCategory);
- if (FAILED(res)) /* can't register any devices in this category */
- numDevs = 0;
-
- rfp2.dwFlags = REG_PINFLAG_B_RENDERER;
- for (i = 0; i < numDevs; i++)
- {
- if (midiOutGetDevCapsW(i, &mocaps, sizeof(MIDIOUTCAPSW))
- == MMSYSERR_NOERROR)
- {
- IMoniker * pMoniker = NULL;
-
- rfp2.nMediaTypes = 1;
- pTypes = CoTaskMemAlloc(rfp2.nMediaTypes * sizeof(REGPINTYPES));
- if (!pTypes)
- {
- IFilterMapper2_Release(pMapper);
- return E_OUTOFMEMORY;
- }
-
- /* FIXME: Not sure if these are correct */
- pTypes[0].clsMajorType = &MEDIATYPE_Midi;
- pTypes[0].clsMinorType = &MEDIASUBTYPE_None;
-
- rfp2.lpMediaType = pTypes;
-
- res = IFilterMapper2_RegisterFilter(pMapper,
- &CLSID_AVIMIDIRender,
- mocaps.szPname,
- &pMoniker,
- &CLSID_MidiRendererCategory,
- mocaps.szPname,
- &rf2);
-
- /* FIXME: do additional stuff with IMoniker here, depending on what RegisterFilter does */
- /* Native version sets MidiOutId */
-
- if (pMoniker)
- IMoniker_Release(pMoniker);
-
- if (i == iDefaultDevice)
- {
- FIXME("Default device\n");
- }
-
- CoTaskMemFree(pTypes);
- }
- }
res = DEVENUM_CreateAMCategoryKey(&CLSID_VideoInputDeviceCategory);
if (SUCCEEDED(res))
for (i = 0; i < 10; i++)
diff --git a/dlls/devenum/devenum.rc b/dlls/devenum/devenum.rc
index 95e39d6..24da9b8 100644
--- a/dlls/devenum/devenum.rc
+++ b/dlls/devenum/devenum.rc
@@ -23,15 +23,6 @@
#include "winnls.h"
#include "devenum_private.h"
-#pragma makedep po
-
-LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
-
-STRINGTABLE
-{
- IDS_DEVENUM_MIDEFAULT "Default MidiOut Device"
-}
-
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#define WINE_FILEDESCRIPTION_STR "Wine Device Enumerator Library"
diff --git a/dlls/devenum/devenum_private.h b/dlls/devenum/devenum_private.h
index c891083..d4e1141 100644
--- a/dlls/devenum/devenum_private.h
+++ b/dlls/devenum/devenum_private.h
@@ -97,10 +97,3 @@ static const WCHAR wszActiveMovieKey[] = {'S','o','f','t','w','a','r','e','\\',
static const WCHAR deviceW[] = {'@','d','e','v','i','c','e',':',0};
extern const WCHAR clsid_keyname[6] DECLSPEC_HIDDEN;
-
-/**********************************************************************
- * Resource IDs
- */
-#define IDS_DEVENUM_MIDEFAULT 10
-#define IDS_DEVENUM_KSDEFAULT 11
-#define IDS_DEVENUM_KS 12
diff --git a/dlls/devenum/tests/devenum.c b/dlls/devenum/tests/devenum.c
index 3f66237..d9ea5e9 100644
--- a/dlls/devenum/tests/devenum.c
+++ b/dlls/devenum/tests/devenum.c
@@ -812,6 +812,73 @@ static void test_wavein(void)
IParseDisplayName_Release(parser);
}
+static void test_midiout(void)
+{
+ static const WCHAR defaultW[] = {'D','e','f','a','u','l','t',' ','M','i','d','i','O','u','t',' ','D','e','v','i','c','e',0};
+ static const WCHAR midioutidW[] = {'M','i','d','i','O','u','t','I','d',0};
+ IParseDisplayName *parser;
+ IPropertyBag *prop_bag;
+ IMoniker *mon;
+ MIDIOUTCAPSW caps;
+ WCHAR buffer[200];
+ const WCHAR *name;
+ int count, i;
+ VARIANT var;
+ HRESULT hr;
+
+ hr = CoCreateInstance(&CLSID_CDeviceMoniker, NULL, CLSCTX_INPROC, &IID_IParseDisplayName, (void **)&parser);
+ ok(hr == S_OK, "Failed to create ParseDisplayName: %#x\n", hr);
+
+ count = midiOutGetNumDevs();
+
+ for (i = -1; i < count; i++)
+ {
+ midiOutGetDevCapsW(i, &caps, sizeof(caps));
+
+ if (i == -1) /* MIDI_MAPPER */
+ name = defaultW;
+ else
+ name = caps.szPname;
+
+ lstrcpyW(buffer, deviceW);
+ lstrcatW(buffer, cmW);
+ StringFromGUID2(&CLSID_MidiRendererCategory, buffer + lstrlenW(buffer), CHARS_IN_GUID);
+ lstrcatW(buffer, backslashW);
+ lstrcatW(buffer, name);
+
+ mon = check_display_name(parser, buffer);
+
+ hr = IMoniker_BindToStorage(mon, NULL, NULL, &IID_IPropertyBag, (void **)&prop_bag);
+ ok(hr == S_OK, "BindToStorage failed: %#x\n", hr);
+
+ VariantInit(&var);
+ hr = IPropertyBag_Read(prop_bag, friendly_name, &var, NULL);
+ ok(hr == S_OK, "Read failed: %#x\n", hr);
+
+ ok(!lstrcmpW(name, V_BSTR(&var)), "expected %s, got %s\n",
+ wine_dbgstr_w(name), wine_dbgstr_w(V_BSTR(&var)));
+
+ VariantClear(&var);
+ hr = IPropertyBag_Read(prop_bag, clsidW, &var, NULL);
+ ok(hr == S_OK, "Read failed: %#x\n", hr);
+
+ StringFromGUID2(&CLSID_AVIMIDIRender, buffer, CHARS_IN_GUID);
+ ok(!lstrcmpW(buffer, V_BSTR(&var)), "expected %s, got %s\n",
+ wine_dbgstr_w(buffer), wine_dbgstr_w(V_BSTR(&var)));
+
+ VariantClear(&var);
+ hr = IPropertyBag_Read(prop_bag, midioutidW, &var, NULL);
+ ok(hr == S_OK, "Read failed: %#x\n", hr);
+
+ ok(V_I4(&var) == i, "expected %d, got %d\n", i, V_I4(&var));
+
+ IPropertyBag_Release(prop_bag);
+ IMoniker_Release(mon);
+ }
+
+ IParseDisplayName_Release(parser);
+}
+
START_TEST(devenum)
{
IBindCtx *bind_ctx = NULL;
@@ -839,6 +906,7 @@ START_TEST(devenum)
ok(hr == S_OK, "got %#x\n", hr);
test_waveout();
test_wavein();
+ test_midiout();
CoUninitialize();
}
--
2.7.4
March 31, 2018
[PATCH v2 2/4] devenum: Register waveIn devices as codec devices.
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/devenum/createdevenum.c | 130 ++++++++++++++++++++++---------------------
dlls/devenum/tests/devenum.c | 87 +++++++++++++++++++++++++++++
2 files changed, 154 insertions(+), 63 deletions(-)
diff --git a/dlls/devenum/createdevenum.c b/dlls/devenum/createdevenum.c
index e3fe049..9be34d7 100644
--- a/dlls/devenum/createdevenum.c
+++ b/dlls/devenum/createdevenum.c
@@ -673,6 +673,72 @@ cleanup:
}
}
+static void register_wavein_devices(void)
+{
+ static const WCHAR waveinidW[] = {'W','a','v','e','I','n','I','d',0};
+ IPropertyBag *prop_bag = NULL;
+ REGFILTER2 rgf = {0};
+ WCHAR clsid[CHARS_IN_GUID];
+ IMoniker *mon = NULL;
+ WAVEINCAPSW caps;
+ int i, count;
+ VARIANT var;
+ HRESULT hr;
+
+ hr = DEVENUM_CreateAMCategoryKey(&CLSID_AudioRendererCategory);
+ if (FAILED(hr)) return;
+
+ count = waveInGetNumDevs();
+
+ for (i = 0; i < count; i++)
+ {
+ waveInGetDevCapsW(i, &caps, sizeof(caps));
+
+ V_VT(&var) = VT_BSTR;
+
+ V_BSTR(&var) = SysAllocString(caps.szPname);
+ if (!(V_BSTR(&var)))
+ goto cleanup;
+
+ hr = register_codec(&CLSID_AudioInputDeviceCategory, V_BSTR(&var), &mon);
+ if (FAILED(hr)) goto cleanup;
+
+ hr = IMoniker_BindToStorage(mon, NULL, NULL, &IID_IPropertyBag, (void **)&prop_bag);
+ if (FAILED(hr)) goto cleanup;
+
+ /* write friendly name */
+ hr = IPropertyBag_Write(prop_bag, wszFriendlyName, &var);
+ if (FAILED(hr)) goto cleanup;
+ VariantClear(&var);
+
+ /* write clsid */
+ V_VT(&var) = VT_BSTR;
+ StringFromGUID2(&CLSID_AudioRecord, clsid, CHARS_IN_GUID);
+ if (!(V_BSTR(&var) = SysAllocString(clsid)))
+ goto cleanup;
+ hr = IPropertyBag_Write(prop_bag, clsid_keyname, &var);
+ if (FAILED(hr)) goto cleanup;
+ VariantClear(&var);
+
+ /* write filter data */
+ rgf.dwVersion = 2;
+ rgf.dwMerit = MERIT_DO_NOT_USE;
+
+ write_filter_data(prop_bag, &rgf);
+
+ /* write WaveInId */
+ V_VT(&var) = VT_I4;
+ V_I4(&var) = i;
+ hr = IPropertyBag_Write(prop_bag, waveinidW, &var);
+ if (FAILED(hr)) goto cleanup;
+
+cleanup:
+ VariantClear(&var);
+ if (prop_bag) IPropertyBag_Release(prop_bag);
+ if (mon) IMoniker_Release(mon);
+ }
+}
+
/**********************************************************************
* DEVENUM_ICreateDevEnum_CreateClassEnumerator
*/
@@ -696,6 +762,7 @@ static HRESULT WINAPI DEVENUM_ICreateDevEnum_CreateClassEnumerator(
hr = DirectSoundEnumerateW(®ister_dsound_devices, NULL);
if (FAILED(hr)) return hr;
register_waveout_devices();
+ register_wavein_devices();
return create_EnumMoniker(clsidDeviceClass, ppEnumMoniker);
}
@@ -832,73 +899,10 @@ static HRESULT register_codecs(void)
if (SUCCEEDED(res))
{
UINT i;
- WAVEINCAPSW wicaps;
MIDIOUTCAPSW mocaps;
REGPINTYPES * pTypes;
IPropertyBag * pPropBag = NULL;
- numDevs = waveInGetNumDevs();
-
- res = DEVENUM_CreateAMCategoryKey(&CLSID_AudioInputDeviceCategory);
- if (FAILED(res)) /* can't register any devices in this category */
- numDevs = 0;
-
- rfp2.dwFlags = REG_PINFLAG_B_OUTPUT;
- for (i = 0; i < numDevs; i++)
- {
- if (waveInGetDevCapsW(i, &wicaps, sizeof(WAVEINCAPSW))
- == MMSYSERR_NOERROR)
- {
- IMoniker * pMoniker = NULL;
-
- rfp2.nMediaTypes = 1;
- pTypes = CoTaskMemAlloc(rfp2.nMediaTypes * sizeof(REGPINTYPES));
- if (!pTypes)
- {
- IFilterMapper2_Release(pMapper);
- return E_OUTOFMEMORY;
- }
-
- /* FIXME: Not sure if these are correct */
- pTypes[0].clsMajorType = &MEDIATYPE_Audio;
- pTypes[0].clsMinorType = &MEDIASUBTYPE_PCM;
-
- rfp2.lpMediaType = pTypes;
-
- res = IFilterMapper2_RegisterFilter(pMapper,
- &CLSID_AudioRecord,
- wicaps.szPname,
- &pMoniker,
- &CLSID_AudioInputDeviceCategory,
- wicaps.szPname,
- &rf2);
-
-
- if (pMoniker) {
- VARIANT var;
-
- V_VT(&var) = VT_I4;
- V_I4(&var) = i;
- res = IMoniker_BindToStorage(pMoniker, NULL, NULL, &IID_IPropertyBag, (LPVOID)&pPropBag);
- if (SUCCEEDED(res))
- res = IPropertyBag_Write(pPropBag, wszWaveInID, &var);
- else
- pPropBag = NULL;
-
- V_VT(&var) = VT_LPWSTR;
- V_BSTR(&var) = wicaps.szPname;
- if (SUCCEEDED(res))
- res = IPropertyBag_Write(pPropBag, wszFriendlyName, &var);
-
- if (pPropBag)
- IPropertyBag_Release(pPropBag);
- IMoniker_Release(pMoniker);
- }
-
- CoTaskMemFree(pTypes);
- }
- }
-
numDevs = midiOutGetNumDevs();
res = DEVENUM_CreateAMCategoryKey(&CLSID_MidiRendererCategory);
diff --git a/dlls/devenum/tests/devenum.c b/dlls/devenum/tests/devenum.c
index 79f5ed8..3f66237 100644
--- a/dlls/devenum/tests/devenum.c
+++ b/dlls/devenum/tests/devenum.c
@@ -726,6 +726,92 @@ static void test_waveout(void)
IParseDisplayName_Release(parser);
}
+static void test_wavein(void)
+{
+ static const WCHAR waveinidW[] = {'W','a','v','e','I','n','I','d',0};
+ IParseDisplayName *parser;
+ IPropertyBag *prop_bag;
+ IMoniker *mon;
+ WCHAR endpoint[200];
+ WCHAR buffer[200];
+ WAVEINCAPSW caps;
+ MMRESULT mmr;
+ int count, i;
+ VARIANT var;
+ HRESULT hr;
+
+ hr = CoCreateInstance(&CLSID_CDeviceMoniker, NULL, CLSCTX_INPROC, &IID_IParseDisplayName, (void **)&parser);
+ ok(hr == S_OK, "Failed to create ParseDisplayName: %#x\n", hr);
+
+ count = waveInGetNumDevs();
+
+ for (i = 0; i < count; i++)
+ {
+ waveInGetDevCapsW(i, &caps, sizeof(caps));
+
+ lstrcpyW(buffer, deviceW);
+ lstrcatW(buffer, cmW);
+ StringFromGUID2(&CLSID_AudioInputDeviceCategory, buffer + lstrlenW(buffer), CHARS_IN_GUID);
+ lstrcatW(buffer, backslashW);
+ lstrcatW(buffer, caps.szPname);
+
+ mon = check_display_name(parser, buffer);
+
+ hr = IMoniker_BindToStorage(mon, NULL, NULL, &IID_IPropertyBag, (void **)&prop_bag);
+ ok(hr == S_OK, "BindToStorage failed: %#x\n", hr);
+
+ VariantInit(&var);
+ hr = IPropertyBag_Read(prop_bag, friendly_name, &var, NULL);
+ if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND))
+ {
+ IPropertyBag_Release(prop_bag);
+ IMoniker_Release(mon);
+
+ /* Win8+ uses the endpoint GUID instead of the device name */
+ mmr = waveInMessage((HWAVEIN)(DWORD_PTR) i, DRV_QUERYFUNCTIONINSTANCEID,
+ (DWORD_PTR) endpoint, sizeof(endpoint));
+ ok(!mmr, "waveInMessage failed: %u\n", mmr);
+
+ lstrcpyW(buffer, deviceW);
+ lstrcatW(buffer, cmW);
+ StringFromGUID2(&CLSID_AudioInputDeviceCategory, buffer + lstrlenW(buffer), CHARS_IN_GUID);
+ lstrcatW(buffer, backslashW);
+ lstrcatW(buffer, waveW);
+ lstrcatW(buffer, strchrW(endpoint, '}') + 2);
+
+ mon = check_display_name(parser, buffer);
+
+ hr = IMoniker_BindToStorage(mon, NULL, NULL, &IID_IPropertyBag, (void **)&prop_bag);
+ ok(hr == S_OK, "BindToStorage failed: %#x\n", hr);
+
+ hr = IPropertyBag_Read(prop_bag, friendly_name, &var, NULL);
+ }
+ ok(hr == S_OK, "Read failed: %#x\n", hr);
+
+ ok(!strncmpW(caps.szPname, V_BSTR(&var), lstrlenW(caps.szPname)), "expected %s, got %s\n",
+ wine_dbgstr_w(caps.szPname), wine_dbgstr_w(V_BSTR(&var)));
+
+ VariantClear(&var);
+ hr = IPropertyBag_Read(prop_bag, clsidW, &var, NULL);
+ ok(hr == S_OK, "Read failed: %#x\n", hr);
+
+ StringFromGUID2(&CLSID_AudioRecord, buffer, CHARS_IN_GUID);
+ ok(!lstrcmpW(buffer, V_BSTR(&var)), "expected %s, got %s\n",
+ wine_dbgstr_w(buffer), wine_dbgstr_w(V_BSTR(&var)));
+
+ VariantClear(&var);
+ hr = IPropertyBag_Read(prop_bag, waveinidW, &var, NULL);
+ ok(hr == S_OK, "Read failed: %#x\n", hr);
+
+ ok(V_I4(&var) == i, "expected %d, got %d\n", i, V_I4(&var));
+
+ IPropertyBag_Release(prop_bag);
+ IMoniker_Release(mon);
+ }
+
+ IParseDisplayName_Release(parser);
+}
+
START_TEST(devenum)
{
IBindCtx *bind_ctx = NULL;
@@ -752,6 +838,7 @@ START_TEST(devenum)
hr = DirectSoundEnumerateW(test_dsound, NULL);
ok(hr == S_OK, "got %#x\n", hr);
test_waveout();
+ test_wavein();
CoUninitialize();
}
--
2.7.4
March 31, 2018
[PATCH v2] dsound/tests: Call interface methods properly.
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/dsound/tests/capture.c | 4 ++--
dlls/dsound/tests/ds3d.c | 30 +++++++++---------------------
dlls/dsound/tests/ds3d8.c | 11 -----------
dlls/dsound/tests/dsound.c | 5 +++--
dlls/dsound/tests/dsound8.c | 34 +++++++++++++++++-----------------
dlls/dsound/tests/duplex.c | 6 +++---
6 files changed, 34 insertions(+), 56 deletions(-)
diff --git a/dlls/dsound/tests/capture.c b/dlls/dsound/tests/capture.c
index 4eae28b..a23d1eb 100644
--- a/dlls/dsound/tests/capture.c
+++ b/dlls/dsound/tests/capture.c
@@ -114,7 +114,7 @@ static void IDirectSoundCapture_test(LPDIRECTSOUNDCAPTURE dsco,
ok(rc==DS_OK, "IDirectSoundCapture_QueryInterface(IID_IUnknown) "
"failed: %08x\n", rc);
if (rc==DS_OK)
- IDirectSoundCapture_Release(unknown);
+ IUnknown_Release(unknown);
rc=IDirectSoundCapture_QueryInterface(dsco, &IID_IDirectSoundCapture,
(LPVOID*)&dsc);
@@ -162,7 +162,7 @@ static void IDirectSoundCapture_test(LPDIRECTSOUNDCAPTURE dsco,
ZeroMemory(&dsccaps, sizeof(dsccaps));
/* DSOUND: Error: Invalid caps buffer */
- rc=IDirectSound_GetCaps(dsco, &dsccaps);
+ rc=IDirectSoundCapture_GetCaps(dsco, &dsccaps);
ok(rc==DSERR_INVALIDPARAM, "IDirectSound_GetCaps() "
"should have returned DSERR_INVALIDPARAM, returned: %08x\n", rc);
diff --git a/dlls/dsound/tests/ds3d.c b/dlls/dsound/tests/ds3d.c
index 6c12f71..d4356c2 100644
--- a/dlls/dsound/tests/ds3d.c
+++ b/dlls/dsound/tests/ds3d.c
@@ -535,18 +535,6 @@ void test_buffer(LPDIRECTSOUND dso, LPDIRECTSOUNDBUFFER *dsbo,
ok(ref==1,"IDirectSoundBuffer_Release() has %d references, "
"should have 1\n",ref);
- temp_buffer=NULL;
- rc=IDirectSound3DBuffer_QueryInterface(*dsbo,
- &IID_IDirectSoundBuffer,
- (LPVOID *)&temp_buffer);
- ok(rc==DS_OK && temp_buffer!=NULL,
- "IDirectSound3DBuffer_QueryInterface() failed: %08x\n", rc);
- ok(temp_buffer==*dsbo,"COM interface broken: %p != %p\n",
- temp_buffer,*dsbo);
- ref=IDirectSoundBuffer_Release(temp_buffer);
- ok(ref==1,"IDirectSoundBuffer_Release() has %d references, "
- "should have 1\n",ref);
-
ref=IDirectSoundBuffer_Release(*dsbo);
ok(ref==0,"IDirectSoundBuffer_Release() has %d references, "
"should have 0\n",ref);
@@ -1193,6 +1181,8 @@ static HRESULT test_primary_3d_with_listener(LPGUID lpGuid)
if (rc==DS_OK && primary!=NULL) {
LPDIRECTSOUND3DLISTENER listener=NULL;
LPDIRECTSOUNDBUFFER temp_buffer=NULL;
+ IKsPropertySet *propset;
+
rc=IDirectSoundBuffer_QueryInterface(primary,
&IID_IDirectSound3DListener,(void **)&listener);
ok(rc==DS_OK && listener!=NULL,"IDirectSoundBuffer_QueryInterface() "
@@ -1231,11 +1221,10 @@ static HRESULT test_primary_3d_with_listener(LPGUID lpGuid)
temp_buffer = NULL;
rc = IDirectSound3DListener_QueryInterface(listener, &IID_IKsPropertySet,
- (void **)&temp_buffer);
- ok(rc==DS_OK && temp_buffer!=NULL,
+ (void **)&propset);
+ ok(rc == DS_OK && propset != NULL,
"IDirectSound3DListener_QueryInterface didn't handle IKsPropertySet: ret = %08x\n", rc);
- if(temp_buffer)
- IKsPropertySet_Release(temp_buffer);
+ IKsPropertySet_Release(propset);
}
/* Testing the reference counting */
@@ -1244,12 +1233,11 @@ static HRESULT test_primary_3d_with_listener(LPGUID lpGuid)
"references, should have 0\n",ref);
}
- temp_buffer = NULL;
- rc = IDirectSoundBuffer_QueryInterface(primary, &IID_IKsPropertySet, (void **)&temp_buffer);
- ok(rc==DS_OK && temp_buffer!=NULL,
+ propset = NULL;
+ rc = IDirectSoundBuffer_QueryInterface(primary, &IID_IKsPropertySet, (void **)&propset);
+ ok(rc == DS_OK && propset != NULL,
"IDirectSoundBuffer_QueryInterface didn't handle IKsPropertySet on primary buffer: ret = %08x\n", rc);
- if(temp_buffer)
- IKsPropertySet_Release(temp_buffer);
+ IKsPropertySet_Release(propset);
/* Testing the reference counting */
ref=IDirectSoundBuffer_Release(primary);
diff --git a/dlls/dsound/tests/ds3d8.c b/dlls/dsound/tests/ds3d8.c
index 25eb010..00340af 100644
--- a/dlls/dsound/tests/ds3d8.c
+++ b/dlls/dsound/tests/ds3d8.c
@@ -371,17 +371,6 @@ void test_buffer8(LPDIRECTSOUND8 dso, LPDIRECTSOUNDBUFFER * dsbo,
ok(ref==1,"IDirectSoundBuffer_Release() has %d references, "
"should have 1\n",ref);
- temp_buffer=NULL;
- rc=IDirectSound3DBuffer_QueryInterface(*dsbo, &IID_IDirectSoundBuffer,
- (LPVOID *)&temp_buffer);
- ok(rc==DS_OK && temp_buffer!=NULL,
- "IDirectSound3DBuffer_QueryInterface() failed: %08x\n", rc);
- ok(temp_buffer==*dsbo,"COM interface broken: %p != %p\n",
- temp_buffer,*dsbo);
- ref=IDirectSoundBuffer_Release(temp_buffer);
- ok(ref==1,"IDirectSoundBuffer_Release() has %d references, "
- "should have 1\n",ref);
-
ref=IDirectSoundBuffer_Release(*dsbo);
ok(ref==0,"IDirectSoundBuffer_Release() has %d references, "
"should have 0\n",ref);
diff --git a/dlls/dsound/tests/dsound.c b/dlls/dsound/tests/dsound.c
index 1ccb8f9..07c8908 100644
--- a/dlls/dsound/tests/dsound.c
+++ b/dlls/dsound/tests/dsound.c
@@ -30,6 +30,7 @@
#include "wine/test.h"
#include "mmsystem.h"
+#define COBJMACROS
#include "dsound.h"
#include "dsconf.h"
#include "initguid.h"
@@ -61,7 +62,7 @@ static void IDirectSound_test(LPDIRECTSOUND dso, BOOL initialized,
rc=IDirectSound_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IUnknown) failed: %08x\n", rc);
if (rc==DS_OK)
- IDirectSound_Release(unknown);
+ IUnknown_Release(unknown);
rc=IDirectSound_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
ok(rc==DS_OK,"IDirectSound_QueryInterface(IID_IDirectSound) failed: %08x\n", rc);
@@ -337,7 +338,7 @@ static HRESULT test_dsound(LPGUID lpGuid)
"buffer %08x\n",rc);
if (rc==DS_OK && secondary!=NULL) {
LPDIRECTSOUND3DBUFFER buffer3d;
- rc=IDirectSound_QueryInterface(secondary, &IID_IDirectSound3DBuffer,
+ rc = IDirectSoundBuffer_QueryInterface(secondary, &IID_IDirectSound3DBuffer,
(void **)&buffer3d);
ok(rc==DS_OK && buffer3d!=NULL,"IDirectSound_QueryInterface() "
"failed: %08x\n",rc);
diff --git a/dlls/dsound/tests/dsound8.c b/dlls/dsound/tests/dsound8.c
index 53b3d47..a6e3f12 100644
--- a/dlls/dsound/tests/dsound8.c
+++ b/dlls/dsound/tests/dsound8.c
@@ -72,7 +72,7 @@ static void IDirectSound8_test(LPDIRECTSOUND8 dso, BOOL initialized,
rc=IDirectSound8_QueryInterface(dso,&IID_IUnknown,(LPVOID*)&unknown);
ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IUnknown) failed: %08x\n", rc);
if (rc==DS_OK)
- IDirectSound8_Release(unknown);
+ IUnknown_Release(unknown);
rc=IDirectSound8_QueryInterface(dso,&IID_IDirectSound,(LPVOID*)&ds);
ok(rc==DS_OK,"IDirectSound8_QueryInterface(IID_IDirectSound) failed: %08x\n", rc);
@@ -353,7 +353,7 @@ static HRESULT test_dsound8(LPGUID lpGuid)
if (rc==DS_OK && secondary!=NULL) {
LPDIRECTSOUND3DBUFFER buffer3d;
LPDIRECTSOUNDBUFFER8 buffer8;
- rc=IDirectSound8_QueryInterface(secondary,
+ rc=IDirectSoundBuffer_QueryInterface(secondary,
&IID_IDirectSound3DBuffer,
(void **)&buffer3d);
ok(rc==DS_OK && buffer3d!=NULL,
@@ -363,7 +363,7 @@ static HRESULT test_dsound8(LPGUID lpGuid)
ok(ref==2,"IDirectSound3DBuffer_AddRef() has %d references, "
"should have 2\n",ref);
}
- rc=IDirectSound8_QueryInterface(secondary,
+ rc=IDirectSoundBuffer_QueryInterface(secondary,
&IID_IDirectSoundBuffer8,
(void **)&buffer8);
if (rc==DS_OK && buffer8!=NULL) {
@@ -645,7 +645,7 @@ static HRESULT test_primary_secondary8(LPGUID lpGuid)
wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,format_tags[tag],
wfx2.nSamplesPerSec,wfx2.wBitsPerSample,wfx2.nChannels);
}
- rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+ rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
ok(rc==DS_OK && secondary!=NULL,
"IDirectSound_CreateSoundBuffer() failed to create a secondary "
"buffer %08x\n",rc);
@@ -756,7 +756,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
bufdesc.dwBufferBytes=align(wfx.nAvgBytesPerSec*BUFFER_LEN/1000,
wfx.nBlockAlign);
bufdesc.lpwfxFormat=&wfx;
- rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+ rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
if (wfx.wBitsPerSample != 8 && wfx.wBitsPerSample != 16)
ok(((rc == DSERR_CONTROLUNAVAIL || rc == DSERR_INVALIDCALL || rc == DSERR_INVALIDPARAM /* 2003 */) && !secondary)
|| rc == DS_OK, /* driver dependent? */
@@ -779,7 +779,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
wfxe.Samples.wValidBitsPerSample = wfx.wBitsPerSample;
wfxe.dwChannelMask = (wfx.nChannels == 1 ? KSAUDIO_SPEAKER_MONO : KSAUDIO_SPEAKER_STEREO);
- rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+ rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
ok(rc==DSERR_INVALIDPARAM && !secondary,
"IDirectSound_CreateSoundBuffer() returned: %08x %p\n",
rc, secondary);
@@ -791,7 +791,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
wfxe.Format.cbSize = sizeof(wfxe) - sizeof(wfx) + 1;
- rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+ rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
ok(((rc==DSERR_CONTROLUNAVAIL || rc==DSERR_INVALIDCALL /* 2003 */ || rc==DSERR_INVALIDPARAM) && !secondary)
|| rc==DS_OK /* driver dependent? */,
"IDirectSound_CreateSoundBuffer() returned: %08x %p\n",
@@ -804,7 +804,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
wfxe.Format.cbSize = sizeof(wfxe) - sizeof(wfx);
wfxe.SubFormat = GUID_NULL;
- rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+ rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
ok((rc==DSERR_INVALIDPARAM || rc==DSERR_INVALIDCALL) && !secondary,
"IDirectSound_CreateSoundBuffer() returned: %08x %p\n",
rc, secondary);
@@ -815,7 +815,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
}
wfxe.Format.cbSize = sizeof(wfxe);
- rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+ rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
ok((rc==DSERR_CONTROLUNAVAIL || rc==DSERR_INVALIDCALL || rc==DSERR_INVALIDPARAM) && !secondary,
"IDirectSound_CreateSoundBuffer() returned: %08x %p\n",
rc, secondary);
@@ -826,7 +826,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
}
wfxe.SubFormat = (format_tags[tag] == WAVE_FORMAT_PCM ? KSDATAFORMAT_SUBTYPE_PCM : KSDATAFORMAT_SUBTYPE_IEEE_FLOAT);
- rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+ rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
ok(rc==DS_OK && secondary,
"IDirectSound_CreateSoundBuffer() returned: %08x %p\n",
rc, secondary);
@@ -837,7 +837,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
}
wfxe.Format.cbSize = sizeof(wfxe) + 1;
- rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+ rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
ok(((rc==DSERR_CONTROLUNAVAIL || rc==DSERR_INVALIDCALL /* 2003 */ || rc==DSERR_INVALIDPARAM) && !secondary)
|| rc==DS_OK /* driver dependent? */,
"IDirectSound_CreateSoundBuffer() returned: %08x %p\n",
@@ -850,7 +850,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
wfxe.Format.cbSize = sizeof(wfxe) - sizeof(wfx);
++wfxe.Samples.wValidBitsPerSample;
- rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+ rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
ok(rc==DSERR_INVALIDPARAM && !secondary,
"IDirectSound_CreateSoundBuffer() returned: %08x %p\n",
rc, secondary);
@@ -862,7 +862,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
--wfxe.Samples.wValidBitsPerSample;
wfxe.Samples.wValidBitsPerSample = 0;
- rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+ rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
ok(rc==DS_OK && secondary,
"IDirectSound_CreateSoundBuffer() returned: %08x %p\n",
rc, secondary);
@@ -873,7 +873,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
}
wfxe.Samples.wValidBitsPerSample = wfxe.Format.wBitsPerSample;
- rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+ rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
ok(rc==DS_OK && secondary!=NULL,
"IDirectSound_CreateSoundBuffer() failed to create a secondary "
"buffer %08x\n",rc);
@@ -1162,7 +1162,7 @@ static void test_COM(void)
ok(hr == S_OK, "QueryInterface for IID_IUnknown failed: %08x\n", hr);
refcount = IUnknown_AddRef(unk);
ok(refcount == 2, "refcount == %u, expected 2\n", refcount);
- hr = IDirectSound_QueryInterface(ds8, &IID_IUnknown, (void**)&unk8);
+ hr = IDirectSound8_QueryInterface(ds8, &IID_IUnknown, (void**)&unk8);
ok(hr == S_OK, "QueryInterface for IID_IUnknown failed: %08x\n", hr);
refcount = IUnknown_AddRef(unk8);
ok(refcount == 4, "refcount == %u, expected 4\n", refcount);
@@ -1194,7 +1194,7 @@ static void test_effects(void)
rc=IDirectSound8_SetCooperativeLevel(dso,get_hwnd(),DSSCL_PRIORITY);
ok(rc==DS_OK,"IDirectSound8_SetCooperativeLevel() failed: %08x\n", rc);
if (rc!=DS_OK) {
- IDirectSound_Release(dso);
+ IDirectSound8_Release(dso);
return;
}
@@ -1372,7 +1372,7 @@ static void test_effects(void)
IDirectSoundBuffer_Release(primary);
}
- while (IDirectSound_Release(dso));
+ while (IDirectSound8_Release(dso));
}
START_TEST(dsound8)
diff --git a/dlls/dsound/tests/duplex.c b/dlls/dsound/tests/duplex.c
index ecdebdc..b770515 100644
--- a/dlls/dsound/tests/duplex.c
+++ b/dlls/dsound/tests/duplex.c
@@ -49,7 +49,7 @@ static void IDirectSoundFullDuplex_test(LPDIRECTSOUNDFULLDUPLEX dsfdo,
rc=IDirectSoundFullDuplex_QueryInterface(dsfdo,&IID_IUnknown,(LPVOID*)&unknown);
ok(rc==DS_OK,"IDirectSoundFullDuplex_QueryInterface(IID_IUnknown) failed: %08x\n", rc);
if (rc==DS_OK) {
- ref=IDirectSoundFullDuplex_Release(unknown);
+ ref = IUnknown_Release(unknown);
ok(ref==0, "IDirectSoundFullDuplex_Release() has %d references, "
"should have 0\n", ref);
}
@@ -94,7 +94,7 @@ static void IDirectSoundFullDuplex_test(LPDIRECTSOUNDFULLDUPLEX dsfdo,
"failed: %08x\n",rc);
if (rc==DS_OK) {
ok(dsfdo==dsfd, "different interfaces\n");
- ref=IDirectSound8_Release(dsfd);
+ ref=IDirectSoundFullDuplex_Release(dsfd);
ok(ref==1, "IDirectSoundFullDuplex_Release() has %d references, should have 1\n", ref);
}
@@ -319,7 +319,7 @@ static void test_COM(void)
ok(refcount == 2, "refcount == %u, expected 2\n", refcount);
refcount = IDirectSoundFullDuplex_AddRef(dsfd);
ok(refcount == 4, "refcount == %u, expected 4\n", refcount);
- hr = IDirectSoundCapture_QueryInterface(ds8, &IID_IUnknown, (void**)&unk8);
+ hr = IDirectSound8_QueryInterface(ds8, &IID_IUnknown, (void**)&unk8);
ok(hr == S_OK, "QueryInterface for IID_IUnknown failed: %08x\n", hr);
ok(unk == unk8,
"Got different IUnknown when QI'ing IDirectSoundFullDuplex and IDirectSoundCapture\n");
--
2.7.4
March 31, 2018
[PATCH v2 1/4] devenum: Register waveOut devices as codec devices.
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/devenum/createdevenum.c | 131 +++++++++++++++++++++++++----------------
dlls/devenum/devenum.rc | 1 -
dlls/devenum/devenum_private.h | 1 -
dlls/devenum/tests/Makefile.in | 2 +-
dlls/devenum/tests/devenum.c | 109 ++++++++++++++++++++++++++++++++++
5 files changed, 190 insertions(+), 54 deletions(-)
diff --git a/dlls/devenum/createdevenum.c b/dlls/devenum/createdevenum.c
index 6884ffc..e3fe049 100644
--- a/dlls/devenum/createdevenum.c
+++ b/dlls/devenum/createdevenum.c
@@ -594,6 +594,85 @@ cleanup:
return TRUE;
}
+static void register_waveout_devices(void)
+{
+ static const WCHAR defaultW[] = {'D','e','f','a','u','l','t',' ','W','a','v','e','O','u','t',' ','D','e','v','i','c','e',0};
+ static const WCHAR waveoutidW[] = {'W','a','v','e','O','u','t','I','d',0};
+ IPropertyBag *prop_bag = NULL;
+ REGFILTERPINS2 rgpins = {0};
+ REGPINTYPES rgtypes = {0};
+ REGFILTER2 rgf = {0};
+ WCHAR clsid[CHARS_IN_GUID];
+ IMoniker *mon = NULL;
+ WAVEOUTCAPSW caps;
+ int i, count;
+ VARIANT var;
+ HRESULT hr;
+
+ hr = DEVENUM_CreateAMCategoryKey(&CLSID_AudioRendererCategory);
+ if (FAILED(hr)) return;
+
+ count = waveOutGetNumDevs();
+
+ for (i = -1; i < count; i++)
+ {
+ waveOutGetDevCapsW(i, &caps, sizeof(caps));
+
+ V_VT(&var) = VT_BSTR;
+
+ if (i == -1) /* WAVE_MAPPER */
+ V_BSTR(&var) = SysAllocString(defaultW);
+ else
+ V_BSTR(&var) = SysAllocString(caps.szPname);
+ if (!(V_BSTR(&var)))
+ goto cleanup;
+
+ hr = register_codec(&CLSID_AudioRendererCategory, V_BSTR(&var), &mon);
+ if (FAILED(hr)) goto cleanup;
+
+ hr = IMoniker_BindToStorage(mon, NULL, NULL, &IID_IPropertyBag, (void **)&prop_bag);
+ if (FAILED(hr)) goto cleanup;
+
+ /* write friendly name */
+ hr = IPropertyBag_Write(prop_bag, wszFriendlyName, &var);
+ if (FAILED(hr)) goto cleanup;
+ VariantClear(&var);
+
+ /* write clsid */
+ V_VT(&var) = VT_BSTR;
+ StringFromGUID2(&CLSID_AudioRender, clsid, CHARS_IN_GUID);
+ if (!(V_BSTR(&var) = SysAllocString(clsid)))
+ goto cleanup;
+ hr = IPropertyBag_Write(prop_bag, clsid_keyname, &var);
+ if (FAILED(hr)) goto cleanup;
+ VariantClear(&var);
+
+ /* write filter data */
+ rgf.dwVersion = 2;
+ rgf.dwMerit = MERIT_DO_NOT_USE;
+ rgf.u.s2.cPins2 = 1;
+ rgf.u.s2.rgPins2 = &rgpins;
+ rgpins.dwFlags = REG_PINFLAG_B_RENDERER;
+ rgpins.nMediaTypes = 1;
+ rgpins.lpMediaType = &rgtypes;
+ rgtypes.clsMajorType = &MEDIATYPE_Audio;
+ rgtypes.clsMinorType = &MEDIASUBTYPE_NULL;
+
+ write_filter_data(prop_bag, &rgf);
+
+ /* write WaveOutId */
+ V_VT(&var) = VT_I4;
+ V_I4(&var) = i;
+ hr = IPropertyBag_Write(prop_bag, waveoutidW, &var);
+ if (FAILED(hr)) goto cleanup;
+
+cleanup:
+ VariantClear(&var);
+ if (prop_bag) IPropertyBag_Release(prop_bag);
+ if (mon) IMoniker_Release(mon);
+ }
+}
+
/**********************************************************************
* DEVENUM_ICreateDevEnum_CreateClassEnumerator
*/
@@ -616,6 +695,7 @@ static HRESULT WINAPI DEVENUM_ICreateDevEnum_CreateClassEnumerator(
register_legacy_filters();
hr = DirectSoundEnumerateW(®ister_dsound_devices, NULL);
if (FAILED(hr)) return hr;
+ register_waveout_devices();
return create_EnumMoniker(clsidDeviceClass, ppEnumMoniker);
}
@@ -752,62 +832,11 @@ static HRESULT register_codecs(void)
if (SUCCEEDED(res))
{
UINT i;
- WAVEOUTCAPSW wocaps;
WAVEINCAPSW wicaps;
MIDIOUTCAPSW mocaps;
REGPINTYPES * pTypes;
IPropertyBag * pPropBag = NULL;
- numDevs = waveOutGetNumDevs();
-
- res = DEVENUM_CreateAMCategoryKey(&CLSID_AudioRendererCategory);
- if (FAILED(res)) /* can't register any devices in this category */
- numDevs = 0;
-
- rfp2.dwFlags = REG_PINFLAG_B_RENDERER;
- for (i = 0; i < numDevs; i++)
- {
- if (waveOutGetDevCapsW(i, &wocaps, sizeof(WAVEOUTCAPSW))
- == MMSYSERR_NOERROR)
- {
- IMoniker * pMoniker = NULL;
-
- rfp2.nMediaTypes = 1;
- pTypes = CoTaskMemAlloc(rfp2.nMediaTypes * sizeof(REGPINTYPES));
- if (!pTypes)
- {
- IFilterMapper2_Release(pMapper);
- return E_OUTOFMEMORY;
- }
- /* FIXME: Native devenum seems to register a lot more types for
- * DSound than we do. Not sure what purpose they serve */
- pTypes[0].clsMajorType = &MEDIATYPE_Audio;
- pTypes[0].clsMinorType = &MEDIASUBTYPE_PCM;
-
- rfp2.lpMediaType = pTypes;
-
- res = IFilterMapper2_RegisterFilter(pMapper,
- &CLSID_AudioRender,
- wocaps.szPname,
- &pMoniker,
- &CLSID_AudioRendererCategory,
- wocaps.szPname,
- &rf2);
-
- /* FIXME: do additional stuff with IMoniker here, depending on what RegisterFilter does */
-
- if (pMoniker)
- IMoniker_Release(pMoniker);
-
- if (i == iDefaultDevice)
- {
- FIXME("Default device\n");
- }
-
- CoTaskMemFree(pTypes);
- }
- }
-
numDevs = waveInGetNumDevs();
res = DEVENUM_CreateAMCategoryKey(&CLSID_AudioInputDeviceCategory);
diff --git a/dlls/devenum/devenum.rc b/dlls/devenum/devenum.rc
index d9262e1..95e39d6 100644
--- a/dlls/devenum/devenum.rc
+++ b/dlls/devenum/devenum.rc
@@ -29,7 +29,6 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
STRINGTABLE
{
- IDS_DEVENUM_WODEFAULT "Default WaveOut Device"
IDS_DEVENUM_MIDEFAULT "Default MidiOut Device"
}
diff --git a/dlls/devenum/devenum_private.h b/dlls/devenum/devenum_private.h
index 93147ad..c891083 100644
--- a/dlls/devenum/devenum_private.h
+++ b/dlls/devenum/devenum_private.h
@@ -101,7 +101,6 @@ extern const WCHAR clsid_keyname[6] DECLSPEC_HIDDEN;
/**********************************************************************
* Resource IDs
*/
-#define IDS_DEVENUM_WODEFAULT 9
#define IDS_DEVENUM_MIDEFAULT 10
#define IDS_DEVENUM_KSDEFAULT 11
#define IDS_DEVENUM_KS 12
diff --git a/dlls/devenum/tests/Makefile.in b/dlls/devenum/tests/Makefile.in
index 028ba27..a673f20 100644
--- a/dlls/devenum/tests/Makefile.in
+++ b/dlls/devenum/tests/Makefile.in
@@ -1,5 +1,5 @@
TESTDLL = devenum.dll
-IMPORTS = advapi32 dsound oleaut32 ole32
+IMPORTS = advapi32 dsound oleaut32 ole32 winmm
C_SRCS = \
devenum.c
diff --git a/dlls/devenum/tests/devenum.c b/dlls/devenum/tests/devenum.c
index c4bf8af..79f5ed8 100644
--- a/dlls/devenum/tests/devenum.c
+++ b/dlls/devenum/tests/devenum.c
@@ -30,6 +30,7 @@
#include "vfwmsgs.h"
#include "mmsystem.h"
#include "dsound.h"
+#include "mmddk.h"
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
@@ -37,11 +38,25 @@ static const WCHAR friendly_name[] = {'F','r','i','e','n','d','l','y','N','a','m
static const WCHAR fcc_handlerW[] = {'F','c','c','H','a','n','d','l','e','r',0};
static const WCHAR deviceW[] = {'@','d','e','v','i','c','e',':',0};
static const WCHAR clsidW[] = {'C','L','S','I','D',0};
+static const WCHAR waveW[] = {'w','a','v','e',':',0};
static const WCHAR mrleW[] = {'m','r','l','e',0};
static const WCHAR swW[] = {'s','w',':',0};
static const WCHAR cmW[] = {'c','m',':',0};
static const WCHAR backslashW[] = {'\\',0};
+static inline WCHAR *strchrW( const WCHAR *str, WCHAR ch )
+{
+ do { if (*str == ch) return (WCHAR *)str; } while (*str++);
+ return NULL;
+}
+
+static inline int strncmpW( const WCHAR *str1, const WCHAR *str2, int n )
+{
+ if (n <= 0) return 0;
+ while ((--n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; }
+ return *str1 - *str2;
+}
+
static void test_devenum(IBindCtx *bind_ctx)
{
IEnumMoniker *enum_cat, *enum_moniker;
@@ -618,6 +633,99 @@ static BOOL CALLBACK test_dsound(GUID *guid, const WCHAR *desc, const WCHAR *mod
return TRUE;
}
+static void test_waveout(void)
+{
+ static const WCHAR defaultW[] = {'D','e','f','a','u','l','t',' ','W','a','v','e','O','u','t',' ','D','e','v','i','c','e',0};
+ static const WCHAR waveoutidW[] = {'W','a','v','e','O','u','t','I','d',0};
+ IParseDisplayName *parser;
+ IPropertyBag *prop_bag;
+ IMoniker *mon;
+ WCHAR endpoint[200];
+ WAVEOUTCAPSW caps;
+ WCHAR buffer[200];
+ const WCHAR *name;
+ MMRESULT mmr;
+ int count, i;
+ VARIANT var;
+ HRESULT hr;
+
+ hr = CoCreateInstance(&CLSID_CDeviceMoniker, NULL, CLSCTX_INPROC, &IID_IParseDisplayName, (void **)&parser);
+ ok(hr == S_OK, "Failed to create ParseDisplayName: %#x\n", hr);
+
+ count = waveOutGetNumDevs();
+
+ for (i = -1; i < count; i++)
+ {
+ waveOutGetDevCapsW(i, &caps, sizeof(caps));
+
+ if (i == -1) /* WAVE_MAPPER */
+ name = defaultW;
+ else
+ name = caps.szPname;
+
+ lstrcpyW(buffer, deviceW);
+ lstrcatW(buffer, cmW);
+ StringFromGUID2(&CLSID_AudioRendererCategory, buffer + lstrlenW(buffer), CHARS_IN_GUID);
+ lstrcatW(buffer, backslashW);
+ lstrcatW(buffer, name);
+
+ mon = check_display_name(parser, buffer);
+
+ hr = IMoniker_BindToStorage(mon, NULL, NULL, &IID_IPropertyBag, (void **)&prop_bag);
+ ok(hr == S_OK, "BindToStorage failed: %#x\n", hr);
+
+ VariantInit(&var);
+ hr = IPropertyBag_Read(prop_bag, friendly_name, &var, NULL);
+ if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND))
+ {
+ IPropertyBag_Release(prop_bag);
+ IMoniker_Release(mon);
+
+ /* Win8+ uses the endpoint GUID instead of the device name */
+ mmr = waveOutMessage((HWAVEOUT)(DWORD_PTR) i, DRV_QUERYFUNCTIONINSTANCEID,
+ (DWORD_PTR) endpoint, sizeof(endpoint));
+ ok(!mmr, "waveOutMessage failed: %u\n", mmr);
+
+ lstrcpyW(buffer, deviceW);
+ lstrcatW(buffer, cmW);
+ StringFromGUID2(&CLSID_AudioRendererCategory, buffer + lstrlenW(buffer), CHARS_IN_GUID);
+ lstrcatW(buffer, backslashW);
+ lstrcatW(buffer, waveW);
+ lstrcatW(buffer, strchrW(endpoint, '}') + 2);
+
+ mon = check_display_name(parser, buffer);
+
+ hr = IMoniker_BindToStorage(mon, NULL, NULL, &IID_IPropertyBag, (void **)&prop_bag);
+ ok(hr == S_OK, "BindToStorage failed: %#x\n", hr);
+
+ hr = IPropertyBag_Read(prop_bag, friendly_name, &var, NULL);
+ }
+ ok(hr == S_OK, "Read failed: %#x\n", hr);
+
+ ok(!strncmpW(name, V_BSTR(&var), lstrlenW(name)), "expected %s, got %s\n",
+ wine_dbgstr_w(name), wine_dbgstr_w(V_BSTR(&var)));
+
+ VariantClear(&var);
+ hr = IPropertyBag_Read(prop_bag, clsidW, &var, NULL);
+ ok(hr == S_OK, "Read failed: %#x\n", hr);
+
+ StringFromGUID2(&CLSID_AudioRender, buffer, CHARS_IN_GUID);
+ ok(!lstrcmpW(buffer, V_BSTR(&var)), "expected %s, got %s\n",
+ wine_dbgstr_w(buffer), wine_dbgstr_w(V_BSTR(&var)));
+
+ VariantClear(&var);
+ hr = IPropertyBag_Read(prop_bag, waveoutidW, &var, NULL);
+ ok(hr == S_OK, "Read failed: %#x\n", hr);
+
+ ok(V_I4(&var) == i, "expected %d, got %d\n", i, V_I4(&var));
+
+ IPropertyBag_Release(prop_bag);
+ IMoniker_Release(mon);
+ }
+
+ IParseDisplayName_Release(parser);
+}
+
START_TEST(devenum)
{
IBindCtx *bind_ctx = NULL;
@@ -643,6 +751,7 @@ START_TEST(devenum)
test_legacy_filter();
hr = DirectSoundEnumerateW(test_dsound, NULL);
ok(hr == S_OK, "got %#x\n", hr);
+ test_waveout();
CoUninitialize();
}
--
2.7.4
March 31, 2018
[PATCH] testbot: Standardize the packages inheritance and exports.
by Francois Gouget
Use "our" instead of the antiquated 'use vars'.
Use "use Exporter 'import'" as this form avoid exporting the whole
Exporter interface from each of our packages. This means we can also
drop @ISA in those cases where we don't need to inherit from another
package.
Also we don't need the Exporter module just to inherit an interface so
remove unneeded uses of Exporter.
Defining the package inheritance and public interface does not depend on
the rest of the package so move these statements first, even before all
the other imports.
Remove the ampersands from the exported functions names: they are
unnecessary (and reportedly slower).
Signed-off-by: Francois Gouget <fgouget(a)codeweavers.com>
---
testbot/lib/ObjectModel/BackEnd.pm | 7 ++-----
testbot/lib/ObjectModel/BasicPropertyDescriptor.pm | 8 +++-----
testbot/lib/ObjectModel/CGI/CollectionBlock.pm | 9 +++------
.../lib/ObjectModel/CGI/CollectionBlockForPage.pm | 5 +----
testbot/lib/ObjectModel/CGI/CollectionPage.pm | 7 ++-----
testbot/lib/ObjectModel/CGI/FormPage.pm | 5 +----
testbot/lib/ObjectModel/CGI/FreeFormPage.pm | 6 +-----
testbot/lib/ObjectModel/CGI/ItemPage.pm | 7 ++-----
testbot/lib/ObjectModel/CGI/Page.pm | 8 ++++----
testbot/lib/ObjectModel/Collection.pm | 7 ++-----
testbot/lib/ObjectModel/DBIBackEnd.pm | 12 +++++-------
.../lib/ObjectModel/DetailrefPropertyDescriptor.pm | 8 ++++----
testbot/lib/ObjectModel/EnumPropertyDescriptor.pm | 8 +++-----
testbot/lib/ObjectModel/Item.pm | 8 +++-----
.../lib/ObjectModel/ItemrefPropertyDescriptor.pm | 9 ++++-----
testbot/lib/ObjectModel/PropertyDescriptor.pm | 4 ----
testbot/lib/WineTestBot/Activity.pm | 9 +++------
testbot/lib/WineTestBot/Branches.pm | 16 +++++++---------
testbot/lib/WineTestBot/CGI/PageBase.pm | 9 +++------
testbot/lib/WineTestBot/CGI/Sessions.pm | 18 +++++++-----------
testbot/lib/WineTestBot/Engine/Events.pm | 6 ++----
testbot/lib/WineTestBot/Engine/Notify.pm | 16 +++++++---------
testbot/lib/WineTestBot/Jobs.pm | 20 ++++++++------------
testbot/lib/WineTestBot/LibvirtDomain.pm | 8 +++-----
testbot/lib/WineTestBot/Log.pm | 9 +++------
testbot/lib/WineTestBot/Patches.pm | 21 +++++++++------------
testbot/lib/WineTestBot/PendingPatchSets.pm | 20 ++++++++------------
testbot/lib/WineTestBot/PendingPatches.pm | 17 ++++++-----------
testbot/lib/WineTestBot/RecordGroups.pm | 18 ++++++------------
testbot/lib/WineTestBot/Records.pm | 18 +++++++-----------
testbot/lib/WineTestBot/Roles.pm | 16 +++++-----------
testbot/lib/WineTestBot/Steps.pm | 20 ++++++++------------
testbot/lib/WineTestBot/StepsTasks.pm | 19 ++++++++-----------
testbot/lib/WineTestBot/Tasks.pm | 21 ++++++++-------------
testbot/lib/WineTestBot/TestAgent.pm | 17 +++++++----------
testbot/lib/WineTestBot/UserRoles.pm | 17 ++++++-----------
testbot/lib/WineTestBot/Users.pm | 21 +++++++++------------
testbot/lib/WineTestBot/Utils.pm | 12 +++++-------
testbot/lib/WineTestBot/VMs.pm | 20 ++++++++------------
testbot/lib/WineTestBot/WineTestBotObjects.pm | 18 +++++++-----------
testbot/web/index.pl | 17 +++++++++--------
41 files changed, 199 insertions(+), 322 deletions(-)
diff --git a/testbot/lib/ObjectModel/BackEnd.pm b/testbot/lib/ObjectModel/BackEnd.pm
index 0bb48cf7c..ae209a4c1 100644
--- a/testbot/lib/ObjectModel/BackEnd.pm
+++ b/testbot/lib/ObjectModel/BackEnd.pm
@@ -30,11 +30,8 @@ should provide.
=cut
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(Exporter);
-(a)EXPORT = qw(&AddDBBackEnd &GetDBBackEnd &RemoveDBBackEnd &CloseAllDBBackEnds);
+use Exporter 'import';
+our @EXPORT = qw(AddDBBackEnd GetDBBackEnd RemoveDBBackEnd CloseAllDBBackEnds);
sub new($@)
{
diff --git a/testbot/lib/ObjectModel/BasicPropertyDescriptor.pm b/testbot/lib/ObjectModel/BasicPropertyDescriptor.pm
index 4c3382cb0..766a34230 100644
--- a/testbot/lib/ObjectModel/BasicPropertyDescriptor.pm
+++ b/testbot/lib/ObjectModel/BasicPropertyDescriptor.pm
@@ -30,13 +30,11 @@ This handles the boolean, a number and string columns.
=cut
+use Exporter 'import';
use ObjectModel::PropertyDescriptor;
+our @ISA = qw(ObjectModel::PropertyDescriptor);
+our @EXPORT = qw(CreateBasicPropertyDescriptor);
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(ObjectModel::PropertyDescriptor Exporter);
-(a)EXPORT = qw(&CreateBasicPropertyDescriptor);
sub _initialize($$$)
{
diff --git a/testbot/lib/ObjectModel/CGI/CollectionBlock.pm b/testbot/lib/ObjectModel/CGI/CollectionBlock.pm
index ca2c6d3e1..155717aee 100644
--- a/testbot/lib/ObjectModel/CGI/CollectionBlock.pm
+++ b/testbot/lib/ObjectModel/CGI/CollectionBlock.pm
@@ -27,15 +27,12 @@ ObjectModel::CGI::CollectionBlock - Base class for list blocks
package ObjectModel::CGI::CollectionBlock;
+use Exporter 'import';
+our @EXPORT = qw(new);
+
use POSIX qw(strftime);
use URI::Escape;
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(Exporter);
-
-(a)EXPORT = qw(new);
sub new($$$@)
{
diff --git a/testbot/lib/ObjectModel/CGI/CollectionBlockForPage.pm b/testbot/lib/ObjectModel/CGI/CollectionBlockForPage.pm
index 3dd8154a7..ff8247ec9 100644
--- a/testbot/lib/ObjectModel/CGI/CollectionBlockForPage.pm
+++ b/testbot/lib/ObjectModel/CGI/CollectionBlockForPage.pm
@@ -28,11 +28,8 @@ ObjectModel::CGI::CollectionBlockForPage - Collection block for list pages
=cut
use ObjectModel::CGI::CollectionBlock;
+our @ISA = qw(ObjectModel::CGI::CollectionBlock);
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(ObjectModel::CGI::CollectionBlock Exporter);
sub CallGenerateFormStart($)
{
diff --git a/testbot/lib/ObjectModel/CGI/CollectionPage.pm b/testbot/lib/ObjectModel/CGI/CollectionPage.pm
index e45b2a4a7..6593afcd2 100644
--- a/testbot/lib/ObjectModel/CGI/CollectionPage.pm
+++ b/testbot/lib/ObjectModel/CGI/CollectionPage.pm
@@ -27,13 +27,10 @@ ObjectModel::CGI::CollectionPage - Base class for list pages
=cut
-use ObjectModel::CGI::CollectionBlockForPage;
use ObjectModel::CGI::Page;
+our @ISA = qw(ObjectModel::CGI::Page);
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(ObjectModel::CGI::Page Exporter);
+use ObjectModel::CGI::CollectionBlockForPage;
sub _initialize($$$$)
diff --git a/testbot/lib/ObjectModel/CGI/FormPage.pm b/testbot/lib/ObjectModel/CGI/FormPage.pm
index 1745ec87b..b3861dd2a 100644
--- a/testbot/lib/ObjectModel/CGI/FormPage.pm
+++ b/testbot/lib/ObjectModel/CGI/FormPage.pm
@@ -29,11 +29,8 @@ ObjectModel::CGI::FormPage - Base class for web forms
=cut
use ObjectModel::CGI::Page;
+our @ISA = qw(ObjectModel::CGI::Page);
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(ObjectModel::CGI::Page Exporter);
sub _initialize($$$$)
{
diff --git a/testbot/lib/ObjectModel/CGI/FreeFormPage.pm b/testbot/lib/ObjectModel/CGI/FreeFormPage.pm
index 7af04c498..c4f00101b 100644
--- a/testbot/lib/ObjectModel/CGI/FreeFormPage.pm
+++ b/testbot/lib/ObjectModel/CGI/FreeFormPage.pm
@@ -28,10 +28,6 @@ ObjectModel::CGI::FreeFormPage - Base class for unbound web forms
=cut
use ObjectModel::CGI::FormPage;
-
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(ObjectModel::CGI::FormPage Exporter);
+our @ISA = qw(ObjectModel::CGI::FormPage);
1;
diff --git a/testbot/lib/ObjectModel/CGI/ItemPage.pm b/testbot/lib/ObjectModel/CGI/ItemPage.pm
index b44e5b2d3..c208aea31 100644
--- a/testbot/lib/ObjectModel/CGI/ItemPage.pm
+++ b/testbot/lib/ObjectModel/CGI/ItemPage.pm
@@ -28,13 +28,10 @@ ObjectModel::CGI::ItemPage - Base class for bound web forms
=cut
-use URI::Escape;
use ObjectModel::CGI::FormPage;
+our @ISA = qw(ObjectModel::CGI::FormPage);
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(ObjectModel::CGI::FormPage Exporter);
+use URI::Escape;
sub _initialize($$$$)
{
diff --git a/testbot/lib/ObjectModel/CGI/Page.pm b/testbot/lib/ObjectModel/CGI/Page.pm
index ff7e8487a..b91022832 100644
--- a/testbot/lib/ObjectModel/CGI/Page.pm
+++ b/testbot/lib/ObjectModel/CGI/Page.pm
@@ -27,13 +27,13 @@ ObjectModel::CGI::Page - Base class for web pages
=cut
+use Exporter 'import';
+our @EXPORT = qw(new SetPageBaseCreator);
+
use CGI;
-use vars qw(@ISA @EXPORT $PageBaseCreator);
-require Exporter;
-(a)ISA = qw(Exporter);
-(a)EXPORT = qw(new SetPageBaseCreator);
+my $PageBaseCreator;
sub new($$$@)
{
diff --git a/testbot/lib/ObjectModel/Collection.pm b/testbot/lib/ObjectModel/Collection.pm
index 032c7386d..712172bca 100644
--- a/testbot/lib/ObjectModel/Collection.pm
+++ b/testbot/lib/ObjectModel/Collection.pm
@@ -37,11 +37,8 @@ criteria.
=cut
-use vars qw(@ISA @EXPORT_OK);
-
-require Exporter;
-(a)ISA = qw(Exporter);
-(a)EXPORT_OK = qw(&new &ComputeMasterKey);
+use Exporter 'import';
+our @EXPORT_OK = qw(new ComputeMasterKey);
use Scalar::Util qw(weaken);
use ObjectModel::BackEnd;
diff --git a/testbot/lib/ObjectModel/DBIBackEnd.pm b/testbot/lib/ObjectModel/DBIBackEnd.pm
index 0016e19c6..40bfe85f7 100644
--- a/testbot/lib/ObjectModel/DBIBackEnd.pm
+++ b/testbot/lib/ObjectModel/DBIBackEnd.pm
@@ -30,16 +30,14 @@ ObjectModel::BackEnd
=cut
-use DBI;
-use Time::Local;
-
+use Exporter 'import';
use ObjectModel::BackEnd;
+our @ISA = qw(ObjectModel::BackEnd);
+our @EXPORT = qw(UseDBIBackEnd);
-use vars qw(@ISA @EXPORT);
+use DBI;
+use Time::Local;
-require Exporter;
-(a)ISA = qw(ObjectModel::BackEnd Exporter);
-(a)EXPORT = qw(&UseDBIBackEnd);
sub GetDb($)
{
diff --git a/testbot/lib/ObjectModel/DetailrefPropertyDescriptor.pm b/testbot/lib/ObjectModel/DetailrefPropertyDescriptor.pm
index d60fe6395..25144d08c 100644
--- a/testbot/lib/ObjectModel/DetailrefPropertyDescriptor.pm
+++ b/testbot/lib/ObjectModel/DetailrefPropertyDescriptor.pm
@@ -25,11 +25,11 @@ ObjectModel::DetailrefPropertyDescriptor - A reference to a collection of relate
=cut
-use vars qw(@ISA @EXPORT);
+use Exporter 'import';
+use ObjectModel::PropertyDescriptor;
+our @ISA = qw(ObjectModel::PropertyDescriptor);
+our @EXPORT = qw(CreateDetailrefPropertyDescriptor SetDetailrefKeyPrefix);
-require Exporter;
-(a)ISA = qw(ObjectModel::PropertyDescriptor Exporter);
-(a)EXPORT = qw(&CreateDetailrefPropertyDescriptor &SetDetailrefKeyPrefix);
sub _initialize($$)
{
diff --git a/testbot/lib/ObjectModel/EnumPropertyDescriptor.pm b/testbot/lib/ObjectModel/EnumPropertyDescriptor.pm
index 3e116ba72..d5850698e 100644
--- a/testbot/lib/ObjectModel/EnumPropertyDescriptor.pm
+++ b/testbot/lib/ObjectModel/EnumPropertyDescriptor.pm
@@ -30,13 +30,11 @@ new value is allowed.
=cut
+use Exporter 'import';
use ObjectModel::PropertyDescriptor;
+our @ISA = qw(ObjectModel::PropertyDescriptor);
+our @EXPORT = qw(CreateEnumPropertyDescriptor);
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(ObjectModel::PropertyDescriptor Exporter);
-(a)EXPORT = qw(&CreateEnumPropertyDescriptor);
sub _initialize($$)
{
diff --git a/testbot/lib/ObjectModel/Item.pm b/testbot/lib/ObjectModel/Item.pm
index 201577c98..fb125f015 100644
--- a/testbot/lib/ObjectModel/Item.pm
+++ b/testbot/lib/ObjectModel/Item.pm
@@ -26,15 +26,13 @@ ObjectModel::Item - Base class for items
=cut
+use Exporter 'import';
+our @EXPORT_OK = qw(new);
+
use Scalar::Util qw(weaken);
use ObjectModel::BackEnd;
use ObjectModel::Collection;
-use vars qw(@ISA @EXPORT_OK);
-
-require Exporter;
-(a)ISA = qw(Exporter);
-(a)EXPORT_OK = qw(&new);
=pod
diff --git a/testbot/lib/ObjectModel/ItemrefPropertyDescriptor.pm b/testbot/lib/ObjectModel/ItemrefPropertyDescriptor.pm
index 21806a269..cba4f9af1 100644
--- a/testbot/lib/ObjectModel/ItemrefPropertyDescriptor.pm
+++ b/testbot/lib/ObjectModel/ItemrefPropertyDescriptor.pm
@@ -25,11 +25,10 @@ ObjectModel::ItemrefPropertyDescriptor - A property referencing an ObjectModel::
=cut
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(ObjectModel::PropertyDescriptor Exporter);
-(a)EXPORT = qw(&CreateItemrefPropertyDescriptor);
+use Exporter 'import';
+use ObjectModel::PropertyDescriptor;
+our @ISA = qw(ObjectModel::PropertyDescriptor);
+our @EXPORT = qw(CreateItemrefPropertyDescriptor);
sub _initialize($$$)
{
diff --git a/testbot/lib/ObjectModel/PropertyDescriptor.pm b/testbot/lib/ObjectModel/PropertyDescriptor.pm
index 583082e81..f13a4b248 100644
--- a/testbot/lib/ObjectModel/PropertyDescriptor.pm
+++ b/testbot/lib/ObjectModel/PropertyDescriptor.pm
@@ -32,10 +32,6 @@ required or not.
=cut
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(Exporter);
sub new($$$$$@)
{
diff --git a/testbot/lib/WineTestBot/Activity.pm b/testbot/lib/WineTestBot/Activity.pm
index acec6064c..b3e576a19 100644
--- a/testbot/lib/WineTestBot/Activity.pm
+++ b/testbot/lib/WineTestBot/Activity.pm
@@ -25,18 +25,15 @@ WineTestBot::Activity - reconstruct the TestBot's activity from its history rec
=cut
+use Exporter 'import';
+our @EXPORT = qw(GetActivity GetStatistics);
+
use Scalar::Util qw(weaken);
use WineTestBot::Config;
use WineTestBot::Jobs;
use WineTestBot::RecordGroups;
use WineTestBot::Records;
-use vars qw (@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(Exporter);
-(a)EXPORT = qw(&GetActivity &GetStatistics);
-
sub _UpdateMin($$)
{
diff --git a/testbot/lib/WineTestBot/Branches.pm b/testbot/lib/WineTestBot/Branches.pm
index a67832590..a18fafcbd 100644
--- a/testbot/lib/WineTestBot/Branches.pm
+++ b/testbot/lib/WineTestBot/Branches.pm
@@ -27,12 +27,10 @@ WineTestBot::Branch - Describes a Wine branch
=cut
use WineTestBot::WineTestBotObjects;
-use WineTestBot::Config;
+our @ISA = qw(WineTestBot::WineTestBotItem);
-use vars qw (@ISA @EXPORT);
+use WineTestBot::Config;
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
sub InitializeNew($$)
{
@@ -42,6 +40,7 @@ sub InitializeNew($$)
$self->SUPER::InitializeNew($Collection);
}
+
package WineTestBot::Branches;
=head1 NAME
@@ -50,14 +49,13 @@ WineTestBot::Branches - A collection of WineTestBot::Branch objects
=cut
-use ObjectModel::BasicPropertyDescriptor;
+use Exporter 'import';
use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreateBranches);
-use vars qw (@ISA @EXPORT);
+use ObjectModel::BasicPropertyDescriptor;
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreateBranches);
sub GetDefaultBranch($)
{
diff --git a/testbot/lib/WineTestBot/CGI/PageBase.pm b/testbot/lib/WineTestBot/CGI/PageBase.pm
index fa383c512..67e8fc86f 100644
--- a/testbot/lib/WineTestBot/CGI/PageBase.pm
+++ b/testbot/lib/WineTestBot/CGI/PageBase.pm
@@ -28,6 +28,9 @@ WineTestBot::CGI::PageBase - Base class for web pages
=cut
+use Exporter 'import';
+our @EXPORT = qw(CreatePageBase);
+
use Apache2::Const -compile => qw(REDIRECT);
use Apache2::ServerRec;
use CGI::Cookie;
@@ -36,12 +39,6 @@ use WineTestBot::CGI::Sessions;
use WineTestBot::Config;
use WineTestBot::Utils;
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(Exporter);
-(a)EXPORT = qw(&CreatePageBase);
-
sub new($$$$@)
{
my $class = shift;
diff --git a/testbot/lib/WineTestBot/CGI/Sessions.pm b/testbot/lib/WineTestBot/CGI/Sessions.pm
index 87fd15fb2..af30fbb85 100644
--- a/testbot/lib/WineTestBot/CGI/Sessions.pm
+++ b/testbot/lib/WineTestBot/CGI/Sessions.pm
@@ -28,12 +28,10 @@ WineTestBot::CGI::Session - A web user's session
=cut
-use WineTestBot::Utils;
use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotItem);
-require Exporter;
-use vars qw(@ISA @EXPORT);
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
+use WineTestBot::Utils;
sub InitializeNew($$)
{
@@ -53,19 +51,17 @@ WineTestBot::CGI::Sessions - A Session collection
=cut
+use Exporter 'import';
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreateSessions DeleteSessions NewSession);
+
use CGI::Cookie;
use ObjectModel::BasicPropertyDescriptor;
use ObjectModel::ItemrefPropertyDescriptor;
use WineTestBot::Config;
use WineTestBot::Users;
use WineTestBot::Utils;
-use WineTestBot::WineTestBotObjects;
-
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreateSessions &DeleteSessions &NewSession);
sub CreateItem($)
diff --git a/testbot/lib/WineTestBot/Engine/Events.pm b/testbot/lib/WineTestBot/Engine/Events.pm
index c3ebe9baf..677debfbf 100644
--- a/testbot/lib/WineTestBot/Engine/Events.pm
+++ b/testbot/lib/WineTestBot/Engine/Events.pm
@@ -27,11 +27,9 @@ WineTestBot::Engine::Events - Engine events
=cut
-use vars qw (@ISA @EXPORT);
+use Exporter 'import';
+our @EXPORT = qw(AddEvent DeleteEvent EventScheduled RunEvents);
-require Exporter;
-(a)ISA = qw(Exporter);
-(a)EXPORT = qw(&AddEvent &DeleteEvent &EventScheduled &RunEvents);
my %Events;
diff --git a/testbot/lib/WineTestBot/Engine/Notify.pm b/testbot/lib/WineTestBot/Engine/Notify.pm
index c277f7aa9..ddb14d2fa 100644
--- a/testbot/lib/WineTestBot/Engine/Notify.pm
+++ b/testbot/lib/WineTestBot/Engine/Notify.pm
@@ -27,18 +27,16 @@ WineTestBot::Engine::Notify - Engine notification
=cut
+use Exporter 'import';
+our $RunningInEngine;
+our @EXPORT = qw(Shutdown PingEngine JobStatusChange JobCancel
+ JobRestart RescheduleJobs VMStatusChange
+ WinePatchMLSubmission WinePatchWebSubmission GetScreenshot);
+our @EXPORT_OK = qw($RunningInEngine);
+
use Socket;
use WineTestBot::Config;
-use vars qw (@ISA @EXPORT @EXPORT_OK $RunningInEngine);
-
-require Exporter;
-(a)ISA = qw(Exporter);
-(a)EXPORT = qw(&Shutdown &PingEngine &JobStatusChange &JobCancel
- &JobRestart &RescheduleJobs &VMStatusChange
- &WinePatchMLSubmission &WinePatchWebSubmission &GetScreenshot);
-(a)EXPORT_OK = qw($RunningInEngine);
-
sub SendCmdReceiveReply($)
{
diff --git a/testbot/lib/WineTestBot/Jobs.pm b/testbot/lib/WineTestBot/Jobs.pm
index f810b4f12..29f7860cb 100644
--- a/testbot/lib/WineTestBot/Jobs.pm
+++ b/testbot/lib/WineTestBot/Jobs.pm
@@ -51,17 +51,15 @@ A Job is composed of multiple WineTestBot::Step objects.
=cut
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotItem);
+
use File::Path;
use WineTestBot::Config;
use WineTestBot::Branches;
use WineTestBot::Engine::Notify;
-use WineTestBot::WineTestBotObjects;
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
sub _initialize($$)
{
@@ -391,11 +389,15 @@ those that are yet to be run.
=cut
+use Exporter 'import';
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreateJobs ScheduleJobs CheckJobs);
+
use ObjectModel::BasicPropertyDescriptor;
use ObjectModel::EnumPropertyDescriptor;
use ObjectModel::DetailrefPropertyDescriptor;
use ObjectModel::ItemrefPropertyDescriptor;
-use WineTestBot::WineTestBotObjects;
use WineTestBot::Branches;
use WineTestBot::Config;
use WineTestBot::Patches;
@@ -404,12 +406,6 @@ use WineTestBot::Steps;
use WineTestBot::Users;
use WineTestBot::VMs;
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreateJobs &ScheduleJobs &CheckJobs);
-
sub CreateItem($)
{
diff --git a/testbot/lib/WineTestBot/LibvirtDomain.pm b/testbot/lib/WineTestBot/LibvirtDomain.pm
index 37d519ce9..843579361 100644
--- a/testbot/lib/WineTestBot/LibvirtDomain.pm
+++ b/testbot/lib/WineTestBot/LibvirtDomain.pm
@@ -32,14 +32,12 @@ technologies.
=cut
+use Exporter 'import';
+our @EXPORT_OK = qw(new);
+
use Sys::Virt;
use Image::Magick;
-use vars qw (@ISA @EXPORT_OK);
-
-require Exporter;
-(a)ISA = qw(Exporter);
-(a)EXPORT_OK = qw(new);
my $HackVirtURI = 1;
diff --git a/testbot/lib/WineTestBot/Log.pm b/testbot/lib/WineTestBot/Log.pm
index 65782c514..36efb48a2 100644
--- a/testbot/lib/WineTestBot/Log.pm
+++ b/testbot/lib/WineTestBot/Log.pm
@@ -25,14 +25,11 @@ WineTestBot::Log - Logging
=cut
-use WineTestBot::Config;
-use WineTestBot::Utils;
+use Exporter 'import';
+our @EXPORT = qw(LogMsg OpenLog Time Elapsed PrettyElapsed);
-use vars qw (@ISA @EXPORT);
+use WineTestBot::Config;
-require Exporter;
-(a)ISA = qw(Exporter);
-(a)EXPORT = qw(&LogMsg &OpenLog &Time &Elapsed &PrettyElapsed);
my $logfile;
my $logprefix;
diff --git a/testbot/lib/WineTestBot/Patches.pm b/testbot/lib/WineTestBot/Patches.pm
index 7906f1cb6..e4b9b0089 100644
--- a/testbot/lib/WineTestBot/Patches.pm
+++ b/testbot/lib/WineTestBot/Patches.pm
@@ -33,6 +33,9 @@ linked to this patch through a WineTestBot::PendingPatch object.
=cut
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotItem);
+
use Encode qw/decode/;
use File::Basename;
@@ -42,13 +45,8 @@ use WineTestBot::Jobs;
use WineTestBot::Users;
use WineTestBot::Utils;
use WineTestBot::VMs;
-use WineTestBot::WineTestBotObjects;
use WineTestBot::Engine::Notify;
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
sub InitializeNew($$)
{
@@ -357,6 +355,7 @@ sub GetEMailRecipient($)
return BuildEMailRecipient($self->FromEMail, $self->FromName);
}
+
package WineTestBot::Patches;
=head1 NAME
@@ -365,15 +364,13 @@ WineTestBot::Patches - A collection of WineTestBot::Patch objects
=cut
-use ObjectModel::BasicPropertyDescriptor;
-use WineTestBot::Config;
+use Exporter 'import';
use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreatePatches);
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreatePatches);
+use ObjectModel::BasicPropertyDescriptor;
+use WineTestBot::Config;
sub CreateItem($)
diff --git a/testbot/lib/WineTestBot/PendingPatchSets.pm b/testbot/lib/WineTestBot/PendingPatchSets.pm
index d51652221..88dc73677 100644
--- a/testbot/lib/WineTestBot/PendingPatchSets.pm
+++ b/testbot/lib/WineTestBot/PendingPatchSets.pm
@@ -38,15 +38,13 @@ The WineTestBot::PendingPatchSet class is where this tracking is implemented.
=cut
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotItem);
+
use WineTestBot::Config;
use WineTestBot::Patches;
use WineTestBot::Utils;
-use WineTestBot::WineTestBotObjects;
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
=pod
=over 12
@@ -153,19 +151,17 @@ WineTestBot::PendingPatchSets - A collection of WineTestBot::PendingPatchSet obj
=cut
+use Exporter 'import';
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreatePendingPatchSets);
+
use ObjectModel::BasicPropertyDescriptor;
use ObjectModel::DetailrefPropertyDescriptor;
use WineTestBot::Config;
use WineTestBot::PendingPatches;
use WineTestBot::Patches;
use WineTestBot::Utils;
-use WineTestBot::WineTestBotObjects;
-
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreatePendingPatchSets);
sub CreateItem($)
diff --git a/testbot/lib/WineTestBot/PendingPatches.pm b/testbot/lib/WineTestBot/PendingPatches.pm
index 281db60ef..4de599dac 100644
--- a/testbot/lib/WineTestBot/PendingPatches.pm
+++ b/testbot/lib/WineTestBot/PendingPatches.pm
@@ -32,11 +32,8 @@ identifying the patch series it belongs to.
=cut
use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotItem);
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
package WineTestBot::PendingPatches;
@@ -46,16 +43,14 @@ WineTestBot::PendingPatches - A collection of WineTestBot::PendingPatch objects
=cut
+use Exporter 'import';
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreatePendingPatches);
+
use ObjectModel::BasicPropertyDescriptor;
use ObjectModel::ItemrefPropertyDescriptor;
use WineTestBot::Patches;
-use WineTestBot::WineTestBotObjects;
-
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreatePendingPatches);
sub CreateItem($)
diff --git a/testbot/lib/WineTestBot/RecordGroups.pm b/testbot/lib/WineTestBot/RecordGroups.pm
index 1e5dbbdd4..9f0f52036 100644
--- a/testbot/lib/WineTestBot/RecordGroups.pm
+++ b/testbot/lib/WineTestBot/RecordGroups.pm
@@ -31,12 +31,8 @@ or the state of the TestBot at at a given time.
=cut
use WineTestBot::WineTestBotObjects;
-use WineTestBot::Config;
+our @ISA = qw(WineTestBot::WineTestBotItem);
-use vars qw (@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
sub InitializeNew($$)
{
@@ -56,17 +52,15 @@ WineTestBot::RecordGroups - A collection of WineTestBot::RecordGroup objects
=cut
+use Exporter 'import';
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreateRecordGroups CompareRecordGroups SaveRecord);
+
use ObjectModel::BasicPropertyDescriptor;
use ObjectModel::DetailrefPropertyDescriptor;
-use WineTestBot::WineTestBotObjects;
use WineTestBot::Records;
-use vars qw (@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreateRecordGroups &CompareRecordGroups &SaveRecord);
-
sub CreateItem($)
{
diff --git a/testbot/lib/WineTestBot/Records.pm b/testbot/lib/WineTestBot/Records.pm
index 98d5ee7d9..990ae421e 100644
--- a/testbot/lib/WineTestBot/Records.pm
+++ b/testbot/lib/WineTestBot/Records.pm
@@ -38,13 +38,11 @@ only limited by the amount of data dumped into the Records table.
=cut
-use WineTestBot::Config;
use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotItem);
-use vars qw (@ISA @EXPORT);
+use WineTestBot::Config;
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
sub InitializeNew($$)
{
@@ -62,15 +60,13 @@ WineTestBot::Records - A collection of WineTestBot::Record objects
=cut
-use ObjectModel::BasicPropertyDescriptor;
-use ObjectModel::EnumPropertyDescriptor;
+use Exporter 'import';
use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreateRecords);
-use vars qw (@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreateRecords);
+use ObjectModel::BasicPropertyDescriptor;
+use ObjectModel::EnumPropertyDescriptor;
sub CreateItem($)
diff --git a/testbot/lib/WineTestBot/Roles.pm b/testbot/lib/WineTestBot/Roles.pm
index a617ac14e..45f370f1d 100644
--- a/testbot/lib/WineTestBot/Roles.pm
+++ b/testbot/lib/WineTestBot/Roles.pm
@@ -30,11 +30,7 @@ A Role is a class of users and defines what they can do.
=cut
use WineTestBot::WineTestBotObjects;
-
-use vars qw (@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
+our @ISA = qw(WineTestBot::WineTestBotItem);
package WineTestBot::Roles;
@@ -45,14 +41,12 @@ WineTestBot::Roles - A collection of WineTestBot::Role objects
=cut
-use ObjectModel::BasicPropertyDescriptor;
+use Exporter 'import';
use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreateRoles);
-use vars qw (@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreateRoles);
+use ObjectModel::BasicPropertyDescriptor;
sub CreateItem($)
diff --git a/testbot/lib/WineTestBot/Steps.pm b/testbot/lib/WineTestBot/Steps.pm
index ef2b3872b..237347347 100644
--- a/testbot/lib/WineTestBot/Steps.pm
+++ b/testbot/lib/WineTestBot/Steps.pm
@@ -36,16 +36,14 @@ or to reset their PreviousNo fields beforehand.
=cut
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotItem);
+
use File::Copy;
use File::Path;
use WineTestBot::Config;
-use WineTestBot::WineTestBotObjects;
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
sub InitializeNew($$)
{
@@ -184,17 +182,15 @@ WineTestBot::Steps - A collection of Job Steps
=cut
+use Exporter 'import';
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreateSteps);
+
use ObjectModel::BasicPropertyDescriptor;
use ObjectModel::EnumPropertyDescriptor;
use ObjectModel::DetailrefPropertyDescriptor;
use WineTestBot::Tasks;
-use WineTestBot::WineTestBotObjects;
-
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreateSteps);
sub CreateItem($)
diff --git a/testbot/lib/WineTestBot/StepsTasks.pm b/testbot/lib/WineTestBot/StepsTasks.pm
index 3610492ba..9dec8060a 100644
--- a/testbot/lib/WineTestBot/StepsTasks.pm
+++ b/testbot/lib/WineTestBot/StepsTasks.pm
@@ -26,13 +26,11 @@ WineTestBot::StepTask - Merged Step + Task object
=cut
-use WineTestBot::Config;
use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotItem);
-use vars qw(@ISA @EXPORT);
+use WineTestBot::Config;
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
sub GetStepDir($)
{
@@ -82,6 +80,7 @@ sub GetTitle($)
return $Title;
}
+
package WineTestBot::StepsTasks;
=head1 NAME
@@ -97,18 +96,16 @@ a specific database table.
=cut
+use Exporter 'import';
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreateStepsTasks);
+
use ObjectModel::BasicPropertyDescriptor;
use ObjectModel::ItemrefPropertyDescriptor;
use WineTestBot::Steps;
use WineTestBot::Tasks;
use WineTestBot::VMs;
-use WineTestBot::WineTestBotObjects;
-
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreateStepsTasks);
sub _initialize($$)
{
diff --git a/testbot/lib/WineTestBot/Tasks.pm b/testbot/lib/WineTestBot/Tasks.pm
index f16dfe201..4473df217 100644
--- a/testbot/lib/WineTestBot/Tasks.pm
+++ b/testbot/lib/WineTestBot/Tasks.pm
@@ -33,18 +33,15 @@ virtual machine that the test must be performed in.
=cut
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotItem);
+
use POSIX qw(:errno_h);
use File::Path;
use ObjectModel::BackEnd;
use WineTestBot::Config;
use WineTestBot::Jobs;
use WineTestBot::Steps;
-use WineTestBot::WineTestBotObjects;
-
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
sub InitializeNew($$)
{
@@ -203,17 +200,15 @@ WineTestBot::Tasks - A collection of WineTestBot::Task objects
=cut
+use Exporter 'import';
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreateTasks);
+
use ObjectModel::BasicPropertyDescriptor;
use ObjectModel::EnumPropertyDescriptor;
use ObjectModel::ItemrefPropertyDescriptor;
use WineTestBot::VMs;
-use WineTestBot::WineTestBotObjects;
-
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreateTasks);
sub CreateItem($)
diff --git a/testbot/lib/WineTestBot/TestAgent.pm b/testbot/lib/WineTestBot/TestAgent.pm
index 2f7ec4def..8957b9f82 100644
--- a/testbot/lib/WineTestBot/TestAgent.pm
+++ b/testbot/lib/WineTestBot/TestAgent.pm
@@ -22,11 +22,8 @@
package TestAgent;
use strict;
-use vars qw (@ISA @EXPORT_OK $SENDFILE_EXE $RUN_DNT $RUN_DNTRUNC_OUT $RUN_DNTRUNC_ERR $RUN_DNTRUNC);
-
-require Exporter;
-(a)ISA = qw(Exporter);
-(a)EXPORT_OK = qw(new);
+use Exporter 'import';
+our @EXPORT_OK = qw(new);
my $BLOCK_SIZE = 65536;
@@ -1097,7 +1094,7 @@ sub GetVersion($)
return $self->{agentversion};
}
-$SENDFILE_EXE = 1;
+our $SENDFILE_EXE = 1;
sub _SendStringOrFile($$$$$$)
{
@@ -1173,10 +1170,10 @@ sub GetFileToString($$)
return $self->_GetStringOrFile($ServerPathName, undef, undef);
}
-$RUN_DNT = 1;
-$RUN_DNTRUNC_OUT = 2;
-$RUN_DNTRUNC_ERR = 4;
-$RUN_DNTRUNC = $RUN_DNTRUNC_OUT | $RUN_DNTRUNC_ERR;
+our $RUN_DNT = 1;
+our $RUN_DNTRUNC_OUT = 2;
+our $RUN_DNTRUNC_ERR = 4;
+our $RUN_DNTRUNC = $RUN_DNTRUNC_OUT | $RUN_DNTRUNC_ERR;
sub Run($$$;$$$)
{
diff --git a/testbot/lib/WineTestBot/UserRoles.pm b/testbot/lib/WineTestBot/UserRoles.pm
index 972bdc0e9..585537ae8 100644
--- a/testbot/lib/WineTestBot/UserRoles.pm
+++ b/testbot/lib/WineTestBot/UserRoles.pm
@@ -26,11 +26,8 @@ WineTestBot::UserRole - A UserRole item
=cut
use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotItem);
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
package WineTestBot::UserRoles;
@@ -40,16 +37,14 @@ WineTestBot::UserRoles - A collection of WineTestBot::UserRole objects
=cut
+use Exporter 'import';
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreateUserRoles);
+
use ObjectModel::BasicPropertyDescriptor;
use ObjectModel::ItemrefPropertyDescriptor;
use WineTestBot::Roles;
-use WineTestBot::WineTestBotObjects;
-
-use vars qw(@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreateUserRoles);
sub CreateItem($)
diff --git a/testbot/lib/WineTestBot/Users.pm b/testbot/lib/WineTestBot/Users.pm
index 178b377b9..4752006ab 100644
--- a/testbot/lib/WineTestBot/Users.pm
+++ b/testbot/lib/WineTestBot/Users.pm
@@ -26,18 +26,16 @@ WineTestBot::User - A User
=cut
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotItem);
+
use Digest::SHA qw(sha1_hex);
use URI::Escape;
use WineTestBot::Config;
use WineTestBot::Roles;
use WineTestBot::UserRoles;
use WineTestBot::Utils;
-use WineTestBot::WineTestBotObjects;
-use vars qw (@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
sub InitializeNew($$)
{
@@ -287,6 +285,7 @@ sub HasRole($$)
return defined($self->Roles->GetItem($RoleName));
}
+
package WineTestBot::Users;
=head1 NAME
@@ -295,19 +294,17 @@ WineTestBot::Users - A collection of WineTestBot::User objects
=cut
+use Exporter 'import';
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreateUsers GetBatchUser Authenticate);
+
use Net::LDAP;
use ObjectModel::BasicPropertyDescriptor;
use ObjectModel::EnumPropertyDescriptor;
use ObjectModel::DetailrefPropertyDescriptor;
use WineTestBot::Config;
use WineTestBot::UserRoles;
-use WineTestBot::WineTestBotObjects;
-
-use vars qw (@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreateUsers &GetBatchUser &Authenticate);
sub CreateItem($)
diff --git a/testbot/lib/WineTestBot/Utils.pm b/testbot/lib/WineTestBot/Utils.pm
index 63b906242..81a2eda39 100644
--- a/testbot/lib/WineTestBot/Utils.pm
+++ b/testbot/lib/WineTestBot/Utils.pm
@@ -25,17 +25,15 @@ WineTestBot::Utils - Utility functions
=cut
+use Exporter 'import';
+our @EXPORT = qw(MakeSecureURL SecureConnection GenerateRandomString
+ OpenNewFile CreateNewFile CreateNewLink CreateNewDir
+ DurationToString BuildEMailRecipient);
+
use Fcntl;
use WineTestBot::Config;
-use vars qw (@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(Exporter);
-(a)EXPORT = qw(&MakeSecureURL &SecureConnection &GenerateRandomString
- &OpenNewFile &CreateNewFile &CreateNewLink &CreateNewDir
- &DurationToString &BuildEMailRecipient);
sub MakeSecureURL($)
{
diff --git a/testbot/lib/WineTestBot/VMs.pm b/testbot/lib/WineTestBot/VMs.pm
index e74640bf2..b6305e83e 100644
--- a/testbot/lib/WineTestBot/VMs.pm
+++ b/testbot/lib/WineTestBot/VMs.pm
@@ -142,6 +142,9 @@ are undergoing maintenance.
=cut
+use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotItem);
+
use File::Basename;
use ObjectModel::BackEnd;
@@ -150,12 +153,7 @@ use WineTestBot::Engine::Notify;
use WineTestBot::LibvirtDomain;
use WineTestBot::RecordGroups;
use WineTestBot::TestAgent;
-use WineTestBot::WineTestBotObjects;
-use vars qw (@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotItem Exporter);
sub _initialize($$)
{
@@ -637,15 +635,13 @@ role or status.
=cut
-use ObjectModel::BasicPropertyDescriptor;
-use ObjectModel::EnumPropertyDescriptor;
+use Exporter 'import';
use WineTestBot::WineTestBotObjects;
+our @ISA = qw(WineTestBot::WineTestBotCollection);
+our @EXPORT = qw(CreateVMs);
-use vars qw (@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(WineTestBot::WineTestBotCollection Exporter);
-(a)EXPORT = qw(&CreateVMs);
+use ObjectModel::BasicPropertyDescriptor;
+use ObjectModel::EnumPropertyDescriptor;
sub CreateItem($)
diff --git a/testbot/lib/WineTestBot/WineTestBotObjects.pm b/testbot/lib/WineTestBot/WineTestBotObjects.pm
index 20ff6b1e3..bc34b74c8 100644
--- a/testbot/lib/WineTestBot/WineTestBotObjects.pm
+++ b/testbot/lib/WineTestBot/WineTestBotObjects.pm
@@ -25,14 +25,12 @@ WineTestBot::WineTestBotItem - Base item class for WineTestBot
=cut
-use ObjectModel::BackEnd;
use ObjectModel::Item;
-use WineTestBot::Config;
+our @ISA = qw(ObjectModel::Item);
-use vars qw (@ISA @EXPORT);
+use ObjectModel::BackEnd;
+use WineTestBot::Config;
-require Exporter;
-(a)ISA = qw(ObjectModel::Item Exporter);
sub GetBackEnd($)
{
@@ -49,15 +47,13 @@ WineTestBot::WineTestBotCollection - Base collection class for WineTestBot
=cut
+use ObjectModel::Collection;
+our @ISA = qw(ObjectModel::Collection);
+
use ObjectModel::BackEnd;
-use ObjectModel::Item;
+use WineTestBot::Item;
use WineTestBot::Config;
-use vars qw (@ISA @EXPORT);
-
-require Exporter;
-(a)ISA = qw(ObjectModel::Collection Exporter);
-
sub GetBackEnd($)
{
#my ($self) = @_;
diff --git a/testbot/web/index.pl b/testbot/web/index.pl
index 427d7f6b9..72bd307d5 100644
--- a/testbot/web/index.pl
+++ b/testbot/web/index.pl
@@ -21,13 +21,12 @@ use strict;
package JobStatusBlock;
-use URI::Escape;
use ObjectModel::CGI::CollectionBlock;
-use WineTestBot::Branches;
+our @ISA = qw(ObjectModel::CGI::CollectionBlock);
-use vars qw(@ISA);
+use URI::Escape;
+use WineTestBot::Branches;
-(a)ISA = qw(ObjectModel::CGI::CollectionBlock);
sub SortKeys($$)
{
@@ -140,13 +139,12 @@ sub GenerateDataCell($$$$)
}
}
+
package VMStatusBlock;
use ObjectModel::CGI::CollectionBlock;
+our @ISA = qw(ObjectModel::CGI::CollectionBlock);
-use vars qw(@ISA);
-
-(a)ISA = qw(ObjectModel::CGI::CollectionBlock);
sub SortKeys($$)
{
@@ -183,16 +181,18 @@ sub GetDetailsPage($)
return undef;
}
+
package StatusPage;
use ObjectModel::CGI::Page;
+our @ISA = qw(ObjectModel::CGI::Page);
+
use WineTestBot::Config;
use WineTestBot::Engine::Notify;
use WineTestBot::Jobs;
use WineTestBot::Log;
use WineTestBot::VMs;
-(a)StatusPage::ISA = qw(ObjectModel::CGI::Page);
sub _initialize($$$)
{
@@ -303,6 +303,7 @@ EOF
print "<p class='GeneralFooterText'>Generated in ", Elapsed($self->{start}), " s</p>\n";
}
+
package main;
my $Request = shift;
--
2.16.2
March 31, 2018
Re: [PATCH 4/4] devenum: Register VFW codecs as codec devices.
by Marvin
Hi,
While running your changed tests on Windows, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at
https://testbot.winehq.org/JobDetails.pl?Key=37349
Your paranoid android.
=== wvistau64 (64 bit devenum) ===
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft RLE", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"mrle", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft Video 1", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"msvc", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"uyvy", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yuy2", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yvyu", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Intel IYUV codec", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"iyuv", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Intel IYUV codec", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"i420", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Toshiba YUV Codec", got L"11"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"11"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yvu9", got L"11"
=== w2008s64 (64 bit devenum) ===
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft RLE", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"mrle", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft Video 1", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"msvc", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"uyvy", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yuy2", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yvyu", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Intel IYUV codec", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"iyuv", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Intel IYUV codec", got L"\0003"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"\0003"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"i420", got L"\0003"
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Toshiba YUV Codec", got L"11"
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got L"11"
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yvu9", got L"11"
=== w7pro64 (64 bit devenum) ===
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft RLE", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"mrle", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft Video 1", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"msvc", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"uyvy", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yuy2", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yvyu", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Intel IYUV codec", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"iyuv", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Intel IYUV codec", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"i420", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Toshiba YUV Codec", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yvu9", got (null)
The previous 48 run(s) terminated abnormally
=== w864 (64 bit devenum) ===
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yuy2", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Intel IYUV codec", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"i420", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yvyu", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Toshiba YUV Codec", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yvu9", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"uyvy", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Intel IYUV codec", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"iyuv", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft RLE", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"mrle", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft Video 1", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"msvc", got (null)
=== w1064 (64 bit devenum) ===
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Intel IYUV codec", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"i420", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Intel IYUV codec", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"iyuv", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft RLE", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"mrle", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft Video 1", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"msvc", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"uyvy", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yuy2", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Toshiba YUV Codec", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yvu9", got (null)
devenum.c:921: Test failed: Read failed: 0x80070002
devenum.c:923: Test failed: expected L"Microsoft YUV", got (null)
devenum.c:928: Test failed: Read failed: 0x80070002
devenum.c:931: Test failed: expected L"{D76E2820-1563-11CF-AC98-00AA004C0FA9}", got (null)
devenum.c:936: Test failed: Read failed: 0x80070002
devenum.c:937: Test failed: expected L"yvyu", got (null)
March 31, 2018
Re: [PATCH] oleaut32/typelib.c: fix cursor2 having the wrong type
by Nikolay Sivov
On 3/31/2018 7:02 PM, André Hentschel wrote:
> Am 14.03.2018 um 07:00 schrieb Adeniyi Mayokun:
>> From 275d93c9ab0f533fa70d698726afc8adaaefb664 Mon Sep 17 00:00:00 2001
>> From: Adeniyi Mayokun <adeniyimayokun17(a)gmail.com <mailto:adeniyimayokun17(a)gmail.com>>
>> Date: Wed, 14 Mar 2018 06:55:15 +0100
>> Subject: [PATCH] oleaut32/typelib.c: fix cursor2 having the wrong type
>>
>> Signed-off-by: Adeniyi Mayokun <adeniyimayokun17(a)gmail>
>> ---
>> dlls/oleaut32/typelib.c | 5 ++---
>> 1 file changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
>> index 1c00d715f4..247d383ff7 100644
>> --- a/dlls/oleaut32/typelib.c
>> +++ b/dlls/oleaut32/typelib.c
>> @@ -4725,10 +4725,9 @@ static ULONG WINAPI ITypeLib2_fnRelease( ITypeLib2 *iface)
>> if (!ref)
>> {
>> TLBImpLib *pImpLib, *pImpLibNext;
>> - TLBRefType *ref_type;
>> + TLBRefType *ref_type, *ref_type_next;
>> TLBString *tlbstr, *tlbstr_next;
>> TLBGuid *tlbguid, *tlbguid_next;
>> - void *cursor2;
>> int i;
>>
>> /* remove cache entry */
>> @@ -4778,7 +4777,7 @@ static ULONG WINAPI ITypeLib2_fnRelease( ITypeLib2 *iface)
>> heap_free(pImpLib);
>> }
>>
>> - LIST_FOR_EACH_ENTRY_SAFE(ref_type, cursor2, &This->ref_list, TLBRefType, entry)
>> + LIST_FOR_EACH_ENTRY_SAFE(ref_type, ref_type_next, &This->ref_list, TLBRefType, entry)
>> {
>> list_remove(&ref_type->entry);
>> heap_free(ref_type);
>> --
>> 2.14.1
>>
>
> This is an existing patch, if you picked it from wine-staging or somewhere you should have mentioned the original author...
>
> commit 0dde88202a97578ffd346ae24d904a4f89cfb9b9
> Author: Nils Kuhnhenn <kuhnhenn.nils(a)gmail.com>
> Date: Fri Jun 16 16:05:07 2017 +0200
>
> oleaut32: Use variable with the correct type in LIST_FOR_EACH_ENTRY_SAFE macro.
>
>
To clarify, it was committed last summer, so obviously it does not apply
any more.
March 31, 2018