plan 9 kernel history: overview | file list | diff list

1990/11211/port/devcons.c (diff list | history)

1990/11161/sys/src/9/port/devcons.c:315,3311990/11211/sys/src/9/port/devcons.c:315,331 (short | long | prev | next)
1990/0227    
}; 
 
Dirtab consdir[]={ 
	"cons",		Qcons,		0,	0600, 
	"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, 
	"time",		Qtime,		12,	0600, 
	"user",		Quser,		0,	0600, 
1990/11161    
	"vmereset",	Qvmereset,	0,	0600, 
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,4161990/11211/sys/src/9/port/devcons.c:405,416
1990/0227    
Chan* 
consopen(Chan *c, int omode) 
{ 
	if(c->qid==Quser && omode==(OWRITE|OTRUNC)){ 
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 
			error(0, Eperm); 
1990/11211    
			error(Eperm); 
1990/0227    
	} 
	return devopen(c, omode, consdir, NCONS, devgen); 
} 
1990/11161/sys/src/9/port/devcons.c:418,4241990/11211/sys/src/9/port/devcons.c:418,424
1990/0227    
void 
conscreate(Chan *c, char *name, int omode, ulong perm) 
{ 
	error(0, Eperm); 
1990/11211    
	error(Eperm); 
1990/0227    
} 
 
void 
1990/11161/sys/src/9/port/devcons.c:439,4451990/11211/sys/src/9/port/devcons.c:439,445
1990/0227    
 
	if(n <= 0) 
		return n; 
	switch(c->qid&~CHDIR){ 
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,5411990/11211/sys/src/9/port/devcons.c:535,541
1990/0227    
	long l, m; 
	char *a = va; 
 
	switch(c->qid){ 
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,5701990/11211/sys/src/9/port/devcons.c:564,570
1990/0227    
 
	case Quser: 
		if(u->p->pgrp->user[0])		/* trying to overwrite /dev/user */ 
			error(0, Eperm); 
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,5831990/11211/sys/src/9/port/devcons.c:577,583
1990/0227    
	case Qpgrpid: 
	case Qpid: 
	case Qppid: 
		error(0, Eperm); 
1990/11211    
		error(Eperm); 
1990/0227    
 
	case Qnull: 
		break; 
1990/11161/sys/src/9/port/devcons.c:584,5951990/11211/sys/src/9/port/devcons.c:584,595
1990/11161    
 
	case Qvmereset: 
		if(strcmp(u->p->pgrp->user, "bootes") != 0) 
			error(0, Eperm); 
1990/11211    
			error(Eperm); 
1990/11161    
		vmereset(); 
		break; 
 
1990/0227    
	default: 
		error(0, Egreg); 
1990/11211    
		error(Egreg); 
1990/0227    
	} 
	return n; 
} 
1990/11161/sys/src/9/port/devcons.c:597,6211990/11211/sys/src/9/port/devcons.c:597,609
1990/0227    
void 
consremove(Chan *c) 
{ 
	error(0, Eperm); 
1990/11211    
	error(Eperm); 
1990/0227    
} 
 
void 
conswstat(Chan *c, char *dp) 
{ 
	error(0, Eperm); 
} 
                 
void 
conserrstr(Error *e, char *buf) 
{ 
	rooterrstr(e, buf); 
} 
                 
void 
consuserstr(Error *e, char *buf) 
{ 
	strcpy(buf, u->p->pgrp->user); 
1990/11211    
	error(Eperm); 
1990/0720    
} 
 
/* 


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