Skip to content

Commit d6ce4de

Browse files
committed
Fix buf_id issues with older SDK API version
As per user report at least SDKv26 does not resolve LOG_ID_DEFAULT to LOG_ID_MAIN internally, which forces users to set LOG_ID_MAIN explicitly. Rework android_log function to accept optional buf_id and use __android_log_write FFI function if no buf_id specified. This will return previous behavior for users that do not need to override buf_id. Closes: https://github.com/Nercury/android_logger-rs/issues/66 Fixes: fee1bea ("Support selecting target buffer of Android logging system") Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
1 parent f85999f commit d6ce4de

1 file changed

Lines changed: 35 additions & 20 deletions

File tree

src/lib.rs

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -118,32 +118,47 @@ pub enum LogId {
118118

119119
#[cfg(target_os = "android")]
120120
impl LogId {
121-
fn to_native(log_id: Option<Self>) -> log_ffi::log_id_t {
121+
fn to_native(log_id: Option<Self>) -> Option<log_ffi::log_id_t> {
122122
match log_id {
123-
Some(Self::Main) => log_ffi::log_id_t::MAIN,
124-
Some(Self::Radio) => log_ffi::log_id_t::RADIO,
125-
Some(Self::Events) => log_ffi::log_id_t::EVENTS,
126-
Some(Self::System) => log_ffi::log_id_t::SYSTEM,
127-
Some(Self::Crash) => log_ffi::log_id_t::CRASH,
128-
Some(Self::Kernel) => log_ffi::log_id_t::KERNEL,
129-
Some(Self::Security) => log_ffi::log_id_t::SECURITY,
130-
Some(Self::Stats) => log_ffi::log_id_t::STATS,
131-
None => log_ffi::log_id_t::DEFAULT,
123+
Some(Self::Main) => Some(log_ffi::log_id_t::MAIN),
124+
Some(Self::Radio) => Some(log_ffi::log_id_t::RADIO),
125+
Some(Self::Events) => Some(log_ffi::log_id_t::EVENTS),
126+
Some(Self::System) => Some(log_ffi::log_id_t::SYSTEM),
127+
Some(Self::Crash) => Some(log_ffi::log_id_t::CRASH),
128+
Some(Self::Kernel) => Some(log_ffi::log_id_t::KERNEL),
129+
Some(Self::Security) => Some(log_ffi::log_id_t::SECURITY),
130+
Some(Self::Stats) => Some(log_ffi::log_id_t::STATS),
131+
None => None,
132132
}
133133
}
134134
}
135135

136136
/// Outputs log to Android system.
137137
#[cfg(target_os = "android")]
138-
fn android_log(buf_id: log_ffi::log_id_t, prio: log_ffi::LogPriority, tag: &CStr, msg: &CStr) {
139-
unsafe {
140-
log_ffi::__android_log_buf_write(
141-
buf_id as log_ffi::c_int,
142-
prio as log_ffi::c_int,
143-
tag.as_ptr() as *const log_ffi::c_char,
144-
msg.as_ptr() as *const log_ffi::c_char,
145-
);
146-
};
138+
fn android_log(
139+
buf_id: Option<log_ffi::log_id_t>,
140+
prio: log_ffi::LogPriority,
141+
tag: &CStr,
142+
msg: &CStr,
143+
) {
144+
if let Some(buf_id) = buf_id {
145+
unsafe {
146+
log_ffi::__android_log_buf_write(
147+
buf_id as log_ffi::c_int,
148+
prio as log_ffi::c_int,
149+
tag.as_ptr() as *const log_ffi::c_char,
150+
msg.as_ptr() as *const log_ffi::c_char,
151+
);
152+
};
153+
} else {
154+
unsafe {
155+
log_ffi::__android_log_write(
156+
prio as log_ffi::c_int,
157+
tag.as_ptr() as *const log_ffi::c_char,
158+
msg.as_ptr() as *const log_ffi::c_char,
159+
);
160+
};
161+
}
147162
}
148163

149164
/// Dummy output placeholder for tests.
@@ -337,7 +352,7 @@ pub struct PlatformLogWriter<'a> {
337352
#[cfg(not(target_os = "android"))]
338353
priority: Level,
339354
#[cfg(target_os = "android")]
340-
buf_id: log_ffi::log_id_t,
355+
buf_id: Option<log_ffi::log_id_t>,
341356
#[cfg(not(target_os = "android"))]
342357
buf_id: Option<LogId>,
343358
len: usize,

0 commit comments

Comments
 (0)