0
Files
mark a. foltz 5b86cfa7b2 [Open Screen] Clean up UdpSocket.
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>
2023-06-27 18:01:49 +00:00

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