From 8be1539f4da9e8df496d49e4b6f4650465ae3d36 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 28 Apr 1998 22:51:34 +0000 Subject: 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. --- ChangeLog | 4 ++++ sysdeps/generic/semctl.c | 8 ++------ sysdeps/unix/sysv/linux/semctl.c | 31 ++++++++++++++++++++++++------- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 520c7ebbc3..9e5ed4233b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 1998-04-28 Ulrich Drepper + * 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. + * sysvipc/sys/sem.h: Don't use union semun in semctl prototype. * string/basename.c [!_LIBC]: Define function as gnu_basename. diff --git a/sysdeps/generic/semctl.c b/sysdeps/generic/semctl.c index 297c26bb8a..30cbffae4f 100644 --- a/sysdeps/generic/semctl.c +++ b/sysdeps/generic/semctl.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , August 1995. @@ -24,11 +24,7 @@ KEY. */ int -semctl (semid, semnum, cmd, arg) - int semid; - int semnum; - int cmd; - union semun arg; +semctl (int semid, int semnum, int cmd, ...) { __set_errno (ENOSYS); return -1; 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 , August 1995. @@ -17,17 +17,34 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include #include +/* 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); } -- cgit 1.4.1