aheinecke@404: /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
aheinecke@404:  * Software engineering by Intevation GmbH
aheinecke@404:  *
aheinecke@404:  * This file is Free Software under the GNU GPL (v>=2)
aheinecke@404:  * and comes with ABSOLUTELY NO WARRANTY!
aheinecke@404:  * See LICENSE.txt for details.
aheinecke@404:  */
aheinecke@252: #ifndef COMMON_LOGGING_H
aheinecke@252: #define COMMON_LOGGING_H
aheinecke@252: 
aheinecke@252: #ifdef __cplusplus
aheinecke@252: extern "C" {
aheinecke@252: #endif
aheinecke@252: 
aheinecke@252: /*
aheinecke@252:  * @file
aheinecke@252:  * @brief Logging and debugging functions
aheinecke@252:  */
aheinecke@252: 
aheinecke@252: #ifdef WIN32
aheinecke@252: 
aheinecke@252: #include <windows.h>
aheinecke@252: 
aheinecke@252: /** @brief Gets the localized error message for the last error
aheinecke@252:  * returned by GetLastError
aheinecke@252:  *
aheinecke@252:  * @returns utf8 error message that needs to be freed by the caller.
aheinecke@252:  **/
aheinecke@252: 
aheinecke@252: char *getLastErrorMsg();
aheinecke@252: 
aheinecke@252: #endif
aheinecke@252: 
aheinecke@252: /**
aheinecke@252:  * @def DEBUGOUTPUT
aheinecke@252:  * @brief If defined code for extra debugging output will be generated.
aheinecke@252:  *
aheinecke@252:  * Will be defined if current build is not an RELEASE_BUILD.
aheinecke@252:  */
aheinecke@252: #ifndef RELEASE_BUILD
aheinecke@252: #define DEBUGOUTPUT
aheinecke@252: #endif
aheinecke@252: 
aheinecke@252: /**
aheinecke@252:  * @def DEBUGPREFIX
aheinecke@252:  * @brief A string prepended to debug output.
aheinecke@252:  *
aheinecke@252:  * Should be defined to indicate which module created the output.
aheinecke@252:  */
aheinecke@252: #ifndef DEBUGPREFIX
aheinecke@252: #define DEBUGPREFIX ""
aheinecke@252: #endif
aheinecke@252: 
aheinecke@252: /**
aheinecke@252:  * @def DEBUGPRINTF(fmt, ...)
aheinecke@252:  * @brief Debug printf
aheinecke@252:  *
aheinecke@252:  * Prints to stderr if DEBUGOUTPUT is defined.
aheinecke@252:  */
aheinecke@252: #ifdef DEBUGOUTPUT
aheinecke@329: # ifndef WIN32
aheinecke@329: #  define DEBUGPRINTF(fmt, ...) fprintf(stderr, DEBUGPREFIX "DEBUG: " fmt, ##__VA_ARGS__);
aheinecke@329: # else /* WIN32 */
aheinecke@329: #  define DEBUGPRINTF(fmt, ...) \
aheinecke@329:   { \
aheinecke@329:     char buf[512]; \
aheinecke@329:     snprintf(buf, 511, "DEBUG: " fmt, ##__VA_ARGS__); \
aheinecke@329:     buf[511] = '\0'; \
aheinecke@329:     OutputDebugStringA(buf); \
aheinecke@329:   }
aheinecke@329: # endif /* WIN32 */
aheinecke@287: #else
aheinecke@287: # define DEBUGPRINTF(fmt, ...)
aheinecke@287: #endif
aheinecke@287: 
aheinecke@287: /**
aheinecke@287:  * @def ERRORPRINTF(fmt, ...)
aheinecke@287:  * @brief Debug printf
aheinecke@287:  *
aheinecke@287:  * Prints an error to stderr
aheinecke@287:  */
aheinecke@287: #define ERRORPRINTF(fmt, ...) fprintf(stderr, DEBUGPREFIX "ERROR: " fmt, ##__VA_ARGS__);
aheinecke@287: 
aheinecke@287: 
aheinecke@287: 
aheinecke@252: #ifdef __cplusplus
aheinecke@252: }
aheinecke@252: #endif
aheinecke@252: 
aheinecke@252: #endif /* COMMON_LOGGING_H */