From 1abc10223b37d9ead3454a06e176b4b65370a2be Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 27 Jan 2020 08:37:56 +0200 Subject: Improve process run_*() API --- libbuild2/utility.txx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'libbuild2/utility.txx') diff --git a/libbuild2/utility.txx b/libbuild2/utility.txx index c183930..aadb181 100644 --- a/libbuild2/utility.txx +++ b/libbuild2/utility.txx @@ -56,6 +56,9 @@ namespace build2 return p; } + [[noreturn]] LIBBUILD2_SYMEXPORT void + run_io_error (const char*[], const io_error&); + template T run (uint16_t verbosity, @@ -102,12 +105,16 @@ namespace build2 is.close (); } - catch (const io_error&) + catch (const io_error& e) { - // Presumably the child process failed. Let run_finish() deal with that. + if (run_wait (args, pr)) + run_io_error (args, e); + + // If the child process has failed then assume the io error was + // caused by that and let run_finish() deal with it. } - if (!(run_finish (args, pr, err, l) || ignore_exit)) + if (!(run_finish_impl (args, pr, err, l) || ignore_exit)) r = T (); return r; -- cgit v1.1