use alloc::vec::Vec;
use core::ffi::c_char;
use kmod::capi_fn;
#[capi_fn]
pub unsafe extern "C" fn kstrndup(s: *const c_char, max: usize, _gfp: u32) -> *mut c_char {
if s.is_null() {
return core::ptr::null_mut();
}
let len = crate::string::strnlen(s, max);
let buf: *mut c_char = Vec::with_capacity(len + 1).leak().as_mut_ptr();
if !buf.is_null() {
crate::string::memcpy(
buf as *mut core::ffi::c_void,
s as *const core::ffi::c_void,
len,
);
*buf.add(len) = 0;
}
buf
}
#[capi_fn]
pub unsafe extern "C" fn kmemdup(
src: *const core::ffi::c_void,
len: usize,
_gfp: u32,
) -> *mut core::ffi::c_void {
if src.is_null() {
return core::ptr::null_mut();
}
let buf: *mut core::ffi::c_void = Vec::with_capacity(len).leak().as_mut_ptr();
if !buf.is_null() {
crate::string::memcpy(buf, src, len);
}
buf
}