summaryrefslogtreecommitdiffhomepage
path: root/src/libPThread
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2026-03-16 05:07:39 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2026-03-16 05:14:22 +0100
commit35fb9574c5efc426491f7ce55689e0f911890e98 (patch)
tree6761ca8cbdf4a7f92db0c8098b08fc6b5f629374 /src/libPThread
parent9213bc66f2a3b05314e1a7386794bb39a02ac81b (diff)
[CHORE] Improve and fix libDDK and implement libMsg.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src/libPThread')
-rw-r--r--src/libPThread/PThreadKit/Thread.h7
-rw-r--r--src/libPThread/src/Thread.cpp55
2 files changed, 39 insertions, 23 deletions
diff --git a/src/libPThread/PThreadKit/Thread.h b/src/libPThread/PThreadKit/Thread.h
index 053885e7..85f7a320 100644
--- a/src/libPThread/PThreadKit/Thread.h
+++ b/src/libPThread/PThreadKit/Thread.h
@@ -11,4 +11,11 @@
#define PTHREAD_UNSAFE /* hint */
#define PTHREAD_SAFE /* hint */
+PTHREAD_SAFE SInt32 pthread_create(_Output ThreadRef* thread, VoidPtr attr, VoidPtr (*start_routine)(VoidPtr), VoidPtr arg);
+PTHREAD_SAFE SInt32 pthread_join(ThreadRef thread, VoidPtr* retval);
+PTHREAD_SAFE SInt32 pthread_exit(SInt32 retval);
+PTHREAD_SAFE SInt32 pthread_detach(ThreadRef thread);
+PTHREAD_SAFE ThreadRef pthread_self(Void);
+PTHREAD_SAFE SInt32 pthread_yield(void);
+
#endif // LIBPOSIX_POSIXKIT_THREAD_H
diff --git a/src/libPThread/src/Thread.cpp b/src/libPThread/src/Thread.cpp
index 34a610cd..5a351be8 100644
--- a/src/libPThread/src/Thread.cpp
+++ b/src/libPThread/src/Thread.cpp
@@ -5,29 +5,38 @@
#include <libPThread/PThreadKit/Thread.h>
-namespace POSIXKit::Detail {
-
- /// @brief Max path structure.
- constexpr auto kMaxPathLen = 255;
- static constexpr auto kCanaryValue = 0xf0f0488f;
-
- /// @brief Thread Information Structure.
- struct ThreadFrameParams final {
- SInt64 fCanary;
- VoidPtr fStackPtr;
- VoidPtr fCodePtr;
- SizeT fCodeSz;
- SizeT fStackSz;
- SInt64 fThrdID;
- SInt64 fUsrID, fGrpID;
- SInt64* fFD{};
- SizeT fFDCnt;
- Char fCWD[kMaxPathLen];
- Char fRoot[kMaxPathLen];
- ThreadRef fRef;
- };
-
-} // namespace POSIX::Detail
+PTHREAD_SAFE SInt32 pthread_detach(ThreadRef thread) {
+ return ThrDetachThread(thread);
+}
+PTHREAD_SAFE SInt32 pthread_yield(void) {
+ return ThrYieldThread(pthread_self());
+}
+PTHREAD_SAFE ThreadRef pthread_self(Void) {
+ return ThrCurrentThread();
+}
+
+PTHREAD_SAFE SInt32 pthread_exit(SInt32 retval) {
+ return ThrExitCurrentThread(retval);
+}
+
+PTHREAD_SAFE SInt32 pthread_join(ThreadRef thread, VoidPtr* retval) {
+ SInt32* ret = (SInt32*)retval;
+ *ret = ThrJoinThread(thread);
+
+ return 0;
+}
+
+PTHREAD_SAFE SInt32 pthread_create(_Output ThreadRef* thread, VoidPtr attr, VoidPtr (*start_routine)(VoidPtr), VoidPtr arg) {
+ LIBSYS_UNUSED(attr);
+
+ /// @note passing zero means you'd have to read the argv until you hit a nullptr.
+ ThreadRef thrd = ThrCreateThread("pthread_thread", (ThrProcKind)start_routine, 0, arg, 0);
+
+ if (!thrd) return -1;
+
+ *thread = thrd;
+ return 0;
+}