locale_facets.tcc (time_put::put): Absolutely avoid dereferencing end iterators; clean up.

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.

From-SVN: r73035
This commit is contained in:
Paolo Carlini 2003-10-29 12:21:58 +00:00 committed by Paolo Carlini
parent 9c9081ae91
commit 6bf0b59cbf
2 changed files with 24 additions and 17 deletions

View File

@ -1,3 +1,11 @@
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> 2003-10-29 Paolo Carlini <pcarlini@suse.de>
* include/bits/locale_facets.tcc: Remove some unnecessary * include/bits/locale_facets.tcc: Remove some unnecessary

View File

@ -219,10 +219,9 @@ namespace std
{ {
// Scientific notation. // Scientific notation.
__xtrc += __e ? _S_atoms_in[_S_ie] : _S_atoms_in[_S_iE]; __xtrc += __e ? _S_atoms_in[_S_ie] : _S_atoms_in[_S_iE];
++__beg;
// Remove optional plus or minus sign, if they exist. // 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]); const bool __plus = __traits_type::eq(*__beg, __lit[_S_iplus]);
if (__plus || __traits_type::eq(*__beg, __lit[_S_iminus])) 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])) if (__beg != __end && __traits_type::eq(*__beg, __lit[_S_izero]))
{ {
__xtrc += _S_atoms_in[_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]); const bool __x = __traits_type::eq(*__beg, __lit[_S_ix]);
if (__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(); const locale __loc = __io.getloc();
ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc); ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
while (__beg != __end) for (; __beg != __end; ++__beg)
{ {
const _CharT __tmp = *__beg; if (__ctype.narrow(*__beg, 0) != '%')
++__beg; {
if (__ctype.narrow(__tmp, 0) == '%' && __beg != __end) *__s = *__beg;
++__s;
}
else if (++__beg != __end)
{ {
char __format; char __format;
char __mod = 0; char __mod = 0;
const char __c = __ctype.narrow(*__beg, 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; __mod = __c;
__format = __ctype.narrow(*__beg, 0); __format = __ctype.narrow(*__beg, 0);
++__beg;
} }
else else
__format = __c; break;
__s = this->do_put(__s, __io, __fill, __tm, __format, __mod); __s = this->do_put(__s, __io, __fill, __tm,
__format, __mod);
} }
else else
{ break;
*__s = __tmp;
++__s;
}
} }
return __s; return __s;
} }