diff options
| author | Mason Reed <mason@vector35.com> | 2025-05-04 19:47:55 -0400 |
|---|---|---|
| committer | Mason Reed <35282038+emesare@users.noreply.github.com> | 2025-05-12 17:45:24 -0400 |
| commit | 788a8b7091bbdde77817030e0836d7a7a786fd99 (patch) | |
| tree | 40e8f8d3c870788259a5acb5d14995cdc1656979 /rust/src/metadata.rs | |
| parent | a826c589dfc10c542deba7ca3343a462e02d6bde (diff) | |
[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.
Diffstat (limited to 'rust/src/metadata.rs')
| -rw-r--r-- | rust/src/metadata.rs | 52 |
1 files changed, 13 insertions, 39 deletions
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<f64> for Ref<Metadata> { impl From<String> for Ref<Metadata> { 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<Metadata> { 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<S: AsCStr> From<HashMap<S, Ref<Metadata>>> for Ref<Metadata> { fn from(value: HashMap<S, Ref<Metadata>>) -> Self { let data: Vec<(S::Result, Ref<Metadata>)> = 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<Metadata>)> = 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<S: AsCStr> From<Vec<S>> for Ref<Metadata> { } 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( |
