diff options
author | Rob Landley <rob@landley.net> | 2015-09-23 22:18:22 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2015-09-23 22:18:22 -0500 |
commit | 847bcb63b541e4fbbfa3dccfe3022745cbe9a06a (patch) | |
tree | 35c6fb8b4bdb11e995a95919abfa682ab7c20221 /lib | |
parent | 712e163bb0956b94c27051d0175e719b92f453ad (diff) | |
download | toybox-847bcb63b541e4fbbfa3dccfe3022745cbe9a06a.tar.gz |
Add xvfork() as a static inline and use it from various places.
Note: vfork(), like fork(), can return -1 if too many processes, and
we should notice and fail loudly.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/lib.h | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -246,5 +246,17 @@ void mode_to_string(mode_t mode, char *buf); char *basename_r(char *name); void names_to_pid(char **names, int (*callback)(pid_t pid, char *name)); +// Returning from a function can modify a potentially shared stack, +// so this has to always inline. + +static inline pid_t xvfork(void) +{ + pid_t p = vfork(); + + if (p == -1) perror_exit("vfork"); + + return p; +} + // Functions in need of further review/cleanup #include "lib/pending.h" |