summaryrefslogtreecommitdiffhomepage
path: root/Kernel
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel')
-rw-r--r--Kernel/FSKit/NewFS.hxx23
-rw-r--r--Kernel/FirmwareKit/Handover.hxx5
-rw-r--r--Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx13
-rw-r--r--Kernel/HALKit/AMD64/HalHart.cxx4
-rw-r--r--Kernel/HALKit/AMD64/HalKernelMain.cxx56
-rw-r--r--Kernel/HALKit/ARM64/HalHart.cxx4
-rw-r--r--Kernel/HALKit/ARM64/HalKernelMain.cxx2
-rw-r--r--Kernel/HALKit/POWER/HalHart.cxx4
-rw-r--r--Kernel/KernelKit/CodeManager.hpp4
-rw-r--r--Kernel/KernelKit/MPManager.hpp7
-rw-r--r--Kernel/KernelKit/ProcessScheduler.hxx2
-rw-r--r--Kernel/KernelKit/User.hxx2
-rw-r--r--Kernel/NewKit/Macros.hpp6
-rw-r--r--Kernel/Sources/Heap.cxx36
-rw-r--r--Kernel/Sources/MPManager.cxx4
-rw-r--r--Kernel/Sources/Main.cxx55
-rw-r--r--Kernel/Sources/ProcessScheduler.cxx2
-rw-r--r--Kernel/Sources/User.cxx32
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