aboutsummaryrefslogtreecommitdiffstats
path: root/roots.cpp
diff options
context:
space:
mode:
authorTao Bao <tbao@google.com>2017-09-29 17:11:13 -0700
committerTao Bao <tbao@google.com>2017-10-02 11:18:13 -0700
commit3e18f2bf4004e9df2f7fcee0d2035552404ff715 (patch)
tree5419ae85b390213bbca80f905584c28dd4b2fd37 /roots.cpp
parente8ee697364c1d123dccd3249a9f9e062e40a0fb4 (diff)
downloadandroid_bootable_recovery-3e18f2bf4004e9df2f7fcee0d2035552404ff715.tar.gz
android_bootable_recovery-3e18f2bf4004e9df2f7fcee0d2035552404ff715.tar.bz2
android_bootable_recovery-3e18f2bf4004e9df2f7fcee0d2035552404ff715.zip
roots: Fix an issue with volume_for_path().
The earlier commit in 2dfc1a38982c4052bb32bc7fc06edeadf3908fb9 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
Diffstat (limited to 'roots.cpp')
-rw-r--r--roots.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/roots.cpp b/roots.cpp
index 02c1ecb7..c0348d71 100644
--- a/roots.cpp
+++ b/roots.cpp
@@ -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) {