1 // 2 // Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 #include "common/angleutils.h" 8 9 #include <vector> 10 11 std::string FormatString(const char *fmt, va_list vararg) 12 { 13 static std::vector<char> buffer(512); 14 15 // Attempt to just print to the current buffer 16 int len = vsnprintf(&buffer[0], buffer.size(), fmt, vararg); 17 if (len < 0 || static_cast<size_t>(len) >= buffer.size()) 18 { 19 // Buffer was not large enough, calculate the required size and resize the buffer 20 len = vsnprintf(NULL, 0, fmt, vararg); 21 buffer.resize(len + 1); 22 23 // Print again 24 vsnprintf(&buffer[0], buffer.size(), fmt, vararg); 25 } 26 27 return std::string(buffer.data(), len); 28 } 29 30 std::string FormatString(const char *fmt, ...) 31 { 32 va_list vararg; 33 va_start(vararg, fmt); 34 std::string result = FormatString(fmt, vararg); 35 va_end(vararg); 36 return result; 37 } 38