Skip to content

treewide: change *const to *mut based on cassandra.h #225

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Mar 11, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 20 additions & 24 deletions scylla-rust-wrapper/src/cass_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -446,12 +446,8 @@ pub fn get_column_type(column_type: &ColumnType) -> CassDataType {
CassDataType::new(inner)
}

// Changed return type to const ptr - ArcFFI::into_ptr is const.
// It's probably not a good idea - but cppdriver doesn't guarantee
// thread safety apart from CassSession and CassFuture.
// This comment also applies to other functions that create CassDataType.
#[no_mangle]
pub unsafe extern "C" fn cass_data_type_new(value_type: CassValueType) -> *const CassDataType {
pub unsafe extern "C" fn cass_data_type_new(value_type: CassValueType) -> *mut CassDataType {
let inner = match value_type {
CassValueType::CASS_VALUE_TYPE_LIST => CassDataTypeInner::List {
typ: None,
Expand All @@ -472,29 +468,29 @@ pub unsafe extern "C" fn cass_data_type_new(value_type: CassValueType) -> *const
t if t < CassValueType::CASS_VALUE_TYPE_LAST_ENTRY => CassDataTypeInner::Value(t),
_ => return ptr::null_mut(),
};
ArcFFI::into_ptr(CassDataType::new_arced(inner))
ArcFFI::into_ptr(CassDataType::new_arced(inner)) as *mut _
}

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_new_from_existing(
data_type: *const CassDataType,
) -> *const CassDataType {
) -> *mut CassDataType {
let data_type = ArcFFI::as_ref(data_type);
ArcFFI::into_ptr(CassDataType::new_arced(data_type.get_unchecked().clone()))
ArcFFI::into_ptr(CassDataType::new_arced(data_type.get_unchecked().clone())) as *mut _
}

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_new_tuple(item_count: size_t) -> *const CassDataType {
pub unsafe extern "C" fn cass_data_type_new_tuple(item_count: size_t) -> *mut CassDataType {
ArcFFI::into_ptr(CassDataType::new_arced(CassDataTypeInner::Tuple(
Vec::with_capacity(item_count as usize),
)))
))) as *mut _
}

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_new_udt(field_count: size_t) -> *const CassDataType {
pub unsafe extern "C" fn cass_data_type_new_udt(field_count: size_t) -> *mut CassDataType {
ArcFFI::into_ptr(CassDataType::new_arced(CassDataTypeInner::UDT(
UDTDataType::with_capacity(field_count as usize),
)))
))) as *mut _
}

#[no_mangle]
Expand Down Expand Up @@ -540,15 +536,15 @@ pub unsafe extern "C" fn cass_data_type_type_name(

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_set_type_name(
data_type: *const CassDataType,
data_type: *mut CassDataType,
type_name: *const c_char,
) -> CassError {
cass_data_type_set_type_name_n(data_type, type_name, strlen(type_name))
}

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_set_type_name_n(
data_type_raw: *const CassDataType,
data_type_raw: *mut CassDataType,
type_name: *const c_char,
type_name_length: size_t,
) -> CassError {
Expand Down Expand Up @@ -584,15 +580,15 @@ pub unsafe extern "C" fn cass_data_type_keyspace(

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_set_keyspace(
data_type: *const CassDataType,
data_type: *mut CassDataType,
keyspace: *const c_char,
) -> CassError {
cass_data_type_set_keyspace_n(data_type, keyspace, strlen(keyspace))
}

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_set_keyspace_n(
data_type: *const CassDataType,
data_type: *mut CassDataType,
keyspace: *const c_char,
keyspace_length: size_t,
) -> CassError {
Expand Down Expand Up @@ -628,15 +624,15 @@ pub unsafe extern "C" fn cass_data_type_class_name(

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_set_class_name(
data_type: *const CassDataType,
data_type: *mut CassDataType,
class_name: *const ::std::os::raw::c_char,
) -> CassError {
cass_data_type_set_class_name_n(data_type, class_name, strlen(class_name))
}

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_set_class_name_n(
data_type: *const CassDataType,
data_type: *mut CassDataType,
class_name: *const ::std::os::raw::c_char,
class_name_length: size_t,
) -> CassError {
Expand Down Expand Up @@ -740,7 +736,7 @@ pub unsafe extern "C" fn cass_data_type_sub_type_name(

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_add_sub_type(
data_type: *const CassDataType,
data_type: *mut CassDataType,
sub_data_type: *const CassDataType,
) -> CassError {
let data_type = ArcFFI::as_ref(data_type);
Expand All @@ -755,7 +751,7 @@ pub unsafe extern "C" fn cass_data_type_add_sub_type(

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_add_sub_type_by_name(
data_type: *const CassDataType,
data_type: *mut CassDataType,
name: *const c_char,
sub_data_type: *const CassDataType,
) -> CassError {
Expand All @@ -764,7 +760,7 @@ pub unsafe extern "C" fn cass_data_type_add_sub_type_by_name(

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_add_sub_type_by_name_n(
data_type_raw: *const CassDataType,
data_type_raw: *mut CassDataType,
name: *const c_char,
name_length: size_t,
sub_data_type_raw: *const CassDataType,
Expand All @@ -786,7 +782,7 @@ pub unsafe extern "C" fn cass_data_type_add_sub_type_by_name_n(

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_add_sub_value_type(
data_type: *const CassDataType,
data_type: *mut CassDataType,
sub_value_type: CassValueType,
) -> CassError {
let sub_data_type = CassDataType::new_arced(CassDataTypeInner::Value(sub_value_type));
Expand All @@ -795,7 +791,7 @@ pub unsafe extern "C" fn cass_data_type_add_sub_value_type(

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_add_sub_value_type_by_name(
data_type: *const CassDataType,
data_type: *mut CassDataType,
name: *const c_char,
sub_value_type: CassValueType,
) -> CassError {
Expand All @@ -805,7 +801,7 @@ pub unsafe extern "C" fn cass_data_type_add_sub_value_type_by_name(

#[no_mangle]
pub unsafe extern "C" fn cass_data_type_add_sub_value_type_by_name_n(
data_type: *const CassDataType,
data_type: *mut CassDataType,
name: *const c_char,
name_length: size_t,
sub_value_type: CassValueType,
Expand Down
26 changes: 12 additions & 14 deletions scylla-rust-wrapper/src/future.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ type CassFutureError = (CassError, String);
pub type CassFutureResult = Result<CassResultValue, CassFutureError>;

pub type CassFutureCallback =
Option<unsafe extern "C" fn(future: *const CassFuture, data: *mut c_void)>;
Option<unsafe extern "C" fn(future: *mut CassFuture, data: *mut c_void)>;

struct BoundCallback {
pub cb: CassFutureCallback,
Expand All @@ -42,7 +42,7 @@ unsafe impl Send for BoundCallback {}
impl BoundCallback {
fn invoke(self, fut: &CassFuture) {
unsafe {
self.cb.unwrap()(fut as *const CassFuture, self.data);
self.cb.unwrap()((fut as *const _) as *mut _, self.data);
}
}
}
Expand Down Expand Up @@ -289,21 +289,21 @@ impl CheckSendSync for CassFuture {}

#[no_mangle]
pub unsafe extern "C" fn cass_future_set_callback(
future_raw: *const CassFuture,
future_raw: *mut CassFuture,
callback: CassFutureCallback,
data: *mut ::std::os::raw::c_void,
) -> CassError {
ArcFFI::as_ref(future_raw).set_callback(callback, data)
}

#[no_mangle]
pub unsafe extern "C" fn cass_future_wait(future_raw: *const CassFuture) {
pub unsafe extern "C" fn cass_future_wait(future_raw: *mut CassFuture) {
ArcFFI::as_ref(future_raw).with_waited_result(|_| ());
}

#[no_mangle]
pub unsafe extern "C" fn cass_future_wait_timed(
future_raw: *const CassFuture,
future_raw: *mut CassFuture,
timeout_us: cass_duration_t,
) -> cass_bool_t {
ArcFFI::as_ref(future_raw)
Expand All @@ -312,7 +312,7 @@ pub unsafe extern "C" fn cass_future_wait_timed(
}

#[no_mangle]
pub unsafe extern "C" fn cass_future_ready(future_raw: *const CassFuture) -> cass_bool_t {
pub unsafe extern "C" fn cass_future_ready(future_raw: *mut CassFuture) -> cass_bool_t {
let state_guard = ArcFFI::as_ref(future_raw).state.lock().unwrap();
match state_guard.value {
None => cass_false,
Expand All @@ -321,7 +321,7 @@ pub unsafe extern "C" fn cass_future_ready(future_raw: *const CassFuture) -> cas
}

#[no_mangle]
pub unsafe extern "C" fn cass_future_error_code(future_raw: *const CassFuture) -> CassError {
pub unsafe extern "C" fn cass_future_error_code(future_raw: *mut CassFuture) -> CassError {
ArcFFI::as_ref(future_raw).with_waited_result(|r: &mut CassFutureResult| match r {
Ok(CassResultValue::QueryError(err)) => err.to_cass_error(),
Err((err, _)) => *err,
Expand Down Expand Up @@ -349,14 +349,12 @@ pub unsafe extern "C" fn cass_future_error_message(
}

#[no_mangle]
pub unsafe extern "C" fn cass_future_free(future_raw: *const CassFuture) {
pub unsafe extern "C" fn cass_future_free(future_raw: *mut CassFuture) {
ArcFFI::free(future_raw);
}

#[no_mangle]
pub unsafe extern "C" fn cass_future_get_result(
future_raw: *const CassFuture,
) -> *const CassResult {
pub unsafe extern "C" fn cass_future_get_result(future_raw: *mut CassFuture) -> *const CassResult {
ArcFFI::as_ref(future_raw)
.with_waited_result(|r: &mut CassFutureResult| -> Option<Arc<CassResult>> {
match r.as_ref().ok()? {
Expand All @@ -369,7 +367,7 @@ pub unsafe extern "C" fn cass_future_get_result(

#[no_mangle]
pub unsafe extern "C" fn cass_future_get_error_result(
future_raw: *const CassFuture,
future_raw: *mut CassFuture,
) -> *const CassErrorResult {
ArcFFI::as_ref(future_raw)
.with_waited_result(|r: &mut CassFutureResult| -> Option<Arc<CassErrorResult>> {
Expand Down Expand Up @@ -397,7 +395,7 @@ pub unsafe extern "C" fn cass_future_get_prepared(

#[no_mangle]
pub unsafe extern "C" fn cass_future_tracing_id(
future: *const CassFuture,
future: *mut CassFuture,
tracing_id: *mut CassUuid,
) -> CassError {
ArcFFI::as_ref(future).with_waited_result(|r: &mut CassFutureResult| match r {
Expand Down Expand Up @@ -496,7 +494,7 @@ mod tests {
const HUNDRED_MILLIS_IN_MICROS: u64 = 100 * 1000;

let create_future_and_flag = || {
unsafe extern "C" fn mark_flag_cb(_fut: *const CassFuture, data: *mut c_void) {
unsafe extern "C" fn mark_flag_cb(_fut: *mut CassFuture, data: *mut c_void) {
let flag = data as *mut bool;
*flag = true;
}
Expand Down
14 changes: 7 additions & 7 deletions scylla-rust-wrapper/src/retry_policy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,27 +16,27 @@ pub type CassRetryPolicy = RetryPolicy;
impl ArcFFI for CassRetryPolicy {}

#[no_mangle]
pub extern "C" fn cass_retry_policy_default_new() -> *const CassRetryPolicy {
pub extern "C" fn cass_retry_policy_default_new() -> *mut CassRetryPolicy {
ArcFFI::into_ptr(Arc::new(RetryPolicy::DefaultRetryPolicy(Arc::new(
DefaultRetryPolicy,
))))
)))) as *mut _
}

#[no_mangle]
pub extern "C" fn cass_retry_policy_downgrading_consistency_new() -> *const CassRetryPolicy {
pub extern "C" fn cass_retry_policy_downgrading_consistency_new() -> *mut CassRetryPolicy {
ArcFFI::into_ptr(Arc::new(RetryPolicy::DowngradingConsistencyRetryPolicy(
Arc::new(DowngradingConsistencyRetryPolicy),
)))
))) as *mut _
}

#[no_mangle]
pub extern "C" fn cass_retry_policy_fallthrough_new() -> *const CassRetryPolicy {
pub extern "C" fn cass_retry_policy_fallthrough_new() -> *mut CassRetryPolicy {
ArcFFI::into_ptr(Arc::new(RetryPolicy::FallthroughRetryPolicy(Arc::new(
FallthroughRetryPolicy,
))))
)))) as *mut _
}

#[no_mangle]
pub unsafe extern "C" fn cass_retry_policy_free(retry_policy: *const CassRetryPolicy) {
pub unsafe extern "C" fn cass_retry_policy_free(retry_policy: *mut CassRetryPolicy) {
ArcFFI::free(retry_policy);
}
Loading