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 */ |
438 | |