lib/vsprintf.c: pull out padding code from dentry_name()
Pull out the logic in dentry_name() which handles field width space padding, in preparation for reusing it from string(). Rename the widen() helper to move_right(), since it is used for handling the !(flags & LEFT) case. Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk> Cc: Al Viro <viro@ZenIV.linux.org.uk> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Joe Perches <joe@perches.com> Cc: Kees Cook <keescook@chromium.org> Cc: Maurizio Lombardi <mlombard@redhat.com> Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
8d91f8b153
Коммит
cfccde04e2
|
@ -541,7 +541,7 @@ char *string(char *buf, char *end, const char *s, struct printf_spec spec)
|
|||
return buf;
|
||||
}
|
||||
|
||||
static void widen(char *buf, char *end, unsigned len, unsigned spaces)
|
||||
static void move_right(char *buf, char *end, unsigned len, unsigned spaces)
|
||||
{
|
||||
size_t size;
|
||||
if (buf >= end) /* nowhere to put anything */
|
||||
|
@ -559,6 +559,35 @@ static void widen(char *buf, char *end, unsigned len, unsigned spaces)
|
|||
memset(buf, ' ', spaces);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle field width padding for a string.
|
||||
* @buf: current buffer position
|
||||
* @n: length of string
|
||||
* @end: end of output buffer
|
||||
* @spec: for field width and flags
|
||||
* Returns: new buffer position after padding.
|
||||
*/
|
||||
static noinline_for_stack
|
||||
char *widen_string(char *buf, int n, char *end, struct printf_spec spec)
|
||||
{
|
||||
unsigned spaces;
|
||||
|
||||
if (likely(n >= spec.field_width))
|
||||
return buf;
|
||||
/* we want to pad the sucker */
|
||||
spaces = spec.field_width - n;
|
||||
if (!(spec.flags & LEFT)) {
|
||||
move_right(buf - n, end, n, spaces);
|
||||
return buf + spaces;
|
||||
}
|
||||
while (spaces--) {
|
||||
if (buf < end)
|
||||
*buf = ' ';
|
||||
++buf;
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
static noinline_for_stack
|
||||
char *dentry_name(char *buf, char *end, const struct dentry *d, struct printf_spec spec,
|
||||
const char *fmt)
|
||||
|
@ -600,20 +629,7 @@ char *dentry_name(char *buf, char *end, const struct dentry *d, struct printf_sp
|
|||
*buf = c;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
if (n < spec.field_width) {
|
||||
/* we want to pad the sucker */
|
||||
unsigned spaces = spec.field_width - n;
|
||||
if (!(spec.flags & LEFT)) {
|
||||
widen(buf - n, end, n, spaces);
|
||||
return buf + spaces;
|
||||
}
|
||||
while (spaces--) {
|
||||
if (buf < end)
|
||||
*buf = ' ';
|
||||
++buf;
|
||||
}
|
||||
}
|
||||
return buf;
|
||||
return widen_string(buf, n, end, spec);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BLOCK
|
||||
|
|
Загрузка…
Ссылка в новой задаче