mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-16 11:33:03 +01:00
Copy argument to buffer since it may be freed, add missing break
This commit is contained in:
committed by
Michał Janiszewski
parent
058607b4e4
commit
b456fe2a4d
@@ -732,85 +732,86 @@ static void window_loadsave_select(rct_window *w, const char *path)
|
||||
return;
|
||||
}
|
||||
|
||||
char pathBuffer[MAX_PATH];
|
||||
safe_strcpy(pathBuffer, path, sizeof(pathBuffer));
|
||||
|
||||
switch (_type & 0x0F) {
|
||||
case (LOADSAVETYPE_LOAD | LOADSAVETYPE_GAME) :
|
||||
save_path(&gConfigGeneral.last_save_game_directory, path);
|
||||
safe_strcpy(gScenarioSavePath, path, MAX_PATH);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, path);
|
||||
save_path(&gConfigGeneral.last_save_game_directory, pathBuffer);
|
||||
safe_strcpy(gScenarioSavePath, pathBuffer, MAX_PATH);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, pathBuffer);
|
||||
window_close(w);
|
||||
gfx_invalidate_screen();
|
||||
break;
|
||||
case (LOADSAVETYPE_SAVE | LOADSAVETYPE_GAME) :
|
||||
save_path(&gConfigGeneral.last_save_game_directory, path);
|
||||
if (scenario_save(path, gConfigGeneral.save_plugin_data ? 1 : 0)) {
|
||||
safe_strcpy(gScenarioSavePath, path, MAX_PATH);
|
||||
save_path(&gConfigGeneral.last_save_game_directory, pathBuffer);
|
||||
if (scenario_save(pathBuffer, gConfigGeneral.save_plugin_data ? 1 : 0)) {
|
||||
safe_strcpy(gScenarioSavePath, pathBuffer, MAX_PATH);
|
||||
gFirstTimeSave = 0;
|
||||
|
||||
window_close_by_class(WC_LOADSAVE);
|
||||
gfx_invalidate_screen();
|
||||
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, path);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, pathBuffer);
|
||||
} else {
|
||||
window_error_open(STR_SAVE_GAME, STR_GAME_SAVE_FAILED);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_FAIL, path);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_FAIL, pathBuffer);
|
||||
}
|
||||
break;
|
||||
case (LOADSAVETYPE_LOAD | LOADSAVETYPE_LANDSCAPE) :
|
||||
save_path(&gConfigGeneral.last_save_landscape_directory, path);
|
||||
if (editor_load_landscape(path)) {
|
||||
save_path(&gConfigGeneral.last_save_landscape_directory, pathBuffer);
|
||||
if (editor_load_landscape(pathBuffer)) {
|
||||
gfx_invalidate_screen();
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, path);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, pathBuffer);
|
||||
} else {
|
||||
// Not the best message...
|
||||
window_error_open(STR_LOAD_LANDSCAPE, STR_FAILED_TO_LOAD_FILE_CONTAINS_INVALID_DATA);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_FAIL, path);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_FAIL, pathBuffer);
|
||||
}
|
||||
break;
|
||||
case (LOADSAVETYPE_SAVE | LOADSAVETYPE_LANDSCAPE) :
|
||||
save_path(&gConfigGeneral.last_save_landscape_directory, path);
|
||||
scenario_set_filename(path);
|
||||
if (scenario_save(path, gConfigGeneral.save_plugin_data ? 3 : 2)) {
|
||||
save_path(&gConfigGeneral.last_save_landscape_directory, pathBuffer);
|
||||
scenario_set_filename(pathBuffer);
|
||||
if (scenario_save(pathBuffer, gConfigGeneral.save_plugin_data ? 3 : 2)) {
|
||||
window_close_by_class(WC_LOADSAVE);
|
||||
gfx_invalidate_screen();
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, path);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, pathBuffer);
|
||||
} else {
|
||||
window_error_open(STR_SAVE_LANDSCAPE, STR_LANDSCAPE_SAVE_FAILED);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_FAIL, path);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_FAIL, pathBuffer);
|
||||
}
|
||||
break;
|
||||
case (LOADSAVETYPE_SAVE | LOADSAVETYPE_SCENARIO) :
|
||||
{
|
||||
save_path(&gConfigGeneral.last_save_scenario_directory, path);
|
||||
save_path(&gConfigGeneral.last_save_scenario_directory, pathBuffer);
|
||||
sint32 parkFlagsBackup = gParkFlags;
|
||||
gParkFlags &= ~PARK_FLAGS_SPRITES_INITIALISED;
|
||||
gS6Info.editor_step = 255;
|
||||
scenario_set_filename(path);
|
||||
sint32 success = scenario_save(path, gConfigGeneral.save_plugin_data ? 3 : 2);
|
||||
scenario_set_filename(pathBuffer);
|
||||
sint32 success = scenario_save(pathBuffer, gConfigGeneral.save_plugin_data ? 3 : 2);
|
||||
gParkFlags = parkFlagsBackup;
|
||||
|
||||
if (success) {
|
||||
window_close_by_class(WC_LOADSAVE);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, path);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, pathBuffer);
|
||||
title_load();
|
||||
} else {
|
||||
window_error_open(STR_FILE_DIALOG_TITLE_SAVE_SCENARIO, STR_SCENARIO_SAVE_FAILED);
|
||||
gS6Info.editor_step = EDITOR_STEP_OBJECTIVE_SELECTION;
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_FAIL, path);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_FAIL, pathBuffer);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case (LOADSAVETYPE_LOAD | LOADSAVETYPE_TRACK) :
|
||||
save_path(&gConfigGeneral.last_save_track_directory, path);
|
||||
window_install_track_open(path);
|
||||
save_path(&gConfigGeneral.last_save_track_directory, pathBuffer);
|
||||
window_install_track_open(pathBuffer);
|
||||
window_close_by_class(WC_LOADSAVE);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, path);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, pathBuffer);
|
||||
break;
|
||||
case (LOADSAVETYPE_SAVE | LOADSAVETYPE_TRACK) :
|
||||
{
|
||||
char p[MAX_PATH];
|
||||
safe_strcpy(p, path, sizeof(p));
|
||||
path_set_extension(p, "td6", sizeof(p));
|
||||
sint32 success = track_design_save_to_file(p);
|
||||
path_set_extension(pathBuffer, "td6", sizeof(pathBuffer));
|
||||
sint32 success = track_design_save_to_file(pathBuffer);
|
||||
|
||||
if (success) {
|
||||
window_close_by_class(WC_LOADSAVE);
|
||||
@@ -820,10 +821,11 @@ static void window_loadsave_select(rct_window *w, const char *path)
|
||||
window_error_open(STR_FILE_DIALOG_TITLE_SAVE_TRACK, STR_TRACK_SAVE_FAILED);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_FAIL, path);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case (LOADSAVETYPE_LOAD | LOADSAVETYPE_IMAGE):
|
||||
case (LOADSAVETYPE_LOAD | LOADSAVETYPE_IMAGE) :
|
||||
window_close_by_class(WC_LOADSAVE);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, path);
|
||||
window_loadsave_invoke_callback(MODAL_RESULT_OK, pathBuffer);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user