| '\" t |
| .\" Copyright (C) 2006 Justin Pryzby <pryzbyj@justinpryzby.com> |
| .\" and Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com> |
| .\" |
| .\" %%%LICENSE_START(PERMISSIVE_MISC) |
| .\" Permission is hereby granted, free of charge, to any person obtaining |
| .\" a copy of this software and associated documentation files (the |
| .\" "Software"), to deal in the Software without restriction, including |
| .\" without limitation the rights to use, copy, modify, merge, publish, |
| .\" distribute, sublicense, and/or sell copies of the Software, and to |
| .\" permit persons to whom the Software is furnished to do so, subject to |
| .\" the following conditions: |
| .\" |
| .\" The above copyright notice and this permission notice shall be |
| .\" included in all copies or substantial portions of the Software. |
| .\" |
| .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| .\" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
| .\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| .\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| .\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| .\" %%%LICENSE_END |
| .\" |
| .\" References: |
| .\" glibc manual and source |
| .TH error 3 (date) "Linux man-pages (unreleased)" |
| .SH NAME |
| error, error_at_line, error_message_count, error_one_per_line, |
| error_print_progname \- glibc error reporting functions |
| .SH LIBRARY |
| Standard C library |
| .RI ( libc ,\~ \-lc ) |
| .SH SYNOPSIS |
| .nf |
| .B #include <error.h> |
| .P |
| .BI "void error(int " status ", int " errnum ", const char *" format ", ...);" |
| .BI "void error_at_line(int " status ", int " errnum ", const char *" filename , |
| .BI " unsigned int " linenum ", const char *" format ", ...);" |
| .P |
| .BI "extern unsigned int " error_message_count ; |
| .BI "extern int " error_one_per_line ; |
| .P |
| .BI "extern void (*" error_print_progname ")(void);" |
| .fi |
| .SH DESCRIPTION |
| .BR error () |
| is a general error-reporting function. |
| It flushes |
| .IR stdout , |
| and then outputs to |
| .I stderr |
| the program name, a colon and a space, the message specified by the |
| .BR printf (3)-style |
| format string \fIformat\fP, and, if \fIerrnum\fP is |
| nonzero, a second colon and a space followed by the string given by |
| .IR strerror(errnum) . |
| Any arguments required for |
| .I format |
| should follow |
| .I format |
| in the argument list. |
| The output is terminated by a newline character. |
| .P |
| The program name printed by |
| .BR error () |
| is the value of the global variable |
| .BR program_invocation_name (3). |
| .I program_invocation_name |
| initially has the same value as |
| .IR main ()'s |
| .IR argv[0] . |
| The value of this variable can be modified to change the output of |
| .BR error (). |
| .P |
| If \fIstatus\fP has a nonzero value, then |
| .BR error () |
| calls |
| .BR exit (3) |
| to terminate the program using the given value as the exit status; |
| otherwise it returns after printing the error message. |
| .P |
| The |
| .BR error_at_line () |
| function is exactly the same as |
| .BR error (), |
| except for the addition of the arguments |
| .I filename |
| and |
| .IR linenum . |
| The output produced is as for |
| .BR error (), |
| except that after the program name are written: a colon, the value of |
| .IR filename , |
| a colon, and the value of |
| .IR linenum . |
| The preprocessor values \fB__LINE__\fP and |
| \fB__FILE__\fP may be useful when calling |
| .BR error_at_line (), |
| but other values can also be used. |
| For example, these arguments could refer to a location in an input file. |
| .P |
| If the global variable \fIerror_one_per_line\fP is set nonzero, |
| a sequence of |
| .BR error_at_line () |
| calls with the |
| same value of \fIfilename\fP and \fIlinenum\fP will result in only |
| one message (the first) being output. |
| .P |
| The global variable \fIerror_message_count\fP counts the number of |
| messages that have been output by |
| .BR error () |
| and |
| .BR error_at_line (). |
| .P |
| If the global variable \fIerror_print_progname\fP |
| is assigned the address of a function |
| (i.e., is not NULL), then that function is called |
| instead of prefixing the message with the program name and colon. |
| The function should print a suitable string to |
| .IR stderr . |
| .SH ATTRIBUTES |
| For an explanation of the terms used in this section, see |
| .BR attributes (7). |
| .TS |
| allbox; |
| lb lb lbx |
| l l l. |
| Interface Attribute Value |
| T{ |
| .na |
| .nh |
| .BR error () |
| T} Thread safety MT-Safe locale |
| T{ |
| .na |
| .nh |
| .BR error_at_line () |
| T} Thread safety T{ |
| .na |
| .nh |
| MT-Unsafe\ race: error_at_line/\:error_one_per_line locale |
| T} |
| .TE |
| .P |
| The internal |
| .I error_one_per_line |
| variable is accessed (without any form of synchronization, but since it's an |
| .I int |
| used once, it should be safe enough) and, if |
| .I error_one_per_line |
| is set nonzero, the internal static variables (not exposed to users) |
| used to hold the last printed filename and line number are accessed |
| and modified without synchronization; the update is not atomic and it |
| occurs before disabling cancelation, so it can be interrupted only after |
| one of the two variables is modified. |
| After that, |
| .BR error_at_line () |
| is very much like |
| .BR error (). |
| .SH STANDARDS |
| GNU. |
| .SH SEE ALSO |
| .BR err (3), |
| .BR errno (3), |
| .BR exit (3), |
| .BR perror (3), |
| .BR program_invocation_name (3), |
| .BR strerror (3) |