diff options
author | William Wilgus <wilgus.william@gmail.com> | 2022-12-18 19:11:24 -0500 |
---|---|---|
committer | William Wilgus <me.theuser@yahoo.com> | 2022-12-18 23:32:13 -0500 |
commit | f37ebe5ed2aeacf491c4a61d081d7a64215938fa (patch) | |
tree | ea2696c34d06845a3d218c59ad366528b7d042d4 /firmware/include | |
parent | 992455dc58f03940d1eba8d870b4e7f78209a6c3 (diff) | |
download | rockbox-f37ebe5ed2aeacf491c4a61d081d7a64215938fa.tar.gz rockbox-f37ebe5ed2aeacf491c4a61d081d7a64215938fa.zip |
[BugFix] root redirect failed to match the peoper drive when internal drive is missing
HAVE_MULTIVOLUME is a subset of HAVE_MULTIDRIVE
in normal circumstances they are interchangable
but when the internal drive is not found the assumption falls apart
at the moment most of the bootloader are less selective about what drives/volumes
they will mount therefore the volume might not match between what the bootloader
returns for multiboot and what the firmware sees
updating bootloaders will fix this but it should probably be made more robust
at the same time
Change-Id: I93acd4a539894f093211b74b030df3b2c6a0aa11
Diffstat (limited to 'firmware/include')
-rw-r--r-- | firmware/include/dircache_redirect.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/firmware/include/dircache_redirect.h b/firmware/include/dircache_redirect.h index 5c3f630d74..f51ce70690 100644 --- a/firmware/include/dircache_redirect.h +++ b/firmware/include/dircache_redirect.h | |||
@@ -150,7 +150,13 @@ static inline void volume_onmount_internal(IF_MV_NONVOID(int volume)) | |||
150 | /* we need to mount the drive before we can access it */ | 150 | /* we need to mount the drive before we can access it */ |
151 | root_mount_path(path, 0); /* root could be different folder don't hide */ | 151 | root_mount_path(path, 0); /* root could be different folder don't hide */ |
152 | 152 | ||
153 | /*BUGFIX bootloader is less selective about which drives it will mount -- revisit */ | ||
154 | #if defined(HAVE_MULTIDRIVE) && (NUM_VOLUMES_PER_DRIVE == 1) | ||
155 | if (volume_drive(volume) == boot_data.boot_volume | ||
156 | || volume == boot_data.boot_volume) | ||
157 | #else | ||
153 | if (volume == boot_data.boot_volume) /* boot volume contained in uint8_t payload */ | 158 | if (volume == boot_data.boot_volume) /* boot volume contained in uint8_t payload */ |
159 | #endif | ||
154 | { | 160 | { |
155 | int rtlen = get_redirect_dir(rtpath, sizeof(rtpath), volume, "", ""); | 161 | int rtlen = get_redirect_dir(rtpath, sizeof(rtpath), volume, "", ""); |
156 | while (rtlen > 0 && rtpath[--rtlen] == PATH_SEPCH) | 162 | while (rtlen > 0 && rtpath[--rtlen] == PATH_SEPCH) |