Skip to content

Commit

Permalink
string: Add strcspn()
Browse files Browse the repository at this point in the history
Add an implementation of strcspn() which returns the number of initial
characters that do not match any in a rejection list.

Signed-off-by: Simon Glass <[email protected]>
  • Loading branch information
sjg20 committed Jun 1, 2017
1 parent 6b45ba4 commit a7d0021
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
15 changes: 15 additions & 0 deletions include/linux/string.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,21 @@ extern __kernel_size_t strlen(const char *);
#ifndef __HAVE_ARCH_STRNLEN
extern __kernel_size_t strnlen(const char *,__kernel_size_t);
#endif

#ifndef __HAVE_ARCH_STRCSPN
/**
* strcspn() - find span of string without given characters
*
* Calculates the length of the initial segment of @s which consists entirely
* of bsytes not in reject.
*
* @s: string to search
* @reject: strings which cause the search to halt
* @return number of characters at the start of @s which are not in @reject
*/
size_t strcspn(const char *s, const char *reject);
#endif

#ifndef __HAVE_ARCH_STRDUP
extern char * strdup(const char *);
#endif
Expand Down
24 changes: 24 additions & 0 deletions lib/string.c
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,30 @@ size_t strnlen(const char * s, size_t count)
}
#endif

#ifndef __HAVE_ARCH_STRCSPN
/**
* strcspn - Calculate the length of the initial substring of @s which does
* not contain letters in @reject
* @s: The string to be searched
* @reject: The string to avoid
*/
size_t strcspn(const char *s, const char *reject)
{
const char *p;
const char *r;
size_t count = 0;

for (p = s; *p != '\0'; ++p) {
for (r = reject; *r != '\0'; ++r) {
if (*p == *r)
return count;
}
++count;
}
return count;
}
#endif

#ifndef __HAVE_ARCH_STRDUP
char * strdup(const char *s)
{
Expand Down

0 comments on commit a7d0021

Please sign in to comment.