diff options
Diffstat (limited to 'host')
-rw-r--r-- | host/libs/config/config_flag.cpp | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/host/libs/config/config_flag.cpp b/host/libs/config/config_flag.cpp index d4d515766..63afd2315 100644 --- a/host/libs/config/config_flag.cpp +++ b/host/libs/config/config_flag.cpp @@ -16,6 +16,7 @@ #include "host/libs/config/config_flag.h" +#include <android-base/file.h> #include <android-base/logging.h> #include <android-base/strings.h> #include <gflags/gflags.h> @@ -34,6 +35,8 @@ DEFINE_string(system_image_dir, CF_DEFAULTS_SYSTEM_IMAGE_DIR, ""); using gflags::FlagSettingMode::SET_FLAGS_DEFAULT; +using android::base::ReadFileToString; +using android::base::Split; namespace cuttlefish { @@ -192,22 +195,36 @@ class ConfigFlagImpl : public ConfigFlag { if (!FileExists(info_path)) { return {}; } - std::ifstream ifs{info_path}; - if (!ifs.is_open()) { + std::string android_info; + if(!ReadFileToString(info_path, &android_info)) { return {}; } - std::string android_info; - ifs >> android_info; - std::string_view local_android_info(android_info); - if (!android::base::ConsumePrefix(&local_android_info, "config=")) { + // grab the last value of config in android-info.txt, + // it's the setting that's respected. + // TODO (rammuthiah) Replace this logic with ParseMiscInfo + // from host/commands/assemble_cvd/misc_info.h + // Currently blocked on linking error for misc_info which is part of + // assemble_cvd and this bit of code which is in run_cvd. + size_t config_idx = android_info.rfind("config="); + if (config_idx == std::string::npos) { + return {}; + } + std::string config_value = android_info.substr(config_idx); + std::string_view local_config_value(config_value); + if (!android::base::ConsumePrefix(&local_config_value, "config=")) { + return {}; + } + auto split_config = Split(std::string{local_config_value},"\n"); + if (split_config.empty()) { return {}; } - if (!config_reader_.HasConfig(std::string{local_android_info})) { + config_value = split_config[0]; + if (!config_reader_.HasConfig(config_value)) { LOG(WARNING) << info_path << " contains invalid config preset: '" - << local_android_info << "'."; + << config_value << "'."; return {}; } - return std::string{local_android_info}; + return config_value; } ConfigReader& config_reader_; |