31#define MAX_CALLBACKS 32
34# define DmtxPrint fprintf_s
36# define DmtxPrint fprintf
55static const char *
levelStrings[] = {
"TRACE",
"DEBUG",
"INFO",
"WARN",
"ERROR",
"FATAL"};
58static const char *level_colors[] = {
"\x1b[94m",
"\x1b[36m",
"\x1b[32m",
"\x1b[33m",
"\x1b[31m",
"\x1b[35m"};
64 buf[strftime(buf,
sizeof(buf),
"%H:%M:%S", ev->
time)] =
'\0';
66 DmtxPrint(ev->
udata,
"%s %s%-5s\x1b[0m \x1b[90m%s:%d:\x1b[0m ", buf, level_colors[ev->
level],
79 buf[strftime(buf,
sizeof(buf),
"%Y-%m-%d %H:%M:%S", ev->
time)] =
'\0';
124 if (!
l.callbacks[i].fn) {
139 if (ev->
time == NULL) {
140 ev->
time = malloc(
sizeof(
struct tm));
143 time_t t = time(NULL);
144#if defined(_WIN32) || defined(_WIN64)
145 localtime_s(ev->
time, &t);
146#elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
147 localtime_r(&t, ev->
time);
149# error "Unsupported platform"
154extern void dmtxLog(
int level,
const char *file,
int line,
const char *fmt, ...)
156 DmtxLogEvent ev = {.fmt = fmt, .file = file, .line = line, .level =
level, .time = malloc(
sizeof(
struct tm))};
160 if (!
l.quiet &&
level >=
l.level) {
162 va_start(ev.
ap, fmt);
171 va_start(ev.
ap, fmt);
libdmtx - Data Matrix Encoding/Decoding Library Copyright 2008, 2009 Mike Laughton.
static void initEvent(DmtxLogEvent *ev, void *udata)
int dmtxLogAddFp(FILE *fp, int level)
void dmtxLogSetQuiet(DmtxBoolean enable)
static void fileCallback(DmtxLogEvent *ev)
Callback callbacks[MAX_CALLBACKS]
void dmtxLogSetLevel(int level)
static const char * levelStrings[]
const char * dmtxLogLevelString(int level)
static void stdoutCallback(DmtxLogEvent *ev)
int dmtxLogAddCallback(DmtxLogFn fn, void *udata, int level)
void dmtxLogSetLock(DmtxLogLockFn fn, void *udata)
void dmtxLog(int level, const char *file, int line, const char *fmt,...)
libdmtx - Data Matrix Encoding/Decoding Library Copyright 2008, 2009 Mike Laughton.
void(* DmtxLogFn)(DmtxLogEvent *ev)
void(* DmtxLogLockFn)(DmtxBoolean lock, void *udata)