projects
/
apt.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rewrite ReadMessages()
[apt.git]
/
apt-pkg
/
pkgcache.cc
diff --git
a/apt-pkg/pkgcache.cc
b/apt-pkg/pkgcache.cc
index 4fbdc93d519a56085b5befa38aa14abd618f2833..572685ba5f14ec909683cd7c8c10b3c696e82cc2 100644
(file)
--- a/
apt-pkg/pkgcache.cc
+++ b/
apt-pkg/pkgcache.cc
@@
-54,8
+54,8
@@
pkgCache::Header::Header()
/* Whenever the structures change the major version should be bumped,
whenever the generator changes the minor version should be bumped. */
/* Whenever the structures change the major version should be bumped,
whenever the generator changes the minor version should be bumped. */
- MajorVersion =
9
;
- MinorVersion =
2
;
+ MajorVersion =
10
;
+ MinorVersion =
0
;
Dirty = false;
HeaderSz = sizeof(pkgCache::Header);
Dirty = false;
HeaderSz = sizeof(pkgCache::Header);
@@
-82,11
+82,10
@@
pkgCache::Header::Header()
MaxDescFileSize = 0;
FileList = 0;
MaxDescFileSize = 0;
FileList = 0;
- StringList = 0;
VerSysName = 0;
Architecture = 0;
VerSysName = 0;
Architecture = 0;
-
memset(PkgHashTable,0,sizeof(PkgHashTable))
;
-
memset(GrpHashTable,0,sizeof(GrpHashTable)
);
+
Architectures = 0
;
+
HashTableSize = _config->FindI("APT::Cache-HashTableSize", 10 * 1048
);
memset(Pools,0,sizeof(Pools));
CacheFileSize = 0;
memset(Pools,0,sizeof(Pools));
CacheFileSize = 0;
@@
-141,7
+140,6
@@
bool pkgCache::ReMap(bool const &Errorchecks)
DescP = (Description *)Map.Data();
ProvideP = (Provides *)Map.Data();
DepP = (Dependency *)Map.Data();
DescP = (Description *)Map.Data();
ProvideP = (Provides *)Map.Data();
DepP = (Dependency *)Map.Data();
- StringItemP = (StringItem *)Map.Data();
StrP = (char *)Map.Data();
if (Errorchecks == false)
StrP = (char *)Map.Data();
if (Errorchecks == false)
@@
-189,20
+187,20
@@
bool pkgCache::ReMap(bool const &Errorchecks)
/* 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) */
/* 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);
{
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);
{
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 /*{{{*/
}
/*}}}*/
// Cache::SingleArchFindPkg - Locate a package by name /*{{{*/
@@
-213,13
+211,10
@@
unsigned long pkgCache::sHash(const char *Str) const
pkgCache::PkgIterator pkgCache::SingleArchFindPkg(const string &Name)
{
// Look at the hash bucket
pkgCache::PkgIterator pkgCache::SingleArchFindPkg(const string &Name)
{
// Look at the hash bucket
- Package *Pkg = PkgP + HeaderP->PkgHashTable[Hash(Name)];
+ Package *Pkg = PkgP + HeaderP->PkgHashTable
()
[Hash(Name)];
for (; Pkg != PkgP; Pkg = PkgP + Pkg->Next)
{
for (; Pkg != PkgP; Pkg = PkgP + Pkg->Next)
{
- if (unlikely(Pkg->Name == 0))
- continue;
-
- int const cmp = strcasecmp(Name.c_str(), StrP + Pkg->Name);
+ int const cmp = strcmp(Name.c_str(), StrP + (GrpP + Pkg->Group)->Name);
if (cmp == 0)
return PkgIterator(*this, Pkg);
else if (cmp < 0)
if (cmp == 0)
return PkgIterator(*this, Pkg);
else if (cmp < 0)
@@
-278,12
+273,9
@@
pkgCache::GrpIterator pkgCache::FindGrp(const string &Name) {
return GrpIterator(*this,0);
// Look at the hash bucket for the group
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) {
for (; Grp != GrpP; Grp = GrpP + Grp->Next) {
- if (unlikely(Grp->Name == 0))
- continue;
-
- int const cmp = strcasecmp(Name.c_str(), StrP + Grp->Name);
+ int const cmp = strcmp(Name.c_str(), StrP + Grp->Name);
if (cmp == 0)
return GrpIterator(*this, Grp);
else if (cmp < 0)
if (cmp == 0)
return GrpIterator(*this, Grp);
else if (cmp < 0)
@@
-360,19
+352,15
@@
pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(string Arch) const {
last one we check, so we do it now. */
if (Arch == "native" || Arch == myArch || Arch == "all") {
pkgCache::Package *Pkg = Owner->PkgP + S->LastPackage;
last one we check, so we do it now. */
if (Arch == "native" || Arch == myArch || Arch == "all") {
pkgCache::Package *Pkg = Owner->PkgP + S->LastPackage;
- if (strc
asec
mp(myArch, Owner->StrP + Pkg->Arch) == 0)
+ if (strcmp(myArch, Owner->StrP + Pkg->Arch) == 0)
return PkgIterator(*Owner, Pkg);
Arch = myArch;
}
return PkgIterator(*Owner, Pkg);
Arch = myArch;
}
- /* Iterate over the list to find the matching arch
- unfortunately this list includes "package noise"
- (= different packages with same calculated hash),
- so we need to check the name also */
+ // Iterate over the list to find the matching arch
for (pkgCache::Package *Pkg = PackageList(); Pkg != Owner->PkgP;
Pkg = Owner->PkgP + Pkg->Next) {
for (pkgCache::Package *Pkg = PackageList(); Pkg != Owner->PkgP;
Pkg = Owner->PkgP + Pkg->Next) {
- if (S->Name == Pkg->Name &&
- stringcasecmp(Arch, Owner->StrP + Pkg->Arch) == 0)
+ if (stringcmp(Arch, Owner->StrP + Pkg->Arch) == 0)
return PkgIterator(*Owner, Pkg);
if ((Owner->PkgP + S->LastPackage) == Pkg)
break;
return PkgIterator(*Owner, Pkg);
if ((Owner->PkgP + S->LastPackage) == Pkg)
break;
@@
-432,10
+420,10
@@
void pkgCache::GrpIterator::operator ++(int)
S = Owner->GrpP + S->Next;
// Follow the hash table
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++;
{
HashIndex++;
- S = Owner->GrpP + Owner->HeaderP->GrpHashTable[HashIndex];
+ S = Owner->GrpP + Owner->HeaderP->GrpHashTable
()
[HashIndex];
}
}
/*}}}*/
}
}
/*}}}*/
@@
-449,10
+437,10
@@
void pkgCache::PkgIterator::operator ++(int)
S = Owner->PkgP + S->Next;
// Follow the hash table
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++;
{
HashIndex++;
- S = Owner->PkgP + Owner->HeaderP->PkgHashTable[HashIndex];
+ S = Owner->PkgP + Owner->HeaderP->PkgHashTable
()
[HashIndex];
}
}
/*}}}*/
}
}
/*}}}*/
@@
-528,7
+516,10
@@
operator<<(std::ostream& out, pkgCache::PkgIterator Pkg)
out << " -> " << candidate;
if ( newest != "none" && candidate != newest)
out << " | " << newest;
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 out;
}
/*}}}*/
@@
-1035,8
+1026,14
@@
bool pkgCache::PrvIterator::IsMultiArchImplicit() const
{
pkgCache::PkgIterator const Owner = OwnerPkg();
pkgCache::PkgIterator const Parent = ParentPkg();
{
pkgCache::PkgIterator const Owner = OwnerPkg();
pkgCache::PkgIterator const Parent = ParentPkg();
- if (strcmp(Owner.Arch(), Parent.Arch()) != 0 || Owner
->Name == Parent
->Name)
+ if (strcmp(Owner.Arch(), Parent.Arch()) != 0 || Owner
.Group()->Name == Parent.Group()
->Name)
return true;
return false;
}
/*}}}*/
return true;
return false;
}
/*}}}*/
+APT_DEPRECATED APT_PURE const char * pkgCache::PkgIterator::Section() const {/*{{{*/
+ if (S->VersionList == 0)
+ return 0;
+ return VersionList().Section();
+}
+ /*}}}*/