#ifdef HAVE_CONFIG_H #include "config.h" #define __CDIO_CONFIG_H__ 1 #endif #ifdef HAVE_STDIO_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include char *last_debugmsg = NULL; char *last_infomsg = NULL; char *last_warnmsg = NULL; char *last_errmsg = NULL; char *last_assertmsg = NULL; char *last_othermsg = NULL; /* Here is an example of a custom log handler. */ static void test_log_handler (cdio_log_level_t level, const char *message) { switch(level) { case CDIO_LOG_DEBUG: last_debugmsg = strdup(message); return; case CDIO_LOG_INFO: last_infomsg = strdup(message); return; case CDIO_LOG_WARN: last_warnmsg = strdup(message); return; case CDIO_LOG_ERROR: last_errmsg = strdup(message); return; case CDIO_LOG_ASSERT: last_assertmsg = strdup(message); return; default: fprintf(stderr, "level %d message: %s should not happen\n", level, message); exit(20); } } int main(int argc, const char *argv[]) { const char *test_msg = "test message"; #ifndef HAVE_WIN32_CDROM cdio_log_handler_t old_log_handler = (cdio_log_handler_t) NULL; old_log_handler = cdio_log_set_handler(test_log_handler); if (old_log_handler != cdio_default_log_handler) { fprintf(stderr, "Should have gotten old log handler back %p vs %p\n", (void *) old_log_handler, (void *) cdio_default_log_handler); exit(1); } #else cdio_log_set_handler(test_log_handler); #endif /* Check that calling each of the logger routine appears in the right variable, based on the log level */ test_msg = "debug"; cdio_debug("%s", test_msg); if (last_debugmsg != NULL) { fprintf(stderr, "debug message should have been ignored due to default log level\n"); exit(2); } cdio_loglevel_default = CDIO_LOG_DEBUG; cdio_debug("%s", test_msg); if (last_debugmsg == NULL || strncmp(test_msg, last_debugmsg, strlen(test_msg)) != 0) { fprintf(stderr, "debug message %s did not get handled\n", last_debugmsg); free(last_debugmsg); exit(2); } free(last_debugmsg); test_msg = "info"; cdio_info("%s", test_msg); if (strncmp(test_msg, last_infomsg, strlen(test_msg)) != 0) { fprintf(stderr, "info message %s did not get handled\n", last_infomsg); free(last_infomsg); exit(3); } free(last_infomsg); test_msg = "warn"; cdio_warn("%s", test_msg); if (strncmp(test_msg, last_warnmsg, strlen(test_msg)) != 0) { fprintf(stderr, "warn message %s did not get handled\n", last_warnmsg); free(last_warnmsg); exit(4); } free(last_warnmsg); test_msg = "error"; cdio_error("%s", test_msg); if (strncmp(test_msg, last_errmsg, strlen(test_msg)) != 0) { fprintf(stderr, "error message %s did not get handled\n", last_errmsg); free(last_errmsg); exit(5); } free(last_errmsg); /* Try using generic cdio_log routine */ test_msg = "debug via cdio_log"; cdio_log(CDIO_LOG_DEBUG, "%s", test_msg); if (strncmp(test_msg, last_debugmsg, strlen(test_msg)) != 0) { fprintf(stderr, "debug message %s did not get handled, phase 2\n", last_debugmsg); free(last_debugmsg); exit(6); } free(last_debugmsg); test_msg = "info via cdio_log"; cdio_log(CDIO_LOG_INFO, "%s", test_msg); if (strncmp(test_msg, last_infomsg, strlen(test_msg)) != 0) { fprintf(stderr, "info message %s did not get handled\n", last_infomsg); free(last_infomsg); exit(7); } free(last_infomsg); test_msg = "warn via cdio_log"; cdio_log(CDIO_LOG_WARN, "%s", test_msg); if (strncmp(test_msg, last_warnmsg, strlen(test_msg)) != 0) { fprintf(stderr, "warn message %s did not get handled\n", last_warnmsg); free(last_warnmsg); exit(8); } free(last_warnmsg); test_msg = "error via cdio_log"; cdio_log(CDIO_LOG_ERROR, "%s", test_msg); if (strncmp(test_msg, last_errmsg, strlen(test_msg)) != 0) { fprintf(stderr, "error message %s did not get handled\n", last_errmsg); free(last_errmsg); exit(9); } free(last_errmsg); exit(0); }