2 * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Copyright 2004-2007, Axel Dörfler, axeld@pinc-software.de.
5 * Distributed under the terms of the MIT License.
13 #include <syscall_utils.h>
15 #include <errno_private.h>
17 #include <thread_defs.h>
23 return waitpid(-1, _status
, 0);
27 _waitpid(pid_t pid
, int* _status
, int options
, team_usage_info
*usage_info
)
31 pid_t child
= _kern_wait_for_child(pid
, options
| WEXITED
, &info
,
37 // When not getting a child status when WNOHANG was specified, don't
39 if (child
== B_WOULD_BLOCK
&& (options
& WNOHANG
) != 0)
41 RETURN_AND_SET_ERRNO(child
);
45 if (_status
!= NULL
) {
47 switch (info
.si_code
) {
49 // fill in exit status for WIFEXITED() and WEXITSTATUS()
50 status
= info
.si_status
& 0xff;
55 // fill in signal for WIFSIGNALED() and WTERMSIG()
56 status
= (info
.si_status
<< 8) & 0xff00;
57 // if core dumped, set flag for WIFCORED()
58 if (info
.si_code
== CLD_DUMPED
)
63 // set flag for WIFCONTINUED()
68 // fill in signal for WIFSTOPPED() and WSTOPSIG()
69 status
= (info
.si_status
<< 16) & 0xff0000;
75 // should never get here -- assume exited
88 waitpid(pid_t pid
, int* _status
, int options
)
90 return _waitpid(pid
, _status
, options
, NULL
);
95 waitid(idtype_t idType
, id_t id
, siginfo_t
* info
, int options
)
97 // translate the idType, id pair to a waitpid() style ID
105 // the child with the given ID
107 RETURN_AND_SET_ERRNO_TEST_CANCEL(EINVAL
);
111 // any child in the given process group
113 RETURN_AND_SET_ERRNO_TEST_CANCEL(EINVAL
);
118 RETURN_AND_SET_ERRNO_TEST_CANCEL(EINVAL
);
121 pid_t child
= _kern_wait_for_child(id
, options
, info
, NULL
);
122 if (child
>= 0 || child
== B_WOULD_BLOCK
)
125 RETURN_AND_SET_ERRNO_TEST_CANCEL(child
);