Maarten Lankhorst : dsound: Implement DirectSoundEnumerateA on top of DirectSoundEnumerateW.
Alexandre Julliard
julliard at winehq.org
Mon Nov 16 11:43:59 CST 2009
Module: wine
Branch: master
Commit: 9ec5f957cc696ff1dcbc9af10ae757e55b79fb66
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9ec5f957cc696ff1dcbc9af10ae757e55b79fb66
Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Sat Nov 14 14:27:13 2009 +0100
dsound: Implement DirectSoundEnumerateA on top of DirectSoundEnumerateW.
---
dlls/dsound/dsound_main.c | 57 +++++++++++++++++---------------------------
1 files changed, 22 insertions(+), 35 deletions(-)
diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c
index 44897bc..5b0770a 100644
--- a/dlls/dsound/dsound_main.c
+++ b/dlls/dsound/dsound_main.c
@@ -272,6 +272,22 @@ HRESULT WINAPI GetDeviceID(LPCGUID pGuidSrc, LPGUID pGuidDest)
return DS_OK;
}
+struct morecontext
+{
+ LPDSENUMCALLBACKA callA;
+ LPVOID data;
+};
+
+static BOOL CALLBACK a_to_w_callback(LPGUID guid, LPCWSTR descW, LPCWSTR modW, LPVOID data)
+{
+ struct morecontext *context = data;
+ char descA[MAXPNAMELEN], modA[MAXPNAMELEN];
+
+ WideCharToMultiByte(CP_ACP, 0, descW, -1, descA, sizeof(descA), NULL, NULL);
+ WideCharToMultiByte(CP_ACP, 0, modW, -1, modA, sizeof(modA), NULL, NULL);
+
+ return context->callA(guid, descA, modA, context->data);
+}
/***************************************************************************
* DirectSoundEnumerateA [DSOUND.2]
@@ -290,46 +306,17 @@ HRESULT WINAPI DirectSoundEnumerateA(
LPDSENUMCALLBACKA lpDSEnumCallback,
LPVOID lpContext)
{
- unsigned devs, wod;
- DSDRIVERDESC desc;
- GUID guid;
- int err;
-
- TRACE("lpDSEnumCallback = %p, lpContext = %p\n",
- lpDSEnumCallback, lpContext);
+ struct morecontext context;
if (lpDSEnumCallback == NULL) {
- WARN("invalid parameter: lpDSEnumCallback == NULL\n");
- return DSERR_INVALIDPARAM;
+ WARN("invalid parameter: lpDSEnumCallback == NULL\n");
+ return DSERR_INVALIDPARAM;
}
- devs = waveOutGetNumDevs();
- if (devs > 0) {
- if (GetDeviceID(&DSDEVID_DefaultPlayback, &guid) == DS_OK) {
- for (wod = 0; wod < devs; ++wod) {
- if (IsEqualGUID( &guid, &DSOUND_renderer_guids[wod]) ) {
- err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
- if (err == DS_OK) {
- TRACE("calling lpDSEnumCallback(NULL,\"%s\",\"%s\",%p)\n",
- "Primary Sound Driver","",lpContext);
- if (lpDSEnumCallback(NULL, "Primary Sound Driver", "", lpContext) == FALSE)
- return DS_OK;
- }
- }
- }
- }
- }
+ context.callA = lpDSEnumCallback;
+ context.data = lpContext;
- for (wod = 0; wod < devs; ++wod) {
- err = mmErr(waveOutMessage(UlongToHandle(wod),DRV_QUERYDSOUNDDESC,(DWORD_PTR)&desc,0));
- if (err == DS_OK) {
- TRACE("calling lpDSEnumCallback(%s,\"%s\",\"%s\",%p)\n",
- debugstr_guid(&DSOUND_renderer_guids[wod]),desc.szDesc,desc.szDrvname,lpContext);
- if (lpDSEnumCallback(&DSOUND_renderer_guids[wod], desc.szDesc, desc.szDrvname, lpContext) == FALSE)
- return DS_OK;
- }
- }
- return DS_OK;
+ return DirectSoundEnumerateW(a_to_w_callback, &context);
}
/***************************************************************************
More information about the wine-cvs
mailing list