1 // { dg-require-namedlocale "en_US.ISO8859-1" } 2 // { dg-require-namedlocale "fr_FR.ISO8859-15" } 3 // { dg-require-fork "" } 4 // { dg-require-mkfifo "" } 5 6 // 2004-01-11 Petur Runolfsson <peturr02@ru.is> 7 8 // Copyright (C) 2004-2020 Free Software Foundation, Inc. 9 // 10 // This file is part of the GNU ISO C++ Library. This library is free 11 // software; you can redistribute it and/or modify it under the 12 // terms of the GNU General Public License as published by the 13 // Free Software Foundation; either version 3, or (at your option) 14 // any later version. 15 16 // This library is distributed in the hope that it will be useful, 17 // but WITHOUT ANY WARRANTY; without even the implied warranty of 18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 // GNU General Public License for more details. 20 21 // You should have received a copy of the GNU General Public License along 22 // with this library; see the file COPYING3. If not see 23 // <http://www.gnu.org/licenses/>. 24 25 // 27.8.1.4 Overridden virtual functions 26 27 #include <fstream> 28 #include <locale> 29 #include <cstdlib> 30 31 #include <unistd.h> 32 #include <sys/types.h> 33 #include <sys/stat.h> 34 35 #include <testsuite_hooks.h> 36 37 // libstdc++/13582 test01()38void test01() 39 { 40 using namespace std; 41 using namespace __gnu_test; 42 43 locale loc_en(locale(ISO_8859(1,en_US))); 44 locale loc_fr(locale(ISO_8859(15,fr_FR))); 45 46 const char* name = "tmp_fifo_13582-2"; 47 unlink(name); 48 mkfifo(name, S_IRWXU); 49 50 int child = fork(); 51 if (child == 0) 52 { 53 filebuf fbout; 54 fbout.open(name, ios_base::out); 55 fbout.sputn("12345", 5); 56 fbout.pubsync(); 57 sleep(2); 58 fbout.close(); 59 exit(0); 60 } 61 62 wfilebuf fbin; 63 fbin.open(name, ios_base::in); 64 sleep(1); 65 wfilebuf::int_type n = fbin.sbumpc(); 66 VERIFY( n == L'1' ); 67 fbin.pubimbue(loc_en); 68 n = fbin.sbumpc(); 69 VERIFY( n == L'2' ); 70 fbin.pubimbue(loc_fr); 71 n = fbin.sbumpc(); 72 VERIFY( n == L'3' ); 73 n = fbin.sbumpc(); 74 VERIFY( n == L'4' ); 75 n = fbin.sbumpc(); 76 VERIFY( n == L'5' ); 77 n = fbin.sbumpc(); 78 VERIFY( n == wfilebuf::traits_type::eof() ); 79 } 80 main()81int main() 82 { 83 test01(); 84 return 0; 85 } 86