From 1afadf99688d6f24bd0d508cd7f1b827d54bc8ce Mon Sep 17 00:00:00 2001 From: mcmartin Date: Mon, 1 May 2006 02:14:36 +0000 Subject: [PATCH] Only process va_lists once (fixes crash on x86_64 gcc 4.1) git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2337 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/src/sc2code/libs/log/uqmlog.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/sc2/src/sc2code/libs/log/uqmlog.c b/sc2/src/sc2code/libs/log/uqmlog.c index dd0a82199..ebaddf897 100755 --- a/sc2/src/sc2code/libs/log/uqmlog.c +++ b/sc2/src/sc2code/libs/log/uqmlog.c @@ -17,6 +17,8 @@ #include "uqmlog.h" #include #include +#include +#include #include #include #include "libs/threadlib.h" @@ -192,10 +194,12 @@ log_setOutput (FILE *out) void log_addV (log_Level level, const char *fmt, va_list list) { + log_Entry full_msg; + vsnprintf (full_msg, sizeof (full_msg) - 1, fmt, list); + if ((int)level <= maxStreamLevel) { - vfprintf (streamOut, fmt, list); - fputc ('\n', streamOut); + fprintf (streamOut, "%s\n", full_msg); } if ((int)level <= maxLevel) @@ -205,7 +209,7 @@ log_addV (log_Level level, const char *fmt, va_list list) queueNonThreaded (); slot = acquireSlot (); - vsnprintf (queue[slot], sizeof (queue[0]) - 1, fmt, list); + snprintf (queue[slot], sizeof (queue[0]) - 1, "%s", full_msg); } } @@ -225,15 +229,17 @@ log_add (log_Level level, const char *fmt, ...) void log_add_nothreadV (log_Level level, const char *fmt, va_list list) { + log_Entry full_msg; + vsnprintf (full_msg, sizeof (full_msg) - 1, fmt, list); + if ((int)level <= maxStreamLevel) { - vfprintf (streamOut, fmt, list); - fputc ('\n', streamOut); + fprintf (streamOut, "%s\n", full_msg); } if ((int)level <= maxLevel) { - vsnprintf (msgNoThread, sizeof (msgNoThread) - 1, fmt, list); + snprintf (msgNoThread, sizeof (msgNoThread) - 1, "%s", full_msg); noThreadReady = true; } }