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

// This class allows creation and destruction of a persistent mount namespace.

#ifndef CRYPTOHOME_MOUNT_NAMESPACE_H_
#define CRYPTOHOME_MOUNT_NAMESPACE_H_

#include <sys/types.h>

#include <base/files/file_path.h>
#include <base/macros.h>

#include "cryptohome/platform.h"

namespace cryptohome {

class MountNamespace {
  // Given that we cannot ensure that creation always succeeds this class is not
  // fully RAII, but once the namespace is created (with Create()), it will be
  // destroyed when the object goes out of scope.
 public:
  MountNamespace(const base::FilePath& ns_path, Platform* platform)
      : ns_path_(ns_path), exists(false), platform_(platform) {}
  ~MountNamespace();

  base::FilePath path() const { return ns_path_; }

  bool Create();
  bool Destroy();

 private:
  base::FilePath ns_path_;
  bool exists;
  Platform* platform_;

  DISALLOW_COPY_AND_ASSIGN(MountNamespace);
};

}  // namespace cryptohome

#endif  // CRYPTOHOME_MOUNT_NAMESPACE_H_
