From d99885ff7b0fc712bb083e3d378157e13f299e58 Mon Sep 17 00:00:00 2001 From: Chen Xinyu Date: Sat, 20 Jun 2026 15:16:54 +0800 Subject: [PATCH] Make nob_default_handler work in multi-threaded or multi-process environments. --- nob.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/nob.h b/nob.h index 2735a93..9dc8659 100644 --- a/nob.h +++ b/nob.h @@ -1899,23 +1899,26 @@ NOBDEF void nob_default_log_handler(Nob_Log_Level level, const char *fmt, va_lis { if (level < nob_minimal_log_level) return; + char *prefix = NULL; switch (level) { case NOB_INFO: - fprintf(stderr, "[INFO] "); + prefix = "[INFO] "; break; case NOB_WARNING: - fprintf(stderr, "[WARNING] "); + prefix = "[WARNING] "; break; case NOB_ERROR: - fprintf(stderr, "[ERROR] "); + prefix = "[ERROR] "; break; case NOB_NO_LOGS: return; default: NOB_UNREACHABLE("Nob_Log_Level"); } - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); + size_t mark = nob_temp_save(); + char *msg = nob_temp_vsprintf(fmt, args); + fprintf(stderr, "%s%s\n", prefix, msg); + nob_temp_rewind(mark); } NOBDEF void nob_null_log_handler(Nob_Log_Level level, const char *fmt, va_list args)