diff options
author | bkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-06-24 00:53:06 +0000 |
---|---|---|
committer | bkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-06-24 00:53:06 +0000 |
commit | e4a97b07c8ec7bed802dd223394d60096caf7eac (patch) | |
tree | 20f0cd939103aafb88f929fe337bffa1e8060398 /libstdc++-v3 | |
parent | 3ee5428ec45658db1dc00a2b9bdef08ad3eb5bcb (diff) | |
download | gcc-e4a97b07c8ec7bed802dd223394d60096caf7eac.tar.gz |
2000-06-23 Benjamin Kosnik <bkoz@purist.soma.redhat.com>
* testsuite/27_io/filebuf_members.cc: New file.
* testsuite/27_io/filebuf_members-1.tst: New file.
* bits/fstream.tcc (basic_filebuf::basic_filebuf(fd)): Use it.
(basic_filebuf::close): Use it.
* bits/std_fstream.h (basic_filebuf): Remove default arguments for
filebuf ctor.
(basic_filebuf): Add _M_fileno_based data member.
* bits/std_fstream.h: Formatting tweaks.
* testsuite/27_io/ofstream_members.cc: New file.
* testsuite/27_io/ofstream_members-1.tst: New file.
* testsuite/27_io/ifstream_members.cc: New file.
* testsuite/27_io/ifstream_members-1.tst: New file.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34672 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/testsuite/27_io/filebuf_members-1.tst | 0 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/27_io/filebuf_members.cc | 93 |
2 files changed, 93 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/27_io/filebuf_members-1.tst b/libstdc++-v3/testsuite/27_io/filebuf_members-1.tst new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/libstdc++-v3/testsuite/27_io/filebuf_members-1.tst diff --git a/libstdc++-v3/testsuite/27_io/filebuf_members.cc b/libstdc++-v3/testsuite/27_io/filebuf_members.cc new file mode 100644 index 00000000000..d26fd3b87c6 --- /dev/null +++ b/libstdc++-v3/testsuite/27_io/filebuf_members.cc @@ -0,0 +1,93 @@ +// Copyright (C) 2000 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 +// 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. + +// 27.8.1.3 filebuf member functions + +// various tests for filebuf::open() and filebuf::close() including +// the non-portable functionality in the libstdc++-v3 IO library + +#include <fstream> +#include <cassert> +#include <unistd.h> +#include <fcntl.h> + + +// verify that std::filebuf doesn't close files that it didn't open +// when using the following std::filebuf ctor: +// +// std::filebuf(int __fd, +// const char* __unused, +// ios_base::openmode __mode); +// +// thanks to "George T. Talbot" <george@moberg.com> for uncovering +// this bug/situation. + +const char name_01[] = "testsuite/filebuf_members-1.tst"; +const char name_02[] = "testsuite/filebuf_members-1.txt"; + +int +test_01() +{ + bool test = true; + int close_num; + + // read (ext) + int fd = open(name01, O_RDONLY); + test &= fd >= 0; + + { + std::filebuf fb(fd, "double_read", std::ios_base::in); + } + + close_num = close(fd); + test &= close_num == 0; + + + // read (standard) + FILE* f = fopen(name01, "r"); + test &= !f; + + { + std::ifstream ifstream1(name02); + test &= ifstream1.is_open(); + std::ios_base::iostate st01 = ifstream1.rdstate(); + test &= st01 == std::ios_base::goodbit; + } + + close_num = fclose(f); + test &= close_num == 0; + + +#ifdef DEBUG_ASSERT + assert(test); +#endif + + return test; +} + + +int +main() +{ + test_01(); + return 0; +} + + + + |