summaryrefslogtreecommitdiffstats
path: root/sys/kern/sysv_sem.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2009-06-24 20:01:13 +0000
committerjhb <jhb@FreeBSD.org>2009-06-24 20:01:13 +0000
commit0894d349bdf8d7f8fa84fb9e87f0b8633c45fac0 (patch)
tree474d9c8e860470ba3c9ed0ccdbe237471d7ee05d /sys/kern/sysv_sem.c
parente37467a3e30a093d964420da088b37a1da5a7c12 (diff)
downloadFreeBSD-src-0894d349bdf8d7f8fa84fb9e87f0b8633c45fac0.zip
FreeBSD-src-0894d349bdf8d7f8fa84fb9e87f0b8633c45fac0.tar.gz
Deprecate the msgsys(), semsys(), and shmsys() system calls by moving
them under COMPAT_FREEBSD[4567]. Starting with FreeBSD 5.0 the SYSV IPC API was implemented via direct system calls (e.g. msgctl(), msgget(), etc.) rather than indirecting through the var-args *sys() system calls. The shmsys() system call was already effectively deprecated for all but COMPAT_FREEBSD4 already as its implementation for the !COMPAT_FREEBSD4 case was to simply invoke nosys().
Diffstat (limited to 'sys/kern/sysv_sem.c')
-rw-r--r--sys/kern/sysv_sem.c72
1 files changed, 39 insertions, 33 deletions
diff --git a/sys/kern/sysv_sem.c b/sys/kern/sysv_sem.c
index 70373d4..719295d 100644
--- a/sys/kern/sysv_sem.c
+++ b/sys/kern/sysv_sem.c
@@ -39,6 +39,7 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_compat.h"
#include "opt_sysvipc.h"
#include <sys/param.h>
@@ -90,12 +91,6 @@ static int semundo_adjust(struct thread *td, struct sem_undo **supptr,
int semid, int semseq, int semnum, int adjval);
static void semundo_clear(int semid, int semnum);
-/* XXX casting to (sy_call_t *) is bogus, as usual. */
-static sy_call_t *semcalls[] = {
- (sy_call_t *)__semctl, (sy_call_t *)semget,
- (sy_call_t *)semop
-};
-
static struct mtx sem_mtx; /* semaphore global lock */
static struct mtx sem_undo_mtx;
static int semtot = 0;
@@ -317,7 +312,6 @@ static moduledata_t sysvsem_mod = {
NULL
};
-SYSCALL_MODULE_HELPER(semsys);
SYSCALL_MODULE_HELPER(__semctl);
SYSCALL_MODULE_HELPER(semget);
SYSCALL_MODULE_HELPER(semop);
@@ -326,32 +320,6 @@ DECLARE_MODULE(sysvsem, sysvsem_mod, SI_SUB_SYSV_SEM, SI_ORDER_FIRST);
MODULE_VERSION(sysvsem, 1);
/*
- * Entry point for all SEM calls.
- */
-int
-semsys(td, uap)
- struct thread *td;
- /* XXX actually varargs. */
- struct semsys_args /* {
- int which;
- int a2;
- int a3;
- int a4;
- int a5;
- } */ *uap;
-{
- int error;
-
- if (!prison_allow(td->td_ucred, PR_ALLOW_SYSVIPC))
- return (ENOSYS);
- if (uap->which < 0 ||
- uap->which >= sizeof(semcalls)/sizeof(semcalls[0]))
- return (EINVAL);
- error = (*semcalls[uap->which])(td, &uap->a2);
- return (error);
-}
-
-/*
* Allocate a new sem_undo structure for a process
* (returns ptr to structure or NULL if no more room)
*/
@@ -1345,3 +1313,41 @@ sysctl_sema(SYSCTL_HANDLER_ARGS)
return (SYSCTL_OUT(req, sema,
sizeof(struct semid_kernel) * seminfo.semmni));
}
+
+#if defined(COMPAT_FREEBSD4) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD7)
+SYSCALL_MODULE_HELPER(semsys);
+
+/* XXX casting to (sy_call_t *) is bogus, as usual. */
+static sy_call_t *semcalls[] = {
+ (sy_call_t *)__semctl, (sy_call_t *)semget,
+ (sy_call_t *)semop
+};
+
+/*
+ * Entry point for all SEM calls.
+ */
+int
+semsys(td, uap)
+ struct thread *td;
+ /* XXX actually varargs. */
+ struct semsys_args /* {
+ int which;
+ int a2;
+ int a3;
+ int a4;
+ int a5;
+ } */ *uap;
+{
+ int error;
+
+ if (!prison_allow(td->td_ucred, PR_ALLOW_SYSVIPC))
+ return (ENOSYS);
+ if (uap->which < 0 ||
+ uap->which >= sizeof(semcalls)/sizeof(semcalls[0]))
+ return (EINVAL);
+ error = (*semcalls[uap->which])(td, &uap->a2);
+ return (error);
+}
+#endif /* COMPAT_FREEBSD4 || COMPAT_FREEBSD5 || COMPAT_FREEBSD6 ||
+ COMPAT_FREEBSD7 */
OpenPOWER on IntegriCloud