aboutsummaryrefslogtreecommitdiff
path: root/pthread.ha
diff options
context:
space:
mode:
Diffstat (limited to 'pthread.ha')
-rw-r--r--pthread.ha28
1 files changed, 28 insertions, 0 deletions
diff --git a/pthread.ha b/pthread.ha
new file mode 100644
index 0000000..82c4900
--- /dev/null
+++ b/pthread.ha
@@ -0,0 +1,28 @@
+use sys::{errno};
+
+def __SIZEOF_PTHREAD_CONDATTR_T: size = 56;
+
+type pthread_attr_t = union {
+ __size: [__SIZEOF_PTHREAD_CONDATTR_T]i8,
+ __align: i64
+};
+
+type pthread_t = u64;
+
+@symbol("pthread_create") fn _pthread_create(thread: *pthread_t, attr: const nullable *pthread_attr_t, start_routine: *fn(arg: *opaque) nullable *opaque, arg: *opaque) int;
+
+fn pthread_create(thread: *pthread_t, attr: const nullable *pthread_attr_t, start_routine: *fn(arg: *opaque) nullable *opaque, arg: *opaque) (void | errno) = {
+ const ret = _pthread_create(thread, attr, start_routine, arg);
+
+ if (ret != 0)
+ return ret: errno;
+};
+
+@symbol("pthread_join") fn _pthread_join(thread: pthread_t, value_ptr: nullable **opaque) int;
+
+fn pthread_join(thread: pthread_t, value_ptr: nullable **opaque) (void | errno) = {
+ const ret = _pthread_join(thread, value_ptr);
+
+ if (ret != 0)
+ return ret: errno;
+};