darwin_libproc/
pid_cwd.rs1use std::ffi::OsStr;
2use std::io;
3use std::os::unix::ffi::OsStrExt;
4use std::path::PathBuf;
5use std::slice;
6
7use super::vnode_path_info;
8
9pub fn pid_cwd(pid: libc::pid_t) -> io::Result<PathBuf> {
11 let vnode_path = vnode_path_info(pid)?;
12 let raw_path = unsafe {
13 slice::from_raw_parts(
14 vnode_path.pvi_cdir.vip_path.as_ptr() as *const u8,
15 vnode_path.pvi_cdir.vip_path.len(),
16 )
17 };
18 let first_null = memchr::memchr(0x00, &raw_path).unwrap_or(0);
19
20 let os_str = OsStr::from_bytes(&raw_path[..first_null]);
21
22 Ok(PathBuf::from(os_str.to_os_string()))
23}