From 2ead1e9eb7b28084a514abd7f73efd0a48377f11 Mon Sep 17 00:00:00 2001 From: buzhenwang Date: Tue, 4 Apr 2023 09:59:34 +0800 Subject: [PATCH] add private check for hilog rust interface Signed-off-by: buzhenwang --- interfaces/rust/src/lib.rs | 6 +++- interfaces/rust/src/macros.rs | 54 ++++++++++++++++++++++++++++++++--- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/interfaces/rust/src/lib.rs b/interfaces/rust/src/lib.rs index 7d0709d..e47015e 100644 --- a/interfaces/rust/src/lib.rs +++ b/interfaces/rust/src/lib.rs @@ -75,10 +75,14 @@ pub struct HiLogLabel { } -#[link(name = "hilog")] +// hilog ffi interface extern "C"{ /// hilog ffi interface HiLogIsLoggabel pub fn HiLogIsLoggable(domain: u32, tag: *const c_char, level:u32) -> bool; /// hilog ffi interface HiLogPrint pub fn HiLogPrint(logType: u8, level: u8, domain: u32, tag: *const c_char, fmt: *const c_char, ...) -> u32; + /// hilog ffi interface IsPrivateSwitchOn + pub fn IsPrivateSwitchOn() -> bool; + /// hilog ffi interface IsDebugOn + pub fn IsDebugOn() -> bool; } \ No newline at end of file diff --git a/interfaces/rust/src/macros.rs b/interfaces/rust/src/macros.rs index 732268b..acc9e2a 100644 --- a/interfaces/rust/src/macros.rs +++ b/interfaces/rust/src/macros.rs @@ -18,16 +18,62 @@ /// hilog macros #[macro_export] -macro_rules! hilog{ - ($log_label:ident, $level:expr, $($arg:tt)* ) => ( - let log_str = format!($($arg)*); +macro_rules! hilog { + (@call $log_label:ident, $level:expr, $fmt:literal, $(,)? $($processed_args:expr),* ) => ( + let log_str = format!($fmt, $($processed_args),*); let res = unsafe { $crate::HiLogPrint($log_label.log_type as u8, $level as u8, $log_label.domain as u32, CString::new($log_label.tag).expect("default tag").as_ptr() as *const c_char, CString::new(log_str).expect("default log").as_ptr() as *const c_char) }; res - ) + ); + + (@rec $priv_flag:ident; $log_label:ident; $level:expr; $fmt:literal; ($arg:expr); $(,)? $($processed_args:expr),*) => { + if ($priv_flag) { + hilog!(@call $log_label, $level, $fmt, $($processed_args),*, ""); + } else { + hilog!(@call $log_label, $level, $fmt, $($processed_args),*, $arg); + } + }; + + (@rec $priv_flag:ident; $log_label:ident; $level:expr; $fmt:literal; (private!($arg:expr)); $(,)? $($processed_args:expr),*) => { + if ($priv_flag) { + hilog!(@call $log_label, $level, $fmt, $($processed_args),*, ""); + } else { + hilog!(@call $log_label, $level, $fmt, $($processed_args),*, $arg); + } + }; + + (@rec $priv_flag:ident; $log_label:ident; $level:expr; $fmt:literal; (public!($arg:expr)); $(,)? $($processed_args:expr),*) => { + hilog!(@call $log_label, $level, $fmt, $($processed_args),*, $arg); + }; + + (@rec $priv_flag:ident; $log_label:ident; $level:expr; $fmt:literal; ($arg:expr, $($unprocessed_args:tt)*); $($processed_args:tt)*) => { + if ($priv_flag) { + hilog!(@rec $priv_flag; $log_label; $level; $fmt; ($($unprocessed_args)*); $($processed_args)*, ""); + } else { + hilog!(@rec $priv_flag; $log_label; $level; $fmt; ($($unprocessed_args)*); $($processed_args)*, $arg); + } + }; + + (@rec $priv_flag:ident; $log_label:ident; $level:expr; $fmt:literal; (private!($arg:expr), $($unprocessed_args:tt)*); $($processed_args:tt)*) => { + if ($priv_flag) { + hilog!(@rec $priv_flag; $log_label; $level; $fmt; ($($unprocessed_args)*); $($processed_args)*, ""); + } else { + hilog!(@rec $priv_flag; $log_label; $level; $fmt; ($($unprocessed_args)*); $($processed_args)*, $arg); + } + }; + + (@rec $priv_flag:ident; $log_label:ident; $level:expr; $fmt:literal; (public!($arg:expr), $($unprocessed_args:tt)*); $($processed_args:tt)*) => { + hilog!(@rec $priv_flag; $log_label; $level; $fmt; ($($unprocessed_args)*); $($processed_args)*, $arg); + }; + + // Public API + ($log_label:ident, $level:expr, $fmt:literal, $($unprocessed_args:tt)*) => { + let priv_flag = unsafe{ $crate::IsPrivateSwitchOn() && !$crate::IsDebugOn() }; + hilog!(@rec priv_flag; $log_label; $level; $fmt; ($($unprocessed_args)*);); + }; } /// printf log at the debug level. -- Gitee