Merge pull request #1086 from gwenn/ptr_as_ptr

clippy:ptr_as_ptr
This commit is contained in:
gwenn 2022-01-06 18:31:35 +01:00 committed by GitHub
commit 91648d7d1c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 60 additions and 61 deletions

View File

@ -321,8 +321,7 @@ impl io::Read for Blob<'_> {
if n <= 0 { if n <= 0 {
return Ok(0); return Ok(0);
} }
let rc = let rc = unsafe { ffi::sqlite3_blob_read(self.blob, buf.as_mut_ptr().cast(), n, self.pos) };
unsafe { ffi::sqlite3_blob_read(self.blob, buf.as_mut_ptr() as *mut _, n, self.pos) };
self.conn self.conn
.decode_result(rc) .decode_result(rc)
.map(|_| { .map(|_| {

View File

@ -47,7 +47,7 @@ impl<'conn> Blob<'conn> {
self.conn.decode_result(unsafe { self.conn.decode_result(unsafe {
ffi::sqlite3_blob_write( ffi::sqlite3_blob_write(
self.blob, self.blob,
buf.as_ptr() as *const _, buf.as_ptr().cast(),
buf.len() as i32, buf.len() as i32,
write_start as i32, write_start as i32,
) )
@ -84,7 +84,7 @@ impl<'conn> Blob<'conn> {
// Safety: this is safe because `raw_read_at` never stores uninitialized // Safety: this is safe because `raw_read_at` never stores uninitialized
// data into `as_uninit`. // data into `as_uninit`.
let as_uninit: &mut [MaybeUninit<u8>] = let as_uninit: &mut [MaybeUninit<u8>] =
unsafe { from_raw_parts_mut(buf.as_mut_ptr() as *mut _, buf.len()) }; unsafe { from_raw_parts_mut(buf.as_mut_ptr().cast(), buf.len()) };
self.raw_read_at(as_uninit, read_start).map(|s| s.len()) self.raw_read_at(as_uninit, read_start).map(|s| s.len())
} }
@ -119,7 +119,7 @@ impl<'conn> Blob<'conn> {
// We could return `Ok(&mut [])`, but it seems confusing that the // We could return `Ok(&mut [])`, but it seems confusing that the
// pointers don't match, so fabricate a empty slice of u8 with the // pointers don't match, so fabricate a empty slice of u8 with the
// same base pointer as `buf`. // same base pointer as `buf`.
let empty = unsafe { from_raw_parts_mut(buf.as_mut_ptr() as *mut u8, 0) }; let empty = unsafe { from_raw_parts_mut(buf.as_mut_ptr().cast::<u8>(), 0) };
return Ok(empty); return Ok(empty);
} }
@ -152,12 +152,12 @@ impl<'conn> Blob<'conn> {
unsafe { unsafe {
self.conn.decode_result(ffi::sqlite3_blob_read( self.conn.decode_result(ffi::sqlite3_blob_read(
self.blob, self.blob,
buf.as_mut_ptr() as *mut _, buf.as_mut_ptr().cast(),
read_len as i32, read_len as i32,
read_start as i32, read_start as i32,
))?; ))?;
Ok(from_raw_parts_mut(buf.as_mut_ptr() as *mut u8, read_len)) Ok(from_raw_parts_mut(buf.as_mut_ptr().cast::<u8>(), read_len))
} }
} }

View File

@ -10,7 +10,7 @@ use crate::{str_to_cstring, Connection, InnerConnection, Result};
// FIXME copy/paste from function.rs // FIXME copy/paste from function.rs
unsafe extern "C" fn free_boxed_value<T>(p: *mut c_void) { unsafe extern "C" fn free_boxed_value<T>(p: *mut c_void) {
drop(Box::from_raw(p as *mut T)); drop(Box::from_raw(p.cast::<T>()));
} }
impl Connection { impl Connection {
@ -57,14 +57,14 @@ impl InnerConnection {
C: Fn(&str, &str) -> Ordering, C: Fn(&str, &str) -> Ordering,
{ {
let r = catch_unwind(|| { let r = catch_unwind(|| {
let boxed_f: *mut C = arg1 as *mut C; let boxed_f: *mut C = arg1.cast::<C>();
assert!(!boxed_f.is_null(), "Internal error - null function pointer"); assert!(!boxed_f.is_null(), "Internal error - null function pointer");
let s1 = { let s1 = {
let c_slice = slice::from_raw_parts(arg3 as *const u8, arg2 as usize); let c_slice = slice::from_raw_parts(arg3.cast::<u8>(), arg2 as usize);
String::from_utf8_lossy(c_slice) String::from_utf8_lossy(c_slice)
}; };
let s2 = { let s2 = {
let c_slice = slice::from_raw_parts(arg5 as *const u8, arg4 as usize); let c_slice = slice::from_raw_parts(arg5.cast::<u8>(), arg4 as usize);
String::from_utf8_lossy(c_slice) String::from_utf8_lossy(c_slice)
}; };
(*boxed_f)(s1.as_ref(), s2.as_ref()) (*boxed_f)(s1.as_ref(), s2.as_ref())
@ -91,7 +91,7 @@ impl InnerConnection {
self.db(), self.db(),
c_name.as_ptr(), c_name.as_ptr(),
flags, flags,
boxed_f as *mut c_void, boxed_f.cast::<c_void>(),
Some(call_boxed_closure::<C>), Some(call_boxed_closure::<C>),
Some(free_boxed_value::<C>), Some(free_boxed_value::<C>),
) )

View File

@ -62,7 +62,7 @@ pub(super) unsafe fn set_result(ctx: *mut sqlite3_context, result: &ToSqlOutput<
} else { } else {
ffi::sqlite3_result_blob( ffi::sqlite3_result_blob(
ctx, ctx,
b.as_ptr() as *const c_void, b.as_ptr().cast::<c_void>(),
length as c_int, length as c_int,
ffi::SQLITE_TRANSIENT(), ffi::SQLITE_TRANSIENT(),
); );

View File

@ -98,7 +98,7 @@ unsafe fn report_error(ctx: *mut sqlite3_context, err: &Error) {
} }
unsafe extern "C" fn free_boxed_value<T>(p: *mut c_void) { unsafe extern "C" fn free_boxed_value<T>(p: *mut c_void) {
drop(Box::from_raw(p as *mut T)); drop(Box::from_raw(p.cast::<T>()));
} }
/// Context is a wrapper for the SQLite function /// Context is a wrapper for the SQLite function
@ -198,7 +198,7 @@ impl Context<'_> {
ffi::sqlite3_set_auxdata( ffi::sqlite3_set_auxdata(
self.ctx, self.ctx,
arg, arg,
raw as *mut _, raw.cast(),
Some(free_boxed_value::<AuxInner>), Some(free_boxed_value::<AuxInner>),
); );
}; };
@ -477,7 +477,7 @@ impl InnerConnection {
T: ToSql, T: ToSql,
{ {
let r = catch_unwind(|| { let r = catch_unwind(|| {
let boxed_f: *mut F = ffi::sqlite3_user_data(ctx) as *mut F; let boxed_f: *mut F = ffi::sqlite3_user_data(ctx).cast::<F>();
assert!(!boxed_f.is_null(), "Internal error - null function pointer"); assert!(!boxed_f.is_null(), "Internal error - null function pointer");
let ctx = Context { let ctx = Context {
ctx, ctx,
@ -509,7 +509,7 @@ impl InnerConnection {
c_name.as_ptr(), c_name.as_ptr(),
n_arg, n_arg,
flags.bits(), flags.bits(),
boxed_f as *mut c_void, boxed_f.cast::<c_void>(),
Some(call_boxed_closure::<F, T>), Some(call_boxed_closure::<F, T>),
None, None,
None, None,
@ -539,7 +539,7 @@ impl InnerConnection {
c_name.as_ptr(), c_name.as_ptr(),
n_arg, n_arg,
flags.bits(), flags.bits(),
boxed_aggr as *mut c_void, boxed_aggr.cast::<c_void>(),
None, None,
Some(call_boxed_step::<A, D, T>), Some(call_boxed_step::<A, D, T>),
Some(call_boxed_final::<A, D, T>), Some(call_boxed_final::<A, D, T>),
@ -570,7 +570,7 @@ impl InnerConnection {
c_name.as_ptr(), c_name.as_ptr(),
n_arg, n_arg,
flags.bits(), flags.bits(),
boxed_aggr as *mut c_void, boxed_aggr.cast::<c_void>(),
Some(call_boxed_step::<A, W, T>), Some(call_boxed_step::<A, W, T>),
Some(call_boxed_final::<A, W, T>), Some(call_boxed_final::<A, W, T>),
Some(call_boxed_value::<A, W, T>), Some(call_boxed_value::<A, W, T>),
@ -625,7 +625,7 @@ unsafe extern "C" fn call_boxed_step<A, D, T>(
}; };
let r = catch_unwind(|| { let r = catch_unwind(|| {
let boxed_aggr: *mut D = ffi::sqlite3_user_data(ctx) as *mut D; let boxed_aggr: *mut D = ffi::sqlite3_user_data(ctx).cast::<D>();
assert!( assert!(
!boxed_aggr.is_null(), !boxed_aggr.is_null(),
"Internal error - null aggregate pointer" "Internal error - null aggregate pointer"
@ -672,7 +672,7 @@ unsafe extern "C" fn call_boxed_inverse<A, W, T>(
}; };
let r = catch_unwind(|| { let r = catch_unwind(|| {
let boxed_aggr: *mut W = ffi::sqlite3_user_data(ctx) as *mut W; let boxed_aggr: *mut W = ffi::sqlite3_user_data(ctx).cast::<W>();
assert!( assert!(
!boxed_aggr.is_null(), !boxed_aggr.is_null(),
"Internal error - null aggregate pointer" "Internal error - null aggregate pointer"
@ -717,7 +717,7 @@ where
}; };
let r = catch_unwind(|| { let r = catch_unwind(|| {
let boxed_aggr: *mut D = ffi::sqlite3_user_data(ctx) as *mut D; let boxed_aggr: *mut D = ffi::sqlite3_user_data(ctx).cast::<D>();
assert!( assert!(
!boxed_aggr.is_null(), !boxed_aggr.is_null(),
"Internal error - null aggregate pointer" "Internal error - null aggregate pointer"
@ -762,7 +762,7 @@ where
}; };
let r = catch_unwind(|| { let r = catch_unwind(|| {
let boxed_aggr: *mut W = ffi::sqlite3_user_data(ctx) as *mut W; let boxed_aggr: *mut W = ffi::sqlite3_user_data(ctx).cast::<W>();
assert!( assert!(
!boxed_aggr.is_null(), !boxed_aggr.is_null(),
"Internal error - null aggregate pointer" "Internal error - null aggregate pointer"

View File

@ -425,7 +425,7 @@ impl InnerConnection {
F: FnMut() -> bool, F: FnMut() -> bool,
{ {
let r = catch_unwind(|| { let r = catch_unwind(|| {
let boxed_hook: *mut F = p_arg as *mut F; let boxed_hook: *mut F = p_arg.cast::<F>();
(*boxed_hook)() (*boxed_hook)()
}); });
if let Ok(true) = r { if let Ok(true) = r {
@ -451,7 +451,7 @@ impl InnerConnection {
ffi::sqlite3_commit_hook( ffi::sqlite3_commit_hook(
self.db(), self.db(),
Some(call_boxed_closure::<F>), Some(call_boxed_closure::<F>),
boxed_hook as *mut _, boxed_hook.cast(),
) )
} }
} }
@ -474,7 +474,7 @@ impl InnerConnection {
F: FnMut(), F: FnMut(),
{ {
drop(catch_unwind(|| { drop(catch_unwind(|| {
let boxed_hook: *mut F = p_arg as *mut F; let boxed_hook: *mut F = p_arg.cast::<F>();
(*boxed_hook)(); (*boxed_hook)();
})); }));
} }
@ -492,7 +492,7 @@ impl InnerConnection {
ffi::sqlite3_rollback_hook( ffi::sqlite3_rollback_hook(
self.db(), self.db(),
Some(call_boxed_closure::<F>), Some(call_boxed_closure::<F>),
boxed_hook as *mut _, boxed_hook.cast(),
) )
} }
} }
@ -521,7 +521,7 @@ impl InnerConnection {
{ {
let action = Action::from(action_code); let action = Action::from(action_code);
drop(catch_unwind(|| { drop(catch_unwind(|| {
let boxed_hook: *mut F = p_arg as *mut F; let boxed_hook: *mut F = p_arg.cast::<F>();
(*boxed_hook)( (*boxed_hook)(
action, action,
expect_utf8(p_db_name, "database name"), expect_utf8(p_db_name, "database name"),
@ -544,7 +544,7 @@ impl InnerConnection {
ffi::sqlite3_update_hook( ffi::sqlite3_update_hook(
self.db(), self.db(),
Some(call_boxed_closure::<F>), Some(call_boxed_closure::<F>),
boxed_hook as *mut _, boxed_hook.cast(),
) )
} }
} }
@ -567,7 +567,7 @@ impl InnerConnection {
F: FnMut() -> bool, F: FnMut() -> bool,
{ {
let r = catch_unwind(|| { let r = catch_unwind(|| {
let boxed_handler: *mut F = p_arg as *mut F; let boxed_handler: *mut F = p_arg.cast::<F>();
(*boxed_handler)() (*boxed_handler)()
}); });
if let Ok(true) = r { if let Ok(true) = r {
@ -623,7 +623,7 @@ impl InnerConnection {
"accessor (inner-most trigger or view)", "accessor (inner-most trigger or view)",
), ),
}; };
let boxed_hook: *mut F = p_arg as *mut F; let boxed_hook: *mut F = p_arg.cast::<F>();
(*boxed_hook)(auth_ctx) (*boxed_hook)(auth_ctx)
}) })
.map_or_else(|_| ffi::SQLITE_ERROR, Authorization::into_raw) .map_or_else(|_| ffi::SQLITE_ERROR, Authorization::into_raw)
@ -661,7 +661,7 @@ impl InnerConnection {
} }
unsafe fn free_boxed_hook<F>(p: *mut c_void) { unsafe fn free_boxed_hook<F>(p: *mut c_void) {
drop(Box::from_raw(p as *mut F)); drop(Box::from_raw(p.cast::<F>()));
} }
unsafe fn expect_utf8<'a>(p_str: *const c_char, description: &'static str) -> &'a str { unsafe fn expect_utf8<'a>(p_str: *const c_char, description: &'static str) -> &'a str {

View File

@ -208,7 +208,7 @@ impl InnerConnection {
Ok(()) Ok(())
} else { } else {
let message = super::errmsg_to_string(errmsg); let message = super::errmsg_to_string(errmsg);
ffi::sqlite3_free(errmsg as *mut ::std::os::raw::c_void); ffi::sqlite3_free(errmsg.cast::<::std::os::raw::c_void>());
Err(error_from_sqlite_code(r, Some(message))) Err(error_from_sqlite_code(r, Some(message)))
} }
} }

View File

@ -258,10 +258,10 @@ fn str_to_cstring(s: &str) -> Result<SmallCString> {
fn str_for_sqlite(s: &[u8]) -> Result<(*const c_char, c_int, ffi::sqlite3_destructor_type)> { fn str_for_sqlite(s: &[u8]) -> Result<(*const c_char, c_int, ffi::sqlite3_destructor_type)> {
let len = len_as_c_int(s.len())?; let len = len_as_c_int(s.len())?;
let (ptr, dtor_info) = if len != 0 { let (ptr, dtor_info) = if len != 0 {
(s.as_ptr() as *const c_char, ffi::SQLITE_TRANSIENT()) (s.as_ptr().cast::<c_char>(), ffi::SQLITE_TRANSIENT())
} else { } else {
// Return a pointer guaranteed to live forever // Return a pointer guaranteed to live forever
("".as_ptr() as *const c_char, ffi::SQLITE_STATIC()) ("".as_ptr().cast::<c_char>(), ffi::SQLITE_STATIC())
}; };
Ok((ptr, len, dtor_info)) Ok((ptr, len, dtor_info))
} }

View File

@ -717,7 +717,7 @@ impl Statement<'_> {
ffi::sqlite3_bind_blob( ffi::sqlite3_bind_blob(
ptr, ptr,
col as c_int, col as c_int,
b.as_ptr() as *const c_void, b.as_ptr().cast::<c_void>(),
length, length,
ffi::SQLITE_TRANSIENT(), ffi::SQLITE_TRANSIENT(),
) )
@ -875,7 +875,7 @@ impl Statement<'_> {
!text.is_null(), !text.is_null(),
"unexpected SQLITE_TEXT column type with NULL data" "unexpected SQLITE_TEXT column type with NULL data"
); );
from_raw_parts(text as *const u8, len as usize) from_raw_parts(text.cast::<u8>(), len as usize)
}; };
ValueRef::Text(s) ValueRef::Text(s)
@ -897,7 +897,7 @@ impl Statement<'_> {
!blob.is_null(), !blob.is_null(),
"unexpected SQLITE_BLOB column type with NULL data" "unexpected SQLITE_BLOB column type with NULL data"
); );
ValueRef::Blob(unsafe { from_raw_parts(blob as *const u8, len as usize) }) ValueRef::Blob(unsafe { from_raw_parts(blob.cast::<u8>(), len as usize) })
} else { } else {
// The return value from sqlite3_column_blob() for a zero-length BLOB // The return value from sqlite3_column_blob() for a zero-length BLOB
// is a NULL pointer. // is a NULL pointer.

View File

@ -229,7 +229,7 @@ impl<'a> ValueRef<'a> {
!text.is_null(), !text.is_null(),
"unexpected SQLITE_TEXT value type with NULL data" "unexpected SQLITE_TEXT value type with NULL data"
); );
let s = from_raw_parts(text as *const u8, len as usize); let s = from_raw_parts(text.cast::<u8>(), len as usize);
ValueRef::Text(s) ValueRef::Text(s)
} }
ffi::SQLITE_BLOB => { ffi::SQLITE_BLOB => {
@ -247,7 +247,7 @@ impl<'a> ValueRef<'a> {
!blob.is_null(), !blob.is_null(),
"unexpected SQLITE_BLOB value type with NULL data" "unexpected SQLITE_BLOB value type with NULL data"
); );
ValueRef::Blob(from_raw_parts(blob as *const u8, len as usize)) ValueRef::Blob(from_raw_parts(blob.cast::<u8>(), len as usize))
} else { } else {
// The return value from sqlite3_value_blob() for a zero-length BLOB // The return value from sqlite3_value_blob() for a zero-length BLOB
// is a NULL pointer. // is a NULL pointer.

View File

@ -120,7 +120,7 @@ impl SqliteMallocString {
// `>` because we added 1. // `>` because we added 1.
debug_assert!(len_to_alloc > 0); debug_assert!(len_to_alloc > 0);
debug_assert_eq!((len_to_alloc - 1) as usize, src_len); debug_assert_eq!((len_to_alloc - 1) as usize, src_len);
NonNull::new(ffi::sqlite3_malloc(len_to_alloc) as *mut c_char) NonNull::new(ffi::sqlite3_malloc(len_to_alloc).cast::<c_char>())
}) })
.unwrap_or_else(|| { .unwrap_or_else(|| {
use std::alloc::{handle_alloc_error, Layout}; use std::alloc::{handle_alloc_error, Layout};
@ -138,7 +138,7 @@ impl SqliteMallocString {
// Note: This call does not return. // Note: This call does not return.
handle_alloc_error(layout); handle_alloc_error(layout);
}); });
let buf: *mut c_char = res_ptr.as_ptr() as *mut c_char; let buf: *mut c_char = res_ptr.as_ptr().cast::<c_char>();
src_ptr.copy_to_nonoverlapping(buf, src_len); src_ptr.copy_to_nonoverlapping(buf, src_len);
buf.add(src_len).write(0); buf.add(src_len).write(0);
debug_assert_eq!(std::ffi::CStr::from_ptr(res_ptr.as_ptr()).to_bytes(), bytes); debug_assert_eq!(std::ffi::CStr::from_ptr(res_ptr.as_ptr()).to_bytes(), bytes);

View File

@ -41,7 +41,7 @@ use crate::{Connection, Result};
// http://sqlite.org/bindptr.html // http://sqlite.org/bindptr.html
pub(crate) const ARRAY_TYPE: *const c_char = b"rarray\0" as *const u8 as *const c_char; pub(crate) const ARRAY_TYPE: *const c_char = (b"rarray\0" as *const u8).cast::<c_char>();
pub(crate) unsafe extern "C" fn free_array(p: *mut c_void) { pub(crate) unsafe extern "C" fn free_array(p: *mut c_void) {
drop(Rc::from_raw(p as *const Vec<Value>)); drop(Rc::from_raw(p as *const Vec<Value>));

View File

@ -712,7 +712,7 @@ impl InnerConnection {
self.db(), self.db(),
c_name.as_ptr(), c_name.as_ptr(),
&module.base, &module.base,
boxed_aux as *mut c_void, boxed_aux.cast::<c_void>(),
Some(free_boxed_value::<T::Aux>), Some(free_boxed_value::<T::Aux>),
) )
} }
@ -782,7 +782,7 @@ pub fn parse_boolean(s: &str) -> Option<bool> {
// FIXME copy/paste from function.rs // FIXME copy/paste from function.rs
unsafe extern "C" fn free_boxed_value<T>(p: *mut c_void) { unsafe extern "C" fn free_boxed_value<T>(p: *mut c_void) {
let _: Box<T> = Box::from_raw(p as *mut T); drop(Box::from_raw(p.cast::<T>()));
} }
unsafe extern "C" fn rust_create<'vtab, T>( unsafe extern "C" fn rust_create<'vtab, T>(
@ -799,7 +799,7 @@ where
use std::ffi::CStr; use std::ffi::CStr;
let mut conn = VTabConnection(db); let mut conn = VTabConnection(db);
let aux = aux as *mut T::Aux; let aux = aux.cast::<T::Aux>();
let args = slice::from_raw_parts(argv, argc as usize); let args = slice::from_raw_parts(argv, argc as usize);
let vec = args let vec = args
.iter() .iter()
@ -811,7 +811,7 @@ where
let rc = ffi::sqlite3_declare_vtab(db, c_sql.as_ptr()); let rc = ffi::sqlite3_declare_vtab(db, c_sql.as_ptr());
if rc == ffi::SQLITE_OK { if rc == ffi::SQLITE_OK {
let boxed_vtab: *mut T = Box::into_raw(Box::new(vtab)); let boxed_vtab: *mut T = Box::into_raw(Box::new(vtab));
*pp_vtab = boxed_vtab as *mut ffi::sqlite3_vtab; *pp_vtab = boxed_vtab.cast::<ffi::sqlite3_vtab>();
ffi::SQLITE_OK ffi::SQLITE_OK
} else { } else {
let err = error_from_sqlite_code(rc, None); let err = error_from_sqlite_code(rc, None);
@ -851,7 +851,7 @@ where
use std::ffi::CStr; use std::ffi::CStr;
let mut conn = VTabConnection(db); let mut conn = VTabConnection(db);
let aux = aux as *mut T::Aux; let aux = aux.cast::<T::Aux>();
let args = slice::from_raw_parts(argv, argc as usize); let args = slice::from_raw_parts(argv, argc as usize);
let vec = args let vec = args
.iter() .iter()
@ -863,7 +863,7 @@ where
let rc = ffi::sqlite3_declare_vtab(db, c_sql.as_ptr()); let rc = ffi::sqlite3_declare_vtab(db, c_sql.as_ptr());
if rc == ffi::SQLITE_OK { if rc == ffi::SQLITE_OK {
let boxed_vtab: *mut T = Box::into_raw(Box::new(vtab)); let boxed_vtab: *mut T = Box::into_raw(Box::new(vtab));
*pp_vtab = boxed_vtab as *mut ffi::sqlite3_vtab; *pp_vtab = boxed_vtab.cast::<ffi::sqlite3_vtab>();
ffi::SQLITE_OK ffi::SQLITE_OK
} else { } else {
let err = error_from_sqlite_code(rc, None); let err = error_from_sqlite_code(rc, None);
@ -896,7 +896,7 @@ unsafe extern "C" fn rust_best_index<'vtab, T>(
where where
T: VTab<'vtab>, T: VTab<'vtab>,
{ {
let vt = vtab as *mut T; let vt = vtab.cast::<T>();
let mut idx_info = IndexInfo(info); let mut idx_info = IndexInfo(info);
match (*vt).best_index(&mut idx_info) { match (*vt).best_index(&mut idx_info) {
Ok(_) => ffi::SQLITE_OK, Ok(_) => ffi::SQLITE_OK,
@ -920,8 +920,8 @@ where
if vtab.is_null() { if vtab.is_null() {
return ffi::SQLITE_OK; return ffi::SQLITE_OK;
} }
let vtab = vtab as *mut T; let vtab = vtab.cast::<T>();
let _: Box<T> = Box::from_raw(vtab); drop(Box::from_raw(vtab));
ffi::SQLITE_OK ffi::SQLITE_OK
} }
@ -932,7 +932,7 @@ where
if vtab.is_null() { if vtab.is_null() {
return ffi::SQLITE_OK; return ffi::SQLITE_OK;
} }
let vt = vtab as *mut T; let vt = vtab.cast::<T>();
match (*vt).destroy() { match (*vt).destroy() {
Ok(_) => { Ok(_) => {
drop(Box::from_raw(vt)); drop(Box::from_raw(vt));
@ -958,11 +958,11 @@ unsafe extern "C" fn rust_open<'vtab, T: 'vtab>(
where where
T: VTab<'vtab>, T: VTab<'vtab>,
{ {
let vt = vtab as *mut T; let vt = vtab.cast::<T>();
match (*vt).open() { match (*vt).open() {
Ok(cursor) => { Ok(cursor) => {
let boxed_cursor: *mut T::Cursor = Box::into_raw(Box::new(cursor)); let boxed_cursor: *mut T::Cursor = Box::into_raw(Box::new(cursor));
*pp_cursor = boxed_cursor as *mut ffi::sqlite3_vtab_cursor; *pp_cursor = boxed_cursor.cast::<ffi::sqlite3_vtab_cursor>();
ffi::SQLITE_OK ffi::SQLITE_OK
} }
Err(Error::SqliteFailure(err, s)) => { Err(Error::SqliteFailure(err, s)) => {
@ -982,8 +982,8 @@ unsafe extern "C" fn rust_close<C>(cursor: *mut ffi::sqlite3_vtab_cursor) -> c_i
where where
C: VTabCursor, C: VTabCursor,
{ {
let cr = cursor as *mut C; let cr = cursor.cast::<C>();
let _: Box<C> = Box::from_raw(cr); drop(Box::from_raw(cr));
ffi::SQLITE_OK ffi::SQLITE_OK
} }
@ -1023,7 +1023,7 @@ unsafe extern "C" fn rust_eof<C>(cursor: *mut ffi::sqlite3_vtab_cursor) -> c_int
where where
C: VTabCursor, C: VTabCursor,
{ {
let cr = cursor as *mut C; let cr = cursor.cast::<C>();
(*cr).eof() as c_int (*cr).eof() as c_int
} }
@ -1035,7 +1035,7 @@ unsafe extern "C" fn rust_column<C>(
where where
C: VTabCursor, C: VTabCursor,
{ {
let cr = cursor as *mut C; let cr = cursor.cast::<C>();
let mut ctxt = Context(ctx); let mut ctxt = Context(ctx);
result_error(ctx, (*cr).column(&mut ctxt, i)) result_error(ctx, (*cr).column(&mut ctxt, i))
} }
@ -1047,7 +1047,7 @@ unsafe extern "C" fn rust_rowid<C>(
where where
C: VTabCursor, C: VTabCursor,
{ {
let cr = cursor as *mut C; let cr = cursor.cast::<C>();
match (*cr).rowid() { match (*cr).rowid() {
Ok(rowid) => { Ok(rowid) => {
*p_rowid = rowid; *p_rowid = rowid;
@ -1081,7 +1081,7 @@ unsafe fn cursor_error<T>(cursor: *mut ffi::sqlite3_vtab_cursor, result: Result<
#[cold] #[cold]
unsafe fn set_err_msg(vtab: *mut ffi::sqlite3_vtab, err_msg: &str) { unsafe fn set_err_msg(vtab: *mut ffi::sqlite3_vtab, err_msg: &str) {
if !(*vtab).zErrMsg.is_null() { if !(*vtab).zErrMsg.is_null() {
ffi::sqlite3_free((*vtab).zErrMsg as *mut c_void); ffi::sqlite3_free((*vtab).zErrMsg.cast::<c_void>());
} }
(*vtab).zErrMsg = alloc(err_msg); (*vtab).zErrMsg = alloc(err_msg);
} }