From 49327806062652db999f3f0a7f360edb3047791a Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Mon, 26 Nov 2018 14:59:09 -0800 Subject: SYSTEM_ROOT -> get_system_root Add a get_system_root() function in roots.cpp which returns / or /system based on fstab. This factors out the 'if' check from recovery.cpp and fsck_unshare_blocks.cpp. Test: boot recovery, mount system Bug: 118634720 Change-Id: If4947cba3a3f08dbe695fd2b50a9354cd302ee03 --- fsck_unshare_blocks.cpp | 13 ++++--------- recovery.cpp | 11 ++--------- roots.cpp | 9 +++++++++ roots.h | 2 ++ 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/fsck_unshare_blocks.cpp b/fsck_unshare_blocks.cpp index 684958e38..b653d13ce 100644 --- a/fsck_unshare_blocks.cpp +++ b/fsck_unshare_blocks.cpp @@ -40,7 +40,6 @@ static constexpr const char* SYSTEM_E2FSCK_BIN = "/system/bin/e2fsck_static"; static constexpr const char* TMP_E2FSCK_BIN = "/tmp/e2fsck.bin"; -static constexpr const char* SYSTEM_ROOT = "/system"; static bool copy_file(const char* source, const char* dest) { android::base::unique_fd source_fd(open(source, O_RDONLY)); @@ -121,14 +120,10 @@ bool do_fsck_unshare_blocks() { std::vector partitions = { "/odm", "/oem", "/product", "/vendor" }; // Temporarily mount system so we can copy e2fsck_static. - bool mounted = false; - if (volume_for_mount_point(SYSTEM_ROOT) == nullptr) { - mounted = ensure_path_mounted_at("/", "/mnt/system") != -1; - partitions.push_back("/"); - } else { - mounted = ensure_path_mounted_at(SYSTEM_ROOT, "/mnt/system") != -1; - partitions.push_back(SYSTEM_ROOT); - } + std::string system_root = get_system_root(); + bool mounted = ensure_path_mounted_at(system_root.c_str(), "/mnt/system"); + partitions.push_back(system_root); + if (!mounted) { LOG(ERROR) << "Failed to mount system image."; return false; diff --git a/recovery.cpp b/recovery.cpp index e17526a95..7e1fa43a6 100644 --- a/recovery.cpp +++ b/recovery.cpp @@ -78,7 +78,6 @@ static constexpr const char* CACHE_ROOT = "/cache"; static constexpr const char* DATA_ROOT = "/data"; static constexpr const char* METADATA_ROOT = "/metadata"; static constexpr const char* SDCARD_ROOT = "/sdcard"; -static constexpr const char* SYSTEM_ROOT = "/system"; // We define RECOVERY_API_VERSION in Android.mk, which will be picked up by build system and packed // into target_files.zip. Assert the version defined in code and in Android.mk are consistent. @@ -837,14 +836,8 @@ static Device::BuiltinAction prompt_and_wait(Device* device, int status) { } case Device::MOUNT_SYSTEM: // the system partition is mounted at /mnt/system - if (volume_for_mount_point(SYSTEM_ROOT) == nullptr) { - if (ensure_path_mounted_at("/", "/mnt/system") != -1) { - ui->Print("Mounted /system.\n"); - } - } else { - if (ensure_path_mounted_at(SYSTEM_ROOT, "/mnt/system") != -1) { - ui->Print("Mounted /system.\n"); - } + if (ensure_path_mounted_at(get_system_root().c_str(), "/mnt/system") != -1) { + ui->Print("Mounted /system.\n"); } break; diff --git a/roots.cpp b/roots.cpp index dc347848a..e68cb20bc 100644 --- a/roots.cpp +++ b/roots.cpp @@ -44,6 +44,7 @@ static struct fstab* fstab = nullptr; static bool did_map_logical_partitions = false; +static constexpr const char* SYSTEM_ROOT = "/system"; extern struct selabel_handle* sehandle; @@ -412,3 +413,11 @@ int setup_install_mounts() { bool logical_partitions_mapped() { return did_map_logical_partitions; } + +std::string get_system_root() { + if (volume_for_mount_point(SYSTEM_ROOT) == nullptr) { + return "/"; + } else { + return SYSTEM_ROOT; + } +} diff --git a/roots.h b/roots.h index 702af8de5..314eb5f26 100644 --- a/roots.h +++ b/roots.h @@ -55,4 +55,6 @@ int setup_install_mounts(); bool logical_partitions_mapped(); +std::string get_system_root(); + #endif // RECOVERY_ROOTS_H_ -- cgit v1.2.3