summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-07-31 04:04:46 +0200
committerAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-07-31 04:04:46 +0200
commit5dc33d9a22207b8b664ea83f88280911a22d0c52 (patch)
treef6f55df6b9b44addf07caafea3111ef77f95f8bb
parent3bfb95803ba25a04ddb57ebbc0f25e4dec29d7e0 (diff)
[IMP] See below.
NewFS: - Add meta files type inside NewFS. - Add flags to file when creating it. - Create file when specifying it. Users: - Can now fetch the current logged in user. Meta: - Add documentation to code. Boot: - Replace 'invalid disk geometry' with 'invalid disk'. Signed-off-by: Amlal EL Mahrouss <amlalelmahrouss@icloud.com>
-rw-r--r--Boot/BootKit/BootKit.hxx2
-rw-r--r--Boot/amd64-efi.make2
-rw-r--r--Kernel/FSKit/NewFS.hxx15
-rw-r--r--Kernel/KernelKit/User.hxx3
-rw-r--r--Kernel/Sources/FS/NewFS.cxx16
-rw-r--r--Kernel/Sources/NewFS+FileManager.cxx7
-rw-r--r--Kernel/Sources/User.cxx5
7 files changed, 41 insertions, 9 deletions
diff --git a/Boot/BootKit/BootKit.hxx b/Boot/BootKit/BootKit.hxx
index aa9482a2..86a4dde4 100644
--- a/Boot/BootKit/BootKit.hxx
+++ b/Boot/BootKit/BootKit.hxx
@@ -243,7 +243,7 @@ public:
blockPart->SectorSize != BootDev::kSectorSize ||
blockPart->Version != kNewFSVersionInteger)
{
- EFI::ThrowError(L"Invalid-Disk-Geometry", L"Invalid disk geometry.");
+ EFI::ThrowError(L"Invalid-Disk-Geometry", L"Invalid disk.");
}
else if (blockPart->PartitionName[0] == 0)
{
diff --git a/Boot/amd64-efi.make b/Boot/amd64-efi.make
index d2873099..f1e40d7a 100644
--- a/Boot/amd64-efi.make
+++ b/Boot/amd64-efi.make
@@ -50,7 +50,7 @@ REM=rm
REM_FLAG=-f
FLAG_ASM=-f win64
-FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -D__NEWOS_OTA__ -mno-red-zone -D__KERNEL__ -D__NEWBOOT__ \
+FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__KERNEL__ -D__NEWBOOT__ \
-DEFI_FUNCTION_WRAPPER -I./ -I../Vendor -I../Kernel -c -nostdlib -fno-rtti -fno-exceptions \
-std=c++20 -D__HAVE_MAHROUSS_APIS__ -D__NEWOS_AMD64__ -D__MAHROUSS__ -D__BOOTLOADER__
diff --git a/Kernel/FSKit/NewFS.hxx b/Kernel/FSKit/NewFS.hxx
index df2ab83e..5f8341f1 100644
--- a/Kernel/FSKit/NewFS.hxx
+++ b/Kernel/FSKit/NewFS.hxx
@@ -36,8 +36,10 @@ default.
#define kNewFSIdent " NewFS"
#define kNewFSPadLen (400)
-#define kNewFSVersionInteger (0x126)
-#define kNewFSVerionString "1.26"
+#define kNewFSMetaFilePrefix '$'
+
+#define kNewFSVersionInteger (0x127)
+#define kNewFSVerionString "1.27"
/// @brief Standard fork types.
#define kNewFSDataFork "main_data"
@@ -67,6 +69,8 @@ default.
#define kNewFSCatalogKindRLE (11)
+#define kNewFSCatalogKindMetaFile (12)
+
#define kNewFSSeparator '\\'
#define kNewFSSeparatorAlt '/'
@@ -282,9 +286,10 @@ namespace Kernel
class NewFilesystemHelper final
{
public:
- static const char* Root();
- static const char* UpDir();
- static const char Separator();
+ STATIC const char* Root();
+ STATIC const char* UpDir();
+ STATIC const char Separator();
+ STATIC const char MetaFile();
};
namespace Detail
diff --git a/Kernel/KernelKit/User.hxx b/Kernel/KernelKit/User.hxx
index ef31328b..64bb44a7 100644
--- a/Kernel/KernelKit/User.hxx
+++ b/Kernel/KernelKit/User.hxx
@@ -16,7 +16,7 @@
#define kSuperUser "Super"
#define kGuestUser "Guest"
-#define kUsersFile "\\Users\\$Stores$"
+#define kUsersFile "\\Users\\$UserMTF"
#define kMaxUserNameLen (255)
#define kMaxUserTokenLen (4096)
@@ -91,6 +91,7 @@ namespace Kernel
STATIC UserView* The() noexcept;
Bool LogIn(User* user, const Char* password) noexcept;
+ User* Current() noexcept;
Void LogOff() noexcept;
};
} // namespace Kernel
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)