/* @(#)err.c 1.1 */ #include "sys/param.h" #include "sys/types.h" #include "sys/buf.h" #include "sys/dir.h" #include "sys/signal.h" #include "sys/user.h" #include "sys/errno.h" #include "sys/file.h" #include "sys/utsname.h" #include "sys/elog.h" #include "sys/erec.h" static short logging; erropen(dev,flg) { if(logging) { u.u_error = EBUSY; return; } if((flg&FWRITE) || dev != 0) { u.u_error = ENXIO; return; } if(suser()) { logstart(); logging++; } } /* ARGSUSED */ errclose(dev,flg) { logging = 0; } /* ARGSUSED */ errread(dev) { register struct errhdr *eup; register n; struct errhdr *geterec(); if(logging == 0) return; eup = geterec(); n = min((unsigned)eup->e_len, u.u_count); if (copyout((caddr_t)eup, u.u_base, n)) u.u_error = EFAULT; else u.u_count -= n; freeslot(eup); }