From f3d5072efc5da128c4362fa8d177f6f8b21acca2 Mon Sep 17 00:00:00 2001 From: Matthew Wilcox Date: Wed, 19 Dec 2018 12:05:51 -0500 Subject: [PATCH] printf: Convert flags_string to printf_state Signed-off-by: Matthew Wilcox --- lib/vsprintf.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 637f1b1e472a..c907eff51bed 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -1579,39 +1579,42 @@ char *clock(struct printf_state *ps, struct clk *clk) } static -char *format_flags(char *buf, char *end, unsigned long flags, +char *format_flags(struct printf_state *ps, unsigned long flags, const struct trace_print_flags *names) { unsigned long mask; + ps->spec = default_str_spec; for ( ; flags && names->name; names++) { mask = names->mask; if ((flags & mask) != mask) continue; - buf = string(buf, end, names->name, default_str_spec); + printf_string(ps, names->name); flags &= ~mask; if (flags) { - if (buf < end) - *buf = '|'; - buf++; + if (ps->buf < ps->end) + *ps->buf = '|'; + ps->buf++; } } - if (flags) - buf = number(buf, end, flags, default_flag_spec); + if (flags) { + ps->spec = default_flag_spec; + printf_number(ps, flags); + } - return buf; + return ps->buf; } static noinline_for_stack -char *flags_string(char *buf, char *end, void *flags_ptr, const char *fmt) +char *flags_string(struct printf_state *ps, void *flags_ptr) { unsigned long flags; const struct trace_print_flags *names; - switch (fmt[1]) { + switch (ps->fmt[1]) { case 'p': flags = *(unsigned long *)flags_ptr; /* Remove zone id */ @@ -1627,11 +1630,11 @@ char *flags_string(char *buf, char *end, void *flags_ptr, const char *fmt) names = gfpflag_names; break; default: - WARN_ONCE(1, "Unsupported flags modifier: %c\n", fmt[1]); - return buf; + WARN_ONCE(1, "Unsupported flags modifier: %c\n", ps->fmt[1]); + return ps->buf; } - return format_flags(buf, end, flags, names); + return format_flags(ps, flags, names); } static const char *device_node_name_for_depth(const struct device_node *np, int depth) @@ -1978,7 +1981,7 @@ char *pointer(struct printf_state *ps, void *ptr) #endif case 'G': - return flags_string(buf, end, ptr, fmt); + return flags_string(ps, ptr); case 'O': switch (fmt[1]) { case 'F': -- 2.50.1