/*
 *  Copyright 2020 The WebRTC Project Authors. All rights reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#include <cstdarg>

#include "rtc_base/strings/string_format.h"

#include "rtc_base/checks.h"

namespace rtc {

namespace {

// This is an arbitrary limitation that can be changed if necessary, or removed
// if someone has the time and inclination to replicate the fancy logic from
// Chromium's base::StringPrinf().
constexpr int kMaxSize = 512;

}  // namespace

std::string StringFormat(const char* fmt, ...) {
  char buffer[kMaxSize];
  va_list args;
  va_start(args, fmt);
  int result = vsnprintf(buffer, kMaxSize, fmt, args);
  va_end(args);
  RTC_DCHECK_GE(result, 0) << "ERROR: vsnprintf() failed with error " << result;
  RTC_DCHECK_LT(result, kMaxSize)
      << "WARNING: string was truncated from " << result << " to "
      << (kMaxSize - 1) << " characters";
  return std::string(buffer);
}

}  // namespace rtc
