OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | |
3 * | |
4 * Use of this source code is governed by a BSD-style license | |
5 * that can be found in the LICENSE file in the root of the source | |
6 * tree. An additional intellectual property rights grant can be found | |
7 * in the file PATENTS. All contributing project authors may | |
8 * be found in the AUTHORS file in the root of the source tree. | |
9 */ | |
10 | |
11 #include "webrtc/base/checks.h" | |
12 #include "webrtc/base/stringutils.h" | |
13 | |
14 namespace rtc { | |
15 | |
16 bool memory_check(const void* memory, int c, size_t count) { | |
17 const char* char_memory = static_cast<const char*>(memory); | |
18 char char_c = static_cast<char>(c); | |
19 for (size_t i = 0; i < count; ++i) { | |
20 if (char_memory[i] != char_c) { | |
21 return false; | |
22 } | |
23 } | |
24 return true; | |
25 } | |
26 | |
27 bool string_match(const char* target, const char* pattern) { | |
28 while (*pattern) { | |
29 if (*pattern == '*') { | |
30 if (!*++pattern) { | |
31 return true; | |
32 } | |
33 while (*target) { | |
34 if ((toupper(*pattern) == toupper(*target)) | |
35 && string_match(target + 1, pattern + 1)) { | |
36 return true; | |
37 } | |
38 ++target; | |
39 } | |
40 return false; | |
41 } else { | |
42 if (toupper(*pattern) != toupper(*target)) { | |
43 return false; | |
44 } | |
45 ++target; | |
46 ++pattern; | |
47 } | |
48 } | |
49 return !*target; | |
50 } | |
51 | |
52 #if defined(WEBRTC_WIN) | |
53 int ascii_string_compare(const wchar_t* s1, const char* s2, size_t n, | |
54 CharacterTransformation transformation) { | |
55 wchar_t c1, c2; | |
56 while (true) { | |
57 if (n-- == 0) return 0; | |
58 c1 = transformation(*s1); | |
59 // Double check that characters are not UTF-8 | |
60 RTC_DCHECK_LT(*s2, 128); | |
61 // Note: *s2 gets implicitly promoted to wchar_t | |
62 c2 = transformation(*s2); | |
63 if (c1 != c2) return (c1 < c2) ? -1 : 1; | |
64 if (!c1) return 0; | |
65 ++s1; | |
66 ++s2; | |
67 } | |
68 } | |
69 | |
70 size_t asccpyn(wchar_t* buffer, size_t buflen, | |
71 const char* source, size_t srclen) { | |
72 if (buflen <= 0) | |
73 return 0; | |
74 | |
75 if (srclen == SIZE_UNKNOWN) { | |
76 srclen = strlenn(source, buflen - 1); | |
77 } else if (srclen >= buflen) { | |
78 srclen = buflen - 1; | |
79 } | |
80 #if RTC_DCHECK_IS_ON | |
81 // Double check that characters are not UTF-8 | |
82 for (size_t pos = 0; pos < srclen; ++pos) | |
83 RTC_DCHECK_LT(source[pos], 128); | |
84 #endif | |
85 std::copy(source, source + srclen, buffer); | |
86 buffer[srclen] = 0; | |
87 return srclen; | |
88 } | |
89 | |
90 #endif // WEBRTC_WIN | |
91 | |
92 void replace_substrs(const char *search, | |
93 size_t search_len, | |
94 const char *replace, | |
95 size_t replace_len, | |
96 std::string *s) { | |
97 size_t pos = 0; | |
98 while ((pos = s->find(search, pos, search_len)) != std::string::npos) { | |
99 s->replace(pos, search_len, replace, replace_len); | |
100 pos += replace_len; | |
101 } | |
102 } | |
103 | |
104 bool starts_with(const char *s1, const char *s2) { | |
105 return strncmp(s1, s2, strlen(s2)) == 0; | |
106 } | |
107 | |
108 bool ends_with(const char *s1, const char *s2) { | |
109 size_t s1_length = strlen(s1); | |
110 size_t s2_length = strlen(s2); | |
111 | |
112 if (s2_length > s1_length) { | |
113 return false; | |
114 } | |
115 | |
116 const char* start = s1 + (s1_length - s2_length); | |
117 return strncmp(start, s2, s2_length) == 0; | |
118 } | |
119 | |
120 static const char kWhitespace[] = " \n\r\t"; | |
121 | |
122 std::string string_trim(const std::string& s) { | |
123 std::string::size_type first = s.find_first_not_of(kWhitespace); | |
124 std::string::size_type last = s.find_last_not_of(kWhitespace); | |
125 | |
126 if (first == std::string::npos || last == std::string::npos) { | |
127 return std::string(""); | |
128 } | |
129 | |
130 return s.substr(first, last - first + 1); | |
131 } | |
132 | |
133 } // namespace rtc | |
OLD | NEW |