mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-10-27 15:31:31 +00:00
Use bitflags to implement BootState
This commit is contained in:
1
native/src/Cargo.lock
generated
1
native/src/Cargo.lock
generated
@@ -644,6 +644,7 @@ dependencies = [
|
||||
"argh",
|
||||
"base",
|
||||
"bit-set",
|
||||
"bitflags",
|
||||
"bytemuck",
|
||||
"cxx",
|
||||
"cxx-gen",
|
||||
|
||||
@@ -27,3 +27,4 @@ thiserror = { workspace = true }
|
||||
bit-set = { workspace = true }
|
||||
argh = { workspace = true }
|
||||
nix = { workspace = true, features = ["fs", "mount", "poll", "signal", "term", "user", "zerocopy"] }
|
||||
bitflags = { workspace = true }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::consts::{APP_PACKAGE_NAME, BBPATH, DATABIN, MODULEROOT, SECURE_DIR};
|
||||
use crate::daemon::{BootState, MagiskD};
|
||||
use crate::daemon::MagiskD;
|
||||
use crate::ffi::{
|
||||
DbEntryKey, RequestCode, check_key_combo, exec_common_scripts, exec_module_scripts,
|
||||
get_magisk_tmp, initialize_denylist,
|
||||
@@ -11,12 +11,23 @@ use crate::resetprop::get_prop;
|
||||
use crate::selinux::restorecon;
|
||||
use base::const_format::concatcp;
|
||||
use base::{BufReadExt, FsPathBuilder, ResultExt, cstr, error, info};
|
||||
use bitflags::bitflags;
|
||||
use nix::fcntl::OFlag;
|
||||
use std::io::BufReader;
|
||||
use std::os::unix::net::UnixStream;
|
||||
use std::process::{Command, Stdio};
|
||||
use std::sync::atomic::Ordering;
|
||||
|
||||
bitflags! {
|
||||
#[derive(Default)]
|
||||
pub struct BootState : u32 {
|
||||
const PostFsDataDone = 1 << 0;
|
||||
const LateStartDone = 1 << 1;
|
||||
const BootComplete = 1 << 2;
|
||||
const SafeMode = 1 << 3;
|
||||
}
|
||||
}
|
||||
|
||||
impl MagiskD {
|
||||
fn setup_magisk_env(&self) -> bool {
|
||||
info!("* Initializing Magisk environment");
|
||||
@@ -185,9 +196,9 @@ impl MagiskD {
|
||||
RequestCode::POST_FS_DATA => {
|
||||
if check_data() && !state.contains(BootState::PostFsDataDone) {
|
||||
if self.post_fs_data() {
|
||||
state.set(BootState::SafeMode);
|
||||
state.insert(BootState::SafeMode);
|
||||
}
|
||||
state.set(BootState::PostFsDataDone);
|
||||
state.insert(BootState::PostFsDataDone);
|
||||
}
|
||||
}
|
||||
RequestCode::LATE_START => {
|
||||
@@ -195,13 +206,13 @@ impl MagiskD {
|
||||
if state.contains(BootState::PostFsDataDone) && !state.contains(BootState::SafeMode)
|
||||
{
|
||||
self.late_start();
|
||||
state.set(BootState::LateStartDone);
|
||||
state.insert(BootState::LateStartDone);
|
||||
}
|
||||
}
|
||||
RequestCode::BOOT_COMPLETE => {
|
||||
drop(client);
|
||||
if state.contains(BootState::PostFsDataDone) {
|
||||
state.set(BootState::BootComplete);
|
||||
state.insert(BootState::BootComplete);
|
||||
self.boot_complete()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
use crate::bootstages::BootState;
|
||||
use crate::consts::{
|
||||
MAGISK_FILE_CON, MAGISK_FULL_VER, MAGISK_PROC_CON, MAGISK_VER_CODE, MAGISK_VERSION,
|
||||
MAIN_CONFIG, MAIN_SOCKET, ROOTMNT, ROOTOVL,
|
||||
@@ -38,28 +39,6 @@ use std::sync::{Mutex, OnceLock};
|
||||
// Global magiskd singleton
|
||||
pub static MAGISKD: OnceLock<MagiskD> = OnceLock::new();
|
||||
|
||||
#[repr(u32)]
|
||||
pub enum BootState {
|
||||
PostFsDataDone = (1 << 0),
|
||||
LateStartDone = (1 << 1),
|
||||
BootComplete = (1 << 2),
|
||||
SafeMode = (1 << 3),
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
#[repr(transparent)]
|
||||
pub struct BootStateFlags(u32);
|
||||
|
||||
impl BootStateFlags {
|
||||
pub fn contains(&self, stage: BootState) -> bool {
|
||||
(self.0 & stage as u32) != 0
|
||||
}
|
||||
|
||||
pub fn set(&mut self, stage: BootState) {
|
||||
self.0 |= stage as u32;
|
||||
}
|
||||
}
|
||||
|
||||
pub const AID_ROOT: i32 = 0;
|
||||
pub const AID_SHELL: i32 = 2000;
|
||||
pub const AID_APP_START: i32 = 10000;
|
||||
@@ -78,7 +57,7 @@ pub const fn to_user_id(uid: i32) -> i32 {
|
||||
pub struct MagiskD {
|
||||
pub sql_connection: Mutex<Option<Sqlite3>>,
|
||||
pub manager_info: Mutex<ManagerInfo>,
|
||||
pub boot_stage_lock: Mutex<BootStateFlags>,
|
||||
pub boot_stage_lock: Mutex<BootState>,
|
||||
pub module_list: OnceLock<Vec<ModuleInfo>>,
|
||||
pub zygisk_enabled: AtomicBool,
|
||||
pub zygisk: Mutex<ZygiskState>,
|
||||
|
||||
Reference in New Issue
Block a user