diff options
Diffstat (limited to 'proc/info.c')
-rw-r--r-- | proc/info.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/proc/info.c b/proc/info.c index 18cb69fc..445fcd8b 100644 --- a/proc/info.c +++ b/proc/info.c @@ -765,3 +765,35 @@ S_proc_get_tty (struct proc *p, pid_t pid, { return EOPNOTSUPP; /* XXX */ } + +/* Implement proc_getnports as described in <hurd/process.defs>. */ +kern_return_t +S_proc_getnports (struct proc *callerp, + pid_t pid, + mach_msg_type_number_t *nports) +{ + struct proc *p = pid_find (pid); + mach_port_array_t names; + mach_msg_type_number_t ncount; + mach_port_type_array_t types; + mach_msg_type_number_t tcount; + error_t err = 0; + + /* No need to check CALLERP here; we don't use it. */ + + if (!p) + return ESRCH; + + err = mach_port_names (p->p_task, &names, &ncount, &types, &tcount); + if (err == KERN_INVALID_TASK) + err = ESRCH; + + if (!err) { + *nports = ncount; + + munmap (names, ncount * sizeof (mach_port_t)); + munmap (types, tcount * sizeof (mach_port_type_t)); + } + + return err; +} |