123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /******************************************************************************
- Copyright (c) 2013 by Hugh Bailey <[email protected]>
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source
- distribution.
- ******************************************************************************/
- #include <stdio.h>
- #include <stdarg.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include "c99defs.h"
- #include "base.h"
- static enum log_type log_output_level = LOG_WARNING;
- static int crashing = 0;
- static void def_log_handler(enum log_type type, const char *format,
- va_list args)
- {
- char out[4096];
- vsnprintf(out, sizeof(out), format, args);
- if (type >= log_output_level) {
- switch (type) {
- case LOG_DEBUG:
- printf("debug: %s\n", out);
- break;
- case LOG_INFO:
- printf("info: %s\n", out);
- break;
- case LOG_WARNING:
- fprintf(stderr, "warning: %s\n", out);
- break;
- case LOG_ERROR:
- fprintf(stderr, "error: %s\n", out);
- }
- }
- }
- static void def_crash_handler(const char *format, va_list args)
- {
- vfprintf(stderr, format, args);
- exit(0);
- }
- static void (*log_handler)(enum log_type, const char *, va_list) =
- def_log_handler;
- static void (*crash_handler)(const char *, va_list) = def_crash_handler;
- void base_set_log_handler(
- void (*handler)(enum log_type, const char *, va_list))
- {
- log_handler = handler;
- }
- void base_set_crash_handler(void (*handler)(const char *, va_list))
- {
- crash_handler = handler;
- }
- void bcrash(const char *format, ...)
- {
- va_list args;
- if (crashing) {
- fputs("Crashed in the crash handler", stderr);
- exit(2);
- }
- crashing = 1;
- va_start(args, format);
- crash_handler(format, args);
- va_end(args);
- }
- void blog(enum log_type type, const char *format, ...)
- {
- va_list args;
- va_start(args, format);
- log_handler(type, format, args);
- va_end(args);
- }
|