1 /* $DragonFly: src/lib/libc/gen/semctl.c,v 1.3 2005/04/26 06:08:42 joerg Exp $ 2 * $DragonFly: src/lib/libc/gen/msgget.c,v 1.2 2013/09/24 21:37:00 Lrisa Grigore <larisagrigore@gmail.com> Exp $ 3 */ 4 5 #include <sys/types.h> 6 #include <sys/ipc.h> 7 #include <sys/sem.h> 8 #include <stdarg.h> 9 #include <stdlib.h> 10 11 #include "sysvipc_sem.h" 12 13 extern char use_userland_impl; 14 15 int 16 semctl(int semid, int semnum, int cmd, ...) 17 { 18 va_list ap; 19 union semun semun = {0}; 20 union semun *semun_ptr = NULL; 21 va_start(ap, cmd); 22 if (cmd == IPC_SET || cmd == IPC_STAT || cmd == GETALL 23 || cmd == SETVAL || cmd == SETALL) { 24 semun = va_arg(ap, union semun); 25 semun_ptr = &semun; 26 } 27 va_end(ap); 28 29 if (use_userland_impl) 30 return (sysvipc_semctl(semid, semnum, cmd, semun)); 31 return (semsys(0, semid, semnum, cmd, semun_ptr)); 32 } 33