1 #include <sys/cdefs.h> 2 __FBSDID("$FreeBSD$"); 3 4 #include <sys/types.h> 5 #include <sys/ipc.h> 6 #include <sys/sem.h> 7 #if __STDC__ 8 #include <stdarg.h> 9 #else 10 #include <varargs.h> 11 #endif 12 #include <stdlib.h> 13 14 #if __STDC__ 15 int semctl(int semid, int semnum, int cmd, ...) 16 #else 17 int semctl(semid, semnum, cmd, va_alist) 18 int semid, semnum; 19 int cmd; 20 va_dcl 21 #endif 22 { 23 va_list ap; 24 union semun semun; 25 union semun *semun_ptr; 26 #if __STDC__ 27 va_start(ap, cmd); 28 #else 29 va_start(ap); 30 #endif 31 if (cmd == IPC_SET || cmd == IPC_STAT || cmd == GETALL 32 || cmd == SETVAL || cmd == SETALL) { 33 semun = va_arg(ap, union semun); 34 semun_ptr = &semun; 35 } else { 36 semun_ptr = NULL; 37 } 38 va_end(ap); 39 40 #ifdef __NETBSD_SYSCALLS 41 return (__semctl(semid, semnum, cmd, semun_ptr)); 42 #else 43 return (semsys(0, semid, semnum, cmd, semun_ptr)); 44 #endif 45 } 46