xref: /dragonfly/lib/libc/gen/sysvipc_semctl.c (revision 61871f77)
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