- use iterator in repomd handler offset handling to make it behave as the
authorpmatilai <pmatilai>
Mon, 8 May 2006 19:01:19 +0000 (19:01 +0000)
committerpmatilai <pmatilai>
Mon, 8 May 2006 19:01:19 +0000 (19:01 +0000)
  handler interface requires thus fixing an off-by-one bug causing the first
  package of repository to go ignored

apt-pkg/rpm/rpmhandler.cc
apt-pkg/rpm/rpmhandler.h

index 5e8cd98..58b9b43 100644 (file)
@@ -908,9 +908,7 @@ RPMRepomdHandler::RPMRepomdHandler(string File, bool useFilelist)
       Pkgs.push_back(n);
       pkgcount++;
    }
-   if (iSize > 0) {
-      NodeP = Pkgs[0];
-   }
+   PkgIter = Pkgs.begin();
 
    // There seem to be broken version(s) of createrepo around which report
    // to have one more package than is in the repository. Warn and work around.
@@ -932,14 +930,16 @@ error:
 
 bool RPMRepomdHandler::Skip()
 {
-   if (iOffset + 1 >= iSize) {
+   if (PkgIter == Pkgs.end()) {
       return false;
    }
-   iOffset++;
-   NodeP = Pkgs[iOffset];
+   NodeP = *PkgIter;
+   iOffset = PkgIter - Pkgs.begin();
    if (WithFilelist) {
       xmlTextReaderNext(Filelist);
    }
+
+   PkgIter++;
    return true;
 }
 
@@ -950,6 +950,9 @@ bool RPMRepomdHandler::Jump(unsigned int Offset)
    }
    iOffset = Offset;
    NodeP = Pkgs[Offset];
+   // This isn't strictly necessary as Skip() and Jump() aren't mixed
+   // in practise but doesn't hurt either...
+   PkgIter = Pkgs.begin() + Offset + 1;
    return true;
 
 }
@@ -957,9 +960,7 @@ bool RPMRepomdHandler::Jump(unsigned int Offset)
 void RPMRepomdHandler::Rewind()
 {
    iOffset = 0;
-   if (iSize > 0) {
-      NodeP = Pkgs[0];
-   }
+   PkgIter = Pkgs.begin();
 }
 
 xmlNode *RPMRepomdHandler::FindNode(const string Name)
index 51ae3ca..5c66849 100644 (file)
@@ -228,6 +228,7 @@ class RPMRepomdHandler : public RPMHandler
    xmlNode *NodeP;
 
    vector<xmlNode *> Pkgs;
+   vector<xmlNode *>::iterator PkgIter;
 
    bool WithFilelist;
    string PrimaryFile, FilelistFile;