Mercurial > hg > octave-shane > gnulib-hg
annotate tests/test-sigpipe.c @ 17632:86af85d364e1 default tip
unistd: port readlink to Mac OS X 10.3.9
* lib/unistd.in.h (_GL_INCLUDING_UNISTD_H): New macro, to work
around self-include problem in Mac OS X 10.3.9 when combined with
readlink module. Problem reported by Klaus Zietler in
<http://bugs.gnu.org/16825>.
author | Paul Eggert <eggert@penguin.cs.ucla.edu> |
---|---|
date | Tue, 25 Feb 2014 11:16:27 -0800 (2014-02-25) |
parents | 344018b6e5d7 |
children |
rev | line source |
---|---|
10485 | 1 /* Test of SIGPIPE handling. |
17587 | 2 Copyright (C) 2008-2014 Free Software Foundation, Inc. |
10485 | 3 |
4 This program is free software; you can redistribute it and/or modify | |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 3, or (at your option) | |
7 any later version. | |
8 | |
9 This program 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 | |
16366
bb182ee4a09d
maint: replace FSF snail-mail addresses with URLs
Paul Eggert <eggert@cs.ucla.edu>
parents:
16201
diff
changeset
|
15 along with this program; if not, see <http://www.gnu.org/licenses/>. */ |
10485 | 16 |
17 #include <config.h> | |
18 | |
19 #include <signal.h> | |
20 | |
21 /* Check that SIGPIPE is defined. */ | |
22 int s = SIGPIPE; | |
23 | |
24 #include <errno.h> | |
25 #include <stdio.h> | |
26 #include <stdlib.h> | |
27 #include <unistd.h> | |
28 | |
29 static void | |
30 handler (int sig) | |
31 { | |
32 exit (0); | |
33 } | |
34 | |
35 int | |
36 main (int argc, char **argv) | |
37 { | |
38 char mode = argv[1][0]; | |
39 | |
40 switch (mode) | |
41 { | |
42 case 'A': signal (SIGPIPE, SIG_DFL); break; | |
43 case 'B': signal (SIGPIPE, SIG_IGN); break; | |
44 case 'C': signal (SIGPIPE, handler); break; | |
45 } | |
46 | |
47 /* Produce infinite output. Since it is piped into "head -1", the writes | |
48 must ultimately fail. */ | |
49 for (;;) | |
50 { | |
51 char c[2] = { 'y', '\n' }; | |
52 int ret = write (1, c, sizeof (c)); | |
53 if (ret <= 0) | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10485
diff
changeset
|
54 { |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10485
diff
changeset
|
55 switch (mode) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10485
diff
changeset
|
56 { |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10485
diff
changeset
|
57 case 'B': /* The write() call should have failed with EPIPE. */ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10485
diff
changeset
|
58 if (ret < 0 && errno == EPIPE) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10485
diff
changeset
|
59 exit (0); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10485
diff
changeset
|
60 /*FALLTHROUGH*/ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10485
diff
changeset
|
61 case 'A': /* The process should silently die. */ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10485
diff
changeset
|
62 case 'C': /* The handler should have been called. */ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10485
diff
changeset
|
63 fprintf (stderr, "write() returned %d with error %d.\n", ret, errno); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10485
diff
changeset
|
64 exit (1); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10485
diff
changeset
|
65 } |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10485
diff
changeset
|
66 } |
10485 | 67 } |
68 } |