aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Zulauf <jzulauf@lunarg.com>2018-01-17 11:00:22 -0700
committerjzulauf-lunarg <32470354+jzulauf-lunarg@users.noreply.github.com>2018-01-18 10:20:18 -0700
commitee8a77ff00bf54fe11891602dfb334c8c2d93347 (patch)
treecb441d4de42d620b0242afa6f302048e9a99cb9f
parent6cd982c9c7cbd43bcc8ad4d4edfa1c7d4e9b7bd8 (diff)
downloadusermoji-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.h16
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) {