filebuf_members.cc: New file.
authorBenjamin Kosnik <bkoz@gcc.gnu.org>
Sat, 24 Jun 2000 00:53:06 +0000 (00:53 +0000)
committerBenjamin Kosnik <bkoz@gcc.gnu.org>
Sat, 24 Jun 2000 00:53:06 +0000 (00:53 +0000)
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.

From-SVN: r34672

libstdc++-v3/testsuite/27_io/filebuf_members-1.tst [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/filebuf_members.cc [new file with mode: 0644]

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 (file)
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 (file)
index 0000000..d26fd3b
--- /dev/null
@@ -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;
+}
+
+
+
+