]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/tagfile.cc
* apt-pkg/indexfile.cc:
[apt.git] / apt-pkg / tagfile.cc
index ab3647fd877bc674783bf6b352a6711562de7845..cae0fa81989f5e4ba0e6a8e7ce77012e1da0be28 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: tagfile.cc,v 1.32 2002/03/26 07:22:31 jgg Exp $
+// $Id: tagfile.cc,v 1.37.2.2 2003/12/31 16:02:30 mdz Exp $
 /* ######################################################################
 
    Fast scanner for RFC-822 type header information
@@ -31,7 +31,9 @@ using std::string;
 // TagFile::pkgTagFile - Constructor                                   /*{{{*/
 // ---------------------------------------------------------------------
 /* */
-pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) : Fd(*pFd), Size(Size)
+pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
+     Fd(*pFd),
+     Size(Size)
 {
    if (Fd.IsOpen() == false)
    {
@@ -70,7 +72,7 @@ bool pkgTagFile::Step(pkgTagSection &Tag)
       if (Tag.Scan(Start,End - Start) == false)
         return _error->Error(_("Unable to parse package file %s (1)"),
                              Fd.Name().c_str());
-   }   
+   }
    Start += Tag.size();
    iOffset += Tag.size();
 
@@ -85,6 +87,7 @@ bool pkgTagFile::Step(pkgTagSection &Tag)
 bool pkgTagFile::Fill()
 {
    unsigned long EndSize = End - Start;
+   unsigned long Actual = 0;
    
    memmove(Buffer,Start,EndSize);
    Start = Buffer;
@@ -93,7 +96,6 @@ bool pkgTagFile::Fill()
    if (Done == false)
    {
       // See if only a bit of the file is left
-      unsigned long Actual;
       if (Fd.Read(End,Size - (End - Buffer),&Actual) == false)
         return false;
       if (Actual != Size - (End - Buffer))
@@ -103,7 +105,7 @@ bool pkgTagFile::Fill()
    
    if (Done == true)
    {
-      if (EndSize <= 3)
+      if (EndSize <= 3 && Actual == 0)
         return false;
       if (Size - (End - Buffer) < 4)
         return true;
@@ -197,7 +199,7 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength)
       if (Stop == 0)
         return false;
       
-      for (;  Stop+1 < End && Stop[1] == '\r'; Stop++);
+      for (; Stop+1 < End && Stop[1] == '\r'; Stop++);
 
       // Double newline marks the end of the record
       if (Stop+1 < End && Stop[1] == '\n')