diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2011-12-02 17:23:08 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2011-12-02 17:23:08 +0000 |
commit | f5ca3c3408f6675f7171dd7fa7d827df8d851581 (patch) | |
tree | a4822e5a7adf21326918987da842b8755c35d0e9 /libstdc++-v3 | |
parent | 73cb28d7d09c925b39ee120308f5a3db3e0f9b30 (diff) | |
download | gcc-f5ca3c3408f6675f7171dd7fa7d827df8d851581.tar.gz |
iomanip (put_money): Fix thinko, use __err local, like in, eg, basic_ostream::_M_insert.
2011-12-02 Paolo Carlini <paolo.carlini@oracle.com>
* include/std/iomanip (put_money): Fix thinko, use __err local,
like in, eg, basic_ostream::_M_insert.
From-SVN: r181931
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 5 | ||||
-rw-r--r-- | libstdc++-v3/include/std/iomanip | 13 |
2 files changed, 13 insertions, 5 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 7ce62eae77b..0c7a62dc390 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2011-12-02 Paolo Carlini <paolo.carlini@oracle.com> + + * include/std/iomanip (put_money): Fix thinko, use __err local, + like in, eg, basic_ostream::_M_insert. + 2011-11-30 Benjamin Kosnik <bkoz@redhat.com> * acinclude.m4 (GLIBCXX_ENABLE_ATOMIC_BUILTINS): Remove diff --git a/libstdc++-v3/include/std/iomanip b/libstdc++-v3/include/std/iomanip index e725b2514df..840d7566209 100644 --- a/libstdc++-v3/include/std/iomanip +++ b/libstdc++-v3/include/std/iomanip @@ -282,7 +282,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } __catch(...) { __is._M_setstate(ios_base::badbit); } - if (ios_base::goodbit != __err) + if (__err) __is.setstate(__err); } return __is; @@ -312,15 +312,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typename basic_ostream<_CharT, _Traits>::sentry __cerb(__os); if (__cerb) { + ios_base::iostate __err = ios_base::goodbit; __try { typedef ostreambuf_iterator<_CharT, _Traits> _Iter; typedef money_put<_CharT, _Iter> _MoneyPut; + const _MoneyPut& __mp = use_facet<_MoneyPut>(__os.getloc()); - const _Iter __end = __mp.put(_Iter(__os.rdbuf()), __f._M_intl, - __os, __os.fill(), __f._M_mon); - if (__end.failed()) - __os.setstate(ios_base::badbit); + if (__mp.put(_Iter(__os.rdbuf()), __f._M_intl, __os, + __os.fill(), __f._M_mon).failed()) + __err |= ios_base::badbit; } __catch(__cxxabiv1::__forced_unwind&) { @@ -329,6 +330,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } __catch(...) { __os._M_setstate(ios_base::badbit); } + if (__err) + __os.setstate(__err); } return __os; } |