1// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com> 2 3// Copyright (C) 2001-2015 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 3, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20// 27.8.1.4 Overridden virtual functions 21 22#include <fstream> 23#include <testsuite_hooks.h> 24 25// @require@ %-*.tst %-*.txt 26// @diff@ %-*.tst %*.txt 27 28// NB: This test assumes that _M_buf_size == 40, and not the usual 29// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be 30// simulated a bit more readily. 31// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended. 32const int buffer_size = 8192; 33//const int buffer_size = 40; 34 35const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it 36const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create 37const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create 38 39class derived_filebuf: public std::filebuf 40{ 41 public: 42 void 43 set_size(int_type __size) { _M_buf_size = __size; } 44}; 45 46derived_filebuf fb_01; // in 47derived_filebuf fb_02; // out 48derived_filebuf fb_03; // in | out 49 50// Initialize filebufs to be the same size regardless of platform. 51void test03() 52{ 53 fb_01.set_size(buffer_size); 54 fb_02.set_size(buffer_size); 55 fb_03.set_size(buffer_size); 56} 57 58// Test overloaded virtual functions. 59void test05() 60{ 61 typedef std::filebuf::int_type int_type; 62 typedef std::filebuf::traits_type traits_type; 63 typedef std::filebuf::pos_type pos_type; 64 typedef std::filebuf::off_type off_type; 65 typedef size_t size_type; 66 67 bool test __attribute__((unused)) = true; 68 std::filebuf f_tmp; 69 70 fb_01.open(name_01, std::ios_base::in); 71 fb_02.open(name_02, std::ios_base::out | std::ios_base::trunc); 72 fb_03.open(name_03, std::ios_base::out | std::ios_base::in | std::ios_base::trunc); 73 74 // NB Have to close these suckers. . . 75 // filebuf_type* close() 76 fb_01.close(); 77 fb_02.close(); 78 fb_03.close(); 79 VERIFY( !fb_01.is_open() ); 80 VERIFY( !fb_02.is_open() ); 81 VERIFY( !fb_03.is_open() ); 82} 83 84int main() 85{ 86 test03(); 87 test05(); 88 return 0; 89} 90