layers: Add printf style formatting of std::string
authorJohn Zulauf <jzulauf@lunarg.com>
Wed, 17 Jan 2018 18:00:22 +0000 (11:00 -0700)
committerjzulauf-lunarg <32470354+jzulauf-lunarg@users.noreply.github.com>
Thu, 18 Jan 2018 17:20:18 +0000 (10:20 -0700)
Added utility for formatting output to std::string, using sprintf style
arguments.

Change-Id: Ib95fb55f38cc85a1b24cf6aac7761fc9b7c67376

layers/vk_layer_logging.h

index 7a56564..9a5f549 100644 (file)
@@ -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) {