#include struct gs_jpeg_error_mgr { jmp_buf setjmpBuffer; }; struct gs_jpeg_error_mgr *global_foo; void jpeg_read_header(void) { longjmp(global_foo->setjmpBuffer, 1); } int dummy_length=1; int foo(void) { struct gs_jpeg_error_mgr jerrMgr; if (!dummy_length) return 0; global_foo=&jerrMgr; if (setjmp(jerrMgr.setjmpBuffer)) return 0; jpeg_read_header(); return 1; } int main(int argc, char **argv) { int i; i=foo(); printf("got i=%i\n",i); return 0; }