static int copy_rd_files(UNUSED const char *path, UNUSED const char *busybox_path) { char buf[256]; if (access(TMP_RD_UNPACKED_DIR"/main_init", F_OK) < 0 && rename(TMP_RD_UNPACKED_DIR"/init", TMP_RD_UNPACKED_DIR"/main_init") < 0) { ERROR("Failed to move /init to /main_init!\n"); return -1; } snprintf(buf, sizeof(buf), "%s/trampoline", mrom_dir()); if(copy_file(buf, TMP_RD_UNPACKED_DIR"/init") < 0) { ERROR("Failed to copy trampoline to /init!\n"); return -1; } chmod(TMP_RD_UNPACKED_DIR"/init", 0750); remove(TMP_RD_UNPACKED_DIR"/sbin/ueventd"); remove(TMP_RD_UNPACKED_DIR"/sbin/watchdogd"); symlink("../main_init", TMP_RD_UNPACKED_DIR"/sbin/ueventd"); symlink("../main_init", TMP_RD_UNPACKED_DIR"/sbin/watchdogd"); #ifdef MR_USE_MROM_FSTAB snprintf(buf, sizeof(buf), "%s/mrom.fstab", mrom_dir()); copy_file(buf, TMP_RD_UNPACKED_DIR"/mrom.fstab"); #else remove(TMP_RD_UNPACKED_DIR"/mrom.fstab"); #endif #ifdef MR_ENCRYPTION remove_dir(TMP_RD_UNPACKED_DIR"/mrom_enc"); if(mr_system("busybox cp -a \"%s/enc\" \"%s/mrom_enc\"", mrom_dir(), TMP_RD_UNPACKED_DIR) != 0) { ERROR("Failed to copy encryption files!\n"); return -1; } #endif return 0; }
static int copy_rd_files(UNUSED const char *path, UNUSED const char *busybox_path) { char buf[256]; char init_file[64]; const int *secRD = access(TMP_RD2, F_OK); if (secRD != -1) { snprintf(init_file, sizeof(init_file), TMP_RD2_UNPACKED_DIR "/init"); } else if (access(TMP_RD_INIT_REAL, F_OK) != -1) { snprintf(init_file, sizeof(init_file), TMP_RD_INIT_REAL); } else { snprintf(init_file, sizeof(init_file), TMP_RD_UNPACKED_DIR "/init"); } if ((secRD != -1 && access(TMP_RD2_UNPACKED_DIR "/main_init", F_OK) < 0 && rename(init_file, TMP_RD2_UNPACKED_DIR "/main_init")) || (secRD == -1 && access(TMP_RD_UNPACKED_DIR "/main_init", F_OK) < 0 && rename(init_file, TMP_RD_UNPACKED_DIR "/main_init") < 0)) { ERROR("Failed to move /init to /main_init!\n"); return -1; } snprintf(buf, sizeof(buf), "%s/trampoline", mrom_dir()); if (copy_file(buf, init_file) < 0) { ERROR("Failed to copy trampoline to /init!\n"); return -1; } if (secRD != -1) { chmod(init_file, 0750); remove(TMP_RD2_UNPACKED_DIR "/sbin/ueventd"); remove(TMP_RD2_UNPACKED_DIR "/sbin/watchdogd"); symlink("../main_init", TMP_RD2_UNPACKED_DIR "/sbin/ueventd"); symlink("../main_init", TMP_RD2_UNPACKED_DIR "/sbin/watchdogd"); #ifdef MR_USE_MROM_FSTAB snprintf(buf, sizeof(buf), "%s/mrom.fstab", mrom_dir()); copy_file(buf, TMP_RD2_UNPACKED_DIR "/mrom.fstab"); #else remove(TMP_RD2_UNPACKED_DIR "/mrom.fstab"); #endif } else { chmod(init_file, 0750); remove(TMP_RD_UNPACKED_DIR "/sbin/ueventd"); remove(TMP_RD_UNPACKED_DIR "/sbin/watchdogd"); symlink("../main_init", TMP_RD_UNPACKED_DIR "/sbin/ueventd"); symlink("../main_init", TMP_RD_UNPACKED_DIR "/sbin/watchdogd"); #ifdef MR_USE_MROM_FSTAB snprintf(buf, sizeof(buf), "%s/mrom.fstab", mrom_dir()); copy_file(buf, TMP_RD_UNPACKED_DIR "/mrom.fstab"); #else remove(TMP_RD_UNPACKED_DIR "/mrom.fstab"); #endif } #ifdef MR_ENCRYPTION if (secRD != -1) remove_dir(TMP_RD2_UNPACKED_DIR "/mrom_enc"); else remove_dir(TMP_RD_UNPACKED_DIR "/mrom_enc"); if ((secRD != -1 && mr_system("busybox cp -a \"%s/enc\" \"%s/mrom_enc\"", mrom_dir(), TMP_RD2_UNPACKED_DIR) != 0) || (secRD == -1 && mr_system("busybox cp -a \"%s/enc\" \"%s/mrom_enc\"", mrom_dir(), TMP_RD_UNPACKED_DIR) != 0)) { ERROR("Failed to copy encryption files!\n"); return -1; } #endif return 0; }