Browse Source

* apt-pkg/deb/debsrcrecords.{cc,h}:

- make the buffer dynmaic
debian/1.8.y
Michael Vogt 16 years ago
parent
commit
4ab24e53db
  1. 28
      apt-pkg/deb/debsrcrecords.cc
  2. 10
      apt-pkg/deb/debsrcrecords.h
  3. 2
      debian/changelog

28
apt-pkg/deb/debsrcrecords.cc

@ -18,6 +18,8 @@
#include <apt-pkg/error.h>
#include <apt-pkg/strutl.h>
#include <apt-pkg/configuration.h>
using std::max;
/*}}}*/
// SrcRecordParser::Binaries - Return the binaries field /*{{{*/
@ -34,31 +36,19 @@ const char **debSrcRecordParser::Binaries()
if (Bins.empty() == true || Bins.length() >= 102400)
return 0;
// Workaround for #236688. Only allocate a new buffer if the field
// is large, to avoid a performance penalty
char *BigBuf = NULL;
char *Buf;
if (Bins.length() > sizeof(Buffer))
{
BigBuf = new char[Bins.length()];
Buf = BigBuf;
}
else
if (Bins.length() > BufSize)
{
Buf = Buffer;
delete [] Buffer;
// allocate new size based on buffer (but never smaller than 4000)
BufSize = max((unsigned long)4000, max(Bins.length()+1,2*BufSize));
Buffer = new char[BufSize];
}
strcpy(Buf,Bins.c_str());
if (TokSplitString(',',Buf,StaticBinList,
strcpy(Buffer,Bins.c_str());
if (TokSplitString(',',Buffer,StaticBinList,
sizeof(StaticBinList)/sizeof(StaticBinList[0])) == false)
{
if (BigBuf != NULL)
delete BigBuf;
return 0;
}
if (BigBuf != NULL)
delete BigBuf;
return (const char **)StaticBinList;
}
/*}}}*/

10
apt-pkg/deb/debsrcrecords.h

@ -24,9 +24,10 @@ class debSrcRecordParser : public pkgSrcRecords::Parser
FileFd Fd;
pkgTagFile Tags;
pkgTagSection Sect;
char Buffer[10000];
char *StaticBinList[400];
unsigned long iOffset;
char *Buffer;
unsigned long BufSize;
public:
@ -49,10 +50,9 @@ class debSrcRecordParser : public pkgSrcRecords::Parser
};
virtual bool Files(vector<pkgSrcRecords::File> &F);
debSrcRecordParser(string File,pkgIndexFile const *Index) :
Parser(Index),
Fd(File,FileFd::ReadOnly),
Tags(&Fd,102400) {};
debSrcRecordParser(string File,pkgIndexFile const *Index)
: Parser(Index), Fd(File,FileFd::ReadOnly), Tags(&Fd,102400),
Buffer(0), BufSize(0) {}
};
#endif

2
debian/changelog

@ -4,6 +4,8 @@ apt (0.6.46.4) unstable; urgency=low
* apt-pkg/deb/dpkgpm.cc:
- added "Dpkg::StopOnError" variable that controls if apt
will abort on errors from dpkg
* apt-pkg/deb/debsrcrecords.{cc,h}:
- make the Buffer dynmaic
--

Loading…
Cancel
Save