8 // Mock system functions for testing.
12 // implementations elsewhere:
13 int pipe2(int pipefd[2], int flags);
15 int kill(pid_t pid, int sig);
17 inline int fcntl(int fd, int cmd, ...)
19 // This is used for setting the CLOEXEC flag, we can just return 0:
23 inline pid_t getpgid(pid_t pid)
28 inline int tcsetpgrp(int fd, pid_t pgid)
33 inline pid_t getpgrp()
40 friend pid_t waitpid(pid_t, exit_status *, int);
47 exit_status() : did_exit_v(true), was_signalled_v(false), status(0) { }
49 // status_p is either the exit status or termination signal:
50 exit_status(bool did_exit_p, bool was_signalled_p, int status_p)
51 : did_exit_v(did_exit_p), was_signalled_v(was_signalled_p), status(status_p)
54 explicit exit_status(int status_p)
56 throw std::string("initalised exit_status with integer argument");
66 return did_exit_v && status == 0;
71 return was_signalled_v;
90 inline pid_t waitpid(pid_t p, exit_status *statusp, int flags)
92 throw std::string("not implemented");