child-wait.h revision d10036d32eac25c861f9075ade2c007f5524b81e
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch#ifndef CHILD_WAIT_H
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch#define CHILD_WAIT_H
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Boschstruct child_wait_status {
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch struct child_wait *wait;
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch pid_t pid;
4abdade2cb09266ea3d063d5cb6893cb0583f20eTimo Sirainen int status;
d49214c55881d251a54edddb117ca7735360addcTimo Sirainen};
d49214c55881d251a54edddb117ca7735360addcTimo Sirainen
d49214c55881d251a54edddb117ca7735360addcTimo Sirainentypedef void child_wait_callback_t(const struct child_wait_status *status,
4abdade2cb09266ea3d063d5cb6893cb0583f20eTimo Sirainen void *context);
4abdade2cb09266ea3d063d5cb6893cb0583f20eTimo Sirainen
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Boschstruct child_wait *
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Boschchild_wait_new_with_pid(pid_t pid, child_wait_callback_t *callback,
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch void *context);
#ifdef CONTEXT_TYPE_SAFETY
# define child_wait_new_with_pid(pid, callback, context) \
({(void)(1 ? 0 : callback((const struct child_wait_status *)0, \
context)); \
child_wait_new_with_pid(pid, (child_wait_callback_t *)callback, context); })
#else
# define child_wait_new_with_pid(pid, callback, context) \
child_wait_new_with_pid(pid, (child_wait_callback_t *)callback, context)
#endif
#define child_wait_new(callback, context) \
child_wait_new_with_pid((pid_t)-1, callback, context)
void child_wait_free(struct child_wait **wait);
void child_wait_add_pid(struct child_wait *wait, pid_t pid);
void child_wait_remove_pid(struct child_wait *wait, pid_t pid);
void child_wait_init(void);
void child_wait_deinit(void);
#endif