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 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@252: #define DEBUGPRINTF(fmt, ...) fprintf(stderr, DEBUGPREFIX "DEBUG: " fmt, ##__VA_ARGS__); aheinecke@252: #else aheinecke@252: #define DEBUGPRINTF(fmt, ...) aheinecke@252: #endif aheinecke@252: aheinecke@287: /** aheinecke@287: * @def DEBUGMSG(msg) aheinecke@287: * @brief Prints a static debug message aheinecke@287: * aheinecke@287: * If DEBUGOUTPUT is defined this. Prints a debug message aheinecke@287: * to stdout on Unix systems. On Windows OutputDebugString is used. aheinecke@287: */ aheinecke@287: #ifdef DEBUGOUTPUT aheinecke@287: # ifdef WIN32 aheinecke@287: # define DEBUGMSG(msg) OutputDebugString (msg); aheinecke@287: # else aheinecke@287: # define DEBUGMSG(msg) printf (DEBUGPREFIX "DEBUG: " msg "\n"); aheinecke@287: # endif aheinecke@287: #else aheinecke@287: # define DEBUGPRINTF(fmt, ...) aheinecke@287: #endif aheinecke@287: 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 */