From: <tim...@en...> - 2007-06-02 21:00:28
|
Hi! I've been working on some code to rework some parts of gnuplot main loop and initialization (mostly to address wxt-on-mac-is-better-when-singlethreaded and the issues with handling events from multiple interactive terminal at the same time). I've come to think about the setjmp/longjmp mechanism for error handling. It works perfectly fine in its current state, but I was wondering if there could be some cleanup in plot.c:main(). In particular, from 'man setjmp': NAME setjmp, sigsetjmp - save stack context for non-local goto RETURN VALUE setjmp() and sigsetjmp() return 0 if returning directly, and non-zero when returning from longjmp(3) using the saved context. So, I conclude that any code executed conditionally to !setjmp(...), if not changing the stack, could be put before the call to setjmp and give exactly the same behaviour. In other words: if(!setjmp(...)) { /* setjmp returns direclty */ code_that_does_not_change_the_stack(); } else { /* coming back from longjmp */ } is strictly equivalent to: code_that_does_not_change_the_stack(); if(setjmp(...)) { /* coming back from longjmp */ } Am I right ? If yes, is the attached patch correct and ok for CVS ? (it would allow more generalization of the error mechanism) Thanks for your comments. Best regards, Timothée |