]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/27_io/filebuf_members.cc
*.cc: Remove spaces, make sure testcases return zero.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 27_io / filebuf_members.cc
CommitLineData
ba5fbc87
BK
1// Copyright (C) 2000 Free Software Foundation, Inc.
2//
3// This file is part of the GNU ISO C++ Library. This library is free
4// software; you can redistribute it and/or modify it under the
5// terms of the GNU General Public License as published by the
6// Free Software Foundation; either version 2, or (at your option)
7// any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License along
15// with this library; see the file COPYING. If not, write to the Free
16// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
17// USA.
18
19// 27.8.1.3 filebuf member functions
db353c2c
GDR
20// @require@ %-*.tst %-*.txt
21// @diff@ %-*.tst %-*.txt
ba5fbc87
BK
22
23// various tests for filebuf::open() and filebuf::close() including
24// the non-portable functionality in the libstdc++-v3 IO library
25
26#include <fstream>
27#include <cassert>
28#include <unistd.h>
29#include <fcntl.h>
aa1b2f7d 30#include <debug_assert.h>
ba5fbc87
BK
31
32// verify that std::filebuf doesn't close files that it didn't open
33// when using the following std::filebuf ctor:
34//
35// std::filebuf(int __fd,
36// const char* __unused,
37// ios_base::openmode __mode);
38//
39// thanks to "George T. Talbot" <george@moberg.com> for uncovering
40// this bug/situation.
41
db353c2c
GDR
42const char name_01[] = "filebuf_members-1.tst";
43const char name_02[] = "filebuf_members-1.txt";
ba5fbc87
BK
44
45int
46test_01()
47{
48 bool test = true;
49 int close_num;
50
51 // read (ext)
5fa9abc3
BK
52 FILE* f2 = fopen(name_01, "r");
53 VERIFY( f2 != NULL );
ba5fbc87 54 {
39003c99 55 std::filebuf fb(f2, std::ios_base::in, 512);
ba5fbc87 56 }
5fa9abc3 57 close_num = fclose(f2);
aa1b2f7d 58 VERIFY( close_num == 0 );
ba5fbc87
BK
59
60
61 // read (standard)
644638bc 62 FILE* f = fopen(name_01, "r");
aa1b2f7d 63 VERIFY( f != NULL );
ba5fbc87 64 {
644638bc 65 std::ifstream ifstream1(name_01);
aa1b2f7d 66 VERIFY( ifstream1.is_open() );
ba5fbc87 67 std::ios_base::iostate st01 = ifstream1.rdstate();
aa1b2f7d 68 VERIFY( st01 == std::ios_base::goodbit );
ba5fbc87 69 }
ba5fbc87 70 close_num = fclose(f);
aa1b2f7d 71 VERIFY( close_num == 0 );
ba5fbc87
BK
72
73
74#ifdef DEBUG_ASSERT
75 assert(test);
76#endif
77
78 return test;
79}
80
81
82int
83main()
84{
85 test_01();
86 return 0;
87}