]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/deb/debsystem.cc
* apt-pkg/depcache.cc:
[apt.git] / apt-pkg / deb / debsystem.cc
index 0abd4c8aa50e1651047d7f968b026e69c77f101e..2d805ea6f8b9a814292011909c650c34e8b174a2 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: debsystem.cc,v 1.2 2001/02/20 07:03:17 jgg Exp $
+// $Id: debsystem.cc,v 1.4 2004/01/26 17:01:53 mdz Exp $
 /* ######################################################################
 
    System - Abstraction for running on different systems.
@@ -37,11 +37,20 @@ debSystem::debSystem()
 {
    LockFD = -1;
    LockCount = 0;
+   StatusFile = 0;
    
    Label = "Debian dpkg interface";
    VS = &debVS;
 }
                                                                        /*}}}*/
+// System::~debSystem - Destructor                                     /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+debSystem::~debSystem()
+{
+   delete StatusFile;
+}
+                                                                       /*}}}*/
 // System::Lock - Get the lock                                         /*{{{*/
 // ---------------------------------------------------------------------
 /* This mirrors the operations dpkg does when it starts up. Note the
@@ -155,7 +164,12 @@ bool debSystem::Initialize(Configuration &Cnf)
    Cnf.CndSet("Dir::State::userstatus","status.user"); // Defunct
    Cnf.CndSet("Dir::State::status","/var/lib/dpkg/status");
    Cnf.CndSet("Dir::Bin::dpkg","/usr/bin/dpkg");
-   
+
+   if (StatusFile) {
+     delete StatusFile;
+     StatusFile = 0;
+   }
+
    return true;
 }
                                                                        /*}}}*/
@@ -191,7 +205,26 @@ signed debSystem::Score(Configuration const &Cnf)
 /* */
 bool debSystem::AddStatusFiles(vector<pkgIndexFile *> &List)
 {
-   List.push_back(new debStatusIndex(_config->FindFile("Dir::State::status")));
+   if (StatusFile == 0)
+      StatusFile = new debStatusIndex(_config->FindFile("Dir::State::status"));
+   List.push_back(StatusFile);
    return true;
 }
                                                                        /*}}}*/
+// System::FindIndex - Get an index file for status files              /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool debSystem::FindIndex(pkgCache::PkgFileIterator File,
+                         pkgIndexFile *&Found) const
+{
+   if (StatusFile == 0)
+      return false;
+   if (StatusFile->FindInCache(*File.Cache()) == File)
+   {
+      Found = StatusFile;
+      return true;
+   }
+   
+   return false;
+}
+                                                                       /*}}}*/