/src/jasper/src/libjasper/base/jas_debug.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright (c) 2001-2002 Michael David Adams. |
3 | | * All rights reserved. |
4 | | */ |
5 | | |
6 | | /* __START_OF_JASPER_LICENSE__ |
7 | | * |
8 | | * JasPer License Version 2.0 |
9 | | * |
10 | | * Copyright (c) 2001-2006 Michael David Adams |
11 | | * Copyright (c) 1999-2000 Image Power, Inc. |
12 | | * Copyright (c) 1999-2000 The University of British Columbia |
13 | | * |
14 | | * All rights reserved. |
15 | | * |
16 | | * Permission is hereby granted, free of charge, to any person (the |
17 | | * "User") obtaining a copy of this software and associated documentation |
18 | | * files (the "Software"), to deal in the Software without restriction, |
19 | | * including without limitation the rights to use, copy, modify, merge, |
20 | | * publish, distribute, and/or sell copies of the Software, and to permit |
21 | | * persons to whom the Software is furnished to do so, subject to the |
22 | | * following conditions: |
23 | | * |
24 | | * 1. The above copyright notices and this permission notice (which |
25 | | * includes the disclaimer below) shall be included in all copies or |
26 | | * substantial portions of the Software. |
27 | | * |
28 | | * 2. The name of a copyright holder shall not be used to endorse or |
29 | | * promote products derived from the Software without specific prior |
30 | | * written permission. |
31 | | * |
32 | | * THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS |
33 | | * LICENSE. NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER |
34 | | * THIS DISCLAIMER. THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS |
35 | | * "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING |
36 | | * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A |
37 | | * PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO |
38 | | * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL |
39 | | * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING |
40 | | * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, |
41 | | * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION |
42 | | * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. NO ASSURANCES ARE |
43 | | * PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE |
44 | | * THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY. |
45 | | * EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS |
46 | | * BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL |
47 | | * PROPERTY RIGHTS OR OTHERWISE. AS A CONDITION TO EXERCISING THE RIGHTS |
48 | | * GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE |
49 | | * ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY. THE SOFTWARE |
50 | | * IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL |
51 | | * SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES, |
52 | | * AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL |
53 | | * SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH |
54 | | * THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH, |
55 | | * PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH |
56 | | * RISK ACTIVITIES"). THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY |
57 | | * EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES. |
58 | | * |
59 | | * __END_OF_JASPER_LICENSE__ |
60 | | */ |
61 | | |
62 | | /******************************************************************************\ |
63 | | * Includes. |
64 | | \******************************************************************************/ |
65 | | |
66 | | #define JAS_FOR_INTERNAL_USE_ONLY |
67 | | |
68 | | #include "jasper/jas_init.h" |
69 | | #include "jasper/jas_compiler.h" |
70 | | #include "jasper/jas_debug.h" |
71 | | #include "jasper/jas_types.h" |
72 | | #include "jasper/jas_log.h" |
73 | | |
74 | | #include <stdarg.h> |
75 | | #include <stdio.h> |
76 | | |
77 | | /******************************************************************************\ |
78 | | * Code for getting/setting the debug level. |
79 | | \******************************************************************************/ |
80 | | |
81 | | /* Set the library debug level. */ |
82 | | JAS_DEPRECATED |
83 | | int jas_setdbglevel(int level) |
84 | 0 | { |
85 | 0 | jas_deprecated("jas_setdbglevel is deprecated\n"); |
86 | 0 | int old_level = jas_get_debug_level(); |
87 | 0 | jas_set_debug_level(level); |
88 | 0 | return old_level; |
89 | 0 | } |
90 | | |
91 | | /******************************************************************************\ |
92 | | * Code. |
93 | | \******************************************************************************/ |
94 | | |
95 | | /* Perform formatted output to standard error. */ |
96 | | int jas_eprintf(const char *fmt, ...) |
97 | 0 | { |
98 | 0 | int ret; |
99 | 0 | va_list ap; |
100 | 0 | va_start(ap, fmt); |
101 | 0 | ret = vfprintf(stderr, fmt, ap); |
102 | 0 | va_end(ap); |
103 | 0 | return ret; |
104 | 0 | } |
105 | | |
106 | | /* Generate formatted error log message. */ |
107 | | int jas_logprintf(const char *fmt, ...) |
108 | 0 | { |
109 | 0 | int ret; |
110 | 0 | va_list ap; |
111 | 0 | va_start(ap, fmt); |
112 | 0 | ret = jas_vlogmsgf(jas_logtype_init(JAS_LOGTYPE_CLASS_NULL, 0), fmt, |
113 | 0 | ap); |
114 | 0 | va_end(ap); |
115 | 0 | return ret; |
116 | 0 | } |
117 | | |
118 | | /* Generate formatted error log message. */ |
119 | | int jas_logerrorf(const char *fmt, ...) |
120 | 58.7k | { |
121 | 58.7k | int ret; |
122 | 58.7k | va_list ap; |
123 | 58.7k | va_start(ap, fmt); |
124 | 58.7k | ret = jas_vlogmsgf(jas_logtype_init(JAS_LOGTYPE_CLASS_ERROR, 0), fmt, |
125 | 58.7k | ap); |
126 | 58.7k | va_end(ap); |
127 | 58.7k | return ret; |
128 | 58.7k | } |
129 | | |
130 | | /* Generate formatted warning log message. */ |
131 | | int jas_logwarnf(const char *fmt, ...) |
132 | 110k | { |
133 | 110k | int ret; |
134 | 110k | va_list ap; |
135 | 110k | va_start(ap, fmt); |
136 | 110k | ret = jas_vlogmsgf(jas_logtype_init(JAS_LOGTYPE_CLASS_WARN, 0), fmt, |
137 | 110k | ap); |
138 | 110k | va_end(ap); |
139 | 110k | return ret; |
140 | 110k | } |
141 | | |
142 | | /* Generate formatted informational log message. */ |
143 | | int jas_loginfof(const char *fmt, ...) |
144 | 0 | { |
145 | 0 | int ret; |
146 | 0 | va_list ap; |
147 | 0 | va_start(ap, fmt); |
148 | 0 | ret = jas_vlogmsgf(jas_logtype_init(JAS_LOGTYPE_CLASS_INFO, 0), fmt, |
149 | 0 | ap); |
150 | 0 | va_end(ap); |
151 | 0 | return ret; |
152 | 0 | } |
153 | | |
154 | | /* Generate formatted debugging log message. */ |
155 | | int jas_logdebugf(int priority, const char *fmt, ...) |
156 | 0 | { |
157 | 0 | int ret; |
158 | 0 | va_list ap; |
159 | 0 | va_start(ap, fmt); |
160 | 0 | ret = jas_vlogmsgf(jas_logtype_init(JAS_LOGTYPE_CLASS_DEBUG, priority), |
161 | 0 | fmt, ap); |
162 | 0 | va_end(ap); |
163 | 0 | return ret; |
164 | 0 | } |
165 | | |
166 | | /*! |
167 | | @brief |
168 | | @details |
169 | | */ |
170 | | JAS_EXPORT |
171 | | int jas_vlogmsgf(jas_logtype_t type, const char *fmt, va_list ap) |
172 | 169k | { |
173 | 169k | int ret; |
174 | 169k | jas_vlogmsgf_t *func = jas_get_vlogmsgf(); |
175 | 169k | ret = func(type, fmt, ap); |
176 | 169k | return ret; |
177 | 169k | } |
178 | | |
179 | | /* Perform formatted output to standard error. */ |
180 | | JAS_EXPORT |
181 | | int jas_vlogmsgf_stderr(jas_logtype_t type, const char *fmt, va_list ap) |
182 | 169k | { |
183 | 169k | #if 1 |
184 | 169k | JAS_UNUSED(type); |
185 | 169k | int result = vfprintf(stderr, fmt, ap); |
186 | 169k | return result; |
187 | | #else |
188 | | const char *s = "INVALID"; |
189 | | switch (jas_logtype_getclass(type)) { |
190 | | case JAS_LOGTYPE_CLASS_NULL: |
191 | | s = "OTHER"; |
192 | | break; |
193 | | case JAS_LOGTYPE_CLASS_ERROR: |
194 | | s = "ERROR"; |
195 | | break; |
196 | | case JAS_LOGTYPE_CLASS_WARN: |
197 | | s = "WARNING"; |
198 | | break; |
199 | | case JAS_LOGTYPE_CLASS_INFO: |
200 | | s = "INFO"; |
201 | | break; |
202 | | case JAS_LOGTYPE_CLASS_DEBUG: |
203 | | s = "DEBUG"; |
204 | | break; |
205 | | } |
206 | | int r1 = fprintf(stderr, "%s: ", s); |
207 | | int r2 = vfprintf(stderr, fmt, ap); |
208 | | int result = -1; |
209 | | if (r1 > 0 && r2 > 0) { |
210 | | result = r1 + r2; |
211 | | } |
212 | | return result; |
213 | | #endif |
214 | 169k | } |
215 | | |
216 | | /* Perform formatted output to standard error. */ |
217 | | JAS_EXPORT |
218 | | int jas_vlogmsgf_discard(jas_logtype_t type, const char *fmt, va_list ap) |
219 | 0 | { |
220 | 0 | JAS_UNUSED(type); |
221 | 0 | JAS_CAST(void, fmt); |
222 | 0 | JAS_CAST(void, ap); |
223 | 0 | return 0; |
224 | 0 | } |
225 | | |
226 | | /* Dump memory to a stream. */ |
227 | | int jas_memdump(FILE *out, const void *data, size_t len) |
228 | 0 | { |
229 | 0 | size_t i; |
230 | 0 | size_t j; |
231 | 0 | const jas_uchar *dp = data; |
232 | 0 | for (i = 0; i < len; i += 16) { |
233 | 0 | fprintf(out, "%04zx:", i); |
234 | 0 | for (j = 0; j < 16; ++j) { |
235 | 0 | if (i + j < len) { |
236 | 0 | fprintf(out, " %02x", dp[i + j]); |
237 | 0 | } |
238 | 0 | } |
239 | 0 | fprintf(out, "\n"); |
240 | 0 | } |
241 | 0 | return 0; |
242 | 0 | } |
243 | | |
244 | | /* Dump memory to a stream. */ |
245 | | int jas_logmemdump(const void *data, size_t len) |
246 | 0 | { |
247 | 0 | size_t i; |
248 | 0 | size_t j; |
249 | 0 | const jas_uchar *dp = data; |
250 | 0 | for (i = 0; i < len; i += 16) { |
251 | 0 | jas_logprintf("%04zx:", i); |
252 | 0 | for (j = 0; j < 16; ++j) { |
253 | 0 | if (i + j < len) { |
254 | 0 | jas_logprintf(" %02x", dp[i + j]); |
255 | 0 | } |
256 | 0 | } |
257 | 0 | jas_logprintf("\n"); |
258 | 0 | } |
259 | 0 | return 0; |
260 | 0 | } |
261 | | |
262 | | /******************************************************************************\ |
263 | | * Code. |
264 | | \******************************************************************************/ |
265 | | |
266 | | void jas_deprecated(const char *fmt, ...) |
267 | 0 | { |
268 | 0 | static const char message[] = |
269 | 0 | "WARNING: YOUR CODE IS RELYING ON DEPRECATED FUNCTIONALITY IN THE JASPER\n" |
270 | 0 | "LIBRARY. THIS FUNCTIONALITY WILL BE REMOVED IN THE NEAR FUTURE. PLEASE\n" |
271 | 0 | "FIX THIS PROBLEM BEFORE YOUR CODE STOPS WORKING.\n" |
272 | 0 | ; |
273 | 0 | fprintf(stderr, "%s", message); |
274 | 0 | fprintf(stderr, "deprecation warning: "); |
275 | 0 | va_list ap; |
276 | 0 | va_start(ap, fmt); |
277 | 0 | vfprintf(stderr, fmt, ap); |
278 | 0 | va_end(ap); |
279 | 0 | } |