diff options
Diffstat (limited to 'src/setjmp/siglongjmp.c')
| -rw-r--r-- | src/setjmp/siglongjmp.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/setjmp/siglongjmp.c b/src/setjmp/siglongjmp.c index 44b6d6ed..06edc641 100644 --- a/src/setjmp/siglongjmp.c +++ b/src/setjmp/siglongjmp.c @@ -1,10 +1,34 @@ #include <setjmp.h> +#include "signal.h" + +/** restore calling environment with signal mask **/ void siglongjmp(sigjmp_buf env, int val) { - (void)env; (void)val; - /* TODO */ + /* restor signal mask */ + + return longjmp(env, val); } + +/*** +restores the environment, including the saved signal mask (if any), of a +previous call to FUNCTION(sigsetjmp) and continues execution at the location of +the call to FUNCTION(sigsetjmp). + +All objects previously accessible at the time of the call to FUNCTION(sigsetjmp) +have the same values. Non-TYPE(volatile) objects of automatic storage duration +that have changed since the call to FUNCTION(sigsetjmp) have intederminate +values. + +When execution resumes at the point of the original call to FUNCTION(sigsetjmp), +the value specified by ARGUMENT(val) is returned. If 0 is specified, then the +return value is 1. +***/ + /* +UNDEFINED(There was no previous call to FUNCTION(setjmp)) +UNDEFINED(The function containing the previous call to FUNCTION(setjmp) is no longer executing) +UNDEFINED(THIS() is called from a nested signal handler) + POSIX(1) */ |
