Austerlitz patch #1 - play audio file with + in filename

Jason Edmeades us at the-edmeades.demon.co.uk
Sat Feb 21 10:25:17 CST 2004


This prevents the assertion which arises because it tries to play an 
audio file with a '+' in the filename. I believe this change is correct

Changelog
Handle playing of files containing a '+' as part of the filename in mmio

Jason
-------------- next part --------------
Index: dlls/winmm/mmio.c
===================================================================
RCS file: /home/wine/wine/dlls/winmm/mmio.c,v
retrieving revision 1.43
diff -u -r1.43 mmio.c
--- dlls/winmm/mmio.c	9 Nov 2003 01:19:58 -0000	1.43
+++ dlls/winmm/mmio.c	21 Feb 2004 16:17:23 -0000
@@ -389,41 +389,47 @@
  */
 static FOURCC MMIO_ParseExtA(LPCSTR szFileName)
 {
-    /* Filenames are of the form file.ext+ABC
-       FIXME: What if a '+' is part of the file name?
-       For now, we take the last '+' present */
+    /* Filenames are of the form file.ext{+ABC}
+       For now, we take the last '+' if present */
 
     FOURCC ret = 0;
 
     /* Note that ext{Start,End} point to the . and + respectively */
     LPSTR extEnd;
+    LPSTR extStart;
 
     TRACE("(%s)\n", debugstr_a(szFileName));
 
     if (!szFileName)
 	return ret;
-    extEnd = strrchr(szFileName,'+');
-    if (extEnd) {
-	/* Need to parse to find the extension */
-	LPSTR extStart;
-
-	extStart = extEnd;
-	while (extStart >= szFileName && extStart[0] != '.') {
-	    extStart--;
-	}
-
-	if (extStart < szFileName) {
-	    ERR("+ but no . in szFileName: %s\n", debugstr_a(szFileName));
-	} else {
-	    CHAR ext[5];
-
-	    if (extEnd - extStart - 1 > 4)
-		WARN("Extension length > 4\n");
-	    lstrcpynA(ext, extStart + 1, min(extEnd-extStart,5));
-	    TRACE("Got extension: %s\n", debugstr_a(ext));
-	    /* FOURCC codes identifying file-extensions must be uppercase */
-	    ret = mmioStringToFOURCCA(ext, MMIO_TOUPPER);
-	}
+
+    /* Find the last '.' */
+    extStart = strrchr(szFileName,'.');
+
+    if (!extStart) {
+         ERR("No . in szFileName: %s\n", debugstr_a(szFileName));
+    } else {
+        CHAR ext[5];
+
+        /* Find the '+' afterwards */
+        extEnd = strchr(extStart,'+');
+        if (extEnd) {
+
+            if (extEnd - extStart - 1 > 4)
+                WARN("Extension length > 4\n");
+            lstrcpynA(ext, extStart + 1, min(extEnd-extStart,5));
+
+        } else {
+            /* No + so just an extension */
+            if (strlen(extStart) > 4) {
+                WARN("Extension length > 4\n");
+            }
+            lstrcpynA(ext, extStart + 1, min(extEnd-extStart,5));
+        }
+        TRACE("Got extension: %s\n", debugstr_a(ext));
+
+        /* FOURCC codes identifying file-extensions must be uppercase */
+        ret = mmioStringToFOURCCA(ext, MMIO_TOUPPER);
     }
     return ret;
 }



More information about the wine-patches mailing list