]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/kern/posix_sem.c
xnu-792.10.96.tar.gz
[apple/xnu.git] / bsd / kern / posix_sem.c
index cf17502e03de7d165f2001639133b2db018e8742..2b91c34bcf4b703c270100bcb0af8b439c9bb449 100644 (file)
@@ -52,6 +52,7 @@
 #include <sys/malloc.h>
 #include <sys/semaphore.h>
 #include <sys/sysproto.h>
+#include <sys/proc_info.h>
 
 #include <bsm/audit_kernel.h>
 
@@ -181,12 +182,10 @@ psem_lock_init( void )
 {
 
     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);
 }
 
@@ -469,6 +468,8 @@ sem_open(struct proc *p, struct sem_open_args *uap, user_addr_t *retval)
                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);
@@ -1027,3 +1028,35 @@ psem_kqfilter(__unused struct fileproc *fp, __unused struct knote *kn,
        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);
+}
+