From d54c4301f6f70d7407807dfb6fed4b96648886d9 Mon Sep 17 00:00:00 2001
From: Rene Brun <Rene.Brun@cern.ch>
Date: Sat, 9 Dec 2000 16:01:50 +0000
Subject: [PATCH] The static buffer of length 4096 is now created with a length
 of 2048. If necessary it is increased.

git-svn-id: http://root.cern.ch/svn/root/trunk@1147 27541ba8-7e3a-0410-8455-c3a389f83636
---
 base/src/TString.cxx | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/base/src/TString.cxx b/base/src/TString.cxx
index 4be08a272ea..41b181f1cf9 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;
-- 
GitLab