## diffname port/log.c 1999/0316 ## diff -e /dev/null /n/emeliedump/1999/0316/sys/src/brazil/port/log.c 0a #include "u.h" #include "../port/lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "../port/error.h" static char Ebadlogctl[] = "unknown log ctl message"; enum { Nlog = 4*1024, }; void logopen(Log *alog) { lock(alog); if(waserror()){ unlock(alog); nexterror(); } if(alog->opens == 0){ if(alog->buf == nil) alog->buf = malloc(Nlog); alog->rptr = alog->buf; alog->end = alog->buf + Nlog; } alog->opens++; unlock(alog); poperror(); } void logclose(Log *alog) { lock(alog); if(waserror()){ unlock(alog); nexterror(); } alog->opens--; if(alog->opens == 0){ free(alog->buf); alog->buf = nil; } unlock(alog); poperror(); } static int logready(void *a) { Log *alog = a; return alog->len; } long logread(Log *alog, void *a, ulong, long n) { int i, d; char *p, *rptr; qlock(&alog->readq); if(waserror()){ qunlock(&alog->readq); nexterror(); } for(;;){ lock(alog); if(alog->len){ if(n > alog->len) n = alog->len; d = 0; rptr = alog->rptr; alog->rptr += n; if(alog->rptr >= alog->end){ d = alog->rptr - alog->end; alog->rptr = alog->buf + d; } alog->len -= n; unlock(alog); i = n; p = a; if(d){ memmove(p, rptr, d); i -= d; p += d; rptr = alog->buf; } memmove(p, rptr, i); break; } else unlock(alog); sleep(&alog->readr, logready, alog); } qunlock(&alog->readq); poperror(); return n; } char* logctl(Log *alog, int argc, char *argv[], Logflag *flags) { int i, n, set; Logflag *fp; if(argc < 2) return Ebadlogctl; if(strcmp("set", argv[0]) == 0) set = 1; else if(strcmp("clear", argv[0]) == 0) set = 0; else return Ebadlogctl; for(i = 1; i < argc; i++){ for(fp = flags; fp->name; fp++) if(strcmp(fp->name, argv[i]) == 0) break; if(fp->name == nil) continue; if(set) alog->logmask |= fp->mask; else alog->logmask &= ~fp->mask; } return nil; } void log(Log *alog, int mask, char *fmt, ...) { char buf[128], *t, *fp; int i, n; va_list arg; if(!(alog->logmask & mask)) return; va_start(arg, fmt); n = doprint(buf, buf+sizeof(buf), fmt, arg) - buf; va_end(arg); if(alog->opens == 0) return; lock(alog); i = alog->len + n - Nlog; if(i > 0){ alog->len -= i; alog->rptr += i; if(alog->rptr >= alog->end) alog->rptr = alog->buf + (alog->rptr - alog->end); } t = alog->rptr + alog->len; fp = buf; alog->len += n; while(n-- > 0){ if(t >= alog->end) t = alog->buf + (t - alog->end); *t++ = *fp++; } unlock(alog); wakeup(&alog->readr); } . ## diffname port/log.c 1999/0630 ## diff -e /n/emeliedump/1999/0316/sys/src/brazil/port/log.c /n/emeliedump/1999/0630/sys/src/brazil/port/log.c 111c int i, set; . ## diffname port/log.c 1999/0731 ## diff -e /n/emeliedump/1999/0630/sys/src/brazil/port/log.c /n/emeliedump/1999/0731/sys/src/brazil/port/log.c 93a memmove(p+i, alog->buf, d); . 87,92d 85c i = n-d; . ## diffname port/log.c 2000/1018 ## diff -e /n/emeliedump/1999/0731/sys/src/brazil/port/log.c /n/emeliedump/2000/1018/sys/src/9/port/log.c 170a void vlog(Log *alog, int mask, char *fmt, va_list arg) { char buf[128]; int n; if(!(alog->logmask & mask)) return; if(alog->opens == 0) return; n = doprint(buf, buf+sizeof(buf), fmt, arg) - buf; logn(alog, mask, buf, n); } void log(Log *alog, int mask, char *fmt, ...) { va_list arg; va_start(arg, fmt); vlog(alog, mask, fmt, arg); va_end(arg); } . 169c if(dowake) wakeup(&alog->readr); . 166a dowake = alog->len >= alog->minread; . 152c i = alog->len + n - alog->nlog; . 150a if(n > alog->nlog) return; . 144,147d 137,139c char *fp, *t; int dowake, i; . 135c logn(Log *alog, int mask, void *buf, int n) . 72c if(alog->len >= alog->minread || alog->len >= n){ . 55c return alog->len >= alog->minread; . 26c alog->end = alog->buf + alog->nlog; alog->len = 0; . 24c alog->buf = malloc(alog->nlog); . 22a if(alog->nlog == 0) alog->nlog = 4*1024; if(alog->minread == 0) alog->minread = 1; . 10,13d ## diffname port/log.c 2001/0503 ## diff -e /n/emeliedump/2000/1018/sys/src/9/port/log.c /n/emeliedump/2001/0503/sys/src/9/port/log.c 48d 38,41d ## diffname port/log.c 2002/0217 ## diff -e /n/emeliedump/2001/0503/sys/src/9/port/log.c /n/emeliedump/2002/0217/sys/src/9/port/log.c 194a logn(alog, mask, buf, n); } . 193d 191c n = vseprint(buf, buf+sizeof(buf), fmt, arg) - buf; . 180,189d 172a va_list arg; char buf[128]; . 171d 169c log(Log *alog, int mask, char *fmt, ...) .