1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
17 #include "mozilla/Sprintf.h"
24 #ifdef FUZZING_SNAPSHOT
25 # include <mozilla/fuzzing/NyxWrapper.h>
28 using namespace mozilla
;
30 const char* NS_strspnp(const char* aDelims
, const char* aStr
) {
33 for (d
= aDelims
; *d
!= '\0'; ++d
) {
44 char* NS_strtok(const char* aDelims
, char** aStr
) {
49 char* ret
= (char*)NS_strspnp(aDelims
, *aStr
);
58 for (const char* d
= aDelims
; *d
!= '\0'; ++d
) {
72 uint32_t NS_strlen(const char16_t
* aString
) {
76 for (end
= aString
; *end
; ++end
) {
83 int NS_strcmp(const char16_t
* aStrA
, const char16_t
* aStrB
) {
85 int r
= *aStrA
- *aStrB
;
94 return *aStrA
!= '\0';
97 int NS_strncmp(const char16_t
* aStrA
, const char16_t
* aStrB
, size_t aLen
) {
98 while (aLen
&& *aStrB
) {
99 int r
= *aStrA
- *aStrB
;
109 return aLen
? *aStrA
!= '\0' : 0;
112 char16_t
* NS_xstrdup(const char16_t
* aString
) {
113 uint32_t len
= NS_strlen(aString
);
114 return NS_xstrndup(aString
, len
);
117 template <typename CharT
>
118 CharT
* NS_xstrndup(const CharT
* aString
, uint32_t aLen
) {
119 auto newBuf
= (CharT
*)moz_xmalloc((aLen
+ 1) * sizeof(CharT
));
120 memcpy(newBuf
, aString
, aLen
* sizeof(CharT
));
125 template char16_t
* NS_xstrndup
<char16_t
>(const char16_t
* aString
,
127 template char* NS_xstrndup
<char>(const char* aString
, uint32_t aLen
);
129 char* NS_xstrdup(const char* aString
) {
130 uint32_t len
= strlen(aString
);
131 char* str
= (char*)moz_xmalloc(len
+ 1);
132 memcpy(str
, aString
, len
);
139 // This table maps uppercase characters to lower case characters;
140 // characters that are neither upper nor lower case are unaffected.
141 const unsigned char nsLowerUpperUtils::kUpper2Lower
[256] = {
142 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
143 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
144 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
145 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
148 // upper band mapped to lower [A-Z] => [a-z]
149 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
150 112,113,114,115,116,117,118,119,120,121,122,
153 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
154 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
155 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
156 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
157 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
158 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
159 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
160 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
161 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
162 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
165 const unsigned char nsLowerUpperUtils::kLower2Upper
[256] = {
166 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
167 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
168 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
169 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
170 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
171 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
174 // lower band mapped to upper [a-z] => [A-Z]
175 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
176 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
179 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
180 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
181 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
182 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
183 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
184 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
185 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
186 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
191 bool NS_IsUpper(char aChar
) {
192 return aChar
!= (char)nsLowerUpperUtils::kUpper2Lower
[(unsigned char)aChar
];
195 bool NS_IsLower(char aChar
) {
196 return aChar
!= (char)nsLowerUpperUtils::kLower2Upper
[(unsigned char)aChar
];
199 #ifndef XPCOM_GLUE_AVOID_NSPR
201 void NS_MakeRandomString(char* aBuf
, int32_t aBufLen
) {
202 # define TABLE_SIZE 36
203 static const char table
[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
204 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
205 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0',
206 '1', '2', '3', '4', '5', '6', '7', '8', '9'};
208 // turn PR_Now() into milliseconds since epoch
209 // and salt rand with that.
210 static unsigned int seed
= 0;
212 double fpTime
= double(PR_Now());
214 (unsigned int)(fpTime
* 1e-6 + 0.5); // use 1e-6, granularity of
215 // PR_Now() on the mac is seconds
220 for (i
= 0; i
< aBufLen
; ++i
) {
221 *aBuf
++ = table
[rand() % TABLE_SIZE
];