]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/pkgcachegen.cc
Comment touch ups
[apt.git] / apt-pkg / pkgcachegen.cc
index 634179bdd4f20bd9ac0c56052fd395516bceca4c..f5bf5c5891db8a9e6de0ab5ded53476aa3f93eed 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: pkgcachegen.cc,v 1.4 1998/07/05 05:33:56 jgg Exp $
+// $Id: pkgcachegen.cc,v 1.11 1998/07/19 04:22:02 jgg Exp $
 /* ######################################################################
    
    Package Cache Generator - Generator for the cache structure.
    ##################################################################### */
                                                                        /*}}}*/
 // Include Files                                                       /*{{{*/
-#include <pkglib/pkgcachegen.h>
-#include <pkglib/error.h>
-#include <pkglib/version.h>
+#ifdef __GNUG__
+#pragma implementation "apt-pkg/pkgcachegen.h"
+#endif
+
+#include <apt-pkg/pkgcachegen.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/version.h>
+#include <strutl.h>
 
 #include <sys/stat.h>
 #include <unistd.h>
@@ -62,13 +67,10 @@ bool pkgCacheGenerator::MergeList(ListParser &List)
    while (List.Step() == true)
    {
       // Get a pointer to the package structure
-      string Package = List.Package();
-      pkgCache::PkgIterator Pkg = Cache.FindPkg(Package);
-      if (Pkg.end() == true)
-      {
-        if (NewPackage(Pkg,Package) == false)
-           return false;
-      }
+      string PackageName = List.Package();
+      pkgCache::PkgIterator Pkg;
+      if (NewPackage(Pkg,PackageName) == false)
+        return false;
       
       /* Get a pointer to the version structure. We know the list is sorted
          so we use that fact in the search. Insertion of new versions is
@@ -83,7 +85,7 @@ bool pkgCacheGenerator::MergeList(ListParser &List)
 
       pkgCache::VerIterator Ver = Pkg.VersionList();
       unsigned long *Last = &Pkg->VersionList;
-      int Res;
+      int Res = 1;
       for (; Ver.end() == false; Last = &Ver->NextVer, Ver++)
       {
         Res = pkgVersionCompare(Version.begin(),Version.end(),Ver.VerStr(),
@@ -126,6 +128,10 @@ bool pkgCacheGenerator::MergeList(ListParser &List)
 /* This creates a new package structure and adds it to the hash table */
 bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg,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)
@@ -164,7 +170,8 @@ bool pkgCacheGenerator::NewFileVer(pkgCache::VerIterator &Ver,
    Ver->FileList = VF.Index();
    VF->Offset = List.Offset();
    VF->Size = List.Size();
-      
+   if (Cache.HeaderP->MaxVerFileSize < VF->Size)
+      Cache.HeaderP->MaxVerFileSize = VF->Size;
    return true;
 }
                                                                        /*}}}*/
@@ -196,7 +203,8 @@ unsigned long pkgCacheGenerator::NewVersion(pkgCache::VerIterator &Ver,
 /* 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 Package,string Version,
+                                              string PackageName,
+                                              string Version,
                                               unsigned int Op,
                                               unsigned int Type)
 {
@@ -215,10 +223,9 @@ bool pkgCacheGenerator::ListParser::NewDepends(pkgCache::VerIterator Ver,
    Dep->ID = Cache.HeaderP->DependsCount++;
    
    // Locate the target package
-   pkgCache::PkgIterator Pkg = Cache.FindPkg(Package);
-   if (Pkg.end() == true)
-      if (Owner->NewPackage(Pkg,Package) == false)
-        return false;
+   pkgCache::PkgIterator Pkg;
+   if (Owner->NewPackage(Pkg,PackageName) == false)
+      return false;
    
    // Probe the reverse dependency list for a version string that matches
    if (Version.empty() == false)
@@ -250,9 +257,14 @@ bool pkgCacheGenerator::ListParser::NewDepends(pkgCache::VerIterator Ver,
 // ---------------------------------------------------------------------
 /* */
 bool pkgCacheGenerator::ListParser::NewProvides(pkgCache::VerIterator Ver,
-                                              string Package,string Version)
+                                               string PackageName,
+                                               string Version)
 {
    pkgCache &Cache = Owner->Cache;
+
+   // We do not add self referencing provides
+   if (Ver.ParentPkg().Name() == PackageName)
+      return true;
    
    // Get a structure
    unsigned long Provides = Owner->Map.Allocate(sizeof(pkgCache::Provides));
@@ -268,10 +280,9 @@ bool pkgCacheGenerator::ListParser::NewProvides(pkgCache::VerIterator Ver,
       return false;
    
    // Locate the target package
-   pkgCache::PkgIterator Pkg = Cache.FindPkg(Package);
-   if (Pkg.end() == true)
-      if (Owner->NewPackage(Pkg,Package) == false)
-        return false;
+   pkgCache::PkgIterator Pkg;
+   if (Owner->NewPackage(Pkg,PackageName) == false)
+      return false;
    
    // Link it to the package
    Prv->ParentPkg = Pkg.Index();
@@ -303,9 +314,11 @@ bool pkgCacheGenerator::SelectFile(string File,unsigned long Flags)
    CurrentFile->NextFile = Cache.HeaderP->FileList;
    CurrentFile->Flags = Flags;
    PkgFileName = File;
-
+   Cache.HeaderP->FileList = CurrentFile - Cache.PkgFileP;
+   
    if (CurrentFile->FileName == 0)
       return false;
+   return true;
 }
                                                                        /*}}}*/
 // CacheGenerator::WriteUniqueString - Insert a unique string          /*{{{*/
@@ -322,9 +335,7 @@ unsigned long pkgCacheGenerator::WriteUniqString(const char *S,
    for (; I != Cache.StringItemP; Last = &I->NextItem, 
         I = Cache.StringItemP + I->NextItem)
    {
-      Res = strncmp(Cache.StrP + I->String,S,Size);
-      if (Res == 0 && *(Cache.StrP + I->String + Size) != 0)
-        Res = 1;
+      Res = stringcmp(S,S+Size,Cache.StrP + I->String);
       if (Res >= 0)
         break;
    }