com_err.3
1 .\" Copyright (c) 2005 Kungliga Tekniska Högskolan 2 .\" (Royal Institute of Technology, Stockholm, Sweden). 3 .\" All rights reserved. 4 .\" 5 .\" Redistribution and use in source and binary forms, with or without 6 .\" modification, are permitted provided that the following conditions 7 .\" are met: 8 .\" 9 .\" 1. Redistributions of source code must retain the above copyright 10 .\" notice, this list of conditions and the following disclaimer. 11 .\" 12 .\" 2. Redistributions in binary form must reproduce the above copyright 13 .\" notice, this list of conditions and the following disclaimer in the 14 .\" documentation and/or other materials provided with the distribution. 15 .\" 16 .\" 3. Neither the name of the Institute 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 INSTITUTE 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 INSTITUTE 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 .\" $Id$ 33 .\" 34 .\" This manpage was contributed by Gregory McGarry. 35 .\" 36 .Dd July 7, 2005 37 .Dt COM_ERR 3 38 .Os 39 .Sh NAME 40 .Nm com_err , 41 .Nm com_err_va , 42 .Nm error_message , 43 .Nm error_table_name , 44 .Nm init_error_table , 45 .Nm set_com_err_hook , 46 .Nm reset_com_err_hook , 47 .Nm add_to_error_table , 48 .Nm initialize_error_table_r 49 .Nm free_error_table , 50 .Nm com_right 51 .Nd common error display library 52 .Sh LIBRARY 53 Common Error Library (libcom_err, -lcom_err) 54 .Sh SYNOPSIS 55 .Fd #include <stdio.h> 56 .Fd #include <stdarg.h> 57 .Fd #include <krb5/com_err.h> 58 .Fd #include \&"XXX_err.h\&" 59 .Pp 60 typedef void (*errf)(const char *, long, const char *, ...); 61 .Ft void 62 .Fn com_err "const char *whoami" "long code" "const char *format" "..." 63 .Ft void 64 .Fn com_err_va "const char *whoami" "long code" "const char *format" "..." 65 .Ft const char * 66 .Fn error_message "long code" 67 .Ft const char * 68 .Fn error_table_name "int num" 69 .Ft int 70 .Fn init_error_table "const char **msgs" "long base" "int count" 71 .Ft errf 72 .Fn set_com_err_hook "errf func" 73 .Ft errf 74 .Fn reset_com_err_hook "" 75 .Ft void 76 .Fn add_to_error_table "struct et_list *new_table" 77 .Ft void 78 .Fn initialize_error_table_r "struct et_list **et_list" "const char **msgs" "int base" "long count" 79 .Ft void 80 .Fn free_error_table "struct et_list *" 81 .Ft const char * 82 .Fn com_right "struct et_list *list" long code" 83 .Sh DESCRIPTION 84 The 85 .Nm 86 library provides a common error-reporting mechanism for defining and 87 accessing error codes and descriptions for application software 88 packages. Error descriptions are defined in a table and error codes 89 are used to index the table. The error table, the descriptions and 90 the error codes are generated using 91 .Xr compile_et 1 . 92 .Pp 93 The error table is registered with the 94 .Nm 95 library by calling its initialisation function defined in its header 96 file. The initialisation function is generally defined as 97 .Fn initialize_<name>_error_table , 98 where 99 .Em name 100 is the name of the error table. 101 .Pp 102 If a thread-safe version of the library is needed 103 .Fn initialize_<name>_error_table_r 104 that internally calls 105 .Fn initialize_error_table_r 106 instead be used. 107 .Pp 108 Any variable which is to contain an error code should be declared 109 .Em <name>_error_number 110 where 111 .Em name 112 is the name of the error table. 113 .Sh FUNCTIONS 114 The following functions are available to the application developer: 115 .Bl -tag -width compact 116 .It Fn com_err "whoami" "code" "format" "..." 117 Displays an error message on standard error composed of the 118 .Fa whoami 119 string, which should specify the program name, followed by an error 120 message generated from 121 .Fa code , 122 and a string produced using the 123 .Xr printf 3 124 .Fa format 125 string and any following arguments. If 126 .Fa format 127 is NULL, the formatted message will not be 128 printed. The argument 129 .Fa format 130 may not be omitted. 131 .It Fn com_err_va "whoami" "code" "format" "va_list args" 132 This routine provides an interface, equivalent to 133 .Fn com_err , 134 which may be used by higher-level variadic functions (functions which 135 accept variable numbers of arguments). 136 .It Fn error_message "code" 137 Returns the character string error message associate with 138 .Fa code . 139 If 140 .Fa code is associated with an unknown error table, or if 141 .Fa code 142 is associated with a known error table but is not in the table, a 143 string of the form `Unknown code XXXX NN' is returned, where XXXX is 144 the error table name produced by reversing the compaction performed on 145 the error table number implied by that error code, and NN is the 146 offset from that base value. 147 .Pp 148 Although this routine is available for use when needed, its use should 149 be left to circumstances which render 150 .Fn com_err 151 unusable. 152 .Pp 153 .Fn com_right 154 returns the error string just like 155 .Fa com_err 156 but in a thread-safe way. 157 .Pp 158 .It Fn error_table_name "num" 159 Convert a machine-independent error table number 160 .Fa num 161 into an error table name. 162 .It Fn init_error_table "msgs" "base" "count" 163 Initialise the internal error table with the array of character string 164 error messages in 165 .Fa msgs 166 of length 167 .Fa count . 168 The error codes are assigned incrementally from 169 .Fa base . 170 This function is useful for using the error-reporting mechanism with 171 custom error tables that have not been generated with 172 .Xr compile_et 1 . 173 Although this routine is available for use when needed, its use should 174 be restricted. 175 .Pp 176 .Fn initialize_error_table_r 177 initialize the 178 .Fa et_list 179 in the same way as 180 .Fn init_error_table , 181 but in a thread-safe way. 182 .Pp 183 .It Fn set_com_err_hook "func" 184 Provides a hook into the 185 .Nm 186 library to allow the routine 187 .Fa func 188 to be dynamically substituted for 189 .Fn com_err . 190 After 191 .Fn set_com_err_hook 192 has been called, calls to 193 .Fn com_err 194 will turn into calls to the new hook routine. This function is 195 intended to be used in daemons to use a routine which calls 196 .Xr syslog 3 , 197 or in a window system application to pop up a dialogue box. 198 .It Fn reset_com_err_hook "" 199 Turns off the hook set in 200 .Fn set_com_err_hook . 201 .It Fn add_to_error_table "new_table" 202 Add the error table, its messages strings and error codes in 203 .Fa new_table 204 to the internal error table. 205 .El 206 .Sh EXAMPLES 207 The following is an example using the table defined in 208 .Xr compile_et 1 : 209 .Pp 210 .Bd -literal 211 #include <stdio.h> 212 #include <stdarg.h> 213 #include <syslog.h> 214 215 #include "test_err.h" 216 217 void 218 hook(const char *whoami, long code, 219 const char *format, va_list args) 220 { 221 char buffer[BUFSIZ]; 222 static int initialized = 0; 223 224 if (!initialized) { 225 openlog(whoami, LOG_NOWAIT, LOG_DAEMON); 226 initialized = 1; 227 } 228 vsprintf(buffer, format, args); 229 syslog(LOG_ERR, "%s %s", error_message(code), buffer); 230 } 231 232 int 233 main(int argc, char *argv[]) 234 { 235 char *whoami = argv[0]; 236 237 initialize_test_error_table(); 238 com_err(whoami, TEST_INVAL, "before hook"); 239 set_com_err_hook(hook); 240 com_err(whoami, TEST_IO, "after hook"); 241 return (0); 242 } 243 .Ed 244 .Sh SEE ALSO 245 .Xr compile_et 1