blob: 092a5eb3c179b05946e70bcc7071a56ae2f23ad3 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#pragma once
#include <memory>
#include <fbl/unique_fd.h>
#include <fs-management/mount.h>
#include <lib/zx/channel.h>
#include <zircon/types.h>
#include "fs-manager.h"
namespace devmgr {
// FilesystemMounter is a utility class which wraps the Fsmanager
// and helps clients mount filesystems within the fshost namespace.
class FilesystemMounter {
public:
FilesystemMounter(std::unique_ptr<FsManager> fshost, bool netboot,
bool check_filesystems)
: fshost_(std::move(fshost)), netboot_(netboot), check_filesystems_(check_filesystems) {}
void FuchsiaStart() const { fshost_->FuchsiaStart(); }
zx_status_t InstallFs(const char* path, zx::channel h) {
return fshost_->InstallFs(path, std::move(h));
}
bool Netbooting() const { return netboot_; }
bool ShouldCheckFilesystems() const { return check_filesystems_; }
// Attempts to mount a block device backed by |fd| to "/data".
// Fails if already mounted.
zx_status_t MountData(fbl::unique_fd fd, mount_options_t* options);
// Attempts to mount a block device backed by |fd| to "/install".
// Fails if already mounted.
zx_status_t MountInstall(fbl::unique_fd fd, mount_options_t* options);
// Attempts to mount a block device backed by |fd| to "/blob".
// Fails if already mounted.
zx_status_t MountBlob(fbl::unique_fd fd, mount_options_t* options);
private:
std::unique_ptr<FsManager> fshost_;
const bool netboot_ = false;
const bool check_filesystems_ = false;
bool data_mounted_ = false;
bool install_mounted_ = false;
bool blob_mounted_ = false;
};
} // namespace devmgr