summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-08-09 19:55:54 +0200
committerAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-08-09 19:56:35 +0200
commit1c217ed09c6c4b13ec09b897270a208439f0db55 (patch)
tree43c93aef6ee233fafcd7ca07a5700dd76d5ecdf5
parentacd8297fe927e601a7173cec7ca5445fd4a9c74a (diff)
[FIX] Fix bootloop on serial write, fixing more bugs now, still have to
fix allocation. Signed-off-by: Amlal EL Mahrouss <amlalelmahrouss@icloud.com>
-rw-r--r--Boot/BootKit/BootKit.hxx13
-rw-r--r--Boot/BootKit/Rsrc/NewBoot.rsrc4
-rw-r--r--Boot/BootKit/Rsrc/NewBootFatal.rsrc4
-rw-r--r--Boot/Sources/HEL/AMD64/BootATA.cxx5
-rw-r--r--Boot/Sources/HEL/AMD64/Support.cxx3
-rw-r--r--Boot/amd64-efi.make2
-rw-r--r--Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx10
-rw-r--r--Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx5
-rw-r--r--Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx3
-rw-r--r--Kernel/HALKit/AMD64/HalDebugOutput.cxx4
-rw-r--r--Kernel/HALKit/AMD64/HalKernelMain.cxx44
-rw-r--r--Kernel/KernelKit/DebugOutput.hxx36
-rw-r--r--Kernel/KernelKit/User.hxx12
-rw-r--r--Kernel/NewKit/ErrorOr.hxx2
-rw-r--r--Kernel/Sources/HalPageAlloc.cxx2
-rw-r--r--Kernel/Sources/Heap.cxx19
-rw-r--r--Kernel/Sources/KernelCheck.cxx2
-rw-r--r--Kernel/Sources/User.cxx46
18 files changed, 126 insertions, 90 deletions
diff --git a/Boot/BootKit/BootKit.hxx b/Boot/BootKit/BootKit.hxx
index 680c9863..f716890a 100644
--- a/Boot/BootKit/BootKit.hxx
+++ b/Boot/BootKit/BootKit.hxx
@@ -243,11 +243,11 @@ public:
blockPart->SectorSize != BootDev::kSectorSize ||
blockPart->Version != kNewFSVersionInteger)
{
- EFI::ThrowError(L"Invalid-Disk-Geometry", L"Invalid disk.");
+ return false;
}
else if (blockPart->PartitionName[0] == 0)
{
- EFI::ThrowError(L"Invalid-Partition-Name", L"Invalid disk partition.");
+ return false;
}
writer.Write(L"newosldr: partition name: ").Write(blockPart->PartitionName).Write(L" is healthy.\r");
@@ -281,19 +281,12 @@ private:
catalogKind->Kind = blob->fKind;
catalogKind->Flags = kNewFSFlagCreated;
- /// before going to forks, we must check for the catalog name first.
- if (blob->fKind == kNewFSCatalogKindDir &&
- blob->fFileName[strlen(blob->fFileName) - 1] != kNewFSSeparator)
- {
- EFI::ThrowError(L"Developer-Error", L"This is caused by the developer of the bootloader.");
- }
-
--partBlock.FreeCatalog;
--partBlock.FreeSectors;
writer.Write(L"newosldr: root directory: ").Write(blob->fFileName).Write(L"\r");
- memcpy(catalogKind->Name, blob->fFileName, strlen(blob->fFileName));
+ CopyMem(catalogKind->Name, blob->fFileName, StrLen(blob->fFileName));
fDiskDev.Leak().mBase = startLba;
fDiskDev.Leak().mSize = sizeof(NFS_CATALOG_STRUCT);
diff --git a/Boot/BootKit/Rsrc/NewBoot.rsrc b/Boot/BootKit/Rsrc/NewBoot.rsrc
index 15da3029..68b6cba1 100644
--- a/Boot/BootKit/Rsrc/NewBoot.rsrc
+++ b/Boot/BootKit/Rsrc/NewBoot.rsrc
@@ -1,5 +1,5 @@
-#define NEWBOOT_HEIGHT 239
-#define NEWBOOT_WIDTH 402
+#define NEWOSLDR_HEIGHT 239
+#define NEWOSLDR_WIDTH 402
// array size is 288234
static const unsigned int NewBoot[] = {
diff --git a/Boot/BootKit/Rsrc/NewBootFatal.rsrc b/Boot/BootKit/Rsrc/NewBootFatal.rsrc
index bad1ccd1..7422c8ec 100644
--- a/Boot/BootKit/Rsrc/NewBootFatal.rsrc
+++ b/Boot/BootKit/Rsrc/NewBootFatal.rsrc
@@ -1,5 +1,5 @@
-#define NEWBOOTFATAL_HEIGHT 239
-#define NEWBOOTFATAL_WIDTH 402
+#define NEWOSLDRFATAL_HEIGHT 239
+#define NEWOSLDRFATAL_WIDTH 402
// array size is 288234
static const unsigned int NewBootFatal[] = {
diff --git a/Boot/Sources/HEL/AMD64/BootATA.cxx b/Boot/Sources/HEL/AMD64/BootATA.cxx
index 1a59ce5c..63956520 100644
--- a/Boot/Sources/HEL/AMD64/BootATA.cxx
+++ b/Boot/Sources/HEL/AMD64/BootATA.cxx
@@ -190,6 +190,8 @@ BootDeviceATA::BootDeviceATA() noexcept
boot_ata_init(ATA_SECONDARY_IO, true, this->Leak().mBus,
this->Leak().mMaster))
{
+ BTextWriter writer;
+ writer.Write("ATA: Has been detected.\r");
kATADetected = true;
}
}
@@ -250,6 +252,9 @@ BootDeviceATA& BootDeviceATA::Write(CharacterTypeUTF8* Buf, const SizeT& SectorS
boot_ata_write(lba, this->Leak().mBus, this->Leak().mMaster,
Buf, SectorSz, this->Leak().mSize);
+ BTextWriter writer;
+ writer.Write("OK\r");
+
return *this;
}
diff --git a/Boot/Sources/HEL/AMD64/Support.cxx b/Boot/Sources/HEL/AMD64/Support.cxx
index 8c82f78a..08e7dd65 100644
--- a/Boot/Sources/HEL/AMD64/Support.cxx
+++ b/Boot/Sources/HEL/AMD64/Support.cxx
@@ -45,9 +45,6 @@ EXTERN_C VoidPtr memcpy(void* dst, const void* src, long long unsigned int len)
/// @brief strlen definition in C++.
EXTERN_C size_t strlen(const char* whatToCheck)
{
- if (!whatToCheck || *whatToCheck == 0)
- return 0;
-
SizeT len = 0;
while (whatToCheck[len] != 0)
diff --git a/Boot/amd64-efi.make b/Boot/amd64-efi.make
index 650b1992..9f0d2966 100644
--- a/Boot/amd64-efi.make
+++ b/Boot/amd64-efi.make
@@ -64,7 +64,7 @@ all: compile-amd64
mkdir -p Sources/Root/EFI/BOOT
$(LD_GNU) $(OBJ) $(LD_FLAGS) -o Sources/$(BOOT_LOADER)
$(COPY) Sources/$(BOOT_LOADER) Sources/Root/EFI/BOOT/BOOTX64.EFI
- $(COPY) Sources/$(BOOT_LOADER) Sources/Root/EFI/BOOT/NEWBOOT.EFI
+ $(COPY) Sources/$(BOOT_LOADER) Sources/Root/EFI/BOOT/NEWOSLDR.EFI
$(COPY) ../Kernel/$(KERNEL) Sources/Root/$(KERNEL)
$(COPY) ../SCIKit/$(SCI) Sources/Root/$(SCI)
$(COPY) ../DDKit/$(DDK) Sources/Root/$(DDK)
diff --git a/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx b/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx
index aca319c3..e13cc0fc 100644
--- a/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx
+++ b/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx
@@ -102,18 +102,18 @@ namespace Kernel
for (Size index = 0; index < this->fEntries; ++index)
{
- SDT& sdt = *reinterpret_cast<SDT*>(xsdt->AddressArr[index]);
+ SDT* sdt = reinterpret_cast<SDT*>(xsdt->AddressArr[index]);
- kcout << "ACPI: Checksum: " << number(sdt.Checksum) << endl;
- kcout << "ACPI: Revision: " << number(sdt.Revision) << endl;
+ kcout << "ACPI: Checksum: " << number(sdt->Checksum) << endl;
+ kcout << "ACPI: Revision: " << number(sdt->Revision) << endl;
for (short signature_index = 0; signature_index < cAcpiSignatureLength; ++signature_index)
{
- if (sdt.Signature[signature_index] != signature[signature_index])
+ if (sdt->Signature[signature_index] != signature[signature_index])
break;
if (signature_index == (cAcpiSignatureLength - 1))
- return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>(&sdt));
+ return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>(xsdt->AddressArr[index]));
}
}
diff --git a/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx b/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
index c181be30..bf463ae9 100644
--- a/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
+++ b/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
@@ -84,10 +84,13 @@ EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr
/// @return nothing.
EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr rdx, Kernel::UIntPtr r8, Kernel::UIntPtr r9)
{
- if (rcx != 0)
+ if (rcx <= (kSyscalls.Count() - 1))
{
Kernel::kcout << "newoskrnl: kerncall: enter.\r";
+ if (kKerncalls[rcx].Leak().Leak()->fHooked)
+ (kKerncalls[rcx].Leak().Leak()->fProc)((Kernel::VoidPtr)rdx);
+
Kernel::kcout << "newoskrnl: kerncall: exit.\r";
}
}
diff --git a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx
index 5c1a4323..d15fba73 100644
--- a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx
+++ b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx
@@ -16,6 +16,8 @@
#include <KernelKit/MP.hxx>
+#define kApicSignature "APIC"
+
#define kAPIC_ICR_Low 0x300
#define kAPIC_ICR_High 0x310
#define kAPIC_SIPI_Vector 0x00500
@@ -66,7 +68,6 @@ namespace Kernel::HAL
};
STATIC VoidPtr kApicMadt = nullptr;
- STATIC const Char* kApicSignature = "APIC";
/// @brief Multiple APIC Descriptor Table.
struct MadtType final : public SDT
diff --git a/Kernel/HALKit/AMD64/HalDebugOutput.cxx b/Kernel/HALKit/AMD64/HalDebugOutput.cxx
index b80ab761..3b4c29c7 100644
--- a/Kernel/HALKit/AMD64/HalDebugOutput.cxx
+++ b/Kernel/HALKit/AMD64/HalDebugOutput.cxx
@@ -136,9 +136,9 @@ namespace Kernel
#endif // __DEBUG__
}
- TerminalDevice& TerminalDevice::The() noexcept
+ TerminalDevice TerminalDevice::The() noexcept
{
- STATIC TerminalDevice out(Kernel::ke_io_write, Kernel::ke_io_read);
+ TerminalDevice out(Kernel::ke_io_write, Kernel::ke_io_read);
return out;
}
diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx
index 93841bc1..924eb6c9 100644
--- a/Kernel/HALKit/AMD64/HalKernelMain.cxx
+++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx
@@ -53,6 +53,13 @@ namespace Kernel::HAL
extern void hal_system_get_cores(Kernel::voidPtr rsdPtr);
} // namespace Kernel::HAL
+namespace Kernel
+{
+ EXTERN SizeT kHeapCount;
+ EXTERN PageManager kHeapPageManager;
+ EXTERN Bool kOperationInProgress;
+} // namespace Kernel
+
/* GDT. */
STATIC Kernel::HAL::Detail::NewOSGDT cGdt = {
{0, 0, 0, 0x00, 0x00, 0}, // null entry
@@ -65,6 +72,8 @@ STATIC Kernel::HAL::Detail::NewOSGDT cGdt = {
void hal_real_init(void);
+static Kernel::User* cRoot;
+
EXTERN_C void hal_init_platform(
Kernel::HEL::HandoverInformationHeader* HandoverHeader)
{
@@ -78,25 +87,24 @@ EXTERN_C void hal_init_platform(
return;
}
- STATIC Kernel::UInt32 kTextOffsetY = 30;
-
- cg_write_text("NEWOSKRNL (C) ZKA TECHNOLOGIES.", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00));
- kTextOffsetY += 10;
- cg_write_text("SMP OS (MAX 8 CORES).", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00));
-
- Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP);
-
hal_real_init();
}
+EXTERN Kernel::Boolean kAllocationInProgress;
+
void hal_real_init(void)
{
+ Kernel::kHeapPageManager = Kernel::PageManager();
+ Kernel::kHeapCount = 0UL;
+ Kernel::kOperationInProgress = No;
+ kAllocationInProgress = No;
+
// get page size.
kKernelVirtualSize = kHandoverHeader->f_VirtualSize;
- // get virtual address start.
+ // get virtual address start (for the heap)
kKernelVirtualStart = reinterpret_cast<Kernel::VoidPtr>(
- reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_VirtualStart));
+ reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_VirtualStart) + cHeapStartOffset);
// get physical address start.
kKernelPhysicalStart = reinterpret_cast<Kernel::VoidPtr>(
@@ -217,5 +225,19 @@ void hal_real_init(void)
kSyscalls[cShutdownInterrupt].Leak().Leak()->fHooked = true;
kSyscalls[cRebootInterrupt].Leak().Leak()->fHooked = true;
- Kernel::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
+ cRoot = new Kernel::User(Kernel::RingKind::kRingSuperUser, kSuperUser);
+
+#ifdef __DEBUG__
+ cRoot->TrySave("6aa162f3-20f6-4143-92f9-5dd37066aedc");
+#else
+ cRoot->TrySave("password");
+#endif
+
+#ifdef __DEBUG__
+ Kernel::UserManager::The()->TryLogIn(cRoot, "6aa162f3-20f6-4143-92f9-5dd37066aedc");
+#else
+ Kernel::UserManager::The()->TryLogIn(cRoot, "password");
+#endif
+
+ Kernel::ke_stop(RUNTIME_CHECK_FAILED);
}
diff --git a/Kernel/KernelKit/DebugOutput.hxx b/Kernel/KernelKit/DebugOutput.hxx
index f0c4565a..4e01381c 100644
--- a/Kernel/KernelKit/DebugOutput.hxx
+++ b/Kernel/KernelKit/DebugOutput.hxx
@@ -29,9 +29,9 @@ namespace Kernel
{
class TerminalDevice;
- inline TerminalDevice& end_line();
- inline TerminalDevice& number(const Long& x);
- inline TerminalDevice& hex_number(const Long& x);
+ inline TerminalDevice end_line();
+ inline TerminalDevice number(const Long& x);
+ inline TerminalDevice hex_number(const Long& x);
// @brief Emulates a VT100 terminal.
class TerminalDevice final : public DeviceInterface<const Char*>
@@ -53,34 +53,34 @@ namespace Kernel
NEWOS_COPY_DEFAULT(TerminalDevice);
- static TerminalDevice& The() noexcept;
+ STATIC TerminalDevice The() noexcept;
};
- inline TerminalDevice& end_line()
+ inline TerminalDevice end_line()
{
- TerminalDevice& selfTerm = TerminalDevice::The();
+ TerminalDevice selfTerm = TerminalDevice::The();
selfTerm << "\r";
return selfTerm;
}
- inline TerminalDevice& carriage_return()
+ inline TerminalDevice carriage_return()
{
- TerminalDevice& selfTerm = TerminalDevice::The();
+ TerminalDevice selfTerm = TerminalDevice::The();
selfTerm << "\r";
return selfTerm;
}
- inline TerminalDevice& tabulate()
+ inline TerminalDevice tabulate()
{
- TerminalDevice& selfTerm = TerminalDevice::The();
+ TerminalDevice selfTerm = TerminalDevice::The();
selfTerm << "\t";
return selfTerm;
}
/// @brief emulate a terminal bell, like the VT100 does.
- inline TerminalDevice& bell()
+ inline TerminalDevice bell()
{
- TerminalDevice& selfTerm = TerminalDevice::The();
+ TerminalDevice selfTerm = TerminalDevice::The();
selfTerm << "\a";
return selfTerm;
}
@@ -144,9 +144,9 @@ namespace Kernel
}
} // namespace Detail
- inline TerminalDevice& hex_number(const Long& x)
+ inline TerminalDevice hex_number(const Long& x)
{
- TerminalDevice& selfTerm = TerminalDevice::The();
+ TerminalDevice selfTerm = TerminalDevice::The();
selfTerm << "0x";
Detail::_write_number_hex(x, selfTerm);
@@ -154,18 +154,18 @@ namespace Kernel
return selfTerm;
}
- inline TerminalDevice& number(const Long& x)
+ inline TerminalDevice number(const Long& x)
{
- TerminalDevice& selfTerm = TerminalDevice::The();
+ TerminalDevice selfTerm = TerminalDevice::The();
Detail::_write_number(x, selfTerm);
return selfTerm;
}
- inline TerminalDevice& get_console_in(Char* buf)
+ inline TerminalDevice get_console_in(Char* buf)
{
- TerminalDevice& selfTerm = TerminalDevice::The();
+ TerminalDevice selfTerm = TerminalDevice::The();
selfTerm >> buf;
diff --git a/Kernel/KernelKit/User.hxx b/Kernel/KernelKit/User.hxx
index a7aaa508..169a8bce 100644
--- a/Kernel/KernelKit/User.hxx
+++ b/Kernel/KernelKit/User.hxx
@@ -57,7 +57,7 @@ namespace Kernel
public:
/// @brief Get software ring
const RingKind& Ring() noexcept;
-
+
/// @brief Get user name
StringView& Name() noexcept;
@@ -67,6 +67,8 @@ namespace Kernel
/// @brief Is she a super user?
Bool IsSuperUser() noexcept;
+ Bool TrySave(const Char* password) noexcept;
+
private:
RingKind fRing{RingKind::kRingStdUser};
StringView fUserName;
@@ -77,7 +79,7 @@ namespace Kernel
class UserManager final
{
- UserManager() = default;
+ UserManager() = default;
~UserManager() = default;
User* fCurrentUser = nullptr;
@@ -90,9 +92,9 @@ namespace Kernel
NEWOS_COPY_DELETE(UserManager);
STATIC UserManager* The() noexcept;
- Bool TryLogIn(User* user, const Char* password) noexcept;
- User* GetCurrent() noexcept;
- Void TryLogOff() noexcept;
+ Bool TryLogIn(User* user, const Char* password) noexcept;
+ User* GetCurrent() noexcept;
+ Void TryLogOff() noexcept;
};
} // namespace Kernel
diff --git a/Kernel/NewKit/ErrorOr.hxx b/Kernel/NewKit/ErrorOr.hxx
index 9cd6087d..4a8897c8 100644
--- a/Kernel/NewKit/ErrorOr.hxx
+++ b/Kernel/NewKit/ErrorOr.hxx
@@ -47,7 +47,7 @@ namespace Kernel
return *this;
}
- Ref<T> Leak()
+ Ref<T>& Leak()
{
return mRef;
}
diff --git a/Kernel/Sources/HalPageAlloc.cxx b/Kernel/Sources/HalPageAlloc.cxx
index 645b8e46..f22db98a 100644
--- a/Kernel/Sources/HalPageAlloc.cxx
+++ b/Kernel/Sources/HalPageAlloc.cxx
@@ -15,7 +15,7 @@
#include <NewKit/Defines.hxx>
#include <NewKit/KernelCheck.hxx>
-STATIC Kernel::Boolean kAllocationInProgress = false;
+Kernel::Boolean kAllocationInProgress = false;
namespace Kernel
{
diff --git a/Kernel/Sources/Heap.cxx b/Kernel/Sources/Heap.cxx
index 72c0b77c..167636a0 100644
--- a/Kernel/Sources/Heap.cxx
+++ b/Kernel/Sources/Heap.cxx
@@ -18,10 +18,9 @@
namespace Kernel
{
- STATIC SizeT kHeapCount = 0UL;
- STATIC PageManager kHeapPageManager;
-
- STATIC Bool kOperationInProgress = No;
+ SizeT kHeapCount = 0UL;
+ PageManager kHeapPageManager;
+ Bool kOperationInProgress = No;
namespace Detail
{
@@ -48,19 +47,9 @@ namespace Kernel
typedef HEAP_INFORMATION_BLOCK* HEAP_INFORMATION_BLOCK_PTR;
- Bool mm_alloc_init_timeout(Void) noexcept
+ Void 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
diff --git a/Kernel/Sources/KernelCheck.cxx b/Kernel/Sources/KernelCheck.cxx
index bf3d91b6..cff17077 100644
--- a/Kernel/Sources/KernelCheck.cxx
+++ b/Kernel/Sources/KernelCheck.cxx
@@ -68,7 +68,7 @@ namespace Kernel
switch (id)
{
case RUNTIME_CHECK_PROCESS: {
- cg_write_text("Scheduler error.", start_y, x, panicTxt);
+ cg_write_text("Process scheduler error (Catasrophic failure).", start_y, x, panicTxt);
break;
}
case RUNTIME_CHECK_ACPI: {
diff --git a/Kernel/Sources/User.cxx b/Kernel/Sources/User.cxx
index 2b22cf05..46dd0d76 100644
--- a/Kernel/Sources/User.cxx
+++ b/Kernel/Sources/User.cxx
@@ -33,33 +33,57 @@ namespace Kernel
for (Size i_pass = 0; i_pass < rt_string_len(password); ++i_pass)
{
- Char cur_chr = password[i_pass];
+ Char cur_chr = password[i_pass];
password[i_pass] = cur_chr + (user->IsStdUser() ? 0xCF : 0xEF);
}
-
return 0;
}
- }
+ } // namespace Detail
User::User(const Int32& sel, const Char* userName)
: fRing((RingKind)sel)
{
MUST_PASS(sel >= 0);
-
- auto view = StringBuilder::Construct(userName);
- this->fUserName += view.Leak().Leak();
+ this->fUserName += userName;
}
User::User(const RingKind& ringKind, const Char* userName)
: fRing(ringKind)
{
- auto view = StringBuilder::Construct(userName);
- this->fUserName += view.Leak().Leak();
+ this->fUserName += userName;
}
User::~User() = default;
+ Bool User::TrySave(const Char* password) noexcept
+ {
+ SizeT len = rt_string_len(password);
+
+ Char* token = new Char[len];
+
+ MUST_PASS(token);
+
+ rt_copy_memory((VoidPtr)password, token, rt_string_len(password));
+
+ Detail::cred_construct_token(token, this);
+
+ if (NewFilesystemManager::GetMounted())
+ {
+ if (auto dir = NewFilesystemManager::GetMounted()->CreateDirectory("\\Users"))
+ delete dir;
+
+ auto node = NewFilesystemManager::GetMounted()->Create(kUsersFile);
+ NewFilesystemManager::GetMounted()->Write(this->fUserName.CData(), node, (VoidPtr)token, this->IsStdUser() ? 0xCF : 0xEF, len);
+
+ delete node;
+
+ return true;
+ }
+
+ return false;
+ }
+
bool User::operator==(const User& lhs)
{
return lhs.fRing == this->fRing;
@@ -129,7 +153,7 @@ namespace Kernel
}
else
{
- Char generated_token[255] = { 0 };
+ Char generated_token[255] = {0};
// ================================================== //
// Provide password on token variable.
@@ -155,7 +179,7 @@ namespace Kernel
return false;
}
- kcout << "newoskrnl: Correct credentials, moving on.\r";
+ kcout << "newoskrnl: Credentials are correct, moving on.\r";
}
// ------------------------------------------ //
@@ -177,7 +201,7 @@ namespace Kernel
}
fCurrentUser = user;
- Kernel::kcout << "newoskrnl: logged in as: " << fCurrentUser->Name().CData() << Kernel::endl;
+ Kernel::kcout << "newoskrnl: Logged in as: " << fCurrentUser->Name().CData() << Kernel::endl;
return true;
}