History

string: factorize skip_spaces and export it to be generally available

On the following sentence: while (*s && isspace(*s)) s++; If *s == 0, isspace() evaluates to ((_ctype[*s] & 0x20) != 0), which evaluates to ((0x08 & 0x20) != 0) which equals to 0 as well. If *s == 1, we depend on isspace() result anyway. In other words, "a char equals zero is never a space", so remove this check. Also, *s != 0 is most common case (non-null string). Fixed const return as noticed by Jan Engelhardt and James Bottomley. Fixed unnecessary extra cast on strstrip() as noticed by Jan Engelhardt.

André Goddard Rosa committed 16 years ago

Commit f6533981 parent 4e62b093 files · +17 −4Browse files

Showing the changes to lib/string.c (1 of 3 files). Show all

Unified · Split

lib/string.c+15−4
@@ -337,6 +337,20 @@ char *strnchr(const char *s, size_t count, int c) · 336 unmodified lines
337337 EXPORT_SYMBOL(strnchr);
338338 #endif
339339
340+/**
341+ * skip_spaces - Removes leading whitespace from @s.
342+ * @s: The string to be stripped.
343+ *
344+ * Returns a pointer to the first non-whitespace character in @s.
345+ */
346+char *skip_spaces(const char *str)
347+{
348+ while (isspace(*str))
349+ ++str;
350+ return (char *)str;
351+}
352+EXPORT_SYMBOL(skip_spaces);
353+
340354 /**
341355 * strstrip - Removes leading and trailing whitespace from @s.
342356 * @s: The string to be stripped.
@@ -360,10 +374,7 @@ char *strstrip(char *s) · 17 unmodified lines
360374 end--;
361375 *(end + 1) = '\0';
362376
363− while (*s && isspace(*s))
364− s++;
365−
366− return s;
377+ return skip_spaces(s);
367378 }
368379 EXPORT_SYMBOL(strstrip);
369380