====== longjmp ======
void longjmp (jmp_buf env, int val);
==== description of longjmp ====
get program state from the stack, useful for debugging.
#include
#include
void testit(int);
jmp_buf program_state;
static int count;
void testit(int count) {
count++; // set counter +1 but it will never reach 2
printf("count is now %i\n", count);
}
int main(void) {
count = 0;
printf("count starts with: %i\n", count);
if(setjmp(program_state) == 0) {
printf("save program state in the stack\n");
testit(count);
}
else {
printf("callback with longjmp\n");
testit(count);
testit(count);
return 0;
}
testit(count);
longjmp(program_state,1);
printf("never called\n");
testit(count);
return 0;
}
===== output of longjmp c example =====
count starts with: 0
save program state in the stack
count is now 1
count is now 1
callback with longjmp
count is now 1
count is now 1