blob: 81c5d4f440cf984e14b2f3af1361a7540c5eac3e [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_MOUNT_INFO_H_
#define CROS_DISKS_MOUNT_INFO_H_
#include <string>
#include <vector>
#include <gtest/gtest_prod.h>
namespace cros_disks {
struct MountPointData;
// A class for querying information about mount points.
class MountInfo {
public:
MountInfo();
MountInfo(const MountInfo&) = delete;
MountInfo& operator=(const MountInfo&) = delete;
~MountInfo();
// Decodes an encoded path by replacing any occurrence of \xxx, a backslash
// followed by an octal number, with an ASCII character of the same octal
// value.
std::string DecodePath(const std::string& encoded_path) const;
// Returns the list of mount paths associated with a given source path.
std::vector<std::string> GetMountPaths(const std::string& source_path) const;
// Returns true if a given mount path is found among the mount points.
bool HasMountPath(const std::string& mount_path) const;
// Retrieves the list of mount points from a given file, which has
// the same format as /proc/self/mountinfo. Returns true on success.
// Refer to <linux source>/Documentation/filesystems/proc.txt for details
// about /proc/self/mountinfo.
// TODO(crbug.com/1163081): This should be replaced with using libmount.
bool RetrieveFromFile(const std::string& path);
// Retrieves the list of mount points of the current process by reading
// /proc/self/mountinfo. Returns true on success.
bool RetrieveFromCurrentProcess();
private:
// Converts a 3-character octal string into a decimal integer.
// Returns -1 if the conversion fails.
int ConvertOctalStringToInt(const std::string& octal) const;
// A list of mount points gathered by the last call to RetrieveMountInfo().
std::vector<MountPointData> mount_points_;
FRIEND_TEST(MountInfoTest, ConvertOctalStringToInt);
};
} // namespace cros_disks
#endif // CROS_DISKS_MOUNT_INFO_H_