From 2f69ee2f0f25c6fc1dbc440c14c52aeaaf35b6a8 Mon Sep 17 00:00:00 2001 From: Rob Landley <rob@landley.net> Date: Sun, 8 Nov 2015 16:47:52 -0600 Subject: NOEXIT(thingy()) wrapper to turn xwrap() functions into warning versions. Also WOULD_EXIT(x, thingy()) to set a variable to 1 or 0 showing whether or not thingy() tried to exit. I'd love to be able to do "x = NOEXIT(thingy());" but haven't figured out a syntax to make that work yet... --- lib/lib.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/lib.h b/lib/lib.h index ad59989a..301c50f4 100644 --- a/lib/lib.h +++ b/lib/lib.h @@ -256,5 +256,16 @@ void names_to_pid(char **names, int (*callback)(pid_t pid, char *name)); pid_t xvforkwrap(pid_t pid); #define XVFORK() xvforkwrap(vfork()) +#define WOULD_EXIT(y, x) { jmp_buf _noexit; \ + int _noexit_res; \ + toys.rebound = &_noexit; \ + _noexit_res = setjmp(_noexit); \ + if (!_noexit_res) do {x;} while(0); \ + toys.rebound = 0; \ + y = _noexit_res; \ +} + +#define NOEXIT(x) WOULD_EXIT(_noexit_res, x) + // Functions in need of further review/cleanup #include "lib/pending.h" -- cgit v1.2.3