winmm MIXER_GetDev failure patch
Robert Reif
reif at earthlink.net
Fri Aug 6 20:03:27 CDT 2004
MIXER_GetDev currently takes two parameters and an invalid
value in each one produces a different error.
Change MIXER_GetDev to take pointer to returned address pointer
and return one of 3 possible return values rather than an address or
NULL.
-------------- next part --------------
Index: dlls/winmm/winmm.c
===================================================================
RCS file: /home/wine/wine/dlls/winmm/winmm.c,v
retrieving revision 1.40
diff -u -r1.40 winmm.c
--- dlls/winmm/winmm.c 21 Jul 2004 03:10:24 -0000 1.40
+++ dlls/winmm/winmm.c 7 Aug 2004 00:52:19 -0000
@@ -207,9 +207,10 @@
/**************************************************************************
* find out the real mixer ID depending on hmix (depends on dwFlags)
*/
-static LPWINE_MIXER MIXER_GetDev(HMIXEROBJ hmix, DWORD dwFlags)
+static UINT MIXER_GetDev(HMIXEROBJ hmix, DWORD dwFlags, LPWINE_MIXER * lplpwm)
{
LPWINE_MIXER lpwm = NULL;
+ UINT uRet = MMSYSERR_NOERROR;
switch (dwFlags & 0xF0000000ul) {
case MIXER_OBJECTF_MIXER:
@@ -246,10 +247,15 @@
lpwm = (LPWINE_MIXER)MMDRV_GetRelated(hmix, MMDRV_AUX, TRUE, MMDRV_MIXER);
break;
default:
- FIXME("Unsupported flag (%08lx)\n", dwFlags & 0xF0000000ul);
+ WARN("Unsupported flag (%08lx)\n", dwFlags & 0xF0000000ul);
+ lpwm = 0;
+ uRet = MMSYSERR_INVALFLAG;
break;
}
- return lpwm;
+ *lplpwm = lpwm;
+ if (lpwm == 0 && uRet == MMSYSERR_NOERROR)
+ uRet = MMSYSERR_INVALPARAM;
+ return uRet;
}
/**************************************************************************
@@ -364,17 +370,17 @@
UINT WINAPI mixerGetID(HMIXEROBJ hmix, LPUINT lpid, DWORD fdwID)
{
LPWINE_MIXER lpwm;
+ UINT uRet = MMSYSERR_NOERROR;
TRACE("(%p %p %08lx)\n", hmix, lpid, fdwID);
- if ((lpwm = MIXER_GetDev(hmix, fdwID)) == NULL) {
- return MMSYSERR_INVALHANDLE;
- }
+ if ((uRet = MIXER_GetDev(hmix, fdwID, &lpwm)) != MMSYSERR_NOERROR)
+ return uRet;
if (lpid)
*lpid = lpwm->mld.uDeviceID;
- return MMSYSERR_NOERROR;
+ return uRet;
}
/**************************************************************************
@@ -384,11 +390,12 @@
DWORD fdwDetails)
{
LPWINE_MIXER lpwm;
+ UINT uRet = MMSYSERR_NOERROR;
TRACE("(%p, %p, %08lx)\n", hmix, lpmcdA, fdwDetails);
- if ((lpwm = MIXER_GetDev(hmix, fdwDetails)) == NULL)
- return MMSYSERR_INVALHANDLE;
+ if ((uRet = MIXER_GetDev(hmix, fdwDetails, &lpwm)) != MMSYSERR_NOERROR)
+ return uRet;
if (lpmcdA == NULL || lpmcdA->cbStruct != sizeof(*lpmcdA))
return MMSYSERR_INVALPARAM;
@@ -462,11 +469,12 @@
DWORD fdwControls)
{
LPWINE_MIXER lpwm;
+ UINT uRet = MMSYSERR_NOERROR;
TRACE("(%p, %p, %08lx)\n", hmix, lpmlcA, fdwControls);
- if ((lpwm = MIXER_GetDev(hmix, fdwControls)) == NULL)
- return MMSYSERR_INVALHANDLE;
+ if ((uRet = MIXER_GetDev(hmix, fdwControls, &lpwm)) != MMSYSERR_NOERROR)
+ return uRet;
if (lpmlcA == NULL || lpmlcA->cbStruct != sizeof(*lpmlcA))
return MMSYSERR_INVALPARAM;
@@ -542,11 +550,12 @@
UINT WINAPI mixerGetLineInfoA(HMIXEROBJ hmix, LPMIXERLINEA lpmliW, DWORD fdwInfo)
{
LPWINE_MIXER lpwm;
+ UINT uRet = MMSYSERR_NOERROR;
TRACE("(%p, %p, %08lx)\n", hmix, lpmliW, fdwInfo);
- if ((lpwm = MIXER_GetDev(hmix, fdwInfo)) == NULL)
- return MMSYSERR_INVALHANDLE;
+ if ((uRet = MIXER_GetDev(hmix, fdwInfo, &lpwm)) != MMSYSERR_NOERROR)
+ return uRet;
return MMDRV_Message(&lpwm->mld, MXDM_GETLINEINFO, (DWORD_PTR)lpmliW,
fdwInfo, TRUE);
@@ -589,7 +598,8 @@
WideCharToMultiByte( CP_ACP, 0, lpmliW->Target.szPname, -1, mliA.Target.szPname, sizeof(mliA.Target.szPname), NULL, NULL);
break;
default:
- FIXME("Unsupported fdwControls=0x%08lx\n", fdwInfo);
+ WARN("Unsupported fdwControls=0x%08lx\n", fdwInfo);
+ return MMSYSERR_INVALFLAG;
}
ret = mixerGetLineInfoA(hmix, &mliA, fdwInfo);
@@ -625,11 +635,12 @@
DWORD fdwDetails)
{
LPWINE_MIXER lpwm;
+ UINT uRet = MMSYSERR_NOERROR;
TRACE("(%p, %p, %08lx)\n", hmix, lpmcdA, fdwDetails);
- if ((lpwm = MIXER_GetDev(hmix, fdwDetails)) == NULL)
- return MMSYSERR_INVALHANDLE;
+ if ((uRet = MIXER_GetDev(hmix, fdwDetails, &lpwm)) != MMSYSERR_NOERROR)
+ return uRet;
return MMDRV_Message(&lpwm->mld, MXDM_SETCONTROLDETAILS, (DWORD_PTR)lpmcdA,
fdwDetails, TRUE);
More information about the wine-patches
mailing list