OpenCoverage

unistr.h

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/lib/unistr.h
Source codeSwitch to Preprocessed file
LineSourceCount
1/* DO NOT EDIT! GENERATED AUTOMATICALLY! */-
2/* Elementary Unicode string functions.-
3 Copyright (C) 2001-2002, 2005-2018 Free Software Foundation, Inc.-
4-
5 This program is free software: you can redistribute it and/or modify it-
6 under the terms of the GNU General Public License as published-
7 by the Free Software Foundation; either version 3 of the License, or-
8 (at your option) any later version.-
9-
10 This program is distributed in the hope that it will be useful,-
11 but WITHOUT ANY WARRANTY; without even the implied warranty of-
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU-
13 General Public License for more details.-
14-
15 You should have received a copy of the GNU General Public License-
16 along with this program. If not, see <https://www.gnu.org/licenses/>. */-
17-
18#ifndef _UNISTR_H-
19#define _UNISTR_H-
20-
21#include "unitypes.h"-
22-
23/* Get common macros for C. */-
24#include "unused-parameter.h"-
25-
26/* Get bool. */-
27#include <stdbool.h>-
28-
29/* Get size_t. */-
30#include <stddef.h>-
31-
32#ifdef __cplusplus-
33extern "C" {-
34#endif-
35-
36-
37/* Conventions:-
38-
39 All functions prefixed with u8_ operate on UTF-8 encoded strings.-
40 Their unit is an uint8_t (1 byte).-
41-
42 All functions prefixed with u16_ operate on UTF-16 encoded strings.-
43 Their unit is an uint16_t (a 2-byte word).-
44-
45 All functions prefixed with u32_ operate on UCS-4 encoded strings.-
46 Their unit is an uint32_t (a 4-byte word).-
47-
48 All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly-
49 n units.-
50-
51 All arguments starting with "str" and the arguments of functions starting-
52 with u8_str/u16_str/u32_str denote a NUL terminated string, i.e. a string-
53 which terminates at the first NUL unit. This termination unit is-
54 considered part of the string for all memory allocation purposes, but-
55 is not considered part of the string for all other logical purposes.-
56-
57 Functions returning a string result take a (resultbuf, lengthp) argument-
58 pair. If resultbuf is not NULL and the result fits into *lengthp units,-
59 it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly-
60 allocated string is returned. In both cases, *lengthp is set to the-
61 length (number of units) of the returned string. In case of error,-
62 NULL is returned and errno is set. */-
63-
64-
65/* Elementary string checks. */-
66-
67/* Check whether an UTF-8 string is well-formed.-
68 Return NULL if valid, or a pointer to the first invalid unit otherwise. */-
69extern const uint8_t *-
70 u8_check (const uint8_t *s, size_t n)-
71 _UC_ATTRIBUTE_PURE;-
72-
73/* Check whether an UTF-16 string is well-formed.-
74 Return NULL if valid, or a pointer to the first invalid unit otherwise. */-
75extern const uint16_t *-
76 u16_check (const uint16_t *s, size_t n)-
77 _UC_ATTRIBUTE_PURE;-
78-
79/* Check whether an UCS-4 string is well-formed.-
80 Return NULL if valid, or a pointer to the first invalid unit otherwise. */-
81extern const uint32_t *-
82 u32_check (const uint32_t *s, size_t n)-
83 _UC_ATTRIBUTE_PURE;-
84-
85-
86/* Elementary string conversions. */-
87-
88/* Convert an UTF-8 string to an UTF-16 string. */-
89extern uint16_t *-
90 u8_to_u16 (const uint8_t *s, size_t n, uint16_t *resultbuf,-
91 size_t *lengthp);-
92-
93/* Convert an UTF-8 string to an UCS-4 string. */-
94extern uint32_t *-
95 u8_to_u32 (const uint8_t *s, size_t n, uint32_t *resultbuf,-
96 size_t *lengthp);-
97-
98/* Convert an UTF-16 string to an UTF-8 string. */-
99extern uint8_t *-
100 u16_to_u8 (const uint16_t *s, size_t n, uint8_t *resultbuf,-
101 size_t *lengthp);-
102-
103/* Convert an UTF-16 string to an UCS-4 string. */-
104extern uint32_t *-
105 u16_to_u32 (const uint16_t *s, size_t n, uint32_t *resultbuf,-
106 size_t *lengthp);-
107-
108/* Convert an UCS-4 string to an UTF-8 string. */-
109extern uint8_t *-
110 u32_to_u8 (const uint32_t *s, size_t n, uint8_t *resultbuf,-
111 size_t *lengthp);-
112-
113/* Convert an UCS-4 string to an UTF-16 string. */-
114extern uint16_t *-
115 u32_to_u16 (const uint32_t *s, size_t n, uint16_t *resultbuf,-
116 size_t *lengthp);-
117-
118-
119/* Elementary string functions. */-
120-
121/* Return the length (number of units) of the first character in S, which is-
122 no longer than N. Return 0 if it is the NUL character. Return -1 upon-
123 failure. */-
124/* Similar to mblen(), except that s must not be NULL. */-
125extern int-
126 u8_mblen (const uint8_t *s, size_t n)-
127 _UC_ATTRIBUTE_PURE;-
128extern int-
129 u16_mblen (const uint16_t *s, size_t n)-
130 _UC_ATTRIBUTE_PURE;-
131extern int-
132 u32_mblen (const uint32_t *s, size_t n)-
133 _UC_ATTRIBUTE_PURE;-
134-
135/* Return the length (number of units) of the first character in S, putting-
136 its 'ucs4_t' representation in *PUC. Upon failure, *PUC is set to 0xfffd,-
137 and an appropriate number of units is returned.-
138 The number of available units, N, must be > 0. */-
139/* Similar to mbtowc(), except that puc and s must not be NULL, n must be > 0,-
140 and the NUL character is not treated specially. */-
141/* The variants with _unsafe suffix are for backward compatibility with-
142 libunistring versions < 0.9.7. */-
143-
144#if GNULIB_UNISTR_U8_MBTOUC_UNSAFE || HAVE_LIBUNISTRING-
145# if !HAVE_INLINE-
146extern int-
147 u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n);-
148# else-
149extern int-
150 u8_mbtouc_unsafe_aux (ucs4_t *puc, const uint8_t *s, size_t n);-
151static inline int-
152u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n)-
153{-
154 uint8_t c = *s;-
155-
156 if (c < 0x80)-
157 {-
158 *puc = c;-
159 return 1;-
160 }-
161 else-
162 return u8_mbtouc_unsafe_aux (puc, s, n);-
163}-
164# endif-
165#endif-
166-
167#if GNULIB_UNISTR_U16_MBTOUC_UNSAFE || HAVE_LIBUNISTRING-
168# if !HAVE_INLINE-
169extern int-
170 u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n);-
171# else-
172extern int-
173 u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n);-
174static inline int-
175u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n)-
176{-
177 uint16_t c = *s;-
178-
179 if (c < 0xd800 || c >= 0xe000)-
180 {-
181 *puc = c;-
182 return 1;-
183 }-
184 else-
185 return u16_mbtouc_unsafe_aux (puc, s, n);-
186}-
187# endif-
188#endif-
189-
190#if GNULIB_UNISTR_U32_MBTOUC_UNSAFE || HAVE_LIBUNISTRING-
191# if !HAVE_INLINE-
192extern int-
193 u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n);-
194# else-
195static inline int-
196u32_mbtouc_unsafe (ucs4_t *puc,-
197 const uint32_t *s, size_t n _GL_UNUSED_PARAMETER)-
198{-
199 uint32_t c = *s;-
200-
201 if (c < 0xd800 || (c >= 0xe000 && c < 0x110000))-
202 *puc = c;-
203 else-
204 /* invalid multibyte character */-
205 *puc = 0xfffd;-
206 return 1;-
207}-
208# endif-
209#endif-
210-
211#if GNULIB_UNISTR_U8_MBTOUC || HAVE_LIBUNISTRING-
212# if !HAVE_INLINE-
213extern int-
214 u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n);-
215# else-
216extern int-
217 u8_mbtouc_aux (ucs4_t *puc, const uint8_t *s, size_t n);-
218static inline int-
219u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n)-
220{-
221 uint8_t c = *s;-
222-
223 if (c < 0x80)-
224 {-
225 *puc = c;-
226 return 1;-
227 }-
228 else-
229 return u8_mbtouc_aux (puc, s, n);-
230}-
231# endif-
232#endif-
233-
234#if GNULIB_UNISTR_U16_MBTOUC || HAVE_LIBUNISTRING-
235# if !HAVE_INLINE-
236extern int-
237 u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n);-
238# else-
239extern int-
240 u16_mbtouc_aux (ucs4_t *puc, const uint16_t *s, size_t n);-
241static inline int-
242u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n)-
243{-
244 uint16_t c = *s;-
245-
246 if (c < 0xd800 || c >= 0xe000)-
247 {-
248 *puc = c;-
249 return 1;-
250 }-
251 else-
252 return u16_mbtouc_aux (puc, s, n);-
253}-
254# endif-
255#endif-
256-
257#if GNULIB_UNISTR_U32_MBTOUC || HAVE_LIBUNISTRING-
258# if !HAVE_INLINE-
259extern int-
260 u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n);-
261# else-
262static inline int-
263u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n _GL_UNUSED_PARAMETER)-
264{-
265 uint32_t c = *s;-
266-
267 if (c < 0xd800 || (c >= 0xe000 && c < 0x110000))-
268 *puc = c;-
269 else-
270 /* invalid multibyte character */-
271 *puc = 0xfffd;-
272 return 1;-
273}-
274# endif-
275#endif-
276-
277/* Return the length (number of units) of the first character in S, putting-
278 its 'ucs4_t' representation in *PUC. Upon failure, *PUC is set to 0xfffd,-
279 and -1 is returned for an invalid sequence of units, -2 is returned for an-
280 incomplete sequence of units.-
281 The number of available units, N, must be > 0. */-
282/* Similar to u*_mbtouc(), except that the return value gives more details-
283 about the failure, similar to mbrtowc(). */-
284-
285#if GNULIB_UNISTR_U8_MBTOUCR || HAVE_LIBUNISTRING-
286extern int-
287 u8_mbtoucr (ucs4_t *puc, const uint8_t *s, size_t n);-
288#endif-
289-
290#if GNULIB_UNISTR_U16_MBTOUCR || HAVE_LIBUNISTRING-
291extern int-
292 u16_mbtoucr (ucs4_t *puc, const uint16_t *s, size_t n);-
293#endif-
294-
295#if GNULIB_UNISTR_U32_MBTOUCR || HAVE_LIBUNISTRING-
296extern int-
297 u32_mbtoucr (ucs4_t *puc, const uint32_t *s, size_t n);-
298#endif-
299-
300/* Put the multibyte character represented by UC in S, returning its-
301 length. Return -1 upon failure, -2 if the number of available units, N,-
302 is too small. The latter case cannot occur if N >= 6/2/1, respectively. */-
303/* Similar to wctomb(), except that s must not be NULL, and the argument n-
304 must be specified. */-
305-
306#if GNULIB_UNISTR_U8_UCTOMB || HAVE_LIBUNISTRING-
307/* Auxiliary function, also used by u8_chr, u8_strchr, u8_strrchr. */-
308extern int-
309 u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n);-
310# if !HAVE_INLINE-
311extern int-
312 u8_uctomb (uint8_t *s, ucs4_t uc, int n);-
313# else-
314static inline int-
315u8_uctomb (uint8_t *s, ucs4_t uc, int n)-
316{-
317 if (uc < 0x80 && n > 0)
uc < 0x80Description
TRUEnever evaluated
FALSEnever evaluated
n > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
318 {-
319 s[0] = uc;-
320 return 1;
never executed: return 1;
0
321 }-
322 else-
323 return u8_uctomb_aux (s, uc, n);
never executed: return u8_uctomb_aux (s, uc, n);
0
324}-
325# endif-
326#endif-
327-
328#if GNULIB_UNISTR_U16_UCTOMB || HAVE_LIBUNISTRING-
329/* Auxiliary function, also used by u16_chr, u16_strchr, u16_strrchr. */-
330extern int-
331 u16_uctomb_aux (uint16_t *s, ucs4_t uc, int n);-
332# if !HAVE_INLINE-
333extern int-
334 u16_uctomb (uint16_t *s, ucs4_t uc, int n);-
335# else-
336static inline int-
337u16_uctomb (uint16_t *s, ucs4_t uc, int n)-
338{-
339 if (uc < 0xd800 && n > 0)-
340 {-
341 s[0] = uc;-
342 return 1;-
343 }-
344 else-
345 return u16_uctomb_aux (s, uc, n);-
346}-
347# endif-
348#endif-
349-
350#if GNULIB_UNISTR_U32_UCTOMB || HAVE_LIBUNISTRING-
351# if !HAVE_INLINE-
352extern int-
353 u32_uctomb (uint32_t *s, ucs4_t uc, int n);-
354# else-
355static inline int-
356u32_uctomb (uint32_t *s, ucs4_t uc, int n)-
357{-
358 if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000))-
359 {-
360 if (n > 0)-
361 {-
362 *s = uc;-
363 return 1;-
364 }-
365 else-
366 return -2;-
367 }-
368 else-
369 return -1;-
370}-
371# endif-
372#endif-
373-
374/* Copy N units from SRC to DEST. */-
375/* Similar to memcpy(). */-
376extern uint8_t *-
377 u8_cpy (uint8_t *dest, const uint8_t *src, size_t n);-
378extern uint16_t *-
379 u16_cpy (uint16_t *dest, const uint16_t *src, size_t n);-
380extern uint32_t *-
381 u32_cpy (uint32_t *dest, const uint32_t *src, size_t n);-
382-
383/* Copy N units from SRC to DEST, guaranteeing correct behavior for-
384 overlapping memory areas. */-
385/* Similar to memmove(). */-
386extern uint8_t *-
387 u8_move (uint8_t *dest, const uint8_t *src, size_t n);-
388extern uint16_t *-
389 u16_move (uint16_t *dest, const uint16_t *src, size_t n);-
390extern uint32_t *-
391 u32_move (uint32_t *dest, const uint32_t *src, size_t n);-
392-
393/* Set the first N characters of S to UC. UC should be a character that-
394 occupies only 1 unit. */-
395/* Similar to memset(). */-
396extern uint8_t *-
397 u8_set (uint8_t *s, ucs4_t uc, size_t n);-
398extern uint16_t *-
399 u16_set (uint16_t *s, ucs4_t uc, size_t n);-
400extern uint32_t *-
401 u32_set (uint32_t *s, ucs4_t uc, size_t n);-
402-
403/* Compare S1 and S2, each of length N. */-
404/* Similar to memcmp(). */-
405extern int-
406 u8_cmp (const uint8_t *s1, const uint8_t *s2, size_t n)-
407 _UC_ATTRIBUTE_PURE;-
408extern int-
409 u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n)-
410 _UC_ATTRIBUTE_PURE;-
411extern int-
412 u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n)-
413 _UC_ATTRIBUTE_PURE;-
414-
415/* Compare S1 and S2. */-
416/* Similar to the gnulib function memcmp2(). */-
417extern int-
418 u8_cmp2 (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2)-
419 _UC_ATTRIBUTE_PURE;-
420extern int-
421 u16_cmp2 (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2)-
422 _UC_ATTRIBUTE_PURE;-
423extern int-
424 u32_cmp2 (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2)-
425 _UC_ATTRIBUTE_PURE;-
426-
427/* Search the string at S for UC. */-
428/* Similar to memchr(). */-
429extern uint8_t *-
430 u8_chr (const uint8_t *s, size_t n, ucs4_t uc)-
431 _UC_ATTRIBUTE_PURE;-
432extern uint16_t *-
433 u16_chr (const uint16_t *s, size_t n, ucs4_t uc)-
434 _UC_ATTRIBUTE_PURE;-
435extern uint32_t *-
436 u32_chr (const uint32_t *s, size_t n, ucs4_t uc)-
437 _UC_ATTRIBUTE_PURE;-
438-
439/* Count the number of Unicode characters in the N units from S. */-
440/* Similar to mbsnlen(). */-
441extern size_t-
442 u8_mbsnlen (const uint8_t *s, size_t n)-
443 _UC_ATTRIBUTE_PURE;-
444extern size_t-
445 u16_mbsnlen (const uint16_t *s, size_t n)-
446 _UC_ATTRIBUTE_PURE;-
447extern size_t-
448 u32_mbsnlen (const uint32_t *s, size_t n)-
449 _UC_ATTRIBUTE_PURE;-
450-
451/* Elementary string functions with memory allocation. */-
452-
453/* Make a freshly allocated copy of S, of length N. */-
454extern uint8_t *-
455 u8_cpy_alloc (const uint8_t *s, size_t n);-
456extern uint16_t *-
457 u16_cpy_alloc (const uint16_t *s, size_t n);-
458extern uint32_t *-
459 u32_cpy_alloc (const uint32_t *s, size_t n);-
460-
461/* Elementary string functions on NUL terminated strings. */-
462-
463/* Return the length (number of units) of the first character in S.-
464 Return 0 if it is the NUL character. Return -1 upon failure. */-
465extern int-
466 u8_strmblen (const uint8_t *s)-
467 _UC_ATTRIBUTE_PURE;-
468extern int-
469 u16_strmblen (const uint16_t *s)-
470 _UC_ATTRIBUTE_PURE;-
471extern int-
472 u32_strmblen (const uint32_t *s)-
473 _UC_ATTRIBUTE_PURE;-
474-
475/* Return the length (number of units) of the first character in S, putting-
476 its 'ucs4_t' representation in *PUC. Return 0 if it is the NUL-
477 character. Return -1 upon failure. */-
478extern int-
479 u8_strmbtouc (ucs4_t *puc, const uint8_t *s);-
480extern int-
481 u16_strmbtouc (ucs4_t *puc, const uint16_t *s);-
482extern int-
483 u32_strmbtouc (ucs4_t *puc, const uint32_t *s);-
484-
485/* Forward iteration step. Advances the pointer past the next character,-
486 or returns NULL if the end of the string has been reached. Puts the-
487 character's 'ucs4_t' representation in *PUC. */-
488extern const uint8_t *-
489 u8_next (ucs4_t *puc, const uint8_t *s);-
490extern const uint16_t *-
491 u16_next (ucs4_t *puc, const uint16_t *s);-
492extern const uint32_t *-
493 u32_next (ucs4_t *puc, const uint32_t *s);-
494-
495/* Backward iteration step. Advances the pointer to point to the previous-
496 character, or returns NULL if the beginning of the string had been reached.-
497 Puts the character's 'ucs4_t' representation in *PUC. */-
498extern const uint8_t *-
499 u8_prev (ucs4_t *puc, const uint8_t *s, const uint8_t *start);-
500extern const uint16_t *-
501 u16_prev (ucs4_t *puc, const uint16_t *s, const uint16_t *start);-
502extern const uint32_t *-
503 u32_prev (ucs4_t *puc, const uint32_t *s, const uint32_t *start);-
504-
505/* Return the number of units in S. */-
506/* Similar to strlen(), wcslen(). */-
507extern size_t-
508 u8_strlen (const uint8_t *s)-
509 _UC_ATTRIBUTE_PURE;-
510extern size_t-
511 u16_strlen (const uint16_t *s)-
512 _UC_ATTRIBUTE_PURE;-
513extern size_t-
514 u32_strlen (const uint32_t *s)-
515 _UC_ATTRIBUTE_PURE;-
516-
517/* Return the number of units in S, but at most MAXLEN. */-
518/* Similar to strnlen(), wcsnlen(). */-
519extern size_t-
520 u8_strnlen (const uint8_t *s, size_t maxlen)-
521 _UC_ATTRIBUTE_PURE;-
522extern size_t-
523 u16_strnlen (const uint16_t *s, size_t maxlen)-
524 _UC_ATTRIBUTE_PURE;-
525extern size_t-
526 u32_strnlen (const uint32_t *s, size_t maxlen)-
527 _UC_ATTRIBUTE_PURE;-
528-
529/* Copy SRC to DEST. */-
530/* Similar to strcpy(), wcscpy(). */-
531extern uint8_t *-
532 u8_strcpy (uint8_t *dest, const uint8_t *src);-
533extern uint16_t *-
534 u16_strcpy (uint16_t *dest, const uint16_t *src);-
535extern uint32_t *-
536 u32_strcpy (uint32_t *dest, const uint32_t *src);-
537-
538/* Copy SRC to DEST, returning the address of the terminating NUL in DEST. */-
539/* Similar to stpcpy(). */-
540extern uint8_t *-
541 u8_stpcpy (uint8_t *dest, const uint8_t *src);-
542extern uint16_t *-
543 u16_stpcpy (uint16_t *dest, const uint16_t *src);-
544extern uint32_t *-
545 u32_stpcpy (uint32_t *dest, const uint32_t *src);-
546-
547/* Copy no more than N units of SRC to DEST. */-
548/* Similar to strncpy(), wcsncpy(). */-
549extern uint8_t *-
550 u8_strncpy (uint8_t *dest, const uint8_t *src, size_t n);-
551extern uint16_t *-
552 u16_strncpy (uint16_t *dest, const uint16_t *src, size_t n);-
553extern uint32_t *-
554 u32_strncpy (uint32_t *dest, const uint32_t *src, size_t n);-
555-
556/* Copy no more than N units of SRC to DEST. Return a pointer past the last-
557 non-NUL unit written into DEST. */-
558/* Similar to stpncpy(). */-
559extern uint8_t *-
560 u8_stpncpy (uint8_t *dest, const uint8_t *src, size_t n);-
561extern uint16_t *-
562 u16_stpncpy (uint16_t *dest, const uint16_t *src, size_t n);-
563extern uint32_t *-
564 u32_stpncpy (uint32_t *dest, const uint32_t *src, size_t n);-
565-
566/* Append SRC onto DEST. */-
567/* Similar to strcat(), wcscat(). */-
568extern uint8_t *-
569 u8_strcat (uint8_t *dest, const uint8_t *src);-
570extern uint16_t *-
571 u16_strcat (uint16_t *dest, const uint16_t *src);-
572extern uint32_t *-
573 u32_strcat (uint32_t *dest, const uint32_t *src);-
574-
575/* Append no more than N units of SRC onto DEST. */-
576/* Similar to strncat(), wcsncat(). */-
577extern uint8_t *-
578 u8_strncat (uint8_t *dest, const uint8_t *src, size_t n);-
579extern uint16_t *-
580 u16_strncat (uint16_t *dest, const uint16_t *src, size_t n);-
581extern uint32_t *-
582 u32_strncat (uint32_t *dest, const uint32_t *src, size_t n);-
583-
584/* Compare S1 and S2. */-
585/* Similar to strcmp(), wcscmp(). */-
586#ifdef __sun-
587/* Avoid a collision with the u8_strcmp() function in Solaris 11 libc. */-
588extern int-
589 u8_strcmp_gnu (const uint8_t *s1, const uint8_t *s2)-
590 _UC_ATTRIBUTE_PURE;-
591# define u8_strcmp u8_strcmp_gnu-
592#else-
593extern int-
594 u8_strcmp (const uint8_t *s1, const uint8_t *s2)-
595 _UC_ATTRIBUTE_PURE;-
596#endif-
597extern int-
598 u16_strcmp (const uint16_t *s1, const uint16_t *s2)-
599 _UC_ATTRIBUTE_PURE;-
600extern int-
601 u32_strcmp (const uint32_t *s1, const uint32_t *s2)-
602 _UC_ATTRIBUTE_PURE;-
603-
604/* Compare S1 and S2 using the collation rules of the current locale.-
605 Return -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2.-
606 Upon failure, set errno and return any value. */-
607/* Similar to strcoll(), wcscoll(). */-
608extern int-
609 u8_strcoll (const uint8_t *s1, const uint8_t *s2);-
610extern int-
611 u16_strcoll (const uint16_t *s1, const uint16_t *s2);-
612extern int-
613 u32_strcoll (const uint32_t *s1, const uint32_t *s2);-
614-
615/* Compare no more than N units of S1 and S2. */-
616/* Similar to strncmp(), wcsncmp(). */-
617extern int-
618 u8_strncmp (const uint8_t *s1, const uint8_t *s2, size_t n)-
619 _UC_ATTRIBUTE_PURE;-
620extern int-
621 u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n)-
622 _UC_ATTRIBUTE_PURE;-
623extern int-
624 u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n)-
625 _UC_ATTRIBUTE_PURE;-
626-
627/* Duplicate S, returning an identical malloc'd string. */-
628/* Similar to strdup(), wcsdup(). */-
629extern uint8_t *-
630 u8_strdup (const uint8_t *s);-
631extern uint16_t *-
632 u16_strdup (const uint16_t *s);-
633extern uint32_t *-
634 u32_strdup (const uint32_t *s);-
635-
636/* Find the first occurrence of UC in STR. */-
637/* Similar to strchr(), wcschr(). */-
638extern uint8_t *-
639 u8_strchr (const uint8_t *str, ucs4_t uc)-
640 _UC_ATTRIBUTE_PURE;-
641extern uint16_t *-
642 u16_strchr (const uint16_t *str, ucs4_t uc)-
643 _UC_ATTRIBUTE_PURE;-
644extern uint32_t *-
645 u32_strchr (const uint32_t *str, ucs4_t uc)-
646 _UC_ATTRIBUTE_PURE;-
647-
648/* Find the last occurrence of UC in STR. */-
649/* Similar to strrchr(), wcsrchr(). */-
650extern uint8_t *-
651 u8_strrchr (const uint8_t *str, ucs4_t uc)-
652 _UC_ATTRIBUTE_PURE;-
653extern uint16_t *-
654 u16_strrchr (const uint16_t *str, ucs4_t uc)-
655 _UC_ATTRIBUTE_PURE;-
656extern uint32_t *-
657 u32_strrchr (const uint32_t *str, ucs4_t uc)-
658 _UC_ATTRIBUTE_PURE;-
659-
660/* Return the length of the initial segment of STR which consists entirely-
661 of Unicode characters not in REJECT. */-
662/* Similar to strcspn(), wcscspn(). */-
663extern size_t-
664 u8_strcspn (const uint8_t *str, const uint8_t *reject)-
665 _UC_ATTRIBUTE_PURE;-
666extern size_t-
667 u16_strcspn (const uint16_t *str, const uint16_t *reject)-
668 _UC_ATTRIBUTE_PURE;-
669extern size_t-
670 u32_strcspn (const uint32_t *str, const uint32_t *reject)-
671 _UC_ATTRIBUTE_PURE;-
672-
673/* Return the length of the initial segment of STR which consists entirely-
674 of Unicode characters in ACCEPT. */-
675/* Similar to strspn(), wcsspn(). */-
676extern size_t-
677 u8_strspn (const uint8_t *str, const uint8_t *accept)-
678 _UC_ATTRIBUTE_PURE;-
679extern size_t-
680 u16_strspn (const uint16_t *str, const uint16_t *accept)-
681 _UC_ATTRIBUTE_PURE;-
682extern size_t-
683 u32_strspn (const uint32_t *str, const uint32_t *accept)-
684 _UC_ATTRIBUTE_PURE;-
685-
686/* Find the first occurrence in STR of any character in ACCEPT. */-
687/* Similar to strpbrk(), wcspbrk(). */-
688extern uint8_t *-
689 u8_strpbrk (const uint8_t *str, const uint8_t *accept)-
690 _UC_ATTRIBUTE_PURE;-
691extern uint16_t *-
692 u16_strpbrk (const uint16_t *str, const uint16_t *accept)-
693 _UC_ATTRIBUTE_PURE;-
694extern uint32_t *-
695 u32_strpbrk (const uint32_t *str, const uint32_t *accept)-
696 _UC_ATTRIBUTE_PURE;-
697-
698/* Find the first occurrence of NEEDLE in HAYSTACK. */-
699/* Similar to strstr(), wcsstr(). */-
700extern uint8_t *-
701 u8_strstr (const uint8_t *haystack, const uint8_t *needle)-
702 _UC_ATTRIBUTE_PURE;-
703extern uint16_t *-
704 u16_strstr (const uint16_t *haystack, const uint16_t *needle)-
705 _UC_ATTRIBUTE_PURE;-
706extern uint32_t *-
707 u32_strstr (const uint32_t *haystack, const uint32_t *needle)-
708 _UC_ATTRIBUTE_PURE;-
709-
710/* Test whether STR starts with PREFIX. */-
711extern bool-
712 u8_startswith (const uint8_t *str, const uint8_t *prefix)-
713 _UC_ATTRIBUTE_PURE;-
714extern bool-
715 u16_startswith (const uint16_t *str, const uint16_t *prefix)-
716 _UC_ATTRIBUTE_PURE;-
717extern bool-
718 u32_startswith (const uint32_t *str, const uint32_t *prefix)-
719 _UC_ATTRIBUTE_PURE;-
720-
721/* Test whether STR ends with SUFFIX. */-
722extern bool-
723 u8_endswith (const uint8_t *str, const uint8_t *suffix)-
724 _UC_ATTRIBUTE_PURE;-
725extern bool-
726 u16_endswith (const uint16_t *str, const uint16_t *suffix)-
727 _UC_ATTRIBUTE_PURE;-
728extern bool-
729 u32_endswith (const uint32_t *str, const uint32_t *suffix)-
730 _UC_ATTRIBUTE_PURE;-
731-
732/* Divide STR into tokens separated by characters in DELIM.-
733 This interface is actually more similar to wcstok than to strtok. */-
734/* Similar to strtok_r(), wcstok(). */-
735extern uint8_t *-
736 u8_strtok (uint8_t *str, const uint8_t *delim, uint8_t **ptr);-
737extern uint16_t *-
738 u16_strtok (uint16_t *str, const uint16_t *delim, uint16_t **ptr);-
739extern uint32_t *-
740 u32_strtok (uint32_t *str, const uint32_t *delim, uint32_t **ptr);-
741-
742-
743#ifdef __cplusplus-
744}-
745#endif-
746-
747#endif /* _UNISTR_H */-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2