diff options
author | Tao Bao <tbao@google.com> | 2017-09-29 01:05:35 +0200 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-09-29 01:05:35 +0200 |
commit | fdbe272dc0e258a83d9786c8ae67d1c92bc4982b (patch) | |
tree | b60a41a6895023f0eaf8007ed7ee939f9e06e50f | |
parent | Merge "Add a new option in recovery menu to test the background texts" (diff) | |
parent | Merge "roots: volume_for_path() parses and tries prefixes." (diff) | |
download | android_bootable_recovery-fdbe272dc0e258a83d9786c8ae67d1c92bc4982b.tar android_bootable_recovery-fdbe272dc0e258a83d9786c8ae67d1c92bc4982b.tar.gz android_bootable_recovery-fdbe272dc0e258a83d9786c8ae67d1c92bc4982b.tar.bz2 android_bootable_recovery-fdbe272dc0e258a83d9786c8ae67d1c92bc4982b.tar.lz android_bootable_recovery-fdbe272dc0e258a83d9786c8ae67d1c92bc4982b.tar.xz android_bootable_recovery-fdbe272dc0e258a83d9786c8ae67d1c92bc4982b.tar.zst android_bootable_recovery-fdbe272dc0e258a83d9786c8ae67d1c92bc4982b.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. |