summaryrefslogtreecommitdiff
path: root/dynamic_partition_control_android.cc
diff options
context:
space:
mode:
authorTianjie <xunchang@google.com>2020-06-16 19:37:00 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-06-16 19:37:00 +0000
commitd9947187f09ce5f88c8c398093c0f23a6264b83b (patch)
treeeec101d63b479aa8d84d4a53d544c77987edb2ef /dynamic_partition_control_android.cc
parent509ec474950afe0701881d380109bbf33e7c24ab (diff)
parent485f36ac6c53a85f644b57e4ee881db632f224a5 (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.cc32
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()) {