Skip to content

Commit

Permalink
vsprintf: factor out skip_space code in a separate function
Browse files Browse the repository at this point in the history
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 <[email protected]>
Acked-by: Frederic Weisbecker <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
andre-rosa authored and torvalds committed Dec 15, 2009
1 parent d4be151 commit c5484d7
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions lib/vsprintf.c
Original file line number Diff line number Diff line change
Expand Up @@ -1786,6 +1786,13 @@ EXPORT_SYMBOL_GPL(bprintf);

#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
* @buf: input buffer
Expand All @@ -1807,10 +1814,8 @@ int vsscanf(const char *buf, const char *fmt, va_list args)
* white space, including none, in the input.
*/
if (isspace(*fmt)) {
while (isspace(*fmt))
++fmt;
while (isspace(*str))
++str;
fmt = skip_space(fmt);
str = skip_space(str);
}

/* anything that is not a conversion must match exactly */
Expand Down Expand Up @@ -1880,8 +1885,7 @@ int vsscanf(const char *buf, const char *fmt, va_list args)
if (field_width == -1)
field_width = INT_MAX;
/* first, skip leading white space in buffer */
while (isspace(*str))
str++;
str = skip_space(str);

/* now copy until next white space */
while (*str && !isspace(*str) && field_width--)
Expand Down Expand Up @@ -1923,8 +1927,7 @@ int vsscanf(const char *buf, const char *fmt, va_list args)
/* have some sort of integer conversion.
* first, skip white space in buffer.
*/
while (isspace(*str))
str++;
str = skip_space(str);

digit = *str;
if (is_sign && digit == '-')
Expand Down

0 comments on commit c5484d7

Please sign in to comment.