21#include "pedigree/kernel/Log.h"
22#include "pedigree/kernel/machine/Device.h"
23#include "pedigree/kernel/panic.h"
24#include "pedigree/kernel/processor/types.h"
25#include "pedigree/kernel/utilities/new"
29#include "modules/Module.h"
30#include "modules/system/vfs/VFS.h"
35static RawFs* g_pRawFs = 0;
37RawFsDir::~RawFsDir() =
default;
39RawFs::RawFs() : m_pRoot(0) {
44 if (
shutdown() != SyncStatus::Success)
45 panic(
"rawfs: filesystem shutdown failed");
51 return m_pRoot->syncFiles(
false) ? SyncStatus::Success : SyncStatus::IoError;
55 return m_pRoot->syncFiles(
true) ? SyncStatus::Success : SyncStatus::IoError;
62static bool hasDiskChildren(
Device* pDev) {
67 if (hasDiskChildren(pChild))
79 if (hasDiskChildren(pChild)) {
80 NOTICE(
"rawfs: adding dir '" << str <<
"'");
84 reinterpret_cast<Disk*
>(pChild)));
85 searchNode(pChild, pDir2);
87 NOTICE(
"rawfs: adding file '" << str <<
"'");
89 reinterpret_cast<Disk*
>(pChild)));
92 searchNode(pChild, pDir);
96static void rescanTree() {
106 g_pRawFs =
new RawFs();
114static void destroy() {
116 panic(
"rawfs mount callback was not registered during unload");
118 if (!
VFS::instance().unregisterFilesystem(g_pRawFs,
true,
true))
119 panic(
"rawfs: filesystem retirement failed");
123MODULE_INFO_RUNTIME_PINNED(
"rawfs", &init, &destroy,
"vfs");
Device * getChild(size_t n)
@ Disk
A disk device - a block device in UNIX terms.
virtual void getName(String &str)
void addEntry(File *pEntry)
virtual SyncStatus shutdown()
virtual SyncStatus sync()
virtual File * getRoot() const
String registerFilesystem(Filesystem *pFs, const String &preferredStableName)
void addMountCallback(MountCallback callback)
void EXPORTED_PUBLIC panic(const char *msg) NORETURN