diff options
| author | Amlal EL Mahrouss <amlalelmahrouss@icloud.com> | 2024-07-31 04:04:46 +0200 |
|---|---|---|
| committer | Amlal EL Mahrouss <amlalelmahrouss@icloud.com> | 2024-07-31 04:04:46 +0200 |
| commit | 5dc33d9a22207b8b664ea83f88280911a22d0c52 (patch) | |
| tree | f6f55df6b9b44addf07caafea3111ef77f95f8bb | |
| parent | 3bfb95803ba25a04ddb57ebbc0f25e4dec29d7e0 (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.hxx | 2 | ||||
| -rw-r--r-- | Boot/amd64-efi.make | 2 | ||||
| -rw-r--r-- | Kernel/FSKit/NewFS.hxx | 15 | ||||
| -rw-r--r-- | Kernel/KernelKit/User.hxx | 3 | ||||
| -rw-r--r-- | Kernel/Sources/FS/NewFS.cxx | 16 | ||||
| -rw-r--r-- | Kernel/Sources/NewFS+FileManager.cxx | 7 | ||||
| -rw-r--r-- | Kernel/Sources/User.cxx | 5 |
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) |
