| // Copyright 2023 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "minios/cgpt_util.h" | |
| #include <cstdint> | |
| #include <optional> | |
| #include <base/logging.h> | |
| #include <vboot/cgpt_params.h> | |
| namespace minios { | |
| CgptUtil::CgptUtil(const base::FilePath& drive_path, | |
| std::shared_ptr<CgptWrapperInterface> cgpt) | |
| : drive_path_(drive_path), cgpt_(cgpt) {} | |
| std::optional<int> CgptUtil::GetPartitionNumber( | |
| const std::string& label) const { | |
| CgptFindParams params = {.drive_name = drive_path_.value().c_str(), | |
| .set_label = 1, | |
| .label = label.c_str()}; | |
| cgpt_->CgptFind(¶ms); | |
| if (params.hits != 1) { | |
| LOG(ERROR) << "Could not find partition number for partition " << label; | |
| return std::nullopt; | |
| } | |
| return params.match_partnum; | |
| } | |
| std::optional<uint64_t> CgptUtil::GetSize( | |
| const uint32_t partition_number) const { | |
| CgptAddParams params = {.drive_name = drive_path_.value().c_str(), | |
| .partition = partition_number}; | |
| if (cgpt_->CgptGetPartitionDetails(¶ms) == CGPT_OK) { | |
| return params.size; | |
| } | |
| LOG(ERROR) << "Could not get partition detail for partition: " | |
| << partition_number; | |
| return std::nullopt; | |
| } | |
| } // namespace minios |