mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 15:23:46 +00:00
Rollup merge of #96193 - djkoloski:fuchsia_current_exe, r=tmandry
[fuchsia] Add implementation for `current_exe` This implementation returns a best attempt at the current exe path. On fuchsia, fdio will always use `argv[0]` as the process name and if it is not set then an error will be returned. Because this is not guaranteed to be the case, this implementation returns an error if `argv` does not contain any elements.
This commit is contained in:
commit
1e43aae0ef
@ -427,7 +427,7 @@ pub fn current_exe() -> io::Result<PathBuf> {
|
||||
crate::fs::read_to_string("sys:exe").map(PathBuf::from)
|
||||
}
|
||||
|
||||
#[cfg(any(target_os = "fuchsia", target_os = "l4re"))]
|
||||
#[cfg(target_os = "l4re")]
|
||||
pub fn current_exe() -> io::Result<PathBuf> {
|
||||
use crate::io::ErrorKind;
|
||||
Err(io::const_io_error!(ErrorKind::Unsupported, "Not yet implemented!"))
|
||||
@ -451,6 +451,26 @@ pub fn current_exe() -> io::Result<PathBuf> {
|
||||
super::unsupported::unsupported()
|
||||
}
|
||||
|
||||
#[cfg(target_os = "fuchsia")]
|
||||
pub fn current_exe() -> io::Result<PathBuf> {
|
||||
use crate::io::ErrorKind;
|
||||
|
||||
#[cfg(test)]
|
||||
use realstd::env;
|
||||
|
||||
#[cfg(not(test))]
|
||||
use crate::env;
|
||||
|
||||
let exe_path = env::args().next().ok_or(io::const_io_error!(
|
||||
ErrorKind::Uncategorized,
|
||||
"an executable path was not found because no arguments were provided through argv"
|
||||
))?;
|
||||
let path = PathBuf::from(exe_path);
|
||||
|
||||
// Prepend the current working directory to the path if it's not absolute.
|
||||
if !path.is_absolute() { getcwd().map(|cwd| cwd.join(path)) } else { Ok(path) }
|
||||
}
|
||||
|
||||
pub struct Env {
|
||||
iter: vec::IntoIter<(OsString, OsString)>,
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user