1#ifndef CHILD_WAIT_CONTRACT_H
2#define CHILD_WAIT_CONTRACT_H
12#include <sys/resource.h>
16#define CW_RUSAGE_BYTES 144
17_Static_assert(offsetof(
struct rusage, __reserved) == CW_RUSAGE_BYTES,
18 "musl amd64 rusage kernel prefix changed");
20#define CHECK(condition) \
23 fprintf(stderr, "%s:%d: %s (errno=%d)\n", __FILE__, __LINE__, #condition, errno); \
33#define CW_CHILD_INIT {.pid = -1, .command = -1, .report = -1}
36int cw_read(
int fd,
void* data,
size_t size);
37int cw_write(
int fd,
const void* data,
size_t size);
38int cw_send(
int fd,
char value);
39int cw_receive(
int fd,
char value);
40int cw_atomic_wait(atomic_uint* value,
unsigned expected);
41int cw_spawn(
struct cw_child*, pid_t group, uid_t uid,
int exit_code);
43int cw_reap(pid_t pid,
int milliseconds);
44int cw_info(
const siginfo_t*, pid_t, uid_t,
int code,
int status);
45int cw_empty_info(
const siginfo_t*);
46int cw_usage(
const struct rusage*);
47int cw_bytes(
const void*,
size_t,
unsigned char);
48long cw_raw_waitid(idtype_t, id_t,
void*,
int,
struct rusage*);
49int cw_selectors(
void);
54int cw_interruption(
void);