From: Thomas Köppe Date: Mon, 8 Jan 2018 15:18:29 +0000 (+0000) Subject: [q3map2] Unwind script stack in case of script loading error. X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=42856811f2b174e37a761bfcb9fbeb8c6af2f558;p=xonotic%2Fnetradiant.git [q3map2] Unwind script stack in case of script loading error. Also avoid type punning read into char* variable (even though char* and void* happen to be layout-compatible). --- diff --git a/tools/quake3/common/scriplib.c b/tools/quake3/common/scriplib.c index 359a078d..f41d5303 100644 --- a/tools/quake3/common/scriplib.c +++ b/tools/quake3/common/scriplib.c @@ -58,6 +58,7 @@ qboolean tokenready; // only qtrue if UnGetToken was just ca */ void AddScriptToStack( const char *filename, int index ){ int size; + void* buffer; script++; if ( script == &scriptstack[MAX_INCLUDES] ) { @@ -65,10 +66,11 @@ void AddScriptToStack( const char *filename, int index ){ } strcpy( script->filename, ExpandPath( filename ) ); - size = vfsLoadFile( script->filename, (void **)&script->buffer, index ); + size = vfsLoadFile( script->filename, &buffer, index ); if ( size == -1 ) { Sys_Printf( "Script file %s was not found\n", script->filename ); + script--; } else { @@ -78,11 +80,12 @@ void AddScriptToStack( const char *filename, int index ){ else{ Sys_Printf( "entering %s\n", script->filename ); } - } - script->line = 1; - script->script_p = script->buffer; - script->end_p = script->buffer + size; + script->buffer = buffer; + script->line = 1; + script->script_p = script->buffer; + script->end_p = script->buffer + size; + } }