LONGJMP(3) Linux Programmer's Manual LONGJMP(3)
NAME
longjmp, siglongjmp - nonlocal jump to a saved stack context
SYNOPSIS
#include <setjmp.h>
void longjmp(jmp_buf env, int val);
void siglongjmp(sigjmp_buf env, int val);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
siglongjmp(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_C_SOURCE
DESCRIPTION
longjmp() and setjmp(3) are useful for dealing with errors and inter-
rupts encountered in a low-level subroutine of a program. longjmp()
restores the environment saved by the last call of setjmp(3) with the
corresponding env argument. After longjmp() is completed, program exe-
cution continues as if the corresponding call of setjmp(3) had just
returned the value val. longjmp() cannot cause 0 to be returned. If
longjmp() is invoked with a second argument of 0, 1 will be returned
instead.
siglongjmp() is similar to longjmp() except for the type of its env
argument. If, and only if, the sigsetjmp(3) call that set this env
used a nonzero savesigs flag, siglongjmp() also restores the signal
mask that was saved by sigsetjmp(3).
RETURN VALUE
These functions never return.
CONFORMING TO
C89, C99, and POSIX.1-2001 specify longjmp(). POSIX.1-2001 specifies
siglongjmp().
NOTES
POSIX does not specify whether longjmp() will restore the signal con-
text (see setjmp(3) for some more details). If you want to portably
save and restore signal masks, use sigsetjmp(3) and siglongjmp().
The values of automatic variables are unspecified after a call to
longjmp() if they meet all the following criteria:
o they are local to the function that made the corresponding setjmp(3)
call;
o their values are changed between the calls to setjmp(3) and
longjmp(); and
o they are not declared as volatile.
Analogous remarks apply for siglongjmp().
longjmp() and siglongjmp() make programs hard to understand and main-
tain. If possible an alternative should be used.
SEE ALSO
setjmp(3), sigsetjmp(3)
COLOPHON
This page is part of release 3.53 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 LONGJMP(3)