| // Copyright 2022 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "rmad/udev/udev_utils.h" |
| |
| #include <utility> |
| |
| #include <brillo/udev/udev.h> |
| #include <brillo/udev/udev_device.h> |
| #include <brillo/udev/udev_enumerate.h> |
| |
| #include "rmad/udev/udev_device.h" |
| |
| namespace rmad { |
| |
| UdevUtilsImpl::UdevUtilsImpl() : udev_(brillo::Udev::Create()) {} |
| |
| UdevUtilsImpl::UdevUtilsImpl(std::unique_ptr<brillo::Udev> udev) |
| : udev_(std::move(udev)) {} |
| |
| UdevUtilsImpl::~UdevUtilsImpl() = default; |
| |
| std::vector<std::unique_ptr<UdevDevice>> |
| UdevUtilsImpl::EnumerateBlockDevices() { |
| std::unique_ptr<brillo::UdevEnumerate> enumerate = udev_->CreateEnumerate(); |
| enumerate->AddMatchSubsystem("block"); |
| enumerate->ScanDevices(); |
| |
| std::vector<std::unique_ptr<UdevDevice>> devices; |
| for (std::unique_ptr<brillo::UdevListEntry> entry = enumerate->GetListEntry(); |
| entry; entry = entry->GetNext()) { |
| std::unique_ptr<brillo::UdevDevice> dev = |
| udev_->CreateDeviceFromSysPath(entry->GetName()); |
| if (dev) { |
| devices.emplace_back(std::make_unique<UdevDeviceImpl>(std::move(dev))); |
| } |
| } |
| return devices; |
| } |
| |
| bool UdevUtilsImpl::GetBlockDeviceFromDevicePath( |
| const std::string& device_path, std::unique_ptr<UdevDevice>* dev) { |
| std::vector<std::unique_ptr<UdevDevice>> devices = EnumerateBlockDevices(); |
| for (auto& device : devices) { |
| if (device->GetDeviceNode() == device_path) { |
| *dev = std::move(device); |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| } // namespace rmad |