mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-11-23 18:15:30 +00:00
parent
1e53a5555e
commit
44643ad7b3
@ -61,8 +61,7 @@ struct mmap_data : public byte_data {
|
||||
extern "C" {
|
||||
|
||||
int mkdirs(const char *path, mode_t mode);
|
||||
ssize_t canonical_path(const char *path, char *buf, size_t bufsiz);
|
||||
ssize_t read_link(const char *pathname, char *buf, size_t bufsiz);
|
||||
ssize_t canonical_path(const char * __restrict__ path, char * __restrict__ buf, size_t bufsiz);
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@ -74,7 +73,8 @@ void mv_dir(int src, int dest);
|
||||
void cp_afc(const char *src, const char *dest);
|
||||
void link_path(const char *src, const char *dest);
|
||||
void link_dir(int src, int dest);
|
||||
static inline ssize_t realpath(const char *path, char *buf, size_t bufsiz) {
|
||||
static inline ssize_t realpath(
|
||||
const char * __restrict__ path, char * __restrict__ buf, size_t bufsiz) {
|
||||
return canonical_path(path, buf, bufsiz);
|
||||
}
|
||||
int getattr(const char *path, file_attr *a);
|
||||
|
@ -12,8 +12,7 @@ pub mod unsafe_impl {
|
||||
|
||||
use crate::slice_from_ptr_mut;
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn read_link(path: *const c_char, buf: *mut u8, bufsz: usize) -> isize {
|
||||
pub unsafe fn readlink(path: *const c_char, buf: *mut u8, bufsz: usize) -> isize {
|
||||
let r = libc::readlink(path, buf.cast(), bufsz - 1);
|
||||
if r >= 0 {
|
||||
*buf.offset(r) = b'\0';
|
||||
@ -68,7 +67,7 @@ macro_rules! xopen_fd {
|
||||
}
|
||||
|
||||
pub fn readlink(path: &CStr, data: &mut [u8]) -> isize {
|
||||
unsafe { unsafe_impl::read_link(path.as_ptr(), data.as_mut_ptr(), data.len()) }
|
||||
unsafe { unsafe_impl::readlink(path.as_ptr(), data.as_mut_ptr(), data.len()) }
|
||||
}
|
||||
|
||||
pub fn fd_path(fd: RawFd, buf: &mut [u8]) -> isize {
|
||||
|
@ -40,8 +40,9 @@ int xfstatat(int dirfd, const char *pathname, struct stat *buf, int flags);
|
||||
int xdup(int fd);
|
||||
int xdup2(int oldfd, int newfd);
|
||||
int xdup3(int oldfd, int newfd, int flags);
|
||||
ssize_t xreadlink(const char *pathname, char *buf, size_t bufsiz);
|
||||
ssize_t xreadlinkat(int dirfd, const char *pathname, char *buf, size_t bufsiz);
|
||||
ssize_t xreadlink(const char * __restrict__ pathname, char * __restrict__ buf, size_t bufsiz);
|
||||
ssize_t xreadlinkat(
|
||||
int dirfd, const char * __restrict__ pathname, char * __restrict__ buf, size_t bufsiz);
|
||||
int xsymlink(const char *target, const char *linkpath);
|
||||
int xsymlinkat(const char *target, int newdirfd, const char *linkpath);
|
||||
int xlinkat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath, int flags);
|
||||
@ -58,7 +59,7 @@ void *xmmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset
|
||||
ssize_t xsendfile(int out_fd, int in_fd, off_t *offset, size_t count);
|
||||
pid_t xfork();
|
||||
int xpoll(pollfd *fds, nfds_t nfds, int timeout);
|
||||
ssize_t xrealpath(const char *path, char *buf, size_t bufsiz);
|
||||
int xmknod(const char *pathname, mode_t mode, dev_t dev);
|
||||
ssize_t xrealpath(const char * __restrict__ path, char * __restrict__ buf, size_t bufsiz);
|
||||
int xmknod(const char * pathname, mode_t mode, dev_t dev);
|
||||
|
||||
} // extern "C"
|
||||
|
@ -16,7 +16,7 @@ mod unsafe_impl {
|
||||
use cfg_if::cfg_if;
|
||||
use libc::{c_char, nfds_t, off_t, pollfd};
|
||||
|
||||
use crate::unsafe_impl::read_link;
|
||||
use crate::unsafe_impl::readlink;
|
||||
use crate::{perror, ptr_to_str, slice_from_ptr, slice_from_ptr_mut};
|
||||
|
||||
#[no_mangle]
|
||||
@ -41,7 +41,7 @@ mod unsafe_impl {
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn xreadlink(path: *const c_char, buf: *mut u8, bufsz: usize) -> isize {
|
||||
let r = read_link(path, buf, bufsz);
|
||||
let r = readlink(path, buf, bufsz);
|
||||
if r < 0 {
|
||||
perror!("readlink");
|
||||
}
|
||||
|
@ -161,8 +161,10 @@ static vector<int> get_module_fds(bool is_64_bit) {
|
||||
}
|
||||
|
||||
static bool get_exe(int pid, char *buf, size_t sz) {
|
||||
ssprintf(buf, sz, "/proc/%d/exe", pid);
|
||||
return xreadlink(buf, buf, sz) > 0;
|
||||
char exe[128];
|
||||
if (ssprintf(exe, sizeof(exe), "/proc/%d/exe", pid) < 0)
|
||||
return false;
|
||||
return xreadlink(exe, buf, sz) > 0;
|
||||
}
|
||||
|
||||
static pthread_mutex_t zygiskd_lock = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
Loading…
Reference in New Issue
Block a user