diff options
author | David Anderson <dvander@google.com> | 2018-07-31 13:27:37 -0700 |
---|---|---|
committer | David Anderson <dvander@google.com> | 2018-08-09 15:06:52 -0700 |
commit | 0d4277d7b34eb1f5e37f268732ad7230ad903855 (patch) | |
tree | c6e1867f8f973a60c037bf9bc3238910f639266d /fastboot/device/variables.cpp | |
parent | 3cf9f9b83826c4b920d83dc4647af678be3b159c (diff) |
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
Diffstat (limited to 'fastboot/device/variables.cpp')
-rw-r--r-- | fastboot/device/variables.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/fastboot/device/variables.cpp b/fastboot/device/variables.cpp index b51b98535..70e4bcc4c 100644 --- a/fastboot/device/variables.cpp +++ b/fastboot/device/variables.cpp @@ -148,3 +148,20 @@ bool GetPartitionSize(FastbootDevice* device, const std::vector<std::string>& ar 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"); +} |