mirror of
https://github.com/wez/wezterm.git
synced 2024-09-20 03:09:06 +03:00
mux: proc_pidinfo is now available in libc on macos
So we don't need our own copy of the ffi bits here
This commit is contained in:
parent
43dff29391
commit
09e8d7b92f
@ -772,67 +772,20 @@ impl LocalPane {
|
||||
#[cfg(target_os = "macos")]
|
||||
fn divine_current_working_dir_macos(&self) -> Option<Url> {
|
||||
if let Some(pid) = self.pty.borrow().process_group_leader() {
|
||||
extern "C" {
|
||||
fn proc_pidinfo(
|
||||
pid: libc::pid_t,
|
||||
flavor: libc::c_int,
|
||||
arg: u64,
|
||||
buffer: *mut proc_vnodepathinfo,
|
||||
buffersize: libc::c_int,
|
||||
) -> libc::c_int;
|
||||
}
|
||||
const PROC_PIDVNODEPATHINFO: libc::c_int = 9;
|
||||
#[repr(C)]
|
||||
struct vinfo_stat {
|
||||
vst_dev: u32,
|
||||
vst_mode: u16,
|
||||
vst_nlink: u16,
|
||||
vst_ino: u64,
|
||||
vst_uid: libc::uid_t,
|
||||
vst_gid: libc::gid_t,
|
||||
vst_atime: i64,
|
||||
vst_atimensec: i64,
|
||||
vst_mtime: i64,
|
||||
vst_mtimensec: i64,
|
||||
vst_ctime: i64,
|
||||
vst_ctimensec: i64,
|
||||
vst_birthtime: i64,
|
||||
vst_birthtimensec: i64,
|
||||
vst_size: libc::off_t,
|
||||
vst_blocks: i64,
|
||||
vst_blksize: i32,
|
||||
vst_flags: u32,
|
||||
vst_gen: u32,
|
||||
vst_rdev: u32,
|
||||
vst_qspare_1: i64,
|
||||
vst_qspare_2: i64,
|
||||
}
|
||||
#[repr(C)]
|
||||
struct vnode_info {
|
||||
vi_stat: vinfo_stat,
|
||||
vi_type: libc::c_int,
|
||||
vi_pad: libc::c_int,
|
||||
vi_fsid: libc::fsid_t,
|
||||
}
|
||||
|
||||
const MAXPATHLEN: usize = 1024;
|
||||
#[repr(C)]
|
||||
struct vnode_info_path {
|
||||
vip_vi: vnode_info,
|
||||
vip_path: [i8; MAXPATHLEN],
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
struct proc_vnodepathinfo {
|
||||
pvi_cdir: vnode_info_path,
|
||||
pvi_rdir: vnode_info_path,
|
||||
}
|
||||
|
||||
let mut pathinfo: proc_vnodepathinfo = unsafe { std::mem::zeroed() };
|
||||
let mut pathinfo: libc::proc_vnodepathinfo = unsafe { std::mem::zeroed() };
|
||||
let size = std::mem::size_of_val(&pathinfo) as libc::c_int;
|
||||
let ret = unsafe { proc_pidinfo(pid, PROC_PIDVNODEPATHINFO, 0, &mut pathinfo, size) };
|
||||
let ret = unsafe {
|
||||
libc::proc_pidinfo(
|
||||
pid,
|
||||
libc::PROC_PIDVNODEPATHINFO,
|
||||
0,
|
||||
&mut pathinfo as *mut _ as *mut _,
|
||||
size,
|
||||
)
|
||||
};
|
||||
if ret == size {
|
||||
let path = unsafe { std::ffi::CStr::from_ptr(pathinfo.pvi_cdir.vip_path.as_ptr()) };
|
||||
let path =
|
||||
unsafe { std::ffi::CStr::from_ptr(pathinfo.pvi_cdir.vip_path.as_ptr() as _) };
|
||||
if let Ok(s) = path.to_str() {
|
||||
return Url::parse(&format!("file://localhost{}", s)).ok();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user