The Pedigree Project 0.1
SysFs.h
1/* Copyright (c) 2026, Pedigree Developers. */
2#ifndef POSIX_SYSFS_H
3#define POSIX_SYSFS_H
4
5#include "pedigree/kernel/Atomic.h"
6
7#include "modules/system/vfs/Directory.h"
8#include "modules/system/vfs/Filesystem.h"
9
10class SysFsDirectory : public Directory {
11 public:
12 SysFsDirectory(const String& name, uintptr_t inode, Filesystem* filesystem, File* parent)
13 : Directory(name, 0, 0, 0, inode, filesystem, 0, parent) {
14 setPermissionsOnly(FILE_UR | FILE_UX | FILE_GR | FILE_GX | FILE_OR | FILE_OX);
15 }
16
17 void addEntry(const String& name, File* file) {
18 addDirectoryEntry(name, file);
19 }
20};
21
22class SysFs final : public Filesystem {
23 public:
24 SysFs() : m_Root(nullptr), m_NextInode(0) {}
25 ~SysFs() override;
26
27 bool initialise(Disk*) override;
28 File* getRoot() const override {
29 return m_Root;
30 }
31 const String& getVolumeLabel() const override;
32 SyncStatus sync() override {
33 return SyncStatus::Success;
34 }
35
36 uintptr_t allocateInode() {
37 return (m_NextInode += 1) - 1;
38 }
39
40 protected:
41 bool createFile(File*, const String&, uint32_t) override {
42 return false;
43 }
44 bool createDirectory(File*, const String&, uint32_t) override {
45 return false;
46 }
47 bool createSymlink(File*, const String&, const String&) override {
48 return false;
49 }
50 bool removeNode(File*, const String&, File*) override {
51 return false;
52 }
53
54 private:
55 SysFsDirectory* directory(SysFsDirectory* parent, const char* name);
56 void attribute(SysFsDirectory* parent, const char* name, const String& contents);
57 void symlink(SysFsDirectory* parent, const char* name, const String& target);
58 void addPciDevices(SysFsDirectory* devices);
59 void addBlockDevices(SysFsDirectory* devices);
60 void addNetworkDevices(SysFsDirectory* devices);
61
62 SysFsDirectory* m_Root;
63 Atomic<uintptr_t> m_NextInode;
64};
65
66#endif
bool addDirectoryEntry(const String &name, File *pTarget)
Definition Directory.cc:817
Definition Disk.h:35
Definition File.h:74
void setPermissionsOnly(uint32_t perms)
Definition File.cc:1352
Definition SysFs.h:22
bool initialise(Disk *) override
Definition SysFs.cc:212
const String & getVolumeLabel() const override
Definition SysFs.cc:93
File * getRoot() const override
Definition SysFs.h:28
SyncStatus sync() override
Definition SysFs.h:32
bool createFile(File *, const String &, uint32_t) override
Definition SysFs.h:41
bool createSymlink(File *, const String &, const String &) override
Definition SysFs.h:47
bool removeNode(File *, const String &, File *) override
Definition SysFs.h:50
bool createDirectory(File *, const String &, uint32_t) override
Definition SysFs.h:44