You've already forked openscreen

1. Remove the socket_ pointer as it is set but never read. 2. Use delete instead of a macro to remove copy operators. 3. Remove ToString() as it's only needed by the unit test. Instead use the existing HexEncode utility function. 4. Add an overload for HexEncode() to take a ByteView, instead of passing a pointer-and-length. Bug: b/158660166,b/288937356 Change-Id: I29432bd251eed2b18007feb3d4aaaec07718d54e Reviewed-on: https://chromium-review.googlesource.com/c/openscreen/+/4648048 Reviewed-by: Muyao Xu <muyaoxu@google.com>
49 lines
1.3 KiB
C++
49 lines
1.3 KiB
C++
// Copyright 2020 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "util/stringprintf.h"
|
|
|
|
#include <cstdarg>
|
|
#include <cstdio>
|
|
#include <iomanip>
|
|
#include <sstream>
|
|
|
|
#include "util/osp_logging.h"
|
|
|
|
namespace openscreen {
|
|
|
|
std::string StringPrintf(const char* format, ...) {
|
|
va_list vlist;
|
|
va_start(vlist, format);
|
|
const int length = std::vsnprintf(nullptr, 0, format, vlist);
|
|
OSP_CHECK_GE(length, 0) << "Invalid format string: " << format;
|
|
va_end(vlist);
|
|
|
|
std::string result(length, '\0');
|
|
// Note: There's no need to add one for the extra terminating NUL char since
|
|
// the standard, since C++11, requires that "data() + size() points to [the
|
|
// NUL terminator]". Thus, std::vsnprintf() will write the NUL to a valid
|
|
// memory location.
|
|
va_start(vlist, format);
|
|
std::vsnprintf(&result[0], length + 1, format, vlist);
|
|
va_end(vlist);
|
|
|
|
return result;
|
|
}
|
|
|
|
std::string HexEncode(const uint8_t* bytes, size_t len) {
|
|
return HexEncode(ByteView(bytes, len));
|
|
}
|
|
|
|
std::string HexEncode(ByteView bytes) {
|
|
std::ostringstream hex_dump;
|
|
hex_dump << std::setfill('0') << std::hex;
|
|
for (uint8_t byte : bytes) {
|
|
hex_dump << std::setw(2) << static_cast<int>(byte);
|
|
}
|
|
return hex_dump.str();
|
|
}
|
|
|
|
} // namespace openscreen
|