diff options
author | Simon Glass <sjg@chromium.org> | 2017-05-18 20:09:29 -0600 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2017-06-01 07:03:12 -0600 |
commit | a7d0021063661a65bfa47d4ec912da4e2cfa8f9a (patch) | |
tree | c4f46f6084a9f3b9ca3795d68195a9ed11274f66 | |
parent | 6b45ba45fbcd1acc11c88ee1c15ed5fcb49f9e32 (diff) | |
download | u-boot-midas-a7d0021063661a65bfa47d4ec912da4e2cfa8f9a.tar.gz u-boot-midas-a7d0021063661a65bfa47d4ec912da4e2cfa8f9a.tar.bz2 u-boot-midas-a7d0021063661a65bfa47d4ec912da4e2cfa8f9a.zip |
string: Add strcspn()
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 <sjg@chromium.org>
-rw-r--r-- | include/linux/string.h | 15 | ||||
-rw-r--r-- | lib/string.c | 24 |
2 files changed, 39 insertions, 0 deletions
diff --git a/include/linux/string.h b/include/linux/string.h index 718c3720a1..3606620739 100644 --- a/include/linux/string.h +++ b/include/linux/string.h @@ -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 diff --git a/lib/string.c b/lib/string.c index e6e749b80b..c4ca944bb4 100644 --- a/lib/string.c +++ b/lib/string.c @@ -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) { |