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,3091990/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    
	"log",		Qlog,		sizeof(SYSLOG->buf),	0600, 
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,6031990/0912/sys/src/9/port/devcons.c:596,614
1990/0720    
} 
 
/* 
 *  crash info 
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,6121990/0912/sys/src/9/port/devcons.c:617,624
1990/0720    
 
	s = SYSLOG; 
	if(s->magic!=SYSLOGMAGIC || s->next>=&s->buf[sizeof(s->buf)] 
	|| s->next<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,6311990/0912/sys/src/9/port/devcons.c:627,652
1990/0720    
void 
syslog(char *p, int n) 
{ 
	int i; 
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,6401990/0912/sys/src/9/port/devcons.c:653,661
1990/0720    
readlog(ulong off, char *buf, ulong n) 
{ 
	Syslog *s; 
	int i; 
	char *p; 
	char *end; 
1990/0912    
	char *a = buf; 
1990/0720    
 
	s = SYSLOG; 
 
1990/0907/sys/src/9/port/devcons.c:642,6611990/0912/sys/src/9/port/devcons.c:663,686
1990/0720    
	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); 
1990/0912    
	p = s->start; 
1990/0720    
 
	for(i = 0; i < n; i++){ 
		*buf++ = *p++; 
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; 
	} 
	return n; 
1990/0912    
	return a-buf; 
1990/0227    
} 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)