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