SETJMP(3) BSD Programmer's Manual SETJMP(3) NNAAMMEE ssiiggsseettjjmmpp, ssiigglloonnggjjmmpp, sseettjjmmpp, lloonnggjjmmpp, __sseettjjmmpp, __lloonnggjjmmpp lloonnggjjmmppeerrrroorr - non-local jumps SSYYNNOOPPSSIISS ##iinncclluuddee <> _i_n_t ssiiggsseettjjmmpp(_s_i_g_j_m_p___b_u_f _e_n_v, _i_n_t _s_a_v_e_m_a_s_k); _v_o_i_d ssiigglloonnggjjmmpp(_s_i_g_j_m_p___b_u_f _e_n_v, _i_n_t _v_a_l); _i_n_t sseettjjmmpp(_j_m_p___b_u_f _e_n_v); _v_o_i_d lloonnggjjmmpp(_j_m_p___b_u_f _e_n_v, _i_n_t _v_a_l); _i_n_t __sseettjjmmpp(_j_m_p___b_u_f _e_n_v); _v_o_i_d __lloonnggjjmmpp(_j_m_p___b_u_f _e_n_v, _i_n_t _v_a_l); _v_o_i_d lloonnggjjmmppeerrrroorr(_v_o_i_d); DDEESSCCRRIIPPTTIIOONN The ssiiggsseettjjmmpp(), sseettjjmmpp(), and __sseettjjmmpp() functions save their calling en- vironment in _e_n_v. Each of these functions returns 0. The corresponding lloonnggjjmmpp() functions restore the environment saved by their most recent respective invocations of the sseettjjmmpp() function. They then return so that program execution continues as if the corresponding invocation of the sseettjjmmpp() call had just returned the value specified by _v_a_l, instead of 0. Pairs of calls may be intermixed, i.e. both ssiiggsseettjjmmpp() and ssiigglloonnggjjmmpp() and sseettjjmmpp() and lloonnggjjmmpp() combinations may be used in the same program, however, individual calls may not, e.g. the _e_n_v argument to sseettjjmmpp() may not be passed to ssiigglloonnggjjmmpp(). The lloonnggjjmmpp() routines may not be called after the routine which called the sseettjjmmpp() routines returns. All accessible objects have values as of the time lloonnggjjmmpp() routine was called, except that the values of objects of automatic storage invocation duration that do not have the _v_o_l_a_t_i_l_e type and have been changed between the sseettjjmmpp() invocation and lloonnggjjmmpp() call are indeterminate. The sseettjjmmpp()/lloonnggjjmmpp() pairs save and restore the signal mask while __sseettjjmmpp()/__lloonnggjjmmpp() pairs save and restore only the register set and the stack. (See ssiiggmmaasskk(_2).) The ssiiggsseettjjmmpp()/ssiigglloonnggjjmmpp() function pairs save and restore the signal mask if the argument _s_a_v_e_m_a_s_k is non-zero, otherwise only the register set and the stack are saved. EERRRROORRSS If the contents of the _e_n_v are corrupted, or correspond to an environment that has already returned, the lloonnggjjmmpp() routine calls the routine lloonnggjjmmppeerrrroorr(_3). If lloonnggjjmmppeerrrroorr() returns the program is aborted (see abort(2)). The default version of lloonnggjjmmppeerrrroorr() prints the message ``longjmp botch'' to standard error and returns. User programs wishing to exit more gracefully should write their own versions of lloonnggjjmmppeerrrroorr(). SSEEEE AALLSSOO sigaction(2), sigaltstack(2), signal(3) SSTTAANNDDAARRDDSS The sseettjjmmpp() and lloonnggjjmmpp() functions conform to ANSI C X3.159-1989 (``ANSI C ''). The ssiiggsseettjjmmpp() and ssiigglloonnggjjmmpp() functions conform to IEEE Std1003.1-1988 (``POSIX''). 4th Berkeley Distribution June 4, 1993 2