X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/318dd26ac9bdbb30bcd22201393dc73d8566b3cf..19fb04e82cdc90d429777fcc4c7a2b33e34d20e5:/apt-pkg/deb/debrecords.cc diff --git a/apt-pkg/deb/debrecords.cc b/apt-pkg/deb/debrecords.cc index 3d3d7de0a..d2c04d8b2 100644 --- a/apt-pkg/deb/debrecords.cc +++ b/apt-pkg/deb/debrecords.cc @@ -8,18 +8,32 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ +#include + #include #include -#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include #include /*}}}*/ +using std::string; + // RecordParser::debRecordParser - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ debRecordParser::debRecordParser(string FileName,pkgCache &Cache) : - File(FileName,FileFd::ReadOnly), - Tags(&File,Cache.Head().MaxVerFileSize + 200) + File(FileName,FileFd::ReadOnly, FileFd::Extension), + Tags(&File, std::max(Cache.Head().MaxVerFileSize, + Cache.Head().MaxDescFileSize) + 200) { } /*}}}*/ @@ -51,45 +65,53 @@ string debRecordParser::Name() return Section.FindS("Package"); } /*}}}*/ -// RecordParser::MD5Hash - Return the archive hash /*{{{*/ +// RecordParser::Homepage - Return the package homepage /*{{{*/ // --------------------------------------------------------------------- /* */ -string debRecordParser::MD5Hash() +string debRecordParser::Homepage() { - return Section.FindS("MD5Sum"); + return Section.FindS("Homepage"); } /*}}}*/ -// RecordParser::SHA1Hash - Return the archive hash /*{{{*/ -// --------------------------------------------------------------------- -/* */ -string debRecordParser::SHA1Hash() +// RecordParser::Hashes - return the available archive hashes /*{{{*/ +HashStringList debRecordParser::Hashes() const { - return Section.FindS("SHA1"); + HashStringList hashes; + for (char const * const * type = HashString::SupportedHashes(); *type != NULL; ++type) + { + std::string const hash = Section.FindS(*type); + if (hash.empty() == false) + hashes.push_back(HashString(*type, hash)); + } + return hashes; } /*}}}*/ -// RecordParser::SHA1Hash - Return the archive hash /*{{{*/ +// RecordParser::Maintainer - Return the maintainer email /*{{{*/ // --------------------------------------------------------------------- /* */ -string debRecordParser::SHA256Hash() +string debRecordParser::Maintainer() { - return Section.FindS("SHA256"); + return Section.FindS("Maintainer"); } /*}}}*/ -// RecordParser::Maintainer - Return the maintainer email /*{{{*/ +// RecordParser::RecordField - Return the value of an arbitrary field /*{{*/ // --------------------------------------------------------------------- /* */ -string debRecordParser::Maintainer() +string debRecordParser::RecordField(const char *fieldName) { - return Section.FindS("Maintainer"); + return Section.FindS(fieldName); } - /*}}}*/ + + /*}}}*/ // RecordParser::ShortDesc - Return a 1 line description /*{{{*/ // --------------------------------------------------------------------- /* */ -string debRecordParser::ShortDesc() +string debRecordParser::ShortDesc(std::string const &lang) { - string Res = LongDesc(); - string::size_type Pos = Res.find('\n'); + string const Res = LongDesc(lang); + if (Res.empty() == true) + return ""; + string::size_type const Pos = Res.find('\n'); if (Pos == string::npos) return Res; return string(Res,0,Pos); @@ -98,21 +120,44 @@ string debRecordParser::ShortDesc() // RecordParser::LongDesc - Return a longer description /*{{{*/ // --------------------------------------------------------------------- /* */ -string debRecordParser::LongDesc() +string debRecordParser::LongDesc(std::string const &lang) { - string orig, dest; - char *codeset = nl_langinfo(CODESET); + string orig; + if (lang.empty() == true) + { + std::vector const lang = APT::Configuration::getLanguages(); + for (std::vector::const_iterator l = lang.begin(); + l != lang.end(); ++l) + { + std::string const tagname = "Description-" + *l; + orig = Section.FindS(tagname.c_str()); + if (orig.empty() == false) + break; + else if (*l == "en") + { + orig = Section.FindS("Description"); + if (orig.empty() == false) + break; + } + } + if (orig.empty() == true) + orig = Section.FindS("Description"); + } + else + { + std::string const tagname = "Description-" + lang; + orig = Section.FindS(tagname.c_str()); + if (orig.empty() == true && lang == "en") + orig = Section.FindS("Description"); + } - if (!Section.FindS("Description").empty()) - orig = Section.FindS("Description").c_str(); - else - orig = Section.FindS(("Description-" + pkgIndexFile::LanguageCode()).c_str()).c_str(); + char const * const codeset = nl_langinfo(CODESET); + if (strcmp(codeset,"UTF-8") != 0) { + string dest; + UTF8ToCodeset(codeset, orig, &dest); + return dest; + } - if (strcmp(codeset,"UTF-8") != 0) { - UTF8ToCodeset(codeset, orig, &dest); - orig = dest; - } - return orig; } /*}}}*/