1// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com> 2 3// Copyright (C) 2001, 2002, 2003, 2004, 2009 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// { dg-require-fileio "" } 23 24#include <fstream> 25#include <locale> 26#include <testsuite_hooks.h> 27 28const char name_07[] = "filebuf_virtuals-7.txt"; // empty file, need to create 29 30class errorcvt : public std::codecvt<char, char, mbstate_t> 31{ 32protected: 33 std::codecvt_base::result 34 do_out(mbstate_t&, const char* from, const char*, 35 const char*& from_next, char* to, char*, 36 char*& to_next) const 37 { 38 from_next = from; 39 to_next = to; 40 return std::codecvt<char, char, mbstate_t>::error; 41 } 42 43 virtual bool do_always_noconv() const throw() 44 { 45 return false; 46 } 47}; 48 49// libstdc++/9182 50// basic_filebuf<>::sync and overflow do not write out any characters 51// if codecvt<>::out returns error 52void test13() 53{ 54 using namespace std; 55 bool test __attribute__((unused)) = true; 56 57 locale loc = locale::classic(); 58 loc = locale(loc, new errorcvt); 59 60 filebuf fbuf1; 61 fbuf1.pubimbue(loc); 62 fbuf1.open(name_07, ios_base::out | ios_base::trunc); 63 64 try 65 { 66 fbuf1.sputn("ison", 4); 67 fbuf1.pubsync(); 68 VERIFY( false ); 69 } 70 catch (std::exception&) 71 { 72 } 73} 74 75int main() 76{ 77 test13(); 78 return 0; 79} 80