* Get per-process file descriptors for use by procstat(1), et al. */
| 4559 | * Get per-process file descriptors for use by procstat(1), et al. |
| 4560 | */ |
| 4561 | static int |
| 4562 | sysctl_kern_proc_filedesc(SYSCTL_HANDLER_ARGS) |
| 4563 | { |
| 4564 | struct sbuf sb; |
| 4565 | struct proc *p; |
| 4566 | ssize_t maxlen; |
| 4567 | int error, error2, *name; |
| 4568 | |
| 4569 | name = (int *)arg1; |
| 4570 | |
| 4571 | sbuf_new_for_sysctl(&sb, NULL, FILEDESC_SBUF_SIZE, req); |
| 4572 | sbuf_clear_flags(&sb, SBUF_INCLUDENUL); |
| 4573 | error = pget((pid_t)name[0], PGET_CANDEBUG | PGET_NOTWEXIT, &p); |
| 4574 | if (error != 0) { |
| 4575 | sbuf_delete(&sb); |
| 4576 | return (error); |
| 4577 | } |
| 4578 | maxlen = req->oldptr != NULL ? req->oldlen : -1; |
| 4579 | error = kern_proc_filedesc_out(p, &sb, maxlen, |
| 4580 | KERN_FILEDESC_PACK_KINFO); |
| 4581 | error2 = sbuf_finish(&sb); |
| 4582 | sbuf_delete(&sb); |
| 4583 | return (error != 0 ? error : error2); |
| 4584 | } |
| 4585 | |
| 4586 | #ifdef COMPAT_FREEBSD7 |
| 4587 | #ifdef KINFO_OFILE_SIZE |
nothing calls this directly
no test coverage detected