// Copyright 2020 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.

// Helper functions used for ChromeOS ConfigFS

#ifndef CHROMEOS_CONFIG_LIBCROS_CONFIG_CONFIGFS_H_
#define CHROMEOS_CONFIG_LIBCROS_CONFIG_CONFIGFS_H_

#include <string>
#include <vector>

namespace base {
class FilePath;
}  // namespace base

namespace brillo {

// Constants which correspond to the directories generated by
// cros_config_schema. See go/configfs for the design of the
// filesystem, and what the private and v1 directories correspond to.
extern const char kConfigFSPrivateDirName[];
extern const char kConfigFSV1DirName[];
extern const char kConfigFSIdentityName[];
extern const char kConfigFSPrivateFSType[];

// Prepare the mount path for ConfigFS (e.g., "/config").
// @mount_path: The mount path where ConfigFS is going to be mounted.
// @private_path_out: Output parameter of the path to use for the
//     private file tree.
// @v1_path_out: Output parameter of the path to mount version 1 of
//     the filesystem (standard path/property config) at.
// @return true on success, false on error.
bool SetupMountPath(const base::FilePath& mount_path,
                    base::FilePath* private_path_out,
                    base::FilePath* v1_path_out);

// Setup a loop device.
// @backing_file: Path to the backing file.
// @loop_file_out: Output parameter of the setup loop file.
// @return true on success, false on error.
bool SetupLoopDevice(const base::FilePath& backing_file,
                     base::FilePath* loop_file_out);

// Wrapper for mount(2) system call.
// @source: Path to source device or image.
// @target: Target directory. Must exist.
// @filesystemtype: Name of filesystem supported by kernel.
//     (e.g., "squashfs").
// @mountflags: See mount(2) manual page.
// @options: List of additional options supported by the filesystem.
// @return true on success, false on error.
bool Mount(const base::FilePath& source,
           const base::FilePath& target,
           const char* filesystemtype,
           unsigned long mountflags,
           const std::vector<std::string>& options = {});

// Create a bind mount.
// @source: Path to source directory.
// @target: Path to target directory.
// @return true on success, false on error.
bool Bind(const base::FilePath& source, const base::FilePath& target);

// Remount an existing target with new flags and options.
// @target: Path to an already-mounted target.
// @mountflags: See mount(2) manual page.
// @options: List of additional options supported by the filesyste.
// @return true on success, false on error.
bool Remount(const base::FilePath& target,
             unsigned long mountflags,
             const std::vector<std::string>& options = {});

}  // namespace brillo

#endif  // CHROMEOS_CONFIG_LIBCROS_CONFIG_CONFIGFS_H_
