Switch FileFd to not transparently gunzip, since that breaks code which expects the...
authormartin@piware.de <>
Thu, 24 Jun 2010 19:27:27 +0000 (21:27 +0200)
committermartin@piware.de <>
Thu, 24 Jun 2010 19:27:27 +0000 (21:27 +0200)
apt-pkg/acquire-item.cc
apt-pkg/contrib/fileutl.cc
apt-pkg/contrib/fileutl.h
apt-pkg/deb/debindexfile.cc
apt-pkg/deb/debrecords.cc
apt-pkg/deb/debsrcrecords.h
cmdline/apt-cache.cc
debian/changelog

index fe81ee7..9abdb0a 100644 (file)
@@ -228,7 +228,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile)          /*{{{*/
       ss >> ServerSha1 >> size;
       unsigned long const ServerSize = atol(size.c_str());
 
-      FileFd fd(CurrentPackagesFile, FileFd::ReadOnly);
+      FileFd fd(CurrentPackagesFile, FileFd::ReadOnlyGzip);
       SHA1Summation SHA1;
       SHA1.AddFD(fd.Fd(), fd.Size());
       string const local_sha1 = SHA1.Result();
@@ -459,7 +459,7 @@ bool pkgAcqIndexDiffs::QueueNextDiff()                                      /*{{{*/
    string FinalFile = _config->FindDir("Dir::State::lists");
    FinalFile += URItoFileName(RealURI);
 
-   FileFd fd(FinalFile, FileFd::ReadOnly);
+   FileFd fd(FinalFile, FileFd::ReadOnlyGzip);
    SHA1Summation SHA1;
    SHA1.AddFD(fd.Fd(), fd.Size());
    string local_sha1 = string(SHA1.Result());
index 11a9e7f..2b91a46 100644 (file)
@@ -604,12 +604,16 @@ bool FileFd::Open(string FileName,OpenMode Mode, unsigned long Perms)
    {
       case ReadOnly:
       iFd = open(FileName.c_str(),O_RDONLY);
+      break;
+
+      case ReadOnlyGzip:
+      iFd = open(FileName.c_str(),O_RDONLY);
       if (iFd > 0 && FileName.compare(FileName.size()-3, 3, ".gz") == 0) {
-         gz = gzdopen (iFd, "r");
-         if (gz == NULL) {
-             close (iFd);
-             iFd = -1;
-         }
+        gz = gzdopen (iFd, "r");
+        if (gz == NULL) {
+            close (iFd);
+            iFd = -1;
+        }
       }
       break;
       
index 9925bbe..c4b2821 100644 (file)
@@ -41,7 +41,7 @@ class FileFd
    gzFile gz;
    
    public:
-   enum OpenMode {ReadOnly,WriteEmpty,WriteExists,WriteAny,WriteTemp};
+   enum OpenMode {ReadOnly,WriteEmpty,WriteExists,WriteAny,WriteTemp,ReadOnlyGzip};
    
    inline bool Read(void *To,unsigned long Size,bool AllowEof)
    {
index 9832329..7d7bd09 100644 (file)
@@ -273,7 +273,7 @@ unsigned long debPackagesIndex::Size() const
 bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const
 {
    string PackageFile = IndexFile("Packages");
-   FileFd Pkg(PackageFile,FileFd::ReadOnly);
+   FileFd Pkg(PackageFile,FileFd::ReadOnlyGzip);
    debListParser Parser(&Pkg);
    if (_error->PendingError() == true)
       return _error->Error("Problem opening %s",PackageFile.c_str());
@@ -464,7 +464,7 @@ bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const
    string TranslationFile = IndexFile(Language);
    if (TranslationsAvailable() && FileExists(TranslationFile))
    {
-     FileFd Trans(TranslationFile,FileFd::ReadOnly);
+     FileFd Trans(TranslationFile,FileFd::ReadOnlyGzip);
      debListParser TransParser(&Trans);
      if (_error->PendingError() == true)
        return false;
@@ -544,7 +544,7 @@ unsigned long debStatusIndex::Size() const
 /* */
 bool debStatusIndex::Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const
 {
-   FileFd Pkg(File,FileFd::ReadOnly);
+   FileFd Pkg(File,FileFd::ReadOnlyGzip);
    if (_error->PendingError() == true)
       return false;
    debListParser Parser(&Pkg);
index 34ef0d8..ec9e395 100644 (file)
@@ -19,7 +19,7 @@
 // ---------------------------------------------------------------------
 /* */
 debRecordParser::debRecordParser(string FileName,pkgCache &Cache) : 
-                  File(FileName,FileFd::ReadOnly), 
+                  File(FileName,FileFd::ReadOnlyGzip), 
                   Tags(&File, std::max(Cache.Head().MaxVerFileSize, 
                                       Cache.Head().MaxDescFileSize) + 200)
 {
index c39d78b..905264d 100644 (file)
@@ -48,7 +48,7 @@ class debSrcRecordParser : public pkgSrcRecords::Parser
    virtual bool Files(vector<pkgSrcRecords::File> &F);
 
    debSrcRecordParser(string const &File,pkgIndexFile const *Index) 
-      : Parser(Index), Fd(File,FileFd::ReadOnly), Tags(&Fd,102400), 
+      : Parser(Index), Fd(File,FileFd::ReadOnlyGzip), Tags(&Fd,102400), 
         Buffer(0), BufSize(0) {}
    ~debSrcRecordParser();
 };
index 3f68579..2b47184 100644 (file)
@@ -1220,7 +1220,7 @@ bool DisplayRecord(pkgCache::VerIterator V)
    if (I.IsOk() == false)
       return _error->Error(_("Package file %s is out of sync."),I.FileName());
    
-   FileFd PkgF(I.FileName(),FileFd::ReadOnly);
+   FileFd PkgF(I.FileName(),FileFd::ReadOnlyGzip);
    if (_error->PendingError() == true)
       return false;
    
index e44d798..f3f2d3d 100644 (file)
@@ -9,13 +9,17 @@ apt (0.7.26~exp5) UNRELEASED; urgency=low
     - Make DEB_BUILD_OPTIONS=noopt actually work by passing the right
       CXXFLAGS.
   * apt-pkg/contrib/fileutl.{h,cc}:
-    - Add support for transparent reading of gzipped files.
+    - Add support for reading of gzipped files with the new "ReadOnlyGzip"
+      OpenMode.
     - Link against zlib (in apt-pkg/makefile) and add zlib build dependency.
     - [ABI BREAK] This adds a new private member to FileFd, but its
-      initialization is in the public header file. This also changes the
-      behaviour of FileFd for reading gzipped files.
+      initialization is in the public header file.
   * configure.in:
     - Check for zlib library and headers.
+  * apt-pkg/acquire-item.cc, apt-pkg/deb/debindexfile.cc,
+    apt-pkg/deb/debrecords.cc, apt-pkg/deb/debsrcrecords.h,
+    cmdline/apt-cache.cc:
+    - Open Packages, Sources, and Translations indexes in "ReadOnlyGzip" mode.
   * apt-pkg/deb/debindexfile.cc:
     - If we do not find uncompressed package/source/translation indexes, look
       for gzip compressed ones.