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

Function freebsd7___semctl

freebsd/kern/sysv_sem.c:1770–1839  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1768};
1769#endif
1770int
1771freebsd7___semctl(struct thread *td, struct freebsd7___semctl_args *uap)
1772{
1773 struct semid_ds_old dsold;
1774 struct semid_ds dsbuf;
1775 union semun_old arg;
1776 union semun semun;
1777 register_t rval;
1778 int error;
1779
1780 switch (uap->cmd) {
1781 case SEM_STAT:
1782 case IPC_SET:
1783 case IPC_STAT:
1784 case GETALL:
1785 case SETVAL:
1786 case SETALL:
1787 error = copyin(uap->arg, &arg, sizeof(arg));
1788 if (error)
1789 return (error);
1790 break;
1791 }
1792
1793 switch (uap->cmd) {
1794 case SEM_STAT:
1795 case IPC_STAT:
1796 semun.buf = &dsbuf;
1797 break;
1798 case IPC_SET:
1799 error = copyin(arg.buf, &dsold, sizeof(dsold));
1800 if (error)
1801 return (error);
1802 ipcperm_old2new(&dsold.sem_perm, &dsbuf.sem_perm);
1803 CP(dsold, dsbuf, __sem_base);
1804 CP(dsold, dsbuf, sem_nsems);
1805 CP(dsold, dsbuf, sem_otime);
1806 CP(dsold, dsbuf, sem_ctime);
1807 semun.buf = &dsbuf;
1808 break;
1809 case GETALL:
1810 case SETALL:
1811 semun.array = arg.array;
1812 break;
1813 case SETVAL:
1814 semun.val = arg.val;
1815 break;
1816 }
1817
1818 error = kern_semctl(td, uap->semid, uap->semnum, uap->cmd, &semun,
1819 &rval);
1820 if (error)
1821 return (error);
1822
1823 switch (uap->cmd) {
1824 case SEM_STAT:
1825 case IPC_STAT:
1826 bzero(&dsold, sizeof(dsold));
1827 ipcperm_new2old(&dsbuf.sem_perm, &dsold.sem_perm);

Callers

nothing calls this directly

Calls 6

ipcperm_old2newFunction · 0.85
kern_semctlFunction · 0.85
bzeroFunction · 0.85
ipcperm_new2oldFunction · 0.85
copyinFunction · 0.50
copyoutFunction · 0.50

Tested by

no test coverage detected