fixed size of buffer returned by wxFormatConverter (it was too large before)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59939 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2009-03-30 11:54:41 +00:00
parent ee032c59df
commit a6bb7a282d
3 changed files with 36 additions and 4 deletions

View File

@@ -330,6 +330,17 @@ public:
return true;
}
void shrink(size_t len)
{
wxASSERT_MSG( this->m_data->m_owned, "cannot shrink non-owned buffer" );
wxASSERT_MSG( this->m_data->m_ref == 1, "can't shrink shared buffer" );
wxASSERT( len <= this->length() );
this->m_data->m_length = len;
this->data()[len] = 0;
}
};
WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxCharTypeBuffer<char> )

View File

@@ -200,8 +200,27 @@ public:
Can only be called on buffers that don't share data with another
buffer (i.e. reference count of the data is 1).
@see shrink()
*/
bool extend(size_t len);
/**
Shrinks the buffer to have size @a len and NUL-terminates the string
at this length.
Can only be called on buffers that don't share data with another
buffer (i.e. reference count of the data is 1).
@param len Length to shrink to. Must not be larger than current length.
@note The string is not reallocated to take less memory.
@since 2.9.0
@see extend()
*/
bool shrink(size_t len);
};
/**

View File

@@ -152,7 +152,7 @@ public:
m_nCopied = 0;
}
wxCharTypeBuffer<CharType> Convert(const CharType *format)
wxScopedCharTypeBuffer<CharType> Convert(const CharType *format)
{
// this is reset to NULL if we modify the format string
m_fmtOrig = format;
@@ -263,12 +263,14 @@ public:
// format
if ( m_fmtOrig )
{
return wxCharTypeBuffer<CharType>::CreateNonOwned(m_fmtOrig);
return wxScopedCharTypeBuffer<CharType>::CreateNonOwned(m_fmtOrig);
}
else
{
// NULL-terminate converted format string:
*m_fmtLast = 0;
// shrink converted format string to actual size (instead of
// over-sized allocation from CopyAllBefore()) and NUL-terminate
// it:
m_fmt.shrink(m_fmtLast - m_fmt.data());
return m_fmt;
}
}