Simplify logging code

This commit is contained in:
topjohnwu 2023-05-29 01:27:40 -07:00
parent f12951bd1d
commit c30fbdf145
3 changed files with 4 additions and 48 deletions

View File

@ -3,6 +3,7 @@ use std::io::{stderr, stdout, Write};
use std::process::exit; use std::process::exit;
use crate::ffi::LogLevel; use crate::ffi::LogLevel;
use crate::fmt_to_buf;
// Ugly hack to avoid using enum // Ugly hack to avoid using enum
#[allow(non_snake_case, non_upper_case_globals)] #[allow(non_snake_case, non_upper_case_globals)]
@ -17,14 +18,12 @@ mod LogFlag {
// We don't need to care about thread safety, because all // We don't need to care about thread safety, because all
// logger changes will only happen on the main thread. // logger changes will only happen on the main thread.
pub static mut LOGGER: Logger = Logger { pub static mut LOGGER: Logger = Logger {
fmt: |_, _| {},
write: |_, _| {}, write: |_, _| {},
flags: 0, flags: 0,
}; };
#[derive(Copy, Clone)] #[derive(Copy, Clone)]
pub struct Logger { pub struct Logger {
pub fmt: fn(level: LogLevel, args: Arguments),
pub write: fn(level: LogLevel, msg: &[u8]), pub write: fn(level: LogLevel, msg: &[u8]),
pub flags: u32, pub flags: u32,
} }
@ -78,20 +77,15 @@ pub fn log_impl(level: LogLevel, args: Arguments) {
if (logger.flags & level.to_disable_flag()) != 0 { if (logger.flags & level.to_disable_flag()) != 0 {
return; return;
} }
(logger.fmt)(level, args); let mut buf: [u8; 4096] = [0; 4096];
let len = fmt_to_buf(&mut buf, args);
(logger.write)(level, &buf[..len]);
if level == LogLevel::Error && (logger.flags & LogFlag::ExitOnError) != 0 { if level == LogLevel::Error && (logger.flags & LogFlag::ExitOnError) != 0 {
exit(1); exit(1);
} }
} }
pub fn cmdline_logging() { pub fn cmdline_logging() {
fn cmdline_print(level: LogLevel, args: Arguments) {
if level == LogLevel::Info {
print!("{}", args);
} else {
eprint!("{}", args);
}
}
fn cmdline_write(level: LogLevel, msg: &[u8]) { fn cmdline_write(level: LogLevel, msg: &[u8]) {
if level == LogLevel::Info { if level == LogLevel::Info {
stdout().write_all(msg).ok(); stdout().write_all(msg).ok();
@ -101,7 +95,6 @@ pub fn cmdline_logging() {
} }
let logger = Logger { let logger = Logger {
fmt: cmdline_print,
write: cmdline_write, write: cmdline_write,
flags: LogFlag::ExitOnError, flags: LogFlag::ExitOnError,
}; };

View File

@ -1,6 +1,5 @@
use std::cmp::min; use std::cmp::min;
use std::ffi::{c_char, c_void}; use std::ffi::{c_char, c_void};
use std::fmt::Arguments;
use std::fs::File; use std::fs::File;
use std::io::{IoSlice, Read, Write}; use std::io::{IoSlice, Read, Write};
use std::os::fd::{AsRawFd, FromRawFd, RawFd}; use std::os::fd::{AsRawFd, FromRawFd, RawFd};
@ -58,13 +57,6 @@ fn level_to_prio(level: LogLevel) -> i32 {
} }
pub fn android_logging() { pub fn android_logging() {
fn android_log_fmt(level: LogLevel, args: Arguments) {
let mut buf: [u8; 4096] = [0; 4096];
fmt_to_buf(&mut buf, args);
unsafe {
__android_log_write(level_to_prio(level), raw_cstr!("Magisk"), buf.as_ptr());
}
}
fn android_log_write(level: LogLevel, msg: &[u8]) { fn android_log_write(level: LogLevel, msg: &[u8]) {
unsafe { unsafe {
__android_log_write(level_to_prio(level), raw_cstr!("Magisk"), msg.as_ptr()); __android_log_write(level_to_prio(level), raw_cstr!("Magisk"), msg.as_ptr());
@ -72,7 +64,6 @@ pub fn android_logging() {
} }
let logger = Logger { let logger = Logger {
fmt: android_log_fmt,
write: android_log_write, write: android_log_write,
flags: 0, flags: 0,
}; };
@ -83,14 +74,6 @@ pub fn android_logging() {
} }
pub fn magisk_logging() { pub fn magisk_logging() {
fn magisk_fmt(level: LogLevel, args: Arguments) {
let mut buf: [u8; 4096] = [0; 4096];
let len = fmt_to_buf(&mut buf, args);
unsafe {
__android_log_write(level_to_prio(level), raw_cstr!("Magisk"), buf.as_ptr());
}
magisk_log_write(level_to_prio(level), &buf[..len]);
}
fn magisk_write(level: LogLevel, msg: &[u8]) { fn magisk_write(level: LogLevel, msg: &[u8]) {
unsafe { unsafe {
__android_log_write(level_to_prio(level), raw_cstr!("Magisk"), msg.as_ptr()); __android_log_write(level_to_prio(level), raw_cstr!("Magisk"), msg.as_ptr());
@ -99,7 +82,6 @@ pub fn magisk_logging() {
} }
let logger = Logger { let logger = Logger {
fmt: magisk_fmt,
write: magisk_write, write: magisk_write,
flags: 0, flags: 0,
}; };
@ -110,14 +92,6 @@ pub fn magisk_logging() {
} }
pub fn zygisk_logging() { pub fn zygisk_logging() {
fn zygisk_fmt(level: LogLevel, args: Arguments) {
let mut buf: [u8; 4096] = [0; 4096];
let len = fmt_to_buf(&mut buf, args);
unsafe {
__android_log_write(level_to_prio(level), raw_cstr!("Magisk"), buf.as_ptr());
}
zygisk_log_write(level_to_prio(level), &buf[..len]);
}
fn zygisk_write(level: LogLevel, msg: &[u8]) { fn zygisk_write(level: LogLevel, msg: &[u8]) {
unsafe { unsafe {
__android_log_write(level_to_prio(level), raw_cstr!("Magisk"), msg.as_ptr()); __android_log_write(level_to_prio(level), raw_cstr!("Magisk"), msg.as_ptr());
@ -126,7 +100,6 @@ pub fn zygisk_logging() {
} }
let logger = Logger { let logger = Logger {
fmt: zygisk_fmt,
write: zygisk_write, write: zygisk_write,
flags: 0, flags: 0,
}; };

View File

@ -1,4 +1,3 @@
use std::fmt::Arguments;
use std::fs; use std::fs;
use std::fs::File; use std::fs::File;
use std::io::Write; use std::io::Write;
@ -50,14 +49,6 @@ pub fn setup_klog() {
writeln!(rate, "on").ok(); writeln!(rate, "on").ok();
} }
fn klog_fmt(_: LogLevel, args: Arguments) {
if let Some(kmsg) = KMSG.get().as_mut() {
let mut buf: [u8; 4096] = [0; 4096];
let len = fmt_to_buf(&mut buf, format_args!("magiskinit: {}", args));
kmsg.write_all(&buf[..len]).ok();
}
}
fn klog_write_impl(_: LogLevel, msg: &[u8]) { fn klog_write_impl(_: LogLevel, msg: &[u8]) {
if let Some(kmsg) = KMSG.get().as_mut() { if let Some(kmsg) = KMSG.get().as_mut() {
let mut buf: [u8; 4096] = [0; 4096]; let mut buf: [u8; 4096] = [0; 4096];
@ -68,7 +59,6 @@ pub fn setup_klog() {
} }
let logger = Logger { let logger = Logger {
fmt: klog_fmt,
write: klog_write_impl, write: klog_write_impl,
flags: 0, flags: 0,
}; };