]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/hashes.cc
Merge branch 'debian/experimental' into feature/srv-records
[apt.git] / apt-pkg / contrib / hashes.cc
index 953465091e4f9a593ff9c2362a3e41707b7e03d0..0fa443b4abed2f43391e4e4a6e05246246b42e47 100644 (file)
@@ -204,15 +204,22 @@ bool HashStringList::push_back(const HashString &hashString)              /*{{{*/
                                                                        /*}}}*/
 bool HashStringList::VerifyFile(std::string filename) const            /*{{{*/
 {
-   if (list.empty() == true)
-      return false;
-   HashString const * const hs = find(NULL);
-   if (hs == NULL || hs->VerifyFile(filename) == false)
+   if (usable() == false)
       return false;
+
+   Hashes hashes(*this);
+   FileFd file(filename, FileFd::ReadOnly);
    HashString const * const hsf = find("Checksum-FileSize");
-   if (hsf != NULL && hsf->VerifyFile(filename) == false)
-      return false;
-   return true;
+   if (hsf != NULL)
+   {
+      std::string fileSize;
+      strprintf(fileSize, "%llu", file.FileSize());
+      if (hsf->HashValue() != fileSize)
+        return false;
+   }
+   hashes.AddFD(file);
+   HashStringList const hsl = hashes.GetHashStringList();
+   return hsl == *this;
 }
                                                                        /*}}}*/
 bool HashStringList::operator==(HashStringList const &other) const     /*{{{*/