Get rid of the requirement to include SysV IPC headers with _KERNEL
defined in ipcrm by introducing _WANT_SYSVxxx_INTERNALS defines. Reviewed by: jhb Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D14271
This commit is contained in:
parent
a93b2878ec
commit
f952bf1b96
@ -119,12 +119,14 @@ struct ipc_perm {
|
||||
#define IPC_INFO 3 /* get info */
|
||||
#endif
|
||||
|
||||
#ifdef _KERNEL
|
||||
#if defined(_KERNEL) || defined(_WANT_SYSVIPC_INTERNALS)
|
||||
/* Macros to convert between ipc ids and array indices or sequence ids */
|
||||
#define IPCID_TO_IX(id) ((id) & 0xffff)
|
||||
#define IPCID_TO_SEQ(id) (((id) >> 16) & 0xffff)
|
||||
#define IXSEQ_TO_IPCID(ix,perm) (((perm.seq) << 16) | (ix & 0xffff))
|
||||
#endif
|
||||
|
||||
#ifdef _KERNEL
|
||||
struct thread;
|
||||
struct proc;
|
||||
struct vmspace;
|
||||
|
@ -25,6 +25,9 @@
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
#ifdef _WANT_SYSVMSG_INTERNALS
|
||||
#define _WANT_SYSVIPC_INTERNALS
|
||||
#endif
|
||||
#include <sys/ipc.h>
|
||||
|
||||
/*
|
||||
@ -116,7 +119,6 @@ struct mymsg {
|
||||
#endif
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
struct msg {
|
||||
struct msg *msg_next; /* next msg in the chain */
|
||||
long msg_type; /* type of this message */
|
||||
@ -126,7 +128,9 @@ struct msg {
|
||||
short msg_spot; /* location of start of msg in buffer */
|
||||
struct label *label; /* MAC Framework label */
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(_KERNEL) || defined(_WANT_SYSVMSG_INTERNALS)
|
||||
/*
|
||||
* Based on the configuration parameters described in an SVR2 (yes, two)
|
||||
* config(1m) man page.
|
||||
@ -145,7 +149,6 @@ struct msginfo {
|
||||
int msgssz; /* size of a message segment (see note) */
|
||||
int msgseg; /* number of message segments */
|
||||
};
|
||||
extern struct msginfo msginfo;
|
||||
|
||||
/*
|
||||
* Kernel wrapper for the user-level structure.
|
||||
@ -162,10 +165,13 @@ struct msqid_kernel {
|
||||
struct label *label; /* MAC label */
|
||||
struct ucred *cred; /* creator's credentials */
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif /* _KERNEL */
|
||||
#ifdef _KERNEL
|
||||
extern struct msginfo msginfo;
|
||||
|
||||
#else /* _KERNEL */
|
||||
|
||||
#if !defined(_KERNEL) || defined(_WANT_MSG_PROTOTYPES)
|
||||
__BEGIN_DECLS
|
||||
int msgctl(int, int, struct msqid_ds *);
|
||||
int msgget(key_t, int);
|
||||
@ -175,7 +181,6 @@ int msgsnd(int, const void *, size_t, int);
|
||||
int msgsys(int, ...);
|
||||
#endif
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_KERNEL || _WANT_MSG_PROTOTYPES */
|
||||
#endif /* !_KERNEL */
|
||||
|
||||
#endif /* !_SYS_MSG_H_ */
|
||||
|
@ -10,6 +10,9 @@
|
||||
#ifndef _SYS_SEM_H_
|
||||
#define _SYS_SEM_H_
|
||||
|
||||
#ifdef _WANT_SYSVSEM_INTERNALS
|
||||
#define _WANT_SYSVIPC_INTERNALS
|
||||
#endif
|
||||
#include <sys/ipc.h>
|
||||
|
||||
#ifndef _PID_T_DECLARED
|
||||
@ -101,8 +104,7 @@ union semun {
|
||||
#define SEM_A IPC_W /* alter permission */
|
||||
#define SEM_R IPC_R /* read permission */
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
#if defined(_KERNEL) || defined(_WANT_SYSVSEM_INTERNALS)
|
||||
/*
|
||||
* semaphore info struct
|
||||
*/
|
||||
@ -117,7 +119,6 @@ struct seminfo {
|
||||
int semvmx; /* semaphore maximum value */
|
||||
int semaem; /* adjust on exit max value */
|
||||
};
|
||||
extern struct seminfo seminfo;
|
||||
|
||||
/*
|
||||
* Kernel wrapper for the user-level structure
|
||||
@ -131,15 +132,17 @@ struct semid_kernel {
|
||||
/* internal "mode" bits */
|
||||
#define SEM_ALLOC 01000 /* semaphore is allocated */
|
||||
#define SEM_DEST 02000 /* semaphore will be destroyed on last detach */
|
||||
#endif
|
||||
|
||||
#ifdef _KERNEL
|
||||
extern struct seminfo seminfo;
|
||||
/*
|
||||
* Process sem_undo vectors at proc exit.
|
||||
*/
|
||||
void semexit(struct proc *p);
|
||||
|
||||
#endif /* _KERNEL */
|
||||
#else /* !_KERNEL */
|
||||
|
||||
#if !defined(_KERNEL) || defined(_WANT_SEM_PROTOTYPES)
|
||||
__BEGIN_DECLS
|
||||
#if __BSD_VISIBLE
|
||||
int semsys(int, ...);
|
||||
@ -149,6 +152,6 @@ int semget(key_t, int, int);
|
||||
int semop(int, struct sembuf *, size_t);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_KERNEL || _WANT_SEM_PROTOTYPES */
|
||||
#endif /* !_KERNEL */
|
||||
|
||||
#endif /* !_SYS_SEM_H_ */
|
||||
|
@ -42,6 +42,9 @@
|
||||
#define _SYS_SHM_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#ifdef _WANT_SYSVSHM_INTERNALS
|
||||
#define _WANT_SYSVIPC_INTERNALS
|
||||
#endif
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
@ -107,9 +110,7 @@ struct shmid_ds {
|
||||
time_t shm_ctime; /* time of last change by shmctl() */
|
||||
};
|
||||
|
||||
#ifdef _KERNEL
|
||||
#include <vm/vm.h>
|
||||
|
||||
#if defined(_KERNEL) || defined(_WANT_SYSVSHM_INTERNALS)
|
||||
/*
|
||||
* System 5 style catch-all structure for shared memory constants that
|
||||
* might be of interest to user programs. Do we really want/need this?
|
||||
@ -122,18 +123,19 @@ struct shminfo {
|
||||
u_long shmall; /* max amount of shared memory (pages) */
|
||||
};
|
||||
|
||||
struct vm_object;
|
||||
|
||||
/*
|
||||
* Add a kernel wrapper to the shmid_ds struct so that private info (like the
|
||||
* MAC label) can be added to it, without changing the user interface.
|
||||
*/
|
||||
struct shmid_kernel {
|
||||
struct shmid_ds u;
|
||||
vm_object_t object;
|
||||
struct vm_object *object;
|
||||
struct label *label; /* MAC label */
|
||||
struct ucred *cred; /* creator's credendials */
|
||||
};
|
||||
|
||||
extern struct shminfo shminfo;
|
||||
#endif
|
||||
|
||||
struct shm_info {
|
||||
int used_ids;
|
||||
@ -144,15 +146,17 @@ struct shm_info {
|
||||
unsigned long swap_successes;
|
||||
};
|
||||
|
||||
struct thread;
|
||||
#ifdef _KERNEL
|
||||
struct proc;
|
||||
struct vmspace;
|
||||
|
||||
extern struct shminfo shminfo;
|
||||
|
||||
void shmexit(struct vmspace *);
|
||||
void shmfork(struct proc *, struct proc *);
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#if !defined(_KERNEL) || defined(_WANT_SHM_PROTOTYPES)
|
||||
#else /* !_KERNEL */
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#ifndef _SIZE_T_DECLARED
|
||||
@ -170,6 +174,6 @@ int shmctl(int, int, struct shmid_ds *);
|
||||
int shmdt(const void *);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _KERNEL || _WANT_SHM_PROTOTYPES */
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* !_SYS_SHM_H_ */
|
||||
|
@ -36,14 +36,12 @@
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/param.h>
|
||||
#define _WANT_MSG_PROTOTYPES
|
||||
#define _WANT_SEM_PROTOTYPES
|
||||
#define _WANT_SHM_PROTOTYPES
|
||||
#define _KERNEL
|
||||
#include <sys/sem.h>
|
||||
#include <sys/shm.h>
|
||||
#define _WANT_SYSVMSG_INTERNALS
|
||||
#include <sys/msg.h>
|
||||
#undef _KERNEL
|
||||
#define _WANT_SYSVSEM_INTERNALS
|
||||
#include <sys/sem.h>
|
||||
#define _WANT_SYSVSHM_INTERNALS
|
||||
#include <sys/shm.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <err.h>
|
||||
|
@ -68,3 +68,6 @@ extern kvm_t *kd;
|
||||
extern struct semid_kernel *sema;
|
||||
extern struct msqid_kernel *msqids;
|
||||
extern struct shmid_kernel *shmsegs;
|
||||
extern struct seminfo seminfo;
|
||||
extern struct msginfo msginfo;
|
||||
extern struct shminfo shminfo;
|
||||
|
Loading…
Reference in New Issue
Block a user