|
3 | 3 | # Cross Platform and Multi Architecture Advanced Binary Emulation Framework |
4 | 4 | # |
5 | 5 |
|
| 6 | +import os |
6 | 7 |
|
7 | | -from qiling.const import * |
8 | | -from qiling.os.linux.thread import * |
9 | | -from qiling.const import * |
10 | | -from qiling.os.posix.filestruct import * |
11 | | -from qiling.os.filestruct import * |
12 | | -from qiling.os.posix.const_mapping import * |
13 | | -from qiling.exception import * |
14 | | -from qiling.utils import * |
| 8 | +from qiling import Qiling |
15 | 9 | from qiling.os.posix.const import ECHILD |
16 | 10 |
|
| 11 | +def ql_syscall_wait4(ql: Qiling, pid: int, wstatus: int, options: int, rusage: int): |
| 12 | + # convert to signed (pid_t is 32bit) |
| 13 | + pid = ql.unpack32s(ql.pack32(pid)) |
17 | 14 |
|
18 | | -def ql_syscall_wait4(ql, wait4_pid, wait4_wstatus, wait4_options, wait4_rusage, *args, **kw): |
19 | | - wait4_pid = ql.unpack32s(ql.pack32(wait4_pid)) # convert to signed (pid_t is 32bit) |
20 | 15 | try: |
21 | | - spid, status, rusage = os.wait4(wait4_pid, wait4_options) |
22 | | - if wait4_wstatus != 0: |
23 | | - ql.mem.write(wait4_wstatus, ql.pack32(status)) |
24 | | - regreturn = spid |
| 16 | + spid, status, _ = os.wait4(pid, options) |
| 17 | + |
| 18 | + if wstatus: |
| 19 | + ql.mem.write(wstatus, ql.pack32(status)) |
| 20 | + |
| 21 | + retval = spid |
25 | 22 | except ChildProcessError: |
26 | | - regreturn = -ECHILD |
27 | | - return regreturn |
| 23 | + retval = -ECHILD |
28 | 24 |
|
| 25 | + return retval |
0 commit comments