Implement reboot in Rust

This commit is contained in:
topjohnwu 2025-04-28 16:23:33 -07:00 committed by John Wu
parent d1829308e9
commit 22884e173a
3 changed files with 11 additions and 14 deletions

View File

@ -128,13 +128,6 @@ static void poll_ctrl_handler(pollfd *pfd) {
} }
} }
void MagiskD::reboot() const noexcept {
if (is_recovery())
exec_command_sync("/system/bin/reboot", "recovery");
else
exec_command_sync("/system/bin/reboot");
}
bool get_client_cred(int fd, sock_cred *cred) { bool get_client_cred(int fd, sock_cred *cred) {
socklen_t len = sizeof(ucred); socklen_t len = sizeof(ucred);
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, cred, &len) != 0) if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, cred, &len) != 0)

View File

@ -17,6 +17,7 @@ use base::{
use std::fmt::Write as FmtWrite; use std::fmt::Write as FmtWrite;
use std::io::{BufReader, Write}; use std::io::{BufReader, Write};
use std::os::unix::net::UnixStream; use std::os::unix::net::UnixStream;
use std::process::Command;
use std::sync::atomic::{AtomicBool, AtomicU32, Ordering}; use std::sync::atomic::{AtomicBool, AtomicU32, Ordering};
use std::sync::{Mutex, OnceLock}; use std::sync::{Mutex, OnceLock};
@ -79,10 +80,6 @@ impl MagiskD {
unsafe { MAGISKD.get().unwrap_unchecked() } unsafe { MAGISKD.get().unwrap_unchecked() }
} }
pub fn is_recovery(&self) -> bool {
self.is_recovery
}
pub fn zygisk_enabled(&self) -> bool { pub fn zygisk_enabled(&self) -> bool {
self.zygisk_enabled.load(Ordering::Acquire) self.zygisk_enabled.load(Ordering::Acquire)
} }
@ -217,6 +214,15 @@ impl MagiskD {
} }
} }
} }
pub fn reboot(&self) {
if self.is_recovery {
Command::new("/system/bin/reboot").arg("recovery").status()
} else {
Command::new("/system/bin/reboot").status()
}
.ok();
}
} }
pub fn daemon_entry() { pub fn daemon_entry() {

View File

@ -231,7 +231,7 @@ pub mod ffi {
// FFI for MagiskD // FFI for MagiskD
extern "Rust" { extern "Rust" {
type MagiskD; type MagiskD;
fn is_recovery(&self) -> bool; fn reboot(&self);
fn sdk_int(&self) -> i32; fn sdk_int(&self) -> i32;
fn zygisk_enabled(&self) -> bool; fn zygisk_enabled(&self) -> bool;
fn boot_stage_handler(&self, client: i32, code: i32); fn boot_stage_handler(&self, client: i32, code: i32);
@ -253,8 +253,6 @@ pub mod ffi {
fn get() -> &'static MagiskD; fn get() -> &'static MagiskD;
} }
unsafe extern "C++" { unsafe extern "C++" {
#[allow(dead_code)]
fn reboot(self: &MagiskD);
fn handle_modules(self: &MagiskD) -> Vec<ModuleInfo>; fn handle_modules(self: &MagiskD) -> Vec<ModuleInfo>;
} }
} }