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
diff --git a/bootloader_message/bootloader_message.cpp b/bootloader_message/bootloader_message.cpp
index b873d3d..d8086be 100644
--- a/bootloader_message/bootloader_message.cpp
+++ b/bootloader_message/bootloader_message.cpp
@@ -29,27 +29,14 @@
 #include <android-base/unique_fd.h>
 #include <fs_mgr.h>
 
-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, decltype(&fs_mgr_free_fstab)> 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 4a0a494..5ba53c2 100644
--- a/roots.cpp
+++ b/roots.cpp
@@ -44,7 +44,7 @@
     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 4432297..3fee32d 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, decltype(&fs_mgr_free_fstab)> 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 a06384d..07d183b 100644
--- a/uncrypt/uncrypt.cpp
+++ b/uncrypt/uncrypt.cpp
@@ -163,20 +163,9 @@
 }
 
 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;
     }