xref: /dragonfly/lib/libc/string/strerror.3 (revision 63e03116)
1.\" Copyright (c) 1980, 1991, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" This code is derived from software contributed to Berkeley by
5.\" the American National Standards Committee X3, on Information
6.\" Processing Systems.
7.\"
8.\" Redistribution and use in source and binary forms, with or without
9.\" modification, are permitted provided that the following conditions
10.\" are met:
11.\" 1. Redistributions of source code must retain the above copyright
12.\"    notice, this list of conditions and the following disclaimer.
13.\" 2. Redistributions in binary form must reproduce the above copyright
14.\"    notice, this list of conditions and the following disclaimer in the
15.\"    documentation and/or other materials provided with the distribution.
16.\" 3. 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.\"     @(#)strerror.3	8.1 (Berkeley) 6/9/93
33.\" $FreeBSD: head/lib/libc/string/strerror.3 251069 2013-05-28 20:57:40Z emaste $
34.\"
35.Dd January 30, 2022
36.Dt STRERROR 3
37.Os
38.Sh NAME
39.Nm perror ,
40.Nm strerror ,
41.Nm strerror_l ,
42.Nm strerror_r ,
43.Nm sys_errlist ,
44.Nm sys_nerr
45.Nd system error messages
46.Sh LIBRARY
47.Lb libc
48.Sh SYNOPSIS
49.In stdio.h
50.Ft void
51.Fn perror "const char *string"
52.Vt extern const char * const sys_errlist[] ;
53.Vt extern const int sys_nerr ;
54.In string.h
55.Ft "char *"
56.Fn strerror "int errnum"
57.Ft "char *"
58.Fn strerror_l "int errnum" "locale_t"
59.Ft int
60.Fn strerror_r "int errnum" "char *strerrbuf" "size_t buflen"
61.Sh DESCRIPTION
62The
63.Fn strerror ,
64.Fn strerror_l ,
65.Fn strerror_r ,
66and
67.Fn perror
68functions look up the error message string corresponding to an
69error number.
70.Pp
71The
72.Fn strerror
73function accepts an error number argument
74.Fa errnum
75and returns a pointer to the corresponding message string
76in the current locale.
77.Fn strerror
78is not thread-safe.
79It returns a pointer to an internal static buffer that could be
80overwritten by a
81.Fn strerror
82call from another thread.
83.Pp
84The
85.Fn strerror_l
86function accepts
87.Fa errnum
88error number and
89.Fa locale
90locale handle arguments and returns a pointer to a string
91corresponding to the specified error in the given locale.
92.Fn strerror_l
93is thread-safe, its result can be only overwritten by
94another call to
95.Fn strerror_l
96from the current thread.
97.Pp
98The
99.Fn strerror_r
100function renders the same result into
101.Fa strerrbuf
102for a maximum of
103.Fa buflen
104characters and returns 0 upon success.
105.Pp
106The
107.Fn perror
108function finds the error message corresponding to the current
109value of the global variable
110.Va errno
111.Pq Xr intro 2
112and writes it, followed by a newline, to the
113standard error file descriptor.
114If the argument
115.Fa string
116is
117.Pf non- Dv NULL
118and does not point to the null character,
119this string is prepended to the message
120string and separated from it by
121a colon and space
122.Pq Dq Li ":\ " ;
123otherwise, only the error message string is printed.
124.Pp
125If the error number is not recognized, these functions return an error message
126string containing
127.Dq Li "Unknown error:\ "
128followed by the error number in decimal.
129The
130.Fn strerror
131and
132.Fn strerror_r
133functions return
134.Er EINVAL
135as a warning.
136Error numbers recognized by this implementation fall in
137the range 0 <
138.Fa errnum
139<
140.Fa sys_nerr .
141The number 0 is also recognized, although applications that take advantage of
142this are likely to use unspecified values of
143.Va errno .
144.Pp
145If insufficient storage is provided in
146.Fa strerrbuf
147(as specified in
148.Fa buflen )
149to contain the error string,
150.Fn strerror_r
151returns
152.Er ERANGE
153and
154.Fa strerrbuf
155will contain an error message that has been truncated and
156.Dv NUL
157terminated to fit the length specified by
158.Fa buflen .
159.Pp
160The message strings can be accessed directly using the external
161array
162.Va sys_errlist .
163The external value
164.Va sys_nerr
165contains a count of the messages in
166.Va sys_errlist .
167The use of these variables is deprecated;
168.Fn strerror ,
169.Fn strerror_l ,
170or
171.Fn strerror_r
172should be used instead.
173.Sh SEE ALSO
174.Xr intro 2 ,
175.Xr err 3 ,
176.Xr psignal 3
177.Sh STANDARDS
178The
179.Fn perror
180and
181.Fn strerror
182functions conform to
183.St -isoC-99 .
184The
185.Fn strerror_r
186function conforms to
187.St -p1003.1-2001 .
188The
189.Fn strerror_l
190function conforms to
191.St -p1003.1-2008 .
192.Sh HISTORY
193The
194.Fn strerror
195and
196.Fn perror
197functions first appeared in
198.Bx 4.4 .
199The
200.Fn strerror_r
201function was implemented in
202.Fx 4.4
203by
204.An Wes Peters Aq Mt wes@FreeBSD.org .
205The
206.Fn strerror_l
207function was added in
208.Fx 13.0
209and ported to
210.Dx 6.3 .
211.Sh BUGS
212The
213.Fn strerror
214function returns its result in a static buffer which
215will be overwritten by subsequent calls.
216.Pp
217Programs that use the deprecated
218.Va sys_errlist
219variable often fail to compile because they declare it
220inconsistently.
221Size of the
222.Va sys_errlist
223object might increase during
224.Dx
225lifetime, breaking some ABI stability guarantees.
226