[multiple changes]
2003-02-04 Paolo Carlini <pcarlini@unitus.it> PR libstdc++/9538 * include/bits/streambuf.tcc (sputbackc): Access this->gptr()[-1] only if _M_in_beg < _M_in_cur. * testsuite/27_io/filebuf_virtuals.cc (test08): Add. 2003-02-04 Paolo Carlini <pcarlini@unitus.it> PR libstdc++/9507 * include/bits/fstream.tcc (open): If the 'ate' repositioning operation fails, calls close _and_ returns a null pointer to indicate failure (27.8.1.3,4). * testsuite/27_io/filebuf_members.cc (test_06): Add. 2003-02-04 Petur Runolfsson <peturr02@ru.is> * testsuite/27_io/filebuf_members.cc (test_04): Remove exit(0). From-SVN: r62388
This commit is contained in:
parent
09f26fb511
commit
7cd3907b57
@ -1,3 +1,22 @@
|
||||
2003-02-04 Paolo Carlini <pcarlini@unitus.it>
|
||||
|
||||
PR libstdc++/9538
|
||||
* include/bits/streambuf.tcc (sputbackc): Access
|
||||
this->gptr()[-1] only if _M_in_beg < _M_in_cur.
|
||||
* testsuite/27_io/filebuf_virtuals.cc (test08): Add.
|
||||
|
||||
2003-02-04 Paolo Carlini <pcarlini@unitus.it>
|
||||
|
||||
PR libstdc++/9507
|
||||
* include/bits/fstream.tcc (open): If the 'ate' repositioning
|
||||
operation fails, calls close _and_ returns a null pointer
|
||||
to indicate failure (27.8.1.3,4).
|
||||
* testsuite/27_io/filebuf_members.cc (test_06): Add.
|
||||
|
||||
2003-02-04 Petur Runolfsson <peturr02@ru.is>
|
||||
|
||||
* testsuite/27_io/filebuf_members.cc (test_04): Remove exit(0).
|
||||
|
||||
2002-02-04 Jonathan Wakely <redi@gcc.gnu.org>
|
||||
|
||||
* docs/html/27_io/howto.html: New section on stdio_filebuf.
|
||||
|
@ -103,7 +103,11 @@ namespace std
|
||||
|
||||
if ((__mode & ios_base::ate)
|
||||
&& this->seekoff(0, ios_base::end, __mode) < 0)
|
||||
this->close();
|
||||
{
|
||||
// 27.8.1.3,4
|
||||
this->close();
|
||||
return __ret;
|
||||
}
|
||||
|
||||
__ret = this;
|
||||
}
|
||||
|
@ -67,8 +67,7 @@ namespace std
|
||||
{
|
||||
int_type __ret;
|
||||
bool __testpos = _M_in_cur && _M_in_beg < _M_in_cur;
|
||||
bool __testne = _M_in_cur && !traits_type::eq(__c, this->gptr()[-1]);
|
||||
if (!__testpos || __testne)
|
||||
if (!__testpos || !traits_type::eq(__c, this->gptr()[-1]))
|
||||
__ret = this->pbackfail(traits_type::to_int_type(__c));
|
||||
else
|
||||
{
|
||||
|
@ -172,7 +172,6 @@ test_04()
|
||||
}
|
||||
|
||||
unlink("xxx");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// Charles Leggett <CGLeggett@lbl.gov>
|
||||
@ -191,6 +190,33 @@ void test_05()
|
||||
scratch_file.close();
|
||||
}
|
||||
|
||||
// libstdc++/9507
|
||||
void test_06()
|
||||
{
|
||||
bool test = true;
|
||||
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
|
||||
unlink("yyy");
|
||||
mkfifo("yyy", S_IRWXU);
|
||||
|
||||
if (!fork())
|
||||
{
|
||||
std::filebuf fbuf;
|
||||
fbuf.open("yyy", std::ios_base::in);
|
||||
fbuf.sgetc();
|
||||
fbuf.close();
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
std::filebuf fbuf;
|
||||
std::filebuf* r =
|
||||
fbuf.open("yyy", std::ios_base::out | std::ios_base::ate);
|
||||
VERIFY( !fbuf.is_open() );
|
||||
VERIFY( r == NULL );
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
@ -199,6 +225,7 @@ main()
|
||||
test_03();
|
||||
test_04();
|
||||
test_05();
|
||||
test_06();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -537,6 +537,39 @@ void test07()
|
||||
VERIFY( ob.getloc() == loc_de );
|
||||
}
|
||||
|
||||
class MyTraits : public std::char_traits<char>
|
||||
{
|
||||
public:
|
||||
static bool eq(char c1, char c2)
|
||||
{
|
||||
VERIFY( c1 >= 0 );
|
||||
VERIFY( c2 >= 0 );
|
||||
return std::char_traits<char>::eq(c1, c2);
|
||||
}
|
||||
};
|
||||
|
||||
class MyBuf : public std::basic_streambuf<char, MyTraits>
|
||||
{
|
||||
char buffer[8];
|
||||
|
||||
public:
|
||||
MyBuf()
|
||||
{
|
||||
std::memset(buffer, -1, sizeof(buffer));
|
||||
std::memset(buffer + 2, 0, 4);
|
||||
setg(buffer + 2, buffer + 2, buffer + 6);
|
||||
}
|
||||
};
|
||||
|
||||
// libstdc++/9538
|
||||
void test08()
|
||||
{
|
||||
bool test = true;
|
||||
|
||||
MyBuf mb;
|
||||
mb.sputbackc(0);
|
||||
}
|
||||
|
||||
main()
|
||||
{
|
||||
test01();
|
||||
@ -548,5 +581,6 @@ main()
|
||||
test06();
|
||||
|
||||
test07();
|
||||
test08();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user