Index: sys/sys/ipc.h =================================================================== --- sys/sys/ipc.h +++ sys/sys/ipc.h @@ -119,12 +119,14 @@ #define IPC_INFO 3 /* get info */ #endif -#ifdef _KERNEL +#if defined(_KERNEL) || defined(_WANT_IPCID_MACROS) /* 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; Index: sys/sys/msg.h =================================================================== --- sys/sys/msg.h +++ sys/sys/msg.h @@ -116,7 +116,6 @@ #endif #ifdef _KERNEL - struct msg { struct msg *msg_next; /* next msg in the chain */ long msg_type; /* type of this message */ @@ -126,7 +125,9 @@ short msg_spot; /* location of start of msg in buffer */ struct label *label; /* MAC Framework label */ }; +#endif +#if defined(_KERNEL) || defined(_WANT_MSGINFO) /* * Based on the configuration parameters described in an SVR2 (yes, two) * config(1m) man page. @@ -145,8 +146,9 @@ msgssz, /* size of a message segment (see notes above) */ msgseg; /* number of message segments */ }; -extern struct msginfo msginfo; +#endif +#if defined(_KERNEL) || defined(_WANT_MSQID_KERNEL) /* * Kernel wrapper for the user-level structure. */ @@ -162,10 +164,11 @@ struct label *label; /* MAC label */ struct ucred *cred; /* creator's credentials */ }; +#endif -#endif /* _KERNEL */ - -#if !defined(_KERNEL) || defined(_WANT_MSG_PROTOTYPES) +#ifdef _KERNEL +extern struct msginfo msginfo; +#else /* _KERNEL */ __BEGIN_DECLS int msgctl(int, int, struct msqid_ds *); int msgget(key_t, int); @@ -175,7 +178,6 @@ int msgsys(int, ...); #endif __END_DECLS - -#endif /* !_KERNEL || _WANT_MSG_PROTOTYPES */ +#endif /* !_KERNEL */ #endif /* !_SYS_MSG_H_ */ Index: sys/sys/sem.h =================================================================== --- sys/sys/sem.h +++ sys/sys/sem.h @@ -101,24 +101,24 @@ #define SEM_A IPC_W /* alter permission */ #define SEM_R IPC_R /* read permission */ -#ifdef _KERNEL - +#if defined(_KERNEL) || defined(_WANT_SEMINFO) /* * semaphore info struct */ struct seminfo { - int semmni, /* # of semaphore identifiers */ - semmns, /* # of semaphores in system */ - semmnu, /* # of undo structures in system */ - semmsl, /* max # of semaphores per id */ - semopm, /* max # of operations per semop call */ - semume, /* max # of undo entries per process */ - semusz, /* size in bytes of undo structure */ - semvmx, /* semaphore maximum value */ - semaem; /* adjust on exit max value */ + int semmni; /* # of semaphore identifiers */ + int semmns; /* # of semaphores in system */ + int semmnu; /* # of undo structures in system */ + int semmsl; /* max # of semaphores per id */ + int semopm; /* max # of operations per semop call */ + int semume; /* max # of undo entries per process */ + int semusz; /* size in bytes of undo structure */ + int semvmx; /* semaphore maximum value */ + int semaem; /* adjust on exit max value */ }; -extern struct seminfo seminfo; +#endif +#if defined(_KERNEL) || defined(_WANT_SEMID_KERNEL) /* * Kernel wrapper for the user-level structure */ @@ -127,19 +127,23 @@ struct label *label; /* MAC framework label */ struct ucred *cred; /* creator's credentials */ }; +#endif +#if defined(_KERNEL) || defined(_WANT_SEM_INTERNAL_MODES) /* 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 +153,6 @@ int semop(int, struct sembuf *, size_t); __END_DECLS -#endif /* !_KERNEL || _WANT_SEM_PROTOTYPES */ +#endif /* !_KERNEL */ #endif /* !_SYS_SEM_H_ */ Index: sys/sys/shm.h =================================================================== --- sys/sys/shm.h +++ sys/sys/shm.h @@ -107,9 +107,7 @@ time_t shm_ctime; /* time of last change by shmctl() */ }; -#ifdef _KERNEL -#include - +#if defined(_KERNEL) || defined(_WANT_SHMINFO) /* * System 5 style catch-all structure for shared memory constants that * might be of interest to user programs. Do we really want/need this? @@ -121,6 +119,15 @@ u_long shmseg; /* max shared memory segments per process */ u_long shmall; /* max amount of shared memory (pages) */ }; +#endif + +#if defined(_KERNEL) || defined(_WANT_SHMID_KERNEL) +#ifdef _KERNEL +#include +#else +struct vm_object; +typedef struct vm_object *vm_object_t; +#endif /* * Add a kernel wrapper to the shmid_ds struct so that private info (like the @@ -132,8 +139,7 @@ struct label *label; /* MAC label */ struct ucred *cred; /* creator's credendials */ }; - -extern struct shminfo shminfo; +#endif struct shm_info { int used_ids; @@ -144,15 +150,17 @@ 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 #ifndef _SIZE_T_DECLARED @@ -170,6 +178,6 @@ int shmdt(const void *); __END_DECLS -#endif /* _KERNEL || _WANT_SHM_PROTOTYPES */ +#endif /* _KERNEL */ #endif /* !_SYS_SHM_H_ */ Index: usr.bin/ipcrm/ipcrm.c =================================================================== --- usr.bin/ipcrm/ipcrm.c +++ usr.bin/ipcrm/ipcrm.c @@ -36,14 +36,18 @@ __FBSDID("$FreeBSD$"); #include -#define _WANT_MSG_PROTOTYPES -#define _WANT_SEM_PROTOTYPES -#define _WANT_SHM_PROTOTYPES -#define _KERNEL +#define _WANT_IPCID_MACROS +#include +#define _WANT_MSGINFO +#define _WANT_MSQID_KERNEL +#include +#define _WANT_SEM_INTERNAL_MODES +#define _WANT_SEMINFO +#define _WANT_SEMID_KERNEL #include +#define _WANT_SHMINFO +#define _WANT_SHMID_KERNEL #include -#include -#undef _KERNEL #include #include Index: usr.bin/ipcs/ipc.h =================================================================== --- usr.bin/ipcs/ipc.h +++ usr.bin/ipcs/ipc.h @@ -68,3 +68,6 @@ 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;