use std::path::Path;
pub fn install_dir() -> tempfile::TempDir {
let bin = ljos_cli::proc_tree::own_home()
.expect("this user's passwd entry names a home")
.join(".local/bin");
std::fs::create_dir_all(&bin).unwrap();
tempfile::Builder::new()
.prefix(".ljos-runner-")
.tempdir_in(&bin)
.unwrap()
}
pub fn runner_at(path: &Path) {
if path.exists() {
return;
}
let tmp = path.with_extension("part");
std::fs::copy("/bin/sh", &tmp).unwrap();
std::fs::rename(&tmp, path).unwrap();
for _ in 0..200 {
match std::process::Command::new(path).args(["-c", ":"]).status() {
Err(e) if e.raw_os_error() == Some(26) => {
std::thread::sleep(std::time::Duration::from_millis(10));
}
_ => return,
}
}
}