| From: Rasmus Villemoes <linux@rasmusvillemoes.dk> |
| Subject: lib/string.c: simplify str[c]spn |
| |
| Use strchr(), which makes them a lot shorter, and more obviously symmetric |
| in their treatment of accept/reject. It also saves a little bit of .text; |
| bloat-o-meter for an arm build says |
| |
| Function old new delta |
| strcspn 92 76 -16 |
| strspn 108 76 -32 |
| |
| While here, also remove a stray empty line before EXPORT_SYMBOL(). |
| |
| Link: https://lkml.kernel.org/r/20220328224119.3003834-2-linux@rasmusvillemoes.dk |
| Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk> |
| Cc: Andy Shevchenko <andy@kernel.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| lib/string.c | 25 ++++++------------------- |
| 1 file changed, 6 insertions(+), 19 deletions(-) |
| |
| --- a/lib/string.c~lib-stringc-simplify-strspn |
| +++ a/lib/string.c |
| @@ -517,21 +517,13 @@ EXPORT_SYMBOL(strnlen); |
| size_t strspn(const char *s, const char *accept) |
| { |
| const char *p; |
| - const char *a; |
| - size_t count = 0; |
| |
| for (p = s; *p != '\0'; ++p) { |
| - for (a = accept; *a != '\0'; ++a) { |
| - if (*p == *a) |
| - break; |
| - } |
| - if (*a == '\0') |
| - return count; |
| - ++count; |
| + if (!strchr(accept, *p)) |
| + break; |
| } |
| - return count; |
| + return p - s; |
| } |
| - |
| EXPORT_SYMBOL(strspn); |
| #endif |
| |
| @@ -544,17 +536,12 @@ EXPORT_SYMBOL(strspn); |
| 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; |
| + if (strchr(reject, *p)) |
| + break; |
| } |
| - return count; |
| + return p - s; |
| } |
| EXPORT_SYMBOL(strcspn); |
| #endif |
| _ |