From 60a9e375317c42f6682704e2769b7b2776c7ec12 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sat, 30 Sep 2006 16:30:42 +0200 Subject: * methods/gzip.cc: - fix invalid reanem --- methods/gzip.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/methods/gzip.cc b/methods/gzip.cc index a8e816bf3..f732c0b86 100644 --- a/methods/gzip.cc +++ b/methods/gzip.cc @@ -55,7 +55,7 @@ bool GzipMethod::Fetch(FetchItem *Itm) // if the file is empty, just rename it and return if(From.Size() == 0) { - Rename(Path, Itm->DestFile); + rename(Path.c_str(), Itm->DestFile.c_str()); return true; } -- cgit v1.2.3 From c407612f82f02ed97ec879e48e3cd1c187b4f5ea Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sat, 30 Sep 2006 22:50:41 +0200 Subject: * apt-pkg/tagfile.h: - increase the buffer in tagfile.cc for now, this really needs to become a dynamic buffer --- apt-pkg/tagfile.h | 2 +- debian/changelog | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h index f7f8155a5..35ffebda8 100644 --- a/apt-pkg/tagfile.h +++ b/apt-pkg/tagfile.h @@ -84,7 +84,7 @@ class pkgTagFile inline unsigned long Offset() {return iOffset;}; bool Jump(pkgTagSection &Tag,unsigned long Offset); - pkgTagFile(FileFd *F,unsigned long Size = 64*1024); + pkgTagFile(FileFd *F,unsigned long Size = 128*1024); ~pkgTagFile(); }; diff --git a/debian/changelog b/debian/changelog index db84bc65a..77c7cf698 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,6 +13,8 @@ apt (0.6.46.1) unstable; urgency=low * fi.po: Updated to 514t. Closes: #390149 * eu.po: Updated to 514t. Closes: #389725 * vi.po: Updated to 514t. Closes: #388555 + * use a bigger buffer in tagfile for now, this needs to + become much more dynamic (closes: #388708) -- -- cgit v1.2.3 From 75c541fdeda664bdf0e48e68a2aa5dae7015587c Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 2 Oct 2006 00:58:53 +0200 Subject: * apt-pkg/tagfile.cc,h: - make the internal buffer grow dynamically if required --- apt-pkg/tagfile.cc | 41 +++++++++++++++++++++++++++++++++++++---- apt-pkg/tagfile.h | 7 ++++--- debian/changelog | 4 ++-- 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc index 040562fff..223618cd1 100644 --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@ -59,19 +59,52 @@ pkgTagFile::~pkgTagFile() delete [] Buffer; } /*}}}*/ +// TagFile::Resize - Resize the internal buffer /*{{{*/ +// --------------------------------------------------------------------- +/* Resize the internal buffer (double it in size). Fail if a maximum size + * size is reached. + */ +bool pkgTagFile::Resize() +{ + char *tmp; + unsigned long EndSize = End - Start; + + // fail is the buffer grows too big + if(Size > 1024*1024+1) + return false; + + // get new buffer and use it + tmp = new char[2*Size]; + memcpy(tmp, Buffer, Size); + Size = Size*2; + delete [] Buffer; + Buffer = tmp; + + // update the start/end pointers to the new buffer + Start = Buffer; + End = Start + EndSize; + return true; +} + // TagFile::Step - Advance to the next section /*{{{*/ // --------------------------------------------------------------------- -/* If the Section Scanner fails we refill the buffer and try again. */ +/* If the Section Scanner fails we refill the buffer and try again. + * If that fails too, double the buffer size and try again until a + * maximum buffer is reached. + */ bool pkgTagFile::Step(pkgTagSection &Tag) { - if (Tag.Scan(Start,End - Start) == false) + while (Tag.Scan(Start,End - Start) == false) { if (Fill() == false) return false; - if (Tag.Scan(Start,End - Start) == false) + if(Tag.Scan(Start,End - Start)) + break; + + if (Resize() == false) return _error->Error(_("Unable to parse package file %s (1)"), - Fd.Name().c_str()); + Fd.Name().c_str()); } Start += Tag.size(); iOffset += Tag.size(); diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h index 35ffebda8..70381ad13 100644 --- a/apt-pkg/tagfile.h +++ b/apt-pkg/tagfile.h @@ -75,16 +75,17 @@ class pkgTagFile bool Done; unsigned long iOffset; unsigned long Size; - + bool Fill(); - + bool Resize(); + public: bool Step(pkgTagSection &Section); inline unsigned long Offset() {return iOffset;}; bool Jump(pkgTagSection &Tag,unsigned long Offset); - pkgTagFile(FileFd *F,unsigned long Size = 128*1024); + pkgTagFile(FileFd *F,unsigned long Size = 32*1024); ~pkgTagFile(); }; diff --git a/debian/changelog b/debian/changelog index 77c7cf698..6b842898c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,8 +13,8 @@ apt (0.6.46.1) unstable; urgency=low * fi.po: Updated to 514t. Closes: #390149 * eu.po: Updated to 514t. Closes: #389725 * vi.po: Updated to 514t. Closes: #388555 - * use a bigger buffer in tagfile for now, this needs to - become much more dynamic (closes: #388708) + * make the internal buffer in pkgTagFile grow dynamically + (closes: #388708) -- -- cgit v1.2.3