current_exe haiku code path simplification all of these part of libc
This commit is contained in:
parent
7129033b42
commit
5501eba645
1 changed files with 8 additions and 33 deletions
|
@ -388,46 +388,21 @@ pub fn current_exe() -> io::Result<PathBuf> {
|
|||
|
||||
#[cfg(target_os = "haiku")]
|
||||
pub fn current_exe() -> io::Result<PathBuf> {
|
||||
// Use Haiku's image info functions
|
||||
#[repr(C)]
|
||||
struct image_info {
|
||||
id: i32,
|
||||
type_: i32,
|
||||
sequence: i32,
|
||||
init_order: i32,
|
||||
init_routine: *mut libc::c_void, // function pointer
|
||||
term_routine: *mut libc::c_void, // function pointer
|
||||
device: libc::dev_t,
|
||||
node: libc::ino_t,
|
||||
name: [libc::c_char; 1024], // MAXPATHLEN
|
||||
text: *mut libc::c_void,
|
||||
data: *mut libc::c_void,
|
||||
text_size: i32,
|
||||
data_size: i32,
|
||||
api_version: i32,
|
||||
abi: i32,
|
||||
}
|
||||
|
||||
unsafe {
|
||||
extern "C" {
|
||||
fn _get_next_image_info(
|
||||
team_id: i32,
|
||||
cookie: *mut i32,
|
||||
info: *mut image_info,
|
||||
size: i32,
|
||||
) -> i32;
|
||||
}
|
||||
|
||||
let mut info: image_info = mem::zeroed();
|
||||
let mut info: mem::MaybeUninit<libc::image_info> = mem::MaybeUninit::uninit();
|
||||
let mut cookie: i32 = 0;
|
||||
// the executable can be found at team id 0
|
||||
let result =
|
||||
_get_next_image_info(0, &mut cookie, &mut info, mem::size_of::<image_info>() as i32);
|
||||
let result = libc::_get_next_image_info(
|
||||
0,
|
||||
&mut cookie,
|
||||
info.as_mut_ptr(),
|
||||
mem::size_of::<libc::image_info>(),
|
||||
);
|
||||
if result != 0 {
|
||||
use crate::io::ErrorKind;
|
||||
Err(io::Error::new_const(ErrorKind::Uncategorized, &"Error getting executable path"))
|
||||
} else {
|
||||
let name = CStr::from_ptr(info.name.as_ptr()).to_bytes();
|
||||
let name = CStr::from_ptr((*info.as_ptr()).name.as_ptr()).to_bytes();
|
||||
Ok(PathBuf::from(OsStr::from_bytes(name)))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue