#![allow(unsafe_code)]
mod cli;
use std::ffi::{CStr, c_char, c_int};
#[unsafe(no_mangle)]
pub unsafe extern "C" fn printwell_main(
arg_count: c_int,
arg_values: *const *const c_char,
) -> c_int {
let arguments: Vec<String> = if arg_values.is_null() || arg_count <= 0 {
vec!["printwell".to_string()]
} else {
(0..usize::try_from(arg_count).unwrap_or(0))
.filter_map(|i| {
let ptr = unsafe { *arg_values.add(i) };
if ptr.is_null() {
None
} else {
unsafe { CStr::from_ptr(ptr) }
.to_str()
.ok()
.map(String::from)
}
})
.collect()
};
match cli::run(arguments) {
Ok(()) => 0,
Err(e) => {
eprintln!("Error: {e:?}");
1
}
}
}
#[unsafe(no_mangle)]
pub const extern "C" fn printwell_init() {
}
#[unsafe(no_mangle)]
pub const extern "C" fn printwell_cleanup() {
}