aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/rootfs/rootfs_inode.cpp
blob: f44f06c38954f9fa9d76b124e0dbbd2b7685e6af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "kernel/filesystem/rootfs/rootfs_inode.hpp"

#include "kernel/filesystem/inode.hpp"

#include <kstd/memory>
#include <kstd/string>

#include <algorithm>
#include <cstddef>
#include <string_view>
#include <utility>

namespace kernel::filesystem::rootfs
{
  rootfs_inode::rootfs_inode()
      : inode(inode_kind::directory)
  {}

  auto rootfs_inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t
  {
    return 0;
  }

  auto rootfs_inode::write(void const * /*buffer*/, size_t /*offset*/, size_t /*size*/) -> size_t
  {
    return 0;
  }

  auto rootfs_inode::add_child(std::string_view name) -> void
  {
    m_children.push_back(std::make_pair(kstd::string{name}, kstd::make_shared<rootfs_inode>()));
  }

  auto rootfs_inode::lookup_child(std::string_view name) -> kstd::shared_ptr<inode>
  {
    auto it = std::ranges::find_if(m_children, [&](auto const & pair) { return pair.first == name; });
    return (it != m_children.end()) ? it->second : nullptr;
  }
}  // namespace kernel::filesystem::rootfs