use std::{
env::consts::{ARCH, OS},
ffi::CString,
os::raw::c_char,
ptr,
};
#[cfg(feature = "deps")]
pub mod deps {}
#[inline]
#[cfg_attr(feature = "clib", no_mangle)]
pub unsafe extern "C" fn nstd_os_name() -> *mut c_char {
static_nstd_create_cstr(OS)
}
#[inline]
#[cfg_attr(feature = "clib", no_mangle)]
pub unsafe extern "C" fn nstd_os_free_name(os_name: *mut *mut c_char) {
static_nstd_deallocate_cstr(os_name);
}
#[inline]
#[cfg_attr(feature = "clib", no_mangle)]
pub unsafe extern "C" fn nstd_os_arch_name() -> *mut c_char {
static_nstd_create_cstr(ARCH)
}
#[inline]
#[cfg_attr(feature = "clib", no_mangle)]
pub unsafe extern "C" fn nstd_os_free_arch_name(arch_name: *mut *mut c_char) {
static_nstd_deallocate_cstr(arch_name);
}
#[inline]
unsafe fn static_nstd_create_cstr(rstr: &str) -> *mut c_char {
let mut bytes = String::from(rstr).into_bytes();
bytes.push(0);
CString::from_vec_unchecked(bytes).into_raw() as *mut c_char
}
#[inline]
unsafe fn static_nstd_deallocate_cstr(cstr: *mut *mut c_char) {
drop(CString::from_raw(*cstr));
*cstr = ptr::null_mut();
}