use pai::{
api::{messages::CbAction, Response},
ctx,
};
#[pai_macros::pai_hook]
fn opendir(dir: String) -> pai::Result<CbAction> {
log::error!("opendir('{dir}')");
Ok(CbAction::None)
}
fn main() -> anyhow::Result<()> {
env_logger::init();
let dir = env!("CARGO_MANIFEST_DIR");
let mut cmd = std::process::Command::new("/usr/bin/ls");
cmd.arg(dir);
let mut ctx: ctx::Main<usize, pai::Error> = ctx::Main::new_spawn(cmd, 0_usize)?;
let sec = ctx.secondary_mut();
let _stopped = sec.run_until_entry()?;
let pbuf = sec.proc.exe_path()?;
let tid = sec.get_first_stopped()?;
sec.hook_got_entry(tid, &pbuf, "opendir", opendir)?;
let (r, _res) = ctx.loop_until_exit()?;
assert_eq!(r, Response::TargetExit);
Ok(())
}