Annotation of Gnu-Mach/linux/dev/kernel/printk.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Linux kernel print routine.
        !             3:  * Copyright (C) 1995 Shantanu Goel.
        !             4:  *
        !             5:  * This program is free software; you can redistribute it and/or modify
        !             6:  * it under the terms of the GNU General Public License as published by
        !             7:  * the Free Software Foundation; either version 2, or (at your option)
        !             8:  * any later version.
        !             9:  *
        !            10:  * This program is distributed in the hope that it will be useful,
        !            11:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            12:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            13:  * GNU General Public License for more details.
        !            14:  *
        !            15:  * You should have received a copy of the GNU General Public License
        !            16:  * along with this program; if not, write to the Free Software
        !            17:  * Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
        !            18:  */
        !            19: 
        !            20: /*
        !            21:  *  linux/kernel/printk.c
        !            22:  *
        !            23:  *  Copyright (C) 1991, 1992  Linus Torvalds
        !            24:  */
        !            25: 
        !            26: #define MACH_INCLUDE
        !            27: #include <stdarg.h>
        !            28: #include <asm/system.h>
        !            29: 
        !            30: static char buf[2048];
        !            31: 
        !            32: #define DEFAULT_MESSAGE_LOGLEVEL 4
        !            33: #define DEFAULT_CONSOLE_LOGLEVEL 7
        !            34: 
        !            35: int console_loglevel = DEFAULT_CONSOLE_LOGLEVEL;
        !            36: 
        !            37: int
        !            38: printk (char *fmt, ...)
        !            39: {
        !            40:   va_list args;
        !            41:   int n, flags;
        !            42:   extern void cnputc ();
        !            43:   extern int linux_vsprintf (char *buf, char *fmt,...);
        !            44:   char *p, *msg, *buf_end;
        !            45:   static int msg_level = -1;
        !            46:   
        !            47:   save_flags (flags);
        !            48:   cli ();
        !            49:   va_start (args, fmt);
        !            50:   n = linux_vsprintf (buf + 3, fmt, args);
        !            51:   buf_end = buf + 3 + n;
        !            52:   va_end (args);
        !            53:   for (p = buf + 3; p < buf_end; p++)
        !            54:     {
        !            55:       msg = p;
        !            56:       if (msg_level < 0)
        !            57:        {
        !            58:          if (p[0] != '<' || p[1] < '0' || p[1] > '7' || p[2] != '>')
        !            59:            {
        !            60:              p -= 3;
        !            61:              p[0] = '<';
        !            62:              p[1] = DEFAULT_MESSAGE_LOGLEVEL + '0';
        !            63:              p[2] = '>';
        !            64:            }
        !            65:          else
        !            66:            msg += 3;
        !            67:          msg_level = p[1] - '0';
        !            68:        }
        !            69:       for (; p < buf_end; p++)
        !            70:        if (*p == '\n')
        !            71:          break;
        !            72:       if (msg_level < console_loglevel)
        !            73:          while (msg <= p)
        !            74:            cnputc (*msg++);
        !            75:       if (*p == '\n')
        !            76:        msg_level = -1;
        !            77:     }
        !            78:   restore_flags (flags);
        !            79:   return n;
        !            80: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.