1#include <stdio.h>
2#include <signal.h>
3#include <unistd.h>
4#include <stdlib.h>
5
6static int sigalrm_received = 0;
7static void sigalrm_handler(int signr)
8{
9   sigalrm_received++;
10}
11static int sigrtmin_received = 0;
12static void sigrtmin_handler(int signr)
13{
14   sigrtmin_received++;
15}
16
17static int breakme = 0;
18#ifndef SIGRTMIN
19// at least on MacOS, there is no SIGRTMIN.
20// So, use any other signal instead.
21#define SIGRTMIN SIGUSR1
22#endif
23
24int main (int argc, char *argv[])
25{
26   struct sigaction sa;
27   fprintf(stderr, "starting ...\n");
28   sa.sa_handler = sigalrm_handler;
29   sigemptyset(&sa.sa_mask);
30   sa.sa_flags = 0;
31
32   if (sigaction (SIGALRM, &sa, NULL) != 0)
33      perror("sigaction");
34   if (kill(getpid(), SIGALRM) != 0)
35      perror("kill 1");
36
37   if (sigalrm_received == 1)
38      fprintf (stderr, "ok: 1st SIGALRM received\n");
39   else
40      fprintf (stderr, "wrong 1st: unexpected value %d sigalrm_received\n",
41               sigalrm_received);
42
43   if (kill(getpid(), SIGALRM) != 0)
44      perror("kill 2");
45
46   if (sigalrm_received == 2)
47      fprintf (stderr, "ok: 2nd SIGALRM received\n");
48   else
49      fprintf (stderr, "wrong 2nd: unexpected value %d sigalrm_received\n",
50               sigalrm_received);
51
52   system("../tests/true");
53   breakme++;
54
55   sa.sa_handler = sigrtmin_handler;
56   sigemptyset(&sa.sa_mask);
57   sa.sa_flags = 0;
58
59   if (sigaction (SIGRTMIN, &sa, NULL) != 0)
60      perror("sigaction");
61   if (kill(getpid(), SIGRTMIN) != 0)
62      perror("kill sigrtmin");
63   if (sigrtmin_received == 1)
64      fprintf (stderr, "ok: SIGRTMIN received\n");
65   else
66      fprintf (stderr, "wrong sigrtmin: unexpected value %d sigrtmin_received\n",
67               sigrtmin_received);
68   return 0;
69}
70