From ee8a77ff00bf54fe11891602dfb334c8c2d93347 Mon Sep 17 00:00:00 2001 From: John Zulauf Date: Wed, 17 Jan 2018 11:00:22 -0700 Subject: layers: Add printf style formatting of std::string Added utility for formatting output to std::string, using sprintf style arguments. Change-Id: Ib95fb55f38cc85a1b24cf6aac7761fc9b7c67376 --- layers/vk_layer_logging.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/layers/vk_layer_logging.h b/layers/vk_layer_logging.h index 7a565645..9a5f549a 100644 --- a/layers/vk_layer_logging.h +++ b/layers/vk_layer_logging.h @@ -323,6 +323,22 @@ static inline bool will_log_msg(debug_report_data *debug_data, VkFlags msgFlags) return true; } +#ifndef WIN32 +static int string_sprintf(std::string *output, const char *fmt, ...) __attribute__((format(printf, 2, 3))); +#endif +static int string_sprintf(std::string *output, const char *fmt, ...) { + std::string &formatted = *output; + va_list argptr; + va_start(argptr, fmt); + int reserve = vsnprintf(nullptr, 0, fmt, argptr); + va_end(argptr); + formatted.reserve(reserve + 1); + va_start(argptr, fmt); + int result = vsnprintf((char *)formatted.data(), formatted.capacity(), fmt, argptr); + va_end(argptr); + assert(result == reserve); + return result; +} #ifdef WIN32 static inline int vasprintf(char **strp, char const *fmt, va_list ap) { -- cgit v1.2.3