2  * Copyright (c) 2003 Apple Computer, Inc. All rights reserved. 
   4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 
   6  * This file contains Original Code and/or Modifications of Original Code 
   7  * as defined in and that are subject to the Apple Public Source License 
   8  * Version 2.0 (the 'License'). You may not use this file except in 
   9  * compliance with the License. The rights granted to you under the License 
  10  * may not be used to create, or enable the creation or redistribution of, 
  11  * unlawful or unlicensed copies of an Apple operating system, or to 
  12  * circumvent, violate, or enable the circumvention or violation of, any 
  13  * terms of an Apple operating system software license agreement. 
  15  * Please obtain a copy of the License at 
  16  * http://www.opensource.apple.com/apsl/ and read it before using this file. 
  18  * The Original Code and all software distributed under the License are 
  19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
  22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  23  * Please see the License for the specific language governing rights and 
  24  * limitations under the License. 
  26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 
  29 #include <sys/systm.h> 
  30 #include <sys/proc_internal.h> 
  31 #include <sys/vnode_internal.h> // vn_getpath() 
  32 #include <kern/task.h> 
  35 int     chudxnu_pid_for_task(task_t task
); 
  36 task_t  
chudxnu_task_for_pid(int pid
); 
  37 int     chudxnu_current_pid(void); 
  39 __private_extern__ 
int 
  40 chudxnu_pid_for_task(task_t task
) 
  46         p 
= (proc_t
)(get_bsdtask_info(task
)); 
  54 __private_extern__ task_t
 
  55 chudxnu_task_for_pid(int pid
) 
  58      proc_t p 
= proc_find(pid
); 
  66 __private_extern__ 
int 
  67 chudxnu_current_pid(void) 
  70     struct uthread 
*ut 
= get_bsdthread_info(current_thread()); 
  71     task_t t 
= current_task(); 
  74         pid 
= chudxnu_pid_for_task(t
); 
  77         // no task, so try looking in the uthread and/or proc 
  78         pid 
= proc_pid(current_proc()); 
  80         if(-1 == pid 
&& ut 
&& ut
->uu_proc
) { 
  81             pid 
= proc_pid(ut
->uu_proc
);