xref: /freebsd/lib/libc/gen/setjmp.3 (revision daf1cffce2e07931f27c6c6998652e90df6ba87e)
1.\" Copyright (c) 1990, 1991, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" This code is derived from software contributed to Berkeley by
5.\" the American National Standards Committee X3, on Information
6.\" Processing Systems.
7.\"
8.\" Redistribution and use in source and binary forms, with or without
9.\" modification, are permitted provided that the following conditions
10.\" are met:
11.\" 1. Redistributions of source code must retain the above copyright
12.\"    notice, this list of conditions and the following disclaimer.
13.\" 2. Redistributions in binary form must reproduce the above copyright
14.\"    notice, this list of conditions and the following disclaimer in the
15.\"    documentation and/or other materials provided with the distribution.
16.\" 3. All advertising materials mentioning features or use of this software
17.\"    must display the following acknowledgement:
18.\"	This product includes software developed by the University of
19.\"	California, Berkeley and its contributors.
20.\" 4. Neither the name of the University nor the names of its contributors
21.\"    may be used to endorse or promote products derived from this software
22.\"    without specific prior written permission.
23.\"
24.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34.\" SUCH DAMAGE.
35.\"
36.\"     @(#)setjmp.3	8.1 (Berkeley) 6/4/93
37.\" $FreeBSD$
38.\"
39.Dd June 4, 1993
40.Dt SETJMP 3
41.Os BSD 4
42.Sh NAME
43.Nm sigsetjmp ,
44.Nm siglongjmp ,
45.Nm setjmp ,
46.Nm longjmp ,
47.Nm _setjmp ,
48.Nm _longjmp ,
49.Nm longjmperror
50.Nd non-local jumps
51.Sh SYNOPSIS
52.Fd #include <setjmp.h>
53.Ft int
54.Fn sigsetjmp "sigjmp_buf env" "int savemask"
55.Ft void
56.Fn siglongjmp "sigjmp_buf env" "int val"
57.Ft int
58.Fn setjmp "jmp_buf env"
59.Ft void
60.Fn longjmp "jmp_buf env" "int val"
61.Ft int
62.Fn _setjmp "jmp_buf env"
63.Ft void
64.Fn _longjmp "jmp_buf env" "int val"
65.Ft void
66.Fn longjmperror void
67.Sh DESCRIPTION
68The
69.Fn sigsetjmp ,
70.Fn setjmp ,
71and
72.Fn _setjmp
73functions save their calling environment in
74.Fa env .
75Each of these functions returns 0.
76.Pp
77The corresponding
78.Fn longjmp
79functions restore the environment saved by their most recent respective
80invocations
81of the
82.Fn setjmp
83function.
84They then return so that program execution continues as if the corresponding
85invocation of the
86.Fn setjmp
87call had just returned  the value specified by
88.Fa val ,
89instead of 0.
90.Pp
91Pairs of calls may be intermixed, i.e. both
92.Fn sigsetjmp
93and
94.Fn siglongjmp
95and
96.Fn setjmp
97and
98.Fn longjmp
99combinations may be used in the same program, however, individual
100calls may not, e.g. the
101.Fa env
102argument to
103.Fn setjmp
104may not be passed to
105.Fn siglongjmp .
106.Pp
107The
108.Fn longjmp
109routines may not be called after the routine which called the
110.Fn setjmp
111routines returns.
112.Pp
113All accessible objects have values as of the time
114.Fn longjmp
115routine was called, except that the values of objects of automatic storage
116invocation duration that do not have the
117.Em volatile
118type and have been changed between the
119.Fn setjmp
120invocation and
121.Fn longjmp
122call are indeterminate.
123.Pp
124The
125.Fn setjmp Ns / Ns Fn longjmp
126pairs save and restore the signal mask while
127.Fn _setjmp Ns / Ns Fn _longjmp
128pairs save and restore only the register set and the stack.
129(See
130.Fn sigprocmask 2 . )
131.Pp
132The
133.Fn sigsetjmp Ns / Ns Fn siglongjmp
134function
135pairs save and restore the signal mask if the argument
136.Fa savemask
137is non-zero, otherwise only the register set and the stack are saved.
138.Sh ERRORS
139If the contents of the
140.Fa env
141are corrupted, or correspond to an environment that has already returned,
142the
143.Fn longjmp
144routine calls the routine
145.Fn longjmperror 3 .
146If
147.Fn longjmperror
148returns the program is aborted (see
149.Xr abort 3 ) .
150The default version of
151.Fn longjmperror
152prints the message
153.Dq Li longjmp botch
154to standard error and returns.
155User programs wishing to exit more gracefully should write their own
156versions of
157.Fn longjmperror .
158.Sh SEE ALSO
159.Xr sigaction 2 ,
160.Xr sigaltstack 2 ,
161.Xr signal 3
162.Sh STANDARDS
163The
164.Fn setjmp
165and
166.Fn longjmp
167functions conform to
168.St -ansiC .
169The
170.Fn sigsetjmp
171and
172.Fn siglongjmp
173functions conform to
174.St -p1003.1-88 .
175