Browse Source

apt-pkg/deb/debsystem.{cc,h}: add dpointer

debian/1.8.y
Michael Vogt 11 years ago
parent
commit
b8f90d97fa
  1. 62
      apt-pkg/deb/debsystem.cc
  2. 11
      apt-pkg/deb/debsystem.h

62
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;
}

11
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();

Loading…
Cancel
Save