summaryrefslogtreecommitdiff
path: root/apt-pkg/deb
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2017-09-26 22:23:05 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2017-09-26 22:23:05 +0200
commitd006da196dd4289ab3667817d218e6c6ac7bdb6b (patch)
tree1fb38ee07298c97aa0656f96655bcc25c3d06606 /apt-pkg/deb
parent7ea3c67f96e3bc82f86afe72d6c61308c92de515 (diff)
use pkgTagSection::Key in srcRecords parser
Using hardcoded array-indexes in the build-dependency parsing is efficient, but less discoverable and easier to break. We can avoid this by making it even more efficient (not that it would be noticeable) allowing us to do explicitly named comparisons instead. Gbp-Dch: Ignore
Diffstat (limited to 'apt-pkg/deb')
-rw-r--r--apt-pkg/deb/debsrcrecords.cc66
1 files changed, 34 insertions, 32 deletions
diff --git a/apt-pkg/deb/debsrcrecords.cc b/apt-pkg/deb/debsrcrecords.cc
index cd8840af2..1cabfe281 100644
--- a/apt-pkg/deb/debsrcrecords.cc
+++ b/apt-pkg/deb/debsrcrecords.cc
@@ -19,6 +19,7 @@
#include <apt-pkg/hashes.h>
#include <apt-pkg/srcrecords.h>
#include <apt-pkg/strutl.h>
+#include <apt-pkg/tagfile-keys.h>
#include <apt-pkg/tagfile.h>
#include <algorithm>
@@ -43,11 +44,10 @@ debSrcRecordParser::debSrcRecordParser(std::string const &File,pkgIndexFile cons
}
std::string debSrcRecordParser::Package() const /*{{{*/
{
- auto const name = Sect.FindS("Package");
- if (iIndex == nullptr)
- return name.empty() ? Sect.FindS("Source") : name;
- else
- return name;
+ auto const name = Sect.Find(pkgTagSection::Key::Package);
+ if (iIndex != nullptr || name.empty() == false)
+ return name.to_string();
+ return Sect.Find(pkgTagSection::Key::Source).to_string();
}
/*}}}*/
// SrcRecordParser::Binaries - Return the binaries field /*{{{*/
@@ -60,7 +60,7 @@ std::string debSrcRecordParser::Package() const /*{{{*/
const char **debSrcRecordParser::Binaries()
{
const char *Start, *End;
- if (Sect.Find("Binary", Start, End) == false)
+ if (Sect.Find(pkgTagSection::Key::Binary, Start, End) == false)
return NULL;
for (; isspace_ascii(*Start) != 0; ++Start);
if (Start >= End)
@@ -100,23 +100,22 @@ const char **debSrcRecordParser::Binaries()
bool debSrcRecordParser::BuildDepends(std::vector<pkgSrcRecords::Parser::BuildDepRec> &BuildDeps,
bool const &ArchOnly, bool const &StripMultiArch)
{
- unsigned int I;
- const char *Start, *Stop;
- BuildDepRec rec;
- const char *fields[] = {"Build-Depends",
- "Build-Depends-Indep",
- "Build-Conflicts",
- "Build-Conflicts-Indep",
- "Build-Depends-Arch",
- "Build-Conflicts-Arch"};
-
BuildDeps.clear();
- for (I = 0; I < 6; I++)
+ pkgTagSection::Key const fields[] = {
+ pkgTagSection::Key::Build_Depends,
+ pkgTagSection::Key::Build_Depends_Indep,
+ pkgTagSection::Key::Build_Conflicts,
+ pkgTagSection::Key::Build_Conflicts_Indep,
+ pkgTagSection::Key::Build_Depends_Arch,
+ pkgTagSection::Key::Build_Conflicts_Arch,
+ };
+ for (unsigned short I = 0; I < sizeof(fields) / sizeof(fields[0]); ++I)
{
- if (ArchOnly && (I == 1 || I == 3))
- continue;
+ if (ArchOnly && (fields[I] == pkgTagSection::Key::Build_Depends_Indep || fields[I] == pkgTagSection::Key::Build_Conflicts_Indep))
+ continue;
+ const char *Start, *Stop;
if (Sect.Find(fields[I], Start, Stop) == false)
continue;
@@ -125,31 +124,34 @@ bool debSrcRecordParser::BuildDepends(std::vector<pkgSrcRecords::Parser::BuildDe
while (1)
{
- Start = debListParser::ParseDepends(Start, Stop,
- rec.Package,rec.Version,rec.Op,true,StripMultiArch,true);
-
- if (Start == 0)
- return _error->Error("Problem parsing dependency: %s", fields[I]);
+ BuildDepRec rec;
+ Start = debListParser::ParseDepends(Start, Stop,
+ rec.Package, rec.Version, rec.Op, true, StripMultiArch, true);
+
+ if (Start == 0)
+ return _error->Error("Problem parsing dependency: %s", BuildDepType(I));
rec.Type = I;
// We parsed a package that was ignored (wrong architecture restriction
// or something).
- if (rec.Package == "") {
+ if (rec.Package.empty())
+ {
// If we are in an OR group, we need to set the "Or" flag of the
// previous entry to our value.
- if (BuildDeps.size() > 0 && (BuildDeps[BuildDeps.size() - 1].Op & pkgCache::Dep::Or) == pkgCache::Dep::Or) {
+ if (BuildDeps.empty() == false && (BuildDeps[BuildDeps.size() - 1].Op & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+ {
BuildDeps[BuildDeps.size() - 1].Op &= ~pkgCache::Dep::Or;
BuildDeps[BuildDeps.size() - 1].Op |= (rec.Op & pkgCache::Dep::Or);
}
} else {
- BuildDeps.push_back(rec);
+ BuildDeps.emplace_back(std::move(rec));
}
-
- if (Start == Stop)
+
+ if (Start == Stop)
break;
- }
+ }
}
-
+
return true;
}
/*}}}*/
@@ -185,7 +187,7 @@ bool debSrcRecordParser::Files2(std::vector<pkgSrcRecords::File2> &List)
List.clear();
// Stash the / terminated directory prefix
- string Base = Sect.FindS("Directory");
+ std::string Base = Sect.Find(pkgTagSection::Key::Directory).to_string();
if (Base.empty() == false && Base[Base.length()-1] != '/')
Base += '/';