1 .\"
2 .\" This file and its contents are supplied under the terms of the
3 .\" Common Development and Distribution License ("CDDL"), version 1.0.
4 .\" You may only use this file in accordance with the terms of version
5 .\" 1.0 of the CDDL.
6 .\"
7 .\" A full copy of the text of the CDDL should have accompanied this
8 .\" source. A copy of the CDDL is also available via the Internet at
9 .\" http://www.illumos.org/license/CDDL.
10 .\"
11 .\"
12 .\" Copyright 2018 Nexenta Systems, Inc.
13 .\"
14 .Dd August 12, 2017
15 .Dt SET_CONSTRAINT_HANDLER_S 3C
16 .Os
17 .Sh NAME
18 .Nm set_constraint_handler_s ,
19 .Nm abort_handler_s ,
20 .Nm ignore_handler_s
21 .Nd runtime-constraint handling
22 .Sh LIBRARY
23 .Lb libc
24 .Sh SYNOPSIS
25 .Fd #define __STDC_WANT_LIB_EXT1__ 1
26 .In stdlib.h
27 .Ft constraint_handler_t
28 .Fo set_constraint_handler_s
29 .Fa "constraint_handler_t handler"
30 .Fc
31 .Ft void
32 .Fo abort_handler_s
33 .Fa "const char *restrict msg"
34 .Fa "void *restrict ptr"
35 .Fa "errno_t error"
36 .Fc
37 .Ft void
38 .Fo ignore_handler_s
39 .Fa "const char *restrict msg"
40 .Fa "void *restrict ptr"
41 .Fa "errno_t error"
42 .Fc
43 .Sh DESCRIPTION
44 The
45 .Fn set_constraint_handler_s
46 function sets the runtime-constraint handler to be
47 .Fa handler .
48 .Pp
49 The runtime-constraint handler is the callback function invoked when a library
50 function detects a runtime-constraint violation, having the following prototype:
51 .Bd -literal -offset indent
52 void (*constraint_handler_t)(const char *restrict msg,
53 void *restrict ptr, errno_t error);
54 .Ed
55 .Pp
56 The arguments are as follows:
57 .Bl -tag -width "error"
58 .It Fa msg
59 A pointer to a character string describing the runtime-constraint violation.
60 .It Fa ptr
61 A
62 .Dv NULL
63 pointer.
64 .It Fa error
65 If the function calling the handler has a return type declared as
66 .Vt errno_t ,
67 the return value of the function is passed.
68 Otherwise, a positive value of type
69 .Vt errno_t
70 is passed.
71 .El
72 .Pp
73 Only the most recent handler registered with
74 .Fn set_constraint_handler_s
75 is called when a runtime-constraint violation occurs.
76 .Pp
77 The implementation has a default constraint handler that is used if no calls to
78 the
79 .Fn set_constraint_handler_s
80 function have been made.
81 If the
82 .Fa handler
83 argument to
84 .Fn set_constraint_handler_s
85 is a
86 .Dv NULL
87 pointer, the default handler becomes the current constraint handler.
88 .Pp
89 The
90 .Fn abort_handler_s
91 and
92 .Fn ignore_handler_s
93 are the standard-defined runtime-constraint handlers provided by the C library.
94 .Pp
95 The
96 .Fn abort_handler_s
97 function writes the error message including the
98 .Fa msg
99 to
100 .Dv stderr
101 and calls the
102 .Xr abort 3C
103 function.
104 The
105 .Fn abort_handler_s
106 is currently the default runtime-constraint handler.
107 .Pp
108 The
109 .Fn ignore_handler_s
110 simply returns to its caller.
111 .Sh RETURN VALUES
112 The
113 .Fn set_constraint_handler_s
114 function returns a pointer to the previously registered handler, or
115 .Dv NULL
116 if none was previously registered.
117 .Pp
118 The
119 .Fn abort_handler_s
120 function does not return to its caller.
121 .Pp
122 The
123 .Fn ignore_handler_s
124 function returns no value.
125 .Sh INTERFACE STABILITY
126 .Sy Standard
127 .Sh MT-LEVEL
128 .Sy Safe
129 .Sh STANDARDS
130 The
131 .Fn set_constraint_handler_s
132 function conforms to
133 .St -isoC-2011 .