+2003-02-06 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-06 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-06 Petur Runolfsson <peturr02@ru.is>
+
+ * testsuite/27_io/filebuf_members.cc (test_04): Remove exit(0).
+
2003-02-05 Benjamin Kosnik <bkoz@redhat.com>
* configure.in (libtool_VERSION): To 5:3:0.
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;
}
}
{
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
{
}
unlink("xxx");
- exit(0);
}
// Charles Leggett <CGLeggett@lbl.gov>
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()
{
test_03();
test_04();
test_05();
+ test_06();
return 0;
}
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();
test06();
test07();
+ test08();
return 0;
}