Codex Handbook
bwrap/src/main.rs 45 lines
#[cfg(all(target_os = "linux", bwrap_available))]fn main() {    use std::ffi::CStr;    use std::ffi::CString;    use std::os::raw::c_char;    use std::os::unix::ffi::OsStrExt;    unsafe extern "C" {        fn bwrap_main(argc: libc::c_int, argv: *const *const c_char) -> libc::c_int;    }    let cstrings = std::env::args_os()        .map(|arg| {            CString::new(arg.as_os_str().as_bytes())                .unwrap_or_else(|err| panic!("failed to convert argv to CString: {err}"))        })        .collect::<Vec<_>>();    let mut argv_ptrs = cstrings        .iter()        .map(CString::as_c_str)        .map(CStr::as_ptr)        .collect::<Vec<*const c_char>>();    argv_ptrs.push(std::ptr::null());    // SAFETY: We provide a null-terminated argv vector whose pointers remain    // valid for the duration of the call.    let exit_code = unsafe { bwrap_main(cstrings.len() as libc::c_int, argv_ptrs.as_ptr()) };    std::process::exit(exit_code);}#[cfg(all(target_os = "linux", not(bwrap_available)))]fn main() {    panic!(        r#"bubblewrap is not available in this build.Notes:- ensure the target OS is Linux- libcap headers must be available via pkg-config- bubblewrap sources expected at codex-rs/vendor/bubblewrap (default)"#    );}#[cfg(not(target_os = "linux"))]fn main() {    panic!("bwrap is only supported on Linux");}