diff --git a/native/jni/core/bootstages.c b/native/jni/core/bootstages.c index 8216c68a2..329272972 100644 --- a/native/jni/core/bootstages.c +++ b/native/jni/core/bootstages.c @@ -51,7 +51,7 @@ struct node_entry { static void concat_path(struct node_entry *node) { if (node->parent) concat_path(node->parent); - int len = strlen(buf); + size_t len = strlen(buf); buf[len] = '/'; strcpy(buf + len + 1, node->name); } diff --git a/native/jni/utils/img.c b/native/jni/utils/img.c index cd28b8011..4adabd288 100644 --- a/native/jni/utils/img.c +++ b/native/jni/utils/img.c @@ -3,9 +3,11 @@ #include #include +#include #include #include #include +#include #include #include "magisk.h" @@ -167,7 +169,15 @@ int merge_img(const char *source, const char *target) { return 0; LOGI("* Merging %s -> %s\n", source, target); if (access(target, F_OK) == -1) { - xrename(source, target); + if (rename(source, target) < 0) { + // Copy and remove + int tgt = creat(target, 0644); + int src = xopen(source, O_RDONLY | O_CLOEXEC); + sendfile(tgt, src, 0, INT_MAX); + close(tgt); + close(src); + unlink(source); + } return 0; }