| plan 9 kernel history: overview | file list | diff list |
1990/0912/port/devcons.c (diff list | history)
| 1990/0907/sys/src/9/port/devcons.c:303,309 – 1990/0912/sys/src/9/port/devcons.c:303,309 (short | long | prev | next) | ||
| 1990/0227 | Dirtab consdir[]={ "cons", Qcons, 0, 0600, "cputime", Qcputime, 72, 0600, | |
| 1990/0720 |
| |
| 1990/0912 | "log", Qlog, BY2PG-8, 0600, | |
| 1990/0227 | "null", Qnull, 0, 0600, "pgrpid", Qpgrpid, 12, 0600, "pid", Qpid, 12, 0600, | |
| 1990/0907/sys/src/9/port/devcons.c:596,603 – 1990/0912/sys/src/9/port/devcons.c:596,614 | ||
| 1990/0720 | } /* | |
| 1990/0912 | * kernel based system log, passed between crashes | |
| 1990/0720 | */ | |
| 1990/0912 | #define SYSLOGMAGIC 0x23456789 #define SYSLOG ((Syslog *)(UNCACHED | KZERO | 0x1B00)) typedef struct Syslog Syslog; struct Syslog { ulong magic; char *start; char *next; char buf[BY2PG - 3*BY2WD]; }; | |
| 1990/0720 | void sysloginit(void) { | |
| 1990/0907/sys/src/9/port/devcons.c:606,612 – 1990/0912/sys/src/9/port/devcons.c:617,624 | ||
| 1990/0720 | s = SYSLOG; if(s->magic!=SYSLOGMAGIC || s->next>=&s->buf[sizeof(s->buf)] | |
| 1990/0912 | || s->start>=&s->buf[sizeof(s->buf)] || s->next<s->buf){ s->start = s->buf; | |
| 1990/0720 | s->next = s->buf; s->magic = SYSLOGMAGIC; } | |
| 1990/0907/sys/src/9/port/devcons.c:615,631 – 1990/0912/sys/src/9/port/devcons.c:627,652 | ||
| 1990/0720 | void syslog(char *p, int n) { | |
| 1990/0912 | int restart; | |
| 1990/0720 | Syslog *s; char *end; s = SYSLOG; end = &s->buf[sizeof(s->buf)]; | |
| 1990/0912 | restart = 0; | |
| 1990/0720 | while(n-- > 0){ *s->next++ = *p++; if(s->next >= end) s->next = s->buf; | |
| 1990/0912 | if(s->next == s->start) restart = 1; | |
| 1990/0720 | } | |
| 1990/0912 | if(restart){ s->start = s->next + 1; if(s->start >= end) s->start = s->buf; } wbflush(); | |
| 1990/0720 | } long | |
| 1990/0907/sys/src/9/port/devcons.c:632,640 – 1990/0912/sys/src/9/port/devcons.c:653,661 | ||
| 1990/0720 | readlog(ulong off, char *buf, ulong n) { Syslog *s; | |
| 1990/0912 | char *a = buf; | |
| 1990/0720 | s = SYSLOG; | |
| 1990/0907/sys/src/9/port/devcons.c:642,661 – 1990/0912/sys/src/9/port/devcons.c:663,686 | ||
| 1990/0720 | if(off >= sizeof(s->buf)) return 0; | |
| 1990/0912 | p = s->start; | |
| 1990/0720 |
| |
| 1990/0912 | /* skip offset */ while(off-- > 0){ if(p == s->next) return 0; p++; } /* copy out */ while(n-- > 0){ if(p == s->next) break; *a++ = *p++; | |
| 1990/0720 | if(p >= end) p = s->buf; } | |
| 1990/0912 | return a-buf; | |
| 1990/0227 | } | |