Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/uipc_sem.c
Show First 20 Lines • Show All 459 Lines • ▼ Show 20 Lines | #endif | ||||
return (copyout(ptr, semidp, ptrs)); | return (copyout(ptr, semidp, ptrs)); | ||||
} | } | ||||
/* Other helper routines. */ | /* Other helper routines. */ | ||||
static int | static int | ||||
ksem_create(struct thread *td, const char *name, semid_t *semidp, mode_t mode, | ksem_create(struct thread *td, const char *name, semid_t *semidp, mode_t mode, | ||||
unsigned int value, int flags, int compat32) | unsigned int value, int flags, int compat32) | ||||
{ | { | ||||
struct filedesc *fdp; | struct pathsdesc *pdp; | ||||
struct ksem *ks; | struct ksem *ks; | ||||
struct file *fp; | struct file *fp; | ||||
char *path; | char *path; | ||||
const char *pr_path; | const char *pr_path; | ||||
size_t pr_pathlen; | size_t pr_pathlen; | ||||
Fnv32_t fnv; | Fnv32_t fnv; | ||||
int error, fd; | int error, fd; | ||||
AUDIT_ARG_FFLAGS(flags); | AUDIT_ARG_FFLAGS(flags); | ||||
AUDIT_ARG_MODE(mode); | AUDIT_ARG_MODE(mode); | ||||
AUDIT_ARG_VALUE(value); | AUDIT_ARG_VALUE(value); | ||||
if (value > SEM_VALUE_MAX) | if (value > SEM_VALUE_MAX) | ||||
return (EINVAL); | return (EINVAL); | ||||
fdp = td->td_proc->p_fd; | pdp = td->td_proc->p_pd; | ||||
mode = (mode & ~fdp->fd_cmask) & ACCESSPERMS; | mode = (mode & ~pdp->pd_cmask) & ACCESSPERMS; | ||||
error = falloc(td, &fp, &fd, O_CLOEXEC); | error = falloc(td, &fp, &fd, O_CLOEXEC); | ||||
if (error) { | if (error) { | ||||
if (name == NULL) | if (name == NULL) | ||||
error = ENOSPC; | error = ENOSPC; | ||||
return (error); | return (error); | ||||
} | } | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 617 Lines • Show Last 20 Lines |