use std::path::Path;
use onelf_format::Manifest;
pub fn resolve_entrypoint(manifest: &Manifest, argv0: &str) -> usize {
if let Ok(name) = std::env::var("ONELF_ENTRYPOINT") {
if let Some(idx) = find_entrypoint_by_name(manifest, &name) {
return idx;
}
}
let basename = Path::new(argv0)
.file_name()
.and_then(|n| n.to_str())
.unwrap_or(argv0);
if let Some(idx) = find_entrypoint_by_name(manifest, basename) {
return idx;
}
manifest.header.default_entrypoint as usize
}
fn find_entrypoint_by_name(manifest: &Manifest, name: &str) -> Option<usize> {
manifest
.entrypoints
.iter()
.position(|ep| manifest.get_string(ep.name) == name)
}