You've already forked KernelSU-Next
mirror of
https://github.com/KernelSU-Next/KernelSU-Next.git
synced 2025-08-27 23:46:34 +00:00
manager: clean lkm remnants
ksud: clean clippy warnings
This commit is contained in:
18
.github/workflows/ksud.yml
vendored
18
.github/workflows/ksud.yml
vendored
@@ -9,10 +9,10 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
type: string
|
type: string
|
||||||
default: ubuntu-latest
|
default: ubuntu-latest
|
||||||
pack_lkm:
|
# pack_lkm:
|
||||||
required: false
|
# required: false
|
||||||
type: boolean
|
# type: boolean
|
||||||
default: true
|
# default: true
|
||||||
use_cache:
|
use_cache:
|
||||||
required: false
|
required: false
|
||||||
type: boolean
|
type: boolean
|
||||||
@@ -29,11 +29,11 @@ jobs:
|
|||||||
- name: Download Artifacts
|
- name: Download Artifacts
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
|
|
||||||
- name: Prepare LKM Files
|
# - name: Prepare LKM Files
|
||||||
if: ${{ inputs.pack_lkm }}
|
# if: ${{ inputs.pack_lkm }}
|
||||||
run: |
|
# run: |
|
||||||
cp android*-lkm/*_kernelsu.ko ./userspace/ksud_overlayfs/bin/aarch64/
|
# cp android*-lkm/*_kernelsu.ko ./userspace/ksud_overlayfs/bin/aarch64/
|
||||||
cp android*-lkm/*_kernelsu.ko ./userspace/ksud_magic/bin/aarch64/
|
# cp android*-lkm/*_kernelsu.ko ./userspace/ksud_magic/bin/aarch64/ // DISBAND LKM MODE
|
||||||
|
|
||||||
- name: Import susfsd Libraries
|
- name: Import susfsd Libraries
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -378,12 +378,12 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val lkmMode = Natives.version >= Natives.MINIMAL_SUPPORTED_KERNEL_LKM && Natives.isLkmMode
|
// val lkmMode = Natives.version >= Natives.MINIMAL_SUPPORTED_KERNEL_LKM && Natives.isLkmMode
|
||||||
if (lkmMode) {
|
// if (lkmMode) {
|
||||||
UninstallItem(navigator) {
|
// UninstallItem(navigator) {
|
||||||
loadingDialog.withLoading(it)
|
// loadingDialog.withLoading(it)
|
||||||
}
|
// }
|
||||||
}
|
// } // DISBAND LKM MODE
|
||||||
|
|
||||||
var showBottomsheet by remember { mutableStateOf(false) }
|
var showBottomsheet by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
@@ -511,107 +511,107 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
// @Composable
|
||||||
fun UninstallItem(
|
// fun UninstallItem(
|
||||||
navigator: DestinationsNavigator,
|
// navigator: DestinationsNavigator,
|
||||||
withLoading: suspend (suspend () -> Unit) -> Unit,
|
// withLoading: suspend (suspend () -> Unit) -> Unit,
|
||||||
) {
|
// ) {
|
||||||
val context = LocalContext.current
|
// val context = LocalContext.current
|
||||||
val scope = rememberCoroutineScope()
|
// val scope = rememberCoroutineScope()
|
||||||
val uninstallConfirmDialog = rememberConfirmDialog()
|
// val uninstallConfirmDialog = rememberConfirmDialog()
|
||||||
val showTodo = {
|
// val showTodo = {
|
||||||
Toast.makeText(context, "TODO", Toast.LENGTH_SHORT).show()
|
// Toast.makeText(context, "TODO", Toast.LENGTH_SHORT).show()
|
||||||
}
|
// }
|
||||||
val uninstallDialog = rememberUninstallDialog { uninstallType ->
|
// val uninstallDialog = rememberUninstallDialog { uninstallType ->
|
||||||
scope.launch {
|
// scope.launch {
|
||||||
val result = uninstallConfirmDialog.awaitConfirm(
|
// val result = uninstallConfirmDialog.awaitConfirm(
|
||||||
title = context.getString(uninstallType.title),
|
// title = context.getString(uninstallType.title),
|
||||||
content = context.getString(uninstallType.message)
|
// content = context.getString(uninstallType.message)
|
||||||
)
|
// )
|
||||||
if (result == ConfirmResult.Confirmed) {
|
// if (result == ConfirmResult.Confirmed) {
|
||||||
withLoading {
|
// withLoading {
|
||||||
when (uninstallType) {
|
// when (uninstallType) {
|
||||||
UninstallType.TEMPORARY -> showTodo()
|
// UninstallType.TEMPORARY -> showTodo()
|
||||||
UninstallType.PERMANENT -> navigator.navigate(
|
// UninstallType.PERMANENT -> navigator.navigate(
|
||||||
FlashScreenDestination(FlashIt.FlashUninstall)
|
// FlashScreenDestination(FlashIt.FlashUninstall)
|
||||||
)
|
// )
|
||||||
UninstallType.RESTORE_STOCK_IMAGE -> navigator.navigate(
|
// UninstallType.RESTORE_STOCK_IMAGE -> navigator.navigate(
|
||||||
FlashScreenDestination(FlashIt.FlashRestore)
|
// FlashScreenDestination(FlashIt.FlashRestore)
|
||||||
)
|
// )
|
||||||
UninstallType.NONE -> Unit
|
// UninstallType.NONE -> Unit
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
val uninstall = stringResource(id = R.string.settings_uninstall)
|
// val uninstall = stringResource(id = R.string.settings_uninstall)
|
||||||
ListItem(
|
// ListItem(
|
||||||
leadingContent = {
|
// leadingContent = {
|
||||||
Icon(
|
// Icon(
|
||||||
Icons.Filled.Delete,
|
// Icons.Filled.Delete,
|
||||||
uninstall
|
// uninstall
|
||||||
)
|
// )
|
||||||
},
|
// },
|
||||||
headlineContent = { Text(uninstall) },
|
// headlineContent = { Text(uninstall) },
|
||||||
modifier = Modifier.clickable {
|
// modifier = Modifier.clickable {
|
||||||
uninstallDialog.show()
|
// uninstallDialog.show()
|
||||||
}
|
// }
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
|
|
||||||
enum class UninstallType(val title: Int, val message: Int, val icon: ImageVector) {
|
// enum class UninstallType(val title: Int, val message: Int, val icon: ImageVector) {
|
||||||
TEMPORARY(
|
// TEMPORARY(
|
||||||
R.string.settings_uninstall_temporary,
|
// R.string.settings_uninstall_temporary,
|
||||||
R.string.settings_uninstall_temporary_message,
|
// R.string.settings_uninstall_temporary_message,
|
||||||
Icons.Filled.Delete
|
// Icons.Filled.Delete
|
||||||
),
|
// ),
|
||||||
PERMANENT(
|
// PERMANENT(
|
||||||
R.string.settings_uninstall_permanent,
|
// R.string.settings_uninstall_permanent,
|
||||||
R.string.settings_uninstall_permanent_message,
|
// R.string.settings_uninstall_permanent_message,
|
||||||
Icons.Filled.DeleteForever
|
// Icons.Filled.DeleteForever
|
||||||
),
|
// ),
|
||||||
RESTORE_STOCK_IMAGE(
|
// RESTORE_STOCK_IMAGE(
|
||||||
R.string.settings_restore_stock_image,
|
// R.string.settings_restore_stock_image,
|
||||||
R.string.settings_restore_stock_image_message,
|
// R.string.settings_restore_stock_image_message,
|
||||||
Icons.AutoMirrored.Filled.Undo
|
// Icons.AutoMirrored.Filled.Undo
|
||||||
),
|
// ),
|
||||||
NONE(0, 0, Icons.Filled.Delete)
|
// NONE(0, 0, Icons.Filled.Delete)
|
||||||
}
|
// }
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
// @OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
// @Composable
|
||||||
fun rememberUninstallDialog(onSelected: (UninstallType) -> Unit): DialogHandle {
|
// fun rememberUninstallDialog(onSelected: (UninstallType) -> Unit): DialogHandle {
|
||||||
return rememberCustomDialog { dismiss ->
|
// return rememberCustomDialog { dismiss ->
|
||||||
val options = listOf(
|
// val options = listOf(
|
||||||
// UninstallType.TEMPORARY,
|
// // UninstallType.TEMPORARY,
|
||||||
UninstallType.PERMANENT,
|
// UninstallType.PERMANENT,
|
||||||
UninstallType.RESTORE_STOCK_IMAGE
|
// UninstallType.RESTORE_STOCK_IMAGE
|
||||||
)
|
// )
|
||||||
val listOptions = options.map {
|
// val listOptions = options.map {
|
||||||
ListOption(
|
// ListOption(
|
||||||
titleText = stringResource(it.title),
|
// titleText = stringResource(it.title),
|
||||||
subtitleText = if (it.message != 0) stringResource(it.message) else null,
|
// subtitleText = if (it.message != 0) stringResource(it.message) else null,
|
||||||
icon = IconSource(it.icon)
|
// icon = IconSource(it.icon)
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
|
|
||||||
var selection = UninstallType.NONE
|
// var selection = UninstallType.NONE
|
||||||
ListDialog(state = rememberUseCaseState(visible = true, onFinishedRequest = {
|
// ListDialog(state = rememberUseCaseState(visible = true, onFinishedRequest = {
|
||||||
if (selection != UninstallType.NONE) {
|
// if (selection != UninstallType.NONE) {
|
||||||
onSelected(selection)
|
// onSelected(selection)
|
||||||
}
|
// }
|
||||||
}, onCloseRequest = {
|
// }, onCloseRequest = {
|
||||||
dismiss()
|
// dismiss()
|
||||||
}), header = Header.Default(
|
// }), header = Header.Default(
|
||||||
title = stringResource(R.string.settings_uninstall),
|
// title = stringResource(R.string.settings_uninstall),
|
||||||
), selection = ListSelection.Single(
|
// ), selection = ListSelection.Single(
|
||||||
showRadioButtons = false,
|
// showRadioButtons = false,
|
||||||
options = listOptions,
|
// options = listOptions,
|
||||||
) { index, _ ->
|
// ) { index, _ ->
|
||||||
selection = options[index]
|
// selection = options[index]
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
}
|
// } // DISBAND LKM MODE
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ use crate::{defs::BINARY_DIR, utils};
|
|||||||
|
|
||||||
pub const RESETPROP_PATH: &str = concatcp!(BINARY_DIR, "resetprop");
|
pub const RESETPROP_PATH: &str = concatcp!(BINARY_DIR, "resetprop");
|
||||||
pub const BUSYBOX_PATH: &str = concatcp!(BINARY_DIR, "busybox");
|
pub const BUSYBOX_PATH: &str = concatcp!(BINARY_DIR, "busybox");
|
||||||
|
#[allow(dead_code)]
|
||||||
pub const BOOTCTL_PATH: &str = concatcp!(BINARY_DIR, "bootctl");
|
pub const BOOTCTL_PATH: &str = concatcp!(BINARY_DIR, "bootctl");
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ use crate::defs::{KSU_BACKUP_DIR, KSU_BACKUP_FILE_PREFIX};
|
|||||||
use crate::{assets, utils};
|
use crate::{assets, utils};
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
|
#[allow(dead_code)]
|
||||||
fn ensure_gki_kernel() -> Result<()> {
|
fn ensure_gki_kernel() -> Result<()> {
|
||||||
let version = get_kernel_version()?;
|
let version = get_kernel_version()?;
|
||||||
let is_gki = version.0 == 5 && version.1 >= 10 || version.2 > 5;
|
let is_gki = version.0 == 5 && version.1 >= 10 || version.2 > 5;
|
||||||
@@ -27,6 +28,7 @@ fn ensure_gki_kernel() -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
|
#[allow(dead_code)]
|
||||||
pub fn get_kernel_version() -> Result<(i32, i32, i32)> {
|
pub fn get_kernel_version() -> Result<(i32, i32, i32)> {
|
||||||
let uname = rustix::system::uname();
|
let uname = rustix::system::uname();
|
||||||
let version = uname.release().to_string_lossy();
|
let version = uname.release().to_string_lossy();
|
||||||
@@ -51,6 +53,7 @@ pub fn get_kernel_version() -> Result<(i32, i32, i32)> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
|
#[allow(dead_code)]
|
||||||
fn parse_kmi(version: &str) -> Result<String> {
|
fn parse_kmi(version: &str) -> Result<String> {
|
||||||
let re = Regex::new(r"(.* )?(\d+\.\d+)(\S+)?(android\d+)(.*)")?;
|
let re = Regex::new(r"(.* )?(\d+\.\d+)(\S+)?(android\d+)(.*)")?;
|
||||||
let cap = re
|
let cap = re
|
||||||
@@ -62,6 +65,7 @@ fn parse_kmi(version: &str) -> Result<String> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
|
#[allow(dead_code)]
|
||||||
fn parse_kmi_from_uname() -> Result<String> {
|
fn parse_kmi_from_uname() -> Result<String> {
|
||||||
let uname = rustix::system::uname();
|
let uname = rustix::system::uname();
|
||||||
let version = uname.release().to_string_lossy();
|
let version = uname.release().to_string_lossy();
|
||||||
@@ -69,6 +73,7 @@ fn parse_kmi_from_uname() -> Result<String> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
|
#[allow(dead_code)]
|
||||||
fn parse_kmi_from_modules() -> Result<String> {
|
fn parse_kmi_from_modules() -> Result<String> {
|
||||||
use std::io::BufRead;
|
use std::io::BufRead;
|
||||||
// find a *.ko in /vendor/lib/modules
|
// find a *.ko in /vendor/lib/modules
|
||||||
@@ -87,15 +92,18 @@ fn parse_kmi_from_modules() -> Result<String> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
|
#[allow(dead_code)]
|
||||||
pub fn get_current_kmi() -> Result<String> {
|
pub fn get_current_kmi() -> Result<String> {
|
||||||
parse_kmi_from_uname().or_else(|_| parse_kmi_from_modules())
|
parse_kmi_from_uname().or_else(|_| parse_kmi_from_modules())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(target_os = "android"))]
|
#[cfg(not(target_os = "android"))]
|
||||||
|
#[allow(dead_code)]
|
||||||
pub fn get_current_kmi() -> Result<String> {
|
pub fn get_current_kmi() -> Result<String> {
|
||||||
bail!("Unsupported platform")
|
bail!("Unsupported platform")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn parse_kmi_from_kernel(kernel: &PathBuf, workdir: &Path) -> Result<String> {
|
fn parse_kmi_from_kernel(kernel: &PathBuf, workdir: &Path) -> Result<String> {
|
||||||
use std::fs::{File, copy};
|
use std::fs::{File, copy};
|
||||||
use std::io::{BufReader, Read};
|
use std::io::{BufReader, Read};
|
||||||
@@ -129,6 +137,7 @@ fn parse_kmi_from_kernel(kernel: &PathBuf, workdir: &Path) -> Result<String> {
|
|||||||
bail!("Try to choose LKM manually")
|
bail!("Try to choose LKM manually")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn parse_kmi_from_boot(magiskboot: &Path, image: &PathBuf, workdir: &Path) -> Result<String> {
|
fn parse_kmi_from_boot(magiskboot: &Path, image: &PathBuf, workdir: &Path) -> Result<String> {
|
||||||
let image_path = workdir.join("image");
|
let image_path = workdir.join("image");
|
||||||
|
|
||||||
@@ -153,6 +162,7 @@ fn parse_kmi_from_boot(magiskboot: &Path, image: &PathBuf, workdir: &Path) -> Re
|
|||||||
parse_kmi_from_kernel(&image_path, workdir)
|
parse_kmi_from_kernel(&image_path, workdir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn do_cpio_cmd(magiskboot: &Path, workdir: &Path, cmd: &str) -> Result<()> {
|
fn do_cpio_cmd(magiskboot: &Path, workdir: &Path, cmd: &str) -> Result<()> {
|
||||||
let status = Command::new(magiskboot)
|
let status = Command::new(magiskboot)
|
||||||
.current_dir(workdir)
|
.current_dir(workdir)
|
||||||
@@ -167,6 +177,7 @@ fn do_cpio_cmd(magiskboot: &Path, workdir: &Path, cmd: &str) -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn is_magisk_patched(magiskboot: &Path, workdir: &Path) -> Result<bool> {
|
fn is_magisk_patched(magiskboot: &Path, workdir: &Path) -> Result<bool> {
|
||||||
let status = Command::new(magiskboot)
|
let status = Command::new(magiskboot)
|
||||||
.current_dir(workdir)
|
.current_dir(workdir)
|
||||||
@@ -179,6 +190,7 @@ fn is_magisk_patched(magiskboot: &Path, workdir: &Path) -> Result<bool> {
|
|||||||
Ok(status.code() == Some(1))
|
Ok(status.code() == Some(1))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn is_kernelsu_patched(magiskboot: &Path, workdir: &Path) -> Result<bool> {
|
fn is_kernelsu_patched(magiskboot: &Path, workdir: &Path) -> Result<bool> {
|
||||||
let status = Command::new(magiskboot)
|
let status = Command::new(magiskboot)
|
||||||
.current_dir(workdir)
|
.current_dir(workdir)
|
||||||
@@ -190,6 +202,7 @@ fn is_kernelsu_patched(magiskboot: &Path, workdir: &Path) -> Result<bool> {
|
|||||||
Ok(status.success())
|
Ok(status.success())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn dd<P: AsRef<Path>, Q: AsRef<Path>>(ifile: P, ofile: Q) -> Result<()> {
|
fn dd<P: AsRef<Path>, Q: AsRef<Path>>(ifile: P, ofile: Q) -> Result<()> {
|
||||||
let status = Command::new("dd")
|
let status = Command::new("dd")
|
||||||
.stdout(Stdio::null())
|
.stdout(Stdio::null())
|
||||||
@@ -206,6 +219,7 @@ fn dd<P: AsRef<Path>, Q: AsRef<Path>>(ifile: P, ofile: Q) -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
pub fn restore(
|
pub fn restore(
|
||||||
image: Option<PathBuf>,
|
image: Option<PathBuf>,
|
||||||
magiskboot_path: Option<PathBuf>,
|
magiskboot_path: Option<PathBuf>,
|
||||||
@@ -323,6 +337,7 @@ pub fn restore(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn patch(
|
pub fn patch(
|
||||||
image: Option<PathBuf>,
|
image: Option<PathBuf>,
|
||||||
@@ -342,6 +357,7 @@ pub fn patch(
|
|||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
fn do_patch(
|
fn do_patch(
|
||||||
image: Option<PathBuf>,
|
image: Option<PathBuf>,
|
||||||
@@ -528,6 +544,7 @@ fn do_patch(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
fn calculate_sha1(file_path: impl AsRef<Path>) -> Result<String> {
|
fn calculate_sha1(file_path: impl AsRef<Path>) -> Result<String> {
|
||||||
use sha1::Digest;
|
use sha1::Digest;
|
||||||
@@ -548,6 +565,7 @@ fn calculate_sha1(file_path: impl AsRef<Path>) -> Result<String> {
|
|||||||
Ok(format!("{:x}", result))
|
Ok(format!("{:x}", result))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
fn do_backup(magiskboot: &Path, workdir: &Path, image: &str) -> Result<()> {
|
fn do_backup(magiskboot: &Path, workdir: &Path, image: &str) -> Result<()> {
|
||||||
let sha1 = calculate_sha1(image)?;
|
let sha1 = calculate_sha1(image)?;
|
||||||
@@ -568,6 +586,7 @@ fn do_backup(magiskboot: &Path, workdir: &Path, image: &str) -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
fn clean_backup(sha1: &str) -> Result<()> {
|
fn clean_backup(sha1: &str) -> Result<()> {
|
||||||
println!("- Clean up backup");
|
println!("- Clean up backup");
|
||||||
@@ -591,6 +610,7 @@ fn clean_backup(sha1: &str) -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn flash_boot(bootdevice: &Option<String>, new_boot: PathBuf) -> Result<()> {
|
fn flash_boot(bootdevice: &Option<String>, new_boot: PathBuf) -> Result<()> {
|
||||||
let Some(bootdevice) = bootdevice else {
|
let Some(bootdevice) = bootdevice else {
|
||||||
bail!("boot device not found")
|
bail!("boot device not found")
|
||||||
@@ -604,6 +624,7 @@ fn flash_boot(bootdevice: &Option<String>, new_boot: PathBuf) -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn find_magiskboot(magiskboot_path: Option<PathBuf>, workdir: &Path) -> Result<PathBuf> {
|
fn find_magiskboot(magiskboot_path: Option<PathBuf>, workdir: &Path) -> Result<PathBuf> {
|
||||||
let magiskboot = {
|
let magiskboot = {
|
||||||
if which("magiskboot").is_ok() {
|
if which("magiskboot").is_ok() {
|
||||||
@@ -628,6 +649,7 @@ fn find_magiskboot(magiskboot_path: Option<PathBuf>, workdir: &Path) -> Result<P
|
|||||||
Ok(magiskboot)
|
Ok(magiskboot)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn find_boot_image(
|
fn find_boot_image(
|
||||||
image: &Option<PathBuf>,
|
image: &Option<PathBuf>,
|
||||||
skip_init: bool,
|
skip_init: bool,
|
||||||
|
|||||||
@@ -38,11 +38,11 @@ enum Commands {
|
|||||||
/// Trigger `boot-complete` event
|
/// Trigger `boot-complete` event
|
||||||
BootCompleted,
|
BootCompleted,
|
||||||
|
|
||||||
// /// Install KernelSU Next userspace component to system
|
/// Install KernelSU Next userspace component to system
|
||||||
// Install {
|
Install {
|
||||||
// #[arg(long, default_value = None)]
|
#[arg(long, default_value = None)]
|
||||||
// magiskboot: Option<PathBuf>,
|
magiskboot: Option<PathBuf>,
|
||||||
// }, // DISBAND LKM MODE
|
},
|
||||||
|
|
||||||
/// Uninstall KernelSU Next modules and itself(LKM Only)
|
/// Uninstall KernelSU Next modules and itself(LKM Only)
|
||||||
Uninstall {
|
Uninstall {
|
||||||
@@ -320,7 +320,7 @@ pub fn run() -> Result<()> {
|
|||||||
Module::List => module::list_modules(),
|
Module::List => module::list_modules(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Commands::Install { magiskboot } => utils::install(magiskboot), // DISBAND LKM MODE
|
Commands::Install { magiskboot } => utils::install(magiskboot),
|
||||||
Commands::Uninstall { magiskboot } => utils::uninstall(magiskboot),
|
Commands::Uninstall { magiskboot } => utils::uninstall(magiskboot),
|
||||||
Commands::Sepolicy { command } => match command {
|
Commands::Sepolicy { command } => match command {
|
||||||
Sepolicy::Patch { sepolicy } => crate::sepolicy::live_patch(&sepolicy),
|
Sepolicy::Patch { sepolicy } => crate::sepolicy::live_patch(&sepolicy),
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ use crate::{defs::BINARY_DIR, utils};
|
|||||||
|
|
||||||
pub const RESETPROP_PATH: &str = concatcp!(BINARY_DIR, "resetprop");
|
pub const RESETPROP_PATH: &str = concatcp!(BINARY_DIR, "resetprop");
|
||||||
pub const BUSYBOX_PATH: &str = concatcp!(BINARY_DIR, "busybox");
|
pub const BUSYBOX_PATH: &str = concatcp!(BINARY_DIR, "busybox");
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
pub const BOOTCTL_PATH: &str = concatcp!(BINARY_DIR, "bootctl");
|
pub const BOOTCTL_PATH: &str = concatcp!(BINARY_DIR, "bootctl");
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ use crate::defs::{KSU_BACKUP_DIR, KSU_BACKUP_FILE_PREFIX};
|
|||||||
use crate::{assets, utils};
|
use crate::{assets, utils};
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
|
#[allow(dead_code)]
|
||||||
fn ensure_gki_kernel() -> Result<()> {
|
fn ensure_gki_kernel() -> Result<()> {
|
||||||
let version = get_kernel_version()?;
|
let version = get_kernel_version()?;
|
||||||
let is_gki = version.0 == 5 && version.1 >= 10 || version.2 > 5;
|
let is_gki = version.0 == 5 && version.1 >= 10 || version.2 > 5;
|
||||||
@@ -27,6 +28,7 @@ fn ensure_gki_kernel() -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
|
#[allow(dead_code)]
|
||||||
pub fn get_kernel_version() -> Result<(i32, i32, i32)> {
|
pub fn get_kernel_version() -> Result<(i32, i32, i32)> {
|
||||||
let uname = rustix::system::uname();
|
let uname = rustix::system::uname();
|
||||||
let version = uname.release().to_string_lossy();
|
let version = uname.release().to_string_lossy();
|
||||||
@@ -92,10 +94,12 @@ pub fn get_current_kmi() -> Result<String> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(target_os = "android"))]
|
#[cfg(not(target_os = "android"))]
|
||||||
|
#[allow(dead_code)]
|
||||||
pub fn get_current_kmi() -> Result<String> {
|
pub fn get_current_kmi() -> Result<String> {
|
||||||
bail!("Unsupported platform")
|
bail!("Unsupported platform")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn parse_kmi_from_kernel(kernel: &PathBuf, workdir: &Path) -> Result<String> {
|
fn parse_kmi_from_kernel(kernel: &PathBuf, workdir: &Path) -> Result<String> {
|
||||||
use std::fs::{File, copy};
|
use std::fs::{File, copy};
|
||||||
use std::io::{BufReader, Read};
|
use std::io::{BufReader, Read};
|
||||||
@@ -129,6 +133,7 @@ fn parse_kmi_from_kernel(kernel: &PathBuf, workdir: &Path) -> Result<String> {
|
|||||||
bail!("Try to choose LKM manually")
|
bail!("Try to choose LKM manually")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn parse_kmi_from_boot(magiskboot: &Path, image: &PathBuf, workdir: &Path) -> Result<String> {
|
fn parse_kmi_from_boot(magiskboot: &Path, image: &PathBuf, workdir: &Path) -> Result<String> {
|
||||||
let image_path = workdir.join("image");
|
let image_path = workdir.join("image");
|
||||||
|
|
||||||
@@ -153,6 +158,7 @@ fn parse_kmi_from_boot(magiskboot: &Path, image: &PathBuf, workdir: &Path) -> Re
|
|||||||
parse_kmi_from_kernel(&image_path, workdir)
|
parse_kmi_from_kernel(&image_path, workdir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn do_cpio_cmd(magiskboot: &Path, workdir: &Path, cmd: &str) -> Result<()> {
|
fn do_cpio_cmd(magiskboot: &Path, workdir: &Path, cmd: &str) -> Result<()> {
|
||||||
let status = Command::new(magiskboot)
|
let status = Command::new(magiskboot)
|
||||||
.current_dir(workdir)
|
.current_dir(workdir)
|
||||||
@@ -167,6 +173,7 @@ fn do_cpio_cmd(magiskboot: &Path, workdir: &Path, cmd: &str) -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn is_magisk_patched(magiskboot: &Path, workdir: &Path) -> Result<bool> {
|
fn is_magisk_patched(magiskboot: &Path, workdir: &Path) -> Result<bool> {
|
||||||
let status = Command::new(magiskboot)
|
let status = Command::new(magiskboot)
|
||||||
.current_dir(workdir)
|
.current_dir(workdir)
|
||||||
@@ -179,6 +186,7 @@ fn is_magisk_patched(magiskboot: &Path, workdir: &Path) -> Result<bool> {
|
|||||||
Ok(status.code() == Some(1))
|
Ok(status.code() == Some(1))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn is_kernelsu_patched(magiskboot: &Path, workdir: &Path) -> Result<bool> {
|
fn is_kernelsu_patched(magiskboot: &Path, workdir: &Path) -> Result<bool> {
|
||||||
let status = Command::new(magiskboot)
|
let status = Command::new(magiskboot)
|
||||||
.current_dir(workdir)
|
.current_dir(workdir)
|
||||||
@@ -190,6 +198,7 @@ fn is_kernelsu_patched(magiskboot: &Path, workdir: &Path) -> Result<bool> {
|
|||||||
Ok(status.success())
|
Ok(status.success())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn dd<P: AsRef<Path>, Q: AsRef<Path>>(ifile: P, ofile: Q) -> Result<()> {
|
fn dd<P: AsRef<Path>, Q: AsRef<Path>>(ifile: P, ofile: Q) -> Result<()> {
|
||||||
let status = Command::new("dd")
|
let status = Command::new("dd")
|
||||||
.stdout(Stdio::null())
|
.stdout(Stdio::null())
|
||||||
@@ -323,6 +332,7 @@ pub fn restore(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn patch(
|
pub fn patch(
|
||||||
image: Option<PathBuf>,
|
image: Option<PathBuf>,
|
||||||
@@ -342,6 +352,7 @@ pub fn patch(
|
|||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
fn do_patch(
|
fn do_patch(
|
||||||
image: Option<PathBuf>,
|
image: Option<PathBuf>,
|
||||||
@@ -529,6 +540,7 @@ fn do_patch(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
|
#[allow(dead_code)]
|
||||||
fn calculate_sha1(file_path: impl AsRef<Path>) -> Result<String> {
|
fn calculate_sha1(file_path: impl AsRef<Path>) -> Result<String> {
|
||||||
use sha1::Digest;
|
use sha1::Digest;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
@@ -549,6 +561,7 @@ fn calculate_sha1(file_path: impl AsRef<Path>) -> Result<String> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
|
#[allow(dead_code)]
|
||||||
fn do_backup(magiskboot: &Path, workdir: &Path, image: &str) -> Result<()> {
|
fn do_backup(magiskboot: &Path, workdir: &Path, image: &str) -> Result<()> {
|
||||||
let sha1 = calculate_sha1(image)?;
|
let sha1 = calculate_sha1(image)?;
|
||||||
let filename = format!("{KSU_BACKUP_FILE_PREFIX}{sha1}");
|
let filename = format!("{KSU_BACKUP_FILE_PREFIX}{sha1}");
|
||||||
@@ -569,6 +582,7 @@ fn do_backup(magiskboot: &Path, workdir: &Path, image: &str) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
|
#[allow(dead_code)]
|
||||||
fn clean_backup(sha1: &str) -> Result<()> {
|
fn clean_backup(sha1: &str) -> Result<()> {
|
||||||
println!("- Clean up backup");
|
println!("- Clean up backup");
|
||||||
let backup_name = format!("{}{}", KSU_BACKUP_FILE_PREFIX, sha1);
|
let backup_name = format!("{}{}", KSU_BACKUP_FILE_PREFIX, sha1);
|
||||||
@@ -591,6 +605,7 @@ fn clean_backup(sha1: &str) -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn flash_boot(bootdevice: &Option<String>, new_boot: PathBuf) -> Result<()> {
|
fn flash_boot(bootdevice: &Option<String>, new_boot: PathBuf) -> Result<()> {
|
||||||
let Some(bootdevice) = bootdevice else {
|
let Some(bootdevice) = bootdevice else {
|
||||||
bail!("boot device not found")
|
bail!("boot device not found")
|
||||||
@@ -604,6 +619,7 @@ fn flash_boot(bootdevice: &Option<String>, new_boot: PathBuf) -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn find_magiskboot(magiskboot_path: Option<PathBuf>, workdir: &Path) -> Result<PathBuf> {
|
fn find_magiskboot(magiskboot_path: Option<PathBuf>, workdir: &Path) -> Result<PathBuf> {
|
||||||
let magiskboot = {
|
let magiskboot = {
|
||||||
if which("magiskboot").is_ok() {
|
if which("magiskboot").is_ok() {
|
||||||
@@ -628,6 +644,7 @@ fn find_magiskboot(magiskboot_path: Option<PathBuf>, workdir: &Path) -> Result<P
|
|||||||
Ok(magiskboot)
|
Ok(magiskboot)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn find_boot_image(
|
fn find_boot_image(
|
||||||
image: &Option<PathBuf>,
|
image: &Option<PathBuf>,
|
||||||
skip_init: bool,
|
skip_init: bool,
|
||||||
@@ -677,6 +694,7 @@ fn find_boot_image(
|
|||||||
Ok((bootimage, bootdevice))
|
Ok((bootimage, bootdevice))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn post_ota() -> Result<()> {
|
fn post_ota() -> Result<()> {
|
||||||
use crate::defs::ADB_DIR;
|
use crate::defs::ADB_DIR;
|
||||||
use assets::BOOTCTL_PATH;
|
use assets::BOOTCTL_PATH;
|
||||||
|
|||||||
@@ -34,11 +34,11 @@ enum Commands {
|
|||||||
/// Trigger `boot-complete` event
|
/// Trigger `boot-complete` event
|
||||||
BootCompleted,
|
BootCompleted,
|
||||||
|
|
||||||
// /// Install KernelSU Next userspace component to system
|
/// Install KernelSU Next userspace component to system
|
||||||
// Install {
|
Install {
|
||||||
// #[arg(long, default_value = None)]
|
#[arg(long, default_value = None)]
|
||||||
// magiskboot: Option<PathBuf>,
|
magiskboot: Option<PathBuf>,
|
||||||
// }, // DISBAND LKM MODE
|
},
|
||||||
|
|
||||||
/// Uninstall KernelSU Next modules and itself(LKM Only)
|
/// Uninstall KernelSU Next modules and itself(LKM Only)
|
||||||
Uninstall {
|
Uninstall {
|
||||||
@@ -327,7 +327,7 @@ pub fn run() -> Result<()> {
|
|||||||
Module::Shrink => module::shrink_ksu_images(),
|
Module::Shrink => module::shrink_ksu_images(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Commands::Install { magiskboot } => utils::install(magiskboot), // DISBAND LKM MODE
|
Commands::Install { magiskboot } => utils::install(magiskboot), // DISBAND LKM MODE
|
||||||
Commands::Uninstall { magiskboot } => utils::uninstall(magiskboot),
|
Commands::Uninstall { magiskboot } => utils::uninstall(magiskboot),
|
||||||
Commands::Sepolicy { command } => match command {
|
Commands::Sepolicy { command } => match command {
|
||||||
Sepolicy::Patch { sepolicy } => crate::sepolicy::live_patch(&sepolicy),
|
Sepolicy::Patch { sepolicy } => crate::sepolicy::live_patch(&sepolicy),
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ pub const PROFILE_TEMPLATE_DIR: &str = concatcp!(PROFILE_DIR, "templates/");
|
|||||||
pub const KSURC_PATH: &str = concatcp!(WORKING_DIR, ".ksurc");
|
pub const KSURC_PATH: &str = concatcp!(WORKING_DIR, ".ksurc");
|
||||||
pub const KSU_OVERLAY_SOURCE: &str = "KSU";
|
pub const KSU_OVERLAY_SOURCE: &str = "KSU";
|
||||||
pub const DAEMON_PATH: &str = concatcp!(ADB_DIR, "ksud");
|
pub const DAEMON_PATH: &str = concatcp!(ADB_DIR, "ksud");
|
||||||
|
#[allow(dead_code)]
|
||||||
pub const MAGISKBOOT_PATH: &str = concatcp!(BINARY_DIR, "magiskboot");
|
pub const MAGISKBOOT_PATH: &str = concatcp!(BINARY_DIR, "magiskboot");
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
|
|||||||
Reference in New Issue
Block a user