rendered paste bodyCLibraryFile* CLibraryMaps::LookupFileByHash(const Hashes::Sha1Hash& oSHA1, const Hashes::TigerHash& oTiger, const Hashes::Ed2kHash& oED2K, const Hashes::BtHash& oBTH, const Hashes::Md5Hash& oMD5, QWORD nMinSize, QWORD nMaxSize, BOOL bSharedOnly, BOOL bAvailableOnly) const{ CQuickLock oLock( Library.m_pSection ); CLibraryFile* pFile = NULL; bool bMinSize = false, bMaxSize = false; bMinSize = !(nMinSize == SIZE_UNKNOWN) && !(nMinSize == 0); bMaxSize = !(nMaxSize == SIZE_UNKNOWN) && !(nMaxSize == 0); for ( POSITION pos = GetFileIterator() ; pos ;) { CLibraryFile* pFile = GetNextFile( pos ); if ( ( bLocal || pFile->IsShared() ) && ( !bAvailableOnly || pFile->IsAvailable() ) ) { if ( ( ( ( pFile->m_oSHA1 && oSHA1) || ( pFile->m_oTiger && oTiger) || ( pFile->m_oED2K && oED2K) || ( pFile->m_oMD5 && oMD5) ) && !validAndUnequal( pFile->m_oSHA1, oSHA1 ) && !validAndUnequal( pFile->m_oTiger, oTiger ) && !validAndUnequal( pFile->m_oED2K, oED2K ) && !validAndUnequal( pFile->m_oMD5, oMD5 ) ) || validAndEqual( pFile->m_oBTH, oBTH ) ) { if ( ( !bMinSize && !bMaxSize ) || ( !bMaxSize && nMinSize <= pFile->m_nSize ) || ( !bMinSize && nMaxSize >= pFile->m_nSize ) || ( nMinSize <= pFile->m_nSize && nMaxSize >= pFile->m_nSize ) ) { return pFile; } } } } return NULL;}