diff options
author | Andrey Nazarov <skuller@skuller.net> | 2010-10-05 15:52:37 +0400 |
---|---|---|
committer | Andrey Nazarov <skuller@skuller.net> | 2010-10-05 15:52:37 +0400 |
commit | 95168893793ec6d0310c284dda087078e5456e27 (patch) | |
tree | 8082d9cc68abd9f34d24e81dae63b3dd1460e594 /src/files.c | |
parent | 8ed29fd28f023bd9e128b7ac4abdb02a201f602e (diff) |
Fix some filsystem issues.
Really fix FS_Tell on paks.
Support gzip filetered handles in FS_Tell.
Return proper error code in FS_FilterFile.
Prevent a file stream leak when closing gzip filtered handles.
Diffstat (limited to 'src/files.c')
-rw-r--r-- | src/files.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/files.c b/src/files.c index 37f494a..ab1852b 100644 --- a/src/files.c +++ b/src/files.c @@ -425,10 +425,16 @@ ssize_t FS_Tell( qhandle_t f ) { { return Q_ERR_SPIPE; } - return ret; + return ret - file->entry->filepos; #if USE_ZLIB case FS_ZIP: return tell_zip_file( file ); + case FS_GZ: + ret = gztell( file->zfp ); + if( ret == -1 ) { + return Q_ERR_LIBRARY_ERROR; + } + return ret; #endif default: return Q_ERR_NOSYS; @@ -531,7 +537,7 @@ qerror_t FS_FilterFile( qhandle_t f ) { modeStr = "wb"; break; default: - return qfalse; + return Q_ERR_NOSYS; } if( fseek( file->fp, 0, SEEK_SET ) == -1 ) { @@ -575,6 +581,7 @@ void FS_FCloseFile( qhandle_t f ) { #if USE_ZLIB case FS_GZ: gzclose( file->zfp ); + fclose( file->fp ); break; case FS_ZIP: if( file->unique ) { |