|
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
|
2 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 #ifndef _plstr_h |
|
7 #define _plstr_h |
|
8 |
|
9 /* |
|
10 * plstr.h |
|
11 * |
|
12 * This header file exports the API to the NSPR portable library or string- |
|
13 * handling functions. |
|
14 * |
|
15 * This API was not designed as an "optimal" or "ideal" string library; it |
|
16 * was based on the good ol' unix string.3 functions, and was written to |
|
17 * |
|
18 * 1) replace the libc functions, for cross-platform consistency, |
|
19 * 2) complete the API on platforms lacking common functions (e.g., |
|
20 * strcase*), and |
|
21 * 3) to implement some obvious "closure" functions that I've seen |
|
22 * people hacking around in our code. |
|
23 * |
|
24 * Point number three largely means that most functions have an "strn" |
|
25 * limited-length version, and all comparison routines have a non-case- |
|
26 * sensitive version available. |
|
27 */ |
|
28 |
|
29 #include "prtypes.h" |
|
30 |
|
31 PR_BEGIN_EXTERN_C |
|
32 /* |
|
33 * PL_strlen |
|
34 * |
|
35 * Returns the length of the provided string, not including the trailing '\0'. |
|
36 */ |
|
37 |
|
38 PR_EXTERN(PRUint32) |
|
39 PL_strlen(const char *str); |
|
40 |
|
41 /* |
|
42 * PL_strnlen |
|
43 * |
|
44 * Returns the length of the provided string, not including the trailing '\0', |
|
45 * up to the indicated maximum. The string will not be examined beyond the |
|
46 * maximum; if no terminating '\0' is found, the maximum will be returned. |
|
47 */ |
|
48 |
|
49 PR_EXTERN(PRUint32) |
|
50 PL_strnlen(const char *str, PRUint32 max); |
|
51 |
|
52 /* |
|
53 * PL_strcpy |
|
54 * |
|
55 * Copies the source string, up to and including the trailing '\0', into the |
|
56 * destination buffer. It does not (can not) verify that the destination |
|
57 * buffer is large enough. It returns the "dest" argument. |
|
58 */ |
|
59 |
|
60 PR_EXTERN(char *) |
|
61 PL_strcpy(char *dest, const char *src); |
|
62 |
|
63 /* |
|
64 * PL_strncpy |
|
65 * |
|
66 * Copies the source string into the destination buffer, up to and including |
|
67 * the trailing '\0' or up to and including the max'th character, whichever |
|
68 * comes first. It does not (can not) verify that the destination buffer is |
|
69 * large enough. If the source string is longer than the maximum length, |
|
70 * the result will *not* be null-terminated (JLRU). |
|
71 */ |
|
72 |
|
73 PR_EXTERN(char *) |
|
74 PL_strncpy(char *dest, const char *src, PRUint32 max); |
|
75 |
|
76 /* |
|
77 * PL_strncpyz |
|
78 * |
|
79 * Copies the source string into the destination buffer, up to and including |
|
80 * the trailing '\0' or up but not including the max'th character, whichever |
|
81 * comes first. It does not (can not) verify that the destination buffer is |
|
82 * large enough. The destination string is always terminated with a '\0', |
|
83 * unlike the traditional libc implementation. It returns the "dest" argument. |
|
84 * |
|
85 * NOTE: If you call this with a source "abcdefg" and a max of 5, the |
|
86 * destination will end up with "abcd\0" (i.e., its strlen length will be 4)! |
|
87 * |
|
88 * This means you can do this: |
|
89 * |
|
90 * char buffer[ SOME_SIZE ]; |
|
91 * PL_strncpyz(buffer, src, sizeof(buffer)); |
|
92 * |
|
93 * and the result will be properly terminated. |
|
94 */ |
|
95 |
|
96 PR_EXTERN(char *) |
|
97 PL_strncpyz(char *dest, const char *src, PRUint32 max); |
|
98 |
|
99 /* |
|
100 * PL_strdup |
|
101 * |
|
102 * Returns a pointer to a malloc'd extent of memory containing a duplicate |
|
103 * of the argument string. The size of the allocated extent is one greater |
|
104 * than the length of the argument string, because of the terminator. A |
|
105 * null argument, like a zero-length argument, will result in a pointer to |
|
106 * a one-byte extent containing the null value. This routine returns null |
|
107 * upon malloc failure. |
|
108 */ |
|
109 |
|
110 PR_EXTERN(char *) |
|
111 PL_strdup(const char *s); |
|
112 |
|
113 /* |
|
114 * PL_strfree |
|
115 * |
|
116 * Free memory allocated by PL_strdup |
|
117 */ |
|
118 |
|
119 PR_EXTERN(void) |
|
120 PL_strfree(char *s); |
|
121 |
|
122 /* |
|
123 * PL_strndup |
|
124 * |
|
125 * Returns a pointer to a malloc'd extent of memory containing a duplicate |
|
126 * of the argument string, up to the maximum specified. If the argument |
|
127 * string has a length greater than the value of the specified maximum, the |
|
128 * return value will be a pointer to an extent of memory of length one |
|
129 * greater than the maximum specified. A null string, a zero-length string, |
|
130 * or a zero maximum will all result in a pointer to a one-byte extent |
|
131 * containing the null value. This routine returns null upon malloc failure. |
|
132 */ |
|
133 |
|
134 PR_EXTERN(char *) |
|
135 PL_strndup(const char *s, PRUint32 max); |
|
136 |
|
137 /* |
|
138 * PL_strcat |
|
139 * |
|
140 * Appends a copy of the string pointed to by the second argument to the |
|
141 * end of the string pointed to by the first. The destination buffer is |
|
142 * not (can not be) checked for sufficient size. A null destination |
|
143 * argument returns null; otherwise, the first argument is returned. |
|
144 */ |
|
145 |
|
146 PR_EXTERN(char *) |
|
147 PL_strcat(char *dst, const char *src); |
|
148 |
|
149 /* |
|
150 * PL_strncat |
|
151 * |
|
152 * Appends a copy of the string pointed to by the second argument, up to |
|
153 * the maximum size specified, to the end of the string pointed to by the |
|
154 * first. The destination buffer is not (can not be) checked for sufficient |
|
155 * size. A null destination argument returns null; otherwise, the first |
|
156 * argument is returned. If the maximum size limits the copy, then the |
|
157 * result will *not* be null-terminated (JLRU). A null destination |
|
158 * returns null; otherwise, the destination argument is returned. |
|
159 */ |
|
160 |
|
161 PR_EXTERN(char *) |
|
162 PL_strncat(char *dst, const char *src, PRUint32 max); |
|
163 |
|
164 /* |
|
165 * PL_strcatn |
|
166 * |
|
167 * Appends a copy of the string pointed to by the third argument, to the |
|
168 * end of the string pointed to by the first. The second argument specifies |
|
169 * the maximum size of the destination buffer, including the null termination. |
|
170 * If the existing string in dst is longer than the max, no action is taken. |
|
171 * The resulting string will be null-terminated. A null destination returns |
|
172 * null; otherwise, the destination argument is returned. |
|
173 */ |
|
174 |
|
175 PR_EXTERN(char *) |
|
176 PL_strcatn(char *dst, PRUint32 max, const char *src); |
|
177 |
|
178 /* |
|
179 * PL_strcmp |
|
180 * |
|
181 * Returns an integer, the sign of which -- positive, zero, or negative -- |
|
182 * reflects the lexical sorting order of the two strings indicated. The |
|
183 * result is positive if the first string comes after the second. The |
|
184 * NSPR implementation is not i18n. |
|
185 */ |
|
186 |
|
187 PR_EXTERN(PRIntn) |
|
188 PL_strcmp(const char *a, const char *b); |
|
189 |
|
190 /* |
|
191 * PL_strncmp |
|
192 * |
|
193 * Returns an integer, the sign of which -- positive, zero, or negative -- |
|
194 * reflects the lexical sorting order of the two strings indicated, up to |
|
195 * the maximum specified. The result is positive if the first string comes |
|
196 * after the second. The NSPR implementation is not i18n. If the maximum |
|
197 * is zero, only the existance or non-existance (pointer is null) of the |
|
198 * strings is compared. |
|
199 */ |
|
200 |
|
201 PR_EXTERN(PRIntn) |
|
202 PL_strncmp(const char *a, const char *b, PRUint32 max); |
|
203 |
|
204 /* |
|
205 * PL_strcasecmp |
|
206 * |
|
207 * Returns an integer, the sign of which -- positive, zero or negative -- |
|
208 * reflects the case-insensitive lexical sorting order of the two strings |
|
209 * indicated. The result is positive if the first string comes after the |
|
210 * second. The NSPR implementation is not i18n. |
|
211 */ |
|
212 |
|
213 PR_EXTERN(PRIntn) |
|
214 PL_strcasecmp(const char *a, const char *b); |
|
215 |
|
216 /* |
|
217 * PL_strncasecmp |
|
218 * |
|
219 * Returns an integer, the sign of which -- positive, zero or negative -- |
|
220 * reflects the case-insensitive lexical sorting order of the first n characters |
|
221 * of the two strings indicated. The result is positive if the first string comes |
|
222 * after the second. The NSPR implementation is not i18n. |
|
223 */ |
|
224 |
|
225 PR_EXTERN(PRIntn) |
|
226 PL_strncasecmp(const char *a, const char *b, PRUint32 max); |
|
227 |
|
228 /* |
|
229 * PL_strchr |
|
230 * |
|
231 * Returns a pointer to the first instance of the specified character in the |
|
232 * provided string. It returns null if the character is not found, or if the |
|
233 * provided string is null. The character may be the null character. |
|
234 */ |
|
235 |
|
236 PR_EXTERN(char *) |
|
237 PL_strchr(const char *s, char c); |
|
238 |
|
239 /* |
|
240 * PL_strrchr |
|
241 * |
|
242 * Returns a pointer to the last instance of the specified character in the |
|
243 * provided string. It returns null if the character is not found, or if the |
|
244 * provided string is null. The character may be the null character. |
|
245 */ |
|
246 |
|
247 PR_EXTERN(char *) |
|
248 PL_strrchr(const char *s, char c); |
|
249 |
|
250 /* |
|
251 * PL_strnchr |
|
252 * |
|
253 * Returns a pointer to the first instance of the specified character within the |
|
254 * first n characters of the provided string. It returns null if the character |
|
255 * is not found, or if the provided string is null. The character may be the |
|
256 * null character. |
|
257 */ |
|
258 |
|
259 PR_EXTERN(char *) |
|
260 PL_strnchr(const char *s, char c, PRUint32 n); |
|
261 |
|
262 /* |
|
263 * PL_strnrchr |
|
264 * |
|
265 * Returns a pointer to the last instance of the specified character within the |
|
266 * first n characters of the provided string. It returns null if the character is |
|
267 * not found, or if the provided string is null. The character may be the null |
|
268 * character. |
|
269 */ |
|
270 |
|
271 PR_EXTERN(char *) |
|
272 PL_strnrchr(const char *s, char c, PRUint32 n); |
|
273 |
|
274 /* |
|
275 * NOTE: Looking for strcasechr, strcaserchr, strncasechr, or strncaserchr? |
|
276 * Use strpbrk, strprbrk, strnpbrk or strnprbrk. |
|
277 */ |
|
278 |
|
279 /* |
|
280 * PL_strpbrk |
|
281 * |
|
282 * Returns a pointer to the first instance in the first string of any character |
|
283 * (not including the terminating null character) of the second string. It returns |
|
284 * null if either string is null. |
|
285 */ |
|
286 |
|
287 PR_EXTERN(char *) |
|
288 PL_strpbrk(const char *s, const char *list); |
|
289 |
|
290 /* |
|
291 * PL_strprbrk |
|
292 * |
|
293 * Returns a pointer to the last instance in the first string of any character |
|
294 * (not including the terminating null character) of the second string. It returns |
|
295 * null if either string is null. |
|
296 */ |
|
297 |
|
298 PR_EXTERN(char *) |
|
299 PL_strprbrk(const char *s, const char *list); |
|
300 |
|
301 /* |
|
302 * PL_strnpbrk |
|
303 * |
|
304 * Returns a pointer to the first instance (within the first n characters) of any |
|
305 * character (not including the terminating null character) of the second string. |
|
306 * It returns null if either string is null. |
|
307 */ |
|
308 |
|
309 PR_EXTERN(char *) |
|
310 PL_strnpbrk(const char *s, const char *list, PRUint32 n); |
|
311 |
|
312 /* |
|
313 * PL_strnprbrk |
|
314 * |
|
315 * Returns a pointer to the last instance (within the first n characters) of any |
|
316 * character (not including the terminating null character) of the second string. |
|
317 * It returns null if either string is null. |
|
318 */ |
|
319 |
|
320 PR_EXTERN(char *) |
|
321 PL_strnprbrk(const char *s, const char *list, PRUint32 n); |
|
322 |
|
323 /* |
|
324 * PL_strstr |
|
325 * |
|
326 * Returns a pointer to the first instance of the little string within the |
|
327 * big one. It returns null if either string is null. |
|
328 */ |
|
329 |
|
330 PR_EXTERN(char *) |
|
331 PL_strstr(const char *big, const char *little); |
|
332 |
|
333 /* |
|
334 * PL_strrstr |
|
335 * |
|
336 * Returns a pointer to the last instance of the little string within the big one. |
|
337 * It returns null if either string is null. |
|
338 */ |
|
339 |
|
340 PR_EXTERN(char *) |
|
341 PL_strrstr(const char *big, const char *little); |
|
342 |
|
343 /* |
|
344 * PL_strnstr |
|
345 * |
|
346 * Returns a pointer to the first instance of the little string within the first |
|
347 * n characters of the big one. It returns null if either string is null. It |
|
348 * returns null if the length of the little string is greater than n. |
|
349 */ |
|
350 |
|
351 PR_EXTERN(char *) |
|
352 PL_strnstr(const char *big, const char *little, PRUint32 n); |
|
353 |
|
354 /* |
|
355 * PL_strnrstr |
|
356 * |
|
357 * Returns a pointer to the last instance of the little string within the first |
|
358 * n characters of the big one. It returns null if either string is null. It |
|
359 * returns null if the length of the little string is greater than n. |
|
360 */ |
|
361 |
|
362 PR_EXTERN(char *) |
|
363 PL_strnrstr(const char *big, const char *little, PRUint32 max); |
|
364 |
|
365 /* |
|
366 * PL_strcasestr |
|
367 * |
|
368 * Returns a pointer to the first instance of the little string within the big one, |
|
369 * ignoring case. It returns null if either string is null. |
|
370 */ |
|
371 |
|
372 PR_EXTERN(char *) |
|
373 PL_strcasestr(const char *big, const char *little); |
|
374 |
|
375 /* |
|
376 * PL_strcaserstr |
|
377 * |
|
378 * Returns a pointer to the last instance of the little string within the big one, |
|
379 * ignoring case. It returns null if either string is null. |
|
380 */ |
|
381 |
|
382 PR_EXTERN(char *) |
|
383 PL_strcaserstr(const char *big, const char *little); |
|
384 |
|
385 /* |
|
386 * PL_strncasestr |
|
387 * |
|
388 * Returns a pointer to the first instance of the little string within the first |
|
389 * n characters of the big one, ignoring case. It returns null if either string is |
|
390 * null. It returns null if the length of the little string is greater than n. |
|
391 */ |
|
392 |
|
393 PR_EXTERN(char *) |
|
394 PL_strncasestr(const char *big, const char *little, PRUint32 max); |
|
395 |
|
396 /* |
|
397 * PL_strncaserstr |
|
398 * |
|
399 * Returns a pointer to the last instance of the little string within the first |
|
400 * n characters of the big one, ignoring case. It returns null if either string is |
|
401 * null. It returns null if the length of the little string is greater than n. |
|
402 */ |
|
403 |
|
404 PR_EXTERN(char *) |
|
405 PL_strncaserstr(const char *big, const char *little, PRUint32 max); |
|
406 |
|
407 /* |
|
408 * PL_strtok_r |
|
409 * |
|
410 * Splits the string s1 into tokens, separated by one or more characters |
|
411 * from the separator string s2. The argument lasts points to a |
|
412 * user-supplied char * pointer in which PL_strtok_r stores information |
|
413 * for it to continue scanning the same string. |
|
414 * |
|
415 * In the first call to PL_strtok_r, s1 points to a string and the value |
|
416 * of *lasts is ignored. PL_strtok_r returns a pointer to the first |
|
417 * token, writes '\0' into the character following the first token, and |
|
418 * updates *lasts. |
|
419 * |
|
420 * In subsequent calls, s1 is null and lasts must stay unchanged from the |
|
421 * previous call. The separator string s2 may be different from call to |
|
422 * call. PL_strtok_r returns a pointer to the next token in s1. When no |
|
423 * token remains in s1, PL_strtok_r returns null. |
|
424 */ |
|
425 |
|
426 PR_EXTERN(char *) |
|
427 PL_strtok_r(char *s1, const char *s2, char **lasts); |
|
428 |
|
429 /* |
|
430 * Things not (yet?) included: strspn/strcspn, strsep. |
|
431 * memchr, memcmp, memcpy, memccpy, index, rindex, bcmp, bcopy, bzero. |
|
432 * Any and all i18n/l10n stuff. |
|
433 */ |
|
434 |
|
435 PR_END_EXTERN_C |
|
436 |
|
437 #endif /* _plstr_h */ |