Code:
static jmp_buf environment;
void testproc (void)
{
longjmp(environment, 1);
}
long do_setjmp (void)
{
return setjmp(environment);
}
long testing (void)
{
long status;
status = setjmp(environment);
// status = do_setjmp();
if (status == 0) {
testproc();
return -1;
}
return status;
}
static jmp_buf environment;
void testproc (void)
{
longjmp(environment, 1);
}
long do_setjmp (void)
{
return setjmp(environment);
}
long testing (void)
{
long status;
status = setjmp(environment);
// status = do_setjmp();
if (status == 0) {
testproc();
return -1;
}
return status;
}
Program pocinje u rutini testing, zove setjmp pa rutinu koja obavezno zove longjmp.
E sad, ako zovem setjmp iz rutine testing, stvar radi. Prvi put, status je nula,
pa se pozove testproc, drugi put je 1, pa vratim status(1).
Ali, ako setjmp uradim sa do_setjmp, kad pozovem testproc i on pozove longjmp,
longjmp se vrati gde treba (u rutinu do_setjmp) ali se onda ta rutina vrati na return -1;
tj iza poziva testproc, a ne na "if (status == 0)"..... zasto?

setjmp i longjmp problem