fastbootd: Add commands for logical partitions.
This patch adds the following new commands to fastbootd:
getvar is_logical:<partition>
create-logical-logical-partition <partition> <size>
delete-logical-partition <partition>
resize-logicallogical-partition <partition> <size>
All of these commands operate on logical partitions only, and require a
properly configured "super" partition to operate.
Bug: 78793464
Test: fastboot create-logical-partition example 4096
fastboot create-logical-partition example 4096 returns error
fastboot getvar is-logical:example returns "yes"
fastboot getvar partition-size:example returns "1000"
fastboot resize-logicalpartition example 8000
fastboot getvar partition-size:example returns "2000"
fastboot delete-logical-partition example
fastboot getvar is-logical:example returns error
fastboot getvar is-logical:system_a returns "no"
Change-Id: Iff323eabcf5c559fa04c7c92574650b01803eb1f
diff --git a/fastboot/device/variables.cpp b/fastboot/device/variables.cpp
index b51b985..70e4bcc 100644
--- a/fastboot/device/variables.cpp
+++ b/fastboot/device/variables.cpp
@@ -148,3 +148,20 @@
uint64_t size = get_block_device_size(handle.fd());
return device->WriteOkay(android::base::StringPrintf("%" PRIX64, size));
}
+
+bool GetPartitionIsLogical(FastbootDevice* device, const std::vector<std::string>& args) {
+ if (args.size() < 1) {
+ return device->WriteFail("Missing argument");
+ }
+ // Note: if a partition name is in both the GPT and the super partition, we
+ // return "true", to be consistent with prefering to flash logical partitions
+ // over physical ones.
+ std::string partition_name = args[0];
+ if (LogicalPartitionExists(partition_name, device->GetCurrentSlot())) {
+ return device->WriteOkay("yes");
+ }
+ if (FindPhysicalPartition(partition_name)) {
+ return device->WriteOkay("no");
+ }
+ return device->WriteFail("Partition not found");
+}