
# HG changeset patch
# User Sam Lantinga <slouken@libsdl.org>
# Date 1342998807 25200
# Node ID 56cad6484b04f83c8d42428c755a046678506436
# Parent  c92001a2c18f628698c58aa4e05a7335d10d0e9e
Paul P Komkoff Jr fixed malloc/free mismatch in the MikMod driver

diff -r c92001a2c18f -r 56cad6484b04 CHANGES
--- a/CHANGES	Sun Mar 04 21:32:47 2012 +0000
+++ b/CHANGES	Sun Jul 22 16:13:27 2012 -0700
@@ -1,3 +1,7 @@
+1.2.13:
+Paul P Komkoff Jr - Sun Jul 22 16:12:28 PDT 2012
+ * Fixed malloc/free mismatch in the MikMod driver
+
 1.2.12:
 Sam Lantinga - Sat Jan 14 22:00:29 2012 -0500
  * Fixed seek offset with SMPEG (was relative, should be absolute)
diff -r c92001a2c18f -r 56cad6484b04 dynamic_mod.c
--- a/dynamic_mod.c	Sun Mar 04 21:32:47 2012 +0000
+++ b/dynamic_mod.c	Sun Jul 22 16:13:27 2012 -0700
@@ -93,6 +93,13 @@
 			SDL_UnloadObject(mikmod.handle);
 			return -1;
 		}
+		mikmod.MikMod_free =
+			(void (*)(void*))
+			SDL_LoadFunction(mikmod.handle, "MikMod_free");
+		if ( mikmod.MikMod_free == NULL ) {
+			SDL_UnloadObject(mikmod.handle);
+			return -1;
+		}
 		mikmod.Player_Active =
 			(BOOL (*)(void))
 			SDL_LoadFunction(mikmod.handle, "Player_Active");
diff -r c92001a2c18f -r 56cad6484b04 dynamic_mod.h
--- a/dynamic_mod.h	Sun Mar 04 21:32:47 2012 +0000
+++ b/dynamic_mod.h	Sun Jul 22 16:13:27 2012 -0700
@@ -35,6 +35,7 @@
 	void (*MikMod_RegisterDriver)(struct MDRIVER*);
 	int* MikMod_errno;
 	char* (*MikMod_strerror)(int);
+	void (*MikMod_free)(void*);
 	BOOL (*Player_Active)(void);
 	void (*Player_Free)(MODULE*);
 	MODULE* (*Player_LoadGeneric)(MREADER*,int,BOOL);
diff -r c92001a2c18f -r 56cad6484b04 music_mod.c
--- a/music_mod.c	Sun Mar 04 21:32:47 2012 +0000
+++ b/music_mod.c	Sun Jul 22 16:13:27 2012 -0700
@@ -109,13 +109,13 @@
 
 	list = mikmod.MikMod_InfoDriver();
 	if ( list )
-	  free(list);
+	  mikmod.MikMod_free(list);
 	else
 	  mikmod.MikMod_RegisterDriver(mikmod.drv_nos);
 
 	list = mikmod.MikMod_InfoLoader();
 	if ( list )
-	  free(list);
+	  mikmod.MikMod_free(list);
 	else
 	  mikmod.MikMod_RegisterAllLoaders();
 
