MCPcopy Create free account
hub / github.com/F-Stack/f-stack / sys___semctl

Function sys___semctl

freebsd/kern/sysv_sem.c:634–690  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

632};
633#endif
634int
635sys___semctl(struct thread *td, struct __semctl_args *uap)
636{
637 struct semid_ds dsbuf;
638 union semun arg, semun;
639 register_t rval;
640 int error;
641
642 switch (uap->cmd) {
643 case SEM_STAT:
644 case IPC_SET:
645 case IPC_STAT:
646 case GETALL:
647 case SETVAL:
648 case SETALL:
649 error = copyin(uap->arg, &arg, sizeof(arg));
650 if (error)
651 return (error);
652 break;
653 }
654
655 switch (uap->cmd) {
656 case SEM_STAT:
657 case IPC_STAT:
658 semun.buf = &dsbuf;
659 break;
660 case IPC_SET:
661 error = copyin(arg.buf, &dsbuf, sizeof(dsbuf));
662 if (error)
663 return (error);
664 semun.buf = &dsbuf;
665 break;
666 case GETALL:
667 case SETALL:
668 semun.array = arg.array;
669 break;
670 case SETVAL:
671 semun.val = arg.val;
672 break;
673 }
674
675 error = kern_semctl(td, uap->semid, uap->semnum, uap->cmd, &semun,
676 &rval);
677 if (error)
678 return (error);
679
680 switch (uap->cmd) {
681 case SEM_STAT:
682 case IPC_STAT:
683 error = copyout(&dsbuf, arg.buf, sizeof(dsbuf));
684 break;
685 }
686
687 if (error == 0)
688 td->td_retval[0] = rval;
689 return (error);
690}
691

Callers

nothing calls this directly

Calls 3

kern_semctlFunction · 0.85
copyinFunction · 0.50
copyoutFunction · 0.50

Tested by

no test coverage detected