X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/ac00cca724734db58ad14ab8c77d445d0df3bc9f..15e1ed52a741ff82deb0a4cd6150cf10e23b7368:/apt-pkg/srcrecords.cc diff --git a/apt-pkg/srcrecords.cc b/apt-pkg/srcrecords.cc index f4d034b85..a76604a8d 100644 --- a/apt-pkg/srcrecords.cc +++ b/apt-pkg/srcrecords.cc @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -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::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; @@ -141,11 +139,45 @@ const char *pkgSrcRecords::Parser::BuildDepType(unsigned char const &Type) const char *fields[] = {"Build-Depends", "Build-Depends-Indep", "Build-Conflicts", - "Build-Conflicts-Indep"}; + "Build-Conflicts-Indep", + "Build-Depends-Arch", + "Build-Conflicts-Arch"}; if (unlikely(Type >= sizeof(fields)/sizeof(fields[0]))) return ""; return fields[Type]; } /*}}}*/ +bool pkgSrcRecords::Parser::Files2(std::vector &F2)/*{{{*/ +{ + debSrcRecordParser * const deb = dynamic_cast(this); + if (deb != NULL) + return deb->Files2(F2); + + std::vector F; + if (Files(F) == false) + return false; + for (std::vector::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() {}