int nokexec_set_struct(struct multirom_status *s) { char path[256]; int has_kexec; memset(&nokexec_s, 0, sizeof(struct struct_nokexec)); // primary boot.img backup sprintf(path, "%s/%s", mrom_dir(), "primary_boot.img"); nokexec_s.path_primary_bootimg = strdup(path); INFO(NO_KEXEC_LOG_TEXT ": primary_boot.img location will be=%s\n", nokexec_s.path_primary_bootimg); // find boot mmcblk nokexec_s.path_boot_mmcblk = nokexec_find_boot_mmcblk_path(s); // set flags nokexec_s.is_allowed = s->no_kexec & NO_KEXEC_ALLOWED; nokexec_s.is_ask_confirm = s->no_kexec & NO_KEXEC_CONFIRM; nokexec_s.is_ask_choice = s->no_kexec & NO_KEXEC_CHOICE; nokexec_s.is_forced = s->no_kexec & NO_KEXEC_FORCED; nokexec_s.is_disabled = !(nokexec_s.is_allowed || nokexec_s.is_ask_confirm || nokexec_s.is_ask_choice || nokexec_s.is_forced); has_kexec = multirom_has_kexec(); if (!has_kexec) nokexec_s.selected_method = NO_KEXEC_BOOT_NOKEXEC; else if (nokexec_s.is_forced) nokexec_s.selected_method = NO_KEXEC_BOOT_NOKEXEC; else nokexec_s.selected_method = NO_KEXEC_BOOT_NORMAL; // not implemented nokexec_s.is_allow_kexec_primary = s->no_kexec & NO_KEXEC_PRIMARY; nokexec_s.is_always_restore_primary = s->no_kexec & NO_KEXEC_RESTORE; return 0; }
void multirom_ui_tab_rom_boot_btn(int action) { if(!themes_info->data->tab_data) return; tab_data_roms *t = (tab_data_roms*)themes_info->data->tab_data; if(!t->list->selected) return; struct multirom_rom *rom = multirom_get_rom_by_id(mrom_status, t->list->selected->id); if(!rom) return; int m = M(rom->type); if(m & MASK_UNSUPPORTED) { active_msgbox = fb_create_msgbox(550*DPI_MUL, 360*DPI_MUL, DRED); fb_msgbox_add_text(-1, 30*DPI_MUL, SIZE_BIG, "Error"); fb_msgbox_add_text(-1, 90*DPI_MUL, SIZE_NORMAL, "Unsupported ROM type."); fb_msgbox_add_text(-1, 180*DPI_MUL, SIZE_NORMAL, "See XDA thread for more info."); fb_msgbox_add_text(-1, active_msgbox->h-60*DPI_MUL, SIZE_NORMAL, "Touch anywhere to close"); fb_draw(); fb_freeze(1); set_touch_handlers_mode(HANDLERS_ALL); return; } if (((m & MASK_KEXEC) || ((m & MASK_ANDROID) && rom->has_bootimg)) && multirom_has_kexec() != 0) { active_msgbox = fb_create_msgbox(550*DPI_MUL, 360*DPI_MUL, DRED); fb_msgbox_add_text(-1, 30*DPI_MUL, SIZE_BIG, "Error"); fb_msgbox_add_text(-1, 90*DPI_MUL, SIZE_NORMAL, "Kexec-hardboot support"); fb_msgbox_add_text(-1, 125*DPI_MUL, SIZE_NORMAL, "required to boot this ROM."); fb_msgbox_add_text(-1, 180*DPI_MUL, SIZE_NORMAL, "Use kernel with"); fb_msgbox_add_text(-1, 215*DPI_MUL, SIZE_NORMAL, "kexec-hardboot support."); fb_msgbox_add_text(-1, active_msgbox->h-60*DPI_MUL, SIZE_NORMAL, "Touch anywhere to close"); fb_draw(); fb_freeze(1); set_touch_handlers_mode(HANDLERS_ALL); return; } if((m & MASK_KEXEC) && strchr(rom->name, ' ')) { active_msgbox = fb_create_msgbox(550*DPI_MUL, 360*DPI_MUL, DRED); fb_msgbox_add_text(-1, 30*DPI_MUL, SIZE_BIG, "Error"); fb_msgbox_add_text(-1, 90*DPI_MUL, SIZE_NORMAL, "ROM's name contains spaces"); fb_msgbox_add_text(-1, 180*DPI_MUL, SIZE_NORMAL, "Remove spaces from ROM's name"); fb_msgbox_add_text(-1, active_msgbox->h-60*DPI_MUL, SIZE_NORMAL, "Touch anywhere to close"); fb_draw(); fb_freeze(1); set_touch_handlers_mode(HANDLERS_ALL); return; } pthread_mutex_lock(&exit_code_mutex); selected_rom = rom; exit_ui_code = UI_EXIT_BOOT_ROM; pthread_mutex_unlock(&exit_code_mutex); }