mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-23 08:27:40 +00:00
58 lines
1.3 KiB
Rust
58 lines
1.3 KiB
Rust
|
use libc::{c_char, c_uint, mode_t};
|
||
|
|
||
|
use crate::{perror, ptr_to_str};
|
||
|
|
||
|
#[no_mangle]
|
||
|
pub extern "C" fn xfopen(path: *const c_char, mode: *const c_char) -> *mut libc::FILE {
|
||
|
unsafe {
|
||
|
let fp = libc::fopen(path, mode);
|
||
|
if fp.is_null() {
|
||
|
perror!("fopen: {}", ptr_to_str(path));
|
||
|
}
|
||
|
return fp;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[no_mangle]
|
||
|
pub extern "C" fn xfdopen(fd: i32, mode: *const c_char) -> *mut libc::FILE {
|
||
|
unsafe {
|
||
|
let fp = libc::fdopen(fd, mode);
|
||
|
if fp.is_null() {
|
||
|
perror!("fdopen");
|
||
|
}
|
||
|
return fp;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[no_mangle]
|
||
|
pub extern "C" fn xopen(path: *const c_char, flags: i32, mode: mode_t) -> i32 {
|
||
|
unsafe {
|
||
|
let r = libc::open(path, flags, mode as c_uint);
|
||
|
if r < 0 {
|
||
|
perror!("open: {}", ptr_to_str(path));
|
||
|
}
|
||
|
return r;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[no_mangle]
|
||
|
pub extern "C" fn xopenat(dirfd: i32, path: *const c_char, flags: i32, mode: mode_t) -> i32 {
|
||
|
unsafe {
|
||
|
let r = libc::openat(dirfd, path, flags, mode as c_uint);
|
||
|
if r < 0 {
|
||
|
perror!("openat: {}", ptr_to_str(path));
|
||
|
}
|
||
|
return r;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[macro_export]
|
||
|
macro_rules! xopen {
|
||
|
($path:expr, $flags:expr) => {
|
||
|
xopen($path, $flags, 0)
|
||
|
};
|
||
|
($path:expr, $flags:expr, $mode:expr) => {
|
||
|
xopen($path, $flags, $mode)
|
||
|
};
|
||
|
}
|