1/* 2 * Copyright (c) 2003 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 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. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 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. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 29#include <sys/systm.h> 30#include <sys/proc_internal.h> 31#include <sys/vnode_internal.h> // vn_getpath() 32#include <kern/task.h> 33#include <sys/user.h> 34 35int chudxnu_pid_for_task(task_t task); 36task_t chudxnu_task_for_pid(int pid); 37int chudxnu_current_pid(void); 38 39__private_extern__ int 40chudxnu_pid_for_task(task_t task) 41{ 42 proc_t p; 43 int pid = -1; 44 45 if(task!=TASK_NULL) { 46 p = (proc_t)(get_bsdtask_info(task)); 47 if(p) { 48 return (proc_pid(p)); 49 } 50 } 51 return pid; 52} 53 54__private_extern__ task_t 55chudxnu_task_for_pid(int pid) 56{ 57 task_t t = TASK_NULL; 58 proc_t p = proc_find(pid); 59 if(p) { 60 t = p->task; 61 proc_rele(p); 62 } 63 return (t); 64} 65 66__private_extern__ int 67chudxnu_current_pid(void) 68{ 69 int pid = -1; 70 struct uthread *ut = get_bsdthread_info(current_thread()); 71 task_t t = current_task(); 72 73 if(t != TASK_NULL) { 74 pid = chudxnu_pid_for_task(t); 75 } 76 if(-1 == pid) { 77 // no task, so try looking in the uthread and/or proc 78 pid = proc_pid(current_proc()); 79 80 if(-1 == pid && ut && ut->uu_proc) { 81 pid = proc_pid(ut->uu_proc); 82 } 83 } 84 85 return pid; 86} 87