roots: Fix an issue with volume_for_path().
The earlier commit in 2dfc1a3898
unintentionally changed the behavior. It gives a different result when
looking up non-existent mount points (e.g. /cache on marlin).
The logic behind volume_for_path("/xyz") is unclear:
- It's fine to return non-null value if it's called by
ensure_path_mounted() before accessing that file "/xyz". (Just based
on the function name, we're not actually having this case.)
- It should return nullptr if the caller is interested in the existence
of that particular mount point "/xyz".
This CL renames the function to volume_for_mount_point(), which does an
exact match by querying the given mount point from libfs_mgr. The former
volume_for_path() has been moved down to function scope for serving
ensure_path_mounted() only.
Test: Build and boot into recovery on bullhead and marlin respectively.
'View recovery logs'.
Test: 'Mount /system'
Test: 'Apply update from ADB'
Change-Id: I1a16390f57540cae08a2b8f3d439d17886975217
This commit is contained in:
@@ -69,11 +69,15 @@ void load_volume_table() {
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
Volume* volume_for_mount_point(const std::string& mount_point) {
|
||||
return fs_mgr_get_entry_for_mount_point(fstab, mount_point);
|
||||
}
|
||||
|
||||
// Finds the volume specified by the given path. fs_mgr_get_entry_for_mount_point() does exact match
|
||||
// only, so it attempts the prefixes recursively (e.g. "/cache/recovery/last_log",
|
||||
// "/cache/recovery", "/cache", "/" for a given path of "/cache/recovery/last_log") and returns the
|
||||
// first match or nullptr.
|
||||
Volume* volume_for_path(const char* path) {
|
||||
static Volume* volume_for_path(const char* path) {
|
||||
if (path == nullptr || path[0] == '\0') return nullptr;
|
||||
std::string str(path);
|
||||
while (true) {
|
||||
|
||||
Reference in New Issue
Block a user