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 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