diff options
Diffstat (limited to 'apt-pkg/pkgcachegen.cc')
-rw-r--r-- | apt-pkg/pkgcachegen.cc | 133 |
1 files changed, 14 insertions, 119 deletions
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index 1ba791b45..de854bee5 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -125,46 +125,16 @@ bool pkgCacheGenerator::MergeList(ListParser &List, string Version = List.Version(); if (Version.empty() == true) { - // we first process the package, then the descriptions - // (this has the bonus that we get MMap error when we run out - // of MMap space) if (List.UsePackage(Pkg,pkgCache::VerIterator(Cache)) == false) return _error->Error(_("Error occurred while processing %s (UsePackage1)"), PackageName.c_str()); - - // Find the right version to write the description - MD5SumValue CurMd5 = List.Description_md5(); - pkgCache::VerIterator Ver = Pkg.VersionList(); - map_ptrloc *LastVer = &Pkg->VersionList; - - for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++) - { - pkgCache::DescIterator Desc = Ver.DescriptionList(); - map_ptrloc *LastDesc = &Ver->DescriptionList; - - for (; Desc.end() == false; LastDesc = &Desc->NextDesc, Desc++) - { - - if (MD5SumValue(Desc.md5()) == CurMd5) - { - // Add new description - *LastDesc = NewDescription(Desc, List.DescriptionLanguage(), CurMd5, *LastDesc); - Desc->ParentPkg = Pkg.Index(); - - if (NewFileDesc(Desc,List) == false) - return _error->Error(_("Error occured while processing %s (NewFileDesc1)"),PackageName.c_str()); - break; - } - } - } - continue; } pkgCache::VerIterator Ver = Pkg.VersionList(); - map_ptrloc *LastVer = &Pkg->VersionList; + map_ptrloc *Last = &Pkg->VersionList; int Res = 1; - for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++) + for (; Ver.end() == false; Last = &Ver->NextVer, Ver++) { Res = Cache.VS->CmpVersion(Version,Ver.VerStr()); if (Res >= 0) @@ -198,7 +168,7 @@ bool pkgCacheGenerator::MergeList(ListParser &List, // Skip to the end of the same version set. if (Res == 0) { - for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++) + for (; Ver.end() == false; Last = &Ver->NextVer, Ver++) { Res = Cache.VS->CmpVersion(Version,Ver.VerStr()); if (Res != 0) @@ -207,10 +177,9 @@ bool pkgCacheGenerator::MergeList(ListParser &List, } // Add a new version - *LastVer = NewVersion(Ver,Version,*LastVer); + *Last = NewVersion(Ver,Version,*Last); Ver->ParentPkg = Pkg.Index(); Ver->Hash = Hash; - if (List.NewVersion(Ver) == false) return _error->Error(_("Error occurred while processing %s (NewVersion1)"), PackageName.c_str()); @@ -230,21 +199,6 @@ bool pkgCacheGenerator::MergeList(ListParser &List, FoundFileDeps |= List.HasFileDeps(); return true; } - - /* Record the Description data. Description data always exist in - Packages and Translation-* files. */ - pkgCache::DescIterator Desc = Ver.DescriptionList(); - map_ptrloc *LastDesc = &Ver->DescriptionList; - - // Skip to the end of description set - for (; Desc.end() == false; LastDesc = &Desc->NextDesc, Desc++); - - // Add new description - *LastDesc = NewDescription(Desc, List.DescriptionLanguage(), List.Description_md5(), *LastDesc); - Desc->ParentPkg = Pkg.Index(); - - if (NewFileDesc(Desc,List) == false) - return _error->Error(_("Error occured while processing %s (NewFileDesc2)"),PackageName.c_str()); } FoundFileDeps |= List.HasFileDeps(); @@ -255,9 +209,6 @@ bool pkgCacheGenerator::MergeList(ListParser &List, if (Cache.HeaderP->VersionCount >= (1ULL<<(sizeof(Cache.VerP->ID)*8))-1) 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) - 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) return _error->Error(_("Wow, you exceeded the number of dependencies " "this APT is capable of.")); @@ -315,12 +266,12 @@ bool pkgCacheGenerator::MergeFileProvides(ListParser &List) // CacheGenerator::NewPackage - Add a new package /*{{{*/ // --------------------------------------------------------------------- /* This creates a new package structure and adds it to the hash table */ -bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg,string Name) +bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg,const string &Name) { Pkg = Cache.FindPkg(Name); if (Pkg.end() == false) return true; - + // Get a structure unsigned long Package = Map.Allocate(sizeof(pkgCache::Package)); if (Package == 0) @@ -379,7 +330,7 @@ bool pkgCacheGenerator::NewFileVer(pkgCache::VerIterator &Ver, // --------------------------------------------------------------------- /* This puts a version structure in the linked list */ unsigned long pkgCacheGenerator::NewVersion(pkgCache::VerIterator &Ver, - string VerStr, + const string &VerStr, unsigned long Next) { // Get a structure @@ -398,69 +349,13 @@ unsigned long pkgCacheGenerator::NewVersion(pkgCache::VerIterator &Ver, return Version; } /*}}}*/ -// CacheGenerator::NewFileDesc - Create a new File<->Desc association /*{{{*/ -// --------------------------------------------------------------------- -/* */ -bool pkgCacheGenerator::NewFileDesc(pkgCache::DescIterator &Desc, - ListParser &List) -{ - if (CurrentFile == 0) - return true; - - // Get a structure - unsigned long DescFile = Map.Allocate(sizeof(pkgCache::DescFile)); - if (DescFile == 0) - return 0; - - pkgCache::DescFileIterator DF(Cache,Cache.DescFileP + DescFile); - DF->File = CurrentFile - Cache.PkgFileP; - - // Link it to the end of the list - map_ptrloc *Last = &Desc->FileList; - for (pkgCache::DescFileIterator D = Desc.FileList(); D.end() == false; D++) - Last = &D->NextFile; - - DF->NextFile = *Last; - *Last = DF.Index(); - - DF->Offset = List.Offset(); - DF->Size = List.Size(); - if (Cache.HeaderP->MaxDescFileSize < DF->Size) - Cache.HeaderP->MaxDescFileSize = DF->Size; - Cache.HeaderP->DescFileCount++; - - return true; -} - /*}}}*/ -// CacheGenerator::NewDescription - Create a new Description /*{{{*/ -// --------------------------------------------------------------------- -/* This puts a description structure in the linked list */ -map_ptrloc pkgCacheGenerator::NewDescription(pkgCache::DescIterator &Desc, - const string &Lang, const MD5SumValue &md5sum, - map_ptrloc Next) -{ - // Get a structure - map_ptrloc Description = Map.Allocate(sizeof(pkgCache::Description)); - if (Description == 0) - return 0; - - // Fill it in - Desc = pkgCache::DescIterator(Cache,Cache.DescP + Description); - Desc->NextDesc = Next; - Desc->ID = Cache.HeaderP->DescriptionCount++; - Desc->language_code = Map.WriteString(Lang); - Desc->md5sum = Map.WriteString(md5sum.Value()); - - return Description; -} - /*}}}*/ // ListParser::NewDepends - Create a dependency element /*{{{*/ // --------------------------------------------------------------------- /* This creates a dependency element in the tree. It is linked to the version and to the package that it is pointing to. */ bool pkgCacheGenerator::ListParser::NewDepends(pkgCache::VerIterator Ver, - string PackageName, - string Version, + const string &PackageName, + const string &Version, unsigned int Op, unsigned int Type) { @@ -524,8 +419,8 @@ bool pkgCacheGenerator::ListParser::NewDepends(pkgCache::VerIterator Ver, // --------------------------------------------------------------------- /* */ bool pkgCacheGenerator::ListParser::NewProvides(pkgCache::VerIterator Ver, - string PackageName, - string Version) + const string &PackageName, + const string &Version) { pkgCache &Cache = Owner->Cache; @@ -564,7 +459,7 @@ bool pkgCacheGenerator::ListParser::NewProvides(pkgCache::VerIterator Ver, // --------------------------------------------------------------------- /* This is used to select which file is to be associated with all newly added versions. The caller is responsible for setting the IMS fields. */ -bool pkgCacheGenerator::SelectFile(string File,string Site, +bool pkgCacheGenerator::SelectFile(const string &File,const string &Site, const pkgIndexFile &Index, unsigned long Flags) { @@ -648,7 +543,7 @@ unsigned long pkgCacheGenerator::WriteUniqString(const char *S, /* This just verifies that each file in the list of index files exists, has matching attributes with the cache and the cache does not have any extra files. */ -static bool CheckValidity(string CacheFile, FileIterator Start, +static bool CheckValidity(const string &CacheFile, FileIterator Start, FileIterator End,MMap **OutMap = 0) { // No file, certainly invalid @@ -685,7 +580,7 @@ static bool CheckValidity(string CacheFile, FileIterator Start, pkgCache::PkgFileIterator File = (*Start)->FindInCache(Cache); if (File.end() == true) return false; - + Visited[File->ID] = true; } |