This source file includes following definitions.
- mbsspn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include <config.h>
19
20
21 #include <string.h>
22
23 #include "mbuiter.h"
24
25
26
27
28
29 size_t
30 mbsspn (const char *string, const char *reject)
31 {
32
33 if (reject[0] == '\0')
34 return 0;
35 if (reject[1] == '\0')
36 {
37 unsigned char uc = (unsigned char) reject[0];
38
39 if (MB_CUR_MAX > 1)
40 {
41 mbui_iterator_t iter;
42
43 for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter))
44 if (!(mb_len (mbui_cur (iter)) == 1
45 && (unsigned char) * mbui_cur_ptr (iter) == uc))
46 break;
47 return mbui_cur_ptr (iter) - string;
48 }
49 else
50 {
51 const char *ptr;
52
53 for (ptr = string; *ptr != '\0'; ptr++)
54 if ((unsigned char) *ptr != uc)
55 break;
56 return ptr - string;
57 }
58 }
59
60 if (MB_CUR_MAX > 1)
61 {
62 mbui_iterator_t iter;
63
64 for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter))
65 {
66 if (mb_len (mbui_cur (iter)) == 1)
67 {
68 if (mbschr (reject, * mbui_cur_ptr (iter)) == NULL)
69 goto found;
70 }
71 else
72 {
73 mbui_iterator_t aiter;
74
75 for (mbui_init (aiter, reject);; mbui_advance (aiter))
76 {
77 if (!mbui_avail (aiter))
78 goto found;
79 if (mb_equal (mbui_cur (aiter), mbui_cur (iter)))
80 break;
81 }
82 }
83 }
84 found:
85 return mbui_cur_ptr (iter) - string;
86 }
87 else
88 return strspn (string, reject);
89 }