Provided by: manpages-dev_3.21-1_all bug

NAME

       setjmp, sigsetjmp - save stack context for non-local goto

SYNOPSIS

       #include <setjmp.h>

       int setjmp(jmp_buf env);

       int sigsetjmp(sigjmp_buf env, int savesigs);

   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       setjmp(): see NOTES.
       sigsetjmp(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_C_SOURCE

DESCRIPTION

       setjmp()  and  longjmp(3)  are  useful  for  dealing  with  errors  and
       interrupts  encountered  in  a  low-level  subroutine  of  a   program.
       setjmp()  saves  the  stack context/environment in env for later use by
       longjmp(3).  The stack context will  be  invalidated  if  the  function
       which called setjmp() returns.

       sigsetjmp()  is similar to setjmp().  If, and only if, savesigs is non-
       zero, the process’s current signal mask is saved in  env  and  will  be
       restored if a siglongjmp(3) is later performed with this env.

RETURN VALUE

       setjmp()  and  sigsetjmp() return 0 if returning directly, and non-zero
       when returning from longjmp(3) using the saved context.

CONFORMING TO

       C89, C99, and POSIX.1-2001 specify  setjmp().   POSIX.1-2001  specifies
       sigsetjmp().

NOTES

       POSIX  does  not  specify  whether setjmp() will save the signal signal
       mask.  In System V it will not.  In 4.3BSD it  will,  and  there  is  a
       function  _setjmp  that  will not.  By default, Linux/glibc follows the
       System V behavior, but the BSD behavior is provided if the  _BSD_SOURCE
       feature   test   macro   is   defined   and   none   of  _POSIX_SOURCE,
       _POSIX_C_SOURCE, _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, _GNU_SOURCE, or
       _SVID_SOURCE is defined.

       If  you want to portably save and restore signal masks, use sigsetjmp()
       and siglongjmp().

       setjmp() and sigsetjmp() make programs hard to understand and maintain.
       If possible an alternative should be used.

SEE ALSO

       longjmp(3), siglongjmp(3)

COLOPHON

       This  page  is  part of release 3.21 of the Linux man-pages project.  A
       description of the project, and information about reporting  bugs,  can
       be found at http://www.kernel.org/doc/man-pages/.

                                  2009-01-13                         SETJMP(3)