From a3dcac93b29f95e0ca40186799fc8d2f29b13a5a Mon Sep 17 00:00:00 2001 From: Jackson Coxson Date: Sat, 13 Dec 2025 10:55:15 -0700 Subject: [PATCH] Add plist_array_free helper function to FFI a b --- ffi/src/lib.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ffi/src/lib.rs b/ffi/src/lib.rs index 38b6565..2f74986 100644 --- a/ffi/src/lib.rs +++ b/ffi/src/lib.rs @@ -48,6 +48,7 @@ pub use pairing_file::*; use idevice::{Idevice, IdeviceSocket, ReadWrite}; use once_cell::sync::Lazy; +use plist_ffi::PlistWrapper; use std::{ ffi::{CStr, CString, c_char}, ptr::null_mut, @@ -405,3 +406,18 @@ pub unsafe extern "C" fn idevice_data_free(data: *mut u8, len: usize) { let _ = unsafe { std::slice::from_raw_parts(data, len) }; } } + +/// Frees an array of plists allocated by this library +/// +/// # Safety +/// `data` must be a pointer to data allocated by this library, +/// NOT data allocated by libplist. +#[unsafe(no_mangle)] +pub unsafe extern "C" fn idevice_plist_array_free(plists: *mut plist_t, len: usize) { + if !plists.is_null() { + let data = unsafe { std::slice::from_raw_parts(plists, len) }; + for x in data { + unsafe { plist_ffi::creation::plist_free((*x) as *mut PlistWrapper) }; + } + } +}