diff options
Diffstat (limited to 'src/setjmp/longjmp.c')
| -rw-r--r-- | src/setjmp/longjmp.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/setjmp/longjmp.c b/src/setjmp/longjmp.c index c8ed34af..57819ddb 100644 --- a/src/setjmp/longjmp.c +++ b/src/setjmp/longjmp.c @@ -4,13 +4,14 @@ _Noreturn void longjmp(jmp_buf env, int val) { - (void)env; - if (val == 0) { - val = 1; + extern _Noreturn void __longjmp(jmp_buf); + + /* use val if nonzero, otherwise 1 */ + env[0] = val ? val : 1; + + for (;;) { + __longjmp(env); } - /* Set env.return_register to val */ - /* Load all registers from env */ - for (;;); /* silence _Noreturn function returns warning */ } /*** |
