xref: /dragonfly/lib/libc/gen/sysvipc_semctl.c (revision d316f7c9)
1 #include <sys/types.h>
2 #include <sys/ipc.h>
3 #include <sys/sem.h>
4 #include <stdarg.h>
5 #include <stdlib.h>
6 
7 #include "sysvipc_sem.h"
8 
9 extern char sysvipc_userland;
10 
11 int
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 	va_start(ap, cmd);
18 	if (cmd == IPC_SET || cmd == IPC_STAT || cmd == GETALL
19 	    || cmd == SETVAL || cmd == SETALL) {
20 		semun = va_arg(ap, union semun);
21 		semun_ptr = &semun;
22 	}
23 	va_end(ap);
24 
25 	if (sysvipc_userland)
26 		return (sysvipc___semctl(semid, semnum, cmd, semun_ptr));
27 	return (semsys(0, semid, semnum, cmd, semun_ptr));
28 }
29