Index: disk-manager.h |
diff --git a/disk-manager.h b/disk-manager.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..171455854c5e74ac6666b560133b146424797ff7 |
--- /dev/null |
+++ b/disk-manager.h |
@@ -0,0 +1,56 @@ |
+// Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef DISK_MANAGER_H__ |
+#define DISK_MANAGER_H__ |
+ |
+#include <libudev.h> |
+#include <vector> |
+ |
+namespace cros_disks { |
+ |
+class Disk; |
+ |
+// The DiskManager is responsible for reading device state from udev. |
+// Said changes could be the result of a udev notification or a synchronous |
+// call to enumerate the relevant storage devices attached to the system. |
+// |
+// Sample Usage: |
+// |
+// DiskManager manager; |
+// manager.EnumerateDisks(); |
+// select(manager.udev_monitor_fd())... |
+// |
+// This class is designed to run within a single-threaded GMainLoop application |
+// and should not be considered thread safe. |
+class DiskManager { |
+ public: |
+ DiskManager(); |
+ virtual ~DiskManager(); |
+ |
+ // Lists the current block devices attached to the system. |
+ virtual std::vector<Disk> EnumerateDisks(); |
+ |
+ // Reads the changes from udev. Must be called to clear the |
+ // fd. |
+ bool ProcessUdevChanges(); |
+ |
+ // A file descriptor that can be select()ed or poll()ed for system changes. |
+ int udev_monitor_fd() const { return udev_monitor_fd_; } |
+ |
+ private: |
+ |
+ // The root udev object. |
+ struct udev* udev_; |
+ |
+ // Provides access to udev changes as they occur. |
+ struct udev_monitor* udev_monitor_; |
+ |
+ // A file descriptor that indicates changes to the system. |
+ int udev_monitor_fd_; |
+}; |
+ |
+} // namespace cros_disks |
+ |
+#endif // DISK_MANAGER_H__ |