xref: /freebsd/lib/libc/gen/err.3 (revision 23f282aa31e9b6fceacd449020e936e98d6f2298)
1.\" Copyright (c) 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. All advertising materials mentioning features or use of this software
13.\"    must display the following acknowledgement:
14.\"	This product includes software developed by the University of
15.\"	California, Berkeley and its contributors.
16.\" 4. Neither the name of the University nor the names of its contributors
17.\"    may be used to endorse or promote products derived from this software
18.\"    without specific prior written permission.
19.\"
20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30.\" SUCH DAMAGE.
31.\"
32.\"	From: @(#)err.3	8.1 (Berkeley) 6/9/93
33.\" $FreeBSD$
34.\"
35.Dd Mar 6, 1999
36.Dt ERR 3
37.Os BSD 4
38.Sh NAME
39.Nm err ,
40.Nm verr ,
41.Nm errc ,
42.Nm verrc ,
43.Nm errx ,
44.Nm verrx ,
45.Nm warn ,
46.Nm vwarn ,
47.Nm warnc ,
48.Nm vwarnc ,
49.Nm warnx ,
50.Nm vwarnx ,
51.Nm err_set_exit ,
52.Nm err_set_file
53.Nd formatted error messages
54.Sh LIBRARY
55.Lb libc
56.Sh SYNOPSIS
57.Fd #include <err.h>
58.Ft void
59.Fn err "int eval" "const char *fmt" "..."
60.Ft void
61.Fn err_set_exit "void (*exitf)(int)"
62.Ft void
63.Fn err_set_file "void *vfp"
64.Ft void
65.Fn errc "int eval" "int code" "const char *fmt" "..."
66.Ft void
67.Fn errx "int eval" "const char *fmt" "..."
68.Ft void
69.Fn warn "const char *fmt" "..."
70.Ft void
71.Fn warnc "int code" "const char *fmt" "..."
72.Ft void
73.Fn warnx "const char *fmt" "..."
74.Fd #include <stdarg.h>
75.Ft void
76.Fn verr "int eval" "const char *fmt" "va_list args"
77.Ft void
78.Fn verrc "int eval" "int code" "const char *fmt" "va_list args"
79.Ft void
80.Fn verrx "int eval" "const char *fmt" "va_list args"
81.Ft void
82.Fn vwarn "const char *fmt" "va_list args"
83.Ft void
84.Fn vwarnc "int code" "const char *fmt" "va_list args"
85.Ft void
86.Fn vwarnx "const char *fmt" "va_list args"
87.Sh DESCRIPTION
88The
89.Fn err
90and
91.Fn warn
92family of functions display a formatted error message on the standard
93error output, or on another file specified using the
94.Fn err_set_file
95function.
96In all cases, the last component of the program name, a colon character,
97and a space are output.
98If the
99.Va fmt
100argument is not NULL, the formatted error message is output.
101In the case of the
102.Fn errc ,
103.Fn verrc ,
104.Fn warnc ,
105and
106.Fn vwarnc
107functions,
108the error message string affiliated with the
109.Va code
110argument is also output,
111preceded by another colon and space if necessary.
112In all cases, the output is followed by a newline character.
113.Pp
114The
115.Fn err ,
116.Fn verr ,
117.Fn warn ,
118and
119.Fn vwarn
120functions use the global variable
121.Va errno
122rather than the
123.Va code
124argument of the
125.Fn errc
126family
127.Pp
128The
129.Fn err ,
130.Fn verr ,
131.Fn errc ,
132.Fn verrc ,
133.Fn errx ,
134and
135.Fn verrx
136functions do not return, but exit with the value of the argument
137.Fa eval .
138The
139.Fn err_set_exit
140function can be used to specify a function which is called before
141.Xr exit 3
142to perform any necessary cleanup; passing a null function pointer for
143.Va exitf
144resets the hook to do nothing.
145The
146.Fn err_set_file
147function sets the output stream used by the other functions.
148Its
149.Va vfp
150argument must be either a pointer to an open stream
151(possibly already converted to void *)
152or a null pointer
153(in which case the output stream is set to standard error).
154.Sh EXAMPLES
155Display the current errno information string and exit:
156.Bd -literal -offset indent
157if ((p = malloc(size)) == NULL)
158	err(1, NULL);
159if ((fd = open(file_name, O_RDONLY, 0)) == -1)
160	err(1, "%s", file_name);
161.Ed
162.Pp
163Display an error message and exit:
164.Bd -literal -offset indent
165if (tm.tm_hour < START_TIME)
166	errx(1, "too early, wait until %s", start_time_string);
167.Ed
168.Pp
169Warn of an error:
170.Bd -literal -offset indent
171if ((fd = open(raw_device, O_RDONLY, 0)) == -1)
172	warnx("%s: %s: trying the block device",
173	    raw_device, strerror(errno));
174if ((fd = open(block_device, O_RDONLY, 0)) == -1)
175	err(1, "%s", block_device);
176.Ed
177.Pp
178Warn of an error without using the global variable
179.Va errno :
180.Bd -literal -offset indent
181error = my_function();	/* returns a value from <errno.h> */
182if (error != 0)
183	warnc(error, "my_function");
184.Ed
185.Sh SEE ALSO
186.Xr exit 3 ,
187.Xr strerror 3
188.Sh HISTORY
189The
190.Fn err
191and
192.Fn warn
193functions first appeared in
194.Bx 4.4 .
195The
196.Fn err_set_exit
197and
198.Fn err_set_file
199functions first appeared in
200.Fx 2.1 .
201The
202.Fn errc
203and
204.Fn warnc
205functions first appeared in
206.Fx 3.0 .
207