From: Benjamin Kosnik Date: Sat, 18 May 2002 14:44:52 +0000 (+0000) Subject: re PR libstdc++/6594 (strstreambuf leaks 16 bytes - gcc 3.0.x) X-Git-Tag: releases/gcc-3.1.1~332 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca3872f6cf344c9388e2b8225f40a99e7e18aaf0;p=thirdparty%2Fgcc.git re PR libstdc++/6594 (strstreambuf leaks 16 bytes - gcc 3.0.x) 2002-05-18 Benjamin Kosnik PR libstdc++/6594 * src/strstream.cc (strstreambuf): Fix leak. From-SVN: r53585 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 511febee833a..bcc9e236af21 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2002-05-18 Benjamin Kosnik + + PR libstdc++/6594 + * src/strstream.cc (strstreambuf): Fix leak. + 2002-05-18 Benjamin Kosnik * testsuite/22_locale/ctype_scan_char.cc: Tweak. diff --git a/libstdc++-v3/src/strstream.cc b/libstdc++-v3/src/strstream.cc index 2160c440be27..1af46bb5654d 100644 --- a/libstdc++-v3/src/strstream.cc +++ b/libstdc++-v3/src/strstream.cc @@ -64,13 +64,13 @@ strstreambuf::strstreambuf(streamsize initial_capacity) _M_alloc_fun(0), _M_free_fun(0), _M_dynamic(true), _M_frozen(false), _M_constant(false) { - streamsize n = max(initial_capacity, streamsize(16)); - - char* buf = _M_alloc(n); - if (buf) { - setp(buf, buf + n); - setg(buf, buf, buf); - } + _M_buf_size = _M_buf_size_opt = max(initial_capacity, streamsize(16)); + _M_buf = _M_alloc(_M_buf_size); + if (_M_buf) + { + setp(_M_buf, _M_buf + _M_buf_size); + setg(_M_buf, _M_buf, _M_buf); + } } strstreambuf::strstreambuf(void* (*alloc_f)(size_t), void (*free_f)(void*)) @@ -78,12 +78,12 @@ strstreambuf::strstreambuf(void* (*alloc_f)(size_t), void (*free_f)(void*)) _M_alloc_fun(alloc_f), _M_free_fun(free_f), _M_dynamic(true), _M_frozen(false), _M_constant(false) { - streamsize n = 16; - - char* buf = _M_alloc(n); - if (buf) { - setp(buf, buf + n); - setg(buf, buf, buf); + _M_buf_size = _M_buf_size_opt = 16; + _M_buf = _M_alloc(_M_buf_size); + if (_M_buf) + { + setp(_M_buf, _M_buf + _M_buf_size); + setg(_M_buf, _M_buf, _M_buf); } } @@ -140,6 +140,8 @@ strstreambuf::~strstreambuf() { if (_M_dynamic && !_M_frozen) _M_free(eback()); + if (_M_buf) + _M_free(_M_buf); } void strstreambuf::freeze(bool frozenflag)