testcases: Attempt to integrate POSIX IPC tests to dfregress(8)
[dragonfly.git] / test / testcases / posixipc / wait_two_proc / wait_two_proc.c
1 #include <common.h>
2
3 int
4 main(void) {
5         sem_t *id;
6         int retval = 0;
7         int stat;
8
9         id = sem_open(TEST_PATH, O_CREAT, 0777, 0);
10         if (id == SEM_FAILED) {
11                 perror("sem_open");
12                 return 1;
13         }
14
15         if (schedule_post(id, 500) < 0) {
16                 sem_close(id);
17                 sem_unlink(TEST_PATH);
18                 return 1;
19         }
20
21         if (child_worker(wait_twoproc_child, NULL, &stat) < 0) {
22                 check_alarm(1);
23                 sem_close(id);
24                 sem_unlink(TEST_PATH);
25                 return 1;
26         }
27
28         errno = CSTAT_ERROR(stat);
29         switch (CSTAT_CLASS(stat)) {
30         case 0:
31                 /* Pass! */
32                 retval = 0;
33                 break;
34         case 1:
35                 perror("child sem_open()");
36                 retval = 1;
37                 break;
38         case 2:
39                 perror("child sem_wait()");
40                 retval = 1;
41                 break;
42         case 3:
43                 perror("child sem_close()");
44                 retval = 1;
45                 break;
46         default:
47                 fprintf(stderr, "bad child state %#x", stat);
48                 retval = 1;
49                 break;
50         }
51
52         check_alarm(1);
53         sem_close(id);
54         sem_unlink(TEST_PATH);
55
56         return retval;
57 }