On Thu, 30 Jan 2014 13:11:57 -0800 Sebastian Capella sebastian.capella@linaro.org wrote:
kstrimdup will duplicate and trim spaces from the passed in null terminated string. This is useful for strings coming from sysfs that often include trailing whitespace due to user input.
...
--- a/include/linux/string.h +++ b/include/linux/string.h
...
@@ -63,6 +64,35 @@ char *kstrndup(const char *s, size_t max, gfp_t gfp) EXPORT_SYMBOL(kstrndup); /**
- kstrimdup - Trim and copy a %NUL terminated string.
- @s: the string to trim and duplicate
- @gfp: the GFP mask used in the kmalloc() call when allocating memory
- Returns an address, which the caller must kfree, containing
- a duplicate of the passed string with leading and/or trailing
- whitespace (as defined by isspace) removed.
- */
+char *kstrimdup(const char *s, gfp_t gfp) +{
- char *buf;
- char *begin = skip_spaces(s);
- size_t len = strlen(begin);
- while (len > 1 && isspace(begin[len - 1]))
len--;
That's off-by-one isn't it? kstrimdup(" ") should return "", not " ".
- buf = kmalloc_track_caller(len + 1, gfp);
- if (!buf)
return NULL;
- memcpy(buf, begin, len);
- buf[len] = '\0';
- return buf;
+} +EXPORT_SYMBOL(kstrimdup);