diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-04-28 22:51:34 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-04-28 22:51:34 +0000 |
commit | 8be1539f4da9e8df496d49e4b6f4650465ae3d36 (patch) | |
tree | e4a3e44bd66e122ed66ae1a51f8dc89b72c4deef /sysdeps/unix | |
parent | 936e9dafaa3e3c58e18c9a8a6e5dd606be47910f (diff) | |
download | glibc-8be1539f4da9e8df496d49e4b6f4650465ae3d36.tar.gz glibc-8be1539f4da9e8df496d49e4b6f4650465ae3d36.tar.xz glibc-8be1539f4da9e8df496d49e4b6f4650465ae3d36.zip |
Update.
* sysdeps/unix/sysv/linux/semctl.c (semctl): Define own union semun and use stdarg macros to get the value. * sysdeps/generic/semctl.c: Don't use union semun.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r-- | sysdeps/unix/sysv/linux/semctl.c | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/sysdeps/unix/sysv/linux/semctl.c b/sysdeps/unix/sysv/linux/semctl.c index 3d95e08d98..c87b407d2c 100644 --- a/sysdeps/unix/sysv/linux/semctl.c +++ b/sysdeps/unix/sysv/linux/semctl.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. @@ -17,17 +17,34 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include <stdarg.h> #include <sys/sem.h> +/* Define a `union semun' suitable for Linux here. */ +union semun +{ + int val; /* value for SETVAL */ + struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */ + unsigned short int *array; /* array for GETALL & SETALL */ + struct seminfo *__buf; /* buffer for IPC_INFO */ +}; + + /* Return identifier for array of NSEMS semaphores associated with KEY. */ int -semctl (semid, semnum, cmd, arg) - int semid; - int semnum; - int cmd; - union semun arg; +semctl (int semid, int semnum, int cmd, ...) { - return __ipc (IPCOP_semctl, semid, semnum, cmd, &arg); + union semun *arg; + va_list ap; + + va_start (ap, cmd); + + /* Get a pointer the argument. */ + arg = &va_arg (ap, union semun); + + va_end (ap); + + return __ipc (IPCOP_semctl, semid, semnum, cmd, arg); } |