diff options
| author | Steve Price <steve@FreeBSD.org> | 1998-05-31 04:09:09 +0000 |
|---|---|---|
| committer | Steve Price <steve@FreeBSD.org> | 1998-05-31 04:09:09 +0000 |
| commit | 3f58cad6388b21fbbcdc7285fc907d620c32cf1a (patch) | |
| tree | 29b39de76f8d1e22c753501e67b0e7904f5d153d /lib | |
| parent | 9e8799c9cd40088970e49410a1c937716ffbfbea (diff) | |
Notes
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/libc/gen/semctl.c | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/lib/libc/gen/semctl.c b/lib/libc/gen/semctl.c index b0ed72350382..96a86269f6e1 100644 --- a/lib/libc/gen/semctl.c +++ b/lib/libc/gen/semctl.c @@ -1,19 +1,38 @@ #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> +#include <stdarg.h> +#include <stdlib.h> #if __STDC__ -int semctl(int semid, int semnum, int cmd, union semun semun) +int semctl(int semid, int semnum, int cmd, ...) #else -int semctl(semid, int semnum, cmd, semun) +int semctl(semid, semnum, cmd, va_alist) int semid, semnum; int cmd; - union semun semun; + va_dcl #endif { + va_list ap; + union semun semun; + union semun *semun_ptr; +#ifdef __STDC__ + va_start(ap, cmd); +#else + va_start(ap); +#endif + if (cmd == IPC_SET || cmd == IPC_STAT || cmd == GETALL + || cmd == SETVAL || cmd == SETALL) { + semun = va_arg(ap, union semun); + semun_ptr = &semun; + } else { + semun_ptr = NULL; + } + va_end(ap); + #ifdef __NETBSD_SYSCALLS - return (__semctl(semid, semnum, cmd, &semun)); + return (__semctl(semid, semnum, cmd, semun_ptr)); #else - return (semsys(0, semid, semnum, cmd, &semun)); + return (semsys(0, semid, semnum, cmd, semun_ptr)); #endif } |
