Mercurial > libjeffpc
annotate error.c @ 50:653a896a546e
error: not all systems have assfail
Check for its presence at build time, and use a workaround if not present.
Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author | Josef 'Jeff' Sipek <jeffpc@josefsipek.net> |
---|---|
date | Wed, 30 Mar 2016 16:56:32 -0400 |
parents | 1e367179ae6c |
children | 85e9b512bb73 |
rev | line source |
---|---|
4
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
1 /* |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
2 * Copyright (c) 2013-2016 Josef 'Jeff' Sipek <jeffpc@josefsipek.net> |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
3 * |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
4 * Permission is hereby granted, free of charge, to any person obtaining a copy |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
5 * of this software and associated documentation files (the "Software"), to deal |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
6 * in the Software without restriction, including without limitation the rights |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
8 * copies of the Software, and to permit persons to whom the Software is |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
9 * furnished to do so, subject to the following conditions: |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
10 * |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
11 * The above copyright notice and this permission notice shall be included in |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
12 * all copies or substantial portions of the Software. |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
13 * |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
20 * SOFTWARE. |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
21 */ |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
22 |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
23 #include <sys/debug.h> |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
24 |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
25 /* |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
26 * clean up the pulled in defines since we want to do our own thing |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
27 */ |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
28 #undef ASSERT |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
29 #undef VERIFY |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
30 #undef ASSERT64 |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
31 #undef ASSERT32 |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
32 #undef IMPLY |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
33 #undef EQUIV |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
34 #undef VERIFY3S |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
35 #undef VERIFY3U |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
36 #undef VERIFY3P |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
37 #undef VERIFY0 |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
38 #undef ASSERT3S |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
39 #undef ASSERT3U |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
40 #undef ASSERT3P |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
41 #undef ASSERT0 |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
42 |
50
653a896a546e
error: not all systems have assfail
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
39
diff
changeset
|
43 #include <inttypes.h> |
4
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
44 #include <syslog.h> |
30
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
45 #include <stdio.h> |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
46 #include <stdbool.h> |
50
653a896a546e
error: not all systems have assfail
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
39
diff
changeset
|
47 #include <assert.h> |
30
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
48 #include <pthread.h> |
4
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
49 |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
50 #include <jeffpc/error.h> |
50
653a896a546e
error: not all systems have assfail
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
39
diff
changeset
|
51 #include <jeffpc/config.h> |
4
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
52 |
39
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
53 #include "init.h" |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
54 |
50
653a896a546e
error: not all systems have assfail
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
39
diff
changeset
|
55 #ifndef HAVE_ASSFAIL |
653a896a546e
error: not all systems have assfail
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
39
diff
changeset
|
56 static void assfail(const char *assertion, const char *file, int line) |
653a896a546e
error: not all systems have assfail
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
39
diff
changeset
|
57 { |
653a896a546e
error: not all systems have assfail
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
39
diff
changeset
|
58 __assert(assertion, file, line); |
653a896a546e
error: not all systems have assfail
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
39
diff
changeset
|
59 } |
653a896a546e
error: not all systems have assfail
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
39
diff
changeset
|
60 #endif |
653a896a546e
error: not all systems have assfail
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
39
diff
changeset
|
61 |
39
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
62 void default_print(enum errlevel level, const char *fmt, va_list ap) |
30
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
63 { |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
64 FILE *out; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
65 |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
66 switch (level) { |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
67 case CE_DEBUG: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
68 case CE_INFO: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
69 out = stdout; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
70 break; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
71 case CE_WARN: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
72 case CE_ERROR: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
73 case CE_CRIT: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
74 case CE_PANIC: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
75 default: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
76 out = stderr; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
77 break; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
78 } |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
79 |
39
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
80 vfprintf(out, fmt, ap); |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
81 } |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
82 |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
83 void jeffpc_print(enum errlevel level, const char *fmt, ...) |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
84 { |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
85 va_list ap; |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
86 |
30
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
87 va_start(ap, fmt); |
39
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
88 libops.print(level, fmt, ap); |
30
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
89 va_end(ap); |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
90 } |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
91 |
39
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
92 void default_log(int loglevel, const char *fmt, va_list ap) |
4
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
93 { |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
94 /* |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
95 * This function is a no-op but it exists to allow consumers of |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
96 * libjeffpc to override it with their own log implementation. |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
97 */ |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
98 } |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
99 |
39
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
100 void jeffpc_log(int loglevel, const char *fmt, ...) |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
101 { |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
102 va_list ap; |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
103 |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
104 va_start(ap, fmt); |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
105 libops.log(loglevel, fmt, ap); |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
106 va_end(ap); |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
107 } |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
108 |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
109 void default_assfail(const char *a, const char *f, int l) |
4
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
110 { |
30
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
111 jeffpc_log(LOG_ALERT, "assertion failed: %s, file: %s, line: %d", |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
112 a, f, l); |
4
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
113 |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
114 assfail(a, f, l); |
39
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
115 } |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
116 |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
117 void jeffpc_assfail(const char *a, const char *f, int l) |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
118 { |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
119 libops.assfail(a, f, l); |
4
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
120 |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
121 /* this is a hack to shut up gcc */ |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
122 abort(); |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
123 } |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
124 |
39
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
125 void default_assfail3(const char *a, uintmax_t lv, const char *op, uintmax_t rv, |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
126 const char *f, int l) |
4
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
127 { |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
128 char msg[512]; |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
129 |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
130 snprintf(msg, sizeof(msg), "%s (0x%"PRIx64" %s 0x%"PRIx64")", a, lv, |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
131 op, rv); |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
132 |
30
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
133 jeffpc_log(LOG_ALERT, "assertion failed: %s, file: %s, line: %d", |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
134 msg, f, l); |
4
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
135 |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
136 assfail(msg, f, l); |
39
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
137 } |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
138 |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
139 void jeffpc_assfail3(const char *a, uintmax_t lv, const char *op, uintmax_t rv, |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
140 const char *f, int l) |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
141 { |
1e367179ae6c
init & error: allow users to provide logging infrastructure
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
142 libops.assfail3(a, lv, op, rv, f, l); |
4
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
143 |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
144 /* this is a hack to shut up gcc */ |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
145 abort(); |
49bec073c6e4
error: define assertion macros and a syslogging mechanism
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
146 } |
30
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
147 |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
148 void cmn_verr(enum errlevel level, const char *fmt, va_list ap) |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
149 { |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
150 const char *levelstr; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
151 unsigned long tid; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
152 int loglevel; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
153 bool panic; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
154 char buf[256]; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
155 |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
156 tid = (unsigned long) pthread_self(); |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
157 panic = false; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
158 |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
159 switch (level) { |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
160 case CE_DEBUG: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
161 levelstr = "DEBUG"; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
162 loglevel = LOG_DEBUG; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
163 break; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
164 case CE_INFO: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
165 levelstr = "INFO"; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
166 loglevel = LOG_INFO; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
167 break; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
168 case CE_WARN: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
169 levelstr = "WARN"; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
170 loglevel = LOG_WARNING; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
171 break; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
172 case CE_ERROR: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
173 levelstr = "ERROR"; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
174 loglevel = LOG_ERR; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
175 break; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
176 case CE_CRIT: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
177 levelstr = "CRIT"; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
178 loglevel = LOG_CRIT; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
179 break; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
180 case CE_PANIC: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
181 levelstr = "PANIC"; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
182 loglevel = LOG_ALERT; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
183 panic = true; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
184 break; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
185 default: |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
186 levelstr = "?????"; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
187 loglevel = LOG_CRIT; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
188 panic = true; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
189 break; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
190 } |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
191 |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
192 vsnprintf(buf, sizeof(buf), fmt, ap); |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
193 |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
194 /* |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
195 * We are printing the thread ID as a 4-digit number. This will |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
196 * allow systems that use small integers (e.g., Illumos) to have |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
197 * short IDs. Systems that use large integers (e.g., Linux) will |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
198 * use more digits. Since on those systems the IDs will be |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
199 * clustered around some big integer, they will very likely always |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
200 * print as the same number of digits. |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
201 */ |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
202 jeffpc_log(loglevel, "[%04lx] %-5s %s\n", tid, levelstr, buf); |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
203 jeffpc_print(level, "[%04lx] %-5s %s\n", tid, levelstr, buf); |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
204 |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
205 if (panic) |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
206 abort(); |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
207 } |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
208 |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
209 void cmn_err(enum errlevel level, const char *fmt, ...) |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
210 { |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
211 va_list ap; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
212 |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
213 va_start(ap, fmt); |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
214 cmn_verr(level, fmt, ap); |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
215 va_end(ap); |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
216 } |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
217 |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
218 void panic(const char *fmt, ...) |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
219 { |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
220 va_list ap; |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
221 |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
222 va_start(ap, fmt); |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
223 cmn_verr(CE_PANIC, fmt, ap); |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
224 va_end(ap); |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
225 |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
226 /* this is a hack to shut up gcc */ |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
227 abort(); |
59ce34920fda
error: introduce cmn_err, cmn_verr, and panic
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
4
diff
changeset
|
228 } |