From 49e6170b49fbb933eddec6d0e3f946320c68832f Mon Sep 17 00:00:00 2001 From: Andrey Nazarov Date: Wed, 23 Apr 2008 15:02:41 +0000 Subject: Added `dumpents' server command. Added support for `cl_noskins' value of 2 (default all female skins to `female/athena', all male skins to `male/grunt'). Renamed `scoreshot' command to `aashot', added `aadump' command. Fixed several alignment issues on ARM architecture. Server browser menu now indicates full and password protected servers with color codes. Implemented history search in console with Ctrl+R, Ctrl+S. Removed `cl_railtrail_alpha' variable, all `cl_rail*_color' variables now accept colors in #RRGGBBAA format. Added `map_override' cvar (enables loading map entity lump from external maps/*.ent file). Made `quit' command accept extra arguments. Made `draw' command accept arbitrary colors in #RRGGBBAA format. Fixed debian packages. --- source/files.c | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) (limited to 'source/files.c') diff --git a/source/files.c b/source/files.c index 88c7684..34a07d5 100644 --- a/source/files.c +++ b/source/files.c @@ -989,11 +989,11 @@ Filenames are relative to the quake search path a null buffer will just return the file length without loading ============ */ -size_t FS_LoadFileEx( const char *path, void **buffer, int flags ) { +size_t FS_LoadFileEx( const char *path, void **buffer, int flags, memtag_t tag ) { fsFile_t *file; fileHandle_t f; byte *buf; - size_t length; + size_t len; if( !path ) { Com_Error( ERR_FATAL, "FS_LoadFile: NULL" ); @@ -1024,31 +1024,45 @@ size_t FS_LoadFileEx( const char *path, void **buffer, int flags ) { file->mode = flags | FS_MODE_READ; // look for it in the filesystem or pack files - length = FS_FOpenFileRead( file, path, qfalse ); - if( length == INVALID_LENGTH ) { - return length; + len = FS_FOpenFileRead( file, path, qfalse ); + if( len == INVALID_LENGTH ) { + return len; } if( buffer ) { #if USE_ZLIB if( file->type == FS_GZIP ) { - length = INVALID_LENGTH; // unknown length + len = INVALID_LENGTH; // unknown length } else #endif { - *buffer = buf = FS_AllocTempMem( length + 1 ); - FS_Read( buf, length, f ); - buf[length] = 0; + if( tag == TAG_FREE ) { + buf = FS_AllocTempMem( len + 1 ); + } else { + buf = Z_TagMalloc( len + 1, tag ); + } + if( FS_Read( buf, len, f ) == len ) { + *buffer = buf; + buf[len] = 0; + } else { + Com_EPrintf( "FS_LoadFile: error reading file: %s\n", path ); + if( tag == TAG_FREE ) { + FS_FreeFile( buf ); + } else { + Z_Free( buf ); + } + len = INVALID_LENGTH; + } } } FS_FCloseFile( f ); - return length; + return len; } size_t FS_LoadFile( const char *path, void **buffer ) { - return FS_LoadFileEx( path, buffer, 0 ); + return FS_LoadFileEx( path, buffer, 0, TAG_FREE ); } void *FS_AllocTempMem( size_t length ) { -- cgit v1.2.3