]> www.infradead.org Git - users/willy/linux.git/commitdiff
printf: Convert flags_string to printf_state
authorMatthew Wilcox <willy@infradead.org>
Wed, 19 Dec 2018 17:05:51 +0000 (12:05 -0500)
committerMatthew Wilcox <willy@infradead.org>
Wed, 19 Dec 2018 17:05:51 +0000 (12:05 -0500)
Signed-off-by: Matthew Wilcox <willy@infradead.org>
lib/vsprintf.c

index 637f1b1e472aedf01f9b83800e8f0a794e70aa17..c907eff51bed7f76bb0f62c338ba0a564b3d72b5 100644 (file)
@@ -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':