From 3f2ab949093481284eed98cf6a1a8694f7ddc174 Mon Sep 17 00:00:00 2001 From: paolo Date: Sat, 1 Nov 2008 16:17:42 +0000 Subject: [PATCH] 2008-11-01 Paolo Carlini PR libstdc++/37958 (cont) * include/bits/locale_facets.tcc (num_get<>::do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&): Fix again. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141517 138bc75d-0d04-0410-961f-82ee72b054a4 --- libstdc++-v3/ChangeLog | 6 +++ libstdc++-v3/include/bits/locale_facets.tcc | 69 ++++++++++++----------------- 2 files changed, 35 insertions(+), 40 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 06fd7a45de5..cf6d99dbabb 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2008-11-01 Paolo Carlini + + PR libstdc++/37958 (cont) + * include/bits/locale_facets.tcc (num_get<>::do_get(iter_type, + iter_type, ios_base&, ios_base::iostate&, bool&): Fix again. + 2008-11-01 Jonathan Wakely * include/bits/shared_ptr.h: Update comparisons to match WP. diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc index 1052e03890b..7dacbe5bc92 100644 --- a/libstdc++-v3/include/bits/locale_facets.tcc +++ b/libstdc++-v3/include/bits/locale_facets.tcc @@ -604,58 +604,47 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE const locale& __loc = __io._M_getloc(); const __cache_type* __lc = __uc(__loc); - bool __testf = false; - bool __donef = false; - bool __testt = false; - bool __donet = false; + bool __testf = true; + bool __testt = true; + bool __testeof = false; size_t __n; - bool __testeof = __beg == __end; - for (__n = 0; !__testeof; ++__n) - { - const char_type __c = *__beg; - - if (!__donef) + const size_t __lim = std::max(__lc->_M_falsename_size, + __lc->_M_truename_size); + for (__n = 0; __n < __lim; ++__n, ++__beg) + { + if (__beg == __end) { - if (__n < __lc->_M_falsename_size) - { - __testf = __c == __lc->_M_falsename[__n]; - if (!__testf) - __donef = true; - } - else - __donef = true; + __testeof = true; + break; } - if (!__donet) - { - if (__n < __lc->_M_truename_size) - { - __testt = __c == __lc->_M_truename[__n]; - if (!__testt) - __donet = true; - } - else - __donet = true; - } + const char_type __c = *__beg; - if (__donef && __donet) + if (__testf && __n < __lc->_M_falsename_size) + __testf = __c == __lc->_M_falsename[__n]; + + if (__testt && __n < __lc->_M_truename_size) + __testt = __c == __lc->_M_truename[__n]; + + if (!__testt && !__testf) break; - - if (++__beg == __end) - __testeof = true; - } - if (__testf && __n == __lc->_M_falsename_size) + + if ((!__testt && __n >= __lc->_M_falsename_size) + || (!__testf && __n >= __lc->_M_truename_size)) + break; + } + if (__testf && __n == __lc->_M_falsename_size && __n) { __v = false; if (__testt && __n == __lc->_M_truename_size) __err = ios_base::failbit; else - __err = __donet ? ios_base::goodbit : ios_base::eofbit; + __err = __testeof ? ios_base::eofbit : ios_base::goodbit; } - else if (__testt && __n == __lc->_M_truename_size) + else if (__testt && __n == __lc->_M_truename_size && __n) { __v = true; - __err = __donef ? ios_base::goodbit : ios_base::eofbit; + __err = __testeof ? ios_base::eofbit : ios_base::goodbit; } else { @@ -663,10 +652,10 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE // 23. Num_get overflow result. __v = false; __err = ios_base::failbit; - if (__testeof && __n) + if (__testeof) __err |= ios_base::eofbit; } - } + } return __beg; } -- 2.11.4.GIT