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

#ifndef SRC_MODULAR_LIB_SCOPED_TMPFS_SCOPED_TMPFS_H_
#define SRC_MODULAR_LIB_SCOPED_TMPFS_SCOPED_TMPFS_H_

#include <lib/async-loop/cpp/loop.h>
#include <lib/async-loop/default.h>
#include <lib/memfs/memfs.h>

#include "src/lib/files/unique_fd.h"

namespace scoped_tmpfs {

// Scoped temporary filesystem that will be destroyed when this class is
// deleted. The filesystem is not mounted on the process namespace and should be
// accessed via the root file descriptor.
class ScopedTmpFS {
 public:
  ScopedTmpFS();
  ScopedTmpFS(const ScopedTmpFS&) = delete;
  ScopedTmpFS& operator=(const ScopedTmpFS&) = delete;
  ~ScopedTmpFS();

  int root_fd() { return root_fd_.get(); }

 private:
  async_loop_config_t config_;
  async::Loop loop_;
  memfs_filesystem_t* memfs_;
  fbl::unique_fd root_fd_;
};

}  // namespace scoped_tmpfs

#endif  // SRC_MODULAR_LIB_SCOPED_TMPFS_SCOPED_TMPFS_H_
