diff options
Diffstat (limited to 'Kernel')
| -rw-r--r-- | Kernel/FSKit/NewFS.hxx | 23 | ||||
| -rw-r--r-- | Kernel/FirmwareKit/Handover.hxx | 5 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx | 13 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalHart.cxx | 4 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalKernelMain.cxx | 56 | ||||
| -rw-r--r-- | Kernel/HALKit/ARM64/HalHart.cxx | 4 | ||||
| -rw-r--r-- | Kernel/HALKit/ARM64/HalKernelMain.cxx | 2 | ||||
| -rw-r--r-- | Kernel/HALKit/POWER/HalHart.cxx | 4 | ||||
| -rw-r--r-- | Kernel/KernelKit/CodeManager.hpp | 4 | ||||
| -rw-r--r-- | Kernel/KernelKit/MPManager.hpp | 7 | ||||
| -rw-r--r-- | Kernel/KernelKit/ProcessScheduler.hxx | 2 | ||||
| -rw-r--r-- | Kernel/KernelKit/User.hxx | 2 | ||||
| -rw-r--r-- | Kernel/NewKit/Macros.hpp | 6 | ||||
| -rw-r--r-- | Kernel/Sources/Heap.cxx | 36 | ||||
| -rw-r--r-- | Kernel/Sources/MPManager.cxx | 4 | ||||
| -rw-r--r-- | Kernel/Sources/Main.cxx | 55 | ||||
| -rw-r--r-- | Kernel/Sources/ProcessScheduler.cxx | 2 | ||||
| -rw-r--r-- | Kernel/Sources/User.cxx | 32 |
18 files changed, 141 insertions, 120 deletions
diff --git a/Kernel/FSKit/NewFS.hxx b/Kernel/FSKit/NewFS.hxx index 711bde0b..df2ab83e 100644 --- a/Kernel/FSKit/NewFS.hxx +++ b/Kernel/FSKit/NewFS.hxx @@ -77,7 +77,7 @@ default. #define kNewFSLF '\r' #define kNewFSEOF (-1) -#define kNewFSBitWidth (sizeof(NewCharType)) +#define kNewFSBitWidth (sizeof(Kernel::Char)) #define kNewFSLbaType (Kernel::Lba) /// Start After the PM headers, pad 1024 bytes. @@ -99,24 +99,23 @@ default. #define kNewFSForkNameLen (200U) -typedef Kernel::Char NewCharType; - enum { - kNewFSHardDrive = 0xC0, // Hard Drive (SSD, HDD) + kNewFSHardDrive = 0xC0, // Hard Drive + kNewFSSolidStateDrive = 0xC1, // Solid State Drive kNewFSOpticalDrive = 0x0C, // Blu-Ray/DVD kNewFSMassStorageDevice = 0xCC, // USB kNewFSScsi = 0xC4, // SCSI Hard Drive kNewFSFlashDrive = 0xC6, - kNewFSUnknown = 0xFF, // Unknown device. (floppy) - kNewFSDriveCount = 5, + kNewFSUnknown = 0xFF, // Unknown device. + kNewFSDriveCount = 7, }; /// @brief Catalog type. struct PACKED NFS_CATALOG_STRUCT final { - NewCharType Name[kNewFSNodeNameLen]; - NewCharType Mime[kNewFSMimeNameLen]; + Kernel::Char Name[kNewFSNodeNameLen]; + Kernel::Char Mime[kNewFSMimeNameLen]; /// Catalog status flag. Kernel::UInt16 Flags; @@ -144,7 +143,7 @@ struct PACKED NFS_CATALOG_STRUCT final /// whereas the data fork is reserved for file data. struct PACKED NFS_FORK_STRUCT final { - NewCharType ForkName[kNewFSForkNameLen]; + Kernel::Char ForkName[kNewFSForkNameLen]; Kernel::Char CatalogName[kNewFSNodeNameLen]; Kernel::Int32 Flags; @@ -164,8 +163,8 @@ struct PACKED NFS_FORK_STRUCT final /// @brief Partition block type struct PACKED NFS_ROOT_PARTITION_BLOCK final { - NewCharType Ident[kNewFSIdentLen]; - NewCharType PartitionName[kPartLen]; + Kernel::Char Ident[kNewFSIdentLen]; + Kernel::Char PartitionName[kPartLen]; Kernel::Int32 Flags; Kernel::Int32 Kind; @@ -272,7 +271,7 @@ namespace Kernel bool Format(_Input _Output DriveTrait* drive); public: - Int32 fDriveIndex{kNewFSSubDriveA}; + Int32 fDriveIndex{kNewFSSubDriveC}; }; /// diff --git a/Kernel/FirmwareKit/Handover.hxx b/Kernel/FirmwareKit/Handover.hxx index 01f2be2c..43e7785c 100644 --- a/Kernel/FirmwareKit/Handover.hxx +++ b/Kernel/FirmwareKit/Handover.hxx @@ -22,7 +22,9 @@ /* useful macros */ #define kHandoverMagic 0xBADCC -#define kHandoverVersion 0x112 +#define kHandoverVersion 0x113 + +#define cMaxCmdLine 8 #define kHandoverStructSz sizeof(HEL::HandoverHeader) @@ -90,6 +92,7 @@ it tells us more about it and IS format independent. } f_GOP; UInt64 f_FirmwareSpecific[8]; + Char f_CommandLine[255][cMaxCmdLine]; }; enum diff --git a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx index 0557afac..2f82da6b 100644 --- a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx +++ b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx @@ -120,9 +120,6 @@ namespace Kernel::HAL STATIC MadtType* kApicInfoBlock = nullptr; - EXTERN_C SizeT kApicMadtAddressesCount = 0UL; - EXTERN_C SizeT cBspDone = 0UL; - enum { cAPICEOI = 0xb0, @@ -225,15 +222,7 @@ namespace Kernel::HAL if (kApicMadt != nullptr) { - UInt8 bsp_id, bsp_done = No; - - UInt32 num_cores = 4; - UInt32* local_apic_ptr = nullptr; - UInt32* local_apic_ids[255] = {0}; - - MadtType* type = (MadtType*)kApicMadt; - - local_apic_ptr = (UInt32*)type->Address; + kApicInfoBlock = (MadtType*)kApicMadt; } else { diff --git a/Kernel/HALKit/AMD64/HalHart.cxx b/Kernel/HALKit/AMD64/HalHart.cxx index adbf148c..93e1056d 100644 --- a/Kernel/HALKit/AMD64/HalHart.cxx +++ b/Kernel/HALKit/AMD64/HalHart.cxx @@ -12,7 +12,7 @@ namespace Kernel { /// @brief wakes up thread. /// wakes up thread from hang. - void rt_wakeup_thread(HAL::StackFrame* stack) + void mp_wakeup_thread(HAL::StackFrame* stack) { HAL::rt_cli(); @@ -23,7 +23,7 @@ namespace Kernel /// @brief makes the thread sleep on a loop. /// hooks and hangs thread to prevent code from executing. - void rt_hang_thread(HAL::StackFrame* stack) + void mp_hang_thread(HAL::StackFrame* stack) { while (true) { diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx index 4a6fa302..d21d2f9c 100644 --- a/Kernel/HALKit/AMD64/HalKernelMain.cxx +++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx @@ -24,8 +24,6 @@ X; \ Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP); - - Kernel::Property cKernelVersion; Kernel::Property cAutoFormatDisk; @@ -34,19 +32,19 @@ EXTERN_C void KeMain(); EXTERN_C Kernel::VoidPtr kInterruptVectorTable[]; -struct PACKED HeapAllocInfo final +struct PACKED HEAP_ALLOC_INFO final { Kernel::VoidPtr fThe; Kernel::Size fTheSz; }; -struct PACKED ProcessBlockInfo final +struct PACKED PROCESS_BLOCK_INFO final { ThreadInformationBlock* fTIB; ThreadInformationBlock* fPIB; }; -struct PACKED ProcessExitInfo final +struct PACKED PROCESS_EXIT_INFO final { STATIC constexpr auto cReasonLen = 512; @@ -146,7 +144,7 @@ EXTERN_C void hal_init_platform( kSyscalls[cNewInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { // get HAC struct. - HeapAllocInfo* rdxInf = reinterpret_cast<HeapAllocInfo*>(rdx); + HEAP_ALLOC_INFO* rdxInf = reinterpret_cast<HEAP_ALLOC_INFO*>(rdx); if (!rdxInf) return; @@ -157,7 +155,7 @@ EXTERN_C void hal_init_platform( kSyscalls[cDeleteInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { // get HAC struct. - HeapAllocInfo* rdxInf = reinterpret_cast<HeapAllocInfo*>(rdx); + HEAP_ALLOC_INFO* rdxInf = reinterpret_cast<HEAP_ALLOC_INFO*>(rdx); if (!rdxInf) return; @@ -167,7 +165,7 @@ EXTERN_C void hal_init_platform( }; kSyscalls[cTlsInstallInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - ProcessBlockInfo* rdxPb = reinterpret_cast<ProcessBlockInfo*>(rdx); + PROCESS_BLOCK_INFO* rdxPb = reinterpret_cast<PROCESS_BLOCK_INFO*>(rdx); if (!rdxPb) return; @@ -177,7 +175,7 @@ EXTERN_C void hal_init_platform( }; kSyscalls[cExitInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - ProcessExitInfo* rdxEi = reinterpret_cast<ProcessExitInfo*>(rdx); + PROCESS_EXIT_INFO* rdxEi = reinterpret_cast<PROCESS_EXIT_INFO*>(rdx); if (!rdxEi) return; @@ -187,22 +185,22 @@ EXTERN_C void hal_init_platform( }; kSyscalls[cLastExitInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - ProcessExitInfo* rdxEi = reinterpret_cast<ProcessExitInfo*>(rdx); + PROCESS_EXIT_INFO* rdxEi = reinterpret_cast<PROCESS_EXIT_INFO*>(rdx); if (!rdxEi) return; - rdxEi->fCode = Kernel::rt_get_exit_code(); + rdxEi->fCode = Kernel::sched_get_exit_code(); }; kSyscalls[cRebootInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_VendorPtr); - acpi.Reboot(); + Kernel::PowerFactoryInterface pow(kHandoverHeader->f_HardwareTables.f_VendorPtr); + pow.Reboot(); }; kSyscalls[cShutdownInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { - Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_VendorPtr); - acpi.Shutdown(); + Kernel::PowerFactoryInterface pow(kHandoverHeader->f_HardwareTables.f_VendorPtr); + pow.Shutdown(); }; kSyscalls[cSerialAlertInterrupt].Leak().Leak()->fHooked = true; @@ -220,16 +218,32 @@ EXTERN_C void hal_init_platform( Kernel::StringView strVer(cMaxPropLen); strVer += "\\Properties\\KernelVersion"; - cKernelVersion.GetKey() = strVer; - cKernelVersion.GetValue() = __MAHROUSS__; + cKernelVersion.GetKey() = strVer; + cKernelVersion.GetValue() = __MAHROUSS_VER__; - Kernel::StringView strAutoMount(cMaxPropLen); + Kernel::StringView strAutoMount(cMaxPropLen); strAutoMount += "\\Properties\\AutoMountFS?"; - cAutoFormatDisk.GetKey() = strAutoMount; - cAutoFormatDisk.GetValue() = Yes; + cAutoFormatDisk.GetKey() = strAutoMount; + + + for (size_t i = 0; i < cMaxCmdLine; i++) + { + if (Kernel::rt_string_cmp(kHandoverHeader->f_CommandLine[i], "/AutoFormat", Kernel::rt_string_len("/AutoFormat")) == 0) + { + cAutoFormatDisk.GetValue() = Yes; + break; + } + } - Kernel::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); + for (size_t i = 0; i < cMaxCmdLine; i++) + { + if (Kernel::rt_string_cmp(kHandoverHeader->f_CommandLine[i], "/SMP", Kernel::rt_string_len("/SMP")) == 0) + { + Kernel::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); + break; + } + } mInitKernel(KeMain()); } diff --git a/Kernel/HALKit/ARM64/HalHart.cxx b/Kernel/HALKit/ARM64/HalHart.cxx index d7a34505..2ed87b91 100644 --- a/Kernel/HALKit/ARM64/HalHart.cxx +++ b/Kernel/HALKit/ARM64/HalHart.cxx @@ -12,14 +12,14 @@ namespace Kernel { /// @brief wakes up thread. /// wakes up thread from hang. - void rt_wakeup_thread(HAL::StackFrame* stack) + void mp_wakeup_thread(HAL::StackFrame* stack) { rt_do_context_switch(stack); } /// @brief makes the thread sleep on a loop. /// hooks and hangs thread to prevent code from executing. - void rt_hang_thread(HAL::StackFrame* stack) + void mp_hang_thread(HAL::StackFrame* stack) { while (true) { diff --git a/Kernel/HALKit/ARM64/HalKernelMain.cxx b/Kernel/HALKit/ARM64/HalKernelMain.cxx index a5285f0f..0d6a8ca5 100644 --- a/Kernel/HALKit/ARM64/HalKernelMain.cxx +++ b/Kernel/HALKit/ARM64/HalKernelMain.cxx @@ -150,7 +150,7 @@ EXTERN_C void hal_init_platform( if (!rdxEi) return; - rdxEi->fCode = Kernel::rt_get_exit_code(); + rdxEi->fCode = Kernel::sched_get_exit_code(); }; kSyscalls[cRebootInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void { diff --git a/Kernel/HALKit/POWER/HalHart.cxx b/Kernel/HALKit/POWER/HalHart.cxx index 5ff12218..a49aeb3a 100644 --- a/Kernel/HALKit/POWER/HalHart.cxx +++ b/Kernel/HALKit/POWER/HalHart.cxx @@ -12,14 +12,14 @@ using namespace Kernel; /// @brief wakes up thread. /// wakes up thread from hang. -void rt_wakeup_thread(HAL::StackFramePtr stack) +void mp_wakeup_thread(HAL::StackFramePtr stack) { NEWOS_UNUSED(stack); } /// @brief makes thread sleep. /// hooks and hangs thread to prevent code from executing. -void rt_hang_thread(HAL::StackFramePtr stack) +void mp_hang_thread(HAL::StackFramePtr stack) { NEWOS_UNUSED(stack); } diff --git a/Kernel/KernelKit/CodeManager.hpp b/Kernel/KernelKit/CodeManager.hpp index 1787c051..5d1b5c86 100644 --- a/Kernel/KernelKit/CodeManager.hpp +++ b/Kernel/KernelKit/CodeManager.hpp @@ -18,8 +18,6 @@ #include <KernelKit/PEFCodeManager.hxx> #include <KernelKit/PEFSharedObject.hxx> -#define kUPPNameLen 64 - namespace Kernel { /// @brief Main process entrypoint. @@ -29,5 +27,5 @@ namespace Kernel /// @note This sets up a new stack, anything on the main function that calls the kernel will not be accessible. /// @param main the start of the process. /// @return if the process was started or not. - bool execute_from_image(MainKind main, const char* processName); + bool execute_from_image(MainKind main, const char* processName) noexcept; } // namespace Kernel
\ No newline at end of file diff --git a/Kernel/KernelKit/MPManager.hpp b/Kernel/KernelKit/MPManager.hpp index ccd1af37..c54f0aaf 100644 --- a/Kernel/KernelKit/MPManager.hpp +++ b/Kernel/KernelKit/MPManager.hpp @@ -17,6 +17,9 @@ namespace Kernel { + class HardwareThread; + class MPManager; + using ThreadID = UInt32; enum ThreadKind @@ -116,11 +119,11 @@ namespace Kernel /// @brief wakes up thread. /// wakes up thread from hang. - Void rt_wakeup_thread(HAL::StackFramePtr stack); + Void mp_wakeup_thread(HAL::StackFramePtr stack); /// @brief makes thread sleep. /// hooks and hangs thread to prevent code from executing. - Void rt_hang_thread(HAL::StackFramePtr stack); + Void mp_hang_thread(HAL::StackFramePtr stack); } // namespace Kernel #endif // !__INC_MP_MANAGER_HPP__ diff --git a/Kernel/KernelKit/ProcessScheduler.hxx b/Kernel/KernelKit/ProcessScheduler.hxx index 4f9f99f6..5c27af79 100644 --- a/Kernel/KernelKit/ProcessScheduler.hxx +++ b/Kernel/KernelKit/ProcessScheduler.hxx @@ -285,7 +285,7 @@ namespace Kernel STATIC SizeT StartScheduling(); }; - const Int32& rt_get_exit_code() noexcept; + const Int32& sched_get_exit_code(void) noexcept; } // namespace Kernel #include <KernelKit/ThreadLocalStorage.hxx> diff --git a/Kernel/KernelKit/User.hxx b/Kernel/KernelKit/User.hxx index c84910c5..ef31328b 100644 --- a/Kernel/KernelKit/User.hxx +++ b/Kernel/KernelKit/User.hxx @@ -90,7 +90,7 @@ namespace Kernel NEWOS_COPY_DELETE(UserView); STATIC UserView* The() noexcept; - Void LogIn(User* user, const Char* password) noexcept; + Bool LogIn(User* user, const Char* password) noexcept; Void LogOff() noexcept; }; } // namespace Kernel diff --git a/Kernel/NewKit/Macros.hpp b/Kernel/NewKit/Macros.hpp index ba636874..aecd6d89 100644 --- a/Kernel/NewKit/Macros.hpp +++ b/Kernel/NewKit/Macros.hpp @@ -52,9 +52,9 @@ #define ATTRIBUTE(X) __attribute__((X)) #endif // #ifndef ATTRIBUTE -#ifndef __MAHROUSS__ -#define __MAHROUSS__ (202404) -#endif // !__MAHROUSS__ +#ifndef __MAHROUSS_VER__ +#define __MAHROUSS_VER__ (202404) +#endif // !__MAHROUSS_VER__ #ifndef EXTERN_C #define EXTERN_C extern "C" diff --git a/Kernel/Sources/Heap.cxx b/Kernel/Sources/Heap.cxx index f24eda56..94406d1d 100644 --- a/Kernel/Sources/Heap.cxx +++ b/Kernel/Sources/Heap.cxx @@ -21,6 +21,8 @@ namespace Kernel STATIC SizeT kHeapCount = 0UL; STATIC PageManager kHeapPageManager; + STATIC Bool kOperationInProgress = No; + namespace Detail { /// @brief Kernel heap information block. @@ -45,6 +47,26 @@ namespace Kernel }; typedef HEAP_INFORMATION_BLOCK* HEAP_INFORMATION_BLOCK_PTR; + + Bool mm_alloc_init_timeout(Void) noexcept + { + SizeT timOut = 0U; + + while (kOperationInProgress) + { + ++timOut; + if (timOut > 10000000) + return false; + } + + kOperationInProgress = Yes; + return true; + } + + Void mm_alloc_fini_timeout(Void) noexcept + { + kOperationInProgress = No; + } } // namespace Detail /// @brief Declare a new size for allocatedPtr. @@ -76,6 +98,8 @@ namespace Kernel /// @return the pointer VoidPtr mm_new_ke_heap(const SizeT sz, const bool rw, const bool user) { + Detail::mm_alloc_init_timeout(); + auto szFix = sz; if (szFix == 0) @@ -95,6 +119,8 @@ namespace Kernel ++kHeapCount; + Detail::mm_alloc_fini_timeout(); + return reinterpret_cast<VoidPtr>(wrapper.VirtualAddress() + sizeof(Detail::HEAP_INFORMATION_BLOCK)); } @@ -111,12 +137,16 @@ namespace Kernel if (((IntPtr)heapPtr - kBadPtr) < 0) return -kErrorInternal; + Detail::mm_alloc_init_timeout(); + Detail::HEAP_INFORMATION_BLOCK_PTR heapInfoBlk = reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>( (UIntPtr)heapPtr - sizeof(Detail::HEAP_INFORMATION_BLOCK)); heapInfoBlk->fPagePtr = 1; + Detail::mm_alloc_fini_timeout(); + return 0; } @@ -132,6 +162,8 @@ namespace Kernel if (((IntPtr)heapPtr - kBadPtr) < 0) return -kErrorInternal; + Detail::mm_alloc_init_timeout(); + Detail::HEAP_INFORMATION_BLOCK_PTR heapInfoBlk = reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>( (UIntPtr)heapPtr - sizeof(Detail::HEAP_INFORMATION_BLOCK)); @@ -140,6 +172,7 @@ namespace Kernel { if (!heapInfoBlk->fPresent) { + Detail::mm_alloc_fini_timeout(); return -kErrorHeapNotPresent; } @@ -165,6 +198,9 @@ namespace Kernel kHeapPageManager.Free(pteAddress); --kHeapCount; + + Detail::mm_alloc_fini_timeout(); + return 0; } diff --git a/Kernel/Sources/MPManager.cxx b/Kernel/Sources/MPManager.cxx index d8faa983..3ad1e8aa 100644 --- a/Kernel/Sources/MPManager.cxx +++ b/Kernel/Sources/MPManager.cxx @@ -71,9 +71,9 @@ namespace Kernel fWakeup = wakeup; if (!fWakeup) - rt_hang_thread(fStack); + mp_hang_thread(fStack); else - rt_wakeup_thread(fStack); + mp_wakeup_thread(fStack); } EXTERN Bool rt_check_stack(HAL::StackFramePtr stackPtr); diff --git a/Kernel/Sources/Main.cxx b/Kernel/Sources/Main.cxx index 79febc15..145598ac 100644 --- a/Kernel/Sources/Main.cxx +++ b/Kernel/Sources/Main.cxx @@ -60,10 +60,10 @@ namespace Kernel::Detail if (fNewFS->GetParser()) { constexpr auto cFolderInfo = "META-INF"; - const auto cDirCount = 9; + const auto cDirCount = 7; const char* cDirStr[cDirCount] = { "\\Boot\\", "\\System\\", "\\Support\\", "\\Applications\\", - "\\Users\\", "\\Library\\", "\\Mounted\\", "\\DCIM\\", "\\Applications\\Store\\"}; + "\\Users\\", "\\Library\\", "\\Mounted\\"}; for (Kernel::SizeT dirIndx = 0UL; dirIndx < cDirCount; ++dirIndx) { @@ -102,7 +102,7 @@ namespace Kernel::Detail metadataFolder += "<!properties/>\r<p>Kind: folder</p>\r<p>Created by: system</p>\r<p>Edited by: " - "system</p>\r<p>Volume Type: Zeta</p>\r"; + "system</p>\r<p>Volume Type: ZKA Filesystem</p>\r"; metadataFolder += "<p>Path: "; metadataFolder += cDirStr[dirIndx]; @@ -121,53 +121,6 @@ namespace Kernel::Detail delete catalogSystem; } } - - NFS_CATALOG_STRUCT* catalogDisk = - this->fNewFS->GetParser()->GetCatalog("\\Mount\\SIM:"); - - const Kernel::Char* cSrcName = "DISK-INF"; - - if (catalogDisk) - { - delete catalogDisk; - } - else - { - catalogDisk = - (NFS_CATALOG_STRUCT*)this->Leak()->CreateAlias("\\Mount\\SIM:"); - - Kernel::StringView diskFolder(kNewFSSectorSz); - - diskFolder += - "<!properties/><p>Kind: alias to SIM Card</p>\r<p>Created by: system</p>\r<p>Edited " - "by: " - "system</p>\r<p>Volume Type: SIM Card</p>\r"; - - diskFolder += "<p>Root: "; - diskFolder += Kernel::NewFilesystemHelper::Root(); - diskFolder += "</p>\r"; - - NFS_FORK_STRUCT theDiskFork{0}; - - Kernel::rt_copy_memory((Kernel::VoidPtr)(cSrcName), theDiskFork.ForkName, - Kernel::rt_string_len(cSrcName)); - - Kernel::rt_copy_memory((Kernel::VoidPtr)(catalogDisk->Name), - theDiskFork.CatalogName, - Kernel::rt_string_len(catalogDisk->Name)); - - theDiskFork.DataSize = kNewFSForkSize; - theDiskFork.ResourceId = 0; - theDiskFork.ResourceKind = Kernel::kNewFSRsrcForkKind; - theDiskFork.Kind = Kernel::kNewFSDataForkKind; - - fNewFS->GetParser()->CreateFork(catalogDisk, theDiskFork); - fNewFS->GetParser()->WriteCatalog(catalogDisk, - (Kernel::VoidPtr)diskFolder.CData(), - kNewFSSectorSz, cSrcName); - - delete catalogDisk; - } } } @@ -190,7 +143,7 @@ namespace Kernel::Detail { Kernel::UserView::The()->fRootUser = new User(RingKind::kRingSuperUser, kSuperUser); - Kernel::UserView::The()->LogIn(Kernel::UserView::The()->fRootUser, ""); + Kernel::UserView::The()->LogIn(Kernel::UserView::The()->fRootUser, "root"); Kernel::kcout << "newoskrnl: " << cKernelVersion.GetKey().CData() << ": " << Kernel::number(cKernelVersion.GetValue()) << Kernel::endl; } diff --git a/Kernel/Sources/ProcessScheduler.cxx b/Kernel/Sources/ProcessScheduler.cxx index 7002bd1f..3301588a 100644 --- a/Kernel/Sources/ProcessScheduler.cxx +++ b/Kernel/Sources/ProcessScheduler.cxx @@ -32,7 +32,7 @@ namespace Kernel /// @brief Gets the last exit code. /// @note Not thread-safe. /// @return Int32 the last exit code. - const Int32& rt_get_exit_code() noexcept + const Int32& sched_get_exit_code(void) noexcept { return cLastExitCode; } diff --git a/Kernel/Sources/User.cxx b/Kernel/Sources/User.cxx index 92acba97..49c5cad9 100644 --- a/Kernel/Sources/User.cxx +++ b/Kernel/Sources/User.cxx @@ -15,6 +15,8 @@ #include <KernelKit/FileManager.hpp> #include <KernelKit/ProcessScheduler.hxx> +#include <KernelKit/Heap.hxx> + /// bugs 0 namespace Kernel @@ -77,18 +79,24 @@ namespace Kernel return view; } - Void UserView::LogIn(User* user, const Char* password) noexcept + Bool UserView::LogIn(User* user, const Char* password) noexcept { if (!password || !user) { ErrLocal() = kErrorInvalidData; - return; + kcout << "newoskrnl: Incorrect data given.\r"; + + return false; } FileStreamUTF8 file(kUsersFile, "rb"); + // ------------------------------------------ // + // Retrieve token from a specific file fork. + // ------------------------------------------ // + auto token = file.Read(password); if (!token) @@ -96,9 +104,25 @@ namespace Kernel ErrLocal() = kErrorInvalidCreds; kcout << "newoskrnl: Incorrect credentials.\r"; - return; + return false; + } + else + { + if (rt_string_cmp((Char*)token, const_cast<Char*>(password), rt_string_len(password))) + { + kcout << "newoskrnl: Incorrect credentials.\r"; + + mm_delete_ke_heap(token); + return false; + } + + kcout << "newoskrnl: Correct credentials, moving on.\r"; } + // ------------------------------------------ // + // This was successful, continue. + // ------------------------------------------ // + user->fUserToken = token; if (fCurrentUser) @@ -115,6 +139,8 @@ namespace Kernel fCurrentUser = user; Kernel::kcout << "newoskrnl: logged in as: " << fCurrentUser->Name().CData() << Kernel::endl; + + return true; } Void UserView::LogOff() noexcept |
