Don't declare union semun in userspace unless _WANT_SEMUN is defined.

POSIX explicitly states that the application must declare union semun.
This makes no sense, but it is what it is.  This brings us into line
with Linux, MacOS/Darwin, and NetBSD.

In a ports exp-run a moderate number of ports fail due to a lack of
approprate autotools-like discovery mechanisms or local patches.  A
commit to address them will follow shortly.

PR:		224300, 224443 (exp-run)
Reviewed by:	emaste, jhb, kib
Exp-run by:	antoine
Sponsored by:	DARPA, AFRL
Differential Revision:	https://reviews.freebsd.org/D14492
This commit is contained in:
Brooks Davis 2018-03-02 22:32:53 +00:00
parent ac3ef06af9
commit 6d0fe480a8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=330299
6 changed files with 14 additions and 8 deletions

View File

@ -34,7 +34,7 @@
# define SM_CONF_SHM 1
#endif /* SM_CONF_SHM */
#ifndef SM_CONF_SEM
# define SM_CONF_SEM 1
# define SM_CONF_SEM 2
#endif /* SM_CONF_SEM */
#ifndef SM_CONF_MSG
# define SM_CONF_MSG 1

View File

@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$");
#ifndef NO_COMPAT7
#define _WANT_SEMUN_OLD
#endif
#define _WANT_SEMUN
#include <sys/types.h>
#include <sys/ipc.h>

View File

@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd September 12, 1995
.Dd February 23, 2018
.Dt SEMCTL 2
.Os
.Sh NAME
@ -55,10 +55,7 @@ For the commands that use the
.Fa arg
argument,
.Fa "union semun"
is defined as follows:
.\"
.\" From <sys/sem.h>:
.\"
must be defined as follows:
.Bd -literal
union semun {
int val; /* value for SETVAL */
@ -66,6 +63,12 @@ union semun {
u_short *array; /* array for GETALL & SETALL */
};
.Ed
Non-portable software may define
.Dv _WANT_SEMUN
before including
.Pa sys/sem.h
to use the system definition of
.Fa "union semun" .
.Pp
Commands are performed as follows:
.\"

View File

@ -60,7 +60,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
#define __FreeBSD_version 1200058 /* Master, propagated to newvers */
#define __FreeBSD_version 1200059 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,

View File

@ -76,6 +76,7 @@ union semun_old {
};
#endif
#if defined(_KERNEL) || defined(_WANT_SEMUN)
/*
* semctl's arg parameter structure
*/
@ -84,6 +85,7 @@ union semun {
struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */
unsigned short *array; /* array for GETALL & SETALL */
};
#endif
/*
* commands for semctl

View File

@ -261,7 +261,7 @@ extern "C" {
#define APR_HAVE_STRSTR 1
#define APR_HAVE_MEMCHR 1
#define APR_HAVE_STRUCT_RLIMIT 1
#define APR_HAVE_UNION_SEMUN 1
#define APR_HAVE_UNION_SEMUN 0
#define APR_HAVE_SCTP 1
#define APR_HAVE_IOVEC 1