]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/deb/debsystem.cc
replace the per language addendum with a global addendum and
[apt.git] / apt-pkg / deb / debsystem.cc
index 0abd4c8aa50e1651047d7f968b026e69c77f101e..59f826d96ea2bdd722500798ee48d98d82f07bfa 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.
    ##################################################################### */
                                                                        /*}}}*/
 // Include Files                                                       /*{{{*/
-#ifdef __GNUG__
-#pragma implementation "apt-pkg/debsystem.h"
-#endif
-
 #include <apt-pkg/debsystem.h>
 #include <apt-pkg/debversion.h>
 #include <apt-pkg/debindexfile.h>
@@ -21,6 +17,7 @@
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/fileutl.h>
+#include <apti18n.h>
     
 #include <sys/types.h>
 #include <unistd.h>
@@ -37,11 +34,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
@@ -61,11 +67,11 @@ bool debSystem::Lock()
    if (LockFD == -1)
    {
       if (errno == EACCES || errno == EAGAIN)
-        return _error->Error("Unable to lock the administration directory (%s), "
-                             "is another process using it?",AdminDir.c_str());
+        return _error->Error(_("Unable to lock the administration directory (%s), "
+                               "is another process using it?"),AdminDir.c_str());
       else
-        return _error->Error("Unable to lock the administration directory (%s), "
-                             "are you root?",AdminDir.c_str());
+        return _error->Error(_("Unable to lock the administration directory (%s), "
+                               "are you root?"),AdminDir.c_str());
    }
    
    // See if we need to abort with a dirty journal
@@ -73,8 +79,8 @@ bool debSystem::Lock()
    {
       close(LockFD);
       LockFD = -1;
-      return _error->Error("dpkg was interrupted, you must manually "
-                          "run 'dpkg --configure -a' to correct the problem. ");
+      return _error->Error(_("dpkg was interrupted, you must manually "
+                             "run 'dpkg --configure -a' to correct the problem. "));
    }
 
         LockCount++;
@@ -91,7 +97,7 @@ bool debSystem::UnLock(bool NoErrors)
       return false;
    
    if (LockCount < 1)
-      return _error->Error("Not locked");
+      return _error->Error(_("Not locked"));
    if (--LockCount == 0)
    {
       close(LockFD);
@@ -155,7 +161,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 +202,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;
+}
+                                                                       /*}}}*/