X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/03e39e592311fd327ea516d31567557830634c86..e2a5ff0c3398380b15a09d810effffc5eb96ea53:/apt-pkg/pkgrecords.cc

diff --git a/apt-pkg/pkgrecords.cc b/apt-pkg/pkgrecords.cc
index 5d982caf3..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.4 1998/11/13 04:23:34 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,41 +9,34 @@
    ##################################################################### */
 									/*}}}*/
 // Include Files							/*{{{*/
-#ifdef __GNUG__
-#pragma implementation "apt-pkg/pkgrecords.h"
-#endif
 #include <apt-pkg/pkgrecords.h>
-#include <apt-pkg/debrecords.h>
+#include <apt-pkg/indexfile.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/configuration.h>
+    
+#include <apti18n.h>   
 									/*}}}*/
 
 // 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++)
    {
-      // We can not initialize if the cache is out of sync.
-      if (I.IsOk() == false)
+      const pkgIndexFile::Type *Type = pkgIndexFile::Type::GetType(I.IndexType());
+      if (Type == 0)
       {
-	 _error->Error("Package file %s is out of sync.",I.FileName());
-	 return;
+         _error->Error(_("Index file type '%s' is not supported"),I.IndexType());
+         return;
       }
-   
-      // Create the file
-      Files[I->ID].File = new FileFd(I.FileName(),FileFd::ReadOnly);
-      if (_error->PendingError() == true)
-	 return;
-      
-      // Create the parser
-      Files[I->ID].Parse = new debRecordParser(*Files[I->ID].File);
-      if (_error->PendingError() == true)
-	 return;
-   }   
+
+      Files[I->ID] = Type->CreatePkgParser(I);
+      if (Files[I->ID] == 0)
+         return;
+   }
 }
 									/*}}}*/
 // Records::~pkgRecords - Destructor					/*{{{*/
@@ -51,7 +44,12 @@ pkgRecords::pkgRecords(pkgCache &Cache) : Cache(Cache), Files(0)
 /* */
 pkgRecords::~pkgRecords()
 {
-   delete [] Files;
+   for ( vector<Parser*>::iterator it = Files.begin();
+     it != Files.end();
+     ++it)
+   {
+      delete *it;
+   }
 }
 									/*}}}*/
 // Records::Lookup - Get a parser for the package version file		/*{{{*/
@@ -59,18 +57,16 @@ pkgRecords::~pkgRecords()
 /* */
 pkgRecords::Parser &pkgRecords::Lookup(pkgCache::VerFileIterator const &Ver)
 {
-   PkgFile &File = Files[Ver.File()->ID];
-   File.Parse->Jump(Ver);
-
-   return *File.Parse;
+   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];
 }
 									/*}}}*/