From b42833138bf34d88a82b06d806676d0f0449f496 Mon Sep 17 00:00:00 2001 From: gwenn Date: Sat, 1 Feb 2025 16:04:32 +0100 Subject: [PATCH] Dedup free_boxed_value --- src/collation.rs | 6 +----- src/functions.rs | 6 +----- src/util/mod.rs | 5 +++++ src/vtab/mod.rs | 7 +------ 4 files changed, 8 insertions(+), 16 deletions(-) diff --git a/src/collation.rs b/src/collation.rs index 8f58950..212ece6 100644 --- a/src/collation.rs +++ b/src/collation.rs @@ -6,13 +6,9 @@ use std::ptr; use std::slice; use crate::ffi; +use crate::util::free_boxed_value; use crate::{str_to_cstring, Connection, InnerConnection, Result}; -// FIXME copy/paste from function.rs -unsafe extern "C" fn free_boxed_value(p: *mut c_void) { - drop(Box::from_raw(p.cast::())); -} - impl Connection { /// Add or modify a collation. #[inline] diff --git a/src/functions.rs b/src/functions.rs index 5dfdef5..fb1a93f 100644 --- a/src/functions.rs +++ b/src/functions.rs @@ -67,7 +67,7 @@ use crate::ffi::sqlite3_value; use crate::context::set_result; use crate::types::{FromSql, FromSqlError, ToSql, ToSqlOutput, ValueRef}; - +use crate::util::free_boxed_value; use crate::{str_to_cstring, Connection, Error, InnerConnection, Result}; unsafe fn report_error(ctx: *mut sqlite3_context, err: &Error) { @@ -84,10 +84,6 @@ unsafe fn report_error(ctx: *mut sqlite3_context, err: &Error) { } } -unsafe extern "C" fn free_boxed_value(p: *mut c_void) { - drop(Box::from_raw(p.cast::())); -} - /// Context is a wrapper for the SQLite function /// evaluation context. pub struct Context<'a> { diff --git a/src/util/mod.rs b/src/util/mod.rs index a759cb9..cb68e84 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -7,3 +7,8 @@ pub(crate) use small_cstr::SmallCString; // Doesn't use any modern features or vtab stuff, but is only used by them. mod sqlite_string; pub(crate) use sqlite_string::{alloc, SqliteMallocString}; + +#[cfg(any(feature = "collation", feature = "functions", feature = "vtab"))] +pub(crate) unsafe extern "C" fn free_boxed_value(p: *mut std::ffi::c_void) { + drop(Box::from_raw(p.cast::())); +} diff --git a/src/vtab/mod.rs b/src/vtab/mod.rs index c23ecfc..85722e8 100644 --- a/src/vtab/mod.rs +++ b/src/vtab/mod.rs @@ -20,7 +20,7 @@ use crate::error::{error_from_sqlite_code, to_sqlite_error}; use crate::ffi; pub use crate::ffi::{sqlite3_vtab, sqlite3_vtab_cursor}; use crate::types::{FromSql, FromSqlError, ToSql, ValueRef}; -use crate::util::alloc; +use crate::util::{alloc, free_boxed_value}; use crate::{str_to_cstring, Connection, Error, InnerConnection, Result}; // let conn: Connection = ...; @@ -927,11 +927,6 @@ pub fn parameter(c_slice: &[u8]) -> Result<(&str, &str)> { Err(Error::ModuleError(format!("illegal argument: '{arg}'"))) } -// FIXME copy/paste from function.rs -unsafe extern "C" fn free_boxed_value(p: *mut c_void) { - drop(Box::from_raw(p.cast::())); -} - unsafe extern "C" fn rust_create<'vtab, T>( db: *mut ffi::sqlite3, aux: *mut c_void,