diff --git a/base/src/TString.cxx b/base/src/TString.cxx index 4be08a272eab7dd3ae4abe384b74a701587dba31..41b181f1cf910ca2a2ee724e4eee52192f5b20af 100644 --- a/base/src/TString.cxx +++ b/base/src/TString.cxx @@ -1,4 +1,4 @@ -// @(#)root/base:$Name: $:$Id: TString.cxx,v 1.5 2000/11/27 12:23:15 brun Exp $ +// @(#)root/base:$Name: $:$Id: TString.cxx,v 1.6 2000/12/08 07:56:39 brun Exp $ // Author: Fons Rademakers 04/08/95 /************************************************************************* @@ -1176,13 +1176,10 @@ Bool_t TString::EndsWith(const char* s, ECaseCompare cmp) const //---- Global String Handling Functions ---------------------------------------- -static const int cb_size = 4096; -static const int fld_size = 2048; // a circular formating buffer -static char formbuf[cb_size]; // some slob for form overflow -static char *bfree = formbuf; -static char *endbuf = &formbuf[cb_size-1]; +static char *bfree = 0; +static int cb_size = 2048; //______________________________________________________________________________ static char *Format(const char* format, va_list ap) @@ -1190,6 +1187,14 @@ static char *Format(const char* format, va_list ap) // Format a string in a circular formatting buffer (using a printf style // format descriptor). + static int fld_size; + static char *formbuf, *endbuf; + if (bfree == 0) { + fld_size = cb_size/2; + formbuf = new char[cb_size]; + bfree = formbuf; + endbuf = &formbuf[cb_size-1]; + } char *buf = bfree; if (buf+fld_size > endbuf) @@ -1198,8 +1203,14 @@ static char *Format(const char* format, va_list ap) vsprintf(buf, format, ap); int l = strlen(buf); if (l > fld_size) { - buf[50] = 0; - Error("Format", "Buffer overflow : buf = %s...\n", buf); + delete [] formbuf; + cb_size += l; + fld_size = cb_size/2; + formbuf = new char[cb_size]; + bfree = formbuf; + endbuf = &formbuf[cb_size-1]; + buf = bfree; + vsprintf(buf, format, ap); } bfree = buf+l+1; return buf;