8 /* Make sure that a blocking syscall returns EINTR if hit by a signal,
9 and there's no SA_RESTART */
11 static void handler(int s
)
20 if (pipe(fds
) == -1) {
21 perror("FAIL: pipe\n");
28 perror("fork failed");
37 sa
.sa_handler
= handler
;
38 sigfillset(&sa
.sa_mask
);
39 sa
.sa_flags
= 0; /* no SA_RESTART */
41 sigaction(SIGUSR1
, &sa
, NULL
);
44 ret
= read(fds
[0], &ch
, 1);
46 if (ret
!= -1 || errno
!= EINTR
)
47 fprintf(stderr
, "FAIL: expected EINTR, not %d/%s/%c\n",
48 ret
, strerror(errno
), ch
);
50 signal(SIGPIPE
, SIG_IGN
);
56 if (write(fds
[1], "x", 1) != -1 || errno
!= EPIPE
)
57 fprintf(stderr
, "FAIL: expected write to fail with EPIPE, not %d\n", errno
);
59 waitpid(pid
, NULL
, 0);