~kris/9p

9hist

735aed2cbbc5e84640319928996e54b62ed7e542 — David du Colombier 29 years ago 19bf053
Plan 9 from Bell Labs 1997-06-06
6 files changed, 23 insertions(+), 18 deletions(-)

M carrera/main.c
M pc/main.c
M port/devdup.c
M port/pgrp.c
M port/sysfile.c
M port/sysproc.c
M carrera/main.c => carrera/main.c +1 -4
@@ 357,10 357,7 @@ userinit(void)
	p->pgrp = newpgrp();
	p->egrp = smalloc(sizeof(Egrp));
	p->egrp->ref = 1;
	p->fgrp = smalloc(sizeof(Fgrp));
	p->fgrp->ref = 1;
	p->fgrp->fd = smalloc(DELTAFD*sizeof(Chan*));
	p->fgrp->nfd = DELTAFD;
	p->fgrp = dupfgrp(nil);
	p->rgrp = newrgrp();
	p->procmode = 0640;


M pc/main.c => pc/main.c +1 -4
@@ 232,10 232,7 @@ userinit(void)
	p->pgrp = newpgrp();
	p->egrp = smalloc(sizeof(Egrp));
	p->egrp->ref = 1;
	p->fgrp = smalloc(sizeof(Fgrp));
	p->fgrp->ref = 1;
	p->fgrp->fd = smalloc(DELTAFD*sizeof(Chan*));
	p->fgrp->nfd = DELTAFD;
	p->fgrp = dupfgrp(nil);
	p->rgrp = newrgrp();
	p->procmode = 0640;


M port/devdup.c => port/devdup.c +1 -1
@@ 13,7 13,7 @@ dupgen(Chan *c, Dirtab*, int, int s, Dir *dp)
	Chan *f;
	static int perm[] = { 0400, 0200, 0600, 0 };

	if(s >= fgrp->maxfd)
	if(s > fgrp->maxfd)
		return -1;
	if((f=fgrp->fd[s]) == 0)
		return 0;

M port/pgrp.c => port/pgrp.c +13 -2
@@ 167,15 167,26 @@ dupfgrp(Fgrp *f)
	int i;

	new = smalloc(sizeof(Fgrp));
	if(f == nil){
		new->fd = smalloc(DELTAFD*sizeof(Chan*));
		new->nfd = DELTAFD;
		new->ref = 1;
		return new;
	}

	lock(f);
	/* Make new fd list shorter if possible, preserving quantization */
	new->nfd = f->maxfd+1;
	i = new->nfd%DELTAFD;
	if(i != 0)
		new->nfd += DELTAFD - i;
	new->fd = smalloc(new->nfd*sizeof(Chan*));
	new->fd = malloc(new->nfd*sizeof(Chan*));
	if(new->fd == 0){
		unlock(f);
		error("no memory for fgrp");
	}
	new->ref = 1;

	lock(f);
	new->maxfd = f->maxfd;
	for(i = 0; i <= f->maxfd; i++) {
		if(c = f->fd[i]){

M port/sysfile.c => port/sysfile.c +4 -1
@@ 30,11 30,14 @@ newfd(Chan *c)
	 * of fid in 9P
	 */
	if(f->nfd >= 5000){
   Exhausted:
		unlock(f);
		exhausted("file descriptors");
		return -1;
	}
	newfd = smalloc((f->nfd+DELTAFD)*sizeof(Chan*));
	newfd = malloc((f->nfd+DELTAFD)*sizeof(Chan*));
	if(newfd == 0)
		goto Exhausted;
	oldfd = f->fd;
	memmove(newfd, oldfd, f->nfd*sizeof(Chan*));
	f->fd = newfd;

M port/sysproc.c => port/sysproc.c +3 -6
@@ 55,8 55,7 @@ sysrfork(ulong *arg)
		else
		if(flag & RFCFDG) {
			ofg = up->fgrp;
			up->fgrp = smalloc(sizeof(Fgrp));
			up->fgrp->ref = 1;
			up->fgrp = dupfgrp(nil);
			closefgrp(ofg);
		}
		if(flag & RFNOTEG)


@@ 105,10 104,8 @@ sysrfork(ulong *arg)
	if(flag & (RFFDG|RFCFDG)) {
		if(flag & RFFDG)
			p->fgrp = dupfgrp(up->fgrp);
		else {
			p->fgrp = smalloc(sizeof(Fgrp));
			p->fgrp->ref = 1;
		}
		else
			p->fgrp = dupfgrp(nil);
	}
	else {
		p->fgrp = up->fgrp;