os/log: Pull LogMessageTypeVerbString out of LogVMessageVerb

Also, optimize how the type and format strings are combined.

Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
Reviewed-by: Guillem Jover <guillem@hadrons.org>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Daniel Kurtz 2011-08-08 15:09:45 +08:00 committed by Peter Hutterer
parent 4020cab88f
commit b82f934db6

102
os/log.c
View File

@ -165,6 +165,9 @@ asm (".desc ___crashreporter_info__, 0x10");
#ifndef X_NOT_IMPLEMENTED_STRING
#define X_NOT_IMPLEMENTED_STRING "(NI)"
#endif
#ifndef X_NONE_STRING
#define X_NONE_STRING ""
#endif
/*
* LogInit is called to start logging to a file. It is also called (with
@ -325,58 +328,65 @@ LogWrite(int verb, const char *f, ...)
va_end(args);
}
/* Returns the Message Type string to prepend to a logging message, or NULL
* if the message will be dropped due to insufficient verbosity. */
static const char *
LogMessageTypeVerbString(MessageType type, int verb)
{
if (type == X_ERROR)
verb = 0;
if (logVerbosity < verb && logFileVerbosity < verb)
return NULL;
switch (type) {
case X_PROBED:
return X_PROBE_STRING;
case X_CONFIG:
return X_CONFIG_STRING;
case X_DEFAULT:
return X_DEFAULT_STRING;
case X_CMDLINE:
return X_CMDLINE_STRING;
case X_NOTICE:
return X_NOTICE_STRING;
case X_ERROR:
return X_ERROR_STRING;
case X_WARNING:
return X_WARNING_STRING;
case X_INFO:
return X_INFO_STRING;
case X_NOT_IMPLEMENTED:
return X_NOT_IMPLEMENTED_STRING;
case X_UNKNOWN:
return X_UNKNOWN_STRING;
case X_NONE:
return X_NONE_STRING;
default:
return X_UNKNOWN_STRING;
}
}
void
LogVMessageVerb(MessageType type, int verb, const char *format, va_list args)
{
const char *s = X_UNKNOWN_STRING;
char tmpBuf[1024];
const char *type_str;
char tmpFormat[1024];
char *new_format;
/* Ignore verbosity for X_ERROR */
if (logVerbosity >= verb || logFileVerbosity >= verb || type == X_ERROR) {
switch (type) {
case X_PROBED:
s = X_PROBE_STRING;
break;
case X_CONFIG:
s = X_CONFIG_STRING;
break;
case X_DEFAULT:
s = X_DEFAULT_STRING;
break;
case X_CMDLINE:
s = X_CMDLINE_STRING;
break;
case X_NOTICE:
s = X_NOTICE_STRING;
break;
case X_ERROR:
s = X_ERROR_STRING;
if (verb > 0)
verb = 0;
break;
case X_WARNING:
s = X_WARNING_STRING;
break;
case X_INFO:
s = X_INFO_STRING;
break;
case X_NOT_IMPLEMENTED:
s = X_NOT_IMPLEMENTED_STRING;
break;
case X_UNKNOWN:
s = X_UNKNOWN_STRING;
break;
case X_NONE:
s = NULL;
break;
}
type_str = LogMessageTypeVerbString(type, verb);
if (!type_str)
return;
/* if s is not NULL we need a space before format */
snprintf(tmpBuf, sizeof(tmpBuf), "%s%s%s", s ? s : "",
s ? " " : "",
format);
LogVWrite(verb, tmpBuf, args);
/* if type_str is not "", prepend it and ' ', to format */
if (type_str[0] == '\0')
new_format = format;
else {
new_format = tmpFormat;
snprintf(tmpFormat, sizeof(tmpFormat), "%s %s", type_str, format);
}
LogVWrite(verb, new_format, args);
}
/* Log message with verbosity level specified. */