mirror of
https://github.com/openai/codex.git
synced 2026-11-06 20:20:34 +00:00
46 lines
1.4 KiB
Rust
46 lines
1.4 KiB
Rust
#[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");
|
|
}
|