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