| .\" Written by Michael Haardt, Fri Nov 25 14:51:42 MET 1994 |
| .\" |
| .\" This is free documentation; you can redistribute it and/or |
| .\" modify it under the terms of the GNU General Public License as |
| .\" published by the Free Software Foundation; either version 2 of |
| .\" the License, or (at your option) any later version. |
| .\" |
| .\" The GNU General Public License's references to "object code" |
| .\" and "executables" are to be interpreted as the output of any |
| .\" document formatting or typesetting system, including |
| .\" intermediate and printed output. |
| .\" |
| .\" This manual is distributed in the hope that it will be useful, |
| .\" but WITHOUT ANY WARRANTY; without even the implied warranty of |
| .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| .\" GNU General Public License for more details. |
| .\" |
| .\" You should have received a copy of the GNU General Public |
| .\" License along with this manual; if not, write to the Free |
| .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, |
| .\" USA. |
| .\" |
| .\" Added siglongjmp, Sun Mar 2 22:03:05 EST 1997, jrv@vanzandt.mv.com |
| .\" Modifications, Sun Feb 26 14:39:45 1995, faith@cs.unc.edu |
| .\" " |
| .TH LONGJMP 3 2007-09-06 "" "Linux Programmer's Manual" |
| .SH NAME |
| longjmp, siglongjmp \- non-local jump to a saved stack context |
| .SH SYNOPSIS |
| .nf |
| .B #include <setjmp.h> |
| |
| .BI "void longjmp(jmp_buf " env ", int " val ); |
| |
| .BI "void siglongjmp(sigjmp_buf " env ", int " val ); |
| .fi |
| .sp |
| .in -4n |
| Feature Test Macro Requirements for glibc (see |
| .BR feature_test_macros (7)): |
| .in |
| .sp |
| .BR siglongjmp (): |
| _POSIX_C_SOURCE || _XOPEN_SOURCE |
| .SH DESCRIPTION |
| .BR longjmp () |
| and |
| .BR setjmp (3) |
| are useful for dealing with errors |
| and interrupts encountered in a low-level subroutine of a program. |
| .BR longjmp () |
| restores the environment saved by the last call of |
| .BR setjmp (3) |
| with the corresponding \fIenv\fP argument. |
| After |
| .BR longjmp () |
| is completed, program execution continues as if the |
| corresponding call of |
| .BR setjmp (3) |
| had just returned the value |
| \fIval\fP. |
| .BR longjmp () |
| cannot cause 0 to be returned. |
| If |
| .BR longjmp () |
| is invoked with a second argument of 0, 1 will be returned instead. |
| .P |
| .BR siglongjmp () |
| is similar to |
| .BR longjmp () |
| except for the type of |
| its \fIenv\fP argument. |
| If the |
| .BR sigsetjmp (3) |
| call that set this |
| \fIenv\fP used a non-zero \fIsavesigs\fP flag, |
| .BR siglongjmp () |
| also |
| restores the set of blocked signals. |
| .SH "RETURN VALUE" |
| These functions never return. |
| .SH "CONFORMING TO" |
| C89, C99, and POSIX.1-2001 specify |
| .BR longjmp (). |
| POSIX.1-2001 specifies |
| .BR siglongjmp (). |
| .SH NOTES |
| POSIX does not specify whether |
| .BR longjmp () |
| will restore the signal |
| context. |
| If you want to save and restore signal masks, use |
| .BR siglongjmp (). |
| .P |
| The values of automatic variables are unspecified after a call to |
| .BR longjmp () |
| if they meet all the following criteria: |
| .IP \(bu 3 |
| they are local to the function that made the corresponding |
| .BR setjmp (3) |
| call; |
| .IP \(bu |
| their values are changed between the calls to |
| .BR setjmp (3) |
| and |
| .BR longjmp (); |
| and |
| .IP \(bu |
| they are not declared as |
| .IR volatile . |
| .P |
| Analogous remarks apply for |
| .BR siglongjmp (). |
| .P |
| .BR longjmp () |
| and |
| .BR siglongjmp () |
| make programs hard to |
| understand and maintain. |
| If possible an alternative should be used. |
| .SH "SEE ALSO" |
| .BR setjmp (3), |
| .BR sigsetjmp (3) |