109 |
109 |
110 sstr_t sstrchr(sstr_t s, int c) { |
110 sstr_t sstrchr(sstr_t s, int c) { |
111 for(size_t i=0;i<s.length;i++) { |
111 for(size_t i=0;i<s.length;i++) { |
112 if(s.ptr[i] == c) { |
112 if(s.ptr[i] == c) { |
113 return sstrsubs(s, i); |
113 return sstrsubs(s, i); |
|
114 } |
|
115 } |
|
116 sstr_t n; |
|
117 n.ptr = NULL; |
|
118 n.length = 0; |
|
119 return n; |
|
120 } |
|
121 |
|
122 sstr_t sstrrchr(sstr_t s, int c) { |
|
123 if (s.length > 0) { |
|
124 for(size_t i=s.length;i>0;i--) { |
|
125 if(s.ptr[i-1] == c) { |
|
126 return sstrsubs(s, i-1); |
|
127 } |
114 } |
128 } |
115 } |
129 } |
116 sstr_t n; |
130 sstr_t n; |
117 n.ptr = NULL; |
131 n.ptr = NULL; |
118 n.length = 0; |
132 n.length = 0; |
195 } else { |
209 } else { |
196 return -1; |
210 return -1; |
197 } |
211 } |
198 } |
212 } |
199 |
213 |
|
214 int sstrcasecmp(sstr_t s1, sstr_t s2) { |
|
215 if (s1.length == s2.length) { |
|
216 #ifdef _WIN32 |
|
217 return _strnicmp(s1.ptr, s2.ptr, s1.length); |
|
218 #else |
|
219 return strncasecmp(s1.ptr, s2.ptr, s1.length); |
|
220 #endif |
|
221 } else if (s1.length > s2.length) { |
|
222 return 1; |
|
223 } else { |
|
224 return -1; |
|
225 } |
|
226 } |
|
227 |
200 sstr_t sstrdup(sstr_t s) { |
228 sstr_t sstrdup(sstr_t s) { |
201 return sstrdup_a(ucx_default_allocator(), s); |
229 return sstrdup_a(ucx_default_allocator(), s); |
202 } |
230 } |
203 |
231 |
204 sstr_t sstrdup_a(UcxAllocator *allocator, sstr_t s) { |
232 sstr_t sstrdup_a(UcxAllocator *allocator, sstr_t s) { |