// $Id: indexrecords.cc,v 1.1.2.4 2003/12/30 02:11:43 mdz Exp $
/*}}}*/
// Include Files /*{{{*/
-#ifdef __GNUG__
-#pragma implementation "apt-pkg/indexrecords.h"
-#endif
#include <apt-pkg/indexrecords.h>
#include <apt-pkg/tagfile.h>
#include <apt-pkg/error.h>
pkgTagFile TagFile(&Fd, Fd.Size() + 256); // XXX
if (_error->PendingError() == true)
{
- ErrorText = _(("Unable to parse Release file " + Filename).c_str());
+ strprintf(ErrorText, _("Unable to parse Release file %s"),Filename.c_str());
return false;
}
pkgTagSection Section;
if (TagFile.Step(Section) == false)
{
- ErrorText = _(("No sections in Release file " + Filename).c_str());
+ strprintf(ErrorText, _("No sections in Release file %s"), Filename.c_str());
return false;
}
const char *Start, *End;
Section.Get (Start, End, 0);
+
Suite = Section.FindS("Suite");
Dist = Section.FindS("Codename");
-// if (Dist.empty())
-// {
-// ErrorText = _(("No Codename entry in Release file " + Filename).c_str());
-// return false;
-// }
- if (!Section.Find("MD5Sum", Start, End))
+
+ int i;
+ for (i=0;HashString::SupportedHashes()[i] != NULL; i++)
{
- ErrorText = _(("No MD5Sum entry in Release file " + Filename).c_str());
- return false;
+ if (!Section.Find(HashString::SupportedHashes()[i], Start, End))
+ continue;
+
+ string Name;
+ string Hash;
+ size_t Size;
+ while (Start < End)
+ {
+ if (!parseSumData(Start, End, Name, Hash, Size))
+ return false;
+ indexRecords::checkSum *Sum = new indexRecords::checkSum;
+ Sum->MetaKeyFilename = Name;
+ Sum->Hash = HashString(HashString::SupportedHashes()[i],Hash);
+ Sum->Size = Size;
+ Entries[Name] = Sum;
+ }
+ break;
}
- string Name;
- string MD5Hash;
- size_t Size;
- while (Start < End)
+
+ if(HashString::SupportedHashes()[i] == NULL)
{
- if (!parseSumData(Start, End, Name, MD5Hash, Size))
- return false;
- indexRecords::checkSum *Sum = new indexRecords::checkSum;
- Sum->MetaKeyFilename = Name;
- Sum->MD5Hash = MD5Hash;
- Sum->Size = Size;
- Entries[Name] = Sum;
- }
-
+ strprintf(ErrorText, _("No Hash entry in Release file %s"), Filename.c_str());
+ return false;
+ }
+
string Strdate = Section.FindS("Date"); // FIXME: verify this somehow?
return true;
}
+vector<string> indexRecords::MetaKeys()
+{
+ std::vector<std::string> keys;
+ std::map<string,checkSum *>::iterator I = Entries.begin();
+ while(I != Entries.end()) {
+ keys.push_back((*I).first);
+ ++I;
+ }
+ return keys;
+}
+
bool indexRecords::parseSumData(const char *&Start, const char *End,
string &Name, string &Hash, size_t &Size)
{