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;
|
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;
|
size_t size;
|
||||||
if (buf >= end) /* nowhere to put anything */
|
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);
|
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
|
static noinline_for_stack
|
||||||
char *dentry_name(char *buf, char *end, const struct dentry *d, struct printf_spec spec,
|
char *dentry_name(char *buf, char *end, const struct dentry *d, struct printf_spec spec,
|
||||||
const char *fmt)
|
const char *fmt)
|
||||||
|
@ -600,20 +629,7 @@ char *dentry_name(char *buf, char *end, const struct dentry *d, struct printf_sp
|
||||||
*buf = c;
|
*buf = c;
|
||||||
}
|
}
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
if (n < spec.field_width) {
|
return widen_string(buf, n, end, spec);
|
||||||
/* 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_BLOCK
|
#ifdef CONFIG_BLOCK
|
||||||
|
|
Загрузка…
Ссылка в новой задаче