PR: kern/29698 (part)
Reviewed by: audit Implement SEM_STAT (like IPC_STAT but treats semid as sema-index). The linuxerator will need it.
This commit is contained in:
parent
2afc0f9696
commit
30b1089d33
@ -499,6 +499,25 @@ __semctl(td, uap)
|
|||||||
goto done2;
|
goto done2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch(cmd) {
|
||||||
|
case SEM_STAT:
|
||||||
|
if (semid < 0 || semid >= seminfo.semmsl)
|
||||||
|
return(EINVAL);
|
||||||
|
semaptr = &sema[semid];
|
||||||
|
if ((semaptr->sem_perm.mode & SEM_ALLOC) == 0 )
|
||||||
|
return(EINVAL);
|
||||||
|
if ((error = ipcperm(td, &semaptr->sem_perm, IPC_R)))
|
||||||
|
return(error);
|
||||||
|
if ((error = copyin(arg, &real_arg, sizeof(real_arg))) != 0)
|
||||||
|
return(error);
|
||||||
|
error = copyout((caddr_t)semaptr, real_arg.buf,
|
||||||
|
sizeof(struct semid_ds));
|
||||||
|
rval = IXSEQ_TO_IPCID(semid,semaptr->sem_perm);
|
||||||
|
if (error == 0)
|
||||||
|
td->td_retval[0] = rval;
|
||||||
|
goto done2;
|
||||||
|
}
|
||||||
|
|
||||||
semid = IPCID_TO_IX(semid);
|
semid = IPCID_TO_IX(semid);
|
||||||
if (semid < 0 || semid >= seminfo.semmsl) {
|
if (semid < 0 || semid >= seminfo.semmsl) {
|
||||||
error = EINVAL;
|
error = EINVAL;
|
||||||
|
@ -58,6 +58,8 @@ union semun {
|
|||||||
#define GETZCNT 7 /* Return the value of semzcnt {READ} */
|
#define GETZCNT 7 /* Return the value of semzcnt {READ} */
|
||||||
#define SETVAL 8 /* Set the value of semval to arg.val {ALTER} */
|
#define SETVAL 8 /* Set the value of semval to arg.val {ALTER} */
|
||||||
#define SETALL 9 /* Set semvals from arg.array {ALTER} */
|
#define SETALL 9 /* Set semvals from arg.array {ALTER} */
|
||||||
|
#define SEM_STAT 10 /* Like IPC_STAT but treats semid as sema-index */
|
||||||
|
#define SEM_INFO 11 /* Like IPC_INFO but treats semid as sema-index */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Permissions
|
* Permissions
|
||||||
|
Loading…
x
Reference in New Issue
Block a user