X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/23397c9d7d4d455461176600bb45c81185493504..14e325c7e4b33e8fc6d33b99d1ffd3b934d26ed0:/ftparchive/cachedb.cc diff --git a/ftparchive/cachedb.cc b/ftparchive/cachedb.cc index df5eb1451..868029abd 100644 --- a/ftparchive/cachedb.cc +++ b/ftparchive/cachedb.cc @@ -45,6 +45,7 @@ CacheDB::~CacheDB() { ReadyDB(); delete DebFile; + CloseFile(); } // CacheDB::ReadyDB - Ready the DB2 /*{{{*/ @@ -322,12 +323,12 @@ bool CacheDB::LoadSource() /*{{{*/ if (Dsc.Read(FileName) == false) return false; - if (Dsc.Data == 0) + if (Dsc.Length == 0) return _error->Error(_("Failed to read .dsc")); - + // Write back the control information InitQuerySource(); - if (Put(Dsc.Data, Dsc.Length) == true) + if (Put(Dsc.Data.c_str(), Dsc.Length) == true) CurStat.Flags |= FlSource; return true; @@ -433,7 +434,24 @@ static void hex2bytes(uint8_t *bytes, const char *hex, int length) { } bool CacheDB::GetHashes(bool const GenOnly, unsigned int const DoHashes) { - unsigned int FlHashes = DoHashes & (Hashes::MD5SUM | Hashes::SHA1SUM | Hashes::SHA256SUM | Hashes::SHA512SUM); + unsigned int notCachedHashes = 0; + if ((CurStat.Flags & FlMD5) != FlMD5) + { + notCachedHashes = notCachedHashes | Hashes::MD5SUM; + } + if ((CurStat.Flags & FlSHA1) != FlSHA1) + { + notCachedHashes = notCachedHashes | Hashes::SHA1SUM; + } + if ((CurStat.Flags & FlSHA256) != FlSHA256) + { + notCachedHashes = notCachedHashes | Hashes::SHA256SUM; + } + if ((CurStat.Flags & FlSHA512) != FlSHA512) + { + notCachedHashes = notCachedHashes | Hashes::SHA512SUM; + } + unsigned int FlHashes = DoHashes & notCachedHashes; HashesList.clear(); if (FlHashes != 0) @@ -441,8 +459,8 @@ bool CacheDB::GetHashes(bool const GenOnly, unsigned int const DoHashes) if (OpenFile() == false) return false; - Hashes hashes; - if (Fd->Seek(0) == false || hashes.AddFD(*Fd, CurStat.FileSize, FlHashes) == false) + Hashes hashes(FlHashes); + if (Fd->Seek(0) == false || hashes.AddFD(*Fd, CurStat.FileSize) == false) return false; HashStringList hl = hashes.GetHashStringList(); @@ -484,10 +502,15 @@ bool CacheDB::GetHashes(bool const GenOnly, unsigned int const DoHashes) if (GenOnly == true) return true; - return HashesList.push_back(HashString("MD5Sum", bytes2hex(CurStat.MD5, sizeof(CurStat.MD5)))) && - HashesList.push_back(HashString("SHA1", bytes2hex(CurStat.SHA1, sizeof(CurStat.SHA1)))) && - HashesList.push_back(HashString("SHA256", bytes2hex(CurStat.SHA256, sizeof(CurStat.SHA256)))) && - HashesList.push_back(HashString("SHA512", bytes2hex(CurStat.SHA512, sizeof(CurStat.SHA512)))); + bool ret = true; +#define PUSH_BACK_HASH(FLAG, TYPE, VALUE) \ + if ((CurStat.Flags & FLAG) == FLAG) \ + ret &= HashesList.push_back(HashString(TYPE, bytes2hex(VALUE, sizeof(VALUE)))); + PUSH_BACK_HASH(FlMD5, "MD5Sum", CurStat.MD5); + PUSH_BACK_HASH(FlSHA1, "SHA1", CurStat.SHA1); + PUSH_BACK_HASH(FlSHA256, "SHA256", CurStat.SHA256); + PUSH_BACK_HASH(FlSHA512, "SHA512", CurStat.SHA512); + return ret; } /*}}}*/ // CacheDB::Finish - Write back the cache structure /*{{{*/