X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/45430cbf4cae3613394cdb7eb2cc82103407cb59..0fad7309fbc20a7ca838e241e5118bf56f39946c:/apt-pkg/deb/debsrcrecords.cc diff --git a/apt-pkg/deb/debsrcrecords.cc b/apt-pkg/deb/debsrcrecords.cc index 639079be3..ace4e00b5 100644 --- a/apt-pkg/deb/debsrcrecords.cc +++ b/apt-pkg/deb/debsrcrecords.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: debsrcrecords.cc,v 1.5 2001/11/04 17:09:18 tausq Exp $ +// $Id: debsrcrecords.cc,v 1.6 2004/03/17 05:58:54 mdz Exp $ /* ###################################################################### Debian Source Package Records - Parser implementation for Debian style @@ -9,15 +9,13 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#ifdef __GNUG__ -#pragma implementation "apt-pkg/debsrcrecords.h" -#endif - #include #include #include #include #include + +using std::max; /*}}}*/ // SrcRecordParser::Binaries - Return the binaries field /*{{{*/ @@ -31,13 +29,22 @@ const char **debSrcRecordParser::Binaries() { // This should use Start/Stop too, it is supposed to be efficient after all. string Bins = Sect.FindS("Binary"); - if (Bins.empty() == true || Bins.length() >= sizeof(Buffer)) + if (Bins.empty() == true || Bins.length() >= 102400) return 0; + if (Bins.length() >= BufSize) + { + delete [] Buffer; + // allocate new size based on buffer (but never smaller than 4000) + BufSize = max((unsigned int)4000, max((unsigned int)Bins.length()+1,2*BufSize)); + Buffer = new char[BufSize]; + } + strcpy(Buffer,Bins.c_str()); if (TokSplitString(',',Buffer,StaticBinList, sizeof(StaticBinList)/sizeof(StaticBinList[0])) == false) return 0; + return (const char **)StaticBinList; } /*}}}*/ @@ -130,7 +137,7 @@ bool debSrcRecordParser::Files(vector &List) break; F.Type = string(F.Path,Tmp+1,Pos-Tmp); - if (F.Type == "gz" || F.Type == "bz2") + if (F.Type == "gz" || F.Type == "bz2" || F.Type == "lzma") { Pos = Tmp-1; continue;