diff options
| -rw-r--r-- | apt-pkg/deb/deblistparser.cc | 61 |
1 files changed, 31 insertions, 30 deletions
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index fa36edf89..3f37d2134 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -33,7 +33,8 @@ /*}}}*/ using std::string; -using APT::StringView; +using std::string_view; +using namespace std::literals; static const debListParser::WordList PrioList[] = { {"required",pkgCache::State::Required}, @@ -68,7 +69,7 @@ debListParser::debListParser(FileFd *File) : // --------------------------------------------------------------------- /* This is to return the name of the package this section describes */ string debListParser::Package() { - string Result = Section.Find(pkgTagSection::Key::Package).to_string(); + string Result{Section.Find(pkgTagSection::Key::Package)}; // Normalize mixed case package names to lower case, like dpkg does // See Bug#807012 for details. @@ -139,8 +140,8 @@ unsigned char debListParser::ParseMultiArch(bool const showErrors) /*{{{*/ else { if (showErrors == true) - _error->Warning("Unknown Multi-Arch type '%s' for package '%s'", - MultiArch.to_string().c_str(), Package().c_str()); + _error->Warning("Unknown Multi-Arch type '%.*s' for package '%s'", + (int)MultiArch.size(), MultiArch.data(), Package().c_str()); MA = pkgCache::Version::No; } @@ -185,7 +186,7 @@ bool debListParser::NewVersion(pkgCache::VerIterator &Ver) const char * const Close = static_cast<const char *>(memchr(Open, ')', Stop - Open)); if (likely(Close != NULL)) { - APT::StringView const version(Open + 1, (Close - Open) - 1); + std::string_view const version(Open + 1, (Close - Open) - 1); if (version != Ver.VerStr()) { map_stringitem_t const idx = StoreString(pkgCacheGenerator::VERSIONNUMBER, version); @@ -197,7 +198,7 @@ bool debListParser::NewVersion(pkgCache::VerIterator &Ver) Stop = Space; } - APT::StringView const pkgname(Start, Stop - Start); + std::string_view const pkgname(Start, Stop - Start); // Oh, our group is the wrong one for the source package. Make a new one. if (pkgname != G.Name()) { @@ -221,7 +222,7 @@ bool debListParser::NewVersion(pkgCache::VerIterator &Ver) // Priority if (Section.Find(pkgTagSection::Key::Priority,Start,Stop) == true) { - if (GrabWord(StringView(Start,Stop-Start),PrioList,Ver->Priority) == false) + if (GrabWord(string_view(Start,Stop-Start),PrioList,Ver->Priority) == false) Ver->Priority = pkgCache::State::Extra; } @@ -268,7 +269,7 @@ std::vector<std::string> debListParser::AvailableDescriptionLanguages() continue; } memcpy(buf + prefixLen, lang.c_str(), lang.size()); - if (Section.Exists(StringView(buf, prefixLen + lang.size())) == true) + if (Section.Exists(string_view(buf, prefixLen + lang.size())) == true) avail.push_back(lang); } return avail; @@ -418,7 +419,7 @@ bool debStatusListParser::ParseStatus(pkgCache::PkgIterator &Pkg, {"deinstall",pkgCache::State::DeInstall}, {"purge",pkgCache::State::Purge}, {"", 0}}; - if (GrabWord(StringView(Start,I-Start),WantList,Pkg->SelectedState) == false) + if (GrabWord(string_view(Start,I-Start),WantList,Pkg->SelectedState) == false) return _error->Error("Malformed 1st word in the Status line"); // Isloate the next word @@ -434,7 +435,7 @@ bool debStatusListParser::ParseStatus(pkgCache::PkgIterator &Pkg, {"hold",pkgCache::State::HoldInst}, {"hold-reinstreq",pkgCache::State::HoldReInstReq}, {"", 0}}; - if (GrabWord(StringView(Start,I-Start),FlagList,Pkg->InstState) == false) + if (GrabWord(string_view(Start,I-Start),FlagList,Pkg->InstState) == false) return _error->Error("Malformed 2nd word in the Status line"); // Isloate the last word @@ -454,7 +455,7 @@ bool debStatusListParser::ParseStatus(pkgCache::PkgIterator &Pkg, {"triggers-pending",pkgCache::State::TriggersPending}, {"installed",pkgCache::State::Installed}, {"", 0}}; - if (GrabWord(StringView(Start,I-Start),StatusList,Pkg->CurrentState) == false) + if (GrabWord(string_view(Start,I-Start),StatusList,Pkg->CurrentState) == false) return _error->Error("Malformed 3rd word in the Status line"); /* A Status line marks the package as indicating the current @@ -552,19 +553,19 @@ const char *debListParser::ParseDepends(const char *Start,const char *Stop, bool const &ParseRestrictionsList, string const &Arch) { - StringView PackageView; - StringView VerView; + string_view PackageView; + string_view VerView; auto res = ParseDepends(Start, Stop, PackageView, VerView, Op, (bool)ParseArchFlags, (bool) StripMultiArch, (bool) ParseRestrictionsList, Arch); - Package = PackageView.to_string(); - Ver = VerView.to_string(); + Package = PackageView; + Ver = VerView; return res; } const char *debListParser::ParseDepends(const char *Start, const char *Stop, - StringView &Package, StringView &Ver, + string_view &Package, string_view &Ver, unsigned int &Op, bool ParseArchFlags, bool StripMultiArch, bool ParseRestrictionsList, string Arch) @@ -588,12 +589,12 @@ const char *debListParser::ParseDepends(const char *Start, const char *Stop, return 0; // Stash the package name - Package = StringView(Start, I - Start); + Package = string_view(Start, I - Start); // We don't want to confuse library users which can't handle MultiArch if (StripMultiArch == true) { size_t const found = Package.rfind(':'); - if (found != StringView::npos && + if (found != string_view::npos && (Package.substr(found) == ":any" || Package.substr(found) == ":native" || Package.substr(found +1) == Arch)) @@ -623,12 +624,12 @@ const char *debListParser::ParseDepends(const char *Start, const char *Stop, const char *End = I; for (; End > Start && isspace_ascii(End[-1]); End--); - Ver = StringView(Start,End-Start); + Ver = string_view(Start,End-Start); I++; } else { - Ver = StringView(); + Ver = string_view(); Op = pkgCache::Dep::NoOp; } @@ -812,8 +813,8 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver, while (1) { - StringView Package; - StringView Version; + string_view Package; + string_view Version; unsigned int Op; Start = ParseDepends(Start, Stop, Package, Version, Op, false, false, false, myArch); @@ -845,7 +846,7 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver, // … but this is probably the best thing to do anyway if (Package.substr(found + 1) == "native") { - std::string const Pkg = Package.substr(0, found).to_string() + ':' + Ver.Cache()->NativeArch(); + std::string const Pkg = (std::string{Package.substr(0, found)} += ':') += Ver.Cache()->NativeArch(); if (NewDepends(Ver, Pkg, "any", Version, Op | pkgCache::Dep::ArchSpecific, Type) == false) return false; } @@ -886,8 +887,8 @@ bool debListParser::ParseProvides(pkgCache::VerIterator &Ver) const char *Stop; if (Section.Find(pkgTagSection::Key::Provides,Start,Stop) && Start != Stop) { - StringView Package; - StringView Version; + string_view Package; + string_view Version; unsigned int Op; do @@ -897,9 +898,9 @@ bool debListParser::ParseProvides(pkgCache::VerIterator &Ver) if (Start == 0) return _error->Error("Problem parsing Provides line of %s:%s=%s", Ver.ParentPkg().Name(), Ver.Arch(), Ver.VerStr()); if (unlikely(Op != pkgCache::Dep::NoOp && Op != pkgCache::Dep::Equals)) { - _error->Warning("Ignoring non-equal Provides for package %s in %s:%s=%s", Package.to_string().c_str(), Ver.ParentPkg().Name(), Ver.Arch(), Ver.VerStr()); + _error->Warning("Ignoring non-equal Provides for package %.*s in %s:%s=%s", (int)Package.size(), Package.data(), Ver.ParentPkg().Name(), Ver.Arch(), Ver.VerStr()); } else if (archfound != string::npos) { - StringView spzArch = Package.substr(archfound + 1); + string_view spzArch = Package.substr(archfound + 1); if (spzArch != "any") { if (NewProvides(Ver, Package.substr(0, archfound), spzArch, Version, pkgCache::Flag::MultiArchImplicit | pkgCache::Flag::ArchSpecific) == false) @@ -918,7 +919,7 @@ bool debListParser::ParseProvides(pkgCache::VerIterator &Ver) } else { if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed && not barbarianArch) { - if (NewProvides(Ver, Package.to_string().append(":any"), "any", Version, pkgCache::Flag::MultiArchImplicit) == false) + if (NewProvides(Ver, std::string{Package}.append(":any"), "any", Version, pkgCache::Flag::MultiArchImplicit) == false) return false; } if (NewProvides(Ver, Package, Arch, Version, 0) == false) @@ -926,7 +927,7 @@ bool debListParser::ParseProvides(pkgCache::VerIterator &Ver) } if (archfound == std::string::npos) { - string spzName = Package.to_string(); + string spzName{Package}; spzName.push_back(':'); spzName.append(Ver.ParentPkg().Arch()); pkgCache::PkgIterator const spzPkg = Ver.Cache()->FindPkg(spzName, "any"); @@ -969,7 +970,7 @@ bool debListParser::ParseProvides(pkgCache::VerIterator &Ver) // ListParser::GrabWord - Matches a word and returns /*{{{*/ // --------------------------------------------------------------------- /* Looks for a word in a list of words - for ParseStatus */ -bool debListParser::GrabWord(StringView Word, WordList const *List, unsigned char &Out) +bool debListParser::GrabWord(string_view Word, WordList const *List, unsigned char &Out) { for (unsigned int C = 0; List[C].Str.empty() == false; C++) { |
