29 lines
868 B
Rust
29 lines
868 B
Rust
//! Memory management for FFI functions
|
|
|
|
use std::ffi::CString;
|
|
use std::os::raw::c_char;
|
|
|
|
/// Free a C string allocated by Rust
|
|
///
|
|
/// # Safety
|
|
/// This function must only be called with pointers returned by other FFI functions.
|
|
/// Calling with arbitrary pointers or multiple times on the same pointer is undefined behavior.
|
|
#[no_mangle]
|
|
pub unsafe extern "C" fn sgl_free_string(s: *mut c_char) {
|
|
if !s.is_null() {
|
|
let _ = CString::from_raw(s);
|
|
}
|
|
}
|
|
|
|
/// Free token IDs array allocated by Rust
|
|
///
|
|
/// # Safety
|
|
/// This function must only be called with pointers returned by `sgl_tokenizer_encode`.
|
|
/// The `count` parameter must match the length of the array.
|
|
#[no_mangle]
|
|
pub unsafe extern "C" fn sgl_free_token_ids(ptr: *mut u32, count: usize) {
|
|
if !ptr.is_null() && count > 0 {
|
|
let _ = Vec::from_raw_parts(ptr, count, count);
|
|
}
|
|
}
|