summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/deb/debsystem.cc62
-rw-r--r--apt-pkg/deb/debsystem.h11
2 files changed, 41 insertions, 32 deletions
diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc
index 8619822df..7644bc66b 100644
--- a/apt-pkg/deb/debsystem.cc
+++ b/apt-pkg/deb/debsystem.cc
@@ -26,15 +26,24 @@
debSystem debSys;
+class debSystemPrivate {
+public:
+ debSystemPrivate() : LockFD(-1), LockCount(0), StatusFile(0)
+ {
+ }
+ // For locking support
+ int LockFD;
+ unsigned LockCount;
+
+ debStatusIndex *StatusFile;
+};
+
// System::debSystem - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* */
debSystem::debSystem()
{
- LockFD = -1;
- LockCount = 0;
- StatusFile = 0;
-
+ d = new debSystemPrivate();
Label = "Debian dpkg interface";
VS = &debVS;
}
@@ -44,7 +53,8 @@ debSystem::debSystem()
/* */
debSystem::~debSystem()
{
- delete StatusFile;
+ delete d->StatusFile;
+ delete d;
}
/*}}}*/
// System::Lock - Get the lock /*{{{*/
@@ -54,16 +64,16 @@ debSystem::~debSystem()
bool debSystem::Lock()
{
// Disable file locking
- if (_config->FindB("Debug::NoLocking",false) == true || LockCount > 1)
+ if (_config->FindB("Debug::NoLocking",false) == true || d->LockCount > 1)
{
- LockCount++;
+ d->LockCount++;
return true;
}
// Create the lockfile
string AdminDir = flNotFile(_config->Find("Dir::State::status"));
- LockFD = GetLock(AdminDir + "lock");
- if (LockFD == -1)
+ d->LockFD = GetLock(AdminDir + "lock");
+ if (d->LockFD == -1)
{
if (errno == EACCES || errno == EAGAIN)
return _error->Error(_("Unable to lock the administration directory (%s), "
@@ -76,8 +86,8 @@ bool debSystem::Lock()
// See if we need to abort with a dirty journal
if (CheckUpdates() == true)
{
- close(LockFD);
- LockFD = -1;
+ close(d->LockFD);
+ d->LockFD = -1;
const char *cmd;
if (getenv("SUDO_USER") != NULL)
cmd = "sudo dpkg --configure -a";
@@ -89,7 +99,7 @@ bool debSystem::Lock()
"run '%s' to correct the problem. "), cmd);
}
- LockCount++;
+ d->LockCount++;
return true;
}
@@ -99,15 +109,15 @@ bool debSystem::Lock()
/* */
bool debSystem::UnLock(bool NoErrors)
{
- if (LockCount == 0 && NoErrors == true)
+ if (d->LockCount == 0 && NoErrors == true)
return false;
- if (LockCount < 1)
+ if (d->LockCount < 1)
return _error->Error(_("Not locked"));
- if (--LockCount == 0)
+ if (--d->LockCount == 0)
{
- close(LockFD);
- LockCount = 0;
+ close(d->LockFD);
+ d->LockCount = 0;
}
return true;
@@ -168,9 +178,9 @@ bool debSystem::Initialize(Configuration &Cnf)
Cnf.CndSet("Dir::State::status","/var/lib/dpkg/status");
Cnf.CndSet("Dir::Bin::dpkg","/usr/bin/dpkg");
- if (StatusFile) {
- delete StatusFile;
- StatusFile = 0;
+ if (d->StatusFile) {
+ delete d->StatusFile;
+ d->StatusFile = 0;
}
return true;
@@ -208,9 +218,9 @@ signed debSystem::Score(Configuration const &Cnf)
/* */
bool debSystem::AddStatusFiles(vector<pkgIndexFile *> &List)
{
- if (StatusFile == 0)
- StatusFile = new debStatusIndex(_config->FindFile("Dir::State::status"));
- List.push_back(StatusFile);
+ if (d->StatusFile == 0)
+ d->StatusFile = new debStatusIndex(_config->FindFile("Dir::State::status"));
+ List.push_back(d->StatusFile);
return true;
}
/*}}}*/
@@ -220,11 +230,11 @@ bool debSystem::AddStatusFiles(vector<pkgIndexFile *> &List)
bool debSystem::FindIndex(pkgCache::PkgFileIterator File,
pkgIndexFile *&Found) const
{
- if (StatusFile == 0)
+ if (d->StatusFile == 0)
return false;
- if (StatusFile->FindInCache(*File.Cache()) == File)
+ if (d->StatusFile->FindInCache(*File.Cache()) == File)
{
- Found = StatusFile;
+ Found = d->StatusFile;
return true;
}
diff --git a/apt-pkg/deb/debsystem.h b/apt-pkg/deb/debsystem.h
index 5f9995e5d..7c53e1829 100644
--- a/apt-pkg/deb/debsystem.h
+++ b/apt-pkg/deb/debsystem.h
@@ -12,16 +12,15 @@
#include <apt-pkg/pkgsystem.h>
+class debSystemPrivate;
+
class debStatusIndex;
class debSystem : public pkgSystem
{
- // For locking support
- int LockFD;
- unsigned LockCount;
+ // private d-pointer
+ debSystemPrivate *d;
bool CheckUpdates();
-
- debStatusIndex *StatusFile;
-
+
public:
virtual bool Lock();