Move pack files instead of copying; one file-op core for all modes
Install: staging and sd:/ are on the same card, so pack folders are now moved with f_rename (a missing target folder moves in one step, existing ones are merged file by file). Copying is only a per-entry fallback. The staging cleanup afterwards only removes empty folders. Deletion: one f_stat per list entry, no full recursive count before deleting; large folders are detected with a probe that stops after 51 entries. Progress lines count processed entries instead of needing an extra pass for a total. Six copy/delete walkers (fs.c + install.c) are replaced by fs_delete_tree, fs_move_tree and fs_move_file sharing one path buffer and one copy buffer per run; the 'alternative copy method' retry is gone. extras/hekate-ams-pro is moved too. Backups keep copy semantics.
This commit is contained in:
1 parent
c033b988ca
commit
664216fa11
6 files changed
+453
-784
No files matched your search
+3
-25
@@ -29,7 +29,6 @@
|
||||
#define set_color install_set_color
|
||||
#define check_and_clear_screen_if_needed install_check_and_clear_screen_if_needed
|
||||
#define path_exists install_path_exists
|
||||
#define count_directory_items install_count_directory_items
|
||||
|
||||
// Clean mode: Backup user data
|
||||
int clean_mode_backup(void) {
|
||||
@@ -102,7 +101,7 @@ int clean_mode_restore(void) {
|
||||
set_color(COLOR_GREEN);
|
||||
gfx_printf(" [OK] Wiederherstellung abgeschlossen\n");
|
||||
set_color(COLOR_WHITE);
|
||||
delete_path_list(clean_post_restore_dirs_to_delete, "switch/ (nach Restore)");
|
||||
delete_path_lists_grouped("switch/ (nach Restore)", clean_post_restore_dirs_to_delete, NULL);
|
||||
}
|
||||
cleanup_backup();
|
||||
return res;
|
||||
@@ -132,30 +131,9 @@ int cleanup_other_staging_directories(omninx_variant_t installed_variant) {
|
||||
gfx_printf("\nEntferne weiteren Installationsordner...\n");
|
||||
set_color(COLOR_WHITE);
|
||||
|
||||
int total = count_directory_items(staging);
|
||||
u32 start_x, start_y;
|
||||
gfx_con_getpos(&start_x, &start_y);
|
||||
|
||||
const char *folder_name = strrchr(staging, '/');
|
||||
if (folder_name) folder_name++;
|
||||
else folder_name = staging;
|
||||
|
||||
set_color(COLOR_CYAN);
|
||||
gfx_printf(" Loesche: %s [ 0%%] (0/%d)", folder_name, total);
|
||||
set_color(COLOR_WHITE);
|
||||
|
||||
int deleted = 0;
|
||||
int last_percent = -1;
|
||||
int res = folder_delete_progress_recursive(staging, &deleted, total, start_x, start_y, folder_name, &last_percent);
|
||||
|
||||
gfx_con_setpos(start_x, start_y);
|
||||
if (res == FR_OK) {
|
||||
set_color(COLOR_GREEN);
|
||||
gfx_printf(" Loesche: %s [100%%] (%d/%d) - Fertig!\n", folder_name, deleted, total);
|
||||
set_color(COLOR_WHITE);
|
||||
} else {
|
||||
int res = install_delete_tree(staging);
|
||||
if (res != FR_OK) {
|
||||
set_color(COLOR_ORANGE);
|
||||
gfx_printf(" Loesche: %s - Fehlgeschlagen!\n", folder_name);
|
||||
gfx_printf(" [WARN] Ordner konnte nicht entfernt werden (err=%d)\n", res);
|
||||
set_color(COLOR_WHITE);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user