Delete more rtc_base/stringutils.*
Delete nonnull, strchr, strchrn, strcatn, strlenn and Traits. Bug: webrtc:6424 Change-Id: I3b5a48cb71c6de33635f25ef64d941c422ad0881 Reviewed-on: https://webrtc-review.googlesource.com/c/106341 Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Commit-Queue: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#25232}
This commit is contained in:
@ -14,6 +14,24 @@
|
||||
|
||||
namespace rtc {
|
||||
|
||||
size_t strcpyn(char* buffer,
|
||||
size_t buflen,
|
||||
const char* source,
|
||||
size_t srclen /* = SIZE_UNKNOWN */) {
|
||||
if (buflen <= 0)
|
||||
return 0;
|
||||
|
||||
if (srclen == SIZE_UNKNOWN) {
|
||||
srclen = strlen(source);
|
||||
}
|
||||
if (srclen >= buflen) {
|
||||
srclen = buflen - 1;
|
||||
}
|
||||
memcpy(buffer, source, srclen);
|
||||
buffer[srclen] = 0;
|
||||
return srclen;
|
||||
}
|
||||
|
||||
void replace_substrs(const char* search,
|
||||
size_t search_len,
|
||||
const char* replace,
|
||||
|
@ -60,110 +60,11 @@ namespace rtc {
|
||||
|
||||
const size_t SIZE_UNKNOWN = static_cast<size_t>(-1);
|
||||
|
||||
template <class CTYPE>
|
||||
struct Traits {
|
||||
// STL string type
|
||||
// typedef XXX string;
|
||||
// Null-terminated string
|
||||
// inline static const CTYPE* empty_str();
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// String utilities which work with char or wchar_t
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template <class CTYPE>
|
||||
inline const CTYPE* nonnull(const CTYPE* str, const CTYPE* def_str = nullptr) {
|
||||
return str ? str : (def_str ? def_str : Traits<CTYPE>::empty_str());
|
||||
}
|
||||
|
||||
template <class CTYPE>
|
||||
const CTYPE* strchr(const CTYPE* str, const CTYPE* chs) {
|
||||
for (size_t i = 0; str[i]; ++i) {
|
||||
for (size_t j = 0; chs[j]; ++j) {
|
||||
if (str[i] == chs[j]) {
|
||||
return str + i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
template <class CTYPE>
|
||||
const CTYPE* strchrn(const CTYPE* str, size_t slen, CTYPE ch) {
|
||||
for (size_t i = 0; i < slen && str[i]; ++i) {
|
||||
if (str[i] == ch) {
|
||||
return str + i;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
template <class CTYPE>
|
||||
size_t strlenn(const CTYPE* buffer, size_t buflen) {
|
||||
size_t bufpos = 0;
|
||||
while (buffer[bufpos] && (bufpos < buflen)) {
|
||||
++bufpos;
|
||||
}
|
||||
return bufpos;
|
||||
}
|
||||
|
||||
// Safe versions of strncpy, strncat, snprintf and vsnprintf that always
|
||||
// null-terminate.
|
||||
|
||||
template <class CTYPE>
|
||||
size_t strcpyn(CTYPE* buffer,
|
||||
// Safe version of strncpy that always nul-terminate.
|
||||
size_t strcpyn(char* buffer,
|
||||
size_t buflen,
|
||||
const CTYPE* source,
|
||||
size_t srclen = SIZE_UNKNOWN) {
|
||||
if (buflen <= 0)
|
||||
return 0;
|
||||
|
||||
if (srclen == SIZE_UNKNOWN) {
|
||||
srclen = strlenn(source, buflen - 1);
|
||||
} else if (srclen >= buflen) {
|
||||
srclen = buflen - 1;
|
||||
}
|
||||
memcpy(buffer, source, srclen * sizeof(CTYPE));
|
||||
buffer[srclen] = 0;
|
||||
return srclen;
|
||||
}
|
||||
|
||||
template <class CTYPE>
|
||||
size_t strcatn(CTYPE* buffer,
|
||||
size_t buflen,
|
||||
const CTYPE* source,
|
||||
size_t srclen = SIZE_UNKNOWN) {
|
||||
if (buflen <= 0)
|
||||
return 0;
|
||||
|
||||
size_t bufpos = strlenn(buffer, buflen - 1);
|
||||
return bufpos + strcpyn(buffer + bufpos, buflen - bufpos, source, srclen);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Traits<char> specializations
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template <>
|
||||
struct Traits<char> {
|
||||
typedef std::string string;
|
||||
inline static const char* empty_str() { return ""; }
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Traits<wchar_t> specializations (Windows only, currently)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if defined(WEBRTC_WIN)
|
||||
|
||||
template <>
|
||||
struct Traits<wchar_t> {
|
||||
typedef std::wstring string;
|
||||
inline static const wchar_t* empty_str() { return L""; }
|
||||
};
|
||||
|
||||
#endif // WEBRTC_WIN
|
||||
const char* source,
|
||||
size_t srclen = SIZE_UNKNOWN);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// UTF helpers (Windows only)
|
||||
|
@ -224,8 +224,8 @@ int inet_pton_v6(const char* src, void* dst) {
|
||||
*(readcursor + 2) != 0) {
|
||||
// Check for periods, which we'll take as a sign of v4 addresses.
|
||||
const char* addrstart = readcursor + 2;
|
||||
if (rtc::strchr(addrstart, ".")) {
|
||||
const char* colon = rtc::strchr(addrstart, "::");
|
||||
if (strchr(addrstart, '.')) {
|
||||
const char* colon = strchr(addrstart, ':');
|
||||
if (colon) {
|
||||
uint16_t a_short;
|
||||
int bytesread = 0;
|
||||
|
Reference in New Issue
Block a user