| plan 9 kernel history: overview | file list | diff list |
1999/0714/port/devcons.c (diff list | history)
| 1990/0227/sys/src/9/port/devcons.c:238,247 – 1990/03042/sys/src/9/port/devcons.c:238,243 (short | long) | ||
| 1990/0227 | */ if(c == 0x14) DEBUG(); | |
| 1990/03042/sys/src/9/port/devcons.c:144,153 – 1990/03091/sys/src/9/port/devcons.c:144,150 (short | long) | ||
| 1990/0227 | int sprint(char *s, char *fmt, ...) { | |
| 1990/03091 | return donprint(s, s+PRINTSIZE, fmt, (&fmt+1)) - s; | |
| 1990/0227 | } int | |
| 1990/03042/sys/src/9/port/devcons.c:233,238 – 1990/03091/sys/src/9/port/devcons.c:230,236 | ||
| 1990/0227 | echo(int c) { char ch; | |
| 1990/03091 | ||
| 1990/0227 | /* * ^t hack BUG */ | |
| 1990/03091/sys/src/9/port/devcons.c:323,329 – 1990/0312/sys/src/9/port/devcons.c:323,330 (short | long) | ||
| 1990/0227 | numbconv(&op, 10); tmp[size-1] = ' '; | |
| 1990/0312 | if(off >= size) return 0; | |
| 1990/0227 | if(off+n > size) n = size-off; memcpy(buf, tmp+off, n); | |
| 1990/03091/sys/src/9/port/devcons.c:336,342 – 1990/0312/sys/src/9/port/devcons.c:337,344 | ||
| 1990/0227 | int size; size = strlen(str); | |
| 1990/0312 | if(off >= size) return 0; | |
| 1990/0227 | if(off+n > size) n = size-off; memcpy(buf, str+off, n); | |
| 1990/03091/sys/src/9/port/devcons.c:455,461 – 1990/0312/sys/src/9/port/devcons.c:457,465 | ||
| 1990/0227 | return i; case Qcputime: | |
| 1990/0312 | k = c->offset; if(k >= sizeof tmp) return 0; | |
| 1990/0227 | if(k+n > sizeof tmp) n = sizeof tmp - k; /* easiest to format in a separate buffer and copy out */ | |
| 1990/0312/sys/src/9/port/devcons.c:180,196 – 1990/0321/sys/src/9/port/devcons.c:180,197 (short | long) | ||
| 1990/0227 | c = u->fd[2]; if(c==0 || (c->mode!=OWRITE && c->mode!=ORDWR)) | |
| 1990/0321 | return 0; | |
| 1990/0227 | n = sprint(buf, "%s %d: ", u->p->text, u->p->pid); n = donprint(buf+n, buf+sizeof(buf), fmt, (&fmt+1)) - buf; qlock(c); if(waserror()){ qunlock(c); | |
| 1990/0321 | return 0; | |
| 1990/0227 | } (*devtab[c->type].write)(c, buf, n); c->offset += n; qunlock(c); | |
| 1990/0321 | poperror(); | |
| 1990/0227 | return n; } | |
| 1990/0321/sys/src/9/port/devcons.c:239,244 – 1990/0504/sys/src/9/port/devcons.c:239,246 (short | long) | ||
| 1990/0227 | DEBUG(); if(c == 0x15) putstrn("^U\n", 3); | |
| 1990/0504 | if(c == 0x16) dumpqueues(); | |
| 1990/0227 | else{ ch = c; putstrn(&ch, 1); | |
| 1990/0504/sys/src/9/port/devcons.c:144,150 – 1990/06111/sys/src/9/port/devcons.c:144,150 (short | long) | ||
| 1990/0227 | int sprint(char *s, char *fmt, ...) { | |
| 1990/03091 |
| |
| 1990/06111 | return doprint(s, s+PRINTSIZE, fmt, (&fmt+1)) - s; | |
| 1990/0227 | } int | |
| 1990/0504/sys/src/9/port/devcons.c:153,159 – 1990/06111/sys/src/9/port/devcons.c:153,159 | ||
| 1990/0227 | char buf[PRINTSIZE]; int n; | |
| 1990/06111 | n = doprint(buf, buf+sizeof(buf), fmt, (&fmt+1)) - buf; | |
| 1990/0227 | putstrn(buf, n); return n; } | |
| 1990/0504/sys/src/9/port/devcons.c:165,171 – 1990/06111/sys/src/9/port/devcons.c:165,171 | ||
| 1990/0227 | int n; strcpy(buf, "panic: "); | |
| 1990/06111 | n = doprint(buf+7, buf+sizeof(buf), fmt, (&fmt+1)) - buf; | |
| 1990/0227 | buf[n] = '\n'; putstrn(buf, n+1); exit(); | |
| 1990/0504/sys/src/9/port/devcons.c:182,188 – 1990/06111/sys/src/9/port/devcons.c:182,188 | ||
| 1990/0227 | if(c==0 || (c->mode!=OWRITE && c->mode!=ORDWR)) | |
| 1990/0321 | return 0; | |
| 1990/0227 | n = sprint(buf, "%s %d: ", u->p->text, u->p->pid); | |
| 1990/06111 | n = doprint(buf+n, buf+sizeof(buf), fmt, (&fmt+1)) - buf; | |
| 1990/0227 | qlock(c); if(waserror()){ qunlock(c); | |
| 1990/06111/sys/src/9/port/devcons.c:315,321 – 1990/0614/sys/src/9/port/devcons.c:315,321 (short | long) | ||
| 1990/0227 | long seconds(void) { | |
| 1990/0614 | return boottime + TK2MS(MACHP(0)->ticks); | |
| 1990/0227 | } int | |
| 1990/06111/sys/src/9/port/devcons.c:470,476 – 1990/0614/sys/src/9/port/devcons.c:470,476 | ||
| 1990/0227 | l = u->p->time[i]; if(i == TReal) l = MACHP(0)->ticks - l; | |
| 1990/0614 | l = TK2MS(l); | |
| 1990/0227 | readnum(0, tmp+NUMSIZE*i, NUMSIZE, l, NUMSIZE); } memcpy(buf, tmp+k, n); | |
| 1990/06111/sys/src/9/port/devcons.c:486,492 – 1990/0614/sys/src/9/port/devcons.c:486,492 | ||
| 1990/0227 | return readnum(c->offset, buf, n, u->p->parentpid, NUMSIZE); case Qtime: | |
| 1990/0614 | return readnum(c->offset, buf, n, boottime+TK2MS(MACHP(0)->ticks), 12); | |
| 1990/0227 | case Quser: return readstr(c->offset, buf, n, u->p->pgrp->user); | |
| 1990/0614/sys/src/9/port/devcons.c:425,430 – 1990/0617/sys/src/9/port/devcons.c:425,434 (short | long) | ||
| 1990/0227 | case Qcons: qlock(&kbdq); | |
| 1990/0617 | if(waserror()){ qunlock(&kbdq); nexterror(); } | |
| 1990/0227 | while(!cangetc(&lineq)){ sleep(&kbdq.r, (int(*)(void*))isbrkc, &kbdq); do{ | |
| 1990/0614/sys/src/9/port/devcons.c:486,492 – 1990/0617/sys/src/9/port/devcons.c:490,496 | ||
| 1990/0227 | return readnum(c->offset, buf, n, u->p->parentpid, NUMSIZE); case Qtime: | |
| 1990/0614 |
| |
| 1990/0617 | return readnum(c->offset, buf, n, boottime+TK2SEC(MACHP(0)->ticks), 12); | |
| 1990/0227 | case Quser: return readstr(c->offset, buf, n, u->p->pgrp->user); | |
| 1990/0617/sys/src/9/port/devcons.c:315,321 – 1990/0620/sys/src/9/port/devcons.c:315,321 (short | long) | ||
| 1990/0227 | long seconds(void) { | |
| 1990/0614 |
| |
| 1990/0620 | return boottime + TK2SEC(MACHP(0)->ticks); | |
| 1990/0227 | } int | |
| 1990/0620/sys/src/9/port/devcons.c:240,246 – 1990/0629/sys/src/9/port/devcons.c:240,246 (short | long) | ||
| 1990/0227 | if(c == 0x15) putstrn("^U\n", 3); | |
| 1990/0504 | if(c == 0x16) | |
| 1990/0629 | urpdump(); | |
| 1990/0227 | else{ ch = c; putstrn(&ch, 1); | |
| 1990/0629/sys/src/9/port/devcons.c:240,246 – 1990/0707/sys/src/9/port/devcons.c:240,246 (short | long) | ||
| 1990/0227 | if(c == 0x15) putstrn("^U\n", 3); | |
| 1990/0504 | if(c == 0x16) | |
| 1990/0629 |
| |
| 1990/0707 | dumpqueues(); | |
| 1990/0227 | else{ ch = c; putstrn(&ch, 1); | |
| 1990/0707/sys/src/9/port/devcons.c:89,94 – 1990/0718/sys/src/9/port/devcons.c:89,95 (short | long) | ||
| 1990/0227 | s = splhi(); lock(&printq); | |
| 1990/0718 | syslog(str, n); | |
| 1990/0227 | while(n > 0){ if(*str == '\n') puts("\r", 1); | |
| 1990/0718/sys/src/9/port/devcons.c:290,295 – 1990/0720/sys/src/9/port/devcons.c:290,296 (short | long) | ||
| 1990/0227 | Qdir, Qcons, Qcputime, | |
| 1990/0720 | Qlog, | |
| 1990/0227 | Qnull, Qpgrpid, Qpid, | |
| 1990/0718/sys/src/9/port/devcons.c:301,306 – 1990/0720/sys/src/9/port/devcons.c:302,308 | ||
| 1990/0227 | Dirtab consdir[]={ "cons", Qcons, 0, 0600, "cputime", Qcputime, 72, 0600, | |
| 1990/0720 | "log", Qlog, sizeof(SYSLOG->buf), 0600, | |
| 1990/0227 | "null", Qnull, 0, 0600, "pgrpid", Qpgrpid, 12, 0600, "pid", Qpid, 12, 0600, | |
| 1990/0718/sys/src/9/port/devcons.c:496,501 – 1990/0720/sys/src/9/port/devcons.c:498,506 | ||
| 1990/0227 | case Quser: return readstr(c->offset, buf, n, u->p->pgrp->user); | |
| 1990/0720 | case Qlog: return readlog(c->offset, buf, n); | |
| 1990/0227 | case Qnull: return 0; | |
| 1990/0718/sys/src/9/port/devcons.c:587,590 – 1990/0720/sys/src/9/port/devcons.c:592,660 | ||
| 1990/0227 | consuserstr(Error *e, char *buf) { strcpy(buf, u->p->pgrp->user); | |
| 1990/0720 | } /* * crash info */ void sysloginit(void) { Syslog *s; char *p; s = SYSLOG; if(s->magic!=SYSLOGMAGIC || s->next>=&s->buf[sizeof(s->buf)] || s->next<s->buf){ s->next = s->buf; s->magic = SYSLOGMAGIC; } } void syslog(char *p, int n) { int i; Syslog *s; char *end; s = SYSLOG; end = &s->buf[sizeof(s->buf)]; while(n-- > 0){ *s->next++ = *p++; if(s->next >= end) s->next = s->buf; } } long readlog(ulong off, char *buf, ulong n) { Syslog *s; int i; char *p; char *end; s = SYSLOG; /* past end */ if(off >= sizeof(s->buf)) return 0; /* trim length */ if(off + n >= sizeof(s->buf)) n = sizeof(s->buf) - off; /* point to start of area to be read */ end = &s->buf[sizeof(s->buf)]; p = s->next + off; if(p > end) p -= sizeof(s->buf); for(i = 0; i < n; i++){ *buf++ = *p++; if(p >= end) p = s->buf; } return n; | |
| 1990/0227 | } | |
| 1990/0720/sys/src/9/port/devcons.c:169,174 – 1990/0907/sys/src/9/port/devcons.c:169,175 (short | long) | ||
| 1990/06111 | n = doprint(buf+7, buf+sizeof(buf), fmt, (&fmt+1)) - buf; | |
| 1990/0227 | buf[n] = '\n'; putstrn(buf, n+1); | |
| 1990/0907 | dumpstack(); | |
| 1990/0227 | exit(); } | |
| 1990/0907/sys/src/9/port/devcons.c:303,309 – 1990/0912/sys/src/9/port/devcons.c:303,309 (short | long) | ||
| 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 | } | |
| 1990/0912/sys/src/9/port/devcons.c:36,41 – 1990/0928/sys/src/9/port/devcons.c:36,53 (short | long) | ||
| 1990/0227 | IOQ kbdq; /* qlock to getc; interrupt putc's */ IOQ lineq; /* lock to getc; interrupt putc's */ | |
| 1990/0928 | #define SYSLOGMAGIC 0x23456789 #define SYSLOG ((Syslog *)(UNCACHED | KZERO | 0x1B00)) typedef struct Syslog Syslog; struct Syslog { ulong magic; char *start; char *next; char buf[2*BY2PG - 3*BY2WD]; }; | |
| 1990/0227 | void printinit(void) { | |
| 1990/0912/sys/src/9/port/devcons.c:55,60 – 1990/0928/sys/src/9/port/devcons.c:67,73 | ||
| 1990/0227 | unlock(&lineq); duartinit(); | |
| 1990/0928 | sysloginit(); /* must be at the end of printinit */ | |
| 1990/0227 | } /* | |
| 1990/0912/sys/src/9/port/devcons.c:164,169 – 1990/0928/sys/src/9/port/devcons.c:177,183 | ||
| 1990/0227 | { char buf[PRINTSIZE]; int n; | |
| 1990/0928 | Syslog *s; | |
| 1990/0227 | strcpy(buf, "panic: "); | |
| 1990/06111 | n = doprint(buf+7, buf+sizeof(buf), fmt, (&fmt+1)) - buf; | |
| 1990/0912/sys/src/9/port/devcons.c:170,175 – 1990/0928/sys/src/9/port/devcons.c:184,191 | ||
| 1990/0227 | buf[n] = '\n'; putstrn(buf, n+1); | |
| 1990/0907 | dumpstack(); | |
| 1990/0928 | s = SYSLOG; print("start/next is %lux/%lux\n", s->start, s->next); | |
| 1990/0227 | exit(); } | |
| 1990/0912/sys/src/9/port/devcons.c:598,627 – 1990/0928/sys/src/9/port/devcons.c:614,636 | ||
| 1990/0720 | /* | |
| 1990/0912 | * kernel based system log, passed between crashes | |
| 1990/0720 | */ | |
| 1990/0912 |
| |
| 1990/0720 | void sysloginit(void) { Syslog *s; | |
| 1990/0928 | char *start, *next; | |
| 1990/0720 | s = SYSLOG; | |
| 1990/0912 |
| |
| 1990/0928 | next = s->next; start = s->start; if(s->magic!=SYSLOGMAGIC || next>=&s->buf[sizeof(s->buf)] || start>=&s->buf[sizeof(s->buf)] || next<s->buf){ | |
| 1990/0912 | s->start = s->buf; | |
| 1990/0720 | s->next = s->buf; s->magic = SYSLOGMAGIC; } | |
| 1990/0928 | print("start/next is %lux/%lux was %lux/%lux\n", s->start, s->next, start, next); | |
| 1990/0720 | } void | |
| 1990/0928/sys/src/9/port/devcons.c:36,50 – 1990/1018/sys/src/9/port/devcons.c:36,50 (short | long) | ||
| 1990/0227 | IOQ kbdq; /* qlock to getc; interrupt putc's */ IOQ lineq; /* lock to getc; interrupt putc's */ | |
| 1990/0928 |
| |
| 1990/1018 | #define SYSLOGMAGIC 0xdeadbeaf #define SYSLOG ((Syslog *)(UNCACHED | 0x1B00)) | |
| 1990/0928 | typedef struct Syslog Syslog; struct Syslog { ulong magic; | |
| 1990/1018 | int wrapped; | |
| 1990/0928 | char *next; | |
| 1990/1018 | char buf[2*1024]; | |
| 1990/0928 | }; | |
| 1990/0928/sys/src/9/port/devcons.c:67,73 – 1990/1018/sys/src/9/port/devcons.c:67,72 | ||
| 1990/0227 | unlock(&lineq); duartinit(); | |
| 1990/0928 |
| |
| 1990/0227 | } /* | |
| 1990/0928/sys/src/9/port/devcons.c:177,183 – 1990/1018/sys/src/9/port/devcons.c:176,181 | ||
| 1990/0227 | { char buf[PRINTSIZE]; int n; | |
| 1990/0928 |
| |
| 1990/0227 | strcpy(buf, "panic: "); | |
| 1990/06111 | n = doprint(buf+7, buf+sizeof(buf), fmt, (&fmt+1)) - buf; | |
| 1990/0928/sys/src/9/port/devcons.c:184,191 – 1990/1018/sys/src/9/port/devcons.c:182,187 | ||
| 1990/0227 | buf[n] = '\n'; putstrn(buf, n+1); | |
| 1990/0907 | dumpstack(); | |
| 1990/0928 |
| |
| 1990/0227 | exit(); } | |
| 1990/0928/sys/src/9/port/devcons.c:309,314 – 1990/1018/sys/src/9/port/devcons.c:305,311 | ||
| 1990/0227 | Qcputime, | |
| 1990/0720 | Qlog, | |
| 1990/0227 | Qnull, | |
| 1990/1018 | /* Qpanic, /**/ | |
| 1990/0227 | Qpgrpid, Qpid, Qppid, | |
| 1990/0928/sys/src/9/port/devcons.c:321,326 – 1990/1018/sys/src/9/port/devcons.c:318,324 | ||
| 1990/0227 | "cputime", Qcputime, 72, 0600, | |
| 1990/0912 | "log", Qlog, BY2PG-8, 0600, | |
| 1990/0227 | "null", Qnull, 0, 0600, | |
| 1990/1018 | /* "panic", Qpanic, 0, 0666, /**/ | |
| 1990/0227 | "pgrpid", Qpgrpid, 12, 0600, "pid", Qpid, 12, 0600, "ppid", Qppid, 12, 0600, | |
| 1990/0928/sys/src/9/port/devcons.c:618,695 – 1990/1018/sys/src/9/port/devcons.c:616,726 | ||
| 1990/0720 | sysloginit(void) { Syslog *s; | |
| 1990/0928 |
| |
| 1990/1018 | int i; | |
| 1990/0720 | s = SYSLOG; | |
| 1990/0928 |
| |
| 1990/0912 |
| |
| 1990/1018 | if(s->magic!=SYSLOGMAGIC || s->next>=&s->buf[sizeof(s->buf)] || s->next<s->buf){ s->wrapped = 0; | |
| 1990/0720 | s->next = s->buf; s->magic = SYSLOGMAGIC; } | |
| 1990/0928 |
| |
| 1990/0720 | } void syslog(char *p, int n) { | |
| 1990/0912 |
| |
| 1990/0720 | Syslog *s; char *end; | |
| 1990/1018 | int m; | |
| 1990/0720 | ||
| 1990/1018 | sysloginit(); | |
| 1990/0720 | s = SYSLOG; end = &s->buf[sizeof(s->buf)]; | |
| 1990/0912 |
| |
| 1990/0720 |
| |
| 1990/1018 | while(n){ if(s->next + n > end) m = end - s->next; else m = n; memcpy(s->next, p, m); s->next += m; p += m; n -= m; if(s->next >= end){ s->wrapped = 1; | |
| 1990/0720 | s->next = s->buf; | |
| 1990/0912 |
| |
| 1990/1018 | } | |
| 1990/0720 | } | |
| 1990/0912 |
| |
| 1990/0720 | } long | |
| 1990/1018 | readlog(ulong off, char *buf, ulong len) | |
| 1990/0720 | { Syslog *s; | |
| 1990/0912 |
| |
| 1990/1018 | char *start; int n, m; char *p; | |
| 1990/0720 | ||
| 1990/1018 | n = len; p = buf; sysloginit(); | |
| 1990/0720 | s = SYSLOG; | |
| 1990/1018 | end = &s->buf[sizeof(s->buf)]; | |
| 1990/0720 |
| |
| 1990/1018 | if(s->wrapped){ start = s->next; m = sizeof(s->buf); } else { start = s->buf; m = s->next - start; } if(off > m) | |
| 1990/0720 | return 0; | |
| 1990/1018 | if(off + n > m) n = m - off; start += off; if(start > end) start -= sizeof(s->buf); | |
| 1990/0720 |
| |
| 1990/1018 | while(n > 0){ if(start + n > end) m = end - start; else m = n; memcpy(p, start, m); start += m; p += m; n -= m; if(start >= end) start = s->buf; } return p-buf; } /* * Read and write every byte of the log. This seems to ensure that * on reboot, the bytes will really be in memory. I don't understand -- presotto */ void flushsyslog(void) { Syslog *s; char *p, *end; int x; s = SYSLOG; | |
| 1990/0720 | end = &s->buf[sizeof(s->buf)]; | |
| 1990/0912 |
| |
| 1990/0720 | ||
| 1990/0912 |
| |
| 1990/1018 | x = splhi(); lock(&printq); for(p = s->buf; p < end; p++) *p = *p; unlock(&printq); splx(x); | |
| 1990/0912 |
| |
| 1990/0720 |
| |
| 1990/0912 |
| |
| 1990/1018 | wbflush(); | |
| 1990/0227 | } | |
| 1990/1018/sys/src/9/port/devcons.c:311,316 – 1990/11161/sys/src/9/port/devcons.c:311,317 (short | long) | ||
| 1990/0227 | Qppid, Qtime, Quser, | |
| 1990/11161 | Qvmereset, | |
| 1990/0227 | }; Dirtab consdir[]={ | |
| 1990/1018/sys/src/9/port/devcons.c:324,329 – 1990/11161/sys/src/9/port/devcons.c:325,331 | ||
| 1990/0227 | "ppid", Qppid, 12, 0600, "time", Qtime, 12, 0600, "user", Quser, 0, 0600, | |
| 1990/11161 | "vmereset", Qvmereset, 0, 0600, | |
| 1990/0227 | }; #define NCONS (sizeof consdir/sizeof(Dirtab)) | |
| 1990/1018/sys/src/9/port/devcons.c:579,584 – 1990/11161/sys/src/9/port/devcons.c:581,593 | ||
| 1990/0227 | case Qnull: break; | |
| 1990/11161 | case Qvmereset: if(strcmp(u->p->pgrp->user, "bootes") != 0) error(0, Eperm); vmereset(); break; | |
| 1990/0227 | default: error(0, Egreg); } | |
| 1990/11161/sys/src/9/port/devcons.c:315,331 – 1990/11211/sys/src/9/port/devcons.c:315,331 (short | long) | ||
| 1990/0227 | }; Dirtab consdir[]={ | |
| 1990/0912 |
| |
| 1990/0227 |
| |
| 1990/1018 |
| |
| 1990/0227 |
| |
| 1990/11161 |
| |
| 1990/11211 | "cons", {Qcons}, 0, 0600, "cputime", {Qcputime}, 72, 0600, "log", {Qlog}, BY2PG-8, 0600, "null", {Qnull}, 0, 0600, /* "panic", {Qpanic}, 0, 0666, /**/ "pgrpid", {Qpgrpid}, 12, 0600, "pid", {Qpid}, 12, 0600, "ppid", {Qppid}, 12, 0600, "time", {Qtime}, 12, 0600, "user", {Quser}, 0, 0600, "vmereset", {Qvmereset}, 0, 0600, | |
| 1990/0227 | }; #define NCONS (sizeof consdir/sizeof(Dirtab)) | |
| 1990/11161/sys/src/9/port/devcons.c:405,416 – 1990/11211/sys/src/9/port/devcons.c:405,416 | ||
| 1990/0227 | Chan* consopen(Chan *c, int omode) { | |
| 1990/11211 | if(c->qid.path==Quser && omode==(OWRITE|OTRUNC)){ | |
| 1990/0227 | /* truncate? */ if(strcmp(u->p->pgrp->user, "bootes") == 0) /* BUG */ u->p->pgrp->user[0] = 0; else | |
| 1990/11211 | error(Eperm); | |
| 1990/0227 | } return devopen(c, omode, consdir, NCONS, devgen); } | |
| 1990/11161/sys/src/9/port/devcons.c:418,424 – 1990/11211/sys/src/9/port/devcons.c:418,424 | ||
| 1990/0227 | void conscreate(Chan *c, char *name, int omode, ulong perm) { | |
| 1990/11211 | error(Eperm); | |
| 1990/0227 | } void | |
| 1990/11161/sys/src/9/port/devcons.c:439,445 – 1990/11211/sys/src/9/port/devcons.c:439,445 | ||
| 1990/0227 | if(n <= 0) return n; | |
| 1990/11211 | switch(c->qid.path & ~CHDIR){ | |
| 1990/0227 | case Qdir: return devdirread(c, buf, n, consdir, NCONS, devgen); | |
| 1990/11161/sys/src/9/port/devcons.c:535,541 – 1990/11211/sys/src/9/port/devcons.c:535,541 | ||
| 1990/0227 | long l, m; char *a = va; | |
| 1990/11211 | switch(c->qid.path){ | |
| 1990/0227 | case Qcons: /* * Damn. Can't page fault in putstrn, so copy the data locally. | |
| 1990/11161/sys/src/9/port/devcons.c:564,570 – 1990/11211/sys/src/9/port/devcons.c:564,570 | ||
| 1990/0227 | case Quser: if(u->p->pgrp->user[0]) /* trying to overwrite /dev/user */ | |
| 1990/11211 | error(Eperm); | |
| 1990/0227 | if(c->offset >= NAMELEN-1) return 0; if(c->offset+n >= NAMELEN-1) | |
| 1990/11161/sys/src/9/port/devcons.c:577,583 – 1990/11211/sys/src/9/port/devcons.c:577,583 | ||
| 1990/0227 | case Qpgrpid: case Qpid: case Qppid: | |
| 1990/11211 | error(Eperm); | |
| 1990/0227 | case Qnull: break; | |
| 1990/11161/sys/src/9/port/devcons.c:584,595 – 1990/11211/sys/src/9/port/devcons.c:584,595 | ||
| 1990/11161 | case Qvmereset: if(strcmp(u->p->pgrp->user, "bootes") != 0) | |
| 1990/11211 | error(Eperm); | |
| 1990/11161 | vmereset(); break; | |
| 1990/0227 | default: | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } return n; } | |
| 1990/11161/sys/src/9/port/devcons.c:597,621 – 1990/11211/sys/src/9/port/devcons.c:597,609 | ||
| 1990/0227 | void consremove(Chan *c) { | |
| 1990/11211 | error(Eperm); | |
| 1990/0227 | } void conswstat(Chan *c, char *dp) { | |
| 1990/11211 | error(Eperm); | |
| 1990/0720 | } /* | |
| 1990/11211/sys/src/9/port/devcons.c:255,260 – 1990/1231/sys/src/9/port/devcons.c:255,264 (short | long) | ||
| 1990/0227 | putstrn("^U\n", 3); | |
| 1990/0504 | if(c == 0x16) | |
| 1990/0707 | dumpqueues(); | |
| 1990/1231 | if(c == 0xe) nonettoggle(); if(c == 0xc) lancetoggle(); | |
| 1990/0227 | else{ ch = c; putstrn(&ch, 1); | |
| 1990/1231/sys/src/9/port/devcons.c:82,88 – 1991/0318/sys/src/9/port/devcons.c:82,88 (short | long) | ||
| 1990/0227 | printq.c = *s++; n--; } | |
| 1991/0318 | memmove(printq.in, s, n); | |
| 1990/0227 | printq.in += n; if(printq.in >= printq.buf+sizeof(printq.buf)) printq.in = printq.buf; | |
| 1990/1231/sys/src/9/port/devcons.c:354,360 – 1991/0318/sys/src/9/port/devcons.c:354,360 | ||
| 1990/0312 | return 0; | |
| 1990/0227 | if(off+n > size) n = size-off; | |
| 1991/0318 | memmove(buf, tmp+off, n); | |
| 1990/0227 | return n; } | |
| 1990/1231/sys/src/9/port/devcons.c:368,374 – 1991/0318/sys/src/9/port/devcons.c:368,374 | ||
| 1990/0312 | return 0; | |
| 1990/0227 | if(off+n > size) n = size-off; | |
| 1991/0318 | memmove(buf, str+off, n); | |
| 1990/0227 | return n; } | |
| 1990/1231/sys/src/9/port/devcons.c:501,507 – 1991/0318/sys/src/9/port/devcons.c:501,507 | ||
| 1990/0614 | l = TK2MS(l); | |
| 1990/0227 | readnum(0, tmp+NUMSIZE*i, NUMSIZE, l, NUMSIZE); } | |
| 1991/0318 | memmove(buf, tmp+k, n); | |
| 1990/0227 | return n; case Qpgrpid: | |
| 1990/1231/sys/src/9/port/devcons.c:549,555 – 1991/0318/sys/src/9/port/devcons.c:549,555 | ||
| 1990/0227 | m = l; if(m > sizeof buf) m = sizeof buf; | |
| 1991/0318 | memmove(buf, a, m); | |
| 1990/0227 | putstrn(a, m); a += m; l -= m; | |
| 1990/1231/sys/src/9/port/devcons.c:561,567 – 1991/0318/sys/src/9/port/devcons.c:561,567 | ||
| 1990/0227 | return 0; if(n >= sizeof cbuf) n = sizeof cbuf - 1; | |
| 1991/0318 | memmove(cbuf, a, n); | |
| 1990/0227 | cbuf[n-1] = 0; boottime = strtoul(a, 0, 0); break; | |
| 1990/1231/sys/src/9/port/devcons.c:573,579 – 1991/0318/sys/src/9/port/devcons.c:573,579 | ||
| 1990/0227 | return 0; if(c->offset+n >= NAMELEN-1) n = NAMELEN-1 - c->offset; | |
| 1991/0318 | memmove(u->p->pgrp->user+c->offset, a, n); | |
| 1990/0227 | u->p->pgrp->user[c->offset+n] = 0; break; | |
| 1990/1231/sys/src/9/port/devcons.c:642,648 – 1991/0318/sys/src/9/port/devcons.c:642,648 | ||
| 1990/1018 | m = end - s->next; else m = n; | |
| 1991/0318 | memmove(s->next, p, m); | |
| 1990/1018 | s->next += m; p += m; n -= m; | |
| 1990/1231/sys/src/9/port/devcons.c:691,697 – 1991/0318/sys/src/9/port/devcons.c:691,697 | ||
| 1990/1018 | m = end - start; else m = n; | |
| 1991/0318 | memmove(p, start, m); | |
| 1990/1018 | start += m; p += m; n -= m; | |
| 1991/0318/sys/src/9/port/devcons.c:249,254 – 1991/0327/sys/src/9/port/devcons.c:249,256 (short | long) | ||
| 1990/0227 | /* * ^t hack BUG */ | |
| 1991/0327 | if(c == 0x10) panic("^p"); | |
| 1990/0227 | if(c == 0x14) DEBUG(); if(c == 0x15) | |
| 1991/0318/sys/src/9/port/devcons.c:272,277 – 1991/0327/sys/src/9/port/devcons.c:274,281 | ||
| 1990/0227 | void kbdchar(int c) { | |
| 1991/0327 | if(c == 0) /* NULs cause trouble */ return; | |
| 1990/0227 | if(c == '\r') c = '\n'; echo(c); | |
| 1991/0327/sys/src/9/port/devcons.c:249,255 – 1991/0403/sys/src/9/port/devcons.c:249,255 (short | long) | ||
| 1990/0227 | /* * ^t hack BUG */ | |
| 1991/0327 |
| |
| 1991/0403 | if(c == 0x18) | |
| 1991/0327 | panic("^p"); | |
| 1990/0227 | if(c == 0x14) DEBUG(); | |
| 1991/0403/sys/src/9/port/devcons.c:197,210 – 1991/0411/sys/src/9/port/devcons.c:197,210 (short | long) | ||
| 1990/0321 | return 0; | |
| 1990/0227 | n = sprint(buf, "%s %d: ", u->p->text, u->p->pid); | |
| 1990/06111 | n = doprint(buf+n, buf+sizeof(buf), fmt, (&fmt+1)) - buf; | |
| 1990/0227 |
| |
| 1991/0411 | qlock(&c->wrl); | |
| 1990/0227 | if(waserror()){ | |
| 1991/0411 | qunlock(&c->wrl); | |
| 1990/0321 | return 0; | |
| 1990/0227 | } | |
| 1991/0411 | (*devtab[c->type].write)(c, buf, n, c->offset); | |
| 1990/0227 | c->offset += n; | |
| 1991/0411 | qunlock(&c->wrl); | |
| 1990/0321 | poperror(); | |
| 1990/0227 | return n; } | |
| 1991/0403/sys/src/9/port/devcons.c:435,441 – 1991/0411/sys/src/9/port/devcons.c:435,441 | ||
| 1990/0227 | } long | |
| 1991/0411 | consread(Chan *c, void *buf, long n, ulong offset) | |
| 1990/0227 | { int ch, i, j, k; ulong l; | |
| 1991/0403/sys/src/9/port/devcons.c:492,498 – 1991/0411/sys/src/9/port/devcons.c:492,498 | ||
| 1990/0227 | return i; case Qcputime: | |
| 1990/0312 |
| |
| 1991/0411 | k = offset; | |
| 1990/0312 | if(k >= sizeof tmp) return 0; | |
| 1990/0227 | if(k+n > sizeof tmp) | |
| 1991/0403/sys/src/9/port/devcons.c:509,530 – 1991/0411/sys/src/9/port/devcons.c:509,530 | ||
| 1990/0227 | return n; case Qpgrpid: | |
| 1991/0411 | return readnum(offset, buf, n, u->p->pgrp->pgrpid, NUMSIZE); | |
| 1990/0227 | case Qpid: | |
| 1991/0411 | return readnum(offset, buf, n, u->p->pid, NUMSIZE); | |
| 1990/0227 | case Qppid: | |
| 1991/0411 | return readnum(offset, buf, n, u->p->parentpid, NUMSIZE); | |
| 1990/0227 | case Qtime: | |
| 1990/0617 |
| |
| 1991/0411 | return readnum(offset, buf, n, boottime+TK2SEC(MACHP(0)->ticks), 12); | |
| 1990/0227 | case Quser: | |
| 1991/0411 | return readstr(offset, buf, n, u->p->pgrp->user); | |
| 1990/0227 | ||
| 1990/0720 | case Qlog: | |
| 1991/0411 | return readlog(offset, buf, n); | |
| 1990/0720 | ||
| 1990/0227 | case Qnull: return 0; | |
| 1991/0403/sys/src/9/port/devcons.c:536,542 – 1991/0411/sys/src/9/port/devcons.c:536,542 | ||
| 1990/0227 | } long | |
| 1991/0411 | conswrite(Chan *c, void *va, long n, ulong offset) | |
| 1990/0227 | { char cbuf[64]; char buf[256]; | |
| 1991/0403/sys/src/9/port/devcons.c:573,584 – 1991/0411/sys/src/9/port/devcons.c:573,584 | ||
| 1990/0227 | case Quser: if(u->p->pgrp->user[0]) /* trying to overwrite /dev/user */ | |
| 1990/11211 | error(Eperm); | |
| 1990/0227 |
| |
| 1991/0411 | if(offset >= NAMELEN-1) | |
| 1990/0227 | return 0; | |
| 1991/0318 |
| |
| 1990/0227 |
| |
| 1991/0411 | if(offset+n >= NAMELEN-1) n = NAMELEN-1 - offset; memmove(u->p->pgrp->user+offset, a, n); u->p->pgrp->user[offset+n] = 0; | |
| 1990/0227 | break; case Qcputime: | |
| 1991/0411/sys/src/9/port/devcons.c:404,409 – 1991/0419/sys/src/9/port/devcons.c:404,415 (short | long) | ||
| 1990/0227 | return devwalk(c, name, consdir, NCONS, devgen); } | |
| 1991/0419 | Chan* consclwalk(Chan *c, char *name) { return devclwalk(c, name); } | |
| 1990/0227 | void consstat(Chan *c, char *dp) { | |
| Too many diffs (26 > 25). Stopping. | ||