X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/cb6a2b3eaca4353d7f490fb360b98c08d64a2d8c..3444603f5ff2b4c4816e45e686e06e01df31cdc4:/apt-pkg/deb/debsrcrecords.cc diff --git a/apt-pkg/deb/debsrcrecords.cc b/apt-pkg/deb/debsrcrecords.cc index 45cc0ae82..f5fb2da4a 100644 --- a/apt-pkg/deb/debsrcrecords.cc +++ b/apt-pkg/deb/debsrcrecords.cc @@ -116,23 +116,21 @@ bool debSrcRecordParser::Files(std::vector &List) { List.erase(List.begin(),List.end()); - const char *hash_field[] = { "Checksums-Sha512", - "Checksums-Sha256", - "Checksums-Sha1", - "Files", // historic name - NULL, - }; - const char *hash_type[] = { "Sha512", - "Sha256", - "Sha1", - "md5sum", - NULL, + // map from the Hashsum field to the hashsum function, + // unfortunately this is not a 1:1 mapping from + // Hashes::SupporedHashes as e.g. Files is a historic name for the md5 + const std::pair SourceHashFields[] = { + std::make_pair( "Checksums-Sha512", "SHA512"), + std::make_pair( "Checksums-Sha256", "SHA256"), + std::make_pair( "Checksums-Sha1", "SHA1"), + std::make_pair( "Files", "MD5Sum"), // historic Name }; - for (int i=0; hash_field[i] != NULL; i++) + for (unsigned int i=0; + i < sizeof(SourceHashFields)/sizeof(SourceHashFields[0]); + i++) { - - string Files = Sect.FindS(hash_field[i]); + string Files = Sect.FindS(SourceHashFields[i].first); if (Files.empty() == true) continue; @@ -155,9 +153,13 @@ bool debSrcRecordParser::Files(std::vector &List) if (ParseQuoteWord(C, RawHash) == false || ParseQuoteWord(C, Size) == false || ParseQuoteWord(C, F.Path) == false) - return _error->Error("Error parsing '%s' record", hash_field[i]); + return _error->Error("Error parsing '%s' record", + SourceHashFields[i].first); // assign full hash string - F.Hash = HashString(hash_type[i], RawHash).toStr(); + F.Hash = HashString(SourceHashFields[i].second, RawHash).toStr(); + // API compat hack + if(SourceHashFields[i].second == "MD5Sum") + F.MD5Hash = RawHash; // Parse the size and append the directory F.Size = atoi(Size.c_str());