From: Paolo Carlini Date: Sun, 25 Jan 2004 13:13:41 +0000 (+0000) Subject: re PR libstdc++/13650 (string::compare should not (always) use traits_type::length()) X-Git-Tag: releases/gcc-3.3.3~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af826430ad680b0c66b81602f32d2adc0477db8a;p=thirdparty%2Fgcc.git re PR libstdc++/13650 (string::compare should not (always) use traits_type::length()) 2004-01-25 Paolo Carlini PR libstdc++/13650 * include/bits/basic_string.tcc (compare(size_type, size_type, const _CharT*, size_type)): Implement correctly the resolution of DR 5: basically, s is a char array, -not- a C string. * include/bits/basic_string.tcc (_M_clone): Null-terminate. From-SVN: r76555 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 5df60196bc65..a1e5a0031251 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,12 @@ +2004-01-25 Paolo Carlini + + PR libstdc++/13650 + * include/bits/basic_string.tcc (compare(size_type, size_type, + const _CharT*, size_type)): Implement correctly the resolution + of DR 5: basically, s is a char array, -not- a C string. + + * include/bits/basic_string.tcc (_M_clone): Null-terminate. + 2004-01-19 Paolo Carlini PR libstdc++/12352 diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc index d3f1e8e36059..d5fc337ecabf 100644 --- a/libstdc++-v3/include/bits/basic_string.tcc +++ b/libstdc++-v3/include/bits/basic_string.tcc @@ -592,6 +592,7 @@ namespace std } } __r->_M_length = _M_length; + __r->_M_refdata()[_M_length] = _Rep::_S_terminal; return __r->_M_refdata(); } @@ -1033,12 +1034,11 @@ namespace std if (__pos > __size) __throw_out_of_range("basic_string::compare"); - size_type __osize = std::min(traits_type::length(__s), __n2); size_type __rsize = std::min(size_type(__size - __pos), __n1); - size_type __len = std::min(__rsize, __osize); + size_type __len = std::min(__rsize, __n2); int __r = traits_type::compare(_M_data() + __pos, __s, __len); if (!__r) - __r = __rsize - __osize; + __r = __rsize - __n2; return __r; }