From: Michael Vogt Date: Wed, 26 Apr 2006 10:55:06 +0000 (+0200) Subject: * merged with mainline X-Git-Tag: 0.7.21~330 X-Git-Url: https://git.saurik.com/apt.git/commitdiff_plain/2268ad65d9f36433f2b3d46e05e8782285641ee3?hp=-c * merged with mainline --- 2268ad65d9f36433f2b3d46e05e8782285641ee3 diff --combined apt-pkg/tagfile.cc index 1fa007940,dc1ba3f9e..fc020436c --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@@ -35,20 -35,20 +35,20 @@@ pkgTagFile::pkgTagFile(FileFd *pFd,unsi Fd(*pFd), Size(Size) { - if (Fd.IsOpen() == false) + if (Fd.IsOpen() == false || Fd.Size() == 0) { Buffer = 0; Start = End = Buffer = 0; - Done = true; iOffset = 0; + Map = NULL; return; } - Buffer = new char[Size]; - Start = End = Buffer; - Done = false; + Map = new MMap (Fd, MMap::Public | MMap::ReadOnly); + Buffer = (char *) Map->Data (); + Start = Buffer; + End = Buffer + Map->Size (); iOffset = 0; - Fill(); } /*}}}*/ // TagFile::~pkgTagFile - Destructor /*{{{*/ @@@ -56,7 -56,7 +56,7 @@@ /* */ pkgTagFile::~pkgTagFile() { - delete [] Buffer; + delete Map; } /*}}}*/ // TagFile::Step - Advance to the next section /*{{{*/ @@@ -64,63 -64,18 +64,18 @@@ /* If the Section Scanner fails we refill the buffer and try again. */ bool pkgTagFile::Step(pkgTagSection &Tag) { + if (Start == End) + return false; + if (Tag.Scan(Start,End - Start) == false) { - if (Fill() == false) - return false; - - if (Tag.Scan(Start,End - Start) == false) - return _error->Error(_("Unable to parse package file %s (1)"), - Fd.Name().c_str()); + return _error->Error(_("Unable to parse package file %s (1)"), + Fd.Name().c_str()); } Start += Tag.size(); iOffset += Tag.size(); Tag.Trim(); - return true; - } - /*}}}*/ - // TagFile::Fill - Top up the buffer /*{{{*/ - // --------------------------------------------------------------------- - /* This takes the bit at the end of the buffer and puts it at the start - then fills the rest from the file */ - bool pkgTagFile::Fill() - { - unsigned long EndSize = End - Start; - unsigned long Actual = 0; - - memmove(Buffer,Start,EndSize); - Start = Buffer; - End = Buffer + EndSize; - - if (Done == false) - { - // See if only a bit of the file is left - if (Fd.Read(End,Size - (End - Buffer),&Actual) == false) - return false; - if (Actual != Size - (End - Buffer)) - Done = true; - End += Actual; - } - - if (Done == true) - { - if (EndSize <= 3 && Actual == 0) - return false; - if (Size - (End - Buffer) < 4) - return true; - - // Append a double new line if one does not exist - unsigned int LineCount = 0; - for (const char *E = End - 1; E - End < 6 && (*E == '\n' || *E == '\r'); E--) - if (*E == '\n') - LineCount++; - for (; LineCount < 2; LineCount++) - *End++ = '\n'; - - return true; - } - return true; } /*}}}*/ @@@ -141,20 -96,7 +96,7 @@@ bool pkgTagFile::Jump(pkgTagSection &Ta // Reposition and reload.. iOffset = Offset; - Done = false; - if (Fd.Seek(Offset) == false) - return false; - End = Start = Buffer; - - if (Fill() == false) - return false; - - if (Tag.Scan(Start,End - Start) == true) - return true; - - // This appends a double new line (for the real eof handling) - if (Fill() == false) - return false; + Start = Buffer + iOffset; if (Tag.Scan(Start,End - Start) == false) return _error->Error(_("Unable to parse package file %s (2)"),Fd.Name().c_str()); @@@ -181,7 -123,7 +123,7 @@@ bool pkgTagSection::Scan(const char *St Stop = Section = Start; memset(AlphaIndexes,0,sizeof(AlphaIndexes)); - if (Stop == 0) + if (Stop == 0 || MaxLength == 0) return false; TagCount = 0; @@@ -212,6 -154,12 +154,12 @@@ Stop++; } + if ((Stop+1 >= End) && (End[-1] == '\n' || End[-1] == '\r')) + { + Indexes[TagCount] = (End - 1) - Section; + return true; + } + return false; } /*}}}*/ @@@ -394,8 -342,7 +342,8 @@@ static const char *iTFRewritePackageOrd "Filename", "Size", "MD5Sum", - "SHA1Sum", + "SHA1", + "SHA256", "MSDOS-Filename", // Obsolete "Description", 0}; diff --combined debian/changelog index 9a7ee7213,c439f0df5..65dc1e862 --- a/debian/changelog +++ b/debian/changelog @@@ -1,16 -1,17 +1,22 @@@ - apt (0.6.43.4) unstable; urgency=low + apt (0.6.44) unstable; urgency=low * apt-pkg/acquire.cc: don't show ETA if it is 0 or absurdely large + * apt-pkg/contrib/sha256.{cc,h},hashes.{cc,h}: support for sha256 + (thanks to Anthony Towns) + * ftparchive/cachedb.{cc,h},writer.{cc,h}: optimizations + (thanks to Anthony Towns) + * apt pdiff support from experimental merged + * apt-pkg/deb/dpkgpm.cc: wording fixes (thanks to Matt Zimmerman) + * apt-pkg/deb/dpkgpm.cc: + - wording fixes (thanks to Matt Zimmerman) - - fix error in dpkg interaction (closes: #364513, - thanks to Martin Dickopp) ++ - fix error in dpkg interaction (closes: #364513, thanks to Martin Dickopp) + * apt-pkg/tagfile.{cc,h}: + - use MMap to read the entries (thanks to Zephaniah E. Hull for the + patch) Closes: #350025 * Merge from http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main: * bg.po: Added, complete to 512t. Closes: #360262 - -- Michael Vogt Tue, 25 Apr 2006 09:34:20 +0200 + -- Michael Vogt Sun, 2 Apr 2006 16:41:54 +0200 apt (0.6.43.3) unstable; urgency=low