diff options
author | Tianjie <xunchang@google.com> | 2020-06-16 19:37:00 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-06-16 19:37:00 +0000 |
commit | d9947187f09ce5f88c8c398093c0f23a6264b83b (patch) | |
tree | eec101d63b479aa8d84d4a53d544c77987edb2ef /dynamic_partition_control_android.cc | |
parent | 509ec474950afe0701881d380109bbf33e7c24ab (diff) | |
parent | 485f36ac6c53a85f644b57e4ee881db632f224a5 (diff) |
Implement PartitionUpdateGenerator for partial updates am: 99d570d67b am: d7ef9ad1f8 am: 485f36ac6c
Original change: https://android-review.googlesource.com/c/platform/system/update_engine/+/1326713
Change-Id: Idd779bd3a90669ded623134ba2da58fbff3c9b37
Diffstat (limited to 'dynamic_partition_control_android.cc')
-rw-r--r-- | dynamic_partition_control_android.cc | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/dynamic_partition_control_android.cc b/dynamic_partition_control_android.cc index 79c269c40..6817c21e1 100644 --- a/dynamic_partition_control_android.cc +++ b/dynamic_partition_control_android.cc @@ -21,6 +21,8 @@ #include <memory> #include <set> #include <string> +#include <string_view> +#include <utility> #include <vector> #include <android-base/properties.h> @@ -1081,6 +1083,36 @@ bool DynamicPartitionControlAndroid::ResetUpdate(PrefsInterface* prefs) { return true; } +bool DynamicPartitionControlAndroid::ListDynamicPartitionsForSlot( + uint32_t current_slot, std::vector<std::string>* partitions) { + if (!GetDynamicPartitionsFeatureFlag().IsEnabled()) { + LOG(ERROR) << "Dynamic partition is not enabled"; + return false; + } + + std::string device_dir_str; + TEST_AND_RETURN_FALSE(GetDeviceDir(&device_dir_str)); + base::FilePath device_dir(device_dir_str); + auto super_device = + device_dir.Append(GetSuperPartitionName(current_slot)).value(); + auto builder = LoadMetadataBuilder(super_device, current_slot); + TEST_AND_RETURN_FALSE(builder != nullptr); + + std::vector<std::string> result; + auto suffix = SlotSuffixForSlotNumber(current_slot); + for (const auto& group : builder->ListGroups()) { + for (const auto& partition : builder->ListPartitionsInGroup(group)) { + std::string_view partition_name = partition->name(); + if (!android::base::ConsumeSuffix(&partition_name, suffix)) { + continue; + } + result.emplace_back(partition_name); + } + } + *partitions = std::move(result); + return true; +} + bool DynamicPartitionControlAndroid::ExpectMetadataMounted() { // No need to mount metadata for non-Virtual A/B devices. if (!GetVirtualAbFeatureFlag().IsEnabled()) { |