X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/f55ece0eae40e44dca027528a6f11091279d72b3..e321be5664c981d2e31e14b278b8fbcdcf10849d:/apt-pkg/pkgrecords.cc diff --git a/apt-pkg/pkgrecords.cc b/apt-pkg/pkgrecords.cc index b3105da44..e506de73a 100644 --- a/apt-pkg/pkgrecords.cc +++ b/apt-pkg/pkgrecords.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: pkgrecords.cc,v 1.1 1998/08/09 00:51:35 jgg Exp $ +// $Id: pkgrecords.cc,v 1.8 2003/09/02 04:52:16 mdz Exp $ /* ###################################################################### Package Records - Allows access to complete package description records @@ -9,30 +9,34 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#ifdef __GNUG__ -#pragma implementation "apt-pkg/pkgrecords.h" -#endif #include -#include +#include #include +#include + +#include /*}}}*/ // Records::pkgRecords - Constructor /*{{{*/ // --------------------------------------------------------------------- /* This will create the necessary structures to access the status files */ -pkgRecords::pkgRecords(pkgCache &Cache) : Cache(Cache), Files(0) +pkgRecords::pkgRecords(pkgCache &Cache) : Cache(Cache), + Files(Cache.HeaderP->PackageFileCount) { - Files = new PkgFile[Cache.HeaderP->PackageFileCount]; - for (pkgCache::PkgFileIterator I = Cache.FileBegin(); - I.end() == false; I++) + for (pkgCache::PkgFileIterator I = Cache.FileBegin(); + I.end() == false; I++) { - Files[I->ID].File = new FileFd(I.FileName(),FileFd::ReadOnly); - if (_error->PendingError() == true) - return; - Files[I->ID].Parse = new debRecordParser(*Files[I->ID].File); - if (_error->PendingError() == true) - return; - } + const pkgIndexFile::Type *Type = pkgIndexFile::Type::GetType(I.IndexType()); + if (Type == 0) + { + _error->Error(_("Index file type '%s' is not supported"),I.IndexType()); + return; + } + + Files[I->ID] = Type->CreatePkgParser(I); + if (Files[I->ID] == 0) + return; + } } /*}}}*/ // Records::~pkgRecords - Destructor /*{{{*/ @@ -40,26 +44,29 @@ pkgRecords::pkgRecords(pkgCache &Cache) : Cache(Cache), Files(0) /* */ pkgRecords::~pkgRecords() { - delete [] Files; + for ( vector::iterator it = Files.begin(); + it != Files.end(); + ++it) + { + delete *it; + } } /*}}}*/ // Records::Lookup - Get a parser for the package version file /*{{{*/ // --------------------------------------------------------------------- /* */ -pkgRecords::Parser &pkgRecords::Lookup(pkgCache::VerFileIterator &Ver) -{ - PkgFile &File = Files[Ver.File()->ID]; - File.Parse->Jump(Ver); - - return *File.Parse; +pkgRecords::Parser &pkgRecords::Lookup(pkgCache::VerFileIterator const &Ver) +{ + Files[Ver.File()->ID]->Jump(Ver); + return *Files[Ver.File()->ID]; } /*}}}*/ -// Records::Pkgfile::~PkgFile - Destructor /*{{{*/ +// Records::Lookup - Get a parser for the package description file /*{{{*/ // --------------------------------------------------------------------- /* */ -pkgRecords::PkgFile::~PkgFile() +pkgRecords::Parser &pkgRecords::Lookup(pkgCache::DescFileIterator const &Desc) { - delete Parse; - delete File; + Files[Desc.File()->ID]->Jump(Desc); + return *Files[Desc.File()->ID]; } /*}}}*/