vsprintf: factor out skip_space code in a separate function
When converting more caller sites, the inline decision will be left up to gcc. It decreases code size: text data bss dec hex filename 15710 0 8 15718 3d66 vsprintf.o (ex lib/lib.a-BEFORE) 15534 0 8 15542 3cb6 vsprintf.o (ex lib/lib.a-AFTER) Signed-off-by: André Goddard Rosa <andre.goddard@gmail.com> Acked-by: Frederic Weisbecker <fweisbec@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
d4be151b21
commit
c5484d7c0a
1 changed files with 11 additions and 8 deletions
|
@ -1786,6 +1786,13 @@ EXPORT_SYMBOL_GPL(bprintf);
|
||||||
|
|
||||||
#endif /* CONFIG_BINARY_PRINTF */
|
#endif /* CONFIG_BINARY_PRINTF */
|
||||||
|
|
||||||
|
static noinline char *skip_space(const char *str)
|
||||||
|
{
|
||||||
|
while (isspace(*str))
|
||||||
|
++str;
|
||||||
|
return (char *)str;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* vsscanf - Unformat a buffer into a list of arguments
|
* vsscanf - Unformat a buffer into a list of arguments
|
||||||
* @buf: input buffer
|
* @buf: input buffer
|
||||||
|
@ -1807,10 +1814,8 @@ int vsscanf(const char *buf, const char *fmt, va_list args)
|
||||||
* white space, including none, in the input.
|
* white space, including none, in the input.
|
||||||
*/
|
*/
|
||||||
if (isspace(*fmt)) {
|
if (isspace(*fmt)) {
|
||||||
while (isspace(*fmt))
|
fmt = skip_space(fmt);
|
||||||
++fmt;
|
str = skip_space(str);
|
||||||
while (isspace(*str))
|
|
||||||
++str;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* anything that is not a conversion must match exactly */
|
/* anything that is not a conversion must match exactly */
|
||||||
|
@ -1880,8 +1885,7 @@ int vsscanf(const char *buf, const char *fmt, va_list args)
|
||||||
if (field_width == -1)
|
if (field_width == -1)
|
||||||
field_width = INT_MAX;
|
field_width = INT_MAX;
|
||||||
/* first, skip leading white space in buffer */
|
/* first, skip leading white space in buffer */
|
||||||
while (isspace(*str))
|
str = skip_space(str);
|
||||||
str++;
|
|
||||||
|
|
||||||
/* now copy until next white space */
|
/* now copy until next white space */
|
||||||
while (*str && !isspace(*str) && field_width--)
|
while (*str && !isspace(*str) && field_width--)
|
||||||
|
@ -1923,8 +1927,7 @@ int vsscanf(const char *buf, const char *fmt, va_list args)
|
||||||
/* have some sort of integer conversion.
|
/* have some sort of integer conversion.
|
||||||
* first, skip white space in buffer.
|
* first, skip white space in buffer.
|
||||||
*/
|
*/
|
||||||
while (isspace(*str))
|
str = skip_space(str);
|
||||||
str++;
|
|
||||||
|
|
||||||
digit = *str;
|
digit = *str;
|
||||||
if (is_sign && digit == '-')
|
if (is_sign && digit == '-')
|
||||||
|
|
Loading…
Reference in a new issue