From 6c7ac56451fc99efacb43bc432aba2c92d86b1f4 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sun, 11 Jan 2004 22:01:49 +0000 Subject: [PATCH] optimize lseek(0,SEEK_END) in ZIPs --- stepmania/src/RageFileDriverZip.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/stepmania/src/RageFileDriverZip.cpp b/stepmania/src/RageFileDriverZip.cpp index edfd35cd0f..67fba1508f 100644 --- a/stepmania/src/RageFileDriverZip.cpp +++ b/stepmania/src/RageFileDriverZip.cpp @@ -624,18 +624,23 @@ void RageFileObjZipDeflated::Rewind() int RageFileObjZipDeflated::Seek( int offset ) { - return RageFileObj::Seek( offset ); /* XXX */ -/* if( offset < this->UFilePos ) + /* Optimization: if offset is the end of the file, it's a lseek(0,SEEK_END). Don't + * decode anything. */ + if( offset == (int) info.uncompr_size ) { - offset += UFilePos; - Rewind(); + UFilePos = info.uncompr_size; + CFilePos = info.compr_size; + zip.Seek( info.data_offset + info.compr_size ); + decomp_buf_ptr = decomp_buf; + decomp_buf_avail = 0; + inflateReset( &dstrm ); + return offset; } -*/ + /* Can this be optimized? */ + return RageFileObj::Seek( offset ); } -/* */ - RageFileObjZipStored::RageFileObjZipStored( const RageFile &f, const FileInfo &info_, RageFile &p ): RageFileObj( p ), info(info_),