libc: add strtonum(3)
[unleashed/tickless.git] / lib / libc / err.3
blob91f88437cc012b3bae047a16361a34d160e5b619
1 .\"     $OpenBSD: err.3,v 1.20 2014/04/23 16:26:33 jmc Exp $
2 .\"
3 .\" Copyright (c) 1993
4 .\"     The Regents of the University of California.  All rights reserved.
5 .\"
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
8 .\" are met:
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\"    notice, this list of conditions and the following disclaimer.
11 .\" 2. Redistributions in binary form must reproduce the above copyright
12 .\"    notice, this list of conditions and the following disclaimer in the
13 .\"    documentation and/or other materials provided with the distribution.
14 .\" 3. Neither the name of the University nor the names of its contributors
15 .\"    may be used to endorse or promote products derived from this software
16 .\"    without specific prior written permission.
17 .\"
18 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
19 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 .\" SUCH DAMAGE.
29 .\"
30 .Dd December 7, 2016
31 .Dt ERR 3
32 .Os
33 .Sh NAME
34 .Nm err ,
35 .Nm verr ,
36 .Nm errc ,
37 .Nm verrc ,
38 .Nm errx ,
39 .Nm verrx ,
40 .Nm warn ,
41 .Nm vwarn ,
42 .Nm warnc ,
43 .Nm vwarnc ,
44 .Nm warnx ,
45 .Nm vwarnx
46 .Nd formatted error messages
47 .Sh SYNOPSIS
48 .In err.h
49 .Ft void
50 .Fn err "int eval" "const char *fmt" "..."
51 .Ft void
52 .Fn verr "int eval" "const char *fmt" "va_list args"
53 .Ft void
54 .Fn errc "int eval" "int code" "const char *fmt" "..."
55 .Ft void
56 .Fn verrc "int eval" "int code" "const char *fmt" "va_list args"
57 .Ft void
58 .Fn errx "int eval" "const char *fmt" "..."
59 .Ft void
60 .Fn verrx "int eval" "const char *fmt" "va_list args"
61 .Ft void
62 .Fn warn "const char *fmt" "..."
63 .Ft void
64 .Fn vwarn "const char *fmt" "va_list args"
65 .Ft void
66 .Fn warnc "int code" "const char *fmt" "..."
67 .Ft void
68 .Fn vwarnc "int code" "const char *fmt" "va_list args"
69 .Ft void
70 .Fn warnx "const char *fmt" "..."
71 .Ft void
72 .Fn vwarnx "const char *fmt" "va_list args"
73 .Sh DESCRIPTION
74 The
75 .Fn err
76 and
77 .Fn warn
78 family of functions display a formatted error message on the standard
79 error output.
80 In all cases, the last component of the program name, followed by
81 a colon
82 .Pq Sq \&:
83 character and a space, are output.
84 The text that follows depends on the function being called.
85 The
86 .Fa fmt
87 specification (and associated arguments) may be any format allowed by
88 .Xr printf 3
90 .Dv NULL .
91 If the
92 .Fa fmt
93 argument is not
94 .Dv NULL ,
95 the formatted error message is output.
96 .Pp
97 In the case of the
98 .Fn errx ,
99 .Fn verrx ,
100 .Fn warnx ,
102 .Fn vwarnx
103 functions only, no additional text is output,
104 so the output looks like the following:
105 .Bd -literal -offset indent
106 progname: fmt
109 The other functions all output an error message string affiliated with
110 an error value (see
111 .Xr strerror 3 ) ,
112 preceded by a colon character and a space if
113 .Fa fmt
114 is not
115 .Dv NULL .
116 That is, the output is as follows:
117 .Bd -literal -offset indent
118 progname: fmt: error message string
122 .Fa fmt
123 is not
124 .Dv NULL ,
126 .Bd -literal -offset indent
127 progname: error message string
130 if it is.
132 In the case of the
133 .Fn err ,
134 .Fn verr ,
135 .Fn warn ,
137 .Fn vwarn
138 functions, the error value used is the current value of the global variable
139 .Va errno ,
140 while for the
141 .Fn errc ,
142 .Fn verrc ,
143 .Fn warnc ,
145 .Fn vwarnc
146 function the argument
147 .Fa code
148 is used.
150 In all cases, the output is followed by a newline character.
153 .Fn err ,
154 .Fn verr ,
155 .Fn errc ,
156 .Fn verrc ,
157 .Fn errx ,
159 .Fn verrx
160 functions do not return, but exit with the value of the argument
161 .Fa eval .
162 .Sh EXAMPLES
163 Display the current
164 .Va errno
165 information string and exit:
166 .Bd -literal -offset indent
167 if ((p = malloc(size)) == NULL)
168         err(1, NULL);
169 if ((fd = open(file_name, O_RDONLY, 0)) == -1)
170         err(1, "%s", file_name);
173 Display an error message and exit:
174 .Bd -literal -offset indent
175 if (tm.tm_hour < START_TIME)
176         errx(1, "too early, wait until %s", start_time_string);
179 Warn of an error:
180 .Bd -literal -offset indent
181 if ((fd = open(raw_device, O_RDONLY, 0)) == -1)
182         warnx("%s: %s: trying the block device",
183             raw_device, strerror(errno));
184 if ((fd = open(block_device, O_RDONLY, 0)) == -1)
185         err(1, "%s", block_device);
187 .Sh SEE ALSO
188 .Xr exit 3 ,
189 .Xr perror 3 ,
190 .Xr printf 3 ,
191 .Xr strerror 3
192 .Sh HISTORY
193 The functions
194 .Fn err ,
195 .Fn errx ,
196 .Fn verr ,
197 .Fn verrx ,
198 .Fn warn ,
199 .Fn warnx ,
200 .Fn vwarn ,
202 .Fn vwarnx
203 first appeared in
204 .Bx 4.4 .
205 The functions
206 .Fn errc ,
207 .Fn verrc ,
208 .Fn warnc ,
210 .Fn vwarnc
211 first appeared in
212 .Fx 3.0 .
213 .Sh CAVEATS
214 It is important never to pass a string with user-supplied data as a
215 format without using
216 .Ql %s .
217 An attacker can put format specifiers in the string to mangle the stack,
218 leading to a possible security hole.
219 This holds true even if the string has been built
220 .Dq by hand
221 using a function like
222 .Fn snprintf ,
223 as the resulting string may still contain user-supplied conversion specifiers
224 for later interpolation by the
225 .Fn err
227 .Fn warn
228 functions.
230 Always be sure to use the proper secure idiom:
231 .Bd -literal -offset indent
232 err(1, "%s", string);