xref: /dflybsd-src/lib/libc/stdlib/set_constraint_handler_s.3 (revision 086b156cdf18f6fbb398ffa6f62a25f4f158853e)
1*086b156cSSascha Wildner.\" Copyright 2018 Yuri Pankov <yuripv@yuripv.net>
2*086b156cSSascha Wildner.\"
3*086b156cSSascha Wildner.\" Redistribution and use in source and binary forms, with or without
4*086b156cSSascha Wildner.\" modification, are permitted provided that the following conditions
5*086b156cSSascha Wildner.\" are met:
6*086b156cSSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
7*086b156cSSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
8*086b156cSSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
9*086b156cSSascha Wildner.\"    notice, this list of conditions and the following disclaimer in the
10*086b156cSSascha Wildner.\"    documentation and/or other materials provided with the distribution.
11*086b156cSSascha Wildner.\"
12*086b156cSSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
13*086b156cSSascha Wildner.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14*086b156cSSascha Wildner.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15*086b156cSSascha Wildner.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
16*086b156cSSascha Wildner.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17*086b156cSSascha Wildner.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
18*086b156cSSascha Wildner.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
19*086b156cSSascha Wildner.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20*086b156cSSascha Wildner.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21*086b156cSSascha Wildner.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
22*086b156cSSascha Wildner.\" SUCH DAMAGE.
23*086b156cSSascha Wildner.\"
24*086b156cSSascha Wildner.\" $FreeBSD: head/lib/libc/stdlib/set_constraint_handler_s.3 338051 2018-08-19 14:39:57Z kib $
25*086b156cSSascha Wildner.\"
26*086b156cSSascha Wildner.Dd September 9, 2019
27*086b156cSSascha Wildner.Dt SET_CONSTRAINT_HANDLER_S 3
28*086b156cSSascha Wildner.Os
29*086b156cSSascha Wildner.Sh NAME
30*086b156cSSascha Wildner.Nm set_constraint_handler_s ,
31*086b156cSSascha Wildner.Nm abort_handler_s ,
32*086b156cSSascha Wildner.Nm ignore_handler_s
33*086b156cSSascha Wildner.Nd runtime-constraint violation handling
34*086b156cSSascha Wildner.Sh LIBRARY
35*086b156cSSascha Wildner.Lb libc
36*086b156cSSascha Wildner.Sh SYNOPSIS
37*086b156cSSascha Wildner.Fd #define __STDC_WANT_LIB_EXT1__ 1
38*086b156cSSascha Wildner.In stdlib.h
39*086b156cSSascha Wildner.Ft constraint_handler_t
40*086b156cSSascha Wildner.Fo set_constraint_handler_s
41*086b156cSSascha Wildner.Fa "constraint_handler_t handler"
42*086b156cSSascha Wildner.Fc
43*086b156cSSascha Wildner.Ss Handler Prototype
44*086b156cSSascha Wildner.Ft typedef void
45*086b156cSSascha Wildner.Fo (*constraint_handler_t)
46*086b156cSSascha Wildner.Fa "const char * restrict msg"
47*086b156cSSascha Wildner.Fa "void * restrict ptr"
48*086b156cSSascha Wildner.Fa "errno_t error"
49*086b156cSSascha Wildner.Fc
50*086b156cSSascha Wildner.Ss Predefined Handlers
51*086b156cSSascha Wildner.Ft void
52*086b156cSSascha Wildner.Fo abort_handler_s
53*086b156cSSascha Wildner.Fa "const char * restrict msg"
54*086b156cSSascha Wildner.Fa "void * restrict ptr"
55*086b156cSSascha Wildner.Fa "errno_t error"
56*086b156cSSascha Wildner.Fc
57*086b156cSSascha Wildner.Ft void
58*086b156cSSascha Wildner.Fo ignore_handler_s
59*086b156cSSascha Wildner.Fa "const char * restrict msg"
60*086b156cSSascha Wildner.Fa "void * restrict ptr"
61*086b156cSSascha Wildner.Fa "errno_t error"
62*086b156cSSascha Wildner.Fc
63*086b156cSSascha Wildner.Sh DESCRIPTION
64*086b156cSSascha WildnerThe
65*086b156cSSascha Wildner.Fn set_constraint_handler_s
66*086b156cSSascha Wildnerfunction sets the runtime-constraint violation handler to be
67*086b156cSSascha Wildner.Fa handler .
68*086b156cSSascha Wildner.Pp
69*086b156cSSascha WildnerThe runtime-constraint handler is the callback function invoked when a library
70*086b156cSSascha Wildnerfunction detects a runtime-constraint violation.
71*086b156cSSascha Wildner.Pp
72*086b156cSSascha WildnerThe arguments are as follows:
73*086b156cSSascha Wildner.Bl -tag -width "error"
74*086b156cSSascha Wildner.It Fa msg
75*086b156cSSascha WildnerA pointer to a character string describing the runtime-constraint violation.
76*086b156cSSascha Wildner.It Fa ptr
77*086b156cSSascha WildnerA
78*086b156cSSascha Wildner.Dv NULL
79*086b156cSSascha Wildnerpointer.
80*086b156cSSascha Wildner.It Fa error
81*086b156cSSascha WildnerIf the function calling the handler has a return type declared as
82*086b156cSSascha Wildner.Vt errno_t ,
83*086b156cSSascha Wildnerthe return value of the function is passed.
84*086b156cSSascha WildnerOtherwise, a positive value of type
85*086b156cSSascha Wildner.Vt errno_t
86*086b156cSSascha Wildneris passed.
87*086b156cSSascha Wildner.El
88*086b156cSSascha Wildner.Pp
89*086b156cSSascha WildnerOnly the most recent handler registered with
90*086b156cSSascha Wildner.Fn set_constraint_handler_s
91*086b156cSSascha Wildneris called when a runtime-constraint violation occurs.
92*086b156cSSascha Wildner.Pp
93*086b156cSSascha WildnerThe implementation has a default constraint handler that is used if no calls to
94*086b156cSSascha Wildnerthe
95*086b156cSSascha Wildner.Fn set_constraint_handler_s
96*086b156cSSascha Wildnerfunction have been made.
97*086b156cSSascha WildnerIf the
98*086b156cSSascha Wildner.Fa handler
99*086b156cSSascha Wildnerargument to
100*086b156cSSascha Wildner.Fn set_constraint_handler_s
101*086b156cSSascha Wildneris a
102*086b156cSSascha Wildner.Dv NULL
103*086b156cSSascha Wildnerpointer, the default handler becomes the current constraint handler.
104*086b156cSSascha Wildner.Pp
105*086b156cSSascha WildnerThe
106*086b156cSSascha Wildner.Fn abort_handler_s
107*086b156cSSascha Wildnerand
108*086b156cSSascha Wildner.Fn ignore_handler_s
109*086b156cSSascha Wildnerare the standard-defined runtime-constraint handlers provided by the C library.
110*086b156cSSascha Wildner.Pp
111*086b156cSSascha WildnerThe
112*086b156cSSascha Wildner.Fn abort_handler_s
113*086b156cSSascha Wildnerfunction writes the error message including the
114*086b156cSSascha Wildner.Fa msg
115*086b156cSSascha Wildnerto
116*086b156cSSascha Wildner.Dv stderr
117*086b156cSSascha Wildnerand calls the
118*086b156cSSascha Wildner.Xr abort 3
119*086b156cSSascha Wildnerfunction.
120*086b156cSSascha WildnerThe
121*086b156cSSascha Wildner.Fn abort_handler_s
122*086b156cSSascha Wildneris currently the default runtime-constraint handler.
123*086b156cSSascha Wildner.Pp
124*086b156cSSascha WildnerThe
125*086b156cSSascha Wildner.Fn ignore_handler_s
126*086b156cSSascha Wildnersimply returns to its caller.
127*086b156cSSascha Wildner.Sh RETURN VALUES
128*086b156cSSascha WildnerThe
129*086b156cSSascha Wildner.Fn set_constraint_handler_s
130*086b156cSSascha Wildnerfunction returns a pointer to the previously registered handler, or
131*086b156cSSascha Wildner.Dv NULL
132*086b156cSSascha Wildnerif none was previously registered.
133*086b156cSSascha Wildner.Pp
134*086b156cSSascha WildnerThe
135*086b156cSSascha Wildner.Fn abort_handler_s
136*086b156cSSascha Wildnerfunction does not return to its caller.
137*086b156cSSascha Wildner.Pp
138*086b156cSSascha WildnerThe
139*086b156cSSascha Wildner.Fn ignore_handler_s
140*086b156cSSascha Wildnerfunction returns no value.
141*086b156cSSascha Wildner.Sh STANDARDS
142*086b156cSSascha WildnerThe
143*086b156cSSascha Wildner.Fn set_constraint_handler_s
144*086b156cSSascha Wildnerfunction conforms to
145*086b156cSSascha Wildner.St -isoC-2011
146*086b156cSSascha WildnerK.3.6.1.1.
147*086b156cSSascha Wildner.Sh AUTHORS
148*086b156cSSascha WildnerThis manual page was written by
149*086b156cSSascha Wildner.An Yuri Pankov Aq Mt yuripv@yuripv.net .
150