From 2f58f641754c9384d14728266b081d74adafe079 Mon Sep 17 00:00:00 2001 From: Karina Date: Sun, 1 Feb 2026 21:02:54 +0400 Subject: [PATCH] feat(libkern): strrchr (StringFindLastOccurenceOfCharacter) fix(OSServiceProcessSpawn): now it uses strrchr to get process name --- kernel/inc/lib/String.h | 3 ++- kernel/src/OS/Services/OSServiceProcess.c | 10 +++++++++- kernel/src/lib/String.c | 9 +++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/kernel/inc/lib/String.h b/kernel/inc/lib/String.h index 79b5628..37fb0a4 100644 --- a/kernel/inc/lib/String.h +++ b/kernel/inc/lib/String.h @@ -10,4 +10,5 @@ Int32 StringCompare(const char* firstString, const char* secondString); Int32 StringCompareWithLimit(const char* firstString, const char* secondString, UInt64 limit); char* StringCopy(char* destination, const char* source); char* StringCopyWithLimit(char* destination, const char* source, UInt64 limit); -UInt64 StringGetLength(const char* string); \ No newline at end of file +UInt64 StringGetLength(const char* string); +const char* StringFindLastOccurrenceOfCharacter(const char* string, char separator); \ No newline at end of file diff --git a/kernel/src/OS/Services/OSServiceProcess.c b/kernel/src/OS/Services/OSServiceProcess.c index f6afd7b..93bb661 100644 --- a/kernel/src/OS/Services/OSServiceProcess.c +++ b/kernel/src/OS/Services/OSServiceProcess.c @@ -7,6 +7,9 @@ #include #include + +#include + Int32 OSServiceProcessExit(Int32 code) { IOConsoleLog("\n[Dewar] process \"%s\" exited with code %d\n", gOSSchedulerCurrentTask->process->name, code); OSSchedulerTerminate(); @@ -15,7 +18,12 @@ Int32 OSServiceProcessExit(Int32 code) { Int32 OSServiceProcessSpawn(const char* path) { - return OSLoaderProcessSpawn(path, path); + const char* name = StringFindLastOccurrenceOfCharacter(path, '/'); + + if (name) name++; + else name = path; + + return OSLoaderProcessSpawn(path, name); } Int32 OSServiceProcessWait(UInt64 processID) { diff --git a/kernel/src/lib/String.c b/kernel/src/lib/String.c index 8590bf6..2ca6ed0 100644 --- a/kernel/src/lib/String.c +++ b/kernel/src/lib/String.c @@ -74,4 +74,13 @@ UInt64 StringGetLength(const char* string) { UInt64 result = 0; for (result = 0; string[result]; result++); return result; +} + +const char* StringFindLastOccurrenceOfCharacter(const char* string, char separator) { + const char* lastSeparator = nullptr; + do { + if (*string == separator) lastSeparator = (char*)string; + } while (*string++); + + return lastSeparator; } \ No newline at end of file