MINOR: standard: Add my_memspn and my_memcspn

Do the same than strsnp() and strcspn() but on a raw bytes buffer.
This commit is contained in:
Christopher Faulet 2020-04-15 10:23:01 +02:00
parent 12d5740a38
commit 5eb96cbcbc
2 changed files with 36 additions and 0 deletions

View File

@ -1006,6 +1006,16 @@ char *my_strndup(const char *src, int n);
*/
const void *my_memmem(const void *, size_t, const void *, size_t);
/* get length of the initial segment consiting entirely of bytes within a given
* mask
*/
size_t my_memspn(const void *, size_t, const void *, size_t);
/* get length of the initial segment consiting entirely of bytes not within a
* given mask
*/
size_t my_memcspn(const void *, size_t, const void *, size_t);
/* This function returns the first unused key greater than or equal to <key> in
* ID tree <root>. Zero is returned if no place is found.
*/

View File

@ -2292,6 +2292,32 @@ const void *my_memmem(const void *haystack, size_t haystacklen, const void *need
return NULL;
}
/* get length of the initial segment consiting entirely of bytes in <accept> */
size_t my_memspn(const void *str, size_t len, const void *accept, size_t acceptlen)
{
size_t ret = 0;
while (ret < len && memchr(accept, *((int *)str), acceptlen)) {
str++;
ret++;
}
return ret;
}
/* get length of the initial segment consiting entirely of bytes not in <rejcet> */
size_t my_memcspn(const void *str, size_t len, const void *reject, size_t rejectlen)
{
size_t ret = 0;
while (ret < len) {
if(memchr(reject, *((int *)str), rejectlen))
return ret;
str++;
ret++;
}
return ret;
}
/* This function returns the first unused key greater than or equal to <key> in
* ID tree <root>. Zero is returned if no place is found.
*/