Print log messages in one OutputDebugString() call (Windows)

This commit is contained in:
Mike Gelfand
2015-12-13 10:34:53 +00:00
parent ceb19b9711
commit 9853eb6715

View File

@@ -182,6 +182,7 @@ tr_logAddDeep (const char * file,
va_list args; va_list args;
char timestr[64]; char timestr[64];
char * message; char * message;
size_t message_len;
struct evbuffer * buf = evbuffer_new (); struct evbuffer * buf = evbuffer_new ();
char * base = tr_sys_path_basename (file, NULL); char * base = tr_sys_path_basename (file, NULL);
@@ -192,13 +193,12 @@ tr_logAddDeep (const char * file,
va_start (args, fmt); va_start (args, fmt);
evbuffer_add_vprintf (buf, fmt, args); evbuffer_add_vprintf (buf, fmt, args);
va_end (args); va_end (args);
evbuffer_add_printf (buf, " (%s:%d)", base, line); evbuffer_add_printf (buf, " (%s:%d)" TR_NATIVE_EOL_STR, base, line);
/* FIXME (libevent2) ifdef this out for nonwindows platforms */ /* FIXME (libevent2) ifdef this out for nonwindows platforms */
message = evbuffer_free_to_str (buf, NULL); message = evbuffer_free_to_str (buf, &message_len);
OutputDebugStringA (message); OutputDebugStringA (message);
OutputDebugStringA (TR_NATIVE_EOL_STR);
if (fp != TR_BAD_SYS_FILE) if (fp != TR_BAD_SYS_FILE)
tr_sys_file_write_line (fp, message, NULL); tr_sys_file_write (fp, message, message_len, NULL, NULL);
tr_free (message); tr_free (message);
tr_free (base); tr_free (base);
@@ -219,17 +219,33 @@ tr_logAddMessage (const char * file,
{ {
const int err = errno; /* message logging shouldn't affect errno */ const int err = errno; /* message logging shouldn't affect errno */
char buf[1024]; char buf[1024];
int buf_len;
va_list ap; va_list ap;
tr_lockLock (getMessageLock ()); tr_lockLock (getMessageLock ());
/* build the text message */ /* build the text message */
*buf = '\0'; *buf = '\0';
va_start (ap, fmt); va_start (ap, fmt);
evutil_vsnprintf (buf, sizeof (buf), fmt, ap); buf_len = evutil_vsnprintf (buf, sizeof (buf), fmt, ap);
va_end (ap); va_end (ap);
OutputDebugStringA (buf); if (buf_len < 0)
OutputDebugStringA (TR_NATIVE_EOL_STR); return;
#ifdef _WIN32
if ((size_t) buf_len < sizeof (buf) - 3)
{
buf[buf_len + 0] = '\r';
buf[buf_len + 1] = '\n';
buf[buf_len + 2] = '\0';
OutputDebugStringA (buf);
buf[buf_len + 0] = '\0';
}
else
{
OutputDebugStringA (buf);
}
#endif
if (*buf) if (*buf)
{ {