diff options
| author | John Zulauf <jzulauf@lunarg.com> | 2018-01-17 11:00:22 -0700 |
|---|---|---|
| committer | jzulauf-lunarg <32470354+jzulauf-lunarg@users.noreply.github.com> | 2018-01-18 10:20:18 -0700 |
| commit | ee8a77ff00bf54fe11891602dfb334c8c2d93347 (patch) | |
| tree | cb441d4de42d620b0242afa6f302048e9a99cb9f | |
| parent | 6cd982c9c7cbd43bcc8ad4d4edfa1c7d4e9b7bd8 (diff) | |
| download | usermoji-ee8a77ff00bf54fe11891602dfb334c8c2d93347.tar.xz | |
layers: Add printf style formatting of std::string
Added utility for formatting output to std::string, using sprintf style
arguments.
Change-Id: Ib95fb55f38cc85a1b24cf6aac7761fc9b7c67376
| -rw-r--r-- | layers/vk_layer_logging.h | 16 |
1 files changed, 16 insertions, 0 deletions
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) { |
