Skip to content

Commit 5991ab7

Browse files
Use env::current_exe for libbacktrace on macOS
1 parent 6dd9ea7 commit 5991ab7

File tree

1 file changed

+7
-20
lines changed
  • src/libstd/sys/unix/backtrace

1 file changed

+7
-20
lines changed

src/libstd/sys/unix/backtrace/mod.rs

+7-20
Original file line numberDiff line numberDiff line change
@@ -104,28 +104,15 @@ pub mod gnu {
104104

105105
#[cfg(any(target_os = "macos", target_os = "ios"))]
106106
pub fn get_executable_filename() -> io::Result<(Vec<c_char>, fs::File)> {
107-
use ptr;
108-
use slice;
109-
use ffi::OsStr;
107+
use env;
110108
use os::unix::ffi::OsStrExt;
111-
use libc::c_int;
112109

113-
extern {
114-
fn _NSGetExecutablePath(buf: *mut c_char,
115-
bufsize: *mut u32) -> c_int;
116-
}
117-
unsafe {
118-
let mut bufsize: u32 = 0;
119-
_NSGetExecutablePath(ptr::null_mut(), &mut bufsize);
120-
if bufsize == 0 { return Err(io::Error::last_os_error()); }
121-
let mut buffer: Vec<c_char> = Vec::with_capacity(bufsize as usize);
122-
let ret = _NSGetExecutablePath(buffer.as_mut_ptr(), &mut bufsize);
123-
if ret != 0 { return Err(io::Error::last_os_error()); }
124-
buffer.set_len(bufsize as usize);
125-
let file = fs::File::open(OsStr::from_bytes(
126-
slice::from_raw_parts(buffer.as_ptr() as *const u8, buffer.len()-1)))?;
127-
Ok((buffer, file))
128-
}
110+
let filename = env::current_exe()?;
111+
let file = fs::File::open(&filename)?;
112+
let mut filename_cstr: Vec<_> = filename.as_os_str().as_bytes().iter()
113+
.map(|&x| x as c_char).collect();
114+
filename_cstr.push(0); // Null terminate
115+
Ok((filename_cstr, file))
129116
}
130117
}
131118

0 commit comments

Comments
 (0)