Merge commit '28b9ac4e48f3405a82e8e87ead336188215cf1e6'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 3 Apr 2014 18:53:30 +0000 (20:53 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 3 Apr 2014 18:53:30 +0000 (20:53 +0200)
* commit '28b9ac4e48f3405a82e8e87ead336188215cf1e6':
  log: Remove undefined behaviour

Conflicts:
libavutil/log.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavutil/log.c

diff --cc libavutil/log.c
@@@ -222,55 -129,17 +222,55 @@@ static void format_line(void *avcl, in
              AVClass** parent = *(AVClass ***) (((uint8_t *) avcl) +
                                     avc->parent_log_context_offset);
              if (parent && *parent) {
 -                snprintf(line, sizeof(line), "[%s @ %p] ",
 +                av_bprintf(part+0, "[%s @ %p] ",
                           (*parent)->item_name(parent), parent);
 +                if(type) type[0] = get_category(parent);
              }
          }
 -        snprintf(line + strlen(line), sizeof(line) - strlen(line), "[%s @ %p] ",
 +        av_bprintf(part+1, "[%s @ %p] ",
                   avc->item_name(avcl), avcl);
 +        if(type) type[1] = get_category(avcl);
      }
  
 -    vsnprintf(line + strlen(line), sizeof(line) - strlen(line), fmt, vl);
 +    av_vbprintf(part+2, fmt, vl);
 +
 +    if(*part[0].str || *part[1].str || *part[2].str) {
 +        char lastc = part[2].len && part[2].len <= part[2].size ? part[2].str[part[2].len - 1] : 0;
 +        *print_prefix = lastc == '\n' || lastc == '\r';
 +    }
 +}
  
 -    print_prefix = strlen(line) && line[strlen(line) - 1] == '\n';
 +void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl,
 +                        char *line, int line_size, int *print_prefix)
 +{
 +    AVBPrint part[3];
 +    format_line(ptr, level, fmt, vl, part, print_prefix, NULL);
 +    snprintf(line, line_size, "%s%s%s", part[0].str, part[1].str, part[2].str);
 +    av_bprint_finalize(part+2, NULL);
 +}
 +
 +void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
 +{
 +    static int print_prefix = 1;
 +    static int count;
 +    static char prev[LINE_SZ];
 +    AVBPrint part[3];
 +    char line[LINE_SZ];
 +    static int is_atty;
 +    int type[2];
-     int tint = av_clip(level >> 8, 0, 256);
++    unsigned tint = level & 0xff00;
 +
 +    level &= 0xff;
 +
 +
 +    if (level > av_log_level)
 +        return;
 +#if HAVE_PTHREADS
 +    pthread_mutex_lock(&mutex);
 +#endif
 +
 +    format_line(ptr, level, fmt, vl, part, &print_prefix, type);
 +    snprintf(line, sizeof(line), "%s%s%s", part[0].str, part[1].str, part[2].str);
  
  #if HAVE_ISATTY
      if (!is_atty)
          fprintf(stderr, "    Last message repeated %d times\n", count);
          count = 0;
      }
 -    colored_fputs(av_clip(level >> 3, 0, 6), tint >> 8, line);
 -    av_strlcpy(prev, line, sizeof line);
 +    strcpy(prev, line);
 +    sanitize(part[0].str);
 +    colored_fputs(type[0], 0, part[0].str);
 +    sanitize(part[1].str);
 +    colored_fputs(type[1], 0, part[1].str);
 +    sanitize(part[2].str);
-     colored_fputs(av_clip(level >> 3, 0, 6), tint, part[2].str);
++    colored_fputs(av_clip(level >> 3, 0, 6), tint >> 8, part[2].str);
 +end:
 +    av_bprint_finalize(part+2, NULL);
 +#if HAVE_PTHREADS
 +    pthread_mutex_unlock(&mutex);
 +#endif
  }
  
  static void (*av_log_callback)(void*, int, const char*, va_list) =