summaryrefslogtreecommitdiff
blob: d99609f8ab2505605fd37f75640b33ddce00498e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
http://hg.libsdl.org/SDL_mixer/rev/56cad6484b04
https://bugs.gentoo.org/445980

# 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

--- a/dynamic_mod.c
+++ b/dynamic_mod.c
@@ -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");
--- a/dynamic_mod.h
+++ b/dynamic_mod.h
@@ -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);
--- a/music_mod.c
+++ b/music_mod.c
@@ -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();