From fca416b126cb842034ac3468362c044895975b5a Mon Sep 17 00:00:00 2001 From: Philipp Schafft Date: Sat, 28 Apr 2018 12:02:31 +0000 Subject: [PATCH] Feature: Allow %z[ui] in logging format strings --- log/log.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/log/log.c b/log/log.c index 29f2474..7c008ee 100644 --- a/log/log.c +++ b/log/log.c @@ -473,6 +473,9 @@ static void __vsnprintf(char *str, size_t size, const char *format, va_list ap) case 'l': block_size++; break; + case 'z': + block_size = 'z'; + break; case '.': // just ignore '.'. If somebody cares: fix it. break; @@ -523,6 +526,13 @@ static void __vsnprintf(char *str, size_t size, const char *format, va_list ap) else snprintf(buf, sizeof(buf), "%lli", (long long int)va_arg(ap, long long int)); break; + case 'z': + /* We do not use 'z' type of snprintf() here as it is not safe to use on a few outdated platforms. */ + if (*format == 'u') + snprintf(buf, sizeof(buf), "%llu", (unsigned long long int)va_arg(ap, size_t)); + else + snprintf(buf, sizeof(buf), "%lli", (long long int)va_arg(ap, ssize_t)); + break; default: snprintf(buf, sizeof(buf), "<<>>"); break;