using namespace std;
+static void printHashSumComparision(std::string const &URI, HashStringList const &Expected, HashStringList const &Actual) /*{{{*/
+{
+ if (_config->FindB("Debug::Acquire::HashSumMismatch", false) == false)
+ return;
+ std::cerr << std::endl << URI << ":" << std::endl << " Expected Hash: " << std::endl;
+ for (HashStringList::const_iterator hs = Expected.begin(); hs != Expected.end(); ++hs)
+ std::cerr << "\t- " << hs->toStr() << std::endl;
+ std::cerr << " Actual Hash: " << std::endl;
+ for (HashStringList::const_iterator hs = Actual.begin(); hs != Actual.end(); ++hs)
+ std::cerr << "\t- " << hs->toStr() << std::endl;
+}
+ /*}}}*/
+
// Acquire::Item::Item - Constructor /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-pkgAcquire::Item::Item(pkgAcquire *Owner) : Owner(Owner), FileSize(0),
- PartialSize(0), Mode(0), ID(0), Complete(false),
- Local(false), QueueCounter(0)
+pkgAcquire::Item::Item(pkgAcquire *Owner, HashStringList const &ExpectedHashes) :
+ Owner(Owner), FileSize(0), PartialSize(0), Mode(0), ID(0), Complete(false),
+ Local(false), QueueCounter(0), ExpectedAdditionalItems(0),
+ ExpectedHashes(ExpectedHashes)
{
Owner->Add(this);
Status = StatIdle;
// Acquire::Item::Done - Item downloaded OK /*{{{*/
// ---------------------------------------------------------------------
/* */
-void pkgAcquire::Item::Done(string Message,unsigned long long Size,string /*Hash*/,
+void pkgAcquire::Item::Done(string Message,unsigned long long Size,HashStringList const &/*Hash*/,
pkgAcquire::MethodConfig * /*Cnf*/)
{
// We just downloaded something..
possibly query additional files */
pkgAcqSubIndex::pkgAcqSubIndex(pkgAcquire *Owner, string const &URI,
string const &URIDesc, string const &ShortDesc,
- HashString const &ExpectedHash)
- : Item(Owner), ExpectedHash(ExpectedHash)
+ HashStringList const &ExpectedHashes)
+ : Item(Owner, ExpectedHashes)
{
/* XXX: Beware: Currently this class does nothing (of value) anymore ! */
Debug = _config->FindB("Debug::pkgAcquire::SubIndex",false);
// AcqSubIndex::Custom600Headers - Insert custom request headers /*{{{*/
// ---------------------------------------------------------------------
/* The only header we use is the last-modified header. */
-string pkgAcqSubIndex::Custom600Headers()
+string pkgAcqSubIndex::Custom600Headers() const
{
string Final = _config->FindDir("Dir::State::lists");
Final += URItoFileName(Desc.URI);
// No good Index is provided
}
/*}}}*/
-void pkgAcqSubIndex::Done(string Message,unsigned long long Size,string Md5Hash, /*{{{*/
+void pkgAcqSubIndex::Done(string Message,unsigned long long Size,HashStringList const &Hashes, /*{{{*/
pkgAcquire::MethodConfig *Cnf)
{
if(Debug)
return;
}
- Item::Done(Message,Size,Md5Hash,Cnf);
+ Item::Done(Message, Size, Hashes, Cnf);
string FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(Desc.URI);
* the original packages file
*/
pkgAcqDiffIndex::pkgAcqDiffIndex(pkgAcquire *Owner,
- string URI,string URIDesc,string ShortDesc,
- HashString ExpectedHash)
- : Item(Owner), RealURI(URI), ExpectedHash(ExpectedHash),
- Description(URIDesc)
+ IndexTarget const * const Target,
+ HashStringList const &ExpectedHashes,
+ indexRecords *MetaIndexParser)
+ : pkgAcqBaseIndex(Owner, Target, ExpectedHashes, MetaIndexParser)
{
Debug = _config->FindB("Debug::pkgAcquire::Diffs",false);
- Desc.Description = URIDesc + "/DiffIndex";
+ RealURI = Target->URI;
Desc.Owner = this;
- Desc.ShortDesc = ShortDesc;
- Desc.URI = URI + ".diff/Index";
+ Desc.Description = Target->Description + "/DiffIndex";
+ Desc.ShortDesc = Target->ShortDesc;
+ Desc.URI = Target->URI + ".diff/Index";
DestFile = _config->FindDir("Dir::State::lists") + "partial/";
- DestFile += URItoFileName(URI) + string(".DiffIndex");
+ DestFile += URItoFileName(Target->URI) + string(".DiffIndex");
if(Debug)
std::clog << "pkgAcqDiffIndex: " << Desc.URI << std::endl;
// AcqIndex::Custom600Headers - Insert custom request headers /*{{{*/
// ---------------------------------------------------------------------
/* The only header we use is the last-modified header. */
-string pkgAcqDiffIndex::Custom600Headers()
+string pkgAcqDiffIndex::Custom600Headers() const
{
string Final = _config->FindDir("Dir::State::lists");
Final += URItoFileName(RealURI) + string(".IndexDiff");
std::clog << "Package file is up-to-date" << std::endl;
// list cleanup needs to know that this file as well as the already
// present index is ours, so we create an empty diff to save it for us
- new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc,
- ExpectedHash, ServerSha1, available_patches);
+ new pkgAcqIndexDiffs(Owner, Target, ExpectedHashes, MetaIndexParser,
+ ServerSha1, available_patches);
return true;
}
else
}
if (pdiff_merge == false)
- new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc,
- ExpectedHash, ServerSha1, available_patches);
- else
+ {
+ new pkgAcqIndexDiffs(Owner, Target, ExpectedHashes, MetaIndexParser,
+ ServerSha1, available_patches);
+ }
+ else
{
std::vector<pkgAcqIndexMergeDiffs*> *diffs = new std::vector<pkgAcqIndexMergeDiffs*>(available_patches.size());
for(size_t i = 0; i < available_patches.size(); ++i)
- (*diffs)[i] = new pkgAcqIndexMergeDiffs(Owner, RealURI, Description, Desc.ShortDesc, ExpectedHash,
- available_patches[i], diffs);
+ (*diffs)[i] = new pkgAcqIndexMergeDiffs(Owner, Target,
+ ExpectedHashes,
+ MetaIndexParser,
+ available_patches[i],
+ diffs);
}
Complete = false;
std::clog << "pkgAcqDiffIndex failed: " << Desc.URI << " with " << Message << std::endl
<< "Falling back to normal index file acquire" << std::endl;
- new pkgAcqIndex(Owner, RealURI, Description, Desc.ShortDesc,
- ExpectedHash);
+ new pkgAcqIndex(Owner, Target, ExpectedHashes, MetaIndexParser);
Complete = false;
Status = StatDone;
Dequeue();
}
/*}}}*/
-void pkgAcqDiffIndex::Done(string Message,unsigned long long Size,string Md5Hash, /*{{{*/
+void pkgAcqDiffIndex::Done(string Message,unsigned long long Size,HashStringList const &Hashes, /*{{{*/
pkgAcquire::MethodConfig *Cnf)
{
if(Debug)
std::clog << "pkgAcqDiffIndex::Done(): " << Desc.URI << std::endl;
- Item::Done(Message,Size,Md5Hash,Cnf);
+ Item::Done(Message, Size, Hashes, Cnf);
string FinalFile;
FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(RealURI);
* for each diff and the index
*/
pkgAcqIndexDiffs::pkgAcqIndexDiffs(pkgAcquire *Owner,
- string URI,string URIDesc,string ShortDesc,
- HashString ExpectedHash,
+ struct IndexTarget const * const Target,
+ HashStringList const &ExpectedHashes,
+ indexRecords *MetaIndexParser,
string ServerSha1,
vector<DiffInfo> diffs)
- : Item(Owner), RealURI(URI), ExpectedHash(ExpectedHash),
+ : pkgAcqBaseIndex(Owner, Target, ExpectedHashes, MetaIndexParser),
available_patches(diffs), ServerSha1(ServerSha1)
{
DestFile = _config->FindDir("Dir::State::lists") + "partial/";
- DestFile += URItoFileName(URI);
+ DestFile += URItoFileName(Target->URI);
Debug = _config->FindB("Debug::pkgAcquire::Diffs",false);
- Description = URIDesc;
+ RealURI = Target->URI;
Desc.Owner = this;
- Desc.ShortDesc = ShortDesc;
+ Description = Target->Description;
+ Desc.ShortDesc = Target->ShortDesc;
if(available_patches.empty() == true)
{
if(Debug)
std::clog << "pkgAcqIndexDiffs failed: " << Desc.URI << " with " << Message << std::endl
<< "Falling back to normal index file acquire" << std::endl;
- new pkgAcqIndex(Owner, RealURI, Description,Desc.ShortDesc,
- ExpectedHash);
+ new pkgAcqIndex(Owner, Target, ExpectedHashes, MetaIndexParser);
Finish();
}
/*}}}*/
DestFile = _config->FindDir("Dir::State::lists");
DestFile += URItoFileName(RealURI);
- if(!ExpectedHash.empty() && !ExpectedHash.VerifyFile(DestFile))
+ if(HashSums().usable() && !HashSums().VerifyFile(DestFile))
{
RenameOnError(HashSumMismatch);
Dequeue();
return true;
}
/*}}}*/
-void pkgAcqIndexDiffs::Done(string Message,unsigned long long Size,string Md5Hash, /*{{{*/
+void pkgAcqIndexDiffs::Done(string Message,unsigned long long Size, HashStringList const &Hashes, /*{{{*/
pkgAcquire::MethodConfig *Cnf)
{
if(Debug)
std::clog << "pkgAcqIndexDiffs::Done(): " << Desc.URI << std::endl;
- Item::Done(Message,Size,Md5Hash,Cnf);
+ Item::Done(Message, Size, Hashes, Cnf);
string FinalFile;
FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(RealURI);
// see if there is more to download
if(available_patches.empty() == false) {
- new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc,
- ExpectedHash, ServerSha1, available_patches);
+ new pkgAcqIndexDiffs(Owner, Target,
+ ExpectedHashes, MetaIndexParser,
+ ServerSha1, available_patches);
return Finish();
} else
return Finish(true);
/*}}}*/
// AcqIndexMergeDiffs::AcqIndexMergeDiffs - Constructor /*{{{*/
pkgAcqIndexMergeDiffs::pkgAcqIndexMergeDiffs(pkgAcquire *Owner,
- string const &URI, string const &URIDesc,
- string const &ShortDesc, HashString const &ExpectedHash,
- DiffInfo const &patch,
- std::vector<pkgAcqIndexMergeDiffs*> const * const allPatches)
- : Item(Owner), RealURI(URI), ExpectedHash(ExpectedHash),
- patch(patch),allPatches(allPatches), State(StateFetchDiff)
+ struct IndexTarget const * const Target,
+ HashStringList const &ExpectedHashes,
+ indexRecords *MetaIndexParser,
+ DiffInfo const &patch,
+ std::vector<pkgAcqIndexMergeDiffs*> const * const allPatches)
+ : pkgAcqBaseIndex(Owner, Target, ExpectedHashes, MetaIndexParser),
+ patch(patch), allPatches(allPatches), State(StateFetchDiff)
{
DestFile = _config->FindDir("Dir::State::lists") + "partial/";
- DestFile += URItoFileName(URI);
+ DestFile += URItoFileName(Target->URI);
Debug = _config->FindB("Debug::pkgAcquire::Diffs",false);
- Description = URIDesc;
+ RealURI = Target->URI;
Desc.Owner = this;
- Desc.ShortDesc = ShortDesc;
+ Description = Target->Description;
+ Desc.ShortDesc = Target->ShortDesc;
Desc.URI = RealURI + ".diff/" + patch.file + ".gz";
Desc.Description = Description + " " + patch.file + string(".pdiff");
// first failure means we should fallback
State = StateErrorDiff;
std::clog << "Falling back to normal index file acquire" << std::endl;
- new pkgAcqIndex(Owner, RealURI, Description,Desc.ShortDesc,
- ExpectedHash);
+ new pkgAcqIndex(Owner, Target, ExpectedHashes, MetaIndexParser);
}
/*}}}*/
-void pkgAcqIndexMergeDiffs::Done(string Message,unsigned long long Size,string Md5Hash, /*{{{*/
+void pkgAcqIndexMergeDiffs::Done(string Message,unsigned long long Size,HashStringList const &Hashes, /*{{{*/
pkgAcquire::MethodConfig *Cnf)
{
if(Debug)
std::clog << "pkgAcqIndexMergeDiffs::Done(): " << Desc.URI << std::endl;
- Item::Done(Message,Size,Md5Hash,Cnf);
+ Item::Done(Message,Size,Hashes,Cnf);
string const FinalFile = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI);
else if (State == StateApplyDiff)
{
// see if we really got the expected file
- if(!ExpectedHash.empty() && !ExpectedHash.VerifyFile(DestFile))
+ if(ExpectedHashes.usable() && !ExpectedHashes.VerifyFile(DestFile))
{
RenameOnError(HashSumMismatch);
return;
instantiated to fetch the revision file */
pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner,
string URI,string URIDesc,string ShortDesc,
- HashString ExpectedHash, string comprExt)
- : Item(Owner), RealURI(URI), ExpectedHash(ExpectedHash)
+ HashStringList const &ExpectedHash, string comprExt)
+ : pkgAcqBaseIndex(Owner, NULL, ExpectedHash, NULL), RealURI(URI)
{
if(comprExt.empty() == true)
{
Init(URI, URIDesc, ShortDesc);
}
pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner, IndexTarget const *Target,
- HashString const &ExpectedHash, indexRecords const *MetaIndexParser)
- : Item(Owner), RealURI(Target->URI), ExpectedHash(ExpectedHash)
+ HashStringList const &ExpectedHash,
+ indexRecords *MetaIndexParser)
+ : pkgAcqBaseIndex(Owner, Target, ExpectedHash, MetaIndexParser),
+ RealURI(Target->URI)
{
// autoselect the compression method
std::vector<std::string> types = APT::Configuration::getCompressionTypes();
CompressionExtension = "";
- if (ExpectedHash.empty() == false)
+ if (ExpectedHashes.usable())
{
for (std::vector<std::string>::const_iterator t = types.begin(); t != types.end(); ++t)
if (*t == "uncompressed" || MetaIndexParser->Exists(string(Target->MetaKey).append(".").append(*t)) == true)
DestFile += URItoFileName(URI);
std::string const comprExt = CompressionExtension.substr(0, CompressionExtension.find(' '));
+ std::string MetaKey;
if (comprExt == "uncompressed")
+ {
Desc.URI = URI;
+ if(Target)
+ MetaKey = string(Target->MetaKey);
+ }
else
+ {
Desc.URI = URI + '.' + comprExt;
+ if(Target)
+ MetaKey = string(Target->MetaKey) + '.' + comprExt;
+ }
+
+ // load the filesize
+ if(MetaIndexParser)
+ {
+ indexRecords::checkSum *Record = MetaIndexParser->Lookup(MetaKey);
+ if(Record)
+ FileSize = Record->Size;
+
+ InitByHashIfNeeded(MetaKey);
+ }
Desc.Description = URIDesc;
Desc.Owner = this;
QueueURI(Desc);
}
/*}}}*/
+// AcqIndex::AdjustForByHash - modify URI for by-hash support /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgAcqIndex::InitByHashIfNeeded(const std::string MetaKey)
+{
+ // TODO:
+ // - (maybe?) add support for by-hash into the sources.list as flag
+ // - make apt-ftparchive generate the hashes (and expire?)
+ std::string HostKnob = "APT::Acquire::" + ::URI(Desc.URI).Host + "::By-Hash";
+ if(_config->FindB("APT::Acquire::By-Hash", false) == true ||
+ _config->FindB(HostKnob, false) == true ||
+ MetaIndexParser->GetSupportsAcquireByHash())
+ {
+ indexRecords::checkSum *Record = MetaIndexParser->Lookup(MetaKey);
+ if(Record)
+ {
+ // FIXME: should we really use the best hash here? or a fixed one?
+ const HashString *TargetHash = Record->Hashes.find("");
+ std::string ByHash = "/by-hash/" + TargetHash->HashType() + "/" + TargetHash->HashValue();
+ size_t trailing_slash = Desc.URI.find_last_of("/");
+ Desc.URI = Desc.URI.replace(
+ trailing_slash,
+ Desc.URI.substr(trailing_slash+1).size()+1,
+ ByHash);
+ } else {
+ _error->Warning(
+ "Fetching ByHash requested but can not find record for %s",
+ MetaKey.c_str());
+ }
+ }
+}
+ /*}}}*/
// AcqIndex::Custom600Headers - Insert custom request headers /*{{{*/
// ---------------------------------------------------------------------
/* The only header we use is the last-modified header. */
-string pkgAcqIndex::Custom600Headers()
+string pkgAcqIndex::Custom600Headers() const
{
string Final = _config->FindDir("Dir::State::lists");
Final += URItoFileName(RealURI);
to the uncompressed version of the file. If this is so the file
is copied into the partial directory. In all other cases the file
is decompressed with a gzip uri. */
-void pkgAcqIndex::Done(string Message,unsigned long long Size,string Hash,
+void pkgAcqIndex::Done(string Message,unsigned long long Size,HashStringList const &Hashes,
pkgAcquire::MethodConfig *Cfg)
{
- Item::Done(Message,Size,Hash,Cfg);
+ Item::Done(Message,Size,Hashes,Cfg);
if (Decompression == true)
{
- if (_config->FindB("Debug::pkgAcquire::Auth", false))
- {
- std::cerr << std::endl << RealURI << ": Computed Hash: " << Hash;
- std::cerr << " Expected Hash: " << ExpectedHash.toStr() << std::endl;
- }
-
- if (!ExpectedHash.empty() && ExpectedHash.toStr() != Hash)
+ if (ExpectedHashes.usable() && ExpectedHashes != Hashes)
{
RenameOnError(HashSumMismatch);
+ printHashSumComparision(RealURI, ExpectedHashes, Hashes);
return;
}
FinalFile += URItoFileName(RealURI);
Rename(DestFile,FinalFile);
chmod(FinalFile.c_str(),0644);
-
+
/* We restore the original name to DestFile so that the clean operation
will work OK */
DestFile = _config->FindDir("Dir::State::lists") + "partial/";
// Remove the compressed version.
if (Erase == true)
unlink(DestFile.c_str());
+
return;
}
/* The Translation file is added to the queue */
pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire *Owner,
string URI,string URIDesc,string ShortDesc)
- : pkgAcqIndex(Owner, URI, URIDesc, ShortDesc, HashString(), "")
+ : pkgAcqIndex(Owner, URI, URIDesc, ShortDesc, HashStringList(), "")
{
}
-pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire *Owner, IndexTarget const *Target,
- HashString const &ExpectedHash, indexRecords const *MetaIndexParser)
- : pkgAcqIndex(Owner, Target, ExpectedHash, MetaIndexParser)
+pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire *Owner, IndexTarget const * const Target,
+ HashStringList const &ExpectedHashes, indexRecords *MetaIndexParser)
+ : pkgAcqIndex(Owner, Target, ExpectedHashes, MetaIndexParser)
{
+ // load the filesize
+ indexRecords::checkSum *Record = MetaIndexParser->Lookup(string(Target->MetaKey));
+ if(Record)
+ FileSize = Record->Size;
}
/*}}}*/
// AcqIndexTrans::Custom600Headers - Insert custom request headers /*{{{*/
// ---------------------------------------------------------------------
-string pkgAcqIndexTrans::Custom600Headers()
+string pkgAcqIndexTrans::Custom600Headers() const
{
string Final = _config->FindDir("Dir::State::lists");
Final += URItoFileName(RealURI);
string MetaIndexShortDesc,
const vector<IndexTarget*>* IndexTargets,
indexRecords* MetaIndexParser) :
- Item(Owner), RealURI(URI), MetaIndexURI(MetaIndexURI),
+ Item(Owner, HashStringList()), RealURI(URI), MetaIndexURI(MetaIndexURI),
MetaIndexURIDesc(MetaIndexURIDesc), MetaIndexShortDesc(MetaIndexShortDesc),
MetaIndexParser(MetaIndexParser), IndexTargets(IndexTargets)
{
Rename(Final,LastGoodSig);
}
+ // we expect the indextargets + one additional Release file
+ ExpectedAdditionalItems = IndexTargets->size() + 1;
+
QueueURI(Desc);
}
/*}}}*/
// pkgAcqMetaSig::Custom600Headers - Insert custom request headers /*{{{*/
// ---------------------------------------------------------------------
/* The only header we use is the last-modified header. */
-string pkgAcqMetaSig::Custom600Headers()
+string pkgAcqMetaSig::Custom600Headers() const
{
struct stat Buf;
if (stat(LastGoodSig.c_str(),&Buf) != 0)
return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
}
-void pkgAcqMetaSig::Done(string Message,unsigned long long Size,string MD5,
+void pkgAcqMetaSig::Done(string Message,unsigned long long Size, HashStringList const &Hashes,
pkgAcquire::MethodConfig *Cfg)
{
- Item::Done(Message,Size,MD5,Cfg);
+ Item::Done(Message, Size, Hashes, Cfg);
string FileName = LookupTag(Message,"Filename");
if (FileName.empty() == true)
Complete = true;
+ // at this point pkgAcqMetaIndex takes over
+ ExpectedAdditionalItems = 0;
+
// put the last known good file back on i-m-s hit (it will
// be re-verified again)
// Else do nothing, we have the new file in DestFile then
{
string Final = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI);
+ // at this point pkgAcqMetaIndex takes over
+ ExpectedAdditionalItems = 0;
+
// if we get a network error we fail gracefully
if(Status == StatTransientNetworkError)
{
pkgAcqMetaIndex::pkgAcqMetaIndex(pkgAcquire *Owner, /*{{{*/
string URI,string URIDesc,string ShortDesc,
string SigFile,
- const vector<struct IndexTarget*>* IndexTargets,
+ const vector<IndexTarget*>* IndexTargets,
indexRecords* MetaIndexParser) :
- Item(Owner), RealURI(URI), SigFile(SigFile), IndexTargets(IndexTargets),
+ Item(Owner, HashStringList()), RealURI(URI), SigFile(SigFile), IndexTargets(IndexTargets),
MetaIndexParser(MetaIndexParser), AuthPass(false), IMSHit(false)
{
DestFile = _config->FindDir("Dir::State::lists") + "partial/";
Desc.ShortDesc = ShortDesc;
Desc.URI = URI;
+ // we expect more item
+ ExpectedAdditionalItems = IndexTargets->size();
+
QueueURI(Desc);
}
/*}}}*/
// pkgAcqMetaIndex::Custom600Headers - Insert custom request headers /*{{{*/
// ---------------------------------------------------------------------
/* The only header we use is the last-modified header. */
-string pkgAcqMetaIndex::Custom600Headers()
+string pkgAcqMetaIndex::Custom600Headers() const
{
string Final = _config->FindDir("Dir::State::lists");
Final += URItoFileName(RealURI);
return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
}
/*}}}*/
-void pkgAcqMetaIndex::Done(string Message,unsigned long long Size,string Hash, /*{{{*/
+void pkgAcqMetaIndex::Done(string Message,unsigned long long Size,HashStringList const &Hashes, /*{{{*/
pkgAcquire::MethodConfig *Cfg)
{
- Item::Done(Message,Size,Hash,Cfg);
+ Item::Done(Message,Size,Hashes,Cfg);
// MetaIndexes are done in two passes: one to download the
// metaindex with an appropriate method, and a second to verify it
}
else
{
+ // FIXME: move this into pkgAcqMetaClearSig::Done on the next
+ // ABI break
+
+ // if we expect a ClearTextSignature (InRelase), ensure that
+ // this is what we get and if not fail to queue a
+ // Release/Release.gpg, see #346386
+ if (SigFile == DestFile && !StartsWithGPGClearTextSignature(DestFile))
+ {
+ Failed(Message, Cfg);
+ return;
+ }
+
// There was a signature file, so pass it to gpgv for
// verification
-
if (_config->FindB("Debug::pkgAcquire::Auth", false))
std::cerr << "Metaindex acquired, queueing gpg verification ("
<< SigFile << "," << DestFile << ")\n";
}
}
- for (vector <struct IndexTarget*>::const_iterator Target = IndexTargets->begin();
+ // at this point the real Items are loaded in the fetcher
+ ExpectedAdditionalItems = 0;
+ for (vector <IndexTarget*>::const_iterator Target = IndexTargets->begin();
Target != IndexTargets->end();
++Target)
{
- HashString ExpectedIndexHash;
+ HashStringList ExpectedIndexHashes;
const indexRecords::checkSum *Record = MetaIndexParser->Lookup((*Target)->MetaKey);
bool compressedAvailable = false;
if (Record == NULL)
}
else
{
- ExpectedIndexHash = Record->Hash;
+ ExpectedIndexHashes = Record->Hashes;
if (_config->FindB("Debug::pkgAcquire::Auth", false))
{
- std::cerr << "Queueing: " << (*Target)->URI << std::endl;
- std::cerr << "Expected Hash: " << ExpectedIndexHash.toStr() << std::endl;
+ std::cerr << "Queueing: " << (*Target)->URI << std::endl
+ << "Expected Hash:" << std::endl;
+ for (HashStringList::const_iterator hs = ExpectedIndexHashes.begin(); hs != ExpectedIndexHashes.end(); ++hs)
+ std::cerr << "\t- " << hs->toStr() << std::endl;
std::cerr << "For: " << Record->MetaKeyFilename << std::endl;
}
- if (verify == true && ExpectedIndexHash.empty() == true && (*Target)->IsOptional() == false)
+ if (verify == true && ExpectedIndexHashes.empty() == true && (*Target)->IsOptional() == false)
{
Status = StatAuthError;
strprintf(ErrorText, _("Unable to find hash sum for '%s' in Release file"), (*Target)->MetaKey.c_str());
{
if ((*Target)->IsSubIndex() == true)
new pkgAcqSubIndex(Owner, (*Target)->URI, (*Target)->Description,
- (*Target)->ShortDesc, ExpectedIndexHash);
+ (*Target)->ShortDesc, ExpectedIndexHashes);
else if (transInRelease == false || Record != NULL || compressedAvailable == true)
{
if (_config->FindB("Acquire::PDiffs",true) == true && transInRelease == true &&
MetaIndexParser->Exists((*Target)->MetaKey + ".diff/Index") == true)
- new pkgAcqDiffIndex(Owner, (*Target)->URI, (*Target)->Description,
- (*Target)->ShortDesc, ExpectedIndexHash);
+ new pkgAcqDiffIndex(Owner, *Target, ExpectedIndexHashes, MetaIndexParser);
else
- new pkgAcqIndexTrans(Owner, *Target, ExpectedIndexHash, MetaIndexParser);
+ new pkgAcqIndexTrans(Owner, *Target, ExpectedIndexHashes, MetaIndexParser);
}
continue;
}
instead, but passing the required info to it is to much hassle */
if(_config->FindB("Acquire::PDiffs",true) == true && (verify == false ||
MetaIndexParser->Exists((*Target)->MetaKey + ".diff/Index") == true))
- new pkgAcqDiffIndex(Owner, (*Target)->URI, (*Target)->Description,
- (*Target)->ShortDesc, ExpectedIndexHash);
+ new pkgAcqDiffIndex(Owner, *Target, ExpectedIndexHashes, MetaIndexParser);
else
- new pkgAcqIndex(Owner, *Target, ExpectedIndexHash, MetaIndexParser);
+ new pkgAcqIndex(Owner, *Target, ExpectedIndexHashes, MetaIndexParser);
}
}
/*}}}*/
string const &URI, string const &URIDesc, string const &ShortDesc,
string const &MetaIndexURI, string const &MetaIndexURIDesc, string const &MetaIndexShortDesc,
string const &MetaSigURI, string const &MetaSigURIDesc, string const &MetaSigShortDesc,
- const vector<struct IndexTarget*>* IndexTargets,
+ const vector<IndexTarget*>* IndexTargets,
indexRecords* MetaIndexParser) :
pkgAcqMetaIndex(Owner, URI, URIDesc, ShortDesc, "", IndexTargets, MetaIndexParser),
MetaIndexURI(MetaIndexURI), MetaIndexURIDesc(MetaIndexURIDesc), MetaIndexShortDesc(MetaIndexShortDesc),
{
SigFile = DestFile;
+ // index targets + (worst case:) Release/Release.gpg
+ ExpectedAdditionalItems = IndexTargets->size() + 2;
+
+
// keep the old InRelease around in case of transistent network errors
string const Final = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI);
if (RealFileExists(Final) == true)
// pkgAcqMetaClearSig::Custom600Headers - Insert custom request headers /*{{{*/
// ---------------------------------------------------------------------
// FIXME: this can go away once the InRelease file is used widely
-string pkgAcqMetaClearSig::Custom600Headers()
+string pkgAcqMetaClearSig::Custom600Headers() const
{
string Final = _config->FindDir("Dir::State::lists");
Final += URItoFileName(RealURI);
/*}}}*/
void pkgAcqMetaClearSig::Failed(string Message,pkgAcquire::MethodConfig *Cnf) /*{{{*/
{
+ // we failed, we will not get additional items from this method
+ ExpectedAdditionalItems = 0;
+
if (AuthPass == false)
{
// Remove the 'old' InRelease file if we try Release.gpg now as otherwise
pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
pkgRecords *Recs,pkgCache::VerIterator const &Version,
string &StoreFilename) :
- Item(Owner), Version(Version), Sources(Sources), Recs(Recs),
+ Item(Owner, HashStringList()), Version(Version), Sources(Sources), Recs(Recs),
StoreFilename(StoreFilename), Vf(Version.FileList()),
Trusted(false)
{
checking later. */
bool pkgAcqArchive::QueueNext()
{
- string const ForceHash = _config->Find("Acquire::ForceHash");
for (; Vf.end() == false; ++Vf)
{
// Ignore not source sources
pkgRecords::Parser &Parse = Recs->Lookup(Vf);
if (_error->PendingError() == true)
return false;
-
+
string PkgFile = Parse.FileName();
- if (ForceHash.empty() == false)
- {
- if(stringcasecmp(ForceHash, "sha512") == 0)
- ExpectedHash = HashString("SHA512", Parse.SHA512Hash());
- else if(stringcasecmp(ForceHash, "sha256") == 0)
- ExpectedHash = HashString("SHA256", Parse.SHA256Hash());
- else if (stringcasecmp(ForceHash, "sha1") == 0)
- ExpectedHash = HashString("SHA1", Parse.SHA1Hash());
- else
- ExpectedHash = HashString("MD5Sum", Parse.MD5Hash());
- }
- else
- {
- string Hash;
- if ((Hash = Parse.SHA512Hash()).empty() == false)
- ExpectedHash = HashString("SHA512", Hash);
- else if ((Hash = Parse.SHA256Hash()).empty() == false)
- ExpectedHash = HashString("SHA256", Hash);
- else if ((Hash = Parse.SHA1Hash()).empty() == false)
- ExpectedHash = HashString("SHA1", Hash);
- else
- ExpectedHash = HashString("MD5Sum", Parse.MD5Hash());
- }
+ ExpectedHashes = Parse.Hashes();
+
if (PkgFile.empty() == true)
return _error->Error(_("The package index files are corrupted. No Filename: "
"field for package %s."),
// AcqArchive::Done - Finished fetching /*{{{*/
// ---------------------------------------------------------------------
/* */
-void pkgAcqArchive::Done(string Message,unsigned long long Size,string CalcHash,
+void pkgAcqArchive::Done(string Message,unsigned long long Size, HashStringList const &CalcHashes,
pkgAcquire::MethodConfig *Cfg)
{
- Item::Done(Message,Size,CalcHash,Cfg);
+ Item::Done(Message, Size, CalcHashes, Cfg);
// Check the size
if (Size != Version->Size)
RenameOnError(SizeMismatch);
return;
}
-
- // Check the hash
- if(ExpectedHash.toStr() != CalcHash)
+
+ // FIXME: could this empty() check impose *any* sort of security issue?
+ if(ExpectedHashes.usable() && ExpectedHashes != CalcHashes)
{
RenameOnError(HashSumMismatch);
+ printHashSumComparision(DestFile, ExpectedHashes, CalcHashes);
return;
}
/*}}}*/
// AcqArchive::IsTrusted - Determine whether this archive comes from a trusted source /*{{{*/
// ---------------------------------------------------------------------
-APT_PURE bool pkgAcqArchive::IsTrusted()
+APT_PURE bool pkgAcqArchive::IsTrusted() const
{
return Trusted;
}
// AcqFile::pkgAcqFile - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* The file is added to the queue */
-pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI,string Hash,
+pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI, HashStringList const &Hashes,
unsigned long long Size,string Dsc,string ShortDesc,
const string &DestDir, const string &DestFilename,
bool IsIndexFile) :
- Item(Owner), ExpectedHash(Hash), IsIndexFile(IsIndexFile)
+ Item(Owner, Hashes), IsIndexFile(IsIndexFile)
{
Retries = _config->FindI("Acquire::Retries",0);
// AcqFile::Done - Item downloaded OK /*{{{*/
// ---------------------------------------------------------------------
/* */
-void pkgAcqFile::Done(string Message,unsigned long long Size,string CalcHash,
+void pkgAcqFile::Done(string Message,unsigned long long Size,HashStringList const &CalcHashes,
pkgAcquire::MethodConfig *Cnf)
{
- Item::Done(Message,Size,CalcHash,Cnf);
+ Item::Done(Message,Size,CalcHashes,Cnf);
// Check the hash
- if(!ExpectedHash.empty() && ExpectedHash.toStr() != CalcHash)
+ if(ExpectedHashes.usable() && ExpectedHashes != CalcHashes)
{
RenameOnError(HashSumMismatch);
+ printHashSumComparision(DestFile, ExpectedHashes, CalcHashes);
return;
}
// AcqIndex::Custom600Headers - Insert custom request headers /*{{{*/
// ---------------------------------------------------------------------
/* The only header we use is the last-modified header. */
-string pkgAcqFile::Custom600Headers()
+string pkgAcqFile::Custom600Headers() const
{
if (IsIndexFile)
return "\nIndex-File: true";
class indexRecords;
class pkgRecords;
class pkgSourceList;
+class IndexTarget;
/** \brief Represents the process by which a pkgAcquire object should {{{
* retrieve a file or a collection of files.
* \sa pkgAcquire
*/
unsigned int QueueCounter;
+
+ /** \brief The number of additional fetch items that are expected
+ * once this item is done.
+ *
+ * Some items like pkgAcqMeta{Index,Sig} will queue additional
+ * items. This variable can be set by the methods if it knows
+ * in advance how many items to expect to get a more accurate
+ * progress.
+ */
+ unsigned int ExpectedAdditionalItems;
/** \brief The name of the file into which the retrieved object
* will be written.
* \param Message Data from the acquire method. Use LookupTag()
* to parse it.
* \param Size The size of the object that was fetched.
- * \param Hash The HashSum of the object that was fetched.
+ * \param Hashes The HashSums of the object that was fetched.
* \param Cnf The method via which the object was fetched.
*
* \sa pkgAcqMethod
*/
- virtual void Done(std::string Message,unsigned long long Size,std::string Hash,
+ virtual void Done(std::string Message, unsigned long long Size, HashStringList const &Hashes,
pkgAcquire::MethodConfig *Cnf);
/** \brief Invoked when the worker starts to fetch this object.
* line, so they should (if nonempty) have a leading newline and
* no trailing newline.
*/
- virtual std::string Custom600Headers() {return std::string();};
+ virtual std::string Custom600Headers() const {return std::string();};
/** \brief A "descriptive" URI-like string.
*
* \return a URI that should be used to describe what is being fetched.
*/
- virtual std::string DescURI() = 0;
+ virtual std::string DescURI() const = 0;
/** \brief Short item description.
*
* \return a brief description of the object being fetched.
*/
- virtual std::string ShortDesc() {return DescURI();}
+ virtual std::string ShortDesc() const {return DescURI();}
/** \brief Invoked by the worker when the download is completely done. */
virtual void Finished() {};
- /** \brief HashSum
+ /** \brief HashSums
*
- * \return the HashSum of this object, if applicable; otherwise, an
- * empty string.
+ * \return the HashSums of this object, if applicable; otherwise, an
+ * empty list.
*/
- virtual std::string HashSum() {return std::string();};
+ HashStringList HashSums() const {return ExpectedHashes;};
+ std::string HashSum() const {HashStringList const hashes = HashSums(); HashString const * const hs = hashes.find(NULL); return hs != NULL ? hs->toStr() : ""; };
/** \return the acquire process with which this item is associated. */
- pkgAcquire *GetOwner() {return Owner;};
+ pkgAcquire *GetOwner() const {return Owner;};
/** \return \b true if this object is being fetched from a trusted source. */
- virtual bool IsTrusted() {return false;};
+ virtual bool IsTrusted() const {return false;};
// report mirror problems
/** \brief Report mirror problem
* process, but does not place it into any fetch queues (you must
* manually invoke QueueURI() to do so).
*
- * Initializes all fields of the item other than Owner to 0,
- * false, or the empty string.
- *
* \param Owner The new owner of this item.
+ * \param ExpectedHashes of the file represented by this item
*/
- Item(pkgAcquire *Owner);
+ Item(pkgAcquire *Owner,
+ HashStringList const &ExpectedHashes=HashStringList());
/** \brief Remove this item from its owner's queue by invoking
* pkgAcquire::Remove.
* \param state respresenting the error we encountered
*/
bool RenameOnError(RenameOnErrorState const state);
+
+ /** \brief The HashSums of the item is supposed to have than done */
+ HashStringList ExpectedHashes;
+
+ /** \brief The item that is currently being downloaded. */
+ pkgAcquire::ItemDesc Desc;
};
/*}}}*/
/** \brief Information about an index patch (aka diff). */ /*{{{*/
/** \brief If \b true, debugging information will be written to std::clog. */
bool Debug;
- /** \brief The item that is currently being downloaded. */
- pkgAcquire::ItemDesc Desc;
-
- /** \brief The Hash that this file should have after download
- */
- HashString ExpectedHash;
-
public:
// Specialized action members
virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf);
- virtual void Done(std::string Message,unsigned long long Size,std::string Md5Hash,
+ virtual void Done(std::string Message,unsigned long long Size, HashStringList const &Hashes,
pkgAcquire::MethodConfig *Cnf);
- virtual std::string DescURI() {return Desc.URI;};
- virtual std::string Custom600Headers();
+ virtual std::string DescURI() const {return Desc.URI;};
+ virtual std::string Custom600Headers() const;
virtual bool ParseIndex(std::string const &IndexFile);
/** \brief Create a new pkgAcqSubIndex.
*
* \param ShortDesc A short description of the list file to download.
*
- * \param ExpectedHash The list file's MD5 signature.
+ * \param ExpectedHashes The list file's hashsums which are expected.
*/
pkgAcqSubIndex(pkgAcquire *Owner, std::string const &URI,std::string const &URIDesc,
- std::string const &ShortDesc, HashString const &ExpectedHash);
+ std::string const &ShortDesc, HashStringList const &ExpectedHashes);
+};
+ /*}}}*/
+
+/** \brief Common base class for all classes that deal with fetching {{{
+ indexes
+ */
+class pkgAcqBaseIndex : public pkgAcquire::Item
+{
+ protected:
+ /** \brief Pointer to the IndexTarget data
+ */
+ const struct IndexTarget * Target;
+ indexRecords *MetaIndexParser;
+
+ pkgAcqBaseIndex(pkgAcquire *Owner,
+ struct IndexTarget const * const Target,
+ HashStringList const &ExpectedHashes,
+ indexRecords *MetaIndexParser)
+ : Item(Owner, ExpectedHashes), Target(Target),
+ MetaIndexParser(MetaIndexParser) {};
+
};
/*}}}*/
/** \brief An item that is responsible for fetching an index file of {{{
*
* \sa pkgAcqIndexDiffs, pkgAcqIndex
*/
-class pkgAcqDiffIndex : public pkgAcquire::Item
+class pkgAcqDiffIndex : public pkgAcqBaseIndex
{
protected:
/** \brief If \b true, debugging information will be written to std::clog. */
bool Debug;
- /** \brief The item that is currently being downloaded. */
- pkgAcquire::ItemDesc Desc;
-
/** \brief The URI of the index file to recreate at our end (either
* by downloading it or by applying partial patches).
*/
std::string RealURI;
- /** \brief The Hash that the real index file should have after
- * all patches have been applied.
- */
- HashString ExpectedHash;
-
/** \brief The index file which will be patched to generate the new
* file.
*/
public:
// Specialized action members
virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf);
- virtual void Done(std::string Message,unsigned long long Size,std::string Md5Hash,
+ virtual void Done(std::string Message,unsigned long long Size, HashStringList const &Hashes,
pkgAcquire::MethodConfig *Cnf);
- virtual std::string DescURI() {return RealURI + "Index";};
- virtual std::string Custom600Headers();
+ virtual std::string DescURI() const {return RealURI + "Index";};
+ virtual std::string Custom600Headers() const;
/** \brief Parse the Index file for a set of Packages diffs.
*
*
* \param ShortDesc A short description of the list file to download.
*
- * \param ExpectedHash The list file's MD5 signature.
+ * \param ExpectedHashes The list file's hashsums which are expected.
*/
- pkgAcqDiffIndex(pkgAcquire *Owner,std::string URI,std::string URIDesc,
- std::string ShortDesc, HashString ExpectedHash);
+ pkgAcqDiffIndex(pkgAcquire *Owner,
+ struct IndexTarget const * const Target,
+ HashStringList const &ExpectedHashes,
+ indexRecords *MetaIndexParser);
};
/*}}}*/
/** \brief An item that is responsible for fetching client-merge patches {{{
*
* \sa pkgAcqDiffIndex, pkgAcqIndex
*/
-class pkgAcqIndexMergeDiffs : public pkgAcquire::Item
+class pkgAcqIndexMergeDiffs : public pkgAcqBaseIndex
{
protected:
*/
bool Debug;
- /** \brief description of the item that is currently being
- * downloaded.
- */
- pkgAcquire::ItemDesc Desc;
-
/** \brief URI of the package index file that is being
* reconstructed.
*/
std::string RealURI;
- /** \brief HashSum of the package index file that is being
- * reconstructed.
- */
- HashString ExpectedHash;
-
/** \brief description of the file being downloaded. */
std::string Description;
* outright; its arguments are ignored.
*/
virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf);
-
- virtual void Done(std::string Message,unsigned long long Size,std::string Md5Hash,
- pkgAcquire::MethodConfig *Cnf);
- virtual std::string DescURI() {return RealURI + "Index";};
+ virtual void Done(std::string Message,unsigned long long Size, HashStringList const &Hashes,
+ pkgAcquire::MethodConfig *Cnf);
+ virtual std::string DescURI() const {return RealURI + "Index";};
/** \brief Create an index merge-diff item.
*
*
* \param ShortDesc A brief description of this item.
*
- * \param ExpectedHash The expected md5sum of the completely
+ * \param ExpectedHashes The expected md5sum of the completely
* reconstructed package index file; the index file will be tested
* against this value when it is entirely reconstructed.
*
* \param allPatches contains all related items so that each item can
* check if it was the last one to complete the download step
*/
- pkgAcqIndexMergeDiffs(pkgAcquire *Owner,std::string const &URI,std::string const &URIDesc,
- std::string const &ShortDesc, HashString const &ExpectedHash,
- DiffInfo const &patch, std::vector<pkgAcqIndexMergeDiffs*> const * const allPatches);
+ pkgAcqIndexMergeDiffs(pkgAcquire *Owner,
+ struct IndexTarget const * const Target,
+ HashStringList const &ExpectedHash,
+ indexRecords *MetaIndexParser,
+ DiffInfo const &patch,
+ std::vector<pkgAcqIndexMergeDiffs*> const * const allPatches);
};
/*}}}*/
/** \brief An item that is responsible for fetching server-merge patches {{{
*
* \sa pkgAcqDiffIndex, pkgAcqIndex
*/
-class pkgAcqIndexDiffs : public pkgAcquire::Item
+class pkgAcqIndexDiffs : public pkgAcqBaseIndex
{
private:
/** \brief Handle tasks that must be performed after the item
* finishes downloading.
*
- * Dequeues the item and checks the resulting file's md5sum
- * against ExpectedHash after the last patch was applied.
+ * Dequeues the item and checks the resulting file's hashsums
+ * against ExpectedHashes after the last patch was applied.
* There is no need to check the md5/sha1 after a "normal"
* patch because QueueNextDiff() will check the sha1 later.
*
*/
bool Debug;
- /** \brief A description of the item that is currently being
- * downloaded.
- */
- pkgAcquire::ItemDesc Desc;
-
/** \brief The URI of the package index file that is being
* reconstructed.
*/
std::string RealURI;
- /** \brief The HashSum of the package index file that is being
- * reconstructed.
- */
- HashString ExpectedHash;
-
/** A description of the file being downloaded. */
std::string Description;
*/
virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf);
- virtual void Done(std::string Message,unsigned long long Size,std::string Md5Hash,
+ virtual void Done(std::string Message,unsigned long long Size, HashStringList const &Hashes,
pkgAcquire::MethodConfig *Cnf);
- virtual std::string DescURI() {return RealURI + "Index";};
+ virtual std::string DescURI() const {return RealURI + "Index";};
/** \brief Create an index diff item.
*
*
* \param ShortDesc A brief description of this item.
*
- * \param ExpectedHash The expected md5sum of the completely
+ * \param ExpectedHashes The expected md5sum of the completely
* reconstructed package index file; the index file will be tested
* against this value when it is entirely reconstructed.
*
* should be ordered so that each diff appears before any diff
* that depends on it.
*/
- pkgAcqIndexDiffs(pkgAcquire *Owner,std::string URI,std::string URIDesc,
- std::string ShortDesc, HashString ExpectedHash,
+ pkgAcqIndexDiffs(pkgAcquire *Owner,
+ struct IndexTarget const * const Target,
+ HashStringList const &ExpectedHash,
+ indexRecords *MetaIndexParser,
std::string ServerSha1,
std::vector<DiffInfo> diffs=std::vector<DiffInfo>());
};
*
* \todo Why does pkgAcqIndex have protected members?
*/
-class pkgAcqIndex : public pkgAcquire::Item
+class pkgAcqIndex : public pkgAcqBaseIndex
{
protected:
// the downloaded file contains the expected tag
bool Verify;
- /** \brief The download request that is currently being
- * processed.
- */
- pkgAcquire::ItemDesc Desc;
-
/** \brief The object that is actually being fetched (minus any
* compression-related extensions).
*/
std::string RealURI;
- /** \brief The expected hashsum of the decompressed index file. */
- HashString ExpectedHash;
-
/** \brief The compression-related file extensions that are being
* added to the downloaded file one by one if first fails (e.g., "gz bz2").
*/
std::string CompressionExtension;
+ /** \brief Do the changes needed to fetch via AptByHash (if needed) */
+ void InitByHashIfNeeded(const std::string MetaKey);
+
public:
// Specialized action members
virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf);
- virtual void Done(std::string Message,unsigned long long Size,std::string Md5Hash,
+ virtual void Done(std::string Message,unsigned long long Size, HashStringList const &Hashes,
pkgAcquire::MethodConfig *Cnf);
- virtual std::string Custom600Headers();
- virtual std::string DescURI() {return Desc.URI;};
- virtual std::string HashSum() {return ExpectedHash.toStr(); };
+ virtual std::string Custom600Headers() const;
+ virtual std::string DescURI() const {return Desc.URI;};
/** \brief Create a pkgAcqIndex.
*
*
* \param ShortDesc A brief description of this index file.
*
- * \param ExpectedHash The expected hashsum of this index file.
+ * \param ExpectedHashes The expected hashsum of this index file.
*
* \param compressExt The compression-related extension with which
* this index file should be downloaded, or "" to autodetect
* fallback is ".gz" or none.
*/
pkgAcqIndex(pkgAcquire *Owner,std::string URI,std::string URIDesc,
- std::string ShortDesc, HashString ExpectedHash,
+ std::string ShortDesc, HashStringList const &ExpectedHashes,
std::string compressExt="");
- pkgAcqIndex(pkgAcquire *Owner, struct IndexTarget const * const Target,
- HashString const &ExpectedHash, indexRecords const *MetaIndexParser);
- void Init(std::string const &URI, std::string const &URIDesc, std::string const &ShortDesc);
+ pkgAcqIndex(pkgAcquire *Owner,
+ IndexTarget const * const Target,
+ HashStringList const &ExpectedHash,
+ indexRecords *MetaIndexParser);
+ void Init(std::string const &URI, std::string const &URIDesc,
+ std::string const &ShortDesc);
};
/*}}}*/
/** \brief An acquire item that is responsible for fetching a {{{
public:
virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf);
- virtual std::string Custom600Headers();
+ virtual std::string Custom600Headers() const;
/** \brief Create a pkgAcqIndexTrans.
*
*/
pkgAcqIndexTrans(pkgAcquire *Owner,std::string URI,std::string URIDesc,
std::string ShortDesc);
- pkgAcqIndexTrans(pkgAcquire *Owner, struct IndexTarget const * const Target,
- HashString const &ExpectedHash, indexRecords const *MetaIndexParser);
+ pkgAcqIndexTrans(pkgAcquire *Owner, IndexTarget const * const Target,
+ HashStringList const &ExpectedHashes, indexRecords *MetaIndexParser);
};
/*}}}*/
/** \brief Information about an index file. */ /*{{{*/
/** \brief The last good signature file */
std::string LastGoodSig;
- /** \brief The fetch request that is currently being processed. */
- pkgAcquire::ItemDesc Desc;
-
/** \brief The URI of the signature file. Unlike Desc.URI, this is
* never modified; it is used to determine the file that is being
* downloaded.
*
* \todo Why a list of pointers instead of a list of structs?
*/
- const std::vector<struct IndexTarget*>* IndexTargets;
+ const std::vector<IndexTarget*>* IndexTargets;
public:
// Specialized action members
virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf);
- virtual void Done(std::string Message,unsigned long long Size,std::string Md5Hash,
+ virtual void Done(std::string Message,unsigned long long Size, HashStringList const &Hashes,
pkgAcquire::MethodConfig *Cnf);
- virtual std::string Custom600Headers();
- virtual std::string DescURI() {return RealURI; };
+ virtual std::string Custom600Headers() const;
+ virtual std::string DescURI() const {return RealURI; };
/** \brief Create a new pkgAcqMetaSig. */
pkgAcqMetaSig(pkgAcquire *Owner,std::string URI,std::string URIDesc, std::string ShortDesc,
std::string MetaIndexURI, std::string MetaIndexURIDesc, std::string MetaIndexShortDesc,
- const std::vector<struct IndexTarget*>* IndexTargets,
+ const std::vector<IndexTarget*>* IndexTargets,
indexRecords* MetaIndexParser);
virtual ~pkgAcqMetaSig();
};
class pkgAcqMetaIndex : public pkgAcquire::Item
{
protected:
- /** \brief The fetch command that is currently being processed. */
- pkgAcquire::ItemDesc Desc;
-
/** \brief The URI that is actually being downloaded; never
* modified by pkgAcqMetaIndex.
*/
std::string SigFile;
/** \brief The index files to download. */
- const std::vector<struct IndexTarget*>* IndexTargets;
+ const std::vector<IndexTarget*>* IndexTargets;
/** \brief The parser for the meta-index file. */
indexRecords* MetaIndexParser;
// Specialized action members
virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf);
- virtual void Done(std::string Message,unsigned long long Size, std::string Hash,
+ virtual void Done(std::string Message,unsigned long long Size, HashStringList const &Hashes,
pkgAcquire::MethodConfig *Cnf);
- virtual std::string Custom600Headers();
- virtual std::string DescURI() {return RealURI; };
+ virtual std::string Custom600Headers() const;
+ virtual std::string DescURI() const {return RealURI; };
/** \brief Create a new pkgAcqMetaIndex. */
pkgAcqMetaIndex(pkgAcquire *Owner,
std::string URI,std::string URIDesc, std::string ShortDesc,
std::string SigFile,
- const std::vector<struct IndexTarget*>* IndexTargets,
+ const std::vector<IndexTarget*>* IndexTargets,
indexRecords* MetaIndexParser);
};
/*}}}*/
public:
void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf);
- virtual std::string Custom600Headers();
+ virtual std::string Custom600Headers() const;
/** \brief Create a new pkgAcqMetaClearSig. */
pkgAcqMetaClearSig(pkgAcquire *Owner,
std::string const &URI, std::string const &URIDesc, std::string const &ShortDesc,
std::string const &MetaIndexURI, std::string const &MetaIndexURIDesc, std::string const &MetaIndexShortDesc,
std::string const &MetaSigURI, std::string const &MetaSigURIDesc, std::string const &MetaSigShortDesc,
- const std::vector<struct IndexTarget*>* IndexTargets,
+ const std::vector<IndexTarget*>* IndexTargets,
indexRecords* MetaIndexParser);
virtual ~pkgAcqMetaClearSig();
};
/** \brief The package version being fetched. */
pkgCache::VerIterator Version;
- /** \brief The fetch command that is currently being processed. */
- pkgAcquire::ItemDesc Desc;
-
/** \brief The list of sources from which to pick archives to
* download this package from.
*/
*/
pkgRecords *Recs;
- /** \brief The hashsum of this package. */
- HashString ExpectedHash;
-
/** \brief A location in which the actual filename of the package
* should be stored.
*/
public:
virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf);
- virtual void Done(std::string Message,unsigned long long Size,std::string Hash,
+ virtual void Done(std::string Message,unsigned long long Size, HashStringList const &Hashes,
pkgAcquire::MethodConfig *Cnf);
- virtual std::string DescURI() {return Desc.URI;};
- virtual std::string ShortDesc() {return Desc.ShortDesc;};
+ virtual std::string DescURI() const {return Desc.URI;};
+ virtual std::string ShortDesc() const {return Desc.ShortDesc;};
virtual void Finished();
- virtual std::string HashSum() {return ExpectedHash.toStr(); };
- virtual bool IsTrusted();
+ virtual bool IsTrusted() const;
/** \brief Create a new pkgAcqArchive.
*
*/
class pkgAcqFile : public pkgAcquire::Item
{
- /** \brief The currently active download process. */
- pkgAcquire::ItemDesc Desc;
-
- /** \brief The hashsum of the file to download, if it is known. */
- HashString ExpectedHash;
-
/** \brief How many times to retry the download, set from
* Acquire::Retries.
*/
// Specialized action members
virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf);
- virtual void Done(std::string Message,unsigned long long Size,std::string CalcHash,
+ virtual void Done(std::string Message,unsigned long long Size, HashStringList const &CalcHashes,
pkgAcquire::MethodConfig *Cnf);
- virtual std::string DescURI() {return Desc.URI;};
- virtual std::string HashSum() {return ExpectedHash.toStr(); };
- virtual std::string Custom600Headers();
+ virtual std::string DescURI() const {return Desc.URI;};
+ virtual std::string Custom600Headers() const;
/** \brief Create a new pkgAcqFile object.
*
*
* \param URI The URI to download.
*
- * \param Hash The hashsum of the file to download, if it is known;
- * otherwise "".
+ * \param Hashes The hashsums of the file to download, if they are known;
+ * otherwise empty list.
*
* \param Size The size of the file to download, if it is known;
* otherwise 0.
* is the absolute name to which the file should be downloaded.
*/
- pkgAcqFile(pkgAcquire *Owner, std::string URI, std::string Hash, unsigned long long Size,
+ pkgAcqFile(pkgAcquire *Owner, std::string URI, HashStringList const &Hashes, unsigned long long Size,
std::string Desc, std::string ShortDesc,
const std::string &DestDir="", const std::string &DestFilename="",
bool IsIndexFile=false);
// AcqMethod::URIDone - A URI is finished /*{{{*/
// ---------------------------------------------------------------------
/* */
+static void printHashStringList(HashStringList const * const list)
+{
+ for (HashStringList::const_iterator hash = list->begin(); hash != list->end(); ++hash)
+ {
+ // very old compatibility name for MD5Sum
+ if (hash->HashType() == "MD5Sum")
+ std::cout << "MD5-Hash: " << hash->HashValue() << "\n";
+ std::cout << hash->HashType() << "-Hash: " << hash->HashValue() << "\n";
+ }
+}
void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
{
if (Queue == 0)
if (Res.LastModified != 0)
std::cout << "Last-Modified: " << TimeRFC1123(Res.LastModified) << "\n";
- if (Res.MD5Sum.empty() == false)
- std::cout << "MD5-Hash: " << Res.MD5Sum << "\n"
- << "MD5Sum-Hash: " << Res.MD5Sum << "\n";
- if (Res.SHA1Sum.empty() == false)
- std::cout << "SHA1-Hash: " << Res.SHA1Sum << "\n";
- if (Res.SHA256Sum.empty() == false)
- std::cout << "SHA256-Hash: " << Res.SHA256Sum << "\n";
- if (Res.SHA512Sum.empty() == false)
- std::cout << "SHA512-Hash: " << Res.SHA512Sum << "\n";
+ printHashStringList(&Res.Hashes);
+
if (UsedMirror.empty() == false)
std::cout << "UsedMirror: " << UsedMirror << "\n";
if (Res.GPGVOutput.empty() == false)
if (Alt->LastModified != 0)
std::cout << "Alt-Last-Modified: " << TimeRFC1123(Alt->LastModified) << "\n";
- if (Alt->MD5Sum.empty() == false)
- std::cout << "Alt-MD5-Hash: " << Alt->MD5Sum << "\n";
- if (Alt->SHA1Sum.empty() == false)
- std::cout << "Alt-SHA1-Hash: " << Alt->SHA1Sum << "\n";
- if (Alt->SHA256Sum.empty() == false)
- std::cout << "Alt-SHA256-Hash: " << Alt->SHA256Sum << "\n";
- if (Alt->SHA512Sum.empty() == false)
- std::cout << "Alt-SHA512-Hash: " << Alt->SHA512Sum << "\n";
-
+ printHashStringList(&Alt->Hashes);
+
if (Alt->IMSHit == true)
std::cout << "Alt-IMS-Hit: true\n";
}
Tmp->LastModified = 0;
Tmp->IndexFile = StringToBool(LookupTag(Message,"Index-File"),false);
Tmp->FailIgnore = StringToBool(LookupTag(Message,"Fail-Ignore"),false);
+ Tmp->ExpectedHashes = HashStringList();
+ for (char const * const * t = HashString::SupportedHashes(); *t != NULL; ++t)
+ {
+ std::string tag = "Expected-";
+ tag.append(*t);
+ std::string const hash = LookupTag(Message, tag.c_str());
+ if (hash.empty() == false)
+ Tmp->ExpectedHashes.push_back(HashString(*t, hash));
+ }
Tmp->Next = 0;
// Append it to the list
// ---------------------------------------------------------------------
/* This hides the number of hashes we are supporting from the caller.
It just deals with the hash class. */
-void pkgAcqMethod::FetchResult::TakeHashes(Hashes &Hash)
+void pkgAcqMethod::FetchResult::TakeHashes(class Hashes &Hash)
{
- MD5Sum = Hash.MD5.Result();
- SHA1Sum = Hash.SHA1.Result();
- SHA256Sum = Hash.SHA256.Result();
- SHA512Sum = Hash.SHA512.Result();
+ Hashes = Hash.GetHashStringList();
}
/*}}}*/
void pkgAcqMethod::Dequeue() { /*{{{*/
#ifndef PKGLIB_ACQUIRE_METHOD_H
#define PKGLIB_ACQUIRE_METHOD_H
+#include <apt-pkg/hashes.h>
#include <apt-pkg/macros.h>
#include <stdarg.h>
#include <apt-pkg/strutl.h>
#endif
-class Hashes;
class pkgAcqMethod
{
protected:
time_t LastModified;
bool IndexFile;
bool FailIgnore;
+ HashStringList ExpectedHashes;
};
struct FetchResult
{
- std::string MD5Sum;
- std::string SHA1Sum;
- std::string SHA256Sum;
- std::string SHA512Sum;
+ HashStringList Hashes;
std::vector<std::string> GPGVOutput;
time_t LastModified;
bool IMSHit;
unsigned long long Size;
unsigned long long ResumePoint;
- void TakeHashes(Hashes &Hash);
+ void TakeHashes(class Hashes &Hash);
FetchResult();
};
Owner->DestFile.c_str(), LookupTag(Message,"Size","0").c_str(),TotalSize);
// see if there is a hash to verify
- string RecivedHash;
- HashString expectedHash(Owner->HashSum());
- if(!expectedHash.empty())
+ HashStringList RecivedHashes;
+ HashStringList expectedHashes = Owner->HashSums();
+ for (HashStringList::const_iterator hs = expectedHashes.begin(); hs != expectedHashes.end(); ++hs)
{
- string hashTag = expectedHash.HashType()+"-Hash";
- string hashSum = LookupTag(Message, hashTag.c_str());
- if(!hashSum.empty())
- RecivedHash = expectedHash.HashType() + ":" + hashSum;
- if(_config->FindB("Debug::pkgAcquire::Auth", false) == true)
- {
- clog << "201 URI Done: " << Owner->DescURI() << endl
- << "RecivedHash: " << RecivedHash << endl
- << "ExpectedHash: " << expectedHash.toStr()
- << endl << endl;
- }
+ std::string const tagname = hs->HashType() + "-Hash";
+ std::string const hashsum = LookupTag(Message, tagname.c_str());
+ if (hashsum.empty() == false)
+ RecivedHashes.push_back(HashString(hs->HashType(), hashsum));
+ }
+
+ if(_config->FindB("Debug::pkgAcquire::Auth", false) == true)
+ {
+ std::clog << "201 URI Done: " << Owner->DescURI() << endl
+ << "RecivedHash:" << endl;
+ for (HashStringList::const_iterator hs = RecivedHashes.begin(); hs != RecivedHashes.end(); ++hs)
+ std::clog << "\t- " << hs->toStr() << std::endl;
+ std::clog << "ExpectedHash:" << endl;
+ for (HashStringList::const_iterator hs = expectedHashes.begin(); hs != expectedHashes.end(); ++hs)
+ std::clog << "\t- " << hs->toStr() << std::endl;
+ std::clog << endl;
}
- Owner->Done(Message, ServerSize, RecivedHash.c_str(), Config);
+ Owner->Done(Message, ServerSize, RecivedHashes, Config);
ItemDone();
-
+
// Log that we are done
if (Log != 0)
{
Message.reserve(300);
Message += "URI: " + Item->URI;
Message += "\nFilename: " + Item->Owner->DestFile;
+ HashStringList const hsl = Item->Owner->HashSums();
+ for (HashStringList::const_iterator hs = hsl.begin(); hs != hsl.end(); ++hs)
+ Message += "\nExpected-" + hs->HashType() + ": " + hs->HashValue();
Message += Item->Owner->Custom600Headers();
Message += "\n\n";
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <iomanip>
#include <dirent.h>
#include <sys/time.h>
// Compute the total number of bytes to fetch
unsigned int Unknown = 0;
unsigned int Count = 0;
- for (pkgAcquire::ItemCIterator I = Owner->ItemsBegin(); I != Owner->ItemsEnd();
+ bool UnfetchedReleaseFiles = false;
+ for (pkgAcquire::ItemCIterator I = Owner->ItemsBegin();
+ I != Owner->ItemsEnd();
++I, ++Count)
{
TotalItems++;
if ((*I)->Local == true)
continue;
+ // see if the method tells us to expect more
+ TotalItems += (*I)->ExpectedAdditionalItems;
+
+ // check if there are unfetched Release files
+ if ((*I)->Complete == false && (*I)->ExpectedAdditionalItems > 0)
+ UnfetchedReleaseFiles = true;
+
TotalBytes += (*I)->FileSize;
if ((*I)->Complete == true)
CurrentBytes += (*I)->FileSize;
unsigned long long ResumeSize = 0;
for (pkgAcquire::Worker *I = Owner->WorkersBegin(); I != 0;
I = Owner->WorkerStep(I))
+ {
if (I->CurrentItem != 0 && I->CurrentItem->Owner->Complete == false)
{
CurrentBytes += I->CurrentSize;
I->CurrentItem->Owner->Complete == false)
TotalBytes += I->CurrentSize;
}
+ }
// Normalize the figures and account for unknown size downloads
if (TotalBytes <= 0)
// Wha?! Is not supposed to happen.
if (CurrentBytes > TotalBytes)
CurrentBytes = TotalBytes;
+
+ // debug
+ if (_config->FindB("Debug::acquire::progress", false) == true)
+ std::clog << " Bytes: "
+ << SizeToStr(CurrentBytes) << " / " << SizeToStr(TotalBytes)
+ << std::endl;
// Compute the CPS
struct timeval NewTime;
Time = NewTime;
}
+ // calculate the percentage, if we have too little data assume 1%
+ if (TotalBytes > 0 && UnfetchedReleaseFiles)
+ Percent = 0;
+ else
+ // use both files and bytes because bytes can be unreliable
+ Percent = (0.8 * (CurrentBytes/float(TotalBytes)*100.0) +
+ 0.2 * (CurrentItems/float(TotalItems)*100.0));
+
int fd = _config->FindI("APT::Status-Fd",-1);
if(fd > 0)
{
else
snprintf(msg,sizeof(msg), _("Retrieving file %li of %li"), i, TotalItems);
-
-
// build the status str
status << "dlstatus:" << i
- << ":" << (CurrentBytes/float(TotalBytes)*100.0)
- << ":" << msg
- << endl;
+ << ":" << std::setprecision(3) << Percent
+ << ":" << msg
+ << endl;
std::string const dlstatus = status.str();
FileFd::Write(fd, dlstatus.c_str(), dlstatus.size());
/** \brief The number of items that have been successfully downloaded. */
unsigned long CurrentItems;
+ /** \brief The estimated percentage of the download (0-100)
+ */
+ double Percent;
+
public:
/** \brief If \b true, the download scheduler should call Pulse()
return "";
std::vector<std::string>::const_iterator p = profiles.begin();
std::string list = *p;
- for (; p != profiles.end(); ++p)
+ for (++p; p != profiles.end(); ++p)
list.append(",").append(*p);
return list;
}
namespace APT {
namespace CacheFilter {
-#define PACKAGE_MATCHER_ABI_COMPAT 1
-#ifdef PACKAGE_MATCHER_ABI_COMPAT
-
-// PackageNameMatchesRegEx /*{{{*/
-class PackageNameMatchesRegEx {
- /** \brief dpointer placeholder (for later in case we need it) */
- void *d;
- regex_t* pattern;
-public:
- PackageNameMatchesRegEx(std::string const &Pattern);
- bool operator() (pkgCache::PkgIterator const &Pkg);
- bool operator() (pkgCache::GrpIterator const &Grp);
- ~PackageNameMatchesRegEx();
-};
- /*}}}*/
-// PackageNameMatchesFnmatch /*{{{*/
- class PackageNameMatchesFnmatch {
- /** \brief dpointer placeholder (for later in case we need it) */
- void *d;
- const std::string Pattern;
-public:
- PackageNameMatchesFnmatch(std::string const &Pattern)
- : Pattern(Pattern) {};
- bool operator() (pkgCache::PkgIterator const &Pkg);
- bool operator() (pkgCache::GrpIterator const &Grp);
- ~PackageNameMatchesFnmatch() {};
-};
- /*}}}*/
-// PackageArchitectureMatchesSpecification /*{{{*/
-/** \class PackageArchitectureMatchesSpecification
- \brief matching against architecture specification strings
-
- The strings are of the format \<kernel\>-\<cpu\> where either component,
- or the whole string, can be the wildcard "any" as defined in
- debian-policy §11.1 "Architecture specification strings".
-
- Examples: i386, mipsel, linux-any, any-amd64, any */
-class PackageArchitectureMatchesSpecification {
- std::string literal;
- std::string complete;
- bool isPattern;
- /** \brief dpointer placeholder (for later in case we need it) */
- void *d;
-public:
- /** \brief matching against architecture specification strings
- *
- * @param pattern is the architecture specification string
- * @param isPattern defines if the given \b pattern is a
- * architecture specification pattern to match others against
- * or if it is the fixed string and matched against patterns
- */
- PackageArchitectureMatchesSpecification(std::string const &pattern, bool const isPattern = true);
- bool operator() (char const * const &arch);
- bool operator() (pkgCache::PkgIterator const &Pkg);
- bool operator() (pkgCache::VerIterator const &Ver);
- ~PackageArchitectureMatchesSpecification();
-};
-
-#else
-
class PackageMatcher {
public:
- virtual bool operator() (pkgCache::PkgIterator const &Pkg) { return false; };
- virtual bool operator() (pkgCache::GrpIterator const &Grp) { return false; };
- virtual bool operator() (pkgCache::VerIterator const &Ver) { return false; };
+ virtual bool operator() (pkgCache::PkgIterator const &/*Pkg*/) {
+ return false; };
+ virtual bool operator() (pkgCache::GrpIterator const &/*Grp*/) {
+ return false; };
+ virtual bool operator() (pkgCache::VerIterator const &/*Ver*/) {
+ return false; };
virtual ~PackageMatcher() {};
};
virtual bool operator() (pkgCache::VerIterator const &Ver);
virtual ~PackageArchitectureMatchesSpecification();
};
-#endif
/*}}}*/
}
}
// Accessors
inline const char *Name() const {return S->Name == 0?0:Owner->StrP + S->Name;}
- inline const char *Section() const {return S->Section == 0?0:Owner->StrP + S->Section;}
+ // Versions have sections - and packages can have different versions with different sections
+ // so this interface is broken by design. It used to return the section of the "first parsed
+ // package stanza", but as this can potentially be anything it now returns the section of the
+ // newest version instead (if any). aka: Run as fast as you can to Version.Section().
+ APT_DEPRECATED const char *Section() const;
inline bool Purge() const {return S->CurrentState == pkgCache::State::Purge ||
(S->CurrentVer == 0 && S->CurrentState == pkgCache::State::NotInstalled);}
inline const char *Arch() const {return S->Arch == 0?0:Owner->StrP + S->Arch;}
if (FromGroup(pci, Cache, str, helper) == false &&
FromTask(pci, Cache, str, helper) == false &&
#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR >= 13)
- FromFnmatch(pci, Cache, str, helper) == false)
+ // FIXME: hm, hm, regexp/fnmatch incompatible?
+ FromFnmatch(pci, Cache, str, helper) == false &&
#endif
FromRegEx(pci, Cache, str, helper) == false)
{
}
#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR >= 13)
// canNotFindFnmatch - handle the case no package is found by a fnmatch /*{{{*/
-void CacheSetHelper::canNotFindFnmatch(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern) {
+ void CacheSetHelper::canNotFindFnmatch(PackageContainerInterface * const /*pci*/, pkgCacheFile &/*Cache*/, std::string pattern) {
if (ShowError == true)
_error->Insert(ErrorType, _("Couldn't find any package by glob '%s'"), pattern.c_str());
}
/*}}}*/
#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR >= 13)
// showFnmatchSelection /*{{{*/
-APT_CONST void CacheSetHelper::showFnmatchSelection(pkgCache::PkgIterator const &pkg,
- std::string const &pattern) {
+APT_CONST void CacheSetHelper::showFnmatchSelection(pkgCache::PkgIterator const &/*pkg*/,
+ std::string const &/*pattern*/) {
}
/*}}}*/
#endif
inline const char *Name() const {return getPkg().Name(); }
inline std::string FullName(bool const Pretty) const { return getPkg().FullName(Pretty); }
inline std::string FullName() const { return getPkg().FullName(); }
- inline const char *Section() const {return getPkg().Section(); }
+ APT_DEPRECATED inline const char *Section() const {
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+ return getPkg().Section();
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic pop
+#endif
+ }
inline bool Purge() const {return getPkg().Purge(); }
inline const char *Arch() const {return getPkg().Arch(); }
inline pkgCache::GrpIterator Group() const { return getPkg().Group(); }
static VersionContainer FromString(pkgCacheFile &Cache, std::string const &pkg,
Version const &fallback, CacheSetHelper &helper,
- bool const onlyFromName = false) {
+ bool const /*onlyFromName = false*/) {
VersionContainer vercon;
VersionContainerInterface::FromString(&vercon, Cache, pkg, fallback, helper);
return vercon;
// ---------------------------------------------------------------------
/* Returns a vector of config values under the given item */
#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR < 13)
-vector<string> Configuration::FindVector(const char *Name) const { return FindVector(Name, ""); }
+vector<string> Configuration::FindVector(const char *Name) const {
+ return FindVector(Name, "");
+}
#endif
vector<string> Configuration::FindVector(const char *Name, std::string const &Default) const
{
* \param Default list of values separated by commas */
std::vector<std::string> FindVector(const char *Name, std::string const &Default) const;
std::vector<std::string> FindVector(std::string const &Name, std::string const &Default) const { return FindVector(Name.c_str(), Default); };
-#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR >= 13)
- std::vector<std::string> FindVector(const char *Name) const { return FindVector(Name, ""); };
-#else
+#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR < 13)
std::vector<std::string> FindVector(const char *Name) const;
#endif
- std::vector<std::string> FindVector(std::string const &Name) const { return FindVector(Name.c_str(), ""); };
+ std::vector<std::string> FindVector(std::string const &Name="") const { return FindVector(Name.c_str(), ""); };
int FindI(const char *Name,int const &Default = 0) const;
int FindI(std::string const &Name,int const &Default = 0) const {return FindI(Name.c_str(),Default);};
bool FindB(const char *Name,bool const &Default = false) const;
#include <signal.h>
#include <errno.h>
#include <glob.h>
+#include <pwd.h>
#include <set>
#include <algorithm>
return Dir + '/' + File;
}
/*}}}*/
+// flAbsPath - Return the absolute path of the filename /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string flAbsPath(string File)
+{
+ char *p = realpath(File.c_str(), NULL);
+ if (p == NULL)
+ {
+ _error->Errno("realpath", "flAbsPath failed");
+ return "";
+ }
+ std::string AbsPath(p);
+ free(p);
+ return AbsPath;
+}
+ /*}}}*/
// SetCloseExec - Set the close on exec flag /*{{{*/
// ---------------------------------------------------------------------
/* */
}
/*}}}*/
+
+// StartsWithGPGClearTextSignature - Check if a file is Pgp/GPG clearsigned /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool StartsWithGPGClearTextSignature(string const &FileName)
+{
+ static const char* SIGMSG = "-----BEGIN PGP SIGNED MESSAGE-----\n";
+ char buffer[strlen(SIGMSG)+1];
+ FILE* gpg = fopen(FileName.c_str(), "r");
+ if (gpg == NULL)
+ return false;
+
+ char const * const test = fgets(buffer, sizeof(buffer), gpg);
+ fclose(gpg);
+ if (test == NULL || strcmp(buffer, SIGMSG) != 0)
+ return false;
+
+ return true;
+}
+
+
class FileFdPrivate { /*{{{*/
public:
#ifdef HAVE_ZLIB
{
if ((Flags & Compressed) != Compressed && iFd > 0 && close(iFd) != 0)
Res &= _error->Errno("close",_("Problem closing the file %s"), FileName.c_str());
-
if (d != NULL)
{
Res &= d->CloseDown(FileName);
return string(tmpdir);
}
+FileFd* GetTempFile(std::string const &Prefix, bool ImmediateUnlink)
+{
+ char fn[512];
+ FileFd *Fd = new FileFd();
+
+ std::string tempdir = GetTempDir();
+ snprintf(fn, sizeof(fn), "%s/%s.XXXXXX",
+ tempdir.c_str(), Prefix.c_str());
+ int fd = mkstemp(fn);
+ if(ImmediateUnlink)
+ unlink(fn);
+ if (fd < 0)
+ {
+ _error->Errno("GetTempFile",_("Unable to mkstemp %s"), fn);
+ return NULL;
+ }
+ if (!Fd->OpenDescriptor(fd, FileFd::WriteOnly, FileFd::None, true))
+ {
+ _error->Errno("GetTempFile",_("Unable to write to %s"),fn);
+ return NULL;
+ }
+
+ return Fd;
+}
+
bool Rename(std::string From, std::string To)
{
if (rename(From.c_str(),To.c_str()) != 0)
}
return true;
}
+
+bool Popen(const char* Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode)
+{
+ int fd;
+ if (Mode != FileFd::ReadOnly && Mode != FileFd::WriteOnly)
+ return _error->Error("Popen supports ReadOnly (x)or WriteOnly mode only");
+
+ int Pipe[2] = {-1, -1};
+ if(pipe(Pipe) != 0)
+ {
+ return _error->Errno("pipe", _("Failed to create subprocess IPC"));
+ return NULL;
+ }
+ std::set<int> keep_fds;
+ keep_fds.insert(Pipe[0]);
+ keep_fds.insert(Pipe[1]);
+ Child = ExecFork(keep_fds);
+ if(Child < 0)
+ return _error->Errno("fork", "Failed to fork");
+ if(Child == 0)
+ {
+ if(Mode == FileFd::ReadOnly)
+ {
+ close(Pipe[0]);
+ fd = Pipe[1];
+ }
+ else if(Mode == FileFd::WriteOnly)
+ {
+ close(Pipe[1]);
+ fd = Pipe[0];
+ }
+
+ if(Mode == FileFd::ReadOnly)
+ {
+ dup2(fd, 1);
+ dup2(fd, 2);
+ } else if(Mode == FileFd::WriteOnly)
+ dup2(fd, 0);
+
+ execv(Args[0], (char**)Args);
+ _exit(100);
+ }
+ if(Mode == FileFd::ReadOnly)
+ {
+ close(Pipe[1]);
+ fd = Pipe[0];
+ } else if(Mode == FileFd::WriteOnly)
+ {
+ close(Pipe[0]);
+ fd = Pipe[1];
+ }
+ Fd.OpenDescriptor(fd, Mode, FileFd::None, true);
+
+ return true;
+}
+
+bool DropPrivs()
+{
+ if (getuid() != 0)
+ return true;
+
+ const std::string nobody = _config->Find("APT::User::Nobody", "nobody");
+ struct passwd *pw = getpwnam(nobody.c_str());
+ if (pw == NULL)
+ return _error->Warning("No user %s, can not drop rights", nobody.c_str());
+ if (setgid(pw->pw_gid) != 0)
+ return _error->Errno("setgid", "Failed to setgid");
+ if (setuid(pw->pw_uid) != 0)
+ return _error->Errno("setuid", "Failed to setuid");
+
+ return true;
+}
bool Rename(std::string From, std::string To);
std::string GetTempDir();
+FileFd* GetTempFile(std::string const &Prefix = "",
+ bool ImmediateUnlink = true);
/** \brief Ensure the existence of the given Path
*
void MergeKeepFdsFromConfiguration(std::set<int> &keep_fds);
bool ExecWait(pid_t Pid,const char *Name,bool Reap = false);
+
+// check if the given file starts with a PGP cleartext signature
+bool StartsWithGPGClearTextSignature(std::string const &FileName);
+
+// process releated
+bool DropPrivs();
+
// File string manipulators
std::string flNotDir(std::string File);
std::string flNotFile(std::string File);
std::string flExtension(std::string File);
std::string flCombine(std::string Dir,std::string File);
+/** \brief Takes a file path and returns the absolute path
+ */
+std::string flAbsPath(std::string File);
+
// simple c++ glob
std::vector<std::string> Glob(std::string const &pattern, int flags=0);
+/** \brief Popen() implementation that execv() instead of using a shell
+ *
+ * \param Args the execv style command to run
+ * \param FileFd is a referenz to the FileFd to use for input or output
+ * \param Child a reference to the integer that stores the child pid
+ * Note that you must call ExecWait() or similar to cleanup
+ * \param Mode is either FileFd::ReadOnly or FileFd::WriteOnly
+ * \return true on success, false on failure with _error set
+ */
+bool Popen(const char* Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode);
+
+
#endif
#include <iostream>
/*}}}*/
-const char* HashString::_SupportedHashes[] =
+const char * HashString::_SupportedHashes[] =
{
"SHA512", "SHA256", "SHA1", "MD5Sum", NULL
};
HashString::HashString(std::string StringedHash) /*{{{*/
{
- // legacy: md5sum without "MD5Sum:" prefix
- if (StringedHash.find(":") == std::string::npos && StringedHash.size() == 32)
+ if (StringedHash.find(":") == std::string::npos)
{
- Type = "MD5Sum";
- Hash = StringedHash;
+ // legacy: md5sum without "MD5Sum:" prefix
+ if (StringedHash.size() == 32)
+ {
+ Type = "MD5Sum";
+ Hash = StringedHash;
+ }
+ if(_config->FindB("Debug::Hashes",false) == true)
+ std::clog << "HashString(string): invalid StringedHash " << StringedHash << std::endl;
return;
}
std::string::size_type pos = StringedHash.find(":");
std::string fileHash;
FileFd Fd(filename, FileFd::ReadOnly);
- if(Type == "MD5Sum")
+ if(strcasecmp(Type.c_str(), "MD5Sum") == 0)
{
MD5Summation MD5;
MD5.AddFD(Fd);
fileHash = (std::string)MD5.Result();
}
- else if (Type == "SHA1")
+ else if (strcasecmp(Type.c_str(), "SHA1") == 0)
{
SHA1Summation SHA1;
SHA1.AddFD(Fd);
fileHash = (std::string)SHA1.Result();
}
- else if (Type == "SHA256")
+ else if (strcasecmp(Type.c_str(), "SHA256") == 0)
{
SHA256Summation SHA256;
SHA256.AddFD(Fd);
fileHash = (std::string)SHA256.Result();
}
- else if (Type == "SHA512")
+ else if (strcasecmp(Type.c_str(), "SHA512") == 0)
{
SHA512Summation SHA512;
SHA512.AddFD(Fd);
return fileHash;
}
/*}}}*/
-const char** HashString::SupportedHashes()
+const char** HashString::SupportedHashes() /*{{{*/
{
return _SupportedHashes;
}
-
-APT_PURE bool HashString::empty() const
+ /*}}}*/
+APT_PURE bool HashString::empty() const /*{{{*/
{
return (Type.empty() || Hash.empty());
}
+ /*}}}*/
+std::string HashString::toStr() const /*{{{*/
+{
+ return Type + ":" + Hash;
+}
+ /*}}}*/
+APT_PURE bool HashString::operator==(HashString const &other) const /*{{{*/
+{
+ return (strcasecmp(Type.c_str(), other.Type.c_str()) == 0 && Hash == other.Hash);
+}
+APT_PURE bool HashString::operator!=(HashString const &other) const
+{
+ return !(*this == other);
+}
+ /*}}}*/
+
+bool HashStringList::usable() const /*{{{*/
+{
+ if (empty() == true)
+ return false;
+ std::string const forcedType = _config->Find("Acquire::ForceHash", "");
+ if (forcedType.empty() == true)
+ return true;
+ return find(forcedType) != NULL;
+}
+ /*}}}*/
+HashString const * HashStringList::find(char const * const type) const /*{{{*/
+{
+ if (type == NULL || type[0] == '\0')
+ {
+ std::string const forcedType = _config->Find("Acquire::ForceHash", "");
+ if (forcedType.empty() == false)
+ return find(forcedType.c_str());
+ for (char const * const * t = HashString::SupportedHashes(); *t != NULL; ++t)
+ for (std::vector<HashString>::const_iterator hs = list.begin(); hs != list.end(); ++hs)
+ if (strcasecmp(hs->HashType().c_str(), *t) == 0)
+ return &*hs;
+ return NULL;
+ }
+ for (std::vector<HashString>::const_iterator hs = list.begin(); hs != list.end(); ++hs)
+ if (strcasecmp(hs->HashType().c_str(), type) == 0)
+ return &*hs;
+ return NULL;
+}
+ /*}}}*/
+bool HashStringList::supported(char const * const type) /*{{{*/
+{
+ for (char const * const * t = HashString::SupportedHashes(); *t != NULL; ++t)
+ if (strcasecmp(*t, type) == 0)
+ return true;
+ return false;
+}
+ /*}}}*/
+bool HashStringList::push_back(const HashString &hashString) /*{{{*/
+{
+ if (hashString.HashType().empty() == true ||
+ hashString.HashValue().empty() == true ||
+ supported(hashString.HashType().c_str()) == false)
+ return false;
+
+ // ensure that each type is added only once
+ HashString const * const hs = find(hashString.HashType().c_str());
+ if (hs != NULL)
+ return *hs == hashString;
-std::string HashString::toStr() const
+ list.push_back(hashString);
+ return true;
+}
+ /*}}}*/
+bool HashStringList::VerifyFile(std::string filename) const /*{{{*/
{
- return Type + std::string(":") + Hash;
+ if (list.empty() == true)
+ return false;
+ HashString const * const hs = find(NULL);
+ if (hs == NULL || hs->VerifyFile(filename) == false)
+ return false;
+ return true;
}
+ /*}}}*/
+bool HashStringList::operator==(HashStringList const &other) const /*{{{*/
+{
+ std::string const forcedType = _config->Find("Acquire::ForceHash", "");
+ if (forcedType.empty() == false)
+ {
+ HashString const * const hs = other.find(forcedType);
+ HashString const * const ohs = other.find(forcedType);
+ if (hs == NULL || ohs == NULL)
+ return false;
+ return hs == ohs;
+ }
+ short matches = 0;
+ for (const_iterator hs = begin(); hs != end(); ++hs)
+ {
+ HashString const * const ohs = other.find(hs->HashType());
+ if (ohs == NULL)
+ continue;
+ if (*hs != *ohs)
+ return false;
+ ++matches;
+ }
+ if (matches == 0)
+ return false;
+ return true;
+}
+bool HashStringList::operator!=(HashStringList const &other) const
+{
+ return !(*this == other);
+}
+ /*}}}*/
-// Hashes::AddFD - Add the contents of the FD /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool Hashes::AddFD(int const Fd,unsigned long long Size, bool const addMD5,
- bool const addSHA1, bool const addSHA256, bool const addSHA512)
+// Hashes::Add* - Add the contents of data or FD /*{{{*/
+bool Hashes::Add(const unsigned char * const Data,unsigned long long const Size, unsigned int const Hashes)
+{
+ bool Res = true;
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+ if ((Hashes & MD5SUM) == MD5SUM)
+ Res &= MD5.Add(Data, Size);
+ if ((Hashes & SHA1SUM) == SHA1SUM)
+ Res &= SHA1.Add(Data, Size);
+ if ((Hashes & SHA256SUM) == SHA256SUM)
+ Res &= SHA256.Add(Data, Size);
+ if ((Hashes & SHA512SUM) == SHA512SUM)
+ Res &= SHA512.Add(Data, Size);
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic pop
+#endif
+ return Res;
+}
+bool Hashes::AddFD(int const Fd,unsigned long long Size, unsigned int const Hashes)
{
unsigned char Buf[64*64];
bool const ToEOF = (Size == UntilEOF);
if (ToEOF && Res == 0) // EOF
break;
Size -= Res;
- if (addMD5 == true)
- MD5.Add(Buf,Res);
- if (addSHA1 == true)
- SHA1.Add(Buf,Res);
- if (addSHA256 == true)
- SHA256.Add(Buf,Res);
- if (addSHA512 == true)
- SHA512.Add(Buf,Res);
+ if (Add(Buf, Res, Hashes) == false)
+ return false;
}
return true;
}
-bool Hashes::AddFD(FileFd &Fd,unsigned long long Size, bool const addMD5,
- bool const addSHA1, bool const addSHA256, bool const addSHA512)
+bool Hashes::AddFD(FileFd &Fd,unsigned long long Size, unsigned int const Hashes)
{
unsigned char Buf[64*64];
bool const ToEOF = (Size == 0);
else if (a == 0) // EOF
break;
Size -= a;
- if (addMD5 == true)
- MD5.Add(Buf, a);
- if (addSHA1 == true)
- SHA1.Add(Buf, a);
- if (addSHA256 == true)
- SHA256.Add(Buf, a);
- if (addSHA512 == true)
- SHA512.Add(Buf, a);
+ if (Add(Buf, a, Hashes) == false)
+ return false;
}
return true;
}
/*}}}*/
+HashStringList Hashes::GetHashStringList()
+{
+ HashStringList hashes;
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+ hashes.push_back(HashString("MD5Sum", MD5.Result().Value()));
+ hashes.push_back(HashString("SHA1", SHA1.Result().Value()));
+ hashes.push_back(HashString("SHA256", SHA256.Result().Value()));
+ hashes.push_back(HashString("SHA512", SHA512.Result().Value()));
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic pop
+#endif
+ return hashes;
+}
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ #pragma GCC diagnostic ignored "-Wsuggest-attribute=const"
+#endif
+Hashes::Hashes() {}
+Hashes::~Hashes() {}
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic pop
+#endif
#include <apt-pkg/md5.h>
#include <apt-pkg/sha1.h>
#include <apt-pkg/sha2.h>
+#include <apt-pkg/macros.h>
#include <cstring>
#include <string>
protected:
std::string Type;
std::string Hash;
- static const char* _SupportedHashes[10];
+ static const char * _SupportedHashes[10];
// internal helper
std::string GetHashForFile(std::string filename) const;
HashString();
// get hash type used
- std::string HashType() { return Type; };
+ std::string HashType() const { return Type; };
+ std::string HashValue() const { return Hash; };
// verify the given filename against the currently loaded hash
bool VerifyFile(std::string filename) const;
// helper
std::string toStr() const; // convert to str as "type:hash"
bool empty() const;
+ bool operator==(HashString const &other) const;
+ bool operator!=(HashString const &other) const;
// return the list of hashes we support
static APT_CONST const char** SupportedHashes();
};
+class HashStringList
+{
+ public:
+ /** find best hash if no specific one is requested
+ *
+ * @param type of the checksum to return, can be \b NULL
+ * @return If type is \b NULL (or the empty string) it will
+ * return the 'best' hash; otherwise the hash which was
+ * specifically requested. If no hash is found \b NULL will be returned.
+ */
+ HashString const * find(char const * const type) const;
+ HashString const * find(std::string const &type) const { return find(type.c_str()); }
+ /** check if the given hash type is supported
+ *
+ * @param type to check
+ * @return true if supported, otherwise false
+ */
+ static APT_PURE bool supported(char const * const type);
+ /** add the given #HashString to the list
+ *
+ * @param hashString to add
+ * @return true if the hash is added because it is supported and
+ * not already a different hash of the same type included, otherwise false
+ */
+ bool push_back(const HashString &hashString);
+ /** @return size of the list of HashStrings */
+ size_t size() const { return list.size(); }
+
+ /** take the 'best' hash and verify file with it
+ *
+ * @param filename to verify
+ * @return true if the file matches the hashsum, otherwise false
+ */
+ bool VerifyFile(std::string filename) const;
+
+ /** is the list empty ?
+ *
+ * @return \b true if the list is empty, otherwise \b false
+ */
+ bool empty() const { return list.empty(); }
+
+ /** has the list at least one good entry
+ *
+ * similar to #empty, but handles forced hashes.
+ *
+ * @return if no hash is forced, same result as #empty,
+ * if one is forced \b true if this has is available, \b false otherwise
+ */
+ bool usable() const;
+
+ typedef std::vector<HashString>::const_iterator const_iterator;
+
+ /** iterator to the first element */
+ const_iterator begin() const { return list.begin(); }
+
+ /** iterator to the end element */
+ const_iterator end() const { return list.end(); }
+
+ /** start fresh with a clear list */
+ void clear() { list.clear(); }
+
+ /** compare two HashStringList for similarity.
+ *
+ * Two lists are similar if at least one hashtype is in both lists
+ * and the hashsum matches. All hashes are checked by default,
+ * if one doesn't match false is returned regardless of how many
+ * matched before. If a hash is forced, only this hash is compared,
+ * all others are ignored.
+ */
+ bool operator==(HashStringList const &other) const;
+ bool operator!=(HashStringList const &other) const;
+
+ HashStringList() {}
+
+ // simplifying API-compatibility constructors
+ HashStringList(std::string const &hash) {
+ if (hash.empty() == false)
+ list.push_back(HashString(hash));
+ }
+ HashStringList(char const * const hash) {
+ if (hash != NULL && hash[0] != '\0')
+ list.push_back(HashString(hash));
+ }
+
+ private:
+ std::vector<HashString> list;
+};
+
class Hashes
{
+ /** \brief dpointer placeholder */
+ void *d;
+
public:
+ /* those will disappear in the future as it is hard to add new ones this way.
+ * Use Add* to build the results and get them via GetHashStringList() instead */
+ APT_DEPRECATED MD5Summation MD5;
+ APT_DEPRECATED SHA1Summation SHA1;
+ APT_DEPRECATED SHA256Summation SHA256;
+ APT_DEPRECATED SHA512Summation SHA512;
- MD5Summation MD5;
- SHA1Summation SHA1;
- SHA256Summation SHA256;
- SHA512Summation SHA512;
-
static const int UntilEOF = 0;
- inline bool Add(const unsigned char *Data,unsigned long long Size)
+ bool Add(const unsigned char * const Data, unsigned long long const Size, unsigned int const Hashes = ~0);
+ inline bool Add(const char * const Data)
+ {return Add((unsigned char const * const)Data,strlen(Data));};
+ inline bool Add(const unsigned char * const Beg,const unsigned char * const End)
+ {return Add(Beg,End-Beg);};
+
+ enum SupportedHashes { MD5SUM = (1 << 0), SHA1SUM = (1 << 1), SHA256SUM = (1 << 2),
+ SHA512SUM = (1 << 3) };
+ bool AddFD(int const Fd,unsigned long long Size = 0, unsigned int const Hashes = ~0);
+ bool AddFD(FileFd &Fd,unsigned long long Size = 0, unsigned int const Hashes = ~0);
+
+ HashStringList GetHashStringList();
+
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+ Hashes();
+ virtual ~Hashes();
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic pop
+#endif
+
+ private:
+ APT_HIDDEN APT_CONST inline unsigned int boolsToFlag(bool const addMD5, bool const addSHA1, bool const addSHA256, bool const addSHA512)
{
- return MD5.Add(Data,Size) && SHA1.Add(Data,Size) && SHA256.Add(Data,Size) && SHA512.Add(Data,Size);
+ unsigned int Hashes = ~0;
+ if (addMD5 == false) Hashes &= ~MD5SUM;
+ if (addSHA1 == false) Hashes &= ~SHA1SUM;
+ if (addSHA256 == false) Hashes &= ~SHA256SUM;
+ if (addSHA512 == false) Hashes &= ~SHA512SUM;
+ return Hashes;
+ }
+
+ public:
+ APT_DEPRECATED bool AddFD(int const Fd, unsigned long long Size, bool const addMD5,
+ bool const addSHA1, bool const addSHA256, bool const addSHA512) {
+ return AddFD(Fd, Size, boolsToFlag(addMD5, addSHA1, addSHA256, addSHA512));
+ };
+
+ APT_DEPRECATED bool AddFD(FileFd &Fd, unsigned long long Size, bool const addMD5,
+ bool const addSHA1, bool const addSHA256, bool const addSHA512) {
+ return AddFD(Fd, Size, boolsToFlag(addMD5, addSHA1, addSHA256, addSHA512));
};
- inline bool Add(const char *Data) {return Add((unsigned char const *)Data,strlen(Data));};
- inline bool AddFD(int const Fd,unsigned long long Size = 0)
- { return AddFD(Fd, Size, true, true, true, true); };
- bool AddFD(int const Fd, unsigned long long Size, bool const addMD5,
- bool const addSHA1, bool const addSHA256, bool const addSHA512);
- inline bool AddFD(FileFd &Fd,unsigned long long Size = 0)
- { return AddFD(Fd, Size, true, true, true, true); };
- bool AddFD(FileFd &Fd, unsigned long long Size, bool const addMD5,
- bool const addSHA1, bool const addSHA256, bool const addSHA512);
- inline bool Add(const unsigned char *Beg,const unsigned char *End)
- {return Add(Beg,End-Beg);};
};
#endif
// Non-ABI-Breaks should only increase RELEASE number.
// See also buildlib/libversion.mak
#define APT_PKG_MAJOR 4
-#define APT_PKG_MINOR 12
+#define APT_PKG_MINOR 13
#define APT_PKG_RELEASE 0
#endif
return retcode;
}
-// for some unknown reason this method is exported so keep a compatible interface for now …
-int parsenetrc (char *host, char *login, char *password, char *netrcfile = NULL)
-{
- std::string login_string, password_string;
- int const ret = parsenetrc_string(host, login_string, password_string, netrcfile);
- if (ret < 0)
- return ret;
- strncpy(login, login_string.c_str(), LOGINSIZE - 1);
- strncpy(password, password_string.c_str(), PASSWORDSIZE - 1);
- return ret;
-}
-
void maybe_add_auth (URI &Uri, string NetRCFile)
{
class URI;
-// FIXME: kill this export on the next ABI break - strongly doubt its in use anyway
-// outside of the apt itself, its really a internal interface
-APT_DEPRECATED int parsenetrc (char *host, char *login, char *password, char *filename);
-
void maybe_add_auth (URI &Uri, std::string NetRCFile);
#endif
#include <apt-pkg/pkgcachegen.h>
#include <apt-pkg/pkgrecords.h>
#include <apt-pkg/srcrecords.h>
+#include <apt-pkg/sptr.h>
#include <stdio.h>
#include <iostream>
pkgCache::PkgFileIterator CFile = Gen.GetCurFile();
CFile->Size = Pkg.FileSize();
CFile->mtime = Pkg.ModificationTime();
- map_ptrloc const storage = Gen.WriteUniqString("now");
+ map_stringitem_t const storage = Gen.WriteUniqString("now");
CFile->Archive = storage;
if (Gen.MergeList(Parser) == false)
}
/*}}}*/
+// debDebPkgFile - Single .deb file /*{{{*/
+// ---------------------------------------------------------------------
+debDebPkgFileIndex::debDebPkgFileIndex(std::string DebFile)
+ : pkgIndexFile(true), DebFile(DebFile)
+{
+ DebFileFullPath = flAbsPath(DebFile);
+}
+
+std::string debDebPkgFileIndex::ArchiveURI(std::string /*File*/) const
+{
+ return "file:" + DebFileFullPath;
+}
+
+bool debDebPkgFileIndex::Exists() const
+{
+ return FileExists(DebFile);
+}
+bool debDebPkgFileIndex::Merge(pkgCacheGenerator& Gen, OpProgress* Prog) const
+{
+ if(Prog)
+ Prog->SubProgress(0, "Reading deb file");
+
+ // get the control data out of the deb file vid dpkg -I
+ // ... can I haz libdpkg?
+ std::string dpkg = _config->Find("Dir::Bin::dpkg","dpkg");
+ const char *Args[5] = {dpkg.c_str(),
+ "-I",
+ DebFile.c_str(),
+ "control",
+ NULL};
+ FileFd PipeFd;
+ pid_t Child;
+ if(Popen(Args, PipeFd, Child, FileFd::ReadOnly) == false)
+ return _error->Error("Popen failed");
+ // FIXME: static buffer
+ char buf[8*1024];
+ unsigned long long n = 0;
+ if(PipeFd.Read(buf, sizeof(buf)-1, &n) == false)
+ return _error->Errno("read", "Failed to read dpkg pipe");
+ ExecWait(Child, "Popen");
+
+ // now write the control data to a tempfile
+ SPtr<FileFd> DebControl = GetTempFile("deb-file-" + DebFile);
+ if(DebControl == NULL)
+ return false;
+ DebControl->Write(buf, n);
+ // append size of the file
+ FileFd Fd(DebFile, FileFd::ReadOnly);
+ string Size;
+ strprintf(Size, "Size: %llu\n", Fd.Size());
+ DebControl->Write(Size.c_str(), Size.size());
+ // and rewind for the listparser
+ DebControl->Seek(0);
+
+ // and give it to the list parser
+ debDebFileParser Parser(DebControl, DebFile);
+ if(Gen.SelectFile(DebFile, "local", *this) == false)
+ return _error->Error("Problem with SelectFile %s", DebFile.c_str());
+
+ pkgCache::PkgFileIterator File = Gen.GetCurFile();
+ File->Size = DebControl->Size();
+ File->mtime = DebControl->ModificationTime();
+
+ if (Gen.MergeList(Parser) == false)
+ return _error->Error("Problem with MergeLister for %s", DebFile.c_str());
+
+ return true;
+}
+pkgCache::PkgFileIterator debDebPkgFileIndex::FindInCache(pkgCache &Cache) const
+{
+ // FIXME: we could simply always return pkgCache::PkgFileIterator(Cache);
+ // to indicate its never in the cache which will force a Merge()
+ pkgCache::PkgFileIterator File = Cache.FileBegin();
+ for (; File.end() == false; ++File)
+ {
+ if (File.FileName() == NULL || DebFile != File.FileName())
+ continue;
+
+ return File;
+ }
+
+ return File;
+}
+unsigned long debDebPkgFileIndex::Size() const
+{
+ struct stat buf;
+ if(stat(DebFile.c_str(), &buf) != 0)
+ return 0;
+ return buf.st_size;
+}
+ /*}}}*/
+
+// debDscFileIndex stuff
+debDscFileIndex::debDscFileIndex(std::string &DscFile)
+ : pkgIndexFile(true), DscFile(DscFile)
+{
+}
+
+bool debDscFileIndex::Exists() const
+{
+ return FileExists(DscFile);
+}
+
+unsigned long debDscFileIndex::Size() const
+{
+ struct stat buf;
+ if(stat(DscFile.c_str(), &buf) == 0)
+ return buf.st_size;
+ return 0;
+}
+
+// DscFileIndex::CreateSrcParser - Get a parser for the .dsc file /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+pkgSrcRecords::Parser *debDscFileIndex::CreateSrcParser() const
+{
+ if (!FileExists(DscFile))
+ return NULL;
+
+ return new debDscRecordParser(DscFile,this);
+}
+ /*}}}*/
+
+
+
+
+// ---------------------------------------------------------------------
// Index File types for Debian /*{{{*/
class debIFTypeSrc : public pkgIndexFile::Type
{
};
debIFTypeStatus() {Label = "Debian dpkg status file";};
};
+class debIFTypeDebPkgFile : public pkgIndexFile::Type
+{
+ public:
+ virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator File) const
+ {
+ return new debDebFileRecordParser(File.FileName(),*File.Cache());
+ };
+ debIFTypeDebPkgFile() {Label = "deb Package file";};
+};
+class debIFTypeDscFile : public pkgIndexFile::Type
+{
+ public:
+ virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string DscFile) const
+ {
+ return new debDscRecordParser(DscFile, NULL);
+ };
+ debIFTypeDscFile() {Label = "dsc File Source Index";};
+};
+class debIFTypeDebianSourceDir : public pkgIndexFile::Type
+{
+ public:
+ virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string SourceDir) const
+ {
+ return new debDscRecordParser(SourceDir + string("/debian/control"), NULL);
+ };
+ debIFTypeDebianSourceDir() {Label = "debian/control File Source Index";};
+};
+
static debIFTypeSrc _apt_Src;
static debIFTypePkg _apt_Pkg;
static debIFTypeTrans _apt_Trans;
static debIFTypeStatus _apt_Status;
+static debIFTypeDebPkgFile _apt_DebPkgFile;
+// file based pseudo indexes
+static debIFTypeDscFile _apt_DscFile;
+static debIFTypeDebianSourceDir _apt_DebianSourceDir;
const pkgIndexFile::Type *debSourcesIndex::GetType() const
{
{
return &_apt_Status;
}
-
+const pkgIndexFile::Type *debDebPkgFileIndex::GetType() const
+{
+ return &_apt_DebPkgFile;
+}
+const pkgIndexFile::Type *debDscFileIndex::GetType() const
+{
+ return &_apt_DscFile;
+}
+const pkgIndexFile::Type *debDebianSourceDirIndex::GetType() const
+{
+ return &_apt_DebianSourceDir;
+}
/*}}}*/
virtual ~debSourcesIndex() {};
};
+class debDebPkgFileIndex : public pkgIndexFile
+{
+ private:
+ void *d;
+ std::string DebFile;
+ std::string DebFileFullPath;
+
+ public:
+ virtual const Type *GetType() const APT_CONST;
+
+ virtual std::string Describe(bool /*Short*/) const {
+ return DebFile;
+ }
+
+ // Interface for the Cache Generator
+ virtual bool Exists() const;
+ virtual bool HasPackages() const {
+ return true;
+ };
+ virtual unsigned long Size() const;
+ virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const;
+ virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
+
+ // Interface for acquire
+ virtual std::string ArchiveURI(std::string /*File*/) const;
+
+ debDebPkgFileIndex(std::string DebFile);
+ virtual ~debDebPkgFileIndex() {};
+};
+
+class debDscFileIndex : public pkgIndexFile
+{
+ private:
+ std::string DscFile;
+ public:
+ virtual const Type *GetType() const APT_CONST;
+ virtual pkgSrcRecords::Parser *CreateSrcParser() const;
+ virtual bool Exists() const;
+ virtual bool HasPackages() const {return false;};
+ virtual unsigned long Size() const;
+ virtual std::string Describe(bool /*Short*/) const {
+ return DscFile;
+ };
+
+ debDscFileIndex(std::string &DscFile);
+ virtual ~debDscFileIndex() {};
+};
+
+class debDebianSourceDirIndex : public debDscFileIndex
+{
+ virtual const Type *GetType() const APT_CONST;
+};
+
#endif
// ListParser::UniqFindTagWrite - Find the tag and write a unq string /*{{{*/
// ---------------------------------------------------------------------
/* */
-unsigned long debListParser::UniqFindTagWrite(const char *Tag)
+map_stringitem_t debListParser::UniqFindTagWrite(const char *Tag)
{
const char *Start;
const char *Stop;
/* This is to return the string describing the package in debian
form. If this returns the blank string then the entry is assumed to
only describe package properties */
-string debListParser::Description()
+string debListParser::Description(std::string const &lang)
{
- string const lang = DescriptionLanguage();
if (lang.empty())
return Section.FindS("Description");
else
return Section.FindS(string("Description-").append(lang).c_str());
}
- /*}}}*/
-// ListParser::DescriptionLanguage - Return the description lang string /*{{{*/
-// ---------------------------------------------------------------------
-/* This is to return the string describing the language of
- description. If this returns the blank string then the entry is
- assumed to describe original description. */
-string debListParser::DescriptionLanguage()
+ /*}}}*/
+// ListParser::AvailableDescriptionLanguages /*{{{*/
+std::vector<std::string> debListParser::AvailableDescriptionLanguages()
{
- if (Section.FindS("Description").empty() == false)
- return "";
-
- std::vector<string> const lang = APT::Configuration::getLanguages(true);
- for (std::vector<string>::const_iterator l = lang.begin();
- l != lang.end(); ++l)
- if (Section.FindS(string("Description-").append(*l).c_str()).empty() == false)
- return *l;
-
- return "";
+ std::vector<std::string> const understood = APT::Configuration::getLanguages();
+ std::vector<std::string> avail;
+ if (Section.Exists("Description") == true)
+ avail.push_back("");
+ for (std::vector<std::string>::const_iterator lang = understood.begin(); lang != understood.end(); ++lang)
+ {
+ std::string const tagname = "Description-" + *lang;
+ if (Section.Exists(tagname.c_str()) == true)
+ avail.push_back(*lang);
+ }
+ return avail;
}
- /*}}}*/
-// ListParser::Description - Return the description_md5 MD5SumValue /*{{{*/
+ /*}}}*/
+// ListParser::Description_md5 - Return the description_md5 MD5SumValue /*{{{*/
// ---------------------------------------------------------------------
/* This is to return the md5 string to allow the check if it is the right
description. If no Description-md5 is found in the section it will be
string const value = Section.FindS("Description-md5");
if (value.empty() == true)
{
- std::string const desc = Description() + "\n";
+ std::string const desc = Description("") + "\n";
if (desc == "\n")
return MD5SumValue();
bool debListParser::UsePackage(pkgCache::PkgIterator &Pkg,
pkgCache::VerIterator &Ver)
{
- if (Pkg->Section == 0)
- Pkg->Section = UniqFindTagWrite("Section");
-
string const static myArch = _config->Find("APT::Architecture");
// Possible values are: "all", "native", "installed" and "none"
// The "installed" mode is handled by ParseStatus(), See #544481 and friends.
{
// apt-secure does no longer download individual (per-section) Release
// file. to provide Component pinning we use the section name now
- map_ptrloc const storage = WriteUniqString(component);
+ map_stringitem_t const storage = WriteUniqString(component);
FileI->Component = storage;
pkgTagFile TagFile(&File, File.Size());
data = Section.FindS(TAG); \
if (data.empty() == false) \
{ \
- map_ptrloc const storage = WriteUniqString(data); \
+ map_stringitem_t const storage = WriteUniqString(data); \
STORE = storage; \
}
APT_INRELEASE("Suite", FileI->Archive)
}
/*}}}*/
#endif
+
+
+debDebFileParser::debDebFileParser(FileFd *File, std::string const &DebFile)
+ : debListParser(File, ""), DebFile(DebFile)
+{
+}
+
+bool debDebFileParser::UsePackage(pkgCache::PkgIterator &Pkg,
+ pkgCache::VerIterator &Ver)
+{
+ bool res = debListParser::UsePackage(Pkg, Ver);
+ // we use the full file path as a provides so that the file is found
+ // by its name
+ if(NewProvidesAllArch(Ver, DebFile, Ver.VerStr()) == false)
+ return false;
+ return res;
+}
+
+
+
protected:
pkgTagFile Tags;
pkgTagSection Section;
- unsigned long iOffset;
+ map_filesize_t iOffset;
std::string Arch;
std::vector<std::string> Architectures;
bool MultiArchEnabled;
- unsigned long UniqFindTagWrite(const char *Tag);
+ map_stringitem_t UniqFindTagWrite(const char *Tag);
virtual bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver);
bool ParseDepends(pkgCache::VerIterator &Ver,const char *Tag,
unsigned int Type);
bool ParseProvides(pkgCache::VerIterator &Ver);
bool NewProvidesAllArch(pkgCache::VerIterator &Ver, std::string const &Package, std::string const &Version);
static bool GrabWord(std::string Word,WordList *List,unsigned char &Out);
-
+ APT_HIDDEN unsigned char ParseMultiArch(bool const showErrors);
+
public:
static unsigned char GetPrio(std::string Str);
virtual bool ArchitectureAll();
virtual std::string Version();
virtual bool NewVersion(pkgCache::VerIterator &Ver);
- virtual std::string Description();
- virtual std::string DescriptionLanguage();
+ virtual std::string Description(std::string const &lang);
+ virtual std::vector<std::string> AvailableDescriptionLanguages();
virtual MD5SumValue Description_md5();
virtual unsigned short VersionHash();
#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR >= 13)
#endif
virtual bool UsePackage(pkgCache::PkgIterator &Pkg,
pkgCache::VerIterator &Ver);
- virtual unsigned long Offset() {return iOffset;};
- virtual unsigned long Size() {return Section.size();};
+ virtual map_filesize_t Offset() {return iOffset;};
+ virtual map_filesize_t Size() {return Section.size();};
virtual bool Step();
debListParser(FileFd *File, std::string const &Arch = "");
virtual ~debListParser() {};
+};
- private:
- APT_HIDDEN unsigned char ParseMultiArch(bool const showErrors);
+class debDebFileParser : public debListParser
+{
+ private:
+ std::string DebFile;
+
+ public:
+ debDebFileParser(FileFd *File, std::string const &DebFile);
+ virtual bool UsePackage(pkgCache::PkgIterator &Pkg,
+ pkgCache::VerIterator &Ver);
};
class debTranslationsParser : public debListParser
delete *S;
}
-vector <struct IndexTarget *>* debReleaseIndex::ComputeIndexTargets() const {
- vector <struct IndexTarget *>* IndexTargets = new vector <IndexTarget *>;
+vector <IndexTarget *>* debReleaseIndex::ComputeIndexTargets() const {
+ vector <IndexTarget *>* IndexTargets = new vector <IndexTarget *>;
map<string, vector<debSectionEntry const*> >::const_iterator const src = ArchEntries.find("source");
if (src != ArchEntries.end()) {
// special case for --print-uris
if (GetAll) {
- vector <struct IndexTarget *> *targets = ComputeIndexTargets();
- for (vector <struct IndexTarget*>::const_iterator Target = targets->begin(); Target != targets->end(); ++Target) {
+ vector <IndexTarget *> *targets = ComputeIndexTargets();
+ for (vector <IndexTarget*>::const_iterator Target = targets->begin(); Target != targets->end(); ++Target) {
new pkgAcqIndex(Owner, (*Target)->URI, (*Target)->Description,
- (*Target)->ShortDesc, HashString());
+ (*Target)->ShortDesc, HashStringList());
}
delete targets;
}
};
+debDebFileMetaIndex::debDebFileMetaIndex(std::string const &DebFile)
+ : metaIndex(DebFile, "local-uri", "deb-dist"), DebFile(DebFile)
+{
+ DebIndex = new debDebPkgFileIndex(DebFile);
+ Indexes = new vector<pkgIndexFile *>();
+ Indexes->push_back(DebIndex);
+}
+
+
class debSLTypeDeb : public debSLTypeDebian
{
public:
}
};
+class debSLTypeDebFile : public pkgSourceList::Type
+{
+ public:
+
+ bool CreateItem(vector<metaIndex *> &List, string const &URI,
+ string const &/*Dist*/, string const &/*Section*/,
+ std::map<string, string> const &/*Options*/) const
+ {
+ metaIndex *mi = new debDebFileMetaIndex(URI);
+ List.push_back(mi);
+ return true;
+ }
+
+ debSLTypeDebFile()
+ {
+ Name = "deb-file";
+ Label = "Debian Deb File";
+ }
+};
debSLTypeDeb _apt_DebType;
debSLTypeDebSrc _apt_DebSrcType;
+debSLTypeDebFile _apt_DebFileType;
class pkgAcquire;
class pkgIndexFile;
+class debDebPkgFileIndex;
+class IndexTarget;
class debReleaseIndex : public metaIndex {
public:
virtual std::string ArchiveURI(std::string const &File) const {return URI + File;};
virtual bool GetIndexes(pkgAcquire *Owner, bool const &GetAll=false) const;
- std::vector <struct IndexTarget *>* ComputeIndexTargets() const;
+ std::vector <IndexTarget *>* ComputeIndexTargets() const;
std::string Info(const char *Type, std::string const &Section, std::string const &Arch="") const;
std::string MetaIndexInfo(const char *Type) const;
void PushSectionEntry(const debSectionEntry *Entry);
};
+class debDebFileMetaIndex : public metaIndex
+{
+ private:
+ std::string DebFile;
+ debDebPkgFileIndex *DebIndex;
+ public:
+ virtual std::string ArchiveURI(std::string const& /*File*/) const {
+ return DebFile;
+ }
+ virtual bool GetIndexes(pkgAcquire* /*Owner*/, const bool& /*GetAll=false*/) const {
+ return true;
+ }
+ virtual std::vector<pkgIndexFile *> *GetIndexFiles() {
+ return Indexes;
+ }
+ virtual bool IsTrusted() const {
+ return true;
+ }
+ debDebFileMetaIndex(std::string const &DebFile);
+ virtual ~debDebFileMetaIndex() {};
+
+};
+
#endif
return Section.FindS("Homepage");
}
/*}}}*/
-// RecordParser::MD5Hash - Return the archive hash /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-string debRecordParser::MD5Hash()
-{
- return Section.FindS("MD5Sum");
-}
- /*}}}*/
-// RecordParser::SHA1Hash - Return the archive hash /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-string debRecordParser::SHA1Hash()
-{
- return Section.FindS("SHA1");
-}
- /*}}}*/
-// RecordParser::SHA256Hash - Return the archive hash /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-string debRecordParser::SHA256Hash()
-{
- return Section.FindS("SHA256");
-}
- /*}}}*/
-// RecordParser::SHA512Hash - Return the archive hash /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-string debRecordParser::SHA512Hash()
+// RecordParser::Hashes - return the available archive hashes /*{{{*/
+HashStringList debRecordParser::Hashes() const
{
- return Section.FindS("SHA512");
+ HashStringList hashes;
+ for (char const * const * type = HashString::SupportedHashes(); *type != NULL; ++type)
+ {
+ std::string const hash = Section.FindS(*type);
+ if (hash.empty() == false)
+ hashes.push_back(HashString(*type, hash));
+ }
+ return hashes;
}
/*}}}*/
// RecordParser::Maintainer - Return the maintainer email /*{{{*/
// RecordParser::ShortDesc - Return a 1 line description /*{{{*/
// ---------------------------------------------------------------------
/* */
-string debRecordParser::ShortDesc()
+string debRecordParser::ShortDesc(std::string const &lang)
{
- string Res = LongDesc();
- string::size_type Pos = Res.find('\n');
+ string const Res = LongDesc(lang);
+ if (Res.empty() == true)
+ return "";
+ string::size_type const Pos = Res.find('\n');
if (Pos == string::npos)
return Res;
return string(Res,0,Pos);
// RecordParser::LongDesc - Return a longer description /*{{{*/
// ---------------------------------------------------------------------
/* */
-string debRecordParser::LongDesc()
-{
- string orig, dest;
+string debRecordParser::LongDesc(std::string const &lang)
+{
+ string orig;
+ if (lang.empty() == true)
+ {
+ std::vector<string> const lang = APT::Configuration::getLanguages();
+ for (std::vector<string>::const_iterator l = lang.begin();
+ l != lang.end(); ++l)
+ {
+ std::string const tagname = "Description-" + *l;
+ orig = Section.FindS(tagname.c_str());
+ if (orig.empty() == false)
+ break;
+ else if (*l == "en")
+ {
+ orig = Section.FindS("Description");
+ if (orig.empty() == false)
+ break;
+ }
+ }
+ if (orig.empty() == true)
+ orig = Section.FindS("Description");
+ }
+ else
+ {
+ std::string const tagname = "Description-" + lang;
+ orig = Section.FindS(tagname.c_str());
+ if (orig.empty() == true && lang == "en")
+ orig = Section.FindS("Description");
+ }
- if (!Section.FindS("Description").empty())
- orig = Section.FindS("Description").c_str();
- else
- {
- std::vector<string> const lang = APT::Configuration::getLanguages();
- for (std::vector<string>::const_iterator l = lang.begin();
- orig.empty() && l != lang.end(); ++l)
- orig = Section.FindS(string("Description-").append(*l).c_str());
- }
+ char const * const codeset = nl_langinfo(CODESET);
+ if (strcmp(codeset,"UTF-8") != 0) {
+ string dest;
+ UTF8ToCodeset(codeset, orig, &dest);
+ return dest;
+ }
- char const * const codeset = nl_langinfo(CODESET);
- if (strcmp(codeset,"UTF-8") != 0) {
- UTF8ToCodeset(codeset, orig, &dest);
- orig = dest;
- }
-
return orig;
}
/*}}}*/
{
/** \brief dpointer placeholder (for later in case we need it) */
void *d;
-
+
+ protected:
FileFd File;
pkgTagFile Tags;
pkgTagSection Section;
- protected:
-
virtual bool Jump(pkgCache::VerFileIterator const &Ver);
virtual bool Jump(pkgCache::DescFileIterator const &Desc);
- public:
+ public:
// These refer to the archive file for the Version
virtual std::string FileName();
- virtual std::string MD5Hash();
- virtual std::string SHA1Hash();
- virtual std::string SHA256Hash();
- virtual std::string SHA512Hash();
virtual std::string SourcePkg();
virtual std::string SourceVer();
-
+
+ virtual HashStringList Hashes() const;
+
// These are some general stats about the package
virtual std::string Maintainer();
- virtual std::string ShortDesc();
- virtual std::string LongDesc();
+ virtual std::string ShortDesc(std::string const &lang);
+ virtual std::string LongDesc(std::string const &lang);
virtual std::string Name();
virtual std::string Homepage();
virtual ~debRecordParser() {};
};
+// custom record parser that reads deb files directly
+class debDebFileRecordParser : public debRecordParser
+{
+ public:
+ virtual std::string FileName() {
+ return File.Name();
+ }
+ debDebFileRecordParser(std::string FileName,pkgCache &Cache)
+ : debRecordParser(FileName, Cache) {};
+};
+
#endif
#include <apt-pkg/aptconfiguration.h>
#include <apt-pkg/srcrecords.h>
#include <apt-pkg/tagfile.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/gpgv.h>
#include <ctype.h>
#include <stdlib.h>
char* binStartNext = strchrnul(bin, ',');
char* binEnd = binStartNext - 1;
for (; isspace(*binEnd) != 0; --binEnd)
- binEnd = '\0';
+ binEnd = 0;
StaticBinList.push_back(bin);
if (*binStartNext != ',')
break;
*binStartNext = '\0';
- for (bin = binStartNext + 1; isspace(*bin) != 0; ++bin);
+ for (bin = binStartNext + 1; isspace(*bin) != 0; ++bin)
+ ;
} while (*bin != '\0');
StaticBinList.push_back(NULL);
bool debSrcRecordParser::Files(std::vector<pkgSrcRecords::File> &List)
{
List.erase(List.begin(),List.end());
-
- string Files = Sect.FindS("Files");
- if (Files.empty() == true)
- return false;
// Stash the / terminated directory prefix
string Base = Sect.FindS("Directory");
std::vector<std::string> const compExts = APT::Configuration::getCompressorExtensions();
- // Iterate over the entire list grabbing each triplet
- const char *C = Files.c_str();
- while (*C != 0)
- {
- pkgSrcRecords::File F;
- string Size;
-
- // Parse each of the elements
- if (ParseQuoteWord(C,F.MD5Hash) == false ||
- ParseQuoteWord(C,Size) == false ||
- ParseQuoteWord(C,F.Path) == false)
- return _error->Error("Error parsing file record");
-
- // Parse the size and append the directory
- F.Size = atoi(Size.c_str());
- F.Path = Base + F.Path;
-
- // Try to guess what sort of file it is we are getting.
- string::size_type Pos = F.Path.length()-1;
- while (1)
+ for (char const * const * type = HashString::SupportedHashes(); *type != NULL; ++type)
+ {
+ // derive field from checksum type
+ std::string checksumField("Checksums-");
+ if (strcmp(*type, "MD5Sum") == 0)
+ checksumField = "Files"; // historic name for MD5 checksums
+ else
+ checksumField.append(*type);
+
+ string const Files = Sect.FindS(checksumField.c_str());
+ if (Files.empty() == true)
+ continue;
+
+ // Iterate over the entire list grabbing each triplet
+ const char *C = Files.c_str();
+ while (*C != 0)
{
- string::size_type Tmp = F.Path.rfind('.',Pos);
- if (Tmp == string::npos)
- break;
- if (F.Type == "tar") {
- // source v3 has extension 'debian.tar.*' instead of 'diff.*'
- if (string(F.Path, Tmp+1, Pos-Tmp) == "debian")
- F.Type = "diff";
- break;
- }
- F.Type = string(F.Path,Tmp+1,Pos-Tmp);
-
- if (std::find(compExts.begin(), compExts.end(), std::string(".").append(F.Type)) != compExts.end() ||
- F.Type == "tar")
+ string hash, size, path;
+
+ // Parse each of the elements
+ if (ParseQuoteWord(C, hash) == false ||
+ ParseQuoteWord(C, size) == false ||
+ ParseQuoteWord(C, path) == false)
+ return _error->Error("Error parsing file record in %s of source package %s", checksumField.c_str(), Package().c_str());
+
+ HashString const hashString(*type, hash);
+ if (Base.empty() == false)
+ path = Base + path;
+
+ // look if we have a record for this file already
+ std::vector<pkgSrcRecords::File>::iterator file = List.begin();
+ for (; file != List.end(); ++file)
+ if (file->Path == path)
+ break;
+
+ // we have it already, store the new hash and be done
+ if (file != List.end())
{
- Pos = Tmp-1;
+#if __GNUC__ >= 4
+ // set for compatibility only, so warn users not us
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+ if (checksumField == "Files")
+ file->MD5Hash = hash;
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic pop
+#endif
+ // an error here indicates that we have two different hashes for the same file
+ if (file->Hashes.push_back(hashString) == false)
+ return _error->Error("Error parsing checksum in %s of source package %s", checksumField.c_str(), Package().c_str());
continue;
}
-
- break;
+
+ // we haven't seen this file yet
+ pkgSrcRecords::File F;
+ F.Path = path;
+ F.Size = strtoull(size.c_str(), NULL, 10);
+ F.Hashes.push_back(hashString);
+
+#if __GNUC__ >= 4
+ // set for compatibility only, so warn users not us
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+ if (checksumField == "Files")
+ F.MD5Hash = hash;
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic pop
+#endif
+
+ // Try to guess what sort of file it is we are getting.
+ string::size_type Pos = F.Path.length()-1;
+ while (1)
+ {
+ string::size_type Tmp = F.Path.rfind('.',Pos);
+ if (Tmp == string::npos)
+ break;
+ if (F.Type == "tar") {
+ // source v3 has extension 'debian.tar.*' instead of 'diff.*'
+ if (string(F.Path, Tmp+1, Pos-Tmp) == "debian")
+ F.Type = "diff";
+ break;
+ }
+ F.Type = string(F.Path,Tmp+1,Pos-Tmp);
+
+ if (std::find(compExts.begin(), compExts.end(), std::string(".").append(F.Type)) != compExts.end() ||
+ F.Type == "tar")
+ {
+ Pos = Tmp-1;
+ continue;
+ }
+
+ break;
+ }
+ List.push_back(F);
}
-
- List.push_back(F);
}
-
+
return true;
}
/*}}}*/
free(Buffer);
}
/*}}}*/
+
+
+debDscRecordParser::debDscRecordParser(std::string const &DscFile, pkgIndexFile const *Index)
+ : debSrcRecordParser(DscFile, Index)
+{
+ // support clear signed files
+ if (OpenMaybeClearSignedFile(DscFile, Fd) == false)
+ {
+ _error->Error("Failed to open %s", DscFile.c_str());
+ return;
+ }
+
+ // re-init to ensure the updated Fd is used
+ Tags.Init(&Fd);
+ // read the first (and only) record
+ Step();
+
+}
/** \brief dpointer placeholder (for later in case we need it) */
void *d;
+ protected:
FileFd Fd;
pkgTagFile Tags;
pkgTagSection Sect;
virtual ~debSrcRecordParser();
};
+class debDscRecordParser : public debSrcRecordParser
+{
+ public:
+ debDscRecordParser(std::string const &DscFile, pkgIndexFile const *Index);
+};
+
#endif
void pkgDPkgPM::DoStdin(int master)
{
unsigned char input_buf[256] = {0,};
- ssize_t len = read(0, input_buf, sizeof(input_buf));
+ ssize_t len = read(STDIN_FILENO, input_buf, sizeof(input_buf));
if (len)
FileFd::Write(master, input_buf, len);
else
}
}
/*}}}*/
-#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR < 13)
bool pkgDPkgPM::Go(int StatusFd)
{
APT::Progress::PackageManager *progress = NULL;
else
progress = new APT::Progress::PackageManagerProgressFd(StatusFd);
- return GoNoABIBreak(progress);
+ return Go(progress);
}
-#endif
void pkgDPkgPM::StartPtyMagic()
{
* through to human readable (and i10n-able)
* names and calculates a percentage for each step.
*/
-#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR >= 13)
bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
-#else
-bool pkgDPkgPM::GoNoABIBreak(APT::Progress::PackageManager *progress)
-#endif
{
pkgPackageManager::SigINTStop = false;
d->progress = progress;
void DoTerminalPty(int master);
void DoDpkgStatusFd(int statusfd);
void ProcessDpkgStatusLine(char *line);
-#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR < 13)
- void DoDpkgStatusFd(int statusfd, int /*unused*/) {
- DoDpkgStatusFd(statusfd);
- }
- void ProcessDpkgStatusLine(int /*unused*/, char *line) {
- ProcessDpkgStatusLine(line);
- }
-#endif
-
// The Actuall installation implementation
virtual bool Install(PkgIterator Pkg,std::string File);
virtual bool Configure(PkgIterator Pkg);
virtual bool Remove(PkgIterator Pkg,bool Purge = false);
-#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR >= 13)
virtual bool Go(APT::Progress::PackageManager *progress);
-#else
virtual bool Go(int StatusFd=-1);
- bool GoNoABIBreak(APT::Progress::PackageManager *progress);
-#endif
virtual void Reset();
continue;
}
// now check if we should consider it a automatic dependency or not
- if(InstPkg->CurrentVer == 0 && Pkg->Section != 0 && ConfigValueInSubTree("APT::Never-MarkAuto-Sections", Pkg.Section()))
+ if(InstPkg->CurrentVer == 0 && InstVer->Section != 0 && ConfigValueInSubTree("APT::Never-MarkAuto-Sections", InstVer.Section()))
{
if(DebugAutoInstall == true)
std::clog << OutputInDepth(Depth) << "Setting NOT as auto-installed (direct "
pkgCache::PkgFileIterator CFile = Gen.GetCurFile();
CFile->Size = Pkg.FileSize();
CFile->mtime = Pkg.ModificationTime();
- map_ptrloc const storage = Gen.WriteUniqString("edsp::scenario");
+ map_stringitem_t const storage = Gen.WriteUniqString("edsp::scenario");
CFile->Archive = storage;
if (Gen.MergeList(Parser) == false)
return false;
}
- if (!Record->Hash.VerifyFile(prefix+file))
+ if (!Record->Hashes.VerifyFile(prefix+file))
{
_error->Warning(_("Hash mismatch for: %s"),file.c_str());
return false;
if(Debug == true)
{
- cout << "File: " << prefix+file << endl;
- cout << "Expected Hash " << Record->Hash.toStr() << endl;
+ cout << "File: " << prefix+file << endl
+ << "Expected Hash " << endl;
+ for (HashStringList::const_iterator hs = Record->Hashes.begin(); hs != Record->Hashes.end(); ++hs)
+ std::cout << "\t- " << hs->toStr() << std::endl;
}
return true;
const char *Label;
virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator /*File*/) const {return 0;};
+ virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string /*File*/) const {return 0;};
Type();
virtual ~Type() {};
};
return this->Suite;
}
+APT_PURE bool indexRecords::GetSupportsAcquireByHash() const
+{
+ return this->SupportsAcquireByHash;
+}
+
APT_PURE bool indexRecords::CheckDist(const string MaybeDist) const
{
return (this->Dist == MaybeDist
return this->ValidUntil;
}
-APT_PURE const indexRecords::checkSum *indexRecords::Lookup(const string MetaKey)
+APT_PURE indexRecords::checkSum *indexRecords::Lookup(const string MetaKey)
{
std::map<std::string, indexRecords::checkSum* >::const_iterator sum = Entries.find(MetaKey);
if (sum == Entries.end())
strprintf(ErrorText, _("No sections in Release file %s"), Filename.c_str());
return false;
}
+ // FIXME: find better tag name
+ SupportsAcquireByHash = Section.FindB("Acquire-By-Hash", false);
Suite = Section.FindS("Suite");
Dist = Section.FindS("Codename");
- int i;
- for (i=0;HashString::SupportedHashes()[i] != NULL; i++)
+ bool FoundHashSum = false;
+ for (int i=0;HashString::SupportedHashes()[i] != NULL; i++)
{
if (!Section.Find(HashString::SupportedHashes()[i], Start, End))
continue;
{
if (!parseSumData(Start, End, Name, Hash, Size))
return false;
- indexRecords::checkSum *Sum = new indexRecords::checkSum;
- Sum->MetaKeyFilename = Name;
- Sum->Hash = HashString(HashString::SupportedHashes()[i],Hash);
- Sum->Size = Size;
- Entries[Name] = Sum;
+
+ if (Entries.find(Name) == Entries.end())
+ {
+ indexRecords::checkSum *Sum = new indexRecords::checkSum;
+ Sum->MetaKeyFilename = Name;
+ Sum->Size = Size;
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+ Sum->Hash = HashString(HashString::SupportedHashes()[i],Hash);
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic pop
+#endif
+ Entries[Name] = Sum;
+ }
+ Entries[Name]->Hashes.push_back(HashString(HashString::SupportedHashes()[i],Hash));
+ FoundHashSum = true;
}
- break;
}
- if(HashString::SupportedHashes()[i] == NULL)
+ if(FoundHashSum == false)
{
strprintf(ErrorText, _("No Hash entry in Release file %s"), Filename.c_str());
return false;
}
indexRecords::indexRecords(const string ExpectedDist) :
- ExpectedDist(ExpectedDist), ValidUntil(0)
+ ExpectedDist(ExpectedDist), ValidUntil(0), SupportsAcquireByHash(false)
{
}
public:
struct checkSum;
std::string ErrorText;
+ // dpointer (for later9
+ void * d;
protected:
std::string Dist;
std::string Suite;
std::string ExpectedDist;
time_t ValidUntil;
+ bool SupportsAcquireByHash;
std::map<std::string,checkSum *> Entries;
indexRecords(const std::string ExpectedDist);
// Lookup function
- virtual const checkSum *Lookup(const std::string MetaKey);
+ virtual checkSum *Lookup(const std::string MetaKey);
/** \brief tests if a checksum for this file is available */
bool Exists(std::string const &MetaKey) const;
std::vector<std::string> MetaKeys();
virtual bool Load(std::string Filename);
std::string GetDist() const;
std::string GetSuite() const;
+ bool GetSupportsAcquireByHash() const;
time_t GetValidUntil() const;
virtual bool CheckDist(const std::string MaybeDist) const;
std::string GetExpectedDist() const;
virtual ~indexRecords(){};
};
+#if __GNUC__ >= 4
+ // ensure that con- & de-structor don't trigger this warning
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
struct indexRecords::checkSum
{
std::string MetaKeyFilename;
- HashString Hash;
+ HashStringList Hashes;
unsigned long long Size;
+
+ APT_DEPRECATED HashString Hash;
};
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic pop
+#endif
#endif
#include <apt-pkg/pkgcache.h>
#include <apt-pkg/cacheiterators.h>
#include <apt-pkg/strutl.h>
+#include <apt-pkg/install-progress.h>
#include <stddef.h>
#include <list>
class pkgSourceList;
class pkgOrderList;
class pkgRecords;
+namespace APT {
+ namespace Progress {
+ class PackageManager;
+ };
+};
class pkgPackageManager : protected pkgCache::Namespace
virtual bool Remove(PkgIterator /*Pkg*/,bool /*Purge*/=false) {return false;};
#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR >= 13)
virtual bool Go(APT::Progress::PackageManager * /*progress*/) {return true;};
+ virtual bool Go(int /*statusFd*/=-1) {return true;};
#else
virtual bool Go(int /*statusFd*/=-1) {return true;};
#endif
/* Whenever the structures change the major version should be bumped,
whenever the generator changes the minor version should be bumped. */
- MajorVersion = 8;
-#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR >= 13)
- MinorVersion = 2;
-#else
- MinorVersion = 1;
-#endif
+ MajorVersion = 10;
+ MinorVersion = 0;
Dirty = false;
HeaderSz = sizeof(pkgCache::Header);
StringList = 0;
VerSysName = 0;
Architecture = 0;
- memset(PkgHashTable,0,sizeof(PkgHashTable));
- memset(GrpHashTable,0,sizeof(GrpHashTable));
+ HashTableSize = _config->FindI("APT::Cache-HashTableSize", 10 * 1048);
memset(Pools,0,sizeof(Pools));
CacheFileSize = 0;
if (Map.Size() < HeaderP->CacheFileSize)
return _error->Error(_("The package cache file is corrupted, it is too small"));
+ if (HeaderP->VerSysName == 0 || HeaderP->Architecture == 0 || HeaderP->Architectures == 0)
+ return _error->Error(_("The package cache file is corrupted"));
+
// Locate our VS..
- if (HeaderP->VerSysName == 0 ||
- (VS = pkgVersioningSystem::GetVS(StrP + HeaderP->VerSysName)) == 0)
+ if ((VS = pkgVersioningSystem::GetVS(StrP + HeaderP->VerSysName)) == 0)
return _error->Error(_("This APT does not support the versioning system '%s'"),StrP + HeaderP->VerSysName);
- // Chcek the arhcitecture
- if (HeaderP->Architecture == 0 ||
- _config->Find("APT::Architecture") != StrP + HeaderP->Architecture)
- return _error->Error(_("The package cache was built for a different architecture"));
+ // Check the architecture
+ std::vector<std::string> archs = APT::Configuration::getArchitectures();
+ std::vector<std::string>::const_iterator a = archs.begin();
+ std::string list = *a;
+ for (++a; a != archs.end(); ++a)
+ list.append(",").append(*a);
+ if (_config->Find("APT::Architecture") != StrP + HeaderP->Architecture ||
+ list != StrP + HeaderP->Architectures)
+ return _error->Error(_("The package cache was built for different architectures: %s vs %s"), StrP + HeaderP->Architectures, list.c_str());
+
return true;
}
/*}}}*/
/* This is used to generate the hash entries for the HashTable. With my
package list from bo this function gets 94% table usage on a 512 item
table (480 used items) */
-unsigned long pkgCache::sHash(const string &Str) const
+map_id_t pkgCache::sHash(const string &Str) const
{
unsigned long Hash = 0;
for (string::const_iterator I = Str.begin(); I != Str.end(); ++I)
Hash = 41 * Hash + tolower_ascii(*I);
- return Hash % _count(HeaderP->PkgHashTable);
+ return Hash % HeaderP->HashTableSize;
}
-unsigned long pkgCache::sHash(const char *Str) const
+map_id_t pkgCache::sHash(const char *Str) const
{
unsigned long Hash = tolower_ascii(*Str);
for (const char *I = Str + 1; *I != 0; ++I)
Hash = 41 * Hash + tolower_ascii(*I);
- return Hash % _count(HeaderP->PkgHashTable);
+ return Hash % HeaderP->HashTableSize;
}
/*}}}*/
// Cache::SingleArchFindPkg - Locate a package by name /*{{{*/
pkgCache::PkgIterator pkgCache::SingleArchFindPkg(const string &Name)
{
// Look at the hash bucket
- Package *Pkg = PkgP + HeaderP->PkgHashTable[Hash(Name)];
- for (; Pkg != PkgP; Pkg = PkgP + Pkg->NextPackage)
+ Package *Pkg = PkgP + HeaderP->PkgHashTable()[Hash(Name)];
+ for (; Pkg != PkgP; Pkg = PkgP + Pkg->Next)
{
if (unlikely(Pkg->Name == 0))
continue;
return GrpIterator(*this,0);
// Look at the hash bucket for the group
- Group *Grp = GrpP + HeaderP->GrpHashTable[sHash(Name)];
+ Group *Grp = GrpP + HeaderP->GrpHashTable()[sHash(Name)];
for (; Grp != GrpP; Grp = GrpP + Grp->Next) {
if (unlikely(Grp->Name == 0))
continue;
(= different packages with same calculated hash),
so we need to check the name also */
for (pkgCache::Package *Pkg = PackageList(); Pkg != Owner->PkgP;
- Pkg = Owner->PkgP + Pkg->NextPackage) {
+ Pkg = Owner->PkgP + Pkg->Next) {
if (S->Name == Pkg->Name &&
stringcasecmp(Arch, Owner->StrP + Pkg->Arch) == 0)
return PkgIterator(*Owner, Pkg);
if (S->LastPackage == LastPkg.Index())
return PkgIterator(*Owner, 0);
- return PkgIterator(*Owner, Owner->PkgP + LastPkg->NextPackage);
+ return PkgIterator(*Owner, Owner->PkgP + LastPkg->Next);
}
/*}}}*/
// GrpIterator::operator ++ - Postfix incr /*{{{*/
S = Owner->GrpP + S->Next;
// Follow the hash table
- while (S == Owner->GrpP && (HashIndex+1) < (signed)_count(Owner->HeaderP->GrpHashTable))
+ while (S == Owner->GrpP && (HashIndex+1) < (signed)Owner->HeaderP->HashTableSize)
{
HashIndex++;
- S = Owner->GrpP + Owner->HeaderP->GrpHashTable[HashIndex];
+ S = Owner->GrpP + Owner->HeaderP->GrpHashTable()[HashIndex];
}
}
/*}}}*/
{
// Follow the current links
if (S != Owner->PkgP)
- S = Owner->PkgP + S->NextPackage;
+ S = Owner->PkgP + S->Next;
// Follow the hash table
- while (S == Owner->PkgP && (HashIndex+1) < (signed)_count(Owner->HeaderP->PkgHashTable))
+ while (S == Owner->PkgP && (HashIndex+1) < (signed)Owner->HeaderP->HashTableSize)
{
HashIndex++;
- S = Owner->PkgP + Owner->HeaderP->PkgHashTable[HashIndex];
+ S = Owner->PkgP + Owner->HeaderP->PkgHashTable()[HashIndex];
}
}
/*}}}*/
out << " -> " << candidate;
if ( newest != "none" && candidate != newest)
out << " | " << newest;
- out << " > ( " << string(Pkg.Section()==0?"none":Pkg.Section()) << " )";
+ if (Pkg->VersionList == 0)
+ out << " > ( none )";
+ else
+ out << " > ( " << string(Pkg.VersionList().Section()==0?"unknown":Pkg.VersionList().Section()) << " )";
return out;
}
/*}}}*/
return false;
}
/*}}}*/
+APT_DEPRECATED APT_PURE const char * pkgCache::PkgIterator::Section() const {/*{{{*/
+ if (S->VersionList == 0)
+ return 0;
+ return VersionList().Section();
+}
+ /*}}}*/
#include <string>
#include <time.h>
+#include <stdint.h>
#ifndef APT_8_CLEANER_HEADERS
using std::string;
#endif
+// storing file sizes of indexes, which are way below 4 GB for now
+typedef uint32_t map_filesize_t;
+// each package/group/dependency gets an id
+typedef uint32_t map_id_t;
+// some files get an id, too, but in far less absolute numbers
+typedef uint16_t map_fileid_t;
+// relative pointer from cache start
+typedef uint32_t map_pointer_t;
+// same as the previous, but documented to be to a string item
+typedef map_pointer_t map_stringitem_t;
+
class pkgVersioningSystem;
class pkgCache /*{{{*/
{
/** \brief priority of a package version
Zero is used for unparsable or absent Priority fields. */
- enum VerPriority {Important=1,Required=2,Standard=3,Optional=4,Extra=5};
+ enum VerPriority {Required=1,Important=2,Standard=3,Optional=4,Extra=5};
enum PkgSelectedState {Unknown=0,Install=1,Hold=2,DeInstall=3,Purge=4};
enum PkgInstState {Ok=0,ReInstReq=1,HoldInst=2,HoldReInstReq=3};
enum PkgCurrentState {NotInstalled=0,UnPacked=1,HalfConfigured=2,
std::string CacheFile;
MMap ⤅
- unsigned long sHash(const std::string &S) const APT_PURE;
- unsigned long sHash(const char *S) const APT_PURE;
+ map_id_t sHash(const std::string &S) const APT_PURE;
+ map_id_t sHash(const char *S) const APT_PURE;
public:
inline void *DataEnd() {return ((unsigned char *)Map.Data()) + Map.Size();}
// String hashing function (512 range)
- inline unsigned long Hash(const std::string &S) const {return sHash(S);}
- inline unsigned long Hash(const char *S) const {return sHash(S);}
+ inline map_id_t Hash(const std::string &S) const {return sHash(S);}
+ inline map_id_t Hash(const char *S) const {return sHash(S);}
// Useful transformation things
const char *Priority(unsigned char Priority);
These indicate the number of each structure contained in the cache.
PackageCount is especially useful for generating user state structures.
See Package::Id for more info. */
- unsigned long GroupCount;
- unsigned long PackageCount;
- unsigned long VersionCount;
- unsigned long DescriptionCount;
- unsigned long DependsCount;
- unsigned long PackageFileCount;
- unsigned long VerFileCount;
- unsigned long DescFileCount;
- unsigned long ProvidesCount;
+ map_id_t GroupCount;
+ map_id_t PackageCount;
+ map_id_t VersionCount;
+ map_id_t DescriptionCount;
+ map_id_t DependsCount;
+ map_fileid_t PackageFileCount;
+ map_fileid_t VerFileCount;
+ map_fileid_t DescFileCount;
+ map_id_t ProvidesCount;
/** \brief index of the first PackageFile structure
The PackageFile structures are singly linked lists that represent
all package files that have been merged into the cache. */
- map_ptrloc FileList;
+ map_pointer_t FileList;
/** \brief index of the first StringItem structure
The cache contains a list of all the unique strings (StringItems).
The parser reads this list into memory so it can match strings
against it.*/
- map_ptrloc StringList;
+ map_pointer_t StringList;
/** \brief String representing the version system used */
- map_ptrloc VerSysName;
- /** \brief Architecture(s) the cache was built against */
- map_ptrloc Architecture;
+ map_pointer_t VerSysName;
+ /** \brief native architecture the cache was built against */
+ map_pointer_t Architecture;
+ /** \brief all architectures the cache was built against */
+ map_pointer_t Architectures;
/** \brief The maximum size of a raw entry from the original Package file */
- unsigned long MaxVerFileSize;
+ map_filesize_t MaxVerFileSize;
/** \brief The maximum size of a raw entry from the original Translation file */
- unsigned long MaxDescFileSize;
+ map_filesize_t MaxDescFileSize;
/** \brief The Pool structures manage the allocation pools that the generator uses
stores this information so future additions can make use of any unused pool
blocks. */
DynamicMMap::Pool Pools[9];
-
+
/** \brief hash tables providing rapid group/package name lookup
- Each group/package name is inserted into the hash table using pkgCache::Hash(const &string)
+ Each group/package name is inserted into a hash table using pkgCache::Hash(const &string)
By iterating over each entry in the hash table it is possible to iterate over
the entire list of packages. Hash Collisions are handled with a singly linked
list of packages based at the hash item. The linked list contains only
packages that match the hashing function.
In the PkgHashTable is it possible that multiple packages have the same name -
these packages are stored as a sequence in the list.
-
- Beware: The Hashmethod assumes that the hash table sizes are equal */
- map_ptrloc PkgHashTable[2*1048];
- map_ptrloc GrpHashTable[2*1048];
+ The size of both tables is the same. */
+ unsigned int HashTableSize;
+ map_pointer_t * PkgHashTable() const { return (map_pointer_t*) (this + 1); }
+ map_pointer_t * GrpHashTable() const { return PkgHashTable() + HashTableSize; }
/** \brief Size of the complete cache file */
- unsigned long CacheFileSize;
+ unsigned long long CacheFileSize;
bool CheckSizes(Header &Against) const APT_PURE;
Header();
struct pkgCache::Group
{
/** \brief Name of the group */
- map_ptrloc Name; // StringItem
+ map_stringitem_t Name;
// Linked List
/** \brief Link to the first package which belongs to the group */
- map_ptrloc FirstPackage; // Package
+ map_pointer_t FirstPackage; // Package
/** \brief Link to the last package which belongs to the group */
- map_ptrloc LastPackage; // Package
+ map_pointer_t LastPackage; // Package
/** \brief Link to the next Group */
- map_ptrloc Next; // Group
+ map_pointer_t Next; // Group
/** \brief unique sequel ID */
- unsigned int ID;
+ map_id_t ID;
};
/*}}}*/
struct pkgCache::Package
{
/** \brief Name of the package */
- map_ptrloc Name; // StringItem
+ map_stringitem_t Name;
/** \brief Architecture of the package */
- map_ptrloc Arch; // StringItem
+ map_stringitem_t Arch;
/** \brief Base of a singly linked list of versions
Each structure represents a unique version of the package.
versions of a package can be cleanly handled by the system.
Furthermore, this linked list is guaranteed to be sorted
from Highest version to lowest version with no duplicate entries. */
- map_ptrloc VersionList; // Version
+ map_pointer_t VersionList; // Version
/** \brief index to the installed version */
- map_ptrloc CurrentVer; // Version
- /** \brief indicates the deduced section
-
- Should be the index to the string "Unknown" or to the section
- of the last parsed item. */
- map_ptrloc Section; // StringItem
+ map_pointer_t CurrentVer; // Version
/** \brief index of the group this package belongs to */
- map_ptrloc Group; // Group the Package belongs to
+ map_pointer_t Group; // Group the Package belongs to
// Linked list
/** \brief Link to the next package in the same bucket */
- map_ptrloc NextPackage; // Package
+ map_pointer_t Next; // Package
/** \brief List of all dependencies on this package */
- map_ptrloc RevDepends; // Dependency
+ map_pointer_t RevDepends; // Dependency
/** \brief List of all "packages" this package provide */
- map_ptrloc ProvidesList; // Provides
+ map_pointer_t ProvidesList; // Provides
// Install/Remove/Purge etc
/** \brief state that the user wishes the package to be in */
This allows clients to create an array of size PackageCount and use it to store
state information for the package map. For instance the status file emitter uses
this to track which packages have been emitted already. */
- unsigned int ID;
+ map_id_t ID;
/** \brief some useful indicators of the package's state */
unsigned long Flags;
};
struct pkgCache::PackageFile
{
/** \brief physical disk file that this PackageFile represents */
- map_ptrloc FileName; // StringItem
+ map_pointer_t FileName; // StringItem
/** \brief the release information
Please see the files document for a description of what the
release information means. */
- map_ptrloc Archive; // StringItem
- map_ptrloc Codename; // StringItem
- map_ptrloc Component; // StringItem
- map_ptrloc Version; // StringItem
- map_ptrloc Origin; // StringItem
- map_ptrloc Label; // StringItem
- map_ptrloc Architecture; // StringItem
+ map_stringitem_t Archive;
+ map_stringitem_t Codename;
+ map_stringitem_t Component;
+ map_stringitem_t Version;
+ map_stringitem_t Origin;
+ map_stringitem_t Label;
+ map_stringitem_t Architecture;
/** \brief The site the index file was fetched from */
- map_ptrloc Site; // StringItem
+ map_stringitem_t Site;
/** \brief indicates what sort of index file this is
@TODO enumerate at least the possible indexes */
- map_ptrloc IndexType; // StringItem
+ map_stringitem_t IndexType;
/** \brief Size of the file
Used together with the modification time as a
simple check to ensure that the Packages
file has not been altered since Cache generation. */
- unsigned long Size;
+ map_filesize_t Size;
/** \brief Modification time for the file */
time_t mtime;
// Linked list
/** \brief Link to the next PackageFile in the Cache */
- map_ptrloc NextFile; // PackageFile
+ map_pointer_t NextFile; // PackageFile
/** \brief unique sequel ID */
- unsigned int ID;
+ map_fileid_t ID;
};
/*}}}*/
// VerFile structure /*{{{*/
struct pkgCache::VerFile
{
/** \brief index of the package file that this version was found in */
- map_ptrloc File; // PackageFile
+ map_pointer_t File; // PackageFile
/** \brief next step in the linked list */
- map_ptrloc NextFile; // PkgVerFile
+ map_pointer_t NextFile; // PkgVerFile
/** \brief position in the package file */
- map_ptrloc Offset; // File offset
+ map_filesize_t Offset; // File offset
/** @TODO document pkgCache::VerFile::Size */
- unsigned long Size;
+ map_filesize_t Size;
};
/*}}}*/
// DescFile structure /*{{{*/
struct pkgCache::DescFile
{
/** \brief index of the file that this description was found in */
- map_ptrloc File; // PackageFile
+ map_pointer_t File; // PackageFile
/** \brief next step in the linked list */
- map_ptrloc NextFile; // PkgVerFile
+ map_pointer_t NextFile; // PkgVerFile
/** \brief position in the file */
- map_ptrloc Offset; // File offset
+ map_filesize_t Offset; // File offset
/** @TODO document pkgCache::DescFile::Size */
- unsigned long Size;
+ map_filesize_t Size;
};
/*}}}*/
// Version structure /*{{{*/
struct pkgCache::Version
{
/** \brief complete version string */
- map_ptrloc VerStr; // StringItem
+ map_stringitem_t VerStr;
/** \brief section this version is filled in */
- map_ptrloc Section; // StringItem
+ map_stringitem_t Section;
/** \brief Multi-Arch capabilities of a package version */
enum VerMultiArch { None = 0, /*!< is the default and doesn't trigger special behaviour */
applies to. If FileList is 0 then this is a blank version.
The structure should also have a 0 in all other fields excluding
pkgCache::Version::VerStr and Possibly pkgCache::Version::NextVer. */
- map_ptrloc FileList; // VerFile
+ map_pointer_t FileList; // VerFile
/** \brief next (lower or equal) version in the linked list */
- map_ptrloc NextVer; // Version
+ map_pointer_t NextVer; // Version
/** \brief next description in the linked list */
- map_ptrloc DescriptionList; // Description
+ map_pointer_t DescriptionList; // Description
/** \brief base of the dependency list */
- map_ptrloc DependsList; // Dependency
+ map_pointer_t DependsList; // Dependency
/** \brief links to the owning package
This allows reverse dependencies to determine the package */
- map_ptrloc ParentPkg; // Package
+ map_pointer_t ParentPkg; // Package
/** \brief list of pkgCache::Provides */
- map_ptrloc ProvidesList; // Provides
+ map_pointer_t ProvidesList; // Provides
/** \brief archive size for this version
For Debian this is the size of the .deb file. */
- unsigned long long Size; // These are the .deb size
+ uint64_t Size; // These are the .deb size
/** \brief uncompressed size for this version */
- unsigned long long InstalledSize;
+ uint64_t InstalledSize;
/** \brief characteristic value representing this version
No two packages in existence should have the same VerStr
and Hash with different contents. */
unsigned short Hash;
/** \brief unique sequel ID */
- unsigned int ID;
+ map_id_t ID;
/** \brief parsed priority value */
unsigned char Priority;
};
If the value has a 0 length then this is read using the Package
file else the Translation-CODE file is used. */
- map_ptrloc language_code; // StringItem
+ map_stringitem_t language_code;
/** \brief MD5sum of the original description
Used to map Translations of a description to a version
and to check that the Translation is up-to-date. */
- map_ptrloc md5sum; // StringItem
+ map_stringitem_t md5sum;
/** @TODO document pkgCache::Description::FileList */
- map_ptrloc FileList; // DescFile
+ map_pointer_t FileList; // DescFile
/** \brief next translation for this description */
- map_ptrloc NextDesc; // Description
+ map_pointer_t NextDesc; // Description
/** \brief the text is a description of this package */
- map_ptrloc ParentPkg; // Package
+ map_pointer_t ParentPkg; // Package
/** \brief unique sequel ID */
- unsigned int ID;
+ map_id_t ID;
};
/*}}}*/
// Dependency structure /*{{{*/
struct pkgCache::Dependency
{
/** \brief string of the version the dependency is applied against */
- map_ptrloc Version; // StringItem
+ map_stringitem_t Version; // StringItem
/** \brief index of the package this depends applies to
The generator will - if the package does not already exist -
create a blank (no version records) package. */
- map_ptrloc Package; // Package
+ map_pointer_t Package; // Package
/** \brief next dependency of this version */
- map_ptrloc NextDepends; // Dependency
+ map_pointer_t NextDepends; // Dependency
/** \brief next reverse dependency of this package */
- map_ptrloc NextRevDepends; // Dependency
+ map_pointer_t NextRevDepends; // Dependency
/** \brief version of the package which has the reverse depends */
- map_ptrloc ParentVer; // Version
+ map_pointer_t ParentVer; // Version
/** \brief unique sequel ID */
- map_ptrloc ID;
+ map_id_t ID;
/** \brief Dependency type - Depends, Recommends, Conflicts, etc */
unsigned char Type;
/** \brief comparison operator specified on the depends line
struct pkgCache::Provides
{
/** \brief index of the package providing this */
- map_ptrloc ParentPkg; // Package
+ map_pointer_t ParentPkg; // Package
/** \brief index of the version this provide line applies to */
- map_ptrloc Version; // Version
+ map_pointer_t Version; // Version
/** \brief version in the provides line (if any)
This version allows dependencies to depend on specific versions of a
Provides, as well as allowing Provides to override existing packages.
This is experimental. Note that Debian doesn't allow versioned provides */
- map_ptrloc ProvideVersion; // StringItem
+ map_stringitem_t ProvideVersion;
/** \brief next provides (based of package) */
- map_ptrloc NextProvides; // Provides
+ map_pointer_t NextProvides; // Provides
/** \brief next provides (based of version) */
- map_ptrloc NextPkgProv; // Provides
+ map_pointer_t NextPkgProv; // Provides
};
/*}}}*/
// StringItem structure /*{{{*/
struct pkgCache::StringItem
{
/** \brief string this refers to */
- map_ptrloc String; // StringItem
+ map_stringitem_t String;
/** \brief Next link in the chain */
- map_ptrloc NextItem; // StringItem
+ map_stringitem_t NextItem;
};
/*}}}*/
// Starting header
*Cache.HeaderP = pkgCache::Header();
- map_ptrloc const idxVerSysName = WriteStringInMap(_system->VS->Label);
+
+ // make room for the hashtables for packages and groups
+ if (Map.RawAllocate(2 * (Cache.HeaderP->HashTableSize * sizeof(map_pointer_t))) == 0)
+ return;
+
+ map_stringitem_t const idxVerSysName = WriteStringInMap(_system->VS->Label);
+ if (unlikely(idxVerSysName == 0))
+ return;
Cache.HeaderP->VerSysName = idxVerSysName;
// this pointer is set in ReMap, but we need it now for WriteUniqString
Cache.StringItemP = (pkgCache::StringItem *)Map.Data();
- map_ptrloc const idxArchitecture = WriteUniqString(_config->Find("APT::Architecture"));
- Cache.HeaderP->Architecture = idxArchitecture;
- if (unlikely(idxVerSysName == 0 || idxArchitecture == 0))
+ map_stringitem_t const idxArchitecture = WriteUniqString(_config->Find("APT::Architecture"));
+ if (unlikely(idxArchitecture == 0))
return;
+ Cache.HeaderP->Architecture = idxArchitecture;
+
+ std::vector<std::string> archs = APT::Configuration::getArchitectures();
+ if (archs.size() > 1)
+ {
+ std::vector<std::string>::const_iterator a = archs.begin();
+ std::string list = *a;
+ for (++a; a != archs.end(); ++a)
+ list.append(",").append(*a);
+ map_stringitem_t const idxArchitectures = WriteStringInMap(list);
+ if (unlikely(idxArchitectures == 0))
+ return;
+ Cache.HeaderP->Architectures = idxArchitectures;
+ }
+ else
+ Cache.HeaderP->Architectures = idxArchitecture;
+
Cache.ReMap();
}
else
{
_error->Error(_("Cache has an incompatible versioning system"));
return;
- }
+ }
}
-
+
Cache.HeaderP->Dirty = true;
Map.Sync(0,sizeof(pkgCache::Header));
}
(*i)->ReMap(oldMap, newMap);
} /*}}}*/
// CacheGenerator::WriteStringInMap /*{{{*/
-map_ptrloc pkgCacheGenerator::WriteStringInMap(const char *String,
+map_stringitem_t pkgCacheGenerator::WriteStringInMap(const char *String,
const unsigned long &Len) {
void const * const oldMap = Map.Data();
- map_ptrloc const index = Map.WriteString(String, Len);
+ map_stringitem_t const index = Map.WriteString(String, Len);
if (index != 0)
ReMap(oldMap, Map.Data());
return index;
}
/*}}}*/
// CacheGenerator::WriteStringInMap /*{{{*/
-map_ptrloc pkgCacheGenerator::WriteStringInMap(const char *String) {
+map_stringitem_t pkgCacheGenerator::WriteStringInMap(const char *String) {
void const * const oldMap = Map.Data();
- map_ptrloc const index = Map.WriteString(String);
+ map_stringitem_t const index = Map.WriteString(String);
if (index != 0)
ReMap(oldMap, Map.Data());
return index;
}
/*}}}*/
-map_ptrloc pkgCacheGenerator::AllocateInMap(const unsigned long &size) {/*{{{*/
+map_pointer_t pkgCacheGenerator::AllocateInMap(const unsigned long &size) {/*{{{*/
void const * const oldMap = Map.Data();
- map_ptrloc const index = Map.Allocate(size);
+ map_pointer_t const index = Map.Allocate(size);
if (index != 0)
ReMap(oldMap, Map.Data());
return index;
}
}
- if (Cache.HeaderP->PackageCount >= (1ULL<<sizeof(Cache.PkgP->ID)*8)-1)
+ if (Cache.HeaderP->PackageCount >= std::numeric_limits<map_id_t>::max())
return _error->Error(_("Wow, you exceeded the number of package "
"names this APT is capable of."));
- if (Cache.HeaderP->VersionCount >= (1ULL<<(sizeof(Cache.VerP->ID)*8))-1)
+ if (Cache.HeaderP->VersionCount >= std::numeric_limits<map_id_t>::max())
return _error->Error(_("Wow, you exceeded the number of versions "
"this APT is capable of."));
- if (Cache.HeaderP->DescriptionCount >= (1ULL<<(sizeof(Cache.DescP->ID)*8))-1)
+ if (Cache.HeaderP->DescriptionCount >= std::numeric_limits<map_id_t>::max())
return _error->Error(_("Wow, you exceeded the number of descriptions "
"this APT is capable of."));
- if (Cache.HeaderP->DependsCount >= (1ULL<<(sizeof(Cache.DepP->ID)*8))-1ULL)
+ if (Cache.HeaderP->DependsCount >= std::numeric_limits<map_id_t>::max())
return _error->Error(_("Wow, you exceeded the number of dependencies "
"this APT is capable of."));
// Find the right version to write the description
MD5SumValue CurMd5 = List.Description_md5();
- if (CurMd5.Value().empty() == true || List.Description().empty() == true)
+ if (CurMd5.Value().empty() == true && List.Description("").empty() == true)
return true;
- std::string CurLang = List.DescriptionLanguage();
-
+ std::vector<std::string> availDesc = List.AvailableDescriptionLanguages();
for (Ver = Pkg.VersionList(); Ver.end() == false; ++Ver)
{
pkgCache::DescIterator VerDesc = Ver.DescriptionList();
if (VerDesc.end() == true || MD5SumValue(VerDesc.md5()) != CurMd5)
continue;
- // don't add a new description if we have one for the given
- // md5 && language
- if (IsDuplicateDescription(VerDesc, CurMd5, CurLang) == true)
- continue;
-
- pkgCache::DescIterator Desc;
- Dynamic<pkgCache::DescIterator> DynDesc(Desc);
-
- map_ptrloc const descindex = NewDescription(Desc, CurLang, CurMd5, VerDesc->md5sum);
- if (unlikely(descindex == 0 && _error->PendingError()))
- return _error->Error(_("Error occurred while processing %s (%s%d)"),
- Pkg.Name(), "NewDescription", 1);
-
- Desc->ParentPkg = Pkg.Index();
-
- // we add at the end, so that the start is constant as we need
- // that to be able to efficiently share these lists
- VerDesc = Ver.DescriptionList(); // old value might be invalid after ReMap
- for (;VerDesc.end() == false && VerDesc->NextDesc != 0; ++VerDesc);
- map_ptrloc * const LastNextDesc = (VerDesc.end() == true) ? &Ver->DescriptionList : &VerDesc->NextDesc;
- *LastNextDesc = descindex;
+ map_stringitem_t md5idx = VerDesc->md5sum;
+ for (std::vector<std::string>::const_iterator CurLang = availDesc.begin(); CurLang != availDesc.end(); ++CurLang)
+ {
+ // don't add a new description if we have one for the given
+ // md5 && language
+ if (IsDuplicateDescription(VerDesc, CurMd5, *CurLang) == true)
+ continue;
- if (NewFileDesc(Desc,List) == false)
- return _error->Error(_("Error occurred while processing %s (%s%d)"),
- Pkg.Name(), "NewFileDesc", 1);
+ AddNewDescription(List, Ver, *CurLang, CurMd5, md5idx);
+ }
// we can stop here as all "same" versions will share the description
break;
{
pkgCache::VerIterator Ver = Pkg.VersionList();
Dynamic<pkgCache::VerIterator> DynVer(Ver);
- map_ptrloc *LastVer = &Pkg->VersionList;
+ map_pointer_t *LastVer = &Pkg->VersionList;
void const * oldMap = Map.Data();
unsigned short const Hash = List.VersionHash();
}
// Add a new version
- map_ptrloc const verindex = NewVersion(Ver, Version, Pkg.Index(), Hash, *LastVer);
+ map_pointer_t const verindex = NewVersion(Ver, Version, Pkg.Index(), Hash, *LastVer);
if (verindex == 0 && _error->PendingError())
return _error->Error(_("Error occurred while processing %s (%s%d)"),
Pkg.Name(), "NewVersion", 1);
if (oldMap != Map.Data())
- LastVer += (map_ptrloc const * const) Map.Data() - (map_ptrloc const * const) oldMap;
+ LastVer += (map_pointer_t const * const) Map.Data() - (map_pointer_t const * const) oldMap;
*LastVer = verindex;
if (unlikely(List.NewVersion(Ver) == false))
D.ParentPkg().Group() == Grp)
continue;
- map_ptrloc *OldDepLast = NULL;
+ map_pointer_t *OldDepLast = NULL;
pkgCache::VerIterator ConVersion = D.ParentVer();
Dynamic<pkgCache::VerIterator> DynV(ConVersion);
// duplicate the Conflicts/Breaks/Replaces for :none arch
return true;
}
- /* Record the Description (it is not translated) */
+ /* Record the Description(s) based on their master md5sum */
MD5SumValue CurMd5 = List.Description_md5();
- if (CurMd5.Value().empty() == true || List.Description().empty() == true)
+ if (CurMd5.Value().empty() == true && List.Description("").empty() == true)
return true;
- std::string CurLang = List.DescriptionLanguage();
/* Before we add a new description we first search in the group for
a version with a description of the same MD5 - if so we reuse this
for (pkgCache::VerIterator V = P.VersionList();
V.end() == false; ++V)
{
- if (IsDuplicateDescription(V.DescriptionList(), CurMd5, "") == false)
+ if (V->DescriptionList == 0 || MD5SumValue(V.DescriptionList().md5()) != CurMd5)
continue;
Ver->DescriptionList = V->DescriptionList;
- return true;
}
}
- // We haven't found reusable descriptions, so add the first description
- pkgCache::DescIterator Desc = Ver.DescriptionList();
+ // We haven't found reusable descriptions, so add the first description(s)
+ map_stringitem_t md5idx = Ver->DescriptionList == 0 ? 0 : Ver.DescriptionList()->md5sum;
+ std::vector<std::string> availDesc = List.AvailableDescriptionLanguages();
+ for (std::vector<std::string>::const_iterator CurLang = availDesc.begin(); CurLang != availDesc.end(); ++CurLang)
+ if (AddNewDescription(List, Ver, *CurLang, CurMd5, md5idx) == false)
+ return false;
+ return true;
+}
+ /*}}}*/
+bool pkgCacheGenerator::AddNewDescription(ListParser &List, pkgCache::VerIterator &Ver, std::string const &lang, MD5SumValue const &CurMd5, map_stringitem_t &md5idx) /*{{{*/
+{
+ pkgCache::DescIterator Desc;
Dynamic<pkgCache::DescIterator> DynDesc(Desc);
- map_ptrloc const descindex = NewDescription(Desc, CurLang, CurMd5, 0);
+ map_pointer_t const descindex = NewDescription(Desc, lang, CurMd5, md5idx);
if (unlikely(descindex == 0 && _error->PendingError()))
return _error->Error(_("Error occurred while processing %s (%s%d)"),
- Pkg.Name(), "NewDescription", 2);
+ Ver.ParentPkg().Name(), "NewDescription", 1);
+
+ md5idx = Desc->md5sum;
+ Desc->ParentPkg = Ver.ParentPkg().Index();
- Desc->ParentPkg = Pkg.Index();
- Ver->DescriptionList = descindex;
+ // we add at the end, so that the start is constant as we need
+ // that to be able to efficiently share these lists
+ pkgCache::DescIterator VerDesc = Ver.DescriptionList(); // old value might be invalid after ReMap
+ for (;VerDesc.end() == false && VerDesc->NextDesc != 0; ++VerDesc);
+ map_pointer_t * const LastNextDesc = (VerDesc.end() == true) ? &Ver->DescriptionList : &VerDesc->NextDesc;
+ *LastNextDesc = descindex;
if (NewFileDesc(Desc,List) == false)
return _error->Error(_("Error occurred while processing %s (%s%d)"),
- Pkg.Name(), "NewFileDesc", 2);
+ Ver.ParentPkg().Name(), "NewFileDesc", 1);
return true;
}
return true;
// Get a structure
- map_ptrloc const Group = AllocateInMap(sizeof(pkgCache::Group));
+ map_pointer_t const Group = AllocateInMap(sizeof(pkgCache::Group));
if (unlikely(Group == 0))
return false;
Grp = pkgCache::GrpIterator(Cache, Cache.GrpP + Group);
- map_ptrloc const idxName = WriteStringInMap(Name);
+ map_pointer_t const idxName = WriteStringInMap(Name);
if (unlikely(idxName == 0))
return false;
Grp->Name = idxName;
// Insert it into the hash table
unsigned long const Hash = Cache.Hash(Name);
- map_ptrloc *insertAt = &Cache.HeaderP->GrpHashTable[Hash];
+ map_pointer_t *insertAt = &Cache.HeaderP->GrpHashTable()[Hash];
while (*insertAt != 0 && strcasecmp(Name.c_str(), Cache.StrP + (Cache.GrpP + *insertAt)->Name) > 0)
insertAt = &(Cache.GrpP + *insertAt)->Next;
Grp->Next = *insertAt;
return true;
// Get a structure
- map_ptrloc const Package = AllocateInMap(sizeof(pkgCache::Package));
+ map_pointer_t const Package = AllocateInMap(sizeof(pkgCache::Package));
if (unlikely(Package == 0))
return false;
Pkg = pkgCache::PkgIterator(Cache,Cache.PkgP + Package);
{
Grp->FirstPackage = Package;
// Insert it into the hash table
- unsigned long const Hash = Cache.Hash(Name);
- map_ptrloc *insertAt = &Cache.HeaderP->PkgHashTable[Hash];
+ map_id_t const Hash = Cache.Hash(Name);
+ map_pointer_t *insertAt = &Cache.HeaderP->PkgHashTable()[Hash];
while (*insertAt != 0 && strcasecmp(Name.c_str(), Cache.StrP + (Cache.PkgP + *insertAt)->Name) > 0)
- insertAt = &(Cache.PkgP + *insertAt)->NextPackage;
- Pkg->NextPackage = *insertAt;
+ insertAt = &(Cache.PkgP + *insertAt)->Next;
+ Pkg->Next = *insertAt;
*insertAt = Package;
}
else // Group the Packages together
{
// this package is the new last package
pkgCache::PkgIterator LastPkg(Cache, Cache.PkgP + Grp->LastPackage);
- Pkg->NextPackage = LastPkg->NextPackage;
- LastPkg->NextPackage = Package;
+ Pkg->Next = LastPkg->Next;
+ LastPkg->Next = Package;
}
Grp->LastPackage = Package;
Pkg->Name = Grp->Name;
Pkg->Group = Grp.Index();
// all is mapped to the native architecture
- map_ptrloc const idxArch = (Arch == "all") ? Cache.HeaderP->Architecture : WriteUniqString(Arch.c_str());
+ map_stringitem_t const idxArch = (Arch == "all") ? Cache.HeaderP->Architecture : WriteUniqString(Arch.c_str());
if (unlikely(idxArch == 0))
return false;
Pkg->Arch = idxArch;
// copy P.Arch() into a string here as a cache remap
// in NewDepends() later may alter the pointer location
string Arch = P.Arch() == NULL ? "" : P.Arch();
- map_ptrloc *OldDepLast = NULL;
+ map_pointer_t *OldDepLast = NULL;
/* MultiArch handling introduces a lot of implicit Dependencies:
- MultiArch: same → Co-Installable if they have the same version
- All others conflict with all other group members */
bool const coInstall = ((V->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same);
pkgCache::PkgIterator D = G.PackageList();
Dynamic<pkgCache::PkgIterator> DynD(D);
- map_ptrloc const VerStrIdx = V->VerStr;
+ map_stringitem_t const VerStrIdx = V->VerStr;
for (; D.end() != true; D = G.NextPkg(D))
{
if (Arch == D.Arch() || D->VersionList == 0)
/* MultiArch handling introduces a lot of implicit Dependencies:
- MultiArch: same → Co-Installable if they have the same version
- All others conflict with all other group members */
- map_ptrloc *OldDepLast = NULL;
+ map_pointer_t *OldDepLast = NULL;
bool const coInstall = ((V->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same);
if (coInstall == true)
{
- map_ptrloc const VerStrIdx = V->VerStr;
+ map_stringitem_t const VerStrIdx = V->VerStr;
// Replaces: ${self}:other ( << ${binary:Version})
NewDepends(D, V, VerStrIdx,
pkgCache::Dep::Less, pkgCache::Dep::Replaces,
return true;
// Get a structure
- map_ptrloc const VerFile = AllocateInMap(sizeof(pkgCache::VerFile));
+ map_pointer_t const VerFile = AllocateInMap(sizeof(pkgCache::VerFile));
if (VerFile == 0)
- return 0;
+ return false;
pkgCache::VerFileIterator VF(Cache,Cache.VerFileP + VerFile);
VF->File = CurrentFile - Cache.PkgFileP;
// Link it to the end of the list
- map_ptrloc *Last = &Ver->FileList;
+ map_pointer_t *Last = &Ver->FileList;
for (pkgCache::VerFileIterator V = Ver.FileList(); V.end() == false; ++V)
Last = &V->NextFile;
VF->NextFile = *Last;
// CacheGenerator::NewVersion - Create a new Version /*{{{*/
// ---------------------------------------------------------------------
/* This puts a version structure in the linked list */
-unsigned long pkgCacheGenerator::NewVersion(pkgCache::VerIterator &Ver,
+map_pointer_t pkgCacheGenerator::NewVersion(pkgCache::VerIterator &Ver,
const string &VerStr,
- map_ptrloc const ParentPkg,
- unsigned long const Hash,
- unsigned long Next)
+ map_pointer_t const ParentPkg,
+ unsigned short const Hash,
+ map_pointer_t const Next)
{
// Get a structure
- map_ptrloc const Version = AllocateInMap(sizeof(pkgCache::Version));
+ map_pointer_t const Version = AllocateInMap(sizeof(pkgCache::Version));
if (Version == 0)
return 0;
}
}
// haven't found the version string, so create
- map_ptrloc const idxVerStr = WriteStringInMap(VerStr);
+ map_stringitem_t const idxVerStr = WriteStringInMap(VerStr);
if (unlikely(idxVerStr == 0))
return 0;
Ver->VerStr = idxVerStr;
return true;
// Get a structure
- map_ptrloc const DescFile = AllocateInMap(sizeof(pkgCache::DescFile));
+ map_pointer_t const DescFile = AllocateInMap(sizeof(pkgCache::DescFile));
if (DescFile == 0)
return false;
DF->File = CurrentFile - Cache.PkgFileP;
// Link it to the end of the list
- map_ptrloc *Last = &Desc->FileList;
+ map_pointer_t *Last = &Desc->FileList;
for (pkgCache::DescFileIterator D = Desc.FileList(); D.end() == false; ++D)
Last = &D->NextFile;
// CacheGenerator::NewDescription - Create a new Description /*{{{*/
// ---------------------------------------------------------------------
/* This puts a description structure in the linked list */
-map_ptrloc pkgCacheGenerator::NewDescription(pkgCache::DescIterator &Desc,
+map_pointer_t pkgCacheGenerator::NewDescription(pkgCache::DescIterator &Desc,
const string &Lang,
const MD5SumValue &md5sum,
- map_ptrloc idxmd5str)
+ map_stringitem_t const idxmd5str)
{
// Get a structure
- map_ptrloc const Description = AllocateInMap(sizeof(pkgCache::Description));
+ map_pointer_t const Description = AllocateInMap(sizeof(pkgCache::Description));
if (Description == 0)
return 0;
// Fill it in
Desc = pkgCache::DescIterator(Cache,Cache.DescP + Description);
Desc->ID = Cache.HeaderP->DescriptionCount++;
- map_ptrloc const idxlanguage_code = WriteUniqString(Lang);
+ map_stringitem_t const idxlanguage_code = WriteUniqString(Lang);
if (unlikely(idxlanguage_code == 0))
return 0;
Desc->language_code = idxlanguage_code;
Desc->md5sum = idxmd5str;
else
{
- map_ptrloc const idxmd5sum = WriteStringInMap(md5sum.Value());
+ map_stringitem_t const idxmd5sum = WriteStringInMap(md5sum.Value());
if (unlikely(idxmd5sum == 0))
return 0;
Desc->md5sum = idxmd5sum;
string const &Version,
unsigned int const &Op,
unsigned int const &Type,
- map_ptrloc* &OldDepLast)
+ map_stringitem_t* &OldDepLast)
{
- map_ptrloc index = 0;
+ map_stringitem_t index = 0;
if (Version.empty() == false)
{
int const CmpOp = Op & 0x0F;
if (unlikely(index == 0))
return false;
if (OldDepLast != 0 && oldMap != Map.Data())
- OldDepLast += (map_ptrloc const * const) Map.Data() - (map_ptrloc const * const) oldMap;
+ OldDepLast += (map_pointer_t const * const) Map.Data() - (map_pointer_t const * const) oldMap;
}
}
return NewDepends(Pkg, Ver, index, Op, Type, OldDepLast);
}
bool pkgCacheGenerator::NewDepends(pkgCache::PkgIterator &Pkg,
pkgCache::VerIterator &Ver,
- map_ptrloc const Version,
+ map_pointer_t const Version,
unsigned int const &Op,
unsigned int const &Type,
- map_ptrloc* &OldDepLast)
+ map_pointer_t* &OldDepLast)
{
void const * const oldMap = Map.Data();
// Get a structure
- map_ptrloc const Dependency = AllocateInMap(sizeof(pkgCache::Dependency));
+ map_pointer_t const Dependency = AllocateInMap(sizeof(pkgCache::Dependency));
if (unlikely(Dependency == 0))
return false;
for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false; ++D)
OldDepLast = &D->NextDepends;
} else if (oldMap != Map.Data())
- OldDepLast += (map_ptrloc const * const) Map.Data() - (map_ptrloc const * const) oldMap;
+ OldDepLast += (map_pointer_t const * const) Map.Data() - (map_pointer_t const * const) oldMap;
Dep->NextDepends = *OldDepLast;
*OldDepLast = Dep.Index();
return true;
// Get a structure
- map_ptrloc const Provides = Owner->AllocateInMap(sizeof(pkgCache::Provides));
+ map_pointer_t const Provides = Owner->AllocateInMap(sizeof(pkgCache::Provides));
if (unlikely(Provides == 0))
return false;
Cache.HeaderP->ProvidesCount++;
Prv->NextPkgProv = Ver->ProvidesList;
Ver->ProvidesList = Prv.Index();
if (Version.empty() == false) {
- map_ptrloc const idxProvideVersion = WriteString(Version);
+ map_stringitem_t const idxProvideVersion = WriteString(Version);
Prv->ProvideVersion = idxProvideVersion;
if (unlikely(idxProvideVersion == 0))
return false;
unsigned long Flags)
{
// Get some space for the structure
- map_ptrloc const idxFile = AllocateInMap(sizeof(*CurrentFile));
+ map_pointer_t const idxFile = AllocateInMap(sizeof(*CurrentFile));
if (unlikely(idxFile == 0))
return false;
CurrentFile = Cache.PkgFileP + idxFile;
// Fill it in
- map_ptrloc const idxFileName = WriteStringInMap(File);
- map_ptrloc const idxSite = WriteUniqString(Site);
+ map_stringitem_t const idxFileName = WriteStringInMap(File);
+ map_stringitem_t const idxSite = WriteUniqString(Site);
if (unlikely(idxFileName == 0 || idxSite == 0))
return false;
CurrentFile->FileName = idxFileName;
CurrentFile->NextFile = Cache.HeaderP->FileList;
CurrentFile->Flags = Flags;
CurrentFile->ID = Cache.HeaderP->PackageFileCount;
- map_ptrloc const idxIndexType = WriteUniqString(Index.GetType()->Label);
+ map_stringitem_t const idxIndexType = WriteUniqString(Index.GetType()->Label);
if (unlikely(idxIndexType == 0))
return false;
CurrentFile->IndexType = idxIndexType;
// ---------------------------------------------------------------------
/* This is used to create handles to strings. Given the same text it
always returns the same number */
-unsigned long pkgCacheGenerator::WriteUniqString(const char *S,
+map_stringitem_t pkgCacheGenerator::WriteUniqString(const char *S,
unsigned int Size)
{
/* We use a very small transient hash table here, this speeds up generation
// Search for an insertion point
pkgCache::StringItem *I = Cache.StringItemP + Cache.HeaderP->StringList;
int Res = 1;
- map_ptrloc *Last = &Cache.HeaderP->StringList;
+ map_stringitem_t *Last = &Cache.HeaderP->StringList;
for (; I != Cache.StringItemP; Last = &I->NextItem,
I = Cache.StringItemP + I->NextItem)
{
// Get a structure
void const * const oldMap = Map.Data();
- map_ptrloc const Item = AllocateInMap(sizeof(pkgCache::StringItem));
+ map_pointer_t const Item = AllocateInMap(sizeof(pkgCache::StringItem));
if (Item == 0)
return 0;
- map_ptrloc const idxString = WriteStringInMap(S,Size);
+ map_stringitem_t const idxString = WriteStringInMap(S,Size);
if (unlikely(idxString == 0))
return 0;
if (oldMap != Map.Data()) {
- Last += (map_ptrloc const * const) Map.Data() - (map_ptrloc const * const) oldMap;
+ Last += (map_pointer_t const * const) Map.Data() - (map_pointer_t const * const) oldMap;
I += (pkgCache::StringItem const * const) Map.Data() - (pkgCache::StringItem const * const) oldMap;
}
*Last = Item;
// ---------------------------------------------------------------------
/* Size is kind of an abstract notion that is only used for the progress
meter */
-static unsigned long ComputeSize(FileIterator Start,FileIterator End)
+static map_filesize_t ComputeSize(FileIterator Start,FileIterator End)
{
- unsigned long TotalSize = 0;
+ map_filesize_t TotalSize = 0;
for (; Start < End; ++Start)
{
if ((*Start)->HasPackages() == false)
/* */
static bool BuildCache(pkgCacheGenerator &Gen,
OpProgress *Progress,
- unsigned long &CurrentSize,unsigned long TotalSize,
+ map_filesize_t &CurrentSize,map_filesize_t TotalSize,
FileIterator Start, FileIterator End)
{
FileIterator I;
continue;
}
- unsigned long Size = (*I)->Size();
+ map_filesize_t Size = (*I)->Size();
if (Progress != NULL)
Progress->OverallProgress(CurrentSize,TotalSize,Size,_("Reading package lists"));
CurrentSize += Size;
CurrentSize = 0;
for (I = Start; I != End; ++I)
{
- unsigned long Size = (*I)->Size();
+ map_filesize_t Size = (*I)->Size();
if (Progress != NULL)
Progress->OverallProgress(CurrentSize,TotalSize,Size,_("Collecting File Provides"));
CurrentSize += Size;
/*}}}*/
// CacheGenerator::CreateDynamicMMap - load an mmap with configuration options /*{{{*/
DynamicMMap* pkgCacheGenerator::CreateDynamicMMap(FileFd *CacheF, unsigned long Flags) {
- unsigned long const MapStart = _config->FindI("APT::Cache-Start", 24*1024*1024);
- unsigned long const MapGrow = _config->FindI("APT::Cache-Grow", 1*1024*1024);
- unsigned long const MapLimit = _config->FindI("APT::Cache-Limit", 0);
+ map_filesize_t const MapStart = _config->FindI("APT::Cache-Start", 24*1024*1024);
+ map_filesize_t const MapGrow = _config->FindI("APT::Cache-Grow", 1*1024*1024);
+ map_filesize_t const MapLimit = _config->FindI("APT::Cache-Limit", 0);
Flags |= MMap::Moveable;
if (_config->FindB("APT::Cache-Fallback", false) == true)
Flags |= MMap::Fallback;
Files.push_back (*j);
}
- unsigned long const EndOfSource = Files.size();
+ map_filesize_t const EndOfSource = Files.size();
if (_system->AddStatusFiles(Files) == false)
return false;
}
// Lets try the source cache.
- unsigned long CurrentSize = 0;
- unsigned long TotalSize = 0;
+ map_filesize_t CurrentSize = 0;
+ map_filesize_t TotalSize = 0;
if (CheckValidity(SrcCacheFile, List, Files.begin(),
Files.begin()+EndOfSource) == true)
{
std::clog << "srcpkgcache.bin is valid - populate MMap with it." << std::endl;
// Preload the map with the source cache
FileFd SCacheF(SrcCacheFile,FileFd::ReadOnly);
- unsigned long const alloc = Map->RawAllocate(SCacheF.Size());
+ map_pointer_t const alloc = Map->RawAllocate(SCacheF.Size());
if ((alloc == 0 && _error->PendingError())
|| SCacheF.Read((unsigned char *)Map->Data() + alloc,
SCacheF.Size()) == false)
bool pkgCacheGenerator::MakeOnlyStatusCache(OpProgress *Progress,DynamicMMap **OutMap)
{
std::vector<pkgIndexFile *> Files;
- unsigned long EndOfSource = Files.size();
+ map_filesize_t EndOfSource = Files.size();
if (_system->AddStatusFiles(Files) == false)
return false;
SPtr<DynamicMMap> Map = CreateDynamicMMap(NULL);
- unsigned long CurrentSize = 0;
- unsigned long TotalSize = 0;
+ map_filesize_t CurrentSize = 0;
+ map_filesize_t TotalSize = 0;
TotalSize = ComputeSize(Files.begin()+EndOfSource,Files.end());
private:
pkgCache::StringItem *UniqHash[26];
- APT_HIDDEN map_ptrloc WriteStringInMap(std::string const &String) { return WriteStringInMap(String.c_str()); };
- APT_HIDDEN map_ptrloc WriteStringInMap(const char *String);
- APT_HIDDEN map_ptrloc WriteStringInMap(const char *String, const unsigned long &Len);
- APT_HIDDEN map_ptrloc AllocateInMap(const unsigned long &size);
+ APT_HIDDEN map_stringitem_t WriteStringInMap(std::string const &String) { return WriteStringInMap(String.c_str()); };
+ APT_HIDDEN map_stringitem_t WriteStringInMap(const char *String);
+ APT_HIDDEN map_stringitem_t WriteStringInMap(const char *String, const unsigned long &Len);
+ APT_HIDDEN map_pointer_t AllocateInMap(const unsigned long &size);
public:
bool NewFileDesc(pkgCache::DescIterator &Desc,ListParser &List);
bool NewDepends(pkgCache::PkgIterator &Pkg, pkgCache::VerIterator &Ver,
std::string const &Version, unsigned int const &Op,
- unsigned int const &Type, map_ptrloc* &OldDepLast);
+ unsigned int const &Type, map_pointer_t* &OldDepLast);
bool NewDepends(pkgCache::PkgIterator &Pkg, pkgCache::VerIterator &Ver,
- map_ptrloc const Version, unsigned int const &Op,
- unsigned int const &Type, map_ptrloc* &OldDepLast);
- unsigned long NewVersion(pkgCache::VerIterator &Ver,const std::string &VerStr,unsigned long Next) APT_DEPRECATED
+ map_pointer_t const Version, unsigned int const &Op,
+ unsigned int const &Type, map_pointer_t* &OldDepLast);
+ map_pointer_t NewVersion(pkgCache::VerIterator &Ver,const std::string &VerStr,map_pointer_t const Next) APT_DEPRECATED
{ return NewVersion(Ver, VerStr, 0, 0, Next); }
- unsigned long NewVersion(pkgCache::VerIterator &Ver,const std::string &VerStr,
- map_ptrloc const ParentPkg, unsigned long const Hash,
- unsigned long Next);
- map_ptrloc NewDescription(pkgCache::DescIterator &Desc,const std::string &Lang,const MD5SumValue &md5sum,map_ptrloc Next);
+ map_pointer_t NewVersion(pkgCache::VerIterator &Ver,const std::string &VerStr,
+ map_pointer_t const ParentPkg, unsigned short const Hash,
+ map_pointer_t const Next);
+ map_pointer_t NewDescription(pkgCache::DescIterator &Desc,const std::string &Lang,const MD5SumValue &md5sum,map_stringitem_t const idxmd5str);
public:
- unsigned long WriteUniqString(const char *S,unsigned int Size);
- inline unsigned long WriteUniqString(const std::string &S) {return WriteUniqString(S.c_str(),S.length());};
+ map_stringitem_t WriteUniqString(const char *S,unsigned int const Size);
+ inline map_stringitem_t WriteUniqString(const std::string &S) {return WriteUniqString(S.c_str(),S.length());};
void DropProgress() {Progress = 0;};
bool SelectFile(const std::string &File,const std::string &Site,pkgIndexFile const &Index,
APT_HIDDEN bool AddImplicitDepends(pkgCache::GrpIterator &G, pkgCache::PkgIterator &P,
pkgCache::VerIterator &V);
APT_HIDDEN bool AddImplicitDepends(pkgCache::VerIterator &V, pkgCache::PkgIterator &D);
+
+ APT_HIDDEN bool AddNewDescription(ListParser &List, pkgCache::VerIterator &Ver,
+ std::string const &lang, MD5SumValue const &CurMd5, map_stringitem_t &md5idx);
};
/*}}}*/
// This is the abstract package list parser class. /*{{{*/
// Some cache items
pkgCache::VerIterator OldDepVer;
- map_ptrloc *OldDepLast;
+ map_pointer_t *OldDepLast;
// Flag file dependencies
bool FoundFileDeps;
protected:
- inline unsigned long WriteUniqString(std::string S) {return Owner->WriteUniqString(S);};
- inline unsigned long WriteUniqString(const char *S,unsigned int Size) {return Owner->WriteUniqString(S,Size);};
- inline unsigned long WriteString(const std::string &S) {return Owner->WriteStringInMap(S);};
- inline unsigned long WriteString(const char *S,unsigned int Size) {return Owner->WriteStringInMap(S,Size);};
+ inline map_stringitem_t WriteUniqString(std::string S) {return Owner->WriteUniqString(S);};
+ inline map_stringitem_t WriteUniqString(const char *S,unsigned int Size) {return Owner->WriteUniqString(S,Size);};
+ inline map_stringitem_t WriteString(const std::string &S) {return Owner->WriteStringInMap(S);};
+ inline map_stringitem_t WriteString(const char *S,unsigned int Size) {return Owner->WriteStringInMap(S,Size);};
bool NewDepends(pkgCache::VerIterator &Ver,const std::string &Package, const std::string &Arch,
const std::string &Version,unsigned int Op,
unsigned int Type);
virtual bool ArchitectureAll() = 0;
virtual std::string Version() = 0;
virtual bool NewVersion(pkgCache::VerIterator &Ver) = 0;
- virtual std::string Description() = 0;
- virtual std::string DescriptionLanguage() = 0;
+ virtual std::string Description(std::string const &lang) = 0;
+ virtual std::vector<std::string> AvailableDescriptionLanguages() = 0;
virtual MD5SumValue Description_md5() = 0;
virtual unsigned short VersionHash() = 0;
/** compare currently parsed version with given version
APT_PURE bool SameVersion(unsigned short const Hash, pkgCache::VerIterator const &Ver);
virtual bool UsePackage(pkgCache::PkgIterator &Pkg,
pkgCache::VerIterator &Ver) = 0;
- virtual unsigned long Offset() = 0;
- virtual unsigned long Size() = 0;
+ virtual map_filesize_t Offset() = 0;
+ virtual map_filesize_t Size() = 0;
virtual bool Step() = 0;
// Records::pkgRecords - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* This will create the necessary structures to access the status files */
-pkgRecords::pkgRecords(pkgCache &Cache) : d(NULL), Cache(Cache),
+pkgRecords::pkgRecords(pkgCache &aCache) : d(NULL), Cache(aCache),
Files(Cache.HeaderP->PackageFileCount)
{
for (pkgCache::PkgFileIterator I = Cache.FileBegin();
#define PKGLIB_PKGRECORDS_H
#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/macros.h>
#include <string>
#include <vector>
// These refer to the archive file for the Version
virtual std::string FileName() {return std::string();};
- virtual std::string MD5Hash() {return std::string();};
- virtual std::string SHA1Hash() {return std::string();};
- virtual std::string SHA256Hash() {return std::string();};
- virtual std::string SHA512Hash() {return std::string();};
virtual std::string SourcePkg() {return std::string();};
virtual std::string SourceVer() {return std::string();};
+ /** return all known hashes in this record.
+ *
+ * For authentication proposes packages come with hashsums which
+ * this method is supposed to parse and return so that clients can
+ * choose the hash to be used.
+ */
+ virtual HashStringList Hashes() const { return HashStringList(); };
+ APT_DEPRECATED std::string MD5Hash() const { return GetHashFromHashes("MD5Sum"); };
+ APT_DEPRECATED std::string SHA1Hash() const { return GetHashFromHashes("SHA1"); };
+ APT_DEPRECATED std::string SHA256Hash() const { return GetHashFromHashes("SHA256"); };
+ APT_DEPRECATED std::string SHA512Hash() const { return GetHashFromHashes("SHA512"); };
+
// These are some general stats about the package
virtual std::string Maintainer() {return std::string();};
- virtual std::string ShortDesc() {return std::string();};
- virtual std::string LongDesc() {return std::string();};
+ /** return short description in language from record.
+ *
+ * @see #LongDesc
+ */
+ virtual std::string ShortDesc(std::string const &/*lang*/) {return std::string();};
+ /** return long description in language from record.
+ *
+ * If \b lang is empty the "best" available language will be
+ * returned as determined by the APT::Languages configuration.
+ * If a (requested) language can't be found in this record an empty
+ * string will be returned.
+ */
+ virtual std::string LongDesc(std::string const &/*lang*/) {return std::string();};
+ std::string ShortDesc() {return ShortDesc("");};
+ std::string LongDesc() {return LongDesc("");};
+
virtual std::string Name() {return std::string();};
virtual std::string Homepage() {return std::string();}
virtual void GetRec(const char *&Start,const char *&Stop) {Start = Stop = 0;};
virtual ~Parser() {};
+
+ private:
+ APT_HIDDEN std::string GetHashFromHashes(char const * const type) const
+ {
+ HashStringList const hashes = Hashes();
+ HashString const * const hs = hashes.find(type);
+ return hs != NULL ? hs->HashValue() : "";
+ };
};
/*}}}*/
#endif
virtual bool AddStatusFiles(std::vector<pkgIndexFile *> &List) = 0;
virtual bool FindIndex(pkgCache::PkgFileIterator File,
pkgIndexFile *&Found) const = 0;
-
+
/* Evauluate how 'right' we are for this system based on the filesystem
etc.. */
- virtual signed Score(Configuration const &/*Cnf*/) {return 0;};
+ virtual signed Score(Configuration const &/*Cnf*/) {
+ return 0;
+ };
pkgSystem();
virtual ~pkgSystem() {};
class pkgIndexFile;
class metaIndex;
-class pkgSourceList
+class pkgSource
+{
+ protected:
+
+ std::vector<metaIndex *> SrcList;
+
+};
+
+class pkgSourceList : public pkgSource
{
public:
typedef std::vector<metaIndex *>::const_iterator const_iterator;
- protected:
+ public:
std::vector<metaIndex *> SrcList;
#define PKGLIB_SRCRECORDS_H
#include <apt-pkg/macros.h>
+#include <apt-pkg/hashes.h>
#include <string>
#include <vector>
{
public:
+#if __GNUC__ >= 4
+ // ensure that con- & de-structor don't trigger this warning
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
// Describes a single file
struct File
{
- std::string MD5Hash;
- unsigned long Size;
std::string Path;
std::string Type;
+ unsigned long long Size;
+ HashStringList Hashes;
+ APT_DEPRECATED std::string MD5Hash;
};
-
+#if __GNUC__ >= 4
+ #pragma GCC diagnostic pop
+#endif
+
// Abstract parser for each source record
class Parser
{
unsigned long long Size;
};
+static unsigned long AlphaHash(const char *Text, size_t Length) /*{{{*/
+{
+ /* This very simple hash function for the last 8 letters gives
+ very good performance on the debian package files */
+ if (Length > 8)
+ {
+ Text += (Length - 8);
+ Length = 8;
+ }
+ unsigned long Res = 0;
+ for (size_t i = 0; i < Length; ++i)
+ Res = ((unsigned long)(Text[i]) & 0xDF) ^ (Res << 1);
+ return Res & 0xFF;
+}
+ /*}}}*/
+
// TagFile::pkgTagFile - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* */
pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long long Size)
+ : d(NULL)
+{
+ Init(pFd, Size);
+}
+
+void pkgTagFile::Init(FileFd *pFd,unsigned long long Size)
{
/* The size is increased by 4 because if we start with the Size of the
filename we need to try to read 1 char more to see an EOF faster, 1
char the end-pointer can be on and maybe 2 newlines need to be added
to the end of the file -> 4 extra chars */
Size += 4;
+ if(d != NULL)
+ {
+ free(d->Buffer);
+ delete d;
+ }
d = new pkgTagFilePrivate(pFd, Size);
if (d->Fd.IsOpen() == false)
*/
bool pkgTagFile::Step(pkgTagSection &Tag)
{
- while (Tag.Scan(d->Start,d->End - d->Start) == false)
+ if(Tag.Scan(d->Start,d->End - d->Start) == false)
{
- if (Fill() == false)
- return false;
-
- if(Tag.Scan(d->Start,d->End - d->Start))
- break;
+ do
+ {
+ if (Fill() == false)
+ return false;
- if (Resize() == false)
- return _error->Error(_("Unable to parse package file %s (1)"),
- d->Fd.Name().c_str());
+ if(Tag.Scan(d->Start,d->End - d->Start, false))
+ break;
+
+ if (Resize() == false)
+ return _error->Error(_("Unable to parse package file %s (1)"),
+ d->Fd.Name().c_str());
+
+ } while (Tag.Scan(d->Start,d->End - d->Start, false) == false);
}
+
d->Start += Tag.size();
d->iOffset += Tag.size();
if (Fill() == false)
return false;
- if (Tag.Scan(d->Start, d->End - d->Start) == false)
+ if (Tag.Scan(d->Start, d->End - d->Start, false) == false)
return _error->Error(_("Unable to parse package file %s (2)"),d->Fd.Name().c_str());
return true;
// ---------------------------------------------------------------------
/* */
pkgTagSection::pkgTagSection()
- : Section(0), TagCount(0), d(NULL), Stop(0)
+ : Section(0), d(NULL), Stop(0)
{
- memset(&Indexes, 0, sizeof(Indexes));
- memset(&AlphaIndexes, 0, sizeof(AlphaIndexes));
+ memset(&LookupTable, 0, sizeof(LookupTable));
}
/*}}}*/
// TagSection::Scan - Scan for the end of the header information /*{{{*/
-// ---------------------------------------------------------------------
-/* This looks for the first double new line in the data stream.
- It also indexes the tags in the section. */
-bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength)
+bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength, bool const Restart)
{
+ Section = Start;
const char *End = Start + MaxLength;
- Stop = Section = Start;
- memset(AlphaIndexes,0,sizeof(AlphaIndexes));
+
+ if (Restart == false && Tags.empty() == false)
+ {
+ Stop = Section + Tags.back().StartTag;
+ if (End <= Stop)
+ return false;
+ Stop = (const char *)memchr(Stop,'\n',End - Stop);
+ if (Stop == NULL)
+ return false;
+ ++Stop;
+ }
+ else
+ {
+ Stop = Section;
+ if (Tags.empty() == false)
+ {
+ memset(&LookupTable, 0, sizeof(LookupTable));
+ Tags.clear();
+ }
+ Tags.reserve(0x100);
+ }
+ size_t TagCount = Tags.size();
if (Stop == 0)
return false;
- TagCount = 0;
- while (TagCount+1 < sizeof(Indexes)/sizeof(Indexes[0]) && Stop < End)
+ TagData lastTagData(0);
+ lastTagData.EndTag = 0;
+ unsigned long lastTagHash = 0;
+ while (Stop < End)
{
TrimRecord(true,End);
// Start a new index and add it to the hash
if (isspace(Stop[0]) == 0)
{
- Indexes[TagCount++] = Stop - Section;
- AlphaIndexes[AlphaHash(Stop,End)] = TagCount;
+ // store the last found tag
+ if (lastTagData.EndTag != 0)
+ {
+ if (LookupTable[lastTagHash] != 0)
+ lastTagData.NextInBucket = LookupTable[lastTagHash];
+ LookupTable[lastTagHash] = TagCount;
+ Tags.push_back(lastTagData);
+ }
+
+ ++TagCount;
+ lastTagData = TagData(Stop - Section);
+ // find the colon separating tag and value
+ char const * Colon = (char const *) memchr(Stop, ':', End - Stop);
+ if (Colon == NULL)
+ return false;
+ // find the end of the tag (which might or might not be the colon)
+ char const * EndTag = Colon;
+ --EndTag;
+ for (; EndTag > Stop && isspace(*EndTag) != 0; --EndTag)
+ ;
+ ++EndTag;
+ lastTagData.EndTag = EndTag - Section;
+ lastTagHash = AlphaHash(Stop, EndTag - Stop);
+ // find the beginning of the value
+ Stop = Colon + 1;
+ for (; isspace(*Stop) != 0; ++Stop);
+ if (Stop >= End)
+ return false;
+ lastTagData.StartValue = Stop - Section;
}
Stop = (const char *)memchr(Stop,'\n',End - Stop);
-
+
if (Stop == 0)
return false;
// Double newline marks the end of the record
if (Stop+1 < End && Stop[1] == '\n')
{
- Indexes[TagCount] = Stop - Section;
+ if (lastTagData.EndTag != 0)
+ {
+ if (LookupTable[lastTagHash] != 0)
+ lastTagData.NextInBucket = LookupTable[lastTagHash];
+ LookupTable[lastTagHash] = TagCount;
+ Tags.push_back(lastTagData);
+ }
+
+ TagData const td(Stop - Section);
+ Tags.push_back(td);
TrimRecord(false,End);
return true;
}
for (; Stop > Section + 2 && (Stop[-2] == '\n' || Stop[-2] == '\r'); Stop--);
}
/*}}}*/
-// TagSection::Exists - return True if a tag exists /*{{{*/
-bool pkgTagSection::Exists(const char* const Tag)
+// TagSection::Exists - return True if a tag exists /*{{{*/
+bool pkgTagSection::Exists(const char* const Tag) const
{
unsigned int tmp;
return Find(Tag, tmp);
/* This searches the section for a tag that matches the given string. */
bool pkgTagSection::Find(const char *Tag,unsigned int &Pos) const
{
- unsigned int Length = strlen(Tag);
- unsigned int I = AlphaIndexes[AlphaHash(Tag)];
- if (I == 0)
+ size_t const Length = strlen(Tag);
+ unsigned int Bucket = LookupTable[AlphaHash(Tag, Length)];
+ if (Bucket == 0)
return false;
- I--;
-
- for (unsigned int Counter = 0; Counter != TagCount; Counter++,
- I = (I+1)%TagCount)
+
+ for (; Bucket != 0; Bucket = Tags[Bucket - 1].NextInBucket)
{
- const char *St;
- St = Section + Indexes[I];
- if (strncasecmp(Tag,St,Length) != 0)
+ if ((Tags[Bucket - 1].EndTag - Tags[Bucket - 1].StartTag) != Length)
continue;
- // Make sure the colon is in the right place
- const char *C = St + Length;
- for (; isspace(*C) != 0; C++);
- if (*C != ':')
+ char const * const St = Section + Tags[Bucket - 1].StartTag;
+ if (strncasecmp(Tag,St,Length) != 0)
continue;
- Pos = I;
+
+ Pos = Bucket - 1;
return true;
}
Pos = 0;
return false;
}
- /*}}}*/
-// TagSection::Find - Locate a tag /*{{{*/
-// ---------------------------------------------------------------------
-/* This searches the section for a tag that matches the given string. */
bool pkgTagSection::Find(const char *Tag,const char *&Start,
const char *&End) const
{
- unsigned int Length = strlen(Tag);
- unsigned int I = AlphaIndexes[AlphaHash(Tag)];
- if (I == 0)
+ unsigned int Pos;
+ if (Find(Tag, Pos) == false)
return false;
- I--;
-
- for (unsigned int Counter = 0; Counter != TagCount; Counter++,
- I = (I+1)%TagCount)
- {
- const char *St;
- St = Section + Indexes[I];
- if (strncasecmp(Tag,St,Length) != 0)
- continue;
-
- // Make sure the colon is in the right place
- const char *C = St + Length;
- for (; isspace(*C) != 0; C++);
- if (*C != ':')
- continue;
- // Strip off the gunk from the start end
- Start = C;
- End = Section + Indexes[I+1];
- if (Start >= End)
- return _error->Error("Internal parsing error");
-
- for (; (isspace(*Start) != 0 || *Start == ':') && Start < End; Start++);
- for (; isspace(End[-1]) != 0 && End > Start; End--);
-
- return true;
- }
-
- Start = End = 0;
- return false;
+ Start = Section + Tags[Pos].StartValue;
+ // Strip off the gunk from the end
+ End = Section + Tags[Pos + 1].StartTag;
+ if (unlikely(Start > End))
+ return _error->Error("Internal parsing error");
+
+ for (; isspace(End[-1]) != 0 && End > Start; --End);
+
+ return true;
}
/*}}}*/
// TagSection::FindS - Find a string /*{{{*/
return Result;
}
/*}}}*/
+// TagSection::FindB - Find boolean value /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgTagSection::FindB(const char *Tag, bool const &Default) const
+{
+ const char *Start, *Stop;
+ if (Find(Tag, Start, Stop) == false)
+ return Default;
+ return StringToBool(string(Start, Stop));
+}
+ /*}}}*/
// TagSection::FindFlag - Locate a yes/no type flag /*{{{*/
// ---------------------------------------------------------------------
/* The bits marked in Flag are masked on/off in Flags */
return true;
}
/*}}}*/
+APT_PURE unsigned int pkgTagSection::Count() const { /*{{{*/
+ if (Tags.empty() == true)
+ return 0;
+ // the last element is just marking the end and isn't a real one
+ return Tags.size() - 1;
+}
+ /*}}}*/
// TFRewrite - Rewrite a control record /*{{{*/
// ---------------------------------------------------------------------
/* This writes the control record to stdout rewriting it as necessary. The
#include <stdio.h>
#include <string>
+#include <vector>
+#include <list>
#ifndef APT_8_CLEANER_HEADERS
#include <apt-pkg/fileutl.h>
class pkgTagSection
{
const char *Section;
- // We have a limit of 256 tags per section.
- unsigned int Indexes[256];
- unsigned int AlphaIndexes[0x100];
- unsigned int TagCount;
+ struct TagData {
+ unsigned int StartTag;
+ unsigned int EndTag;
+ unsigned int StartValue;
+ unsigned int NextInBucket;
+
+ TagData(unsigned int const StartTag) : StartTag(StartTag), NextInBucket(0) {}
+ };
+ std::vector<TagData> Tags;
+ unsigned int LookupTable[0x100];
+
// dpointer placeholder (for later in case we need it)
void *d;
- /* This very simple hash function for the last 8 letters gives
- very good performance on the debian package files */
- inline static unsigned long AlphaHash(const char *Text, const char *End = 0)
- {
- unsigned long Res = 0;
- for (; Text != End && *Text != ':' && *Text != 0; Text++)
- Res = ((unsigned long)(*Text) & 0xDF) ^ (Res << 1);
- return Res & 0xFF;
- }
-
protected:
const char *Stop;
bool Find(const char *Tag,const char *&Start, const char *&End) const;
bool Find(const char *Tag,unsigned int &Pos) const;
std::string FindS(const char *Tag) const;
- signed int FindI(const char *Tag,signed long Default = 0) const ;
+ signed int FindI(const char *Tag,signed long Default = 0) const;
+ bool FindB(const char *Tag, bool const &Default = false) const;
unsigned long long FindULL(const char *Tag, unsigned long long const &Default = 0) const;
bool FindFlag(const char *Tag,unsigned long &Flags,
unsigned long Flag) const;
bool static FindFlag(unsigned long &Flags, unsigned long Flag,
const char* Start, const char* Stop);
- bool Scan(const char *Start,unsigned long MaxLength);
+
+ /** \brief searches the boundaries of the current section
+ *
+ * While parameter Start marks the beginning of the section, this method
+ * will search for the first double newline in the data stream which marks
+ * the end of the section. It also does a first pass over the content of
+ * the section parsing it as encountered for processing later on by Find
+ *
+ * @param Start is the beginning of the section
+ * @param MaxLength is the size of valid data in the stream pointed to by Start
+ * @param Restart if enabled internal state will be cleared, otherwise it is
+ * assumed that now more data is available in the stream and the parsing will
+ * start were it encountered insufficent data the last time.
+ *
+ * @return \b true if section end was found, \b false otherwise.
+ * Beware that internal state will be inconsistent if \b false is returned!
+ */
+ APT_MUSTCHECK bool Scan(const char *Start, unsigned long MaxLength, bool const Restart = true);
inline unsigned long size() const {return Stop - Section;};
void Trim();
virtual void TrimRecord(bool BeforeRecord, const char* &End);
-
- inline unsigned int Count() const {return TagCount;};
- bool Exists(const char* const Tag);
-
+
+ /** \brief amount of Tags in the current section
+ *
+ * Note: if a Tag is mentioned repeatly it will be counted multiple
+ * times, but only the last occurance is available via Find methods.
+ */
+ unsigned int Count() const;
+ bool Exists(const char* const Tag) const;
+
inline void Get(const char *&Start,const char *&Stop,unsigned int I) const
- {Start = Section + Indexes[I]; Stop = Section + Indexes[I+1];}
-
+ {Start = Section + Tags[I].StartTag; Stop = Section + Tags[I+1].StartTag;}
+
inline void GetSection(const char *&Start,const char *&Stop) const
{
Start = Section;
unsigned long Offset();
bool Jump(pkgTagSection &Tag,unsigned long long Offset);
+ void Init(FileFd *F,unsigned long long Size = 32*1024);
+
pkgTagFile(FileFd *F,unsigned long long Size = 32*1024);
virtual ~pkgTagFile();
};
cout << '\r' << BlankLine << '\r';
cout << _("Hit ") << Itm.Description;
- if (Itm.Owner->FileSize != 0)
- cout << " [" << SizeToStr(Itm.Owner->FileSize) << "B]";
cout << endl;
Update = true;
}
if (Quiet <= 0)
cout << '\r' << BlankLine << '\r' << flush;
+ if (_config->FindB("quiet::NoStatistic", false) == true)
+ return;
+
if (FetchedBytes != 0 && _error->PendingError() == false)
ioprintf(cout,_("Fetched %sB in %s (%sB/s)\n"),
SizeToStr(FetchedBytes).c_str(),
ScreenWidth = sizeof(Buffer)-1;
// Put in the percent done
- sprintf(S,"%.0f%%",((CurrentBytes + CurrentItems)*100.0)/(TotalBytes+TotalItems));
+ sprintf(S,"%.0f%%", Percent);
bool Shown = false;
for (pkgAcquire::Worker *I = Owner->WorkersBegin(); I != 0;
#include <apt-pkg/configuration.h>
#include <apt-pkg/pkgcache.h>
#include <apt-pkg/macros.h>
+#include <apt-pkg/sourcelist.h>
+#include <apti18n.h>
+// FIXME: we need to find a way to export this
+class APT_PUBLIC SourceList : public pkgSourceList
+{
+
+ public:
+ // Add custom metaIndex (e.g. local files)
+ void AddMetaIndex(metaIndex *mi) {
+ SrcList.push_back(mi);
+ }
+
+};
// class CacheFile - Cover class for some dependency cache functions /*{{{*/
// ---------------------------------------------------------------------
return false;
return true;
}
+ // FIXME: this can go once the "libapt-pkg" pkgSourceList has a way
+ // to add custom metaIndexes (or custom local files or so)
+ bool BuildSourceList(OpProgress */*Progress*/ = NULL) {
+ if (SrcList != NULL)
+ return true;
+ SrcList = new SourceList();
+ if (SrcList->ReadMainList() == false)
+ return _error->Error(_("The list of sources could not be read."));
+ return true;
+ }
bool Open(bool WithLock = true)
{
OpTextProgress Prog(*_config);
#include <apt-pkg/packagemanager.h>
#include <apt-pkg/pkgcache.h>
#include <apt-pkg/upgrade.h>
+#include <apt-pkg/install-progress.h>
#include <errno.h>
#include <stdlib.h>
#include <iostream>
#include <set>
#include <vector>
+#include <map>
#include <apt-private/acqprogress.h>
#include <apt-private/private-install.h>
bool DoInstall(CommandLine &CmdL)
{
CacheFile Cache;
+ // first check for local pkgs and add them to the cache
+ for (const char **I = CmdL.FileList; *I != 0; I++)
+ {
+ if(FileExists(*I))
+ {
+ // FIXME: make this more elegant
+ std::string TypeStr = flExtension(*I) + "-file";
+ pkgSourceList::Type *Type = pkgSourceList::Type::GetType(TypeStr.c_str());
+ if(Type != 0)
+ {
+ std::vector<metaIndex *> List;
+ std::map<std::string, std::string> Options;
+ if(Type->CreateItem(List, *I, "", "", Options))
+ {
+ // we have our own CacheFile that gives us a SourceList
+ // with superpowerz
+ SourceList *sources = (SourceList*)Cache.GetSourceList();
+ sources->AddMetaIndex(List[0]);
+ }
+ }
+ }
+ }
+
+ // then open the cache
if (Cache.OpenForInstall() == false ||
Cache.CheckDeps(CmdL.FileSize() != 1) == false)
return false;
-
+
std::map<unsigned short, APT::VersionSet> verset;
if(!DoCacheManipulationFromCommandLine(CmdL, Cache, verset, 0))
return (l_name < r_name);
}
};
- /*}}}*/
-class PackageNameMatcher : public Matcher /*{{{*/
+
+class PackageNameMatcher : public Matcher
{
-#ifdef PACKAGE_MATCHER_ABI_COMPAT
-#define PackageMatcher PackageNameMatchesFnmatch
-#endif
public:
PackageNameMatcher(const char **patterns)
{
for(int i=0; patterns[i] != NULL; ++i)
{
std::string pattern = patterns[i];
-#ifdef PACKAGE_MATCHER_ABI_COMPAT
- APT::CacheFilter::PackageNameMatchesFnmatch *cachefilter = NULL;
- cachefilter = new APT::CacheFilter::PackageNameMatchesFnmatch(pattern);
-#else
APT::CacheFilter::PackageMatcher *cachefilter = NULL;
if(_config->FindB("APT::Cmd::Use-Regexp", false) == true)
cachefilter = new APT::CacheFilter::PackageNameMatchesRegEx(pattern);
else
cachefilter = new APT::CacheFilter::PackageNameMatchesFnmatch(pattern);
-#endif
filters.push_back(cachefilter);
}
}
return true;
}
/*}}}*/
+// ShowHashTableStats - Show stats about a hashtable /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+template<class T>
+static void ShowHashTableStats(std::string Type,
+ T *StartP,
+ map_pointer_t *Hashtable,
+ unsigned long Size)
+{
+ // hashtable stats for the HashTable
+ unsigned long NumBuckets = Size;
+ unsigned long UsedBuckets = 0;
+ unsigned long UnusedBuckets = 0;
+ unsigned long LongestBucket = 0;
+ unsigned long ShortestBucket = NumBuckets;
+ unsigned long Entries = 0;
+ for (unsigned int i=0; i < NumBuckets; ++i)
+ {
+ T *P = StartP + Hashtable[i];
+ if(P == 0 || P == StartP)
+ {
+ ++UnusedBuckets;
+ continue;
+ }
+ ++UsedBuckets;
+ unsigned long ThisBucketSize = 0;
+ for (; P != StartP; P = StartP + P->Next)
+ ++ThisBucketSize;
+ Entries += ThisBucketSize;
+ LongestBucket = std::max(ThisBucketSize, LongestBucket);
+ ShortestBucket = std::min(ThisBucketSize, ShortestBucket);
+ }
+ cout << "Total buckets in " << Type << ": " << NumBuckets << std::endl;
+ cout << " Unused: " << UnusedBuckets << std::endl;
+ cout << " Used: " << UsedBuckets << std::endl;
+ cout << " Average entries: " << Entries/(double)NumBuckets << std::endl;
+ cout << " Longest: " << LongestBucket << std::endl;
+ cout << " Shortest: " << ShortestBucket << std::endl;
+}
+ /*}}}*/
// Stats - Dump some nice statistics /*{{{*/
// ---------------------------------------------------------------------
/* */
}
}
cout << _("Total dependency version space: ") << SizeToStr(DepVerSize) << endl;
-
+
unsigned long Slack = 0;
for (int I = 0; I != 7; I++)
Slack += Cache->Head().Pools[I].ItemSize*Cache->Head().Pools[I].Count;
cout << _("Total slack space: ") << SizeToStr(Slack) << endl;
-
+
unsigned long Total = 0;
- Total = Slack + Size + Cache->Head().DependsCount*Cache->Head().DependencySz +
- Cache->Head().VersionCount*Cache->Head().VersionSz +
- Cache->Head().PackageCount*Cache->Head().PackageSz +
- Cache->Head().VerFileCount*Cache->Head().VerFileSz +
- Cache->Head().ProvidesCount*Cache->Head().ProvidesSz;
+#define APT_CACHESIZE(X,Y) (Cache->Head().X * Cache->Head().Y)
+ Total = Slack + Size +
+ APT_CACHESIZE(GroupCount, GroupSz) +
+ APT_CACHESIZE(PackageCount, PackageSz) +
+ APT_CACHESIZE(VersionCount, VersionSz) +
+ APT_CACHESIZE(DescriptionCount, DescriptionSz) +
+ APT_CACHESIZE(DependsCount, DependencySz) +
+ APT_CACHESIZE(PackageFileCount, PackageFileSz) +
+ APT_CACHESIZE(VerFileCount, VerFileSz) +
+ APT_CACHESIZE(DescFileCount, DescFileSz) +
+ APT_CACHESIZE(ProvidesCount, ProvidesSz) +
+ (2 * Cache->Head().HashTableSize * sizeof(map_id_t));
cout << _("Total space accounted for: ") << SizeToStr(Total) << endl;
-
+#undef APT_CACHESIZE
+
+ // hashtable stats
+ ShowHashTableStats<pkgCache::Package>("PkgHashTable", Cache->PkgP, Cache->Head().PkgHashTable(), Cache->Head().HashTableSize);
+ ShowHashTableStats<pkgCache::Group>("GrpHashTable", Cache->GrpP, Cache->Head().GrpHashTable(), Cache->Head().HashTableSize);
+
return true;
}
/*}}}*/
struct ExDescFile
{
pkgCache::DescFile *Df;
- map_ptrloc ID;
+ map_id_t ID;
};
// Search - Perform a search /*{{{*/
ShowHelp();
return 0;
}
+ // we really don't need anything
+ DropPrivs();
FILE* input = fdopen(STDIN_FILENO, "r");
FILE* output = fopen("/tmp/dump.edsp", "w");
// ---------------------------------------------------------------------
/* */
DebFile::DebFile(const char *debfile)
- : File(debfile, FileFd::ReadOnly), Size(0), Control(NULL), ControlLen(0),
+ : File(debfile, FileFd::ReadOnly), Control(NULL), ControlLen(0),
DepOp(0), PreDepOp(0), Config(0), Template(0), Which(None)
{
}
if (strcmp(I.Name, "control") == 0)
{
delete [] Control;
- Control = new char[I.Size+1];
- Control[I.Size] = 0;
+ Control = new char[I.Size+3];
+ Control[I.Size] = '\n';
+ Control[I.Size + 1] = '\n';
+ Control[I.Size + 2] = '\0';
Which = IsControl;
- ControlLen = I.Size;
+ ControlLen = I.Size + 3;
// make it call the Process method below. this is so evil
Fd = -2;
}
bool DebFile::ParseInfo()
{
if (Control == NULL) return false;
-
+
pkgTagSection Section;
- Section.Scan(Control, ControlLen);
+ if (Section.Scan(Control, ControlLen) == false)
+ return false;
Package = Section.FindS("Package");
Version = GetInstalledVer(Package);
class DebFile : public pkgDirStream
{
FileFd File;
- unsigned long Size;
char *Control;
unsigned long ControlLen;
queued.insert(Last->Index().ArchiveURI(I->Path));
// check if we have a file with that md5 sum already localy
- if(!I->MD5Hash.empty() && FileExists(flNotDir(I->Path)))
- {
- FileFd Fd(flNotDir(I->Path), FileFd::ReadOnly);
- MD5Summation sum;
- sum.AddFD(Fd.Fd(), Fd.Size());
- Fd.Close();
- if((string)sum.Result() == I->MD5Hash)
+ std::string localFile = flNotDir(I->Path);
+ if (FileExists(localFile) == true)
+ if(I->Hashes.VerifyFile(localFile) == true)
{
ioprintf(c1out,_("Skipping already downloaded file '%s'\n"),
- flNotDir(I->Path).c_str());
+ localFile.c_str());
continue;
}
+
+ // see if we have a hash (Acquire::ForceHash is the only way to have none)
+ if (I->Hashes.usable() == false && _config->FindB("APT::Get::AllowUnauthenticated",false) == false)
+ {
+ ioprintf(c1out, "Skipping download of file '%s' as requested hashsum is not available for authentication\n",
+ localFile.c_str());
+ continue;
}
new pkgAcqFile(&Fetcher,Last->Index().ArchiveURI(I->Path),
- I->MD5Hash,I->Size,
- Last->Index().SourceInfo(*Last,*I),Src);
+ I->Hashes, I->Size, Last->Index().SourceInfo(*Last,*I), Src);
}
}
for (const char **I = CmdL.FileList + 1; *I != 0; I++, J++)
{
string Src;
- pkgSrcRecords::Parser *Last = FindSrc(*I,Recs,SrcRecs,Src,Cache);
+ pkgSrcRecords::Parser *Last = 0;
+
+ // a unpacked debian source tree
+ if (DirectoryExists(*I))
+ {
+ // FIXME: how can we make this more elegant?
+ std::string TypeName = "debian/control File Source Index";
+ pkgIndexFile::Type *Type = pkgIndexFile::Type::GetType(TypeName.c_str());
+ if(Type != NULL)
+ Last = Type->CreateSrcPkgParser(*I);
+ }
+ // if its a local file (e.g. .dsc) use this
+ else if (FileExists(*I))
+ {
+ // see if we can get a parser for this pkgIndexFile type
+ string TypeName = flExtension(*I) + " File Source Index";
+ pkgIndexFile::Type *Type = pkgIndexFile::Type::GetType(TypeName.c_str());
+ if(Type != NULL)
+ Last = Type->CreateSrcPkgParser(*I);
+ } else {
+ // normal case, search the cache for the source file
+ Last = FindSrc(*I,Recs,SrcRecs,Src,Cache);
+ }
+
if (Last == 0)
return _error->Error(_("Unable to find a source package for %s"),Src.c_str());
}
else if (Last->BuildDepends(BuildDeps, _config->FindB("APT::Get::Arch-Only", false), StripMultiArch) == false)
return _error->Error(_("Unable to get build-dependency information for %s"),Src.c_str());
-
+
// Also ensure that build-essential packages are present
Configuration::Item const *Opts = _config->Tree("APT::Build-Essential");
if (Opts)
{'o',"option",0,CommandLine::ArbItem},
{0,0,0,0}};
+ // we really don't need anything
+ DropPrivs();
+
CommandLine CmdL(Args,_config);
if (pkgInitConfig(*_config) == false ||
CmdL.Parse(argc,argv) == false) {
+apt (1.1~exp1) UNRELEASED; urgency=low
+
+ [ Michael Vogt ]
+ * lp:~mvo/apt/webserver-simulate-broken-with-fix346386:
+ - fix invalid InRelease file download checking and add regression
+ test to server broken files to the buildin test webserver
+ * stop exporting the accidently exported parsenetrc() symbol
+ * [ABI-Break] lp:~mvo/apt/source-hashes:
+ - use sha{512,256,1} for deb-src when available LP: #1098738
+ * [ABI-Break] remove the PACKAGE_MATCHER_ABI_COMPAT defines
+
+ -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 07 May 2014 17:48:24 +0200
+
apt (1.0.5) unstable; urgency=low
[ Michael Vogt ]
* apt-config as an interface to the configuration settings
* apt-key as an interface to manage authentication keys
-Package: libapt-pkg4.12
+Package: libapt-pkg4.13
Architecture: any
Multi-Arch: same
Pre-Depends: ${misc:Pre-Depends}
+++ /dev/null
-bin/libapt-pkg*.so.* usr/lib/@DEB_HOST_MULTIARCH@/
-usr/share/locale/*/*/libapt-pkg*.mo
+++ /dev/null
-libapt-pkg.so.4.12 libapt-pkg4.12 #MINVER#
-* Build-Depends-Package: libapt-pkg-dev
- TFRewritePackageOrder@Base 0.8.0
- TFRewriteSourceOrder@Base 0.8.0
- (c++)"FileExists(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"IdentCdrom(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int)@Base" 0.8.0
- (c++)"ListUpdate(pkgAcquireStatus&, pkgSourceList&, int)@Base" 0.8.0
- (c++)"MountCdrom(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"ParseCWord(char const*&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0.8.0
- (c++)"ReadPinDir(pkgPolicy&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"RunScripts(char const*)@Base" 0.8.0
- (c++)"SafeGetCWD()@Base" 0.8.0
- (c++)"parsenetrc(char*, char*, char*, char*)@Base" 0.8.0
- (c++)"QuoteString(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)@Base" 0.8.0
- (c++)"ReadPinFile(pkgPolicy&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"RegexChoice(RxChoiceList*, char const**, char const**)@Base" 0.8.0
- (c++)"SetNonBlock(int, bool)@Base" 0.8.0
- (c++)"flExtension(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"Base64Encode(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"ReadMessages(int, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)@Base" 0.8.0
- (c++)"SetCloseExec(int, bool)@Base" 0.8.0
- (c++)"StringToBool(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)@Base" 0.8.0
- (c++)"UnmountCdrom(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"_GetErrorObj()@Base" 0.8.0
- (c++)"pkgFixBroken(pkgDepCache&)@Base" 0.8.0
- (c++)"DeQuoteString(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&)@Base" 0.8.0
- (c++)"DeQuoteString(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"OutputInDepth(unsigned long, char const*)@Base" 0.8.0
- (c++)"ReadConfigDir(Configuration&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, unsigned int const&)@Base" 0.8.0
- (c++)"URItoFileName(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"UTF8ToCodeset(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >*)@Base" 0.8.0
- (c++)"pkgAllUpgrade(pkgDepCache&)@Base" 0.8.0
- (c++)"pkgInitConfig(Configuration&)@Base" 0.8.0
- (c++)"pkgInitSystem(Configuration&, pkgSystem*&)@Base" 0.8.0
- (c++)"safe_snprintf(char*, char*, char const*, ...)@Base" 0.8.0
- (c++)"stringcasecmp(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char const*, char const*)@Base" 0.8.0
- (c++)"stringcasecmp(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)@Base" 0.8.0
- (c++)"stringcasecmp(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)@Base" 0.8.0
- (c++)"stringcasecmp(char const*, char const*, char const*, char const*)@Base" 0.8.0
- (c++)"tolower_ascii(int)@Base" 0.8.0
- (c++)"ParseQuoteWord(char const*&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0.8.0
- (c++)"ReadConfigFile(Configuration&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, unsigned int const&)@Base" 0.8.0
- (c++)"TokSplitString(char, char*, char**, unsigned long)@Base" 0.8.0
- (c++)"maybe_add_auth(URI&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgApplyStatus(pkgDepCache&)@Base" 0.8.0
- (c++)"pkgDistUpgrade(pkgDepCache&)@Base" 0.8.0
- (c++)"CheckDomainList(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"CreateDirectory(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"DirectoryExists(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"VectorizeString(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const&)@Base" 0.8.0
- (c++)"pkgPrioSortList(pkgCache&, pkgCache::Version**)@Base" 0.8.0
- (c++)"pkgMakeStatusCache(pkgSourceList&, OpProgress&, MMap**, bool)@Base" 0.8.0
- (c++)"pkgMinimizeUpgrade(pkgDepCache&)@Base" 0.8.0
- (c++)"GetListOfFilesInDir(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool const&)@Base" 0.8.0
- (c++)"GetListOfFilesInDir(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&)@Base" 0.8.0
- (c++)"pkgMakeOnlyStatusCache(OpProgress&, DynamicMMap**)@Base" 0.8.0
- (c++)"WaitFd(int, bool, unsigned long)@Base" 0.8.0
- (c++)"GetLock(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)@Base" 0.8.0
- (c++)"Hex2Num(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned char*, unsigned int)@Base" 0.8.0
- (c++)"CopyFile(FileFd&, FileFd&)@Base" 0.8.0
- (c++)"ExecFork()@Base" 0.8.0
- (c++)"ExecWait(int, char const*, bool)@Base" 0.8.0
- (c++)"StrToNum(char const*, unsigned long&, unsigned int, unsigned int)@Base" 0.8.0
- (c++)"SubstVar(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"SubstVar(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, SubstVar const*)@Base" 0.8.0
- (c++)"flNoLink(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"flNotDir(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"ioprintf(std::basic_ostream<char, std::char_traits<char> >&, char const*, ...)@Base" 0.8.0
- (c++)"IsMounted(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0.8.0
- (c++)"LookupTag(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, char const*)@Base" 0.8.0
- (c++)"SizeToStr(double)@Base" 0.8.0
- (c++)"TFRewrite(_IO_FILE*, pkgTagSection const&, char const**, TFRewriteData*)@Base" 0.8.0
- (c++)"TimeToStr(unsigned long)@Base" 0.8.0
- (c++)"_strstrip(char*)@Base" 0.8.0
- (c++)"flCombine(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"flNotFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"stringcmp(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char const*, char const*)@Base" 0.8.0
- (c++)"stringcmp(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)@Base" 0.8.0
- (c++)"stringcmp(char const*, char const*, char const*, char const*)@Base" 0.8.0
- (c++)"strprintf(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*, ...)@Base" 0.8.0
- (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::DepIterator>::toReMap@Base" 0.8.0
- (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::GrpIterator>::toReMap@Base" 0.8.0
- (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::PkgIterator>::toReMap@Base" 0.8.0
- (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::PrvIterator>::toReMap@Base" 0.8.0
- (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::VerIterator>::toReMap@Base" 0.8.0
- (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::DescIterator>::toReMap@Base" 0.8.0
- (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::PkgFileIterator>::toReMap@Base" 0.8.0
- (c++)"HashString::SupportedHashes()@Base" 0.8.0
- (c++)"HashString::_SupportedHashes@Base" 0.8.0
- (c++)"HashString::HashString(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"HashString::HashString(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"HashString::HashString()@Base" 0.8.0
- (c++)"HashString::~HashString()@Base" 0.8.0
- (c++)"OpProgress::CheckChange(float)@Base" 0.8.0
- (c++)"OpProgress::Done()@Base" 0.8.0
- (c++)"OpProgress::Update()@Base" 0.8.0
- (c++)"OpProgress::OpProgress()@Base" 0.8.0
- (c++)"OpProgress::~OpProgress()@Base" 0.8.0
- (c++)"SourceCopy::GetFileName()@Base" 0.8.0
- (c++)"SourceCopy::RewriteEntry(_IO_FILE*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"SourceCopy::Type()@Base" 0.8.0
- (c++)"SourceCopy::~SourceCopy()@Base" 0.8.0
- (c++)"pkgAcqFile::Custom600Headers()@Base" 0.8.0
- (c++)"pkgAcqFile::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
- (c++)"pkgAcqFile::DescURI()@Base" 0.8.0
- (c++)"pkgAcqFile::HashSum()@Base" 0.8.0
- (c++)"pkgAcqFile::~pkgAcqFile()@Base" 0.8.0
- (c++)"pkgAcquire::WorkerStep(pkgAcquire::Worker*)@Base" 0.8.0
- (c++)"pkgAcquire::FetchNeeded()@Base" 0.8.0
- (c++)"pkgAcquire::TotalNeeded()@Base" 0.8.0
- (c++)"pkgAcquire::MethodConfig::MethodConfig()@Base" 0.8.0
- (c++)"pkgAcquire::PartialPresent()@Base" 0.8.0
- (c++)"pkgAcquire::Add(pkgAcquire::Item*)@Base" 0.8.0
- (c++)"pkgAcquire::Add(pkgAcquire::Worker*)@Base" 0.8.0
- (c++)"pkgAcquire::Run(int)@Base" 0.8.0
- (c++)"pkgAcquire::Bump()@Base" 0.8.0
- (c++)"pkgAcquire::Item::Custom600Headers()@Base" 0.8.0
- (c++)"pkgAcquire::Item::ReportMirrorFailure(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcquire::Item::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
- (c++)"pkgAcquire::Item::Rename(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcquire::Item::HashSum()@Base" 0.8.0
- (c++)"pkgAcquire::Item::Finished()@Base" 0.8.0
- (c++)"pkgAcquire::Item::IsTrusted()@Base" 0.8.0
- (c++)"pkgAcquire::Item::ShortDesc()@Base" 0.8.0
- (c++)"pkgAcquire::Item::Item(pkgAcquire*)@Base" 0.8.0
- (c++)"pkgAcquire::Item::~Item()@Base" 0.8.0
- (c++)"pkgAcquire::Clean(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcquire::Queue::Bump()@Base" 0.8.0
- (c++)"pkgAcquire::Queue::Cycle()@Base" 0.8.0
- (c++)"pkgAcquire::Queue::Dequeue(pkgAcquire::Item*)@Base" 0.8.0
- (c++)"pkgAcquire::Queue::Enqueue(pkgAcquire::ItemDesc&)@Base" 0.8.0
- (c++)"pkgAcquire::Queue::Startup()@Base" 0.8.0
- (c++)"pkgAcquire::Queue::FindItem(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::Worker*)@Base" 0.8.0
- (c++)"pkgAcquire::Queue::ItemDone(pkgAcquire::Queue::QItem*)@Base" 0.8.0
- (c++)"pkgAcquire::Queue::Shutdown(bool)@Base" 0.8.0
- (c++)"pkgAcquire::Queue::Queue(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire*)@Base" 0.8.0
- (c++)"pkgAcquire::Queue::~Queue()@Base" 0.8.0
- (c++)"pkgAcquire::Setup(pkgAcquireStatus*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"pkgAcquire::Remove(pkgAcquire::Item*)@Base" 0.8.0
- (c++)"pkgAcquire::Remove(pkgAcquire::Worker*)@Base" 0.8.0
- (c++)"pkgAcquire::RunFds(fd_set*, fd_set*)@Base" 0.8.0
- (c++)"pkgAcquire::SetFds(int&, fd_set*, fd_set*)@Base" 0.8.0
- (c++)"pkgAcquire::UriEnd()@Base" 0.8.0
- (c++)"pkgAcquire::Worker::OutFdReady()@Base" 0.8.0
- (c++)"pkgAcquire::Worker::MediaChange(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcquire::Worker::RunMessages()@Base" 0.8.0
- (c++)"pkgAcquire::Worker::Capabilities(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcquire::Worker::ReadMessages()@Base" 0.8.0
- (c++)"pkgAcquire::Worker::MethodFailure()@Base" 0.8.0
- (c++)"pkgAcquire::Worker::SendConfiguration()@Base" 0.8.0
- (c++)"pkgAcquire::Worker::Pulse()@Base" 0.8.0
- (c++)"pkgAcquire::Worker::Start()@Base" 0.8.0
- (c++)"pkgAcquire::Worker::ItemDone()@Base" 0.8.0
- (c++)"pkgAcquire::Worker::Construct()@Base" 0.8.0
- (c++)"pkgAcquire::Worker::InFdReady()@Base" 0.8.0
- (c++)"pkgAcquire::Worker::QueueItem(pkgAcquire::Queue::QItem*)@Base" 0.8.0
- (c++)"pkgAcquire::Worker::Worker(pkgAcquire::MethodConfig*)@Base" 0.8.0
- (c++)"pkgAcquire::Worker::Worker(pkgAcquire::Queue*, pkgAcquire::MethodConfig*, pkgAcquireStatus*)@Base" 0.8.0
- (c++)"pkgAcquire::Worker::~Worker()@Base" 0.8.0
- (c++)"pkgAcquire::Dequeue(pkgAcquire::Item*)@Base" 0.8.0
- (c++)"pkgAcquire::Enqueue(pkgAcquire::ItemDesc&)@Base" 0.8.0
- (c++)"pkgAcquire::ItemDesc::~ItemDesc()@Base" 0.8.0
- (c++)"pkgAcquire::Shutdown()@Base" 0.8.0
- (c++)"pkgAcquire::UriBegin()@Base" 0.8.0
- (c++)"pkgAcquire::GetConfig(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcquire::QueueName(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig const*&)@Base" 0.8.0
- (c++)"pkgAcquire::pkgAcquire(pkgAcquireStatus*)@Base" 0.8.0
- (c++)"pkgAcquire::pkgAcquire()@Base" 0.8.0
- (c++)"pkgAcquire::~pkgAcquire()@Base" 0.8.0
- (c++)"pkgRecords::Lookup(pkgCache::VerFileIterator const&)@Base" 0.8.0
- (c++)"pkgRecords::Lookup(pkgCache::DescFileIterator const&)@Base" 0.8.0
- (c++)"pkgRecords::Parser::Maintainer()@Base" 0.8.0
- (c++)"pkgRecords::Parser::SHA256Hash()@Base" 0.8.0
- (c++)"pkgRecords::Parser::Name()@Base" 0.8.0
- (c++)"pkgRecords::Parser::GetRec(char const*&, char const*&)@Base" 0.8.0
- (c++)"pkgRecords::Parser::MD5Hash()@Base" 0.8.0
- (c++)"pkgRecords::Parser::FileName()@Base" 0.8.0
- (c++)"pkgRecords::Parser::Homepage()@Base" 0.8.0
- (c++)"pkgRecords::Parser::LongDesc()@Base" 0.8.0
- (c++)"pkgRecords::Parser::SHA1Hash()@Base" 0.8.0
- (c++)"pkgRecords::Parser::ShortDesc()@Base" 0.8.0
- (c++)"pkgRecords::Parser::SourcePkg()@Base" 0.8.0
- (c++)"pkgRecords::Parser::SourceVer()@Base" 0.8.0
- (c++)"pkgRecords::pkgRecords(pkgCache&)@Base" 0.8.0
- (c++)"pkgRecords::~pkgRecords()@Base" 0.8.0
- (c++)"pkgTagFile::Step(pkgTagSection&)@Base" 0.8.0
- (c++)"pkgTagFile::~pkgTagFile()@Base" 0.8.0
- (c++)"CdromDevice::~CdromDevice()@Base" 0.8.0
- (c++)"CommandLine::DispatchArg(CommandLine::Dispatch*, bool)@Base" 0.8.0
- (c++)"CommandLine::SaveInConfig(unsigned int const&, char const* const*)@Base" 0.8.0
- (c++)"CommandLine::Parse(int, char const**)@Base" 0.8.0
- (c++)"CommandLine::HandleOpt(int&, int, char const**, char const*&, CommandLine::Args*, bool)@Base" 0.8.0
- (c++)"CommandLine::CommandLine(CommandLine::Args*, Configuration*)@Base" 0.8.0
- (c++)"CommandLine::~CommandLine()@Base" 0.8.0
- (c++)"DynamicMMap::WriteString(char const*, unsigned long)@Base" 0.8.0
- (c++)"DynamicMMap::Grow()@Base" 0.8.0
- (c++)"DynamicMMap::Allocate(unsigned long)@Base" 0.8.0
- (c++)"DynamicMMap::DynamicMMap(FileFd&, unsigned long, unsigned long const&, unsigned long const&, unsigned long const&)@Base" 0.8.0
- (c++)"DynamicMMap::DynamicMMap(unsigned long, unsigned long const&, unsigned long const&, unsigned long const&)@Base" 0.8.0
- (c++)"DynamicMMap::~DynamicMMap()@Base" 0.8.0
- (c++)"GlobalError::DumpErrors(std::basic_ostream<char, std::char_traits<char> >&, GlobalError::MsgType const&, bool const&)@Base" 0.8.0
- (c++)"GlobalError::PopMessage(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0.8.0
- (c++)"GlobalError::InsertErrno(GlobalError::MsgType const&, char const*, char const*, ...)@Base" 0.8.0
- (c++)"GlobalError::PushToStack()@Base" 0.8.0
- (c++)"GlobalError::RevertToStack()@Base" 0.8.0
- (c++)"GlobalError::MergeWithStack()@Base" 0.8.0
- (c++)"GlobalError::Debug(char const*, ...)@Base" 0.8.0
- (c++)"GlobalError::Errno(char const*, char const*, ...)@Base" 0.8.0
- (c++)"GlobalError::Error(char const*, ...)@Base" 0.8.0
- (c++)"GlobalError::Fatal(char const*, ...)@Base" 0.8.0
- (c++)"GlobalError::DebugE(char const*, char const*, ...)@Base" 0.8.0
- (c++)"GlobalError::FatalE(char const*, char const*, ...)@Base" 0.8.0
- (c++)"GlobalError::Insert(GlobalError::MsgType const&, char const*, ...)@Base" 0.8.0
- (c++)"GlobalError::Notice(char const*, ...)@Base" 0.8.0
- (c++)"GlobalError::Discard()@Base" 0.8.0
- (c++)"GlobalError::NoticeE(char const*, char const*, ...)@Base" 0.8.0
- (c++)"GlobalError::Warning(char const*, ...)@Base" 0.8.0
- (c++)"GlobalError::WarningE(char const*, char const*, ...)@Base" 0.8.0
- (c++)"GlobalError::GlobalError()@Base" 0.8.0
- (c++)"PackageCopy::GetFileName()@Base" 0.8.0
- (c++)"PackageCopy::RewriteEntry(_IO_FILE*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"PackageCopy::Type()@Base" 0.8.0
- (c++)"PackageCopy::~PackageCopy()@Base" 0.8.0
- (c++)"pkgAcqIndex::Custom600Headers()@Base" 0.8.0
- (c++)"pkgAcqIndex::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
- (c++)"pkgAcqIndex::DescURI()@Base" 0.8.0
- (c++)"pkgAcqIndex::HashSum()@Base" 0.8.0
- (c++)"pkgAcqIndex::pkgAcqIndex(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, HashString, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcqIndex::~pkgAcqIndex()@Base" 0.8.0
- (c++)"pkgDepCache::IsDeleteOk(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 0.8.0
- (c++)"pkgDepCache::MarkDelete(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 0.8.0
- (c++)"pkgDepCache::StateCache::StripEpoch(char const*)@Base" 0.8.0
- (c++)"pkgDepCache::StateCache::Update(pkgCache::PkgIterator, pkgCache&)@Base" 0.8.0
- (c++)"pkgDepCache::ActionGroup::release()@Base" 0.8.0
- (c++)"pkgDepCache::ActionGroup::ActionGroup(pkgDepCache&)@Base" 0.8.0
- (c++)"pkgDepCache::ActionGroup::~ActionGroup()@Base" 0.8.0
- (c++)"pkgDepCache::IsInstallOk(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 0.8.0
- (c++)"pkgDepCache::MarkInstall(pkgCache::PkgIterator const&, bool, unsigned long, bool, bool)@Base" 0.8.0
- (c++)"pkgDepCache::MarkPackage(pkgCache::PkgIterator const&, pkgCache::VerIterator const&, bool const&, bool const&)@Base" 0.8.0
- (c++)"pkgDepCache::MarkRequired(pkgDepCache::InRootSetFunc&)@Base" 0.8.0
- (c++)"pkgDepCache::SetReInstall(pkgCache::PkgIterator const&, bool)@Base" 0.8.0
- (c++)"pkgDepCache::VersionState(pkgCache::DepIterator, unsigned char, unsigned char, unsigned char)@Base" 0.8.0
- (c++)"pkgDepCache::BuildGroupOrs(pkgCache::VerIterator const&)@Base" 0.8.0
- (c++)"pkgDepCache::InRootSetFunc::InRootSet(pkgCache::PkgIterator const&)@Base" 0.8.0
- (c++)"pkgDepCache::InRootSetFunc::~InRootSetFunc()@Base" 0.8.0
- (c++)"pkgDepCache::readStateFile(OpProgress*)@Base" 0.8.0
- (c++)"pkgDepCache::GetRootSetFunc()@Base" 0.8.0
- (c++)"pkgDepCache::UpdateVerState(pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgDepCache::writeStateFile(OpProgress*, bool)@Base" 0.8.0
- (c++)"pkgDepCache::DependencyState(pkgCache::DepIterator&)@Base" 0.8.0
- (c++)"pkgDepCache::DefaultRootSetFunc::InRootSet(pkgCache::PkgIterator const&)@Base" 0.8.0
- (c++)"pkgDepCache::DefaultRootSetFunc::~DefaultRootSetFunc()@Base" 0.8.0
- (c++)"pkgDepCache::MarkFollowsSuggests()@Base" 0.8.0
- (c++)"pkgDepCache::MarkFollowsRecommends()@Base" 0.8.0
- (c++)"pkgDepCache::Init(OpProgress*)@Base" 0.8.0
- (c++)"pkgDepCache::Sweep()@Base" 0.8.0
- (c++)"pkgDepCache::Policy::IsImportantDep(pkgCache::DepIterator const&)@Base" 0.8.0
- (c++)"pkgDepCache::Policy::GetCandidateVer(pkgCache::PkgIterator const&)@Base" 0.8.0
- (c++)"pkgDepCache::Policy::~Policy()@Base" 0.8.0
- (c++)"pkgDepCache::Update(pkgCache::DepIterator)@Base" 0.8.0
- (c++)"pkgDepCache::Update(OpProgress*)@Base" 0.8.0
- (c++)"pkgDepCache::Update(pkgCache::PkgIterator const&)@Base" 0.8.0
- (c++)"pkgDepCache::CheckDep(pkgCache::DepIterator, int, pkgCache::PkgIterator&)@Base" 0.8.0
- (c++)"pkgDepCache::MarkAuto(pkgCache::PkgIterator const&, bool)@Base" 0.8.0
- (c++)"pkgDepCache::MarkKeep(pkgCache::PkgIterator const&, bool, bool, unsigned long)@Base" 0.8.0
- (c++)"pkgDepCache::pkgDepCache(pkgCache*, pkgDepCache::Policy*)@Base" 0.8.0
- (c++)"pkgDepCache::~pkgDepCache()@Base" 0.8.0
- (c++)"pkgSimulate::ShortBreaks()@Base" 0.8.0
- (c++)"pkgSimulate::Policy::GetCandidateVer(pkgCache::PkgIterator const&)@Base" 0.8.0
- (c++)"pkgSimulate::Policy::~Policy()@Base" 0.8.0
- (c++)"pkgSimulate::Remove(pkgCache::PkgIterator, bool)@Base" 0.8.0
- (c++)"pkgSimulate::Install(pkgCache::PkgIterator, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgSimulate::Describe(pkgCache::PkgIterator, std::basic_ostream<char, std::char_traits<char> >&, bool, bool)@Base" 0.8.0
- (c++)"pkgSimulate::Configure(pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgSimulate::pkgSimulate(pkgDepCache*)@Base" 0.8.0
- (c++)"pkgSimulate::~pkgSimulate()@Base" 0.8.0
- (c++)"debIFTypePkg::~debIFTypePkg()@Base" 0.8.0
- (c++)"debIFTypeSrc::~debIFTypeSrc()@Base" 0.8.0
- (c++)"debSLTypeDeb::~debSLTypeDeb()@Base" 0.8.0
- (c++)"indexRecords::Load(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"indexRecords::Lookup(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"indexRecords::MetaKeys()@Base" 0.8.0
- (c++)"indexRecords::indexRecords(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"indexRecords::indexRecords()@Base" 0.8.0
- (c++)"indexRecords::~indexRecords()@Base" 0.8.0
- (c++)"pkgAcqMethod::FetchResult::TakeHashes(Hashes&)@Base" 0.8.0
- (c++)"pkgAcqMethod::FetchResult::FetchResult()@Base" 0.8.0
- (c++)"pkgAcqMethod::Configuration(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcqMethod::Log(char const*, ...)@Base" 0.8.0
- (c++)"pkgAcqMethod::Run(bool)@Base" 0.8.0
- (c++)"pkgAcqMethod::Exit()@Base" 0.8.0
- (c++)"pkgAcqMethod::Fail(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)@Base" 0.8.0
- (c++)"pkgAcqMethod::Fail(bool)@Base" 0.8.0
- (c++)"pkgAcqMethod::Fetch(pkgAcqMethod::FetchItem*)@Base" 0.8.0
- (c++)"pkgAcqMethod::Status(char const*, ...)@Base" 0.8.0
- (c++)"pkgAcqMethod::URIDone(pkgAcqMethod::FetchResult&, pkgAcqMethod::FetchResult*)@Base" 0.8.0
- (c++)"pkgAcqMethod::Redirect(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"pkgAcqMethod::URIStart(pkgAcqMethod::FetchResult&)@Base" 0.8.0
- (c++)"pkgAcqMethod::MediaFail(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcqMethod::pkgAcqMethod(char const*, unsigned long)@Base" 0.8.0
- (c++)"pkgAcqMethod::~pkgAcqMethod()@Base" 0.8.0
- (c++)"pkgCacheFile::BuildCaches(OpProgress*, bool)@Base" 0.8.0
- (c++)"pkgCacheFile::BuildPolicy(OpProgress*)@Base" 0.8.0
- (c++)"pkgCacheFile::BuildDepCache(OpProgress*)@Base" 0.8.0
- (c++)"pkgCacheFile::BuildSourceList(OpProgress*)@Base" 0.8.0
- (c++)"pkgCacheFile::Open(OpProgress*, bool)@Base" 0.8.0
- (c++)"pkgCacheFile::Close()@Base" 0.8.0
- (c++)"pkgCacheFile::pkgCacheFile()@Base" 0.8.0
- (c++)"pkgCacheFile::~pkgCacheFile()@Base" 0.8.0
- (c++)"pkgIndexFile::LanguageCode()@Base" 0.8.0
- (c++)"pkgIndexFile::CheckLanguageCode(char const*)@Base" 0.8.0
- (c++)"pkgIndexFile::TranslationsAvailable()@Base" 0.8.0
- (c++)"pkgIndexFile::Type::GlobalList@Base" 0.8.0
- (c++)"pkgIndexFile::Type::GlobalListLen@Base" 0.8.0
- (c++)"pkgIndexFile::Type::GetType(char const*)@Base" 0.8.0
- (c++)"pkgIndexFile::Type::Type()@Base" 0.8.0
- (c++)"pkgOrderList::VisitRDeps(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgOrderList::OrderUnpack(std::basic_string<char, std::char_traits<char>, std::allocator<char> >*)@Base" 0.8.0
- (c++)"pkgOrderList::DepConfigure(pkgCache::DepIterator)@Base" 0.8.0
- (c++)"pkgOrderList::DepUnPackDep(pkgCache::DepIterator)@Base" 0.8.0
- (c++)"pkgOrderList::DepUnPackPre(pkgCache::DepIterator)@Base" 0.8.0
- (c++)"pkgOrderList::DepUnPackCrit(pkgCache::DepIterator)@Base" 0.8.0
- (c++)"pkgOrderList::DepUnPackPreD(pkgCache::DepIterator)@Base" 0.8.0
- (c++)"pkgOrderList::OrderCompareA(void const*, void const*)@Base" 0.8.0
- (c++)"pkgOrderList::OrderCompareB(void const*, void const*)@Base" 0.8.0
- (c++)"pkgOrderList::OrderCritical()@Base" 0.8.0
- (c++)"pkgOrderList::VisitProvides(pkgCache::DepIterator, bool)@Base" 0.8.0
- (c++)"pkgOrderList::OrderConfigure()@Base" 0.8.0
- (c++)"pkgOrderList::VisitRProvides(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::VerIterator)@Base" 0.8.0
- (c++)"pkgOrderList::Me@Base" 0.8.0
- (c++)"pkgOrderList::DoRun()@Base" 0.8.0
- (c++)"pkgOrderList::Score(pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgOrderList::AddLoop(pkgCache::DepIterator)@Base" 0.8.0
- (c++)"pkgOrderList::FileCmp(pkgCache::PkgIterator, pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgOrderList::CheckDep(pkgCache::DepIterator)@Base" 0.8.0
- (c++)"pkgOrderList::DepRemove(pkgCache::DepIterator)@Base" 0.8.0
- (c++)"pkgOrderList::IsMissing(pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgOrderList::VisitDeps(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgOrderList::WipeFlags(unsigned long)@Base" 0.8.0
- (c++)"pkgOrderList::pkgOrderList(pkgDepCache*)@Base" 0.8.0
- (c++)"pkgOrderList::~pkgOrderList()@Base" 0.8.0
- (c++)"Configuration::MatchAgainstConfig::MatchAgainstConfig(char const*)@Base" 0.8.0
- (c++)"Configuration::MatchAgainstConfig::~MatchAgainstConfig()@Base" 0.8.0
- (c++)"Configuration::Set(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"Configuration::Set(char const*, int const&)@Base" 0.8.0
- (c++)"Configuration::Dump(std::basic_ostream<char, std::char_traits<char> >&)@Base" 0.8.0
- (c++)"Configuration::Clear(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"Configuration::Clear(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&)@Base" 0.8.0
- (c++)"Configuration::Clear(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"Configuration::CndSet(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"Configuration::Lookup(char const*, bool const&)@Base" 0.8.0
- (c++)"Configuration::Lookup(Configuration::Item*, char const*, unsigned long const&, bool const&)@Base" 0.8.0
- (c++)"Configuration::Configuration(Configuration::Item const*)@Base" 0.8.0
- (c++)"Configuration::Configuration()@Base" 0.8.0
- (c++)"Configuration::~Configuration()@Base" 0.8.0
- (c++)"WeakPointable::~WeakPointable()@Base" 0.8.0
- (c++)"debListParser::NewVersion(pkgCache::VerIterator&)@Base" 0.8.0
- (c++)"debListParser::UsePackage(pkgCache::PkgIterator&, pkgCache::VerIterator&)@Base" 0.8.0
- (c++)"debListParser::Description()@Base" 0.8.0
- (c++)"debListParser::ParseStatus(pkgCache::PkgIterator&, pkgCache::VerIterator&)@Base" 0.8.0
- (c++)"debListParser::VersionHash()@Base" 0.8.0
- (c++)"debListParser::Architecture()@Base" 0.8.0
- (c++)"debListParser::ParseDepends(char const*, char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int&, bool const&, bool const&)@Base" 0.8.0
- (c++)"debListParser::ParseDepends(pkgCache::VerIterator&, char const*, unsigned int)@Base" 0.8.0
- (c++)"debListParser::ParseProvides(pkgCache::VerIterator&)@Base" 0.8.0
- (c++)"debListParser::ArchitectureAll()@Base" 0.8.0
- (c++)"debListParser::ConvertRelation(char const*, unsigned int&)@Base" 0.8.0
- (c++)"debListParser::Description_md5()@Base" 0.8.0
- (c++)"debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator&, FileFd&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"debListParser::UniqFindTagWrite(char const*)@Base" 0.8.0
- (c++)"debListParser::DescriptionLanguage()@Base" 0.8.0
- (c++)"debListParser::Size()@Base" 0.8.0
- (c++)"debListParser::Step()@Base" 0.8.0
- (c++)"debListParser::Offset()@Base" 0.8.0
- (c++)"debListParser::GetPrio(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"debListParser::Package()@Base" 0.8.0
- (c++)"debListParser::Version()@Base" 0.8.0
- (c++)"debListParser::GrabWord(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, debListParser::WordList*, unsigned char&)@Base" 0.8.0
- (c++)"debListParser::debListParser(FileFd*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"debListParser::~debListParser()@Base" 0.8.0
- (c++)"pkgAcqArchive::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
- (c++)"pkgAcqArchive::DescURI()@Base" 0.8.0
- (c++)"pkgAcqArchive::HashSum()@Base" 0.8.0
- (c++)"pkgAcqArchive::Finished()@Base" 0.8.0
- (c++)"pkgAcqArchive::IsTrusted()@Base" 0.8.0
- (c++)"pkgAcqArchive::QueueNext()@Base" 0.8.0
- (c++)"pkgAcqArchive::ShortDesc()@Base" 0.8.0
- (c++)"pkgAcqArchive::pkgAcqArchive(pkgAcquire*, pkgSourceList*, pkgRecords*, pkgCache::VerIterator const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0.8.0
- (c++)"pkgAcqArchive::~pkgAcqArchive()@Base" 0.8.0
- (c++)"pkgAcqMetaSig::Custom600Headers()@Base" 0.8.0
- (c++)"pkgAcqMetaSig::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
- (c++)"pkgAcqMetaSig::DescURI()@Base" 0.8.0
- (c++)"pkgAcqMetaSig::~pkgAcqMetaSig()@Base" 0.8.0
- (c++)"pkgSourceList::ReadAppend(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgSourceList::ReadMainList()@Base" 0.8.0
- (c++)"pkgSourceList::ReadSourceDir(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgSourceList::Read(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgSourceList::Type::GlobalList@Base" 0.8.0
- (c++)"pkgSourceList::Type::GlobalListLen@Base" 0.8.0
- (c++)"pkgSourceList::Type::GetType(char const*)@Base" 0.8.0
- (c++)"pkgSourceList::Type::Type()@Base" 0.8.0
- (c++)"pkgSourceList::Reset()@Base" 0.8.0
- (c++)"pkgSourceList::pkgSourceList(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgSourceList::pkgSourceList()@Base" 0.8.0
- (c++)"pkgSourceList::~pkgSourceList()@Base" 0.8.0
- (c++)"pkgSrcRecords::File::~File()@Base" 0.8.0
- (c++)"pkgSrcRecords::Find(char const*, bool const&)@Base" 0.8.0
- (c++)"pkgSrcRecords::Parser::BuildDepRec::~BuildDepRec()@Base" 0.8.0
- (c++)"pkgSrcRecords::Parser::BuildDepType(unsigned char const&)@Base" 0.8.0
- (c++)"pkgSrcRecords::Restart()@Base" 0.8.0
- (c++)"pkgSrcRecords::pkgSrcRecords(pkgSourceList&)@Base" 0.8.0
- (c++)"pkgSrcRecords::~pkgSrcRecords()@Base" 0.8.0
- (c++)"pkgTagSection::TrimRecord(bool, char const*&)@Base" 0.8.0
- (c++)"pkgTagSection::Scan(char const*, unsigned long)@Base" 0.8.0
- (c++)"pkgTagSection::Trim()@Base" 0.8.0
- (c++)"pkgVendorList::CreateList(Configuration&)@Base" 0.8.0
- (c++)"pkgVendorList::FindVendor(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)@Base" 0.8.0
- (c++)"pkgVendorList::ReadMainList()@Base" 0.8.0
- (c++)"pkgVendorList::LookupFingerprint(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgVendorList::Read(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgVendorList::~pkgVendorList()@Base" 0.8.0
- (c++)"OpTextProgress::Done()@Base" 0.8.0
- (c++)"OpTextProgress::Write(char const*)@Base" 0.8.0
- (c++)"OpTextProgress::Update()@Base" 0.8.0
- (c++)"OpTextProgress::OpTextProgress(Configuration&)@Base" 0.8.0
- (c++)"OpTextProgress::~OpTextProgress()@Base" 0.8.0
- (c++)"debIFTypeTrans::~debIFTypeTrans()@Base" 0.8.0
- (c++)"debStatusIndex::debStatusIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"debStatusIndex::~debStatusIndex()@Base" 0.8.0
- (c++)"debIFTypeStatus::~debIFTypeStatus()@Base" 0.8.0
- (c++)"debRecordParser::Maintainer()@Base" 0.8.0
- (c++)"debRecordParser::SHA256Hash()@Base" 0.8.0
- (c++)"debRecordParser::Jump(pkgCache::VerFileIterator const&)@Base" 0.8.0
- (c++)"debRecordParser::Jump(pkgCache::DescFileIterator const&)@Base" 0.8.0
- (c++)"debRecordParser::Name()@Base" 0.8.0
- (c++)"debRecordParser::GetRec(char const*&, char const*&)@Base" 0.8.0
- (c++)"debRecordParser::MD5Hash()@Base" 0.8.0
- (c++)"debRecordParser::FileName()@Base" 0.8.0
- (c++)"debRecordParser::Homepage()@Base" 0.8.0
- (c++)"debRecordParser::LongDesc()@Base" 0.8.0
- (c++)"debRecordParser::SHA1Hash()@Base" 0.8.0
- (c++)"debRecordParser::ShortDesc()@Base" 0.8.0
- (c++)"debRecordParser::SourcePkg()@Base" 0.8.0
- (c++)"debRecordParser::SourceVer()@Base" 0.8.0
- (c++)"debRecordParser::debRecordParser(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgCache&)@Base" 0.8.0
- (c++)"debRecordParser::~debRecordParser()@Base" 0.8.0
- (c++)"debReleaseIndex::GetIndexFiles()@Base" 0.8.0
- (c++)"debReleaseIndex::debSectionEntry::debSectionEntry(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&)@Base" 0.8.0
- (c++)"debReleaseIndex::PushSectionEntry(debReleaseIndex::debSectionEntry const*)@Base" 0.8.0
- (c++)"debReleaseIndex::PushSectionEntry(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, debReleaseIndex::debSectionEntry const*)@Base" 0.8.0
- (c++)"debReleaseIndex::PushSectionEntry(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, debReleaseIndex::debSectionEntry const*)@Base" 0.8.0
- (c++)"debReleaseIndex::debReleaseIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"debReleaseIndex::~debReleaseIndex()@Base" 0.8.0
- (c++)"debSLTypeDebSrc::~debSLTypeDebSrc()@Base" 0.8.0
- (c++)"debSourcesIndex::debSourcesIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)@Base" 0.8.0
- (c++)"debSourcesIndex::~debSourcesIndex()@Base" 0.8.0
- (c++)"pkgAcqDiffIndex::ParseDiffIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcqDiffIndex::Custom600Headers()@Base" 0.8.0
- (c++)"pkgAcqDiffIndex::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
- (c++)"pkgAcqDiffIndex::DescURI()@Base" 0.8.0
- (c++)"pkgAcqDiffIndex::pkgAcqDiffIndex(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, HashString)@Base" 0.8.0
- (c++)"pkgAcqDiffIndex::~pkgAcqDiffIndex()@Base" 0.8.0
- (c++)"pkgAcqMetaIndex::QueueIndexes(bool)@Base" 0.8.0
- (c++)"pkgAcqMetaIndex::VerifyVendor(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcqMetaIndex::RetrievalDone(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcqMetaIndex::Custom600Headers()@Base" 0.8.0
- (c++)"pkgAcqMetaIndex::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
- (c++)"pkgAcqMetaIndex::DescURI()@Base" 0.8.0
- (c++)"pkgAcqMetaIndex::AuthDone(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcqMetaIndex::pkgAcqMetaIndex(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<IndexTarget*, std::allocator<IndexTarget*> > const*, indexRecords*)@Base" 0.8.0
- (c++)"pkgAcqMetaIndex::~pkgAcqMetaIndex()@Base" 0.8.0
- (c++)"pkgVersionMatch::ExpressionMatches(char const*, char const*)@Base" 0.8.0
- (c++)"pkgVersionMatch::ExpressionMatches(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)@Base" 0.8.0
- (c++)"pkgVersionMatch::Find(pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgVersionMatch::MatchVer(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)@Base" 0.8.0
- (c++)"pkgVersionMatch::FileMatch(pkgCache::PkgFileIterator)@Base" 0.8.0
- (c++)"pkgVersionMatch::pkgVersionMatch(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgVersionMatch::MatchType)@Base" 0.8.0
- (c++)"pkgVersionMatch::~pkgVersionMatch()@Base" 0.8.0
- (c++)"TranslationsCopy::CopyTranslations(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, pkgCdromStatus*)@Base" 0.8.0
- (c++)"debPackagesIndex::debPackagesIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"debPackagesIndex::~debPackagesIndex()@Base" 0.8.0
- (c++)"pkgAcqIndexDiffs::QueueNextDiff()@Base" 0.8.0
- (c++)"pkgAcqIndexDiffs::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
- (c++)"pkgAcqIndexDiffs::Finish(bool)@Base" 0.8.0
- (c++)"pkgAcqIndexDiffs::DescURI()@Base" 0.8.0
- (c++)"pkgAcqIndexDiffs::pkgAcqIndexDiffs(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, HashString, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<DiffInfo, std::allocator<DiffInfo> >)@Base" 0.8.0
- (c++)"pkgAcqIndexDiffs::~pkgAcqIndexDiffs()@Base" 0.8.0
- (c++)"pkgAcqIndexTrans::Custom600Headers()@Base" 0.8.0
- (c++)"pkgAcqIndexTrans::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
- (c++)"pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgAcqIndexTrans::~pkgAcqIndexTrans()@Base" 0.8.0
- (c++)"pkgAcquireStatus::Done(pkgAcquire::ItemDesc&)@Base" 0.8.0
- (c++)"pkgAcquireStatus::Fail(pkgAcquire::ItemDesc&)@Base" 0.8.0
- (c++)"pkgAcquireStatus::Stop()@Base" 0.8.0
- (c++)"pkgAcquireStatus::Fetch(pkgAcquire::ItemDesc&)@Base" 0.8.0
- (c++)"pkgAcquireStatus::Pulse(pkgAcquire*)@Base" 0.8.0
- (c++)"pkgAcquireStatus::Start()@Base" 0.8.0
- (c++)"pkgAcquireStatus::IMSHit(pkgAcquire::ItemDesc&)@Base" 0.8.0
- (c++)"pkgAcquireStatus::pkgAcquireStatus()@Base" 0.8.0
- (c++)"PreferenceSection::TrimRecord(bool, char const*&)@Base" 0.8.0
- (c++)"pkgArchiveCleaner::Go(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgCache&)@Base" 0.8.0
- (c++)"pkgCacheGenerator::ListParser::NewDepends(pkgCache::VerIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)@Base" 0.8.0
- (c++)"pkgCacheGenerator::ListParser::NewProvides(pkgCache::VerIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"pkgCacheGenerator::ListParser::CollectFileProvides(pkgCache&, pkgCache::VerIterator&)@Base" 0.8.0
- (c++)"pkgCacheGenerator::NewFileVer(pkgCache::VerIterator&, pkgCacheGenerator::ListParser&)@Base" 0.8.0
- (c++)"pkgCacheGenerator::NewPackage(pkgCache::PkgIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"pkgCacheGenerator::SelectFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pkgIndexFile const&, unsigned long)@Base" 0.8.0
- (c++)"pkgCacheGenerator::FinishCache(OpProgress*)@Base" 0.8.0
- (c++)"pkgCacheGenerator::NewFileDesc(pkgCache::DescIterator&, pkgCacheGenerator::ListParser&)@Base" 0.8.0
- (c++)"pkgCacheGenerator::MakeStatusCache(pkgSourceList&, OpProgress*, MMap**, bool)@Base" 0.8.0
- (c++)"pkgCacheGenerator::WriteUniqString(char const*, unsigned int)@Base" 0.8.0
- (c++)"pkgCacheGenerator::CreateDynamicMMap(FileFd*, unsigned long)@Base" 0.8.0
- (c++)"pkgCacheGenerator::MergeFileProvides(pkgCacheGenerator::ListParser&)@Base" 0.8.0
- (c++)"pkgCacheGenerator::MakeOnlyStatusCache(OpProgress*, DynamicMMap**)@Base" 0.8.0
- (c++)"pkgCacheGenerator::ReMap(void const*, void const*)@Base" 0.8.0
- (c++)"pkgCacheGenerator::Dynamic<pkgCache::DepIterator>::toReMap@Base" 0.8.0
- (c++)"pkgCacheGenerator::Dynamic<pkgCache::GrpIterator>::toReMap@Base" 0.8.0
- (c++)"pkgCacheGenerator::Dynamic<pkgCache::PkgIterator>::toReMap@Base" 0.8.0
- (c++)"pkgCacheGenerator::Dynamic<pkgCache::PrvIterator>::toReMap@Base" 0.8.0
- (c++)"pkgCacheGenerator::Dynamic<pkgCache::VerIterator>::toReMap@Base" 0.8.0
- (c++)"pkgCacheGenerator::Dynamic<pkgCache::DescIterator>::toReMap@Base" 0.8.0
- (c++)"pkgCacheGenerator::Dynamic<pkgCache::PkgFileIterator>::toReMap@Base" 0.8.0
- (c++)"pkgCacheGenerator::NewGroup(pkgCache::GrpIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"pkgCacheGenerator::MergeList(pkgCacheGenerator::ListParser&, pkgCache::VerIterator*)@Base" 0.8.0
- (c++)"pkgCacheGenerator::pkgCacheGenerator(DynamicMMap*, OpProgress*)@Base" 0.8.0
- (c++)"pkgCacheGenerator::~pkgCacheGenerator()@Base" 0.8.0
- (c++)"pkgPackageManager::FixMissing()@Base" 0.8.0
- (c++)"pkgPackageManager::EarlyRemove(pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgPackageManager::GetArchives(pkgAcquire*, pkgSourceList*, pkgRecords*)@Base" 0.8.0
- (c++)"pkgPackageManager::SmartRemove(pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgPackageManager::SmartUnPack(pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgPackageManager::ConfigureAll()@Base" 0.8.0
- (c++)"pkgPackageManager::ImmediateAdd(pkgCache::PkgIterator, bool, unsigned int const&)@Base" 0.8.0
- (c++)"pkgPackageManager::OrderInstall()@Base" 0.8.0
- (c++)"pkgPackageManager::DepAlwaysTrue(pkgCache::DepIterator)@Base" 0.8.0
- (c++)"pkgPackageManager::CheckRConflicts(pkgCache::PkgIterator, pkgCache::DepIterator, char const*)@Base" 0.8.0
- (c++)"pkgPackageManager::CreateOrderList()@Base" 0.8.0
- (c++)"pkgPackageManager::DoInstallPostFork(int)@Base" 0.8.0
- (c++)"pkgPackageManager::Go(int)@Base" 0.8.0
- (c++)"pkgPackageManager::Reset()@Base" 0.8.0
- (c++)"pkgPackageManager::Remove(pkgCache::PkgIterator, bool)@Base" 0.8.0
- (c++)"pkgPackageManager::Install(pkgCache::PkgIterator, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgPackageManager::Configure(pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgPackageManager::DoInstall(int)@Base" 0.8.0
- (c++)"pkgPackageManager::pkgPackageManager(pkgDepCache*)@Base" 0.8.0
- (c++)"pkgPackageManager::~pkgPackageManager()@Base" 0.8.0
- (c++)"debSrcRecordParser::BuildDepends(std::vector<pkgSrcRecords::Parser::BuildDepRec, std::allocator<pkgSrcRecords::Parser::BuildDepRec> >&, bool const&, bool const&)@Base" 0.8.0
- (c++)"debSrcRecordParser::Jump(unsigned long const&)@Base" 0.8.0
- (c++)"debSrcRecordParser::Step()@Base" 0.8.0
- (c++)"debSrcRecordParser::AsStr()@Base" 0.8.0
- (c++)"debSrcRecordParser::Files(std::vector<pkgSrcRecords::File, std::allocator<pkgSrcRecords::File> >&)@Base" 0.8.0
- (c++)"debSrcRecordParser::Offset()@Base" 0.8.0
- (c++)"debSrcRecordParser::Restart()@Base" 0.8.0
- (c++)"debSrcRecordParser::Binaries()@Base" 0.8.0
- (c++)"debSrcRecordParser::~debSrcRecordParser()@Base" 0.8.0
- (c++)"pkgProblemResolver::MakeScores()@Base" 0.8.0
- (c++)"pkgProblemResolver::ResolveByKeep()@Base" 0.8.0
- (c++)"pkgProblemResolver::InstallProtect()@Base" 0.8.0
- (c++)"pkgProblemResolver::This@Base" 0.8.0
- (c++)"pkgProblemResolver::Resolve(bool)@Base" 0.8.0
- (c++)"pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgProblemResolver::ScoreSort(void const*, void const*)@Base" 0.8.0
- (c++)"pkgProblemResolver::pkgProblemResolver(pkgDepCache*)@Base" 0.8.0
- (c++)"pkgProblemResolver::~pkgProblemResolver()@Base" 0.8.0
- (c++)"debVersioningSystem::CmpFragment(char const*, char const*, char const*, char const*)@Base" 0.8.0
- (c++)"debVersioningSystem::DoCmpVersion(char const*, char const*, char const*, char const*)@Base" 0.8.0
- (c++)"debVersioningSystem::DoCmpReleaseVer(char const*, char const*, char const*, char const*)@Base" 0.8.0
- (c++)"debVersioningSystem::UpstreamVersion(char const*)@Base" 0.8.0
- (c++)"debVersioningSystem::CheckDep(char const*, int, char const*)@Base" 0.8.0
- (c++)"debVersioningSystem::debVersioningSystem()@Base" 0.8.0
- (c++)"debVersioningSystem::~debVersioningSystem()@Base" 0.8.0
- (c++)"pkgUdevCdromDevices::Scan()@Base" 0.8.0
- (c++)"pkgUdevCdromDevices::Dlopen()@Base" 0.8.0
- (c++)"pkgUdevCdromDevices::pkgUdevCdromDevices()@Base" 0.8.0
- (c++)"pkgUdevCdromDevices::~pkgUdevCdromDevices()@Base" 0.8.0
- (c++)"pkgVersioningSystem::GlobalList@Base" 0.8.0
- (c++)"pkgVersioningSystem::GlobalListLen@Base" 0.8.0
- (c++)"pkgVersioningSystem::TestCompatibility(pkgVersioningSystem const&)@Base" 0.8.0
- (c++)"pkgVersioningSystem::GetVS(char const*)@Base" 0.8.0
- (c++)"pkgVersioningSystem::pkgVersioningSystem()@Base" 0.8.0
- (c++)"debTranslationsIndex::debTranslationsIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, char const*)@Base" 0.8.0
- (c++)"debTranslationsIndex::~debTranslationsIndex()@Base" 0.8.0
- (c++)"APT::CacheFilter::PackageNameMatchesRegEx::PackageNameMatchesRegEx(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"APT::CacheFilter::PackageNameMatchesRegEx::~PackageNameMatchesRegEx()@Base" 0.8.0
- (c++)"APT::CacheFilter::PackageNameMatchesRegEx::operator()(pkgCache::GrpIterator const&)@Base" 0.8.0
- (c++)"APT::CacheFilter::PackageNameMatchesRegEx::operator()(pkgCache::PkgIterator const&)@Base" 0.8.0
- (c++)"APT::Configuration::getLanguages(bool const&, bool const&, char const**)@Base" 0.8.0
- (c++)"APT::Configuration::getArchitectures(bool const&)@Base" 0.8.0
- (c++)"APT::Configuration::checkArchitecture(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"APT::Configuration::getCompressionTypes(bool const&)@Base" 0.8.0
- (c++)"APT::CacheSetHelper::canNotFindPkgName(pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"APT::CacheSetHelper::canNotFindNewestVer(pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.0
- (c++)"APT::CacheSetHelper::canNotFindCandidateVer(pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.0
- (c++)"APT::CacheSetHelper::canNotFindInstalledVer(pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.0
- (c++)"APT::CacheSetHelper::~CacheSetHelper()@Base" 0.8.0
- (c++)"URI::NoUserPassword(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"URI::CopyFrom(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"URI::SiteOnly(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"URI::~URI()@Base" 0.8.0
- (c++)"URI::operator std::basic_string<char, std::char_traits<char>, std::allocator<char> >()@Base" 0.8.0
- (c++)"MMap::Map(FileFd&)@Base" 0.8.0
- (c++)"MMap::Sync(unsigned long, unsigned long)@Base" 0.8.0
- (c++)"MMap::Sync()@Base" 0.8.0
- (c++)"MMap::Close(bool)@Base" 0.8.0
- (c++)"MMap::MMap(FileFd&, unsigned long)@Base" 0.8.0
- (c++)"MMap::MMap(unsigned long)@Base" 0.8.0
- (c++)"MMap::~MMap()@Base" 0.8.0
- (c++)"FileFd::Size()@Base" 0.8.0
- (c++)"FileFd::Sync()@Base" 0.8.0
- (c++)"FileFd::Tell()@Base" 0.8.0
- (c++)"FileFd::Close()@Base" 0.8.0
- (c++)"FileFd::~FileFd()@Base" 0.8.0
- (c++)"Vendor::CheckDist(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"Vendor::Vendor(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<Vendor::Fingerprint*, std::allocator<Vendor::Fingerprint*> >*)@Base" 0.8.0
- (c++)"Vendor::~Vendor()@Base" 0.8.0
- (c++)"DiffInfo::~DiffInfo()@Base" 0.8.0
- (c++)"pkgCache::CompTypeDeb(unsigned char)@Base" 0.8.0
- (c++)"pkgCache::DepIterator::GlobOr(pkgCache::DepIterator&, pkgCache::DepIterator&)@Base" 0.8.0
- (c++)"pkgCache::DepIterator::operator++(int)@Base" 0.8.0
- (c++)"pkgCache::DepIterator::operator++()@Base" 0.8.0
- (c++)"pkgCache::GrpIterator::operator++(int)@Base" 0.8.0
- (c++)"pkgCache::GrpIterator::operator++()@Base" 0.8.0
- (c++)"pkgCache::PkgIterator::operator++(int)@Base" 0.8.0
- (c++)"pkgCache::PkgIterator::operator++()@Base" 0.8.0
- (c++)"pkgCache::PrvIterator::operator++(int)@Base" 0.8.0
- (c++)"pkgCache::PrvIterator::operator++()@Base" 0.8.0
- (c++)"pkgCache::VerIterator::operator++(int)@Base" 0.8.0
- (c++)"pkgCache::VerIterator::operator++()@Base" 0.8.0
- (c++)"pkgCache::DescIterator::operator++(int)@Base" 0.8.0
- (c++)"pkgCache::DescIterator::operator++()@Base" 0.8.0
- (c++)"pkgCache::PkgFileIterator::IsOk()@Base" 0.8.0
- (c++)"pkgCache::PkgFileIterator::RelStr()@Base" 0.8.0
- (c++)"pkgCache::PkgFileIterator::operator++(int)@Base" 0.8.0
- (c++)"pkgCache::PkgFileIterator::operator++()@Base" 0.8.0
- (c++)"pkgCache::VerFileIterator::operator++(int)@Base" 0.8.0
- (c++)"pkgCache::VerFileIterator::operator++()@Base" 0.8.0
- (c++)"pkgCache::DescFileIterator::operator++(int)@Base" 0.8.0
- (c++)"pkgCache::DescFileIterator::operator++()@Base" 0.8.0
- (c++)"pkgCache::SingleArchFindPkg(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"pkgCache::ReMap(bool const&)@Base" 0.8.0
- (c++)"pkgCache::Header::Header()@Base" 0.8.0
- (c++)"pkgCache::DepType(unsigned char)@Base" 0.8.0
- (c++)"pkgCache::FindGrp(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"pkgCache::FindPkg(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"pkgCache::FindPkg(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"pkgCache::CompType(unsigned char)@Base" 0.8.0
- (c++)"pkgCache::Priority(unsigned char)@Base" 0.8.0
- (c++)"pkgCache::pkgCache(MMap*, bool)@Base" 0.8.0
- (c++)"pkgCache::~pkgCache()@Base" 0.8.0
- (c++)"pkgCdrom::DropRepeats(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, char const*)@Base" 0.8.0
- (c++)"pkgCdrom::FindPackages(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, pkgCdromStatus*, unsigned int)@Base" 0.8.0
- (c++)"pkgCdrom::WriteDatabase(Configuration&)@Base" 0.8.0
- (c++)"pkgCdrom::DropBinaryArch(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)@Base" 0.8.0
- (c++)"pkgCdrom::WriteSourceList(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, bool)@Base" 0.8.0
- (c++)"pkgCdrom::ReduceSourcelist(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)@Base" 0.8.0
- (c++)"pkgCdrom::Add(pkgCdromStatus*)@Base" 0.8.0
- (c++)"pkgCdrom::Ident(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, pkgCdromStatus*)@Base" 0.8.0
- (c++)"pkgCdrom::Score(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"IndexCopy::CopyPackages(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, pkgCdromStatus*)@Base" 0.8.0
- (c++)"IndexCopy::ReconstructChop(unsigned long&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"IndexCopy::ReconstructPrefix(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"IndexCopy::ConvertToSourceList(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0.8.0
- (c++)"IndexCopy::ChopDirs(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int)@Base" 0.8.0
- (c++)"IndexCopy::GrabFirst(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int)@Base" 0.8.0
- (c++)"SigVerify::CopyAndVerify(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)@Base" 0.8.0
- (c++)"SigVerify::CopyMetaIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"SigVerify::Verify(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, indexRecords*)@Base" 0.8.0
- (c++)"SigVerify::RunGPGV(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&, int*)@Base" 0.8.0
- (c++)"debSystem::Initialize(Configuration&)@Base" 0.8.0
- (c++)"debSystem::CheckUpdates()@Base" 0.8.0
- (c++)"debSystem::AddStatusFiles(std::vector<pkgIndexFile*, std::allocator<pkgIndexFile*> >&)@Base" 0.8.0
- (c++)"debSystem::ArchiveSupported(char const*)@Base" 0.8.0
- (c++)"debSystem::Lock()@Base" 0.8.0
- (c++)"debSystem::Score(Configuration const&)@Base" 0.8.0
- (c++)"debSystem::UnLock(bool)@Base" 0.8.0
- (c++)"debSystem::debSystem()@Base" 0.8.0
- (c++)"debSystem::~debSystem()@Base" 0.8.0
- (c++)"pkgDPkgPM::SendV2Pkgs(_IO_FILE*)@Base" 0.8.0
- (c++)"pkgDPkgPM::DoTerminalPty(int)@Base" 0.8.0
- (c++)"pkgDPkgPM::WriteHistoryTag(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgDPkgPM::WriteApportReport(char const*, char const*)@Base" 0.8.0
- (c++)"pkgDPkgPM::RunScriptsWithPkgs(char const*)@Base" 0.8.0
- (c++)"pkgDPkgPM::handleDisappearAction(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
- (c++)"pkgDPkgPM::Go(int)@Base" 0.8.0
- (c++)"pkgDPkgPM::Reset()@Base" 0.8.0
- (c++)"pkgDPkgPM::Remove(pkgCache::PkgIterator, bool)@Base" 0.8.0
- (c++)"pkgDPkgPM::DoStdin(int)@Base" 0.8.0
- (c++)"pkgDPkgPM::Install(pkgCache::PkgIterator, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
- (c++)"pkgDPkgPM::OpenLog()@Base" 0.8.0
- (c++)"pkgDPkgPM::CloseLog()@Base" 0.8.0
- (c++)"pkgDPkgPM::Configure(pkgCache::PkgIterator)@Base" 0.8.0
- (c++)"pkgDPkgPM::pkgDPkgPM(pkgDepCache*)@Base" 0.8.0
- (c++)"pkgDPkgPM::~pkgDPkgPM()@Base" 0.8.0
- (c++)"pkgPolicy::GetPriority(pkgCache::PkgIterator const&)@Base" 0.8.0
- (c++)"pkgPolicy::InitDefaults()@Base" 0.8.0
- (c++)"pkgPolicy::GetCandidateVer(pkgCache::PkgIterator const&)@Base" 0.8.0
- (c++)"pkgPolicy::PkgPin::~PkgPin()@Base" 0.8.0
- (c++)"pkgPolicy::GetMatch(pkgCache::PkgIterator const&)@Base" 0.8.0
- (c++)"pkgPolicy::CreatePin(pkgVersionMatch::MatchType, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, short)@Base" 0.8.0
- (c++)"pkgPolicy::pkgPolicy(pkgCache*)@Base" 0.8.0
- (c++)"pkgPolicy::~pkgPolicy()@Base" 0.8.0
- (c++)"pkgSystem::GlobalList@Base" 0.8.0
- (c++)"pkgSystem::Initialize(Configuration&)@Base" 0.8.0
- (c++)"pkgSystem::GlobalListLen@Base" 0.8.0
- (c++)"pkgSystem::Score(Configuration const&)@Base" 0.8.0
- (c++)"pkgSystem::GetSystem(char const*)@Base" 0.8.0
- (c++)"pkgSystem::pkgSystem()@Base" 0.8.0
- (c++)"HashString::VerifyFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
- (c++)"HashString::empty() const@Base" 0.8.0
- (c++)"HashString::toStr() const@Base" 0.8.0
- (c++)"CommandLine::FileSize() const@Base" 0.8.0
- (c++)"GlobalError::empty(GlobalError::MsgType const&) const@Base" 0.8.0
- (c++)"debIFTypePkg::CreatePkgParser(pkgCache::PkgFileIterator) const@Base" 0.8.0
- (c++)"debSLTypeDeb::CreateItem(std::vector<metaIndex*, std::allocator<metaIndex*> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) const@Base" 0.8.0
- (c++)"indexRecords::GetValidUntil() const@Base" 0.8.0
- (c++)"indexRecords::GetExpectedDist() const@Base" 0.8.0
- (c++)"indexRecords::Exists(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
- (c++)"indexRecords::GetDist() const@Base" 0.8.0
- (c++)"indexRecords::CheckDist(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
- (c++)"pkgIndexFile::ArchiveURI(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
- (c++)"pkgIndexFile::SourceInfo(pkgSrcRecords::Parser const&, pkgSrcRecords::File const&) const@Base" 0.8.0
- (c++)"pkgIndexFile::ArchiveInfo(pkgCache::VerIterator) const@Base" 0.8.0
- (c++)"pkgIndexFile::FindInCache(pkgCache&) const@Base" 0.8.0
- (c++)"pkgIndexFile::CreateSrcParser() const@Base" 0.8.0
- (c++)"pkgIndexFile::MergeFileProvides(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0
- (c++)"pkgIndexFile::MergeFileProvides(pkgCacheGenerator&, OpProgress&) const@Base" 0.8.0
- (c++)"pkgIndexFile::Type::CreatePkgParser(pkgCache::PkgFileIterator) const@Base" 0.8.0
- (c++)"pkgIndexFile::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0
- (c++)"pkgIndexFile::Merge(pkgCacheGenerator&, OpProgress&) const@Base" 0.8.0
- (c++)"Configuration::FindVector(char const*) const@Base" 0.8.0
- (c++)"Configuration::MatchAgainstConfig::Match(char const*) const@Base" 0.8.0
- (c++)"Configuration::Find(char const*, char const*) const@Base" 0.8.0
- (c++)"Configuration::Item::FullTag(Configuration::Item const*) const@Base" 0.8.0
- (c++)"Configuration::FindB(char const*, bool const&) const@Base" 0.8.0
- (c++)"Configuration::FindI(char const*, int const&) const@Base" 0.8.0
- (c++)"Configuration::Exists(char const*) const@Base" 0.8.0
- (c++)"Configuration::FindAny(char const*, char const*) const@Base" 0.8.0
- (c++)"Configuration::FindDir(char const*, char const*) const@Base" 0.8.0
- (c++)"Configuration::FindFile(char const*, char const*) const@Base" 0.8.0
- (c++)"Configuration::ExistsAny(char const*) const@Base" 0.8.0
- (c++)"pkgSourceList::GetIndexes(pkgAcquire*, bool) const@Base" 0.8.0
- (c++)"pkgSourceList::Type::FixupURI(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&) const@Base" 0.8.0
- (c++)"pkgSourceList::Type::ParseLine(std::vector<metaIndex*, std::allocator<metaIndex*> >&, char const*, unsigned long const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
- (c++)"pkgSourceList::FindIndex(pkgCache::PkgFileIterator, pkgIndexFile*&) const@Base" 0.8.0
- (c++)"pkgTagSection::Find(char const*, char const*&, char const*&) const@Base" 0.8.0
- (c++)"pkgTagSection::Find(char const*, unsigned int&) const@Base" 0.8.0
- (c++)"pkgTagSection::FindI(char const*, long) const@Base" 0.8.0
- (c++)"pkgTagSection::FindS(char const*) const@Base" 0.8.0
- (c++)"pkgTagSection::FindULL(char const*, unsigned long long const&) const@Base" 0.8.0
- (c++)"pkgTagSection::FindFlag(char const*, unsigned long&, unsigned long) const@Base" 0.8.0
- (c++)"debStatusIndex::FindInCache(pkgCache&) const@Base" 0.8.0
- (c++)"debStatusIndex::HasPackages() const@Base" 0.8.0
- (c++)"debStatusIndex::Size() const@Base" 0.8.0
- (c++)"debStatusIndex::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0
- (c++)"debStatusIndex::Exists() const@Base" 0.8.0
- (c++)"debStatusIndex::GetType() const@Base" 0.8.0
- (c++)"debStatusIndex::Describe(bool) const@Base" 0.8.0
- (c++)"debIFTypeStatus::CreatePkgParser(pkgCache::PkgFileIterator) const@Base" 0.8.0
- (c++)"debReleaseIndex::ArchiveURI(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
- (c++)"debReleaseIndex::GetIndexes(pkgAcquire*, bool const&) const@Base" 0.8.0
- (c++)"debReleaseIndex::MetaIndexURI(char const*) const@Base" 0.8.0
- (c++)"debReleaseIndex::MetaIndexFile(char const*) const@Base" 0.8.0
- (c++)"debReleaseIndex::MetaIndexInfo(char const*) const@Base" 0.8.0
- (c++)"debReleaseIndex::IndexURISuffix(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
- (c++)"debReleaseIndex::SourceIndexURI(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
- (c++)"debReleaseIndex::ComputeIndexTargets() const@Base" 0.8.0
- (c++)"debReleaseIndex::SourceIndexURISuffix(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
- (c++)"debReleaseIndex::Info(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
- (c++)"debReleaseIndex::IndexURI(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
- (c++)"debReleaseIndex::IsTrusted() const@Base" 0.8.0
- (c++)"debSLTypeDebSrc::CreateItem(std::vector<metaIndex*, std::allocator<metaIndex*> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) const@Base" 0.8.0
- (c++)"debSLTypeDebian::CreateItemInternal(std::vector<metaIndex*, std::allocator<metaIndex*> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) const@Base" 0.8.0
- (c++)"debSourcesIndex::ArchiveURI(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
- (c++)"debSourcesIndex::SourceInfo(pkgSrcRecords::Parser const&, pkgSrcRecords::File const&) const@Base" 0.8.0
- (c++)"debSourcesIndex::HasPackages() const@Base" 0.8.0
- (c++)"debSourcesIndex::CreateSrcParser() const@Base" 0.8.0
- (c++)"debSourcesIndex::Info(char const*) const@Base" 0.8.0
- (c++)"debSourcesIndex::Size() const@Base" 0.8.0
- (c++)"debSourcesIndex::Exists() const@Base" 0.8.0
- (c++)"debSourcesIndex::GetType() const@Base" 0.8.0
- (c++)"debSourcesIndex::Describe(bool) const@Base" 0.8.0
- (c++)"debSourcesIndex::IndexURI(char const*) const@Base" 0.8.0
- (c++)"debPackagesIndex::ArchiveURI(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
- (c++)"debPackagesIndex::ArchiveInfo(pkgCache::VerIterator) const@Base" 0.8.0
- (c++)"debPackagesIndex::FindInCache(pkgCache&) const@Base" 0.8.0
- (c++)"debPackagesIndex::HasPackages() const@Base" 0.8.0
- (c++)"debPackagesIndex::Info(char const*) const@Base" 0.8.0
- (c++)"debPackagesIndex::Size() const@Base" 0.8.0
- (c++)"debPackagesIndex::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0
- (c++)"debPackagesIndex::Exists() const@Base" 0.8.0
- (c++)"debPackagesIndex::GetType() const@Base" 0.8.0
- (c++)"debPackagesIndex::Describe(bool) const@Base" 0.8.0
- (c++)"debPackagesIndex::IndexURI(char const*) const@Base" 0.8.0
- (c++)"debSrcRecordParser::Maintainer() const@Base" 0.8.0
- (c++)"debSrcRecordParser::Package() const@Base" 0.8.0
- (c++)"debSrcRecordParser::Section() const@Base" 0.8.0
- (c++)"debSrcRecordParser::Version() const@Base" 0.8.0
- (c++)"debTranslationsIndex::GetIndexes(pkgAcquire*) const@Base" 0.8.0
- (c++)"debTranslationsIndex::FindInCache(pkgCache&) const@Base" 0.8.0
- (c++)"debTranslationsIndex::HasPackages() const@Base" 0.8.0
- (c++)"debTranslationsIndex::Info(char const*) const@Base" 0.8.0
- (c++)"debTranslationsIndex::Size() const@Base" 0.8.0
- (c++)"debTranslationsIndex::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0
- (c++)"debTranslationsIndex::Exists() const@Base" 0.8.0
- (c++)"debTranslationsIndex::GetType() const@Base" 0.8.0
- (c++)"debTranslationsIndex::Describe(bool) const@Base" 0.8.0
- (c++)"debTranslationsIndex::IndexURI(char const*) const@Base" 0.8.0
- (c++)"Vendor::GetVendorID() const@Base" 0.8.0
- (c++)"Vendor::LookupFingerprint(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
- (c++)"pkgCache::DepIterator::AllTargets() const@Base" 0.8.0
- (c++)"pkgCache::DepIterator::IsCritical() const@Base" 0.8.0
- (c++)"pkgCache::DepIterator::OwnerPointer() const@Base" 0.8.0
- (c++)"pkgCache::DepIterator::SmartTargetPkg(pkgCache::PkgIterator&) const@Base" 0.8.0
- (c++)"pkgCache::GrpIterator::OwnerPointer() const@Base" 0.8.0
- (c++)"pkgCache::GrpIterator::FindPreferredPkg(bool const&) const@Base" 0.8.0
- (c++)"pkgCache::GrpIterator::FindPkg(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
- (c++)"pkgCache::GrpIterator::NextPkg(pkgCache::PkgIterator const&) const@Base" 0.8.0
- (c++)"pkgCache::PkgIterator::CurVersion() const@Base" 0.8.0
- (c++)"pkgCache::PkgIterator::CandVersion() const@Base" 0.8.0
- (c++)"pkgCache::PkgIterator::OwnerPointer() const@Base" 0.8.0
- (c++)"pkgCache::PkgIterator::State() const@Base" 0.8.0
- (c++)"pkgCache::PkgIterator::FullName(bool const&) const@Base" 0.8.0
- (c++)"pkgCache::PrvIterator::OwnerPointer() const@Base" 0.8.0
- (c++)"pkgCache::VerIterator::CompareVer(pkgCache::VerIterator const&) const@Base" 0.8.0
- (c++)"pkgCache::VerIterator::NewestFile() const@Base" 0.8.0
- (c++)"pkgCache::VerIterator::Downloadable() const@Base" 0.8.0
- (c++)"pkgCache::VerIterator::OwnerPointer() const@Base" 0.8.0
- (c++)"pkgCache::VerIterator::TranslatedDescription() const@Base" 0.8.0
- (c++)"pkgCache::VerIterator::RelStr() const@Base" 0.8.0
- (c++)"pkgCache::VerIterator::Automatic() const@Base" 0.8.0
- (c++)"pkgCache::DescIterator::OwnerPointer() const@Base" 0.8.0
- (c++)"pkgCache::PkgFileIterator::OwnerPointer() const@Base" 0.8.0
- (c++)"pkgCache::VerFileIterator::OwnerPointer() const@Base" 0.8.0
- (c++)"pkgCache::DescFileIterator::OwnerPointer() const@Base" 0.8.0
- (c++)"pkgCache::sHash(char const*) const@Base" 0.8.0
- (c++)"pkgCache::sHash(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
- (c++)"pkgCache::Header::CheckSizes(pkgCache::Header&) const@Base" 0.8.0
- (c++)"debSystem::CreatePM(pkgDepCache*) const@Base" 0.8.0
- (c++)"debSystem::FindIndex(pkgCache::PkgFileIterator, pkgIndexFile*&) const@Base" 0.8.0
- (c++)"metaIndex::GetURI() const@Base" 0.8.0
- (c++)"metaIndex::GetDist() const@Base" 0.8.0
- (c++)"metaIndex::GetType() const@Base" 0.8.0
- (c++)"typeinfo for OpProgress@Base" 0.8.0
- (c++)"typeinfo for SourceCopy@Base" 0.8.0
- (c++)"typeinfo for pkgAcqFile@Base" 0.8.0
- (c++)"typeinfo for pkgAcquire@Base" 0.8.0
- (c++)"typeinfo for DynamicMMap@Base" 0.8.0
- (c++)"typeinfo for PackageCopy@Base" 0.8.0
- (c++)"typeinfo for pkgAcqIndex@Base" 0.8.0
- (c++)"typeinfo for pkgDepCache@Base" 0.8.0
- (c++)"typeinfo for pkgSimulate@Base" 0.8.0
- (c++)"typeinfo for debIFTypePkg@Base" 0.8.0
- (c++)"typeinfo for debIFTypeSrc@Base" 0.8.0
- (c++)"typeinfo for debSLTypeDeb@Base" 0.8.0
- (c++)"typeinfo for indexRecords@Base" 0.8.0
- (c++)"typeinfo for pkgAcqMethod@Base" 0.8.0
- (c++)"typeinfo for pkgCacheFile@Base" 0.8.0
- (c++)"typeinfo for pkgIndexFile@Base" 0.8.0
- (c++)"typeinfo for WeakPointable@Base" 0.8.0
- (c++)"typeinfo for debListParser@Base" 0.8.0
- (c++)"typeinfo for pkgAcqArchive@Base" 0.8.0
- (c++)"typeinfo for pkgAcqMetaSig@Base" 0.8.0
- (c++)"typeinfo for pkgTagSection@Base" 0.8.0
- (c++)"typeinfo for OpTextProgress@Base" 0.8.0
- (c++)"typeinfo for debIFTypeTrans@Base" 0.8.0
- (c++)"typeinfo for debStatusIndex@Base" 0.8.0
- (c++)"typeinfo for debIFTypeStatus@Base" 0.8.0
- (c++)"typeinfo for debRecordParser@Base" 0.8.0
- (c++)"typeinfo for debReleaseIndex@Base" 0.8.0
- (c++)"typeinfo for debSLTypeDebSrc@Base" 0.8.0
- (c++)"typeinfo for debSLTypeDebian@Base" 0.8.0
- (c++)"typeinfo for debSourcesIndex@Base" 0.8.0
- (c++)"typeinfo for pkgAcqDiffIndex@Base" 0.8.0
- (c++)"typeinfo for pkgAcqMetaIndex@Base" 0.8.0
- (c++)"typeinfo for debPackagesIndex@Base" 0.8.0
- (c++)"typeinfo for pkgAcqIndexDiffs@Base" 0.8.0
- (c++)"typeinfo for pkgAcqIndexTrans@Base" 0.8.0
- (c++)"typeinfo for pkgAcquireStatus@Base" 0.8.0
- (c++)"typeinfo for PreferenceSection@Base" 0.8.0
- (c++)"typeinfo for pkgPackageManager@Base" 0.8.0
- (c++)"typeinfo for debSrcRecordParser@Base" 0.8.0
- (c++)"typeinfo for debVersioningSystem@Base" 0.8.0
- (c++)"typeinfo for pkgUdevCdromDevices@Base" 0.8.0
- (c++)"typeinfo for pkgVersioningSystem@Base" 0.8.0
- (c++)"typeinfo for debTranslationsIndex@Base" 0.8.0
- (c++)"typeinfo for MMap@Base" 0.8.0
- (c++)"typeinfo for FileFd@Base" 0.8.0
- (c++)"typeinfo for Vendor@Base" 0.8.0
- (c++)"typeinfo for pkgCache@Base" 0.8.0
- (c++)"typeinfo for IndexCopy@Base" 0.8.0
- (c++)"typeinfo for debSystem@Base" 0.8.0
- (c++)"typeinfo for metaIndex@Base" 0.8.0
- (c++)"typeinfo for pkgDPkgPM@Base" 0.8.0
- (c++)"typeinfo for pkgPolicy@Base" 0.8.0
- (c++)"typeinfo for pkgSystem@Base" 0.8.0
- (c++)"typeinfo for pkgAcquire::Item@Base" 0.8.0
- (c++)"typeinfo for pkgRecords::Parser@Base" 0.8.0
- (c++)"typeinfo for pkgDepCache::InRootSetFunc@Base" 0.8.0
- (c++)"typeinfo for pkgDepCache::DefaultRootSetFunc@Base" 0.8.0
- (c++)"typeinfo for pkgDepCache::Policy@Base" 0.8.0
- (c++)"typeinfo for pkgSimulate::Policy@Base" 0.8.0
- (c++)"typeinfo for pkgIndexFile::Type@Base" 0.8.0
- (c++)"typeinfo for Configuration::MatchAgainstConfig@Base" 0.8.0
- (c++)"typeinfo for pkgSourceList::Type@Base" 0.8.0
- (c++)"typeinfo for pkgSrcRecords::Parser@Base" 0.8.0
- (c++)"typeinfo for pkgCacheGenerator::ListParser@Base" 0.8.0
- (c++)"typeinfo for APT::CacheSetHelper@Base" 0.8.0
- (c++)"typeinfo for pkgCache::DepIterator@Base" 0.8.0
- (c++)"typeinfo for pkgCache::GrpIterator@Base" 0.8.0
- (c++)"typeinfo for pkgCache::PkgIterator@Base" 0.8.0
- (c++)"typeinfo for pkgCache::PrvIterator@Base" 0.8.0
- (c++)"typeinfo for pkgCache::VerIterator@Base" 0.8.0
- (c++)"typeinfo for pkgCache::DescIterator@Base" 0.8.0
- (c++)"typeinfo for pkgCache::PkgFileIterator@Base" 0.8.0
- (c++)"typeinfo for pkgCache::VerFileIterator@Base" 0.8.0
- (c++)"typeinfo for pkgCache::DescFileIterator@Base" 0.8.0
- (c++)"typeinfo for pkgCache::Iterator<pkgCache::Dependency, pkgCache::DepIterator>@Base" 0.8.0
- (c++)"typeinfo for pkgCache::Iterator<pkgCache::Description, pkgCache::DescIterator>@Base" 0.8.0
- (c++)"typeinfo for pkgCache::Iterator<pkgCache::PackageFile, pkgCache::PkgFileIterator>@Base" 0.8.0
- (c++)"typeinfo for pkgCache::Iterator<pkgCache::Group, pkgCache::GrpIterator>@Base" 0.8.0
- (c++)"typeinfo for pkgCache::Iterator<pkgCache::Package, pkgCache::PkgIterator>@Base" 0.8.0
- (c++)"typeinfo for pkgCache::Iterator<pkgCache::VerFile, pkgCache::VerFileIterator>@Base" 0.8.0
- (c++)"typeinfo for pkgCache::Iterator<pkgCache::Version, pkgCache::VerIterator>@Base" 0.8.0
- (c++)"typeinfo for pkgCache::Iterator<pkgCache::DescFile, pkgCache::DescFileIterator>@Base" 0.8.0
- (c++)"typeinfo for pkgCache::Iterator<pkgCache::Provides, pkgCache::PrvIterator>@Base" 0.8.0
- (c++)"typeinfo for pkgCache::Namespace@Base" 0.8.0
- (c++)"typeinfo name for OpProgress@Base" 0.8.0
- (c++)"typeinfo name for SourceCopy@Base" 0.8.0
- (c++)"typeinfo name for pkgAcqFile@Base" 0.8.0
- (c++)"typeinfo name for pkgAcquire@Base" 0.8.0
- (c++)"typeinfo name for DynamicMMap@Base" 0.8.0
- (c++)"typeinfo name for PackageCopy@Base" 0.8.0
- (c++)"typeinfo name for pkgAcqIndex@Base" 0.8.0
- (c++)"typeinfo name for pkgDepCache@Base" 0.8.0
- (c++)"typeinfo name for pkgSimulate@Base" 0.8.0
- (c++)"typeinfo name for debIFTypePkg@Base" 0.8.0
- (c++)"typeinfo name for debIFTypeSrc@Base" 0.8.0
- (c++)"typeinfo name for debSLTypeDeb@Base" 0.8.0
- (c++)"typeinfo name for indexRecords@Base" 0.8.0
- (c++)"typeinfo name for pkgAcqMethod@Base" 0.8.0
- (c++)"typeinfo name for pkgCacheFile@Base" 0.8.0
- (c++)"typeinfo name for pkgIndexFile@Base" 0.8.0
- (c++)"typeinfo name for WeakPointable@Base" 0.8.0
- (c++)"typeinfo name for debListParser@Base" 0.8.0
- (c++)"typeinfo name for pkgAcqArchive@Base" 0.8.0
- (c++)"typeinfo name for pkgAcqMetaSig@Base" 0.8.0
- (c++)"typeinfo name for pkgTagSection@Base" 0.8.0
- (c++)"typeinfo name for OpTextProgress@Base" 0.8.0
- (c++)"typeinfo name for debIFTypeTrans@Base" 0.8.0
- (c++)"typeinfo name for debStatusIndex@Base" 0.8.0
- (c++)"typeinfo name for debIFTypeStatus@Base" 0.8.0
- (c++)"typeinfo name for debRecordParser@Base" 0.8.0
- (c++)"typeinfo name for debReleaseIndex@Base" 0.8.0
- (c++)"typeinfo name for debSLTypeDebSrc@Base" 0.8.0
- (c++)"typeinfo name for debSLTypeDebian@Base" 0.8.0
- (c++)"typeinfo name for debSourcesIndex@Base" 0.8.0
- (c++)"typeinfo name for pkgAcqDiffIndex@Base" 0.8.0
- (c++)"typeinfo name for pkgAcqMetaIndex@Base" 0.8.0
- (c++)"typeinfo name for debPackagesIndex@Base" 0.8.0
- (c++)"typeinfo name for pkgAcqIndexDiffs@Base" 0.8.0
- (c++)"typeinfo name for pkgAcqIndexTrans@Base" 0.8.0
- (c++)"typeinfo name for pkgAcquireStatus@Base" 0.8.0
- (c++)"typeinfo name for PreferenceSection@Base" 0.8.0
- (c++)"typeinfo name for pkgPackageManager@Base" 0.8.0
- (c++)"typeinfo name for debSrcRecordParser@Base" 0.8.0
- (c++)"typeinfo name for debVersioningSystem@Base" 0.8.0
- (c++)"typeinfo name for pkgUdevCdromDevices@Base" 0.8.0
- (c++)"typeinfo name for pkgVersioningSystem@Base" 0.8.0
- (c++)"typeinfo name for debTranslationsIndex@Base" 0.8.0
- (c++)"typeinfo name for MMap@Base" 0.8.0
- (c++)"typeinfo name for FileFd@Base" 0.8.0
- (c++)"typeinfo name for Vendor@Base" 0.8.0
- (c++)"typeinfo name for pkgCache@Base" 0.8.0
- (c++)"typeinfo name for IndexCopy@Base" 0.8.0
- (c++)"typeinfo name for debSystem@Base" 0.8.0
- (c++)"typeinfo name for metaIndex@Base" 0.8.0
- (c++)"typeinfo name for pkgDPkgPM@Base" 0.8.0
- (c++)"typeinfo name for pkgPolicy@Base" 0.8.0
- (c++)"typeinfo name for pkgSystem@Base" 0.8.0
- (c++)"typeinfo name for pkgAcquire::Item@Base" 0.8.0
- (c++)"typeinfo name for pkgRecords::Parser@Base" 0.8.0
- (c++)"typeinfo name for pkgDepCache::InRootSetFunc@Base" 0.8.0
- (c++)"typeinfo name for pkgDepCache::DefaultRootSetFunc@Base" 0.8.0
- (c++)"typeinfo name for pkgDepCache::Policy@Base" 0.8.0
- (c++)"typeinfo name for pkgSimulate::Policy@Base" 0.8.0
- (c++)"typeinfo name for pkgIndexFile::Type@Base" 0.8.0
- (c++)"typeinfo name for Configuration::MatchAgainstConfig@Base" 0.8.0
- (c++)"typeinfo name for pkgSourceList::Type@Base" 0.8.0
- (c++)"typeinfo name for pkgSrcRecords::Parser@Base" 0.8.0
- (c++)"typeinfo name for pkgCacheGenerator::ListParser@Base" 0.8.0
- (c++)"typeinfo name for APT::CacheSetHelper@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::DepIterator@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::GrpIterator@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::PkgIterator@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::PrvIterator@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::VerIterator@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::DescIterator@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::PkgFileIterator@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::VerFileIterator@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::DescFileIterator@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::Iterator<pkgCache::Dependency, pkgCache::DepIterator>@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::Iterator<pkgCache::Description, pkgCache::DescIterator>@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::Iterator<pkgCache::PackageFile, pkgCache::PkgFileIterator>@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::Iterator<pkgCache::Group, pkgCache::GrpIterator>@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::Iterator<pkgCache::Package, pkgCache::PkgIterator>@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::Iterator<pkgCache::VerFile, pkgCache::VerFileIterator>@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::Iterator<pkgCache::Version, pkgCache::VerIterator>@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::Iterator<pkgCache::DescFile, pkgCache::DescFileIterator>@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::Iterator<pkgCache::Provides, pkgCache::PrvIterator>@Base" 0.8.0
- (c++)"typeinfo name for pkgCache::Namespace@Base" 0.8.0
- (c++)"vtable for OpProgress@Base" 0.8.0
- (c++)"vtable for SourceCopy@Base" 0.8.0
- (c++)"vtable for pkgAcqFile@Base" 0.8.0
- (c++)"vtable for pkgAcquire@Base" 0.8.0
- (c++)"vtable for DynamicMMap@Base" 0.8.0
- (c++)"vtable for PackageCopy@Base" 0.8.0
- (c++)"vtable for pkgAcqIndex@Base" 0.8.0
- (c++)"vtable for pkgDepCache@Base" 0.8.0
- (c++)"vtable for pkgSimulate@Base" 0.8.0
- (c++)"vtable for debIFTypePkg@Base" 0.8.0
- (c++)"vtable for debIFTypeSrc@Base" 0.8.0
- (c++)"vtable for debSLTypeDeb@Base" 0.8.0
- (c++)"vtable for indexRecords@Base" 0.8.0
- (c++)"vtable for pkgAcqMethod@Base" 0.8.0
- (c++)"vtable for pkgCacheFile@Base" 0.8.0
- (c++)"vtable for pkgIndexFile@Base" 0.8.0
- (c++)"vtable for debListParser@Base" 0.8.0
- (c++)"vtable for pkgAcqArchive@Base" 0.8.0
- (c++)"vtable for pkgAcqMetaSig@Base" 0.8.0
- (c++)"vtable for pkgTagSection@Base" 0.8.0
- (c++)"vtable for OpTextProgress@Base" 0.8.0
- (c++)"vtable for debIFTypeTrans@Base" 0.8.0
- (c++)"vtable for debStatusIndex@Base" 0.8.0
- (c++)"vtable for debIFTypeStatus@Base" 0.8.0
- (c++)"vtable for debRecordParser@Base" 0.8.0
- (c++)"vtable for debReleaseIndex@Base" 0.8.0
- (c++)"vtable for debSLTypeDebSrc@Base" 0.8.0
- (c++)"vtable for debSLTypeDebian@Base" 0.8.0
- (c++)"vtable for debSourcesIndex@Base" 0.8.0
- (c++)"vtable for pkgAcqDiffIndex@Base" 0.8.0
- (c++)"vtable for pkgAcqMetaIndex@Base" 0.8.0
- (c++)"vtable for debPackagesIndex@Base" 0.8.0
- (c++)"vtable for pkgAcqIndexDiffs@Base" 0.8.0
- (c++)"vtable for pkgAcqIndexTrans@Base" 0.8.0
- (c++)"vtable for pkgAcquireStatus@Base" 0.8.0
- (c++)"vtable for PreferenceSection@Base" 0.8.0
- (c++)"vtable for pkgPackageManager@Base" 0.8.0
- (c++)"vtable for debSrcRecordParser@Base" 0.8.0
- (c++)"vtable for debVersioningSystem@Base" 0.8.0
- (c++)"vtable for pkgUdevCdromDevices@Base" 0.8.0
- (c++)"vtable for pkgVersioningSystem@Base" 0.8.0
- (c++)"vtable for debTranslationsIndex@Base" 0.8.0
- (c++)"vtable for MMap@Base" 0.8.0
- (c++)"vtable for FileFd@Base" 0.8.0
- (c++)"vtable for Vendor@Base" 0.8.0
- (c++)"vtable for pkgCache@Base" 0.8.0
- (c++)"vtable for IndexCopy@Base" 0.8.0
- (c++)"vtable for debSystem@Base" 0.8.0
- (c++)"vtable for metaIndex@Base" 0.8.0
- (c++)"vtable for pkgDPkgPM@Base" 0.8.0
- (c++)"vtable for pkgPolicy@Base" 0.8.0
- (c++)"vtable for pkgSystem@Base" 0.8.0
- (c++)"vtable for pkgAcquire::Item@Base" 0.8.0
- (c++)"vtable for pkgRecords::Parser@Base" 0.8.0
- (c++)"vtable for pkgDepCache::InRootSetFunc@Base" 0.8.0
- (c++)"vtable for pkgDepCache::DefaultRootSetFunc@Base" 0.8.0
- (c++)"vtable for pkgDepCache::Policy@Base" 0.8.0
- (c++)"vtable for pkgSimulate::Policy@Base" 0.8.0
- (c++)"vtable for pkgIndexFile::Type@Base" 0.8.0
- (c++)"vtable for Configuration::MatchAgainstConfig@Base" 0.8.0
- (c++)"vtable for pkgSourceList::Type@Base" 0.8.0
- (c++)"vtable for pkgSrcRecords::Parser@Base" 0.8.0
- (c++)"vtable for pkgCacheGenerator::ListParser@Base" 0.8.0
- (c++)"vtable for APT::CacheSetHelper@Base" 0.8.0
- (c++)"vtable for pkgCache::DepIterator@Base" 0.8.0
- (c++)"vtable for pkgCache::GrpIterator@Base" 0.8.0
- (c++)"vtable for pkgCache::PkgIterator@Base" 0.8.0
- (c++)"vtable for pkgCache::PrvIterator@Base" 0.8.0
- (c++)"vtable for pkgCache::VerIterator@Base" 0.8.0
- (c++)"vtable for pkgCache::DescIterator@Base" 0.8.0
- (c++)"vtable for pkgCache::PkgFileIterator@Base" 0.8.0
- (c++)"vtable for pkgCache::VerFileIterator@Base" 0.8.0
- (c++)"vtable for pkgCache::DescFileIterator@Base" 0.8.0
- (c++)"vtable for pkgCache::Iterator<pkgCache::Dependency, pkgCache::DepIterator>@Base" 0.8.0
- (c++)"vtable for pkgCache::Iterator<pkgCache::Description, pkgCache::DescIterator>@Base" 0.8.0
- (c++)"vtable for pkgCache::Iterator<pkgCache::PackageFile, pkgCache::PkgFileIterator>@Base" 0.8.0
- (c++)"vtable for pkgCache::Iterator<pkgCache::Group, pkgCache::GrpIterator>@Base" 0.8.0
- (c++)"vtable for pkgCache::Iterator<pkgCache::Package, pkgCache::PkgIterator>@Base" 0.8.0
- (c++)"vtable for pkgCache::Iterator<pkgCache::VerFile, pkgCache::VerFileIterator>@Base" 0.8.0
- (c++)"vtable for pkgCache::Iterator<pkgCache::Version, pkgCache::VerIterator>@Base" 0.8.0
- (c++)"vtable for pkgCache::Iterator<pkgCache::DescFile, pkgCache::DescFileIterator>@Base" 0.8.0
- (c++)"vtable for pkgCache::Iterator<pkgCache::Provides, pkgCache::PrvIterator>@Base" 0.8.0
- (c++)"non-virtual thunk to pkgDepCache::DefaultRootSetFunc::~DefaultRootSetFunc()@Base" 0.8.0
- (c++)"operator<<(std::basic_ostream<char, std::char_traits<char> >&, pkgCache::DepIterator)@Base" 0.8.0
- (c++)"operator<<(std::basic_ostream<char, std::char_traits<char> >&, pkgCache::PkgIterator)@Base" 0.8.0
- _apt_DebSrcType@Base 0.8.0
- _apt_DebType@Base 0.8.0
- _config@Base 0.8.0
- _system@Base 0.8.0
- debSys@Base 0.8.0
- debVS@Base 0.8.0
- pkgLibVersion@Base 0.8.0
- pkgVersion@Base 0.8.0
-### architecture specific: va_list
- (arch=armel armhf|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, std::__va_list&) const@Base" 0.8.15~exp1
- (arch=i386 hurd-i386 kfreebsd-i386 ppc64|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, char*&) const@Base" 0.8.15~exp1
- (arch=hppa ia64 mips mipsel sparc sparc64|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, void*&) const@Base" 0.8.15~exp1
- (arch=amd64 kfreebsd-amd64 powerpc powerpcspe s390 s390x x32|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, __va_list_tag (&) [1]) const@Base" 0.8.15~exp1
- (arch=sh4|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, __builtin_va_list&) const@Base" 0.8.15~exp1
- (arch=alpha|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, __va_list_tag&) const@Base" 0.8.15~exp1
-### architecture specific: va_list & size_t
- (arch=i386 hurd-i386 kfreebsd-i386|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, char*&, unsigned int&)@Base" 0.8.11.4
- (arch=armel armhf|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, std::__va_list&, unsigned int&)@Base" 0.8.11.4
- (arch=alpha|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag&, unsigned long&)@Base" 0.8.11.4
- (arch=powerpc powerpcspe x32|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1], unsigned int&)@Base" 0.8.11.4
- (arch=amd64 kfreebsd-amd64 s390 s390x|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1], unsigned long&)@Base" 0.8.11.4
- (arch=hppa mips mipsel sparc|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&, unsigned int&)@Base" 0.8.11.4
- (arch=ia64 sparc64|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&, unsigned long&)@Base" 0.8.11.4
- (arch=sh4|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __builtin_va_list&, unsigned int&)@Base" 0.8.11.4
- (arch=ppc64|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, char*&, unsigned long&)@Base" 0.8.11.4
- (arch=i386 hurd-i386 kfreebsd-i386|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, char*&, int, unsigned int&)@Base" 0.8.11.4
- (arch=armel armhf|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, std::__va_list&, int, unsigned int&)@Base" 0.8.11.4
- (arch=alpha|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag&, int, unsigned long&)@Base" 0.8.11.4
- (arch=powerpc powerpcspe x32|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1], int, unsigned int&)@Base" 0.8.11.4
- (arch=amd64 kfreebsd-amd64 s390 s390x|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1], int, unsigned long&)@Base" 0.8.11.4
- (arch=hppa mips mipsel sparc|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&, int, unsigned int&)@Base" 0.8.11.4
- (arch=ia64 sparc64|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&, int, unsigned long&)@Base" 0.8.11.4 1
- (arch=sh4|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __builtin_va_list&, int, unsigned int&)@Base" 0.8.11.4
- (arch=ppc64|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, char*&, int, unsigned long&)@Base" 0.8.11.4
-### architecture specific: size_t
- (arch=i386 armel armhf hppa hurd-i386 kfreebsd-i386 mips mipsel powerpc powerpcspe sh4 sparc x32|c++)"_strtabexpand(char*, unsigned int)@Base" 0.8.0
- (arch=alpha amd64 ia64 kfreebsd-amd64 s390 s390x sparc64 ppc64|c++)"_strtabexpand(char*, unsigned long)@Base" 0.8.0
-### architecture specific: time_t
- (arch=!x32|c++)"TimeRFC1123(long)@Base" 0.8.0
- (arch=x32|c++)"TimeRFC1123(long long)@Base" 0.8.0
- (arch=!x32|c++)"FTPMDTMStrToTime(char const*, long&)@Base" 0.8.0
- (arch=x32|c++)"FTPMDTMStrToTime(char const*, long long&)@Base" 0.8.0
- (arch=!x32|c++)"StrToTime(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long&)@Base" 0.8.0
- (arch=x32|c++)"StrToTime(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long long&)@Base" 0.8.0
- (arch=!x32|c++)"RFC1123StrToTime(char const*, long&)@Base" 0.8.0
- (arch=x32|c++)"RFC1123StrToTime(char const*, long long&)@Base" 0.8.0
-###
- (c++)"Configuration::MatchAgainstConfig::clearPatterns()@Base" 0.8.1
- (c++)"CreateAPTDirectoryIfNeeded(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.2
- (c++)"FileFd::FileSize()@Base" 0.8.8
- (c++)"Base256ToNum(char const*, unsigned long&, unsigned int)@Base" 0.8.11
- (c++)"pkgDepCache::SetCandidateRelease(pkgCache::VerIterator, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::list<std::pair<pkgCache::VerIterator, pkgCache::VerIterator>, std::allocator<std::pair<pkgCache::VerIterator, pkgCache::VerIterator> > >&)@Base" 0.8.11
- (c++)"pkgDepCache::SetCandidateRelease(pkgCache::VerIterator, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.11
- (c++)"RealFileExists(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.11
- (c++)"StripEpoch(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.11
- (c++)"pkgAcqIndex::Init(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.11
- (c++)"pkgAcqIndex::pkgAcqIndex(pkgAcquire*, IndexTarget const*, HashString const&, indexRecords const*)@Base" 0.8.11
- (c++)"pkgTagSection::FindFlag(unsigned long&, unsigned long, char const*, char const*)@Base" 0.8.11
- (c++)"pkgAcqSubIndex::ParseIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.11
- (c++)"pkgAcqSubIndex::Custom600Headers()@Base" 0.8.11
- (c++)"pkgAcqSubIndex::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.11
- (c++)"pkgAcqSubIndex::DescURI()@Base" 0.8.11
- (c++)"pkgAcqSubIndex::pkgAcqSubIndex(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, HashString const&)@Base" 0.8.11
- (c++)"pkgAcqSubIndex::~pkgAcqSubIndex()@Base" 0.8.11
- (c++)"pkgAcqMetaClearSig::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.11
- (c++)"pkgAcqMetaClearSig::pkgAcqMetaClearSig(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<IndexTarget*, std::allocator<IndexTarget*> > const*, indexRecords*)@Base" 0.8.11
- (c++)"pkgAcqMetaClearSig::~pkgAcqMetaClearSig()@Base" 0.8.11
- (c++)"pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire*, IndexTarget const*, HashString const&, indexRecords const*)@Base" 0.8.11
- (c++)"IndexTarget::IsOptional() const@Base" 0.8.11
- (c++)"IndexTarget::IsSubIndex() const@Base" 0.8.11
- (c++)"debReleaseIndex::TranslationIndexURI(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.11
- (c++)"debReleaseIndex::TranslationIndexURISuffix(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.11
- (c++)"typeinfo for pkgAcqSubIndex@Base" 0.8.11
- (c++)"typeinfo for pkgAcqMetaClearSig@Base" 0.8.11
- (c++)"typeinfo name for pkgAcqSubIndex@Base" 0.8.11
- (c++)"typeinfo name for pkgAcqMetaClearSig@Base" 0.8.11
- (c++)"vtable for pkgAcqSubIndex@Base" 0.8.11
- (c++)"vtable for pkgAcqMetaClearSig@Base" 0.8.11
- (c++)"FindMountPointForDevice(char const*)@Base" 0.8.12
- (c++)"pkgUdevCdromDevices::ScanForRemovable(bool)@Base" 0.8.12
- (c++)"APT::Configuration::Compressor::Compressor(char const*, char const*, char const*, char const*, char const*, unsigned short)@Base" 0.8.12
- (c++)"APT::Configuration::Compressor::~Compressor()@Base" 0.8.12
- (c++)"APT::Configuration::getCompressors(bool)@Base" 0.8.12
- (c++)"APT::Configuration::getCompressorExtensions()@Base" 0.8.12
- (c++)"APT::Configuration::setDefaultConfigurationForCompressors()@Base" 0.8.12
- (c++)"pkgAcqMetaClearSig::Custom600Headers()@Base" 0.8.13
- (c++)"debListParser::NewProvidesAllArch(pkgCache::VerIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.13.2
- (c++)"pkgDepCache::IsModeChangeOk(pkgDepCache::ModeList, pkgCache::PkgIterator const&, unsigned long, bool)@Base" 0.8.13.2
- (c++)"pkgCache::DepIterator::IsNegative() const@Base" 0.8.15~exp1
- (c++)"Configuration::CndSet(char const*, int)@Base" 0.8.15.3
- (c++)"pkgProblemResolver::InstOrNewPolicyBroken(pkgCache::PkgIterator)@Base" 0.8.15.3
- (c++)"DeEscapeString(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.15.4
- (c++)"GetModificationTime(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.15.6
- (c++)"pkgSourceList::GetLastModifiedTime()@Base" 0.8.15.6
- (c++)"pkgCacheGenerator::NewDepends(pkgCache::PkgIterator&, pkgCache::VerIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int const&, unsigned int const&, unsigned int*&)@Base" 0.8.15.6
- (c++)"pkgCacheFile::RemoveCaches()@Base" 0.8.15.7
- (c++)"pkgOrderList::VisitNode(pkgCache::PkgIterator, char const*)@Base" 0.8.15.7
-### external dependency resolver ###
- (c++)"edspIFType::~edspIFType()@Base" 0.8.16~exp2
- (c++)"edspSystem::Initialize(Configuration&)@Base" 0.8.16~exp2
- (c++)"edspSystem::AddStatusFiles(std::vector<pkgIndexFile*, std::allocator<pkgIndexFile*> >&)@Base" 0.8.16~exp2
- (c++)"edspSystem::ArchiveSupported(char const*)@Base" 0.8.16~exp2
- (c++)"edspSystem::Lock()@Base" 0.8.16~exp2
- (c++)"edspSystem::Score(Configuration const&)@Base" 0.8.16~exp2
- (c++)"edspSystem::UnLock(bool)@Base" 0.8.16~exp2
- (c++)"edspSystem::edspSystem()@Base" 0.8.16~exp2
- (c++)"edspSystem::~edspSystem()@Base" 0.8.16~exp2
- (c++)"edspListParser::NewVersion(pkgCache::VerIterator&)@Base" 0.8.16~exp2
- (c++)"edspListParser::Description()@Base" 0.8.16~exp2
- (c++)"edspListParser::ParseStatus(pkgCache::PkgIterator&, pkgCache::VerIterator&)@Base" 0.8.16~exp2
- (c++)"edspListParser::VersionHash()@Base" 0.8.16~exp2
- (c++)"edspListParser::Description_md5()@Base" 0.8.16~exp2
- (c++)"edspListParser::LoadReleaseInfo(pkgCache::PkgFileIterator&, FileFd&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.16~exp2
- (c++)"edspListParser::DescriptionLanguage()@Base" 0.8.16~exp2
- (c++)"edspListParser::edspListParser(FileFd*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.16~exp2
- (c++)"edspListParser::~edspListParser()@Base" 0.8.16~exp2
- (c++)"edspIndex::edspIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.16~exp2
- (c++)"edspIndex::~edspIndex()@Base" 0.8.16~exp2
- (c++)"edspIFType::CreatePkgParser(pkgCache::PkgFileIterator) const@Base" 0.8.16~exp2
- (c++)"edspSystem::CreatePM(pkgDepCache*) const@Base" 0.8.16~exp2
- (c++)"edspSystem::FindIndex(pkgCache::PkgFileIterator, pkgIndexFile*&) const@Base" 0.8.16~exp2
- (c++)"edspIndex::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.16~exp2
- (c++)"edspIndex::GetType() const@Base" 0.8.16~exp2
- (c++)"EDSP::WriteError(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, _IO_FILE*)@Base" 0.8.16~exp2
- (c++)"EDSP::ReadRequest(int, std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, bool&, bool&, bool&)@Base" 0.8.16~exp2
- (c++)"EDSP::ApplyRequest(std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, pkgDepCache&)@Base" 0.8.16~exp2
- (c++)"EDSP::ReadResponse(int, pkgDepCache&, OpProgress*)@Base" 0.8.16~exp2
- (c++)"EDSP::WriteRequest(pkgDepCache&, _IO_FILE*, bool, bool, bool, OpProgress*)@Base" 0.8.16~exp2
- (c++)"EDSP::ExecuteSolver(char const*, int*, int*)@Base" 0.8.16~exp2
- (c++)"EDSP::WriteProgress(unsigned short, char const*, _IO_FILE*)@Base" 0.8.16~exp2
- (c++)"EDSP::WriteScenario(pkgDepCache&, _IO_FILE*, OpProgress*)@Base" 0.8.16~exp2
- (c++)"EDSP::WriteSolution(pkgDepCache&, _IO_FILE*)@Base" 0.8.16~exp2
- (c++)"EDSP::ResolveExternal(char const*, pkgDepCache&, bool, bool, bool, OpProgress*)@Base" 0.8.16~exp2
- (c++)"EDSP::DepMap@Base" 0.8.16~exp2
- (c++)"EDSP::PrioMap@Base" 0.8.16~exp2
- (c++)"pkgDepCache::Policy::GetPriority(pkgCache::PkgIterator const&)@Base" 0.8.16~exp6
- (c++)"pkgDepCache::Policy::GetPriority(pkgCache::PkgFileIterator const&)@Base" 0.8.16~exp6
- (c++)"typeinfo for edspIFType@Base" 0.8.16~exp2
- (c++)"typeinfo for edspSystem@Base" 0.8.16~exp2
- (c++)"typeinfo for edspListParser@Base" 0.8.16~exp2
- (c++)"typeinfo for edspIndex@Base" 0.8.16~exp2
- (c++)"typeinfo name for edspIFType@Base" 0.8.16~exp2
- (c++)"typeinfo name for edspSystem@Base" 0.8.16~exp2
- (c++)"typeinfo name for edspListParser@Base" 0.8.16~exp2
- (c++)"typeinfo name for edspIndex@Base" 0.8.16~exp2
- (c++)"vtable for edspIFType@Base" 0.8.16~exp2
- (c++)"vtable for edspSystem@Base" 0.8.16~exp2
- (c++)"vtable for edspListParser@Base" 0.8.16~exp2
- (c++)"vtable for edspIndex@Base" 0.8.16~exp2
- edspSys@Base 0.8.16~exp2
-### generalisation of checksums (with lfs) -- mostly api-compatible available (without sha512 in previous versions)
- (c++)"AddCRC16(unsigned short, void const*, unsigned long long)@Base" 0.8.16~exp2
- (c++)"MD5Summation::Add(unsigned char const*, unsigned long long)@Base" 0.8.16~exp6
- (c++)"MD5Summation::Result()@Base" 0.8.16~exp2
- (c++)"MD5Summation::MD5Summation()@Base" 0.8.16~exp2
- (c++)"SHA1Summation::SHA1Summation()@Base" 0.8.16~exp2
- (c++)"SHA1Summation::Add(unsigned char const*, unsigned long long)@Base" 0.8.16~exp6
- (c++)"SHA1Summation::Result()@Base" 0.8.16~exp2
- (c++)"SHA256Summation::Add(unsigned char const*, unsigned long long)@Base" 0.8.16~exp6
- (c++)"SHA512Summation::Add(unsigned char const*, unsigned long long)@Base" 0.8.16~exp6
- (c++)"debRecordParser::SHA512Hash()@Base" 0.8.16~exp2
- (c++)"pkgRecords::Parser::SHA512Hash()@Base" 0.8.16~exp6
- (c++)"Hashes::AddFD(int, unsigned long long, bool, bool, bool, bool)@Base" 0.8.16~exp6
- (c++)"SummationImplementation::AddFD(int, unsigned long long)@Base" 0.8.16~exp6
- (c++)"typeinfo for MD5Summation@Base" 0.8.16~exp6
- (c++)"typeinfo for SHA1Summation@Base" 0.8.16~exp6
- (c++)"typeinfo for SHA256Summation@Base" 0.8.16~exp6
- (c++)"typeinfo for SHA512Summation@Base" 0.8.16~exp6
- (c++)"typeinfo for SHA2SummationBase@Base" 0.8.16~exp6
- (c++)"typeinfo for SummationImplementation@Base" 0.8.16~exp6
- (c++)"typeinfo name for MD5Summation@Base" 0.8.16~exp6
- (c++)"typeinfo name for SHA1Summation@Base" 0.8.16~exp6
- (c++)"typeinfo name for SHA256Summation@Base" 0.8.16~exp6
- (c++)"typeinfo name for SHA512Summation@Base" 0.8.16~exp6
- (c++)"typeinfo name for SHA2SummationBase@Base" 0.8.16~exp6
- (c++)"typeinfo name for SummationImplementation@Base" 0.8.16~exp6
- (c++)"vtable for MD5Summation@Base" 0.8.16~exp6
- (c++)"vtable for SHA1Summation@Base" 0.8.16~exp6
- (c++)"vtable for SHA256Summation@Base" 0.8.16~exp6
- (c++)"vtable for SHA512Summation@Base" 0.8.16~exp6
- (c++)"vtable for SHA2SummationBase@Base" 0.8.16~exp6
- (c++)"vtable for SummationImplementation@Base" 0.8.16~exp6
-### large file support - available in older api-compatible versions without lfs ###
- (c++)"StrToNum(char const*, unsigned long long&, unsigned int, unsigned int)@Base" 0.8.16~exp6
- (c++)"OpProgress::SubProgress(unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, float)@Base" 0.8.16~exp6
- (c++)"OpProgress::OverallProgress(unsigned long long, unsigned long long, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.16~exp6
- (c++)"OpProgress::Progress(unsigned long long)@Base" 0.8.16~exp6
- (c++)"SourceCopy::GetFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned long long&)@Base" 0.8.16~exp6
- (c++)"pkgAcqFile::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
- (c++)"pkgAcqFile::pkgAcqFile(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)@Base" 0.8.16~exp6
- (c++)"pkgAcquire::UriIterator::~UriIterator()@Base" 0.8.16~exp6
- (c++)"pkgAcquire::MethodConfig::~MethodConfig()@Base" 0.8.16~exp6
- (c++)"pkgAcquire::Item::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
- (c++)"pkgAcquire::Item::Start(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long)@Base" 0.8.16~exp6
- (c++)"pkgRecords::Parser::RecordField(char const*)@Base" 0.8.16~exp6
- (c++)"pkgTagFile::Jump(pkgTagSection&, unsigned long long)@Base" 0.8.16~exp6
- (c++)"pkgTagFile::Offset()@Base" 0.8.16~exp6
- (c++)"pkgTagFile::pkgTagFile(FileFd*, unsigned long long)@Base" 0.8.16~exp6
- (c++)"DynamicMMap::RawAllocate(unsigned long long, unsigned long)@Base" 0.8.16~exp6
- (c++)"PackageCopy::GetFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned long long&)@Base" 0.8.16~exp6
- (c++)"pkgAcqIndex::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
- (c++)"indexRecords::parseSumData(char const*&, char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned long long&)@Base" 0.8.16~exp6
- (c++)"pkgAcqArchive::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
- (c++)"pkgTagSection::~pkgTagSection()@Base" 0.8.16~exp6
- (c++)"pkgAcqSubIndex::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
- (c++)"debRecordParser::RecordField(char const*)@Base" 0.8.16~exp6
- (c++)"debReleaseIndex::SetTrusted(bool)@Base" 0.8.16~exp6
- (c++)"debReleaseIndex::debReleaseIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)@Base" 0.8.16~exp6
- (c++)"pkgAcqMetaIndex::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
- (c++)"pkgAcqIndexDiffs::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
- (c++)"pkgAcqMetaSig::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
- (c++)"pkgAcqDiffIndex::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
- (c++)"pkgAcquireStatus::Fetched(unsigned long long, unsigned long long)@Base" 0.8.16~exp6
- (c++)"PreferenceSection::~PreferenceSection()@Base" 0.8.16~exp6
- (c++)"pkgCacheGenerator::NewDescription(pkgCache::DescIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, HashSumValue<128> const&, unsigned int)@Base" 0.8.16~exp6
- (c++)"pkgProblemResolver::ResolveInternal(bool)@Base" 0.8.16~exp6
- (c++)"pkgProblemResolver::ResolveByKeepInternal()@Base" 0.8.16~exp6
- (c++)"FileFd::Read(void*, unsigned long long, unsigned long long*)@Base" 0.8.16~exp6
- (c++)"FileFd::Seek(unsigned long long)@Base" 0.8.16~exp6
- (c++)"FileFd::Skip(unsigned long long)@Base" 0.8.16~exp6
- (c++)"FileFd::Write(void const*, unsigned long long)@Base" 0.8.16~exp6
- (c++)"FileFd::Truncate(unsigned long long)@Base" 0.8.16~exp6
- (c++)"pkgPolicy::GetPriority(pkgCache::PkgFileIterator const&)@Base" 0.8.16~exp6
- (c++)"OptionalIndexTarget::IsOptional() const@Base" 0.8.16~exp6
- (c++)"typeinfo for pkgTagFile@Base" 0.8.16~exp6
- (c++)"typeinfo for IndexTarget@Base" 0.8.16~exp6
- (c++)"typeinfo for pkgSrcRecords@Base" 0.8.16~exp6
- (c++)"typeinfo for OptionalIndexTarget@Base" 0.8.16~exp6
- (c++)"typeinfo for pkgAcquire::UriIterator@Base" 0.8.16~exp6
- (c++)"typeinfo for pkgAcquire::MethodConfig@Base" 0.8.16~exp6
- (c++)"typeinfo for pkgAcquire::Queue@Base" 0.8.16~exp6
- (c++)"typeinfo for pkgAcquire::Worker@Base" 0.8.16~exp6
- (c++)"typeinfo name for pkgTagFile@Base" 0.8.16~exp6
- (c++)"typeinfo name for IndexTarget@Base" 0.8.16~exp6
- (c++)"typeinfo name for pkgSrcRecords@Base" 0.8.16~exp6
- (c++)"typeinfo name for OptionalIndexTarget@Base" 0.8.16~exp6
- (c++)"typeinfo name for pkgAcquire::UriIterator@Base" 0.8.16~exp6
- (c++)"typeinfo name for pkgAcquire::MethodConfig@Base" 0.8.16~exp6
- (c++)"typeinfo name for pkgAcquire::Queue@Base" 0.8.16~exp6
- (c++)"typeinfo name for pkgAcquire::Worker@Base" 0.8.16~exp6
- (c++)"vtable for pkgTagFile@Base" 0.8.16~exp6
- (c++)"vtable for IndexTarget@Base" 0.8.16~exp6
- (c++)"vtable for pkgSrcRecords@Base" 0.8.16~exp6
- (c++)"vtable for OptionalIndexTarget@Base" 0.8.16~exp6
- (c++)"vtable for pkgAcquire::UriIterator@Base" 0.8.16~exp6
- (c++)"vtable for pkgAcquire::MethodConfig@Base" 0.8.16~exp6
- (c++)"vtable for pkgAcquire::Queue@Base" 0.8.16~exp6
- (c++)"vtable for pkgAcquire::Worker@Base" 0.8.16~exp6
-### remove deprecated parameter
- (c++)"pkgDepCache::SetCandidateVersion(pkgCache::VerIterator)@Base" 0.8.16~exp6
- (c++)"pkgDepCache::AddSizes(pkgCache::PkgIterator const&, bool)@Base" 0.8.16~exp6
- (c++)"pkgDepCache::AddStates(pkgCache::PkgIterator const&, bool)@Base" 0.8.16~exp6
-### used internally by public interfaces - if you use them directly, you can keep the pieces
- (c++|optional=internal|regex)"^SHA256_.*@Base$" 0.8.16~exp2
- (c++|optional=internal|regex)"^SHA384_.*@Base$" 0.8.16~exp2
- (c++|optional=internal|regex)"^SHA512_.*@Base$" 0.8.16~exp2
-### orderlist rework: the touched methods are protected
- (c++)"SigINT(int)@Base" 0.8.16~exp14
- (c++)"pkgPackageManager::SigINTStop@Base" 0.8.16~exp14
- (c++)"pkgPackageManager::SmartUnPack(pkgCache::PkgIterator, bool, int)@Base" 0.8.16~exp14
- (c++)"pkgPackageManager::SmartConfigure(pkgCache::PkgIterator, int)@Base" 0.8.16~exp14
-### FileFd rework: supporting different on-the-fly (de)compressing needs more parameter (abi), but the api is stable
- (c++)"FileFd::OpenDescriptor(int, unsigned int, FileFd::CompressMode, bool)@Base" 0.8.16~exp9
- (c++)"FileFd::OpenDescriptor(int, unsigned int, APT::Configuration::Compressor const&, bool)@Base" 0.8.16~exp9
- (c++)"FileFd::ModificationTime()@Base" 0.8.16~exp9
- (c++)"FileFd::Open(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, FileFd::CompressMode, unsigned long)@Base" 0.8.16~exp9
- (c++)"FileFd::Open(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, APT::Configuration::Compressor const&, unsigned long)@Base" 0.8.16~exp9
- (c++)"FileFd::ReadLine(char*, unsigned long long)@Base" 0.8.16~exp9
- (c++)"SummationImplementation::AddFD(FileFd&, unsigned long long)@Base" 0.8.16~exp9
- (c++)"Hashes::AddFD(FileFd&, unsigned long long, bool, bool, bool, bool)@Base" 0.8.16~exp9
- (c++|optional=deprecated,previous-inline)"FileFd::gzFd()@Base" 0.8.0
-### CacheSet rework: making them real containers breaks bigtime the API (for the CacheSetHelper)
- (c++)"APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::const_iterator::getPkg() const@Base" 0.8.16~exp9
- (c++)"APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::getConstructor() const@Base" 0.8.16~exp9
- (c++)"APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::empty() const@Base" 0.8.16~exp9
- (c++)"APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::const_iterator::getPkg() const@Base" 0.8.16~exp9
- (c++)"APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::getConstructor() const@Base" 0.8.16~exp9
- (c++)"APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::empty() const@Base" 0.8.16~exp9
- (c++)"APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::empty() const@Base" 0.8.16~exp9
- (c++)"APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator::getVer() const@Base" 0.8.16~exp9
- (c++)"APT::CacheSetHelper::canNotFindTask(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.16~exp9
- (c++)"APT::CacheSetHelper::canNotFindRegEx(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.16~exp9
- (c++)"APT::CacheSetHelper::canNotFindAllVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.16~exp9
- (c++)"APT::CacheSetHelper::canNotFindPackage(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.16~exp9
- (c++)"APT::CacheSetHelper::showTaskSelection(pkgCache::PkgIterator const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.16~exp9
- (c++)"APT::CacheSetHelper::showRegExSelection(pkgCache::PkgIterator const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.16~exp9
- (c++)"APT::CacheSetHelper::showSelectedVersion(pkgCache::PkgIterator const&, pkgCache::VerIterator, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)@Base" 0.8.16~exp9
- (c++)"APT::CacheSetHelper::canNotFindCandInstVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.16~exp9
- (c++)"APT::CacheSetHelper::canNotFindInstCandVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.16~exp9
- (c++)"APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::setConstructor(APT::PackageContainerInterface::Constructor const&)@Base" 0.8.16~exp9
- (c++)"APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::clear()@Base" 0.8.16~exp9
- (c++)"APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::insert(pkgCache::PkgIterator const&)@Base" 0.8.16~exp9
- (c++)"APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::setConstructor(APT::PackageContainerInterface::Constructor const&)@Base" 0.8.16~exp9
- (c++)"APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::clear()@Base" 0.8.16~exp9
- (c++)"APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::insert(pkgCache::PkgIterator const&)@Base" 0.8.16~exp9
- (c++)"APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::clear()@Base" 0.8.16~exp9
- (c++)"APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::insert(pkgCache::VerIterator const&)@Base" 0.8.16~exp9
- (c++)"APT::PackageContainerInterface::FromString(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
- (c++)"APT::PackageContainerInterface::FromCommandLine(APT::PackageContainerInterface*, pkgCacheFile&, char const**, APT::CacheSetHelper&)@Base" 0.8.16~exp9
- (c++)"APT::PackageContainerInterface::FromModifierCommandLine(unsigned short&, APT::PackageContainerInterface*, pkgCacheFile&, char const*, std::list<APT::PackageContainerInterface::Modifier, std::allocator<APT::PackageContainerInterface::Modifier> > const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
- (c++)"APT::PackageContainerInterface::FromName(pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
- (c++)"APT::PackageContainerInterface::FromTask(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, APT::CacheSetHelper&)@Base" 0.8.16~exp9
- (c++)"APT::PackageContainerInterface::FromRegEx(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, APT::CacheSetHelper&)@Base" 0.8.16~exp9
- (c++)"APT::VersionContainerInterface::FromString(APT::VersionContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, APT::VersionContainerInterface::Version const&, APT::CacheSetHelper&, bool)@Base" 0.8.16~exp9
- (c++)"APT::VersionContainerInterface::FromPackage(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&, APT::VersionContainerInterface::Version const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
- (c++)"APT::VersionContainerInterface::FromCommandLine(APT::VersionContainerInterface*, pkgCacheFile&, char const**, APT::VersionContainerInterface::Version const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
- (c++)"APT::VersionContainerInterface::getCandidateVer(pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
- (c++)"APT::VersionContainerInterface::getInstalledVer(pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
- (c++)"APT::VersionContainerInterface::FromModifierCommandLine(unsigned short&, APT::VersionContainerInterface*, pkgCacheFile&, char const*, std::list<APT::VersionContainerInterface::Modifier, std::allocator<APT::VersionContainerInterface::Modifier> > const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
- (c++)"EDSP::WriteLimitedScenario(pkgDepCache&, _IO_FILE*, APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > > const&, OpProgress*)@Base" 0.8.16~exp9
- (c++)"typeinfo for APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::const_iterator@Base" 0.8.16~exp9
- (c++)"typeinfo for APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >@Base" 0.8.16~exp9
- (c++)"typeinfo for APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::const_iterator@Base" 0.8.16~exp9
- (c++)"typeinfo for APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >@Base" 0.8.16~exp9
- (c++)"typeinfo for APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator@Base" 0.8.16~exp9
- (c++)"typeinfo for APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >@Base" 0.8.16~exp9
- (c++)"typeinfo for APT::PackageContainerInterface::const_iterator@Base" 0.8.16~exp9
- (c++)"typeinfo for APT::PackageContainerInterface@Base" 0.8.16~exp9
- (c++)"typeinfo for APT::VersionContainerInterface::const_iterator@Base" 0.8.16~exp9
- (c++)"typeinfo for APT::VersionContainerInterface@Base" 0.8.16~exp9
- (c++)"typeinfo name for APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::const_iterator@Base" 0.8.16~exp9
- (c++)"typeinfo name for APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >@Base" 0.8.16~exp9
- (c++)"typeinfo name for APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::const_iterator@Base" 0.8.16~exp9
- (c++)"typeinfo name for APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >@Base" 0.8.16~exp9
- (c++)"typeinfo name for APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator@Base" 0.8.16~exp9
- (c++)"typeinfo name for APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >@Base" 0.8.16~exp9
- (c++)"typeinfo name for APT::PackageContainerInterface::const_iterator@Base" 0.8.16~exp9
- (c++)"typeinfo name for APT::PackageContainerInterface@Base" 0.8.16~exp9
- (c++)"typeinfo name for APT::VersionContainerInterface::const_iterator@Base" 0.8.16~exp9
- (c++)"typeinfo name for APT::VersionContainerInterface@Base" 0.8.16~exp9
- (c++)"vtable for APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::const_iterator@Base" 0.8.16~exp9
- (c++)"vtable for APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >@Base" 0.8.16~exp9
- (c++)"vtable for APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::const_iterator@Base" 0.8.16~exp9
- (c++)"vtable for APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >@Base" 0.8.16~exp9
- (c++)"vtable for APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator@Base" 0.8.16~exp9
- (c++)"vtable for APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >@Base" 0.8.16~exp9
- (c++)"vtable for APT::PackageContainerInterface::const_iterator@Base" 0.8.16~exp9
- (c++)"vtable for APT::PackageContainerInterface@Base" 0.8.16~exp9
- (c++)"vtable for APT::VersionContainerInterface::const_iterator@Base" 0.8.16~exp9
- (c++)"vtable for APT::VersionContainerInterface@Base" 0.8.16~exp9
-### rework of the packagemanager rework
- (c++)"APT::Progress::PackageManager::ConffilePrompt(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManager::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerFancy::HandleSIGWINCH(int)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerFancy::~PackageManagerFancy()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerFancy::PackageManagerFancy()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerFancy::SetupTerminalScrollArea(int)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerFancy::StatusChanged(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerFancy::Stop()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManager::fork()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManager::GetPulseInterval()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManager::~PackageManager()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressDeb822Fd::ConffilePrompt(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressDeb822Fd::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressDeb822Fd::~PackageManagerProgressDeb822Fd()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressDeb822Fd::PackageManagerProgressDeb822Fd(int)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressDeb822Fd::StartDpkg()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressDeb822Fd::StatusChanged(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressDeb822Fd::Stop()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressDeb822Fd::WriteToStatusFd(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressFactory()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressFd::ConffilePrompt(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressFd::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressFd::~PackageManagerProgressFd()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressFd::PackageManagerProgressFd(int)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressFd::StartDpkg()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressFd::StatusChanged(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressFd::Stop()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerProgressFd::WriteToStatusFd(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManager::Pulse()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManager::StartDpkg()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManager::StatusChanged(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManager::Stop()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerText::~PackageManagerText()@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerText::StatusChanged(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
- (c++)"APT::String::Strip(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.9.13~exp1
- (c++)"APT::Upgrade::Upgrade(pkgDepCache&, int)@Base" 0.9.13~exp1
- (c++)"pkgDPkgPM::BuildPackagesProgressMap()@Base" 0.9.13~exp1
- (c++)"pkgDPkgPM::DoDpkgStatusFd(int)@Base" 0.9.13~exp1
- (c++)"pkgDPkgPM::GoNoABIBreak(APT::Progress::PackageManager*)@Base" 0.9.13~exp1
- (c++)"pkgDPkgPM::ProcessDpkgStatusLine(char*)@Base" 0.9.13~exp1
- (c++)"pkgDPkgPM::StartPtyMagic()@Base" 0.9.13~exp1
- (c++)"pkgDPkgPM::StopPtyMagic()@Base" 0.9.13~exp1
- (c++)"typeinfo for APT::Progress::PackageManager@Base" 0.9.13~exp1
- (c++)"typeinfo for APT::Progress::PackageManagerFancy@Base" 0.9.13~exp1
- (c++)"typeinfo for APT::Progress::PackageManagerProgressDeb822Fd@Base" 0.9.13~exp1
- (c++)"typeinfo for APT::Progress::PackageManagerProgressFd@Base" 0.9.13~exp1
- (c++)"typeinfo for APT::Progress::PackageManagerText@Base" 0.9.13~exp1
- (c++)"typeinfo name for APT::Progress::PackageManager@Base" 0.9.13~exp1
- (c++)"typeinfo name for APT::Progress::PackageManagerFancy@Base" 0.9.13~exp1
- (c++)"typeinfo name for APT::Progress::PackageManagerProgressDeb822Fd@Base" 0.9.13~exp1
- (c++)"typeinfo name for APT::Progress::PackageManagerProgressFd@Base" 0.9.13~exp1
- (c++)"typeinfo name for APT::Progress::PackageManagerText@Base" 0.9.13~exp1
- (c++)"vtable for APT::Progress::PackageManager@Base" 0.9.13~exp1
- (c++)"vtable for APT::Progress::PackageManagerFancy@Base" 0.9.13~exp1
- (c++)"vtable for APT::Progress::PackageManagerProgressDeb822Fd@Base" 0.9.13~exp1
- (c++)"vtable for APT::Progress::PackageManagerProgressFd@Base" 0.9.13~exp1
- (c++)"vtable for APT::Progress::PackageManagerText@Base" 0.9.13~exp1
- (c++)"APT::Progress::PackageManagerFancy::instances@Base" 0.9.14.2
- (c++)"APT::Progress::PackageManagerFancy::Start(int)@Base" 0.9.14.2
- (c++)"APT::Progress::PackageManagerFancy::staticSIGWINCH(int)@Base" 0.9.14.2
- (c++)"APT::Progress::PackageManager::Start(int)@Base" 0.9.14.2
-### client-side merged pdiffs
- (c++)"pkgAcqIndexMergeDiffs::DescURI()@Base" 0.9.14.3~exp1
- (c++)"pkgAcqIndexMergeDiffs::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.9.14.3~exp1
- (c++)"pkgAcqIndexMergeDiffs::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.9.14.3~exp1
- (c++)"pkgAcqIndexMergeDiffs::~pkgAcqIndexMergeDiffs()@Base" 0.9.14.3~exp1
- (c++)"pkgAcqIndexMergeDiffs::pkgAcqIndexMergeDiffs(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, HashString const&, DiffInfo const&, std::vector<pkgAcqIndexMergeDiffs*, std::allocator<pkgAcqIndexMergeDiffs*> > const*)@Base" 0.9.14.3~exp1
- (c++)"typeinfo for pkgAcqIndexMergeDiffs@Base" 0.9.14.3~exp1
- (c++)"typeinfo name for pkgAcqIndexMergeDiffs@Base" 0.9.14.3~exp1
- (c++)"vtable for pkgAcqIndexMergeDiffs@Base" 0.9.14.3~exp1
-### deb822 sources.list format
- (c++)"pkgSourceList::ParseFileDeb822(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.14.3~exp1
- (c++)"pkgSourceList::ParseFileOldStyle(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.14.3~exp1
- (c++)"pkgSourceList::Type::ParseStanza(std::vector<metaIndex*, std::allocator<metaIndex*> >&, pkgTagSection&, int, FileFd&)@Base" 0.9.14.3~exp1
-### mixed stuff
- (c++)"GetListOfFilesInDir(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)@Base" 0.8.16~exp13
- (c++)"pkgCache::DepIterator::IsIgnorable(pkgCache::PkgIterator const&) const@Base" 0.8.16~exp10
- (c++)"pkgCache::DepIterator::IsIgnorable(pkgCache::PrvIterator const&) const@Base" 0.8.16~exp10
- (c++)"FileFd::Write(int, void const*, unsigned long long)@Base" 0.8.16~exp14
- (c++)"pkgTagSection::Exists(char const*)@Base" 0.9.7.9~exp1
- (c++)"_strrstrip(char*)@Base" 0.9.7.9~exp2
- (c++)"SplitClearSignedFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, FileFd*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*, FileFd*)@Base" 0.9.7.9~exp2
- (c++)"OpenMaybeClearSignedFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, FileFd&)@Base" 0.9.7.9~exp2
- (c++)"ExecGPGV(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&, int*)@Base" 0.9.7.9~exp2
- (c++)"SigVerify::RunGPGV(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&)@Base" 0.9.7.9~exp2
- (c++)"Configuration::Dump(std::basic_ostream<char, std::char_traits<char> >&, char const*, char const*, bool)@Base" 0.9.3
- (c++)"AcquireUpdate(pkgAcquire&, int, bool, bool)@Base" 0.9.3
- (c++)"pkgCache::DepIterator::IsMultiArchImplicit() const@Base" 0.9.6
- (c++)"pkgCache::PrvIterator::IsMultiArchImplicit() const@Base" 0.9.6
- (c++)"APT::PackageContainerInterface::FromGroup(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, APT::CacheSetHelper&)@Base" 0.9.7
- (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::PackageArchitectureMatchesSpecification(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)@Base" 0.9.7
- (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::~PackageArchitectureMatchesSpecification()@Base" 0.9.7
- (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::operator()(pkgCache::PkgIterator const&)@Base" 0.9.7
- (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::operator()(pkgCache::VerIterator const&)@Base" 0.9.7
- (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::operator()(char const* const&)@Base" 0.9.7
- (c++)"APT::Configuration::checkLanguage(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)@Base" 0.9.7.5
- (c++)"pkgCdrom::DropTranslation(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)@Base" 0.9.7.5
- (c++)"pkgCache::DepIterator::IsSatisfied(pkgCache::PrvIterator const&) const@Base" 0.9.8
- (c++)"pkgCache::DepIterator::IsSatisfied(pkgCache::VerIterator const&) const@Base" 0.9.8
- (c++)"pkgCacheGenerator::NewDepends(pkgCache::PkgIterator&, pkgCache::VerIterator&, unsigned int, unsigned int const&, unsigned int const&, unsigned int*&)@Base" 0.9.8
- (c++)"pkgCacheGenerator::NewVersion(pkgCache::VerIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned long, unsigned long)@Base" 0.9.8
- (c++)"operator<<(std::basic_ostream<char, std::char_traits<char> >&, GlobalError::Item)@Base" 0.9.9
- (c++)"pkgDepCache::IsDeleteOkProtectInstallRequests(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 0.9.9.1
- (c++)"pkgDepCache::IsInstallOkMultiArchSameVersionSynced(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 0.9.9.1
- (c++)"pkgDPkgPM::SendPkgsInfo(_IO_FILE*, unsigned int const&)@Base" 0.9.9.1
- (c++)"pkgCache::VerIterator::MultiArchType() const@Base" 0.9.9.1
- (c++)"CommandLine::GetCommand(CommandLine::Dispatch const*, unsigned int, char const* const*)@Base" 0.9.11
- (c++)"CommandLine::MakeArgs(char, char const*, char const*, unsigned long)@Base" 0.9.11
- (c++)"Configuration::Clear()@Base" 0.9.11
- (c++)"Glob(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)@Base" 0.9.11
- (c++)"APT::CacheFilter::PackageNameMatchesFnmatch::operator()(pkgCache::GrpIterator const&)@Base" 0.9.11
- (c++)"APT::CacheFilter::PackageNameMatchesFnmatch::operator()(pkgCache::PkgIterator const&)@Base" 0.9.11
- (c++)"APT::PackageContainerInterface::FromFnmatch(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, APT::CacheSetHelper&)@Base" 0.9.11
- (c++)"pkgTagSection::pkgTagSection()@Base" 0.9.11
- (c++)"strv_length(char const**)@Base" 0.9.11
- (c++)"StringSplit(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)@Base" 0.9.11.3
- (c++)"pkgAcquire::Item::RenameOnError(pkgAcquire::Item::RenameOnErrorState)@Base" 0.9.12
- (c++)"APT::String::Endswith(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.9.13.1
- (c++)"ExecFork(std::set<int, std::less<int>, std::allocator<int> >)@Base" 0.9.13.1
- (c++)"MergeKeepFdsFromConfiguration(std::set<int, std::less<int>, std::allocator<int> >&)@Base" 0.9.13.1
- (c++)"HashString::FromFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13.1
- (c++)"HashString::GetHashForFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.9.13.1
- (c++)"indexRecords::GetSuite() const@Base" 0.9.13.2
- (c++)"GetTempDir()@Base" 0.9.14.2
- (c++)"APT::Configuration::getBuildProfiles()@Base" 0.9.16
- (c++)"APT::Configuration::getBuildProfilesString()@Base" 0.9.16
- (c++)"Configuration::FindVector(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.9.16
- (c++)"debListParser::ParseDepends(char const*, char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int&)@Base" 0.9.16
- (c++)"debListParser::ParseDepends(char const*, char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int&, bool const&)@Base" 0.9.16
- (c++)"debListParser::ParseDepends(char const*, char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int&, bool const&, bool const&, bool const&)@Base" 0.9.16
- (c++)"pkgCacheGenerator::ListParser::SameVersion(unsigned short, pkgCache::VerIterator const&)@Base" 0.9.16
- (c++)"Rename(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.16
- (c++)"pkgDepCache::IsInstallOkDependenciesSatisfiableByCandidates(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 1.0
- (c++)"APT::Progress::PackageManagerFancy::GetTerminalSize()@Base" 1.0
- (c++)"APT::Progress::PackageManagerFancy::GetTextProgressStr(float, int)@Base" 1.0
- (c++)"pkgCdromStatus::GetOpProgress()@Base" 1.0
- (c++)"pkgCdromStatus::SetTotal(int)@Base" 1.0
- (c++)"EDSP::ExecuteSolver(char const*, int*, int*, bool)@Base" 1.0.4
- (c++)"pkgPackageManager::EarlyRemove(pkgCache::PkgIterator, pkgCache::DepIterator const*)@Base" 1.0.4
- (c++)"debTranslationsParser::Architecture()@Base" 1.0.4
- (c++)"debTranslationsParser::~debTranslationsParser()@Base" 1.0.4
- (c++)"debTranslationsParser::Version()@Base" 1.0.4
- (c++)"typeinfo for debTranslationsParser@Base" 1.0.4
- (c++)"typeinfo name for debTranslationsParser@Base" 1.0.4
- (c++)"vtable for debTranslationsParser@Base" 1.0.4
-### demangle strangeness - buildd report it as MISSING and as new…
- (c++)"pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<IndexTarget*, std::allocator<IndexTarget*> > const*, indexRecords*)@Base" 0.8.0
-### gcc-4.6 artefacts
-# (c++|optional=implicit)"HashString::operator=(HashString const&)@Base" 0.8.0
-# (c++|optional=implicit)"HashString::HashString(HashString const&)@Base" 0.8.0
-# (c++|optional=inline)"APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator std::max_element<APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator, CompareProviders>(APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator, APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator, CompareProviders)@Base" 0.8.0
-# (c++|optional=inline)"pkgCache::VerIterator::ParentPkg() const@Base" 0.8.0
-### gcc-4.8 artefacts
-# (c++|optional=implicit)"debSLTypeDebian::~debSLTypeDebian()@Base" 0.8.0
-### empty destructors included in the .h file
-# (c++|optional=inline)"pkgVersioningSystem::~pkgVersioningSystem()@Base" 0.8.0
-# (c++|optional=inline)"pkgSystem::~pkgSystem()@Base" 0.8.0
-# (c++|optional=inline)"pkgRecords::Parser::~Parser()@Base" 0.8.0
-# (c++|optional=inline)"pkgSrcRecords::Parser::~Parser()@Base" 0.8.0
-# (c++|optional=inline)"pkgIndexFile::Type::~Type()@Base" 0.8.0
-# (c++|optional=inline)"pkgSourceList::Type::~Type()@Base" 0.8.0
-# (c++|optional=inline)"pkgIndexFile::~pkgIndexFile()@Base" 0.8.0
-# (c++|optional=inline)"pkgCacheGenerator::ListParser::~ListParser()@Base" 0.8.0
-# (c++|optional=inline)"pkgAcquireStatus::~pkgAcquireStatus()@Base" 0.8.0
-# (c++|optional=inline)"metaIndex::~metaIndex()@Base" 0.8.0
-# (c++|optional=inline)"IndexCopy::~IndexCopy()@Base" 0.8.0
-### std library artefacts
- (c++|regex|optional=std)"^std::vector<DiffInfo, .+@Base$" 0.8.0
- (c++|regex|optional=std)"^std::vector<.+ >::(vector|push_back|erase|_[^ ]+)\(.+\)( const|)@Base$" 0.8.0
- (c++|optional=std)"char* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_construct<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<char> const&, std::forward_iterator_tag)@Base" 0.8.0
- (c++|optional=std)"char* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_construct<__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<char> const&, std::forward_iterator_tag)@Base" 0.8.0
- (c++|optional=std)"char* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag)@Base" 0.8.0
- (c++|optional=std)"char* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_construct<char*>(char*, char*, std::allocator<char> const&, std::forward_iterator_tag)@Base" 0.8.0
-### try to ignore std:: template instances
- (c++|regex|optional=std)"^(void |)std::[^ ]+<.+ >::(_|~).+\(.*\)@Base$" 0.8.0
- (c++|regex|optional=std)"^std::[^ ]+<.+ >::(append|insert|reserve|operator[^ ]+)\(.*\)@Base$" 0.8.0
- (c++|regex|optional=std)"^(void |DiffInfo\* |)std::_.*@Base$" 0.8.0
- (c++|regex|optional=std)"^std::reverse_iterator<.+ > std::__.+@Base$" 0.8.0
- (c++|regex|optional=std)"^std::basic_string<.+ >\(.+\)@Base$" 0.8.0
- (c++|regex|optional=std)"^__gnu_cxx::__[^ ]+<.*@Base$" 0.8.0
- (c++|regex|optional=std)"^typeinfo name for std::iterator<.*>@Base$" 0.8.0
- (c++|regex|optional=std)"^typeinfo for std::iterator<.*>@Base$" 0.8.0
- (c++|optional=std)"std::ctype<char>::do_widen(char) const@Base" 1.0.3
--- /dev/null
+bin/libapt-pkg*.so.* usr/lib/@DEB_HOST_MULTIARCH@/
+usr/share/locale/*/*/libapt-pkg*.mo
--- /dev/null
+libapt-pkg.so.4.13 libapt-pkg4.13 #MINVER#
+* Build-Depends-Package: libapt-pkg-dev
+ TFRewritePackageOrder@Base 0.8.0
+ TFRewriteSourceOrder@Base 0.8.0
+ (c++)"FileExists(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"IdentCdrom(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int)@Base" 0.8.0
+ (c++)"ListUpdate(pkgAcquireStatus&, pkgSourceList&, int)@Base" 0.8.0
+ (c++)"MountCdrom(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"ParseCWord(char const*&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0.8.0
+ (c++)"ReadPinDir(pkgPolicy&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"RunScripts(char const*)@Base" 0.8.0
+ (c++)"SafeGetCWD()@Base" 0.8.0
+ (c++)"parsenetrc(char*, char*, char*, char*)@Base" 0.8.0
+ (c++)"QuoteString(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)@Base" 0.8.0
+ (c++)"ReadPinFile(pkgPolicy&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"RegexChoice(RxChoiceList*, char const**, char const**)@Base" 0.8.0
+ (c++)"SetNonBlock(int, bool)@Base" 0.8.0
+ (c++)"flExtension(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"Base64Encode(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"ReadMessages(int, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)@Base" 0.8.0
+ (c++)"SetCloseExec(int, bool)@Base" 0.8.0
+ (c++)"StringToBool(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)@Base" 0.8.0
+ (c++)"UnmountCdrom(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"_GetErrorObj()@Base" 0.8.0
+ (c++)"pkgFixBroken(pkgDepCache&)@Base" 0.8.0
+ (c++)"DeQuoteString(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&)@Base" 0.8.0
+ (c++)"DeQuoteString(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"OutputInDepth(unsigned long, char const*)@Base" 0.8.0
+ (c++)"ReadConfigDir(Configuration&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, unsigned int const&)@Base" 0.8.0
+ (c++)"URItoFileName(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"UTF8ToCodeset(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >*)@Base" 0.8.0
+ (c++)"pkgAllUpgrade(pkgDepCache&)@Base" 0.8.0
+ (c++)"pkgInitConfig(Configuration&)@Base" 0.8.0
+ (c++)"pkgInitSystem(Configuration&, pkgSystem*&)@Base" 0.8.0
+ (c++)"safe_snprintf(char*, char*, char const*, ...)@Base" 0.8.0
+ (c++)"stringcasecmp(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char const*, char const*)@Base" 0.8.0
+ (c++)"stringcasecmp(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)@Base" 0.8.0
+ (c++)"stringcasecmp(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)@Base" 0.8.0
+ (c++)"stringcasecmp(char const*, char const*, char const*, char const*)@Base" 0.8.0
+ (c++)"tolower_ascii(int)@Base" 0.8.0
+ (c++)"ParseQuoteWord(char const*&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0.8.0
+ (c++)"ReadConfigFile(Configuration&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, unsigned int const&)@Base" 0.8.0
+ (c++)"TokSplitString(char, char*, char**, unsigned long)@Base" 0.8.0
+ (c++)"maybe_add_auth(URI&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgApplyStatus(pkgDepCache&)@Base" 0.8.0
+ (c++)"pkgDistUpgrade(pkgDepCache&)@Base" 0.8.0
+ (c++)"CheckDomainList(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"CreateDirectory(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"DirectoryExists(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"VectorizeString(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const&)@Base" 0.8.0
+ (c++)"pkgPrioSortList(pkgCache&, pkgCache::Version**)@Base" 0.8.0
+ (c++)"pkgMakeStatusCache(pkgSourceList&, OpProgress&, MMap**, bool)@Base" 0.8.0
+ (c++)"pkgMinimizeUpgrade(pkgDepCache&)@Base" 0.8.0
+ (c++)"GetListOfFilesInDir(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool const&)@Base" 0.8.0
+ (c++)"GetListOfFilesInDir(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&)@Base" 0.8.0
+ (c++)"pkgMakeOnlyStatusCache(OpProgress&, DynamicMMap**)@Base" 0.8.0
+ (c++)"WaitFd(int, bool, unsigned long)@Base" 0.8.0
+ (c++)"GetLock(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)@Base" 0.8.0
+ (c++)"Hex2Num(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned char*, unsigned int)@Base" 0.8.0
+ (c++)"CopyFile(FileFd&, FileFd&)@Base" 0.8.0
+ (c++)"ExecFork()@Base" 0.8.0
+ (c++)"ExecWait(int, char const*, bool)@Base" 0.8.0
+ (c++)"StrToNum(char const*, unsigned long&, unsigned int, unsigned int)@Base" 0.8.0
+ (c++)"SubstVar(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"SubstVar(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, SubstVar const*)@Base" 0.8.0
+ (c++)"flNoLink(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"flNotDir(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"ioprintf(std::basic_ostream<char, std::char_traits<char> >&, char const*, ...)@Base" 0.8.0
+ (c++)"IsMounted(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0.8.0
+ (c++)"LookupTag(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, char const*)@Base" 0.8.0
+ (c++)"SizeToStr(double)@Base" 0.8.0
+ (c++)"TFRewrite(_IO_FILE*, pkgTagSection const&, char const**, TFRewriteData*)@Base" 0.8.0
+ (c++)"TimeToStr(unsigned long)@Base" 0.8.0
+ (c++)"_strstrip(char*)@Base" 0.8.0
+ (c++)"flCombine(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"flNotFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"stringcmp(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char const*, char const*)@Base" 0.8.0
+ (c++)"stringcmp(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)@Base" 0.8.0
+ (c++)"stringcmp(char const*, char const*, char const*, char const*)@Base" 0.8.0
+ (c++)"strprintf(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char const*, ...)@Base" 0.8.0
+ (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::DepIterator>::toReMap@Base" 0.8.0
+ (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::GrpIterator>::toReMap@Base" 0.8.0
+ (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::PkgIterator>::toReMap@Base" 0.8.0
+ (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::PrvIterator>::toReMap@Base" 0.8.0
+ (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::VerIterator>::toReMap@Base" 0.8.0
+ (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::DescIterator>::toReMap@Base" 0.8.0
+ (c++)"guard variable for pkgCacheGenerator::Dynamic<pkgCache::PkgFileIterator>::toReMap@Base" 0.8.0
+ (c++)"HashString::SupportedHashes()@Base" 0.8.0
+ (c++)"HashString::_SupportedHashes@Base" 0.8.0
+ (c++)"HashString::HashString(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"HashString::HashString(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"HashString::HashString()@Base" 0.8.0
+ (c++)"HashString::~HashString()@Base" 0.8.0
+ (c++)"OpProgress::CheckChange(float)@Base" 0.8.0
+ (c++)"OpProgress::Done()@Base" 0.8.0
+ (c++)"OpProgress::Update()@Base" 0.8.0
+ (c++)"OpProgress::OpProgress()@Base" 0.8.0
+ (c++)"OpProgress::~OpProgress()@Base" 0.8.0
+ (c++)"SourceCopy::GetFileName()@Base" 0.8.0
+ (c++)"SourceCopy::RewriteEntry(_IO_FILE*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"SourceCopy::Type()@Base" 0.8.0
+ (c++)"SourceCopy::~SourceCopy()@Base" 0.8.0
+ (c++)"pkgAcqFile::Custom600Headers()@Base" 0.8.0
+ (c++)"pkgAcqFile::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
+ (c++)"pkgAcqFile::DescURI()@Base" 0.8.0
+ (c++)"pkgAcqFile::HashSum()@Base" 0.8.0
+ (c++)"pkgAcqFile::~pkgAcqFile()@Base" 0.8.0
+ (c++)"pkgAcquire::WorkerStep(pkgAcquire::Worker*)@Base" 0.8.0
+ (c++)"pkgAcquire::FetchNeeded()@Base" 0.8.0
+ (c++)"pkgAcquire::TotalNeeded()@Base" 0.8.0
+ (c++)"pkgAcquire::MethodConfig::MethodConfig()@Base" 0.8.0
+ (c++)"pkgAcquire::PartialPresent()@Base" 0.8.0
+ (c++)"pkgAcquire::Add(pkgAcquire::Item*)@Base" 0.8.0
+ (c++)"pkgAcquire::Add(pkgAcquire::Worker*)@Base" 0.8.0
+ (c++)"pkgAcquire::Run(int)@Base" 0.8.0
+ (c++)"pkgAcquire::Bump()@Base" 0.8.0
+ (c++)"pkgAcquire::Item::Custom600Headers()@Base" 0.8.0
+ (c++)"pkgAcquire::Item::ReportMirrorFailure(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcquire::Item::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
+ (c++)"pkgAcquire::Item::Rename(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcquire::Item::HashSum()@Base" 0.8.0
+ (c++)"pkgAcquire::Item::Finished()@Base" 0.8.0
+ (c++)"pkgAcquire::Item::IsTrusted()@Base" 0.8.0
+ (c++)"pkgAcquire::Item::ShortDesc()@Base" 0.8.0
+ (c++)"pkgAcquire::Item::Item(pkgAcquire*)@Base" 0.8.0
+ (c++)"pkgAcquire::Item::~Item()@Base" 0.8.0
+ (c++)"pkgAcquire::Clean(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcquire::Queue::Bump()@Base" 0.8.0
+ (c++)"pkgAcquire::Queue::Cycle()@Base" 0.8.0
+ (c++)"pkgAcquire::Queue::Dequeue(pkgAcquire::Item*)@Base" 0.8.0
+ (c++)"pkgAcquire::Queue::Enqueue(pkgAcquire::ItemDesc&)@Base" 0.8.0
+ (c++)"pkgAcquire::Queue::Startup()@Base" 0.8.0
+ (c++)"pkgAcquire::Queue::FindItem(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::Worker*)@Base" 0.8.0
+ (c++)"pkgAcquire::Queue::ItemDone(pkgAcquire::Queue::QItem*)@Base" 0.8.0
+ (c++)"pkgAcquire::Queue::Shutdown(bool)@Base" 0.8.0
+ (c++)"pkgAcquire::Queue::Queue(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire*)@Base" 0.8.0
+ (c++)"pkgAcquire::Queue::~Queue()@Base" 0.8.0
+ (c++)"pkgAcquire::Setup(pkgAcquireStatus*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"pkgAcquire::Remove(pkgAcquire::Item*)@Base" 0.8.0
+ (c++)"pkgAcquire::Remove(pkgAcquire::Worker*)@Base" 0.8.0
+ (c++)"pkgAcquire::RunFds(fd_set*, fd_set*)@Base" 0.8.0
+ (c++)"pkgAcquire::SetFds(int&, fd_set*, fd_set*)@Base" 0.8.0
+ (c++)"pkgAcquire::UriEnd()@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::OutFdReady()@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::MediaChange(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::RunMessages()@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::Capabilities(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::ReadMessages()@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::MethodFailure()@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::SendConfiguration()@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::Pulse()@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::Start()@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::ItemDone()@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::Construct()@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::InFdReady()@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::QueueItem(pkgAcquire::Queue::QItem*)@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::Worker(pkgAcquire::MethodConfig*)@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::Worker(pkgAcquire::Queue*, pkgAcquire::MethodConfig*, pkgAcquireStatus*)@Base" 0.8.0
+ (c++)"pkgAcquire::Worker::~Worker()@Base" 0.8.0
+ (c++)"pkgAcquire::Dequeue(pkgAcquire::Item*)@Base" 0.8.0
+ (c++)"pkgAcquire::Enqueue(pkgAcquire::ItemDesc&)@Base" 0.8.0
+ (c++)"pkgAcquire::ItemDesc::~ItemDesc()@Base" 0.8.0
+ (c++)"pkgAcquire::Shutdown()@Base" 0.8.0
+ (c++)"pkgAcquire::UriBegin()@Base" 0.8.0
+ (c++)"pkgAcquire::GetConfig(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcquire::QueueName(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig const*&)@Base" 0.8.0
+ (c++)"pkgAcquire::pkgAcquire(pkgAcquireStatus*)@Base" 0.8.0
+ (c++)"pkgAcquire::pkgAcquire()@Base" 0.8.0
+ (c++)"pkgAcquire::~pkgAcquire()@Base" 0.8.0
+ (c++)"pkgRecords::Lookup(pkgCache::VerFileIterator const&)@Base" 0.8.0
+ (c++)"pkgRecords::Lookup(pkgCache::DescFileIterator const&)@Base" 0.8.0
+ (c++)"pkgRecords::Parser::Maintainer()@Base" 0.8.0
+ (c++)"pkgRecords::Parser::SHA256Hash()@Base" 0.8.0
+ (c++)"pkgRecords::Parser::Name()@Base" 0.8.0
+ (c++)"pkgRecords::Parser::GetRec(char const*&, char const*&)@Base" 0.8.0
+ (c++)"pkgRecords::Parser::MD5Hash()@Base" 0.8.0
+ (c++)"pkgRecords::Parser::FileName()@Base" 0.8.0
+ (c++)"pkgRecords::Parser::Homepage()@Base" 0.8.0
+ (c++)"pkgRecords::Parser::LongDesc()@Base" 0.8.0
+ (c++)"pkgRecords::Parser::SHA1Hash()@Base" 0.8.0
+ (c++)"pkgRecords::Parser::ShortDesc()@Base" 0.8.0
+ (c++)"pkgRecords::Parser::SourcePkg()@Base" 0.8.0
+ (c++)"pkgRecords::Parser::SourceVer()@Base" 0.8.0
+ (c++)"pkgRecords::pkgRecords(pkgCache&)@Base" 0.8.0
+ (c++)"pkgRecords::~pkgRecords()@Base" 0.8.0
+ (c++)"pkgTagFile::Step(pkgTagSection&)@Base" 0.8.0
+ (c++)"pkgTagFile::~pkgTagFile()@Base" 0.8.0
+ (c++)"CdromDevice::~CdromDevice()@Base" 0.8.0
+ (c++)"CommandLine::DispatchArg(CommandLine::Dispatch*, bool)@Base" 0.8.0
+ (c++)"CommandLine::SaveInConfig(unsigned int const&, char const* const*)@Base" 0.8.0
+ (c++)"CommandLine::Parse(int, char const**)@Base" 0.8.0
+ (c++)"CommandLine::HandleOpt(int&, int, char const**, char const*&, CommandLine::Args*, bool)@Base" 0.8.0
+ (c++)"CommandLine::CommandLine(CommandLine::Args*, Configuration*)@Base" 0.8.0
+ (c++)"CommandLine::~CommandLine()@Base" 0.8.0
+ (c++)"DynamicMMap::WriteString(char const*, unsigned long)@Base" 0.8.0
+ (c++)"DynamicMMap::Grow()@Base" 0.8.0
+ (c++)"DynamicMMap::Allocate(unsigned long)@Base" 0.8.0
+ (c++)"DynamicMMap::DynamicMMap(FileFd&, unsigned long, unsigned long const&, unsigned long const&, unsigned long const&)@Base" 0.8.0
+ (c++)"DynamicMMap::DynamicMMap(unsigned long, unsigned long const&, unsigned long const&, unsigned long const&)@Base" 0.8.0
+ (c++)"DynamicMMap::~DynamicMMap()@Base" 0.8.0
+ (c++)"GlobalError::DumpErrors(std::basic_ostream<char, std::char_traits<char> >&, GlobalError::MsgType const&, bool const&)@Base" 0.8.0
+ (c++)"GlobalError::PopMessage(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0.8.0
+ (c++)"GlobalError::InsertErrno(GlobalError::MsgType const&, char const*, char const*, ...)@Base" 0.8.0
+ (c++)"GlobalError::PushToStack()@Base" 0.8.0
+ (c++)"GlobalError::RevertToStack()@Base" 0.8.0
+ (c++)"GlobalError::MergeWithStack()@Base" 0.8.0
+ (c++)"GlobalError::Debug(char const*, ...)@Base" 0.8.0
+ (c++)"GlobalError::Errno(char const*, char const*, ...)@Base" 0.8.0
+ (c++)"GlobalError::Error(char const*, ...)@Base" 0.8.0
+ (c++)"GlobalError::Fatal(char const*, ...)@Base" 0.8.0
+ (c++)"GlobalError::DebugE(char const*, char const*, ...)@Base" 0.8.0
+ (c++)"GlobalError::FatalE(char const*, char const*, ...)@Base" 0.8.0
+ (c++)"GlobalError::Insert(GlobalError::MsgType const&, char const*, ...)@Base" 0.8.0
+ (c++)"GlobalError::Notice(char const*, ...)@Base" 0.8.0
+ (c++)"GlobalError::Discard()@Base" 0.8.0
+ (c++)"GlobalError::NoticeE(char const*, char const*, ...)@Base" 0.8.0
+ (c++)"GlobalError::Warning(char const*, ...)@Base" 0.8.0
+ (c++)"GlobalError::WarningE(char const*, char const*, ...)@Base" 0.8.0
+ (c++)"GlobalError::GlobalError()@Base" 0.8.0
+ (c++)"PackageCopy::GetFileName()@Base" 0.8.0
+ (c++)"PackageCopy::RewriteEntry(_IO_FILE*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"PackageCopy::Type()@Base" 0.8.0
+ (c++)"PackageCopy::~PackageCopy()@Base" 0.8.0
+ (c++)"pkgAcqIndex::Custom600Headers()@Base" 0.8.0
+ (c++)"pkgAcqIndex::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
+ (c++)"pkgAcqIndex::DescURI()@Base" 0.8.0
+ (c++)"pkgAcqIndex::HashSum()@Base" 0.8.0
+ (c++)"pkgAcqIndex::pkgAcqIndex(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, HashString, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcqIndex::~pkgAcqIndex()@Base" 0.8.0
+ (c++)"pkgDepCache::IsDeleteOk(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 0.8.0
+ (c++)"pkgDepCache::MarkDelete(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 0.8.0
+ (c++)"pkgDepCache::StateCache::StripEpoch(char const*)@Base" 0.8.0
+ (c++)"pkgDepCache::StateCache::Update(pkgCache::PkgIterator, pkgCache&)@Base" 0.8.0
+ (c++)"pkgDepCache::ActionGroup::release()@Base" 0.8.0
+ (c++)"pkgDepCache::ActionGroup::ActionGroup(pkgDepCache&)@Base" 0.8.0
+ (c++)"pkgDepCache::ActionGroup::~ActionGroup()@Base" 0.8.0
+ (c++)"pkgDepCache::IsInstallOk(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 0.8.0
+ (c++)"pkgDepCache::MarkInstall(pkgCache::PkgIterator const&, bool, unsigned long, bool, bool)@Base" 0.8.0
+ (c++)"pkgDepCache::MarkPackage(pkgCache::PkgIterator const&, pkgCache::VerIterator const&, bool const&, bool const&)@Base" 0.8.0
+ (c++)"pkgDepCache::MarkRequired(pkgDepCache::InRootSetFunc&)@Base" 0.8.0
+ (c++)"pkgDepCache::SetReInstall(pkgCache::PkgIterator const&, bool)@Base" 0.8.0
+ (c++)"pkgDepCache::VersionState(pkgCache::DepIterator, unsigned char, unsigned char, unsigned char)@Base" 0.8.0
+ (c++)"pkgDepCache::BuildGroupOrs(pkgCache::VerIterator const&)@Base" 0.8.0
+ (c++)"pkgDepCache::InRootSetFunc::InRootSet(pkgCache::PkgIterator const&)@Base" 0.8.0
+ (c++)"pkgDepCache::InRootSetFunc::~InRootSetFunc()@Base" 0.8.0
+ (c++)"pkgDepCache::readStateFile(OpProgress*)@Base" 0.8.0
+ (c++)"pkgDepCache::GetRootSetFunc()@Base" 0.8.0
+ (c++)"pkgDepCache::UpdateVerState(pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgDepCache::writeStateFile(OpProgress*, bool)@Base" 0.8.0
+ (c++)"pkgDepCache::DependencyState(pkgCache::DepIterator&)@Base" 0.8.0
+ (c++)"pkgDepCache::DefaultRootSetFunc::InRootSet(pkgCache::PkgIterator const&)@Base" 0.8.0
+ (c++)"pkgDepCache::DefaultRootSetFunc::~DefaultRootSetFunc()@Base" 0.8.0
+ (c++)"pkgDepCache::MarkFollowsSuggests()@Base" 0.8.0
+ (c++)"pkgDepCache::MarkFollowsRecommends()@Base" 0.8.0
+ (c++)"pkgDepCache::Init(OpProgress*)@Base" 0.8.0
+ (c++)"pkgDepCache::Sweep()@Base" 0.8.0
+ (c++)"pkgDepCache::Policy::IsImportantDep(pkgCache::DepIterator const&)@Base" 0.8.0
+ (c++)"pkgDepCache::Policy::GetCandidateVer(pkgCache::PkgIterator const&)@Base" 0.8.0
+ (c++)"pkgDepCache::Policy::~Policy()@Base" 0.8.0
+ (c++)"pkgDepCache::Update(pkgCache::DepIterator)@Base" 0.8.0
+ (c++)"pkgDepCache::Update(OpProgress*)@Base" 0.8.0
+ (c++)"pkgDepCache::Update(pkgCache::PkgIterator const&)@Base" 0.8.0
+ (c++)"pkgDepCache::CheckDep(pkgCache::DepIterator, int, pkgCache::PkgIterator&)@Base" 0.8.0
+ (c++)"pkgDepCache::MarkAuto(pkgCache::PkgIterator const&, bool)@Base" 0.8.0
+ (c++)"pkgDepCache::MarkKeep(pkgCache::PkgIterator const&, bool, bool, unsigned long)@Base" 0.8.0
+ (c++)"pkgDepCache::pkgDepCache(pkgCache*, pkgDepCache::Policy*)@Base" 0.8.0
+ (c++)"pkgDepCache::~pkgDepCache()@Base" 0.8.0
+ (c++)"pkgSimulate::ShortBreaks()@Base" 0.8.0
+ (c++)"pkgSimulate::Policy::GetCandidateVer(pkgCache::PkgIterator const&)@Base" 0.8.0
+ (c++)"pkgSimulate::Policy::~Policy()@Base" 0.8.0
+ (c++)"pkgSimulate::Remove(pkgCache::PkgIterator, bool)@Base" 0.8.0
+ (c++)"pkgSimulate::Install(pkgCache::PkgIterator, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgSimulate::Describe(pkgCache::PkgIterator, std::basic_ostream<char, std::char_traits<char> >&, bool, bool)@Base" 0.8.0
+ (c++)"pkgSimulate::Configure(pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgSimulate::pkgSimulate(pkgDepCache*)@Base" 0.8.0
+ (c++)"pkgSimulate::~pkgSimulate()@Base" 0.8.0
+ (c++)"debIFTypePkg::~debIFTypePkg()@Base" 0.8.0
+ (c++)"debIFTypeSrc::~debIFTypeSrc()@Base" 0.8.0
+ (c++)"debSLTypeDeb::~debSLTypeDeb()@Base" 0.8.0
+ (c++)"indexRecords::Load(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"indexRecords::Lookup(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"indexRecords::MetaKeys()@Base" 0.8.0
+ (c++)"indexRecords::indexRecords(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"indexRecords::indexRecords()@Base" 0.8.0
+ (c++)"indexRecords::~indexRecords()@Base" 0.8.0
+ (c++)"pkgAcqMethod::FetchResult::TakeHashes(Hashes&)@Base" 0.8.0
+ (c++)"pkgAcqMethod::FetchResult::FetchResult()@Base" 0.8.0
+ (c++)"pkgAcqMethod::Configuration(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcqMethod::Log(char const*, ...)@Base" 0.8.0
+ (c++)"pkgAcqMethod::Run(bool)@Base" 0.8.0
+ (c++)"pkgAcqMethod::Exit()@Base" 0.8.0
+ (c++)"pkgAcqMethod::Fail(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)@Base" 0.8.0
+ (c++)"pkgAcqMethod::Fail(bool)@Base" 0.8.0
+ (c++)"pkgAcqMethod::Fetch(pkgAcqMethod::FetchItem*)@Base" 0.8.0
+ (c++)"pkgAcqMethod::Status(char const*, ...)@Base" 0.8.0
+ (c++)"pkgAcqMethod::URIDone(pkgAcqMethod::FetchResult&, pkgAcqMethod::FetchResult*)@Base" 0.8.0
+ (c++)"pkgAcqMethod::Redirect(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"pkgAcqMethod::URIStart(pkgAcqMethod::FetchResult&)@Base" 0.8.0
+ (c++)"pkgAcqMethod::MediaFail(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcqMethod::pkgAcqMethod(char const*, unsigned long)@Base" 0.8.0
+ (c++)"pkgAcqMethod::~pkgAcqMethod()@Base" 0.8.0
+ (c++)"pkgCacheFile::BuildCaches(OpProgress*, bool)@Base" 0.8.0
+ (c++)"pkgCacheFile::BuildPolicy(OpProgress*)@Base" 0.8.0
+ (c++)"pkgCacheFile::BuildDepCache(OpProgress*)@Base" 0.8.0
+ (c++)"pkgCacheFile::BuildSourceList(OpProgress*)@Base" 0.8.0
+ (c++)"pkgCacheFile::Open(OpProgress*, bool)@Base" 0.8.0
+ (c++)"pkgCacheFile::Close()@Base" 0.8.0
+ (c++)"pkgCacheFile::pkgCacheFile()@Base" 0.8.0
+ (c++)"pkgCacheFile::~pkgCacheFile()@Base" 0.8.0
+ (c++)"pkgIndexFile::LanguageCode()@Base" 0.8.0
+ (c++)"pkgIndexFile::CheckLanguageCode(char const*)@Base" 0.8.0
+ (c++)"pkgIndexFile::TranslationsAvailable()@Base" 0.8.0
+ (c++)"pkgIndexFile::Type::GlobalList@Base" 0.8.0
+ (c++)"pkgIndexFile::Type::GlobalListLen@Base" 0.8.0
+ (c++)"pkgIndexFile::Type::GetType(char const*)@Base" 0.8.0
+ (c++)"pkgIndexFile::Type::Type()@Base" 0.8.0
+ (c++)"pkgOrderList::VisitRDeps(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::OrderUnpack(std::basic_string<char, std::char_traits<char>, std::allocator<char> >*)@Base" 0.8.0
+ (c++)"pkgOrderList::DepConfigure(pkgCache::DepIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::DepUnPackDep(pkgCache::DepIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::DepUnPackPre(pkgCache::DepIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::DepUnPackCrit(pkgCache::DepIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::DepUnPackPreD(pkgCache::DepIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::OrderCompareA(void const*, void const*)@Base" 0.8.0
+ (c++)"pkgOrderList::OrderCompareB(void const*, void const*)@Base" 0.8.0
+ (c++)"pkgOrderList::OrderCritical()@Base" 0.8.0
+ (c++)"pkgOrderList::VisitProvides(pkgCache::DepIterator, bool)@Base" 0.8.0
+ (c++)"pkgOrderList::OrderConfigure()@Base" 0.8.0
+ (c++)"pkgOrderList::VisitRProvides(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::VerIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::Me@Base" 0.8.0
+ (c++)"pkgOrderList::DoRun()@Base" 0.8.0
+ (c++)"pkgOrderList::Score(pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::AddLoop(pkgCache::DepIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::FileCmp(pkgCache::PkgIterator, pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::CheckDep(pkgCache::DepIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::DepRemove(pkgCache::DepIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::IsMissing(pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::VisitDeps(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgOrderList::WipeFlags(unsigned long)@Base" 0.8.0
+ (c++)"pkgOrderList::pkgOrderList(pkgDepCache*)@Base" 0.8.0
+ (c++)"pkgOrderList::~pkgOrderList()@Base" 0.8.0
+ (c++)"Configuration::MatchAgainstConfig::MatchAgainstConfig(char const*)@Base" 0.8.0
+ (c++)"Configuration::MatchAgainstConfig::~MatchAgainstConfig()@Base" 0.8.0
+ (c++)"Configuration::Set(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"Configuration::Set(char const*, int const&)@Base" 0.8.0
+ (c++)"Configuration::Dump(std::basic_ostream<char, std::char_traits<char> >&)@Base" 0.8.0
+ (c++)"Configuration::Clear(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"Configuration::Clear(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&)@Base" 0.8.0
+ (c++)"Configuration::Clear(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"Configuration::CndSet(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"Configuration::Lookup(char const*, bool const&)@Base" 0.8.0
+ (c++)"Configuration::Lookup(Configuration::Item*, char const*, unsigned long const&, bool const&)@Base" 0.8.0
+ (c++)"Configuration::Configuration(Configuration::Item const*)@Base" 0.8.0
+ (c++)"Configuration::Configuration()@Base" 0.8.0
+ (c++)"Configuration::~Configuration()@Base" 0.8.0
+ (c++)"WeakPointable::~WeakPointable()@Base" 0.8.0
+ (c++)"debListParser::NewVersion(pkgCache::VerIterator&)@Base" 0.8.0
+ (c++)"debListParser::UsePackage(pkgCache::PkgIterator&, pkgCache::VerIterator&)@Base" 0.8.0
+ (c++)"debListParser::Description()@Base" 0.8.0
+ (c++)"debListParser::ParseStatus(pkgCache::PkgIterator&, pkgCache::VerIterator&)@Base" 0.8.0
+ (c++)"debListParser::VersionHash()@Base" 0.8.0
+ (c++)"debListParser::Architecture()@Base" 0.8.0
+ (c++)"debListParser::ParseDepends(char const*, char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int&, bool const&, bool const&)@Base" 0.8.0
+ (c++)"debListParser::ParseDepends(pkgCache::VerIterator&, char const*, unsigned int)@Base" 0.8.0
+ (c++)"debListParser::ParseProvides(pkgCache::VerIterator&)@Base" 0.8.0
+ (c++)"debListParser::ArchitectureAll()@Base" 0.8.0
+ (c++)"debListParser::ConvertRelation(char const*, unsigned int&)@Base" 0.8.0
+ (c++)"debListParser::Description_md5()@Base" 0.8.0
+ (c++)"debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator&, FileFd&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"debListParser::UniqFindTagWrite(char const*)@Base" 0.8.0
+ (c++)"debListParser::DescriptionLanguage()@Base" 0.8.0
+ (c++)"debListParser::Size()@Base" 0.8.0
+ (c++)"debListParser::Step()@Base" 0.8.0
+ (c++)"debListParser::Offset()@Base" 0.8.0
+ (c++)"debListParser::GetPrio(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"debListParser::Package()@Base" 0.8.0
+ (c++)"debListParser::Version()@Base" 0.8.0
+ (c++)"debListParser::GrabWord(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, debListParser::WordList*, unsigned char&)@Base" 0.8.0
+ (c++)"debListParser::debListParser(FileFd*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"debListParser::~debListParser()@Base" 0.8.0
+ (c++)"pkgAcqArchive::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
+ (c++)"pkgAcqArchive::DescURI()@Base" 0.8.0
+ (c++)"pkgAcqArchive::HashSum()@Base" 0.8.0
+ (c++)"pkgAcqArchive::Finished()@Base" 0.8.0
+ (c++)"pkgAcqArchive::IsTrusted()@Base" 0.8.0
+ (c++)"pkgAcqArchive::QueueNext()@Base" 0.8.0
+ (c++)"pkgAcqArchive::ShortDesc()@Base" 0.8.0
+ (c++)"pkgAcqArchive::pkgAcqArchive(pkgAcquire*, pkgSourceList*, pkgRecords*, pkgCache::VerIterator const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0.8.0
+ (c++)"pkgAcqArchive::~pkgAcqArchive()@Base" 0.8.0
+ (c++)"pkgAcqMetaSig::Custom600Headers()@Base" 0.8.0
+ (c++)"pkgAcqMetaSig::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
+ (c++)"pkgAcqMetaSig::DescURI()@Base" 0.8.0
+ (c++)"pkgAcqMetaSig::~pkgAcqMetaSig()@Base" 0.8.0
+ (c++)"pkgSourceList::ReadAppend(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgSourceList::ReadMainList()@Base" 0.8.0
+ (c++)"pkgSourceList::ReadSourceDir(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgSourceList::Read(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgSourceList::Type::GlobalList@Base" 0.8.0
+ (c++)"pkgSourceList::Type::GlobalListLen@Base" 0.8.0
+ (c++)"pkgSourceList::Type::GetType(char const*)@Base" 0.8.0
+ (c++)"pkgSourceList::Type::Type()@Base" 0.8.0
+ (c++)"pkgSourceList::Reset()@Base" 0.8.0
+ (c++)"pkgSourceList::pkgSourceList(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgSourceList::pkgSourceList()@Base" 0.8.0
+ (c++)"pkgSourceList::~pkgSourceList()@Base" 0.8.0
+ (c++)"pkgSrcRecords::File::~File()@Base" 0.8.0
+ (c++)"pkgSrcRecords::Find(char const*, bool const&)@Base" 0.8.0
+ (c++)"pkgSrcRecords::Parser::BuildDepRec::~BuildDepRec()@Base" 0.8.0
+ (c++)"pkgSrcRecords::Parser::BuildDepType(unsigned char const&)@Base" 0.8.0
+ (c++)"pkgSrcRecords::Restart()@Base" 0.8.0
+ (c++)"pkgSrcRecords::pkgSrcRecords(pkgSourceList&)@Base" 0.8.0
+ (c++)"pkgSrcRecords::~pkgSrcRecords()@Base" 0.8.0
+ (c++)"pkgTagSection::TrimRecord(bool, char const*&)@Base" 0.8.0
+ (c++)"pkgTagSection::Scan(char const*, unsigned long)@Base" 0.8.0
+ (c++)"pkgTagSection::Trim()@Base" 0.8.0
+ (c++)"pkgVendorList::CreateList(Configuration&)@Base" 0.8.0
+ (c++)"pkgVendorList::FindVendor(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)@Base" 0.8.0
+ (c++)"pkgVendorList::ReadMainList()@Base" 0.8.0
+ (c++)"pkgVendorList::LookupFingerprint(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgVendorList::Read(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgVendorList::~pkgVendorList()@Base" 0.8.0
+ (c++)"OpTextProgress::Done()@Base" 0.8.0
+ (c++)"OpTextProgress::Write(char const*)@Base" 0.8.0
+ (c++)"OpTextProgress::Update()@Base" 0.8.0
+ (c++)"OpTextProgress::OpTextProgress(Configuration&)@Base" 0.8.0
+ (c++)"OpTextProgress::~OpTextProgress()@Base" 0.8.0
+ (c++)"debIFTypeTrans::~debIFTypeTrans()@Base" 0.8.0
+ (c++)"debStatusIndex::debStatusIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"debStatusIndex::~debStatusIndex()@Base" 0.8.0
+ (c++)"debIFTypeStatus::~debIFTypeStatus()@Base" 0.8.0
+ (c++)"debRecordParser::Maintainer()@Base" 0.8.0
+ (c++)"debRecordParser::SHA256Hash()@Base" 0.8.0
+ (c++)"debRecordParser::Jump(pkgCache::VerFileIterator const&)@Base" 0.8.0
+ (c++)"debRecordParser::Jump(pkgCache::DescFileIterator const&)@Base" 0.8.0
+ (c++)"debRecordParser::Name()@Base" 0.8.0
+ (c++)"debRecordParser::GetRec(char const*&, char const*&)@Base" 0.8.0
+ (c++)"debRecordParser::MD5Hash()@Base" 0.8.0
+ (c++)"debRecordParser::FileName()@Base" 0.8.0
+ (c++)"debRecordParser::Homepage()@Base" 0.8.0
+ (c++)"debRecordParser::LongDesc()@Base" 0.8.0
+ (c++)"debRecordParser::SHA1Hash()@Base" 0.8.0
+ (c++)"debRecordParser::ShortDesc()@Base" 0.8.0
+ (c++)"debRecordParser::SourcePkg()@Base" 0.8.0
+ (c++)"debRecordParser::SourceVer()@Base" 0.8.0
+ (c++)"debRecordParser::debRecordParser(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgCache&)@Base" 0.8.0
+ (c++)"debRecordParser::~debRecordParser()@Base" 0.8.0
+ (c++)"debReleaseIndex::GetIndexFiles()@Base" 0.8.0
+ (c++)"debReleaseIndex::debSectionEntry::debSectionEntry(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&)@Base" 0.8.0
+ (c++)"debReleaseIndex::PushSectionEntry(debReleaseIndex::debSectionEntry const*)@Base" 0.8.0
+ (c++)"debReleaseIndex::PushSectionEntry(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, debReleaseIndex::debSectionEntry const*)@Base" 0.8.0
+ (c++)"debReleaseIndex::PushSectionEntry(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, debReleaseIndex::debSectionEntry const*)@Base" 0.8.0
+ (c++)"debReleaseIndex::debReleaseIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"debReleaseIndex::~debReleaseIndex()@Base" 0.8.0
+ (c++)"debSLTypeDebSrc::~debSLTypeDebSrc()@Base" 0.8.0
+ (c++)"debSourcesIndex::debSourcesIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)@Base" 0.8.0
+ (c++)"debSourcesIndex::~debSourcesIndex()@Base" 0.8.0
+ (c++)"pkgAcqDiffIndex::ParseDiffIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcqDiffIndex::Custom600Headers()@Base" 0.8.0
+ (c++)"pkgAcqDiffIndex::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
+ (c++)"pkgAcqDiffIndex::DescURI()@Base" 0.8.0
+ (c++)"pkgAcqDiffIndex::pkgAcqDiffIndex(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, HashString)@Base" 0.8.0
+ (c++)"pkgAcqDiffIndex::~pkgAcqDiffIndex()@Base" 0.8.0
+ (c++)"pkgAcqMetaIndex::QueueIndexes(bool)@Base" 0.8.0
+ (c++)"pkgAcqMetaIndex::VerifyVendor(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcqMetaIndex::RetrievalDone(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcqMetaIndex::Custom600Headers()@Base" 0.8.0
+ (c++)"pkgAcqMetaIndex::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
+ (c++)"pkgAcqMetaIndex::DescURI()@Base" 0.8.0
+ (c++)"pkgAcqMetaIndex::AuthDone(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcqMetaIndex::pkgAcqMetaIndex(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<IndexTarget*, std::allocator<IndexTarget*> > const*, indexRecords*)@Base" 0.8.0
+ (c++)"pkgAcqMetaIndex::~pkgAcqMetaIndex()@Base" 0.8.0
+ (c++)"pkgVersionMatch::ExpressionMatches(char const*, char const*)@Base" 0.8.0
+ (c++)"pkgVersionMatch::ExpressionMatches(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)@Base" 0.8.0
+ (c++)"pkgVersionMatch::Find(pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgVersionMatch::MatchVer(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)@Base" 0.8.0
+ (c++)"pkgVersionMatch::FileMatch(pkgCache::PkgFileIterator)@Base" 0.8.0
+ (c++)"pkgVersionMatch::pkgVersionMatch(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgVersionMatch::MatchType)@Base" 0.8.0
+ (c++)"pkgVersionMatch::~pkgVersionMatch()@Base" 0.8.0
+ (c++)"TranslationsCopy::CopyTranslations(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, pkgCdromStatus*)@Base" 0.8.0
+ (c++)"debPackagesIndex::debPackagesIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"debPackagesIndex::~debPackagesIndex()@Base" 0.8.0
+ (c++)"pkgAcqIndexDiffs::QueueNextDiff()@Base" 0.8.0
+ (c++)"pkgAcqIndexDiffs::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
+ (c++)"pkgAcqIndexDiffs::Finish(bool)@Base" 0.8.0
+ (c++)"pkgAcqIndexDiffs::DescURI()@Base" 0.8.0
+ (c++)"pkgAcqIndexDiffs::pkgAcqIndexDiffs(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, HashString, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<DiffInfo, std::allocator<DiffInfo> >)@Base" 0.8.0
+ (c++)"pkgAcqIndexDiffs::~pkgAcqIndexDiffs()@Base" 0.8.0
+ (c++)"pkgAcqIndexTrans::Custom600Headers()@Base" 0.8.0
+ (c++)"pkgAcqIndexTrans::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.0
+ (c++)"pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgAcqIndexTrans::~pkgAcqIndexTrans()@Base" 0.8.0
+ (c++)"pkgAcquireStatus::Done(pkgAcquire::ItemDesc&)@Base" 0.8.0
+ (c++)"pkgAcquireStatus::Fail(pkgAcquire::ItemDesc&)@Base" 0.8.0
+ (c++)"pkgAcquireStatus::Stop()@Base" 0.8.0
+ (c++)"pkgAcquireStatus::Fetch(pkgAcquire::ItemDesc&)@Base" 0.8.0
+ (c++)"pkgAcquireStatus::Pulse(pkgAcquire*)@Base" 0.8.0
+ (c++)"pkgAcquireStatus::Start()@Base" 0.8.0
+ (c++)"pkgAcquireStatus::IMSHit(pkgAcquire::ItemDesc&)@Base" 0.8.0
+ (c++)"pkgAcquireStatus::pkgAcquireStatus()@Base" 0.8.0
+ (c++)"PreferenceSection::TrimRecord(bool, char const*&)@Base" 0.8.0
+ (c++)"pkgArchiveCleaner::Go(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgCache&)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::ListParser::NewDepends(pkgCache::VerIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::ListParser::NewProvides(pkgCache::VerIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::ListParser::CollectFileProvides(pkgCache&, pkgCache::VerIterator&)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::NewFileVer(pkgCache::VerIterator&, pkgCacheGenerator::ListParser&)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::NewPackage(pkgCache::PkgIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::SelectFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, pkgIndexFile const&, unsigned long)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::FinishCache(OpProgress*)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::NewFileDesc(pkgCache::DescIterator&, pkgCacheGenerator::ListParser&)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::MakeStatusCache(pkgSourceList&, OpProgress*, MMap**, bool)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::WriteUniqString(char const*, unsigned int)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::CreateDynamicMMap(FileFd*, unsigned long)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::MergeFileProvides(pkgCacheGenerator::ListParser&)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::MakeOnlyStatusCache(OpProgress*, DynamicMMap**)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::ReMap(void const*, void const*)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::Dynamic<pkgCache::DepIterator>::toReMap@Base" 0.8.0
+ (c++)"pkgCacheGenerator::Dynamic<pkgCache::GrpIterator>::toReMap@Base" 0.8.0
+ (c++)"pkgCacheGenerator::Dynamic<pkgCache::PkgIterator>::toReMap@Base" 0.8.0
+ (c++)"pkgCacheGenerator::Dynamic<pkgCache::PrvIterator>::toReMap@Base" 0.8.0
+ (c++)"pkgCacheGenerator::Dynamic<pkgCache::VerIterator>::toReMap@Base" 0.8.0
+ (c++)"pkgCacheGenerator::Dynamic<pkgCache::DescIterator>::toReMap@Base" 0.8.0
+ (c++)"pkgCacheGenerator::Dynamic<pkgCache::PkgFileIterator>::toReMap@Base" 0.8.0
+ (c++)"pkgCacheGenerator::NewGroup(pkgCache::GrpIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::MergeList(pkgCacheGenerator::ListParser&, pkgCache::VerIterator*)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::pkgCacheGenerator(DynamicMMap*, OpProgress*)@Base" 0.8.0
+ (c++)"pkgCacheGenerator::~pkgCacheGenerator()@Base" 0.8.0
+ (c++)"pkgPackageManager::FixMissing()@Base" 0.8.0
+ (c++)"pkgPackageManager::EarlyRemove(pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgPackageManager::GetArchives(pkgAcquire*, pkgSourceList*, pkgRecords*)@Base" 0.8.0
+ (c++)"pkgPackageManager::SmartRemove(pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgPackageManager::SmartUnPack(pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgPackageManager::ConfigureAll()@Base" 0.8.0
+ (c++)"pkgPackageManager::ImmediateAdd(pkgCache::PkgIterator, bool, unsigned int const&)@Base" 0.8.0
+ (c++)"pkgPackageManager::OrderInstall()@Base" 0.8.0
+ (c++)"pkgPackageManager::DepAlwaysTrue(pkgCache::DepIterator)@Base" 0.8.0
+ (c++)"pkgPackageManager::CheckRConflicts(pkgCache::PkgIterator, pkgCache::DepIterator, char const*)@Base" 0.8.0
+ (c++)"pkgPackageManager::CreateOrderList()@Base" 0.8.0
+ (c++)"pkgPackageManager::DoInstallPostFork(int)@Base" 0.8.0
+ (c++)"pkgPackageManager::Go(int)@Base" 0.8.0
+ (c++)"pkgPackageManager::Reset()@Base" 0.8.0
+ (c++)"pkgPackageManager::Remove(pkgCache::PkgIterator, bool)@Base" 0.8.0
+ (c++)"pkgPackageManager::Install(pkgCache::PkgIterator, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgPackageManager::Configure(pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgPackageManager::DoInstall(int)@Base" 0.8.0
+ (c++)"pkgPackageManager::pkgPackageManager(pkgDepCache*)@Base" 0.8.0
+ (c++)"pkgPackageManager::~pkgPackageManager()@Base" 0.8.0
+ (c++)"debSrcRecordParser::BuildDepends(std::vector<pkgSrcRecords::Parser::BuildDepRec, std::allocator<pkgSrcRecords::Parser::BuildDepRec> >&, bool const&, bool const&)@Base" 0.8.0
+ (c++)"debSrcRecordParser::Jump(unsigned long const&)@Base" 0.8.0
+ (c++)"debSrcRecordParser::Step()@Base" 0.8.0
+ (c++)"debSrcRecordParser::AsStr()@Base" 0.8.0
+ (c++)"debSrcRecordParser::Files(std::vector<pkgSrcRecords::File, std::allocator<pkgSrcRecords::File> >&)@Base" 0.8.0
+ (c++)"debSrcRecordParser::Offset()@Base" 0.8.0
+ (c++)"debSrcRecordParser::Restart()@Base" 0.8.0
+ (c++)"debSrcRecordParser::Binaries()@Base" 0.8.0
+ (c++)"debSrcRecordParser::~debSrcRecordParser()@Base" 0.8.0
+ (c++)"pkgProblemResolver::MakeScores()@Base" 0.8.0
+ (c++)"pkgProblemResolver::ResolveByKeep()@Base" 0.8.0
+ (c++)"pkgProblemResolver::InstallProtect()@Base" 0.8.0
+ (c++)"pkgProblemResolver::This@Base" 0.8.0
+ (c++)"pkgProblemResolver::Resolve(bool)@Base" 0.8.0
+ (c++)"pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgProblemResolver::ScoreSort(void const*, void const*)@Base" 0.8.0
+ (c++)"pkgProblemResolver::pkgProblemResolver(pkgDepCache*)@Base" 0.8.0
+ (c++)"pkgProblemResolver::~pkgProblemResolver()@Base" 0.8.0
+ (c++)"debVersioningSystem::CmpFragment(char const*, char const*, char const*, char const*)@Base" 0.8.0
+ (c++)"debVersioningSystem::DoCmpVersion(char const*, char const*, char const*, char const*)@Base" 0.8.0
+ (c++)"debVersioningSystem::DoCmpReleaseVer(char const*, char const*, char const*, char const*)@Base" 0.8.0
+ (c++)"debVersioningSystem::UpstreamVersion(char const*)@Base" 0.8.0
+ (c++)"debVersioningSystem::CheckDep(char const*, int, char const*)@Base" 0.8.0
+ (c++)"debVersioningSystem::debVersioningSystem()@Base" 0.8.0
+ (c++)"debVersioningSystem::~debVersioningSystem()@Base" 0.8.0
+ (c++)"pkgUdevCdromDevices::Scan()@Base" 0.8.0
+ (c++)"pkgUdevCdromDevices::Dlopen()@Base" 0.8.0
+ (c++)"pkgUdevCdromDevices::pkgUdevCdromDevices()@Base" 0.8.0
+ (c++)"pkgUdevCdromDevices::~pkgUdevCdromDevices()@Base" 0.8.0
+ (c++)"pkgVersioningSystem::GlobalList@Base" 0.8.0
+ (c++)"pkgVersioningSystem::GlobalListLen@Base" 0.8.0
+ (c++)"pkgVersioningSystem::TestCompatibility(pkgVersioningSystem const&)@Base" 0.8.0
+ (c++)"pkgVersioningSystem::GetVS(char const*)@Base" 0.8.0
+ (c++)"pkgVersioningSystem::pkgVersioningSystem()@Base" 0.8.0
+ (c++)"debTranslationsIndex::debTranslationsIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, char const*)@Base" 0.8.0
+ (c++)"debTranslationsIndex::~debTranslationsIndex()@Base" 0.8.0
+ (c++)"APT::CacheFilter::PackageNameMatchesRegEx::PackageNameMatchesRegEx(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"APT::CacheFilter::PackageNameMatchesRegEx::~PackageNameMatchesRegEx()@Base" 0.8.0
+ (c++)"APT::CacheFilter::PackageNameMatchesRegEx::operator()(pkgCache::GrpIterator const&)@Base" 0.8.0
+ (c++)"APT::CacheFilter::PackageNameMatchesRegEx::operator()(pkgCache::PkgIterator const&)@Base" 0.8.0
+ (c++)"APT::Configuration::getLanguages(bool const&, bool const&, char const**)@Base" 0.8.0
+ (c++)"APT::Configuration::getArchitectures(bool const&)@Base" 0.8.0
+ (c++)"APT::Configuration::checkArchitecture(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"APT::Configuration::getCompressionTypes(bool const&)@Base" 0.8.0
+ (c++)"APT::CacheSetHelper::canNotFindPkgName(pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"APT::CacheSetHelper::canNotFindNewestVer(pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.0
+ (c++)"APT::CacheSetHelper::canNotFindCandidateVer(pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.0
+ (c++)"APT::CacheSetHelper::canNotFindInstalledVer(pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.0
+ (c++)"APT::CacheSetHelper::~CacheSetHelper()@Base" 0.8.0
+ (c++)"URI::NoUserPassword(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"URI::CopyFrom(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"URI::SiteOnly(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"URI::~URI()@Base" 0.8.0
+ (c++)"URI::operator std::basic_string<char, std::char_traits<char>, std::allocator<char> >()@Base" 0.8.0
+ (c++)"MMap::Map(FileFd&)@Base" 0.8.0
+ (c++)"MMap::Sync(unsigned long, unsigned long)@Base" 0.8.0
+ (c++)"MMap::Sync()@Base" 0.8.0
+ (c++)"MMap::Close(bool)@Base" 0.8.0
+ (c++)"MMap::MMap(FileFd&, unsigned long)@Base" 0.8.0
+ (c++)"MMap::MMap(unsigned long)@Base" 0.8.0
+ (c++)"MMap::~MMap()@Base" 0.8.0
+ (c++)"FileFd::Size()@Base" 0.8.0
+ (c++)"FileFd::Sync()@Base" 0.8.0
+ (c++)"FileFd::Tell()@Base" 0.8.0
+ (c++)"FileFd::Close()@Base" 0.8.0
+ (c++)"FileFd::~FileFd()@Base" 0.8.0
+ (c++)"Vendor::CheckDist(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"Vendor::Vendor(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<Vendor::Fingerprint*, std::allocator<Vendor::Fingerprint*> >*)@Base" 0.8.0
+ (c++)"Vendor::~Vendor()@Base" 0.8.0
+ (c++)"DiffInfo::~DiffInfo()@Base" 0.8.0
+ (c++)"pkgCache::CompTypeDeb(unsigned char)@Base" 0.8.0
+ (c++)"pkgCache::DepIterator::GlobOr(pkgCache::DepIterator&, pkgCache::DepIterator&)@Base" 0.8.0
+ (c++)"pkgCache::DepIterator::operator++(int)@Base" 0.8.0
+ (c++)"pkgCache::DepIterator::operator++()@Base" 0.8.0
+ (c++)"pkgCache::GrpIterator::operator++(int)@Base" 0.8.0
+ (c++)"pkgCache::GrpIterator::operator++()@Base" 0.8.0
+ (c++)"pkgCache::PkgIterator::operator++(int)@Base" 0.8.0
+ (c++)"pkgCache::PkgIterator::operator++()@Base" 0.8.0
+ (c++)"pkgCache::PrvIterator::operator++(int)@Base" 0.8.0
+ (c++)"pkgCache::PrvIterator::operator++()@Base" 0.8.0
+ (c++)"pkgCache::VerIterator::operator++(int)@Base" 0.8.0
+ (c++)"pkgCache::VerIterator::operator++()@Base" 0.8.0
+ (c++)"pkgCache::DescIterator::operator++(int)@Base" 0.8.0
+ (c++)"pkgCache::DescIterator::operator++()@Base" 0.8.0
+ (c++)"pkgCache::PkgFileIterator::IsOk()@Base" 0.8.0
+ (c++)"pkgCache::PkgFileIterator::RelStr()@Base" 0.8.0
+ (c++)"pkgCache::PkgFileIterator::operator++(int)@Base" 0.8.0
+ (c++)"pkgCache::PkgFileIterator::operator++()@Base" 0.8.0
+ (c++)"pkgCache::VerFileIterator::operator++(int)@Base" 0.8.0
+ (c++)"pkgCache::VerFileIterator::operator++()@Base" 0.8.0
+ (c++)"pkgCache::DescFileIterator::operator++(int)@Base" 0.8.0
+ (c++)"pkgCache::DescFileIterator::operator++()@Base" 0.8.0
+ (c++)"pkgCache::SingleArchFindPkg(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"pkgCache::ReMap(bool const&)@Base" 0.8.0
+ (c++)"pkgCache::Header::Header()@Base" 0.8.0
+ (c++)"pkgCache::DepType(unsigned char)@Base" 0.8.0
+ (c++)"pkgCache::FindGrp(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"pkgCache::FindPkg(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"pkgCache::FindPkg(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"pkgCache::CompType(unsigned char)@Base" 0.8.0
+ (c++)"pkgCache::Priority(unsigned char)@Base" 0.8.0
+ (c++)"pkgCache::pkgCache(MMap*, bool)@Base" 0.8.0
+ (c++)"pkgCache::~pkgCache()@Base" 0.8.0
+ (c++)"pkgCdrom::DropRepeats(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, char const*)@Base" 0.8.0
+ (c++)"pkgCdrom::FindPackages(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, pkgCdromStatus*, unsigned int)@Base" 0.8.0
+ (c++)"pkgCdrom::WriteDatabase(Configuration&)@Base" 0.8.0
+ (c++)"pkgCdrom::DropBinaryArch(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)@Base" 0.8.0
+ (c++)"pkgCdrom::WriteSourceList(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, bool)@Base" 0.8.0
+ (c++)"pkgCdrom::ReduceSourcelist(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)@Base" 0.8.0
+ (c++)"pkgCdrom::Add(pkgCdromStatus*)@Base" 0.8.0
+ (c++)"pkgCdrom::Ident(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, pkgCdromStatus*)@Base" 0.8.0
+ (c++)"pkgCdrom::Score(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"IndexCopy::CopyPackages(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, pkgCdromStatus*)@Base" 0.8.0
+ (c++)"IndexCopy::ReconstructChop(unsigned long&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"IndexCopy::ReconstructPrefix(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"IndexCopy::ConvertToSourceList(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@Base" 0.8.0
+ (c++)"IndexCopy::ChopDirs(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int)@Base" 0.8.0
+ (c++)"IndexCopy::GrabFirst(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int)@Base" 0.8.0
+ (c++)"SigVerify::CopyAndVerify(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)@Base" 0.8.0
+ (c++)"SigVerify::CopyMetaIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"SigVerify::Verify(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, indexRecords*)@Base" 0.8.0
+ (c++)"SigVerify::RunGPGV(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&, int*)@Base" 0.8.0
+ (c++)"debSystem::Initialize(Configuration&)@Base" 0.8.0
+ (c++)"debSystem::CheckUpdates()@Base" 0.8.0
+ (c++)"debSystem::AddStatusFiles(std::vector<pkgIndexFile*, std::allocator<pkgIndexFile*> >&)@Base" 0.8.0
+ (c++)"debSystem::ArchiveSupported(char const*)@Base" 0.8.0
+ (c++)"debSystem::Lock()@Base" 0.8.0
+ (c++)"debSystem::Score(Configuration const&)@Base" 0.8.0
+ (c++)"debSystem::UnLock(bool)@Base" 0.8.0
+ (c++)"debSystem::debSystem()@Base" 0.8.0
+ (c++)"debSystem::~debSystem()@Base" 0.8.0
+ (c++)"pkgDPkgPM::SendV2Pkgs(_IO_FILE*)@Base" 0.8.0
+ (c++)"pkgDPkgPM::DoTerminalPty(int)@Base" 0.8.0
+ (c++)"pkgDPkgPM::WriteHistoryTag(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgDPkgPM::WriteApportReport(char const*, char const*)@Base" 0.8.0
+ (c++)"pkgDPkgPM::RunScriptsWithPkgs(char const*)@Base" 0.8.0
+ (c++)"pkgDPkgPM::handleDisappearAction(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.0
+ (c++)"pkgDPkgPM::Go(int)@Base" 0.8.0
+ (c++)"pkgDPkgPM::Reset()@Base" 0.8.0
+ (c++)"pkgDPkgPM::Remove(pkgCache::PkgIterator, bool)@Base" 0.8.0
+ (c++)"pkgDPkgPM::DoStdin(int)@Base" 0.8.0
+ (c++)"pkgDPkgPM::Install(pkgCache::PkgIterator, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.0
+ (c++)"pkgDPkgPM::OpenLog()@Base" 0.8.0
+ (c++)"pkgDPkgPM::CloseLog()@Base" 0.8.0
+ (c++)"pkgDPkgPM::Configure(pkgCache::PkgIterator)@Base" 0.8.0
+ (c++)"pkgDPkgPM::pkgDPkgPM(pkgDepCache*)@Base" 0.8.0
+ (c++)"pkgDPkgPM::~pkgDPkgPM()@Base" 0.8.0
+ (c++)"pkgPolicy::GetPriority(pkgCache::PkgIterator const&)@Base" 0.8.0
+ (c++)"pkgPolicy::InitDefaults()@Base" 0.8.0
+ (c++)"pkgPolicy::GetCandidateVer(pkgCache::PkgIterator const&)@Base" 0.8.0
+ (c++)"pkgPolicy::PkgPin::~PkgPin()@Base" 0.8.0
+ (c++)"pkgPolicy::GetMatch(pkgCache::PkgIterator const&)@Base" 0.8.0
+ (c++)"pkgPolicy::CreatePin(pkgVersionMatch::MatchType, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, short)@Base" 0.8.0
+ (c++)"pkgPolicy::pkgPolicy(pkgCache*)@Base" 0.8.0
+ (c++)"pkgPolicy::~pkgPolicy()@Base" 0.8.0
+ (c++)"pkgSystem::GlobalList@Base" 0.8.0
+ (c++)"pkgSystem::Initialize(Configuration&)@Base" 0.8.0
+ (c++)"pkgSystem::GlobalListLen@Base" 0.8.0
+ (c++)"pkgSystem::Score(Configuration const&)@Base" 0.8.0
+ (c++)"pkgSystem::GetSystem(char const*)@Base" 0.8.0
+ (c++)"pkgSystem::pkgSystem()@Base" 0.8.0
+ (c++)"HashString::VerifyFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
+ (c++)"HashString::empty() const@Base" 0.8.0
+ (c++)"HashString::toStr() const@Base" 0.8.0
+ (c++)"CommandLine::FileSize() const@Base" 0.8.0
+ (c++)"GlobalError::empty(GlobalError::MsgType const&) const@Base" 0.8.0
+ (c++)"debIFTypePkg::CreatePkgParser(pkgCache::PkgFileIterator) const@Base" 0.8.0
+ (c++)"debSLTypeDeb::CreateItem(std::vector<metaIndex*, std::allocator<metaIndex*> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) const@Base" 0.8.0
+ (c++)"indexRecords::GetValidUntil() const@Base" 0.8.0
+ (c++)"indexRecords::GetExpectedDist() const@Base" 0.8.0
+ (c++)"indexRecords::Exists(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
+ (c++)"indexRecords::GetDist() const@Base" 0.8.0
+ (c++)"indexRecords::CheckDist(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
+ (c++)"pkgIndexFile::ArchiveURI(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
+ (c++)"pkgIndexFile::SourceInfo(pkgSrcRecords::Parser const&, pkgSrcRecords::File const&) const@Base" 0.8.0
+ (c++)"pkgIndexFile::ArchiveInfo(pkgCache::VerIterator) const@Base" 0.8.0
+ (c++)"pkgIndexFile::FindInCache(pkgCache&) const@Base" 0.8.0
+ (c++)"pkgIndexFile::CreateSrcParser() const@Base" 0.8.0
+ (c++)"pkgIndexFile::MergeFileProvides(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0
+ (c++)"pkgIndexFile::MergeFileProvides(pkgCacheGenerator&, OpProgress&) const@Base" 0.8.0
+ (c++)"pkgIndexFile::Type::CreatePkgParser(pkgCache::PkgFileIterator) const@Base" 0.8.0
+ (c++)"pkgIndexFile::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0
+ (c++)"pkgIndexFile::Merge(pkgCacheGenerator&, OpProgress&) const@Base" 0.8.0
+ (c++)"Configuration::FindVector(char const*) const@Base" 0.8.0
+ (c++)"Configuration::MatchAgainstConfig::Match(char const*) const@Base" 0.8.0
+ (c++)"Configuration::Find(char const*, char const*) const@Base" 0.8.0
+ (c++)"Configuration::Item::FullTag(Configuration::Item const*) const@Base" 0.8.0
+ (c++)"Configuration::FindB(char const*, bool const&) const@Base" 0.8.0
+ (c++)"Configuration::FindI(char const*, int const&) const@Base" 0.8.0
+ (c++)"Configuration::Exists(char const*) const@Base" 0.8.0
+ (c++)"Configuration::FindAny(char const*, char const*) const@Base" 0.8.0
+ (c++)"Configuration::FindDir(char const*, char const*) const@Base" 0.8.0
+ (c++)"Configuration::FindFile(char const*, char const*) const@Base" 0.8.0
+ (c++)"Configuration::ExistsAny(char const*) const@Base" 0.8.0
+ (c++)"pkgSourceList::GetIndexes(pkgAcquire*, bool) const@Base" 0.8.0
+ (c++)"pkgSourceList::Type::FixupURI(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&) const@Base" 0.8.0
+ (c++)"pkgSourceList::Type::ParseLine(std::vector<metaIndex*, std::allocator<metaIndex*> >&, char const*, unsigned long const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
+ (c++)"pkgSourceList::FindIndex(pkgCache::PkgFileIterator, pkgIndexFile*&) const@Base" 0.8.0
+ (c++)"pkgTagSection::Find(char const*, char const*&, char const*&) const@Base" 0.8.0
+ (c++)"pkgTagSection::Find(char const*, unsigned int&) const@Base" 0.8.0
+ (c++)"pkgTagSection::FindI(char const*, long) const@Base" 0.8.0
+ (c++)"pkgTagSection::FindS(char const*) const@Base" 0.8.0
+ (c++)"pkgTagSection::FindULL(char const*, unsigned long long const&) const@Base" 0.8.0
+ (c++)"pkgTagSection::FindFlag(char const*, unsigned long&, unsigned long) const@Base" 0.8.0
+ (c++)"debStatusIndex::FindInCache(pkgCache&) const@Base" 0.8.0
+ (c++)"debStatusIndex::HasPackages() const@Base" 0.8.0
+ (c++)"debStatusIndex::Size() const@Base" 0.8.0
+ (c++)"debStatusIndex::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0
+ (c++)"debStatusIndex::Exists() const@Base" 0.8.0
+ (c++)"debStatusIndex::GetType() const@Base" 0.8.0
+ (c++)"debStatusIndex::Describe(bool) const@Base" 0.8.0
+ (c++)"debIFTypeStatus::CreatePkgParser(pkgCache::PkgFileIterator) const@Base" 0.8.0
+ (c++)"debReleaseIndex::ArchiveURI(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
+ (c++)"debReleaseIndex::GetIndexes(pkgAcquire*, bool const&) const@Base" 0.8.0
+ (c++)"debReleaseIndex::MetaIndexURI(char const*) const@Base" 0.8.0
+ (c++)"debReleaseIndex::MetaIndexFile(char const*) const@Base" 0.8.0
+ (c++)"debReleaseIndex::MetaIndexInfo(char const*) const@Base" 0.8.0
+ (c++)"debReleaseIndex::IndexURISuffix(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
+ (c++)"debReleaseIndex::SourceIndexURI(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
+ (c++)"debReleaseIndex::ComputeIndexTargets() const@Base" 0.8.0
+ (c++)"debReleaseIndex::SourceIndexURISuffix(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
+ (c++)"debReleaseIndex::Info(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
+ (c++)"debReleaseIndex::IndexURI(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
+ (c++)"debReleaseIndex::IsTrusted() const@Base" 0.8.0
+ (c++)"debSLTypeDebSrc::CreateItem(std::vector<metaIndex*, std::allocator<metaIndex*> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) const@Base" 0.8.0
+ (c++)"debSLTypeDebian::CreateItemInternal(std::vector<metaIndex*, std::allocator<metaIndex*> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&) const@Base" 0.8.0
+ (c++)"debSourcesIndex::ArchiveURI(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
+ (c++)"debSourcesIndex::SourceInfo(pkgSrcRecords::Parser const&, pkgSrcRecords::File const&) const@Base" 0.8.0
+ (c++)"debSourcesIndex::HasPackages() const@Base" 0.8.0
+ (c++)"debSourcesIndex::CreateSrcParser() const@Base" 0.8.0
+ (c++)"debSourcesIndex::Info(char const*) const@Base" 0.8.0
+ (c++)"debSourcesIndex::Size() const@Base" 0.8.0
+ (c++)"debSourcesIndex::Exists() const@Base" 0.8.0
+ (c++)"debSourcesIndex::GetType() const@Base" 0.8.0
+ (c++)"debSourcesIndex::Describe(bool) const@Base" 0.8.0
+ (c++)"debSourcesIndex::IndexURI(char const*) const@Base" 0.8.0
+ (c++)"debPackagesIndex::ArchiveURI(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
+ (c++)"debPackagesIndex::ArchiveInfo(pkgCache::VerIterator) const@Base" 0.8.0
+ (c++)"debPackagesIndex::FindInCache(pkgCache&) const@Base" 0.8.0
+ (c++)"debPackagesIndex::HasPackages() const@Base" 0.8.0
+ (c++)"debPackagesIndex::Info(char const*) const@Base" 0.8.0
+ (c++)"debPackagesIndex::Size() const@Base" 0.8.0
+ (c++)"debPackagesIndex::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0
+ (c++)"debPackagesIndex::Exists() const@Base" 0.8.0
+ (c++)"debPackagesIndex::GetType() const@Base" 0.8.0
+ (c++)"debPackagesIndex::Describe(bool) const@Base" 0.8.0
+ (c++)"debPackagesIndex::IndexURI(char const*) const@Base" 0.8.0
+ (c++)"debSrcRecordParser::Maintainer() const@Base" 0.8.0
+ (c++)"debSrcRecordParser::Package() const@Base" 0.8.0
+ (c++)"debSrcRecordParser::Section() const@Base" 0.8.0
+ (c++)"debSrcRecordParser::Version() const@Base" 0.8.0
+ (c++)"debTranslationsIndex::GetIndexes(pkgAcquire*) const@Base" 0.8.0
+ (c++)"debTranslationsIndex::FindInCache(pkgCache&) const@Base" 0.8.0
+ (c++)"debTranslationsIndex::HasPackages() const@Base" 0.8.0
+ (c++)"debTranslationsIndex::Info(char const*) const@Base" 0.8.0
+ (c++)"debTranslationsIndex::Size() const@Base" 0.8.0
+ (c++)"debTranslationsIndex::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0
+ (c++)"debTranslationsIndex::Exists() const@Base" 0.8.0
+ (c++)"debTranslationsIndex::GetType() const@Base" 0.8.0
+ (c++)"debTranslationsIndex::Describe(bool) const@Base" 0.8.0
+ (c++)"debTranslationsIndex::IndexURI(char const*) const@Base" 0.8.0
+ (c++)"Vendor::GetVendorID() const@Base" 0.8.0
+ (c++)"Vendor::LookupFingerprint(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
+ (c++)"pkgCache::DepIterator::AllTargets() const@Base" 0.8.0
+ (c++)"pkgCache::DepIterator::IsCritical() const@Base" 0.8.0
+ (c++)"pkgCache::DepIterator::OwnerPointer() const@Base" 0.8.0
+ (c++)"pkgCache::DepIterator::SmartTargetPkg(pkgCache::PkgIterator&) const@Base" 0.8.0
+ (c++)"pkgCache::GrpIterator::OwnerPointer() const@Base" 0.8.0
+ (c++)"pkgCache::GrpIterator::FindPreferredPkg(bool const&) const@Base" 0.8.0
+ (c++)"pkgCache::GrpIterator::FindPkg(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.8.0
+ (c++)"pkgCache::GrpIterator::NextPkg(pkgCache::PkgIterator const&) const@Base" 0.8.0
+ (c++)"pkgCache::PkgIterator::CurVersion() const@Base" 0.8.0
+ (c++)"pkgCache::PkgIterator::CandVersion() const@Base" 0.8.0
+ (c++)"pkgCache::PkgIterator::OwnerPointer() const@Base" 0.8.0
+ (c++)"pkgCache::PkgIterator::State() const@Base" 0.8.0
+ (c++)"pkgCache::PkgIterator::FullName(bool const&) const@Base" 0.8.0
+ (c++)"pkgCache::PrvIterator::OwnerPointer() const@Base" 0.8.0
+ (c++)"pkgCache::VerIterator::CompareVer(pkgCache::VerIterator const&) const@Base" 0.8.0
+ (c++)"pkgCache::VerIterator::NewestFile() const@Base" 0.8.0
+ (c++)"pkgCache::VerIterator::Downloadable() const@Base" 0.8.0
+ (c++)"pkgCache::VerIterator::OwnerPointer() const@Base" 0.8.0
+ (c++)"pkgCache::VerIterator::TranslatedDescription() const@Base" 0.8.0
+ (c++)"pkgCache::VerIterator::RelStr() const@Base" 0.8.0
+ (c++)"pkgCache::VerIterator::Automatic() const@Base" 0.8.0
+ (c++)"pkgCache::DescIterator::OwnerPointer() const@Base" 0.8.0
+ (c++)"pkgCache::PkgFileIterator::OwnerPointer() const@Base" 0.8.0
+ (c++)"pkgCache::VerFileIterator::OwnerPointer() const@Base" 0.8.0
+ (c++)"pkgCache::DescFileIterator::OwnerPointer() const@Base" 0.8.0
+ (c++)"pkgCache::sHash(char const*) const@Base" 0.8.0
+ (c++)"pkgCache::sHash(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.0
+ (c++)"pkgCache::Header::CheckSizes(pkgCache::Header&) const@Base" 0.8.0
+ (c++)"debSystem::CreatePM(pkgDepCache*) const@Base" 0.8.0
+ (c++)"debSystem::FindIndex(pkgCache::PkgFileIterator, pkgIndexFile*&) const@Base" 0.8.0
+ (c++)"metaIndex::GetURI() const@Base" 0.8.0
+ (c++)"metaIndex::GetDist() const@Base" 0.8.0
+ (c++)"metaIndex::GetType() const@Base" 0.8.0
+ (c++)"typeinfo for OpProgress@Base" 0.8.0
+ (c++)"typeinfo for SourceCopy@Base" 0.8.0
+ (c++)"typeinfo for pkgAcqFile@Base" 0.8.0
+ (c++)"typeinfo for pkgAcquire@Base" 0.8.0
+ (c++)"typeinfo for DynamicMMap@Base" 0.8.0
+ (c++)"typeinfo for PackageCopy@Base" 0.8.0
+ (c++)"typeinfo for pkgAcqIndex@Base" 0.8.0
+ (c++)"typeinfo for pkgDepCache@Base" 0.8.0
+ (c++)"typeinfo for pkgSimulate@Base" 0.8.0
+ (c++)"typeinfo for debIFTypePkg@Base" 0.8.0
+ (c++)"typeinfo for debIFTypeSrc@Base" 0.8.0
+ (c++)"typeinfo for debSLTypeDeb@Base" 0.8.0
+ (c++)"typeinfo for indexRecords@Base" 0.8.0
+ (c++)"typeinfo for pkgAcqMethod@Base" 0.8.0
+ (c++)"typeinfo for pkgCacheFile@Base" 0.8.0
+ (c++)"typeinfo for pkgIndexFile@Base" 0.8.0
+ (c++)"typeinfo for WeakPointable@Base" 0.8.0
+ (c++)"typeinfo for debListParser@Base" 0.8.0
+ (c++)"typeinfo for pkgAcqArchive@Base" 0.8.0
+ (c++)"typeinfo for pkgAcqMetaSig@Base" 0.8.0
+ (c++)"typeinfo for pkgTagSection@Base" 0.8.0
+ (c++)"typeinfo for OpTextProgress@Base" 0.8.0
+ (c++)"typeinfo for debIFTypeTrans@Base" 0.8.0
+ (c++)"typeinfo for debStatusIndex@Base" 0.8.0
+ (c++)"typeinfo for debIFTypeStatus@Base" 0.8.0
+ (c++)"typeinfo for debRecordParser@Base" 0.8.0
+ (c++)"typeinfo for debReleaseIndex@Base" 0.8.0
+ (c++)"typeinfo for debSLTypeDebSrc@Base" 0.8.0
+ (c++)"typeinfo for debSLTypeDebian@Base" 0.8.0
+ (c++)"typeinfo for debSourcesIndex@Base" 0.8.0
+ (c++)"typeinfo for pkgAcqDiffIndex@Base" 0.8.0
+ (c++)"typeinfo for pkgAcqMetaIndex@Base" 0.8.0
+ (c++)"typeinfo for debPackagesIndex@Base" 0.8.0
+ (c++)"typeinfo for pkgAcqIndexDiffs@Base" 0.8.0
+ (c++)"typeinfo for pkgAcqIndexTrans@Base" 0.8.0
+ (c++)"typeinfo for pkgAcquireStatus@Base" 0.8.0
+ (c++)"typeinfo for PreferenceSection@Base" 0.8.0
+ (c++)"typeinfo for pkgPackageManager@Base" 0.8.0
+ (c++)"typeinfo for debSrcRecordParser@Base" 0.8.0
+ (c++)"typeinfo for debVersioningSystem@Base" 0.8.0
+ (c++)"typeinfo for pkgUdevCdromDevices@Base" 0.8.0
+ (c++)"typeinfo for pkgVersioningSystem@Base" 0.8.0
+ (c++)"typeinfo for debTranslationsIndex@Base" 0.8.0
+ (c++)"typeinfo for MMap@Base" 0.8.0
+ (c++)"typeinfo for FileFd@Base" 0.8.0
+ (c++)"typeinfo for Vendor@Base" 0.8.0
+ (c++)"typeinfo for pkgCache@Base" 0.8.0
+ (c++)"typeinfo for IndexCopy@Base" 0.8.0
+ (c++)"typeinfo for debSystem@Base" 0.8.0
+ (c++)"typeinfo for metaIndex@Base" 0.8.0
+ (c++)"typeinfo for pkgDPkgPM@Base" 0.8.0
+ (c++)"typeinfo for pkgPolicy@Base" 0.8.0
+ (c++)"typeinfo for pkgSystem@Base" 0.8.0
+ (c++)"typeinfo for pkgAcquire::Item@Base" 0.8.0
+ (c++)"typeinfo for pkgRecords::Parser@Base" 0.8.0
+ (c++)"typeinfo for pkgDepCache::InRootSetFunc@Base" 0.8.0
+ (c++)"typeinfo for pkgDepCache::DefaultRootSetFunc@Base" 0.8.0
+ (c++)"typeinfo for pkgDepCache::Policy@Base" 0.8.0
+ (c++)"typeinfo for pkgSimulate::Policy@Base" 0.8.0
+ (c++)"typeinfo for pkgIndexFile::Type@Base" 0.8.0
+ (c++)"typeinfo for Configuration::MatchAgainstConfig@Base" 0.8.0
+ (c++)"typeinfo for pkgSourceList::Type@Base" 0.8.0
+ (c++)"typeinfo for pkgSrcRecords::Parser@Base" 0.8.0
+ (c++)"typeinfo for pkgCacheGenerator::ListParser@Base" 0.8.0
+ (c++)"typeinfo for APT::CacheSetHelper@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::DepIterator@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::GrpIterator@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::PkgIterator@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::PrvIterator@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::VerIterator@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::DescIterator@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::PkgFileIterator@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::VerFileIterator@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::DescFileIterator@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::Iterator<pkgCache::Dependency, pkgCache::DepIterator>@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::Iterator<pkgCache::Description, pkgCache::DescIterator>@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::Iterator<pkgCache::PackageFile, pkgCache::PkgFileIterator>@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::Iterator<pkgCache::Group, pkgCache::GrpIterator>@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::Iterator<pkgCache::Package, pkgCache::PkgIterator>@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::Iterator<pkgCache::VerFile, pkgCache::VerFileIterator>@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::Iterator<pkgCache::Version, pkgCache::VerIterator>@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::Iterator<pkgCache::DescFile, pkgCache::DescFileIterator>@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::Iterator<pkgCache::Provides, pkgCache::PrvIterator>@Base" 0.8.0
+ (c++)"typeinfo for pkgCache::Namespace@Base" 0.8.0
+ (c++)"typeinfo name for OpProgress@Base" 0.8.0
+ (c++)"typeinfo name for SourceCopy@Base" 0.8.0
+ (c++)"typeinfo name for pkgAcqFile@Base" 0.8.0
+ (c++)"typeinfo name for pkgAcquire@Base" 0.8.0
+ (c++)"typeinfo name for DynamicMMap@Base" 0.8.0
+ (c++)"typeinfo name for PackageCopy@Base" 0.8.0
+ (c++)"typeinfo name for pkgAcqIndex@Base" 0.8.0
+ (c++)"typeinfo name for pkgDepCache@Base" 0.8.0
+ (c++)"typeinfo name for pkgSimulate@Base" 0.8.0
+ (c++)"typeinfo name for debIFTypePkg@Base" 0.8.0
+ (c++)"typeinfo name for debIFTypeSrc@Base" 0.8.0
+ (c++)"typeinfo name for debSLTypeDeb@Base" 0.8.0
+ (c++)"typeinfo name for indexRecords@Base" 0.8.0
+ (c++)"typeinfo name for pkgAcqMethod@Base" 0.8.0
+ (c++)"typeinfo name for pkgCacheFile@Base" 0.8.0
+ (c++)"typeinfo name for pkgIndexFile@Base" 0.8.0
+ (c++)"typeinfo name for WeakPointable@Base" 0.8.0
+ (c++)"typeinfo name for debListParser@Base" 0.8.0
+ (c++)"typeinfo name for pkgAcqArchive@Base" 0.8.0
+ (c++)"typeinfo name for pkgAcqMetaSig@Base" 0.8.0
+ (c++)"typeinfo name for pkgTagSection@Base" 0.8.0
+ (c++)"typeinfo name for OpTextProgress@Base" 0.8.0
+ (c++)"typeinfo name for debIFTypeTrans@Base" 0.8.0
+ (c++)"typeinfo name for debStatusIndex@Base" 0.8.0
+ (c++)"typeinfo name for debIFTypeStatus@Base" 0.8.0
+ (c++)"typeinfo name for debRecordParser@Base" 0.8.0
+ (c++)"typeinfo name for debReleaseIndex@Base" 0.8.0
+ (c++)"typeinfo name for debSLTypeDebSrc@Base" 0.8.0
+ (c++)"typeinfo name for debSLTypeDebian@Base" 0.8.0
+ (c++)"typeinfo name for debSourcesIndex@Base" 0.8.0
+ (c++)"typeinfo name for pkgAcqDiffIndex@Base" 0.8.0
+ (c++)"typeinfo name for pkgAcqMetaIndex@Base" 0.8.0
+ (c++)"typeinfo name for debPackagesIndex@Base" 0.8.0
+ (c++)"typeinfo name for pkgAcqIndexDiffs@Base" 0.8.0
+ (c++)"typeinfo name for pkgAcqIndexTrans@Base" 0.8.0
+ (c++)"typeinfo name for pkgAcquireStatus@Base" 0.8.0
+ (c++)"typeinfo name for PreferenceSection@Base" 0.8.0
+ (c++)"typeinfo name for pkgPackageManager@Base" 0.8.0
+ (c++)"typeinfo name for debSrcRecordParser@Base" 0.8.0
+ (c++)"typeinfo name for debVersioningSystem@Base" 0.8.0
+ (c++)"typeinfo name for pkgUdevCdromDevices@Base" 0.8.0
+ (c++)"typeinfo name for pkgVersioningSystem@Base" 0.8.0
+ (c++)"typeinfo name for debTranslationsIndex@Base" 0.8.0
+ (c++)"typeinfo name for MMap@Base" 0.8.0
+ (c++)"typeinfo name for FileFd@Base" 0.8.0
+ (c++)"typeinfo name for Vendor@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache@Base" 0.8.0
+ (c++)"typeinfo name for IndexCopy@Base" 0.8.0
+ (c++)"typeinfo name for debSystem@Base" 0.8.0
+ (c++)"typeinfo name for metaIndex@Base" 0.8.0
+ (c++)"typeinfo name for pkgDPkgPM@Base" 0.8.0
+ (c++)"typeinfo name for pkgPolicy@Base" 0.8.0
+ (c++)"typeinfo name for pkgSystem@Base" 0.8.0
+ (c++)"typeinfo name for pkgAcquire::Item@Base" 0.8.0
+ (c++)"typeinfo name for pkgRecords::Parser@Base" 0.8.0
+ (c++)"typeinfo name for pkgDepCache::InRootSetFunc@Base" 0.8.0
+ (c++)"typeinfo name for pkgDepCache::DefaultRootSetFunc@Base" 0.8.0
+ (c++)"typeinfo name for pkgDepCache::Policy@Base" 0.8.0
+ (c++)"typeinfo name for pkgSimulate::Policy@Base" 0.8.0
+ (c++)"typeinfo name for pkgIndexFile::Type@Base" 0.8.0
+ (c++)"typeinfo name for Configuration::MatchAgainstConfig@Base" 0.8.0
+ (c++)"typeinfo name for pkgSourceList::Type@Base" 0.8.0
+ (c++)"typeinfo name for pkgSrcRecords::Parser@Base" 0.8.0
+ (c++)"typeinfo name for pkgCacheGenerator::ListParser@Base" 0.8.0
+ (c++)"typeinfo name for APT::CacheSetHelper@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::DepIterator@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::GrpIterator@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::PkgIterator@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::PrvIterator@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::VerIterator@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::DescIterator@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::PkgFileIterator@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::VerFileIterator@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::DescFileIterator@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::Iterator<pkgCache::Dependency, pkgCache::DepIterator>@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::Iterator<pkgCache::Description, pkgCache::DescIterator>@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::Iterator<pkgCache::PackageFile, pkgCache::PkgFileIterator>@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::Iterator<pkgCache::Group, pkgCache::GrpIterator>@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::Iterator<pkgCache::Package, pkgCache::PkgIterator>@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::Iterator<pkgCache::VerFile, pkgCache::VerFileIterator>@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::Iterator<pkgCache::Version, pkgCache::VerIterator>@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::Iterator<pkgCache::DescFile, pkgCache::DescFileIterator>@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::Iterator<pkgCache::Provides, pkgCache::PrvIterator>@Base" 0.8.0
+ (c++)"typeinfo name for pkgCache::Namespace@Base" 0.8.0
+ (c++)"vtable for OpProgress@Base" 0.8.0
+ (c++)"vtable for SourceCopy@Base" 0.8.0
+ (c++)"vtable for pkgAcqFile@Base" 0.8.0
+ (c++)"vtable for pkgAcquire@Base" 0.8.0
+ (c++)"vtable for DynamicMMap@Base" 0.8.0
+ (c++)"vtable for PackageCopy@Base" 0.8.0
+ (c++)"vtable for pkgAcqIndex@Base" 0.8.0
+ (c++)"vtable for pkgDepCache@Base" 0.8.0
+ (c++)"vtable for pkgSimulate@Base" 0.8.0
+ (c++)"vtable for debIFTypePkg@Base" 0.8.0
+ (c++)"vtable for debIFTypeSrc@Base" 0.8.0
+ (c++)"vtable for debSLTypeDeb@Base" 0.8.0
+ (c++)"vtable for indexRecords@Base" 0.8.0
+ (c++)"vtable for pkgAcqMethod@Base" 0.8.0
+ (c++)"vtable for pkgCacheFile@Base" 0.8.0
+ (c++)"vtable for pkgIndexFile@Base" 0.8.0
+ (c++)"vtable for debListParser@Base" 0.8.0
+ (c++)"vtable for pkgAcqArchive@Base" 0.8.0
+ (c++)"vtable for pkgAcqMetaSig@Base" 0.8.0
+ (c++)"vtable for pkgTagSection@Base" 0.8.0
+ (c++)"vtable for OpTextProgress@Base" 0.8.0
+ (c++)"vtable for debIFTypeTrans@Base" 0.8.0
+ (c++)"vtable for debStatusIndex@Base" 0.8.0
+ (c++)"vtable for debIFTypeStatus@Base" 0.8.0
+ (c++)"vtable for debRecordParser@Base" 0.8.0
+ (c++)"vtable for debReleaseIndex@Base" 0.8.0
+ (c++)"vtable for debSLTypeDebSrc@Base" 0.8.0
+ (c++)"vtable for debSLTypeDebian@Base" 0.8.0
+ (c++)"vtable for debSourcesIndex@Base" 0.8.0
+ (c++)"vtable for pkgAcqDiffIndex@Base" 0.8.0
+ (c++)"vtable for pkgAcqMetaIndex@Base" 0.8.0
+ (c++)"vtable for debPackagesIndex@Base" 0.8.0
+ (c++)"vtable for pkgAcqIndexDiffs@Base" 0.8.0
+ (c++)"vtable for pkgAcqIndexTrans@Base" 0.8.0
+ (c++)"vtable for pkgAcquireStatus@Base" 0.8.0
+ (c++)"vtable for PreferenceSection@Base" 0.8.0
+ (c++)"vtable for pkgPackageManager@Base" 0.8.0
+ (c++)"vtable for debSrcRecordParser@Base" 0.8.0
+ (c++)"vtable for debVersioningSystem@Base" 0.8.0
+ (c++)"vtable for pkgUdevCdromDevices@Base" 0.8.0
+ (c++)"vtable for pkgVersioningSystem@Base" 0.8.0
+ (c++)"vtable for debTranslationsIndex@Base" 0.8.0
+ (c++)"vtable for MMap@Base" 0.8.0
+ (c++)"vtable for FileFd@Base" 0.8.0
+ (c++)"vtable for Vendor@Base" 0.8.0
+ (c++)"vtable for pkgCache@Base" 0.8.0
+ (c++)"vtable for IndexCopy@Base" 0.8.0
+ (c++)"vtable for debSystem@Base" 0.8.0
+ (c++)"vtable for metaIndex@Base" 0.8.0
+ (c++)"vtable for pkgDPkgPM@Base" 0.8.0
+ (c++)"vtable for pkgPolicy@Base" 0.8.0
+ (c++)"vtable for pkgSystem@Base" 0.8.0
+ (c++)"vtable for pkgAcquire::Item@Base" 0.8.0
+ (c++)"vtable for pkgRecords::Parser@Base" 0.8.0
+ (c++)"vtable for pkgDepCache::InRootSetFunc@Base" 0.8.0
+ (c++)"vtable for pkgDepCache::DefaultRootSetFunc@Base" 0.8.0
+ (c++)"vtable for pkgDepCache::Policy@Base" 0.8.0
+ (c++)"vtable for pkgSimulate::Policy@Base" 0.8.0
+ (c++)"vtable for pkgIndexFile::Type@Base" 0.8.0
+ (c++)"vtable for Configuration::MatchAgainstConfig@Base" 0.8.0
+ (c++)"vtable for pkgSourceList::Type@Base" 0.8.0
+ (c++)"vtable for pkgSrcRecords::Parser@Base" 0.8.0
+ (c++)"vtable for pkgCacheGenerator::ListParser@Base" 0.8.0
+ (c++)"vtable for APT::CacheSetHelper@Base" 0.8.0
+ (c++)"vtable for pkgCache::DepIterator@Base" 0.8.0
+ (c++)"vtable for pkgCache::GrpIterator@Base" 0.8.0
+ (c++)"vtable for pkgCache::PkgIterator@Base" 0.8.0
+ (c++)"vtable for pkgCache::PrvIterator@Base" 0.8.0
+ (c++)"vtable for pkgCache::VerIterator@Base" 0.8.0
+ (c++)"vtable for pkgCache::DescIterator@Base" 0.8.0
+ (c++)"vtable for pkgCache::PkgFileIterator@Base" 0.8.0
+ (c++)"vtable for pkgCache::VerFileIterator@Base" 0.8.0
+ (c++)"vtable for pkgCache::DescFileIterator@Base" 0.8.0
+ (c++)"vtable for pkgCache::Iterator<pkgCache::Dependency, pkgCache::DepIterator>@Base" 0.8.0
+ (c++)"vtable for pkgCache::Iterator<pkgCache::Description, pkgCache::DescIterator>@Base" 0.8.0
+ (c++)"vtable for pkgCache::Iterator<pkgCache::PackageFile, pkgCache::PkgFileIterator>@Base" 0.8.0
+ (c++)"vtable for pkgCache::Iterator<pkgCache::Group, pkgCache::GrpIterator>@Base" 0.8.0
+ (c++)"vtable for pkgCache::Iterator<pkgCache::Package, pkgCache::PkgIterator>@Base" 0.8.0
+ (c++)"vtable for pkgCache::Iterator<pkgCache::VerFile, pkgCache::VerFileIterator>@Base" 0.8.0
+ (c++)"vtable for pkgCache::Iterator<pkgCache::Version, pkgCache::VerIterator>@Base" 0.8.0
+ (c++)"vtable for pkgCache::Iterator<pkgCache::DescFile, pkgCache::DescFileIterator>@Base" 0.8.0
+ (c++)"vtable for pkgCache::Iterator<pkgCache::Provides, pkgCache::PrvIterator>@Base" 0.8.0
+ (c++)"non-virtual thunk to pkgDepCache::DefaultRootSetFunc::~DefaultRootSetFunc()@Base" 0.8.0
+ (c++)"operator<<(std::basic_ostream<char, std::char_traits<char> >&, pkgCache::DepIterator)@Base" 0.8.0
+ (c++)"operator<<(std::basic_ostream<char, std::char_traits<char> >&, pkgCache::PkgIterator)@Base" 0.8.0
+ _apt_DebSrcType@Base 0.8.0
+ _apt_DebType@Base 0.8.0
+ _config@Base 0.8.0
+ _system@Base 0.8.0
+ debSys@Base 0.8.0
+ debVS@Base 0.8.0
+ pkgLibVersion@Base 0.8.0
+ pkgVersion@Base 0.8.0
+### architecture specific: va_list
+ (arch=armel armhf|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, std::__va_list&) const@Base" 0.8.15~exp1
+ (arch=i386 hurd-i386 kfreebsd-i386 ppc64|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, char*&) const@Base" 0.8.15~exp1
+ (arch=hppa ia64 mips mipsel sparc sparc64|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, void*&) const@Base" 0.8.15~exp1
+ (arch=amd64 kfreebsd-amd64 powerpc powerpcspe s390 s390x x32|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, __va_list_tag (&) [1]) const@Base" 0.8.15~exp1
+ (arch=sh4|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, __builtin_va_list&) const@Base" 0.8.15~exp1
+ (arch=alpha|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, __va_list_tag&) const@Base" 0.8.15~exp1
+### architecture specific: va_list & size_t
+ (arch=i386 hurd-i386 kfreebsd-i386|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, char*&, unsigned int&)@Base" 0.8.11.4
+ (arch=armel armhf|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, std::__va_list&, unsigned int&)@Base" 0.8.11.4
+ (arch=alpha|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag&, unsigned long&)@Base" 0.8.11.4
+ (arch=powerpc powerpcspe x32|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1], unsigned int&)@Base" 0.8.11.4
+ (arch=amd64 kfreebsd-amd64 s390 s390x|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1], unsigned long&)@Base" 0.8.11.4
+ (arch=hppa mips mipsel sparc|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&, unsigned int&)@Base" 0.8.11.4
+ (arch=ia64 sparc64|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&, unsigned long&)@Base" 0.8.11.4
+ (arch=sh4|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __builtin_va_list&, unsigned int&)@Base" 0.8.11.4
+ (arch=ppc64|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, char*&, unsigned long&)@Base" 0.8.11.4
+ (arch=i386 hurd-i386 kfreebsd-i386|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, char*&, int, unsigned int&)@Base" 0.8.11.4
+ (arch=armel armhf|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, std::__va_list&, int, unsigned int&)@Base" 0.8.11.4
+ (arch=alpha|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag&, int, unsigned long&)@Base" 0.8.11.4
+ (arch=powerpc powerpcspe x32|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1], int, unsigned int&)@Base" 0.8.11.4
+ (arch=amd64 kfreebsd-amd64 s390 s390x|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1], int, unsigned long&)@Base" 0.8.11.4
+ (arch=hppa mips mipsel sparc|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&, int, unsigned int&)@Base" 0.8.11.4
+ (arch=ia64 sparc64|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&, int, unsigned long&)@Base" 0.8.11.4 1
+ (arch=sh4|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __builtin_va_list&, int, unsigned int&)@Base" 0.8.11.4
+ (arch=ppc64|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, char*&, int, unsigned long&)@Base" 0.8.11.4
+### architecture specific: size_t
+ (arch=i386 armel armhf hppa hurd-i386 kfreebsd-i386 mips mipsel powerpc powerpcspe sh4 sparc x32|c++)"_strtabexpand(char*, unsigned int)@Base" 0.8.0
+ (arch=alpha amd64 ia64 kfreebsd-amd64 s390 s390x sparc64 ppc64|c++)"_strtabexpand(char*, unsigned long)@Base" 0.8.0
+### architecture specific: time_t
+ (arch=!x32|c++)"TimeRFC1123(long)@Base" 0.8.0
+ (arch=x32|c++)"TimeRFC1123(long long)@Base" 0.8.0
+ (arch=!x32|c++)"FTPMDTMStrToTime(char const*, long&)@Base" 0.8.0
+ (arch=x32|c++)"FTPMDTMStrToTime(char const*, long long&)@Base" 0.8.0
+ (arch=!x32|c++)"StrToTime(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long&)@Base" 0.8.0
+ (arch=x32|c++)"StrToTime(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long long&)@Base" 0.8.0
+ (arch=!x32|c++)"RFC1123StrToTime(char const*, long&)@Base" 0.8.0
+ (arch=x32|c++)"RFC1123StrToTime(char const*, long long&)@Base" 0.8.0
+###
+ (c++)"Configuration::MatchAgainstConfig::clearPatterns()@Base" 0.8.1
+ (c++)"CreateAPTDirectoryIfNeeded(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.2
+ (c++)"FileFd::FileSize()@Base" 0.8.8
+ (c++)"Base256ToNum(char const*, unsigned long&, unsigned int)@Base" 0.8.11
+ (c++)"pkgDepCache::SetCandidateRelease(pkgCache::VerIterator, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::list<std::pair<pkgCache::VerIterator, pkgCache::VerIterator>, std::allocator<std::pair<pkgCache::VerIterator, pkgCache::VerIterator> > >&)@Base" 0.8.11
+ (c++)"pkgDepCache::SetCandidateRelease(pkgCache::VerIterator, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.11
+ (c++)"RealFileExists(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.11
+ (c++)"StripEpoch(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.11
+ (c++)"pkgAcqIndex::Init(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.11
+ (c++)"pkgAcqIndex::pkgAcqIndex(pkgAcquire*, IndexTarget const*, HashString const&, indexRecords const*)@Base" 0.8.11
+ (c++)"pkgTagSection::FindFlag(unsigned long&, unsigned long, char const*, char const*)@Base" 0.8.11
+ (c++)"pkgAcqSubIndex::ParseIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.11
+ (c++)"pkgAcqSubIndex::Custom600Headers()@Base" 0.8.11
+ (c++)"pkgAcqSubIndex::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.11
+ (c++)"pkgAcqSubIndex::DescURI()@Base" 0.8.11
+ (c++)"pkgAcqSubIndex::pkgAcqSubIndex(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, HashString const&)@Base" 0.8.11
+ (c++)"pkgAcqSubIndex::~pkgAcqSubIndex()@Base" 0.8.11
+ (c++)"pkgAcqMetaClearSig::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.11
+ (c++)"pkgAcqMetaClearSig::pkgAcqMetaClearSig(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<IndexTarget*, std::allocator<IndexTarget*> > const*, indexRecords*)@Base" 0.8.11
+ (c++)"pkgAcqMetaClearSig::~pkgAcqMetaClearSig()@Base" 0.8.11
+ (c++)"pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire*, IndexTarget const*, HashString const&, indexRecords const*)@Base" 0.8.11
+ (c++)"IndexTarget::IsOptional() const@Base" 0.8.11
+ (c++)"IndexTarget::IsSubIndex() const@Base" 0.8.11
+ (c++)"debReleaseIndex::TranslationIndexURI(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.11
+ (c++)"debReleaseIndex::TranslationIndexURISuffix(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.8.11
+ (c++)"typeinfo for pkgAcqSubIndex@Base" 0.8.11
+ (c++)"typeinfo for pkgAcqMetaClearSig@Base" 0.8.11
+ (c++)"typeinfo name for pkgAcqSubIndex@Base" 0.8.11
+ (c++)"typeinfo name for pkgAcqMetaClearSig@Base" 0.8.11
+ (c++)"vtable for pkgAcqSubIndex@Base" 0.8.11
+ (c++)"vtable for pkgAcqMetaClearSig@Base" 0.8.11
+ (c++)"FindMountPointForDevice(char const*)@Base" 0.8.12
+ (c++)"pkgUdevCdromDevices::ScanForRemovable(bool)@Base" 0.8.12
+ (c++)"APT::Configuration::Compressor::Compressor(char const*, char const*, char const*, char const*, char const*, unsigned short)@Base" 0.8.12
+ (c++)"APT::Configuration::Compressor::~Compressor()@Base" 0.8.12
+ (c++)"APT::Configuration::getCompressors(bool)@Base" 0.8.12
+ (c++)"APT::Configuration::getCompressorExtensions()@Base" 0.8.12
+ (c++)"APT::Configuration::setDefaultConfigurationForCompressors()@Base" 0.8.12
+ (c++)"pkgAcqMetaClearSig::Custom600Headers()@Base" 0.8.13
+ (c++)"debListParser::NewProvidesAllArch(pkgCache::VerIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.13.2
+ (c++)"pkgDepCache::IsModeChangeOk(pkgDepCache::ModeList, pkgCache::PkgIterator const&, unsigned long, bool)@Base" 0.8.13.2
+ (c++)"pkgCache::DepIterator::IsNegative() const@Base" 0.8.15~exp1
+ (c++)"Configuration::CndSet(char const*, int)@Base" 0.8.15.3
+ (c++)"pkgProblemResolver::InstOrNewPolicyBroken(pkgCache::PkgIterator)@Base" 0.8.15.3
+ (c++)"DeEscapeString(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.15.4
+ (c++)"GetModificationTime(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.15.6
+ (c++)"pkgSourceList::GetLastModifiedTime()@Base" 0.8.15.6
+ (c++)"pkgCacheGenerator::NewDepends(pkgCache::PkgIterator&, pkgCache::VerIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int const&, unsigned int const&, unsigned int*&)@Base" 0.8.15.6
+ (c++)"pkgCacheFile::RemoveCaches()@Base" 0.8.15.7
+ (c++)"pkgOrderList::VisitNode(pkgCache::PkgIterator, char const*)@Base" 0.8.15.7
+### external dependency resolver ###
+ (c++)"edspIFType::~edspIFType()@Base" 0.8.16~exp2
+ (c++)"edspSystem::Initialize(Configuration&)@Base" 0.8.16~exp2
+ (c++)"edspSystem::AddStatusFiles(std::vector<pkgIndexFile*, std::allocator<pkgIndexFile*> >&)@Base" 0.8.16~exp2
+ (c++)"edspSystem::ArchiveSupported(char const*)@Base" 0.8.16~exp2
+ (c++)"edspSystem::Lock()@Base" 0.8.16~exp2
+ (c++)"edspSystem::Score(Configuration const&)@Base" 0.8.16~exp2
+ (c++)"edspSystem::UnLock(bool)@Base" 0.8.16~exp2
+ (c++)"edspSystem::edspSystem()@Base" 0.8.16~exp2
+ (c++)"edspSystem::~edspSystem()@Base" 0.8.16~exp2
+ (c++)"edspListParser::NewVersion(pkgCache::VerIterator&)@Base" 0.8.16~exp2
+ (c++)"edspListParser::Description()@Base" 0.8.16~exp2
+ (c++)"edspListParser::ParseStatus(pkgCache::PkgIterator&, pkgCache::VerIterator&)@Base" 0.8.16~exp2
+ (c++)"edspListParser::VersionHash()@Base" 0.8.16~exp2
+ (c++)"edspListParser::Description_md5()@Base" 0.8.16~exp2
+ (c++)"edspListParser::LoadReleaseInfo(pkgCache::PkgFileIterator&, FileFd&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.16~exp2
+ (c++)"edspListParser::DescriptionLanguage()@Base" 0.8.16~exp2
+ (c++)"edspListParser::edspListParser(FileFd*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.16~exp2
+ (c++)"edspListParser::~edspListParser()@Base" 0.8.16~exp2
+ (c++)"edspIndex::edspIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.16~exp2
+ (c++)"edspIndex::~edspIndex()@Base" 0.8.16~exp2
+ (c++)"edspIFType::CreatePkgParser(pkgCache::PkgFileIterator) const@Base" 0.8.16~exp2
+ (c++)"edspSystem::CreatePM(pkgDepCache*) const@Base" 0.8.16~exp2
+ (c++)"edspSystem::FindIndex(pkgCache::PkgFileIterator, pkgIndexFile*&) const@Base" 0.8.16~exp2
+ (c++)"edspIndex::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.16~exp2
+ (c++)"edspIndex::GetType() const@Base" 0.8.16~exp2
+ (c++)"EDSP::WriteError(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, _IO_FILE*)@Base" 0.8.16~exp2
+ (c++)"EDSP::ReadRequest(int, std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, bool&, bool&, bool&)@Base" 0.8.16~exp2
+ (c++)"EDSP::ApplyRequest(std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, pkgDepCache&)@Base" 0.8.16~exp2
+ (c++)"EDSP::ReadResponse(int, pkgDepCache&, OpProgress*)@Base" 0.8.16~exp2
+ (c++)"EDSP::WriteRequest(pkgDepCache&, _IO_FILE*, bool, bool, bool, OpProgress*)@Base" 0.8.16~exp2
+ (c++)"EDSP::ExecuteSolver(char const*, int*, int*)@Base" 0.8.16~exp2
+ (c++)"EDSP::WriteProgress(unsigned short, char const*, _IO_FILE*)@Base" 0.8.16~exp2
+ (c++)"EDSP::WriteScenario(pkgDepCache&, _IO_FILE*, OpProgress*)@Base" 0.8.16~exp2
+ (c++)"EDSP::WriteSolution(pkgDepCache&, _IO_FILE*)@Base" 0.8.16~exp2
+ (c++)"EDSP::ResolveExternal(char const*, pkgDepCache&, bool, bool, bool, OpProgress*)@Base" 0.8.16~exp2
+ (c++)"EDSP::DepMap@Base" 0.8.16~exp2
+ (c++)"EDSP::PrioMap@Base" 0.8.16~exp2
+ (c++)"pkgDepCache::Policy::GetPriority(pkgCache::PkgIterator const&)@Base" 0.8.16~exp6
+ (c++)"pkgDepCache::Policy::GetPriority(pkgCache::PkgFileIterator const&)@Base" 0.8.16~exp6
+ (c++)"typeinfo for edspIFType@Base" 0.8.16~exp2
+ (c++)"typeinfo for edspSystem@Base" 0.8.16~exp2
+ (c++)"typeinfo for edspListParser@Base" 0.8.16~exp2
+ (c++)"typeinfo for edspIndex@Base" 0.8.16~exp2
+ (c++)"typeinfo name for edspIFType@Base" 0.8.16~exp2
+ (c++)"typeinfo name for edspSystem@Base" 0.8.16~exp2
+ (c++)"typeinfo name for edspListParser@Base" 0.8.16~exp2
+ (c++)"typeinfo name for edspIndex@Base" 0.8.16~exp2
+ (c++)"vtable for edspIFType@Base" 0.8.16~exp2
+ (c++)"vtable for edspSystem@Base" 0.8.16~exp2
+ (c++)"vtable for edspListParser@Base" 0.8.16~exp2
+ (c++)"vtable for edspIndex@Base" 0.8.16~exp2
+ edspSys@Base 0.8.16~exp2
+### generalisation of checksums (with lfs) -- mostly api-compatible available (without sha512 in previous versions)
+ (c++)"AddCRC16(unsigned short, void const*, unsigned long long)@Base" 0.8.16~exp2
+ (c++)"MD5Summation::Add(unsigned char const*, unsigned long long)@Base" 0.8.16~exp6
+ (c++)"MD5Summation::Result()@Base" 0.8.16~exp2
+ (c++)"MD5Summation::MD5Summation()@Base" 0.8.16~exp2
+ (c++)"SHA1Summation::SHA1Summation()@Base" 0.8.16~exp2
+ (c++)"SHA1Summation::Add(unsigned char const*, unsigned long long)@Base" 0.8.16~exp6
+ (c++)"SHA1Summation::Result()@Base" 0.8.16~exp2
+ (c++)"SHA256Summation::Add(unsigned char const*, unsigned long long)@Base" 0.8.16~exp6
+ (c++)"SHA512Summation::Add(unsigned char const*, unsigned long long)@Base" 0.8.16~exp6
+ (c++)"debRecordParser::SHA512Hash()@Base" 0.8.16~exp2
+ (c++)"pkgRecords::Parser::SHA512Hash()@Base" 0.8.16~exp6
+ (c++)"Hashes::AddFD(int, unsigned long long, bool, bool, bool, bool)@Base" 0.8.16~exp6
+ (c++)"SummationImplementation::AddFD(int, unsigned long long)@Base" 0.8.16~exp6
+ (c++)"typeinfo for MD5Summation@Base" 0.8.16~exp6
+ (c++)"typeinfo for SHA1Summation@Base" 0.8.16~exp6
+ (c++)"typeinfo for SHA256Summation@Base" 0.8.16~exp6
+ (c++)"typeinfo for SHA512Summation@Base" 0.8.16~exp6
+ (c++)"typeinfo for SHA2SummationBase@Base" 0.8.16~exp6
+ (c++)"typeinfo for SummationImplementation@Base" 0.8.16~exp6
+ (c++)"typeinfo name for MD5Summation@Base" 0.8.16~exp6
+ (c++)"typeinfo name for SHA1Summation@Base" 0.8.16~exp6
+ (c++)"typeinfo name for SHA256Summation@Base" 0.8.16~exp6
+ (c++)"typeinfo name for SHA512Summation@Base" 0.8.16~exp6
+ (c++)"typeinfo name for SHA2SummationBase@Base" 0.8.16~exp6
+ (c++)"typeinfo name for SummationImplementation@Base" 0.8.16~exp6
+ (c++)"vtable for MD5Summation@Base" 0.8.16~exp6
+ (c++)"vtable for SHA1Summation@Base" 0.8.16~exp6
+ (c++)"vtable for SHA256Summation@Base" 0.8.16~exp6
+ (c++)"vtable for SHA512Summation@Base" 0.8.16~exp6
+ (c++)"vtable for SHA2SummationBase@Base" 0.8.16~exp6
+ (c++)"vtable for SummationImplementation@Base" 0.8.16~exp6
+### large file support - available in older api-compatible versions without lfs ###
+ (c++)"StrToNum(char const*, unsigned long long&, unsigned int, unsigned int)@Base" 0.8.16~exp6
+ (c++)"OpProgress::SubProgress(unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, float)@Base" 0.8.16~exp6
+ (c++)"OpProgress::OverallProgress(unsigned long long, unsigned long long, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.16~exp6
+ (c++)"OpProgress::Progress(unsigned long long)@Base" 0.8.16~exp6
+ (c++)"SourceCopy::GetFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned long long&)@Base" 0.8.16~exp6
+ (c++)"pkgAcqFile::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
+ (c++)"pkgAcqFile::pkgAcqFile(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)@Base" 0.8.16~exp6
+ (c++)"pkgAcquire::UriIterator::~UriIterator()@Base" 0.8.16~exp6
+ (c++)"pkgAcquire::MethodConfig::~MethodConfig()@Base" 0.8.16~exp6
+ (c++)"pkgAcquire::Item::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
+ (c++)"pkgAcquire::Item::Start(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long)@Base" 0.8.16~exp6
+ (c++)"pkgRecords::Parser::RecordField(char const*)@Base" 0.8.16~exp6
+ (c++)"pkgTagFile::Jump(pkgTagSection&, unsigned long long)@Base" 0.8.16~exp6
+ (c++)"pkgTagFile::Offset()@Base" 0.8.16~exp6
+ (c++)"pkgTagFile::pkgTagFile(FileFd*, unsigned long long)@Base" 0.8.16~exp6
+ (c++)"DynamicMMap::RawAllocate(unsigned long long, unsigned long)@Base" 0.8.16~exp6
+ (c++)"PackageCopy::GetFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned long long&)@Base" 0.8.16~exp6
+ (c++)"pkgAcqIndex::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
+ (c++)"indexRecords::parseSumData(char const*&, char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned long long&)@Base" 0.8.16~exp6
+ (c++)"pkgAcqArchive::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
+ (c++)"pkgTagSection::~pkgTagSection()@Base" 0.8.16~exp6
+ (c++)"pkgAcqSubIndex::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
+ (c++)"debRecordParser::RecordField(char const*)@Base" 0.8.16~exp6
+ (c++)"debReleaseIndex::SetTrusted(bool)@Base" 0.8.16~exp6
+ (c++)"debReleaseIndex::debReleaseIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)@Base" 0.8.16~exp6
+ (c++)"pkgAcqMetaIndex::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
+ (c++)"pkgAcqIndexDiffs::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
+ (c++)"pkgAcqMetaSig::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
+ (c++)"pkgAcqDiffIndex::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.8.16~exp6
+ (c++)"pkgAcquireStatus::Fetched(unsigned long long, unsigned long long)@Base" 0.8.16~exp6
+ (c++)"PreferenceSection::~PreferenceSection()@Base" 0.8.16~exp6
+ (c++)"pkgCacheGenerator::NewDescription(pkgCache::DescIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, HashSumValue<128> const&, unsigned int)@Base" 0.8.16~exp6
+ (c++)"pkgProblemResolver::ResolveInternal(bool)@Base" 0.8.16~exp6
+ (c++)"pkgProblemResolver::ResolveByKeepInternal()@Base" 0.8.16~exp6
+ (c++)"FileFd::Read(void*, unsigned long long, unsigned long long*)@Base" 0.8.16~exp6
+ (c++)"FileFd::Seek(unsigned long long)@Base" 0.8.16~exp6
+ (c++)"FileFd::Skip(unsigned long long)@Base" 0.8.16~exp6
+ (c++)"FileFd::Write(void const*, unsigned long long)@Base" 0.8.16~exp6
+ (c++)"FileFd::Truncate(unsigned long long)@Base" 0.8.16~exp6
+ (c++)"pkgPolicy::GetPriority(pkgCache::PkgFileIterator const&)@Base" 0.8.16~exp6
+ (c++)"OptionalIndexTarget::IsOptional() const@Base" 0.8.16~exp6
+ (c++)"typeinfo for pkgTagFile@Base" 0.8.16~exp6
+ (c++)"typeinfo for IndexTarget@Base" 0.8.16~exp6
+ (c++)"typeinfo for pkgSrcRecords@Base" 0.8.16~exp6
+ (c++)"typeinfo for OptionalIndexTarget@Base" 0.8.16~exp6
+ (c++)"typeinfo for pkgAcquire::UriIterator@Base" 0.8.16~exp6
+ (c++)"typeinfo for pkgAcquire::MethodConfig@Base" 0.8.16~exp6
+ (c++)"typeinfo for pkgAcquire::Queue@Base" 0.8.16~exp6
+ (c++)"typeinfo for pkgAcquire::Worker@Base" 0.8.16~exp6
+ (c++)"typeinfo name for pkgTagFile@Base" 0.8.16~exp6
+ (c++)"typeinfo name for IndexTarget@Base" 0.8.16~exp6
+ (c++)"typeinfo name for pkgSrcRecords@Base" 0.8.16~exp6
+ (c++)"typeinfo name for OptionalIndexTarget@Base" 0.8.16~exp6
+ (c++)"typeinfo name for pkgAcquire::UriIterator@Base" 0.8.16~exp6
+ (c++)"typeinfo name for pkgAcquire::MethodConfig@Base" 0.8.16~exp6
+ (c++)"typeinfo name for pkgAcquire::Queue@Base" 0.8.16~exp6
+ (c++)"typeinfo name for pkgAcquire::Worker@Base" 0.8.16~exp6
+ (c++)"vtable for pkgTagFile@Base" 0.8.16~exp6
+ (c++)"vtable for IndexTarget@Base" 0.8.16~exp6
+ (c++)"vtable for pkgSrcRecords@Base" 0.8.16~exp6
+ (c++)"vtable for OptionalIndexTarget@Base" 0.8.16~exp6
+ (c++)"vtable for pkgAcquire::UriIterator@Base" 0.8.16~exp6
+ (c++)"vtable for pkgAcquire::MethodConfig@Base" 0.8.16~exp6
+ (c++)"vtable for pkgAcquire::Queue@Base" 0.8.16~exp6
+ (c++)"vtable for pkgAcquire::Worker@Base" 0.8.16~exp6
+### remove deprecated parameter
+ (c++)"pkgDepCache::SetCandidateVersion(pkgCache::VerIterator)@Base" 0.8.16~exp6
+ (c++)"pkgDepCache::AddSizes(pkgCache::PkgIterator const&, bool)@Base" 0.8.16~exp6
+ (c++)"pkgDepCache::AddStates(pkgCache::PkgIterator const&, bool)@Base" 0.8.16~exp6
+### used internally by public interfaces - if you use them directly, you can keep the pieces
+ (c++|optional=internal|regex)"^SHA256_.*@Base$" 0.8.16~exp2
+ (c++|optional=internal|regex)"^SHA384_.*@Base$" 0.8.16~exp2
+ (c++|optional=internal|regex)"^SHA512_.*@Base$" 0.8.16~exp2
+### orderlist rework: the touched methods are protected
+ (c++)"SigINT(int)@Base" 0.8.16~exp14
+ (c++)"pkgPackageManager::SigINTStop@Base" 0.8.16~exp14
+ (c++)"pkgPackageManager::SmartUnPack(pkgCache::PkgIterator, bool, int)@Base" 0.8.16~exp14
+ (c++)"pkgPackageManager::SmartConfigure(pkgCache::PkgIterator, int)@Base" 0.8.16~exp14
+### FileFd rework: supporting different on-the-fly (de)compressing needs more parameter (abi), but the api is stable
+ (c++)"FileFd::OpenDescriptor(int, unsigned int, FileFd::CompressMode, bool)@Base" 0.8.16~exp9
+ (c++)"FileFd::OpenDescriptor(int, unsigned int, APT::Configuration::Compressor const&, bool)@Base" 0.8.16~exp9
+ (c++)"FileFd::ModificationTime()@Base" 0.8.16~exp9
+ (c++)"FileFd::Open(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, FileFd::CompressMode, unsigned long)@Base" 0.8.16~exp9
+ (c++)"FileFd::Open(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, APT::Configuration::Compressor const&, unsigned long)@Base" 0.8.16~exp9
+ (c++)"FileFd::ReadLine(char*, unsigned long long)@Base" 0.8.16~exp9
+ (c++)"SummationImplementation::AddFD(FileFd&, unsigned long long)@Base" 0.8.16~exp9
+ (c++)"Hashes::AddFD(FileFd&, unsigned long long, bool, bool, bool, bool)@Base" 0.8.16~exp9
+ (c++|optional=deprecated,previous-inline)"FileFd::gzFd()@Base" 0.8.0
+### CacheSet rework: making them real containers breaks bigtime the API (for the CacheSetHelper)
+ (c++)"APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::const_iterator::getPkg() const@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::getConstructor() const@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::empty() const@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::const_iterator::getPkg() const@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::getConstructor() const@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::empty() const@Base" 0.8.16~exp9
+ (c++)"APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::empty() const@Base" 0.8.16~exp9
+ (c++)"APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator::getVer() const@Base" 0.8.16~exp9
+ (c++)"APT::CacheSetHelper::canNotFindTask(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.16~exp9
+ (c++)"APT::CacheSetHelper::canNotFindRegEx(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.8.16~exp9
+ (c++)"APT::CacheSetHelper::canNotFindAllVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.16~exp9
+ (c++)"APT::CacheSetHelper::canNotFindPackage(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.16~exp9
+ (c++)"APT::CacheSetHelper::showTaskSelection(pkgCache::PkgIterator const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.16~exp9
+ (c++)"APT::CacheSetHelper::showRegExSelection(pkgCache::PkgIterator const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.16~exp9
+ (c++)"APT::CacheSetHelper::showSelectedVersion(pkgCache::PkgIterator const&, pkgCache::VerIterator, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)@Base" 0.8.16~exp9
+ (c++)"APT::CacheSetHelper::canNotFindCandInstVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.16~exp9
+ (c++)"APT::CacheSetHelper::canNotFindInstCandVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::setConstructor(APT::PackageContainerInterface::Constructor const&)@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::clear()@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::insert(pkgCache::PkgIterator const&)@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::setConstructor(APT::PackageContainerInterface::Constructor const&)@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::clear()@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::insert(pkgCache::PkgIterator const&)@Base" 0.8.16~exp9
+ (c++)"APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::clear()@Base" 0.8.16~exp9
+ (c++)"APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::insert(pkgCache::VerIterator const&)@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainerInterface::FromString(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainerInterface::FromCommandLine(APT::PackageContainerInterface*, pkgCacheFile&, char const**, APT::CacheSetHelper&)@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainerInterface::FromModifierCommandLine(unsigned short&, APT::PackageContainerInterface*, pkgCacheFile&, char const*, std::list<APT::PackageContainerInterface::Modifier, std::allocator<APT::PackageContainerInterface::Modifier> > const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainerInterface::FromName(pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainerInterface::FromTask(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, APT::CacheSetHelper&)@Base" 0.8.16~exp9
+ (c++)"APT::PackageContainerInterface::FromRegEx(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, APT::CacheSetHelper&)@Base" 0.8.16~exp9
+ (c++)"APT::VersionContainerInterface::FromString(APT::VersionContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, APT::VersionContainerInterface::Version const&, APT::CacheSetHelper&, bool)@Base" 0.8.16~exp9
+ (c++)"APT::VersionContainerInterface::FromPackage(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&, APT::VersionContainerInterface::Version const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
+ (c++)"APT::VersionContainerInterface::FromCommandLine(APT::VersionContainerInterface*, pkgCacheFile&, char const**, APT::VersionContainerInterface::Version const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
+ (c++)"APT::VersionContainerInterface::getCandidateVer(pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
+ (c++)"APT::VersionContainerInterface::getInstalledVer(pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
+ (c++)"APT::VersionContainerInterface::FromModifierCommandLine(unsigned short&, APT::VersionContainerInterface*, pkgCacheFile&, char const*, std::list<APT::VersionContainerInterface::Modifier, std::allocator<APT::VersionContainerInterface::Modifier> > const&, APT::CacheSetHelper&)@Base" 0.8.16~exp9
+ (c++)"EDSP::WriteLimitedScenario(pkgDepCache&, _IO_FILE*, APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > > const&, OpProgress*)@Base" 0.8.16~exp9
+ (c++)"typeinfo for APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::const_iterator@Base" 0.8.16~exp9
+ (c++)"typeinfo for APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >@Base" 0.8.16~exp9
+ (c++)"typeinfo for APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::const_iterator@Base" 0.8.16~exp9
+ (c++)"typeinfo for APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >@Base" 0.8.16~exp9
+ (c++)"typeinfo for APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator@Base" 0.8.16~exp9
+ (c++)"typeinfo for APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >@Base" 0.8.16~exp9
+ (c++)"typeinfo for APT::PackageContainerInterface::const_iterator@Base" 0.8.16~exp9
+ (c++)"typeinfo for APT::PackageContainerInterface@Base" 0.8.16~exp9
+ (c++)"typeinfo for APT::VersionContainerInterface::const_iterator@Base" 0.8.16~exp9
+ (c++)"typeinfo for APT::VersionContainerInterface@Base" 0.8.16~exp9
+ (c++)"typeinfo name for APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::const_iterator@Base" 0.8.16~exp9
+ (c++)"typeinfo name for APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >@Base" 0.8.16~exp9
+ (c++)"typeinfo name for APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::const_iterator@Base" 0.8.16~exp9
+ (c++)"typeinfo name for APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >@Base" 0.8.16~exp9
+ (c++)"typeinfo name for APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator@Base" 0.8.16~exp9
+ (c++)"typeinfo name for APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >@Base" 0.8.16~exp9
+ (c++)"typeinfo name for APT::PackageContainerInterface::const_iterator@Base" 0.8.16~exp9
+ (c++)"typeinfo name for APT::PackageContainerInterface@Base" 0.8.16~exp9
+ (c++)"typeinfo name for APT::VersionContainerInterface::const_iterator@Base" 0.8.16~exp9
+ (c++)"typeinfo name for APT::VersionContainerInterface@Base" 0.8.16~exp9
+ (c++)"vtable for APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >::const_iterator@Base" 0.8.16~exp9
+ (c++)"vtable for APT::PackageContainer<std::set<pkgCache::PkgIterator, std::less<pkgCache::PkgIterator>, std::allocator<pkgCache::PkgIterator> > >@Base" 0.8.16~exp9
+ (c++)"vtable for APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >::const_iterator@Base" 0.8.16~exp9
+ (c++)"vtable for APT::PackageContainer<std::list<pkgCache::PkgIterator, std::allocator<pkgCache::PkgIterator> > >@Base" 0.8.16~exp9
+ (c++)"vtable for APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator@Base" 0.8.16~exp9
+ (c++)"vtable for APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >@Base" 0.8.16~exp9
+ (c++)"vtable for APT::PackageContainerInterface::const_iterator@Base" 0.8.16~exp9
+ (c++)"vtable for APT::PackageContainerInterface@Base" 0.8.16~exp9
+ (c++)"vtable for APT::VersionContainerInterface::const_iterator@Base" 0.8.16~exp9
+ (c++)"vtable for APT::VersionContainerInterface@Base" 0.8.16~exp9
+### rework of the packagemanager rework
+ (c++)"APT::Progress::PackageManager::ConffilePrompt(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManager::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerFancy::HandleSIGWINCH(int)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerFancy::~PackageManagerFancy()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerFancy::PackageManagerFancy()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerFancy::SetupTerminalScrollArea(int)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerFancy::StatusChanged(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerFancy::Stop()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManager::fork()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManager::GetPulseInterval()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManager::~PackageManager()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressDeb822Fd::ConffilePrompt(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressDeb822Fd::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressDeb822Fd::~PackageManagerProgressDeb822Fd()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressDeb822Fd::PackageManagerProgressDeb822Fd(int)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressDeb822Fd::StartDpkg()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressDeb822Fd::StatusChanged(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressDeb822Fd::Stop()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressDeb822Fd::WriteToStatusFd(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressFactory()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressFd::ConffilePrompt(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressFd::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressFd::~PackageManagerProgressFd()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressFd::PackageManagerProgressFd(int)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressFd::StartDpkg()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressFd::StatusChanged(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressFd::Stop()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerProgressFd::WriteToStatusFd(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManager::Pulse()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManager::StartDpkg()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManager::StatusChanged(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManager::Stop()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerText::~PackageManagerText()@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerText::StatusChanged(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13~exp1
+ (c++)"APT::String::Strip(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.9.13~exp1
+ (c++)"APT::Upgrade::Upgrade(pkgDepCache&, int)@Base" 0.9.13~exp1
+ (c++)"pkgDPkgPM::BuildPackagesProgressMap()@Base" 0.9.13~exp1
+ (c++)"pkgDPkgPM::DoDpkgStatusFd(int)@Base" 0.9.13~exp1
+ (c++)"pkgDPkgPM::GoNoABIBreak(APT::Progress::PackageManager*)@Base" 0.9.13~exp1
+ (c++)"pkgDPkgPM::ProcessDpkgStatusLine(char*)@Base" 0.9.13~exp1
+ (c++)"pkgDPkgPM::StartPtyMagic()@Base" 0.9.13~exp1
+ (c++)"pkgDPkgPM::StopPtyMagic()@Base" 0.9.13~exp1
+ (c++)"typeinfo for APT::Progress::PackageManager@Base" 0.9.13~exp1
+ (c++)"typeinfo for APT::Progress::PackageManagerFancy@Base" 0.9.13~exp1
+ (c++)"typeinfo for APT::Progress::PackageManagerProgressDeb822Fd@Base" 0.9.13~exp1
+ (c++)"typeinfo for APT::Progress::PackageManagerProgressFd@Base" 0.9.13~exp1
+ (c++)"typeinfo for APT::Progress::PackageManagerText@Base" 0.9.13~exp1
+ (c++)"typeinfo name for APT::Progress::PackageManager@Base" 0.9.13~exp1
+ (c++)"typeinfo name for APT::Progress::PackageManagerFancy@Base" 0.9.13~exp1
+ (c++)"typeinfo name for APT::Progress::PackageManagerProgressDeb822Fd@Base" 0.9.13~exp1
+ (c++)"typeinfo name for APT::Progress::PackageManagerProgressFd@Base" 0.9.13~exp1
+ (c++)"typeinfo name for APT::Progress::PackageManagerText@Base" 0.9.13~exp1
+ (c++)"vtable for APT::Progress::PackageManager@Base" 0.9.13~exp1
+ (c++)"vtable for APT::Progress::PackageManagerFancy@Base" 0.9.13~exp1
+ (c++)"vtable for APT::Progress::PackageManagerProgressDeb822Fd@Base" 0.9.13~exp1
+ (c++)"vtable for APT::Progress::PackageManagerProgressFd@Base" 0.9.13~exp1
+ (c++)"vtable for APT::Progress::PackageManagerText@Base" 0.9.13~exp1
+ (c++)"APT::Progress::PackageManagerFancy::instances@Base" 0.9.14.2
+ (c++)"APT::Progress::PackageManagerFancy::Start(int)@Base" 0.9.14.2
+ (c++)"APT::Progress::PackageManagerFancy::staticSIGWINCH(int)@Base" 0.9.14.2
+ (c++)"APT::Progress::PackageManager::Start(int)@Base" 0.9.14.2
+### client-side merged pdiffs
+ (c++)"pkgAcqIndexMergeDiffs::DescURI()@Base" 0.9.14.3~exp1
+ (c++)"pkgAcqIndexMergeDiffs::Done(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.9.14.3~exp1
+ (c++)"pkgAcqIndexMergeDiffs::Failed(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, pkgAcquire::MethodConfig*)@Base" 0.9.14.3~exp1
+ (c++)"pkgAcqIndexMergeDiffs::~pkgAcqIndexMergeDiffs()@Base" 0.9.14.3~exp1
+ (c++)"pkgAcqIndexMergeDiffs::pkgAcqIndexMergeDiffs(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, HashString const&, DiffInfo const&, std::vector<pkgAcqIndexMergeDiffs*, std::allocator<pkgAcqIndexMergeDiffs*> > const*)@Base" 0.9.14.3~exp1
+ (c++)"typeinfo for pkgAcqIndexMergeDiffs@Base" 0.9.14.3~exp1
+ (c++)"typeinfo name for pkgAcqIndexMergeDiffs@Base" 0.9.14.3~exp1
+ (c++)"vtable for pkgAcqIndexMergeDiffs@Base" 0.9.14.3~exp1
+### deb822 sources.list format
+ (c++)"pkgSourceList::ParseFileDeb822(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.14.3~exp1
+ (c++)"pkgSourceList::ParseFileOldStyle(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.14.3~exp1
+ (c++)"pkgSourceList::Type::ParseStanza(std::vector<metaIndex*, std::allocator<metaIndex*> >&, pkgTagSection&, int, FileFd&)@Base" 0.9.14.3~exp1
+### mixed stuff
+ (c++)"GetListOfFilesInDir(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)@Base" 0.8.16~exp13
+ (c++)"pkgCache::DepIterator::IsIgnorable(pkgCache::PkgIterator const&) const@Base" 0.8.16~exp10
+ (c++)"pkgCache::DepIterator::IsIgnorable(pkgCache::PrvIterator const&) const@Base" 0.8.16~exp10
+ (c++)"FileFd::Write(int, void const*, unsigned long long)@Base" 0.8.16~exp14
+ (c++)"pkgTagSection::Exists(char const*)@Base" 0.9.7.9~exp1
+ (c++)"_strrstrip(char*)@Base" 0.9.7.9~exp2
+ (c++)"SplitClearSignedFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, FileFd*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*, FileFd*)@Base" 0.9.7.9~exp2
+ (c++)"OpenMaybeClearSignedFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, FileFd&)@Base" 0.9.7.9~exp2
+ (c++)"ExecGPGV(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&, int*)@Base" 0.9.7.9~exp2
+ (c++)"SigVerify::RunGPGV(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int const&)@Base" 0.9.7.9~exp2
+ (c++)"Configuration::Dump(std::basic_ostream<char, std::char_traits<char> >&, char const*, char const*, bool)@Base" 0.9.3
+ (c++)"AcquireUpdate(pkgAcquire&, int, bool, bool)@Base" 0.9.3
+ (c++)"pkgCache::DepIterator::IsMultiArchImplicit() const@Base" 0.9.6
+ (c++)"pkgCache::PrvIterator::IsMultiArchImplicit() const@Base" 0.9.6
+ (c++)"APT::PackageContainerInterface::FromGroup(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, APT::CacheSetHelper&)@Base" 0.9.7
+ (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::PackageArchitectureMatchesSpecification(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)@Base" 0.9.7
+ (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::~PackageArchitectureMatchesSpecification()@Base" 0.9.7
+ (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::operator()(pkgCache::PkgIterator const&)@Base" 0.9.7
+ (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::operator()(pkgCache::VerIterator const&)@Base" 0.9.7
+ (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::operator()(char const* const&)@Base" 0.9.7
+ (c++)"APT::Configuration::checkLanguage(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)@Base" 0.9.7.5
+ (c++)"pkgCdrom::DropTranslation(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)@Base" 0.9.7.5
+ (c++)"pkgCache::DepIterator::IsSatisfied(pkgCache::PrvIterator const&) const@Base" 0.9.8
+ (c++)"pkgCache::DepIterator::IsSatisfied(pkgCache::VerIterator const&) const@Base" 0.9.8
+ (c++)"pkgCacheGenerator::NewDepends(pkgCache::PkgIterator&, pkgCache::VerIterator&, unsigned int, unsigned int const&, unsigned int const&, unsigned int*&)@Base" 0.9.8
+ (c++)"pkgCacheGenerator::NewVersion(pkgCache::VerIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned long, unsigned long)@Base" 0.9.8
+ (c++)"operator<<(std::basic_ostream<char, std::char_traits<char> >&, GlobalError::Item)@Base" 0.9.9
+ (c++)"pkgDepCache::IsDeleteOkProtectInstallRequests(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 0.9.9.1
+ (c++)"pkgDepCache::IsInstallOkMultiArchSameVersionSynced(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 0.9.9.1
+ (c++)"pkgDPkgPM::SendPkgsInfo(_IO_FILE*, unsigned int const&)@Base" 0.9.9.1
+ (c++)"pkgCache::VerIterator::MultiArchType() const@Base" 0.9.9.1
+ (c++)"CommandLine::GetCommand(CommandLine::Dispatch const*, unsigned int, char const* const*)@Base" 0.9.11
+ (c++)"CommandLine::MakeArgs(char, char const*, char const*, unsigned long)@Base" 0.9.11
+ (c++)"Configuration::Clear()@Base" 0.9.11
+ (c++)"Glob(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)@Base" 0.9.11
+ (c++)"APT::CacheFilter::PackageNameMatchesFnmatch::operator()(pkgCache::GrpIterator const&)@Base" 0.9.11
+ (c++)"APT::CacheFilter::PackageNameMatchesFnmatch::operator()(pkgCache::PkgIterator const&)@Base" 0.9.11
+ (c++)"APT::PackageContainerInterface::FromFnmatch(APT::PackageContainerInterface*, pkgCacheFile&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, APT::CacheSetHelper&)@Base" 0.9.11
+ (c++)"pkgTagSection::pkgTagSection()@Base" 0.9.11
+ (c++)"strv_length(char const**)@Base" 0.9.11
+ (c++)"StringSplit(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)@Base" 0.9.11.3
+ (c++)"pkgAcquire::Item::RenameOnError(pkgAcquire::Item::RenameOnErrorState)@Base" 0.9.12
+ (c++)"APT::String::Endswith(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.9.13.1
+ (c++)"ExecFork(std::set<int, std::less<int>, std::allocator<int> >)@Base" 0.9.13.1
+ (c++)"MergeKeepFdsFromConfiguration(std::set<int, std::less<int>, std::allocator<int> >&)@Base" 0.9.13.1
+ (c++)"HashString::FromFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.13.1
+ (c++)"HashString::GetHashForFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const@Base" 0.9.13.1
+ (c++)"indexRecords::GetSuite() const@Base" 0.9.13.2
+ (c++)"GetTempDir()@Base" 0.9.14.2
+ (c++)"APT::Configuration::getBuildProfiles()@Base" 0.9.16
+ (c++)"APT::Configuration::getBuildProfilesString()@Base" 0.9.16
+ (c++)"Configuration::FindVector(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@Base" 0.9.16
+ (c++)"debListParser::ParseDepends(char const*, char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int&)@Base" 0.9.16
+ (c++)"debListParser::ParseDepends(char const*, char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int&, bool const&)@Base" 0.9.16
+ (c++)"debListParser::ParseDepends(char const*, char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, unsigned int&, bool const&, bool const&, bool const&)@Base" 0.9.16
+ (c++)"pkgCacheGenerator::ListParser::SameVersion(unsigned short, pkgCache::VerIterator const&)@Base" 0.9.16
+ (c++)"Rename(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)@Base" 0.9.16
+ (c++)"pkgDepCache::IsInstallOkDependenciesSatisfiableByCandidates(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 1.0
+ (c++)"APT::Progress::PackageManagerFancy::GetTerminalSize()@Base" 1.0
+ (c++)"APT::Progress::PackageManagerFancy::GetTextProgressStr(float, int)@Base" 1.0
+ (c++)"pkgCdromStatus::GetOpProgress()@Base" 1.0
+ (c++)"pkgCdromStatus::SetTotal(int)@Base" 1.0
+ (c++)"EDSP::ExecuteSolver(char const*, int*, int*, bool)@Base" 1.0.4
+ (c++)"pkgPackageManager::EarlyRemove(pkgCache::PkgIterator, pkgCache::DepIterator const*)@Base" 1.0.4
+ (c++)"debTranslationsParser::Architecture()@Base" 1.0.4
+ (c++)"debTranslationsParser::~debTranslationsParser()@Base" 1.0.4
+ (c++)"debTranslationsParser::Version()@Base" 1.0.4
+ (c++)"typeinfo for debTranslationsParser@Base" 1.0.4
+ (c++)"typeinfo name for debTranslationsParser@Base" 1.0.4
+ (c++)"vtable for debTranslationsParser@Base" 1.0.4
+### demangle strangeness - buildd report it as MISSING and as new…
+ (c++)"pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<IndexTarget*, std::allocator<IndexTarget*> > const*, indexRecords*)@Base" 0.8.0
+### gcc-4.6 artefacts
+# (c++|optional=implicit)"HashString::operator=(HashString const&)@Base" 0.8.0
+# (c++|optional=implicit)"HashString::HashString(HashString const&)@Base" 0.8.0
+# (c++|optional=inline)"APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator std::max_element<APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator, CompareProviders>(APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator, APT::VersionContainer<std::list<pkgCache::VerIterator, std::allocator<pkgCache::VerIterator> > >::iterator, CompareProviders)@Base" 0.8.0
+# (c++|optional=inline)"pkgCache::VerIterator::ParentPkg() const@Base" 0.8.0
+### gcc-4.8 artefacts
+# (c++|optional=implicit)"debSLTypeDebian::~debSLTypeDebian()@Base" 0.8.0
+### empty destructors included in the .h file
+# (c++|optional=inline)"pkgVersioningSystem::~pkgVersioningSystem()@Base" 0.8.0
+# (c++|optional=inline)"pkgSystem::~pkgSystem()@Base" 0.8.0
+# (c++|optional=inline)"pkgRecords::Parser::~Parser()@Base" 0.8.0
+# (c++|optional=inline)"pkgSrcRecords::Parser::~Parser()@Base" 0.8.0
+# (c++|optional=inline)"pkgIndexFile::Type::~Type()@Base" 0.8.0
+# (c++|optional=inline)"pkgSourceList::Type::~Type()@Base" 0.8.0
+# (c++|optional=inline)"pkgIndexFile::~pkgIndexFile()@Base" 0.8.0
+# (c++|optional=inline)"pkgCacheGenerator::ListParser::~ListParser()@Base" 0.8.0
+# (c++|optional=inline)"pkgAcquireStatus::~pkgAcquireStatus()@Base" 0.8.0
+# (c++|optional=inline)"metaIndex::~metaIndex()@Base" 0.8.0
+# (c++|optional=inline)"IndexCopy::~IndexCopy()@Base" 0.8.0
+### std library artefacts
+ (c++|regex|optional=std)"^std::vector<DiffInfo, .+@Base$" 0.8.0
+ (c++|regex|optional=std)"^std::vector<.+ >::(vector|push_back|erase|_[^ ]+)\(.+\)( const|)@Base$" 0.8.0
+ (c++|optional=std)"char* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_construct<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<char> const&, std::forward_iterator_tag)@Base" 0.8.0
+ (c++|optional=std)"char* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_construct<__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<char> const&, std::forward_iterator_tag)@Base" 0.8.0
+ (c++|optional=std)"char* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag)@Base" 0.8.0
+ (c++|optional=std)"char* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_construct<char*>(char*, char*, std::allocator<char> const&, std::forward_iterator_tag)@Base" 0.8.0
+### try to ignore std:: template instances
+ (c++|regex|optional=std)"^(void |)std::[^ ]+<.+ >::(_|~).+\(.*\)@Base$" 0.8.0
+ (c++|regex|optional=std)"^std::[^ ]+<.+ >::(append|insert|reserve|operator[^ ]+)\(.*\)@Base$" 0.8.0
+ (c++|regex|optional=std)"^(void |DiffInfo\* |)std::_.*@Base$" 0.8.0
+ (c++|regex|optional=std)"^std::reverse_iterator<.+ > std::__.+@Base$" 0.8.0
+ (c++|regex|optional=std)"^std::basic_string<.+ >\(.+\)@Base$" 0.8.0
+ (c++|regex|optional=std)"^__gnu_cxx::__[^ ]+<.*@Base$" 0.8.0
+ (c++|regex|optional=std)"^typeinfo name for std::iterator<.*>@Base$" 0.8.0
+ (c++|regex|optional=std)"^typeinfo for std::iterator<.*>@Base$" 0.8.0
+ (c++|optional=std)"std::ctype<char>::do_widen(char) const@Base" 1.0.3
<para>The setting <literal>Acquire::http::Pipeline-Depth</literal> can be used to
enable HTTP pipelining (RFC 2616 section 8.1.2.2) which can be beneficial e.g. on
high-latency connections. It specifies how many requests are sent in a pipeline.
- Previous APT versions had a default of 10 for this setting, but the default value
- is now 0 (= disabled) to avoid problems with the ever-growing amount of webservers
- and proxies which choose to not conform to the HTTP/1.1 specification.</para>
+ APT tries to detect and workaround misbehaving webservers and proxies at runtime, but
+ if you know that yours does not conform to the HTTP/1.1 specification pipelining can
+ be disabled by setting the value to 0. It is enabled by default with the value 10.</para>
<para><literal>Acquire::http::AllowRedirect</literal> controls whether APT will follow
redirects, which is enabled by default.</para>
#include <apt-pkg/fileutl.h>
#include <apt-pkg/debfile.h>
#include <apt-pkg/gpgv.h>
+#include <apt-pkg/hashes.h>
#include <netinet/in.h> // htonl, etc
#include <ctype.h>
#include <stddef.h>
#include <sys/stat.h>
+#include <strings.h>
#include "cachedb.h"
/*}}}*/
// CacheDB::GetFileInfo - Get all the info about the file /*{{{*/
// ---------------------------------------------------------------------
-bool CacheDB::GetFileInfo(std::string const &FileName, bool const &DoControl,
- bool const &DoContents,
- bool const &GenContentsOnly,
- bool const &DoSource,
- bool const &DoMD5, bool const &DoSHA1,
- bool const &DoSHA256, bool const &DoSHA512,
+bool CacheDB::GetFileInfo(std::string const &FileName, bool const &DoControl, bool const &DoContents,
+ bool const &GenContentsOnly, bool const DoSource, unsigned int const DoHashes,
bool const &checkMtime)
{
- bool result = true;
this->FileName = FileName;
if (GetCurStat() == false)
OldStat = CurStat;
if (GetFileStat(checkMtime) == false)
- return false;
+ return false;
/* if mtime changed, update CurStat from disk */
if (checkMtime == true && OldStat.mtime != CurStat.mtime)
CurStat.Flags = FlSize;
Stats.Bytes += CurStat.FileSize;
- Stats.Packages++;
+ ++Stats.Packages;
if ((DoControl && LoadControl() == false)
- || (DoContents && LoadContents(GenContentsOnly) == false)
- || (DoSource && LoadSource() == false)
- || (DoMD5 && GetMD5(false) == false)
- || (DoSHA1 && GetSHA1(false) == false)
- || (DoSHA256 && GetSHA256(false) == false)
- || (DoSHA512 && GetSHA512(false) == false) )
+ || (DoContents && LoadContents(GenContentsOnly) == false)
+ || (DoSource && LoadSource() == false)
+ || (DoHashes != 0 && GetHashes(false, DoHashes) == false)
+ )
{
- result = false;
+ return false;
}
-
- return result;
+
+ return true;
}
/*}}}*/
-
-bool CacheDB::LoadSource()
+bool CacheDB::LoadSource() /*{{{*/
{
// Try to read the control information out of the DB.
if ((CurStat.Flags & FlSource) == FlSource)
return true;
}
-
+ /*}}}*/
// CacheDB::LoadControl - Load Control information /*{{{*/
// ---------------------------------------------------------------------
/* */
return true;
}
/*}}}*/
-
+// CacheDB::GetHashes - Get the hashs /*{{{*/
static std::string bytes2hex(uint8_t *bytes, size_t length) {
char buf[3];
std::string space;
bytes++;
}
}
-
-// CacheDB::GetMD5 - Get the MD5 hash /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool CacheDB::GetMD5(bool const &GenOnly)
+bool CacheDB::GetHashes(bool const GenOnly, unsigned int const DoHashes)
{
- // Try to read the control information out of the DB.
- if ((CurStat.Flags & FlMD5) == FlMD5)
- {
- if (GenOnly == true)
- return true;
-
- MD5Res = bytes2hex(CurStat.MD5, sizeof(CurStat.MD5));
- return true;
- }
-
- Stats.MD5Bytes += CurStat.FileSize;
-
- if (OpenFile() == false)
- return false;
+ unsigned int FlHashes = DoHashes & (Hashes::MD5SUM | Hashes::SHA1SUM | Hashes::SHA256SUM | Hashes::SHA512SUM);
+ HashesList.clear();
- MD5Summation MD5;
- if (Fd->Seek(0) == false || MD5.AddFD(*Fd, CurStat.FileSize) == false)
- return false;
-
- MD5Res = MD5.Result();
- hex2bytes(CurStat.MD5, MD5Res.data(), sizeof(CurStat.MD5));
- CurStat.Flags |= FlMD5;
- return true;
-}
- /*}}}*/
-// CacheDB::GetSHA1 - Get the SHA1 hash /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool CacheDB::GetSHA1(bool const &GenOnly)
-{
- // Try to read the control information out of the DB.
- if ((CurStat.Flags & FlSHA1) == FlSHA1)
+ if (FlHashes != 0)
{
- if (GenOnly == true)
- return true;
+ if (OpenFile() == false)
+ return false;
- SHA1Res = bytes2hex(CurStat.SHA1, sizeof(CurStat.SHA1));
- return true;
- }
-
- Stats.SHA1Bytes += CurStat.FileSize;
-
- if (OpenFile() == false)
- return false;
+ Hashes hashes;
+ if (Fd->Seek(0) == false || hashes.AddFD(*Fd, CurStat.FileSize, FlHashes) == false)
+ return false;
- SHA1Summation SHA1;
- if (Fd->Seek(0) == false || SHA1.AddFD(*Fd, CurStat.FileSize) == false)
- return false;
-
- SHA1Res = SHA1.Result();
- hex2bytes(CurStat.SHA1, SHA1Res.data(), sizeof(CurStat.SHA1));
- CurStat.Flags |= FlSHA1;
- return true;
-}
- /*}}}*/
-// CacheDB::GetSHA256 - Get the SHA256 hash /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool CacheDB::GetSHA256(bool const &GenOnly)
-{
- // Try to read the control information out of the DB.
- if ((CurStat.Flags & FlSHA256) == FlSHA256)
- {
- if (GenOnly == true)
- return true;
-
- SHA256Res = bytes2hex(CurStat.SHA256, sizeof(CurStat.SHA256));
- return true;
+ HashStringList hl = hashes.GetHashStringList();
+ for (HashStringList::const_iterator hs = hl.begin(); hs != hl.end(); ++hs)
+ {
+ HashesList.push_back(*hs);
+ if (strcasecmp(hs->HashType().c_str(), "SHA512") == 0)
+ {
+ Stats.SHA512Bytes += CurStat.FileSize;
+ hex2bytes(CurStat.SHA512, hs->HashValue().data(), sizeof(CurStat.SHA512));
+ CurStat.Flags |= FlSHA512;
+ }
+ else if (strcasecmp(hs->HashType().c_str(), "SHA256") == 0)
+ {
+ Stats.SHA256Bytes += CurStat.FileSize;
+ hex2bytes(CurStat.SHA256, hs->HashValue().data(), sizeof(CurStat.SHA256));
+ CurStat.Flags |= FlSHA256;
+ }
+ else if (strcasecmp(hs->HashType().c_str(), "SHA1") == 0)
+ {
+ Stats.SHA1Bytes += CurStat.FileSize;
+ hex2bytes(CurStat.SHA1, hs->HashValue().data(), sizeof(CurStat.SHA1));
+ CurStat.Flags |= FlSHA1;
+ }
+ else if (strcasecmp(hs->HashType().c_str(), "MD5Sum") == 0)
+ {
+ Stats.MD5Bytes += CurStat.FileSize;
+ hex2bytes(CurStat.MD5, hs->HashValue().data(), sizeof(CurStat.MD5));
+ CurStat.Flags |= FlMD5;
+ }
+ else
+ return _error->Error("Got unknown unrequested hashtype %s", hs->HashType().c_str());
+ }
}
-
- Stats.SHA256Bytes += CurStat.FileSize;
-
- if (OpenFile() == false)
- return false;
-
- SHA256Summation SHA256;
- if (Fd->Seek(0) == false || SHA256.AddFD(*Fd, CurStat.FileSize) == false)
- return false;
-
- SHA256Res = SHA256.Result();
- hex2bytes(CurStat.SHA256, SHA256Res.data(), sizeof(CurStat.SHA256));
- CurStat.Flags |= FlSHA256;
- return true;
-}
- /*}}}*/
-// CacheDB::GetSHA256 - Get the SHA256 hash /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool CacheDB::GetSHA512(bool const &GenOnly)
-{
- // Try to read the control information out of the DB.
- if ((CurStat.Flags & FlSHA512) == FlSHA512)
- {
- if (GenOnly == true)
- return true;
-
- SHA512Res = bytes2hex(CurStat.SHA512, sizeof(CurStat.SHA512));
+ if (GenOnly == true)
return true;
- }
-
- Stats.SHA512Bytes += CurStat.FileSize;
-
- if (OpenFile() == false)
- return false;
- SHA512Summation SHA512;
- if (Fd->Seek(0) == false || SHA512.AddFD(*Fd, CurStat.FileSize) == false)
- return false;
-
- SHA512Res = SHA512.Result();
- hex2bytes(CurStat.SHA512, SHA512Res.data(), sizeof(CurStat.SHA512));
- CurStat.Flags |= FlSHA512;
- return true;
+ return HashesList.push_back(HashString("MD5Sum", bytes2hex(CurStat.MD5, sizeof(CurStat.MD5)))) &&
+ HashesList.push_back(HashString("SHA1", bytes2hex(CurStat.SHA1, sizeof(CurStat.SHA1)))) &&
+ HashesList.push_back(HashString("SHA256", bytes2hex(CurStat.SHA256, sizeof(CurStat.SHA256)))) &&
+ HashesList.push_back(HashString("SHA512", bytes2hex(CurStat.SHA512, sizeof(CurStat.SHA512))));
}
/*}}}*/
// CacheDB::Finish - Write back the cache structure /*{{{*/
#ifndef CACHEDB_H
#define CACHEDB_H
+#include <apt-pkg/hashes.h>
#include <apt-pkg/debfile.h>
#include <db.h>
bool LoadControl();
bool LoadContents(bool const &GenOnly);
bool LoadSource();
- bool GetMD5(bool const &GenOnly);
- bool GetSHA1(bool const &GenOnly);
- bool GetSHA256(bool const &GenOnly);
- bool GetSHA512(bool const &GenOnly);
-
+ bool GetHashes(bool const GenOnly, unsigned int const DoHashes);
+
// Stat info stored in the DB, Fixed types since it is written to disk.
enum FlagList {FlControl = (1<<0),FlMD5=(1<<1),FlContents=(1<<2),
FlSize=(1<<3), FlSHA1=(1<<4), FlSHA256=(1<<5),
debDebFile::MemControlExtract Control;
ContentsExtract Contents;
DscExtract Dsc;
+ HashStringList HashesList;
- std::string MD5Res;
- std::string SHA1Res;
- std::string SHA256Res;
- std::string SHA512Res;
-
// Runtime statistics
struct Stats
{
bool SetFile(std::string const &FileName,struct stat St,FileFd *Fd);
// terrible old overloaded interface
- bool GetFileInfo(std::string const &FileName,
- bool const &DoControl,
- bool const &DoContents,
- bool const &GenContentsOnly,
- bool const &DoSource,
- bool const &DoMD5,
- bool const &DoSHA1,
- bool const &DoSHA256,
- bool const &DoSHA512,
- bool const &checkMtime = false);
+ bool GetFileInfo(std::string const &FileName,
+ bool const &DoControl,
+ bool const &DoContents,
+ bool const &GenContentsOnly,
+ bool const DoSource,
+ unsigned int const DoHashes,
+ bool const &checkMtime = false);
bool Finish();
// SetTFRewriteData - Helper for setting rewrite lists /*{{{*/
// ---------------------------------------------------------------------
/* */
-inline void SetTFRewriteData(struct TFRewriteData &tfrd,
- const char *tag,
+static inline TFRewriteData SetTFRewriteData(const char *tag,
const char *rewrite,
const char *newtag = 0)
{
- tfrd.Tag = tag;
- tfrd.Rewrite = rewrite;
- tfrd.NewTag = newtag;
+ TFRewriteData tfrd;
+ tfrd.Tag = tag;
+ tfrd.Rewrite = rewrite;
+ tfrd.NewTag = newtag;
+ return tfrd;
+}
+ /*}}}*/
+// ConfigToDoHashes - which hashes to generate /*{{{*/
+static void SingleConfigToDoHashes(unsigned int &DoHashes, std::string const &Conf, unsigned int const Flag)
+{
+ if (_config->FindB(Conf, true) == true)
+ DoHashes |= Flag;
+ else
+ DoHashes &= ~Flag;
+}
+static void ConfigToDoHashes(unsigned int &DoHashes, std::string const &Conf)
+{
+ SingleConfigToDoHashes(DoHashes, Conf + "::MD5", Hashes::MD5SUM);
+ SingleConfigToDoHashes(DoHashes, Conf + "::SHA1", Hashes::SHA1SUM);
+ SingleConfigToDoHashes(DoHashes, Conf + "::SHA256", Hashes::SHA256SUM);
+ SingleConfigToDoHashes(DoHashes, Conf + "::SHA512", Hashes::SHA512SUM);
}
/*}}}*/
// FTWScanner::FTWScanner - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* */
-FTWScanner::FTWScanner(string const &Arch): Arch(Arch)
+FTWScanner::FTWScanner(string const &Arch): Arch(Arch), DoHashes(~0)
{
ErrorPrinted = false;
NoLinkAct = !_config->FindB("APT::FTPArchive::DeLinkAct",true);
-
- DoMD5 = _config->FindB("APT::FTPArchive::MD5",true);
- DoSHA1 = _config->FindB("APT::FTPArchive::SHA1",true);
- DoSHA256 = _config->FindB("APT::FTPArchive::SHA256",true);
- DoSHA512 = _config->FindB("APT::FTPArchive::SHA512",true);
+ ConfigToDoHashes(DoHashes, "APT::FTPArchive");
}
/*}}}*/
// FTWScanner::Scanner - FTW Scanner /*{{{*/
DeLinkLimit = 0;
// Process the command line options
- DoMD5 = _config->FindB("APT::FTPArchive::Packages::MD5",DoMD5);
- DoSHA1 = _config->FindB("APT::FTPArchive::Packages::SHA1",DoSHA1);
- DoSHA256 = _config->FindB("APT::FTPArchive::Packages::SHA256",DoSHA256);
- DoSHA512 = _config->FindB("APT::FTPArchive::Packages::SHA512",DoSHA512);
+ ConfigToDoHashes(DoHashes, "APT::FTPArchive::Packages");
DoAlwaysStat = _config->FindB("APT::FTPArchive::AlwaysStat", false);
DoContents = _config->FindB("APT::FTPArchive::Contents",true);
NoOverride = _config->FindB("APT::FTPArchive::NoOverrideMsg",false);
bool PackagesWriter::DoPackage(string FileName)
{
// Pull all the data we need form the DB
- if (Db.GetFileInfo(FileName,
- true, /* DoControl */
- DoContents,
- true, /* GenContentsOnly */
- false, /* DoSource */
- DoMD5, DoSHA1, DoSHA256, DoSHA512, DoAlwaysStat) == false)
+ if (Db.GetFileInfo(FileName,
+ true, /* DoControl */
+ DoContents,
+ true, /* GenContentsOnly */
+ false, /* DoSource */
+ DoHashes, DoAlwaysStat) == false)
{
return false;
}
}
// This lists all the changes to the fields we are going to make.
- // (7 hardcoded + maintainer + suggests + end marker)
- TFRewriteData Changes[6+2+OverItem->FieldOverride.size()+1+1];
-
- unsigned int End = 0;
- SetTFRewriteData(Changes[End++], "Size", Size);
- if (DoMD5 == true)
- SetTFRewriteData(Changes[End++], "MD5sum", Db.MD5Res.c_str());
- if (DoSHA1 == true)
- SetTFRewriteData(Changes[End++], "SHA1", Db.SHA1Res.c_str());
- if (DoSHA256 == true)
- SetTFRewriteData(Changes[End++], "SHA256", Db.SHA256Res.c_str());
- if (DoSHA512 == true)
- SetTFRewriteData(Changes[End++], "SHA512", Db.SHA512Res.c_str());
- SetTFRewriteData(Changes[End++], "Filename", NewFileName.c_str());
- SetTFRewriteData(Changes[End++], "Priority", OverItem->Priority.c_str());
- SetTFRewriteData(Changes[End++], "Status", 0);
- SetTFRewriteData(Changes[End++], "Optional", 0);
+ std::vector<TFRewriteData> Changes;
+
+ Changes.push_back(SetTFRewriteData("Size", Size));
+ for (HashStringList::const_iterator hs = Db.HashesList.begin(); hs != Db.HashesList.end(); ++hs)
+ {
+ if (hs->HashType() == "MD5Sum")
+ Changes.push_back(SetTFRewriteData("MD5sum", hs->HashValue().c_str()));
+ else
+ Changes.push_back(SetTFRewriteData(hs->HashType().c_str(), hs->HashValue().c_str()));
+ }
+ Changes.push_back(SetTFRewriteData("Filename", NewFileName.c_str()));
+ Changes.push_back(SetTFRewriteData("Priority", OverItem->Priority.c_str()));
+ Changes.push_back(SetTFRewriteData("Status", 0));
+ Changes.push_back(SetTFRewriteData("Optional", 0));
string DescriptionMd5;
if (LongDescription == false) {
MD5Summation descmd5;
descmd5.Add(desc.c_str());
DescriptionMd5 = descmd5.Result().Value();
- SetTFRewriteData(Changes[End++], "Description-md5", DescriptionMd5.c_str());
+ Changes.push_back(SetTFRewriteData("Description-md5", DescriptionMd5.c_str()));
if (TransWriter != NULL)
TransWriter->DoPackage(Package, desc, DescriptionMd5);
}
NewLine(1);
ioprintf(c1out, _(" %s maintainer is %s not %s\n"),
Package.c_str(), Tags.FindS("Maintainer").c_str(), OverItem->OldMaint.c_str());
- }
+ }
}
-
+
if (NewMaint.empty() == false)
- SetTFRewriteData(Changes[End++], "Maintainer", NewMaint.c_str());
-
+ Changes.push_back(SetTFRewriteData("Maintainer", NewMaint.c_str()));
+
/* Get rid of the Optional tag. This is an ugly, ugly, ugly hack that
dpkg-scanpackages does. Well sort of. dpkg-scanpackages just does renaming
but dpkg does this append bit. So we do the append bit, at least that way the
{
if (Tags.FindS("Suggests").empty() == false)
OptionalStr = Tags.FindS("Suggests") + ", " + OptionalStr;
- SetTFRewriteData(Changes[End++], "Suggests", OptionalStr.c_str());
+ Changes.push_back(SetTFRewriteData("Suggests", OptionalStr.c_str()));
}
- for (map<string,string>::const_iterator I = OverItem->FieldOverride.begin();
+ for (map<string,string>::const_iterator I = OverItem->FieldOverride.begin();
I != OverItem->FieldOverride.end(); ++I)
- SetTFRewriteData(Changes[End++],I->first.c_str(),I->second.c_str());
+ Changes.push_back(SetTFRewriteData(I->first.c_str(),I->second.c_str()));
- SetTFRewriteData(Changes[End++], 0, 0);
+ Changes.push_back(SetTFRewriteData( 0, 0));
// Rewrite and store the fields.
- if (TFRewrite(Output,Tags,TFRewritePackageOrder,Changes) == false)
+ if (TFRewrite(Output,Tags,TFRewritePackageOrder,Changes.data()) == false)
return false;
fprintf(Output,"\n");
BufSize = 0;
// Process the command line options
- DoMD5 = _config->FindB("APT::FTPArchive::Sources::MD5",DoMD5);
- DoSHA1 = _config->FindB("APT::FTPArchive::Sources::SHA1",DoSHA1);
- DoSHA256 = _config->FindB("APT::FTPArchive::Sources::SHA256",DoSHA256);
- DoSHA512 = _config->FindB("APT::FTPArchive::Sources::SHA512",DoSHA512);
+ ConfigToDoHashes(DoHashes, "APT::FTPArchive::Sources");
NoOverride = _config->FindB("APT::FTPArchive::NoOverrideMsg",false);
DoAlwaysStat = _config->FindB("APT::FTPArchive::AlwaysStat", false);
}
/*}}}*/
// SourcesWriter::DoPackage - Process a single package /*{{{*/
-// ---------------------------------------------------------------------
-/* */
+static std::ostream& addDscHash(std::ostream &out, unsigned int const DoHashes,
+ Hashes::SupportedHashes const DoIt, pkgTagSection &Tags, char const * const FieldName,
+ HashString const * const Hash, unsigned long long Size, std::string FileName)
+{
+ if ((DoHashes & DoIt) != DoIt || Tags.Exists(FieldName) == false || Hash == NULL)
+ return out;
+ out << "\n " << Hash->HashValue() << " " << Size << " " << FileName
+ << "\n " << Tags.FindS(FieldName);
+ return out;
+}
bool SourcesWriter::DoPackage(string FileName)
{
// Pull all the data we need form the DB
if (Db.GetFileInfo(FileName,
- false, /* DoControl */
- false, /* DoContents */
- false, /* GenContentsOnly */
- true, /* DoSource */
- DoMD5, DoSHA1, DoSHA256, DoSHA512, DoAlwaysStat) == false)
+ false, /* DoControl */
+ false, /* DoContents */
+ false, /* GenContentsOnly */
+ true, /* DoSource */
+ DoHashes, DoAlwaysStat) == false)
{
return false;
}
*SOverItem = *OverItem;
}
}
-
+
// Add the dsc to the files hash list
string const strippedName = flNotDir(FileName);
std::ostringstream ostreamFiles;
- if (DoMD5 == true && Tags.Exists("Files"))
- ostreamFiles << "\n " << Db.MD5Res.c_str() << " " << St.st_size << " "
- << strippedName << "\n " << Tags.FindS("Files");
+ addDscHash(ostreamFiles, DoHashes, Hashes::MD5SUM, Tags, "Files", Db.HashesList.find("MD5Sum"), St.st_size, strippedName);
string const Files = ostreamFiles.str();
std::ostringstream ostreamSha1;
- if (DoSHA1 == true && Tags.Exists("Checksums-Sha1"))
- ostreamSha1 << "\n " << string(Db.SHA1Res.c_str()) << " " << St.st_size << " "
- << strippedName << "\n " << Tags.FindS("Checksums-Sha1");
-
+ addDscHash(ostreamSha1, DoHashes, Hashes::SHA1SUM, Tags, "Checksums-Sha1", Db.HashesList.find("SHA1"), St.st_size, strippedName);
std::ostringstream ostreamSha256;
- if (DoSHA256 == true && Tags.Exists("Checksums-Sha256"))
- ostreamSha256 << "\n " << string(Db.SHA256Res.c_str()) << " " << St.st_size << " "
- << strippedName << "\n " << Tags.FindS("Checksums-Sha256");
-
+ addDscHash(ostreamSha256, DoHashes, Hashes::SHA256SUM, Tags, "Checksums-Sha256", Db.HashesList.find("SHA256"), St.st_size, strippedName);
std::ostringstream ostreamSha512;
- if (DoSHA512 == true && Tags.Exists("Checksums-Sha512"))
- ostreamSha512 << "\n " << string(Db.SHA512Res.c_str()) << " " << St.st_size << " "
- << strippedName << "\n " << Tags.FindS("Checksums-Sha512");
+ addDscHash(ostreamSha512, DoHashes, Hashes::SHA512SUM, Tags, "Checksums-Sha512", Db.HashesList.find("SHA512"), St.st_size, strippedName);
// Strip the DirStrip prefix from the FileName and add the PathPrefix
string NewFileName;
string OriginalPath = Directory + ParseJnk;
// Add missing hashes to source files
- if ((DoSHA1 == true && !Tags.Exists("Checksums-Sha1")) ||
- (DoSHA256 == true && !Tags.Exists("Checksums-Sha256")) ||
- (DoSHA512 == true && !Tags.Exists("Checksums-Sha512")))
+ if (((DoHashes & Hashes::SHA1SUM) == Hashes::SHA1SUM && !Tags.Exists("Checksums-Sha1")) ||
+ ((DoHashes & Hashes::SHA256SUM) == Hashes::SHA256SUM && !Tags.Exists("Checksums-Sha256")) ||
+ ((DoHashes & Hashes::SHA512SUM) == Hashes::SHA512SUM && !Tags.Exists("Checksums-Sha512")))
{
- if (Db.GetFileInfo(OriginalPath,
+ if (Db.GetFileInfo(OriginalPath,
false, /* DoControl */
false, /* DoContents */
false, /* GenContentsOnly */
false, /* DoSource */
- DoMD5, DoSHA1, DoSHA256, DoSHA512,
+ DoHashes,
DoAlwaysStat) == false)
{
return _error->Error("Error getting file info");
}
- if (DoSHA1 == true && !Tags.Exists("Checksums-Sha1"))
- ostreamSha1 << "\n " << string(Db.SHA1Res) << " "
- << Db.GetFileSize() << " " << ParseJnk;
-
- if (DoSHA256 == true && !Tags.Exists("Checksums-Sha256"))
- ostreamSha256 << "\n " << string(Db.SHA256Res) << " "
- << Db.GetFileSize() << " " << ParseJnk;
-
- if (DoSHA512 == true && !Tags.Exists("Checksums-Sha512"))
- ostreamSha512 << "\n " << string(Db.SHA512Res) << " "
- << Db.GetFileSize() << " " << ParseJnk;
+ for (HashStringList::const_iterator hs = Db.HashesList.begin(); hs != Db.HashesList.end(); ++hs)
+ {
+ if (hs->HashType() == "MD5Sum")
+ continue;
+ char const * fieldname;
+ std::ostream * out;
+ if (hs->HashType() == "SHA1")
+ {
+ fieldname = "Checksums-Sha1";
+ out = &ostreamSha1;
+ }
+ else if (hs->HashType() == "SHA256")
+ {
+ fieldname = "Checksums-Sha256";
+ out = &ostreamSha256;
+ }
+ else if (hs->HashType() == "SHA512")
+ {
+ fieldname = "Checksums-Sha512";
+ out = &ostreamSha512;
+ }
+ else
+ {
+ _error->Warning("Ignoring unknown Checksumtype %s in SourcesWriter::DoPackages", hs->HashType().c_str());
+ continue;
+ }
+ if (Tags.Exists(fieldname) == true)
+ continue;
+ (*out) << "\n " << hs->HashValue() << " " << Db.GetFileSize() << " " << ParseJnk;
+ }
- // write back the GetFileInfo() stats data
- Db.Finish();
+ // write back the GetFileInfo() stats data
+ Db.Finish();
}
// Perform the delinking operation
// This lists all the changes to the fields we are going to make.
// (5 hardcoded + checksums + maintainer + end marker)
- TFRewriteData Changes[5+2+1+SOverItem->FieldOverride.size()+1];
+ std::vector<TFRewriteData> Changes;
- unsigned int End = 0;
- SetTFRewriteData(Changes[End++],"Source",Package.c_str(),"Package");
+ Changes.push_back(SetTFRewriteData("Source",Package.c_str(),"Package"));
if (Files.empty() == false)
- SetTFRewriteData(Changes[End++],"Files",Files.c_str());
+ Changes.push_back(SetTFRewriteData("Files",Files.c_str()));
if (ChecksumsSha1.empty() == false)
- SetTFRewriteData(Changes[End++],"Checksums-Sha1",ChecksumsSha1.c_str());
+ Changes.push_back(SetTFRewriteData("Checksums-Sha1",ChecksumsSha1.c_str()));
if (ChecksumsSha256.empty() == false)
- SetTFRewriteData(Changes[End++],"Checksums-Sha256",ChecksumsSha256.c_str());
+ Changes.push_back(SetTFRewriteData("Checksums-Sha256",ChecksumsSha256.c_str()));
if (ChecksumsSha512.empty() == false)
- SetTFRewriteData(Changes[End++],"Checksums-Sha512",ChecksumsSha512.c_str());
+ Changes.push_back(SetTFRewriteData("Checksums-Sha512",ChecksumsSha512.c_str()));
if (Directory != "./")
- SetTFRewriteData(Changes[End++],"Directory",Directory.c_str());
- SetTFRewriteData(Changes[End++],"Priority",BestPrio.c_str());
- SetTFRewriteData(Changes[End++],"Status",0);
+ Changes.push_back(SetTFRewriteData("Directory",Directory.c_str()));
+ Changes.push_back(SetTFRewriteData("Priority",BestPrio.c_str()));
+ Changes.push_back(SetTFRewriteData("Status",0));
// Rewrite the maintainer field if necessary
bool MaintFailed;
}
}
if (NewMaint.empty() == false)
- SetTFRewriteData(Changes[End++], "Maintainer", NewMaint.c_str());
+ Changes.push_back(SetTFRewriteData("Maintainer", NewMaint.c_str()));
for (map<string,string>::const_iterator I = SOverItem->FieldOverride.begin();
I != SOverItem->FieldOverride.end(); ++I)
- SetTFRewriteData(Changes[End++],I->first.c_str(),I->second.c_str());
+ Changes.push_back(SetTFRewriteData(I->first.c_str(),I->second.c_str()));
- SetTFRewriteData(Changes[End++], 0, 0);
+ Changes.push_back(SetTFRewriteData(0, 0));
// Rewrite and store the fields.
- if (TFRewrite(Output,Tags,TFRewriteSourceOrder,Changes) == false)
+ if (TFRewrite(Output,Tags,TFRewriteSourceOrder,Changes.data()) == false)
return false;
fprintf(Output,"\n");
determine what the package name is. */
bool ContentsWriter::DoPackage(string FileName, string Package)
{
- if (!Db.GetFileInfo(FileName,
- Package.empty(), /* DoControl */
- true, /* DoContents */
- false, /* GenContentsOnly */
- false, /* DoSource */
- false, /* DoMD5 */
- false, /* DoSHA1 */
- false, /* DoSHA256 */
- false)) /* DoSHA512 */
+ if (!Db.GetFileInfo(FileName,
+ Package.empty(), /* DoControl */
+ true, /* DoContents */
+ false, /* GenContentsOnly */
+ false, /* DoSource */
+ 0, /* DoHashes */
+ false /* checkMtime */))
{
return false;
}
fprintf(Output, "%s: %s\n", (*I).first.c_str(), Value.c_str());
}
- DoMD5 = _config->FindB("APT::FTPArchive::Release::MD5",DoMD5);
- DoSHA1 = _config->FindB("APT::FTPArchive::Release::SHA1",DoSHA1);
- DoSHA256 = _config->FindB("APT::FTPArchive::Release::SHA256",DoSHA256);
+ ConfigToDoHashes(DoHashes, "APT::FTPArchive::Release");
}
/*}}}*/
// ReleaseWriter::DoPackage - Process a single package /*{{{*/
CheckSums[NewFileName].size = fd.Size();
Hashes hs;
- hs.AddFD(fd, 0, DoMD5, DoSHA1, DoSHA256, DoSHA512);
- if (DoMD5 == true)
- CheckSums[NewFileName].MD5 = hs.MD5.Result();
- if (DoSHA1 == true)
- CheckSums[NewFileName].SHA1 = hs.SHA1.Result();
- if (DoSHA256 == true)
- CheckSums[NewFileName].SHA256 = hs.SHA256.Result();
- if (DoSHA512 == true)
- CheckSums[NewFileName].SHA512 = hs.SHA512.Result();
+ hs.AddFD(fd, 0, DoHashes);
+ CheckSums[NewFileName].Hashes = hs.GetHashStringList();
fd.Close();
return true;
/*}}}*/
// ReleaseWriter::Finish - Output the checksums /*{{{*/
// ---------------------------------------------------------------------
-void ReleaseWriter::Finish()
+static void printChecksumTypeRecord(FILE * const Output, char const * const Type, map<string, ReleaseWriter::CheckSum> const &CheckSums)
{
- if (DoMD5 == true)
- {
- fprintf(Output, "MD5Sum:\n");
- for(map<string,struct CheckSum>::const_iterator I = CheckSums.begin();
- I != CheckSums.end(); ++I)
- {
- fprintf(Output, " %s %16llu %s\n",
- (*I).second.MD5.c_str(),
- (*I).second.size,
- (*I).first.c_str());
- }
- }
- if (DoSHA1 == true)
- {
- fprintf(Output, "SHA1:\n");
- for(map<string,struct CheckSum>::const_iterator I = CheckSums.begin();
- I != CheckSums.end(); ++I)
- {
- fprintf(Output, " %s %16llu %s\n",
- (*I).second.SHA1.c_str(),
- (*I).second.size,
- (*I).first.c_str());
- }
- }
- if (DoSHA256 == true)
- {
- fprintf(Output, "SHA256:\n");
- for(map<string,struct CheckSum>::const_iterator I = CheckSums.begin();
+ fprintf(Output, "%s:\n", Type);
+ for(map<string,ReleaseWriter::CheckSum>::const_iterator I = CheckSums.begin();
I != CheckSums.end(); ++I)
{
+ HashString const * const hs = I->second.Hashes.find(Type);
+ if (hs == NULL)
+ continue;
fprintf(Output, " %s %16llu %s\n",
- (*I).second.SHA256.c_str(),
+ hs->HashValue().c_str(),
(*I).second.size,
(*I).first.c_str());
}
- }
-
- fprintf(Output, "SHA512:\n");
- for(map<string,struct CheckSum>::const_iterator I = CheckSums.begin();
- I != CheckSums.end();
- ++I)
- {
- fprintf(Output, " %s %16llu %s\n",
- (*I).second.SHA512.c_str(),
- (*I).second.size,
- (*I).first.c_str());
- }
-
+}
+void ReleaseWriter::Finish()
+{
+ if ((DoHashes & Hashes::MD5SUM) == Hashes::MD5SUM)
+ printChecksumTypeRecord(Output, "MD5Sum", CheckSums);
+ if ((DoHashes & Hashes::SHA1SUM) == Hashes::SHA1SUM)
+ printChecksumTypeRecord(Output, "SHA1", CheckSums);
+ if ((DoHashes & Hashes::SHA256SUM) == Hashes::SHA256SUM)
+ printChecksumTypeRecord(Output, "SHA256", CheckSums);
+ if ((DoHashes & Hashes::SHA512SUM) == Hashes::SHA512SUM)
+ printChecksumTypeRecord(Output, "SHA512", CheckSums);
}
#ifndef WRITER_H
#define WRITER_H
+#include <apt-pkg/hashes.h>
+
#include <string>
#include <stdio.h>
#include <iostream>
}
public:
- bool DoMD5;
- bool DoSHA1;
- bool DoSHA256;
- bool DoSHA512;
+ unsigned int DoHashes;
unsigned long DeLinkLimit;
string InternalPrefix;
string PathPrefix;
string DirStrip;
-protected:
struct CheckSum
{
- string MD5;
- string SHA1;
- string SHA256;
- string SHA512;
+ HashStringList Hashes;
// Limited by FileFd::Size()
unsigned long long size;
~CheckSum() {};
};
+protected:
map<string,struct CheckSum> CheckSums;
};
for (FetchItem *I = Queue; I != 0 && Depth < (signed)PipelineDepth;
I = I->Next, Depth++)
{
- // If pipelining is disabled, we only queue 1 request
- if (Server->Pipeline == false && Depth >= 0)
- break;
+ if (Depth >= 0)
+ {
+ // If pipelining is disabled, we only queue 1 request
+ if (Server->Pipeline == false)
+ break;
+ // if we have no hashes, do at most one such request
+ // as we can't fixup pipeling misbehaviors otherwise
+ else if (I->ExpectedHashes.usable() == false)
+ break;
+ }
// Make sure we stick with the same server
if (Server->Comp(I->Uri) == false)
// Send status to APT
if (Result == true)
{
- Res.TakeHashes(*Server->GetHashes());
+ Hashes * const resultHashes = Server->GetHashes();
+ HashStringList const hashList = resultHashes->GetHashStringList();
+ if (PipelineDepth != 0 && Queue->ExpectedHashes.usable() == true && Queue->ExpectedHashes != hashList)
+ {
+ // we did not get the expected hash… mhhh:
+ // could it be that server/proxy messed up pipelining?
+ FetchItem * BeforeI = Queue;
+ for (FetchItem *I = Queue->Next; I != 0 && I != QueueBack; I = I->Next)
+ {
+ if (I->ExpectedHashes.usable() == true && I->ExpectedHashes == hashList)
+ {
+ // yes, he did! Disable pipelining and rewrite queue
+ if (Server->Pipeline == true)
+ {
+ // FIXME: fake a warning message as we have no proper way of communicating here
+ std::string out;
+ strprintf(out, _("Automatically disabled %s due to incorrect response from server/proxy. (man 5 apt.conf)"), "Acquire::http::PipelineDepth");
+ std::cerr << "W: " << out << std::endl;
+ Server->Pipeline = false;
+ // we keep the PipelineDepth value so that the rest of the queue can be fixed up as well
+ }
+ Rename(Res.Filename, I->DestFile);
+ Res.Filename = I->DestFile;
+ BeforeI->Next = I->Next;
+ I->Next = Queue;
+ Queue = I;
+ break;
+ }
+ BeforeI = I;
+ }
+ }
+ Res.TakeHashes(*resultHashes);
URIDone(Res);
}
else
virtual ServerState * CreateServerState(URI uri) = 0;
virtual void RotateDNS() = 0;
- ServerMethod(const char *Ver,unsigned long Flags = 0) : pkgAcqMethod(Ver, Flags), Server(NULL), File(NULL), PipelineDepth(0), AllowRedirect(false), Debug(false) {};
+ ServerMethod(const char *Ver,unsigned long Flags = 0) : pkgAcqMethod(Ver, Flags), Server(NULL), File(NULL), PipelineDepth(10), AllowRedirect(false), Debug(false) {};
virtual ~ServerMethod() {};
};
local CMD="$1"
shift
case $CMD in
- sh|aptitude|*/*) ;;
+ sh|aptitude|*/*|command) ;;
*) CMD="${BUILDDIRECTORY}/$CMD";;
esac
- MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG="$(getaptconfig)" LD_LIBRARY_PATH=${BUILDDIRECTORY} $CMD "$@"
+ MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG="$(getaptconfig)" LD_LIBRARY_PATH=${LIBRARYPATH} $CMD "$@"
}
aptconfig() { runapt apt-config "$@"; }
aptcache() { runapt apt-cache "$@"; }
command dpkg-checkbuilddeps --admindir=${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg "$@"
}
gdb() {
- echo "gdb: run »$*«"
- CMD="$1"
+ local CMD="$1"
shift
-
- APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${LIBRARYPATH} command gdb ${BUILDDIRECTORY}/$CMD --args ${BUILDDIRECTORY}/$CMD "$@"
+ runapt command gdb --quiet -ex run "${BUILDDIRECTORY}/$CMD" --args "${BUILDDIRECTORY}/$CMD" "$@"
}
gpg() {
# see apt-key for the whole trickery. Setup is done in setupenvironment
fi
echo "DPKG::options:: \"--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log\";" >> aptconfig.conf
echo 'quiet::NoUpdate "true";' >> aptconfig.conf
+ echo 'quiet::NoStatistic "true";' >> aptconfig.conf
echo "Acquire::https::CaInfo \"${TESTDIR}/apt.pem\";" > rootdir/etc/apt/apt.conf.d/99https
echo "Apt::Cmd::Disable-Script-Warning \"1\";" > rootdir/etc/apt/apt.conf.d/apt-binary
configcompression '.' 'gz' #'bz2' 'lzma' 'xz'
gpg --quiet --check-trustdb --secret-keyring $SECRETKEYRING --keyring $SECRETKEYRING >/dev/null 2>&1
# cleanup the environment a bit
- export PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin"
+ # prefer our apt binaries over the system apt binaries
+ export PATH="${BUILDDIRECTORY}:${PATH}:/usr/local/sbin:/usr/sbin:/sbin"
export LC_ALL=C.UTF-8
unset LANGUAGE APT_CONFIG
unset GREP_OPTIONS DEB_BUILD_PROFILES
--- /dev/null
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+
+setupenvironment
+configarchitecture 'amd64'
+
+buildsimplenativepackage 'apt' 'all' '1.0' 'stable'
+
+setupaptarchive
+changetowebserver
+
+rm -rf rootdir/var/lib/apt/lists
+aptget update -qq
+testequal 'Hit http://localhost stable InRelease
+Hit http://localhost stable/main Sources
+Hit http://localhost stable/main amd64 Packages
+Hit http://localhost stable/main Translation-en
+Reading package lists...' aptget update
+
+mv rootdir/var/lib/apt/lists/localhost* rootdir/var/lib/apt/lists/partial
+aptget update
+
--- /dev/null
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+
+setupenvironment
+configarchitecture "i386"
+
+insertpackage 'unstable' 'foo' 'all' '1.0'
+
+setupaptarchive --no-update
+
+APTARCHIVE=$(readlink -f ./aptarchive)
+
+# make Packages *only* accessable by-hash for this test
+mkdir -p aptarchive/dists/unstable/main/binary-i386/by-hash/SHA512
+(cd aptarchive/dists/unstable/main/binary-i386/by-hash/SHA512 &&
+ mv ../../Packages* . &&
+ ln -s Packages.gz $(sha512sum Packages.gz|cut -f1 -d' ') )
+
+# add sources
+mkdir -p aptarchive/dists/unstable/main/source/by-hash/SHA512
+(cd aptarchive/dists/unstable/main/source/by-hash/SHA512 &&
+ ln -s ../../Sources.gz $(sha512sum ../../Sources.gz|cut -f1 -d' ')
+)
+
+# we moved the Packages file away, normal update won't work
+testfailure aptget upate
+
+# ensure we do not know about "foo"
+testequal "Reading package lists...
+Building dependency tree...
+E: Unable to locate package foo" aptget install -q -s foo
+
+# ensure we can apt-get update by hash
+testsuccess aptget update -o APT::Acquire::By-Hash=1
+
+# ensure it works
+testequal "Inst foo (1.0 unstable [all])
+Conf foo (1.0 unstable [all])" aptget install -qq -s foo
+
+# add magic string to Release file ...
+MAGIC="Acquire-By-Hash: true"
+sed -i "s#Suite: unstable#Suite: unstable\n$MAGIC#" aptarchive/dists/unstable/Release
+signreleasefiles
+# ... and verify that it fetches by hash now
+testsuccess aptget update
+
mkdir aptarchive/pool/invalid
printf "meep" > aptarchive/pool/invalid/invalid_1.0.dsc
testequal "
+E: Could not find a record in the DSC 'aptarchive/pool/invalid/invalid_1.0.dsc'" aptftparchive sources aptarchive/pool/invalid
+rm -f aptarchive/pool/invalid/invalid_1.0.dsc
+
+printf "meep: yes" > aptarchive/pool/invalid/invalid_1.0.dsc
+testequal "
E: Could not find a Source entry in the DSC 'aptarchive/pool/invalid/invalid_1.0.dsc'" aptftparchive sources aptarchive/pool/invalid
rm -f aptarchive/pool/invalid/invalid_1.0.dsc
--- /dev/null
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+
+setupenvironment
+configarchitecture "i386"
+
+buildsimplenativepackage 'debhelper' 'i386' '7' 'stable'
+buildsimplenativepackage 'build-essential' 'i386' '1' 'stable'
+
+setupaptarchive
+cat > 2vcard_0.5-3.dsc <<EOF
+Format: 1.0
+Source: 2vcard
+Binary: 2vcard
+Architecture: all
+Version: 0.5-3
+Maintainer: Martin Albisetti <argentina@gmail.com>
+Uploaders: Marcela Tiznado <mlt@debian.org>
+Standards-Version: 3.8.0
+Build-Depends: debhelper (>= 5.0.37)
+Checksums-Sha1:
+ b7f1ce31ec856414a3f0f1090689f91aa7456d56 9398 2vcard_0.5.orig.tar.gz
+ 5f9acd07ebda6ab00fa6b4fe3198c13e94090862 2036 2vcard_0.5-3.diff.gz
+Checksums-Sha256:
+ efdc22859ac2f8f030d038dc4faa9020082ebae34212498c288968ffd45c9764 9398 2vcard_0.5.orig.tar.gz
+ 82673ff3456af571094066c89bcea87b25c23c87cf1d0050b731e5222563626b 2036 2vcard_0.5-3.diff.gz
+Files:
+ f73a69c170f772f3f6e75f2d11bbb792 9398 2vcard_0.5.orig.tar.gz
+ 1e806d32233af87437258d86b1561f57 2036 2vcard_0.5-3.diff.gz
+EOF
+
+testequal "Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ build-essential debhelper
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst build-essential (1 stable [i386])
+Inst debhelper (7 stable [i386])
+Conf build-essential (1 stable [i386])
+Conf debhelper (7 stable [i386])" aptget build-dep -s 2vcard_0.5-3.dsc
+
+cat > 2vcard_0.5-3.dsc <<EOF
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.0
+Source: 2vcard
+Binary: 2vcard
+Architecture: all
+Version: 0.5-3
+Maintainer: Martin Albisetti <argentina@gmail.com>
+Uploaders: Marcela Tiznado <mlt@debian.org>
+Standards-Version: 3.8.0
+Build-Depends: debhelper (>= 5.0.37)
+Checksums-Sha1:
+ b7f1ce31ec856414a3f0f1090689f91aa7456d56 9398 2vcard_0.5.orig.tar.gz
+ 5f9acd07ebda6ab00fa6b4fe3198c13e94090862 2036 2vcard_0.5-3.diff.gz
+Checksums-Sha256:
+ efdc22859ac2f8f030d038dc4faa9020082ebae34212498c288968ffd45c9764 9398 2vcard_0.5.orig.tar.gz
+ 82673ff3456af571094066c89bcea87b25c23c87cf1d0050b731e5222563626b 2036 2vcard_0.5-3.diff.gz
+Files:
+ f73a69c170f772f3f6e75f2d11bbb792 9398 2vcard_0.5.orig.tar.gz
+ 1e806d32233af87437258d86b1561f57 2036 2vcard_0.5-3.diff.gz
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+iEYEARECAAYFAkijKhsACgkQsrBfRdYmq7aA2gCfaOW9riTYVQMx5ajKQVAcctlC
+z2UAn1oXgTai6opwhVfkxrlmJ+iRxzuc
+=4eRd
+-----END PGP SIGNATURE-----
+EOF
+
+testequal "Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ build-essential debhelper
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst build-essential (1 stable [i386])
+Inst debhelper (7 stable [i386])
+Conf build-essential (1 stable [i386])
+Conf debhelper (7 stable [i386])" aptget build-dep --simulate 2vcard_0.5-3.dsc
+
+
+# unpacked source dir
+mkdir -p foo-1.0/debian
+cat > foo-1.0/debian/control <<'EOF'
+Source: apturl
+Section: admin
+Priority: optional
+Maintainer: Michael Vogt <mvo@ubuntu.com>
+Build-Depends: debhelper (>= 7)
+X-Python3-Version: >= 3.2
+Standards-Version: 3.9.3
+
+Package: apturl-common
+Architecture: any
+Depends: ${python3:Depends},
+ ${shlibs:Depends},
+ ${misc:Depends},
+ python3-apt,
+ python3-update-manager
+Replaces: apturl (<< 0.3.6ubuntu2)
+Description: install packages using the apt protocol - common data
+ AptUrl is a simple graphical application that takes an URL (which follows the
+ apt-protocol) as a command line option, parses it and carries out the
+ operations that the URL describes (that is, it asks the user if he wants the
+ indicated packages to be installed and if the answer is positive does so for
+ him).
+ .
+ This package contains the common data shared between the frontends.
+
+EOF
+
+testequal "Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+ build-essential debhelper
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst build-essential (1 stable [i386])
+Inst debhelper (7 stable [i386])
+Conf build-essential (1 stable [i386])
+Conf debhelper (7 stable [i386])" aptget build-dep --simulate ./foo-1.0
exec 3> apt-progress.log
testsuccess aptget install testing=0.1 -y -o APT::Status-Fd=3
testequal "dlstatus:1:0:Retrieving file 1 of 1
-dlstatus:1:0:Retrieving file 1 of 1
+dlstatus:1:20:Retrieving file 1 of 1
pmstatus:dpkg-exec:0:Running dpkg
pmstatus:testing:0:Installing testing (amd64)
pmstatus:testing:20:Preparing testing (amd64)
exec 3> apt-progress.log
testsuccess aptget install testing=0.8.15 -y -o APT::Status-Fd=3
testequal "dlstatus:1:0:Retrieving file 1 of 1
-dlstatus:1:0:Retrieving file 1 of 1
+dlstatus:1:20:Retrieving file 1 of 1
pmstatus:dpkg-exec:0:Running dpkg
pmstatus:testing:20:Preparing testing (amd64)
pmstatus:testing:40:Unpacking testing (amd64)
# and compare
testequal "dlstatus:1:0:Retrieving file 1 of 1
-dlstatus:1:0:Retrieving file 1 of 1
+dlstatus:1:20:Retrieving file 1 of 1
pmstatus:dpkg-exec:0:Running dpkg
pmstatus:testing2:0:Installing testing2 (i386)
pmstatus:testing2:20:Preparing testing2 (i386)
msgtest 'Test sources.list' 'old style'
echo "deb http://ftp.debian.org/debian stable main" > $SOURCES
-testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 :
-'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 :
+testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0
'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris
msgtest 'Test sources.list' 'simple deb822'
echo "$BASE" > $SOURCES
-testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 :
-'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 :
+testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0
'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris
echo "$BASE" > $SOURCES
echo "" >> $SOURCES
echo "$BASE" | sed s/stable/unstable/ >> $SOURCES
-testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 :
-'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 :
+testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0
'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
-'http://ftp.debian.org/debian/dists/unstable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_unstable_main_binary-i386_Packages 0 :
-'http://ftp.debian.org/debian/dists/unstable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_unstable_main_i18n_Translation-en 0 :
+'http://ftp.debian.org/debian/dists/unstable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_unstable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/unstable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_unstable_main_i18n_Translation-en 0
'http://ftp.debian.org/debian/dists/unstable/InRelease' ftp.debian.org_debian_dists_unstable_InRelease 0 " aptget update --print-uris
# two suite entries
msgtest 'Test deb822 with' 'two Suite entries'
echo "$BASE" | sed -e "s/stable/stable unstable/" > $SOURCES
-testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 :
-'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 :
+testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0
'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0
-'http://ftp.debian.org/debian/dists/unstable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_unstable_main_binary-i386_Packages 0 :
-'http://ftp.debian.org/debian/dists/unstable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_unstable_main_i18n_Translation-en 0 :
+'http://ftp.debian.org/debian/dists/unstable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_unstable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/unstable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_unstable_main_i18n_Translation-en 0
'http://ftp.debian.org/debian/dists/unstable/InRelease' ftp.debian.org_debian_dists_unstable_InRelease 0 " aptget update --print-uris
msgtest 'Test deb822' 'architecture option'
echo "$BASE" > $SOURCES
echo "Architectures: amd64 armel" >> $SOURCES
-testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-amd64/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-amd64_Packages 0 :
-'http://ftp.debian.org/debian/dists/stable/main/binary-armel/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-armel_Packages 0 :
-'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 :
+testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-amd64/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-amd64_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-armel/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-armel_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0
'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris
# multiple URIs
msgtest 'Test deb822 sources.list file which has' 'Multiple URIs work'
echo "$BASE" | sed -e 's#http://ftp.debian.org/debian#http://ftp.debian.org/debian http://ftp.de.debian.org/debian#' > $SOURCES
-testequal --nomsg "'http://ftp.de.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.de.debian.org_debian_dists_stable_main_binary-i386_Packages 0 :
-'http://ftp.de.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.de.debian.org_debian_dists_stable_main_i18n_Translation-en 0 :
+testequal --nomsg "'http://ftp.de.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.de.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.de.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.de.debian.org_debian_dists_stable_main_i18n_Translation-en 0
'http://ftp.de.debian.org/debian/dists/stable/InRelease' ftp.de.debian.org_debian_dists_stable_InRelease 0
-'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 :
-'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 :
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0
'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris
# multiple Type in one field
msgtest 'Test deb822 sources.list file which has' 'Multiple Types work'
echo "$BASE" | sed -e 's#Types: deb#Types: deb deb-src#' > $SOURCES
-testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/source/Sources.bz2' ftp.debian.org_debian_dists_stable_main_source_Sources 0 :
-'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 :
-'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 :
+testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/source/Sources.bz2' ftp.debian.org_debian_dists_stable_main_source_Sources 0
+'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0
+'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0
'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris
# a Suite
URIs: http://emacs.naquadah.org
Suites: stable/
EOF
-testequal --nomsg "'http://emacs.naquadah.org/stable/Packages.bz2' emacs.naquadah.org_stable_Packages 0 :
-'http://emacs.naquadah.org/stable/en.bz2' emacs.naquadah.org_stable_en 0 :
+testequal --nomsg "'http://emacs.naquadah.org/stable/Packages.bz2' emacs.naquadah.org_stable_Packages 0
+'http://emacs.naquadah.org/stable/en.bz2' emacs.naquadah.org_stable_en 0
'http://emacs.naquadah.org/stable/InRelease' emacs.naquadah.org_stable_InRelease 0 " aptget update --print-uris
testaptgetupdate() {
rm -rf rootdir/var/lib/apt
aptget update 2>> testaptgetupdate.diff >> testaptgetupdate.diff || true
- sed -i -e '/^Fetched / d' -e '/Ign / d' -e '/Release/ d' -e 's#Get:[0-9]\+ #Get: #' -e 's#\[[0-9]* [kMGTPY]*B\]#\[\]#' testaptgetupdate.diff
+ sed -i -e '/Ign / d' -e '/Release/ d' -e 's#Get:[0-9]\+ #Get: #' -e 's#\[[0-9]* [kMGTPY]*B\]#\[\]#' testaptgetupdate.diff
GIVEN="$1"
shift
msgtest "Test for correctness of" "apt-get update with $*"
The following NEW packages will be installed:
po-debconf
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
-Inst po-debconf (1 unstable, unstable [all])
-Conf po-debconf (1 unstable, unstable [all])' aptget build-dep dash -s
+Inst po-debconf (1 unstable [all])
+Conf po-debconf (1 unstable [all])' aptget build-dep dash -s
testequal 'Reading package lists...
Building dependency tree...
Description-md5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
" aptcache show apt-normal
-# displaying the translated Description would be equally valid,
-# but we assume only one description is in a Packages file and
-# so we prefer "Description" over "Description-*" currently.
for variant in 'below' 'middle' 'top'; do
testequal "Package: apt-both-$variant
$PACKAGESTANZA
-$DESCRIPTION
+$TRANSDESCRIPTION
Description-md5: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
" aptcache show apt-both-$variant
done
testequal "Package: apt-intermixed2
$PACKAGESTANZA
-$DESCRIPTION
+$TRANSDESCRIPTION
Description-md5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
X-Some-Flag: yes
X-Foo-Flag: Something with a Description
testequal "Package: apt-intermixed3
$PACKAGESTANZA
-$DESCRIPTION
+$TRANSDESCRIPTION
Description-md5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
X-Some-Flag: yes
X-Foo-Flag: Something with a Description
APTARCHIVE=$(readlink -f ./aptarchive)
-testequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 MD5Sum:" aptget upgrade -qq --print-uris
-testequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 MD5Sum:" aptget dist-upgrade -qq --print-uris
-testequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 MD5Sum:" aptget install apt -qq --print-uris
-testequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 MD5Sum:" aptget download apt -qq --print-uris
+testequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 " aptget upgrade -qq --print-uris
+testequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 " aptget dist-upgrade -qq --print-uris
+testequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 " aptget install apt -qq --print-uris
+testequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 " aptget download apt -qq --print-uris
testequal "'file://${APTARCHIVE}/apt_2.dsc' apt_2.dsc 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e
'file://${APTARCHIVE}/apt_2.tar.gz' apt_2.tar.gz 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e" aptget source apt -qq --print-uris
testequal "'http://packages.debian.org/changelogs/pool/main/apt/apt_2/changelog'" aptget changelog apt -qq --print-uris
--- /dev/null
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unstable' 'cool-foo' 'amd64' '1.0' 'Depends: foo'
+insertpackage 'unstable' 'foo' 'amd64' '1.0' 'Multi-Arch: foreign'
+insertinstalledpackage 'cool-foo' 'amd64' '1.0' 'Depends: foo'
+insertinstalledpackage 'foo' 'amd64' '1.0' 'Multi-Arch: foreign'
+
+setupaptarchive
+
+testsuccess aptget check -s
+
+configarchitecture 'amd64' 'i386'
+testequal 'E: The package cache was built for different architectures: amd64 vs amd64,i386' aptget check -s -o pkgCacheFile::Generate=false
+
+testsuccess aptget check -s
+
+insertinstalledpackage 'awesome-foo' 'i386' '1.0' 'Depends: foo'
+
+testsuccess aptget check -s
+
+testsuccess aptget update --no-download
+
+testsuccess aptget check -s
--- /dev/null
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+
+setupenvironment
+configarchitecture "i386"
+
+buildsimplenativepackage 'pkga' 'all' '1.0' 'stable'
+buildsimplenativepackage 'pkgb' 'all' '1.0' 'stable'
+buildsimplenativepackage 'pkgc' 'all' '1.0' 'stable'
+buildsimplenativepackage 'pkgd' 'all' '1.0' 'stable'
+
+setupaptarchive --no-update
+
+# simulate (and be a predictable) pipeline mess-up by the server/proxy
+changetowebserver \
+ -o 'aptwebserver::overwrite::.*pkga.*::filename=/pool/pkgd_1.0_all.deb' \
+ -o 'aptwebserver::overwrite::.*pkgc.*::filename=/pool/pkgb_1.0_all.deb' \
+ -o 'aptwebserver::overwrite::.*pkgb.*::filename=/pool/pkgc_1.0_all.deb' \
+ -o 'aptwebserver::overwrite::.*pkgd.*::filename=/pool/pkga_1.0_all.deb'
+
+testsuccess aptget update -o Debug::Acquire::http=1 -o Debug::pkgAcquire::Worker=1
+
+# messup is bigger than pipeline: checks if fixup isn't trying to hard
+testfailure aptget download pkga pkgb pkgc pkgd "$@" -o Acquire::http::Pipeline-Depth=2
+testfailure test -f pkga_1.0_all.deb
+
+# ensure that pipeling is enabled for rest of this test
+echo 'Acquire::http::Pipeline-Depth 10;' > rootdir/etc/apt/apt.conf.d/99enable-pipeline
+
+# the output is a bit strange: it looks like it has downloaded pkga 4 times
+testsuccess aptget download pkga pkgb pkgc pkgd -o Debug::Acquire::http=1 -o Debug::pkgAcquire::Worker=1
+for pkg in 'pkga' 'pkgb' 'pkgc' 'pkgd'; do
+ testsuccess test -f ${pkg}_1.0_all.deb
+ testsuccess cmp incoming/${pkg}_1.0_all.deb ${pkg}_1.0_all.deb
+ rm -f ${pkg}_1.0_all.deb
+done
+
+# while hashes will pass (as none are available), sizes will not match, so failure
+# checks that no hashes means that pipeline depth is ignored as we can't fixup
+testfailure aptget download pkga pkgb pkgc pkgd "$@" --allow-unauthenticated -o Acquire::ForceHash=ROT26
# the executed script would use the installed apt-config,
# which is outside of our control
msgtest 'Check that the installed apt-config supports' '--no-empty'
-if apt-config dump --no-empty >/dev/null 2>&1; then
+if /usr/bin/apt-config dump --no-empty >/dev/null 2>&1; then
msgpass
else
msgskip
PKGFILE="${TESTDIR}/$(echo "$(basename $0)" | sed 's#^test-#Packages-#')"
-echo '#!/bin/sh
-touch merge-was-used
-/usr/bin/diffindex-rred "$@"' > extrred
-chmod +x extrred
-echo 'Dir::Bin::rred "./extrred";' > rootdir/etc/apt/apt.conf.d/99rred
-
wasmergeused() {
msgtest 'Test for successful execution of' "$*"
local OUTPUT=$(mktemp)
--- /dev/null
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+
+setupenvironment
+configarchitecture 'native'
+
+cat > aptarchive/Sources <<EOF
+Package: pkg-md5-ok
+Binary: pkg-md5-ok
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ 9604ba9427a280db542279d9ed78400b 3 pkg-md5-ok_1.0.dsc
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-md5-ok_1.0.tar.gz
+
+Package: pkg-sha256-ok
+Binary: pkg-sha256-ok
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ 9604ba9427a280db542279d9ed78400b 3 pkg-sha256-ok_1.0.dsc
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-sha256-ok_1.0.tar.gz
+Checksums-Sha1:
+ 324f464e6151a92cf57b26ef95dcfcf2059a8c44 3 pkg-sha256-ok_1.0.dsc
+ 680254bad1d7ca0d65ec46aaa315d363abf6a50a 3 pkg-sha256-ok_1.0.tar.gz
+Checksums-Sha256:
+ 943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a 3 pkg-sha256-ok_1.0.dsc
+ 90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb 3 pkg-sha256-ok_1.0.tar.gz
+
+Package: pkg-sha256-bad
+Binary: pkg-sha256-bad
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ 9604ba9427a280db542279d9ed78400b 3 pkg-sha256-bad_1.0.dsc
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-sha256-bad_1.0.tar.gz
+Checksums-Sha1:
+ 324f464e6151a92cf57b26ef95dcfcf2059a8c44 3 pkg-sha256-bad_1.0.dsc
+ 680254bad1d7ca0d65ec46aaa315d363abf6a50a 3 pkg-sha256-bad_1.0.tar.gz
+Checksums-Sha256:
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 3 pkg-sha256-bad_1.0.dsc
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 3 pkg-sha256-bad_1.0.tar.gz
+
+Package: pkg-no-md5
+Binary: pkg-no-md5
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Checksums-Sha1:
+ 324f464e6151a92cf57b26ef95dcfcf2059a8c44 3 pkg-no-md5_1.0.dsc
+ 680254bad1d7ca0d65ec46aaa315d363abf6a50a 3 pkg-no-md5_1.0.tar.gz
+Checksums-Sha256:
+ 943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a 3 pkg-no-md5_1.0.dsc
+ 90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb 3 pkg-no-md5_1.0.tar.gz
+
+Package: pkg-mixed-ok
+Binary: pkg-mixed-ok
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Checksums-Sha1:
+ 680254bad1d7ca0d65ec46aaa315d363abf6a50a 3 pkg-mixed-ok_1.0.tar.gz
+Checksums-Sha256:
+ 943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a 3 pkg-mixed-ok_1.0.dsc
+
+Package: pkg-mixed-sha1-bad
+Binary: pkg-mixed-sha1-bad
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Checksums-Sha1:
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 3 pkg-mixed-sha1-bad_1.0.dsc
+Checksums-Sha256:
+ 90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb 3 pkg-mixed-sha1-bad_1.0.tar.gz
+
+Package: pkg-mixed-sha2-bad
+Binary: pkg-mixed-sha2-bad
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Checksums-Sha1:
+ 324f464e6151a92cf57b26ef95dcfcf2059a8c44 3 pkg-mixed-sha2-bad_1.0.dsc
+Checksums-Sha256:
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 3 pkg-mixed-sha2-bad_1.0.tar.gz
+
+Package: pkg-md5-disagree
+Binary: pkg-md5-disagree
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ 9604ba9427a280db542279d9ed78400b 3 pkg-md5-disagree_1.0.dsc
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-md5-disagree_1.0.tar.gz
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 3 pkg-md5-disagree_1.0.dsc
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 3 pkg-md5-disagree_1.0.tar.gz
+
+Package: pkg-md5-agree
+Binary: pkg-md5-agree
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ 9604ba9427a280db542279d9ed78400b 3 pkg-md5-agree_1.0.dsc
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-md5-agree_1.0.tar.gz
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-md5-agree_1.0.tar.gz
+ 9604ba9427a280db542279d9ed78400b 3 pkg-md5-agree_1.0.dsc
+
+Package: pkg-sha256-disagree
+Binary: pkg-sha256-disagree
+Version: 1.0
+Maintainer: Joe Sixpack <joe@example.org>
+Architecture: all
+Files:
+ 9604ba9427a280db542279d9ed78400b 3 pkg-sha256-disagree_1.0.dsc
+ db5570bf61464b46e2bde31ed61a7dc6 3 pkg-sha256-disagree_1.0.tar.gz
+Checksums-Sha1:
+ 324f464e6151a92cf57b26ef95dcfcf2059a8c44 3 pkg-sha256-disagree_1.0.dsc
+ 680254bad1d7ca0d65ec46aaa315d363abf6a50a 3 pkg-sha256-disagree_1.0.tar.gz
+Checksums-Sha256:
+ 943d3bf22ac661fb0f59bc4ff68cc12b04ff17a838dfcc2537008eb9c7f3770a 3 pkg-sha256-disagree_1.0.dsc
+ 90aebae315675cbf04612de4f7d5874850f48e0b8dd82becbeaa47ca93f5ebfb 3 pkg-sha256-disagree_1.0.tar.gz
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 3 pkg-sha256-disagree_1.0.dsc
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 3 pkg-sha256-disagree_1.0.tar.gz
+EOF
+
+# create fetchable files
+for x in 'pkg-md5-ok' 'pkg-sha256-ok' 'pkg-sha256-bad' 'pkg-no-md5' \
+ 'pkg-mixed-ok' 'pkg-mixed-sha1-bad' 'pkg-mixed-sha2-bad' \
+ 'pkg-md5-agree' 'pkg-md5-disagree' 'pkg-sha256-disagree'; do
+ echo -n 'dsc' > aptarchive/${x}_1.0.dsc
+ echo -n 'tar' > aptarchive/${x}_1.0.tar.gz
+done
+
+setupaptarchive
+changetowebserver
+testsuccess aptget update
+
+testok() {
+ rm -f ${1}_1.0.dsc ${1}_1.0.tar.gz
+ testequal "Reading package lists...
+Building dependency tree...
+Need to get 6 B of source archives.
+Get:1 http://localhost:8080/ $1 1.0 (dsc) [3 B]
+Get:2 http://localhost:8080/ $1 1.0 (tar) [3 B]
+Download complete and in download only mode" aptget source -d "$@"
+ msgtest 'Files were successfully downloaded for' "$1"
+ testsuccess --nomsg test -e ${1}_1.0.dsc -a -e ${1}_1.0.tar.gz
+ rm -f ${1}_1.0.dsc ${1}_1.0.tar.gz
+}
+
+testkeep() {
+ echo -n 'dsc' > ${1}_1.0.dsc
+ echo -n 'tar' > ${1}_1.0.tar.gz
+ testequal "Reading package lists...
+Building dependency tree...
+Skipping already downloaded file '${1}_1.0.dsc'
+Skipping already downloaded file '${1}_1.0.tar.gz'
+Need to get 0 B of source archives.
+Download complete and in download only mode" aptget source -d "$@"
+ msgtest 'Files already downloaded are kept for' "$1"
+ testsuccess --nomsg test -e ${1}_1.0.dsc -a -e ${1}_1.0.tar.gz
+ rm -f ${1}_1.0.dsc ${1}_1.0.tar.gz
+}
+
+testmismatch() {
+ rm -f ${1}_1.0.dsc ${1}_1.0.tar.gz
+ testequal "Reading package lists...
+Building dependency tree...
+Need to get 6 B of source archives.
+Get:1 http://localhost:8080/ $1 1.0 (dsc) [3 B]
+Get:2 http://localhost:8080/ $1 1.0 (tar) [3 B]
+E: Failed to fetch http://localhost:8080/${1}_1.0.dsc Hash Sum mismatch
+
+E: Failed to fetch http://localhost:8080/${1}_1.0.tar.gz Hash Sum mismatch
+
+E: Failed to fetch some archives." aptget source -d "$@"
+ msgtest 'Files were not download as they have hashsum mismatches for' "$1"
+ testfailure --nomsg test -e ${1}_1.0.dsc -a -e ${1}_1.0.tar.gz
+
+ rm -f ${1}_1.0.dsc ${1}_1.0.tar.gz
+ testequal "Reading package lists...
+Building dependency tree...
+Skipping download of file 'pkg-sha256-bad_1.0.dsc' as requested hashsum is not available for authentication
+Skipping download of file 'pkg-sha256-bad_1.0.tar.gz' as requested hashsum is not available for authentication
+Need to get 0 B of source archives.
+Download complete and in download only mode" aptget source -d "$@" -o Acquire::ForceHash=ROT26
+ msgtest 'Files were not download as hash is unavailable for' "$1"
+ testfailure --nomsg test -e ${1}_1.0.dsc -a -e ${1}_1.0.tar.gz
+
+ rm -f ${1}_1.0.dsc ${1}_1.0.tar.gz
+ testequal "Reading package lists...
+Building dependency tree...
+Need to get 6 B of source archives.
+Get:1 http://localhost:8080/ $1 1.0 (dsc) [3 B]
+Get:2 http://localhost:8080/ $1 1.0 (tar) [3 B]
+Download complete and in download only mode" aptget source --allow-unauthenticated -d "$@" -o Acquire::ForceHash=ROT26
+ msgtest 'Files were downloaded unauthenticated as user allowed it' "$1"
+ testsuccess --nomsg test -e ${1}_1.0.dsc -a -e ${1}_1.0.tar.gz
+}
+
+testok pkg-md5-ok
+testkeep pkg-md5-ok
+testok pkg-sha256-ok
+testkeep pkg-sha256-ok
+
+# pkg-sha256-bad has a bad SHA sum, but good MD5 sum. If apt is
+# checking the best available hash (as it should), this will trigger
+# a hash mismatch.
+testmismatch pkg-sha256-bad
+testmismatch pkg-sha256-bad
+testok pkg-sha256-bad -o Acquire::ForceHash=MD5Sum
+
+# not having MD5 sum doesn't mean the file doesn't exist at all …
+testok pkg-no-md5
+testok pkg-no-md5 -o Acquire::ForceHash=SHA256
+testequal "Reading package lists...
+Building dependency tree...
+Skipping download of file 'pkg-no-md5_1.0.dsc' as requested hashsum is not available for authentication
+Skipping download of file 'pkg-no-md5_1.0.tar.gz' as requested hashsum is not available for authentication
+Need to get 0 B of source archives.
+Download complete and in download only mode" aptget source -d pkg-no-md5 -o Acquire::ForceHash=MD5Sum
+msgtest 'Files were not download as MD5 is not available for this package' 'pkg-no-md5'
+testfailure --nomsg test -e pkg-no-md5_1.0.dsc -a -e pkg-no-md5_1.0.tar.gz
+
+# deal with cases in which we haven't for all files the same checksum type
+# mostly pathologic as this shouldn't happen, but just to be sure
+testok pkg-mixed-ok
+testequal 'Reading package lists...
+Building dependency tree...
+Need to get 6 B of source archives.
+Get:1 http://localhost:8080/ pkg-mixed-sha1-bad 1.0 (tar) [3 B]
+Get:2 http://localhost:8080/ pkg-mixed-sha1-bad 1.0 (dsc) [3 B]
+E: Failed to fetch http://localhost:8080/pkg-mixed-sha1-bad_1.0.dsc Hash Sum mismatch
+
+E: Failed to fetch some archives.' aptget source -d pkg-mixed-sha1-bad
+msgtest 'Only tar file is downloaded as the dsc has hashsum mismatch' 'pkg-mixed-sha1-bad'
+testsuccess --nomsg test ! -e pkg-mixed-sha1-bad_1.0.dsc -a -e pkg-mixed-sha1-bad_1.0.tar.gz
+testequal 'Reading package lists...
+Building dependency tree...
+Need to get 6 B of source archives.
+Get:1 http://localhost:8080/ pkg-mixed-sha2-bad 1.0 (tar) [3 B]
+Get:2 http://localhost:8080/ pkg-mixed-sha2-bad 1.0 (dsc) [3 B]
+E: Failed to fetch http://localhost:8080/pkg-mixed-sha2-bad_1.0.tar.gz Hash Sum mismatch
+
+E: Failed to fetch some archives.' aptget source -d pkg-mixed-sha2-bad
+msgtest 'Only dsc file is downloaded as the tar has hashsum mismatch' 'pkg-mixed-sha2-bad'
+testsuccess --nomsg test -e pkg-mixed-sha2-bad_1.0.dsc -a ! -e pkg-mixed-sha2-bad_1.0.tar.gz
+
+# it gets even more pathologic: multiple entries for one file, some even disagreeing!
+testok pkg-md5-agree
+testequal 'Reading package lists...
+Building dependency tree...
+E: Error parsing checksum in Files of source package pkg-md5-disagree' aptget source -d pkg-md5-disagree
+testequal 'Reading package lists...
+Building dependency tree...
+E: Error parsing checksum in Checksums-SHA256 of source package pkg-sha256-disagree' aptget source -d pkg-sha256-disagree
600 Acquire URI
URI: http://localhost:8080/holygrail
Filename: knights-talking
-' | ${METHODSDIR}/http >/dev/null 2>&1 && msgpass || msgfail
+' | runapt ${METHODSDIR}/http >/dev/null 2>&1 && msgpass || msgfail
testfileequal knights-talking 'ni ni ni'
ensure_n_canary_strings_in_dir() {
#SOURCE = rpmver.cc
#include $(PROGRAM_H)
-# Program for testing udevcdrom
+# very simple webserver for APT testing
PROGRAM=aptwebserver
SLIBS = -lapt-pkg -lpthread
LIB_MAKES = apt-pkg/makefile
if (old_tmpdir.empty() == false)
setenv("TMPDIR", old_tmpdir.c_str(), 1);
}
+TEST(FileUtlTest, Popen)
+{
+ FileFd Fd;
+ pid_t Child;
+ char buf[1024];
+ std::string s;
+ unsigned long long n = 0;
+ std::vector<std::string> OpenFds;
+
+ // count Fds to ensure we don't have a resource leak
+ if(FileExists("/proc/self/fd"))
+ OpenFds = Glob("/proc/self/fd/*");
+
+ // output something
+ const char* Args[10] = {"/bin/echo", "meepmeep", NULL};
+ bool res = Popen(Args, Fd, Child, FileFd::ReadOnly);
+ Fd.Read(buf, sizeof(buf)-1, &n);
+ buf[n] = 0;
+ EXPECT_NE(n, 0);
+ EXPECT_EQ(res, true);
+ EXPECT_STREQ(buf, "meepmeep\n");
+
+ // wait for the child to exit and cleanup
+ ExecWait(Child, "PopenRead");
+ Fd.Close();
+
+ // ensure that after a close all is good again
+ if(FileExists("/proc/self/fd"))
+ EXPECT_EQ(Glob("/proc/self/fd/*").size(), OpenFds.size());
+
+
+ // ReadWrite is not supported
+ res = Popen(Args, Fd, Child, FileFd::ReadWrite);
+ EXPECT_EQ(res, false);
+ _error->Discard();
+
+ // write something
+ Args[0] = "/bin/bash";
+ Args[1] = "-c";
+ Args[2] = "read";
+ Args[3] = NULL;
+ res = Popen(Args, Fd, Child, FileFd::WriteOnly);
+ s = "\n";
+ Fd.Write(s.c_str(), s.size());
+ Fd.Close();
+ ExecWait(Child, "PopenWrite");
+}
+TEST(FileUtlTest, flAbsPath)
+{
+ std::string cwd = SafeGetCWD();
+ int res = chdir("/bin/");
+ EXPECT_EQ(res, 0);
+ std::string p = flAbsPath("ls");
+ EXPECT_EQ(p, "/bin/ls");
+
+ res = chdir(cwd.c_str());
+ EXPECT_EQ(res, 0);
+}
#include <config.h>
+#include <apt-pkg/configuration.h>
#include <apt-pkg/md5.h>
#include <apt-pkg/sha1.h>
#include <apt-pkg/sha2.h>
{
Hashes hashes;
hashes.AddFD(fd.Fd());
- EXPECT_EQ(md5.Value(), hashes.MD5.Result().Value());
- EXPECT_EQ(sha1.Value(), hashes.SHA1.Result().Value());
- EXPECT_EQ(sha256.Value(), hashes.SHA256.Result().Value());
- EXPECT_EQ(sha512.Value(), hashes.SHA512.Result().Value());
+ HashStringList list = hashes.GetHashStringList();
+ EXPECT_FALSE(list.empty());
+ EXPECT_EQ(4, list.size());
+ EXPECT_EQ(md5.Value(), list.find("MD5Sum")->HashValue());
+ EXPECT_EQ(sha1.Value(), list.find("SHA1")->HashValue());
+ EXPECT_EQ(sha256.Value(), list.find("SHA256")->HashValue());
+ EXPECT_EQ(sha512.Value(), list.find("SHA512")->HashValue());
}
unsigned long sz = fd.FileSize();
fd.Seek(0);
{
Hashes hashes;
hashes.AddFD(fd.Fd(), sz);
- EXPECT_EQ(md5.Value(), hashes.MD5.Result().Value());
- EXPECT_EQ(sha1.Value(), hashes.SHA1.Result().Value());
- EXPECT_EQ(sha256.Value(), hashes.SHA256.Result().Value());
- EXPECT_EQ(sha512.Value(), hashes.SHA512.Result().Value());
+ HashStringList list = hashes.GetHashStringList();
+ EXPECT_FALSE(list.empty());
+ EXPECT_EQ(4, list.size());
+ EXPECT_EQ(md5.Value(), list.find("MD5Sum")->HashValue());
+ EXPECT_EQ(sha1.Value(), list.find("SHA1")->HashValue());
+ EXPECT_EQ(sha256.Value(), list.find("SHA256")->HashValue());
+ EXPECT_EQ(sha512.Value(), list.find("SHA512")->HashValue());
}
fd.Seek(0);
{
}
fd.Close();
- {
- HashString sha2("SHA256", sha256.Value());
- EXPECT_TRUE(sha2.VerifyFile(__FILE__));
- }
- {
- HashString sha2("SHA512", sha512.Value());
- EXPECT_TRUE(sha2.VerifyFile(__FILE__));
- }
- {
- HashString sha2("SHA256:" + sha256.Value());
- EXPECT_TRUE(sha2.VerifyFile(__FILE__));
- }
+ HashString sha2file("SHA512", sha512.Value());
+ EXPECT_TRUE(sha2file.VerifyFile(__FILE__));
+ HashString sha2wrong("SHA512", "00000000000");
+ EXPECT_FALSE(sha2wrong.VerifyFile(__FILE__));
+ EXPECT_EQ(sha2file, sha2file);
+ EXPECT_TRUE(sha2file == sha2file);
+ EXPECT_NE(sha2file, sha2wrong);
+ EXPECT_TRUE(sha2file != sha2wrong);
+
+ HashString sha2big("SHA256", sha256.Value());
+ EXPECT_TRUE(sha2big.VerifyFile(__FILE__));
+ HashString sha2small("sha256:" + sha256.Value());
+ EXPECT_TRUE(sha2small.VerifyFile(__FILE__));
+ EXPECT_EQ(sha2big, sha2small);
+ EXPECT_TRUE(sha2big == sha2small);
+ EXPECT_FALSE(sha2big != sha2small);
+
+ HashStringList hashes;
+ EXPECT_TRUE(hashes.empty());
+ EXPECT_TRUE(hashes.push_back(sha2file));
+ EXPECT_FALSE(hashes.empty());
+ EXPECT_EQ(1, hashes.size());
+
+ HashStringList wrong;
+ EXPECT_TRUE(wrong.push_back(sha2wrong));
+ EXPECT_NE(wrong, hashes);
+ EXPECT_FALSE(wrong == hashes);
+ EXPECT_TRUE(wrong != hashes);
+
+ HashStringList similar;
+ EXPECT_TRUE(similar.push_back(sha2big));
+ EXPECT_NE(similar, hashes);
+ EXPECT_FALSE(similar == hashes);
+ EXPECT_TRUE(similar != hashes);
+
+ EXPECT_TRUE(hashes.push_back(sha2big));
+ EXPECT_EQ(2, hashes.size());
+ EXPECT_TRUE(hashes.push_back(sha2small));
+ EXPECT_EQ(2, hashes.size());
+ EXPECT_FALSE(hashes.push_back(sha2wrong));
+ EXPECT_EQ(2, hashes.size());
+ EXPECT_TRUE(hashes.VerifyFile(__FILE__));
+
+ EXPECT_EQ(similar, hashes);
+ EXPECT_TRUE(similar == hashes);
+ EXPECT_FALSE(similar != hashes);
+ similar.clear();
+ EXPECT_TRUE(similar.empty());
+ EXPECT_EQ(0, similar.size());
+ EXPECT_NE(similar, hashes);
+ EXPECT_FALSE(similar == hashes);
+ EXPECT_TRUE(similar != hashes);
+}
+TEST(HashSumsTest, HashStringList)
+{
+ _config->Clear("Acquire::ForceHash");
+
+ HashStringList list;
+ EXPECT_TRUE(list.empty());
+ EXPECT_FALSE(list.usable());
+ EXPECT_EQ(0, list.size());
+ EXPECT_EQ(NULL, list.find(NULL));
+ EXPECT_EQ(NULL, list.find(""));
+ EXPECT_EQ(NULL, list.find("MD5Sum"));
+
+ HashStringList list2;
+ EXPECT_FALSE(list == list2);
+ EXPECT_TRUE(list != list2);
+
+ Hashes hashes;
+ hashes.Add("The quick brown fox jumps over the lazy dog");
+ list = hashes.GetHashStringList();
+ EXPECT_FALSE(list.empty());
+ EXPECT_TRUE(list.usable());
+ EXPECT_EQ(4, list.size());
+ EXPECT_TRUE(NULL != list.find(NULL));
+ EXPECT_TRUE(NULL != list.find(""));
+ EXPECT_TRUE(NULL != list.find("MD5Sum"));
+ EXPECT_TRUE(NULL == list.find("ROT26"));
+
+ _config->Set("Acquire::ForceHash", "MD5Sum");
+ EXPECT_FALSE(list.empty());
+ EXPECT_TRUE(list.usable());
+ EXPECT_EQ(4, list.size());
+ EXPECT_TRUE(NULL != list.find(NULL));
+ EXPECT_TRUE(NULL != list.find(""));
+ EXPECT_TRUE(NULL != list.find("MD5Sum"));
+ EXPECT_TRUE(NULL == list.find("ROT26"));
+
+ _config->Set("Acquire::ForceHash", "ROT26");
+ EXPECT_FALSE(list.empty());
+ EXPECT_FALSE(list.usable());
+ EXPECT_EQ(4, list.size());
+ EXPECT_TRUE(NULL == list.find(NULL));
+ EXPECT_TRUE(NULL == list.find(""));
+ EXPECT_TRUE(NULL != list.find("MD5Sum"));
+ EXPECT_TRUE(NULL == list.find("ROT26"));
+
+ _config->Clear("Acquire::ForceHash");
+
+ list2.push_back(*list.find("MD5Sum"));
+ EXPECT_TRUE(list == list2);
+ EXPECT_FALSE(list != list2);
+
+ // introduce a mismatch to the list
+ list2.push_back(HashString("SHA1", "cacecbd74968bc90ea3342767e6b94f46ddbcafc"));
+ EXPECT_FALSE(list == list2);
+ EXPECT_TRUE(list != list2);
+
+ _config->Set("Acquire::ForceHash", "MD5Sum");
+ EXPECT_TRUE(list == list2);
+ EXPECT_FALSE(list != list2);
+
+ _config->Clear("Acquire::ForceHash");
}
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <sstream>
#include <gtest/gtest.h>
// There is only one section in this tag file
EXPECT_FALSE(tfile.Step(section));
}
+
+TEST(TagFileTest,MultipleSections)
+{
+ FileFd fd;
+ createTemporaryFile("bigsection", fd, NULL, "Package: pkgA\n"
+ "Version: 1\n"
+ "Size: 100\n"
+ "Description: aaa\n"
+ " aaa\n"
+ "\n"
+ "Package: pkgB\n"
+ "Version: 1\n"
+ "Flag: no\n"
+ "Description: bbb\n"
+ "\n"
+ "Package: pkgC\n"
+ "Version: 2\n"
+ "Flag: yes\n"
+ "Description:\n"
+ " ccc\n"
+ );
+
+ pkgTagFile tfile(&fd);
+ pkgTagSection section;
+ EXPECT_FALSE(section.Exists("Version"));
+
+ EXPECT_TRUE(tfile.Step(section));
+ EXPECT_EQ(4, section.Count());
+ EXPECT_TRUE(section.Exists("Version"));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_TRUE(section.Exists("Size"));
+ EXPECT_FALSE(section.Exists("Flag"));
+ EXPECT_TRUE(section.Exists("Description"));
+ EXPECT_EQ("pkgA", section.FindS("Package"));
+ EXPECT_EQ("1", section.FindS("Version"));
+ EXPECT_EQ(1, section.FindULL("Version"));
+ EXPECT_EQ(100, section.FindULL("Size"));
+ unsigned long Flags = 1;
+ EXPECT_TRUE(section.FindFlag("Flag", Flags, 1));
+ EXPECT_EQ(1, Flags);
+ Flags = 0;
+ EXPECT_TRUE(section.FindFlag("Flag", Flags, 1));
+ EXPECT_EQ(0, Flags);
+ EXPECT_EQ("aaa\n aaa", section.FindS("Description"));
+
+
+ EXPECT_TRUE(tfile.Step(section));
+ EXPECT_EQ(4, section.Count());
+ EXPECT_TRUE(section.Exists("Version"));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_FALSE(section.Exists("Size"));
+ EXPECT_TRUE(section.Exists("Flag"));
+ EXPECT_TRUE(section.Exists("Description"));
+ EXPECT_EQ("pkgB", section.FindS("Package"));
+ EXPECT_EQ("1", section.FindS("Version"));
+ EXPECT_EQ(1, section.FindULL("Version"));
+ EXPECT_EQ(0, section.FindULL("Size"));
+ Flags = 1;
+ EXPECT_TRUE(section.FindFlag("Flag", Flags, 1));
+ EXPECT_EQ(0, Flags);
+ Flags = 0;
+ EXPECT_TRUE(section.FindFlag("Flag", Flags, 1));
+ EXPECT_EQ(0, Flags);
+ EXPECT_EQ("bbb", section.FindS("Description"));
+
+ EXPECT_TRUE(tfile.Step(section));
+ EXPECT_EQ(4, section.Count());
+ EXPECT_TRUE(section.Exists("Version"));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_FALSE(section.Exists("Size"));
+ EXPECT_TRUE(section.Exists("Flag"));
+ EXPECT_TRUE(section.Exists("Description"));
+ EXPECT_EQ("pkgC", section.FindS("Package"));
+ EXPECT_EQ("2", section.FindS("Version"));
+ EXPECT_EQ(2, section.FindULL("Version"));
+ Flags = 0;
+ EXPECT_TRUE(section.FindFlag("Flag", Flags, 1));
+ EXPECT_EQ(1, Flags);
+ Flags = 1;
+ EXPECT_TRUE(section.FindFlag("Flag", Flags, 1));
+ EXPECT_EQ(1, Flags);
+ EXPECT_EQ("ccc", section.FindS("Description"));
+
+ // There is no section left in this tag file
+ EXPECT_FALSE(tfile.Step(section));
+}
+
+TEST(TagFileTest,BigSection)
+{
+ size_t const count = 500;
+ std::stringstream content;
+ for (size_t i = 0; i < count; ++i)
+ content << "Field-" << i << ": " << (2000 + i) << std::endl;
+
+ FileFd fd;
+ createTemporaryFile("bigsection", fd, NULL, content.str().c_str());
+
+ pkgTagFile tfile(&fd);
+ pkgTagSection section;
+ EXPECT_TRUE(tfile.Step(section));
+
+ EXPECT_EQ(count, section.Count());
+ for (size_t i = 0; i < count; ++i)
+ {
+ std::stringstream name;
+ name << "Field-" << i;
+ EXPECT_TRUE(section.Exists(name.str().c_str())) << name.str() << " does not exist";
+ EXPECT_EQ((2000 + i), section.FindULL(name.str().c_str()));
+ }
+
+ // There is only one section in this tag file
+ EXPECT_FALSE(tfile.Step(section));
+}
+
+TEST(TagFileTest, PickedUpFromPreviousCall)
+{
+ size_t const count = 500;
+ std::stringstream contentstream;
+ for (size_t i = 0; i < count; ++i)
+ contentstream << "Field-" << i << ": " << (2000 + i) << std::endl;
+ contentstream << std::endl << std::endl;
+ std::string content = contentstream.str();
+
+ pkgTagSection section;
+ EXPECT_FALSE(section.Scan(content.c_str(), content.size()/2));
+ EXPECT_NE(0, section.Count());
+ EXPECT_NE(count, section.Count());
+ EXPECT_TRUE(section.Scan(content.c_str(), content.size(), false));
+ EXPECT_EQ(count, section.Count());
+
+ for (size_t i = 0; i < count; ++i)
+ {
+ std::stringstream name;
+ name << "Field-" << i;
+ EXPECT_TRUE(section.Exists(name.str().c_str())) << name.str() << " does not exist";
+ EXPECT_EQ((2000 + i), section.FindULL(name.str().c_str()));
+ }
+}
+
+TEST(TagFileTest, SpacesEverywhere)
+{
+ std::string content =
+ "Package: pkgA\n"
+ "Package: pkgB\n"
+ "NoSpaces:yes\n"
+ "TagSpaces\t :yes\n"
+ "ValueSpaces: \tyes\n"
+ "BothSpaces \t:\t yes\n"
+ "TrailingSpaces: yes\t \n"
+ "Naming Space: yes\n"
+ "Naming Spaces: yes\n"
+ "Package : pkgC \n"
+ "Multi-Colon::yes:\n"
+ "\n\n";
+
+ pkgTagSection section;
+ EXPECT_TRUE(section.Scan(content.c_str(), content.size()));
+ EXPECT_TRUE(section.Exists("Package"));
+ EXPECT_TRUE(section.Exists("NoSpaces"));
+ EXPECT_TRUE(section.Exists("TagSpaces"));
+ EXPECT_TRUE(section.Exists("ValueSpaces"));
+ EXPECT_TRUE(section.Exists("BothSpaces"));
+ EXPECT_TRUE(section.Exists("TrailingSpaces"));
+ EXPECT_TRUE(section.Exists("Naming Space"));
+ EXPECT_TRUE(section.Exists("Naming Spaces"));
+ EXPECT_TRUE(section.Exists("Multi-Colon"));
+ EXPECT_EQ("pkgC", section.FindS("Package"));
+ EXPECT_EQ("yes", section.FindS("NoSpaces"));
+ EXPECT_EQ("yes", section.FindS("TagSpaces"));
+ EXPECT_EQ("yes", section.FindS("ValueSpaces"));
+ EXPECT_EQ("yes", section.FindS("BothSpaces"));
+ EXPECT_EQ("yes", section.FindS("TrailingSpaces"));
+ EXPECT_EQ("yes", section.FindS("Naming Space"));
+ EXPECT_EQ("yes", section.FindS("Naming Spaces"));
+ EXPECT_EQ(":yes:", section.FindS("Multi-Colon"));
+ // overridden values are still present, but not really accessible
+ EXPECT_EQ(11, section.Count());
+}