diff --git a/bootloader/hos/fss.c b/bootloader/hos/fss.c index 74e6e0e..213df25 100644 --- a/bootloader/hos/fss.c +++ b/bootloader/hos/fss.c @@ -1,7 +1,7 @@ /* * Atmosphère Fusée Secondary Storage (Package3) parser. * - * Copyright (c) 2019-2023 CTCaer + * Copyright (c) 2019-2024 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -82,34 +82,13 @@ typedef struct _fss_content_t char name[0x10]; } fss_content_t; -static void _set_fss_path_and_update_r2p(launch_ctxt_t *ctxt, const char *path) +static void _fss_update_r2p() { - char *r2p_path = malloc(256); - u32 path_len = strlen(path); + u8 *r2p_payload = sd_file_read("atmosphere/reboot_payload.bin", NULL); - strcpy(r2p_path, path); + is_ipl_updated(r2p_payload, "atmosphere/reboot_payload.bin", h_cfg.updater2p ? true : false); - while (path_len) - { - if ((r2p_path[path_len - 1] == '/') || (r2p_path[path_len - 1] == '\\')) - { - r2p_path[path_len] = 0; - strcat(r2p_path, "reboot_payload.bin"); - u8 *r2p_payload = sd_file_read(r2p_path, NULL); - - is_ipl_updated(r2p_payload, r2p_path, h_cfg.updater2p ? true : false); - - free(r2p_payload); - - // Save FSS0 parent path. - r2p_path[path_len] = 0; - ctxt->fss0_main_path = r2p_path; - return; - } - path_len--; - } - - free(r2p_path); + free(r2p_payload); } int parse_fss(launch_ctxt_t *ctxt, const char *path) @@ -230,8 +209,8 @@ int parse_fss(launch_ctxt_t *ctxt, const char *path) gfx_printf("Done!\n"); f_close(&fp); - // Set FSS0 path and update r2p if needed. - _set_fss_path_and_update_r2p(ctxt, path); + // Update r2p if needed. + _fss_update_r2p(); return 1; } diff --git a/bootloader/hos/hos.h b/bootloader/hos/hos.h index e86b073..be2f76d 100644 --- a/bootloader/hos/hos.h +++ b/bootloader/hos/hos.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2018 naehrwert - * Copyright (c) 2018-2023 CTCaer + * Copyright (c) 2018-2024 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -109,7 +109,6 @@ typedef struct _launch_ctxt_t bool stock; bool emummc_forced; - char *fss0_main_path; u32 fss0_hosver; bool atmosphere; diff --git a/bootloader/hos/secmon_exo.c b/bootloader/hos/secmon_exo.c index ea1b45c..7b81e8a 100644 --- a/bootloader/hos/secmon_exo.c +++ b/bootloader/hos/secmon_exo.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2023 CTCaer + * Copyright (c) 2018-2024 CTCaer * Copyright (c) 2019 Atmosphère-NX * * This program is free software; you can redistribute it and/or modify it @@ -245,32 +245,29 @@ void config_exosphere(launch_ctxt_t *ctxt, u32 warmboot_base) } break; } - } - // Parse usb mtim settings. Avoid parsing if it's overridden. - if (ctxt->fss0_main_path && !ctxt->exo_ctx.usb3_force) - { - char settings_path[256]; - strcpy(settings_path, ctxt->fss0_main_path); - strcat(settings_path, "config/system_settings.ini"); - LIST_INIT(sys_settings); - if (ini_parse(&ini_sections, settings_path, false)) + // Parse usb mtim settings. Avoid parsing if it's overridden. + if (!ctxt->exo_ctx.usb3_force) { - LIST_FOREACH_ENTRY(ini_sec_t, ini_sec, &ini_sections, link) + LIST_INIT(ini_sections); + if (ini_parse(&ini_sections, "atmosphere/config/system_settings.ini", false)) { - // Only parse usb section. - if (!(ini_sec->type == INI_CHOICE) || strcmp(ini_sec->name, "usb")) - continue; - - LIST_FOREACH_ENTRY(ini_kv_t, kv, &ini_sec->kvs, link) + LIST_FOREACH_ENTRY(ini_sec_t, ini_sec, &ini_sections, link) { - if (!strcmp("usb30_force_enabled", kv->key)) + // Only parse usb section. + if (!(ini_sec->type == INI_CHOICE) || strcmp(ini_sec->name, "usb")) + continue; + + LIST_FOREACH_ENTRY(ini_kv_t, kv, &ini_sec->kvs, link) { - usb3_force = !strcmp("u8!0x1", kv->val); - break; // Only parse usb30_force_enabled key. + if (!strcmp("usb30_force_enabled", kv->key)) + { + usb3_force = !strcmp("u8!0x1", kv->val); + break; // Only parse usb30_force_enabled key. + } } + break; } - break; } } } @@ -416,7 +413,7 @@ void secmon_exo_check_panic() // Save context to the SD card. char filepath[0x40]; f_mkdir("atmosphere/fatal_errors"); - strcpy(filepath, "/atmosphere/fatal_errors/report_"); + strcpy(filepath, "atmosphere/fatal_errors/report_"); itoa((u32)((u64)rpt->report_identifier >> 32), filepath + strlen(filepath), 16); itoa((u32)(rpt->report_identifier), filepath + strlen(filepath), 16); strcat(filepath, ".bin");