diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn index 572d224126..6fbbb3fe15 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn @@ -341,6 +341,7 @@ rtc_source_set("checks") { deps = [ ":safe_compare", "system:inline", + "//third_party/abseil-cpp/absl/strings", ] if (is_android) { libs += [ "log" ] diff --git a/rtc_base/checks.cc b/rtc_base/checks.cc index b8b5c9da9b..d541307cb9 100644 --- a/rtc_base/checks.cc +++ b/rtc_base/checks.cc @@ -39,7 +39,7 @@ namespace { #if defined(__GNUC__) __attribute__((__format__(__printf__, 2, 3))) #endif - void AppendFormat(std::string* s, const char* fmt, ...) { +void AppendFormat(std::string* s, const char* fmt, ...) { va_list args, copy; va_start(args, fmt); va_copy(copy, args); @@ -54,7 +54,7 @@ __attribute__((__format__(__printf__, 2, 3))) } va_end(args); } -} +} // namespace namespace rtc { namespace webrtc_checks_impl { @@ -96,6 +96,11 @@ bool ParseArg(va_list* args, const CheckArgType** fmt, std::string* s) { case CheckArgType::kStdString: s->append(*va_arg(*args, const std::string*)); break; + case CheckArgType::kStringView: { + const absl::string_view sv = *va_arg(*args, const absl::string_view*); + s->append(sv.data(), sv.size()); + break; + } case CheckArgType::kVoidP: AppendFormat(s, "%p", va_arg(*args, const void*)); break; diff --git a/rtc_base/checks.h b/rtc_base/checks.h index 9de6d47573..2694258fe5 100644 --- a/rtc_base/checks.h +++ b/rtc_base/checks.h @@ -42,6 +42,7 @@ RTC_NORETURN void rtc_FatalMessage(const char* file, int line, const char* msg); #include +#include "absl/strings/string_view.h" #include "rtc_base/numerics/safe_compare.h" #include "rtc_base/system/inline.h" @@ -99,6 +100,7 @@ enum class CheckArgType : int8_t { kLongDouble, kCharP, kStdString, + kStringView, kVoidP, // kCheckOp doesn't represent an argument type. Instead, it is sent as the @@ -157,6 +159,10 @@ inline Val MakeVal( const std::string& x) { return {&x}; } +inline Val MakeVal( + const absl::string_view& x) { + return {&x}; +} inline Val MakeVal(const void* x) { return {x};