1 /* Licensed under LGPLv2+ - see LICENSE file for details */
4 #include <ccan/bytestring/bytestring.h>
6 size_t bytestring_spn(struct bytestring s, struct bytestring accept)
10 for (i = 0; i < s.len; i++)
11 if (bytestring_index(accept, s.ptr[i]) == NULL)
17 size_t bytestring_cspn(struct bytestring s, struct bytestring reject)
21 for (i = 0; i < s.len; i++)
22 if (bytestring_index(reject, s.ptr[i]) != NULL)
28 static struct bytestring _splitchr(struct bytestring whole, char delim,
33 assert(start <= whole.len);
35 /* Check this first, in case memchr() is not safe with zero length */
36 if (start == whole.len)
37 return bytestring(whole.ptr + start, 0);
39 p = memchr(whole.ptr + start, delim, whole.len - start);
41 return bytestring_slice(whole, start, p - whole.ptr);
43 return bytestring_slice(whole, start, whole.len);
46 struct bytestring bytestring_splitchr_first(struct bytestring whole,
50 return bytestring_NULL;
52 return _splitchr(whole, delim, 0);
55 struct bytestring bytestring_splitchr_next(struct bytestring whole,
56 char delim, struct bytestring prev)
59 return bytestring_NULL;
61 /* prev has to be a substring of whole */
62 assert(prev.ptr >= whole.ptr);
64 if ((prev.ptr + prev.len) == (whole.ptr + whole.len))
65 return bytestring_NULL;
67 return _splitchr(whole, delim, (prev.ptr - whole.ptr) + prev.len + 1);