diff options
author | Andrey Nazarov <skuller@skuller.net> | 2008-10-25 16:43:39 +0000 |
---|---|---|
committer | Andrey Nazarov <skuller@skuller.net> | 2008-10-25 16:43:39 +0000 |
commit | 8a4e5f5516e94fe901a332bce7eef9b824f225c6 (patch) | |
tree | 93d64ca93047c6b1c1b59658e950ab0062544fe9 /source/files.c | |
parent | b7d3939f3f68617f80d74d0a2bf6ea34ddea1065 (diff) |
Progress meter now works for local MVDs again.
Implemented `mvdskip' command which allows one jump to the next map in a MVD.
Removed `mvd_shownet' debugging stuff from dedicated server build.
Dropped packets no longer have maximum height on the lagometer.
Diffstat (limited to 'source/files.c')
-rw-r--r-- | source/files.c | 136 |
1 files changed, 69 insertions, 67 deletions
diff --git a/source/files.c b/source/files.c index 6289d52..a8eb100 100644 --- a/source/files.c +++ b/source/files.c @@ -342,9 +342,10 @@ char *FS_ReplaceSeparators( char *s, int separator ) { ================ FS_GetFileLength -Returns current length for files opened for writing. -Returns cached length for files opened for reading. -Returns compressed length for GZIP files. +Returns: +- current length for files opened for writing. +- cached length for files opened for reading. +- INVALID_LENGTH for gzip-compressed files. ================ */ size_t FS_GetFileLength( fileHandle_t f ) { @@ -358,10 +359,11 @@ size_t FS_GetFileLength( fileHandle_t f ) { } return info.size; case FS_PAK: - return file->length; #if USE_ZLIB case FS_PK2: +#endif return file->length; +#if USE_ZLIB case FS_GZIP: return INVALID_LENGTH; #endif @@ -374,6 +376,69 @@ size_t FS_GetFileLength( fileHandle_t f ) { /* ============ +FS_Tell +============ +*/ +size_t FS_Tell( fileHandle_t f ) { + fsFile_t *file = FS_FileForHandle( f ); + int length; + + switch( file->type ) { + case FS_REAL: + length = ftell( file->fp ); + break; + case FS_PAK: + length = ftell( file->fp ) - file->pak->filepos; + break; +#if USE_ZLIB + case FS_PK2: + length = unztell( file->zfp ); + break; + case FS_GZIP: + return INVALID_LENGTH; +#endif + default: + Com_Error( ERR_FATAL, "%s: bad file type", __func__ ); + } + + return length; +} + +/* +============ +FS_Seek +============ +*/ +qboolean FS_Seek( fileHandle_t f, size_t offset ) { + fsFile_t *file = FS_FileForHandle( f ); + + switch( file->type ) { + case FS_REAL: + case FS_PAK: + if( fseek( file->fp, offset, SEEK_CUR ) == -1 ) { + return qfalse; + } + break; +#if USE_ZLIB + case FS_GZIP: + if( gzseek( file->zfp, offset, SEEK_CUR ) == -1 ) { + return qfalse; + } + break; + //case FS_PK2: + // length = unztell( file->zfp ); + // break; +#endif + default: + return qfalse; + } + + return qtrue; +} + + +/* +============ FS_CreatePath Creates any directories needed to store the given filename. @@ -966,69 +1031,6 @@ size_t FS_FOpenFile( const char *name, fileHandle_t *f, int mode ) { } -/* -============ -FS_Tell -============ -*/ -int FS_Tell( fileHandle_t f ) { - fsFile_t *file = FS_FileForHandle( f ); - int length; - - switch( file->type ) { - case FS_REAL: - length = ftell( file->fp ); - break; - case FS_PAK: - length = ftell( file->fp ) - file->pak->filepos; - break; -#if USE_ZLIB - case FS_GZIP: - length = gztell( file->zfp ); - break; - case FS_PK2: - length = unztell( file->zfp ); - break; -#endif - default: - length = -1; - break; - } - - return length; -} - -/* -============ -FS_RawTell -============ -*/ -int FS_RawTell( fileHandle_t f ) { - fsFile_t *file = FS_FileForHandle( f ); - int length; - - switch( file->type ) { - case FS_REAL: - length = ftell( file->fp ); - break; - case FS_PAK: - length = ftell( file->fp ) - file->pak->filepos; - break; -#if USE_ZLIB - case FS_GZIP: - length = ftell( file->fp ); - break; - case FS_PK2: - length = unztell( file->zfp ); - break; -#endif - default: - length = -1; - break; - } - - return length; -} #define MAX_LOAD_BUFFER 0x100000 // 1 MiB |