diff options
| -rw-r--r-- | update_engine_client_android.cc | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/update_engine_client_android.cc b/update_engine_client_android.cc index 6863799f..7766f793 100644 --- a/update_engine_client_android.cc +++ b/update_engine_client_android.cc @@ -72,6 +72,8 @@ class UpdateEngineClientAndroid : public brillo::Daemon { // Called whenever the UpdateEngine daemon dies. void UpdateEngineServiceDied(); + static std::vector<android::String16> ParseHeaders(const std::string& arg); + // Copy of argc and argv passed to main(). int argc_; char** argv_; @@ -123,15 +125,16 @@ int UpdateEngineClientAndroid::OnInit() { DEFINE_string(headers, "", "A list of key-value pairs, one element of the list per line. " - "Used when --update is passed."); + "Used when --update or --allocate is passed."); DEFINE_bool(verify, false, "Given payload metadata, verify if the payload is applicable."); + DEFINE_bool(allocate, false, "Given payload metadata, allocate space."); DEFINE_string(metadata, "/data/ota_package/metadata", "The path to the update payload metadata. " - "Used when --verify is passed."); + "Used when --verify or --allocate is passed."); DEFINE_bool(suspend, false, "Suspend an ongoing update and exit."); DEFINE_bool(resume, false, "Resume a suspended update."); @@ -200,6 +203,25 @@ int UpdateEngineClientAndroid::OnInit() { return ExitWhenIdle(status); } + if (FLAGS_allocate) { + auto headers = ParseHeaders(FLAGS_headers); + int64_t ret = 0; + Status status = service_->allocateSpaceForPayload( + android::String16{FLAGS_metadata.data(), FLAGS_metadata.size()}, + headers, + &ret); + if (status.isOk()) { + if (ret == 0) { + LOG(INFO) << "Successfully allocated space for payload."; + } else { + LOG(INFO) << "Insufficient space; required " << ret << " bytes."; + } + } else { + LOG(INFO) << "Allocation failed."; + } + return ExitWhenIdle(status); + } + if (FLAGS_follow) { // Register a callback object with the service. callback_ = new UECallback(this); @@ -212,12 +234,7 @@ int UpdateEngineClientAndroid::OnInit() { } if (FLAGS_update) { - std::vector<std::string> headers = base::SplitString( - FLAGS_headers, "\n", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - std::vector<android::String16> and_headers; - for (const auto& header : headers) { - and_headers.push_back(android::String16{header.data(), header.size()}); - } + auto and_headers = ParseHeaders(FLAGS_headers); Status status = service_->applyPayload( android::String16{FLAGS_payload.data(), FLAGS_payload.size()}, FLAGS_offset, @@ -261,6 +278,17 @@ void UpdateEngineClientAndroid::UpdateEngineServiceDied() { QuitWithExitCode(1); } +std::vector<android::String16> UpdateEngineClientAndroid::ParseHeaders( + const std::string& arg) { + std::vector<std::string> headers = base::SplitString( + arg, "\n", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + std::vector<android::String16> and_headers; + for (const auto& header : headers) { + and_headers.push_back(android::String16{header.data(), header.size()}); + } + return and_headers; +} + } // namespace internal } // namespace chromeos_update_engine |
