summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2011-12-02 17:23:08 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2011-12-02 17:23:08 +0000
commitf5ca3c3408f6675f7171dd7fa7d827df8d851581 (patch)
treea4822e5a7adf21326918987da842b8755c35d0e9
parent73cb28d7d09c925b39ee120308f5a3db3e0f9b30 (diff)
downloadgcc-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
-rw-r--r--libstdc++-v3/ChangeLog5
-rw-r--r--libstdc++-v3/include/std/iomanip13
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;
}