~kris/9p

9hist

f962154d1a96ab5d371b33caad539fac6911a6fd — David du Colombier 35 years ago 90fbbe3
Plan 9 from Bell Labs 1991-05-14
6 files changed, 61 insertions(+), 20 deletions(-)

M gnot/devcons.c
M port/devscsi.c
M port/pgrp.c
M port/portdat.h
M port/portfns.h
M port/sysproc.c
M gnot/devcons.c => gnot/devcons.c +2 -2
@@ 70,7 70,7 @@ struct Rs232{
	Queue	*wq;
	Alarm	*a;		/* alarm for waking the rs232 kernel process */
	int	started;	/* true if output interrupt pending */
	int	delay;		/* time between character input and waking kproc */
	int	delay;		/* between character input and waking kproc */
	Rendez	r;
	Rendez	rempty;
};


@@ 1007,7 1007,7 @@ rs232ichar(int c)

	r = &rs232;
	if(putc(&r->in, c) < 0)
		screenputc('^');
		/*screenputc('^')*/;

	/*
	 *  pass upstream within r->delay milliseconds

M port/devscsi.c => port/devscsi.c +6 -0
@@ 31,6 31,12 @@ static int	debugs[8];
static int	isscsi;
static int	ownid = 0x08|7; /* enable advanced features */

void *
dmaalloc(ulong n)
{
	return ialloc(n, 0);
}

static int
scsigen1(Chan *c, long qid, Dir *dp)
{

M port/pgrp.c => port/pgrp.c +24 -15
@@ 182,26 182,13 @@ closemount(Mount *m)
}

void
pgrpcpy(Pgrp *to, Pgrp *from)
envcpy(Pgrp *to, Pgrp *from)
{
	int i;
	Mtab *m;
	Envp *ep;
	Env *e;
	int i;

	lock(from);
	memmove(to->user, from->user, NAMELEN);
	memmove(to->mtab, from->mtab, from->nmtab*sizeof(Mtab));
	to->nmtab = from->nmtab;
	m = to->mtab;
	for(i=0; i<from->nmtab; i++,m++)
		if(m->c){
			incref(m->c);
			lock(m->mnt);
			m->mnt->ref++;
			unlock(m->mnt);
		}

	to->nenv = from->nenv;
	ep = to->etab;
	for(i=0; i<from->nenv; i++,ep++){


@@ 233,3 220,25 @@ pgrpcpy(Pgrp *to, Pgrp *from)
	}
	unlock(from);
}

void
pgrpcpy(Pgrp *to, Pgrp *from)
{
	int i;
	Mtab *m;

	lock(from);
	memmove(to->user, from->user, NAMELEN);
	memmove(to->mtab, from->mtab, from->nmtab*sizeof(Mtab));
	to->nmtab = from->nmtab;
	m = to->mtab;
	for(i=0; i<from->nmtab; i++,m++)
		if(m->c){
			incref(m->c);
			lock(m->mnt);
			m->mnt->ref++;
			unlock(m->mnt);
		}

	unlock(from);
}

M port/portdat.h => port/portdat.h +9 -0
@@ 273,6 273,15 @@ struct Pgrp
	Envp	*etab;
};

enum					/* Argument to forkpgrp call */
{
	FPall 	  = 0,			/* Concession to back portablility */
	FPnote 	  = 1,
	FPnamespc = 2,
	FPenv	  = 4,
	FPclear	  = 8,
};

/*
 *  process memory segments
 */

M port/portfns.h => port/portfns.h +1 -0
@@ 42,6 42,7 @@ void	dumpqueues(void);
void	dumpregs(Ureg*);
void	dumpstack(void);
void	envpgclose(Env *);
void	envcpy(Pgrp*, Pgrp*);
int	eqchan(Chan*, Chan*, long);
int	eqqid(Qid, Qid);
void	error(int);

M port/sysproc.c => port/sysproc.c +19 -3
@@ 460,6 460,7 @@ syserrstr(ulong *arg)
long
sysforkpgrp(ulong *arg)
{
	int mask;
	Pgrp *pg;

	pg = newpgrp();


@@ 467,10 468,25 @@ sysforkpgrp(ulong *arg)
		closepgrp(pg);
		nexterror();
	}
	if(arg[0] == 0)

	mask = arg[0];
	if(mask == FPall)
		mask = FPnote|FPenv|FPnamespc;

	memmove(pg->user, u->p->pgrp->user, NAMELEN);

	if(mask & FPnamespc)
		pgrpcpy(pg, u->p->pgrp);
	else
		memmove(pg->user, u->p->pgrp->user, NAMELEN);

	if(mask & FPenv)
		envcpy(pg, u->p->pgrp);

	if((mask & FPnote) == 0) {
		u->nnote = 0;
		u->notified = 0;
		memset(u->note, 0, sizeof(u->note));
	}

	closepgrp(u->p->pgrp);
	u->p->pgrp = pg;
	return pg->pgrpid;