2003-10-29 Paolo Carlini <pcarlini@suse.de>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Oct 2003 12:21:58 +0000 (12:21 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Oct 2003 12:21:58 +0000 (12:21 +0000)
* include/bits/locale_facets.tcc (time_put::put): Absolutely
avoid dereferencing end iterators; clean up.

* include/bits/locale_facets.tcc (num_get::_M_extract_float,
num_get::_M_extract_int): Minor tweak.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@73035 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/locale_facets.tcc

index f5b6c79..264136d 100644 (file)
@@ -1,5 +1,13 @@
 2003-10-29  Paolo Carlini  <pcarlini@suse.de>
 
+       * include/bits/locale_facets.tcc (time_put::put): Absolutely
+       avoid dereferencing end iterators; clean up.
+
+       * include/bits/locale_facets.tcc (num_get::_M_extract_float,
+       num_get::_M_extract_int): Minor tweak.
+
+2003-10-29  Paolo Carlini  <pcarlini@suse.de>
+
        * include/bits/locale_facets.tcc: Remove some unnecessary
        includes.
        * config/locale/generic/c_locale.cc: Include <cerrno> here.
index 6e1760d..681a4c3 100644 (file)
@@ -219,10 +219,9 @@ namespace std
            {
              // Scientific notation.
              __xtrc += __e ? _S_atoms_in[_S_ie] : _S_atoms_in[_S_iE];
-             ++__beg;
              
              // Remove optional plus or minus sign, if they exist.
-             if (__beg != __end)
+             if (++__beg != __end)
                {
                  const bool __plus = __traits_type::eq(*__beg, __lit[_S_iplus]);
                  if (__plus || __traits_type::eq(*__beg, __lit[_S_iminus]))
@@ -327,9 +326,8 @@ namespace std
          if (__beg != __end && __traits_type::eq(*__beg, __lit[_S_izero]))
            {
              __xtrc += _S_atoms_in[_S_izero];
-             ++__beg; 
              
-             if (__beg != __end)
+             if (++__beg != __end)
                {
                  const bool __x = __traits_type::eq(*__beg, __lit[_S_ix]);
                  if (__x || __traits_type::eq(*__beg, __lit[_S_iX]))
@@ -1995,31 +1993,32 @@ namespace std
     {
       const locale __loc = __io.getloc();
       ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
-      while (__beg != __end)
+      for (; __beg != __end; ++__beg)
        {
-         const _CharT __tmp = *__beg;
-         ++__beg;
-         if (__ctype.narrow(__tmp, 0) == '%' && __beg != __end)
+         if (__ctype.narrow(*__beg, 0) != '%')
+           {
+             *__s = *__beg;
+             ++__s;
+           }
+         else if (++__beg != __end)
            {
              char __format;
              char __mod = 0;
              const char __c = __ctype.narrow(*__beg, 0);
-             ++__beg;
-             if (__c == 'E' || __c == 'O')
+             if (__c != 'E' && __c != 'O')
+               __format = __c;
+             else if (++__beg != __end)
                {
                  __mod = __c;
                  __format = __ctype.narrow(*__beg, 0);
-                 ++__beg;
                }
              else
-               __format = __c;
-             __s = this->do_put(__s, __io, __fill, __tm, __format, __mod);
+               break;
+             __s = this->do_put(__s, __io, __fill, __tm,
+                                __format, __mod);
            }
          else
-           {
-             *__s = __tmp;
-             ++__s;
-           }
+           break;
        }
       return __s;
     }