All checks were successful
Build / Build (push) Successful in 17s
- Load sd:/config/omninx/preserve.ini during update mode cleanup to skip delete paths that overlap user-preserved prefixes (heap-backed path list). - Document preserve.ini in PRESERVE_INI.md, README, and INSTALLATION_PROCESS. - Prefer Hekate wording in main.c user messages for bootloader launch/errors. - Extend update deletion list for exefs_patches (audio_mastervolume, SaltyNX_Fixes, logo).
60 lines
2.3 KiB
Markdown
60 lines
2.3 KiB
Markdown
# User preserve list (`preserve.ini`)
|
|
|
|
**Update mode only.** During OmniNX update cleanup (selective deletion), any path listed here with a truthy value is **not** deleted. Paths that would remove a preserved path (parent directory) are skipped as well.
|
|
|
|
- **File:** `sd:/config/omninx/preserve.ini`
|
|
- If missing or invalid, behavior is unchanged (full update deletion list applies).
|
|
|
|
## Format
|
|
|
|
Section **`[Preserve]`** (case-sensitive). Each line is **path as key**, **enable flag as value**:
|
|
|
|
```ini
|
|
[Preserve]
|
|
'sd:/ROMs'=1
|
|
sd:/switch/MyHomebrewFolder=0
|
|
sd:/backup/tools=1
|
|
```
|
|
|
|
### Path (key)
|
|
|
|
- Must start with **`sd:/`** (after optional quoting).
|
|
- **Optional** matching **single** or **double** quotes around the key are stripped (helps Ultrahand `set-ini-val` and readability).
|
|
- Trailing slashes are normalized away (except the volume root).
|
|
- **`sd:/` alone** is rejected (too broad).
|
|
- Minimum useful length after `sd:/` is enforced (at least one more character).
|
|
|
|
### Value (enable)
|
|
|
|
**On** if the value starts with `1`, `t`, `T`, `y`, or `Y` (e.g. `1`, `true`, `yes`). Anything else is **off** (path ignored).
|
|
|
|
### Limits
|
|
|
|
- Up to **96** preserved paths; longer keys truncated internally (~224 bytes per path).
|
|
- Duplicate paths after normalization are skipped.
|
|
- The list is allocated on the **heap** only while update cleanup runs (not a large static buffer in IPL IRAM), to avoid crowding hardware-adjacent memory used by Joy-Con UART and similar peripherals.
|
|
|
|
## Overlap rules
|
|
|
|
For each delete candidate from `deletion_lists_update.h`, deletion is skipped if it **overlaps** any enabled preserve path:
|
|
|
|
- Same path, or
|
|
- Delete target is **inside** a preserved tree (preserved path is a prefix), or
|
|
- Delete target is an **ancestor** of a preserved path (deleting it would remove the preserved data).
|
|
|
|
So preserving `sd:/ROMs` also blocks deleting `sd:/ROMs/title` if that were on the delete list, and blocks deleting `sd:/` if `sd:/ROMs` is preserved.
|
|
|
|
## Ultrahand
|
|
|
|
You can toggle entries with:
|
|
|
|
```text
|
|
set-ini-val sd:/config/omninx/preserve.ini Preserve 'sd:/ROMs' 1
|
|
```
|
|
|
|
and `0` to disable. Use the same quoted path in the key argument as in your INI.
|
|
|
|
## Clean install
|
|
|
|
**Not used** in clean install mode. `preserve.ini` is only read for **update** cleanup (`update_mode_cleanup`).
|