summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2000-06-24 00:53:06 +0000
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2000-06-24 00:53:06 +0000
commite4a97b07c8ec7bed802dd223394d60096caf7eac (patch)
tree20f0cd939103aafb88f929fe337bffa1e8060398 /libstdc++-v3
parent3ee5428ec45658db1dc00a2b9bdef08ad3eb5bcb (diff)
downloadgcc-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.tst0
-rw-r--r--libstdc++-v3/testsuite/27_io/filebuf_members.cc93
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;
+}
+
+
+
+