Chromium Code Reviews| Index: disk-manager.cc |
| diff --git a/disk-manager.cc b/disk-manager.cc |
| index 1568565dc9779b21843839786cd55dadb11aac3c..f65d43455295b6aa987335bd3094f00a72bfef8c 100644 |
| --- a/disk-manager.cc |
| +++ b/disk-manager.cc |
| @@ -3,8 +3,8 @@ |
| // found in the LICENSE file. |
| #include "disk-manager.h" |
| - |
| #include "disk.h" |
| +#include "udev-device.h" |
| #include <base/logging.h> |
| #include <libudev.h> |
| @@ -30,8 +30,44 @@ DiskManager::~DiskManager() { |
| } |
| std::vector<Disk> DiskManager::EnumerateDisks() { |
| - //TODO(rtc): implement this... |
| std::vector<Disk> disks; |
| + |
| + struct udev *udev = udev_new(); |
|
rtc
2011/04/12 21:08:51
There should be a udev instance already created by
Ben Chan
2011/04/12 22:20:36
Done.
|
| + CHECK(udev) << "Failed to initialize udev"; |
| + |
| + struct udev_enumerate *enumerate = udev_enumerate_new(udev); |
| + udev_enumerate_add_match_subsystem(enumerate, "block"); |
| + udev_enumerate_scan_devices(enumerate); |
| + |
| + struct udev_list_entry *device_list, *device_list_entry; |
| + device_list = udev_enumerate_get_list_entry(enumerate); |
| + udev_list_entry_foreach(device_list_entry, device_list) { |
| + const char *path = udev_list_entry_get_name(device_list_entry); |
| + udev_device *dev = udev_device_new_from_syspath(udev, path); |
| + |
| + LOG(INFO) << "Device"; |
| + LOG(INFO) << " Node: " << udev_device_get_devnode(dev); |
| + LOG(INFO) << " Subsystem: " << udev_device_get_subsystem(dev); |
| + LOG(INFO) << " Devtype: " << udev_device_get_devtype(dev); |
| + LOG(INFO) << " Devpath: " << udev_device_get_devpath(dev); |
| + LOG(INFO) << " Sysname: " << udev_device_get_sysname(dev); |
| + LOG(INFO) << " Syspath: " << udev_device_get_syspath(dev); |
| + LOG(INFO) << " Properties: "; |
| + struct udev_list_entry *property_list, *property_list_entry; |
| + property_list = udev_device_get_properties_list_entry(dev); |
| + udev_list_entry_foreach (property_list_entry, property_list) { |
| + const char *key = udev_list_entry_get_name(property_list_entry); |
| + const char *value = udev_list_entry_get_value(property_list_entry); |
| + LOG(INFO) << " " << key << " = " << value; |
| + } |
| + |
| + disks.push_back(UdevDevice(dev).ToDisk()); |
| + udev_device_unref(dev); |
| + } |
| + |
| + udev_enumerate_unref(enumerate); |
| + udev_unref(udev); |
| + |
| return disks; |
| } |