diff options
Diffstat (limited to 'driver/utils')
-rw-r--r-- | driver/utils/cwrapper.c | 9 | ||||
-rw-r--r-- | driver/utils/cwrapper.h | 6 |
2 files changed, 12 insertions, 3 deletions
diff --git a/driver/utils/cwrapper.c b/driver/utils/cwrapper.c index 5a30274ba7..522c2b329a 100644 --- a/driver/utils/cwrapper.c +++ b/driver/utils/cwrapper.c @@ -70,9 +70,12 @@ char *flattenAndQuoteArgs(char *ptr, int argc, char *argv[]) return ptr; } +/* This function takes a callback to be called after the creation of the child + process but before we block waiting for the child. Can be NULL. */ __attribute__((noreturn)) int run (char *exePath, int numArgs1, char **args1, - int numArgs2, char **args2) + int numArgs2, char **args2, + runCallback callback) { int i, cmdline_len; char *new_cmdline, *ptr; @@ -134,6 +137,10 @@ __attribute__((noreturn)) int run (char *exePath, /* Synchronize input and wait for target to be ready. */ WaitForInputIdle(pi.hProcess, INFINITE); + /* If we have a registered callback then call it before we block. */ + if (callback) + callback(); + switch (WaitForSingleObject(pi.hProcess, INFINITE) ) { case WAIT_OBJECT_0: { diff --git a/driver/utils/cwrapper.h b/driver/utils/cwrapper.h index 324470e5ed..3e9ccd4fe5 100644 --- a/driver/utils/cwrapper.h +++ b/driver/utils/cwrapper.h @@ -1,5 +1,7 @@ void die(const char *fmt, ...); char *mkString(const char *fmt, ...); -__attribute__((noreturn)) int run(char *exePath, int numArgs1, char **args1, int numArgs2, char **args2); - +typedef void (*runCallback)(void); +__attribute__((noreturn)) int run(char *exePath, int numArgs1, char **args1, + int numArgs2, char **args2, + runCallback callback); |