summaryrefslogtreecommitdiff
path: root/rust/src
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2025-05-04 19:47:55 -0400
committerMason Reed <35282038+emesare@users.noreply.github.com>2025-05-12 17:45:24 -0400
commit788a8b7091bbdde77817030e0836d7a7a786fd99 (patch)
tree40e8f8d3c870788259a5acb5d14995cdc1656979 /rust/src
parenta826c589dfc10c542deba7ca3343a462e02d6bde (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')
-rw-r--r--rust/src/architecture.rs10
-rw-r--r--rust/src/background_task.rs6
-rw-r--r--rust/src/binary_view.rs131
-rw-r--r--rust/src/binary_view/memory_map.rs74
-rw-r--r--rust/src/calling_convention.rs2
-rw-r--r--rust/src/collaboration.rs31
-rw-r--r--rust/src/collaboration/changeset.rs8
-rw-r--r--rust/src/collaboration/file.rs35
-rw-r--r--rust/src/collaboration/folder.rs16
-rw-r--r--rust/src/collaboration/group.rs20
-rw-r--r--rust/src/collaboration/merge.rs27
-rw-r--r--rust/src/collaboration/project.rs98
-rw-r--r--rust/src/collaboration/remote.rs99
-rw-r--r--rust/src/collaboration/snapshot.rs4
-rw-r--r--rust/src/collaboration/sync.rs12
-rw-r--r--rust/src/collaboration/user.rs17
-rw-r--r--rust/src/command.rs16
-rw-r--r--rust/src/component.rs7
-rw-r--r--rust/src/custom_binary_view.rs8
-rw-r--r--rust/src/database.rs20
-rw-r--r--rust/src/database/kvs.rs7
-rw-r--r--rust/src/database/snapshot.rs4
-rw-r--r--rust/src/debuginfo.rs105
-rw-r--r--rust/src/demangle.rs23
-rw-r--r--rust/src/download_provider.rs18
-rw-r--r--rust/src/external_library.rs14
-rw-r--r--rust/src/file_metadata.rs6
-rw-r--r--rust/src/function.rs6
-rw-r--r--rust/src/interaction.rs127
-rw-r--r--rust/src/lib.rs22
-rw-r--r--rust/src/logger.rs6
-rw-r--r--rust/src/medium_level_il/function.rs9
-rw-r--r--rust/src/metadata.rs52
-rw-r--r--rust/src/platform.rs24
-rw-r--r--rust/src/project.rs98
-rw-r--r--rust/src/project/file.rs22
-rw-r--r--rust/src/project/folder.rs18
-rw-r--r--rust/src/render_layer.rs14
-rw-r--r--rust/src/repository.rs7
-rw-r--r--rust/src/repository/manager.rs18
-rw-r--r--rust/src/secrets_provider.rs27
-rw-r--r--rust/src/section.rs17
-rw-r--r--rust/src/settings.rs108
-rw-r--r--rust/src/string.rs9
-rw-r--r--rust/src/tags.rs10
-rw-r--r--rust/src/template_simplifier.rs9
-rw-r--r--rust/src/type_archive.rs75
-rw-r--r--rust/src/type_container.rs47
-rw-r--r--rust/src/type_parser.rs7
-rw-r--r--rust/src/type_printer.rs10
-rw-r--r--rust/src/update.rs19
-rw-r--r--rust/src/websocket/client.rs14
-rw-r--r--rust/src/websocket/provider.rs7
-rw-r--r--rust/src/worker_thread.rs8
-rw-r--r--rust/src/workflow.rs123
55 files changed, 539 insertions, 1192 deletions
diff --git a/rust/src/architecture.rs b/rust/src/architecture.rs
index 74a8dfa4..62693800 100644
--- a/rust/src/architecture.rs
+++ b/rust/src/architecture.rs
@@ -1404,7 +1404,8 @@ impl CoreArchitecture {
}
pub fn by_name(name: &str) -> Option<Self> {
- let handle = unsafe { BNGetArchitectureByName(name.to_cstr().as_ptr() as *mut _) };
+ let name = name.to_cstr();
+ let handle = unsafe { BNGetArchitectureByName(name.as_ptr()) };
match handle.is_null() {
false => Some(CoreArchitecture { handle }),
true => None,
@@ -1955,9 +1956,7 @@ pub trait ArchitectureExt: Architecture {
fn register_by_name<S: AsCStr>(&self, name: S) -> Option<Self::Register> {
let name = name.to_cstr();
- match unsafe {
- BNGetArchitectureRegisterByName(self.as_ref().handle, name.as_ref().as_ptr() as *mut _)
- } {
+ match unsafe { BNGetArchitectureRegisterByName(self.as_ref().handle, name.as_ptr()) } {
0xffff_ffff => None,
reg => self.register_from_id(reg.into()),
}
@@ -3220,8 +3219,7 @@ where
};
unsafe {
- let res =
- BNRegisterArchitecture(name.as_ref().as_ptr() as *mut _, &mut custom_arch as *mut _);
+ let res = BNRegisterArchitecture(name.as_ptr(), &mut custom_arch as *mut _);
assert!(!res.is_null());
diff --git a/rust/src/background_task.rs b/rust/src/background_task.rs
index c9059aca..95bdda0b 100644
--- a/rust/src/background_task.rs
+++ b/rust/src/background_task.rs
@@ -45,7 +45,7 @@ impl BackgroundTask {
pub fn new<S: AsCStr>(initial_text: S, can_cancel: bool) -> Ref<Self> {
let text = initial_text.to_cstr();
- let handle = unsafe { BNBeginBackgroundTask(text.as_ref().as_ptr() as *mut _, can_cancel) };
+ let handle = unsafe { BNBeginBackgroundTask(text.as_ptr(), can_cancel) };
// We should always be returned a valid task.
assert!(!handle.is_null());
unsafe { Ref::new(Self { handle }) }
@@ -77,9 +77,7 @@ impl BackgroundTask {
pub fn set_progress_text<S: AsCStr>(&self, text: S) {
let progress_text = text.to_cstr();
- unsafe {
- BNSetBackgroundTaskProgressText(self.handle, progress_text.as_ref().as_ptr() as *mut _)
- }
+ unsafe { BNSetBackgroundTaskProgressText(self.handle, progress_text.as_ptr()) }
}
pub fn running_tasks() -> Array<BackgroundTask> {
diff --git a/rust/src/binary_view.rs b/rust/src/binary_view.rs
index 854f58f4..a0fb9081 100644
--- a/rust/src/binary_view.rs
+++ b/rust/src/binary_view.rs
@@ -267,12 +267,8 @@ pub trait BinaryViewExt: BinaryViewBase {
}
fn add_analysis_option(&self, name: impl AsCStr) {
- unsafe {
- BNAddAnalysisOption(
- self.as_ref().handle,
- name.to_cstr().as_ref().as_ptr() as *mut _,
- )
- }
+ let name = name.to_cstr();
+ unsafe { BNAddAnalysisOption(self.as_ref().handle, name.as_ptr()) }
}
fn has_initial_analysis(&self) -> bool {
@@ -409,7 +405,7 @@ pub trait BinaryViewExt: BinaryViewBase {
unsafe {
let raw_sym_ptr = BNGetSymbolByRawName(
self.as_ref().handle,
- raw_name.as_ref().as_ptr() as *mut _,
+ raw_name.as_ptr(),
std::ptr::null_mut(),
);
match raw_sym_ptr.is_null() {
@@ -435,7 +431,7 @@ pub trait BinaryViewExt: BinaryViewBase {
let mut count = 0;
let handles = BNGetSymbolsByName(
self.as_ref().handle,
- raw_name.as_ref().as_ptr() as *mut _,
+ raw_name.as_ptr(),
&mut count,
std::ptr::null_mut(),
);
@@ -768,10 +764,9 @@ pub trait BinaryViewExt: BinaryViewBase {
}
fn type_by_id<S: AsCStr>(&self, id: S) -> Option<Ref<Type>> {
+ let id_str = id.to_cstr();
unsafe {
- let id_str = id.to_cstr();
- let type_handle =
- BNGetAnalysisTypeById(self.as_ref().handle, id_str.as_ref().as_ptr() as *mut _);
+ let type_handle = BNGetAnalysisTypeById(self.as_ref().handle, id_str.as_ptr());
if type_handle.is_null() {
return None;
}
@@ -780,10 +775,9 @@ pub trait BinaryViewExt: BinaryViewBase {
}
fn type_name_by_id<S: AsCStr>(&self, id: S) -> Option<QualifiedName> {
+ let id_str = id.to_cstr();
unsafe {
- let id_str = id.to_cstr();
- let name_handle =
- BNGetAnalysisTypeNameById(self.as_ref().handle, id_str.as_ref().as_ptr() as *mut _);
+ let name_handle = BNGetAnalysisTypeNameById(self.as_ref().handle, id_str.as_ptr());
let name = QualifiedName::from_owned_raw(name_handle);
// The core will return an empty qualified name if no type name was found.
match name.items.is_empty() {
@@ -879,7 +873,7 @@ pub trait BinaryViewExt: BinaryViewBase {
fn remove_auto_section<S: AsCStr>(&self, name: S) {
let raw_name = name.to_cstr();
- let raw_name_ptr = raw_name.as_ref().as_ptr() as *mut _;
+ let raw_name_ptr = raw_name.as_ptr();
unsafe {
BNRemoveAutoSection(self.as_ref().handle, raw_name_ptr);
}
@@ -887,7 +881,7 @@ pub trait BinaryViewExt: BinaryViewBase {
fn remove_user_section<S: AsCStr>(&self, name: S) {
let raw_name = name.to_cstr();
- let raw_name_ptr = raw_name.as_ref().as_ptr() as *mut _;
+ let raw_name_ptr = raw_name.as_ptr();
unsafe {
BNRemoveUserSection(self.as_ref().handle, raw_name_ptr);
}
@@ -896,7 +890,7 @@ pub trait BinaryViewExt: BinaryViewBase {
fn section_by_name<S: AsCStr>(&self, name: S) -> Option<Ref<Section>> {
unsafe {
let raw_name = name.to_cstr();
- let name_ptr = raw_name.as_ref().as_ptr() as *mut _;
+ let name_ptr = raw_name.as_ptr();
let raw_section_ptr = BNGetSectionByName(self.as_ref().handle, name_ptr);
match raw_section_ptr.is_null() {
false => Some(Section::ref_from_raw(raw_section_ptr)),
@@ -1112,22 +1106,14 @@ pub trait BinaryViewExt: BinaryViewBase {
fn show_graph_report<S: AsCStr>(&self, raw_name: S, graph: &FlowGraph) {
let raw_name = raw_name.to_cstr();
unsafe {
- BNShowGraphReport(
- self.as_ref().handle,
- raw_name.as_ref().as_ptr() as *mut _,
- graph.handle,
- );
+ BNShowGraphReport(self.as_ref().handle, raw_name.as_ptr(), graph.handle);
}
}
fn load_settings<S: AsCStr>(&self, view_type_name: S) -> Result<Ref<Settings>> {
let view_type_name = view_type_name.to_cstr();
- let settings_handle = unsafe {
- BNBinaryViewGetLoadSettings(
- self.as_ref().handle,
- view_type_name.as_ref().as_ptr() as *mut _,
- )
- };
+ let settings_handle =
+ unsafe { BNBinaryViewGetLoadSettings(self.as_ref().handle, view_type_name.as_ptr()) };
if settings_handle.is_null() {
Err(())
@@ -1142,7 +1128,7 @@ pub trait BinaryViewExt: BinaryViewBase {
unsafe {
BNBinaryViewSetLoadSettings(
self.as_ref().handle,
- view_type_name.as_ref().as_ptr() as *mut _,
+ view_type_name.as_ptr(),
settings.handle,
)
};
@@ -1170,7 +1156,7 @@ pub trait BinaryViewExt: BinaryViewBase {
fn tag_type_by_name<S: AsCStr>(&self, name: S) -> Option<Ref<TagType>> {
let name = name.to_cstr();
unsafe {
- let handle = BNGetTagType(self.as_ref().handle, name.as_ref().as_ptr() as *mut _);
+ let handle = BNGetTagType(self.as_ref().handle, name.as_ptr());
if handle.is_null() {
return None;
}
@@ -1184,7 +1170,7 @@ pub trait BinaryViewExt: BinaryViewBase {
fn tag_by_id<S: AsCStr>(&self, id: S) -> Option<Ref<Tag>> {
let id = id.to_cstr();
unsafe {
- let handle = BNGetTag(self.as_ref().handle, id.as_ref().as_ptr() as *mut _);
+ let handle = BNGetTag(self.as_ref().handle, id.as_ptr());
if handle.is_null() {
return None;
}
@@ -1234,13 +1220,7 @@ pub trait BinaryViewExt: BinaryViewBase {
/// function use [`Function::set_comment_at`]
fn set_comment_at(&self, addr: u64, comment: impl AsCStr) {
let comment_raw = comment.to_cstr();
- unsafe {
- BNSetGlobalCommentForAddress(
- self.as_ref().handle,
- addr,
- comment_raw.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNSetGlobalCommentForAddress(self.as_ref().handle, addr, comment_raw.as_ptr()) }
}
/// Retrieves a list of the next disassembly lines.
@@ -1292,12 +1272,9 @@ pub trait BinaryViewExt: BinaryViewBase {
}
fn query_metadata<S: AsCStr>(&self, key: S) -> Option<Ref<Metadata>> {
- let value: *mut BNMetadata = unsafe {
- BNBinaryViewQueryMetadata(
- self.as_ref().handle,
- key.to_cstr().as_ref().as_ptr() as *const c_char,
- )
- };
+ let key = key.to_cstr();
+ let value: *mut BNMetadata =
+ unsafe { BNBinaryViewQueryMetadata(self.as_ref().handle, key.as_ptr()) };
if value.is_null() {
None
} else {
@@ -1318,10 +1295,11 @@ pub trait BinaryViewExt: BinaryViewBase {
V: Into<Ref<Metadata>>,
{
let md = value.into();
+ let key = key.to_cstr();
unsafe {
BNBinaryViewStoreMetadata(
self.as_ref().handle,
- key.to_cstr().as_ref().as_ptr() as *const c_char,
+ key.as_ptr(),
md.as_ref().handle,
is_auto,
)
@@ -1329,12 +1307,8 @@ pub trait BinaryViewExt: BinaryViewBase {
}
fn remove_metadata<S: AsCStr>(&self, key: S) {
- unsafe {
- BNBinaryViewRemoveMetadata(
- self.as_ref().handle,
- key.to_cstr().as_ref().as_ptr() as *const c_char,
- )
- };
+ let key = key.to_cstr();
+ unsafe { BNBinaryViewRemoveMetadata(self.as_ref().handle, key.as_ptr()) };
}
/// Retrieves a list of [CodeReference]s pointing to a given address.
@@ -1460,12 +1434,7 @@ pub trait BinaryViewExt: BinaryViewBase {
fn component_by_guid<S: AsCStr>(&self, guid: S) -> Option<Ref<Component>> {
let name = guid.to_cstr();
- let result = unsafe {
- BNGetComponentByGuid(
- self.as_ref().handle,
- name.as_ref().as_ptr() as *const c_char,
- )
- };
+ let result = unsafe { BNGetComponentByGuid(self.as_ref().handle, name.as_ptr()) };
NonNull::new(result).map(|h| unsafe { Component::ref_from_raw(h) })
}
@@ -1476,12 +1445,7 @@ pub trait BinaryViewExt: BinaryViewBase {
fn component_by_path<P: AsCStr>(&self, path: P) -> Option<Ref<Component>> {
let path = path.to_cstr();
- let result = unsafe {
- BNGetComponentByPath(
- self.as_ref().handle,
- path.as_ref().as_ptr() as *const c_char,
- )
- };
+ let result = unsafe { BNGetComponentByPath(self.as_ref().handle, path.as_ptr()) };
NonNull::new(result).map(|h| unsafe { Component::ref_from_raw(h) })
}
@@ -1491,12 +1455,7 @@ pub trait BinaryViewExt: BinaryViewBase {
fn remove_component_by_guid<P: AsCStr>(&self, guid: P) -> bool {
let path = guid.to_cstr();
- unsafe {
- BNRemoveComponentByGuid(
- self.as_ref().handle,
- path.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNRemoveComponentByGuid(self.as_ref().handle, path.as_ptr()) }
}
fn data_variable_parent_components(&self, data_variable: &DataVariable) -> Array<Component> {
@@ -1519,24 +1478,15 @@ pub trait BinaryViewExt: BinaryViewBase {
fn external_library<S: AsCStr>(&self, name: S) -> Option<Ref<ExternalLibrary>> {
let name_ptr = name.to_cstr();
- let result = unsafe {
- BNBinaryViewGetExternalLibrary(
- self.as_ref().handle,
- name_ptr.as_ref().as_ptr() as *const c_char,
- )
- };
+ let result =
+ unsafe { BNBinaryViewGetExternalLibrary(self.as_ref().handle, name_ptr.as_ptr()) };
let result_ptr = NonNull::new(result)?;
Some(unsafe { ExternalLibrary::ref_from_raw(result_ptr) })
}
fn remove_external_library<S: AsCStr>(&self, name: S) {
let name_ptr = name.to_cstr();
- unsafe {
- BNBinaryViewRemoveExternalLibrary(
- self.as_ref().handle,
- name_ptr.as_ref().as_ptr() as *const c_char,
- )
- };
+ unsafe { BNBinaryViewRemoveExternalLibrary(self.as_ref().handle, name_ptr.as_ptr()) };
}
fn add_external_library<S: AsCStr>(
@@ -1549,7 +1499,7 @@ pub trait BinaryViewExt: BinaryViewBase {
let result = unsafe {
BNBinaryViewAddExternalLibrary(
self.as_ref().handle,
- name_ptr.as_ref().as_ptr() as *const c_char,
+ name_ptr.as_ptr(),
backing_file
.map(|b| b.handle.as_ptr())
.unwrap_or(std::ptr::null_mut()),
@@ -1598,7 +1548,7 @@ pub trait BinaryViewExt: BinaryViewBase {
self.as_ref().handle,
symbol.handle,
library.handle.as_ptr(),
- target_symbol_name.as_ref().as_ptr() as *const c_char,
+ target_symbol_name.as_ptr(),
target_address_ptr,
target_is_auto,
)
@@ -1641,12 +1591,7 @@ pub trait BinaryViewExt: BinaryViewBase {
fn type_library_by_name<S: AsCStr>(&self, name: S) -> Option<TypeLibrary> {
let name = name.to_cstr();
- let result = unsafe {
- BNGetBinaryViewTypeLibrary(
- self.as_ref().handle,
- name.as_ref().as_ptr() as *const c_char,
- )
- };
+ let result = unsafe { BNGetBinaryViewTypeLibrary(self.as_ref().handle, name.as_ptr()) };
NonNull::new(result).map(|h| unsafe { TypeLibrary::from_raw(h) })
}
@@ -1739,12 +1684,8 @@ pub trait BinaryViewExt: BinaryViewBase {
/// Dict[string_guid, Tuple[string_type_name, type_library_name]]
fn import_type_by_guid<S: AsCStr>(&self, guid: S) -> Option<Ref<Type>> {
let guid = guid.to_cstr();
- let result = unsafe {
- BNBinaryViewImportTypeLibraryTypeByGuid(
- self.as_ref().handle,
- guid.as_ref().as_ptr() as *const c_char,
- )
- };
+ let result =
+ unsafe { BNBinaryViewImportTypeLibraryTypeByGuid(self.as_ref().handle, guid.as_ptr()) };
(!result.is_null()).then(|| unsafe { Type::ref_from_raw(result) })
}
diff --git a/rust/src/binary_view/memory_map.rs b/rust/src/binary_view/memory_map.rs
index b1737440..3afe0a20 100644
--- a/rust/src/binary_view/memory_map.rs
+++ b/rust/src/binary_view/memory_map.rs
@@ -5,7 +5,6 @@ use crate::rc::Ref;
use crate::segment::SegmentFlags;
use crate::string::{AsCStr, BnString};
use binaryninjacore_sys::*;
-use std::ffi::c_char;
#[derive(PartialEq, Eq, Hash)]
pub struct MemoryMap {
@@ -52,7 +51,7 @@ impl MemoryMap {
unsafe {
BNAddBinaryMemoryRegion(
self.view.handle,
- name_raw.as_ref().as_ptr() as *const c_char,
+ name_raw.as_ptr(),
start,
view.handle,
segment_flags.unwrap_or_default().into_raw(),
@@ -71,7 +70,7 @@ impl MemoryMap {
unsafe {
BNAddDataMemoryRegion(
self.view.handle,
- name_raw.as_ref().as_ptr() as *const c_char,
+ name_raw.as_ptr(),
start,
data.as_raw(),
segment_flags.unwrap_or_default().into_raw(),
@@ -90,7 +89,7 @@ impl MemoryMap {
unsafe {
BNAddRemoteMemoryRegion(
self.view.handle,
- name_raw.as_ref().as_ptr() as *const c_char,
+ name_raw.as_ptr(),
start,
&mut accessor.api_object,
segment_flags.unwrap_or_default().into_raw(),
@@ -100,12 +99,7 @@ impl MemoryMap {
pub fn remove_memory_region(&mut self, name: impl AsCStr) -> bool {
let name_raw = name.to_cstr();
- unsafe {
- BNRemoveMemoryRegion(
- self.view.handle,
- name_raw.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNRemoveMemoryRegion(self.view.handle, name_raw.as_ptr()) }
}
pub fn active_memory_region_at(&self, addr: u64) -> String {
@@ -117,88 +111,44 @@ impl MemoryMap {
pub fn memory_region_flags(&self, name: impl AsCStr) -> SegmentFlags {
let name_raw = name.to_cstr();
- let flags_raw = unsafe {
- BNGetMemoryRegionFlags(
- self.view.handle,
- name_raw.as_ref().as_ptr() as *const c_char,
- )
- };
+ let flags_raw = unsafe { BNGetMemoryRegionFlags(self.view.handle, name_raw.as_ptr()) };
SegmentFlags::from_raw(flags_raw)
}
pub fn set_memory_region_flags(&mut self, name: impl AsCStr, flags: SegmentFlags) -> bool {
let name_raw = name.to_cstr();
- unsafe {
- BNSetMemoryRegionFlags(
- self.view.handle,
- name_raw.as_ref().as_ptr() as *const c_char,
- flags.into_raw(),
- )
- }
+ unsafe { BNSetMemoryRegionFlags(self.view.handle, name_raw.as_ptr(), flags.into_raw()) }
}
pub fn is_memory_region_enabled(&self, name: impl AsCStr) -> bool {
let name_raw = name.to_cstr();
- unsafe {
- BNIsMemoryRegionEnabled(
- self.view.handle,
- name_raw.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNIsMemoryRegionEnabled(self.view.handle, name_raw.as_ptr()) }
}
pub fn set_memory_region_enabled(&mut self, name: impl AsCStr, enabled: bool) -> bool {
let name_raw = name.to_cstr();
- unsafe {
- BNSetMemoryRegionEnabled(
- self.view.handle,
- name_raw.as_ref().as_ptr() as *const c_char,
- enabled,
- )
- }
+ unsafe { BNSetMemoryRegionEnabled(self.view.handle, name_raw.as_ptr(), enabled) }
}
// TODO: Should we just call this is_memory_region_relocatable?
pub fn is_memory_region_rebaseable(&self, name: impl AsCStr) -> bool {
let name_raw = name.to_cstr();
- unsafe {
- BNIsMemoryRegionRebaseable(
- self.view.handle,
- name_raw.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNIsMemoryRegionRebaseable(self.view.handle, name_raw.as_ptr()) }
}
pub fn set_memory_region_rebaseable(&mut self, name: impl AsCStr, enabled: bool) -> bool {
let name_raw = name.to_cstr();
- unsafe {
- BNSetMemoryRegionRebaseable(
- self.view.handle,
- name_raw.as_ref().as_ptr() as *const c_char,
- enabled,
- )
- }
+ unsafe { BNSetMemoryRegionRebaseable(self.view.handle, name_raw.as_ptr(), enabled) }
}
pub fn memory_region_fill(&self, name: impl AsCStr) -> u8 {
let name_raw = name.to_cstr();
- unsafe {
- BNGetMemoryRegionFill(
- self.view.handle,
- name_raw.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNGetMemoryRegionFill(self.view.handle, name_raw.as_ptr()) }
}
pub fn set_memory_region_fill(&mut self, name: impl AsCStr, fill: u8) -> bool {
let name_raw = name.to_cstr();
- unsafe {
- BNSetMemoryRegionFill(
- self.view.handle,
- name_raw.as_ref().as_ptr() as *const c_char,
- fill,
- )
- }
+ unsafe { BNSetMemoryRegionFill(self.view.handle, name_raw.as_ptr(), fill) }
}
pub fn reset(&mut self) {
diff --git a/rust/src/calling_convention.rs b/rust/src/calling_convention.rs
index f0f0ba4c..7db61d8a 100644
--- a/rust/src/calling_convention.rs
+++ b/rust/src/calling_convention.rs
@@ -413,7 +413,7 @@ where
};
unsafe {
- let cc_name = name.as_ref().as_ptr() as *mut _;
+ let cc_name = name.as_ptr();
let result = BNCreateCallingConvention(arch.as_ref().handle, cc_name, &mut cc);
assert!(!result.is_null());
diff --git a/rust/src/collaboration.rs b/rust/src/collaboration.rs
index 1f76dc9a..8a1774f2 100644
--- a/rust/src/collaboration.rs
+++ b/rust/src/collaboration.rs
@@ -75,22 +75,21 @@ pub fn known_remotes() -> Array<Remote> {
/// Get Remote by unique `id`
pub fn get_remote_by_id<S: AsCStr>(id: S) -> Option<Ref<Remote>> {
let id = id.to_cstr();
- let value = unsafe { BNCollaborationGetRemoteById(id.as_ref().as_ptr() as *const c_char) };
+ let value = unsafe { BNCollaborationGetRemoteById(id.as_ptr()) };
NonNull::new(value).map(|h| unsafe { Remote::ref_from_raw(h) })
}
/// Get Remote by `address`
pub fn get_remote_by_address<S: AsCStr>(address: S) -> Option<Ref<Remote>> {
let address = address.to_cstr();
- let value =
- unsafe { BNCollaborationGetRemoteByAddress(address.as_ref().as_ptr() as *const c_char) };
+ let value = unsafe { BNCollaborationGetRemoteByAddress(address.as_ptr()) };
NonNull::new(value).map(|h| unsafe { Remote::ref_from_raw(h) })
}
/// Get Remote by `name`
pub fn get_remote_by_name<S: AsCStr>(name: S) -> Option<Ref<Remote>> {
let name = name.to_cstr();
- let value = unsafe { BNCollaborationGetRemoteByName(name.as_ref().as_ptr() as *const c_char) };
+ let value = unsafe { BNCollaborationGetRemoteByName(name.as_ptr()) };
NonNull::new(value).map(|h| unsafe { Remote::ref_from_raw(h) })
}
@@ -116,17 +115,11 @@ where
.into_iter()
.map(|(k, v)| (k.to_cstr(), v.to_cstr()))
.unzip();
- let data_keys_ptr: Box<[*const c_char]> = data_keys
- .iter()
- .map(|k| k.as_ref().as_ptr() as *const c_char)
- .collect();
- let data_values_ptr: Box<[*const c_char]> = data_values
- .iter()
- .map(|v| v.as_ref().as_ptr() as *const c_char)
- .collect();
+ let data_keys_ptr: Box<[*const c_char]> = data_keys.iter().map(|k| k.as_ptr()).collect();
+ let data_values_ptr: Box<[*const c_char]> = data_values.iter().map(|v| v.as_ptr()).collect();
unsafe {
BNCollaborationStoreDataInKeychain(
- key.as_ref().as_ptr() as *const c_char,
+ key.as_ptr(),
data_keys_ptr.as_ptr() as *mut _,
data_values_ptr.as_ptr() as *mut _,
data_keys.len(),
@@ -136,20 +129,14 @@ where
pub fn has_data_in_keychain<K: AsCStr>(key: K) -> bool {
let key = key.to_cstr();
- unsafe { BNCollaborationHasDataInKeychain(key.as_ref().as_ptr() as *const c_char) }
+ unsafe { BNCollaborationHasDataInKeychain(key.as_ptr()) }
}
pub fn get_data_from_keychain<K: AsCStr>(key: K) -> Option<(Array<BnString>, Array<BnString>)> {
let key = key.to_cstr();
let mut keys = std::ptr::null_mut();
let mut values = std::ptr::null_mut();
- let count = unsafe {
- BNCollaborationGetDataFromKeychain(
- key.as_ref().as_ptr() as *const c_char,
- &mut keys,
- &mut values,
- )
- };
+ let count = unsafe { BNCollaborationGetDataFromKeychain(key.as_ptr(), &mut keys, &mut values) };
let keys = (!keys.is_null()).then(|| unsafe { Array::new(keys, count, ()) });
let values = (!values.is_null()).then(|| unsafe { Array::new(values, count, ()) });
keys.zip(values)
@@ -157,5 +144,5 @@ pub fn get_data_from_keychain<K: AsCStr>(key: K) -> Option<(Array<BnString>, Arr
pub fn delete_data_from_keychain<K: AsCStr>(key: K) -> bool {
let key = key.to_cstr();
- unsafe { BNCollaborationDeleteDataFromKeychain(key.as_ref().as_ptr() as *const c_char) }
+ unsafe { BNCollaborationDeleteDataFromKeychain(key.as_ptr()) }
}
diff --git a/rust/src/collaboration/changeset.rs b/rust/src/collaboration/changeset.rs
index 1cc30d76..0db384cb 100644
--- a/rust/src/collaboration/changeset.rs
+++ b/rust/src/collaboration/changeset.rs
@@ -1,5 +1,4 @@
use binaryninjacore_sys::*;
-use std::ffi::c_char;
use std::ptr::NonNull;
use super::{RemoteFile, RemoteUser};
@@ -68,12 +67,7 @@ impl Changeset {
/// Set the name of the changeset, e.g. in a name changeset function.
pub fn set_name<S: AsCStr>(&self, value: S) -> bool {
let value = value.to_cstr();
- unsafe {
- BNCollaborationChangesetSetName(
- self.handle.as_ptr(),
- value.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNCollaborationChangesetSetName(self.handle.as_ptr(), value.as_ptr()) }
}
}
diff --git a/rust/src/collaboration/file.rs b/rust/src/collaboration/file.rs
index 2089fbb7..251b4f7d 100644
--- a/rust/src/collaboration/file.rs
+++ b/rust/src/collaboration/file.rs
@@ -1,4 +1,4 @@
-use std::ffi::{c_char, c_void};
+use std::ffi::c_void;
use std::fmt::{Debug, Formatter};
use std::ptr::NonNull;
use std::time::SystemTime;
@@ -96,12 +96,7 @@ impl RemoteFile {
pub fn set_metadata<S: AsCStr>(&self, folder: S) -> Result<(), ()> {
let folder_raw = folder.to_cstr();
- let success = unsafe {
- BNRemoteFileSetMetadata(
- self.handle.as_ptr(),
- folder_raw.as_ref().as_ptr() as *const c_char,
- )
- };
+ let success = unsafe { BNRemoteFileSetMetadata(self.handle.as_ptr(), folder_raw.as_ptr()) };
success.then_some(()).ok_or(())
}
@@ -192,12 +187,7 @@ impl RemoteFile {
/// Set the description of the file. You will need to push the file to update the remote version.
pub fn set_name<S: AsCStr>(&self, name: S) -> Result<(), ()> {
let name = name.to_cstr();
- let success = unsafe {
- BNRemoteFileSetName(
- self.handle.as_ptr(),
- name.as_ref().as_ptr() as *const c_char,
- )
- };
+ let success = unsafe { BNRemoteFileSetName(self.handle.as_ptr(), name.as_ptr()) };
success.then_some(()).ok_or(())
}
@@ -211,12 +201,8 @@ impl RemoteFile {
/// Set the description of the file. You will need to push the file to update the remote version.
pub fn set_description<S: AsCStr>(&self, description: S) -> Result<(), ()> {
let description = description.to_cstr();
- let success = unsafe {
- BNRemoteFileSetDescription(
- self.handle.as_ptr(),
- description.as_ref().as_ptr() as *const c_char,
- )
- };
+ let success =
+ unsafe { BNRemoteFileSetDescription(self.handle.as_ptr(), description.as_ptr()) };
success.then_some(()).ok_or(())
}
@@ -269,9 +255,7 @@ impl RemoteFile {
self.pull_snapshots()?;
}
let id = id.to_cstr();
- let result = unsafe {
- BNRemoteFileGetSnapshotById(self.handle.as_ptr(), id.as_ref().as_ptr() as *const c_char)
- };
+ let result = unsafe { BNRemoteFileGetSnapshotById(self.handle.as_ptr(), id.as_ptr()) };
Ok(NonNull::new(result).map(|handle| unsafe { RemoteSnapshot::ref_from_raw(handle) }))
}
@@ -350,14 +334,11 @@ impl RemoteFile {
{
let name = name.to_cstr();
let parent_ids: Vec<_> = parent_ids.into_iter().map(|id| id.to_cstr()).collect();
- let mut parent_ids_raw: Vec<_> = parent_ids
- .iter()
- .map(|x| x.as_ref().as_ptr() as *const c_char)
- .collect();
+ let mut parent_ids_raw: Vec<_> = parent_ids.iter().map(|x| x.as_ptr()).collect();
let result = unsafe {
BNRemoteFileCreateSnapshot(
self.handle.as_ptr(),
- name.as_ref().as_ptr() as *const c_char,
+ name.as_ptr(),
contents.as_mut_ptr(),
contents.len(),
analysis_cache_contexts.as_mut_ptr(),
diff --git a/rust/src/collaboration/folder.rs b/rust/src/collaboration/folder.rs
index 0fd2bf87..b5fde3b4 100644
--- a/rust/src/collaboration/folder.rs
+++ b/rust/src/collaboration/folder.rs
@@ -1,6 +1,5 @@
use super::{Remote, RemoteProject};
use binaryninjacore_sys::*;
-use std::ffi::c_char;
use std::ptr::NonNull;
use crate::project::folder::ProjectFolder;
@@ -106,12 +105,7 @@ impl RemoteFolder {
/// Set the display name of the folder. You will need to push the folder to update the remote version.
pub fn set_name<S: AsCStr>(&self, name: S) -> Result<(), ()> {
let name = name.to_cstr();
- let success = unsafe {
- BNRemoteFolderSetName(
- self.handle.as_ptr(),
- name.as_ref().as_ptr() as *const c_char,
- )
- };
+ let success = unsafe { BNRemoteFolderSetName(self.handle.as_ptr(), name.as_ptr()) };
success.then_some(()).ok_or(())
}
@@ -125,12 +119,8 @@ impl RemoteFolder {
/// Set the description of the folder. You will need to push the folder to update the remote version.
pub fn set_description<S: AsCStr>(&self, description: S) -> Result<(), ()> {
let description = description.to_cstr();
- let success = unsafe {
- BNRemoteFolderSetDescription(
- self.handle.as_ptr(),
- description.as_ref().as_ptr() as *const c_char,
- )
- };
+ let success =
+ unsafe { BNRemoteFolderSetDescription(self.handle.as_ptr(), description.as_ptr()) };
success.then_some(()).ok_or(())
}
}
diff --git a/rust/src/collaboration/group.rs b/rust/src/collaboration/group.rs
index 94253519..b8b32c7a 100644
--- a/rust/src/collaboration/group.rs
+++ b/rust/src/collaboration/group.rs
@@ -2,7 +2,6 @@ use super::Remote;
use crate::rc::{Array, CoreArrayProvider, CoreArrayProviderInner, Guard, Ref, RefCountable};
use crate::string::{AsCStr, BnString};
use binaryninjacore_sys::*;
-use std::ffi::c_char;
use std::fmt;
use std::fmt::{Display, Formatter};
use std::ptr::NonNull;
@@ -52,12 +51,7 @@ impl RemoteGroup {
/// You will need to push the group to update the Remote.
pub fn set_name<U: AsCStr>(&self, name: U) {
let name = name.to_cstr();
- unsafe {
- BNCollaborationGroupSetName(
- self.handle.as_ptr(),
- name.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNCollaborationGroupSetName(self.handle.as_ptr(), name.as_ptr()) }
}
/// Get list of users in the group
@@ -93,10 +87,7 @@ impl RemoteGroup {
I::Item: AsCStr,
{
let usernames: Vec<_> = usernames.into_iter().map(|u| u.to_cstr()).collect();
- let mut usernames_raw: Vec<_> = usernames
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect();
+ let mut usernames_raw: Vec<_> = usernames.iter().map(|s| s.as_ptr()).collect();
// TODO: This should only fail if collaboration is not supported.
// TODO: Because you should not have a RemoteGroup at that point we can ignore?
// TODO: Do you need any permissions to do this?
@@ -113,12 +104,7 @@ impl RemoteGroup {
/// Test if a group has a user with the given username
pub fn contains_user<U: AsCStr>(&self, username: U) -> bool {
let username = username.to_cstr();
- unsafe {
- BNCollaborationGroupContainsUser(
- self.handle.as_ptr(),
- username.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNCollaborationGroupContainsUser(self.handle.as_ptr(), username.as_ptr()) }
}
}
diff --git a/rust/src/collaboration/merge.rs b/rust/src/collaboration/merge.rs
index 84aa6192..2fb5b3de 100644
--- a/rust/src/collaboration/merge.rs
+++ b/rust/src/collaboration/merge.rs
@@ -1,5 +1,4 @@
use binaryninjacore_sys::*;
-use std::ffi::c_char;
use std::ptr::NonNull;
use crate::database::{snapshot::Snapshot, Database};
@@ -52,10 +51,7 @@ impl MergeConflict {
pub fn path_item_string<S: AsCStr>(&self, path: S) -> Result<BnString, ()> {
let path = path.to_cstr();
let result = unsafe {
- BNAnalysisMergeConflictGetPathItemString(
- self.handle.as_ptr(),
- path.as_ref().as_ptr() as *const c_char,
- )
+ BNAnalysisMergeConflictGetPathItemString(self.handle.as_ptr(), path.as_ptr())
};
(!result.is_null())
.then(|| unsafe { BnString::from_raw(result) })
@@ -125,24 +121,16 @@ impl MergeConflict {
/// Call this when you've resolved the conflict to save the result
pub fn success<S: AsCStr>(&self, value: S) -> Result<(), ()> {
let value = value.to_cstr();
- let success = unsafe {
- BNAnalysisMergeConflictSuccess(
- self.handle.as_ptr(),
- value.as_ref().as_ptr() as *const c_char,
- )
- };
+ let success =
+ unsafe { BNAnalysisMergeConflictSuccess(self.handle.as_ptr(), value.as_ptr()) };
success.then_some(()).ok_or(())
}
// TODO: Make a safe version of this that checks the path and if it holds a number
pub unsafe fn get_path_item_number<S: AsCStr>(&self, path_key: S) -> Option<u64> {
let path_key = path_key.to_cstr();
- let value = unsafe {
- BNAnalysisMergeConflictGetPathItem(
- self.handle.as_ptr(),
- path_key.as_ref().as_ptr() as *const c_char,
- )
- };
+ let value =
+ unsafe { BNAnalysisMergeConflictGetPathItem(self.handle.as_ptr(), path_key.as_ptr()) };
match value.is_null() {
// SAFETY: The path must be a number.
false => Some(value as u64),
@@ -153,10 +141,7 @@ impl MergeConflict {
pub unsafe fn get_path_item_string<S: AsCStr>(&self, path_key: S) -> Option<BnString> {
let path_key = path_key.to_cstr();
let value = unsafe {
- BNAnalysisMergeConflictGetPathItemString(
- self.handle.as_ptr(),
- path_key.as_ref().as_ptr() as *const c_char,
- )
+ BNAnalysisMergeConflictGetPathItemString(self.handle.as_ptr(), path_key.as_ptr())
};
match value.is_null() {
false => Some(unsafe { BnString::from_raw(value) }),
diff --git a/rust/src/collaboration/project.rs b/rust/src/collaboration/project.rs
index 8c04080b..fce2a5f6 100644
--- a/rust/src/collaboration/project.rs
+++ b/rust/src/collaboration/project.rs
@@ -1,4 +1,4 @@
-use std::ffi::{c_char, c_void};
+use std::ffi::c_void;
use std::ptr::NonNull;
use std::time::SystemTime;
@@ -138,12 +138,7 @@ impl RemoteProject {
/// Set the description of the file. You will need to push the file to update the remote version.
pub fn set_name<S: AsCStr>(&self, name: S) -> Result<(), ()> {
let name = name.to_cstr();
- let success = unsafe {
- BNRemoteProjectSetName(
- self.handle.as_ptr(),
- name.as_ref().as_ptr() as *const c_char,
- )
- };
+ let success = unsafe { BNRemoteProjectSetName(self.handle.as_ptr(), name.as_ptr()) };
success.then_some(()).ok_or(())
}
@@ -157,12 +152,8 @@ impl RemoteProject {
/// Set the description of the file. You will need to push the file to update the remote version.
pub fn set_description<S: AsCStr>(&self, description: S) -> Result<(), ()> {
let description = description.to_cstr();
- let success = unsafe {
- BNRemoteProjectSetDescription(
- self.handle.as_ptr(),
- description.as_ref().as_ptr() as *const c_char,
- )
- };
+ let success =
+ unsafe { BNRemoteProjectSetDescription(self.handle.as_ptr(), description.as_ptr()) };
success.then_some(()).ok_or(())
}
@@ -236,9 +227,7 @@ impl RemoteProject {
self.pull_files()?;
}
let id = id.to_cstr();
- let result = unsafe {
- BNRemoteProjectGetFileById(self.handle.as_ptr(), id.as_ref().as_ptr() as *const c_char)
- };
+ let result = unsafe { BNRemoteProjectGetFileById(self.handle.as_ptr(), id.as_ptr()) };
Ok(NonNull::new(result).map(|handle| unsafe { RemoteFile::ref_from_raw(handle) }))
}
@@ -252,12 +241,7 @@ impl RemoteProject {
self.pull_files()?;
}
let id = name.to_cstr();
- let result = unsafe {
- BNRemoteProjectGetFileByName(
- self.handle.as_ptr(),
- id.as_ref().as_ptr() as *const c_char,
- )
- };
+ let result = unsafe { BNRemoteProjectGetFileByName(self.handle.as_ptr(), id.as_ptr()) };
Ok(NonNull::new(result).map(|handle| unsafe { RemoteFile::ref_from_raw(handle) }))
}
@@ -360,11 +344,11 @@ impl RemoteProject {
let file_ptr = unsafe {
BNRemoteProjectCreateFile(
self.handle.as_ptr(),
- filename.as_ref().as_ptr() as *const c_char,
+ filename.as_ptr(),
contents.as_ptr() as *mut _,
contents.len(),
- name.as_ref().as_ptr() as *const c_char,
- description.as_ref().as_ptr() as *const c_char,
+ name.as_ptr(),
+ description.as_ptr(),
folder_handle,
file_type,
Some(P::cb_progress_callback),
@@ -393,14 +377,8 @@ impl RemoteProject {
.into_iter()
.map(|(k, v)| (k.to_cstr(), v.to_cstr()))
.unzip();
- let mut keys_raw = keys
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect::<Vec<_>>();
- let mut values_raw = values
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect::<Vec<_>>();
+ let mut keys_raw = keys.iter().map(|s| s.as_ptr()).collect::<Vec<_>>();
+ let mut values_raw = values.iter().map(|s| s.as_ptr()).collect::<Vec<_>>();
let success = unsafe {
BNRemoteProjectPushFile(
self.handle.as_ptr(),
@@ -449,12 +427,7 @@ impl RemoteProject {
self.pull_folders()?;
}
let id = id.to_cstr();
- let result = unsafe {
- BNRemoteProjectGetFolderById(
- self.handle.as_ptr(),
- id.as_ref().as_ptr() as *const c_char,
- )
- };
+ let result = unsafe { BNRemoteProjectGetFolderById(self.handle.as_ptr(), id.as_ptr()) };
Ok(NonNull::new(result).map(|handle| unsafe { RemoteFolder::ref_from_raw(handle) }))
}
@@ -534,8 +507,8 @@ impl RemoteProject {
let file_ptr = unsafe {
BNRemoteProjectCreateFolder(
self.handle.as_ptr(),
- name.as_ref().as_ptr() as *const c_char,
- description.as_ref().as_ptr() as *const c_char,
+ name.as_ptr(),
+ description.as_ptr(),
folder_handle,
Some(P::cb_progress_callback),
&mut progress as *mut P as *mut c_void,
@@ -566,14 +539,8 @@ impl RemoteProject {
.into_iter()
.map(|(k, v)| (k.to_cstr(), v.to_cstr()))
.unzip();
- let mut keys_raw = keys
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect::<Vec<_>>();
- let mut values_raw = values
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect::<Vec<_>>();
+ let mut keys_raw = keys.iter().map(|s| s.as_ptr()).collect::<Vec<_>>();
+ let mut values_raw = values.iter().map(|s| s.as_ptr()).collect::<Vec<_>>();
let success = unsafe {
BNRemoteProjectPushFolder(
self.handle.as_ptr(),
@@ -761,7 +728,7 @@ impl RemoteProject {
let value = unsafe {
BNRemoteProjectCreateUserPermission(
self.handle.as_ptr(),
- user_id.as_ref().as_ptr() as *const c_char,
+ user_id.as_ptr(),
level,
Some(F::cb_progress_callback),
&mut progress as *mut F as *mut c_void,
@@ -793,14 +760,8 @@ impl RemoteProject {
.into_iter()
.map(|(k, v)| (k.to_cstr(), v.to_cstr()))
.unzip();
- let mut keys_raw = keys
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect::<Vec<_>>();
- let mut values_raw = values
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect::<Vec<_>>();
+ let mut keys_raw = keys.iter().map(|s| s.as_ptr()).collect::<Vec<_>>();
+ let mut values_raw = values.iter().map(|s| s.as_ptr()).collect::<Vec<_>>();
let success = unsafe {
BNRemoteProjectPushPermission(
@@ -829,12 +790,7 @@ impl RemoteProject {
/// * `username` - Username of user to check
pub fn can_user_view<S: AsCStr>(&self, username: S) -> bool {
let username = username.to_cstr();
- unsafe {
- BNRemoteProjectCanUserView(
- self.handle.as_ptr(),
- username.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNRemoteProjectCanUserView(self.handle.as_ptr(), username.as_ptr()) }
}
/// Determine if a user is in any of the edit/admin groups.
@@ -844,12 +800,7 @@ impl RemoteProject {
/// * `username` - Username of user to check
pub fn can_user_edit<S: AsCStr>(&self, username: S) -> bool {
let username = username.to_cstr();
- unsafe {
- BNRemoteProjectCanUserEdit(
- self.handle.as_ptr(),
- username.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNRemoteProjectCanUserEdit(self.handle.as_ptr(), username.as_ptr()) }
}
/// Determine if a user is in the admin group.
@@ -859,12 +810,7 @@ impl RemoteProject {
/// * `username` - Username of user to check
pub fn can_user_admin<S: AsCStr>(&self, username: S) -> bool {
let username = username.to_cstr();
- unsafe {
- BNRemoteProjectCanUserAdmin(
- self.handle.as_ptr(),
- username.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNRemoteProjectCanUserAdmin(self.handle.as_ptr(), username.as_ptr()) }
}
/// Get the default directory path for a remote Project. This is based off
diff --git a/rust/src/collaboration/remote.rs b/rust/src/collaboration/remote.rs
index 3a1f021c..ee37e9fb 100644
--- a/rust/src/collaboration/remote.rs
+++ b/rust/src/collaboration/remote.rs
@@ -1,5 +1,5 @@
use binaryninjacore_sys::*;
-use std::ffi::{c_char, c_void};
+use std::ffi::c_void;
use std::ptr::NonNull;
use super::{sync, GroupId, RemoteGroup, RemoteProject, RemoteUser};
@@ -30,12 +30,7 @@ impl Remote {
pub fn new<N: AsCStr, A: AsCStr>(name: N, address: A) -> Ref<Self> {
let name = name.to_cstr();
let address = address.to_cstr();
- let result = unsafe {
- BNCollaborationCreateRemote(
- name.as_ref().as_ptr() as *const c_char,
- address.as_ref().as_ptr() as *const c_char,
- )
- };
+ let result = unsafe { BNCollaborationCreateRemote(name.as_ptr(), address.as_ptr()) };
unsafe { Self::ref_from_raw(NonNull::new(result).unwrap()) }
}
@@ -178,8 +173,8 @@ impl Remote {
let token = unsafe {
BNRemoteRequestAuthenticationToken(
self.handle.as_ptr(),
- username.as_ref().as_ptr() as *const c_char,
- password.as_ref().as_ptr() as *const c_char,
+ username.as_ptr(),
+ password.as_ptr(),
)
};
if token.is_null() {
@@ -230,10 +225,8 @@ impl Remote {
}
};
let username = options.username.to_cstr();
- let username_ptr = username.as_ptr() as *const c_char;
let token = token.to_cstr();
- let token_ptr = token.as_ptr() as *const c_char;
- let success = unsafe { BNRemoteConnect(self.handle.as_ptr(), username_ptr, token_ptr) };
+ let success = unsafe { BNRemoteConnect(self.handle.as_ptr(), username.as_ptr(), token.as_ptr()) };
success.then_some(()).ok_or(())
}
@@ -287,9 +280,7 @@ impl Remote {
}
let id = id.to_cstr();
- let value = unsafe {
- BNRemoteGetProjectById(self.handle.as_ptr(), id.as_ref().as_ptr() as *const c_char)
- };
+ let value = unsafe { BNRemoteGetProjectById(self.handle.as_ptr(), id.as_ptr()) };
Ok(NonNull::new(value).map(|handle| unsafe { RemoteProject::ref_from_raw(handle) }))
}
@@ -305,12 +296,7 @@ impl Remote {
}
let name = name.to_cstr();
- let value = unsafe {
- BNRemoteGetProjectByName(
- self.handle.as_ptr(),
- name.as_ref().as_ptr() as *const c_char,
- )
- };
+ let value = unsafe { BNRemoteGetProjectByName(self.handle.as_ptr(), name.as_ptr()) };
Ok(NonNull::new(value).map(|handle| unsafe { RemoteProject::ref_from_raw(handle) }))
}
@@ -358,11 +344,7 @@ impl Remote {
let name = name.to_cstr();
let description = description.to_cstr();
let value = unsafe {
- BNRemoteCreateProject(
- self.handle.as_ptr(),
- name.as_ref().as_ptr() as *const c_char,
- description.as_ref().as_ptr() as *const c_char,
- )
+ BNRemoteCreateProject(self.handle.as_ptr(), name.as_ptr(), description.as_ptr())
};
NonNull::new(value)
.map(|handle| unsafe { RemoteProject::ref_from_raw(handle) })
@@ -407,14 +389,8 @@ impl Remote {
.into_iter()
.map(|(k, v)| (k.to_cstr(), v.to_cstr()))
.unzip();
- let mut keys_raw = keys
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect::<Vec<_>>();
- let mut values_raw = values
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect::<Vec<_>>();
+ let mut keys_raw = keys.iter().map(|s| s.as_ptr()).collect::<Vec<_>>();
+ let mut values_raw = values.iter().map(|s| s.as_ptr()).collect::<Vec<_>>();
let success = unsafe {
BNRemotePushProject(
@@ -475,12 +451,7 @@ impl Remote {
}
let name = name.to_cstr();
- let value = unsafe {
- BNRemoteGetGroupByName(
- self.handle.as_ptr(),
- name.as_ref().as_ptr() as *const c_char,
- )
- };
+ let value = unsafe { BNRemoteGetGroupByName(self.handle.as_ptr(), name.as_ptr()) };
Ok(NonNull::new(value).map(|handle| unsafe { RemoteGroup::ref_from_raw(handle) }))
}
@@ -502,7 +473,7 @@ impl Remote {
let success = unsafe {
BNRemoteSearchGroups(
self.handle.as_ptr(),
- prefix.as_ref().as_ptr() as *const c_char,
+ prefix.as_ptr(),
&mut group_ids,
&mut group_names,
&mut count,
@@ -560,15 +531,12 @@ impl Remote {
{
let name = name.to_cstr();
let usernames: Vec<_> = usernames.into_iter().map(|s| s.to_cstr()).collect();
- let mut username_ptrs: Vec<_> = usernames
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect();
+ let mut username_ptrs: Vec<_> = usernames.iter().map(|s| s.as_ptr()).collect();
let value = unsafe {
BNRemoteCreateGroup(
self.handle.as_ptr(),
- name.as_ref().as_ptr() as *const c_char,
+ name.as_ptr(),
username_ptrs.as_mut_ptr(),
username_ptrs.len(),
)
@@ -595,14 +563,8 @@ impl Remote {
.into_iter()
.map(|(k, v)| (k.to_cstr(), v.to_cstr()))
.unzip();
- let mut keys_raw: Vec<_> = keys
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect();
- let mut values_raw: Vec<_> = values
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect();
+ let mut keys_raw: Vec<_> = keys.iter().map(|s| s.as_ptr()).collect();
+ let mut values_raw: Vec<_> = values.iter().map(|s| s.as_ptr()).collect();
let success = unsafe {
BNRemotePushGroup(
@@ -659,9 +621,7 @@ impl Remote {
self.pull_users()?;
}
let id = id.to_cstr();
- let value = unsafe {
- BNRemoteGetUserById(self.handle.as_ptr(), id.as_ref().as_ptr() as *const c_char)
- };
+ let value = unsafe { BNRemoteGetUserById(self.handle.as_ptr(), id.as_ptr()) };
Ok(NonNull::new(value).map(|handle| unsafe { RemoteUser::ref_from_raw(handle) }))
}
@@ -682,12 +642,7 @@ impl Remote {
self.pull_users()?;
}
let username = username.to_cstr();
- let value = unsafe {
- BNRemoteGetUserByUsername(
- self.handle.as_ptr(),
- username.as_ref().as_ptr() as *const c_char,
- )
- };
+ let value = unsafe { BNRemoteGetUserByUsername(self.handle.as_ptr(), username.as_ptr()) };
Ok(NonNull::new(value).map(|handle| unsafe { RemoteUser::ref_from_raw(handle) }))
}
@@ -720,7 +675,7 @@ impl Remote {
let success = unsafe {
BNRemoteSearchUsers(
self.handle.as_ptr(),
- prefix.as_ref().as_ptr() as *const c_char,
+ prefix.as_ptr(),
&mut user_ids,
&mut usernames,
&mut count,
@@ -790,10 +745,10 @@ impl Remote {
let value = unsafe {
BNRemoteCreateUser(
self.handle.as_ptr(),
- username.as_ref().as_ptr() as *const c_char,
- email.as_ref().as_ptr() as *const c_char,
+ username.as_ptr(),
+ email.as_ptr(),
is_active,
- password.as_ref().as_ptr() as *const c_char,
+ password.as_ptr(),
group_ids.as_ptr(),
group_ids.len(),
user_permission_ids.as_ptr(),
@@ -823,14 +778,8 @@ impl Remote {
.into_iter()
.map(|(k, v)| (k.to_cstr(), v.to_cstr()))
.unzip();
- let mut keys_raw: Vec<_> = keys
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect();
- let mut values_raw: Vec<_> = values
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect();
+ let mut keys_raw: Vec<_> = keys.iter().map(|s| s.as_ptr()).collect();
+ let mut values_raw: Vec<_> = values.iter().map(|s| s.as_ptr()).collect();
let success = unsafe {
BNRemotePushUser(
self.handle.as_ptr(),
diff --git a/rust/src/collaboration/snapshot.rs b/rust/src/collaboration/snapshot.rs
index 465ae46a..6e1dfb89 100644
--- a/rust/src/collaboration/snapshot.rs
+++ b/rust/src/collaboration/snapshot.rs
@@ -1,4 +1,4 @@
-use std::ffi::{c_char, c_void};
+use std::ffi::c_void;
use std::ptr::NonNull;
use std::time::SystemTime;
@@ -237,7 +237,7 @@ impl RemoteSnapshot {
self.handle.as_ptr(),
parent.is_some(),
parent.unwrap_or(0),
- data.as_ref().as_ptr() as *const c_char,
+ data.as_ptr(),
)
};
let handle = NonNull::new(value).ok_or(())?;
diff --git a/rust/src/collaboration/sync.rs b/rust/src/collaboration/sync.rs
index 4c112336..5afb8923 100644
--- a/rust/src/collaboration/sync.rs
+++ b/rust/src/collaboration/sync.rs
@@ -63,7 +63,7 @@ pub fn download_file_with_progress<S: AsCStr, F: ProgressCallback>(
let result = unsafe {
BNCollaborationDownloadFile(
file.handle.as_ptr(),
- db_path.as_ref().as_ptr() as *const c_char,
+ db_path.as_ptr(),
Some(F::cb_progress_callback),
&mut progress as *mut F as *mut c_void,
)
@@ -239,7 +239,7 @@ where
let success = unsafe {
BNCollaborationDownloadDatabaseForFile(
file.handle.as_ptr(),
- db_path.as_ref().as_ptr() as *const c_char,
+ db_path.as_ptr(),
force,
Some(F::cb_progress_callback),
&mut progress as *mut _ as *mut c_void,
@@ -485,7 +485,7 @@ pub fn set_snapshot_author<S: AsCStr>(
BNCollaborationSetSnapshotAuthor(
database.handle.as_ptr(),
snapshot.handle.as_ptr(),
- author.as_ref().as_ptr() as *const c_char,
+ author.as_ptr(),
)
};
success.then_some(()).ok_or(())
@@ -658,7 +658,7 @@ pub fn get_remote_snapshot_from_local_type_archive<S: AsCStr>(
let value = unsafe {
BNCollaborationGetRemoteSnapshotFromLocalTypeArchive(
type_archive.handle.as_ptr(),
- snapshot_id.as_ref().as_ptr() as *const c_char,
+ snapshot_id.as_ptr(),
)
};
NonNull::new(value).map(|handle| unsafe { RemoteSnapshot::ref_from_raw(handle) })
@@ -687,7 +687,7 @@ pub fn is_type_archive_snapshot_ignored<S: AsCStr>(
unsafe {
BNCollaborationIsTypeArchiveSnapshotIgnored(
type_archive.handle.as_ptr(),
- snapshot_id.as_ref().as_ptr() as *const c_char,
+ snapshot_id.as_ptr(),
)
}
}
@@ -713,7 +713,7 @@ pub fn download_type_archive_with_progress<S: AsCStr, F: ProgressCallback>(
let success = unsafe {
BNCollaborationDownloadTypeArchive(
file.handle.as_ptr(),
- db_path.as_ref().as_ptr() as *const c_char,
+ db_path.as_ptr(),
Some(F::cb_progress_callback),
&mut progress as *mut F as *mut c_void,
&mut value,
diff --git a/rust/src/collaboration/user.rs b/rust/src/collaboration/user.rs
index 43b4e854..d4aea2c5 100644
--- a/rust/src/collaboration/user.rs
+++ b/rust/src/collaboration/user.rs
@@ -1,6 +1,5 @@
use super::Remote;
use binaryninjacore_sys::*;
-use std::ffi::c_char;
use std::ptr::NonNull;
use crate::rc::{CoreArrayProvider, CoreArrayProviderInner, Guard, Ref, RefCountable};
@@ -51,12 +50,8 @@ impl RemoteUser {
/// Set user's username. You will need to push the user to update the Remote
pub fn set_username<U: AsCStr>(&self, username: U) -> Result<(), ()> {
let username = username.to_cstr();
- let result = unsafe {
- BNCollaborationUserSetUsername(
- self.handle.as_ptr(),
- username.as_ref().as_ptr() as *const c_char,
- )
- };
+ let result =
+ unsafe { BNCollaborationUserSetUsername(self.handle.as_ptr(), username.as_ptr()) };
if result {
Ok(())
} else {
@@ -74,12 +69,8 @@ impl RemoteUser {
/// Set user's email. You will need to push the user to update the Remote
pub fn set_email<U: AsCStr>(&self, email: U) -> Result<(), ()> {
let username = email.to_cstr();
- let result = unsafe {
- BNCollaborationUserSetEmail(
- self.handle.as_ptr(),
- username.as_ref().as_ptr() as *const c_char,
- )
- };
+ let result =
+ unsafe { BNCollaborationUserSetEmail(self.handle.as_ptr(), username.as_ptr()) };
if result {
Ok(())
} else {
diff --git a/rust/src/command.rs b/rust/src/command.rs
index 0297d6cf..721f9170 100644
--- a/rust/src/command.rs
+++ b/rust/src/command.rs
@@ -129,8 +129,8 @@ where
let name = name.to_cstr();
let desc = desc.to_cstr();
- let name_ptr = name.as_ref().as_ptr() as *mut _;
- let desc_ptr = desc.as_ref().as_ptr() as *mut _;
+ let name_ptr = name.as_ptr();
+ let desc_ptr = desc.as_ptr();
let ctxt = Box::into_raw(Box::new(command));
@@ -230,8 +230,8 @@ where
let name = name.to_cstr();
let desc = desc.to_cstr();
- let name_ptr = name.as_ref().as_ptr() as *mut _;
- let desc_ptr = desc.as_ref().as_ptr() as *mut _;
+ let name_ptr = name.as_ptr();
+ let desc_ptr = desc.as_ptr();
let ctxt = Box::into_raw(Box::new(command));
@@ -337,8 +337,8 @@ where
let name = name.to_cstr();
let desc = desc.to_cstr();
- let name_ptr = name.as_ref().as_ptr() as *mut _;
- let desc_ptr = desc.as_ref().as_ptr() as *mut _;
+ let name_ptr = name.as_ptr();
+ let desc_ptr = desc.as_ptr();
let ctxt = Box::into_raw(Box::new(command));
@@ -449,8 +449,8 @@ where
let name = name.to_cstr();
let desc = desc.to_cstr();
- let name_ptr = name.as_ref().as_ptr() as *mut _;
- let desc_ptr = desc.as_ref().as_ptr() as *mut _;
+ let name_ptr = name.as_ptr();
+ let desc_ptr = desc.as_ptr();
let ctxt = Box::into_raw(Box::new(command));
diff --git a/rust/src/component.rs b/rust/src/component.rs
index 5fe44b64..48c8b110 100644
--- a/rust/src/component.rs
+++ b/rust/src/component.rs
@@ -166,12 +166,7 @@ impl Component {
pub fn set_name<S: AsCStr>(&self, name: S) {
let name = name.to_cstr();
- unsafe {
- BNComponentSetName(
- self.handle.as_ptr(),
- name.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNComponentSetName(self.handle.as_ptr(), name.as_ptr()) }
}
/// The component that contains this component, if it exists.
diff --git a/rust/src/custom_binary_view.rs b/rust/src/custom_binary_view.rs
index adcde09d..ee32a67f 100644
--- a/rust/src/custom_binary_view.rs
+++ b/rust/src/custom_binary_view.rs
@@ -15,7 +15,6 @@
//! An interface for providing your own [BinaryView]s to Binary Ninja.
use binaryninjacore_sys::*;
-use std::ffi::c_char;
pub use binaryninjacore_sys::BNModificationStatus as ModificationStatus;
@@ -150,10 +149,10 @@ where
}
let name = name.to_cstr();
- let name_ptr = name.as_ref().as_ptr() as *mut _;
+ let name_ptr = name.as_ptr();
let long_name = long_name.to_cstr();
- let long_name_ptr = long_name.as_ref().as_ptr() as *mut _;
+ let long_name_ptr = long_name.as_ptr();
let ctxt = Box::leak(Box::new(MaybeUninit::zeroed()));
@@ -878,9 +877,10 @@ impl<'a, T: CustomBinaryViewType> CustomViewBuilder<'a, T> {
save: Some(cb_save::<V>),
};
+ let view_name = view_name.to_cstr();
unsafe {
let res = BNCreateCustomBinaryView(
- view_name.as_ptr() as *const c_char,
+ view_name.as_ptr(),
file.handle,
parent.handle,
&mut bn_obj,
diff --git a/rust/src/database.rs b/rust/src/database.rs
index fd20d173..d01839d2 100644
--- a/rust/src/database.rs
+++ b/rust/src/database.rs
@@ -4,7 +4,7 @@ pub mod undo;
use binaryninjacore_sys::*;
use std::collections::HashMap;
-use std::ffi::{c_char, c_void};
+use std::ffi::c_void;
use std::fmt::Debug;
use std::ptr::NonNull;
@@ -94,7 +94,7 @@ impl Database {
P: ProgressCallback,
{
let name_raw = name.to_cstr();
- let name_ptr = name_raw.as_ref().as_ptr() as *const c_char;
+ let name_ptr = name_raw.as_ptr();
let new_id = unsafe {
BNWriteDatabaseSnapshotData(
@@ -135,8 +135,7 @@ impl Database {
}
pub fn has_global<S: AsCStr>(&self, key: S) -> bool {
let key_raw = key.to_cstr();
- let key_ptr = key_raw.as_ref().as_ptr() as *const c_char;
- unsafe { BNDatabaseHasGlobal(self.handle.as_ptr(), key_ptr) != 0 }
+ unsafe { BNDatabaseHasGlobal(self.handle.as_ptr(), key_raw.as_ptr()) != 0 }
}
/// Get a list of keys for all globals in the database
@@ -158,33 +157,28 @@ impl Database {
/// Get a specific global by key
pub fn read_global<S: AsCStr>(&self, key: S) -> Option<BnString> {
let key_raw = key.to_cstr();
- let key_ptr = key_raw.as_ref().as_ptr() as *const c_char;
- let result = unsafe { BNReadDatabaseGlobal(self.handle.as_ptr(), key_ptr) };
+ let result = unsafe { BNReadDatabaseGlobal(self.handle.as_ptr(), key_raw.as_ptr()) };
unsafe { NonNull::new(result).map(|_| BnString::from_raw(result)) }
}
/// Write a global into the database
pub fn write_global<K: AsCStr, V: AsCStr>(&self, key: K, value: V) -> bool {
let key_raw = key.to_cstr();
- let key_ptr = key_raw.as_ref().as_ptr() as *const c_char;
let value_raw = value.to_cstr();
- let value_ptr = value_raw.as_ref().as_ptr() as *const c_char;
- unsafe { BNWriteDatabaseGlobal(self.handle.as_ptr(), key_ptr, value_ptr) }
+ unsafe { BNWriteDatabaseGlobal(self.handle.as_ptr(), key_raw.as_ptr(), value_raw.as_ptr()) }
}
/// Get a specific global by key, as a binary buffer
pub fn read_global_data<S: AsCStr>(&self, key: S) -> Option<DataBuffer> {
let key_raw = key.to_cstr();
- let key_ptr = key_raw.as_ref().as_ptr() as *const c_char;
- let result = unsafe { BNReadDatabaseGlobalData(self.handle.as_ptr(), key_ptr) };
+ let result = unsafe { BNReadDatabaseGlobalData(self.handle.as_ptr(), key_raw.as_ptr()) };
NonNull::new(result).map(|_| DataBuffer::from_raw(result))
}
/// Write a binary buffer into a global in the database
pub fn write_global_data<K: AsCStr>(&self, key: K, value: &DataBuffer) -> bool {
let key_raw = key.to_cstr();
- let key_ptr = key_raw.as_ref().as_ptr() as *const c_char;
- unsafe { BNWriteDatabaseGlobalData(self.handle.as_ptr(), key_ptr, value.as_raw()) }
+ unsafe { BNWriteDatabaseGlobalData(self.handle.as_ptr(), key_raw.as_ptr(), value.as_raw()) }
}
/// Get the owning FileMetadata
diff --git a/rust/src/database/kvs.rs b/rust/src/database/kvs.rs
index 43cf17eb..e84da7f3 100644
--- a/rust/src/database/kvs.rs
+++ b/rust/src/database/kvs.rs
@@ -9,7 +9,6 @@ use binaryninjacore_sys::{
BNNewKeyValueStoreReference, BNSetKeyValueStoreBuffer,
};
use std::collections::HashMap;
-use std::ffi::c_char;
use std::fmt::Debug;
use std::ptr::NonNull;
@@ -44,7 +43,7 @@ impl KeyValueStore {
/// Get the value for a single key
pub fn value<S: AsCStr>(&self, key: S) -> Option<DataBuffer> {
let key_raw = key.to_cstr();
- let key_ptr = key_raw.as_ref().as_ptr() as *const c_char;
+ let key_ptr = key_raw.as_ptr();
let result = unsafe { BNGetKeyValueStoreBuffer(self.handle.as_ptr(), key_ptr) };
NonNull::new(result).map(|_| DataBuffer::from_raw(result))
}
@@ -52,7 +51,7 @@ impl KeyValueStore {
/// Set the value for a single key
pub fn set_value<S: AsCStr>(&self, key: S, value: &DataBuffer) -> bool {
let key_raw = key.to_cstr();
- let key_ptr = key_raw.as_ref().as_ptr() as *const c_char;
+ let key_ptr = key_raw.as_ptr();
unsafe { BNSetKeyValueStoreBuffer(self.handle.as_ptr(), key_ptr, value.as_raw()) }
}
@@ -66,7 +65,7 @@ impl KeyValueStore {
/// Begin storing new keys into a namespace
pub fn begin_namespace<S: AsCStr>(&self, name: S) {
let name_raw = name.to_cstr();
- let name_ptr = name_raw.as_ref().as_ptr() as *const c_char;
+ let name_ptr = name_raw.as_ptr();
unsafe { BNBeginKeyValueStoreNamespace(self.handle.as_ptr(), name_ptr) }
}
diff --git a/rust/src/database/snapshot.rs b/rust/src/database/snapshot.rs
index 7d7e39d1..599a749a 100644
--- a/rust/src/database/snapshot.rs
+++ b/rust/src/database/snapshot.rs
@@ -14,7 +14,7 @@ use binaryninjacore_sys::{
BNReadSnapshotDataWithProgress, BNSetSnapshotName, BNSnapshot, BNSnapshotHasAncestor,
BNSnapshotHasContents, BNSnapshotHasUndo, BNSnapshotStoreData,
};
-use std::ffi::{c_char, c_void};
+use std::ffi::c_void;
use std::fmt;
use std::fmt::{Debug, Display, Formatter};
use std::ptr::NonNull;
@@ -52,7 +52,7 @@ impl Snapshot {
/// Set the displayed snapshot name
pub fn set_name<S: AsCStr>(&self, value: S) {
let value_raw = value.to_cstr();
- let value_ptr = value_raw.as_ref().as_ptr() as *const c_char;
+ let value_ptr = value_raw.as_ptr();
unsafe { BNSetSnapshotName(self.handle.as_ptr(), value_ptr) }
}
diff --git a/rust/src/debuginfo.rs b/rust/src/debuginfo.rs
index 0afe4c77..9336a28d 100644
--- a/rust/src/debuginfo.rs
+++ b/rust/src/debuginfo.rs
@@ -117,7 +117,7 @@ impl DebugInfoParser {
/// Returns debug info parser of the given name, if it exists
pub fn from_name<S: AsCStr>(name: S) -> Result<Ref<Self>, ()> {
let name = name.to_cstr();
- let parser = unsafe { BNGetDebugInfoParserByName(name.as_ref().as_ptr() as *mut _) };
+ let parser = unsafe { BNGetDebugInfoParserByName(name.as_ptr()) };
if parser.is_null() {
Err(())
@@ -260,7 +260,7 @@ impl DebugInfoParser {
}
let name = name.to_cstr();
- let name_ptr = name.as_ref().as_ptr() as *mut _;
+ let name_ptr = name.as_ptr();
let ctxt = Box::into_raw(Box::new(parser_callbacks));
unsafe {
@@ -421,13 +421,8 @@ impl DebugInfo {
let parser_name = parser_name.to_cstr();
let mut count: usize = 0;
- let debug_types_ptr = unsafe {
- BNGetDebugTypes(
- self.handle,
- parser_name.as_ref().as_ptr() as *mut _,
- &mut count,
- )
- };
+ let debug_types_ptr =
+ unsafe { BNGetDebugTypes(self.handle, parser_name.as_ptr(), &mut count) };
let result: Vec<_> = unsafe {
std::slice::from_raw_parts_mut(debug_types_ptr, count)
.iter()
@@ -459,13 +454,8 @@ impl DebugInfo {
let parser_name = parser_name.to_cstr();
let mut count: usize = 0;
- let functions_ptr = unsafe {
- BNGetDebugFunctions(
- self.handle,
- parser_name.as_ref().as_ptr() as *mut _,
- &mut count,
- )
- };
+ let functions_ptr =
+ unsafe { BNGetDebugFunctions(self.handle, parser_name.as_ptr(), &mut count) };
let result: Vec<DebugFunctionInfo> = unsafe {
std::slice::from_raw_parts_mut(functions_ptr, count)
@@ -502,13 +492,8 @@ impl DebugInfo {
let parser_name = parser_name.to_cstr();
let mut count: usize = 0;
- let data_variables_ptr = unsafe {
- BNGetDebugDataVariables(
- self.handle,
- parser_name.as_ref().as_ptr() as *mut _,
- &mut count,
- )
- };
+ let data_variables_ptr =
+ unsafe { BNGetDebugDataVariables(self.handle, parser_name.as_ptr(), &mut count) };
let result: Vec<NamedDataVariableWithType> = unsafe {
std::slice::from_raw_parts_mut(data_variables_ptr, count)
@@ -541,13 +526,8 @@ impl DebugInfo {
let parser_name = parser_name.to_cstr();
let name = name.to_cstr();
- let result = unsafe {
- BNGetDebugTypeByName(
- self.handle,
- parser_name.as_ref().as_ptr() as *mut _,
- name.as_ref().as_ptr() as *mut _,
- )
- };
+ let result =
+ unsafe { BNGetDebugTypeByName(self.handle, parser_name.as_ptr(), name.as_ptr()) };
if !result.is_null() {
Some(unsafe { Type::ref_from_raw(result) })
} else {
@@ -566,8 +546,8 @@ impl DebugInfo {
unsafe {
if BNGetDebugDataVariableByName(
self.handle,
- parser_name.as_ref().as_ptr() as *mut _,
- name.as_ref().as_ptr() as *mut _,
+ parser_name.as_ptr(),
+ name.as_ptr(),
&mut dv,
) {
Some(NamedDataVariableWithType::from_owned_raw(dv))
@@ -585,12 +565,8 @@ impl DebugInfo {
let parser_name = parser_name.to_cstr();
let mut dv = BNDataVariableAndName::default();
unsafe {
- if BNGetDebugDataVariableByAddress(
- self.handle,
- parser_name.as_ref().as_ptr() as *mut _,
- address,
- &mut dv,
- ) {
+ if BNGetDebugDataVariableByAddress(self.handle, parser_name.as_ptr(), address, &mut dv)
+ {
Some(NamedDataVariableWithType::from_owned_raw(dv))
} else {
None
@@ -602,9 +578,8 @@ impl DebugInfo {
pub fn get_types_by_name<S: AsCStr>(&self, name: S) -> Vec<NameAndType> {
let mut count: usize = 0;
let name = name.to_cstr();
- let raw_names_and_types_ptr = unsafe {
- BNGetDebugTypesByName(self.handle, name.as_ref().as_ptr() as *mut _, &mut count)
- };
+ let raw_names_and_types_ptr =
+ unsafe { BNGetDebugTypesByName(self.handle, name.as_ptr(), &mut count) };
let raw_names_and_types: &[BNNameAndType] =
unsafe { std::slice::from_raw_parts(raw_names_and_types_ptr, count) };
@@ -623,9 +598,8 @@ impl DebugInfo {
let name = name.to_cstr();
let mut count: usize = 0;
- let raw_variables_and_names = unsafe {
- BNGetDebugDataVariablesByName(self.handle, name.as_ref().as_ptr() as *mut _, &mut count)
- };
+ let raw_variables_and_names =
+ unsafe { BNGetDebugDataVariablesByName(self.handle, name.as_ptr(), &mut count) };
let variables_and_names: &[*mut BNDataVariableAndName] =
unsafe { std::slice::from_raw_parts(raw_variables_and_names as *mut _, count) };
@@ -674,66 +648,44 @@ impl DebugInfo {
pub fn remove_parser_info<S: AsCStr>(&self, parser_name: S) -> bool {
let parser_name = parser_name.to_cstr();
- unsafe { BNRemoveDebugParserInfo(self.handle, parser_name.as_ref().as_ptr() as *mut _) }
+ unsafe { BNRemoveDebugParserInfo(self.handle, parser_name.as_ptr()) }
}
pub fn remove_parser_types<S: AsCStr>(&self, parser_name: S) -> bool {
let parser_name = parser_name.to_cstr();
- unsafe { BNRemoveDebugParserTypes(self.handle, parser_name.as_ref().as_ptr() as *mut _) }
+ unsafe { BNRemoveDebugParserTypes(self.handle, parser_name.as_ptr()) }
}
pub fn remove_parser_functions<S: AsCStr>(&self, parser_name: S) -> bool {
let parser_name = parser_name.to_cstr();
- unsafe {
- BNRemoveDebugParserFunctions(self.handle, parser_name.as_ref().as_ptr() as *mut _)
- }
+ unsafe { BNRemoveDebugParserFunctions(self.handle, parser_name.as_ptr()) }
}
pub fn remove_parser_data_variables<S: AsCStr>(&self, parser_name: S) -> bool {
let parser_name = parser_name.to_cstr();
- unsafe {
- BNRemoveDebugParserDataVariables(self.handle, parser_name.as_ref().as_ptr() as *mut _)
- }
+ unsafe { BNRemoveDebugParserDataVariables(self.handle, parser_name.as_ptr()) }
}
pub fn remove_type_by_name<S: AsCStr>(&self, parser_name: S, name: S) -> bool {
let parser_name = parser_name.to_cstr();
let name = name.to_cstr();
- unsafe {
- BNRemoveDebugTypeByName(
- self.handle,
- parser_name.as_ref().as_ptr() as *mut _,
- name.as_ref().as_ptr() as *mut _,
- )
- }
+ unsafe { BNRemoveDebugTypeByName(self.handle, parser_name.as_ptr(), name.as_ptr()) }
}
pub fn remove_function_by_index<S: AsCStr>(&self, parser_name: S, index: usize) -> bool {
let parser_name = parser_name.to_cstr();
- unsafe {
- BNRemoveDebugFunctionByIndex(
- self.handle,
- parser_name.as_ref().as_ptr() as *mut _,
- index,
- )
- }
+ unsafe { BNRemoveDebugFunctionByIndex(self.handle, parser_name.as_ptr(), index) }
}
pub fn remove_data_variable_by_address<S: AsCStr>(&self, parser_name: S, address: u64) -> bool {
let parser_name = parser_name.to_cstr();
- unsafe {
- BNRemoveDebugDataVariableByAddress(
- self.handle,
- parser_name.as_ref().as_ptr() as *mut _,
- address,
- )
- }
+ unsafe { BNRemoveDebugDataVariableByAddress(self.handle, parser_name.as_ptr(), address) }
}
/// Adds a type scoped under the current parser's name to the debug info
@@ -745,7 +697,7 @@ impl DebugInfo {
unsafe {
BNAddDebugType(
self.handle,
- name.as_ref().as_ptr() as *mut _,
+ name.as_ptr(),
new_type.handle,
raw_components.as_ptr() as *mut _,
components.len(),
@@ -776,7 +728,8 @@ impl DebugInfo {
unsafe {
for component in &new_func.components {
- components_array.push(BNAllocString(component.clone().to_cstr().as_ptr() as _));
+ let component = component.to_cstr();
+ components_array.push(BNAllocString(component.as_ptr()));
}
for local_variable in &new_func.local_variables {
@@ -839,7 +792,7 @@ impl DebugInfo {
self.handle,
address,
t.handle,
- name.as_ref().as_ptr() as *mut _,
+ name.as_ptr(),
components.as_ptr() as _,
components.len(),
)
diff --git a/rust/src/demangle.rs b/rust/src/demangle.rs
index 9cec0c93..a883dc82 100644
--- a/rust/src/demangle.rs
+++ b/rust/src/demangle.rs
@@ -32,14 +32,13 @@ pub fn demangle_generic<S: AsCStr>(
view: Option<&BinaryView>,
simplify: bool,
) -> Option<(QualifiedName, Option<Ref<Type>>)> {
- let mangled_name_bwn = mangled_name.to_cstr();
- let mangled_name_ptr = mangled_name_bwn.as_ref();
+ let mangled_name = mangled_name.to_cstr();
let mut out_type: *mut BNType = std::ptr::null_mut();
let mut out_name = BNQualifiedName::default();
let res = unsafe {
BNDemangleGeneric(
arch.handle,
- mangled_name_ptr.as_ptr() as *const c_char,
+ mangled_name.as_ptr(),
&mut out_type,
&mut out_name,
view.map(|v| v.handle).unwrap_or(std::ptr::null_mut()),
@@ -59,13 +58,12 @@ pub fn demangle_generic<S: AsCStr>(
}
pub fn demangle_llvm<S: AsCStr>(mangled_name: S, simplify: bool) -> Option<QualifiedName> {
- let mangled_name_bwn = mangled_name.to_cstr();
- let mangled_name_ptr = mangled_name_bwn.as_ref();
+ let mangled_name = mangled_name.to_cstr();
let mut out_name: *mut *mut std::os::raw::c_char = std::ptr::null_mut();
let mut out_size: usize = 0;
let res = unsafe {
BNDemangleLLVM(
- mangled_name_ptr.as_ptr() as *const c_char,
+ mangled_name.as_ptr(),
&mut out_name,
&mut out_size,
simplify,
@@ -92,15 +90,14 @@ pub fn demangle_gnu3<S: AsCStr>(
mangled_name: S,
simplify: bool,
) -> Option<(QualifiedName, Option<Ref<Type>>)> {
- let mangled_name_bwn = mangled_name.to_cstr();
- let mangled_name_ptr = mangled_name_bwn.as_ref();
+ let mangled_name = mangled_name.to_cstr();
let mut out_type: *mut BNType = std::ptr::null_mut();
let mut out_name: *mut *mut std::os::raw::c_char = std::ptr::null_mut();
let mut out_size: usize = 0;
let res = unsafe {
BNDemangleGNU3(
arch.handle,
- mangled_name_ptr.as_ptr() as *const c_char,
+ mangled_name.as_ptr(),
&mut out_type,
&mut out_name,
&mut out_size,
@@ -133,16 +130,14 @@ pub fn demangle_ms<S: AsCStr>(
mangled_name: S,
simplify: bool,
) -> Option<(QualifiedName, Option<Ref<Type>>)> {
- let mangled_name_bwn = mangled_name.to_cstr();
- let mangled_name_ptr = mangled_name_bwn.as_ref();
-
+ let mangled_name = mangled_name.to_cstr();
let mut out_type: *mut BNType = std::ptr::null_mut();
let mut out_name: *mut *mut std::os::raw::c_char = std::ptr::null_mut();
let mut out_size: usize = 0;
let res = unsafe {
BNDemangleMS(
arch.handle,
- mangled_name_ptr.as_ptr() as *const c_char,
+ mangled_name.as_ptr(),
&mut out_type,
&mut out_name,
&mut out_size,
@@ -309,7 +304,7 @@ impl Demangler {
}
let name = name.to_cstr();
- let name_ptr = name.as_ref().as_ptr() as *mut _;
+ let name_ptr = name.as_ptr();
let ctxt = Box::into_raw(Box::new(demangler));
let callbacks = BNDemanglerCallbacks {
diff --git a/rust/src/download_provider.rs b/rust/src/download_provider.rs
index f9e21e64..7d28058f 100644
--- a/rust/src/download_provider.rs
+++ b/rust/src/download_provider.rs
@@ -14,9 +14,8 @@ pub struct DownloadProvider {
impl DownloadProvider {
pub fn get<S: AsCStr>(name: S) -> Option<DownloadProvider> {
- let result = unsafe {
- BNGetDownloadProviderByName(name.to_cstr().as_ref().as_ptr() as *const c_char)
- };
+ let name = name.to_cstr();
+ let result = unsafe { BNGetDownloadProviderByName(name.as_ptr()) };
if result.is_null() {
return None;
}
@@ -145,10 +144,11 @@ impl DownloadInstance {
progressContext: callbacks as *mut c_void,
};
+ let url_raw = url.to_cstr();
let result = unsafe {
BNPerformDownloadRequest(
self.handle,
- url.to_cstr().as_ref().as_ptr() as *const c_char,
+ url_raw.as_ptr(),
&mut cbs as *mut BNDownloadInstanceOutputCallbacks,
)
};
@@ -225,8 +225,8 @@ impl DownloadInstance {
let mut header_value_ptrs = vec![];
for (key, value) in header_keys.iter().zip(header_values.iter()) {
- header_key_ptrs.push(key.as_ref().as_ptr() as *const c_char);
- header_value_ptrs.push(value.as_ref().as_ptr() as *const c_char);
+ header_key_ptrs.push(key.as_ptr());
+ header_value_ptrs.push(value.as_ptr());
}
let callbacks = Box::into_raw(Box::new(callbacks));
@@ -241,11 +241,13 @@ impl DownloadInstance {
let mut response: *mut BNDownloadInstanceResponse = null_mut();
+ let method_raw = method.to_cstr();
+ let url_raw = url.to_cstr();
let result = unsafe {
BNPerformCustomRequest(
self.handle,
- method.to_cstr().as_ref().as_ptr() as *const c_char,
- url.to_cstr().as_ref().as_ptr() as *const c_char,
+ method_raw.as_ptr(),
+ url_raw.as_ptr(),
header_key_ptrs.len() as u64,
header_key_ptrs.as_ptr(),
header_value_ptrs.as_ptr(),
diff --git a/rust/src/external_library.rs b/rust/src/external_library.rs
index 26425ccd..57848a7a 100644
--- a/rust/src/external_library.rs
+++ b/rust/src/external_library.rs
@@ -3,7 +3,6 @@ use crate::rc::{CoreArrayProvider, CoreArrayProviderInner, Guard, Ref, RefCounta
use crate::string::{AsCStr, BnString};
use crate::symbol::Symbol;
use binaryninjacore_sys::*;
-use std::ffi::c_char;
use std::fmt::Debug;
use std::ptr::NonNull;
@@ -168,10 +167,15 @@ impl ExternalLocation {
/// Set the symbol pointed to by this ExternalLocation.
/// ExternalLocations must have a valid target address and/or symbol set.
pub fn set_target_symbol<S: AsCStr>(&self, symbol: Option<S>) -> bool {
- let symbol = symbol
- .map(|x| x.to_cstr().as_ref().as_ptr() as *const c_char)
- .unwrap_or(std::ptr::null_mut());
- unsafe { BNExternalLocationSetTargetSymbol(self.handle.as_ptr(), symbol) }
+ match symbol {
+ Some(sym) => {
+ let raw_sym = sym.to_cstr();
+ unsafe { BNExternalLocationSetTargetSymbol(self.handle.as_ptr(), raw_sym.as_ptr()) }
+ }
+ None => unsafe {
+ BNExternalLocationSetTargetSymbol(self.handle.as_ptr(), std::ptr::null())
+ },
+ }
}
}
diff --git a/rust/src/file_metadata.rs b/rust/src/file_metadata.rs
index 6b6a79a8..100f255b 100644
--- a/rust/src/file_metadata.rs
+++ b/rust/src/file_metadata.rs
@@ -79,7 +79,7 @@ impl FileMetadata {
let name = name.to_cstr();
unsafe {
- BNSetFilename(self.handle, name.as_ref().as_ptr() as *mut _);
+ BNSetFilename(self.handle, name.as_ptr());
}
}
@@ -275,7 +275,7 @@ impl FileMetadata {
pub fn open_database<S: AsCStr>(&self, filename: S) -> Result<Ref<BinaryView>, ()> {
let filename = filename.to_cstr();
- let filename_ptr = filename.as_ref().as_ptr() as *mut _;
+ let filename_ptr = filename.as_ptr();
let view = unsafe { BNOpenExistingDatabase(self.handle, filename_ptr) };
@@ -292,7 +292,7 @@ impl FileMetadata {
mut progress: P,
) -> Result<Ref<BinaryView>, ()> {
let filename = filename.to_cstr();
- let filename_ptr = filename.as_ref().as_ptr() as *mut _;
+ let filename_ptr = filename.as_ptr();
let view = unsafe {
BNOpenExistingDatabaseWithProgress(
diff --git a/rust/src/function.rs b/rust/src/function.rs
index dcefaa35..36bd1d56 100644
--- a/rust/src/function.rs
+++ b/rust/src/function.rs
@@ -376,7 +376,7 @@ impl Function {
let raw = comment.to_cstr();
unsafe {
- BNSetFunctionComment(self.handle, raw.as_ref().as_ptr() as *mut _);
+ BNSetFunctionComment(self.handle, raw.as_ptr());
}
}
@@ -398,7 +398,7 @@ impl Function {
let raw = comment.to_cstr();
unsafe {
- BNSetCommentForAddress(self.handle, addr, raw.as_ref().as_ptr() as *mut _);
+ BNSetCommentForAddress(self.handle, addr, raw.as_ptr());
}
}
@@ -1712,7 +1712,7 @@ impl Function {
let arch = arch.unwrap_or_else(|| self.arch());
let enum_display_typeid = enum_display_typeid.map(AsCStr::to_cstr);
let enum_display_typeid_ptr = enum_display_typeid
- .map(|x| x.as_ref().as_ptr() as *const c_char)
+ .map(|x| x.as_ptr())
.unwrap_or(std::ptr::null());
unsafe {
BNSetIntegerConstantDisplayType(
diff --git a/rust/src/interaction.rs b/rust/src/interaction.rs
index 7e007eb9..9994608f 100644
--- a/rust/src/interaction.rs
+++ b/rust/src/interaction.rs
@@ -23,16 +23,16 @@ use crate::binary_view::BinaryView;
use crate::rc::Ref;
use crate::string::{AsCStr, BnString};
+pub type MessageBoxButtonSet = BNMessageBoxButtonSet;
+pub type MessageBoxIcon = BNMessageBoxIcon;
+pub type MessageBoxButtonResult = BNMessageBoxButtonResult;
+
pub fn get_text_line_input(prompt: &str, title: &str) -> Option<String> {
let mut value: *mut c_char = std::ptr::null_mut();
- let result = unsafe {
- BNGetTextLineInput(
- &mut value,
- prompt.to_cstr().as_ptr() as *mut _,
- title.to_cstr().as_ptr() as *mut _,
- )
- };
+ let prompt = prompt.to_cstr();
+ let title = title.to_cstr();
+ let result = unsafe { BNGetTextLineInput(&mut value, prompt.as_ptr(), title.as_ptr()) };
if !result {
return None;
}
@@ -43,13 +43,9 @@ pub fn get_text_line_input(prompt: &str, title: &str) -> Option<String> {
pub fn get_integer_input(prompt: &str, title: &str) -> Option<i64> {
let mut value: i64 = 0;
- let result = unsafe {
- BNGetIntegerInput(
- &mut value,
- prompt.to_cstr().as_ptr() as *mut _,
- title.to_cstr().as_ptr() as *mut _,
- )
- };
+ let prompt = prompt.to_cstr();
+ let title = title.to_cstr();
+ let result = unsafe { BNGetIntegerInput(&mut value, prompt.as_ptr(), title.as_ptr()) };
if !result {
return None;
@@ -61,11 +57,13 @@ pub fn get_integer_input(prompt: &str, title: &str) -> Option<i64> {
pub fn get_address_input(prompt: &str, title: &str) -> Option<u64> {
let mut value: u64 = 0;
+ let prompt = prompt.to_cstr();
+ let title = title.to_cstr();
let result = unsafe {
BNGetAddressInput(
&mut value,
- prompt.to_cstr().as_ptr() as *mut _,
- title.to_cstr().as_ptr() as *mut _,
+ prompt.as_ptr(),
+ title.as_ptr(),
std::ptr::null_mut(),
0,
)
@@ -81,13 +79,9 @@ pub fn get_address_input(prompt: &str, title: &str) -> Option<u64> {
pub fn get_open_filename_input(prompt: &str, extension: &str) -> Option<PathBuf> {
let mut value: *mut c_char = std::ptr::null_mut();
- let result = unsafe {
- BNGetOpenFileNameInput(
- &mut value,
- prompt.to_cstr().as_ptr() as *mut _,
- extension.to_cstr().as_ptr() as *mut _,
- )
- };
+ let prompt = prompt.to_cstr();
+ let extension = extension.to_cstr();
+ let result = unsafe { BNGetOpenFileNameInput(&mut value, prompt.as_ptr(), extension.as_ptr()) };
if !result {
return None;
}
@@ -103,12 +97,15 @@ pub fn get_save_filename_input(
) -> Option<PathBuf> {
let mut value: *mut c_char = std::ptr::null_mut();
+ let prompt = prompt.to_cstr();
+ let extension = extension.to_cstr();
+ let default_name = default_name.to_cstr();
let result = unsafe {
BNGetSaveFileNameInput(
&mut value,
- prompt.to_cstr().as_ptr() as *mut _,
- extension.to_cstr().as_ptr() as *mut _,
- default_name.to_cstr().as_ptr() as *mut _,
+ prompt.as_ptr(),
+ extension.as_ptr(),
+ default_name.as_ptr(),
)
};
if !result {
@@ -122,13 +119,10 @@ pub fn get_save_filename_input(
pub fn get_directory_name_input(prompt: &str, default_name: &str) -> Option<PathBuf> {
let mut value: *mut c_char = std::ptr::null_mut();
- let result = unsafe {
- BNGetDirectoryNameInput(
- &mut value,
- prompt.to_cstr().as_ptr() as *mut _,
- default_name.to_cstr().as_ptr() as *mut _,
- )
- };
+ let prompt = prompt.to_cstr();
+ let default_name = default_name.to_cstr();
+ let result =
+ unsafe { BNGetDirectoryNameInput(&mut value, prompt.as_ptr(), default_name.as_ptr()) };
if !result {
return None;
}
@@ -137,23 +131,15 @@ pub fn get_directory_name_input(prompt: &str, default_name: &str) -> Option<Path
Some(PathBuf::from(path))
}
-pub type MessageBoxButtonSet = BNMessageBoxButtonSet;
-pub type MessageBoxIcon = BNMessageBoxIcon;
-pub type MessageBoxButtonResult = BNMessageBoxButtonResult;
pub fn show_message_box(
title: &str,
text: &str,
buttons: MessageBoxButtonSet,
icon: MessageBoxIcon,
) -> MessageBoxButtonResult {
- unsafe {
- BNShowMessageBox(
- title.to_cstr().as_ptr() as *mut _,
- text.to_cstr().as_ptr() as *mut _,
- buttons,
- icon,
- )
- }
+ let title = title.to_cstr();
+ let text = text.to_cstr();
+ unsafe { BNShowMessageBox(title.as_ptr(), text.as_ptr(), buttons, icon) }
}
pub enum FormResponses {
@@ -210,7 +196,7 @@ impl FormInputBuilder {
let mut result = unsafe { std::mem::zeroed::<BNFormInputField>() };
result.type_ = BNFormInputFieldType::LabelFormField;
result.hasDefault = false;
- result.prompt = text.as_ref().as_ptr() as *const c_char;
+ result.prompt = text.as_ptr();
self.fields.push(result);
self.data.push(FormData::Label { _text: text });
@@ -233,10 +219,10 @@ impl FormInputBuilder {
let mut result = unsafe { std::mem::zeroed::<BNFormInputField>() };
result.type_ = BNFormInputFieldType::TextLineFormField;
- result.prompt = prompt.as_ref().as_ptr() as *const c_char;
+ result.prompt = prompt.as_ptr();
result.hasDefault = default.is_some();
if let Some(ref default) = default {
- result.stringDefault = default.as_ref().as_ptr() as *const c_char;
+ result.stringDefault = default.as_ptr();
}
self.fields.push(result);
@@ -254,10 +240,10 @@ impl FormInputBuilder {
let mut result = unsafe { std::mem::zeroed::<BNFormInputField>() };
result.type_ = BNFormInputFieldType::MultilineTextFormField;
- result.prompt = prompt.as_ref().as_ptr() as *const c_char;
+ result.prompt = prompt.as_ptr();
result.hasDefault = default.is_some();
if let Some(ref default) = default {
- result.stringDefault = default.as_ref().as_ptr() as *const c_char;
+ result.stringDefault = default.as_ptr();
}
self.fields.push(result);
@@ -274,7 +260,7 @@ impl FormInputBuilder {
let mut result = unsafe { std::mem::zeroed::<BNFormInputField>() };
result.type_ = BNFormInputFieldType::IntegerFormField;
- result.prompt = prompt.as_ref().as_ptr() as *const c_char;
+ result.prompt = prompt.as_ptr();
result.hasDefault = default.is_some();
if let Some(default) = default {
result.intDefault = default;
@@ -297,7 +283,7 @@ impl FormInputBuilder {
let mut result = unsafe { std::mem::zeroed::<BNFormInputField>() };
result.type_ = BNFormInputFieldType::AddressFormField;
- result.prompt = prompt.as_ref().as_ptr() as *const c_char;
+ result.prompt = prompt.as_ptr();
if let Some(view) = view {
// the view is being moved into result, there is no need to clone
// and drop is intentionally being avoided with `Ref::into_raw`
@@ -321,11 +307,8 @@ impl FormInputBuilder {
let mut result = unsafe { std::mem::zeroed::<BNFormInputField>() };
result.type_ = BNFormInputFieldType::ChoiceFormField;
- result.prompt = prompt.as_ref().as_ptr() as *const c_char;
- let mut raw_choices: Vec<*const c_char> = choices
- .iter()
- .map(|c| c.as_ref().as_ptr() as *const c_char)
- .collect();
+ result.prompt = prompt.as_ptr();
+ let mut raw_choices: Vec<*const c_char> = choices.iter().map(|c| c.as_ptr()).collect();
result.choices = raw_choices.as_mut_ptr();
result.count = choices.len();
result.hasDefault = default.is_some();
@@ -359,11 +342,11 @@ impl FormInputBuilder {
let mut result = unsafe { std::mem::zeroed::<BNFormInputField>() };
result.type_ = BNFormInputFieldType::OpenFileNameFormField;
- result.prompt = prompt.as_ref().as_ptr() as *const c_char;
- result.ext = ext.as_ref().as_ptr() as *const c_char;
+ result.prompt = prompt.as_ptr();
+ result.ext = ext.as_ptr();
result.hasDefault = default.is_some();
if let Some(ref default) = default {
- result.stringDefault = default.as_ref().as_ptr() as *const c_char;
+ result.stringDefault = default.as_ptr();
}
self.fields.push(result);
@@ -398,12 +381,12 @@ impl FormInputBuilder {
let mut result = unsafe { std::mem::zeroed::<BNFormInputField>() };
result.type_ = BNFormInputFieldType::SaveFileNameFormField;
- result.prompt = prompt.as_ref().as_ptr() as *const c_char;
- result.ext = ext.as_ref().as_ptr() as *const c_char;
- result.defaultName = default_name.as_ref().as_ptr() as *const c_char;
+ result.prompt = prompt.as_ptr();
+ result.ext = ext.as_ptr();
+ result.defaultName = default_name.as_ptr();
result.hasDefault = default.is_some();
if let Some(ref default) = default {
- result.stringDefault = default.as_ref().as_ptr() as *const c_char;
+ result.stringDefault = default.as_ptr();
}
self.fields.push(result);
@@ -433,11 +416,11 @@ impl FormInputBuilder {
let mut result = unsafe { std::mem::zeroed::<BNFormInputField>() };
result.type_ = BNFormInputFieldType::DirectoryNameFormField;
- result.prompt = prompt.as_ref().as_ptr() as *const c_char;
- result.defaultName = default_name.as_ref().as_ptr() as *const c_char;
+ result.prompt = prompt.as_ptr();
+ result.defaultName = default_name.as_ptr();
result.hasDefault = default.is_some();
if let Some(ref default) = default {
- result.stringDefault = default.as_ref().as_ptr() as *const c_char;
+ result.stringDefault = default.as_ptr();
}
self.fields.push(result);
@@ -491,13 +474,8 @@ impl FormInputBuilder {
/// println!("{} {} likes {}", &first_name, &last_name, food);
/// ```
pub fn get_form_input(&mut self, title: &str) -> Vec<FormResponses> {
- if unsafe {
- BNGetFormInput(
- self.fields.as_mut_ptr(),
- self.fields.len(),
- title.to_cstr().as_ptr() as *const _,
- )
- } {
+ let title = title.to_cstr();
+ if unsafe { BNGetFormInput(self.fields.as_mut_ptr(), self.fields.len(), title.as_ptr()) } {
let result = self
.fields
.iter()
@@ -575,9 +553,10 @@ pub fn run_progress_dialog<F: Fn(Box<dyn Fn(usize, usize) -> Result<(), ()>>)>(
})
}
+ let title = title.to_cstr();
if unsafe {
BNRunProgressDialog(
- title.to_cstr().as_ptr() as *mut _,
+ title.as_ptr(),
can_cancel,
Some(cb_task::<F>),
&mut ctxt as *mut _ as *mut c_void,
diff --git a/rust/src/lib.rs b/rust/src/lib.rs
index 63872be3..c0b3a38c 100644
--- a/rust/src/lib.rs
+++ b/rust/src/lib.rs
@@ -285,7 +285,7 @@ pub fn bundled_plugin_directory() -> Result<PathBuf, ()> {
pub fn set_bundled_plugin_directory(new_dir: impl AsRef<Path>) {
let new_dir = new_dir.as_ref().to_cstr();
- unsafe { BNSetBundledPluginDirectory(new_dir.as_ptr() as *const c_char) };
+ unsafe { BNSetBundledPluginDirectory(new_dir.as_ptr()) };
}
pub fn user_directory() -> PathBuf {
@@ -330,7 +330,7 @@ pub fn save_last_run() {
pub fn path_relative_to_bundled_plugin_directory(path: impl AsRef<Path>) -> Result<PathBuf, ()> {
let path_raw = path.as_ref().to_cstr();
let s: *mut c_char =
- unsafe { BNGetPathRelativeToBundledPluginDirectory(path_raw.as_ptr() as *const c_char) };
+ unsafe { BNGetPathRelativeToBundledPluginDirectory(path_raw.as_ptr()) };
if s.is_null() {
return Err(());
}
@@ -340,7 +340,7 @@ pub fn path_relative_to_bundled_plugin_directory(path: impl AsRef<Path>) -> Resu
pub fn path_relative_to_user_plugin_directory(path: impl AsRef<Path>) -> Result<PathBuf, ()> {
let path_raw = path.as_ref().to_cstr();
let s: *mut c_char =
- unsafe { BNGetPathRelativeToUserPluginDirectory(path_raw.as_ptr() as *const c_char) };
+ unsafe { BNGetPathRelativeToUserPluginDirectory(path_raw.as_ptr()) };
if s.is_null() {
return Err(());
}
@@ -350,7 +350,7 @@ pub fn path_relative_to_user_plugin_directory(path: impl AsRef<Path>) -> Result<
pub fn path_relative_to_user_directory(path: impl AsRef<Path>) -> Result<PathBuf, ()> {
let path_raw = path.as_ref().to_cstr();
let s: *mut c_char =
- unsafe { BNGetPathRelativeToUserDirectory(path_raw.as_ptr() as *const c_char) };
+ unsafe { BNGetPathRelativeToUserDirectory(path_raw.as_ptr()) };
if s.is_null() {
return Err(());
}
@@ -475,7 +475,7 @@ impl VersionInfo {
pub fn from_string<S: AsCStr>(string: S) -> Self {
let string = string.to_cstr();
- let result = unsafe { BNParseVersionString(string.as_ref().as_ptr() as *const c_char) };
+ let result = unsafe { BNParseVersionString(string.as_ptr()) };
Self::from_owned_raw(result)
}
}
@@ -534,8 +534,7 @@ pub fn license_count() -> i32 {
#[cfg(not(feature = "demo"))]
pub fn set_license<S: AsCStr + Default>(license: Option<S>) {
let license = license.unwrap_or_default().to_cstr();
- let license_slice = license.as_ref();
- unsafe { BNSetLicense(license_slice.as_ptr() as *const c_char) }
+ unsafe { BNSetLicense(license.as_ptr()) }
}
#[cfg(feature = "demo")]
@@ -560,8 +559,7 @@ pub fn is_ui_enabled() -> bool {
pub fn is_database<S: AsCStr>(filename: S) -> bool {
let filename = filename.to_cstr();
- let filename_slice = filename.as_ref();
- unsafe { BNIsDatabase(filename_slice.as_ptr() as *const c_char) }
+ unsafe { BNIsDatabase(filename.as_ptr()) }
}
pub fn plugin_abi_version() -> u32 {
@@ -589,11 +587,13 @@ pub fn plugin_ui_abi_minimum_version() -> u32 {
}
pub fn add_required_plugin_dependency<S: AsCStr>(name: S) {
- unsafe { BNAddRequiredPluginDependency(name.to_cstr().as_ref().as_ptr() as *const c_char) };
+ let raw_name = name.to_cstr();
+ unsafe { BNAddRequiredPluginDependency(raw_name.as_ptr()) };
}
pub fn add_optional_plugin_dependency<S: AsCStr>(name: S) {
- unsafe { BNAddOptionalPluginDependency(name.to_cstr().as_ref().as_ptr() as *const c_char) };
+ let raw_name = name.to_cstr();
+ unsafe { BNAddOptionalPluginDependency(raw_name.as_ptr()) };
}
// Provide ABI version automatically so that the core can verify binary compatibility
diff --git a/rust/src/logger.rs b/rust/src/logger.rs
index c06f4dfc..5f14af69 100644
--- a/rust/src/logger.rs
+++ b/rust/src/logger.rs
@@ -35,7 +35,7 @@ use binaryninjacore_sys::{
};
use crate::rc::{Ref, RefCountable};
-use crate::string::BnString;
+use crate::string::{AsCStr, BnString};
use log;
use log::LevelFilter;
use std::ffi::{CStr, CString};
@@ -139,12 +139,12 @@ impl log::Log for Ref<Logger> {
if let Ok(msg) = CString::new(format!("{}", record.args())) {
let percent_s = CString::new("%s").expect("'%s' has no null bytes");
- let logger_name = self.name();
+ let logger_name = self.name().to_cstr();
unsafe {
BNLog(
self.session_id(),
level,
- logger_name.as_ptr() as *const c_char,
+ logger_name.as_ptr(),
0,
percent_s.as_ptr(),
msg.as_ptr(),
diff --git a/rust/src/medium_level_il/function.rs b/rust/src/medium_level_il/function.rs
index de3ece02..75ccad82 100644
--- a/rust/src/medium_level_il/function.rs
+++ b/rust/src/medium_level_il/function.rs
@@ -1,5 +1,4 @@
use binaryninjacore_sys::*;
-use std::ffi::c_char;
use std::fmt::{Debug, Formatter};
use std::hash::{Hash, Hasher};
@@ -135,7 +134,7 @@ impl MediumLevelILFunction {
self.function().handle,
offset,
&mut owned_raw_var_ty,
- name.as_ref().as_ptr() as *const c_char,
+ name.as_ptr(),
)
}
}
@@ -282,13 +281,12 @@ impl MediumLevelILFunction {
) {
let mut owned_raw_var_ty = Conf::<&Type>::into_raw(var_type.into());
let name = name.to_cstr();
- let name_c_str = name.as_ref();
unsafe {
BNCreateAutoStackVariable(
self.function().handle,
offset,
&mut owned_raw_var_ty,
- name_c_str.as_ptr() as *const c_char,
+ name.as_ptr(),
)
}
}
@@ -307,13 +305,12 @@ impl MediumLevelILFunction {
let raw_var = BNVariable::from(var);
let mut owned_raw_var_ty = Conf::<&Type>::into_raw(var_type.into());
let name = name.to_cstr();
- let name_c_str = name.as_ref();
unsafe {
BNCreateAutoVariable(
self.function().handle,
&raw_var,
&mut owned_raw_var_ty,
- name_c_str.as_ptr() as *const c_char,
+ name.as_ptr(),
ignore_disjoint_uses,
)
}
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(
diff --git a/rust/src/platform.rs b/rust/src/platform.rs
index 19186740..c225392f 100644
--- a/rust/src/platform.rs
+++ b/rust/src/platform.rs
@@ -85,7 +85,7 @@ impl Platform {
pub fn by_name<S: AsCStr>(name: S) -> Option<Ref<Self>> {
let raw_name = name.to_cstr();
unsafe {
- let res = BNGetPlatformByName(raw_name.as_ref().as_ptr() as *mut _);
+ let res = BNGetPlatformByName(raw_name.as_ptr());
if res.is_null() {
None
@@ -118,7 +118,7 @@ impl Platform {
unsafe {
let mut count = 0;
- let handles = BNGetPlatformListByOS(raw_name.as_ref().as_ptr() as *mut _, &mut count);
+ let handles = BNGetPlatformListByOS(raw_name.as_ptr(), &mut count);
Array::new(handles, count, ())
}
@@ -129,11 +129,8 @@ impl Platform {
unsafe {
let mut count = 0;
- let handles = BNGetPlatformListByOSAndArchitecture(
- raw_name.as_ref().as_ptr() as *mut _,
- arch.handle,
- &mut count,
- );
+ let handles =
+ BNGetPlatformListByOSAndArchitecture(raw_name.as_ptr(), arch.handle, &mut count);
Array::new(handles, count, ())
}
@@ -151,7 +148,7 @@ impl Platform {
pub fn new<A: Architecture, S: AsCStr>(arch: &A, name: S) -> Ref<Self> {
let name = name.to_cstr();
unsafe {
- let handle = BNCreatePlatform(arch.as_ref().handle, name.as_ref().as_ptr() as *mut _);
+ let handle = BNCreatePlatform(arch.as_ref().handle, name.as_ptr());
assert!(!handle.is_null());
Ref::new(Self { handle })
}
@@ -179,13 +176,8 @@ impl Platform {
pub fn get_type_libraries_by_name<T: AsCStr>(&self, name: T) -> Array<TypeLibrary> {
let mut count = 0;
let name = name.to_cstr();
- let result = unsafe {
- BNGetPlatformTypeLibrariesByName(
- self.handle,
- name.as_ref().as_ptr() as *mut _,
- &mut count,
- )
- };
+ let result =
+ unsafe { BNGetPlatformTypeLibrariesByName(self.handle, name.as_ptr(), &mut count) };
assert!(!result.is_null());
unsafe { Array::new(result, count, ()) }
}
@@ -194,7 +186,7 @@ impl Platform {
let os = os.to_cstr();
unsafe {
- BNRegisterPlatform(os.as_ref().as_ptr() as *mut _, self.handle);
+ BNRegisterPlatform(os.as_ptr(), self.handle);
}
}
diff --git a/rust/src/project.rs b/rust/src/project.rs
index 453f1c56..351b6e3f 100644
--- a/rust/src/project.rs
+++ b/rust/src/project.rs
@@ -1,7 +1,7 @@
pub mod file;
pub mod folder;
-use std::ffi::{c_char, c_void};
+use std::ffi::c_void;
use std::fmt::Debug;
use std::ptr::{null_mut, NonNull};
use std::time::{Duration, SystemTime, UNIX_EPOCH};
@@ -42,12 +42,7 @@ impl Project {
pub fn create<P: AsCStr, S: AsCStr>(path: P, name: S) -> Option<Ref<Self>> {
let path_raw = path.to_cstr();
let name_raw = name.to_cstr();
- let handle = unsafe {
- BNCreateProject(
- path_raw.as_ref().as_ptr() as *const c_char,
- name_raw.as_ref().as_ptr() as *const c_char,
- )
- };
+ let handle = unsafe { BNCreateProject(path_raw.as_ptr(), name_raw.as_ptr()) };
NonNull::new(handle).map(|h| unsafe { Self::ref_from_raw(h) })
}
@@ -56,7 +51,7 @@ impl Project {
/// * `path` - Path to the project directory (.bnpr) or project metadata file (.bnpm)
pub fn open_project<P: AsCStr>(path: P) -> Option<Ref<Self>> {
let path_raw = path.to_cstr();
- let handle = unsafe { BNOpenProject(path_raw.as_ref().as_ptr() as *const c_char) };
+ let handle = unsafe { BNOpenProject(path_raw.as_ptr()) };
NonNull::new(handle).map(|h| unsafe { Self::ref_from_raw(h) })
}
@@ -101,12 +96,7 @@ impl Project {
/// Set the name of the project
pub fn set_name<S: AsCStr>(&self, value: S) {
let value = value.to_cstr();
- unsafe {
- BNProjectSetName(
- self.handle.as_ptr(),
- value.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNProjectSetName(self.handle.as_ptr(), value.as_ptr()) }
}
/// Get the description of the project
@@ -117,20 +107,13 @@ impl Project {
/// Set the description of the project
pub fn set_description<S: AsCStr>(&self, value: S) {
let value = value.to_cstr();
- unsafe {
- BNProjectSetDescription(
- self.handle.as_ptr(),
- value.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNProjectSetDescription(self.handle.as_ptr(), value.as_ptr()) }
}
/// Retrieves metadata stored under a key from the project
pub fn query_metadata<S: AsCStr>(&self, key: S) -> Ref<Metadata> {
let key = key.to_cstr();
- let result = unsafe {
- BNProjectQueryMetadata(self.handle.as_ptr(), key.as_ref().as_ptr() as *const c_char)
- };
+ let result = unsafe { BNProjectQueryMetadata(self.handle.as_ptr(), key.as_ptr()) };
unsafe { Metadata::ref_from_raw(result) }
}
@@ -140,24 +123,13 @@ impl Project {
/// * `value` - Object to store
pub fn store_metadata<S: AsCStr>(&self, key: S, value: &Metadata) -> bool {
let key_raw = key.to_cstr();
- unsafe {
- BNProjectStoreMetadata(
- self.handle.as_ptr(),
- key_raw.as_ref().as_ptr() as *const c_char,
- value.handle,
- )
- }
+ unsafe { BNProjectStoreMetadata(self.handle.as_ptr(), key_raw.as_ptr(), value.handle) }
}
/// Removes the metadata associated with this `key` from the project
pub fn remove_metadata<S: AsCStr>(&self, key: S) {
let key_raw = key.to_cstr();
- unsafe {
- BNProjectRemoveMetadata(
- self.handle.as_ptr(),
- key_raw.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNProjectRemoveMetadata(self.handle.as_ptr(), key_raw.as_ptr()) }
}
pub fn push_folder(&self, file: &ProjectFolder) {
@@ -207,9 +179,9 @@ impl Project {
unsafe {
let result = BNProjectCreateFolderFromPath(
self.handle.as_ptr(),
- path_raw.as_ref().as_ptr() as *const c_char,
+ path_raw.as_ptr(),
parent_ptr,
- description_raw.as_ref().as_ptr() as *const c_char,
+ description_raw.as_ptr(),
&mut progress as *mut PC as *mut c_void,
Some(PC::cb_progress_callback),
);
@@ -239,8 +211,8 @@ impl Project {
let result = BNProjectCreateFolder(
self.handle.as_ptr(),
parent_ptr,
- name_raw.as_ref().as_ptr() as *const c_char,
- description_raw.as_ref().as_ptr() as *const c_char,
+ name_raw.as_ptr(),
+ description_raw.as_ptr(),
);
Ok(ProjectFolder::ref_from_raw(NonNull::new(result).ok_or(())?))
}
@@ -272,9 +244,9 @@ impl Project {
let result = BNProjectCreateFolderUnsafe(
self.handle.as_ptr(),
parent_ptr,
- name_raw.as_ref().as_ptr() as *const c_char,
- description_raw.as_ref().as_ptr() as *const c_char,
- id_raw.as_ref().as_ptr() as *const c_char,
+ name_raw.as_ptr(),
+ description_raw.as_ptr(),
+ id_raw.as_ptr(),
);
Ok(ProjectFolder::ref_from_raw(NonNull::new(result).ok_or(())?))
}
@@ -293,9 +265,8 @@ impl Project {
/// Retrieve a folder in the project by unique folder `id`
pub fn folder_by_id<S: AsCStr>(&self, id: S) -> Option<Ref<ProjectFolder>> {
- let id_raw = id.to_cstr();
- let id_ptr = id_raw.as_ref().as_ptr() as *const c_char;
- let result = unsafe { BNProjectGetFolderById(self.handle.as_ptr(), id_ptr) };
+ let raw_id = id.to_cstr();
+ let result = unsafe { BNProjectGetFolderById(self.handle.as_ptr(), raw_id.as_ptr()) };
let handle = NonNull::new(result)?;
Some(unsafe { ProjectFolder::ref_from_raw(handle) })
}
@@ -392,10 +363,10 @@ impl Project {
unsafe {
let result = BNProjectCreateFileFromPath(
self.handle.as_ptr(),
- path_raw.as_ref().as_ptr() as *const c_char,
+ path_raw.as_ptr(),
folder_ptr,
- name_raw.as_ref().as_ptr() as *const c_char,
- description_raw.as_ref().as_ptr() as *const c_char,
+ name_raw.as_ptr(),
+ description_raw.as_ptr(),
&mut progress as *mut PC as *mut c_void,
Some(PC::cb_progress_callback),
);
@@ -473,11 +444,11 @@ impl Project {
unsafe {
let result = BNProjectCreateFileFromPathUnsafe(
self.handle.as_ptr(),
- path_raw.as_ref().as_ptr() as *const c_char,
+ path_raw.as_ptr(),
folder_ptr,
- name_raw.as_ref().as_ptr() as *const c_char,
- description_raw.as_ref().as_ptr() as *const c_char,
- id_raw.as_ref().as_ptr() as *const c_char,
+ name_raw.as_ptr(),
+ description_raw.as_ptr(),
+ id_raw.as_ptr(),
systime_to_bntime(creation_time).unwrap(),
&mut progress as *mut PC as *mut c_void,
Some(PC::cb_progress_callback),
@@ -536,8 +507,8 @@ impl Project {
contents.as_ptr(),
contents.len(),
folder_ptr,
- name_raw.as_ref().as_ptr() as *const c_char,
- description_raw.as_ref().as_ptr() as *const c_char,
+ name_raw.as_ptr(),
+ description_raw.as_ptr(),
&mut progress as *mut P as *mut c_void,
Some(P::cb_progress_callback),
);
@@ -615,9 +586,9 @@ impl Project {
contents.as_ptr(),
contents.len(),
folder_ptr,
- name_raw.as_ref().as_ptr() as *const c_char,
- description_raw.as_ref().as_ptr() as *const c_char,
- id_raw.as_ref().as_ptr() as *const c_char,
+ name_raw.as_ptr(),
+ description_raw.as_ptr(),
+ id_raw.as_ptr(),
systime_to_bntime(creation_time).unwrap(),
&mut progress as *mut P as *mut c_void,
Some(P::cb_progress_callback),
@@ -636,10 +607,8 @@ impl Project {
/// Retrieve a file in the project by unique `id`
pub fn file_by_id<S: AsCStr>(&self, id: S) -> Option<Ref<ProjectFile>> {
- let id_raw = id.to_cstr();
- let id_ptr = id_raw.as_ref().as_ptr() as *const c_char;
-
- let result = unsafe { BNProjectGetFileById(self.handle.as_ptr(), id_ptr) };
+ let raw_id = id.to_cstr();
+ let result = unsafe { BNProjectGetFileById(self.handle.as_ptr(), raw_id.as_ptr()) };
let handle = NonNull::new(result)?;
Some(unsafe { ProjectFile::ref_from_raw(handle) })
}
@@ -647,9 +616,8 @@ impl Project {
/// Retrieve a file in the project by the `path` on disk
pub fn file_by_path<S: AsCStr>(&self, path: S) -> Option<Ref<ProjectFile>> {
let path_raw = path.to_cstr();
- let path_ptr = path_raw.as_ref().as_ptr() as *const c_char;
-
- let result = unsafe { BNProjectGetFileByPathOnDisk(self.handle.as_ptr(), path_ptr) };
+ let result =
+ unsafe { BNProjectGetFileByPathOnDisk(self.handle.as_ptr(), path_raw.as_ptr()) };
let handle = NonNull::new(result)?;
Some(unsafe { ProjectFile::ref_from_raw(handle) })
}
diff --git a/rust/src/project/file.rs b/rust/src/project/file.rs
index d1724ab0..bc486ed9 100644
--- a/rust/src/project/file.rs
+++ b/rust/src/project/file.rs
@@ -8,7 +8,6 @@ use binaryninjacore_sys::{
BNProjectFileGetPathOnDisk, BNProjectFileGetProject, BNProjectFileSetDescription,
BNProjectFileSetFolder, BNProjectFileSetName,
};
-use std::ffi::c_char;
use std::fmt::Debug;
use std::ptr::{null_mut, NonNull};
use std::time::SystemTime;
@@ -59,12 +58,7 @@ impl ProjectFile {
/// Set the name of this file
pub fn set_name<S: AsCStr>(&self, value: S) -> bool {
let value_raw = value.to_cstr();
- unsafe {
- BNProjectFileSetName(
- self.handle.as_ptr(),
- value_raw.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNProjectFileSetName(self.handle.as_ptr(), value_raw.as_ptr()) }
}
/// Get the description of this file
@@ -75,12 +69,7 @@ impl ProjectFile {
/// Set the description of this file
pub fn set_description<S: AsCStr>(&self, value: S) -> bool {
let value_raw = value.to_cstr();
- unsafe {
- BNProjectFileSetDescription(
- self.handle.as_ptr(),
- value_raw.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNProjectFileSetDescription(self.handle.as_ptr(), value_raw.as_ptr()) }
}
/// Get the file creation time
@@ -106,12 +95,7 @@ impl ProjectFile {
/// * `dest` - Destination path for the exported contents
pub fn export<S: AsCStr>(&self, dest: S) -> bool {
let dest_raw = dest.to_cstr();
- unsafe {
- BNProjectFileExport(
- self.handle.as_ptr(),
- dest_raw.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNProjectFileExport(self.handle.as_ptr(), dest_raw.as_ptr()) }
}
}
diff --git a/rust/src/project/folder.rs b/rust/src/project/folder.rs
index b8881ddc..80416197 100644
--- a/rust/src/project/folder.rs
+++ b/rust/src/project/folder.rs
@@ -8,7 +8,7 @@ use binaryninjacore_sys::{
BNProjectFolderGetName, BNProjectFolderGetParent, BNProjectFolderGetProject,
BNProjectFolderSetDescription, BNProjectFolderSetName, BNProjectFolderSetParent,
};
-use std::ffi::{c_char, c_void};
+use std::ffi::c_void;
use std::fmt::Debug;
use std::ptr::{null_mut, NonNull};
@@ -48,12 +48,7 @@ impl ProjectFolder {
/// Set the name of this folder
pub fn set_name<S: AsCStr>(&self, value: S) -> bool {
let value_raw = value.to_cstr();
- unsafe {
- BNProjectFolderSetName(
- self.handle.as_ptr(),
- value_raw.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNProjectFolderSetName(self.handle.as_ptr(), value_raw.as_ptr()) }
}
/// Get the description of this folder
@@ -64,12 +59,7 @@ impl ProjectFolder {
/// Set the description of this folder
pub fn set_description<S: AsCStr>(&self, value: S) -> bool {
let value_raw = value.to_cstr();
- unsafe {
- BNProjectFolderSetDescription(
- self.handle.as_ptr(),
- value_raw.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNProjectFolderSetDescription(self.handle.as_ptr(), value_raw.as_ptr()) }
}
/// Get the folder that contains this folder
@@ -107,7 +97,7 @@ impl ProjectFolder {
let success = unsafe {
BNProjectFolderExport(
self.handle.as_ptr(),
- dest_raw.as_ref().as_ptr() as *const c_char,
+ dest_raw.as_ptr(),
&mut progress as *mut P as *mut c_void,
Some(P::cb_progress_callback),
)
diff --git a/rust/src/render_layer.rs b/rust/src/render_layer.rs
index 175ee167..7d792491 100644
--- a/rust/src/render_layer.rs
+++ b/rust/src/render_layer.rs
@@ -8,7 +8,7 @@ use crate::linear_view::{LinearDisassemblyLine, LinearDisassemblyLineType, Linea
use crate::rc::{Array, CoreArrayProvider, CoreArrayProviderInner};
use crate::string::AsCStr;
use binaryninjacore_sys::*;
-use std::ffi::{c_char, c_void};
+use std::ffi::c_void;
use std::ptr::NonNull;
/// The state in which the [`RenderLayer`] will be registered with.
@@ -73,13 +73,9 @@ pub fn register_render_layer<S: AsCStr, T: RenderLayer>(
applyToLinearViewObject: Some(cb_apply_to_linear_view_object::<T>),
freeLines: Some(cb_free_lines),
};
- let result = unsafe {
- BNRegisterRenderLayer(
- name.to_cstr().as_ref().as_ptr() as *const _,
- &mut callback,
- default_state.into(),
- )
- };
+ let name = name.to_cstr();
+ let result =
+ unsafe { BNRegisterRenderLayer(name.as_ptr(), &mut callback, default_state.into()) };
let core = CoreRenderLayer::from_raw(NonNull::new(result).unwrap());
(render_layer, core)
}
@@ -305,7 +301,7 @@ impl CoreRenderLayer {
pub fn render_layer_by_name<S: AsCStr>(name: S) -> Option<CoreRenderLayer> {
let name_raw = name.to_cstr();
- let result = unsafe { BNGetRenderLayerByName(name_raw.as_ref().as_ptr() as *const c_char) };
+ let result = unsafe { BNGetRenderLayerByName(name_raw.as_ptr()) };
NonNull::new(result).map(Self::from_raw)
}
diff --git a/rust/src/repository.rs b/rust/src/repository.rs
index 8d2fbafe..27825b96 100644
--- a/rust/src/repository.rs
+++ b/rust/src/repository.rs
@@ -54,12 +54,7 @@ impl Repository {
pub fn plugin_by_path<S: AsCStr>(&self, path: S) -> Option<Ref<RepositoryPlugin>> {
let path = path.to_cstr();
- let result = unsafe {
- BNRepositoryGetPluginByPath(
- self.handle.as_ptr(),
- path.as_ref().as_ptr() as *const c_char,
- )
- };
+ let result = unsafe { BNRepositoryGetPluginByPath(self.handle.as_ptr(), path.as_ptr()) };
NonNull::new(result).map(|h| unsafe { RepositoryPlugin::ref_from_raw(h) })
}
diff --git a/rust/src/repository/manager.rs b/rust/src/repository/manager.rs
index e5911802..29c73605 100644
--- a/rust/src/repository/manager.rs
+++ b/rust/src/repository/manager.rs
@@ -7,7 +7,6 @@ use binaryninjacore_sys::{
BNRepositoryManagerAddRepository, BNRepositoryManagerCheckForUpdates,
BNRepositoryManagerGetDefaultRepository, BNRepositoryManagerGetRepositories,
};
-use std::ffi::c_char;
use std::fmt::Debug;
use std::ptr::NonNull;
@@ -31,8 +30,7 @@ impl RepositoryManager {
pub fn new<S: AsCStr>(plugins_path: S) -> Ref<Self> {
let plugins_path = plugins_path.to_cstr();
- let result =
- unsafe { BNCreateRepositoryManager(plugins_path.as_ref().as_ptr() as *const c_char) };
+ let result = unsafe { BNCreateRepositoryManager(plugins_path.as_ptr()) };
unsafe { Self::ref_from_raw(NonNull::new(result).unwrap()) }
}
@@ -65,22 +63,14 @@ impl RepositoryManager {
let url = url.to_cstr();
let repo_path = repository_path.to_cstr();
unsafe {
- BNRepositoryManagerAddRepository(
- self.handle.as_ptr(),
- url.as_ref().as_ptr() as *const c_char,
- repo_path.as_ref().as_ptr() as *const c_char,
- )
+ BNRepositoryManagerAddRepository(self.handle.as_ptr(), url.as_ptr(), repo_path.as_ptr())
}
}
pub fn repository_by_path<P: AsCStr>(&self, path: P) -> Option<Repository> {
let path = path.to_cstr();
- let result = unsafe {
- BNRepositoryGetRepositoryByPath(
- self.handle.as_ptr(),
- path.as_ref().as_ptr() as *const c_char,
- )
- };
+ let result =
+ unsafe { BNRepositoryGetRepositoryByPath(self.handle.as_ptr(), path.as_ptr()) };
NonNull::new(result).map(|raw| unsafe { Repository::from_raw(raw) })
}
diff --git a/rust/src/secrets_provider.rs b/rust/src/secrets_provider.rs
index 7acf6d4b..7a807300 100644
--- a/rust/src/secrets_provider.rs
+++ b/rust/src/secrets_provider.rs
@@ -37,7 +37,7 @@ impl CoreSecretsProvider {
deleteData: Some(cb_delete_data::<C>),
};
let result =
- unsafe { BNRegisterSecretsProvider(name.as_ptr() as *const c_char, &mut callbacks) };
+ unsafe { BNRegisterSecretsProvider(name.as_ptr(), &mut callbacks) };
unsafe { Self::from_raw(NonNull::new(result).unwrap()) }
}
@@ -52,7 +52,7 @@ impl CoreSecretsProvider {
/// Retrieve a provider by name
pub fn by_name<S: AsCStr>(name: S) -> Option<CoreSecretsProvider> {
let name = name.to_cstr();
- let result = unsafe { BNGetSecretsProviderByName(name.as_ref().as_ptr() as *const c_char) };
+ let result = unsafe { BNGetSecretsProviderByName(name.as_ptr()) };
NonNull::new(result).map(|h| unsafe { Self::from_raw(h) })
}
@@ -65,17 +65,13 @@ impl CoreSecretsProvider {
/// Check if data for a specific key exists, but do not retrieve it
pub fn has_data<S: AsCStr>(&self, key: S) -> bool {
let key = key.to_cstr();
- unsafe {
- BNSecretsProviderHasData(self.handle.as_ptr(), key.as_ref().as_ptr() as *const c_char)
- }
+ unsafe { BNSecretsProviderHasData(self.handle.as_ptr(), key.as_ptr()) }
}
/// Retrieve data for the given key, if it exists
pub fn get_data<S: AsCStr>(&self, key: S) -> String {
let key = key.to_cstr();
- let result = unsafe {
- BNGetSecretsProviderData(self.handle.as_ptr(), key.as_ref().as_ptr() as *const c_char)
- };
+ let result = unsafe { BNGetSecretsProviderData(self.handle.as_ptr(), key.as_ptr()) };
unsafe { BnString::into_string(result) }
}
@@ -83,24 +79,13 @@ impl CoreSecretsProvider {
pub fn store_data<K: AsCStr, V: AsCStr>(&self, key: K, value: V) -> bool {
let key = key.to_cstr();
let value = value.to_cstr();
- unsafe {
- BNStoreSecretsProviderData(
- self.handle.as_ptr(),
- key.as_ref().as_ptr() as *const c_char,
- value.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNStoreSecretsProviderData(self.handle.as_ptr(), key.as_ptr(), value.as_ptr()) }
}
/// Delete stored data with the given key
pub fn delete_data<S: AsCStr>(&self, key: S) -> bool {
let key = key.to_cstr();
- unsafe {
- BNDeleteSecretsProviderData(
- self.handle.as_ptr(),
- key.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNDeleteSecretsProviderData(self.handle.as_ptr(), key.as_ptr()) }
}
}
diff --git a/rust/src/section.rs b/rust/src/section.rs
index d1098e67..53afffb3 100644
--- a/rust/src/section.rs
+++ b/rust/src/section.rs
@@ -14,7 +14,6 @@
//! Sections are [crate::segment::Segment]s that are loaded into memory at run time
-use std::ffi::c_char;
use std::fmt;
use std::ops::Range;
@@ -282,29 +281,29 @@ impl SectionBuilder {
if self.is_auto {
BNAddAutoSection(
view.handle,
- name.as_ptr() as *const c_char,
+ name.as_ptr(),
start,
len,
self.semantics.into(),
- ty.as_ptr() as *const c_char,
+ ty.as_ptr(),
self.align,
self.entry_size,
- linked_section.as_ptr() as *const c_char,
- info_section.as_ptr() as *const c_char,
+ linked_section.as_ptr(),
+ info_section.as_ptr(),
self.info_data,
);
} else {
BNAddUserSection(
view.handle,
- name.as_ptr() as *const c_char,
+ name.as_ptr(),
start,
len,
self.semantics.into(),
- ty.as_ptr() as *const c_char,
+ ty.as_ptr(),
self.align,
self.entry_size,
- linked_section.as_ptr() as *const c_char,
- info_section.as_ptr() as *const c_char,
+ linked_section.as_ptr(),
+ info_section.as_ptr(),
self.info_data,
);
}
diff --git a/rust/src/settings.rs b/rust/src/settings.rs
index b49dbdea..be2fd955 100644
--- a/rust/src/settings.rs
+++ b/rust/src/settings.rs
@@ -47,7 +47,7 @@ impl Settings {
pub fn new_with_id<S: AsCStr>(instance_id: S) -> Ref<Self> {
let instance_id = instance_id.to_cstr();
unsafe {
- let handle = BNCreateSettings(instance_id.as_ref().as_ptr() as *mut _);
+ let handle = BNCreateSettings(instance_id.as_ptr());
debug_assert!(!handle.is_null());
Ref::new(Self { handle })
}
@@ -55,7 +55,7 @@ impl Settings {
pub fn set_resource_id<S: AsCStr>(&self, resource_id: S) {
let resource_id = resource_id.to_cstr();
- unsafe { BNSettingsSetResourceId(self.handle, resource_id.as_ref().as_ptr() as *mut _) };
+ unsafe { BNSettingsSetResourceId(self.handle, resource_id.as_ptr()) };
}
pub fn serialize_schema(&self) -> String {
@@ -72,20 +72,13 @@ impl Settings {
scope: SettingsScope,
) -> bool {
let schema = schema.to_cstr();
- unsafe {
- BNSettingsDeserializeSchema(
- self.handle,
- schema.as_ref().as_ptr() as *mut _,
- scope,
- true,
- )
- }
+ unsafe { BNSettingsDeserializeSchema(self.handle, schema.as_ptr(), scope, true) }
}
pub fn contains<S: AsCStr>(&self, key: S) -> bool {
let key = key.to_cstr();
- unsafe { BNSettingsContains(self.handle, key.as_ref().as_ptr() as *mut _) }
+ unsafe { BNSettingsContains(self.handle, key.as_ptr()) }
}
pub fn keys(&self) -> Array<BnString> {
@@ -114,7 +107,7 @@ impl Settings {
unsafe {
BNSettingsGetBool(
self.handle,
- key.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
view_ptr,
func_ptr,
&mut options.scope,
@@ -139,7 +132,7 @@ impl Settings {
unsafe {
BNSettingsGetDouble(
self.handle,
- key.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
view_ptr,
func_ptr,
&mut options.scope,
@@ -164,7 +157,7 @@ impl Settings {
unsafe {
BNSettingsGetUInt64(
self.handle,
- key.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
view_ptr,
func_ptr,
&mut options.scope,
@@ -189,7 +182,7 @@ impl Settings {
unsafe {
BnString::into_string(BNSettingsGetString(
self.handle,
- key.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
view_ptr,
func_ptr,
&mut options.scope,
@@ -220,7 +213,7 @@ impl Settings {
Array::new(
BNSettingsGetStringList(
self.handle,
- key.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
view_ptr,
func_ptr,
&mut options.scope,
@@ -249,7 +242,7 @@ impl Settings {
unsafe {
BnString::into_string(BNSettingsGetJson(
self.handle,
- key.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
view_ptr,
func_ptr,
&mut options.scope,
@@ -277,7 +270,7 @@ impl Settings {
view_ptr,
func_ptr,
options.scope,
- key.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
value,
);
}
@@ -302,7 +295,7 @@ impl Settings {
view_ptr,
func_ptr,
options.scope,
- key.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
value,
);
}
@@ -328,7 +321,7 @@ impl Settings {
view_ptr,
func_ptr,
options.scope,
- key.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
value,
);
}
@@ -360,8 +353,8 @@ impl Settings {
view_ptr,
func_ptr,
options.scope,
- key.as_ref().as_ptr() as *mut _,
- value.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
+ value.as_ptr(),
);
}
}
@@ -382,10 +375,7 @@ impl Settings {
) -> bool {
let key = key.to_cstr();
let raw_list: Vec<_> = value.map(|s| s.to_cstr()).collect();
- let mut raw_list_ptr: Vec<_> = raw_list
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect();
+ let mut raw_list_ptr: Vec<_> = raw_list.iter().map(|s| s.as_ptr()).collect();
let view_ptr = match options.view.as_ref() {
Some(view) => view.handle,
@@ -401,7 +391,7 @@ impl Settings {
view_ptr,
func_ptr,
options.scope,
- key.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
raw_list_ptr.as_mut_ptr(),
raw_list_ptr.len(),
)
@@ -434,8 +424,8 @@ impl Settings {
view_ptr,
func_ptr,
options.scope,
- key.as_ref().as_ptr() as *mut _,
- value.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
+ value.as_ptr(),
)
}
}
@@ -446,8 +436,8 @@ impl Settings {
unsafe {
BnString::into_string(BNSettingsQueryPropertyString(
self.handle,
- key.as_ref().as_ptr() as *mut _,
- property.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
+ property.as_ptr(),
))
}
}
@@ -460,8 +450,8 @@ impl Settings {
Array::new(
BNSettingsQueryPropertyStringList(
self.handle,
- key.as_ref().as_ptr() as *mut _,
- property.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
+ property.as_ptr(),
&mut size,
) as *mut *mut c_char,
size,
@@ -474,12 +464,7 @@ impl Settings {
let key = key.to_cstr();
let property = property.to_cstr();
unsafe {
- BNSettingsUpdateBoolProperty(
- self.handle,
- key.as_ref().as_ptr() as *mut _,
- property.as_ref().as_ptr() as *mut _,
- value,
- );
+ BNSettingsUpdateBoolProperty(self.handle, key.as_ptr(), property.as_ptr(), value);
}
}
@@ -487,12 +472,7 @@ impl Settings {
let key = key.to_cstr();
let property = property.to_cstr();
unsafe {
- BNSettingsUpdateUInt64Property(
- self.handle,
- key.as_ref().as_ptr() as *mut _,
- property.as_ref().as_ptr() as *mut _,
- value,
- );
+ BNSettingsUpdateUInt64Property(self.handle, key.as_ptr(), property.as_ptr(), value);
}
}
@@ -500,12 +480,7 @@ impl Settings {
let key = key.to_cstr();
let property = property.to_cstr();
unsafe {
- BNSettingsUpdateDoubleProperty(
- self.handle,
- key.as_ref().as_ptr() as *mut _,
- property.as_ref().as_ptr() as *mut _,
- value,
- );
+ BNSettingsUpdateDoubleProperty(self.handle, key.as_ptr(), property.as_ptr(), value);
}
}
@@ -516,9 +491,9 @@ impl Settings {
unsafe {
BNSettingsUpdateStringProperty(
self.handle,
- key.as_ref().as_ptr() as *mut _,
- property.as_ref().as_ptr() as *mut _,
- value.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
+ property.as_ptr(),
+ value.as_ptr(),
);
}
}
@@ -532,16 +507,13 @@ impl Settings {
let key = key.to_cstr();
let property = property.to_cstr();
let raw_list: Vec<_> = value.map(|s| s.to_cstr()).collect();
- let mut raw_list_ptr: Vec<_> = raw_list
- .iter()
- .map(|s| s.as_ref().as_ptr() as *const c_char)
- .collect();
+ let mut raw_list_ptr: Vec<_> = raw_list.iter().map(|s| s.as_ptr()).collect();
unsafe {
BNSettingsUpdateStringListProperty(
self.handle,
- key.as_ref().as_ptr() as *mut _,
- property.as_ref().as_ptr() as *mut _,
+ key.as_ptr(),
+ property.as_ptr(),
raw_list_ptr.as_mut_ptr(),
raw_list_ptr.len(),
);
@@ -552,26 +524,14 @@ impl Settings {
let group = group.to_cstr();
let title = title.to_cstr();
- unsafe {
- BNSettingsRegisterGroup(
- self.handle,
- group.as_ref().as_ptr() as *mut _,
- title.as_ref().as_ptr() as *mut _,
- )
- }
+ unsafe { BNSettingsRegisterGroup(self.handle, group.as_ptr(), title.as_ptr()) }
}
pub fn register_setting_json<S1: AsCStr, S2: AsCStr>(&self, group: S1, properties: S2) -> bool {
let group = group.to_cstr();
let properties = properties.to_cstr();
- unsafe {
- BNSettingsRegisterSetting(
- self.handle,
- group.as_ref().as_ptr() as *mut _,
- properties.as_ref().as_ptr() as *mut _,
- )
- }
+ unsafe { BNSettingsRegisterSetting(self.handle, group.as_ptr(), properties.as_ptr()) }
}
// TODO: register_setting but type-safely turn it into json
diff --git a/rust/src/string.rs b/rust/src/string.rs
index 17fcf911..640731ff 100644
--- a/rust/src/string.rs
+++ b/rust/src/string.rs
@@ -23,6 +23,7 @@ use std::hash::{Hash, Hasher};
use std::mem;
use std::ops::Deref;
use std::path::{Path, PathBuf};
+use crate::type_archive::TypeArchiveSnapshotId;
// TODO: Remove or refactor this.
pub(crate) fn raw_to_string(ptr: *const c_char) -> Option<String> {
@@ -291,6 +292,14 @@ unsafe impl AsCStr for &Path {
}
}
+unsafe impl AsCStr for TypeArchiveSnapshotId {
+ type Result = CString;
+
+ fn to_cstr(self) -> Self::Result {
+ self.to_string().to_cstr()
+ }
+}
+
pub trait IntoJson {
type Output: AsCStr;
diff --git a/rust/src/tags.rs b/rust/src/tags.rs
index 30cc4682..72cae705 100644
--- a/rust/src/tags.rs
+++ b/rust/src/tags.rs
@@ -44,7 +44,7 @@ impl Tag {
pub fn new<S: AsCStr>(t: &TagType, data: S) -> Ref<Self> {
let data = data.to_cstr();
- unsafe { Self::ref_from_raw(BNCreateTag(t.handle, data.as_ref().as_ptr() as *mut _)) }
+ unsafe { Self::ref_from_raw(BNCreateTag(t.handle, data.as_ptr())) }
}
pub fn id(&self) -> String {
@@ -62,7 +62,7 @@ impl Tag {
pub fn set_data<S: AsCStr>(&self, data: S) {
let data = data.to_cstr();
unsafe {
- BNTagSetData(self.handle, data.as_ref().as_ptr() as *mut _);
+ BNTagSetData(self.handle, data.as_ptr());
}
}
}
@@ -152,7 +152,7 @@ impl TagType {
pub fn set_icon<S: AsCStr>(&self, icon: S) {
let icon = icon.to_cstr();
unsafe {
- BNTagTypeSetIcon(self.handle, icon.as_ref().as_ptr() as *mut _);
+ BNTagTypeSetIcon(self.handle, icon.as_ptr());
}
}
@@ -163,7 +163,7 @@ impl TagType {
pub fn set_name<S: AsCStr>(&self, name: S) {
let name = name.to_cstr();
unsafe {
- BNTagTypeSetName(self.handle, name.as_ref().as_ptr() as *mut _);
+ BNTagTypeSetName(self.handle, name.as_ptr());
}
}
@@ -182,7 +182,7 @@ impl TagType {
pub fn set_type<S: AsCStr>(&self, t: S) {
let t = t.to_cstr();
unsafe {
- BNTagTypeSetName(self.handle, t.as_ref().as_ptr() as *mut _);
+ BNTagTypeSetName(self.handle, t.as_ptr());
}
}
diff --git a/rust/src/template_simplifier.rs b/rust/src/template_simplifier.rs
index 57d2b0b4..c9e54e72 100644
--- a/rust/src/template_simplifier.rs
+++ b/rust/src/template_simplifier.rs
@@ -6,15 +6,10 @@ use binaryninjacore_sys::{BNRustSimplifyStrToFQN, BNRustSimplifyStrToStr};
pub fn simplify_str_to_str<S: AsCStr>(input: S) -> BnString {
let name = input.to_cstr();
- unsafe { BnString::from_raw(BNRustSimplifyStrToStr(name.as_ref().as_ptr() as *mut _)) }
+ unsafe { BnString::from_raw(BNRustSimplifyStrToStr(name.as_ptr())) }
}
pub fn simplify_str_to_fqn<S: AsCStr>(input: S, simplify: bool) -> QualifiedName {
let name = input.to_cstr();
- unsafe {
- QualifiedName::from_owned_raw(BNRustSimplifyStrToFQN(
- name.as_ref().as_ptr() as *mut _,
- simplify,
- ))
- }
+ unsafe { QualifiedName::from_owned_raw(BNRustSimplifyStrToFQN(name.as_ptr(), simplify)) }
}
diff --git a/rust/src/type_archive.rs b/rust/src/type_archive.rs
index 5e94f19e..2daca983 100644
--- a/rust/src/type_archive.rs
+++ b/rust/src/type_archive.rs
@@ -66,7 +66,7 @@ impl TypeArchive {
/// Open the Type Archive at the given path, if it exists.
pub fn open(path: impl AsRef<Path>) -> Option<Ref<TypeArchive>> {
let raw_path = path.as_ref().to_cstr();
- let handle = unsafe { BNOpenTypeArchive(raw_path.as_ptr() as *const c_char) };
+ let handle = unsafe { BNOpenTypeArchive(raw_path.as_ptr()) };
NonNull::new(handle).map(|handle| unsafe { TypeArchive::ref_from_raw(handle) })
}
@@ -76,7 +76,7 @@ impl TypeArchive {
pub fn create(path: impl AsRef<Path>, platform: &Platform) -> Option<Ref<TypeArchive>> {
let raw_path = path.as_ref().to_cstr();
let handle =
- unsafe { BNCreateTypeArchive(raw_path.as_ptr() as *const c_char, platform.handle) };
+ unsafe { BNCreateTypeArchive(raw_path.as_ptr(), platform.handle) };
NonNull::new(handle).map(|handle| unsafe { TypeArchive::ref_from_raw(handle) })
}
@@ -90,20 +90,15 @@ impl TypeArchive {
) -> Option<Ref<TypeArchive>> {
let raw_path = path.as_ref().to_cstr();
let id = id.to_cstr();
- let handle = unsafe {
- BNCreateTypeArchiveWithId(
- raw_path.as_ptr() as *const c_char,
- platform.handle,
- id.as_ref().as_ptr() as *const c_char,
- )
- };
+ let handle =
+ unsafe { BNCreateTypeArchiveWithId(raw_path.as_ptr(), platform.handle, id.as_ptr()) };
NonNull::new(handle).map(|handle| unsafe { TypeArchive::ref_from_raw(handle) })
}
/// Get a reference to the Type Archive with the known id, if one exists.
pub fn lookup_by_id<S: AsCStr>(id: S) -> Option<Ref<TypeArchive>> {
let id = id.to_cstr();
- let handle = unsafe { BNLookupTypeArchiveById(id.as_ref().as_ptr() as *const c_char) };
+ let handle = unsafe { BNLookupTypeArchiveById(id.as_ptr()) };
NonNull::new(handle).map(|handle| unsafe { TypeArchive::ref_from_raw(handle) })
}
@@ -238,13 +233,8 @@ impl TypeArchive {
pub fn rename_type_by_id<S: AsCStr>(&self, id: S, new_name: QualifiedName) -> bool {
let id = id.to_cstr();
let raw_name = QualifiedName::into_raw(new_name);
- let result = unsafe {
- BNRenameTypeArchiveType(
- self.handle.as_ptr(),
- id.as_ref().as_ptr() as *const c_char,
- &raw_name,
- )
- };
+ let result =
+ unsafe { BNRenameTypeArchiveType(self.handle.as_ptr(), id.as_ptr(), &raw_name) };
QualifiedName::free_raw(raw_name);
result
}
@@ -261,9 +251,7 @@ impl TypeArchive {
/// Delete an existing type in the type archive.
pub fn delete_type_by_id<S: AsCStr>(&self, id: S) -> bool {
let id = id.to_cstr();
- let result = unsafe {
- BNDeleteTypeArchiveType(self.handle.as_ptr(), id.as_ref().as_ptr() as *const c_char)
- };
+ let result = unsafe { BNDeleteTypeArchiveType(self.handle.as_ptr(), id.as_ptr()) };
result
}
@@ -315,7 +303,7 @@ impl TypeArchive {
let result = unsafe {
BNGetTypeArchiveTypeById(
self.handle.as_ptr(),
- id.as_ref().as_ptr() as *const c_char,
+ id.as_ptr(),
snapshot.0.as_ptr() as *const c_char,
)
};
@@ -342,7 +330,7 @@ impl TypeArchive {
let result = unsafe {
BNGetTypeArchiveTypeName(
self.handle.as_ptr(),
- id.as_ref().as_ptr() as *const c_char,
+ id.as_ptr(),
snapshot.0.as_ptr() as *const c_char,
)
};
@@ -497,7 +485,7 @@ impl TypeArchive {
let result = unsafe {
BNGetTypeArchiveOutgoingDirectTypeReferences(
self.handle.as_ptr(),
- id.as_ref().as_ptr() as *const c_char,
+ id.as_ptr(),
snapshot.0.as_ptr() as *const c_char,
&mut count,
)
@@ -527,7 +515,7 @@ impl TypeArchive {
let result = unsafe {
BNGetTypeArchiveOutgoingRecursiveTypeReferences(
self.handle.as_ptr(),
- id.as_ref().as_ptr() as *const c_char,
+ id.as_ptr(),
snapshot.0.as_ptr() as *const c_char,
&mut count,
)
@@ -557,7 +545,7 @@ impl TypeArchive {
let result = unsafe {
BNGetTypeArchiveIncomingDirectTypeReferences(
self.handle.as_ptr(),
- id.as_ref().as_ptr() as *const c_char,
+ id.as_ptr(),
snapshot.0.as_ptr() as *const c_char,
&mut count,
)
@@ -587,7 +575,7 @@ impl TypeArchive {
let result = unsafe {
BNGetTypeArchiveIncomingRecursiveTypeReferences(
self.handle.as_ptr(),
- id.as_ref().as_ptr() as *const c_char,
+ id.as_ptr(),
snapshot.0.as_ptr() as *const c_char,
&mut count,
)
@@ -599,9 +587,7 @@ impl TypeArchive {
/// Look up a metadata entry in the archive
pub fn query_metadata<S: AsCStr>(&self, key: S) -> Option<Ref<Metadata>> {
let key = key.to_cstr();
- let result = unsafe {
- BNTypeArchiveQueryMetadata(self.handle.as_ptr(), key.as_ref().as_ptr() as *const c_char)
- };
+ let result = unsafe { BNTypeArchiveQueryMetadata(self.handle.as_ptr(), key.as_ptr()) };
(!result.is_null()).then(|| unsafe { Metadata::ref_from_raw(result) })
}
@@ -611,25 +597,15 @@ impl TypeArchive {
/// * `md` - object to store.
pub fn store_metadata<S: AsCStr>(&self, key: S, md: &Metadata) {
let key = key.to_cstr();
- let result = unsafe {
- BNTypeArchiveStoreMetadata(
- self.handle.as_ptr(),
- key.as_ref().as_ptr() as *const c_char,
- md.handle,
- )
- };
+ let result =
+ unsafe { BNTypeArchiveStoreMetadata(self.handle.as_ptr(), key.as_ptr(), md.handle) };
assert!(result);
}
/// Delete a given metadata entry in the archive from the `key`
pub fn remove_metadata<S: AsCStr>(&self, key: S) -> bool {
let key = key.to_cstr();
- unsafe {
- BNTypeArchiveRemoveMetadata(
- self.handle.as_ptr(),
- key.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNTypeArchiveRemoveMetadata(self.handle.as_ptr(), key.as_ptr()) }
}
/// Turn a given `snapshot` id into a data stream
@@ -708,7 +684,7 @@ impl TypeArchive {
/// Determine if `file` is a Type Archive
pub fn is_type_archive<P: AsCStr>(file: P) -> bool {
let file = file.to_cstr();
- unsafe { BNIsTypeArchive(file.as_ref().as_ptr() as *const c_char) }
+ unsafe { BNIsTypeArchive(file.as_ptr()) }
}
///// Get the TypeContainer interface for this Type Archive, presenting types
@@ -840,9 +816,9 @@ impl TypeArchive {
let success = unsafe {
BNTypeArchiveMergeSnapshots(
self.handle.as_ptr(),
- base_snapshot.as_ref().as_ptr() as *const c_char,
- first_snapshot.as_ref().as_ptr() as *const c_char,
- second_snapshot.as_ref().as_ptr() as *const c_char,
+ base_snapshot.as_ptr(),
+ first_snapshot.as_ptr(),
+ second_snapshot.as_ptr(),
merge_keys_raw,
merge_values_raw,
merge_keys.len(),
@@ -1169,12 +1145,7 @@ impl TypeArchiveMergeConflict {
// TODO: This needs documentation!
pub fn success<S: AsCStr>(&self, value: S) -> bool {
let value = value.to_cstr();
- unsafe {
- BNTypeArchiveMergeConflictSuccess(
- self.handle.as_ptr(),
- value.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNTypeArchiveMergeConflictSuccess(self.handle.as_ptr(), value.as_ptr()) }
}
}
diff --git a/rust/src/type_container.rs b/rust/src/type_container.rs
index 5941b313..90b2ebc9 100644
--- a/rust/src/type_container.rs
+++ b/rust/src/type_container.rs
@@ -140,13 +140,8 @@ impl TypeContainer {
pub fn rename_type<T: Into<QualifiedName>, S: AsCStr>(&self, name: T, type_id: S) -> bool {
let type_id = type_id.to_cstr();
let raw_name = QualifiedName::into_raw(name.into());
- let success = unsafe {
- BNTypeContainerRenameType(
- self.handle.as_ptr(),
- type_id.as_ref().as_ptr() as *const c_char,
- &raw_name,
- )
- };
+ let success =
+ unsafe { BNTypeContainerRenameType(self.handle.as_ptr(), type_id.as_ptr(), &raw_name) };
QualifiedName::free_raw(raw_name);
success
}
@@ -157,12 +152,7 @@ impl TypeContainer {
/// Returns true if the type was deleted.
pub fn delete_type<S: AsCStr>(&self, type_id: S) -> bool {
let type_id = type_id.to_cstr();
- unsafe {
- BNTypeContainerDeleteType(
- self.handle.as_ptr(),
- type_id.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNTypeContainerDeleteType(self.handle.as_ptr(), type_id.as_ptr()) }
}
/// Get the unique id of the type in the Type Container with the given name.
@@ -184,11 +174,7 @@ impl TypeContainer {
let type_id = type_id.to_cstr();
let mut result = BNQualifiedName::default();
let success = unsafe {
- BNTypeContainerGetTypeName(
- self.handle.as_ptr(),
- type_id.as_ref().as_ptr() as *const c_char,
- &mut result,
- )
+ BNTypeContainerGetTypeName(self.handle.as_ptr(), type_id.as_ptr(), &mut result)
};
success.then(|| QualifiedName::from_owned_raw(result))
}
@@ -200,11 +186,7 @@ impl TypeContainer {
let type_id = type_id.to_cstr();
let mut result = std::ptr::null_mut();
let success = unsafe {
- BNTypeContainerGetTypeById(
- self.handle.as_ptr(),
- type_id.as_ref().as_ptr() as *const c_char,
- &mut result,
- )
+ BNTypeContainerGetTypeById(self.handle.as_ptr(), type_id.as_ptr(), &mut result)
};
success.then(|| unsafe { Type::ref_from_raw(result) })
}
@@ -313,7 +295,7 @@ impl TypeContainer {
let success = unsafe {
BNTypeContainerParseTypeString(
self.handle.as_ptr(),
- source.as_ref().as_ptr() as *const c_char,
+ source.as_ptr(),
import_dependencies,
&mut result,
&mut errors,
@@ -358,18 +340,13 @@ impl TypeContainer {
let source = source.to_cstr();
let filename = filename.to_cstr();
let options: Vec<_> = options.into_iter().map(|o| o.to_cstr()).collect();
- let options_raw: Vec<*const c_char> = options
- .iter()
- .map(|o| o.as_ref().as_ptr() as *const c_char)
- .collect();
+ let options_raw: Vec<*const c_char> = options.iter().map(|o| o.as_ptr()).collect();
let include_directories: Vec<_> = include_directories
.into_iter()
.map(|d| d.to_cstr())
.collect();
- let include_directories_raw: Vec<*const c_char> = include_directories
- .iter()
- .map(|d| d.as_ref().as_ptr() as *const c_char)
- .collect();
+ let include_directories_raw: Vec<*const c_char> =
+ include_directories.iter().map(|d| d.as_ptr()).collect();
let auto_type_source = auto_type_source.to_cstr();
let mut raw_result = BNTypeParserResult::default();
let mut errors = std::ptr::null_mut();
@@ -377,13 +354,13 @@ impl TypeContainer {
let success = unsafe {
BNTypeContainerParseTypesFromSource(
self.handle.as_ptr(),
- source.as_ref().as_ptr() as *const c_char,
- filename.as_ref().as_ptr() as *const c_char,
+ source.as_ptr(),
+ filename.as_ptr(),
options_raw.as_ptr(),
options_raw.len(),
include_directories_raw.as_ptr(),
include_directories_raw.len(),
- auto_type_source.as_ref().as_ptr() as *const c_char,
+ auto_type_source.as_ptr(),
import_dependencies,
&mut raw_result,
&mut errors,
diff --git a/rust/src/type_parser.rs b/rust/src/type_parser.rs
index 1cfe346c..af17a17f 100644
--- a/rust/src/type_parser.rs
+++ b/rust/src/type_parser.rs
@@ -29,9 +29,8 @@ pub fn register_type_parser<S: AsCStr, T: TypeParser>(
freeResult: Some(cb_free_result),
freeErrorList: Some(cb_free_error_list),
};
- let result = unsafe {
- BNRegisterTypeParser(name.to_cstr().as_ref().as_ptr() as *const _, &mut callback)
- };
+ let name = name.to_cstr();
+ let result = unsafe { BNRegisterTypeParser(name.as_ptr(), &mut callback) };
let core = unsafe { CoreTypeParser::from_raw(NonNull::new(result).unwrap()) };
(parser, core)
}
@@ -54,7 +53,7 @@ impl CoreTypeParser {
pub fn parser_by_name<S: AsCStr>(name: S) -> Option<CoreTypeParser> {
let name_raw = name.to_cstr();
- let result = unsafe { BNGetTypeParserByName(name_raw.as_ref().as_ptr() as *const c_char) };
+ let result = unsafe { BNGetTypeParserByName(name_raw.as_ptr()) };
NonNull::new(result).map(|x| unsafe { Self::from_raw(x) })
}
diff --git a/rust/src/type_printer.rs b/rust/src/type_printer.rs
index b49832de..278e486a 100644
--- a/rust/src/type_printer.rs
+++ b/rust/src/type_printer.rs
@@ -34,12 +34,8 @@ pub fn register_type_printer<S: AsCStr, T: TypePrinter>(
freeString: Some(cb_free_string),
freeLines: Some(cb_free_lines),
};
- let result = unsafe {
- BNRegisterTypePrinter(
- name.to_cstr().as_ref().as_ptr() as *const c_char,
- &mut callback,
- )
- };
+ let raw_name = name.to_cstr();
+ let result = unsafe { BNRegisterTypePrinter(raw_name.as_ptr(), &mut callback) };
let core = unsafe { CoreTypePrinter::from_raw(NonNull::new(result).unwrap()) };
(parser, core)
}
@@ -63,7 +59,7 @@ impl CoreTypePrinter {
pub fn printer_by_name<S: AsCStr>(name: S) -> Option<CoreTypePrinter> {
let name_raw = name.to_cstr();
- let result = unsafe { BNGetTypePrinterByName(name_raw.as_ref().as_ptr() as *const c_char) };
+ let result = unsafe { BNGetTypePrinterByName(name_raw.as_ptr()) };
NonNull::new(result).map(|x| unsafe { Self::from_raw(x) })
}
diff --git a/rust/src/update.rs b/rust/src/update.rs
index aa8c7daf..b3c45d84 100644
--- a/rust/src/update.rs
+++ b/rust/src/update.rs
@@ -1,10 +1,10 @@
#![allow(dead_code)]
-use std::ffi::{c_char, c_void};
+use std::ffi::c_void;
use std::time::{Duration, SystemTime, UNIX_EPOCH};
use crate::progress::{NoProgressCallback, ProgressCallback};
use crate::rc::{Array, CoreArrayProvider, CoreArrayProviderInner};
-use crate::string::{raw_to_string, BnString};
+use crate::string::{raw_to_string, AsCStr, BnString};
use binaryninjacore_sys::*;
pub type UpdateResult = BNUpdateResult;
@@ -96,8 +96,9 @@ impl UpdateChannel {
pub fn versions(&self) -> Result<Array<UpdateVersion>, BnString> {
let mut count = 0;
let mut errors = std::ptr::null_mut();
+ let name = self.name.clone().to_cstr();
let result = unsafe {
- BNGetUpdateChannelVersions(self.name.as_ptr() as *const c_char, &mut count, &mut errors)
+ BNGetUpdateChannelVersions(name.as_ptr(), &mut count, &mut errors)
};
if !errors.is_null() {
Err(unsafe { BnString::from_raw(errors) })
@@ -122,9 +123,10 @@ impl UpdateChannel {
/// Whether updates are available
pub fn updates_available(&self) -> Result<bool, BnString> {
let mut errors = std::ptr::null_mut();
+ let name = self.name.clone().to_cstr();
let result = unsafe {
BNAreUpdatesAvailable(
- self.name.as_ptr() as *const c_char,
+ name.as_ptr(),
std::ptr::null_mut(),
std::ptr::null_mut(),
&mut errors,
@@ -147,9 +149,10 @@ impl UpdateChannel {
) -> Result<UpdateResult, BnString> {
let mut errors = std::ptr::null_mut();
+ let name = self.name.clone().to_cstr();
let result = unsafe {
BNUpdateToLatestVersion(
- self.name.as_ptr() as *const c_char,
+ name.as_ptr(),
&mut errors,
Some(P::cb_progress_callback),
&mut progress as *mut P as *mut c_void,
@@ -174,10 +177,12 @@ impl UpdateChannel {
) -> Result<UpdateResult, BnString> {
let mut errors = std::ptr::null_mut();
+ let name = self.name.clone().to_cstr();
+ let version = version.version.clone().to_cstr();
let result = unsafe {
BNUpdateToVersion(
- self.name.as_ptr() as *const c_char,
- version.version.as_ptr() as *const c_char,
+ name.as_ptr(),
+ version.as_ptr(),
&mut errors,
Some(P::cb_progress_callback),
&mut progress as *mut P as *mut c_void,
diff --git a/rust/src/websocket/client.rs b/rust/src/websocket/client.rs
index 43e1e1f7..e9e753b1 100644
--- a/rust/src/websocket/client.rs
+++ b/rust/src/websocket/client.rs
@@ -86,14 +86,8 @@ impl CoreWebsocketClient {
.into_iter()
.map(|(k, v)| (k.to_cstr(), v.to_cstr()))
.unzip();
- let header_keys: Vec<*const c_char> = header_keys
- .iter()
- .map(|k| k.as_ref().as_ptr() as *const c_char)
- .collect();
- let header_values: Vec<*const c_char> = header_values
- .iter()
- .map(|v| v.as_ref().as_ptr() as *const c_char)
- .collect();
+ let header_keys: Vec<*const c_char> = header_keys.iter().map(|k| k.as_ptr()).collect();
+ let header_values: Vec<*const c_char> = header_values.iter().map(|v| v.as_ptr()).collect();
// SAFETY: This context will only be live for the duration of BNConnectWebsocketClient
// SAFETY: Any subsequent call to BNConnectWebsocketClient will write over the context.
let mut output_callbacks = BNWebsocketClientOutputCallbacks {
@@ -106,7 +100,7 @@ impl CoreWebsocketClient {
unsafe {
BNConnectWebsocketClient(
self.handle.as_ptr(),
- url.as_ptr() as *const c_char,
+ url.as_ptr(),
header_keys.len().try_into().unwrap(),
header_keys.as_ptr(),
header_values.as_ptr(),
@@ -131,7 +125,7 @@ impl CoreWebsocketClient {
pub fn notify_error(&self, msg: &str) {
let error = msg.to_cstr();
unsafe {
- BNNotifyWebsocketClientError(self.handle.as_ptr(), error.as_ptr() as *const c_char)
+ BNNotifyWebsocketClientError(self.handle.as_ptr(), error.as_ptr())
}
}
diff --git a/rust/src/websocket/provider.rs b/rust/src/websocket/provider.rs
index 48c198d2..9cc1de84 100644
--- a/rust/src/websocket/provider.rs
+++ b/rust/src/websocket/provider.rs
@@ -3,7 +3,7 @@ use crate::string::{AsCStr, BnString};
use crate::websocket::client;
use crate::websocket::client::{CoreWebsocketClient, WebsocketClient};
use binaryninjacore_sys::*;
-use std::ffi::{c_char, c_void};
+use std::ffi::c_void;
use std::mem::MaybeUninit;
use std::ptr::NonNull;
@@ -17,7 +17,7 @@ where
let leaked_provider = Box::leak(Box::new(provider_uninit));
let result = unsafe {
BNRegisterWebsocketProvider(
- name.as_ptr() as *const c_char,
+ name.as_ptr(),
&mut BNWebsocketProviderCallbacks {
context: leaked_provider as *mut _ as *mut c_void,
createClient: Some(cb_create_client::<W>),
@@ -82,8 +82,7 @@ impl CoreWebsocketProvider {
pub fn by_name<S: AsCStr>(name: S) -> Option<CoreWebsocketProvider> {
let name = name.to_cstr();
- let result =
- unsafe { BNGetWebsocketProviderByName(name.as_ref().as_ptr() as *const c_char) };
+ let result = unsafe { BNGetWebsocketProviderByName(name.as_ptr()) };
NonNull::new(result).map(|h| unsafe { Self::from_raw(h) })
}
diff --git a/rust/src/worker_thread.rs b/rust/src/worker_thread.rs
index aed872de..e0d7b0db 100644
--- a/rust/src/worker_thread.rs
+++ b/rust/src/worker_thread.rs
@@ -1,6 +1,6 @@
use crate::string::AsCStr;
use binaryninjacore_sys::*;
-use std::ffi::{c_char, c_void};
+use std::ffi::c_void;
pub struct WorkerThreadActionExecutor {
func: Box<dyn Fn()>,
@@ -25,7 +25,7 @@ pub fn execute_on_worker_thread<F: Fn() + 'static, S: AsCStr>(name: S, f: F) {
BNWorkerEnqueueNamed(
raw_executor as *mut c_void,
Some(WorkerThreadActionExecutor::cb_execute),
- name.as_ref().as_ptr() as *const c_char,
+ name.as_ptr(),
)
}
}
@@ -38,7 +38,7 @@ pub fn execute_on_worker_thread_priority<F: Fn() + 'static, S: AsCStr>(name: S,
BNWorkerPriorityEnqueueNamed(
raw_executor as *mut c_void,
Some(WorkerThreadActionExecutor::cb_execute),
- name.as_ref().as_ptr() as *const c_char,
+ name.as_ptr(),
)
}
}
@@ -51,7 +51,7 @@ pub fn execute_on_worker_thread_interactive<F: Fn() + 'static, S: AsCStr>(name:
BNWorkerInteractiveEnqueueNamed(
raw_executor as *mut c_void,
Some(WorkerThreadActionExecutor::cb_execute),
- name.as_ref().as_ptr() as *const c_char,
+ name.as_ptr(),
)
}
}
diff --git a/rust/src/workflow.rs b/rust/src/workflow.rs
index b5023815..9bbc0b31 100644
--- a/rust/src/workflow.rs
+++ b/rust/src/workflow.rs
@@ -110,12 +110,7 @@ impl AnalysisContext {
pub fn inform<S: AsCStr>(&self, request: S) -> bool {
let request = request.to_cstr();
- unsafe {
- BNAnalysisContextInform(
- self.handle.as_ptr(),
- request.as_ref().as_ptr() as *const c_char,
- )
- }
+ unsafe { BNAnalysisContextInform(self.handle.as_ptr(), request.as_ptr()) }
}
pub fn set_basic_blocks<I>(&self, blocks: I)
@@ -169,13 +164,8 @@ impl Activity {
pub fn new<S: AsCStr>(config: S) -> Ref<Self> {
unsafe extern "C" fn cb_action_nop(_: *mut c_void, _: *mut BNAnalysisContext) {}
let config = config.to_cstr();
- let result = unsafe {
- BNCreateActivity(
- config.as_ref().as_ptr() as *const c_char,
- std::ptr::null_mut(),
- Some(cb_action_nop),
- )
- };
+ let result =
+ unsafe { BNCreateActivity(config.as_ptr(), std::ptr::null_mut(), Some(cb_action_nop)) };
unsafe { Activity::ref_from_raw(NonNull::new(result).unwrap()) }
}
@@ -196,7 +186,7 @@ impl Activity {
let config = config.to_cstr();
let result = unsafe {
BNCreateActivity(
- config.as_ref().as_ptr() as *const c_char,
+ config.as_ptr(),
&mut action as *mut F as *mut c_void,
Some(cb_action::<F>),
)
@@ -252,7 +242,7 @@ impl Workflow {
/// To get a copy of an existing registered [Workflow] use [Workflow::clone_to].
pub fn new<S: AsCStr>(name: S) -> Ref<Self> {
let name = name.to_cstr();
- let result = unsafe { BNCreateWorkflow(name.as_ref().as_ptr() as *const c_char) };
+ let result = unsafe { BNCreateWorkflow(name.as_ptr()) };
unsafe { Workflow::ref_from_raw(NonNull::new(result).unwrap()) }
}
@@ -280,8 +270,8 @@ impl Workflow {
Self::ref_from_raw(
NonNull::new(BNWorkflowClone(
self.handle.as_ptr(),
- raw_name.as_ref().as_ptr() as *const c_char,
- activity.as_ref().as_ptr() as *const c_char,
+ raw_name.as_ptr(),
+ activity.as_ptr(),
))
.unwrap(),
)
@@ -289,8 +279,8 @@ impl Workflow {
}
pub fn instance<S: AsCStr>(name: S) -> Ref<Workflow> {
- let result =
- unsafe { BNWorkflowInstance(name.to_cstr().as_ref().as_ptr() as *const c_char) };
+ let name = name.to_cstr();
+ let result = unsafe { BNWorkflowInstance(name.as_ptr()) };
unsafe { Workflow::ref_from_raw(NonNull::new(result).unwrap()) }
}
@@ -318,12 +308,7 @@ impl Workflow {
/// * `configuration` - a JSON representation of the workflow configuration
pub fn register_with_config<S: AsCStr>(&self, config: S) -> Result<(), ()> {
let config = config.to_cstr();
- if unsafe {
- BNRegisterWorkflow(
- self.handle.as_ptr(),
- config.as_ref().as_ptr() as *const c_char,
- )
- } {
+ if unsafe { BNRegisterWorkflow(self.handle.as_ptr(), config.as_ptr()) } {
Ok(())
} else {
Err(())
@@ -351,10 +336,8 @@ impl Workflow {
I::Item: AsCStr,
{
let subactivities_raw: Vec<_> = subactivities.into_iter().map(|x| x.to_cstr()).collect();
- let mut subactivities_ptr: Vec<*const _> = subactivities_raw
- .iter()
- .map(|x| x.as_ref().as_ptr() as *const c_char)
- .collect();
+ let mut subactivities_ptr: Vec<*const _> =
+ subactivities_raw.iter().map(|x| x.as_ptr()).collect();
let result = unsafe {
BNWorkflowRegisterActivity(
self.handle.as_ptr(),
@@ -369,12 +352,8 @@ impl Workflow {
/// Determine if an Activity exists in this [Workflow].
pub fn contains<A: AsCStr>(&self, activity: A) -> bool {
- unsafe {
- BNWorkflowContains(
- self.handle.as_ptr(),
- activity.to_cstr().as_ref().as_ptr() as *const c_char,
- )
- }
+ let activity = activity.to_cstr();
+ unsafe { BNWorkflowContains(self.handle.as_ptr(), activity.as_ptr()) }
}
/// Retrieve the configuration as an adjacency list in JSON for the [Workflow].
@@ -387,12 +366,8 @@ impl Workflow {
///
/// `activity` - return the configuration for the `activity`
pub fn configuration_with_activity<A: AsCStr>(&self, activity: A) -> String {
- let result = unsafe {
- BNWorkflowGetConfiguration(
- self.handle.as_ptr(),
- activity.to_cstr().as_ref().as_ptr() as *const c_char,
- )
- };
+ let activity = activity.to_cstr();
+ let result = unsafe { BNWorkflowGetConfiguration(self.handle.as_ptr(), activity.as_ptr()) };
assert!(!result.is_null());
unsafe { BnString::into_string(result) }
}
@@ -409,12 +384,7 @@ impl Workflow {
/// Retrieve the Activity object for the specified `name`.
pub fn activity<A: AsCStr>(&self, name: A) -> Option<Ref<Activity>> {
let name = name.to_cstr();
- let result = unsafe {
- BNWorkflowGetActivity(
- self.handle.as_ptr(),
- name.as_ref().as_ptr() as *const c_char,
- )
- };
+ let result = unsafe { BNWorkflowGetActivity(self.handle.as_ptr(), name.as_ptr()) };
NonNull::new(result).map(|a| unsafe { Activity::ref_from_raw(a) })
}
@@ -423,13 +393,10 @@ impl Workflow {
///
/// * `activity` - if specified, return the roots for the `activity`
pub fn activity_roots<A: AsCStr>(&self, activity: A) -> Array<BnString> {
+ let activity = activity.to_cstr();
let mut count = 0;
let result = unsafe {
- BNWorkflowGetActivityRoots(
- self.handle.as_ptr(),
- activity.to_cstr().as_ref().as_ptr() as *const c_char,
- &mut count,
- )
+ BNWorkflowGetActivityRoots(self.handle.as_ptr(), activity.as_ptr(), &mut count)
};
assert!(!result.is_null());
unsafe { Array::new(result as *mut *mut c_char, count, ()) }
@@ -440,11 +407,12 @@ impl Workflow {
/// * `activity` - if specified, return the direct children and optionally the descendants of the `activity` (includes `activity`)
/// * `immediate` - whether to include only direct children of `activity` or all descendants
pub fn subactivities<A: AsCStr>(&self, activity: A, immediate: bool) -> Array<BnString> {
+ let activity = activity.to_cstr();
let mut count = 0;
let result = unsafe {
BNWorkflowGetSubactivities(
self.handle.as_ptr(),
- activity.to_cstr().as_ref().as_ptr() as *const c_char,
+ activity.as_ptr(),
immediate,
&mut count,
)
@@ -463,15 +431,13 @@ impl Workflow {
I: IntoIterator,
I::Item: AsCStr,
{
+ let activity = activity.to_cstr();
let input_list: Vec<_> = activities.into_iter().map(|a| a.to_cstr()).collect();
- let mut input_list_ptr: Vec<*const _> = input_list
- .iter()
- .map(|x| x.as_ref().as_ptr() as *const c_char)
- .collect();
+ let mut input_list_ptr: Vec<*const _> = input_list.iter().map(|x| x.as_ptr()).collect();
unsafe {
BNWorkflowAssignSubactivities(
self.handle.as_ptr(),
- activity.to_cstr().as_ref().as_ptr() as *const c_char,
+ activity.as_ptr(),
input_list_ptr.as_mut_ptr(),
input_list.len(),
)
@@ -493,15 +459,13 @@ impl Workflow {
I: IntoIterator,
I::Item: AsCStr,
{
+ let activity = activity.to_cstr();
let input_list: Vec<_> = activities.into_iter().map(|a| a.to_cstr()).collect();
- let mut input_list_ptr: Vec<*const _> = input_list
- .iter()
- .map(|x| x.as_ref().as_ptr() as *const c_char)
- .collect();
+ let mut input_list_ptr: Vec<*const _> = input_list.iter().map(|x| x.as_ptr()).collect();
unsafe {
BNWorkflowInsert(
self.handle.as_ptr(),
- activity.to_cstr().as_ref().as_ptr() as *const c_char,
+ activity.as_ptr(),
input_list_ptr.as_mut_ptr(),
input_list.len(),
)
@@ -518,15 +482,13 @@ impl Workflow {
I: IntoIterator,
I::Item: AsCStr,
{
+ let activity = activity.to_cstr();
let input_list: Vec<_> = activities.into_iter().map(|a| a.to_cstr()).collect();
- let mut input_list_ptr: Vec<*const _> = input_list
- .iter()
- .map(|x| x.as_ref().as_ptr() as *const c_char)
- .collect();
+ let mut input_list_ptr: Vec<*const _> = input_list.iter().map(|x| x.as_ptr()).collect();
unsafe {
BNWorkflowInsertAfter(
self.handle.as_ptr(),
- activity.to_cstr().as_ref().as_ptr() as *const c_char,
+ activity.as_ptr(),
input_list_ptr.as_mut_ptr(),
input_list.len(),
)
@@ -535,12 +497,8 @@ impl Workflow {
/// Remove the specified `activity`
pub fn remove<A: AsCStr>(&self, activity: A) -> bool {
- unsafe {
- BNWorkflowRemove(
- self.handle.as_ptr(),
- activity.to_cstr().as_ref().as_ptr() as *const c_char,
- )
- }
+ let activity = activity.to_cstr();
+ unsafe { BNWorkflowRemove(self.handle.as_ptr(), activity.as_ptr()) }
}
/// Replace the specified `activity`.
@@ -548,11 +506,13 @@ impl Workflow {
/// * `activity` - the Activity to replace
/// * `new_activity` - the replacement Activity
pub fn replace<A: AsCStr, N: AsCStr>(&self, activity: A, new_activity: N) -> bool {
+ let activity = activity.to_cstr();
+ let new_activity = new_activity.to_cstr();
unsafe {
BNWorkflowReplace(
self.handle.as_ptr(),
- activity.to_cstr().as_ref().as_ptr() as *const c_char,
- new_activity.to_cstr().as_ref().as_ptr() as *const c_char,
+ activity.as_ptr(),
+ new_activity.as_ptr(),
)
}
}
@@ -567,14 +527,9 @@ impl Workflow {
sequential: Option<bool>,
) -> Option<Ref<FlowGraph>> {
let sequential = sequential.unwrap_or(false);
- let activity_name = activity.to_cstr();
- let graph = unsafe {
- BNWorkflowGetGraph(
- self.handle.as_ptr(),
- activity_name.as_ref().as_ptr() as *const c_char,
- sequential,
- )
- };
+ let activity = activity.to_cstr();
+ let graph =
+ unsafe { BNWorkflowGetGraph(self.handle.as_ptr(), activity.as_ptr(), sequential) };
if graph.is_null() {
return None;
}