re PR libstdc++/6518 (???)
2002-05-15 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/6518 * include/bits/ostream.tcc (ostream::operator<<(const char*)): Fix for null case. (ostream::operator<<(const _CharT*)): Same. (ostream<char>::operator<<(const char*)): Same. * testsuite/27_io/ostream_inserter_char.cc (test07): Add test. From-SVN: r53489
This commit is contained in:
parent
fb5b4dfdcb
commit
7bd9b6d491
@ -1,3 +1,12 @@
|
|||||||
|
2002-05-15 Benjamin Kosnik <bkoz@redhat.com>
|
||||||
|
|
||||||
|
PR libstdc++/6518
|
||||||
|
* include/bits/ostream.tcc (ostream::operator<<(const char*)): Fix
|
||||||
|
for null case.
|
||||||
|
(ostream::operator<<(const _CharT*)): Same.
|
||||||
|
(ostream<char>::operator<<(const char*)): Same.
|
||||||
|
* testsuite/27_io/ostream_inserter_char.cc (test07): Add test.
|
||||||
|
|
||||||
2002-05-15 Benjamin Kosnik <bkoz@redhat.com>
|
2002-05-15 Benjamin Kosnik <bkoz@redhat.com>
|
||||||
|
|
||||||
PR libstdc++/6594
|
PR libstdc++/6594
|
||||||
|
@ -545,7 +545,8 @@ namespace std
|
|||||||
{
|
{
|
||||||
streamsize __w = __out.width();
|
streamsize __w = __out.width();
|
||||||
_CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w));
|
_CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w));
|
||||||
streamsize __len = static_cast<streamsize>(_Traits::length(__s));
|
streamsize __len = __s
|
||||||
|
? static_cast<streamsize>(_Traits::length(__s)) : 0;
|
||||||
if (__w > __len)
|
if (__w > __len)
|
||||||
{
|
{
|
||||||
__pad(__out, __out.fill(), __pads, __s, __w, __len, false);
|
__pad(__out, __out.fill(), __pads, __s, __w, __len, false);
|
||||||
@ -554,6 +555,8 @@ namespace std
|
|||||||
}
|
}
|
||||||
__out.write(__s, __len);
|
__out.write(__s, __len);
|
||||||
__out.width(0);
|
__out.width(0);
|
||||||
|
if (!__len)
|
||||||
|
__out.setstate(ios_base::badbit);
|
||||||
}
|
}
|
||||||
catch(exception& __fail)
|
catch(exception& __fail)
|
||||||
{
|
{
|
||||||
@ -575,14 +578,14 @@ namespace std
|
|||||||
#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
|
#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
|
||||||
// 167. Improper use of traits_type::length()
|
// 167. Improper use of traits_type::length()
|
||||||
// Note that this is only in 'Review' status.
|
// Note that this is only in 'Review' status.
|
||||||
typedef char_traits<char> __ctraits_type;
|
typedef char_traits<char> __traits_type;
|
||||||
#endif
|
#endif
|
||||||
typename __ostream_type::sentry __cerb(__out);
|
typename __ostream_type::sentry __cerb(__out);
|
||||||
if (__cerb)
|
if (__cerb)
|
||||||
{
|
{
|
||||||
size_t __clen = __ctraits_type::length(__s);
|
size_t __clen = __s ? __traits_type::length(__s) : 0;
|
||||||
_CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * (__clen + 1)));
|
_CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * (__clen + 1)));
|
||||||
for (size_t __i = 0; __i <= __clen; ++__i)
|
for (size_t __i = 0; __i < __clen; ++__i)
|
||||||
__ws[__i] = __out.widen(__s[__i]);
|
__ws[__i] = __out.widen(__s[__i]);
|
||||||
_CharT* __str = __ws;
|
_CharT* __str = __ws;
|
||||||
|
|
||||||
@ -600,6 +603,8 @@ namespace std
|
|||||||
}
|
}
|
||||||
__out.write(__str, __len);
|
__out.write(__str, __len);
|
||||||
__out.width(0);
|
__out.width(0);
|
||||||
|
if (!__len)
|
||||||
|
__out.setstate(ios_base::badbit);
|
||||||
}
|
}
|
||||||
catch(exception& __fail)
|
catch(exception& __fail)
|
||||||
{
|
{
|
||||||
@ -626,7 +631,8 @@ namespace std
|
|||||||
{
|
{
|
||||||
streamsize __w = __out.width();
|
streamsize __w = __out.width();
|
||||||
char* __pads = static_cast<char*>(__builtin_alloca(__w));
|
char* __pads = static_cast<char*>(__builtin_alloca(__w));
|
||||||
streamsize __len = static_cast<streamsize>(_Traits::length(__s));
|
streamsize __len = __s ?
|
||||||
|
static_cast<streamsize>(_Traits::length(__s)) : 0;
|
||||||
if (__w > __len)
|
if (__w > __len)
|
||||||
{
|
{
|
||||||
__pad(__out, __out.fill(), __pads, __s, __w, __len, false);
|
__pad(__out, __out.fill(), __pads, __s, __w, __len, false);
|
||||||
@ -635,6 +641,8 @@ namespace std
|
|||||||
}
|
}
|
||||||
__out.write(__s, __len);
|
__out.write(__s, __len);
|
||||||
__out.width(0);
|
__out.width(0);
|
||||||
|
if (!__len)
|
||||||
|
__out.setstate(ios_base::badbit);
|
||||||
}
|
}
|
||||||
catch(exception& __fail)
|
catch(exception& __fail)
|
||||||
{
|
{
|
||||||
|
@ -289,6 +289,33 @@ void test07()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test08()
|
||||||
|
{
|
||||||
|
bool test = true;
|
||||||
|
char* pt = NULL;
|
||||||
|
|
||||||
|
// 1
|
||||||
|
std::ostringstream oss;
|
||||||
|
oss << pt << std::endl;
|
||||||
|
VERIFY( oss.bad() );
|
||||||
|
VERIFY( oss.str().size() == 0 );
|
||||||
|
|
||||||
|
#if _GLIBCPP_USE_WCHAR_T
|
||||||
|
// 2
|
||||||
|
std::wostringstream woss;
|
||||||
|
woss << pt << std::endl;
|
||||||
|
VERIFY( woss.bad() );
|
||||||
|
VERIFY( woss.str().size() == 0 );
|
||||||
|
|
||||||
|
// 3
|
||||||
|
wchar_t* wt = NULL;
|
||||||
|
woss.clear();
|
||||||
|
woss << wt << std::endl;
|
||||||
|
VERIFY( woss.bad() );
|
||||||
|
VERIFY( woss.str().size() == 0 );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
test01();
|
test01();
|
||||||
@ -298,5 +325,6 @@ int main()
|
|||||||
test05();
|
test05();
|
||||||
test06();
|
test06();
|
||||||
test07();
|
test07();
|
||||||
|
test08();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user