Fix va_list bug in logger
This commit is contained in:
@@ -60,36 +60,34 @@ static const char *LEVEL_COLORS[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void bzLoggerStdOutCallback(BzLoggerEvent *ev) {
|
static void bzLoggerStdOutCallback(BzLoggerEvent *ev) {
|
||||||
va_list *ap = ev->vaList;
|
|
||||||
fprintf(stderr, "%s %s%-5s\x1b[0m ",ev->time,
|
fprintf(stderr, "%s %s%-5s\x1b[0m ",ev->time,
|
||||||
LEVEL_COLORS[ev->level], LEVEL_STRINGS[ev->level]);
|
LEVEL_COLORS[ev->level], LEVEL_STRINGS[ev->level]);
|
||||||
if (ev->file) {
|
if (ev->file) {
|
||||||
fprintf(stderr, "\x1b[90m(%s:%d)\x1b[0m ",
|
fprintf(stderr, "\x1b[90m(%s:%d)\x1b[0m ",
|
||||||
ev->file, ev->line);
|
ev->file, ev->line);
|
||||||
}
|
}
|
||||||
vfprintf(stderr, ev->fmt, *ap);
|
vfprintf(stderr, ev->fmt, ev->va);
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bzLoggerFileCallback(BzLoggerEvent *ev) {
|
static void bzLoggerFileCallback(BzLoggerEvent *ev) {
|
||||||
FILE *fp = ev->userData;
|
FILE *fp = ev->userData;
|
||||||
va_list *ap = ev->vaList;
|
|
||||||
fprintf(fp, "%s %-5s ", ev->time, LEVEL_STRINGS[ev->level]);
|
fprintf(fp, "%s %-5s ", ev->time, LEVEL_STRINGS[ev->level]);
|
||||||
if (ev->file) {
|
if (ev->file) {
|
||||||
fprintf(fp, "(%s:%d): ", ev->file, ev->line);
|
fprintf(fp, "(%s:%d): ", ev->file, ev->line);
|
||||||
}
|
}
|
||||||
vfprintf(fp, ev->fmt, *ap);
|
vfprintf(fp, ev->fmt, ev->va);
|
||||||
fflush(fp);
|
fflush(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bzLoggerLog(BzLoggerLevel level, const char *file, int line, const char *fmt, ...) {
|
void bzLoggerLog(BzLoggerLevel level, const char *file, int line, const char *fmt, ...) {
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
bzLoggerLogV(level, file, line, fmt, &args);
|
bzLoggerLogV(level, file, line, fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
void bzLoggerLogV(BzLoggerLevel level, const char *file, int line, const char *fmt, void *va_list) {
|
void bzLoggerLogV(BzLoggerLevel level, const char *file, int line, const char *fmt, va_list va) {
|
||||||
BzLoggerEvent event = {NULL, NULL, level, file, line, fmt};
|
BzLoggerEvent event = {NULL, NULL, level, file, line, fmt};
|
||||||
const int loggerLevel = bzLoggerGetLevel();
|
const int loggerLevel = bzLoggerGetLevel();
|
||||||
|
|
||||||
@@ -103,8 +101,9 @@ void bzLoggerLogV(BzLoggerLevel level, const char *file, int line, const char *f
|
|||||||
|
|
||||||
if (!BZ_GET_LOGGER_MODULE()->silent && level <= loggerLevel) {
|
if (!BZ_GET_LOGGER_MODULE()->silent && level <= loggerLevel) {
|
||||||
event.userData = stderr;
|
event.userData = stderr;
|
||||||
event.vaList = va_list;
|
va_copy(event.va, va);
|
||||||
bzLoggerStdOutCallback(&event);
|
bzLoggerStdOutCallback(&event);
|
||||||
|
va_end(event.va);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < BZ_LOGGER_MAX_CALLBACKS; ++i) {
|
for (int i = 0; i < BZ_LOGGER_MAX_CALLBACKS; ++i) {
|
||||||
@@ -113,19 +112,20 @@ void bzLoggerLogV(BzLoggerLevel level, const char *file, int line, const char *f
|
|||||||
if (level <= cb.level) {
|
if (level <= cb.level) {
|
||||||
event.userData = cb.userData;
|
event.userData = cb.userData;
|
||||||
|
|
||||||
event.vaList = va_list;
|
va_copy(event.va, va);
|
||||||
cb.callback(&event);
|
cb.callback(&event);
|
||||||
|
va_end(event.va);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void bzLoggerOnlyLog(BzLoggerLevel level, const char *fmt, ...) {
|
void bzLoggerOnlyLog(BzLoggerLevel level, const char *fmt, ...) {
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
bzLoggerOnlyLogV(level, fmt, &args);
|
bzLoggerOnlyLogV(level, fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
void bzLoggerOnlyLogV(BzLoggerLevel level, const char *fmt, void *va_list) {
|
void bzLoggerOnlyLogV(BzLoggerLevel level, const char *fmt, va_list va) {
|
||||||
bzLoggerLogV(level, NULL, -1, fmt, va_list);
|
bzLoggerLogV(level, NULL, -1, fmt, va);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
#include "../defines.h"
|
#include "../defines.h"
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
typedef enum BzLoggerLevel {
|
typedef enum BzLoggerLevel {
|
||||||
BZ_LOG_TRACE,
|
BZ_LOG_TRACE,
|
||||||
BZ_LOG_DEBUG,
|
BZ_LOG_DEBUG,
|
||||||
@@ -21,7 +23,7 @@ typedef struct BzLoggerEvent {
|
|||||||
int line;
|
int line;
|
||||||
|
|
||||||
const char *fmt;
|
const char *fmt;
|
||||||
void *vaList;
|
va_list va;
|
||||||
} BzLoggerEvent;
|
} BzLoggerEvent;
|
||||||
|
|
||||||
typedef struct BzLoggerCallback {
|
typedef struct BzLoggerCallback {
|
||||||
@@ -39,9 +41,9 @@ void bzLoggerSetLevel(BzLoggerLevel level);
|
|||||||
BzLoggerLevel bzLoggerGetLevel();
|
BzLoggerLevel bzLoggerGetLevel();
|
||||||
|
|
||||||
void bzLoggerLog(BzLoggerLevel level, const char *file, int line, const char *fmt, ...);
|
void bzLoggerLog(BzLoggerLevel level, const char *file, int line, const char *fmt, ...);
|
||||||
void bzLoggerLogV(BzLoggerLevel level, const char *file, int line, const char *fmt, void *va_list);
|
void bzLoggerLogV(BzLoggerLevel level, const char *file, int line, const char *fmt, va_list va);
|
||||||
void bzLoggerOnlyLog(BzLoggerLevel level, const char *fmt, ...);
|
void bzLoggerOnlyLog(BzLoggerLevel level, const char *fmt, ...);
|
||||||
void bzLoggerOnlyLogV(BzLoggerLevel level, const char *fmt, void *va_list);
|
void bzLoggerOnlyLogV(BzLoggerLevel level, const char *fmt, va_list va);
|
||||||
|
|
||||||
|
|
||||||
bool bzLoggerAddFP(void *fp, BzLoggerLevel level);
|
bool bzLoggerAddFP(void *fp, BzLoggerLevel level);
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ static void bzRaylibLogger(int msgType, const char *text, va_list args) {
|
|||||||
default:;
|
default:;
|
||||||
}
|
}
|
||||||
|
|
||||||
bzLoggerOnlyLog(level, text, args);
|
bzLoggerOnlyLogV(level, text, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, const char **argv) {
|
int main(int argc, const char **argv) {
|
||||||
|
|||||||
Reference in New Issue
Block a user