mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-12-02 17:51:51 +00:00
Install one single ABI in ramdisk
This commit is contained in:
@@ -41,6 +41,12 @@ static bool magisk_env() {
|
||||
cp_afc(DATABIN "/busybox", buf);
|
||||
exec_command_async(buf, "--install", "-s", dirname(buf));
|
||||
|
||||
// magisk32 and magiskpolicy are not installed into ramdisk and has to be copied
|
||||
// from data to magisk tmp
|
||||
if (access(DATABIN "/magisk32", X_OK) == 0) {
|
||||
ssprintf(buf, sizeof(buf), "%s/magisk32", get_magisk_tmp());
|
||||
cp_afc(DATABIN "/magisk32", buf);
|
||||
}
|
||||
if (access(DATABIN "/magiskpolicy", X_OK) == 0) {
|
||||
ssprintf(buf, sizeof(buf), "%s/magiskpolicy", get_magisk_tmp());
|
||||
cp_afc(DATABIN "/magiskpolicy", buf);
|
||||
|
||||
@@ -203,11 +203,16 @@ public:
|
||||
|
||||
class zygisk_node : public node_entry {
|
||||
public:
|
||||
explicit zygisk_node(const char *name, bool is64bit) : node_entry(name, DT_REG, this),
|
||||
is64bit(is64bit) {}
|
||||
explicit zygisk_node(const char *name, bool is64bit)
|
||||
: node_entry(name, DT_REG, this), is64bit(is64bit) {}
|
||||
|
||||
void mount() override {
|
||||
const string src = get_magisk_tmp() + "/magisk"s + (is64bit ? "64" : "32");
|
||||
#if defined(__LP64__)
|
||||
const string src = get_magisk_tmp() + "/magisk"s + (is64bit ? "" : "32");
|
||||
#else
|
||||
const string src = get_magisk_tmp() + "/magisk"s;
|
||||
(void) is64bit;
|
||||
#endif
|
||||
create_and_mount("zygisk", src, true);
|
||||
}
|
||||
|
||||
|
||||
@@ -97,7 +97,11 @@ static void connect_companion(int client, bool is_64_bit) {
|
||||
zygiskd_socket = fds[0];
|
||||
if (fork_dont_care() == 0) {
|
||||
char exe[64];
|
||||
ssprintf(exe, sizeof(exe), "%s/magisk%s", get_magisk_tmp(), (is_64_bit ? "64" : "32"));
|
||||
#if defined(__LP64__)
|
||||
ssprintf(exe, sizeof(exe), "%s/magisk%s", get_magisk_tmp(), (is_64_bit ? "" : "32"));
|
||||
#else
|
||||
ssprintf(exe, sizeof(exe), "%s/magisk", get_magisk_tmp());
|
||||
#endif
|
||||
// This fd has to survive exec
|
||||
fcntl(fds[1], F_SETFD, 0);
|
||||
char buf[16];
|
||||
|
||||
@@ -187,29 +187,17 @@ static void magic_mount(const string &sdir, const string &ddir = "") {
|
||||
}
|
||||
|
||||
static void extract_files(bool sbin) {
|
||||
const char *m32 = sbin ? "/sbin/magisk32.xz" : "magisk32.xz";
|
||||
const char *m64 = sbin ? "/sbin/magisk64.xz" : "magisk64.xz";
|
||||
const char *magisk_xz = sbin ? "/sbin/magisk.xz" : "magisk.xz";
|
||||
const char *stub_xz = sbin ? "/sbin/stub.xz" : "stub.xz";
|
||||
|
||||
if (access(m32, F_OK) == 0) {
|
||||
mmap_data magisk(m32);
|
||||
unlink(m32);
|
||||
int fd = xopen("magisk32", O_WRONLY | O_CREAT, 0755);
|
||||
if (access(magisk_xz, F_OK) == 0) {
|
||||
mmap_data magisk(magisk_xz);
|
||||
unlink(magisk_xz);
|
||||
int fd = xopen("magisk", O_WRONLY | O_CREAT, 0755);
|
||||
fd_stream ch(fd);
|
||||
unxz(ch, magisk);
|
||||
close(fd);
|
||||
}
|
||||
if (access(m64, F_OK) == 0) {
|
||||
mmap_data magisk(m64);
|
||||
unlink(m64);
|
||||
int fd = xopen("magisk64", O_WRONLY | O_CREAT, 0755);
|
||||
fd_stream ch(fd);
|
||||
unxz(ch, magisk);
|
||||
close(fd);
|
||||
xsymlink("./magisk64", "magisk");
|
||||
} else {
|
||||
xsymlink("./magisk32", "magisk");
|
||||
}
|
||||
if (access(stub_xz, F_OK) == 0) {
|
||||
mmap_data stub(stub_xz);
|
||||
unlink(stub_xz);
|
||||
|
||||
Reference in New Issue
Block a user