Mercurial > trustbridge
annotate common/logging.h @ 557:5cd525fc91de
Add lcov target to generate coverage report
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Thu, 22 May 2014 10:19:27 +0000 |
parents | 5e2af38266f6 |
children | 2a4f7364ab81 |
rev | line source |
---|---|
404 | 1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik |
2 * Software engineering by Intevation GmbH | |
3 * | |
4 * This file is Free Software under the GNU GPL (v>=2) | |
5 * and comes with ABSOLUTELY NO WARRANTY! | |
6 * See LICENSE.txt for details. | |
7 */ | |
252
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
8 #ifndef COMMON_LOGGING_H |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
9 #define COMMON_LOGGING_H |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
10 |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
11 #ifdef __cplusplus |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
12 extern "C" { |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
13 #endif |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
14 |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
15 /* |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
16 * @file |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
17 * @brief Logging and debugging functions |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
18 */ |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
19 |
503
7f2cb85288d0
Move printlasterror into logging
Andre Heinecke <aheinecke@intevation.de>
parents:
404
diff
changeset
|
20 #include <stdio.h> |
7f2cb85288d0
Move printlasterror into logging
Andre Heinecke <aheinecke@intevation.de>
parents:
404
diff
changeset
|
21 |
252
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
22 #ifdef WIN32 |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
23 |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
24 #include <windows.h> |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
25 |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
26 /** @brief Gets the localized error message for the last error |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
27 * returned by GetLastError |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
28 * |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
29 * @returns utf8 error message that needs to be freed by the caller. |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
30 **/ |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
31 |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
32 char *getLastErrorMsg(); |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
33 |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
34 #endif |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
35 |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
36 /** |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
37 * @def DEBUGOUTPUT |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
38 * @brief If defined code for extra debugging output will be generated. |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
39 * |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
40 * Will be defined if current build is not an RELEASE_BUILD. |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
41 */ |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
42 #ifndef RELEASE_BUILD |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
43 #define DEBUGOUTPUT |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
44 #endif |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
45 |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
46 /** |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
47 * @def DEBUGPREFIX |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
48 * @brief A string prepended to debug output. |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
49 * |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
50 * Should be defined to indicate which module created the output. |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
51 */ |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
52 #ifndef DEBUGPREFIX |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
53 #define DEBUGPREFIX "" |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
54 #endif |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
55 |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
56 /** |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
57 * @def DEBUGPRINTF(fmt, ...) |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
58 * @brief Debug printf |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
59 * |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
60 * Prints to stderr if DEBUGOUTPUT is defined. |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
61 */ |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
62 #ifdef DEBUGOUTPUT |
329
b1059360a0c7
Debugprintf with output debug string on windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
287
diff
changeset
|
63 # ifndef WIN32 |
b1059360a0c7
Debugprintf with output debug string on windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
287
diff
changeset
|
64 # define DEBUGPRINTF(fmt, ...) fprintf(stderr, DEBUGPREFIX "DEBUG: " fmt, ##__VA_ARGS__); |
b1059360a0c7
Debugprintf with output debug string on windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
287
diff
changeset
|
65 # else /* WIN32 */ |
b1059360a0c7
Debugprintf with output debug string on windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
287
diff
changeset
|
66 # define DEBUGPRINTF(fmt, ...) \ |
b1059360a0c7
Debugprintf with output debug string on windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
287
diff
changeset
|
67 { \ |
b1059360a0c7
Debugprintf with output debug string on windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
287
diff
changeset
|
68 char buf[512]; \ |
b1059360a0c7
Debugprintf with output debug string on windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
287
diff
changeset
|
69 snprintf(buf, 511, "DEBUG: " fmt, ##__VA_ARGS__); \ |
b1059360a0c7
Debugprintf with output debug string on windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
287
diff
changeset
|
70 buf[511] = '\0'; \ |
b1059360a0c7
Debugprintf with output debug string on windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
287
diff
changeset
|
71 OutputDebugStringA(buf); \ |
b1059360a0c7
Debugprintf with output debug string on windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
287
diff
changeset
|
72 } |
b1059360a0c7
Debugprintf with output debug string on windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
287
diff
changeset
|
73 # endif /* WIN32 */ |
287
b033b16dd290
Add OutputDebugString macro
Andre Heinecke <aheinecke@intevation.de>
parents:
252
diff
changeset
|
74 #else |
b033b16dd290
Add OutputDebugString macro
Andre Heinecke <aheinecke@intevation.de>
parents:
252
diff
changeset
|
75 # define DEBUGPRINTF(fmt, ...) |
b033b16dd290
Add OutputDebugString macro
Andre Heinecke <aheinecke@intevation.de>
parents:
252
diff
changeset
|
76 #endif |
b033b16dd290
Add OutputDebugString macro
Andre Heinecke <aheinecke@intevation.de>
parents:
252
diff
changeset
|
77 |
b033b16dd290
Add OutputDebugString macro
Andre Heinecke <aheinecke@intevation.de>
parents:
252
diff
changeset
|
78 /** |
b033b16dd290
Add OutputDebugString macro
Andre Heinecke <aheinecke@intevation.de>
parents:
252
diff
changeset
|
79 * @def ERRORPRINTF(fmt, ...) |
b033b16dd290
Add OutputDebugString macro
Andre Heinecke <aheinecke@intevation.de>
parents:
252
diff
changeset
|
80 * @brief Debug printf |
b033b16dd290
Add OutputDebugString macro
Andre Heinecke <aheinecke@intevation.de>
parents:
252
diff
changeset
|
81 * |
b033b16dd290
Add OutputDebugString macro
Andre Heinecke <aheinecke@intevation.de>
parents:
252
diff
changeset
|
82 * Prints an error to stderr |
b033b16dd290
Add OutputDebugString macro
Andre Heinecke <aheinecke@intevation.de>
parents:
252
diff
changeset
|
83 */ |
504
3cf72c5282e8
Redirect errorprintf to output debug string on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
503
diff
changeset
|
84 #ifdef WIN32 |
3cf72c5282e8
Redirect errorprintf to output debug string on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
503
diff
changeset
|
85 # define ERRORPRINTF(fmt, ...) \ |
3cf72c5282e8
Redirect errorprintf to output debug string on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
503
diff
changeset
|
86 { \ |
3cf72c5282e8
Redirect errorprintf to output debug string on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
503
diff
changeset
|
87 char buf[512]; \ |
3cf72c5282e8
Redirect errorprintf to output debug string on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
503
diff
changeset
|
88 snprintf(buf, 511, "ERROR: " fmt, ##__VA_ARGS__); \ |
3cf72c5282e8
Redirect errorprintf to output debug string on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
503
diff
changeset
|
89 buf[511] = '\0'; \ |
3cf72c5282e8
Redirect errorprintf to output debug string on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
503
diff
changeset
|
90 OutputDebugStringA(buf); \ |
3cf72c5282e8
Redirect errorprintf to output debug string on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
503
diff
changeset
|
91 } |
3cf72c5282e8
Redirect errorprintf to output debug string on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
503
diff
changeset
|
92 #else |
3cf72c5282e8
Redirect errorprintf to output debug string on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
503
diff
changeset
|
93 # define ERRORPRINTF(fmt, ...) fprintf(stderr, DEBUGPREFIX "ERROR: " fmt, ##__VA_ARGS__); |
3cf72c5282e8
Redirect errorprintf to output debug string on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
503
diff
changeset
|
94 #endif |
287
b033b16dd290
Add OutputDebugString macro
Andre Heinecke <aheinecke@intevation.de>
parents:
252
diff
changeset
|
95 |
513
5e2af38266f6
Add documentation for printlasterror
Andre Heinecke <aheinecke@intevation.de>
parents:
504
diff
changeset
|
96 /** |
5e2af38266f6
Add documentation for printlasterror
Andre Heinecke <aheinecke@intevation.de>
parents:
504
diff
changeset
|
97 * @def PRINTLASTERROR(msg) |
5e2af38266f6
Add documentation for printlasterror
Andre Heinecke <aheinecke@intevation.de>
parents:
504
diff
changeset
|
98 * @brief Prints the last windows error with a custom message |
5e2af38266f6
Add documentation for printlasterror
Andre Heinecke <aheinecke@intevation.de>
parents:
504
diff
changeset
|
99 * |
5e2af38266f6
Add documentation for printlasterror
Andre Heinecke <aheinecke@intevation.de>
parents:
504
diff
changeset
|
100 * Prints an error to stderr |
5e2af38266f6
Add documentation for printlasterror
Andre Heinecke <aheinecke@intevation.de>
parents:
504
diff
changeset
|
101 */ |
503
7f2cb85288d0
Move printlasterror into logging
Andre Heinecke <aheinecke@intevation.de>
parents:
404
diff
changeset
|
102 #define PRINTLASTERROR(msg) \ |
7f2cb85288d0
Move printlasterror into logging
Andre Heinecke <aheinecke@intevation.de>
parents:
404
diff
changeset
|
103 char *my_error = getLastErrorMsg(); \ |
7f2cb85288d0
Move printlasterror into logging
Andre Heinecke <aheinecke@intevation.de>
parents:
404
diff
changeset
|
104 if (my_error) { \ |
7f2cb85288d0
Move printlasterror into logging
Andre Heinecke <aheinecke@intevation.de>
parents:
404
diff
changeset
|
105 ERRORPRINTF(msg" : %s\n", my_error); \ |
7f2cb85288d0
Move printlasterror into logging
Andre Heinecke <aheinecke@intevation.de>
parents:
404
diff
changeset
|
106 free (my_error); \ |
7f2cb85288d0
Move printlasterror into logging
Andre Heinecke <aheinecke@intevation.de>
parents:
404
diff
changeset
|
107 } \ |
7f2cb85288d0
Move printlasterror into logging
Andre Heinecke <aheinecke@intevation.de>
parents:
404
diff
changeset
|
108 ERRORPRINTF ("Failed to get error information\n"); |
287
b033b16dd290
Add OutputDebugString macro
Andre Heinecke <aheinecke@intevation.de>
parents:
252
diff
changeset
|
109 |
b033b16dd290
Add OutputDebugString macro
Andre Heinecke <aheinecke@intevation.de>
parents:
252
diff
changeset
|
110 |
252
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
111 #ifdef __cplusplus |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
112 } |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
113 #endif |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
114 |
bd7fb50078b4
Add logging.h for some logging / debug functions
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
115 #endif /* COMMON_LOGGING_H */ |