mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-22 16:07:39 +00:00
Cleanup some code
This commit is contained in:
parent
e668dbf6f7
commit
f2846694e1
@ -12,7 +12,7 @@
|
|||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
int fd_pathat(int dirfd, const char *name, char *path, size_t size) {
|
int fd_pathat(int dirfd, const char *name, char *path, size_t size) {
|
||||||
if (fd_path(dirfd, byte_slice(path, size)) < 0)
|
if (fd_path(dirfd, u8_mut_slice(path, size)) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
auto len = strlen(path);
|
auto len = strlen(path);
|
||||||
path[len] = '/';
|
path[len] = '/';
|
||||||
|
@ -15,7 +15,7 @@ static int fmt_and_log_with_rs(LogLevel level, const char *fmt, va_list ap) {
|
|||||||
buf[0] = '\0';
|
buf[0] = '\0';
|
||||||
// Fortify logs when a fatal error occurs. Do not run through fortify again
|
// Fortify logs when a fatal error occurs. Do not run through fortify again
|
||||||
int len = std::min(__call_bypassing_fortify(vsnprintf)(buf, sz, fmt, ap), sz - 1);
|
int len = std::min(__call_bypassing_fortify(vsnprintf)(buf, sz, fmt, ap), sz - 1);
|
||||||
log_with_rs(level, rust::Slice(reinterpret_cast<const uint8_t *>(buf), len));
|
log_with_rs(level, u8_slice(buf, sz));
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,10 +120,15 @@ struct StringCmp {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
rust::Slice<uint8_t> byte_slice(T *buf, size_t sz) {
|
rust::Slice<uint8_t> u8_mut_slice(T *buf, size_t sz) {
|
||||||
return rust::Slice(reinterpret_cast<uint8_t *>(buf), sz);
|
return rust::Slice(reinterpret_cast<uint8_t *>(buf), sz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
rust::Slice<const uint8_t> u8_slice(T *buf, size_t sz) {
|
||||||
|
return rust::Slice(reinterpret_cast<const uint8_t *>(buf), sz);
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t parse_uint64_hex(std::string_view s);
|
uint64_t parse_uint64_hex(std::string_view s);
|
||||||
int parse_int(std::string_view s);
|
int parse_int(std::string_view s);
|
||||||
|
|
||||||
|
@ -105,11 +105,9 @@ bool sepolicy::exists(const char *type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void sepolicy::load_rule_file(const char *file) {
|
void sepolicy::load_rule_file(const char *file) {
|
||||||
rust::load_rule_file(*this, rust::Slice(
|
rust::load_rule_file(*this, u8_slice(file, strlen(file)));
|
||||||
reinterpret_cast<const uint8_t *>(file), strlen(file)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void sepolicy::load_rules(const std::string &rules) {
|
void sepolicy::load_rules(const std::string &rules) {
|
||||||
rust::load_rules(*this, rust::Slice(
|
rust::load_rules(*this, u8_slice(rules.data(), rules.length()));
|
||||||
reinterpret_cast<const uint8_t *>(rules.data()), rules.length()));
|
|
||||||
}
|
}
|
||||||
|
@ -25,29 +25,44 @@ mod ffi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_rules_from_reader<T: BufRead>(mut sepol: Pin<&mut sepolicy>, reader: &mut T) {
|
trait SepolicyExt {
|
||||||
|
fn load_rules(self: Pin<&mut Self>, rules: &[u8]);
|
||||||
|
fn load_rule_file(self: Pin<&mut Self>, filename: &[u8]);
|
||||||
|
fn load_rules_from_reader<T: BufRead>(self: Pin<&mut Self>, reader: &mut T);
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SepolicyExt for sepolicy {
|
||||||
|
fn load_rules(self: Pin<&mut sepolicy>, rules: &[u8]) {
|
||||||
|
let mut cursor = Cursor::new(rules);
|
||||||
|
self.load_rules_from_reader(&mut cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn load_rule_file(self: Pin<&mut sepolicy>, filename: &[u8]) {
|
||||||
|
fn inner(sepol: Pin<&mut sepolicy>, filename: &[u8]) -> anyhow::Result<()> {
|
||||||
|
let filename = str::from_utf8(filename)?;
|
||||||
|
let mut reader = BufReader::new(File::open(filename)?);
|
||||||
|
sepol.load_rules_from_reader(&mut reader);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
inner(self, filename).log().ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn load_rules_from_reader<T: BufRead>(mut self: Pin<&mut sepolicy>, reader: &mut T) {
|
||||||
reader.foreach_lines(|line| {
|
reader.foreach_lines(|line| {
|
||||||
let bytes = line.trim().as_bytes();
|
let bytes = line.trim().as_bytes();
|
||||||
unsafe {
|
unsafe {
|
||||||
sepol
|
self.as_mut()
|
||||||
.as_mut()
|
|
||||||
.parse_statement(bytes.as_ptr().cast(), bytes.len() as i32);
|
.parse_statement(bytes.as_ptr().cast(), bytes.len() as i32);
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
});
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn load_rule_file(sepol: Pin<&mut sepolicy>, filename: &[u8]) {
|
pub fn load_rule_file(sepol: Pin<&mut sepolicy>, filename: &[u8]) {
|
||||||
fn inner(sepol: Pin<&mut sepolicy>, filename: &[u8]) -> anyhow::Result<()> {
|
sepol.load_rule_file(filename);
|
||||||
let filename = str::from_utf8(filename)?;
|
|
||||||
let mut reader = BufReader::new(File::open(filename)?);
|
|
||||||
load_rules_from_reader(sepol, &mut reader);
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
inner(sepol, filename).log().ok();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn load_rules(sepol: Pin<&mut sepolicy>, rules: &[u8]) {
|
pub fn load_rules(sepol: Pin<&mut sepolicy>, rules: &[u8]) {
|
||||||
let mut cursor = Cursor::new(rules);
|
sepol.load_rules(rules);
|
||||||
load_rules_from_reader(sepol, &mut cursor);
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user