diff --git a/include/linux/string.h b/include/linux/string.h index 62d743e..afd0aa6 100644 --- a/include/linux/string.h +++ b/include/linux/string.h @@ -93,6 +93,9 @@ #ifndef __HAVE_ARCH_MEMCHR extern void * memchr(const void *,int,__kernel_size_t); #endif +extern char * skip_spaces(const char *); + +extern char *strim(char *); #ifdef __cplusplus } diff --git a/lib/string.c b/lib/string.c index 2865088..db4f2ae 100644 --- a/lib/string.c +++ b/lib/string.c @@ -567,3 +567,42 @@ #endif EXPORT_SYMBOL(memchr); +/** + * skip_spaces - Removes leading whitespace from @str. + * @str: The string to be stripped. + * + * Returns a pointer to the first non-whitespace character in @str. + */ +char *skip_spaces(const char *str) +{ + while (isspace(*str)) + ++str; + return (char *)str; +} + +/** + * strim - Removes leading and trailing whitespace from @s. + * @s: The string to be stripped. + * + * Note that the first trailing whitespace is replaced with a %NUL-terminator + * in the given string @s. Returns a pointer to the first non-whitespace + * character in @s. + */ +char *strim(char *s) +{ + size_t size; + char *end; + + s = skip_spaces(s); + size = strlen(s); + if (!size) + return s; + + end = s + size - 1; + while (end >= s && isspace(*end)) + end--; + *(end + 1) = '\0'; + + return s; +} +EXPORT_SYMBOL(strim);