Serenity Operating System
1/*
2 * Copyright (c) 2019-2020, Sergey Bugaev <bugaevc@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/Types.h>
10#include <Kernel/FileSystem/DevPtsFS/FileSystem.h>
11#include <Kernel/FileSystem/Inode.h>
12#include <Kernel/TTY/SlavePTY.h>
13
14namespace Kernel {
15
16class DevPtsFSInode final : public Inode {
17 friend class DevPtsFS;
18
19public:
20 virtual ~DevPtsFSInode() override;
21
22 DevPtsFS& fs() { return static_cast<DevPtsFS&>(Inode::fs()); }
23 DevPtsFS const& fs() const { return static_cast<DevPtsFS const&>(Inode::fs()); }
24
25private:
26 DevPtsFSInode(DevPtsFS&, InodeIndex, SlavePTY*);
27
28 // ^Inode
29 virtual ErrorOr<size_t> read_bytes_locked(off_t, size_t, UserOrKernelBuffer& buffer, OpenFileDescription*) const override;
30 virtual InodeMetadata metadata() const override;
31 virtual ErrorOr<void> traverse_as_directory(Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
32 virtual ErrorOr<NonnullRefPtr<Inode>> lookup(StringView name) override;
33 virtual ErrorOr<void> flush_metadata() override;
34 virtual ErrorOr<size_t> write_bytes_locked(off_t, size_t, UserOrKernelBuffer const& buffer, OpenFileDescription*) override;
35 virtual ErrorOr<NonnullRefPtr<Inode>> create_child(StringView name, mode_t, dev_t, UserID, GroupID) override;
36 virtual ErrorOr<void> add_child(Inode&, StringView name, mode_t) override;
37 virtual ErrorOr<void> remove_child(StringView name) override;
38 virtual ErrorOr<void> replace_child(StringView name, Inode& child) override;
39 virtual ErrorOr<void> chmod(mode_t) override;
40 virtual ErrorOr<void> chown(UserID, GroupID) override;
41
42 LockWeakPtr<SlavePTY> m_pty;
43 InodeMetadata m_metadata;
44};
45
46}