The current form of a KERN_<LEVEL> is "<.>".
Add printk_get_level and printk_skip_level functions to handle these
formats.
These functions centralize tests of KERN_<LEVEL> so a future modification
can change the KERN_<LEVEL> style and shorten the number of bytes consumed
by these headers.
[akpm@linux-foundation.org: fix build error and warning]
Signed-off-by: Joe Perches <joe@perches.com>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Cc: Wu Fengguang <wfg@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  */
 #define KERN_CONT      "<c>"
 
+static inline int printk_get_level(const char *buffer)
+{
+       if (buffer[0] == '<' && buffer[1] && buffer[2] == '>') {
+               switch (buffer[1]) {
+               case '0' ... '7':
+               case 'd':       /* KERN_DEFAULT */
+               case 'c':       /* KERN_CONT */
+                       return buffer[1];
+               }
+       }
+       return 0;
+}
+
+static inline const char *printk_skip_level(const char *buffer)
+{
+       if (printk_get_level(buffer)) {
+               switch (buffer[1]) {
+               case '0' ... '7':
+               case 'd':       /* KERN_DEFAULT */
+               case 'c':       /* KERN_CONT */
+                       return buffer + 3;
+               }
+       }
+       return buffer;
+}
+
 extern int console_printk[];
 
 #define console_loglevel (console_printk[0])
 
        size_t text_len;
        enum log_flags lflags = 0;
        unsigned long flags;
+       int kern_level;
        int this_cpu;
        int printed_len = 0;
 
        }
 
        /* strip syslog prefix and extract log level or control flags */
-       if (text[0] == '<' && text[1] && text[2] == '>') {
-               switch (text[1]) {
+       kern_level = printk_get_level(text);
+       if (kern_level) {
+               const char *end_of_header = printk_skip_level(text);
+               switch (kern_level) {
                case '0' ... '7':
                        if (level == -1)
-                               level = text[1] - '0';
+                               level = kern_level - '0';
                case 'd':       /* KERN_DEFAULT */
                        lflags |= LOG_PREFIX;
                case 'c':       /* KERN_CONT */
-                       text += 3;
-                       text_len -= 3;
+                       break;
                }
+               text_len -= end_of_header - text;
+               text = (char *)end_of_header;
        }
 
        if (level == -1)