* sim/cris: New directory with C and assembly tests for the CRIS
[deliverable/binutils-gdb.git] / sim / testsuite / sim / cris / c / pipe4.c
1 /* Check that TRT happens for pipe corner cases.
2 #notarget: cris*-*-elf
3 */
4 #include <stddef.h>
5 #include <signal.h>
6 #include <stdlib.h>
7 #include <stdio.h>
8 #include <unistd.h>
9 #include <errno.h>
10 #include <limits.h>
11
12 void err (const char *s)
13 {
14 perror (s);
15 abort ();
16 }
17
18 int main (void)
19 {
20 int pip[2];
21 char c;
22 int pipemax;
23
24 if (pipe (pip) != 0)
25 err ("pipe");
26
27 #ifdef PIPE_MAX
28 pipemax = PIPE_MAX;
29 #else
30 pipemax = fpathconf (pip[1], _PC_PIPE_BUF);
31 #endif
32
33 if (pipemax <= 0)
34 {
35 fprintf (stderr, "Bad pipemax %d\n", pipemax);
36 abort ();
37 }
38
39 /* Writing to wrong end of pipe. */
40 if (write (pip[0], "argh", 1) != -1
41 || errno != EBADF)
42 err ("write pipe");
43
44 errno = 0;
45
46 /* Reading from wrong end of pipe. */
47 if (read (pip[1], &c, 1) != -1
48 || errno != EBADF)
49 err ("write pipe");
50
51 errno = 0;
52
53 if (close (pip[0]) != 0)
54 err ("close");
55
56 if (signal (SIGPIPE, SIG_IGN) != SIG_DFL)
57 err ("signal");
58
59 /* Writing to pipe with closed read end. */
60 if (write (pip[1], "argh", 1) != -1
61 || errno != EPIPE)
62 err ("write closed");
63
64 printf ("pass\n");
65 exit (0);
66 }
This page took 0.029953 seconds and 4 git commands to generate.