diff options
Diffstat (limited to 'apt-pkg/deb')
-rw-r--r-- | apt-pkg/deb/debsystem.cc | 62 | ||||
-rw-r--r-- | apt-pkg/deb/debsystem.h | 11 |
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(); |