]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/27_io/basic_filebuf/imbue/wchar_t/14975-2.cc
testsuite_hooks.cc (try_mkfifo): Remove.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 27_io / basic_filebuf / imbue / wchar_t / 14975-2.cc
1 // { dg-require-fork "" }
2 // { dg-require-mkfifo "" }
3
4 // 2004-04-16 Petur Runolfsson <peturr02@ru.is>
5
6 // Copyright (C) 2004, 2005 Free Software Foundation, Inc.
7 //
8 // This file is part of the GNU ISO C++ Library. This library is free
9 // software; you can redistribute it and/or modify it under the
10 // terms of the GNU General Public License as published by the
11 // Free Software Foundation; either version 2, or (at your option)
12 // any later version.
13
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 // GNU General Public License for more details.
18
19 // You should have received a copy of the GNU General Public License along
20 // with this library; see the file COPYING. If not, write to the Free
21 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
22 // USA.
23
24 #include <fstream>
25 #include <locale>
26 #include <unistd.h>
27 #include <signal.h>
28 #include <fcntl.h>
29 #include <sys/types.h>
30 #include <sys/stat.h>
31 #include <testsuite_hooks.h>
32
33 // libstdc++/14975
34 void test01()
35 {
36 using namespace std;
37 using namespace __gnu_test;
38 bool test __attribute__((unused)) = true;
39
40 locale loc_us = try_named_locale("en_US");
41
42 const char* name = "tmp_14975-2";
43
44 signal(SIGPIPE, SIG_IGN);
45
46 unlink(name);
47 mkfifo(name, S_IRWXU);
48 semaphore s1;
49
50 int child = fork();
51 VERIFY( child != -1 );
52
53 if (child == 0)
54 {
55 {
56 filebuf fbin;
57 fbin.open(name, ios_base::in);
58 }
59 s1.signal ();
60 exit(0);
61 }
62
63 wfilebuf fb;
64 fb.pubimbue(loc_us);
65 wfilebuf* ret = fb.open(name, ios_base::out);
66 VERIFY( ret != NULL );
67 VERIFY( fb.is_open() );
68
69 s1.wait ();
70
71 try
72 {
73 fb.sputc(L'a');
74 fb.sputc(L'b');
75 fb.pubimbue(locale::classic());
76 fb.sputc(L'c');
77 fb.close();
78 }
79 catch (std::exception&)
80 {
81 }
82 }
83
84 int main()
85 {
86 test01();
87 return 0;
88 }