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 | |
| parent | 9e8799c9cd40088970e49410a1c937716ffbfbea (diff) | |
Notes
| -rw-r--r-- | lib/libc/gen/semctl.c | 29 | ||||
| -rw-r--r-- | sys/sys/sem.h | 4 |
2 files changed, 26 insertions, 7 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 } diff --git a/sys/sys/sem.h b/sys/sys/sem.h index ef3086a6b1e5..debd5991d387 100644 --- a/sys/sys/sem.h +++ b/sys/sys/sem.h @@ -1,4 +1,4 @@ -/* $Id: sem.h,v 1.12 1997/02/22 09:45:51 peter Exp $ */ +/* $Id: sem.h,v 1.13 1997/09/07 05:27:21 bde Exp $ */ /* $NetBSD: sem.h,v 1.5 1994/06/29 06:45:15 cgd Exp $ */ /* @@ -171,7 +171,7 @@ typedef enum { __BEGIN_DECLS int semsys __P((int, ...)); -int semctl __P((int, int, int, union semun)); +int semctl __P((int, int, int, ...)); int semget __P((key_t, int, int)); int semop __P((int, struct sembuf *,unsigned)); __END_DECLS |
