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