25 lines
518 B
C
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;
|
|
}
|