From a2ddf289a40d4d34bd611a4af14a345e29033aa6 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 29 Jul 2013 23:28:25 -0700 Subject: [PATCH] Fixed stack smashing crash when using the GCC compiled DLL with Visual Studio. --- include/SDL_audio.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/include/SDL_audio.h b/include/SDL_audio.h index 9e5a997ae..97f7a87c1 100644 --- a/include/SDL_audio.h +++ b/include/SDL_audio.h @@ -183,6 +183,17 @@ typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt, /** * A structure to hold a set of audio conversion filters and buffers. */ +#ifdef __GNUC__ +/* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't + pad it out to 88 bytes to guarantee ABI compatibility between compilers. + vvv + The next time we rev the ABI, make sure to size the ints and add padding. +*/ +#define SDL_AUDIOCVT_PACKED __attribute__((packed)) +#else +#define SDL_AUDIOCVT_PACKED +#endif +/* */ typedef struct SDL_AudioCVT { int needed; /**< Set to 1 if conversion possible */ @@ -196,7 +207,7 @@ typedef struct SDL_AudioCVT double len_ratio; /**< Given len, final size is len*len_ratio */ SDL_AudioFilter filters[10]; /**< Filter list */ int filter_index; /**< Current audio conversion function */ -} SDL_AudioCVT; +} SDL_AUDIOCVT_PACKED SDL_AudioCVT; /* Function prototypes */