size_t SarReader::getFileLength( const char *file_name ) { size_t ret; if ( ( ret = DirectReader::getFileLength( file_name ) ) ) return ret; ArchiveInfo *info = archive_info.next; unsigned int j = 0; for ( int i=0 ; i<num_of_sar_archives ; i++ ){ j = getIndexFromFile( info, file_name ); if ( j != info->num_of_files ) break; info = info->next; } if ( !info ) return 0; if ( info->fi_list[j].original_length != 0 ) return info->fi_list[j].original_length; int type = info->fi_list[j].compression_type; if ( type == NO_COMPRESSION ) type = getRegisteredCompressionType( file_name ); if ( type == NBZ_COMPRESSION || type == SPB_COMPRESSION ) { info->fi_list[j].original_length = getDecompressedFileLength( type, info->file_handle, info->fi_list[j].offset ); } return info->fi_list[j].original_length; }
size_t NsaReader::getFileLengthSub( ArchiveInfo *ai, const char *file_name ) { unsigned int i = getIndexFromFile( ai, file_name ); if ( i == ai->num_of_files ) return 0; if ( ai->fi_list[i].compression_type == NO_COMPRESSION ){ int type = getRegisteredCompressionType( file_name ); if ( type == NBZ_COMPRESSION || type == SPB_COMPRESSION ) return getDecompressedFileLength( type, ai->file_handle, ai->fi_list[i].offset ); } return ai->fi_list[i].original_length; }