1 #include <sys/types.h>
2 #include <sys/ipc.h>
3 #include <sys/sem.h>
4 #include <stdarg.h>
5
6 #include "sysvipc_sem.h"
7
8 extern char sysvipc_userland;
9 extern int __sys___semctl(int, int, int, union semun *);
10
11 int
semctl(int semid,int semnum,int cmd,...)12 semctl(int semid, int semnum, int cmd, ...)
13 {
14 va_list ap;
15 union semun semun = { 0 };
16 union semun *semun_ptr = NULL;
17
18 va_start(ap, cmd);
19 if (cmd == IPC_SET || cmd == IPC_STAT || cmd == GETALL
20 || cmd == SETVAL || cmd == SETALL) {
21 semun = va_arg(ap, union semun);
22 semun_ptr = &semun;
23 }
24 va_end(ap);
25
26 if (sysvipc_userland)
27 return (sysvipc___semctl(semid, semnum, cmd, semun_ptr));
28 return (__sys___semctl(semid, semnum, cmd, semun_ptr));
29 }
30