On Tue, Dec 15, 2015 at 07:54:28PM +0100, Silvan Jegen wrote: > We checked the same condition in the "if" branch so it was never true > in the "else if" one. Removing this condition makes the "else if" > branch viable.
I'm sorry, but you are wrong here. Setjmp saves the current state of the program, and it allows that a deeper call to longjmp restores the state. When setjmp is called directly it returns always 0, but when it returns dur to a call to longjmp it returns a value passed as parameter to longjmp (in our case 1). It is a kind of try {} catch{} ala C. > dowrite("ed.hup", 1); > - } else if (home && !setjmp(savesp)) { > + } else if (home) { > n = snprintf(fname, If you remove the setjmp in the else if branch, then any call to error (which calls to longjmp) will resume the execution in the if branch, making a new execution of the else if branch, which in some cases will produce an infinite loop. Regards,