=?UTF-8?Q?J=C3=B6rg=20H=C3=B6hle=20?=: mciseq: Fix reading MCI_INFO_NAME and COPYRIGHT from MIDI file.

Alexandre Julliard julliard at winehq.org
Thu Oct 25 13:50:45 CDT 2012


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

Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date:   Wed Sep 19 22:26:17 2012 +0200

mciseq: Fix reading MCI_INFO_NAME and COPYRIGHT from MIDI file.

---

 dlls/mciseq/mcimidi.c |   23 ++++++++++-------------
 1 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/dlls/mciseq/mcimidi.c b/dlls/mciseq/mcimidi.c
index 7fbbafb..49435c8 100644
--- a/dlls/mciseq/mcimidi.c
+++ b/dlls/mciseq/mcimidi.c
@@ -347,10 +347,7 @@ static DWORD MIDI_mciReadMTrk(WINE_MCIMIDI* wmm, MCI_MIDITRACK* mmt)
 	switch (LOWORD(mmt->dwEventData)) {
 	case 0x02FF:
 	case 0x03FF:
-	    /* position after meta data header */
-	    mmioSeek(wmm->hFile, mmt->dwIndex + HIWORD(mmt->dwEventData), SEEK_SET);
 	    len = mmt->wEventLength - HIWORD(mmt->dwEventData);
-
 	    if (len >= sizeof(buf)) {
 		WARN("Buffer for text is too small (%u are needed)\n", len);
 		len = sizeof(buf) - 1;
@@ -361,20 +358,20 @@ static DWORD MIDI_mciReadMTrk(WINE_MCIMIDI* wmm, MCI_MIDITRACK* mmt)
 		case 0x02:
 		    if (wmm->lpstrCopyright) {
 			WARN("Two copyright notices (%s|%s)\n", debugstr_w(wmm->lpstrCopyright), buf);
-		    } else {
-                        len = MultiByteToWideChar( CP_ACP, 0, buf, -1, NULL, 0 );
-                        wmm->lpstrCopyright = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );
-                        MultiByteToWideChar( CP_ACP, 0, buf, -1, wmm->lpstrCopyright, len );
+			HeapFree(GetProcessHeap(), 0, wmm->lpstrCopyright);
 		    }
+		    len = MultiByteToWideChar( CP_ACP, 0, buf, -1, NULL, 0 );
+		    wmm->lpstrCopyright = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );
+		    MultiByteToWideChar( CP_ACP, 0, buf, -1, wmm->lpstrCopyright, len );
 		    break;
 		case 0x03:
 		    if (wmm->lpstrName) {
 			WARN("Two names (%s|%s)\n", debugstr_w(wmm->lpstrName), buf);
-		    } else {
-                        len = MultiByteToWideChar( CP_ACP, 0, buf, -1, NULL, 0 );
-                        wmm->lpstrName = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );
-                        MultiByteToWideChar( CP_ACP, 0, buf, -1, wmm->lpstrName, len );
-		    }
+			HeapFree(GetProcessHeap(), 0, wmm->lpstrName);
+		    } /* last name or name from last track wins */
+		    len = MultiByteToWideChar( CP_ACP, 0, buf, -1, NULL, 0 );
+		    wmm->lpstrName = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );
+		    MultiByteToWideChar( CP_ACP, 0, buf, -1, wmm->lpstrName, len );
 		    break;
 		}
 	    }
@@ -1524,7 +1521,7 @@ static DWORD MIDI_mciInfo(WINE_MCIMIDI* wmm, DWORD dwFlags, LPMCI_INFO_PARMSW lp
     case MCI_INFO_NAME:         str = wmm->lpstrName; break;
     default:
 	WARN("Don't know this info command (%u)\n", dwFlags);
-	return MCIERR_UNRECOGNIZED_COMMAND;
+	return MCIERR_MISSING_PARAMETER; /* not MCIERR_FLAGS_... */
     }
     if (!ret) {
 	if (lpParms->dwRetSize) {




More information about the wine-cvs mailing list