SETJMP(3) SETJMP(3) NAME setjmp, longjmp - non-local goto SYNOPSIS #include setjmp(env) jmp_buf env; longjmp(env, val) jmp_buf env; _setjmp(env) jmp_buf env; _longjmp(env, val) jmp_buf env; DESCRIPTION These routines are useful for dealing with errors and interrupts encountered in a low-level subroutine of a program. _S_e_t_j_m_p saves its stack environment in _e_n_v for later use by _l_o_n_g_j_m_p_. It returns value 0. _L_o_n_g_j_m_p restores the environment saved by the last call of _s_e_t_j_m_p. It then returns in such a way that execution continues as if the call of _s_e_t_j_m_p had just returned the value _v_a_l to the function that invoked _s_e_t_j_m_p_, which must not itself have returned in the interim. All acces‐ sible data have values as of the time _l_o_n_g_j_m_p was called. _S_e_t_j_m_p and _l_o_n_g_j_m_p save and restore the signal mask _s_i_g_m_a_s_k(2), while __s_e_t_j_m_p and __l_o_n_g_j_m_p manipulate only the C stack and registers. ERRORS If the contents of the jmp_buf are corrupted, or correspond to an envi‐ ronment that has already returned, _l_o_n_g_j_m_p calls the routine _l_o_n_g_j_m_p_e_r_‐ _r_o_r. If _l_o_n_g_j_m_p_e_r_r_o_r returns the program is aborted. The default ver‐ sion of _l_o_n_g_j_m_p_e_r_r_o_r prints the message ‘‘longjmp botch’’ to standard error and returns. User programs wishing to exit more gracefully can write their own versions of _l_o_n_g_j_m_p_e_r_r_o_r. SEE ALSO sigvec(2), sigstack(2), signal(3) 4th Berkeley Distribution January 9, 1986 SETJMP(3)