mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 09:14:20 +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)
|
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> {
|
pub fn current_exe() -> io::Result<PathBuf> {
|
||||||
use crate::io::ErrorKind;
|
use crate::io::ErrorKind;
|
||||||
Err(io::const_io_error!(ErrorKind::Unsupported, "Not yet implemented!"))
|
Err(io::const_io_error!(ErrorKind::Unsupported, "Not yet implemented!"))
|
||||||
@ -451,6 +451,26 @@ pub fn current_exe() -> io::Result<PathBuf> {
|
|||||||
super::unsupported::unsupported()
|
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 {
|
pub struct Env {
|
||||||
iter: vec::IntoIter<(OsString, OsString)>,
|
iter: vec::IntoIter<(OsString, OsString)>,
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user