]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/cacheiterators.h
Fix double free (closes: #711045)
[apt.git] / apt-pkg / cacheiterators.h
index b97a1a5894888b530fab5ed3165023d852bad4e3..179a0e963a0eef27ed006cc31e25b09d8fe81c5f 100644 (file)
@@ -32,6 +32,7 @@
 #include<iterator>
 
 #include<string.h>
+
 // abstract Iterator template                                          /*{{{*/
 /* This template provides the very basic iterator methods we
    need to have for doing some walk-over-the-cache magic */
@@ -111,7 +112,7 @@ class pkgCache::GrpIterator: public Iterator<Group, GrpIterator> {
 
        inline const char *Name() const {return S->Name == 0?0:Owner->StrP + S->Name;};
        inline PkgIterator PackageList() const;
-       PkgIterator FindPkg(string Arch = "any") const;
+       PkgIterator FindPkg(std::string Arch = "any") const;
        /** \brief find the package with the "best" architecture
 
            The best architecture is either the "native" or the first
@@ -206,7 +207,7 @@ class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
        inline const char *VerStr() const {return S->VerStr == 0?0:Owner->StrP + S->VerStr;};
        inline const char *Section() const {return S->Section == 0?0:Owner->StrP + S->Section;};
        inline const char *Arch() const {
-               if (S->MultiArch == pkgCache::Version::All)
+               if ((S->MultiArch & pkgCache::Version::All) == pkgCache::Version::All)
                        return "all";
                return S->ParentPkg == 0?0:Owner->StrP + ParentPkg()->Arch;
        };
@@ -219,7 +220,7 @@ class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
        inline VerFileIterator FileList() const;
        bool Downloadable() const;
        inline const char *PriorityType() const {return Owner->Priority(S->Priority);};
-       string RelStr() const;
+       std::string RelStr() const;
 
        bool Automatic() const;
        VerFileIterator NewestFile() const;
@@ -282,6 +283,11 @@ class pkgCache::DepIterator : public Iterator<Dependency, DepIterator> {
        inline bool Reverse() const {return Type == DepRev;};
        bool IsCritical() const;
        bool IsNegative() const;
+       bool IsIgnorable(PrvIterator const &Prv) const;
+       bool IsIgnorable(PkgIterator const &Pkg) const;
+       bool IsMultiArchImplicit() const;
+       bool IsSatisfied(VerIterator const &Ver) const;
+       bool IsSatisfied(PrvIterator const &Prv) const;
        void GlobOr(DepIterator &Start,DepIterator &End);
        Version **AllTargets() const;
        bool SmartTargetPkg(PkgIterator &Result) const;
@@ -326,8 +332,9 @@ class pkgCache::PrvIterator : public Iterator<Provides, PrvIterator> {
        inline VerIterator OwnerVer() const {return VerIterator(*Owner,Owner->VerP + S->Version);};
        inline PkgIterator OwnerPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->Version].ParentPkg);};
 
-       inline PrvIterator() : Iterator<Provides, PrvIterator>(), Type(PrvVer) {};
+       bool IsMultiArchImplicit() const;
 
+       inline PrvIterator() : Iterator<Provides, PrvIterator>(), Type(PrvVer) {};
        inline PrvIterator(pkgCache &Owner, Provides *Trg, Version*) :
                Iterator<Provides, PrvIterator>(Owner, Trg), Type(PrvVer) {
                if (S == 0)
@@ -365,7 +372,7 @@ class pkgCache::PkgFileIterator : public Iterator<PackageFile, PkgFileIterator>
        inline const char *IndexType() const {return S->IndexType == 0?0:Owner->StrP + S->IndexType;};
 
        bool IsOk();
-       string RelStr();
+       std::string RelStr();
 
        // Constructors
        inline PkgFileIterator() : Iterator<PackageFile, PkgFileIterator>() {};