From 6d0fe480a87fee57d9f159b249bf385135d15bef Mon Sep 17 00:00:00 2001 From: Brooks Davis Date: Fri, 2 Mar 2018 22:32:53 +0000 Subject: [PATCH] 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 --- contrib/sendmail/include/sm/os/sm_os_freebsd.h | 2 +- lib/libc/gen/semctl.c | 1 + lib/libc/sys/semctl.2 | 13 ++++++++----- sys/sys/param.h | 2 +- sys/sys/sem.h | 2 ++ usr.bin/svn/lib/libapr/apr.h | 2 +- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/contrib/sendmail/include/sm/os/sm_os_freebsd.h b/contrib/sendmail/include/sm/os/sm_os_freebsd.h index 306f62cb5724..e97f5eb257b8 100644 --- a/contrib/sendmail/include/sm/os/sm_os_freebsd.h +++ b/contrib/sendmail/include/sm/os/sm_os_freebsd.h @@ -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 diff --git a/lib/libc/gen/semctl.c b/lib/libc/gen/semctl.c index 44a2745a5452..8760d76a82fa 100644 --- a/lib/libc/gen/semctl.c +++ b/lib/libc/gen/semctl.c @@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$"); #ifndef NO_COMPAT7 #define _WANT_SEMUN_OLD #endif +#define _WANT_SEMUN #include #include diff --git a/lib/libc/sys/semctl.2 b/lib/libc/sys/semctl.2 index 0f76c282f211..225afcb1ef04 100644 --- a/lib/libc/sys/semctl.2 +++ b/lib/libc/sys/semctl.2 @@ -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 : -.\" +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: .\" diff --git a/sys/sys/param.h b/sys/sys/param.h index ab43437cbd26..2653517992e8 100644 --- a/sys/sys/param.h +++ b/sys/sys/param.h @@ -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, diff --git a/sys/sys/sem.h b/sys/sys/sem.h index 470977a6fe54..bf1e31e4aca1 100644 --- a/sys/sys/sem.h +++ b/sys/sys/sem.h @@ -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 diff --git a/usr.bin/svn/lib/libapr/apr.h b/usr.bin/svn/lib/libapr/apr.h index 58551476ec91..fbad4469a417 100644 --- a/usr.bin/svn/lib/libapr/apr.h +++ b/usr.bin/svn/lib/libapr/apr.h @@ -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