aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-03-25 01:10:06 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-03-25 01:10:06 +0000
commitcbdf4ea597906da4f83489b7155e7eb3ffbb7f68 (patch)
treeb7b039f79ac76dca8ee9cc34d1bd16e6a0702ac7
parent974d8f41fb53c0408d8467abba790020f08d0066 (diff)
parent4d2f7f0121f1bb073967aca1be9caf8e2aad158e (diff)
downloadupdate_engine-cbdf4ea597906da4f83489b7155e7eb3ffbb7f68.tar.gz
Snap for 8355735 from 4d2f7f0121f1bb073967aca1be9caf8e2aad158e to tm-d1-release
Change-Id: I8172a01fc117bda287fbefe5b962ed3942e2ec84
-rw-r--r--aosp/ota_extractor.cc29
1 files changed, 26 insertions, 3 deletions
diff --git a/aosp/ota_extractor.cc b/aosp/ota_extractor.cc
index f200fc81..aa0d8230 100644
--- a/aosp/ota_extractor.cc
+++ b/aosp/ota_extractor.cc
@@ -18,11 +18,13 @@
#include <cstdint>
#include <cstdio>
+#include <iterator>
#include <memory>
#include <sys/mman.h>
#include <sys/stat.h>
+#include <android-base/strings.h>
#include <base/files/file_path.h>
#include <gflags/gflags.h>
#include <unistd.h>
@@ -41,6 +43,10 @@ DEFINE_int64(payload_offset,
0,
"Offset to start of payload.bin. Useful if payload path actually "
"points to a .zip file containing payload.bin");
+DEFINE_string(partitions,
+ "",
+ "Comma separated list of partitions to extract, leave empty for "
+ "extracting all partitions");
using chromeos_update_engine::DeltaArchiveManifest;
using chromeos_update_engine::PayloadMetadata;
@@ -51,7 +57,8 @@ bool ExtractImagesFromOTA(const DeltaArchiveManifest& manifest,
const PayloadMetadata& metadata,
int payload_fd,
size_t payload_offset,
- std::string_view output_dir) {
+ std::string_view output_dir,
+ const std::set<std::string>& partitions) {
InstallOperationExecutor executor(manifest.block_size());
const size_t data_begin = metadata.GetMetadataSize() +
metadata.GetMetadataSignatureSize() +
@@ -60,6 +67,10 @@ bool ExtractImagesFromOTA(const DeltaArchiveManifest& manifest,
base::StringPiece(output_dir.data(), output_dir.size()));
std::vector<unsigned char> blob;
for (const auto& partition : manifest.partitions()) {
+ if (!partitions.empty() &&
+ partitions.count(partition.partition_name()) == 0) {
+ continue;
+ }
LOG(INFO) << "Extracting partition " << partition.partition_name()
<< " size: " << partition.new_partition_info().size();
const auto output_path =
@@ -98,9 +109,20 @@ bool ExtractImagesFromOTA(const DeltaArchiveManifest& manifest,
int main(int argc, char* argv[]) {
gflags::ParseCommandLineFlags(&argc, &argv, true);
xz_crc32_init();
+ auto tokens = android::base::Tokenize(FLAGS_partitions, ",");
+ const std::set<std::string> partitions(
+ std::make_move_iterator(tokens.begin()),
+ std::make_move_iterator(tokens.end()));
+ if (FLAGS_payload.empty()) {
+ LOG(ERROR) << "--payload <payload path> is required";
+ return 1;
+ }
+ if (!partitions.empty()) {
+ LOG(INFO) << "Extracting " << android::base::Join(partitions, ", ");
+ }
int payload_fd = open(FLAGS_payload.c_str(), O_RDONLY | O_CLOEXEC);
if (payload_fd < 0) {
- PLOG(ERROR) << "Failed to open payload file:";
+ PLOG(ERROR) << "Failed to open payload file";
return 1;
}
chromeos_update_engine::ScopedFdCloser closer{&payload_fd};
@@ -143,5 +165,6 @@ int main(int argc, char* argv[]) {
payload_metadata,
payload_fd,
FLAGS_payload_offset,
- FLAGS_output_dir);
+ FLAGS_output_dir,
+ partitions);
}