Jörg Höhle : winmm: Don't stop parsing after MCI' s alias keyword.

Alexandre Julliard julliard at winehq.org
Mon Nov 23 08:49:55 CST 2009


Module: wine
Branch: master
Commit: e36db94c7cf8b8d56adda70ef1c753c5231e7974
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e36db94c7cf8b8d56adda70ef1c753c5231e7974

Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date:   Sun Oct 25 20:18:41 2009 +0100

winmm: Don't stop parsing after MCI's alias keyword.

---

 dlls/winmm/mci.c       |   15 +--------------
 dlls/winmm/tests/mci.c |   16 +++++++++++++---
 2 files changed, 14 insertions(+), 17 deletions(-)

diff --git a/dlls/winmm/mci.c b/dlls/winmm/mci.c
index c46c4c5..49e8598 100644
--- a/dlls/winmm/mci.c
+++ b/dlls/winmm/mci.c
@@ -1232,7 +1232,6 @@ DWORD WINAPI mciSendStringW(LPCWSTR lpstrCommand, LPWSTR lpstrRet,
     DWORD		data[MCI_DATA_SIZE];
     DWORD		retType;
     LPCWSTR		lpCmd = 0;
-    LPWSTR		devAlias = NULL;
     static const WCHAR  wszNew[] = {'n','e','w',0};
     static const WCHAR  wszSAliasS[] = {' ','a','l','i','a','s',' ',0};
     static const WCHAR wszTypeS[] = {'t','y','p','e',' ',0};
@@ -1311,19 +1310,7 @@ DWORD WINAPI mciSendStringW(LPCWSTR lpstrCommand, LPWSTR lpstrRet,
 	    dwFlags |= MCI_OPEN_ELEMENT;
 	    data[3] = (DWORD)dev;
 	}
-	if ((devAlias = strstrW(args, wszSAliasS))) {
-            WCHAR*      tmp2;
-	    devAlias += 7;
-	    if (!(tmp = strchrW(devAlias,' '))) tmp = devAlias + strlenW(devAlias);
-	    if (tmp) *tmp = '\0';
-            tmp2 = HeapAlloc(GetProcessHeap(), 0, (tmp - devAlias + 1) * sizeof(WCHAR) );
-            memcpy( tmp2, devAlias, (tmp - devAlias) * sizeof(WCHAR) );
-            tmp2[tmp - devAlias] = 0;
-            data[4] = (DWORD)tmp2;
-	    /* should be done in regular options parsing */
-	    /* dwFlags |= MCI_OPEN_ALIAS; */
-	} else if (dev == 0) {
-	    /* "open new" requires alias */
+	if (!strstrW(args, wszSAliasS) && !dev) {
 	    dwRet = MCIERR_NEW_REQUIRES_ALIAS;
 	    goto errCleanUp;
 	}
diff --git a/dlls/winmm/tests/mci.c b/dlls/winmm/tests/mci.c
index c72c81d..6607e17 100644
--- a/dlls/winmm/tests/mci.c
+++ b/dlls/winmm/tests/mci.c
@@ -168,7 +168,7 @@ static void test_openCloseWAVE(HWND hwnd)
 {
     MCIERROR err;
     MCI_GENERIC_PARMS parm;
-    const char command_open[] = "open new type waveaudio alias mysound";
+    const char command_open[] = "open new type waveaudio alias mysound notify";
     const char command_close_my[] = "close mysound notify";
     const char command_close_all[] = "close all notify";
     const char command_sysinfo[] = "sysinfo waveaudio quantity open";
@@ -180,9 +180,18 @@ static void test_openCloseWAVE(HWND hwnd)
     todo_wine ok(!err,"mci %s returned %s\n", command_open, dbg_mcierr(err));
     if(!err) trace("[MCI] with %s drivers\n", buf);
 
-    err = mciSendString(command_open, buf, sizeof(buf), NULL);
+    err = mciSendString("open new type waveaudio alias r shareable", buf, sizeof(buf), NULL);
+    ok(err==MCIERR_UNSUPPORTED_FUNCTION,"mci open new shareable returned %s\n", dbg_mcierr(err));
+    if(!err) {
+        err = mciSendString("close r", NULL, 0, NULL);
+        ok(!err,"mci close shareable returned %s\n", dbg_mcierr(err));
+    }
+
+    err = mciSendString(command_open, buf, sizeof(buf), hwnd);
     ok(!err,"mci %s returned %s\n", command_open, dbg_mcierr(err));
     ok(!strcmp(buf,"1"), "mci open deviceId: %s, expected 1\n", buf);
+    /* Wine<=1.1.33 used to ignore anything past alias XY */
+    test_notification(hwnd,"open new alias notify",MCI_NOTIFY_SUCCESSFUL);
 
     err = mciSendString("status mysound time format", buf, sizeof(buf), hwnd);
     ok(!err,"mci status time format returned %s\n", dbg_mcierr(err));
@@ -514,7 +523,7 @@ static void test_asyncWAVE(HWND hwnd)
     char buf[1024];
     memset(buf, 0, sizeof(buf));
 
-    err = mciSendString("open tempfile.wav alias mysound", buf, sizeof(buf), NULL);
+    err = mciSendString("open tempfile.wav alias mysound notify", buf, sizeof(buf), hwnd);
     ok(err==ok_saved,"mci open tempfile.wav returned %s\n", dbg_mcierr(err));
     if(err) {
         skip("Cannot open tempfile.wav for playing (%s), skipping\n", dbg_mcierr(err));
@@ -523,6 +532,7 @@ static void test_asyncWAVE(HWND hwnd)
     ok(!strcmp(buf,"1"), "mci open deviceId: %s, expected 1\n", buf);
     wDeviceID = atoi(buf);
     ok(wDeviceID,"mci open DeviceID: %d\n", wDeviceID);
+    test_notification(hwnd,"open alias notify",MCI_NOTIFY_SUCCESSFUL);
 
     err = mciSendString("status mysound mode", buf, sizeof(buf), hwnd);
     ok(!err,"mci status mode returned %s\n", dbg_mcierr(err));




More information about the wine-cvs mailing list