X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/fe06d72cb3a26eba89d897098a3d22c9a9d11179..23a8e90a67314a19350efac167c6f0874ca2d04c:/apt-pkg/tagfile.cc diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc index ab3647fd8..cae0fa819 100644 --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@ -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')