From ed593fdf2f5e7851cb59aa5a2253f43e33d2f14f Mon Sep 17 00:00:00 2001 From: Jason Edmeades Date: Fri, 5 Mar 2004 20:43:40 +0000 Subject: [PATCH] Handle playing of files containing a '+' as part of the filename. --- dlls/winmm/mmio.c | 50 ++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/dlls/winmm/mmio.c b/dlls/winmm/mmio.c index 25631c52164..f588690e527 100644 --- a/dlls/winmm/mmio.c +++ b/dlls/winmm/mmio.c @@ -389,41 +389,47 @@ static LRESULT send_message(struct IOProcList* ioProc, LPMMIOINFO mmioinfo, */ 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--; - } + /* Find the last '.' */ + extStart = strrchr(szFileName,'.'); - if (extStart < szFileName) { - ERR("+ but no . in szFileName: %s\n", debugstr_a(szFileName)); - } else { - CHAR ext[5]; + if (!extStart) { + ERR("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 '+' 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, 5); + } + TRACE("Got extension: %s\n", debugstr_a(ext)); + + /* FOURCC codes identifying file-extensions must be uppercase */ + ret = mmioStringToFOURCCA(ext, MMIO_TOUPPER); } return ret; }