summaryrefslogtreecommitdiff
path: root/src/files.c
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2010-10-05 15:52:37 +0400
committerAndrey Nazarov <skuller@skuller.net>2010-10-05 15:52:37 +0400
commit95168893793ec6d0310c284dda087078e5456e27 (patch)
tree8082d9cc68abd9f34d24e81dae63b3dd1460e594 /src/files.c
parent8ed29fd28f023bd9e128b7ac4abdb02a201f602e (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.c11
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 ) {