From 788a8b7091bbdde77817030e0836d7a7a786fd99 Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Sun, 4 May 2025 19:47:55 -0400 Subject: [Rust] Simplify usage surrounding c strings `cstring.as_ref().as_ptr() as *const c_char` -> `cstring.as_ptr()` `cstring.as_ref().as_ptr() as *mut _` -> `cstring.as_ptr()` `cstring.as_ptr() as *const c_char` -> `cstring.as_ptr()` With a few fixes for cstrings that might be dropped prematurely. --- rust/src/metadata.rs | 52 +++++++++++++--------------------------------------- 1 file changed, 13 insertions(+), 39 deletions(-) (limited to 'rust/src/metadata.rs') diff --git a/rust/src/metadata.rs b/rust/src/metadata.rs index c31e806b..cc10885a 100644 --- a/rust/src/metadata.rs +++ b/rust/src/metadata.rs @@ -271,12 +271,8 @@ impl Metadata { if self.get_type() != MetadataType::KeyValueDataType { return Err(()); } - let ptr: *mut BNMetadata = unsafe { - BNMetadataGetForKey( - self.handle, - key.to_cstr().as_ref().as_ptr() as *const c_char, - ) - }; + let raw_key = key.to_cstr(); + let ptr: *mut BNMetadata = unsafe { BNMetadataGetForKey(self.handle, raw_key.as_ptr()) }; if ptr.is_null() { return Ok(None); } @@ -295,14 +291,8 @@ impl Metadata { if self.get_type() != MetadataType::KeyValueDataType { return Err(()); } - - unsafe { - BNMetadataSetValueForKey( - self.handle, - key.to_cstr().as_ref().as_ptr() as *const c_char, - value.handle, - ) - }; + let raw_key = key.to_cstr(); + unsafe { BNMetadataSetValueForKey(self.handle, raw_key.as_ptr(), value.handle) }; Ok(()) } @@ -320,12 +310,8 @@ impl Metadata { return Err(()); } - unsafe { - BNMetadataRemoveKey( - self.handle, - key.to_cstr().as_ref().as_ptr() as *const c_char, - ) - }; + let raw_key = key.to_cstr(); + unsafe { BNMetadataRemoveKey(self.handle, raw_key.as_ptr()) }; Ok(()) } } @@ -396,21 +382,15 @@ impl From for Ref { impl From for Ref { fn from(value: String) -> Self { - unsafe { - Metadata::ref_from_raw(BNCreateMetadataStringData( - value.to_cstr().as_ptr() as *const c_char - )) - } + let raw_value = value.to_cstr(); + unsafe { Metadata::ref_from_raw(BNCreateMetadataStringData(raw_value.as_ptr())) } } } impl From<&str> for Ref { fn from(value: &str) -> Self { - unsafe { - Metadata::ref_from_raw(BNCreateMetadataStringData( - value.to_cstr().as_ptr() as *const c_char - )) - } + let raw_value = value.to_cstr(); + unsafe { Metadata::ref_from_raw(BNCreateMetadataStringData(raw_value.as_ptr())) } } } @@ -448,10 +428,7 @@ impl From>> for Ref { fn from(value: HashMap>) -> Self { let data: Vec<(S::Result, Ref)> = value.into_iter().map(|(k, v)| (k.to_cstr(), v)).collect(); - let mut keys: Vec<*const c_char> = data - .iter() - .map(|(k, _)| k.as_ref().as_ptr() as *const c_char) - .collect(); + let mut keys: Vec<*const c_char> = data.iter().map(|(k, _)| k.as_ptr()).collect(); let mut values: Vec<*mut BNMetadata> = data.iter().map(|(_, v)| v.handle).collect(); unsafe { @@ -472,10 +449,7 @@ where fn from(value: &[(S, T)]) -> Self { let data: Vec<(S::Result, Ref)> = value.iter().map(|(k, v)| (k.to_cstr(), v.into())).collect(); - let mut keys: Vec<*const c_char> = data - .iter() - .map(|(k, _)| k.as_ref().as_ptr() as *const c_char) - .collect(); + let mut keys: Vec<*const c_char> = data.iter().map(|(k, _)| k.as_ptr()).collect(); let mut values: Vec<*mut BNMetadata> = data.iter().map(|(_, v)| v.handle).collect(); unsafe { @@ -552,7 +526,7 @@ impl From> for Ref { } let mut pointers = vec![]; for r in &refs { - pointers.push(r.as_ref().as_ptr() as *const c_char); + pointers.push(r.as_ptr()); } unsafe { Metadata::ref_from_raw(BNCreateMetadataStringListData( -- cgit v1.3.1