mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-05-01 06:54:27 +02:00
handle subcommand help
This commit is contained in:
parent
8ae7641e8a
commit
f4204c3509
@ -1,12 +1,17 @@
|
|||||||
use crate::payload::extract_boot_from_payload;
|
use crate::cpio::{cpio_commands, print_cpio_usage};
|
||||||
use crate::sign::{sha1_hash, verify_boot_image};
|
use crate::dtb::{dtb_commands, print_dtb_usage};
|
||||||
use argh::FromArgs;
|
use crate::ffi::{
|
||||||
use base::{cmdline_logging, libc::umask, log_err, map_args, raw_cstr, EarlyExitExt, LoggedResult, MappedFile, ResultExt, Utf8CStr};
|
cleanup, compress, decompress_raw, formats, repack, sign, split_image_dtb, unpack, verify
|
||||||
use std::ffi::c_char;
|
};
|
||||||
use crate::cpio::cpio_commands;
|
|
||||||
use crate::dtb::dtb_commands;
|
|
||||||
use crate::ffi::{cleanup, compress, decompress_raw, formats, repack, sign, split_image_dtb, unpack, verify};
|
|
||||||
use crate::patch::hexpatch;
|
use crate::patch::hexpatch;
|
||||||
|
use crate::payload::extract_boot_from_payload;
|
||||||
|
use crate::sign::sha1_hash;
|
||||||
|
use argh::FromArgs;
|
||||||
|
use base::{
|
||||||
|
cmdline_logging, libc::umask, log_err, map_args, raw_cstr, EarlyExitExt, LoggedResult,
|
||||||
|
MappedFile, ResultExt, Utf8CStr,
|
||||||
|
};
|
||||||
|
use std::ffi::c_char;
|
||||||
|
|
||||||
#[derive(FromArgs)]
|
#[derive(FromArgs)]
|
||||||
struct Cli {
|
struct Cli {
|
||||||
@ -245,7 +250,8 @@ Supported actions:
|
|||||||
|
|
||||||
{1}
|
{1}
|
||||||
"#,
|
"#,
|
||||||
cmd, formats()
|
cmd,
|
||||||
|
formats()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -274,14 +280,22 @@ pub unsafe extern "C" fn main(
|
|||||||
cmds[3] = fmt;
|
cmds[3] = fmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut cli = Cli::from_args(&[cmds[0]], &cmds[1..]).on_early_exit(|| print_usage(cmds[0]));
|
let mut cli = Cli::from_args(&[cmds[0]], &cmds[1..]).on_early_exit(|| match cmds.get(1) {
|
||||||
|
Some(&"dtb") => print_dtb_usage(),
|
||||||
|
Some(&"cpio") => print_cpio_usage(),
|
||||||
|
_ => print_usage(cmds[0]),
|
||||||
|
});
|
||||||
match cli.action {
|
match cli.action {
|
||||||
Action::Unpack(Unpack {
|
Action::Unpack(Unpack {
|
||||||
no_decompress,
|
no_decompress,
|
||||||
dump_header,
|
dump_header,
|
||||||
ref mut img,
|
ref mut img,
|
||||||
}) => {
|
}) => {
|
||||||
return unpack(Utf8CStr::from_string(img).as_ptr(), no_decompress, dump_header);
|
return unpack(
|
||||||
|
Utf8CStr::from_string(img).as_ptr(),
|
||||||
|
no_decompress,
|
||||||
|
dump_header,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
Action::Repack(Repack {
|
Action::Repack(Repack {
|
||||||
no_compress,
|
no_compress,
|
||||||
@ -310,7 +324,9 @@ pub unsafe extern "C" fn main(
|
|||||||
};
|
};
|
||||||
return sign(
|
return sign(
|
||||||
Utf8CStr::from_string(img).as_ptr(),
|
Utf8CStr::from_string(img).as_ptr(),
|
||||||
args.first_mut().map(|x| Utf8CStr::from_string(x).as_ptr()).unwrap_or(raw_cstr!("/boot")),
|
args.first_mut()
|
||||||
|
.map(|x| Utf8CStr::from_string(x).as_ptr())
|
||||||
|
.unwrap_or(raw_cstr!("/boot")),
|
||||||
pem, pk8
|
pem, pk8
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -337,18 +353,14 @@ pub unsafe extern "C" fn main(
|
|||||||
Err(log_err!("Failed to patch"))?;
|
Err(log_err!("Failed to patch"))?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Action::Cpio(Cpio {
|
Action::Cpio(Cpio { ref cmds }) => {
|
||||||
ref cmds,
|
|
||||||
}) => {
|
|
||||||
return if cpio_commands(&cmds.iter().map(|x| x.as_str()).collect::<Vec<_>>()) {
|
return if cpio_commands(&cmds.iter().map(|x| x.as_str()).collect::<Vec<_>>()) {
|
||||||
0
|
0
|
||||||
} else {
|
} else {
|
||||||
1
|
1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Action::Dtb(Dtb {
|
Action::Dtb(Dtb { ref cmds }) => {
|
||||||
ref cmds,
|
|
||||||
}) => {
|
|
||||||
return if dtb_commands(&cmds.iter().map(|x| x.as_str()).collect::<Vec<_>>()) {
|
return if dtb_commands(&cmds.iter().map(|x| x.as_str()).collect::<Vec<_>>()) {
|
||||||
0
|
0
|
||||||
} else {
|
} else {
|
||||||
@ -378,14 +390,25 @@ pub unsafe extern "C" fn main(
|
|||||||
ref mut file,
|
ref mut file,
|
||||||
ref mut out,
|
ref mut out,
|
||||||
}) => {
|
}) => {
|
||||||
decompress_raw(Utf8CStr::from_string(file).as_mut_ptr(), out.as_mut().map(|x| Utf8CStr::from_string(x).as_ptr()).unwrap_or(std::ptr::null()));
|
decompress_raw(
|
||||||
|
Utf8CStr::from_string(file).as_mut_ptr(),
|
||||||
|
out.as_mut()
|
||||||
|
.map(|x| Utf8CStr::from_string(x).as_ptr())
|
||||||
|
.unwrap_or(std::ptr::null()),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
Action::Compress(Compress {
|
Action::Compress(Compress {
|
||||||
ref mut file,
|
ref mut file,
|
||||||
ref mut format,
|
ref mut format,
|
||||||
ref mut out,
|
ref mut out,
|
||||||
}) => {
|
}) => {
|
||||||
compress(Utf8CStr::from_string(format).as_ptr(), Utf8CStr::from_string(file).as_ptr(), out.as_mut().map(|x| Utf8CStr::from_string(x).as_ptr()).unwrap_or(std::ptr::null()));
|
compress(
|
||||||
|
Utf8CStr::from_string(format).as_ptr(),
|
||||||
|
Utf8CStr::from_string(file).as_ptr(),
|
||||||
|
out.as_mut()
|
||||||
|
.map(|x| Utf8CStr::from_string(x).as_ptr())
|
||||||
|
.unwrap_or(std::ptr::null()),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -15,13 +15,13 @@ use num_traits::cast::AsPrimitive;
|
|||||||
use size::{Base, Size, Style};
|
use size::{Base, Size, Style};
|
||||||
|
|
||||||
use base::libc::{
|
use base::libc::{
|
||||||
dev_t, gid_t, major, makedev, minor, mknod, mode_t, uid_t, O_CLOEXEC, O_CREAT,
|
dev_t, gid_t, major, makedev, minor, mknod, mode_t, uid_t, O_CLOEXEC, O_CREAT, O_RDONLY,
|
||||||
O_RDONLY, O_TRUNC, O_WRONLY, S_IFBLK, S_IFCHR, S_IFDIR, S_IFLNK, S_IFMT, S_IFREG, S_IRGRP,
|
O_TRUNC, O_WRONLY, S_IFBLK, S_IFCHR, S_IFDIR, S_IFLNK, S_IFMT, S_IFREG, S_IRGRP, S_IROTH,
|
||||||
S_IROTH, S_IRUSR, S_IWGRP, S_IWOTH, S_IWUSR, S_IXGRP, S_IXOTH, S_IXUSR,
|
S_IRUSR, S_IWGRP, S_IWOTH, S_IWUSR, S_IXGRP, S_IXOTH, S_IXUSR,
|
||||||
};
|
};
|
||||||
use base::{
|
use base::{
|
||||||
cstr_buf, log_err, BytesExt, EarlyExitExt, FsPath, LoggedResult, MappedFile,
|
cstr_buf, log_err, BytesExt, EarlyExitExt, FsPath, LoggedResult, MappedFile, ResultExt, Utf8CStr,
|
||||||
ResultExt, Utf8CStr, Utf8CStrBuf, WriteExt,
|
Utf8CStrBuf, WriteExt,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::check_env;
|
use crate::check_env;
|
||||||
@ -150,7 +150,7 @@ struct List {
|
|||||||
recursive: bool,
|
recursive: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn print_cpio_usage() {
|
pub(crate) fn print_cpio_usage() {
|
||||||
eprintln!(
|
eprintln!(
|
||||||
r#"Usage: magiskboot cpio <incpio> [commands...]
|
r#"Usage: magiskboot cpio <incpio> [commands...]
|
||||||
|
|
||||||
@ -756,7 +756,7 @@ impl Display for CpioEntry {
|
|||||||
pub fn cpio_commands(cmds: &Vec<&str>) -> bool {
|
pub fn cpio_commands(cmds: &Vec<&str>) -> bool {
|
||||||
let res: LoggedResult<()> = try {
|
let res: LoggedResult<()> = try {
|
||||||
let mut cli =
|
let mut cli =
|
||||||
CpioCli::from_args(&["magiskboot", "cpio"], &cmds).on_early_exit(print_cpio_usage);
|
CpioCli::from_args(&["magiskboot", "cpio"], cmds).on_early_exit(print_cpio_usage);
|
||||||
|
|
||||||
let file = Utf8CStr::from_string(&mut cli.file);
|
let file = Utf8CStr::from_string(&mut cli.file);
|
||||||
let mut cpio = if FsPath::from(file).exists() {
|
let mut cpio = if FsPath::from(file).exists() {
|
||||||
|
@ -6,9 +6,7 @@ use fdt::{
|
|||||||
Fdt, FdtError,
|
Fdt, FdtError,
|
||||||
};
|
};
|
||||||
|
|
||||||
use base::{
|
use base::{EarlyExitExt, LoggedResult, MappedFile, ResultExt, Utf8CStr};
|
||||||
EarlyExitExt, LoggedResult, MappedFile, ResultExt, Utf8CStr,
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::{check_env, patch::patch_verity};
|
use crate::{check_env, patch::patch_verity};
|
||||||
|
|
||||||
@ -43,7 +41,7 @@ struct Patch {}
|
|||||||
#[argh(subcommand, name = "test")]
|
#[argh(subcommand, name = "test")]
|
||||||
struct Test {}
|
struct Test {}
|
||||||
|
|
||||||
fn print_dtb_usage() {
|
pub(crate) fn print_dtb_usage() {
|
||||||
eprintln!(
|
eprintln!(
|
||||||
r#"Usage: magiskboot dtb <file> <action> [args...]
|
r#"Usage: magiskboot dtb <file> <action> [args...]
|
||||||
Do dtb related actions to <file>.
|
Do dtb related actions to <file>.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user