mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-30 07:14:09 +08:00
re PR libstdc++/9322 (return value of basic_streambuf<>::getloc affected by locale::global)
2003-01-23 Petur Runolfsson <peturr02@ru.is> PR libstdc++/9322 * include/std/std_streambuf.h (basic_streambuf::basic_streambuf, basic_streambuf::~basic_streambuf, basic_streambuf::getloc, basic_streambuf::imbue): Remove _M_buf_locale_init use. * include/bits/fstream.tcc (basic_filebuf::imbue): Likewise * testsuite/27_io/filebuf_virtuals.cc (test08): Add. * testsuite/27_io/streambuf_members.cc (test08): Add. * testsuite/27_io/stringbuf_virtuals.cc (test08): Add. From-SVN: r61678
This commit is contained in:
parent
806e09354f
commit
1ceb90cfa1
@ -1,3 +1,16 @@
|
||||
2003-01-23 Petur Runolfsson <peturr02@ru.is>
|
||||
|
||||
PR libstdc++/9322
|
||||
* include/std/std_streambuf.h
|
||||
(basic_streambuf::basic_streambuf,
|
||||
basic_streambuf::~basic_streambuf,
|
||||
basic_streambuf::getloc, basic_streambuf::imbue):
|
||||
Remove _M_buf_locale_init
|
||||
* include/bits/fstream.tcc (basic_filebuf::imbue): Likewise
|
||||
* testsuite/27_io/filebuf_virtuals.cc (test08): Add.
|
||||
* testsuite/27_io/streambuf_members.cc (test08): Add.
|
||||
* testsuite/27_io/stringbuf_virtuals.cc (test08): Add.
|
||||
|
||||
2003-01-23 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
Revert include ordering.
|
||||
|
@ -477,10 +477,7 @@ namespace std
|
||||
bool __testbeg = gptr() == eback() && pptr() == pbase();
|
||||
|
||||
if (__testbeg && this->_M_buf_locale != __loc)
|
||||
{
|
||||
this->_M_buf_locale = __loc;
|
||||
this->_M_buf_locale_init = true;
|
||||
}
|
||||
this->_M_buf_locale = __loc;
|
||||
|
||||
// NB this may require the reconversion of previously
|
||||
// converted chars. This in turn may cause the reconstruction
|
||||
|
@ -1,6 +1,6 @@
|
||||
// Stream buffer classes -*- C++ -*-
|
||||
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
@ -224,13 +224,6 @@ namespace std
|
||||
*/
|
||||
locale _M_buf_locale;
|
||||
|
||||
/**
|
||||
* @if maint
|
||||
* True iff locale is initialized.
|
||||
* @endif
|
||||
*/
|
||||
bool _M_buf_locale_init;
|
||||
|
||||
//@{
|
||||
/**
|
||||
* @if maint
|
||||
@ -364,7 +357,6 @@ namespace std
|
||||
_M_buf_size = 0;
|
||||
_M_buf_size_opt = 0;
|
||||
_M_mode = ios_base::openmode(0);
|
||||
_M_buf_locale_init = false;
|
||||
}
|
||||
|
||||
// [27.5.2.2.1] locales
|
||||
@ -393,12 +385,7 @@ namespace std
|
||||
*/
|
||||
locale
|
||||
getloc() const
|
||||
{
|
||||
if (_M_buf_locale_init)
|
||||
return _M_buf_locale;
|
||||
else
|
||||
return locale();
|
||||
}
|
||||
{ return _M_buf_locale; }
|
||||
|
||||
// [27.5.2.2.2] buffer management and positioning
|
||||
//@{
|
||||
@ -584,7 +571,7 @@ namespace std
|
||||
_M_buf_unified(false), _M_in_beg(0), _M_in_cur(0), _M_in_end(0),
|
||||
_M_out_beg(0), _M_out_cur(0), _M_out_end(0),
|
||||
_M_mode(ios_base::openmode(0)), _M_buf_locale(locale()),
|
||||
_M_buf_locale_init(false), _M_pback_cur_save(0), _M_pback_end_save(0),
|
||||
_M_pback_cur_save(0), _M_pback_end_save(0),
|
||||
_M_pback_init(false)
|
||||
{ }
|
||||
|
||||
@ -700,7 +687,6 @@ namespace std
|
||||
virtual void
|
||||
imbue(const locale& __loc)
|
||||
{
|
||||
_M_buf_locale_init = true;
|
||||
if (_M_buf_locale != __loc)
|
||||
_M_buf_locale = __loc;
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
@ -21,6 +21,7 @@
|
||||
// 27.8.1.4 Overridden virtual functions
|
||||
|
||||
#include <fstream>
|
||||
#include <locale>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
// @require@ %-*.tst %-*.txt
|
||||
@ -514,6 +515,28 @@ void test06()
|
||||
VERIFY( buffer[0] == 'a' );
|
||||
}
|
||||
|
||||
// libstdc++/9322
|
||||
void test07()
|
||||
{
|
||||
using std::locale;
|
||||
bool test = true;
|
||||
|
||||
locale loc;
|
||||
std::filebuf ob;
|
||||
VERIFY( ob.getloc() == loc );
|
||||
|
||||
locale::global(locale("en_US"));
|
||||
VERIFY( ob.getloc() == loc );
|
||||
|
||||
locale loc_de ("de_DE");
|
||||
locale ret = ob.pubimbue(loc_de);
|
||||
VERIFY( ob.getloc() == loc_de );
|
||||
VERIFY( ret == loc );
|
||||
|
||||
locale::global(loc);
|
||||
VERIFY( ob.getloc() == loc_de );
|
||||
}
|
||||
|
||||
main()
|
||||
{
|
||||
test01();
|
||||
@ -524,5 +547,6 @@ main()
|
||||
test05();
|
||||
test06();
|
||||
|
||||
test07();
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
// 1999-10-11 bkoz
|
||||
|
||||
// Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
@ -364,6 +364,28 @@ test07()
|
||||
VERIFY(out.good());
|
||||
}
|
||||
|
||||
// libstdc++/9322
|
||||
void test08()
|
||||
{
|
||||
using std::locale;
|
||||
bool test = true;
|
||||
|
||||
locale loc;
|
||||
testbuf2 ob;
|
||||
VERIFY( ob.getloc() == loc );
|
||||
|
||||
locale::global(locale("en_US"));
|
||||
VERIFY( ob.getloc() == loc );
|
||||
|
||||
locale loc_de ("de_DE");
|
||||
locale ret = ob.pubimbue(loc_de);
|
||||
VERIFY( ob.getloc() == loc_de );
|
||||
VERIFY( ret == loc );
|
||||
|
||||
locale::global(loc);
|
||||
VERIFY( ob.getloc() == loc_de );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
@ -374,5 +396,6 @@ int main()
|
||||
test05();
|
||||
|
||||
test07();
|
||||
test08();
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
@ -70,6 +70,28 @@ void test02(std::stringbuf& in, bool pass)
|
||||
VERIFY( p == bad );
|
||||
}
|
||||
|
||||
// libstdc++/9322
|
||||
void test08()
|
||||
{
|
||||
using std::locale;
|
||||
bool test = true;
|
||||
|
||||
locale loc;
|
||||
std::stringbuf ob;
|
||||
VERIFY( ob.getloc() == loc );
|
||||
|
||||
locale::global(locale("en_US"));
|
||||
VERIFY( ob.getloc() == loc );
|
||||
|
||||
locale loc_de ("de_DE");
|
||||
locale ret = ob.pubimbue(loc_de);
|
||||
VERIFY( ob.getloc() == loc_de );
|
||||
VERIFY( ret == loc );
|
||||
|
||||
locale::global(loc);
|
||||
VERIFY( ob.getloc() == loc_de );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
using namespace std;
|
||||
@ -83,5 +105,6 @@ int main()
|
||||
test02(in2, false);
|
||||
test02(in3, false);
|
||||
|
||||
test08();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user