]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/srcrecords.cc
tests: don't do boundless string compares with data()
[apt.git] / apt-pkg / srcrecords.cc
index f4d034b85c165f86fb2f8b3e61bf6c809c4b7424..53d7e604d35e9ea4e21c2f88576266dae3a83acf 100644 (file)
@@ -14,6 +14,7 @@
 #include<config.h>
 
 #include <apt-pkg/srcrecords.h>
+#include <apt-pkg/debsrcrecords.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/sourcelist.h>
 #include <apt-pkg/metaindex.h>
@@ -30,7 +31,7 @@
 // SrcRecords::pkgSrcRecords - Constructor                             /*{{{*/
 // ---------------------------------------------------------------------
 /* Open all the source index files */
-pkgSrcRecords::pkgSrcRecords(pkgSourceList &List) : d(NULL), Files(0), Current(0)
+pkgSrcRecords::pkgSrcRecords(pkgSourceList &List) : d(NULL), Files(0)
 {
    for (pkgSourceList::const_iterator I = List.begin(); I != List.end(); ++I)
    {
@@ -38,11 +39,14 @@ pkgSrcRecords::pkgSrcRecords(pkgSourceList &List) : d(NULL), Files(0), Current(0
       for (std::vector<pkgIndexFile *>::const_iterator J = Indexes->begin();
           J != Indexes->end(); ++J)
       {
-         Parser* P = (*J)->CreateSrcParser();
-        if (_error->PendingError() == true)
-            return;
-         if (P != 0)
-            Files.push_back(P);
+        _error->PushToStack();
+        Parser* P = (*J)->CreateSrcParser();
+        bool const newError = _error->PendingError();
+        _error->MergeWithStack();
+        if (newError)
+           return;
+        if (P != 0)
+           Files.push_back(P);
       }
    }
    
@@ -81,10 +85,10 @@ bool pkgSrcRecords::Restart()
    return true;
 }
                                                                        /*}}}*/
-// SrcRecords::Next - Step to the next Source Record                   /*{{{*/
+// SrcRecords::Step - Step to the next Source Record                   /*{{{*/
 // ---------------------------------------------------------------------
 /* Step to the next source package record */
-const pkgSrcRecords::Parser* pkgSrcRecords::Next()
+const pkgSrcRecords::Parser* pkgSrcRecords::Step()
 {
    if (Current == Files.end())
       return 0;
@@ -92,8 +96,6 @@ const pkgSrcRecords::Parser* pkgSrcRecords::Next()
    // Step to the next record, possibly switching files
    while ((*Current)->Step() == false)
    {
-      if (_error->PendingError() == true)
-         return 0;
       ++Current;
       if (Current == Files.end())
          return 0;
@@ -111,13 +113,9 @@ pkgSrcRecords::Parser *pkgSrcRecords::Find(const char *Package,bool const &SrcOn
 {
    while (true)
    {
-      if(Next() == 0)
+      if(Step() == 0)
          return 0;
 
-      // IO error somehow
-      if (_error->PendingError() == true)
-        return 0;
-
       // Source name hit
       if ((*Current)->Package() == Package)
         return *Current;
@@ -147,5 +145,37 @@ const char *pkgSrcRecords::Parser::BuildDepType(unsigned char const &Type)
    return fields[Type];
 }
                                                                        /*}}}*/
+bool pkgSrcRecords::Parser::Files2(std::vector<pkgSrcRecords::File2> &F2)/*{{{*/
+{
+   debSrcRecordParser * const deb = dynamic_cast<debSrcRecordParser*>(this);
+   if (deb != NULL)
+      return deb->Files2(F2);
+
+   std::vector<pkgSrcRecords::File> F;
+   if (Files(F) == false)
+      return false;
+   for (std::vector<pkgSrcRecords::File>::const_iterator f = F.begin(); f != F.end(); ++f)
+   {
+      pkgSrcRecords::File2 f2;
+#if __GNUC__ >= 4
+       #pragma GCC diagnostic push
+       #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+      f2.MD5Hash = f->MD5Hash;
+      f2.Size = f->Size;
+      f2.Hashes.push_back(HashString("MD5Sum", f->MD5Hash));
+      f2.FileSize = f->Size;
+#if __GNUC__ >= 4
+       #pragma GCC diagnostic pop
+#endif
+      f2.Path = f->Path;
+      f2.Type = f->Type;
+      F2.push_back(f2);
+   }
+   return true;
+}
+                                                                       /*}}}*/
 
 
+pkgSrcRecords::Parser::Parser(const pkgIndexFile *Index) : d(NULL), iIndex(Index) {}
+pkgSrcRecords::Parser::~Parser() {}