blob: f952f79d6fbafd29f0ecbebf61951875b05c99fb [file] [log] [blame]
// 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 CROS_DISKS_UDEV_DEVICE_H_
#define CROS_DISKS_UDEV_DEVICE_H_
#include <base/basictypes.h>
#include <iostream>
#include <string>
#include <vector>
#include "disk.h"
struct udev_device;
namespace cros_disks {
// A utility class that helps query information about a udev device.
class UdevDevice {
public:
explicit UdevDevice(struct udev_device *dev);
~UdevDevice();
// Gets the string value of a device attribute.
std::string GetAttribute(const char *key) const;
// Checks if the value of a device attribute represents a Boolean true.
bool IsAttributeTrue(const char *key) const;
// Checks if a device attribute exists.
bool HasAttribute(const char *key) const;
// Gets the string value of a device property.
std::string GetProperty(const char *key) const;
// Checks if the value of a device property represents a Boolean true.
bool IsPropertyTrue(const char *key) const;
// Checks if a device property exists.
bool HasProperty(const char *key) const;
// Gets the total and remaining capacity of the device.
void GetSizeInfo(uint64 *total_size, uint64 *remaining_size) const;
// Checks if any media is available in the device.
bool IsMediaAvailable() const;
// Checks if a device is on the boot device.
bool IsOnBootDevice() const;
// Gets the mount paths for the device.
std::vector<std::string> GetMountPaths() const;
// Gets the mount paths for a given device path.
static std::vector<std::string> GetMountPaths(
const std::string& device_path);
// Gets the mount paths for an input stream that has the
// same format as /proc/mounts
static std::vector<std::string> ParseMountPaths(
const std::string& device_path, std::istream& stream);
// Returns a Disk object based on the device information.
Disk ToDisk() const;
private:
bool IsValueBooleanTrue(const char *value) const;
mutable struct udev_device *dev_;
};
} // namespace cros_disks
#endif // CROS_DISKS_UDEV_DEVICE_H_