From 98f59dbc991bd638deb59a94d75f19aa3b77249c Mon Sep 17 00:00:00 2001 From: Andrey Bondrov Date: Sat, 19 Jan 2013 19:10:42 +1100 Subject: [PATCH] LOG Add patches from Fedora to fix crashes with mikmod --- SDL_mixer-MikMod-1.patch | 67 ++++++++++++++++++++++++++++++++++++++++ SDL_mixer-MikMod-2.patch | 35 +++++++++++++++++++++ SDL_mixer.spec | 6 +++- 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 SDL_mixer-MikMod-1.patch create mode 100644 SDL_mixer-MikMod-2.patch diff --git a/SDL_mixer-MikMod-1.patch b/SDL_mixer-MikMod-1.patch new file mode 100644 index 0000000..b3bb829 --- /dev/null +++ b/SDL_mixer-MikMod-1.patch @@ -0,0 +1,67 @@ + +# HG changeset patch +# User Sam Lantinga +# 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(); + + diff --git a/SDL_mixer-MikMod-2.patch b/SDL_mixer-MikMod-2.patch new file mode 100644 index 0000000..6e89ca8 --- /dev/null +++ b/SDL_mixer-MikMod-2.patch @@ -0,0 +1,35 @@ + +# HG changeset patch +# User Sam Lantinga +# Date 1343000017 25200 +# Node ID 2ebb0d016f277f7f643d8a66ed0e1099e10d1fba +# Parent 56cad6484b04f83c8d42428c755a046678506436 +Fixed normal linking with libmikmod and linking with earlier versions of libmikmod. + +diff -r 56cad6484b04 -r 2ebb0d016f27 dynamic_mod.c +--- a/dynamic_mod.c Sun Jul 22 16:13:27 2012 -0700 ++++ b/dynamic_mod.c Sun Jul 22 16:33:37 2012 -0700 +@@ -97,8 +97,8 @@ + (void (*)(void*)) + SDL_LoadFunction(mikmod.handle, "MikMod_free"); + if ( mikmod.MikMod_free == NULL ) { +- SDL_UnloadObject(mikmod.handle); +- return -1; ++ /* libmikmod 3.1 and earlier doesn't have it */ ++ mikmod.MikMod_free = free; + } + mikmod.Player_Active = + (BOOL (*)(void)) +@@ -246,6 +246,11 @@ + mikmod.MikMod_RegisterDriver = MikMod_RegisterDriver; + mikmod.MikMod_errno = &MikMod_errno; + mikmod.MikMod_strerror = MikMod_strerror; ++#if LIBMIKMOD_VERSION < ((3<<16)|(2<<8)) ++ mikmod.MikMod_free = free; ++#else ++ mikmod.MikMod_free = MikMod_free; ++#endif + mikmod.Player_Active = Player_Active; + mikmod.Player_Free = Player_Free; + mikmod.Player_LoadGeneric = Player_LoadGeneric; + diff --git a/SDL_mixer.spec b/SDL_mixer.spec index b77748e..441480a 100644 --- a/SDL_mixer.spec +++ b/SDL_mixer.spec @@ -5,12 +5,14 @@ Name: SDL_mixer Version: 1.2.12 -Release: 2 +Release: 3 Summary: Simple DirectMedia Layer - mixer License: LGPLv2+ Group: System/Libraries URL: http://www.libsdl.org/projects/SDL_mixer/ Source0: http://www.libsdl.org/projects/SDL_mixer/release/%{name}-%{version}.tar.gz +Patch0: SDL_mixer-MikMod-1.patch +Patch1: SDL_mixer-MikMod-2.patch BuildRequires: pkgconfig(sdl) BuildRequires: pkgconfig(esound) BuildRequires: libmikmod-devel @@ -60,6 +62,8 @@ This package contains binary to test the associated library. %prep %setup -q +%patch0 -p1 +%patch1 -p1 %build # (Anssi 02/2010) The below --disable-music-foo-shared options do not disable