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