diff options
author | Tao Bao <tbao@google.com> | 2017-09-28 23:12:53 +0200 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-09-28 23:12:53 +0200 |
commit | 3a1587f655a0312f1d892a41fe8811d68b435cf5 (patch) | |
tree | 9dda3f657fc0f59ab75d7872905df27c9c6e4c38 | |
parent | Merge "Add a new option in recovery menu to test the background texts" (diff) | |
parent | roots: volume_for_path() parses and tries prefixes. (diff) | |
download | android_bootable_recovery-3a1587f655a0312f1d892a41fe8811d68b435cf5.tar android_bootable_recovery-3a1587f655a0312f1d892a41fe8811d68b435cf5.tar.gz android_bootable_recovery-3a1587f655a0312f1d892a41fe8811d68b435cf5.tar.bz2 android_bootable_recovery-3a1587f655a0312f1d892a41fe8811d68b435cf5.tar.lz android_bootable_recovery-3a1587f655a0312f1d892a41fe8811d68b435cf5.tar.xz android_bootable_recovery-3a1587f655a0312f1d892a41fe8811d68b435cf5.tar.zst android_bootable_recovery-3a1587f655a0312f1d892a41fe8811d68b435cf5.zip |
-rw-r--r-- | roots.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
@@ -68,8 +68,27 @@ void load_volume_table() { printf("\n"); } +// 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) { - return fs_mgr_get_entry_for_mount_point(fstab, path); + if (path == nullptr || path[0] == '\0') return nullptr; + std::string str(path); + while (true) { + Volume* result = fs_mgr_get_entry_for_mount_point(fstab, str.c_str()); + if (result != nullptr || str == "/") { + return result; + } + size_t slash = str.find_last_of('/'); + if (slash == std::string::npos) return nullptr; + if (slash == 0) { + str = "/"; + } else { + str = str.substr(0, slash); + } + } + return nullptr; } // Mount the volume specified by path at the given mount_point. |