aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@unitus.it>2001-12-07 20:00:07 +0100
committerPaolo Carlini <paolo@gcc.gnu.org>2001-12-07 19:00:07 +0000
commit46d360629c51103214a197e1b208fc365c9e55db (patch)
tree29d4ee730abcfab05c681ce96fea14c67deb9f0d
parent9975c6d4289c31434ee9dccf72cfbd84c1778bf3 (diff)
downloadgcc-46d360629c51103214a197e1b208fc365c9e55db.zip
gcc-46d360629c51103214a197e1b208fc365c9e55db.tar.gz
gcc-46d360629c51103214a197e1b208fc365c9e55db.tar.bz2
locale_facets.tcc (num_put::_M_convert_float): Extend comment, reduce __cs_size for non-fixed outputs.
2001-12-07 Paolo Carlini <pcarlini@unitus.it> * include/bits/locale_facets.tcc (num_put::_M_convert_float): Extend comment, reduce __cs_size for non-fixed outputs. From-SVN: r47767
-rw-r--r--libstdc++-v3/ChangeLog5
-rw-r--r--libstdc++-v3/include/bits/locale_facets.tcc8
2 files changed, 11 insertions, 2 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 26cad18..4e32aa3 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,4 +1,9 @@
2001-12-07 Paolo Carlini <pcarlini@unitus.it>
+
+ * include/bits/locale_facets.tcc (num_put::_M_convert_float):
+ Extend comment, reduce __cs_size for non-fixed outputs.
+
+2001-12-07 Paolo Carlini <pcarlini@unitus.it>
* include/bits/basic_string.tcc (_M_mutate): Fix typo
in the previous check in.
diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc
index 363ff8b..51bc9ed 100644
--- a/libstdc++-v3/include/bits/locale_facets.tcc
+++ b/libstdc++-v3/include/bits/locale_facets.tcc
@@ -762,9 +762,13 @@ namespace std
// Consider the possibility of long ios_base::fixed outputs
const bool __fixed = __io.flags() & ios_base::fixed;
const int __max_exp = numeric_limits<_ValueT>::max_exponent10;
- // XXX Why + 4? Why * 4? What's going on? Who's on first?
+ // ios_base::fixed outputs may need up to __max_exp+1 chars
+ // for the integer part + up to __max_digits chars for the
+ // fractional part + 3 chars for sign, decimal point, '\0'. On
+ // the other hand, for non-fixed outputs __max_digits*3 chars
+ // are largely sufficient.
const int __cs_size = __fixed ? __max_exp + __max_digits + 4
- : __max_digits * 4;
+ : __max_digits * 3;
char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
int __len;