Expand PMF_FN_* macros.
[netbsd-mini2440.git] / dist / dhcp / omapip / errwarn.c
blob877f15393e9172c32503b9c27e3cd68563d7628b
1 /* errwarn.c
3 Errors and warnings... */
5 /*
6 * Copyright (c) 1995 RadioMail Corporation.
7 * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
8 * Copyright (c) 1996-2003 by Internet Software Consortium
10 * Permission to use, copy, modify, and distribute this software for any
11 * purpose with or without fee is hereby granted, provided that the above
12 * copyright notice and this permission notice appear in all copies.
14 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
15 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
16 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
17 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
20 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22 * Internet Systems Consortium, Inc.
23 * 950 Charter Street
24 * Redwood City, CA 94063
25 * <info@isc.org>
26 * http://www.isc.org/
28 * This software was written for RadioMail Corporation by Ted Lemon
29 * under a contract with Vixie Enterprises. Further modifications have
30 * been made for Internet Systems Consortium under a contract
31 * with Vixie Laboratories.
34 #ifndef lint
35 static char copyright[] =
36 "$Id: errwarn.c,v 1.3 2005/08/11 17:13:30 drochner Exp $ Copyright (c) 2004 Internet Systems Consortium. All rights reserved.\n";
37 #endif /* not lint */
39 #include <omapip/omapip_p.h>
40 #include <errno.h>
42 #ifdef DEBUG
43 int log_perror = -1;
44 #else
45 int log_perror = 1;
46 #endif
47 int log_priority;
48 void (*log_cleanup) (void);
50 #define CVT_BUF_MAX 1023
51 static char mbuf [CVT_BUF_MAX + 1];
52 static char fbuf [CVT_BUF_MAX + 1];
54 /* Log an error message, then exit... */
56 void log_fatal (const char * fmt, ... )
58 va_list list;
60 do_percentm (fbuf, fmt);
62 /* %Audit% This is log output. %2004.06.17,Safe%
63 * If we truncate we hope the user can get a hint from the log.
65 va_start (list, fmt);
66 fmt = fbuf;
67 vsnprintf (mbuf, sizeof mbuf, fmt, list);
68 va_end (list);
70 #ifndef DEBUG
71 syslog (log_priority | LOG_ERR, "%s", mbuf);
72 #endif
74 /* Also log it to stderr? */
75 if (log_perror) {
76 write (STDERR_FILENO, mbuf, strlen (mbuf));
77 write (STDERR_FILENO, "\n", 1);
80 #if !defined (NOMINUM)
81 log_error ("%s", "");
82 log_error ("If you did not get this software from ftp.isc.org, please");
83 log_error ("get the latest from ftp.isc.org and install that before");
84 log_error ("requesting help.");
85 log_error ("%s", "");
86 log_error ("If you did get this software from ftp.isc.org and have not");
87 log_error ("yet read the README, please read it before requesting help.");
88 log_error ("If you intend to request help from the dhcp-server@isc.org");
89 log_error ("mailing list, please read the section on the README about");
90 log_error ("submitting bug reports and requests for help.");
91 log_error ("%s", "");
92 log_error ("Please do not under any circumstances send requests for");
93 log_error ("help directly to the authors of this software - please");
94 log_error ("send them to the appropriate mailing list as described in");
95 log_error ("the README file.");
96 log_error ("%s", "");
97 log_error ("exiting.");
98 #endif
99 if (log_cleanup)
100 (*log_cleanup) ();
101 exit (1);
104 /* Log an error message... */
106 int log_error (const char * fmt, ...)
108 va_list list;
110 do_percentm (fbuf, fmt);
112 /* %Audit% This is log output. %2004.06.17,Safe%
113 * If we truncate we hope the user can get a hint from the log.
115 va_start (list, fmt);
116 fmt = fbuf;
117 vsnprintf (mbuf, sizeof mbuf, fmt, list);
118 va_end (list);
120 #ifndef DEBUG
121 syslog (log_priority | LOG_ERR, "%s", mbuf);
122 #endif
124 if (log_perror) {
125 write (STDERR_FILENO, mbuf, strlen (mbuf));
126 write (STDERR_FILENO, "\n", 1);
129 return 0;
132 /* Log a note... */
134 int log_info (const char *fmt, ...)
136 va_list list;
138 do_percentm (fbuf, fmt);
140 /* %Audit% This is log output. %2004.06.17,Safe%
141 * If we truncate we hope the user can get a hint from the log.
143 va_start (list, fmt);
144 fmt = fbuf;
145 vsnprintf (mbuf, sizeof mbuf, fmt, list);
146 va_end (list);
148 #ifndef DEBUG
149 syslog (log_priority | LOG_INFO, "%s", mbuf);
150 #endif
152 if (log_perror) {
153 write (STDERR_FILENO, mbuf, strlen (mbuf));
154 write (STDERR_FILENO, "\n", 1);
157 return 0;
160 /* Log a debug message... */
162 int log_debug (const char *fmt, ...)
164 va_list list;
166 do_percentm (fbuf, fmt);
168 /* %Audit% This is log output. %2004.06.17,Safe%
169 * If we truncate we hope the user can get a hint from the log.
171 va_start (list, fmt);
172 fmt = fbuf;
173 vsnprintf (mbuf, sizeof mbuf, fmt, list);
174 va_end (list);
176 #ifndef DEBUG
177 syslog (log_priority | LOG_DEBUG, "%s", mbuf);
178 #endif
180 if (log_perror) {
181 write (STDERR_FILENO, mbuf, strlen (mbuf));
182 write (STDERR_FILENO, "\n", 1);
185 return 0;
188 /* Find %m in the input string and substitute an error message string. */
190 void do_percentm (obuf, ibuf)
191 char *obuf;
192 const char *ibuf;
194 const char *s = ibuf;
195 char *p = obuf;
196 int infmt = 0;
197 const char *m;
198 int len = 0;
200 while (*s) {
201 if (infmt) {
202 if (*s == 'm') {
203 #ifndef __CYGWIN32__
204 m = strerror (errno);
205 #else
206 m = pWSAError ();
207 #endif
208 if (!m)
209 m = "<unknown error>";
210 len += strlen (m);
211 if (len > CVT_BUF_MAX)
212 goto out;
213 strcpy (p - 1, m);
214 p += strlen (p);
215 ++s;
216 } else {
217 if (++len > CVT_BUF_MAX)
218 goto out;
219 *p++ = *s++;
221 infmt = 0;
222 } else {
223 if (*s == '%')
224 infmt = 1;
225 if (++len > CVT_BUF_MAX)
226 goto out;
227 *p++ = *s++;
230 out:
231 *p = 0;
234 #ifdef NO_STRERROR
235 char *strerror (err)
236 int err;
238 extern char *sys_errlist [];
239 extern int sys_nerr;
240 static char errbuf [128];
242 if (err < 0 || err >= sys_nerr) {
243 sprintf (errbuf, "Error %d", err);
244 return errbuf;
246 return sys_errlist [err];
248 #endif /* NO_STRERROR */
250 #ifdef _WIN32
251 char *pWSAError ()
253 int err = WSAGetLastError ();
255 switch (err)
257 case WSAEACCES:
258 return "Permission denied";
259 case WSAEADDRINUSE:
260 return "Address already in use";
261 case WSAEADDRNOTAVAIL:
262 return "Cannot assign requested address";
263 case WSAEAFNOSUPPORT:
264 return "Address family not supported by protocol family";
265 case WSAEALREADY:
266 return "Operation already in progress";
267 case WSAECONNABORTED:
268 return "Software caused connection abort";
269 case WSAECONNREFUSED:
270 return "Connection refused";
271 case WSAECONNRESET:
272 return "Connection reset by peer";
273 case WSAEDESTADDRREQ:
274 return "Destination address required";
275 case WSAEFAULT:
276 return "Bad address";
277 case WSAEHOSTDOWN:
278 return "Host is down";
279 case WSAEHOSTUNREACH:
280 return "No route to host";
281 case WSAEINPROGRESS:
282 return "Operation now in progress";
283 case WSAEINTR:
284 return "Interrupted function call";
285 case WSAEINVAL:
286 return "Invalid argument";
287 case WSAEISCONN:
288 return "Socket is already connected";
289 case WSAEMFILE:
290 return "Too many open files";
291 case WSAEMSGSIZE:
292 return "Message too long";
293 case WSAENETDOWN:
294 return "Network is down";
295 case WSAENETRESET:
296 return "Network dropped connection on reset";
297 case WSAENETUNREACH:
298 return "Network is unreachable";
299 case WSAENOBUFS:
300 return "No buffer space available";
301 case WSAENOPROTOOPT:
302 return "Bad protocol option";
303 case WSAENOTCONN:
304 return "Socket is not connected";
305 case WSAENOTSOCK:
306 return "Socket operation on non-socket";
307 case WSAEOPNOTSUPP:
308 return "Operation not supported";
309 case WSAEPFNOSUPPORT:
310 return "Protocol family not supported";
311 case WSAEPROCLIM:
312 return "Too many processes";
313 case WSAEPROTONOSUPPORT:
314 return "Protocol not supported";
315 case WSAEPROTOTYPE:
316 return "Protocol wrong type for socket";
317 case WSAESHUTDOWN:
318 return "Cannot send after socket shutdown";
319 case WSAESOCKTNOSUPPORT:
320 return "Socket type not supported";
321 case WSAETIMEDOUT:
322 return "Connection timed out";
323 case WSAEWOULDBLOCK:
324 return "Resource temporarily unavailable";
325 case WSAHOST_NOT_FOUND:
326 return "Host not found";
327 #if 0
328 case WSA_INVALID_HANDLE:
329 return "Specified event object handle is invalid";
330 case WSA_INVALID_PARAMETER:
331 return "One or more parameters are invalid";
332 case WSAINVALIDPROCTABLE:
333 return "Invalid procedure table from service provider";
334 case WSAINVALIDPROVIDER:
335 return "Invalid service provider version number";
336 case WSA_IO_PENDING:
337 return "Overlapped operations will complete later";
338 case WSA_IO_INCOMPLETE:
339 return "Overlapped I/O event object not in signaled state";
340 case WSA_NOT_ENOUGH_MEMORY:
341 return "Insufficient memory available";
342 #endif
343 case WSANOTINITIALISED:
344 return "Successful WSAStartup not yet performer";
345 case WSANO_DATA:
346 return "Valid name, no data record of requested type";
347 case WSANO_RECOVERY:
348 return "This is a non-recoverable error";
349 #if 0
350 case WSAPROVIDERFAILEDINIT:
351 return "Unable to initialize a service provider";
352 case WSASYSCALLFAILURE:
353 return "System call failure";
354 #endif
355 case WSASYSNOTREADY:
356 return "Network subsystem is unavailable";
357 case WSATRY_AGAIN:
358 return "Non-authoritative host not found";
359 case WSAVERNOTSUPPORTED:
360 return "WINSOCK.DLL version out of range";
361 case WSAEDISCON:
362 return "Graceful shutdown in progress";
363 #if 0
364 case WSA_OPERATION_ABORTED:
365 return "Overlapped operation aborted";
366 #endif
368 return "Unknown WinSock error";
370 #endif /* _WIN32 */