X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=log.c;h=a327f6aa4c0e68f9e822e349984f31c3d509d9e2;hp=95351d57d96ca4fd0ea97e43d38352f9b7b3dde1;hb=2ea93f982e728343f823c2cf63b4674a104575bf;hpb=2293bf6886095fc180a77a958511bd6385840874 diff --git a/log.c b/log.c index 95351d57..a327f6aa 100644 --- a/log.c +++ b/log.c @@ -36,6 +36,8 @@ static size_t valist_to_buf(char **buffer, const char *fmt, va_list src_args) do { *buffer = calloc(1, cur); + if (!*buffer) + return 0; va_copy(args, src_args); len = vsnprintf(*buffer, cur, fmt, args); @@ -51,6 +53,33 @@ static size_t valist_to_buf(char **buffer, const char *fmt, va_list src_args) return len; } +/* allocate buffer, fill with prefix string followed by vararg string */ +static size_t prevalist_to_buf(char **buffer, const char *pre, int prelen, + const char *fmt, va_list src_args) +{ + size_t len, cur = LOG_START_SZ; + va_list args; + + do { + *buffer = calloc(1, cur); + if (!*buffer) + return 0; + + va_copy(args, src_args); + memcpy(*buffer, pre, prelen); + len = prelen + vsnprintf(*buffer + prelen, cur - prelen, fmt, args); + va_end(args); + + if (len < cur) + break; + + cur = len + 1; + free(*buffer); + } while (1); + + return len; +} + size_t log_valist(const char *fmt, va_list args) { char *buffer; @@ -63,6 +92,28 @@ size_t log_valist(const char *fmt, va_list args) return len; } +/* add prefix for the specified type in front of the valist */ +void log_prevalist(int type, const char *fmt, va_list args) +{ + char pre[32]; + char *buffer; + size_t len; + int prelen; + pid_t pid; + + pid = gettid(); + if (fio_debug_jobp && *fio_debug_jobp != -1U + && pid != *fio_debug_jobp) + return; + + prelen = snprintf(pre, sizeof pre, "%-8s %-5u ", debug_levels[type].name, (int) pid); + if (prelen > 0) { + len = prevalist_to_buf(&buffer, pre, prelen, fmt, args); + len = log_info_buf(buffer, len); + free(buffer); + } +} + size_t log_info(const char *format, ...) { va_list args;