From 2d11135a1b8e8ee0a21c7932d7ce08a89b354784 Mon Sep 17 00:00:00 2001 From: Arch Librarian Date: Mon, 20 Sep 2004 16:53:34 +0000 Subject: Support for memory-only caching Author: jgg Date: 1999-04-18 06:36:36 GMT Support for memory-only caching --- apt-pkg/cachefile.cc | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 apt-pkg/cachefile.cc (limited to 'apt-pkg/cachefile.cc') diff --git a/apt-pkg/cachefile.cc b/apt-pkg/cachefile.cc new file mode 100644 index 000000000..285eb310f --- /dev/null +++ b/apt-pkg/cachefile.cc @@ -0,0 +1,96 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +// $Id: cachefile.cc,v 1.1 1999/04/18 06:36:36 jgg Exp $ +/* ###################################################################### + + CacheFile - Simple wrapper class for opening, generating and whatnot + + This class implements a simple 2 line mechanism to open various sorts + of caches. It can operate as root, as not root, show progress and so on, + it transparently handles everything necessary. + + ##################################################################### */ + /*}}}*/ +// Include Files /*{{{*/ +#ifdef __GNUG__ +#pragma implementation "apt-pkg/cachefile.h" +#endif + +#include +#include +#include +#include +#include + /*}}}*/ + +// CacheFile::CacheFile - Constructor /*{{{*/ +// --------------------------------------------------------------------- +/* */ +pkgCacheFile::pkgCacheFile() : Map(0), Cache(0), Lock() +{ +} + /*}}}*/ +// CacheFile::~CacheFile - Destructor /*{{{*/ +// --------------------------------------------------------------------- +/* */ +pkgCacheFile::~pkgCacheFile() +{ + delete Cache; + delete Map; + delete Lock; +} + /*}}}*/ +// CacheFile::Open - Open the cache files, creating if necessary /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool pkgCacheFile::Open(OpProgress &Progress,bool WithLock) +{ + if (WithLock == true) + Lock = new pkgDpkgLock; + + if (_error->PendingError() == true) + return false; + + // Read the source list + pkgSourceList List; + if (List.ReadMainList() == false) + return _error->Error("The list of sources could not be read."); + + /* Build all of the caches, using the cache files if we are locking + (ie as root) */ + if (WithLock == true) + { + pkgMakeStatusCache(List,Progress); + Progress.Done(); + if (_error->PendingError() == true) + return _error->Error("The package lists or status file could not be parsed or opened."); + if (_error->empty() == false) + _error->Warning("You may want to run apt-get update to correct theses missing files"); + + // Open the cache file + FileFd File(_config->FindFile("Dir::Cache::pkgcache"),FileFd::ReadOnly); + if (_error->PendingError() == true) + return false; + + Map = new MMap(File,MMap::Public | MMap::ReadOnly); + if (_error->PendingError() == true) + return false; + } + else + { + Map = pkgMakeStatusCacheMem(List,Progress); + Progress.Done(); + if (Map == 0) + return false; + } + + // Create the dependency cache + Cache = new pkgDepCache(*Map,Progress); + if (_error->PendingError() == true) + return false; + + Progress.Done(); + + return true; +} + /*}}}*/ -- cgit v1.2.3