| OLD | NEW |
| (Empty) |
| 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 com
es | |
| 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 retu
rns | |
| 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 retu
rns | |
| 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 an
y | |
| 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 on
e. | |
| 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 o
ne, | |
| 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 on
e, | |
| 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 */ | |
| OLD | NEW |