diff --git a/librocksdb_sys/crocksdb/c.cc b/librocksdb_sys/crocksdb/c.cc index c620818a5..ef387e6a4 100644 --- a/librocksdb_sys/crocksdb/c.cc +++ b/librocksdb_sys/crocksdb/c.cc @@ -4368,11 +4368,10 @@ crocksdb_iterator_t* crocksdb_sstfilereader_new_iterator( return it; } -void crocksdb_sstfilereader_read_table_properties( - const crocksdb_sstfilereader_t* reader, void* ctx, - void (*cb)(void*, const crocksdb_table_properties_t*)) { +const crocksdb_table_properties_t* crocksdb_sstfilereader_read_table_properties( + const crocksdb_sstfilereader_t* reader) { auto props = reader->rep->GetTableProperties(); - cb(ctx, reinterpret_cast(props.get())); + return reinterpret_cast(props.get()); } void crocksdb_sstfilereader_verify_checksum(crocksdb_sstfilereader_t* reader, diff --git a/librocksdb_sys/crocksdb/crocksdb/c.h b/librocksdb_sys/crocksdb/crocksdb/c.h index 68e8ff61f..9376ec03a 100644 --- a/librocksdb_sys/crocksdb/crocksdb/c.h +++ b/librocksdb_sys/crocksdb/crocksdb/c.h @@ -1724,9 +1724,9 @@ extern C_ROCKSDB_LIBRARY_API crocksdb_iterator_t* crocksdb_sstfilereader_new_iterator(crocksdb_sstfilereader_t* reader, const crocksdb_readoptions_t* options); -extern C_ROCKSDB_LIBRARY_API void crocksdb_sstfilereader_read_table_properties( - const crocksdb_sstfilereader_t* reader, void* ctx, - void (*cb)(void*, const crocksdb_table_properties_t*)); +extern C_ROCKSDB_LIBRARY_API const crocksdb_table_properties_t* +crocksdb_sstfilereader_read_table_properties( + const crocksdb_sstfilereader_t* reader); extern C_ROCKSDB_LIBRARY_API void crocksdb_sstfilereader_verify_checksum( crocksdb_sstfilereader_t* reader, char** errptr); diff --git a/librocksdb_sys/src/lib.rs b/librocksdb_sys/src/lib.rs index 788abd0e3..43c2a215c 100644 --- a/librocksdb_sys/src/lib.rs +++ b/librocksdb_sys/src/lib.rs @@ -1802,9 +1802,7 @@ extern "C" { pub fn crocksdb_sstfilereader_read_table_properties( reader: *const SstFileReader, - ctx: *mut c_void, - callback: extern "C" fn(*mut c_void, *const DBTableProperties), - ); + ) -> *const DBTableProperties; pub fn crocksdb_sstfilereader_verify_checksum( reader: *mut SstFileReader, diff --git a/src/rocksdb.rs b/src/rocksdb.rs index 19ecc5a58..8b14e16ce 100644 --- a/src/rocksdb.rs +++ b/src/rocksdb.rs @@ -30,7 +30,6 @@ use std::collections::BTreeMap; use std::ffi::{CStr, CString}; use std::fmt::{self, Debug, Formatter}; use std::io; -use std::mem; use std::ops::Deref; use std::path::{Path, PathBuf}; use std::rc::Rc; @@ -2326,24 +2325,10 @@ impl SstFileReader { } } - pub fn read_table_properties(&self, mut action: F) { - extern "C" fn callback( - ctx: *mut c_void, - ptr: *const crocksdb_ffi::DBTableProperties, - ) { - unsafe { - let caller = ptr::read(ctx as *mut F); - caller(TableProperties::from_ptr(ptr)); - } - } - + pub fn read_table_properties(&self, action: F) { unsafe { - crocksdb_ffi::crocksdb_sstfilereader_read_table_properties( - self.inner, - &mut action as *mut F as *mut c_void, - callback::, - ); - mem::forget(action); + let ptr = crocksdb_ffi::crocksdb_sstfilereader_read_table_properties(self.inner); + action(TableProperties::from_ptr(ptr)); } }