#include <sys/malloc.h>
#include <sys/semaphore.h>
#include <sys/sysproto.h>
+#include <sys/proc_info.h>
#include <bsm/audit_kernel.h>
{
psx_sem_subsys_lck_grp_attr = lck_grp_attr_alloc_init();
- lck_grp_attr_setstat(psx_sem_subsys_lck_grp_attr);
psx_sem_subsys_lck_grp = lck_grp_alloc_init("posix shared memory", psx_sem_subsys_lck_grp_attr);
psx_sem_subsys_lck_attr = lck_attr_alloc_init();
- /* lck_attr_setdebug(psx_sem_subsys_lck_attr); */
lck_mtx_init(& psx_sem_subsys_mutex, psx_sem_subsys_lck_grp, psx_sem_subsys_lck_attr);
}
pinfo->psem_mode = cmode;
pinfo->psem_uid = kauth_cred_getuid(kauth_cred_get());
pinfo->psem_gid = kauth_cred_get()->cr_gid;
+ bcopy(pnbuf, &pinfo->psem_name[0], PSEMNAMLEN);
+ pinfo->psem_name[PSEMNAMLEN]= 0;
PSEM_SUBSYS_UNLOCK();
kret = semaphore_create(kernel_task, &pinfo->psem_semobject,
SYNC_POLICY_FIFO, value);
return (ENOTSUP);
}
+int
+fill_pseminfo(struct psemnode *pnode, struct psem_info * info)
+{
+ register struct pseminfo *pinfo;
+ struct stat *sb;
+
+ PSEM_SUBSYS_LOCK();
+ if ((pinfo = pnode->pinfo) == PSEMINFO_NULL){
+ PSEM_SUBSYS_UNLOCK();
+ return(EINVAL);
+ }
+
+#if 0
+ if ((pinfo->psem_flags & PSEM_ALLOCATED) != PSEM_ALLOCATED) {
+ PSEM_SUBSYS_UNLOCK();
+ return(EINVAL);
+ }
+#endif
+
+ sb = &info->psem_stat;
+ bzero(sb, sizeof(struct stat));
+
+ sb->st_mode = pinfo->psem_mode;
+ sb->st_uid = pinfo->psem_uid;
+ sb->st_gid = pinfo->psem_gid;
+ sb->st_size = pinfo->psem_usecount;
+ bcopy(&pinfo->psem_name[0], &info->psem_name[0], PSEMNAMLEN+1);
+
+ PSEM_SUBSYS_UNLOCK();
+ return(0);
+}
+