1
0
Fork 0

(svn r16343) -Fix (r16066): Invalid free on exit after changing base graphics set in game.

release/1.0
frosch 2009-05-17 19:14:22 +00:00
parent 5507a5b233
commit ceca68fca7
1 changed files with 15 additions and 10 deletions

View File

@ -576,48 +576,53 @@ int ttd_main(int argc, char *argv[])
/* This must be done early, since functions use the InvalidateWindow* calls */ /* This must be done early, since functions use the InvalidateWindow* calls */
InitWindowSystem(); InitWindowSystem();
if (graphics_set == NULL) graphics_set = _ini_graphics_set; if (graphics_set == NULL) graphics_set = strdup(_ini_graphics_set);
if (!SetGraphicsSet(graphics_set)) { if (!SetGraphicsSet(graphics_set)) {
StrEmpty(graphics_set) ? StrEmpty(graphics_set) ?
usererror("Failed to find a graphics set. Please acquire a graphics set for OpenTTD.") : usererror("Failed to find a graphics set. Please acquire a graphics set for OpenTTD.") :
usererror("Failed to select requested graphics set '%s'", graphics_set); usererror("Failed to select requested graphics set '%s'", graphics_set);
} }
free(graphics_set);
/* Initialize game palette */ /* Initialize game palette */
GfxInitPalettes(); GfxInitPalettes();
DEBUG(misc, 1, "Loading blitter..."); DEBUG(misc, 1, "Loading blitter...");
if (blitter == NULL) blitter = _ini_blitter; if (blitter == NULL) blitter = strdup(_ini_blitter);
if (BlitterFactoryBase::SelectBlitter(blitter) == NULL) if (BlitterFactoryBase::SelectBlitter(blitter) == NULL)
StrEmpty(blitter) ? StrEmpty(blitter) ?
usererror("Failed to autoprobe blitter") : usererror("Failed to autoprobe blitter") :
usererror("Failed to select requested blitter '%s'; does it exist?", blitter); usererror("Failed to select requested blitter '%s'; does it exist?", blitter);
free(blitter);
DEBUG(driver, 1, "Loading drivers..."); DEBUG(driver, 1, "Loading drivers...");
if (sounddriver == NULL) sounddriver = _ini_sounddriver; if (sounddriver == NULL) sounddriver = strdup(_ini_sounddriver);
_sound_driver = (SoundDriver*)SoundDriverFactoryBase::SelectDriver(sounddriver, Driver::DT_SOUND); _sound_driver = (SoundDriver*)SoundDriverFactoryBase::SelectDriver(sounddriver, Driver::DT_SOUND);
if (_sound_driver == NULL) { if (_sound_driver == NULL) {
StrEmpty(sounddriver) ? StrEmpty(sounddriver) ?
usererror("Failed to autoprobe sound driver") : usererror("Failed to autoprobe sound driver") :
usererror("Failed to select requested sound driver '%s'", sounddriver); usererror("Failed to select requested sound driver '%s'", sounddriver);
} }
free(sounddriver);
if (musicdriver == NULL) musicdriver = _ini_musicdriver; if (musicdriver == NULL) musicdriver = strdup(_ini_musicdriver);
_music_driver = (MusicDriver*)MusicDriverFactoryBase::SelectDriver(musicdriver, Driver::DT_MUSIC); _music_driver = (MusicDriver*)MusicDriverFactoryBase::SelectDriver(musicdriver, Driver::DT_MUSIC);
if (_music_driver == NULL) { if (_music_driver == NULL) {
StrEmpty(musicdriver) ? StrEmpty(musicdriver) ?
usererror("Failed to autoprobe music driver") : usererror("Failed to autoprobe music driver") :
usererror("Failed to select requested music driver '%s'", musicdriver); usererror("Failed to select requested music driver '%s'", musicdriver);
} }
free(musicdriver);
if (videodriver == NULL) videodriver = _ini_videodriver; if (videodriver == NULL) videodriver = strdup(_ini_videodriver);
_video_driver = (VideoDriver*)VideoDriverFactoryBase::SelectDriver(videodriver, Driver::DT_VIDEO); _video_driver = (VideoDriver*)VideoDriverFactoryBase::SelectDriver(videodriver, Driver::DT_VIDEO);
if (_video_driver == NULL) { if (_video_driver == NULL) {
StrEmpty(videodriver) ? StrEmpty(videodriver) ?
usererror("Failed to autoprobe video driver") : usererror("Failed to autoprobe video driver") :
usererror("Failed to select requested video driver '%s'", videodriver); usererror("Failed to select requested video driver '%s'", videodriver);
} }
free(videodriver);
_savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING; _savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING;
/* Initialize the zoom level of the screen to normal */ /* Initialize the zoom level of the screen to normal */
@ -707,11 +712,11 @@ int ttd_main(int argc, char *argv[])
/* Reset windowing system, stop drivers, free used memory, ... */ /* Reset windowing system, stop drivers, free used memory, ... */
ShutdownGame(); ShutdownGame();
free(graphics_set); free(_ini_graphics_set);
free(musicdriver); free(_ini_musicdriver);
free(sounddriver); free(_ini_sounddriver);
free(videodriver); free(_ini_videodriver);
free(blitter); free(_ini_blitter);
return 0; return 0;
} }