summaryrefslogtreecommitdiff
path: root/rust/src
diff options
context:
space:
mode:
Diffstat (limited to 'rust/src')
-rw-r--r--rust/src/logger.rs19
1 files changed, 7 insertions, 12 deletions
diff --git a/rust/src/logger.rs b/rust/src/logger.rs
index ad6bd9d1..2735dd2f 100644
--- a/rust/src/logger.rs
+++ b/rust/src/logger.rs
@@ -35,10 +35,10 @@ use binaryninjacore_sys::{
};
use crate::rc::{Ref, RefCountable};
-use crate::string::{BnString, IntoCStr};
+use crate::string::{raw_to_string, BnString, IntoCStr};
use log;
use log::LevelFilter;
-use std::ffi::{CStr, CString};
+use std::ffi::CString;
use std::os::raw::{c_char, c_void};
use std::ptr::NonNull;
@@ -138,7 +138,6 @@ 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().to_cstr();
unsafe {
BNLog(
@@ -146,7 +145,7 @@ impl log::Log for Ref<Logger> {
level,
logger_name.as_ptr(),
0,
- percent_s.as_ptr(),
+ c"%s".as_ptr(),
msg.as_ptr(),
);
}
@@ -160,7 +159,7 @@ unsafe impl Send for Logger {}
unsafe impl Sync for Logger {}
pub trait LogListener: 'static + Sync {
- fn log(&self, session: usize, level: Level, msg: &CStr, logger_name: &CStr, tid: usize);
+ fn log(&self, session: usize, level: Level, msg: &str, logger_name: &str, tid: usize);
fn level(&self) -> Level;
fn close(&self) {}
}
@@ -220,13 +219,9 @@ extern "C" fn cb_log<L>(
{
ffi_wrap!("LogListener::log", unsafe {
let listener = &*(ctxt as *const L);
- listener.log(
- session,
- level,
- CStr::from_ptr(msg),
- CStr::from_ptr(logger_name),
- tid,
- );
+ let msg_str = raw_to_string(msg).unwrap();
+ let logger_name_str = raw_to_string(logger_name).unwrap();
+ listener.log(session, level, &msg_str, &logger_name_str, tid);
})
}