On Wed, Jul 27, 2011 at 12:03:33PM +0800, Daniel Kurtz wrote:
> Also, optimize how the type and format strings are combined.
> 
> Signed-off-by: Daniel Kurtz <[email protected]>
> ---
>  os/log.c |  111 ++++++++++++++++++++++++++++++++++---------------------------
>  1 files changed, 62 insertions(+), 49 deletions(-)
> 
> diff --git a/os/log.c b/os/log.c
> index 4a310e6..93d4763 100644
> --- a/os/log.c
> +++ b/os/log.c
> @@ -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
> @@ -323,58 +326,68 @@ LogWrite(int verb, const char *f, ...)
>      va_end(args);
>  }
>  
> -void
> -LogVMessageVerb(MessageType type, int verb, const char *format, va_list args)
> +/* Returns the Message Type string to prepend to a logging message, or NULL
> + * if the message will not be dropped due to insufficient verbosity. */

s/not// I guess?

Reviewed-by: Peter Hutterer <[email protected]> for the series
otherwise

Cheers,
  Peter

> +const char*
> +LogMessageTypeVerbString(MessageType type, int verb)
>  {
> -    const char *s  = X_UNKNOWN_STRING;
> -    char tmpBuf[1024];
> -
> -    /* 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;
> -     }
> +    if (type == X_ERROR)
> +     verb = 0;
> +
> +    if (logVerbosity < verb && logFileVerbosity < verb)
> +     return NULL;
>  
> -        /* 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);
> +    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;
>      }
> +    return X_UNKNOWN_STRING;
> +}
> +
> +void
> +LogVMessageVerb(MessageType type, int verb, const char *format, va_list args)
> +{
> +    const char *type_str;
> +    char tmpFormat[1024];
> +    char *tmpFormat_end = &tmpFormat[sizeof(tmpFormat)];
> +    char *p = tmpFormat;
> +    int left;
> +
> +    type_str = LogMessageTypeVerbString(type, verb);
> +    if (!type_str)
> +     return;
> +
> +    /* if type_str is not "", prepend it, and ' ', to format */
> +    left = tmpFormat_end - p;
> +    if (strlen(type_str))
> +     p += snprintf(p, left, "%s ", type_str);
> +
> +    /* if still room in tmpBuf copy as much of format as will fit */
> +    left = tmpFormat_end - p;
> +    if (left > 1)
> +     snprintf(p, left, "%s", format);
> +
> +    LogVWrite(verb, tmpFormat, args);
>  }
>  
>  /* Log message with verbosity level specified. */
> -- 
> 1.7.3.1

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to