summaryrefslogtreecommitdiffhomepage
path: root/Kernel/Sources
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/Sources')
-rw-r--r--Kernel/Sources/FS/NewFS.cxx16
-rw-r--r--Kernel/Sources/NewFS+FileManager.cxx7
-rw-r--r--Kernel/Sources/User.cxx5
3 files changed, 27 insertions, 1 deletions
diff --git a/Kernel/Sources/FS/NewFS.cxx b/Kernel/Sources/FS/NewFS.cxx
index a8790109..05833c0e 100644
--- a/Kernel/Sources/FS/NewFS.cxx
+++ b/Kernel/Sources/FS/NewFS.cxx
@@ -17,6 +17,7 @@
#include <NewKit/Utils.hpp>
#include <FirmwareKit/EPM.hxx>
#include <KernelKit/ProcessScheduler.hxx>
+#include <KernelKit/User.hxx>
using namespace Kernel;
@@ -300,13 +301,26 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const char* name,
NFS_CATALOG_STRUCT* catalogChild = new NFS_CATALOG_STRUCT();
+ Int32 flagsList = flags;
+
+ if (name[0] == kNewFSMetaFilePrefix)
+ {
+ if (UserView::The()->Current() != UserView::The()->fRootUser)
+ {
+ delete catalogChild;
+ return nullptr;
+ }
+
+ flagsList |= kNewFSCatalogKindMetaFile;
+ }
+
catalogChild->ResourceForkSize = cDefaultForkSize;
catalogChild->DataForkSize = cDefaultForkSize;
catalogChild->NextSibling = outLba;
catalogChild->PrevSibling = outLba;
catalogChild->Kind = kind;
- catalogChild->Flags = kNewFSFlagCreated;
+ catalogChild->Flags = kNewFSFlagCreated | flagsList;
rt_copy_memory((VoidPtr)name, (VoidPtr)catalogChild->Name,
rt_string_len(name));
diff --git a/Kernel/Sources/NewFS+FileManager.cxx b/Kernel/Sources/NewFS+FileManager.cxx
index 146f721d..402ce56c 100644
--- a/Kernel/Sources/NewFS+FileManager.cxx
+++ b/Kernel/Sources/NewFS+FileManager.cxx
@@ -84,6 +84,13 @@ namespace Kernel
{
return kNewFSSeparator;
}
+
+ /// @brief Gets the metafile character.
+ /// @return
+ const char NewFilesystemHelper::MetaFile()
+ {
+ return kNewFSMetaFilePrefix;
+ }
} // namespace Kernel
#endif // ifdef __FSKIT_USE_NEWFS__
diff --git a/Kernel/Sources/User.cxx b/Kernel/Sources/User.cxx
index 49c5cad9..7d496a69 100644
--- a/Kernel/Sources/User.cxx
+++ b/Kernel/Sources/User.cxx
@@ -143,6 +143,11 @@ namespace Kernel
return true;
}
+ User* UserView::Current() noexcept
+ {
+ return fCurrentUser;
+ }
+
Void UserView::LogOff() noexcept
{
if (!fCurrentUser)