From 0c43e344918569474e1460876105c9f1eb43efa8 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 24 Mar 2026 12:25:55 +0100 Subject: [FEAT] Kernel: UTF-8 usage in UserMgr. Signed-off-by: Amlal El Mahrouss --- src/kernel/KernelKit/Semaphore.h | 7 +++++++ src/kernel/KernelKit/User.h | 8 ++++---- src/kernel/src/Property.cpp | 2 ++ src/kernel/src/User.cpp | 13 ++++++------- 4 files changed, 19 insertions(+), 11 deletions(-) (limited to 'src/kernel') diff --git a/src/kernel/KernelKit/Semaphore.h b/src/kernel/KernelKit/Semaphore.h index bb6b9ba9..4dc9a454 100644 --- a/src/kernel/KernelKit/Semaphore.h +++ b/src/kernel/KernelKit/Semaphore.h @@ -29,6 +29,7 @@ using SemaphoreArr = UInt64[kSemaphoreCount]; /// @brief Checks if the semaphore is valid. inline bool rtl_sem_is_valid(const SemaphoreArr& sem, const UInt64& owner = 0) { + if (!sem) return false; return sem[kSemaphoreOwnerIndex] == owner && sem[kSemaphoreCountIndex] > 0; } @@ -36,6 +37,8 @@ inline bool rtl_sem_is_valid(const SemaphoreArr& sem, const UInt64& owner = 0) { /// @param sem /// @return inline bool rtl_sem_release(SemaphoreArr& sem) { + if (!sem) return false; + sem[kSemaphoreOwnerIndex] = 0; sem[kSemaphoreCountIndex] = 0; @@ -47,6 +50,8 @@ inline bool rtl_sem_release(SemaphoreArr& sem) { /// @param owner the owner to set, could be anything identifitable. /// @return inline bool rtl_sem_acquire(SemaphoreArr& sem, const UInt64& owner) { + if (!sem) return false; + if (!owner) { err_global_get() = kErrorInvalidData; return false; // Invalid owner, return false and set KPC. @@ -65,6 +70,8 @@ inline bool rtl_sem_acquire(SemaphoreArr& sem, const UInt64& owner) { /// @return inline bool rtl_sem_wait(SemaphoreArr& sem, const UInt64& owner, const UInt64& timeout, bool& condition) { + if (!sem) return false; + if (!rtl_sem_is_valid(sem, owner)) { return false; } diff --git a/src/kernel/KernelKit/User.h b/src/kernel/KernelKit/User.h index bae51180..6711bce7 100644 --- a/src/kernel/KernelKit/User.h +++ b/src/kernel/KernelKit/User.h @@ -42,16 +42,16 @@ enum struct UserRingKind : Int32 { kRingCount = 3, }; -using UserPublicKey = Char*; -using UserPublicKeyType = Char; +using UserPublicKey = Char8*; +using UserPublicKeyType = Char8; /// @brief System User class. class User final { public: User() = delete; - User(const Int32& sel, const Char* username); - User(const UserRingKind& kind, const Char* username); + User(const Int32& sel, const UserPublicKeyType* username); + User(const UserRingKind& kind, const UserPublicKeyType* username); ~User(); diff --git a/src/kernel/src/Property.cpp b/src/kernel/src/Property.cpp index 6db475e8..6da6ae70 100644 --- a/src/kernel/src/Property.cpp +++ b/src/kernel/src/Property.cpp @@ -6,6 +6,7 @@ #include namespace Kernel::CF { + /***********************************************************************************/ /// @brief Destructor. /***********************************************************************************/ @@ -37,4 +38,5 @@ KBasicString<>& Property::GetKey() { PropertyId& Property::GetValue() { return fValue; } + } // namespace Kernel::CF diff --git a/src/kernel/src/User.cpp b/src/kernel/src/User.cpp index 3f5bb66a..daaf27a4 100644 --- a/src/kernel/src/User.cpp +++ b/src/kernel/src/User.cpp @@ -23,7 +23,7 @@ namespace Detail { /// \param password password to hash. /// \return the hashed password //////////////////////////////////////////////////////////// - STATIC UInt64 user_fnv_generator(const Char* password, User* user) { + STATIC UInt64 user_fnv_generator(const UserPublicKeyType* password, User* user) { kout << "user_fnv_generator: Try hashing user password...\r"; if (!password || !user) return 0; @@ -48,18 +48,17 @@ namespace Detail { //////////////////////////////////////////////////////////// /// @brief User ring constructor. //////////////////////////////////////////////////////////// -User::User(const Int32& sel, const Char* user_name) : mUserRing((UserRingKind) sel) { +User::User(const Int32& sel, const UserPublicKeyType* user_name) : mUserRing((UserRingKind) sel) { MUST_PASS(sel >= 0); - rt_copy_memory_safe((VoidPtr) user_name, this->mUserName, rt_string_len(user_name), - kMaxUserNameLen); + urt_copy_memory((VoidPtr) user_name, this->mUserName, urt_string_len(user_name)); } //////////////////////////////////////////////////////////// /// @brief User ring constructor. //////////////////////////////////////////////////////////// -User::User(const UserRingKind& ring_kind, const Char* user_name) : mUserRing(ring_kind) { - rt_copy_memory_safe((VoidPtr) user_name, this->mUserName, rt_string_len(user_name), - kMaxUserNameLen); +User::User(const UserRingKind& ring_kind, const UserPublicKeyType* user_name) + : mUserRing(ring_kind) { + urt_copy_memory((VoidPtr) user_name, this->mUserName, urt_string_len(user_name)); } //////////////////////////////////////////////////////////// -- cgit v1.2.3 From efdde41a4421fc44027f4b12d84adcb13adf11e0 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 24 Mar 2026 12:30:56 +0100 Subject: [FEAT] Add User AgeAuth API. Signed-off-by: Amlal El Mahrouss --- src/kernel/KernelKit/User.h | 5 +++++ src/kernel/src/User.cpp | 2 ++ src/libSystem/SystemKit/System.h | 6 ++++++ 3 files changed, 13 insertions(+) (limited to 'src/kernel') diff --git a/src/kernel/KernelKit/User.h b/src/kernel/KernelKit/User.h index 6711bce7..cc64bd1c 100644 --- a/src/kernel/KernelKit/User.h +++ b/src/kernel/KernelKit/User.h @@ -82,10 +82,15 @@ class User final { /// @param password the password to check. Bool Login(const UserPublicKey password); + /// @brief Returns whether the user is an adult or not. + Bool IsAdult(); + private: UserRingKind mUserRing{UserRingKind::kRingStdUser}; Char mUserName[kMaxUserNameLen] = {0}; UInt64 mUserFNV{0UL}; + Bool mUserIsAdult{NO}; + }; /// \brief Alias for user ptr. diff --git a/src/kernel/src/User.cpp b/src/kernel/src/User.cpp index daaf27a4..6fd2e7b3 100644 --- a/src/kernel/src/User.cpp +++ b/src/kernel/src/User.cpp @@ -66,6 +66,8 @@ User::User(const UserRingKind& ring_kind, const UserPublicKeyType* user_name) //////////////////////////////////////////////////////////// User::~User() = default; +Bool User::IsAdult() { return mUserIsAdult; } + Bool User::Save(const UserPublicKey password) { if (!password || *password == 0) return No; diff --git a/src/libSystem/SystemKit/System.h b/src/libSystem/SystemKit/System.h index 324aae5c..7e4a9ae6 100644 --- a/src/libSystem/SystemKit/System.h +++ b/src/libSystem/SystemKit/System.h @@ -408,4 +408,10 @@ IMPORT_C SInt32 SemWait(_Input SemaphoreRef sem); /// @brief Close a semaphore. IMPORT_C SInt32 SemClose(_Input SemaphoreRef sem); +// ------------------------------------------------------------------------------------------ // +// @brief User AgeAuth API. +// ------------------------------------------------------------------------------------------ // + +IMPORT_C SInt32 UserIsAdult(_Input SInt32 uid); + #endif // ifndef SYSTEMKIT_SYSTEM_H -- cgit v1.2.3 From 6cf854b950e3884d6b5a08eb6059d1780f4d19db Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 24 Mar 2026 12:34:07 +0100 Subject: [FEAT] Kernel: Add RT directory. Signed-off-by: Amlal El Mahrouss --- src/kernel/src/RT/.keep | 0 src/kernel/src/RT/README.txt | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 src/kernel/src/RT/.keep create mode 100644 src/kernel/src/RT/README.txt (limited to 'src/kernel') diff --git a/src/kernel/src/RT/.keep b/src/kernel/src/RT/.keep new file mode 100644 index 00000000..e69de29b diff --git a/src/kernel/src/RT/README.txt b/src/kernel/src/RT/README.txt new file mode 100644 index 00000000..d85b9570 --- /dev/null +++ b/src/kernel/src/RT/README.txt @@ -0,0 +1,4 @@ +NeKernel Real-Time Patches +========================== + +This patchset transforms NeKernel into a real-time OS, although designed for backend/server purposes. \ No newline at end of file -- cgit v1.2.3