size_t NsaReader::getFile( const char *file_name, unsigned char *buffer, int *location ) { size_t ret; if ( sar_flag ) return SarReader::getFile( file_name, buffer, location ); if ( ( ret = DirectReader::getFile( file_name, buffer, location ) ) ) return ret; if ( (ret = getFileSub( &archive_info, file_name, buffer )) ){ if ( location ) *location = ARCHIVE_TYPE_NSA; return ret; } for ( int i=0 ; i<num_of_nsa_archives ; i++ ){ if ( (ret = getFileSub( &archive_info2[i], file_name, buffer )) ){ if ( location ) *location = ARCHIVE_TYPE_NSA; return ret; } } return 0; }
size_t SarReader::getFile( const char *file_name, unsigned char *buf, int *location ) { size_t ret; if ( ( ret = DirectReader::getFile( file_name, buf, location ) ) ) return ret; ArchiveInfo *info = archive_info.next; size_t j = 0; for ( int i=0 ; i<num_of_sar_archives ; i++ ){ if ( (j = getFileSub( info, file_name, buf )) > 0 ) break; info = info->next; } if ( location ) *location = ARCHIVE_TYPE_SAR; return j; }