182657471SMarkus Pfeiffer #include <sys/types.h> 282657471SMarkus Pfeiffer #include <sys/ipc.h> 382657471SMarkus Pfeiffer #include <sys/sem.h> 482657471SMarkus Pfeiffer #include <stdarg.h> 582657471SMarkus Pfeiffer #include <stdlib.h> 682657471SMarkus Pfeiffer 782657471SMarkus Pfeiffer #include "sysvipc_sem.h" 882657471SMarkus Pfeiffer 9*8d485ff9SSascha Wildner extern char sysvipc_userland; 1082657471SMarkus Pfeiffer 1182657471SMarkus Pfeiffer int 1282657471SMarkus Pfeiffer semctl(int semid, int semnum, int cmd, ...) 1382657471SMarkus Pfeiffer { 1482657471SMarkus Pfeiffer va_list ap; 1582657471SMarkus Pfeiffer union semun semun = {0}; 1682657471SMarkus Pfeiffer union semun *semun_ptr = NULL; 1782657471SMarkus Pfeiffer va_start(ap, cmd); 1882657471SMarkus Pfeiffer if (cmd == IPC_SET || cmd == IPC_STAT || cmd == GETALL 1982657471SMarkus Pfeiffer || cmd == SETVAL || cmd == SETALL) { 2082657471SMarkus Pfeiffer semun = va_arg(ap, union semun); 2182657471SMarkus Pfeiffer semun_ptr = &semun; 2282657471SMarkus Pfeiffer } 2382657471SMarkus Pfeiffer va_end(ap); 2482657471SMarkus Pfeiffer 25*8d485ff9SSascha Wildner if (sysvipc_userland) 2682657471SMarkus Pfeiffer return (sysvipc_semctl(semid, semnum, cmd, semun)); 2782657471SMarkus Pfeiffer return (semsys(0, semid, semnum, cmd, semun_ptr)); 2882657471SMarkus Pfeiffer } 29