Commit 32c16200 by Paolo Carlini Committed by Paolo Carlini

locale_facets.tcc (collate::do_transform): Rewrite to fix problems with long transformed strings.

2002-03-09  Paolo Carlini  <pcarlini@unitus.it>

        * include/bits/locale_facets.tcc (collate::do_transform):
        Rewrite to fix problems with long transformed strings.

From-SVN: r50500
parent edcc88c1
2002-03-09 Paolo Carlini <pcarlini@unitus.it>
* include/bits/locale_facets.tcc (collate::do_transform):
Rewrite to fix problems with long transformed strings.
2002-03-08 Benjamin Kosnik <bkoz@redhat.com>
* c_locale_generic.cc: Move to...
......
......@@ -1854,16 +1854,17 @@ namespace std
collate<_CharT>::
do_transform(const _CharT* __lo, const _CharT* __hi) const
{
size_t __len = __hi - __lo;
size_t __len = (__hi - __lo) * 2;
// First try a buffer perhaps big enough.
_CharT* __c = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __len));
size_t __res = _M_transform_helper(__c, __lo, __len);
// If the buffer was not large enough, try again with the correct size.
if (__res >= __len)
{
// Try to increment size of translated string.
size_t __len2 = __len * 2;
_CharT* __c2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __len2));
__res = _M_transform_helper(__c2, __lo, __len);
// XXX Throw exception if still indeterminate?
_CharT* __c2 =
static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * (__res + 1)));
size_t __res2 = _M_transform_helper(__c2, __lo, __res + 1);
return string_type(__c2);
}
return string_type(__c);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment