From ba5fbc87e3cdefde1e6b814f2834d31d43c4f58f Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik Date: Sat, 24 Jun 2000 00:53:06 +0000 Subject: [PATCH] filebuf_members.cc: New file. 2000-06-23 Benjamin Kosnik * 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. From-SVN: r34672 --- libstdc++-v3/testsuite/27_io/filebuf_members-1.tst | 0 libstdc++-v3/testsuite/27_io/filebuf_members.cc | 93 ++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 libstdc++-v3/testsuite/27_io/filebuf_members-1.tst create mode 100644 libstdc++-v3/testsuite/27_io/filebuf_members.cc 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 0000000..e69de29 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 0000000..d26fd3b --- /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 +#include +#include +#include + + +// 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" 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; +} + + + + -- 2.7.4