PATCH: WINMM mixerGetControlDetailsW bugfix (Odin)
Sander van Leeuwen
sandervl at xs4all.nl
Mon May 27 10:45:55 CDT 2002
Changelog:
- mixerGetControlDetailsW: translate strings for MIXER_GETCONTROLDETAILSF_LISTTEXT option
Author: Sander van Leeuwen/Odin (sandervl at xs4all.nl)
--- mmsystem.co Mon May 27 12:14:18 2002
+++ mmsystem.c Mon May 27 17:39:44 2002
@@ -1050,18 +1050,36 @@
break;
case MIXER_GETCONTROLDETAILSF_LISTTEXT:
{
- LPVOID paDetailsW = lpmcd->paDetails;
- int size = max(1, lpmcd->cChannels) * sizeof(MIXERCONTROLDETAILS_LISTTEXTA);
+ MIXERCONTROLDETAILS_LISTTEXTW *pDetailsW = (MIXERCONTROLDETAILS_LISTTEXTW *)lpmcd->paDetails;
+ MIXERCONTROLDETAILS_LISTTEXTA *pDetailsA;
+ int size = max(1, lpmcd->cChannels) * sizeof(MIXERCONTROLDETAILS_LISTTEXTA);
+ int i;
- if (lpmcd->u.cMultipleItems != 0 && lpmcd->u.cMultipleItems != lpmcd->u.hwndOwner) {
+ if (lpmcd->u.cMultipleItems != 0) {
size *= lpmcd->u.cMultipleItems;
}
- lpmcd->paDetails = HeapAlloc(GetProcessHeap(), 0, size);
+ pDetailsA = (MIXERCONTROLDETAILS_LISTTEXTA *)HeapAlloc(GetProcessHeap(), 0, size);
+ lpmcd->paDetails = pDetailsA;
+ lpmcd->cbDetails = sizeof(MIXERCONTROLDETAILS_LISTTEXTA);
/* set up lpmcd->paDetails */
ret = mixerGetControlDetailsA(hmix, lpmcd, fdwDetails);
/* copy from lpmcd->paDetails back to paDetailsW; */
- HeapFree(GetProcessHeap(), 0, lpmcd->paDetails);
- lpmcd->paDetails = paDetailsW;
+ if(ret == MMSYSERR_NOERROR) {
+ for(i=0;i<lpmcd->u.cMultipleItems*lpmcd->cChannels;i++) {
+ pDetailsW->dwParam1 = pDetailsA->dwParam1;
+ pDetailsW->dwParam2 = pDetailsA->dwParam2;
+ MultiByteToWideChar( CP_ACP, 0, pDetailsA->szName, -1,
+ pDetailsW->szName,
+ sizeof(pDetailsW->szName)/sizeof(WCHAR) );
+ pDetailsA++;
+ pDetailsW++;
+ }
+ pDetailsA -= lpmcd->u.cMultipleItems*lpmcd->cChannels;
+ pDetailsW -= lpmcd->u.cMultipleItems*lpmcd->cChannels;
+ }
+ HeapFree(GetProcessHeap(), 0, pDetailsA);
+ lpmcd->paDetails = pDetailsW;
+ lpmcd->cbDetails = sizeof(MIXERCONTROLDETAILS_LISTTEXTW);
}
break;
default:
More information about the wine-patches
mailing list