Files
2026-05-30 10:03:36 +01:00

25 lines
518 B
C

#include <errno.h>
#include <magenta/task.h>
#include <sys/types.h>
pid_t fork(void)
{
kern_handle_t new_task = KERN_HANDLE_INVALID,
new_space = KERN_HANDLE_INVALID;
kern_status_t status = task_duplicate(&new_task, &new_space);
if (status != KERN_OK) {
return __set_errno(__errno_from_kern_status(status));
}
if (new_task == KERN_HANDLE_INVALID) {
/* child task */
return 0;
}
tid_t child = 0;
task_config_get(new_task, TASK_CFG_ID, &child, sizeof child);
/* parent task */
return child;
}