]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/indexfile.cc
support Signed-By in Release files as a sort of HPKP
[apt.git] / apt-pkg / indexfile.cc
index f57b442a3205f2a5fc017901225a6fa0f6f2983a..a777c38ac15e902d2c1e7f7834d0370f8dcfe1d2 100644 (file)
 #include <apt-pkg/srcrecords.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/progress.h>
+#include <apt-pkg/deblistparser.h>
 #include <apt-pkg/macros.h>
 
-#include <apt-pkg/deblistparser.h>
+#include <apt-pkg/debindexfile.h>
 
 #include <sys/stat.h>
 
@@ -66,8 +67,11 @@ pkgIndexFile::pkgIndexFile(bool const Trusted) :                     /*{{{*/
 }
                                                                        /*}}}*/
 // IndexFile::ArchiveInfo - Stub                                       /*{{{*/
-std::string pkgIndexFile::ArchiveInfo(pkgCache::VerIterator const &/*Ver*/) const
+std::string pkgIndexFile::ArchiveInfo(pkgCache::VerIterator const &Ver) const
 {
+   debDebPkgFileIndex const * const debfile = dynamic_cast<debDebPkgFileIndex const*>(this);
+   if (debfile != nullptr)
+      return debfile->ArchiveInfo_impl(Ver);
    return std::string();
 }
                                                                        /*}}}*/
@@ -85,19 +89,12 @@ std::string pkgIndexFile::SourceInfo(pkgSrcRecords::Parser const &/*Record*/,
 }
                                                                        /*}}}*/
 // IndexFile::TranslationsAvailable - Check if will use Translation    /*{{{*/
-// ---------------------------------------------------------------------
-/* */
 bool pkgIndexFile::TranslationsAvailable() {
        return (APT::Configuration::getLanguages().empty() != true);
 }
                                                                        /*}}}*/
 // IndexFile::CheckLanguageCode - Check the Language Code              /*{{{*/
-// ---------------------------------------------------------------------
-/* No intern need for this method anymore as the check for correctness
-   is already done in getLanguages(). Note also that this check is
-   rather bad (doesn't take three character like ast into account).
-   TODO: Remove method with next API break */
-APT_DEPRECATED bool pkgIndexFile::CheckLanguageCode(const char * const Lang)
+bool pkgIndexFile::CheckLanguageCode(const char * const Lang)
 {
   if (strlen(Lang) == 2 || (strlen(Lang) == 5 && Lang[2] == '_'))
     return true;
@@ -109,14 +106,12 @@ APT_DEPRECATED bool pkgIndexFile::CheckLanguageCode(const char * const Lang)
 }
                                                                        /*}}}*/
 // IndexFile::LanguageCode - Return the Language Code                  /*{{{*/
-// ---------------------------------------------------------------------
-/* As we have now possibly more than one LanguageCode this method is
-   supersided by a) private classmembers or b) getLanguages().
-   TODO: Remove method with next API break */
-APT_DEPRECATED std::string pkgIndexFile::LanguageCode() {
+std::string pkgIndexFile::LanguageCode() {
+APT_IGNORE_DEPRECATED_PUSH
        if (TranslationsAvailable() == false)
                return "";
        return APT::Configuration::getLanguages()[0];
+APT_IGNORE_DEPRECATED_POP
 }
                                                                        /*}}}*/
 
@@ -149,6 +144,7 @@ std::string IndexTarget::Option(OptionKeys const EnumKey) const             /*{{{*/
       APT_CASE(COMPRESSIONTYPES);
       APT_CASE(SOURCESENTRY);
       APT_CASE(BY_HASH);
+      APT_CASE(KEEPCOMPRESSEDAS);
 #undef APT_CASE
       case FILENAME: return _config->FindDir("Dir::State::lists") + URItoFileName(URI);
       case EXISTING_FILENAME:
@@ -271,7 +267,9 @@ std::string pkgDebianIndexTargetFile::GetProgressDescription() const
 pkgDebianIndexRealFile::pkgDebianIndexRealFile(std::string const &pFile, bool const Trusted) :/*{{{*/
    pkgDebianIndexFile(Trusted), d(NULL)
 {
-   if (pFile == "/nonexistent/stdin")
+   if (pFile.empty())
+      ;
+   else if (pFile == "/nonexistent/stdin")
       File = pFile;
    else
       File = flAbsPath(pFile);
@@ -312,7 +310,7 @@ std::string pkgDebianIndexRealFile::GetProgressDescription() const
 }
 bool pkgDebianIndexRealFile::OpenListFile(FileFd &Pkg, std::string const &FileName)/*{{{*/
 {
-   if (Pkg.Open(FileName, FileFd::ReadOnly, FileFd::None) == false)
+   if (Pkg.Open(FileName, FileFd::ReadOnly, FileFd::Extension) == false)
       return _error->Error("Problem opening %s",FileName.c_str());
    return true;
 }
@@ -327,12 +325,18 @@ pkgDebianIndexFile::~pkgDebianIndexFile()
 pkgCacheListParser * pkgDebianIndexFile::CreateListParser(FileFd &Pkg)
 {
    if (Pkg.IsOpen() == false)
-      return NULL;
+      return nullptr;
    _error->PushToStack();
    pkgCacheListParser * const Parser = new debListParser(&Pkg);
    bool const newError = _error->PendingError();
    _error->MergeWithStack();
-   return newError ? NULL : Parser;
+   if (newError)
+   {
+      delete Parser;
+      return nullptr;
+   }
+   else
+      return Parser;
 }
 bool pkgDebianIndexFile::Merge(pkgCacheGenerator &Gen,OpProgress * const Prog)
 {