From 772c93ca5c98f21b766fcf2fbf25c8ebf742e2fb Mon Sep 17 00:00:00 2001 From: Tom Cherry Date: Tue, 4 Dec 2018 09:37:39 -0800 Subject: Move some small users of fstab to new C++ Fstab Bug: 62292478 Test: tree-hugger Change-Id: Ie2cc10e5168ef3b9dcc42f88e67a1ccd1175fcc5 --- bootloader_message/bootloader_message.cpp | 19 +++++++------- uncrypt/uncrypt.cpp | 43 ++++++++++++------------------- 2 files changed, 27 insertions(+), 35 deletions(-) diff --git a/bootloader_message/bootloader_message.cpp b/bootloader_message/bootloader_message.cpp index aaeffdc5c..b933cbf8e 100644 --- a/bootloader_message/bootloader_message.cpp +++ b/bootloader_message/bootloader_message.cpp @@ -27,21 +27,22 @@ #include #include #include -#include +#include static std::string get_misc_blk_device(std::string* err) { - std::unique_ptr fstab(fs_mgr_read_fstab_default(), - fs_mgr_free_fstab); - if (!fstab) { + Fstab fstab; + if (!ReadDefaultFstab(&fstab)) { *err = "failed to read default fstab"; return ""; } - fstab_rec* record = fs_mgr_get_entry_for_mount_point(fstab.get(), "/misc"); - if (record == nullptr) { - *err = "failed to find /misc partition"; - return ""; + for (const auto& entry : fstab) { + if (entry.mount_point == "/misc") { + return entry.blk_device; + } } - return record->blk_device; + + *err = "failed to find /misc partition"; + return ""; } // In recovery mode, recovery can get started and try to access the misc diff --git a/uncrypt/uncrypt.cpp b/uncrypt/uncrypt.cpp index d1970e534..4244af2aa 100644 --- a/uncrypt/uncrypt.cpp +++ b/uncrypt/uncrypt.cpp @@ -115,6 +115,7 @@ #include #include #include +#include #include "otautil/error_code.h" @@ -136,7 +137,7 @@ static const std::string UNCRYPT_PATH_FILE = "/cache/recovery/uncrypt_file"; static const std::string UNCRYPT_STATUS = "/cache/recovery/uncrypt_status"; static const std::string UNCRYPT_SOCKET = "uncrypt"; -static struct fstab* fstab = nullptr; +static Fstab fstab; static int write_at_offset(unsigned char* buffer, size_t size, int wfd, off64_t offset) { if (TEMP_FAILURE_RETRY(lseek64(wfd, offset, SEEK_SET)) == -1) { @@ -162,18 +163,8 @@ static void add_block_to_ranges(std::vector& ranges, int new_block) { } } -static struct fstab* read_fstab() { - fstab = fs_mgr_read_fstab_default(); - if (!fstab) { - LOG(ERROR) << "failed to read default fstab"; - return NULL; - } - - return fstab; -} - -static const char* find_block_device(const char* path, bool* encryptable, - bool* encrypted, bool* f2fs_fs) { +static std::string find_block_device(const char* path, bool* encryptable, bool* encrypted, + bool* f2fs_fs) { // Look for a volume whose mount point is the prefix of path and // return its block device. Set encrypted if it's currently // encrypted. @@ -181,30 +172,29 @@ static const char* find_block_device(const char* path, bool* encryptable, // ensure f2fs_fs is set to false first. *f2fs_fs = false; - for (int i = 0; i < fstab->num_entries; ++i) { - struct fstab_rec* v = &fstab->recs[i]; - if (!v->mount_point) { + for (const auto& entry : fstab) { + if (entry.mount_point.empty()) { continue; } - int len = strlen(v->mount_point); - if (strncmp(path, v->mount_point, len) == 0 && + auto len = entry.mount_point.size(); + if (android::base::StartsWith(path, entry.mount_point) && (path[len] == '/' || path[len] == 0)) { *encrypted = false; *encryptable = false; - if (fs_mgr_is_encryptable(v) || fs_mgr_is_file_encrypted(v)) { + if (entry.is_encryptable() || entry.fs_mgr_flags.file_encryption) { *encryptable = true; if (android::base::GetProperty("ro.crypto.state", "") == "encrypted") { *encrypted = true; } } - if (strcmp(v->fs_type, "f2fs") == 0) { + if (entry.fs_type == "f2fs") { *f2fs_fs = true; } - return v->blk_device; + return entry.blk_device; } } - return NULL; + return ""; } static bool write_status_to_socket(int status, int socket) { @@ -493,8 +483,8 @@ static int uncrypt(const char* input_path, const char* map_file, const int socke bool encryptable; bool encrypted; bool f2fs_fs; - const char* blk_dev = find_block_device(path, &encryptable, &encrypted, &f2fs_fs); - if (blk_dev == nullptr) { + const std::string blk_dev = find_block_device(path, &encryptable, &encrypted, &f2fs_fs); + if (blk_dev.empty()) { LOG(ERROR) << "failed to find block device for " << path; return kUncryptBlockDeviceFindError; } @@ -514,7 +504,7 @@ static int uncrypt(const char* input_path, const char* map_file, const int socke // and /sdcard we leave the file alone. if (strncmp(path, "/data/", 6) == 0) { LOG(INFO) << "writing block map " << map_file; - return produce_block_map(path, map_file, blk_dev, encrypted, f2fs_fs, socket); + return produce_block_map(path, map_file, blk_dev.c_str(), encrypted, f2fs_fs, socket); } return 0; @@ -654,7 +644,8 @@ int main(int argc, char** argv) { return 2; } - if ((fstab = read_fstab()) == nullptr) { + if (!ReadDefaultFstab(&fstab)) { + LOG(ERROR) << "failed to read default fstab"; log_uncrypt_error_code(kUncryptFstabReadError); return 1; } -- cgit v1.2.3