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

Function freebsd32_semctl

freebsd/kern/sysv_sem.c:1939–2008  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1937#endif
1938
1939int
1940freebsd32_semctl(struct thread *td, struct freebsd32_semctl_args *uap)
1941{
1942 struct semid_ds32 dsbuf32;
1943 struct semid_ds dsbuf;
1944 union semun semun;
1945 union semun32 arg;
1946 register_t rval;
1947 int error;
1948
1949 switch (uap->cmd) {
1950 case SEM_STAT:
1951 case IPC_SET:
1952 case IPC_STAT:
1953 case GETALL:
1954 case SETVAL:
1955 case SETALL:
1956 error = copyin(uap->arg, &arg, sizeof(arg));
1957 if (error)
1958 return (error);
1959 break;
1960 }
1961
1962 switch (uap->cmd) {
1963 case SEM_STAT:
1964 case IPC_STAT:
1965 semun.buf = &dsbuf;
1966 break;
1967 case IPC_SET:
1968 error = copyin(PTRIN(arg.buf), &dsbuf32, sizeof(dsbuf32));
1969 if (error)
1970 return (error);
1971 freebsd32_ipcperm_in(&dsbuf32.sem_perm, &dsbuf.sem_perm);
1972 PTRIN_CP(dsbuf32, dsbuf, __sem_base);
1973 CP(dsbuf32, dsbuf, sem_nsems);
1974 CP(dsbuf32, dsbuf, sem_otime);
1975 CP(dsbuf32, dsbuf, sem_ctime);
1976 semun.buf = &dsbuf;
1977 break;
1978 case GETALL:
1979 case SETALL:
1980 semun.array = PTRIN(arg.array);
1981 break;
1982 case SETVAL:
1983 semun.val = arg.val;
1984 break;
1985 }
1986
1987 error = kern_semctl(td, uap->semid, uap->semnum, uap->cmd, &semun,
1988 &rval);
1989 if (error)
1990 return (error);
1991
1992 switch (uap->cmd) {
1993 case SEM_STAT:
1994 case IPC_STAT:
1995 bzero(&dsbuf32, sizeof(dsbuf32));
1996 freebsd32_ipcperm_out(&dsbuf.sem_perm, &dsbuf32.sem_perm);

Callers

nothing calls this directly

Calls 6

freebsd32_ipcperm_inFunction · 0.85
kern_semctlFunction · 0.85
bzeroFunction · 0.85
freebsd32_ipcperm_outFunction · 0.85
copyinFunction · 0.50
copyoutFunction · 0.50

Tested by

no test coverage detected