From d13b6cf29c71412adac3b0dca5eddcd6c75f5163 Mon Sep 17 00:00:00 2001 From: Bowgo Tsai Date: Fri, 10 Mar 2017 16:00:40 +0800 Subject: recovery: replacing fs_mgr_read_fstab() with new fs_mgr APIs The fstab settings of early-mounted partitions (e.g., /vendor) will be in kernel device tree. Switch to the new API to get the whole settings with those in device tree: fs_mgr_read_fstab_with_dt("/etc/recovery.fstab") The original default /fstab.{ro.hardware} might be moved to /vendor/etc/. or /odm/etc/. Use another new API to get the default fstab instead of using the hard-coded /fstab.{ro.hardware}. This API also includes the settings from device tree: fs_mgr_read_fstab_default() Bug: 35811655 Test: boot sailfish recovery Change-Id: Iaa56ac7f7b4c4dfc7180c65f03e9a37b94f1de09 --- bootloader_message/bootloader_message.cpp | 23 +++++------------------ roots.cpp | 2 +- tests/common/component_test_util.h | 17 +++++------------ uncrypt/uncrypt.cpp | 15 ++------------- 4 files changed, 13 insertions(+), 44 deletions(-) diff --git a/bootloader_message/bootloader_message.cpp b/bootloader_message/bootloader_message.cpp index b873d3dc3..d8086be28 100644 --- a/bootloader_message/bootloader_message.cpp +++ b/bootloader_message/bootloader_message.cpp @@ -29,27 +29,14 @@ #include #include -static struct fstab* read_fstab(std::string* err) { - std::string ro_hardware = android::base::GetProperty("ro.hardware", ""); - if (ro_hardware.empty()) { - *err = "failed to get ro.hardware"; - return nullptr; - } - // The fstab path is always "/fstab.${ro.hardware}". - std::string fstab_path = "/fstab." + ro_hardware; - struct fstab* fstab = fs_mgr_read_fstab(fstab_path.c_str()); - if (fstab == nullptr) { - *err = "failed to read " + fstab_path; - } - return fstab; -} - static std::string get_misc_blk_device(std::string* err) { - struct fstab* fstab = read_fstab(err); - if (fstab == nullptr) { + std::unique_ptr fstab(fs_mgr_read_fstab_default(), + fs_mgr_free_fstab); + if (!fstab) { + *err = "failed to read default fstab"; return ""; } - fstab_rec* record = fs_mgr_get_entry_for_mount_point(fstab, "/misc"); + fstab_rec* record = fs_mgr_get_entry_for_mount_point(fstab.get(), "/misc"); if (record == nullptr) { *err = "failed to find /misc partition"; return ""; diff --git a/roots.cpp b/roots.cpp index 4a0a4948a..5ba53c245 100644 --- a/roots.cpp +++ b/roots.cpp @@ -44,7 +44,7 @@ void load_volume_table() int i; int ret; - fstab = fs_mgr_read_fstab("/etc/recovery.fstab"); + fstab = fs_mgr_read_fstab_with_dt("/etc/recovery.fstab"); if (!fstab) { LOG(ERROR) << "failed to read /etc/recovery.fstab"; return; diff --git a/tests/common/component_test_util.h b/tests/common/component_test_util.h index 44322972b..3fee32d62 100644 --- a/tests/common/component_test_util.h +++ b/tests/common/component_test_util.h @@ -24,21 +24,14 @@ // Check if the /misc entry exists in the fstab. static bool parse_misc() { - // The fstab path is "/fstab.${ro.hardware}". - std::string ro_hardware = android::base::GetProperty("ro.hardware", ""); - if (ro_hardware.empty()) { - GTEST_LOG_(INFO) << "Failed to get ro.hardware."; + std::unique_ptr fstab(fs_mgr_read_fstab_default(), + fs_mgr_free_fstab); + if (!fstab) { + GTEST_LOG_(INFO) << "Failed to read default fstab"; return false; } - std::string fstab_path = "/fstab." + ro_hardware; - fstab* fstab = fs_mgr_read_fstab(fstab_path.c_str()); - if (fstab == nullptr) { - GTEST_LOG_(INFO) << "Failed to read " << fstab_path; - return false; - } - - fstab_rec* record = fs_mgr_get_entry_for_mount_point(fstab, "/misc"); + fstab_rec* record = fs_mgr_get_entry_for_mount_point(fstab.get(), "/misc"); if (record == nullptr) { GTEST_LOG_(INFO) << "Failed to find /misc in fstab."; return false; diff --git a/uncrypt/uncrypt.cpp b/uncrypt/uncrypt.cpp index a06384dd5..07d183be2 100644 --- a/uncrypt/uncrypt.cpp +++ b/uncrypt/uncrypt.cpp @@ -163,20 +163,9 @@ static void add_block_to_ranges(std::vector& ranges, int new_block) { } static struct fstab* read_fstab() { - fstab = NULL; - - // The fstab path is always "/fstab.${ro.hardware}". - std::string ro_hardware = android::base::GetProperty("ro.hardware", ""); - if (ro_hardware.empty()) { - LOG(ERROR) << "failed to get ro.hardware"; - return NULL; - } - - std::string fstab_path = "/fstab." + ro_hardware; - - fstab = fs_mgr_read_fstab(fstab_path.c_str()); + fstab = fs_mgr_read_fstab_default(); if (!fstab) { - LOG(ERROR) << "failed to read " << fstab_path; + LOG(ERROR) << "failed to read default fstab"; return NULL; } -- cgit v1.2.3