|
|
@@ -32,25 +32,32 @@ using std::string;
|
|
|
used during scanning to find the right package */
|
|
|
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() >= 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];
|
|
|
- }
|
|
|
+ const char *Start, *End;
|
|
|
+ if (Sect.Find("Binary", Start, End) == false)
|
|
|
+ return NULL;
|
|
|
+ for (; isspace(*Start) != 0; ++Start);
|
|
|
+ if (Start >= End)
|
|
|
+ return NULL;
|
|
|
|
|
|
- strcpy(Buffer,Bins.c_str());
|
|
|
- if (TokSplitString(',',Buffer,StaticBinList,
|
|
|
- sizeof(StaticBinList)/sizeof(StaticBinList[0])) == false)
|
|
|
- return 0;
|
|
|
+ StaticBinList.clear();
|
|
|
+ free(Buffer);
|
|
|
+ Buffer = strndup(Start, End - Start);
|
|
|
+
|
|
|
+ char* bin = Buffer;
|
|
|
+ do {
|
|
|
+ char* binStartNext = strchrnul(bin, ',');
|
|
|
+ char* binEnd = binStartNext - 1;
|
|
|
+ for (; isspace(*binEnd) != 0; --binEnd)
|
|
|
+ binEnd = '\0';
|
|
|
+ StaticBinList.push_back(bin);
|
|
|
+ if (*binStartNext != ',')
|
|
|
+ break;
|
|
|
+ *binStartNext = '\0';
|
|
|
+ for (bin = binStartNext + 1; isspace(*bin) != 0; ++bin);
|
|
|
+ } while (*bin != '\0');
|
|
|
+ StaticBinList.push_back(NULL);
|
|
|
|
|
|
- return (const char **)StaticBinList;
|
|
|
+ return (const char **) &StaticBinList[0];
|
|
|
}
|
|
|
/*}}}*/
|
|
|
// SrcRecordParser::BuildDepends - Return the Build-Depends information /*{{{*/
|