diff options
author | Benjamin Kosnik <bkoz@redhat.com> | 2003-12-10 17:37:25 +0000 |
---|---|---|
committer | Benjamin Kosnik <bkoz@gcc.gnu.org> | 2003-12-10 17:37:25 +0000 |
commit | 35d6801ebe76223839d318e66696d28fe903c739 (patch) | |
tree | 2a2910ad8f33a15a4bfda984ed7d92eb00f023af /libstdc++-v3/testsuite/ext | |
parent | da5cafa77442b390371d8d6278746862cabea482 (diff) | |
download | gcc-35d6801ebe76223839d318e66696d28fe903c739.zip gcc-35d6801ebe76223839d318e66696d28fe903c739.tar.gz gcc-35d6801ebe76223839d318e66696d28fe903c739.tar.bz2 |
re PR libstdc++/10063 (stdio_filebuf broken)
2003-12-10 Benjamin Kosnik <bkoz@redhat.com>
PR libstdc++/10063
* config/io/basic_file_stdio.cc (__basic_file::sys_open): Sync.
* testsuite/ext/stdio_filebuf/char/10063-1.cc: New.
* testsuite/ext/stdio_filebuf/char/10063-2.cc: New.
From-SVN: r74505
Diffstat (limited to 'libstdc++-v3/testsuite/ext')
-rw-r--r-- | libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-1.cc | 54 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc | 57 |
2 files changed, 111 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-1.cc b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-1.cc new file mode 100644 index 0000000..3a60293 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-1.cc @@ -0,0 +1,54 @@ +// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation +// +// 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 +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +#include <cstdio> +#include <fstream> +#include <ext/stdio_filebuf.h> +#include <testsuite_hooks.h> + +void test1() +{ + using namespace std; + bool test __attribute__((unused)) = true; + + FILE* file = fopen("tmp_10063-1", "w"); + putc('0', file); + putc('1', file); + { + __gnu_cxx::stdio_filebuf<char> sbuf(file, ios_base::out); + sbuf.sputc('2'); + sbuf.sputc('3'); + } + putc('4', file); + fclose(file); + + filebuf fbuf; + fbuf.open("tmp_10063-1", ios_base::in); + char buf[10]; + streamsize n = fbuf.sgetn(buf, sizeof(buf)); + fbuf.close(); + + VERIFY(n == 5); + VERIFY(!memcmp(buf, "01234", 5)); +} + +int main() +{ + test1(); + return 0; +} diff --git a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc new file mode 100644 index 0000000..9786d70 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/10063-2.cc @@ -0,0 +1,57 @@ +// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation +// +// 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 +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +#include <cstdio> +#include <fstream> +#include <ext/stdio_filebuf.h> +#include <testsuite_hooks.h> + +void test2() +{ + using namespace std; + bool test __attribute__((unused)) = true; + + filebuf fbuf; + fbuf.open("tmp_10063-2", ios_base::out | ios_base::trunc); + fbuf.sputn("01234", 5); + fbuf.close(); + + FILE* file = fopen("tmp_10063-2", "r"); + int c = getc(file); + VERIFY(c == '0'); + c = getc(file); + VERIFY(c == '1'); + { + __gnu_cxx::stdio_filebuf<char> sbuf(file, ios_base::in); + c = sbuf.sbumpc(); + VERIFY(c == '2'); + c = sbuf.sbumpc(); + VERIFY(c == '3'); + c = sbuf.sbumpc(); + VERIFY(c == '4'); + c = sbuf.sgetc(); + VERIFY(c == EOF); + } + fclose(file); +} + +int main() +{ + test2(); + return 0; +} |