winmm: MCI open always creates an alias for subsequent commands.

This commit is contained in:
Jörg Höhle 2010-09-01 17:50:43 +02:00 committed by Alexandre Julliard
parent dd1a47093e
commit ef372e259a
3 changed files with 18 additions and 16 deletions

View File

@ -123,7 +123,7 @@ static UINT MCI_GetDriverFromString(LPCWSTR lpstrName)
EnterCriticalSection(&WINMM_cs);
for (wmd = MciDrivers; wmd; wmd = wmd->lpNext) {
if (wmd->lpstrElementName && strcmpW(wmd->lpstrElementName, lpstrName) == 0) {
if (wmd->lpstrAlias && strcmpiW(wmd->lpstrAlias, lpstrName) == 0) {
ret = wmd->wDeviceID;
break;
}
@ -131,10 +131,6 @@ static UINT MCI_GetDriverFromString(LPCWSTR lpstrName)
ret = wmd->wDeviceID;
break;
}
if (wmd->lpstrAlias && strcmpiW(wmd->lpstrAlias, lpstrName) == 0) {
ret = wmd->wDeviceID;
break;
}
}
LeaveCriticalSection(&WINMM_cs);
@ -770,7 +766,6 @@ static BOOL MCI_UnLoadMciDriver(LPWINE_MCIDRIVER wmd)
HeapFree(GetProcessHeap(), 0, wmd->lpstrDeviceType);
HeapFree(GetProcessHeap(), 0, wmd->lpstrAlias);
HeapFree(GetProcessHeap(), 0, wmd->lpstrElementName);
HeapFree(GetProcessHeap(), 0, wmd);
return TRUE;
@ -888,15 +883,23 @@ static DWORD MCI_SendCommandFrom32(MCIDEVICEID wDevID, UINT16 wMsg, DWORD_PTR dw
static DWORD MCI_FinishOpen(LPWINE_MCIDRIVER wmd, LPMCI_OPEN_PARMSW lpParms,
DWORD dwParam)
{
if (dwParam & MCI_OPEN_ELEMENT)
{
wmd->lpstrElementName = HeapAlloc(GetProcessHeap(),0,(strlenW(lpParms->lpstrElementName)+1) * sizeof(WCHAR));
strcpyW( wmd->lpstrElementName, lpParms->lpstrElementName );
LPCWSTR alias = NULL;
/* Open always defines an alias for further reference */
if (dwParam & MCI_OPEN_ALIAS) /* open ... alias */
alias = lpParms->lpstrAlias;
else {
if ((dwParam & MCI_OPEN_ELEMENT) /* open file.wav */
&& !(dwParam & MCI_OPEN_ELEMENT_ID))
alias = lpParms->lpstrElementName;
else if (dwParam & MCI_OPEN_TYPE ) /* open cdaudio */
alias = wmd->lpstrDeviceType;
}
if (dwParam & MCI_OPEN_ALIAS)
{
wmd->lpstrAlias = HeapAlloc(GetProcessHeap(), 0, (strlenW(lpParms->lpstrAlias)+1) * sizeof(WCHAR));
strcpyW( wmd->lpstrAlias, lpParms->lpstrAlias);
if (alias) {
wmd->lpstrAlias = HeapAlloc(GetProcessHeap(), 0, (strlenW(alias)+1) * sizeof(WCHAR));
if (!wmd->lpstrAlias) return MCIERR_OUT_OF_MEMORY;
strcpyW( wmd->lpstrAlias, alias);
/* In most cases, natives adds MCI_OPEN_ALIAS to the flags passed to the driver.
* Don't. The drivers don't care about the winmm alias. */
}
lpParms->wDeviceID = wmd->wDeviceID;

View File

@ -644,7 +644,7 @@ static void test_asyncWAVE(HWND hwnd)
/* Only the alias is looked up. */
err = mciGetDeviceID("tempfile.wav");
todo_wine ok(err==0,"mciGetDeviceID element returned %u, expected 0\n", err);
ok(err==0,"mciGetDeviceID element returned %u, expected 0\n", err);
err = mciGetDeviceID("waveaudio");
todo_wine ok(err==0,"mciGetDeviceID waveaudio returned %u, expected 0\n", err);

View File

@ -95,7 +95,6 @@ typedef struct {
typedef struct tagWINE_MCIDRIVER {
UINT wDeviceID;
UINT wType;
LPWSTR lpstrElementName;
LPWSTR lpstrDeviceType;
LPWSTR lpstrAlias;
HDRVR hDriver;